[
  {
    "path": ".codecov.yml",
    "content": "comment: off\n\ncoverage:\n  status:\n    patch:\n      default:\n        target: 80%\n    project:\n      default:\n        target: auto\n"
  },
  {
    "path": ".eslintignore",
    "content": "!/*.js\n/tests/**/*.js\n!/tests/**/jsfmt.spec.js\n!/**/.eslintrc.js\n/test.js\n/dist/\n**/node_modules/**\n/website/static/lib/\n"
  },
  {
    "path": ".eslintrc.js",
    "content": "\"use strict\";\n\nmodule.exports = {\n  env: {\n    es6: true,\n    node: true\n  },\n  extends: [\"eslint:recommended\", \"plugin:react/recommended\"],\n  plugins: [\"prettier\", \"react\", \"import\"],\n  rules: {\n    curly: \"error\",\n    \"import/no-extraneous-dependencies\": [\n      \"error\",\n      { devDependencies: [\"tests*/**\", \"scripts/**\"] }\n    ],\n    \"no-console\": \"off\",\n    \"no-else-return\": \"error\",\n    \"no-inner-declarations\": \"error\",\n    \"no-unneeded-ternary\": \"error\",\n    \"no-useless-return\": \"error\",\n    \"no-var\": \"error\",\n    \"one-var\": [\"error\", \"never\"],\n    \"prefer-arrow-callback\": \"error\",\n    \"prefer-const\": \"error\",\n    \"prettier/prettier\": \"error\",\n    \"react/no-deprecated\": \"off\",\n    strict: \"error\",\n    \"symbol-description\": \"error\",\n    yoda: [\"error\", \"never\", { exceptRange: true }]\n  },\n  parserOptions: {\n    ecmaFeatures: {\n      jsx: true\n    }\n  }\n};\n"
  },
  {
    "path": ".flowconfig",
    "content": "[ignore]\n.*/tests/.*\n.*/node_modules/.*\n.*/dist/.*\n"
  },
  {
    "path": ".gitignore",
    "content": "/node_modules\nnpm-debug.log\n/bin/prettier-with-tabs.js\n/bin/prettier-spaces.js\n/errors\n/test.js\n/test.ts\n/test.css\n/.vscode\n/dist\n/website/node_modules\n.DS_Store\ncoverage\n"
  },
  {
    "path": ".ignore",
    "content": "docs/index.js\ndocs/parser-babylon.js\ndocs/parser-flow.js\ndocs/parser-postcss.js\ndocs/parser-typescript.js\ndist\n"
  },
  {
    "path": ".npmignore",
    "content": "yarn.lock\ntests\ntests_config\n"
  },
  {
    "path": ".pre-commit-hooks.yaml",
    "content": "-   id: prettier\n    name: prettier\n    entry: prettier --write\n    language: node\n    types: [javascript]\n"
  },
  {
    "path": ".travis.yml",
    "content": "---\nlanguage: node_js\nnode_js:\n  - 4\n  - stable\ncache:\n  yarn: true\n  directories:\n  - node_modules\nenv:\n  - NODE_ENV=development\n  - NODE_ENV=production\nmatrix:\n  allow_failures:\n    - env: NODE_ENV=production\n  fast_finish: true\ninstall:\n  - yarn install --production=false\nbefore_script:\n  - if [ \"${NODE_ENV}\" = \"production\" ]; then yarn build; fi\nscript:\n  - yarn lint\n  - AST_COMPARE=1 yarn test -- --runInBand\n  - if [ \"${NODE_ENV}\" = \"development\" ]; then yarn codecov; fi\ndeploy:\n  provider: script\n  script: website/deploy.sh\n  skip_cleanup: true\n  on:\n    branch: master\n    node: stable\n"
  },
  {
    "path": ".yarnrc",
    "content": "save-prefix \"\"\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# 1.5.3\n\n[link](https://github.com/jlongster/prettier/compare/1.5.2...1.5.3)\n\n* Force trailingComma option to \"none\" when parser is JSON (#2335)\n\n# 1.5.2\n\n[link](https://github.com/jlongster/prettier/compare/1.5.1...1.5.2)\n\n* Full printing support for GraphQL and various bug fixes\n* Fixes for range formatting for JSON and CSS (#2295, #2298)\n\n# 1.5.1\n\n[link](https://github.com/jlongster/prettier/compare/1.5.0...1.5.1)\n\n* Go back to babylon beta 13 (#2289)\n* Inline import('x') to avoid having trailing comma (#2288)\n\n# 1.5.0\n\n[link](https://github.com/jlongster/prettier/compare/1.4.4...1.5.0)\n\n* [Release Notes](https://github.com/prettier/prettier/releases/tag/1.5.0)\n\n# 1.4.4\n\n* Fix postcss, I forgot to re-run the build script :(\n\n# 1.4.3\n\n[link](https://github.com/jlongster/prettier/compare/1.4.2...1.4.3)\n\n* Fix support for node 4 (#1988)\n* Fix website on iOS Safari (#1970)\n\nFormatting change:\n* Position JSX whitespace (`{\" \"}`) at the end of lines (#1964)\n\nLots of small fixes, mainly for TypeScript.\n\n# 1.4.2\n\n[link](https://github.com/jlongster/prettier/compare/1.4.1...1.4.2)\n\n* fix(decorators): do not inline methods with decorators with babylon (#1934)\n* fix(typescript): print semi with inline interfaces/types (#1936)\n* fix(typescript): no semi after export default abstract class, fixes (#1937)\n* TypeScript: fix trailing comma in enum (#1938)\n\n# 1.4.1\n\n[link](https://github.com/jlongster/prettier/compare/1.4.0...1.4.1)\n\n* Lots of fixes for TypeScript and regressions from 1.4.0. If you are using 1.4.0, you should migrate to 1.4.1 asap ;)\n\n# 1.4.0\n\n[link](https://github.com/jlongster/prettier/compare/1.3.1...1.4.0)\n\n* [Release Notes](https://github.com/prettier/prettier/releases/tag/1.4.0)\n\n# 1.3.1\n\n* Respect template inline-ness (#1497)\n\n# 1.3.0\n\n[link](https://github.com/jlongster/prettier/compare/1.2.2...1.3.0)\n\n* add printer branches for some TypeScript nodes (#1331)\n* Skip trailing commas with FlowShorthandWithOneArg (#1364)\n* add TSLastTypeNode and TSIndexedAccessType (#1370)\n* add TSConstructorType (#1367)\n* fix do-while break (#1373)\n* Fix missing trailing commas on flow generics (#1381)\n* Add example of using yarn test with arguments (#1383)\n* Have --debug-check also run ast verification (#1337)\n* Fix empty line in block with EmptyStatement (#1375)\n* parent decides how to print type annotations (#1391)\n* add TSTypeOperator (#1396)\n* fix TSTypeReference not printing typeArguments (#1392)\n* add TSMappedType and TSTypeParameter (#1393)\n* fix TSFunctionType failing on TypeParameters (#1394)\n* add TSIntersectionType (#1395)\n* fix typeParameters printing TSFunctionType w/o breaking flow (#1397)\n* Fix optional flow parenthesis (#1357)\n* [experimental] Add linting step in test pipeline (#1172)\n* fix VariableDeclarator not printing type parameters (#1415)\n* add TSMethodSignature (#1416)\n* Add TSParameterProperty, TSAbstractClassDeclaration and TSAbstractMethodDefinition (#1410)\n* Inline nullable in flow generics (#1426)\n* fixed method 'check' error 'format' of undefined (#1424)\n* feat(typescript): add delcare modifier support for vars, classes and functions (#1436)\n* Allow flow declarations to break on StringLiteralTypeAnnotations (#1437)\n* Require '::a.b' to have a preceding ; in no-semi style (#1442)\n* Require '(a || b).c++' to have a preceding ; in no-semi style (#1443)\n* Upgrade flow parser to 0.45 (#1447)\n* Add supertype tests and add TSAbstractClassProperty (#1467)\n* Break class expression returned by arrow call (#1464)\n* update typescript snapshots to account for #1464 (#1470)\n* [WIP] add TSNamespaceExportDeclaration (#1459)\n* update yarn.lock (#1471)\n* [RFC] Do not indent calls with a single template literal argument (#873)\n* Proper indentation for template literals (#1385)\n* Add parenthesis for unusual nested ternaries (#1386)\n* Preserve inline comment as last argument (#1390)\n* Only add parenthesis on ternaries inside of arrow functions if doesn't break (#1450)\n* Fix windows line ending on template literals (#1439)\n* Add space around `=` for flow generics default arguments (#1476)\n* Don't break for unparenthesised single argument flow function (#1452)\n* Don't break on empty arrays and objects (#1440)\n* Do not break on [0] (#1441)\n* Reorder flow object props (#1451)\n* Break inline object first in function arguments (#1453)\n* Break inline object first in function arguments (#1453) (#1173)\n* Inline template literals as arrow body (#1485)\n\n# 1.2.2\n\n[link](https://github.com/jlongster/prettier/compare/1.2.1...1.2.2)\n\n* Only break for conditionals (#1350)\n\n# 1.2.1\n\n[link](https://github.com/jlongster/prettier/compare/1.2.0...1.2.1)\n\n* Fix duplicate comments in classes (#1349)\n\n# 1.2.0\n\n[link](https://github.com/jlongster/prettier/compare/1.1.0...1.2.0)\n\n* match jsx files in pre-commit hook (#1276)\n* Fix isPreviousLineEmpty on Windows (#1263)\n* Add --dev option to suggested install cmd (#1289)\n* Write out change CLI changes synchronously. Fixes #1287. (#1292)\n* Remove emoji part from lint-staged's name (#1302)\n* omit 'doc' key from options object before passing it to format() (#1299)\n* Skip globbing filenames with node-glob when the filename is not a glob (#1307)\n* FIX: more documentation for jetbrains (#1265)\n* Fix template literal comments (#1296)\n* Double quotes for option values in Readme file (#1314)\n* Do not print the sub-tree when using prettier-ignore (#1286)\n* Bail when traversing === groups (#1294)\n* Avoid breaking arguments for last arg expansion (#1305)\n* Add typescript as a valid parser value (#1318)\n* Add jestbrains filewatcher docs (#1310)\n* Add prettier_d to Related Projects (#1328)\n* Add parentheses for assignment as body of arrow (#1326)\n* Add information about Vim's other autocmd events (#1333)\n* add printer branch for TSFirstTypeNode (#1332)\n* Optimize `prettier --help` for humans (#1340)\n* Update link to @vjeux's React London presentation (#1330)\n* Improve regex printing (#1341)\n* Fix arrow function parenthesis with comments in flow (#1339)\n* Break if () if conditional inside breaks (#1344)\n* Don't inline paren at right of arguments (#1345)\n\n# 1.1.0\n\n[link](https://github.com/jlongster/prettier/compare/1.0.0...1.1.0)\n\n* Prettier 1.0 is the stabler release we've been waiting for (#1242)\n* fix small typo (#1255)\n* Fix : ReferenceError: err is not defined (#1254)\n* Document debugging strategies (#1253)\n* Do not inline member expressions as part of assignments (#1256)\n* Fix flow union params (#1251)\n* Use a whitelist instead of blacklist for member breaking (#1261)\n* Remove trailing whitespace (#1259)\n* Get rid of fixFaultyLocations code (#1252)\n* Fixing n.comments check in printer (#1239)\n* [WIP] no-semi comments (#1257)\n\n# 1.0.1\n\n* change semi default\n\n# 1.0.0\n\n[link](https://github.com/jlongster/prettier/compare/0.22.0...1.0.0)\n\n* See announcement blog post: [http://jlongster.com/prettier-1.0](http://jlongster.com/prettier-1.0)\n\n# 0.22.0\n\n[link](https://github.com/jlongster/prettier/compare/0.21.0...0.22.0)\n\n* Run 0.21.0 (#876)\n* Fix paren removal on UnionTypeAnnotation (#878)\n* Fix typo (#891)\n* Ensure no parens for JSX inside of an ArrayExpression (#895)\n* Fix object expression in arrow function expression (#897)\n* Fix unprinted comments in destructuring (#898)\n* Fix bug with importing empty type (#904)\n* Fix broken export comment (#899)\n* Add CLI Example to Readme (#909)\n* Fix 0.5e0 (#911)\n* Fix binary expression instanceof in arrow function expression (#913)\n* Improve readme CLI usage example (#910)\n* Do not break long it/test calls when template literal (#893)\n* Update lint-staged docs to use husky for less config. (#923)\n* Fix files with comments only (#813)\n* Update README.md (#928)\n* Fix binary op as body in arrow expression (#921)\n* cleanup needsParens (#935)\n* [JSX] Break if opening element breaks (#942)\n* Parenthesize function expressions in expression position (#941)\n* update the README to add a pre-commit hook (#944)\n* Fix #951: properly parenthesize ** expressions (#952)\n* [WIP] TypeScript Parser (#915)\n* Do not break long `describe` calls (#953)\n* Recursively find leading comments inside ReturnStatements (#955)\n* Fix `in` inside of a for in a nested way (#954)\n* Make comments around empty parenthesis be inside (#957)\n* Stabilize comment after object label (#958)\n* Inline BinaryExpressions inside JSXExpression (#965)\n* Only allow same-line arrow-less body for explicit nodes (#966)\n\n# 0.21.0\n\n[link](https://github.com/jlongster/prettier/compare/0.20.0...0.21.0)\n\n* [JSX] Break before and after jsx whitespace (#836)\n* re-run snapshot tests\n* Run prettier 0.20.0 (#835)\n* [JSX] Don't wrap JSX Elements in parentheses in {} (#845)\n* Fix comment after the last argument of a function (#856)\n* Fix travis build imag\n* Do not break require calls (#841)\n* Stabilize import as comments (#855)\n* Fix jsx expression comment that break (#852)\n* Inline last arg function arguments (#847)\n* Keep parenthesis on export default function (#844)\n* Inline short expressions for boolean operators too (#826)\n* Introduce -l option (#854)\n* Add parenthesis around assignments (#862)\n* Do not put \\n after label (#860)\n* Fix comment for `call( // comment` (#858)\n* Do not break long it calls (#842)\n* Fix flow union comments (#853)\n\n# 0.20.0\n\n[link](https://github.com/jlongster/prettier/compare/0.19.0...0.20.0)\n\n* Fix extra parens for update expressions (#796)\n* Fix empty options (#803)\n* Eagerly evaluate `ifBreak` when processing template literals (fixes #795\n* Fix function declaration params comments (#802)\n* Update flow to 0.40 (#808)\n* Correct link for travis\n* Fix function call args (#809)\n* Properly support `do` (#811)\n* Do not put parenthesis around not named default export (#819)\n* Adds another preset to related projects (#820)\n* Fix trailing commas in docs (#825)\n* Put short body of arrow functions on the same line (#829)\n* Preserve new lines for comments after `=` (#830)\n* Fix indentation of a merged group (#828)\n* Migrate class comments to the beginning (#831)\n* Update list of related projects (#833)\n* Allow breaking for logical expressions in member chains (#827)\n\n# 0.19.0\n\n[link](https://github.com/jlongster/prettier/compare/0.18.0...0.19.0)\n\n* docs(README): use yarn add for consistency (#734)\n* Make trailing-comma option support 2 different modes (#641)\n* Update README with valid trailingComma options\n* Fix await ternary parenthesis (#740)\n* Fix missing dangling comment in exports (#741)\n* Fix missing dangling comments in arrays (#744)\n* Remove extra parenthesis around await inside of unary expression (#745)\n* Fix missing dangling comments in for loop (#742)\n* Add note about trailingComma option in versions 0.18.0 and below\n* Add missing explanatory comment in ForStatement case (#748)\n* Fix leading & operators in flow types (#738)\n* Fix missing comments in assignment pattern (#704)\n* Correctly place trailing comments in conditionals (#754)\n* Use double quotes in script wildcards to support windows `cmd.exe`. (#761)\n* Upgrade to Jest 19 (#762)\n* Upgrade to Jest 19.0.1 (#779)\n* Remove extra parens around ternary arguments of a new call (#776)\n* Do not attach comments to EmptyStatements in try/catch (#763)\n* Bump babylon & add test for async func decl (#790)\n* Add `this` for Member factory whitelist and remove softline (#782)\n* Do not expand empty catch (#783)\n* Group [0] at the end of the previous chain instead of beginning of next one (#784)\n* Do not format template literals (#749)\n* Revert babylon bump (#792)\n* Do not put trailing commas for function declaration in es5 mode (#791)\n* [WIP] Fix comments in template literals (#643)\n* Introduce line-suffix-boundary (#750)\n* [RFC] Add parenthesis around && inside of || (#780)\n* Fix tests on node 4\n\n# 0.18.0\n\n[link](https://github.com/jlongster/prettier/compare/0.17.0...0.18.0)\n\n* fix --debug-check\n* [JSX] Don't add newline following newline (#690)\n* [Docs] Use replaceState API when demo code changes (#710)\n* Do not inline new as last argument (#705)\n* Inline objects & arrays as right part of a boolean expression (#692)\n* [RFC] Remove parenthesis object special case (#689)\n* Ensure importKind is printed (#718)\n* [Docs]: update Readme to reference VS extension (#720)\n* docs: Add pre-commit hook with 🚫💩 lint-staged section to the README (#714)\n* [RFC] Preserve new lines between array elements (#707)\n* Do not put \\n inside of empty object method bodies (#706)\n* Align boolean inside of arrow functions (#691)\n* Fix trailing new lines preservation (#724)\n* Unified Split\n\n# 0.17.1\n\n* Use `readline` api to manipulate `process.stdout` output. (#687)\n\n# 0.17.0\n\n[link](https://github.com/jlongster/prettier/compare/0.16.0...0.17.0)\n\n* [JSX] Fix spurious newline (fixes #614) (#628)\n* Add --debug-check cli option (#627)\n* Remove last trailing line for directives-only files (#609)\n* Expand vim instructions\n* Fix formatting in readme\n* Update snapshots\n* Preserve empty line before last comment (#594)\n* test on current release of node.js (#595)\n* [JSX] jsx-whitespace breaks with parent (fixes #622) (#626)\n* Log filename with [update] or [ignore] flags during `--write` process. (#584)\n* Do not indent binary expressions inside of if (#604)\n* Put short elements at right of single binary expression on same line (#605)\n* Run prettier 0.16.0 on the codebase (#631)\n* Preserve blank lines inside of objects (#606)\n* fix typo in JetBrains External Tool config readme (#679)\n* Fix dangling comments for arrays (#665)\n* Print line-suffix in --debug-print-doc (#676)\n* Avoid unneeded parenthesis for colon with comments (#673)\n* Stabilize comments inside of if/then/else before { (#672)\n* Soft break the first member of a chain (#667)\n* Stabilize comments inside of ternaries (#666)\n* Fix trailing commas with a trailing comment (#664)\n* Fix Flow union type annotations indentation (#650)\n* Ensure that all comments are printed (#571)\n* Properly support member chains comments (#668)\n* [WIP] Fix Flow DeclareTypeAlias (#669)\n* Add option for putting > on the last line in jsx (#661)\n* Always put a hardline before dangling comment (#675)\n* Fix comments in return statement argument (#657)\n* [RFC] Introduce prettier-ignore-next (#671)\n\n# 0.16.0\n\n[link](https://github.com/jlongster/prettier/compare/0.15.0...0.16.0)\n\n* Revert \"Print \\x and \\u escapes in strings and regexes lowercase (#522)\n* Fix ternary indent bug (#577)\n* jsx parentheses fix (#580)\n* Run prettier on 0.15.0 (#558)\n* Add parenthesis around single argument arrow if comments (#573)\n* Use breakParent inside of last arrow expansion (#559)\n* Support dangling comments in ClassBody (#570)\n* Make all the member expressions but the last one part of the first group (#589)\n* Break long imports (#590)\n* Remove the concept of globalPrecedingNode (#561)\n* Remove test.js and put it back in the gitignore\n* Fix use strict as expression statement (#602)\n* Use arrow function when inputted that way for flow objects (#608)\n* Better support try/catch comments (#607)\n* Print CallExpression comments inside of memberChain (#600)\n* Do not attach comments to EmptyStatement (#599)\n* Fix files with only comments on the flow parser (#598)\n* Remove first line special case (#597)\n* Fix single indented JSX comment (#596)\n* Print dangling on ast on all the paths\n\n# 0.15.0\n\n[link](https://github.com/jlongster/prettier/compare/0.14.1...0.15.0)\n\n* Fix syntax error in empty object with dangling comment (#533)\n* Fix closing call expression commented out (#530)\n* Update `bracketSpacing` comment to say it's about {} (#529)\n* Add 0.14.1 to CHANGELOG (#525)\n* Print \\x and \\u escapes in strings and regexes lowercase (#522)\n* Fix Jetbrains example screenshot url. (#534)\n* Preserve next line with trailing comment (#535)\n* Break nested calls (#517)\n* Update snapshot tests from conflicting PRs\n* Reimplement MemberExpression printing (#469)\n* Remove spurious test.js\n* Fix small typo on Jetbrains section (#552)\n* [JSX] Handle non-breaking space (#557)\n* Make comments between if & else to look good (#544)\n* Whitelist UnaryExpression for parentless objects (#545)\n* Make comments inside of MemberExpression look good (#556)\n\n# 0.14.1\n\n[link](https://github.com/jlongster/prettier/compare/0.14.0...0.14.1)\n\n* Fix range for object newline detection (#520)\n  * a bugfix for \"Keep expanded objects expanded\" (#495)\n\n# 0.14.0\n\n[link](https://github.com/jlongster/prettier/compare/0.13.0...0.14.0)\n\n* Only write to files if the change (#511)\n* Remove extra group when printing object values (#502)\n* Add documentation for JetBrains products. (#509)\n* Don't print trailing commas for object destructuring and rest (#512)\n* Mention eslint-config-prettier (#516)\n* [RFC] Keep expanded objects expanded (#495)\n* Do not always put an empty lines after directives (#505)\n* Print numbers in a uniform way (#498)\n\n# 0.13.0\n\n[link](https://github.com/jlongster/prettier/compare/0.12.0...0.13.0)\n\n* Simplify arrow functions that use blocks (#496)\n* Properly print comments for BinaryExpression (#494)\n* Preserve empty line after comment (#493)\n* [JSX] Handle each line of text separately (#455)\n* Proper support for dangling comments (#492)\n\n# 0.12.0\n\n[link](https://github.com/jlongster/prettier/compare/0.11.0...0.12.0)\n\n* [WIP] Add rationale document (#372)\n* Proper parenthesis for yield and await in conditional (#436)\n* Don't print double newlines at EOF to stdout (#437)\n* Explain the `--color` option in a comment (#434)\n* Validate user-provided config with jest-validate (#301)\n* Propagate breaks upwards automatically, introduce `breakParent` (#440)\n* Fix typo in variable name (#441)\n* Refactor traversal (#442)\n* Do not put a newline on empty `{}` for functions (#447)\n* Better error message for assertDoc (#449)\n* Remove `multilineGroup` (#450)\n* Ability to break on `:` for objects (#314)\n* Update snapshots\n* [RFC] Do not put spacing inside of arrays with bracketSpacing (#446)\n* Fix integer CLI arguments (#452)\n* Move tests around (#454)\n* Update package.json, use ast-types 0.9.4 (#453)\n* Update lockfile\n* Support printing import(\"a\") (#458)\n* Explain that you can pass options to the spec runner (#460)\n* Fix spurious whitespace (#463)\n* Preserve new lines after directives (#464)\n* Put decorators on the same line (#459)\n* docs: add related projects (#456)\n* Add break points for class declaration (#466)\n* Added parens around in operator in for loops 🚀. (#468)\n* CLI improvements (#478)\n* [RFC] Hug Conditionals in JSX (#473)\n* Refactor comment algorithm and improve newline/spaces detection (#482)\n* Indent ternaries (#484)\n* Indent computed member (#471)\n* Maintain windows line ending (#472)\n* Don't break up JSXOpeningElement if it only has a single text (#488)\n* Add CallExpression to the last argument expansion whitelist (#470)\n* Mention eslint-plugin-prettier in Related Projects (#490)\n* Stop using conditionalGroup inside of UnionTypeAnnotation (#491)\n\n# 0.11.0\n\n[link](https://github.com/jlongster/prettier/compare/0.0.10...0.11.0)\n\nNow using minor versions instead of patch versions for the releases.\n\n * Swap quotes (#355)\n * Drop jsesc (#357)\n * Use a Symbol instead of the private dep (#359)\n * Add parens for default export FunctionExpressions (#345)\n * Fix export extension output (#361)\n * Exit with an error if an unknown CLI option is passed (#365)\n * Warn if using deprecated CLI options (#364)\n * s/jscodefmt/prettier/ (#370)\n * Fix CLI options (#369)\n * Fix some parens cases for UpdateExpressions (#381)\n * Output strings with the minimum amount of escaped quotes (#390)\n * Ignore EmptyStatement inside of switch case (#391)\n * Support multiple standalones in import (#389)\n * Fix missing semi-colon in for loop and var body (#388)\n * Fix empty labels (#383)\n * Fix forced trailing comma (#382)\n * Empty switch should not have an empty line (#384)\n * add formatAST() for formatting ASTs directly (#393)\n * Fix class extends parenthesis (#396)\n * Fix class inside of binary expression missing parenthesis (#397)\n * Fix parenthesis in object as left-hand-side of template (#398)\n * Remove unneeded parens for FunctionExpression inside LogicalExpression (#399)\n * Remove trailing comma for array destructuring with rest (#400)\n * Fix +++x (#401)\n * Also do the class extend parenthesis for class expressions (#403)\n * Fix various parenthesis issues on the left side of template (#404)\n * Fix in inside of the first group of a for (#406)\n * Add parenthesis for arrow function inside of ternary (#408)\n * Add parenthesis around class expression when left side of call expression (#409)\n * Ensure computed method names don't lose quotes (#419)\n * Add parenthesis for yield inside of a conditional (#418)\n * Add parenthesis around assignment for arrow function body (#422)\n * Add parenthesis around export default assignments (#423)\n * Add parenthesis for class expression on left of member expression (#421)\n * Fix missing parens around object in MemberExpression (#424)\n * Re-run snapshot tests\n * Workaround flow bug around trailing comma (#427)\n * Add parenthesis when class expressions are left of a ternary (#428)\n * Revert \"Workaround flow bug around trailing comma\" (#429)\n * Update commands.md (#430)\n * Improve vim integration section (#416)\n * Add glob support to the CLI (#363)\n * Use babel-code-frame for syntax errors (#367)\n * Update yarn.lock\n\n# 0.0.10\n\n[link](https://github.com/jlongster/prettier/compare/0.0.9...0.0.10)\n\n* Add description to package.json (#320)\n* Fix crash for single rest on class declaration (#315)\n* Add canonical link to Prettier SublimeText package. (#318)\n* Properly escape JSXText (#329)\n* Hug objects and arrays inside of JSXExpressionContainer (#213)\n* Add quotes around unicode keys in flow parser (#328)\n* Add tests for comments (#330)\n* Print dangling comments in blocks (#331)\n* Remove Printer module in favor of single function (#333)\n* Split pp.js into doc-{printer,builders,utils}.js (#334)\n* Fix node 4 (#336)\n* Remove unused functions from recast (#337)\n* Kill fromString (#335)\n* Extract parser.js (#338)\n* Normalize exports (#339)\n* Refactor index.js (#340)\n* Add semicolon to more default exports (#343)\n* Introduce --parser/parser option and deprecate --flow-parser/useFlowParser (#342)\n* Remove parens around AwaitExpression in ternary (#346)\n* Indent while test the same way as if test (#352)\n* Add debugging support for doc IR (#347)\n\n# 0.0.9\n\n[link](https://github.com/jlongster/prettier/compare/0.0.8...0.0.9)\n\n* Workaround flow bug parsing astral unicode characters (#277)\n* Allow specifying the major mode that `defun-before-save` will use. (#276\n* Fix space missing before `,` on export with bracket spacing off (#278)\n* Fix space missing before `,` on import with bracket spacing off (#279)\n* Add newline after shebang if necessary. (#215)\n* Remove +1 from newline detection (#261)\n* Fix path when printing member chains so parens work properly (fixes #243\n* Ensure parens on NewExpression with function callee (#282)\n* Fix missing semi when default exporting CallExpression (#287)\n* Workaround flow parser bug with spread in arrays (#285)\n* Update flow-parser to 0.38 (#290)\n* Allow customizing args sent to prettier-command (#289)\n* Do not output trailing commas with rest arguments (#283)\n* Use exact versions in package.json (#291)\n* Use js native String.repeat() (#293)\n* Handle additional export default parens cases (#298)\n* Fix parens around anonymous functions (#297)\n* Introduce second argument to ifBreak (#302)\n* Fix bracketSpacing typo in tests (#299)\n* Remove unused variable (#304)\n* Fix trailing whitespace (#300)\n* add version flag (#294)\n* Add --run-in-band to travis (#306)\n* [JSX] Split elements on newlines and preserve whitespace (w/@yamafaktory) (#234)\n* Print binary and logical expressions in a nicer format (#262)\n\n# 0.0.8\n\n[link](https://github.com/jlongster/prettier/compare/e447971...0192d58)\n\n* Fix await parenthesis (#185)\n* Add note about Sublime Test github issue in readme\n* Remove legacy Recast code and simplify API. (#191)\n* Don't break to new line if logical/loop statements are without brackets. (#194)\n* Fix parenthesis for UpdateExpression (#198)\n* Fix directives printing for empty functions (#199)\n* Fix key quotes omission for flow parser (#203)\n* Fix comma when an arrow function with no arguments breaks (#210)\n* Last argument expansion works for arrow functions that return JSX (#211)\n* Remove faulty location check on template literals that throws in Nuclide (#218)\n* Add flow parser experimental options (#221)\n* Fix empty exports (#225)\n* Fix cases of missing parens with NewExpression (#230)\n* Fix issue with ArrowFunctionExpression parens (#236)\n* Add npm version badge (#240)\n* Consolidate badges in readme\n* Fix parens issue with nested UrnaryExpressions (#237)\n* Escape strings using jsesc (#229)\n* Add newline for empty blocks {} (#205)\n* Fix empty export with from clause (#248)\n* Fix missing parenthesis for typeof and arrow functions (#249)\n* Fix FunctionExpression parens issues (#250)\n* Fix last element of an array being null (#232)\n* Make sure empty for loops generate valid code (#224)\n* Fix parens for functions inside TaggedTemplateExpression (#259)\n* Preserve the way numbers were written (#257)\n\n# 0.0.7\n\n[link](https://github.com/jlongster/prettier/compare/7e31610...6f5df0e2b6b7db252e28ce80ebc54814fdc61497)\n\n* Update live editor to 0.0.6\n* Adds various prettier-browser changes (#175)\n* Fix `[(0)]` (#179)\n* Do not advance for forward skipSpaces (#176)\n* Fix windows line-endings (#177)\n* add license to package.json (#178)\n* Fix exponent in babylon (#181)\n* Make `declare type` consistent between babylon and flow (#183)\n* Fix DeclareInterface (#182)\n* Change test to workaround babylon bug (#184)\n\n# 0.0.6\n\n[link](https://github.com/jlongster/prettier/compare/faed09ceea32fcdd58b525aa09b880afb9fa55b7...3af7da5748d64efaed781104ec198924c8c369f9)\n\n* Format property names consistently\n* remove node 0.10 from travis config, add travis badge to readme\n* Update snapshots\n* chore: link prettier package to its github project\n* add gitter badge to readme\n* add instructions for Visual Studio plugin\n* Do not unquote string properties\n* Add prettier-browser\n* v0.0.5 -- Accidentally didn't push this commit out before others landed; 0.0.5 is actually based on commit faed09ceea32fcdd58b525aa09b880afb9fa55b7\n* update yarn.lock\n* remove recast (not used)\n* Always use double quotes for JSX and properly escape\n* remove unused recast ref\n* Fix typo in README.\n* Support type annotation for rest argument on babylon parser\n* Use `setq' instead of `infc' and `decf'\n* Add title and encoding to the REPL\n* Fix old name reference in tests_config\n* Minimize string escapes\n* Support method generics on babylon parser\n* Break long `exports` into multiple lines.\n* Use group instead of conditionalGroup\n* Fix misprinting of computed properties in method chains. (#157)\n* treat shebang outside of parsing (#137)\n* Break multiline imports (#167)\n* Do not put spaces on empty for loop (#169)\n* Add trailing comma support for multiline exports (#168)\n* Update run_spec to support options\n* Add tests for bracketSpacing option\n* Add tests for quotes option\n* Add tests for tabWiths option\n* Add tests for trailingComma option\n* Fix for Node 4\n* Add test for shebang and move to index.js (#170)\n* Numeric literal callees should keep parens (#141)\n* Remove leftover `arrowParensAlways` option (#171)\n* Wrap Stateless JSX Arrow Functions and Assignment in Parens (fixes part of #73)\n* Break JSXOpeningElement between attributes (fixes #15)\n* JSX maintains spaces that matter (fixes #30 and thus part of #73)\n* Multiline JSX opening tag breaks children out too (for #73)\n* Add regression tests for long JSX Expression contents\n* include index.js in format:all script (#132)\n* Wrap ForStatement in a block for const decls (#172)\n* Reprint all the files!\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to Prettier\n\nTo get up and running, install the dependencies and run the tests:\n\n```\nyarn\nyarn lint\nyarn test\n```\n\nHere's what you need to know about the tests:\n\n* The tests uses [Jest](https://facebook.github.io/jest/) snapshots.\n* You can make changes and run `jest -u` (or `yarn test -- -u`) to update the\n  snapshots. Then run `git diff` to take a look at what changed. Always update\n  the snapshots when opening a PR.\n* You can run `AST_COMPARE=1 jest` for a more robust test run. That formats each\n  file, re-parses it, and compares the new AST with the original one and makes\n  sure they are semantically equivalent.\n* Each test folder has a `jsfmt.spec.js` that runs the tests. Normally you can\n  just put `run_spec(__dirname);` there. You can also pass options and\n  additional parsers, like this:\n  `run_spec(__dirname, { trailingComma: \"es5\" }, [\"babylon\"]);`\n* `tests/flow/` contains the Flow test suite, and is not supposed to be edited\n  by hand. To update it, clone the Flow repo next to the Prettier repo and run:\n  `node scripts/sync-flow-tests.js ../flow/tests/`.\n* If you would like to debug prettier locally, you can either debug it in node\n  or the browser. The easiest way to debug it in the browser is to run the\n  interactive `docs` REPL locally. The easiest way to debug it in node, is to\n  create a local test file and run it in an editor like VS Code.\n\nRun `yarn lint -- --fix` to automatically format files.\n\nIf you can, take look at [commands.md](commands.md) and check out [Wadler's\npaper](http://homepages.inf.ed.ac.uk/wadler/papers/prettier/prettier.pdf) to\nunderstand how Prettier works.\n"
  },
  {
    "path": "LICENSE",
    "content": "Copyright 2017 James Long\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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."
  },
  {
    "path": "README.md",
    "content": "# Prettier Miscellaneous\n\n[![Gitter](https://badges.gitter.im/gitterHQ/gitter.svg)](https://gitter.im/jlongster/prettier)\n[![Build Status](https://travis-ci.org/arijs/prettier-miscellaneous.svg?branch=master)](https://travis-ci.org/arijs/prettier-miscellaneous)\n[![CircleCI Status](https://circleci.com/gh/arijs/prettier-miscellaneous.svg?style=shield&circle-token=5b135ff8817790a20e0eb1c5853752b931bc42c0)](https://circleci.com/gh/arijs/prettier-miscellaneous)\n[![Codecov](https://img.shields.io/codecov/c/github/arijs/prettier-miscellaneous.svg)](https://codecov.io/gh/arijs/prettier-miscellaneous)\n[![NPM version](https://img.shields.io/npm/v/prettier-miscellaneous.svg)](https://www.npmjs.com/package/prettier-miscellaneous)\n[![styled with prettier](https://img.shields.io/badge/styled_with-prettier_misc-ff69b4.svg)](https://github.com/arijs/prettier-miscellaneous)\n\n> # CONFIGURATION WELCOME\n>\n> This is a fork of [prettier/prettier](https://github.com/prettier/prettier), with a goal of supporting additional options not picked up by official Prettier.\n>\n> If you want to add an option to Prettier Miscellaneous, please send a PR! 😃\n>\n> ![Happyness](https://i.redd.it/p63sznfyu38y.jpg)\n\nPrettier is an opinionated code formatter with support for:\n* JavaScript, including [ES2017](https://github.com/tc39/proposals/blob/master/finished-proposals.md)\n* [JSX](https://facebook.github.io/jsx/)\n* [Flow](https://flow.org/)\n* [TypeScript](https://www.typescriptlang.org/)\n* CSS, [LESS](http://lesscss.org/), and [SCSS](http://sass-lang.com)\n* [JSON](http://json.org/)\n* [GraphQL](http://graphql.org/)\n\nIt removes all original styling[\\*](#styling-footnote) and ensures that all outputted code\nconforms to a consistent style. (See this [blog post](http://jlongster.com/A-Prettier-Formatter))\n\n<details>\n<summary><strong>Table of Contents</strong></summary>\n\n* [What does Prettier do?](#what-does-prettier-do)\n* [Why Prettier?](#why-prettier)\n  + [Building and enforcing a style guide](#building-and-enforcing-a-style-guide)\n  + [Helping Newcomers](#helping-newcomers)\n  + [Writing code](#writing-code)\n  + [Easy to adopt](#easy-to-adopt)\n  + [Clean up an existing codebase](#clean-up-an-existing-codebase)\n  + [Ride the hype train](#ride-the-hype-train)\n* [How does it compare to ESLint (or TSLint, stylelint...)?](#how-does-it-compare-to-eslint-or-tslint-stylelint)\n* [Usage](#usage)\n  + [CLI](#cli)\n  + [ESLint](#eslint)\n  + [Pre-commit Hook](#pre-commit-hook)\n  + [API](#api)\n  + [Excluding code from formatting](#excluding-code-from-formatting)\n* [Options](#options)\n  + [Print Width](#print-width)\n  + [Tab Width](#tab-width)\n  + [Tabs](#tabs)\n  + [Semicolons](#semicolons)\n  + [Quotes](#quotes)\n  + [Trailing Commas](#trailing-commas)\n  + [Bracket Spacing](#bracket-spacing)\n  + [JSX Brackets](#jsx-brackets)\n  + [Range](#range)\n  + [Parser](#parser)\n  + [Filepath](#filepath)\n* [Configuration File](#configuration-file)\n  + [Basic Configuration](#basic-configuration)\n  + [Configuration Overrides](#configuration-overrides)\n  + [Configuration Schema](#configuration-schema)\n* [Editor Integration](#editor-integration)\n  + [Atom](#atom)\n  + [Emacs](#emacs)\n  + [Vim](#vim)\n  + [Visual Studio Code](#visual-studio-code)\n  + [Visual Studio](#visual-studio)\n  + [Sublime Text](#sublime-text)\n  + [JetBrains WebStorm, PHPStorm, PyCharm...](#jetbrains-webstorm-phpstorm-pycharm)\n* [Language Support](#language-support)\n* [Related Projects](#related-projects)\n* [Technical Details](#technical-details)\n* [Badge](#badge)\n* [Contributing](#contributing)\n</details>\n\n--------------------------------------------------------------------------------\n\n## What does Prettier do?\n\nPrettier takes your code and reprints it from scratch by taking the line length into account.\n\nFor example, take the following code:\n\n```js\nfoo(arg1, arg2, arg3, arg4);\n```\n\nIt fits in a single line so it's going to stay as is. However, we've all run into this situation:\n\n```js\nfoo(reallyLongArg(), omgSoManyParameters(), IShouldRefactorThis(), isThereSeriouslyAnotherOne());\n```\n\nSuddenly our previous format for calling function breaks down because this is too long. Prettier is going to do the painstaking work of reprinting it like that for you:\n\n```js\nfoo(\n  reallyLongArg(),\n  omgSoManyParameters(),\n  IShouldRefactorThis(),\n  isThereSeriouslyAnotherOne()\n);\n```\n\nPrettier enforces a consistent code **style** (i.e. code formatting that won't affect the AST) across your entire codebase because it disregards the original styling[\\*](#styling-footnote) by parsing it away and re-printing the parsed AST with its own rules that take the maximum line length\ninto account, wrapping code when necessary.\n\n<a href=\"#styling-footnote\" name=\"styling-footnote\">\\*</a>_Well actually, some\noriginal styling is preserved when practical—see [empty lines] and [multi-line\nobjects]._\n\n[empty lines]:Rationale.md#empty-lines\n[multi-line objects]:Rationale.md#multi-line-objects\n\nIf you want to learn more, these two conference talks are great introductions:\n\n<a href=\"https://www.youtube.com/watch?v=hkfBvpEfWdA\"><img width=\"298\" src=\"https://cloud.githubusercontent.com/assets/197597/24886367/dda8a6f0-1e08-11e7-865b-22492450f10f.png\"></a> <a href=\"https://www.youtube.com/watch?v=0Q4kUNx85_4\"><img width=\"298\" src=\"https://cloud.githubusercontent.com/assets/197597/24886368/ddacd6f8-1e08-11e7-806a-9febd23cbf47.png\"></a>\n\n\n## Why Prettier?\n\n### Building and enforcing a style guide\n\nBy far the biggest reason for adopting Prettier is to stop all the on-going debates over styles. It is generally accepted that having a common style guide is valuable for a project and team but getting there is a very painful and unrewarding process. People get very emotional around particular ways of writing code and nobody likes spending time writing and receiving nits.\n- “We want to free mental threads and end discussions around style. While sometimes fruitful, these discussions are for the most part wasteful.”\n- “Literally had an engineer go through a huge effort of cleaning up all of our code because we were debating ternary style for the longest time and were inconsistent about it. It was dumb, but it was a weird on-going \"great debate\" that wasted lots of little back and forth bits. It's far easier for us all to agree now: just run Prettier, and go with that style.”\n- “Getting tired telling people how to style their product code.”\n- “Our top reason was to stop wasting our time debating style nits.”\n- “Having a githook set up has reduced the amount of style issues in PRs that result in broken builds due to ESLint rules or things I have to nit-pick or clean up later.”\n- “I don't want anybody to nitpick any other person ever again.”\n- “It reminds me of how Steve Jobs used to wear the same clothes every day because he has a million decisions to make and he didn't want to be bothered to make trivial ones like picking out clothes. I think Prettier is like that.”\n\n### Helping Newcomers\n\nPrettier is usually introduced by people with experience in the current codebase and JavaScript but the people that disproportionally benefit from it are newcomers to the codebase. One may think that it's only useful for people with very limited programming experience, but we've seen it quicken the ramp up time from experienced engineers joining the company, as they likely used a different coding style before, and developers coming from a different programming language.\n- “My motivations for using Prettier are: appearing that I know how to write JavaScript well.”\n- “I always put spaces in the wrong place, now I don't have to worry about it anymore.”\n- “When you're a beginner you're making a lot of mistakes caused by the syntax. Thanks to Prettier, you can reduce these mistakes and save a lot of time to focus on what really matters.”\n- “As a teacher, I will also tell to my students to install Prettier to help them to learn the JS syntax and have readable files.”\n\n### Writing code\n\nWhat usually happens once people are using Prettier is that they realize that they actually spend a lot of time and mental energy formatting their code. With Prettier editor integration, you can just press that magic key binding and poof, the code is formatted. This is an eye opening experience if anything else.\n- “I want to write code. Not spend cycles on formatting.”\n- “It removed 5% that sucks in our daily life - aka formatting”\n- “We're in 2017 and it's still painful to break a call into multiple lines when you happen to add an argument that makes it go over the 80 columns limit :(“\n\n### Easy to adopt\n\nWe've worked very hard to use the least controversial coding styles, went through many rounds of fixing all the edge cases and polished the getting started experience. When you're ready to push Prettier into your codebase, not only should it be painless for you to do it technically but the newly formatted codebase should not generate major controversy and be accepted painlessly by your co-workers.\n- “It's low overhead. We were able to throw Prettier at very different kinds of repos without much work.”\n- “It's been mostly bug free. Had there been major styling issues during the course of implementation we would have been wary about throwing this at our JS codebase. I'm happy to say that's not the case.”\n- “Everyone runs it as part of their pre commit scripts, a couple of us use the editor on save extensions as well.”\n- “It's fast, against one of our larger JS codebases we were able to run Prettier in under 13 seconds.”\n- “The biggest benefit for Prettier for us was being able to format the entire code base at once.”\n\n### Clean up an existing codebase\n\nSince coming up with a coding style and enforcing it is a big undertaking, it often slips through the cracks and you are left working on inconsistent codebases. Running Prettier in this case is a quick win, the codebase is now uniform and easier to read without spending hardly any time.\n- “Take a look at the code :) I just need to restore sanity.”\n- “We inherited a ~2000 module ES6 code base, developed by 20 different developers over 18 months, in a global team. Felt like such a win without much research.\n\n### Ride the hype train\n\nPurely technical aspects of the projects aren't the only thing people look into when choosing to adopt Prettier. Who built and uses it and how quickly it spreads through the community has a non-trivial impact.\n- “The amazing thing, for me, is: 1) Announced 2 months ago. 2) Already adopted by, it seems, every major JS project. 3) 7000 stars, 100,000 npm downloads/mo”\n- “Was built by the same people as React & React Native.”\n- “I like to be part of the hot new things.”\n- “Because soon enough people are gonna ask for it.”\n\nA few of the [many projects](https://www.npmjs.com/browse/depended/prettier) using Prettier:\n\n<table>\n<tr>\n<td><p align=\"center\"><a href=\"https://facebook.github.io/react/\"><img src=\"website/static/images/react-200x100.png\" alt=\"React\" width=\"200\" height=\"100\"><br>React</a></p></td>\n<td><p align=\"center\"><a href=\"https://facebook.github.io/jest/\"><img src=\"website/static/images/jest-200x100.png\" alt=\"Jest\" width=\"200\" height=\"100\"><br>Jest</a></p></td>\n<td><p align=\"center\"><a href=\"https://yarnpkg.com\"><img src=\"website/static/images/yarn-200x100.png\" alt=\"Yarn\" width=\"200\" height=\"100\"><br>Yarn</a></p></td>\n</tr>\n<tr>\n<td><p align=\"center\"><a href=\"https://babeljs.io/\"><img src=\"website/static/images/babel-200x100.png\" alt=\"Babel\" width=\"200\" height=\"100\"><br>Babel</a></p></td>\n<td><p align=\"center\"><a href=\"https://zeit.co/\"><img src=\"website/static/images/zeit-200x100.png\" alt=\"Zeit\" width=\"200\" height=\"100\"><br>Zeit</a></p></td>\n<td><p align=\"center\"><a href=\"https://webpack.js.org/api/cli/\"><img src=\"website/static/images/webpack-200x100.png\" alt=\"Webpack-cli\" width=\"200\" height=\"100\"><br>Webpack-cli</a></p></td>\n</tr>\n</table>\n\n\n## How does it compare to ESLint (or TSLint, stylelint...)?\n\nLinters have two categories of rules:\n\n**Formatting rules**: eg: [max-len](http://eslint.org/docs/rules/max-len), [no-mixed-spaces-and-tabs](http://eslint.org/docs/rules/no-mixed-spaces-and-tabs), [keyword-spacing](http://eslint.org/docs/rules/keyword-spacing), [comma-style](http://eslint.org/docs/rules/comma-style)...\n\nPrettier alleviates the need for this whole category of rules! Prettier is going to reprint the entire program from scratch in a consistent way, so it's not possible for the programmer to make a mistake there anymore :)\n\n**Code-quality rules**: eg [no-unused-vars](http://eslint.org/docs/rules/no-unused-vars), [no-extra-bind](http://eslint.org/docs/rules/no-extra-bind), [no-implicit-globals](http://eslint.org/docs/rules/no-implicit-globals), [prefer-promise-reject-errors](http://eslint.org/docs/rules/prefer-promise-reject-errors)...\n\nPrettier does nothing to help with those kind of rules. They are also the most important ones provided by linters as they are likely to catch real bugs with your code!\n\n\n## Usage\n\nInstall:\n\n```\nyarn add prettier-miscellaneous --dev\n```\n\nYou can install it globally if you like:\n\n```\nyarn global add prettier-miscellaneous\n```\n\n*We're using `yarn` but you can use `npm` if you like:*\n\n```\nnpm install [--save-dev|--global] prettier-miscellaneous\n```\n\n### CLI\n\nRun Prettier through the CLI with this script. Run it without any\narguments to see the [options](#options).\n\nTo format a file in-place, use `--write`. You may want to consider\ncommitting your code before doing that, just in case.\n\n```bash\nprettier [opts] [filename ...]\n```\n\nIn practice, this may look something like:\n\n```bash\nprettier --single-quote --trailing-comma es5 --write \"{app,__{tests,mocks}__}/**/*.js\"\n```\n\nDon't forget the quotes around the globs! The quotes make sure that Prettier\nexpands the globs rather than your shell, for cross-platform usage.\nThe [glob syntax from the glob module](https://github.com/isaacs/node-glob/blob/master/README.md#glob-primer)\nis used.\n\n#### `--with-node-modules`\n\nPrettier CLI will ignore files located in `node_modules` directory. To opt-out from this behavior use `--with-node-modules` flag.\n\n#### `--list-different`\n\nAnother useful flag is `--list-different` (or `-l`) which prints the filenames of files that are different from Prettier formatting. If there are differences the script errors out, which is useful in a CI scenario.\n\n```bash\nprettier --single-quote --list-different \"src/**/*.js\"\n```\n\n#### `--find-config-path` and `--config`\n\nIf you are repeatedly formatting individual files with `prettier`, you will incur a small performance cost\nwhen prettier attempts to look up a [configuration file](#configuration-file). In order to skip this, you may\nask prettier to find the config file once, and re-use it later on.\n\n```bash\nprettier --find-config-path ./my/file.js\n./my/.prettierrc\n```\n\nThis will provide you with a path to the configuration file, which you can pass to `--config`:\n\n```bash\nprettier --config ./my/.prettierrc --write ./my/file.js\n```\n\nYou can also use `--config` if your configuration file lives somewhere where prettier cannot find it,\nsuch as a `config/` directory.\n\nIf you don't have a configuration file, or want to ignore it if it does exist,\nyou can pass `--no-config` instead.\n\n#### `--debug-check`\n\nIf you're worried that Prettier will change the correctness of your code, add `--debug-check` to the command.\nThis will cause Prettier to print an error message if it detects that code correctness might have changed.\nNote that `--write` cannot be used with `--debug-check`.\n\n### ESLint\n\nIf you are using ESLint, integrating Prettier to your workflow is straightforward:\n\nJust add Prettier as an ESLint rule using [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier).\n\n```js\nyarn add --dev prettier eslint-plugin-prettier\n\n// .eslintrc\n{\n  \"plugins\": [\n    \"prettier\"\n  ],\n  \"rules\": {\n    \"prettier/prettier\": \"error\"\n  }\n}\n```\n\nWe also recommend that you use [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) to disable all the existing formatting rules. It's a one liner that can be added on-top of any existing ESLint configuration.\n\n```\n$ yarn add --dev eslint-config-prettier\n```\n\n.eslintrc.json:\n\n```json\n{\n  \"extends\": [\n    \"prettier\"\n  ]\n}\n```\n\n\n### Pre-commit Hook\n\nYou can use Prettier with a pre-commit tool. This can re-format your files that are marked as \"staged\" via `git add` before you commit.\n\n##### Option 1. [lint-staged](https://github.com/okonet/lint-staged)\n\nInstall it along with [husky](https://github.com/typicode/husky):\n\n```bash\nyarn add lint-staged husky --dev\n```\n\nand add this config to your `package.json`:\n\n```json\n{\n  \"scripts\": {\n    \"precommit\": \"lint-staged\"\n  },\n  \"lint-staged\": {\n    \"*.js\": [\n      \"prettier --write\",\n      \"git add\"\n    ]\n  }\n}\n```\n\nSee https://github.com/okonet/lint-staged#configuration for more details about how you can configure lint-staged.\n\n\n##### Option 2. [pre-commit](https://github.com/pre-commit/pre-commit)\n\nCopy the following config into your `.pre-commit-config.yaml` file:\n\n```yaml\n\n    -   repo: https://github.com/prettier/prettier\n        sha: ''  # Use the sha or tag you want to point at\n        hooks:\n        -   id: prettier\n\n```\n\nFind more info from [here](http://pre-commit.com).\n\n##### Option 3. bash script\n\nAlternately you can save this script as `.git/hooks/pre-commit` and give it execute permission:\n\n```bash\n#!/bin/sh\njsfiles=$(git diff --cached --name-only --diff-filter=ACM | grep '\\.jsx\\?$' | tr '\\n' ' ')\n[ -z \"$jsfiles\" ] && exit 0\n\n# Prettify all staged .js files\necho \"$jsfiles\" | xargs ./node_modules/.bin/prettier --write\n\n# Add back the modified/prettified files to staging\necho \"$jsfiles\" | xargs git add\n\nexit 0\n```\n\n### Options\n\nPrettier ships with a handful of customizable format options, usable in both the CLI and API.\n\n| Option | Default | Override |\n| ------ | ------- | -------- |\n| **Print Width** - Specify the length of line that the printer will wrap on.<br /><br /><strong>We strongly recommend against using more than 80 columns</strong>. Prettier works by cramming as much content as possible until it reaches the limit, which happens to work well for 80 columns but makes lines that are very crowded. When a bigger column count is used in styleguides, it usually means that code is allowed to go beyond 80 columns, but not to make every single line go there, like prettier would do.  | `80` | CLI: `--print-width <int>` <br />API: `printWidth: <int>`\n| **Tab Width** - Specify the number of spaces per indentation-level. | `2` | CLI: `--tab-width <int>` <br />API: `tabWidth: <int>` |\n| **Tabs** - Indent lines with tabs instead of spaces. | `false` | CLI: `--use-tabs` <br />API: `useTabs: <bool>` |\n| **Semicolons** - Print semicolons at the ends of statements.<br /><br />Valid options: <ul><li>`true` - add a semicolon at the end of every statement</li><li>`false` - only add semicolons at the beginning of lines that may introduce ASI failures</li></ul> | `true` | CLI: `--no-semi` <br />API: `semi: <bool>` |\n| **Quotes** - Use single quotes instead of double quotes.<br /><br />Notes:<ul><li>Quotes in JSX will always be double and ignore this setting, unless `--jsx-single-quote` is used.</li><li>If the number of quotes outweighs the other quote, the quote which is less used will be used to format the string - Example: `\"I'm double quoted\"` results in `\"I'm double quoted\"` and `\"This \\\"example\\\" is single quoted\"` results in `'This \"example\" is single quoted'`.</li></ul> | `false` | CLI: `--single-quote` <br />API: `singleQuote: <bool>` |\n| **JSX Single Quote** - Use single quotes instead of double quotes for JSX attributes. | `false` | CLI: `--jsx-single-quote` <br />API: `jsxSingleQuote: <bool>` |\n| **Trailing Commas** - Print trailing commas wherever possible.<br /><br />Valid options: <ul><li>`\"none\"` - no trailing commas </li><li>`\"es5\"` - trailing commas where valid in ES5 (objects, arrays, etc.)</li><li>`\"all\"` - trailing commas wherever possible (function arguments). This requires node 8 or a [transform](https://babeljs.io/docs/plugins/syntax-trailing-function-commas/).</li></ul> | `\"none\"` | CLI: <code>--trailing-comma <none&#124;es5&#124;all></code> <br />API: <code>trailingComma: \"<none&#124;es5&#124;all>\"</code> |\n| **Trailing Commas (extended)** - You can also customize each place to use trailing commas:<br /><br />Valid options: <br /> - `\"array\"` <br/> - `\"object\"` <br /> - `\"import\"` <br /> - `\"export\"` <br /> - `\"arguments\"` | `\"none\"` | You can use a comma separated string list, or an object in the API.<br /><br />CLI: <code>--trailing-comma \"array,object,import,export,arguments\"</code> <br />API: <code>trailingComma: { array: true, object: true, import: true, export: true, arguments: false }</code> |\n| **Bracket Spacing** - Print spaces between brackets in array literals.<br /><br />Valid options: <br /> - `true` - Example: `[ foo: bar ]` <br /> - `false` - Example: `[foo: bar]` | `true` | CLI: `--no-bracket-spacing` <br/>API: `bracketSpacing: <bool>` |\n| **Braces Spacing** - Print spaces between braces in object literals.<br /><br />Valid options: <ul><li>`true` - Example: `{ foo: bar }`</li><li>`false` - Example: `{foo: bar}`</li> | `true` | CLI: `--no-braces-spacing` <br />API: `bracesSpacing: <bool>` |\n| **JSX Brackets on Same Line** - Put the `>` of a multi-line JSX element at the end of the last line instead of being alone on the next line | `false` | CLI: `--jsx-bracket-same-line` <br />API: `jsxBracketSameLine: <bool>` |\n| **Align Object Properties** - Align colons in multiline object literals. Does nothing if object has computed property names. | `false` | CLI: `--align-object-properties` <br/>API: `alignObjectProperties: <bool>` |\n| **No Space in Empty Function** - Omit space before empty anonymous function body.<br /><br />Valid options: <br /> - `true` <br /> - `false` | `false` | CLI: `--no-space-empty-fn` <br/>API: `noSpaceEmptyFn: <bool>` |\n| **Space before Function Paren** - Put a [space before function parenthesis](http://eslint.org/docs/rules/space-before-function-paren#always).<br /><br />Valid options: <br /> - `true` <br /> - `false` | `false` | CLI: `--space-before-function-paren` <br/>API: `spaceBeforeFunctionParen: <bool>` |\n| **Cursor Offset** - Specify where the cursor is. This option only works with `prettier.formatWithCursor`, and cannot be used with `rangeStart` and `rangeEnd`. | `-1` | CLI: `--cursor-offset <int>` <br />API: `cursorOffset: <int>` |\n| **Range Start** - Format code starting at a given character offset. The range will extend backwards to the start of the first line containing the selected statement. This option cannot be used with `cursorOffset`. | `0` | CLI: `--range-start <int>` <br />API: `rangeStart: <int>` |\n| **Range End** - Format code ending at a given character offset (exclusive). The range will extend forwards to the end of the selected statement. This option cannot be used with `cursorOffset`. | `Infinity` | CLI: `--range-end <int>` <br />API: `rangeEnd: <int>` |\n| **Parser** - Specify which parser to use. Both the `babylon` and `flow` parsers support the same set of JavaScript features (including Flow). Prettier automatically infers the parser from the input file path, so you shouldn't have to change this setting. <br />Built-in parsers: <ul><li>`babylon`</li><li>`flow`</li><li>`typescript`</li><li>`postcss`</li><li>`json`</li></ul>[Custom parsers](#custom-parser-api) are also supported. | `babylon` | CLI: <br />`--parser <string>` <br />`--parser ./path/to/my-parser` <br />API: <br />`parser: \"<string>\"` <br />`parser: require(\"./my-parser\")` |\n| **Filepath** - Specify the input filepath this will be used to do parser inference.<br /><br /> Example: <br />`cat foo \\| prettier --stdin-filepath foo.css`<br /> will default to use `postcss` parser |  | CLI: `--stdin-filepath` <br />API: `filepath: \"<string>\"` |\n\n### API\n\n```js\nconst prettier = require(\"prettier-miscellaneous\");\n```\n\n#### `prettier.format(source [, options])`\n\n`format` is used to format text using Prettier. [Options](#options) may be provided to override the defaults.\n\n```js\nprettier.format(\"foo ( );\", { semi: false });\n// -> \"foo()\"\n```\n\n#### `prettier.check(source [, options])`\n\n`check` checks to see if the file has been formatted with Prettier given those options and returns a `Boolean`.\nThis is similar to the `--list-different` parameter in the CLI and is useful for running Prettier in CI scenarios.\n\n#### `prettier.formatWithCursor(source [, options])`\n\n`formatWithCursor` both formats the code, and translates a cursor position from unformatted code to formatted code.\nThis is useful for editor integrations, to prevent the cursor from moving when code is formatted.\n\nThe `cursorOffset` option should be provided, to specify where the cursor is. This option cannot be used with `rangeStart` and `rangeEnd`.\n\n```js\nprettier.formatWithCursor(\" 1\", { cursorOffset: 2 });\n// -> { formatted: '1;\\n', cursorOffset: 1 }\n```\n\n#### `prettier.resolveConfig([filePath] [, options])`\n\n`resolveConfig` can be used to resolve configuration for a given source file.\nThe function optionally accepts an input file path as an argument, which defaults to the current working directory.\nA promise is returned which will resolve to:\n* An options object, providing a [config file](#configuration-file) was found.\n* `null`, if no file was found.\n\nThe promise will be rejected if there was an error parsing the configuration file.\n\nIf `options.withCache` is `false`, all caching will be bypassed.\n\n```js\nconst text = fs.readFileSync(filePath, \"utf8\");\nprettier.resolveConfig(filePath).then(options => {\n  const formatted = prettier.format(text, options);\n})\n```\n\n#### `prettier.clearConfigCache()`\n\nAs you repeatedly call `resolveConfig`, the file system structure will be cached for performance.\nThis function will clear the cache. Generally this is only needed for editor integrations that\nknow that the file system has changed since the last format took place.\n\n#### Custom Parser API\n\nIf you need to make modifications to the AST (such as codemods), or you want to provide an alternate parser, you can do so by setting the `parser` option to a function. The function signature of the parser function is:\n```js\n(text: string, parsers: object, options: object) => AST;\n```\n\nPrettier's built-in parsers are exposed as properties on the `parsers` argument.\n\n```js\nprettier.format(\"lodash ( )\", {\n  parser(text, { babylon }) {\n    const ast = babylon(text);\n    ast.program.body[0].expression.callee.name = \"_\";\n    return ast;\n  }\n});\n// -> \"_();\\n\"\n```\n\nThe `--parser` CLI option may be a path to a node.js module exporting a parse function.\n\n### Excluding code from formatting\n\nA JavaScript comment of `// prettier-ignore` will exclude the next node in the abstract syntax tree from formatting.\n\nFor example:\n\n```js\nmatrix(\n  1, 0, 0,\n  0, 1, 0,\n  0, 0, 1\n)\n\n// prettier-ignore\nmatrix(\n  1, 0, 0,\n  0, 1, 0,\n  0, 0, 1\n)\n```\n\nwill be transformed to:\n\n```js\nmatrix(1, 0, 0, 0, 1, 0, 0, 0, 1);\n\n// prettier-ignore\nmatrix(\n  1, 0, 0,\n  0, 1, 0,\n  0, 0, 1\n)\n```\n\n## Options\nPrettier ships with a handful of customizable format options, usable in both the CLI and API.\n\n### Print Width\nSpecify the line length that the printer will wrap on.\n\n> **For readability we recommend against using more than 80 characters:**\n>\n>In code styleguides, maximum line length rules are often set to 100 or 120. However, when humans write code, they don't strive to reach the maximum number of columns on every line. Developers often use whitespace to break up long lines for readability. In practice, the average line length often ends up well below the maximum.\n>\n> Prettier, on the other hand, strives to fit the most code into every line. With the print width set to 120, prettier may produce overly compact, or otherwise undesirable code.\n\nDefault | CLI Override | API Override\n--------|--------------|-------------\n`80` | `--print-width <int>` | `printWidth: <int>`\n\n### Tab Width\nSpecify the number of spaces per indentation-level.\n\nDefault | CLI Override | API Override\n--------|--------------|-------------\n `2` | `--tab-width <int>` | `tabWidth: <int>`\n\n### Tabs\nIndent lines with tabs instead of spaces\n\nDefault | CLI Override | API Override\n--------|--------------|-------------\n`false` | `--use-tabs` | `useTabs: <bool>`\n\n### Semicolons\nPrint semicolons at the ends of statements.\n\nValid options:\n\n * `true` - Add a semicolon at the end of every statement.\n * `false` - Only add semicolons at the beginning of lines that may introduce ASI failures.\n\nDefault | CLI Override | API Override\n--------|--------------|-------------\n`true` | `--no-semi` | `semi: <bool>`\n\n### Quotes\nUse single quotes instead of double quotes.\n\nNotes:\n* Quotes in JSX will always be double and ignore this setting.\n* If the number of quotes outweighs the other quote, the quote which is less used will be used to format the string - Example: `\"I'm double quoted\"` results in `\"I'm double quoted\"` and `\"This \\\"example\\\" is single quoted\"` results in `'This \"example\" is single quoted'`.\n\nDefault | CLI Override | API Override\n--------|--------------|-------------\n`false` |  `--single-quote` | `singleQuote: <bool>`\n\n### Trailing Commas\nPrint trailing commas wherever possible.\n\nValid options:\n * `\"none\"` - No trailing commas.\n * `\"es5\"` - Trailing commas where valid in ES5 (objects, arrays, etc.)\n * `\"all\"` - Trailing commas wherever possible (function arguments). This requires node 8 or a [transform](https://babeljs.io/docs/plugins/syntax-trailing-function-commas/).\n\nDefault | CLI Override | API Override\n--------|--------------|-------------\n`\"none\"` | <code>--trailing-comma <none&#124;es5&#124;all></code> | <code>trailingComma: \"<none&#124;es5&#124;all>\"</code>\n\n### Bracket Spacing\nPrint spaces between brackets in object literals.\n\nValid options:\n * `true` - Example: `{ foo: bar }`.\n * `false` - Example: `{foo: bar}`.\n\nDefault | CLI Override | API Override\n--------|--------------|-------------\n`true` | `--no-bracket-spacing` | `bracketSpacing: <bool>`\n\n### JSX Brackets\nPut the `>` of a multi-line JSX element at the end of the last line instead of being alone on the next line.\n\nDefault | CLI Override | API Override\n--------|--------------|-------------\n`false` | `--jsx-bracket-same-line` | `jsxBracketSameLine: <bool>`\n\n### Range\nFormat only a segment of a file.\n\nThese two options can be used to format code starting and ending at a given character offset (inclusive and exclusive, respectively). The range will extend:\n* Backwards to the start of the first line containing the selected statement.\n* Forwards to the end of the selected statement.\n\nThese options cannot be used with `cursorOffset`.\n\nDefault | CLI Override | API Override\n--------|--------------|-------------\n`0`        | `--range-start <int>`| `rangeStart: <int>`\n`Infinity` | `--range-end <int>`  | `rangeEnd: <int>`\n\n### Parser\nSpecify which parser to use.\n\nBoth the `babylon` and `flow` parsers support the same set of JavaScript features (including Flow). Prettier automatically infers the parser from the input file path, so you shouldn't have to change this setting.\n\nBuilt-in parsers:\n * [`babylon`](https://github.com/babel/babylon/)\n * [`flow`](https://github.com/facebook/flow/tree/master/src/parser)\n * [`typescript`](https://github.com/eslint/typescript-eslint-parser) _Since v1.4.0_\n * [`postcss`](https://github.com/postcss/postcss) _Since v1.4.0_\n * [`json`](https://github.com/vtrushin/json-to-ast) _Since v1.5.0_\n * [`graphql`](https://github.com/graphql/graphql-js/tree/master/src/language) _Since v1.5.0_\n\n[Custom parsers](#custom-parser-api) are also supported.  _Since v1.5.0_\n\nDefault | CLI Override | API Override\n--------|--------------|-------------\n`babylon` | `--parser <string>`<br />`--parser ./my-parser` | `parser: \"<string>\"`<br />`parser: require(\"./my-parser\")`\n\n### Filepath\nSpecify the input filepath. This will be used to do parser inference.\n\nFor example, the following will use `postcss` parser:\n\n```bash\ncat foo | prettier --stdin-filepath foo.css\n```\n\nDefault | CLI Override | API Override\n--------|--------------|-------------\nNone | `--stdin-filepath <string>` | `filepath: \"<string>\"`\n\n\n## Configuration File\n\nPrettier uses [cosmiconfig](https://github.com/davidtheclark/cosmiconfig) for configuration file support.\nThis means you can configure prettier via:\n\n* A `.prettierrc` file, written in YAML or JSON.\n* A `prettier.config.js` file that exports an object.\n* A `\"prettier\"` key in your `package.json` file.\n\nThe configuration file will be resolved starting from the location of the file being formatted,\nand searching up the file tree until a config file is (or isn't) found.\n\nThe options to the configuration file are the same the [API options](#options).\n\n### Basic Configuration\n\nJSON:\n\n```json\n// .prettierrc\n{\n  \"printWidth\": 100,\n  \"parser\": \"flow\"\n}\n```\n\nYAML:\n\n```yaml\n# .prettierrc\nprintWidth: 100\nparser: flow\n```\n\n### Configuration Overrides\n\nPrettier borrows eslint's [override format](http://eslint.org/docs/user-guide/configuring#example-configuration).\nThis allows you to apply configuration to specific files.\n\nJSON:\n\n```json\n{\n  \"semi\": false,\n  \"overrides\": [{\n    \"files\": \"*.test.js\",\n    \"options\": {\n      \"semi\": true\n    }\n  }]\n}\n```\n\nYAML:\n\n```yaml\nsemi: false\noverrides:\n- files: \"*.test.js\"\n  options:\n    semi: true\n```\n\n`files` is required for each override, and may be a string or array of strings.\n`excludeFiles` may be optionally provided to exclude files for a given rule, and may also be a string or array of strings.\n\nTo get prettier to format its own `.prettierrc` file, you can do:\n\n```json\n{\n  \"overrides\": [{\n    \"files\": \".prettierrc\",\n    \"options\": { \"parser\": \"json\" }\n  }]\n}\n```\n\nFor more information on how to use the CLI to locate a file, see the [CLI](#cli) section.\n\n### Configuration Schema\n\nIf you'd like a JSON schema to validate your configuration, one is available here: http://json.schemastore.org/prettierrc.\n\n## Editor Integration\n\n### Atom\n\nAtom users can simply install the [`prettier-atom-with-tabs`](https://atom.io/packages/prettier-atom-with-tabs) package and use\n`Ctrl+Alt+F` to format a file (or format on save if enabled).\n\n### Emacs\n\nEmacs users should see [this repository](https://github.com/prettier/prettier-emacs)\nfor on-demand formatting.\n\n### Vim\n\nVim users can simply install either [sbdchd](https://github.com/sbdchd)/[neoformat](https://github.com/sbdchd/neoformat), [w0rp](https://github.com/w0rp)/[ale](https://github.com/w0rp/ale), or [mitermayer](https://github.com/mitermayer)/[vim-prettier](https://github.com/mitermayer/vim-prettier), for more details see [this directory](https://github.com/prettier/prettier/tree/master/editors/vim).\n\n### Visual Studio Code\n\nCan be installed using the extension sidebar. Search for `Prettier - JavaScript formatter`.\n\nCan also be installed using `ext install prettier-vscode-with-tabs`\n\n[Check its repository for configuration and shortcuts](https://marketplace.visualstudio.com/items?itemName=passionkind.prettier-vscode-with-tabs)\n\n### Visual Studio\n\nInstall the [JavaScript Prettier extension](https://github.com/madskristensen/JavaScriptPrettier).\n\n### Sublime Text\n\nSublime Text support is available through Package Control and\nthe [JsPrettier](https://packagecontrol.io/packages/JsPrettier) plug-in.\n\n### JetBrains WebStorm, PHPStorm, PyCharm...\n\nSee the [WebStorm\nguide](https://github.com/jlongster/prettier/tree/master/editors/webstorm/README.md).\n\n## Language Support\n\nPrettier attempts to support all JavaScript language features,\nincluding non-standardized ones. By default it uses the\n[Babylon](https://github.com/babel/babylon) parser with all language\nfeatures enabled, but you can also use the\n[Flow](https://github.com/facebook/flow) parser with the\n`parser` API or `--parser` CLI [option](#options).\n\nAll of JSX and Flow syntax is supported. In fact, the test suite in\n`tests` *is* the entire Flow test suite and they all pass.\n\nPrettier also supports [TypeScript](https://www.typescriptlang.org/), CSS, [LESS](http://lesscss.org/), [SCSS](http://sass-lang.com), [JSON](http://json.org/), and [GraphQL](http://graphql.org/).\n\nThe minimum version of TypeScript supported is 2.1.3 as it introduces the ability to have leading `|` for type definitions which prettier outputs.\n\n## Related Projects\n\n- [`eslint-plugin-prettier`](https://github.com/prettier/eslint-plugin-prettier) plugs Prettier into your ESLint workflow\n- [`eslint-config-prettier`](https://github.com/prettier/eslint-config-prettier) turns off all ESLint rules that are unnecessary or might conflict with Prettier\n- [`prettier-eslint`](https://github.com/prettier/prettier-eslint)\npasses `prettier` output to `eslint --fix`\n- [`prettier-standard`](https://github.com/sheerun/prettier-standard)\nuses `prettier` and `prettier-eslint` to format code with standard rules\n- [`prettier-standard-formatter`](https://github.com/dtinth/prettier-standard-formatter)\npasses `prettier` output to `standard --fix`\n- [`prettier-miscellaneous`](https://github.com/arijs/prettier-miscellaneous)\n`prettier` with a few minor extra options\n- [`neutrino-preset-prettier`](https://github.com/SpencerCDixon/neutrino-preset-prettier) allows you to use Prettier as a Neutrino preset\n- [`prettier_d`](https://github.com/josephfrazier/prettier_d.js) runs Prettier as a server to avoid Node.js startup delay. It also supports configuration via `.prettierrc`, `package.json`, and `.editorconfig`.\n- [`Prettier Bookmarklet`](https://prettier.glitch.me/) provides a bookmarklet and exposes a REST API for Prettier that allows to format CodeMirror editor in your browser\n- [`prettier-github`](https://github.com/jgierer12/prettier-github) formats code in GitHub comments\n\n## Technical Details\n\nThis printer is a fork of\n[recast](https://github.com/benjamn/recast)'s printer with its\nalgorithm replaced by the one described by Wadler in \"[A prettier\nprinter](http://homepages.inf.ed.ac.uk/wadler/papers/prettier/prettier.pdf)\".\nThere still may be leftover code from recast that needs to be cleaned\nup.\n\nThe basic idea is that the printer takes an AST and returns an\nintermediate representation of the output, and the printer uses that\nto generate a string. The advantage is that the printer can \"measure\"\nthe IR and see if the output is going to fit on a line, and break if\nnot.\n\nThis means that most of the logic of printing an AST involves\ngenerating an abstract representation of the output involving certain\ncommands. For example, `concat([\"(\", line, arg, line \")\"])` would\nrepresent a concatenation of opening parens, an argument, and closing\nparens. But if that doesn't fit on one line, the printer can break\nwhere `line` is specified.\n\nMore (rough) details can be found in [commands.md](commands.md).\n\n## Badge\n\nShow the world you're using *Prettier* → [![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier)\n\n```md\n[![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier)\n```\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n"
  },
  {
    "path": "Rationale.md",
    "content": "# Rationale\n\nPrettier is an opinionated JavaScript formatter. This document gives a rationale behind those opinions.\n\n\n## What prettier is concerned about\n\n### Consistency\n\nPrettier exists for one purpose: to enforce consistency across your entire project. Not only do we output code with consistent whitespace, prettier will lay out code according to a wrapping algorithm based on a maximum line width. That means that long expressions will be broken up across lines, removing the need for manual layout from the programmer which inevitably leads to inconsistency.\n\n### Correctness\n\nThe first requirement of prettier is to output valid JavaScript and code that has the exact same behavior as before formatting. Please report any JavaScript code where prettier fails to follow these correctness rules — that's a bug which needs to be fixed!\n\n\n### Whitespace: indentation and line breaks\n\nThis is the core of prettier. The formatting rules are going to be explained in a later section.\n\n\n### Semi-colons\n\n...TBD...\n\n\n### Strings\n\nPrettier enforces double quotes by default, but has a setting for enforcing single quotes instead. There are two exceptions:\n\n- The number of escaped quotes are minimized. For example, if you have a string with a single quote inside, it will be enclosed in double quotes regardless of the quote setting: `\"that's a double quote\"`, not `'that\\'s a double quote'`.\n- JSX always uses double quotes. JSX takes its roots from HTML, where the dominant use of quotes for attributes is double quotes. Browser developer tools also follow this convention by always displaying HTML with double quotes, even if the source code uses single quotes.\n\nPrettier maintains the way your string is escaped. For example, `\"🙂\"` won't be formatted into `\"\\uD83D\\uDE42\"` and vice versa.\n\n\n### Parentheses\n\nPrettier outputs the minimum number of parentheses required to ensure that the behavior of the formatted code stays unchanged. This may lead to code that feels ambiguous. If that's the case, you are encouraged to extract the ambiguous parts into variables.\n\n\n### Empty lines\n\nIt turns out that empty lines are very hard to automatically generate. The approach that prettier takes is to preserve empty lines the way they were in the original source code. The only constraint is that prettier disallows several empty lines in a row. They are collapsed to a single one.\n\n\n### Multi-line objects\n\nIt is tempting to collapse an object to a single line if it fits, but there are times when it is better for sibling/cousin keys to stay vertically aligned—see [object lists], [nested configs], [stylesheets], and [keyed methods]. To avoid unfavorable collapsing, prettier simply formats any object as multi-line if it appears as such in the original source code. This is the same strategy used by [elm-format] for multi-line records.\n\n[object lists]:https://github.com/prettier/prettier/issues/74#issue-199965534\n[nested configs]:https://github.com/prettier/prettier/issues/88#issuecomment-275448346\n[stylesheets]:https://github.com/prettier/prettier/issues/74#issuecomment-275262094\n[keyed methods]:https://github.com/prettier/prettier/pull/495#issuecomment-275745434\n[elm-format]:https://github.com/prettier/prettier/issues/74#issuecomment-275621526\n\n## What prettier is _not_ concerned about\n\nHere are a few examples of things that are out of scope for prettier:\n\n- Turning single/double quotes into template literals or vice versa.\n- Adding/removing `{}` and `return` where they are optional.\n- Turning `?:` into `if then else`.\n\n\n## Formatting rules\n\n... TBD ...\n\n\n### Function calls\n\n\n### Method calls\n\n\n### JSX\n\n\n### Boolean expressions\n\n\n### String concatenation\n"
  },
  {
    "path": "bin/prettier.js",
    "content": "#!/usr/bin/env node\n\n\"use strict\";\n\nconst chalk = require(\"chalk\");\nconst dashify = require(\"dashify\");\nconst fs = require(\"fs\");\nconst getStream = require(\"get-stream\");\nconst globby = require(\"globby\");\nconst minimist = require(\"minimist\");\nconst path = require(\"path\");\nconst readline = require(\"readline\");\nconst ignore = require(\"ignore\");\n\nconst prettier = eval(\"require\")(\"../index\");\nconst cleanAST = require(\"../src/clean-ast\").cleanAST;\nconst resolver = require(\"../src/resolve-config\");\n\nconst args = process.argv.slice(2);\n\nconst booleanOptionNames = [\n  \"use-tabs\",\n  \"semi\",\n  \"single-quote\",\n  \"bracket-spacing\",\n  \"braces-spacing\",\n  \"break-property\",\n  \"arrow-parens\",\n  \"array-expand\",\n  \"break-before-else\",\n  \"flatten-ternaries\",\n  \"align-object-properties\",\n  \"space-empty-fn\",\n  \"space-before-function-paren\",\n  \"jsx-single-quote\",\n  \"jsx-bracket-same-line\",\n  // Deprecated in 0.0.10\n  \"flow-parser\"\n];\nconst stringOptionNames = [\n  \"print-width\",\n  \"tab-width\",\n  \"parser\",\n  \"trailing-comma\"\n];\n\nconst argv = minimist(args, {\n  boolean: [\n    \"write\",\n    \"stdin\",\n    // The supports-color package (a sub sub dependency) looks directly at\n    // `process.argv` for `--no-color` and such-like options. The reason it is\n    // listed here is to avoid \"Ignored unknown option: --no-color\" warnings.\n    // See https://github.com/chalk/supports-color/#info for more information.\n    \"color\",\n    \"list-different\",\n    \"help\",\n    \"version\",\n    \"debug-print-doc\",\n    \"debug-check\",\n    \"with-node-modules\"\n  ],\n  string: [\n    \"cursor-offset\",\n    \"range-start\",\n    \"range-end\",\n    \"stdin-filepath\",\n    \"config\",\n    \"find-config-path\",\n    \"ignore-path\"\n  ],\n  default: {\n    color: true,\n    \"ignore-path\": \".prettierignore\"\n  },\n  alias: {\n    help: \"h\",\n    version: \"v\",\n    \"list-different\": \"l\"\n  },\n  unknown: param => {\n\tif (param.startsWith(\"-\")) {\n      const paramName = param.replace(/--(no-)?/, \"\");\n\t  if (\n        booleanOptionNames.indexOf(paramName) === -1 &&\n        stringOptionNames.indexOf(paramName) === -1\n      ) {\n        console.warn(\"Ignored unknown option: \" + param + \"\\n\");\n        return false;\n      }\n    }\n  }\n});\n\nif (argv[\"version\"]) {\n  console.log(prettier.version);\n  process.exit(0);\n}\n\nconst filepatterns = argv[\"_\"];\nconst write = argv[\"write\"];\nconst stdin = argv[\"stdin\"] || (!filepatterns.length && !process.stdin.isTTY);\nconst ignoreNodeModules = argv[\"with-node-modules\"] === false;\nconst ignoreNodeModulesGlobs = [\"!**/node_modules/**\", \"!./node_modules/**\"];\nconst ignorePath = argv[\"ignore-path\"];\nconst globOptions = {\n  dot: true\n};\n\nif (write && argv[\"debug-check\"]) {\n  console.error(\"Cannot use --write and --debug-check together.\");\n  process.exit(1);\n}\n\nif (argv[\"find-config-path\"] && filepatterns.length) {\n  console.error(\"Cannot use --find-config-path with multiple files\");\n  process.exit(1);\n}\n\nfunction getOptionsForFile(filePath) {\n  return resolver\n    .resolveConfig(filePath, { configFile: argv[\"config\"] })\n    .then(options => {\n      const parsedArgs = minimist(args, {\n        boolean: booleanOptionNames,\n        string: stringOptionNames,\n        default: Object.assign(\n          {\n            semi: true,\n            \"bracket-spacing\": true,\n            parser: \"babylon\"\n          },\n          dashifyObject(options)\n        )\n      });\n\n      return getOptions(Object.assign({}, argv, parsedArgs));\n    })\n    .catch(error => {\n      console.error(\"Invalid configuration file:\", error.toString());\n      process.exit(2);\n    });\n}\n\nfunction getOptions(argv) {\n  return {\n    cursorOffset: getIntOption(argv, \"cursor-offset\"),\n    rangeStart: getIntOption(argv, \"range-start\"),\n    rangeEnd: getIntOption(argv, \"range-end\"),\n    useTabs: argv[\"use-tabs\"],\n    semi: argv[\"semi\"],\n    printWidth: getIntOption(argv, \"print-width\"),\n    tabWidth: getIntOption(argv, \"tab-width\"),\n    bracketSpacing: argv[\"bracket-spacing\"],\n    bracesSpacing: argv[\"braces-spacing\"],\n    singleQuote: argv[\"single-quote\"],\n    breakProperty: argv[\"break-property\"],\n    arrowParens: argv[\"arrow-parens\"],\n    arrayExpand: argv[\"array-expand\"],\n    breakBeforeElse: argv[\"break-before-else\"],\n    flattenTernaries: argv[\"flatten-ternaries\"],\n    alignObjectProperties: argv[\"align-object-properties\"],\n    noSpaceEmptyFn: !argv[\"space-empty-fn\"],\n    spaceBeforeFunctionParen: argv[\"space-before-function-paren\"],\n    jsxSingleQuote: argv[\"jsx-single-quote\"],\n    jsxBracketSameLine: argv[\"jsx-bracket-same-line\"],\n    filepath: argv[\"stdin-filepath\"],\n    trailingComma: getTrailingComma(argv),\n    parser: getParserOption(argv)\n  };\n}\n\nfunction getParserOption(argv) {\n  const value = argv.parser;\n\n  if (value === undefined) {\n    return value;\n  }\n\n  // For backward compatibility. Deprecated in 0.0.10\n  if (argv[\"flow-parser\"]) {\n    console.warn(\"`--flow-parser` is deprecated. Use `--parser flow` instead.\");\n    return \"flow\";\n  }\n\n  return value;\n}\n\nfunction getIntOption(argv, optionName) {\n  const value = argv[optionName];\n\n  if (value === undefined) {\n    return value;\n  }\n\n  if (/^\\d+$/.test(value)) {\n    return Number(value);\n  }\n\n  console.error(\n    \"Invalid --\" +\n      optionName +\n      \" value. Expected an integer, but received: \" +\n      JSON.stringify(value)\n  );\n  process.exit(1);\n}\n\nfunction getTrailingComma(argv) {\n  switch (argv[\"trailing-comma\"]) {\n    case undefined:\n    case \"none\":\n      return \"none\";\n    case \"\":\n      console.warn(\n        \"Warning: `--trailing-comma` was used without an argument. This is deprecated. \" +\n          'Specify \"none\", \"es5\", or \"all\".'\n      );\n      return \"es5\";\n    case \"es5\":\n      return \"es5\";\n    case \"all\":\n      return \"all\";\n    default:\n      // Allow user to customize each item separated with commas\n      // see src/options.js\n      return argv[\"trailing-comma\"];\n    //throw new Error(\"Invalid option for --trailing-comma\");\n  }\n}\n\nfunction dashifyObject(object) {\n  return Object.keys(object || {}).reduce((output, key) => {\n    output[dashify(key)] = object[key];\n    return output;\n  }, {});\n}\n\nfunction diff(a, b) {\n  return require(\"diff\").createTwoFilesPatch(\"\", \"\", a, b, \"\", \"\", {\n    context: 2\n  });\n}\n\nfunction format(input, opt) {\n  if (argv[\"debug-print-doc\"]) {\n    const doc = prettier.__debug.printToDoc(input, opt);\n    return { formatted: prettier.__debug.formatDoc(doc) };\n  }\n\n  if (argv[\"debug-check\"]) {\n    const pp = prettier.format(input, opt);\n    const pppp = prettier.format(pp, opt);\n    if (pp !== pppp) {\n      throw \"prettier(input) !== prettier(prettier(input))\\n\" + diff(pp, pppp);\n    } else {\n      const ast = cleanAST(prettier.__debug.parse(input, opt));\n      const past = cleanAST(prettier.__debug.parse(pp, opt));\n\n      if (ast !== past) {\n        const MAX_AST_SIZE = 2097152; // 2MB\n        const astDiff =\n          ast.length > MAX_AST_SIZE || past.length > MAX_AST_SIZE\n            ? \"AST diff too large to render\"\n            : diff(ast, past);\n        throw \"ast(input) !== ast(prettier(input))\\n\" +\n          astDiff +\n          \"\\n\" +\n          diff(input, pp);\n      }\n    }\n    return { formatted: opt.filepath || \"(stdin)\\n\" };\n  }\n\n  return prettier.formatWithCursor(input, opt);\n}\n\nfunction handleError(filename, e) {\n  const isParseError = Boolean(e && e.loc);\n  const isValidationError = /Validation Error/.test(e && e.message);\n\n  // For parse errors and validation errors, we only want to show the error\n  // message formatted in a nice way. `String(e)` takes care of that. Other\n  // (unexpected) errors are passed as-is as a separate argument to\n  // `console.error`. That includes the stack trace (if any), and shows a nice\n  // `util.inspect` of throws things that aren't `Error` objects. (The Flow\n  // parser has mistakenly thrown arrays sometimes.)\n  if (isParseError) {\n    console.error(filename + \": \" + String(e));\n  } else if (isValidationError) {\n    console.error(String(e));\n    // If validation fails for one file, it will fail for all of them.\n    process.exit(1);\n  } else {\n    console.error(filename + \":\", e.stack || e);\n  }\n\n  // Don't exit the process if one file failed\n  process.exitCode = 2;\n}\n\nif (\n  argv[\"help\"] ||\n  (!filepatterns.length && !stdin && !argv[\"find-config-path\"])\n) {\n  console.log(\n    \"Usage: prettier [opts] [filename ...]\\n\\n\" +\n      \"Available options:\\n\" +\n      \"  --write                  Edit the file in-place. (Beware!)\\n\" +\n      \"  --list-different or -l   Print filenames of files that are different from Prettier formatting.\\n\" +\n      \"  --config                 Path to a prettier configuration file (.prettierrc, package.json, prettier.config.js).\\n\" +\n      \"  --no-config              Do not look for a configuration file.\\n\" +\n      \"  --find-config-path <path>\\n\" +\n      \"                           Finds and prints the path to a configuration file for a given input file.\\n\" +\n      \"  --ignore-path <path>     Path to a file containing patterns that describe files to ignore.\\n\" +\n      \"                           Defaults to ./.prettierignore.\\n\" +\n      \"  --stdin                  Read input from stdin.\\n\" +\n      \"  --stdin-filepath         Path to the file used to read from stdin.\\n\" +\n      \"  --print-width <int>      Specify the length of line that the printer will wrap on. Defaults to 80.\\n\" +\n      \"  --tab-width <int>        Specify the number of spaces per indentation-level. Defaults to 2.\\n\" +\n      \"  --use-tabs               Indent lines with tabs instead of spaces.\\n\" +\n      \"  --no-semi                Do not print semicolons, except at the beginning of lines which may need them.\\n\" +\n      \"  --single-quote           Use single quotes instead of double quotes.\\n\" +\n      \"  --jsx-single-quote       Use single quotes instead of double quotes for JSX attributes.\\n\" +\n      \"  --bracket-spacing        Print spaces between [brackets].\\n\" +\n      \"  --no-braces-spacing      Do not print spaces between {braces}.\\n\" +\n      \"  --break-property         Allow object properties to break lines.\\n\" +\n      \"  --arrow-parens           Always put parentheses on arrow function arguments.\\n\" +\n      \"  --array-expand           Expand arrays into one item per line.\\n\" +\n      \"  --flatten-ternaries      Format ternaries in a flat style.\\n\" +\n      \"  --break-before-else      Put `else` clause in a new line.\\n\" +\n      \"  --jsx-bracket-same-line  Put > on the last line instead of at a new line.\\n\" +\n      \"  --trailing-comma <none|es5|all>\\n\" +\n      \"                           Print trailing commas wherever possible. Defaults to none.\\n\" +\n      \"                           You can customize with a comma separated list. 'all' is equivalent to:\\n\" +\n      \"                           'array,object,import,export,arguments'\\n\" +\n      \"  --align-object-properties\\n\" +\n      \"                           Align colons in multiline object literals. Does nothing if object has computed property names.\\n\" +\n      \"  --no-space-empty-fn      Omit space before empty function body. Defaults to false.\\n\" +\n      \"  --space-before-function-paren\\n\" +\n      \"                           Put a space before function parenthesis. Defaults to false.\\n\" +\n      \"  --parser <flow|babylon|typescript|postcss|json>\\n\" +\n      \"                           Specify which parse to use. Defaults to babylon.\\n\" +\n      \"  --cursor-offset <int>    Print (to stderr) where a cursor at the given position would move to after formatting.\\n\" +\n      \"                           This option cannot be used with --range-start and --range-end\\n\" +\n      \"  --range-start <int>      Format code starting at a given character offset.\\n\" +\n      \"                           The range will extend backwards to the start of the first line containing the selected statement.\\n\" +\n      \"                           This option cannot be used with --cursor-offset.\\n\" +\n      \"                           Defaults to 0.\\n\" +\n      \"  --range-end <int>        Format code ending at a given character offset (exclusive).\\n\" +\n      \"                           The range will extend forwards to the end of the selected statement.\\n\" +\n      \"                           This option cannot be used with --cursor-offset.\\n\" +\n      \"                           Defaults to Infinity.\\n\" +\n      \"  --no-color               Do not colorize error messages.\\n\" +\n      \"  --with-node-modules      Process files inside `node_modules` directory.\\n\" +\n      \"  --version or -v          Print Prettier version.\\n\" +\n      \"\\n\"\n  );\n  process.exit(argv[\"help\"] ? 0 : 1);\n}\n\nif (argv[\"find-config-path\"]) {\n  resolveConfig(argv[\"find-config-path\"]);\n} else if (stdin) {\n  getStream(process.stdin).then(input => {\n    getOptionsForFile(process.cwd()).then(options => {\n      if (listDifferent(input, options, \"(stdin)\")) {\n        return;\n      }\n\n      try {\n        writeOutput(format(input, options), options);\n      } catch (e) {\n        handleError(\"stdin\", e);\n      }\n    });\n  });\n} else {\n  eachFilename(filepatterns, (filename, options) => {\n    if (write) {\n      // Don't use `console.log` here since we need to replace this line.\n      process.stdout.write(filename);\n    }\n\n    let input;\n    try {\n      input = fs.readFileSync(filename, \"utf8\");\n    } catch (e) {\n      // Add newline to split errors from filename line.\n      process.stdout.write(\"\\n\");\n\n      console.error(\"Unable to read file: \" + filename + \"\\n\" + e);\n      // Don't exit the process if one file failed\n      process.exitCode = 2;\n      return;\n    }\n\n    listDifferent(input, options, filename);\n\n    const start = Date.now();\n\n    let result;\n    let output;\n\n    try {\n      result = format(\n        input,\n        Object.assign({}, options, { filepath: filename })\n      );\n      output = result.formatted;\n    } catch (e) {\n      // Add newline to split errors from filename line.\n      process.stdout.write(\"\\n\");\n\n      handleError(filename, e);\n      return;\n    }\n\n    if (write) {\n      // Remove previously printed filename to log it with duration.\n      readline.clearLine(process.stdout, 0);\n      readline.cursorTo(process.stdout, 0, null);\n\n      // Don't write the file if it won't change in order not to invalidate\n      // mtime based caches.\n      if (output === input) {\n        if (!argv[\"list-different\"]) {\n          console.log(chalk.grey(\"%s %dms\"), filename, Date.now() - start);\n        }\n      } else {\n        if (argv[\"list-different\"]) {\n          console.log(filename);\n        } else {\n          console.log(\"%s %dms\", filename, Date.now() - start);\n        }\n\n        try {\n          fs.writeFileSync(filename, output, \"utf8\");\n        } catch (err) {\n          console.error(\"Unable to write file: \" + filename + \"\\n\" + err);\n          // Don't exit the process if one file failed\n          process.exitCode = 2;\n        }\n      }\n    } else if (argv[\"debug-check\"]) {\n      if (output) {\n        console.log(output);\n      } else {\n        process.exitCode = 2;\n      }\n    } else if (!argv[\"list-different\"]) {\n      writeOutput(result, options);\n    }\n  });\n}\n\nfunction listDifferent(input, options, filename) {\n  if (!argv[\"list-different\"]) {\n    return;\n  }\n\n  options = Object.assign({}, options, { filepath: filename });\n\n  if (!prettier.check(input, options)) {\n    if (!write) {\n      console.log(filename);\n    }\n    process.exitCode = 1;\n  }\n\n  return true;\n}\n\nfunction resolveConfig(filePath) {\n  resolver.resolveConfigFile(filePath).then(configFile => {\n    if (configFile) {\n      console.log(path.relative(process.cwd(), configFile));\n    } else {\n      process.exitCode = 1;\n    }\n  });\n}\n\nfunction writeOutput(result, options) {\n  // Don't use `console.log` here since it adds an extra newline at the end.\n  process.stdout.write(result.formatted);\n\n  if (options.cursorOffset) {\n    process.stderr.write(result.cursorOffset + \"\\n\");\n  }\n}\n\nfunction eachFilename(patterns, callback) {\n  // The ignorer will be used to filter file paths after the glob is checked,\n  // before any files are actually read\n  const ignoreFilePath = path.resolve(ignorePath);\n  let ignoreText = \"\";\n\n  try {\n    ignoreText = fs.readFileSync(ignoreFilePath, \"utf8\");\n  } catch (readError) {\n    if (readError.code !== \"ENOENT\") {\n      console.error(`Unable to read ${ignoreFilePath}:`, readError);\n      process.exit(2);\n    }\n  }\n\n  const ignorer = ignore().add(ignoreText);\n\n  if (ignoreNodeModules) {\n    patterns = patterns.concat(ignoreNodeModulesGlobs);\n  }\n\n  return globby(patterns, globOptions)\n    .then(filePaths => {\n      if (filePaths.length === 0) {\n        console.error(\n          \"No matching files. Patterns tried: \" + patterns.join(\" \")\n        );\n        process.exitCode = 2;\n        return;\n      }\n      // Use map series to ensure idempotency\n      mapSeries(ignorer.filter(filePaths), filePath => {\n        return getOptionsForFile(filePath).then(options =>\n          callback(filePath, options)\n        );\n      });\n    })\n    .catch(err => {\n      console.error(\n        \"Unable to expand glob patterns: \" + patterns.join(\" \") + \"\\n\" + err\n      );\n      // Don't exit the process if one pattern failed\n      process.exitCode = 2;\n    });\n}\n\nfunction mapSeries(array, iteratee) {\n  let current = Promise.resolve();\n\n  const promises = array.map((item, i) => {\n    current = current.then(() => {\n      return iteratee(item, i, array);\n    });\n    return current;\n  });\n\n  return Promise.all(promises);\n}\n"
  },
  {
    "path": "commands.md",
    "content": "The core of the algorithm is implemented in `doc-{printer,builders,utils,debug}.js`. The printer should\nuse the basic formatting abstractions provided to construct a format\nwhen printing a node. Parts of the API only exist to be compatible\nwith recast's previous API to ease migration, but over time we can\nclean it up.\n\nThe following commands are available:\n\n### concat\n\nCombine an array into a single string.\n\n### group\n\nMark a group of items which the printer should try to fit on one line.\nThis is the basic command to tell the printer when to break. Groups\nare usually nested, and the printer will try to fit everything on one\nline, but if it doesn't fit it will break the outermost group first\nand try again. It will continue breaking groups until everything fits\n(or there are no more groups to break).\n\nA document can force parent groups to break by including `breakParent`\n(see below). A hard and literal line automatically include this so\nthey always break parent groups. Breaks are propagated to all parent\ngroups, so if a deeply nested expression has a hard break, everything\nwith break. This only matters for \"hard\" breaks, i.e. newlines that\nare printed no matter what and can be statically analyzed.\n\nFor example, an array will try to fit on one line:\n\n```js\n[1, \"foo\", { bar: 2 }]\n```\n\nHowever, if any of the items inside the array have a hard break, the\narray will *always* break as well:\n\n```js\n[\n  1,\n  function() {\n    return 2\n  },\n  3\n]\n```\n\nFunctions always break after the opening curly brace no matter what,\nso the array breaks as well for consistent formatting. See the\nimplementation of `ArrayExpression` for an example.\n\n### conditionalGroup\n\nThis should be used as **last resort** as it triggers an exponential complexity when nested. This will try to print the first argument, if it fit use it, otherwise go to the next one and so on.\n\n```js\nconditionalGroup([a, b, c])\n```\n\n### fill\n\nThis is an alternative type of group which behave like text layout: it's going to add a break whenever the next element doesn't fit in the line anymore. The difference with a typical group is that it's not going to break all the separators, just the ones that are at the end of lines.\n\n```js\nfill([\"I\", line, \"love\", line, \"prettier\"])\n```\n\n\n### ifBreak\n\nPrints something if the current group breaks and something else if it doesn't.\n\n```js\nifBreak(\";\", \" \")\n```\n\n### breakParent\n\nInclude this anywhere to force all parent groups to break. See `group`\nfor more info. Example:\n\n```js\ngroup(\n  concat([\n    \" \",\n    expr,\n    \" \",\n    breakParent\n  ])\n)\n```\n\n### join\n\nJoin an array of items with a separator.\n\n### line\n\nSpecify a line break. If an expression fits on one line, the line\nbreak will be replaced with a space. Line breaks always indent the\nnext line with the current level of indentation.\n\n### softline\n\nSpecify a line break. The difference from `line` is that if the\nexpression fits on one line, it will be replaced with nothing.\n\n### hardline\n\nSpecify a line break that is **always** included in the output, no\nmatter if the expression fits on one line or not.\n\n### literalline\n\nSpecify a line break that is **always** included in the output, and\ndon't indent the next line. This is used for template literals.\n\n### lineSuffix\n\nThis is used to implement trailing comments. In practice, it is not practical to find where the line ends and you don't want to accidentally print some code at the end of the comment. `lineSuffix` will buffer the output and flush it before any new line.\n\n```js\nconcat([\"a\", lineSuffix(\" // comment\"), \";\", hardline])\n```\n\nwill output\n\n```js\na; // comment\n```\n\n### lineSuffixBoundary\n\nIn cases where you embed code inside of templates, comments shouldn't be able to leave the code part. lineSuffixBoundary is an explicit marker you can use to flush code in addition to newlines.\n\n```js\nconcat([\"{\", lineSuffix(\" // comment\"), lineSuffixBoundary, \"}\", hardline])\n```\n\nwill output\n\n```js\n{ // comment\n}\n```\n\nand **not**\n\n```js\n{} // comment\n```\n\n### indent\n\nIncrease the level of indentation.\n\n### align\n\nThis is similar to indent but it increases the level of indentation by a fixed number. When using tabs, it's going to print spaces. You should prefer using `indent` whenever possible.\n\n### cursor\n\nThis is a placeholder value where the cursor is in the original input in order to find where it would be printed.\n\n## Example\n\nFor an example, here's the implementation of the `ArrayExpression` node type:\n\n```js\ngroup(\n  concat([\n    \"[\",\n    indent(\n      options.tabWidth,\n      concat([\n        line,\n        join(\n          concat([\",\", line]),\n          path.map(print, \"elements\")\n        )\n      ])\n    ),\n    line,\n    \"]\"\n  ])\n)\n```\n\nThis is a group with opening and closing brackets, and possibly\nindented contents. Because it's a `group` it will always be\nbroken up if any of the sub-expressions are broken.\n"
  },
  {
    "path": "docs/CNAME",
    "content": "prettier.io"
  },
  {
    "path": "docs/en/editors.md",
    "content": "---\nid: editors\ntitle: Editor Integration\nlayout: docs\ncategory: Prettier\npermalink: docs/en/editors.html\nprevious: options\n---\n\n\n## Atom\n\nAtom users can simply install the [prettier-atom](https://github.com/prettier/prettier-atom) package and use\n`Ctrl+Alt+F` to format a file (or format on save if enabled).\n\n## Emacs\n\nEmacs users should see [this repository](https://github.com/prettier/prettier-emacs)\nfor on-demand formatting.\n\n## Vim\n\nVim users can simply install either [sbdchd](https://github.com/sbdchd)/[neoformat](https://github.com/sbdchd/neoformat), [w0rp](https://github.com/w0rp)/[ale](https://github.com/w0rp/ale), or [mitermayer](https://github.com/mitermayer)/[vim-prettier](https://github.com/mitermayer/vim-prettier), for more details see [this directory](https://github.com/prettier/prettier/tree/master/editors/vim).\n\n## Visual Studio Code\n\nCan be installed using the extension sidebar. Search for `Prettier - JavaScript formatter`.\n\nCan also be installed using `ext install prettier-vscode`.\n\n[Check its repository for configuration and shortcuts](https://github.com/esbenp/prettier-vscode)\n\n## Visual Studio\n\nInstall the [JavaScript Prettier extension](https://github.com/madskristensen/JavaScriptPrettier).\n\n## Sublime Text\n\nSublime Text support is available through Package Control and\nthe [JsPrettier](https://packagecontrol.io/packages/JsPrettier) plug-in.\n\n## JetBrains WebStorm, PHPStorm, PyCharm...\n\nSee the [WebStorm\nguide](https://github.com/jlongster/prettier/tree/master/editors/webstorm/README.md).\n\n"
  },
  {
    "path": "docs/en/options.md",
    "content": "---\nid: options\ntitle: Options\nlayout: docs\ncategory: Prettier\npermalink: docs/en/options.html\nprevious: usage\nnext: editors\n---\n\nPrettier ships with a handful of customizable format options, usable in both the CLI and API.\n\n## Print Width\nSpecify the length of line that the printer will wrap on.\n\n**We strongly recommend against using more than 80 columns.**\n\nPrettier works by cramming as much content as possible until it reaches the limit, which happens to work well for 80 columns but makes lines that are very crowded. When a bigger column count is used in styleguides, it usually means that code is allowed to go beyond 80 columns, but not to make every single line go there, like Prettier would do.\n\nDefault | CLI Override | API Override\n--------|--------------|-------------\n`80` | `--print-width <int>` | `printWidth: <int>`\n\n## Tab Width\nSpecify the number of spaces per indentation-level.\n\nDefault | CLI Override | API Override\n--------|--------------|-------------\n `2` | `--tab-width <int>` | `tabWidth: <int>`\n\n## Tabs\nIndent lines with tabs instead of spaces\n\nDefault | CLI Override | API Override\n--------|--------------|-------------\n`false` | `--use-tabs` | `useTabs: <bool>`\n\n## Semicolons\nPrint semicolons at the ends of statements.\n\nValid options:\n\n * `true` - Add a semicolon at the end of every statement.\n * `false` - Only add semicolons at the beginning of lines that may introduce ASI failures.\n\nDefault | CLI Override | API Override\n--------|--------------|-------------\n`true` | `--no-semi` | `semi: <bool>`\n\n## Quotes\nUse single quotes instead of double quotes.\n\nNotes:\n\n* Quotes in JSX will always be double and ignore this setting.\n* If the number of quotes outweighs the other quote, the quote which is less used will be used to format the string - Example: `\"I'm double quoted\"` results in `\"I'm double quoted\"` and `\"This \\\"example\\\" is single quoted\"` results in `'This \"example\" is single quoted'`.\n\nDefault | CLI Override | API Override\n--------|--------------|-------------\n`false` |  `--single-quote` | `singleQuote: <bool>`\n\n## Trailing Commas\nPrint trailing commas wherever possible.\n\nValid options:\n\n * `\"none\"` - No trailing commas.\n * `\"es5\"` - Trailing commas where valid in ES5 (objects, arrays, etc.)\n * `\"all\"` - Trailing commas wherever possible (function arguments). This requires node 8 or a [transform](https://babeljs.io/docs/plugins/syntax-trailing-function-commas/).\n\nDefault | CLI Override | API Override\n--------|--------------|-------------\n`\"none\"` | `--trailing-comma <none,es5,all>` | `trailingComma: \"<none,es5,all>\"`\n\n## Bracket Spacing\nPrint spaces between brackets in object literals.\n\nValid options:\n * `true` - Example: `{ foo: bar }`.\n * `false` - Example: `{foo: bar}`.\n\nDefault | CLI Override | API Override\n--------|--------------|-------------\n`true` | `--no-bracket-spacing` | `bracketSpacing: <bool>`\n\n## JSX Brackets\nPut the `>` of a multi-line JSX element at the end of the last line instead of being alone on the next line.\n\nDefault | CLI Override | API Override\n--------|--------------|-------------\n`false` | `--jsx-bracket-same-line` | `jsxBracketSameLine: <bool>`\n\n## Range\nFormat only a segment of a file.\n\nThese two options can be used to format code starting and ending at a given character offset (inclusive and exclusive, respectively). The range will extend:\n\n* Backwards to the start of the first line containing the selected statement.\n* Forwards to the end of the selected statement.\n\nThese options cannot be used with `cursorOffset`.\n\nDefault | CLI Override | API Override\n--------|--------------|-------------\n`0`        | `--range-start <int>`| `rangeStart: <int>`\n`Infinity` | `--range-end <int>`  | `rangeEnd: <int>`\n\n## Parser\nSpecify which parser to use.\n\nBoth the `babylon` and `flow` parsers support the same set of JavaScript features (including Flow). Prettier automatically infers the parser from the input file path, so you shouldn't have to change this setting.\n\nBuilt-in parsers:\n\n * [`babylon`](https://github.com/babel/babylon/)\n * [`flow`](https://github.com/facebook/flow/tree/master/src/parser)\n * [`typescript`](https://github.com/eslint/typescript-eslint-parser) _Since v1.4.0_\n * [`postcss`](https://github.com/postcss/postcss) _Since v1.4.0_\n * [`json`](https://github.com/vtrushin/json-to-ast) _Since v1.5.0_\n * [`graphql`](https://github.com/graphql/graphql-js/tree/master/src/language) _Since v1.5.0_\n\n[Custom parsers](#custom-parser-api) are also supported.  _Since v1.5.0_\n\nDefault | CLI Override | API Override\n--------|--------------|-------------\n`babylon` | `--parser <string>` or `--parser ./my-parser` | `parser: \"<string>\"` or `parser: require(\"./my-parser\")`\n\n## Filepath\nSpecify the input filepath. This will be used to do parser inference.\n\nFor example, the following will use `postcss` parser:\n\n```bash\ncat foo | prettier --stdin-filepath foo.css\n```\n\nDefault | CLI Override | API Override\n--------|--------------|-------------\nNone | `--stdin-filepath <string>` | `filepath: \"<string>\"`\n\n"
  },
  {
    "path": "docs/en/usage.md",
    "content": "---\nid: usage\ntitle: Usage\nlayout: docs\ncategory: Prettier\npermalink: docs/en/usage.html\nprevious: why-prettier\nnext: options\n---\n\n\n## Install\n\n```\nyarn add prettier --dev\n```\n\nYou can install it globally if you like:\n\n```\nyarn global add prettier\n```\n\n*We're using `yarn` but you can use `npm` if you like:*\n\n```\nnpm install [--save-dev|--global] prettier\n```\n\n## CLI\n\nRun Prettier through the CLI with this script. Run it without any\narguments to see the [options](#options).\n\nTo format a file in-place, use `--write`. You may want to consider\ncommitting your code before doing that, just in case.\n\n```bash\nprettier [opts] [filename ...]\n```\n\nIn practice, this may look something like:\n\n```bash\nprettier --single-quote --trailing-comma es5 --write \"{app,__{tests,mocks}__}/**/*.js\"\n```\n\nDon't forget the quotes around the globs! The quotes make sure that Prettier\nexpands the globs rather than your shell, for cross-platform usage.\nThe [glob syntax from the glob module](https://github.com/isaacs/node-glob/blob/master/README.md#glob-primer)\nis used.\n\nPrettier CLI will ignore files located in `node_modules` directory. To opt-out from this behavior use `--with-node-modules` flag.\n\nIf you're worried that Prettier will change the correctness of your code, add `--debug-check` to the command.\nThis will cause Prettier to print an error message if it detects that code correctness might have changed.\nNote that `--write` cannot be used with `--debug-check`.\n\nAnother useful flag is `--list-different` (or `-l`) which prints the filenames of files that are different from Prettier formatting. If there are differences the script errors out, which is useful in a CI scenario.\n\n```bash\nprettier --single-quote --list-different \"src/**/*.js\"\n```\n\n## ESLint\n\nIf you are using ESLint, integrating Prettier to your workflow is straightforward:\n\nJust add Prettier as an ESLint rule using [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier).\n\n```js\nyarn add --dev prettier eslint-plugin-prettier\n\n// .eslintrc\n{\n  \"plugins\": [\n    \"prettier\"\n  ],\n  \"rules\": {\n    \"prettier/prettier\": \"error\"\n  }\n}\n```\n\nWe also recommend that you use [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) to disable all the existing formatting rules. It's a one liner that can be added on-top of any existing ESLint configuration.\n\n```\n$ yarn add --dev eslint-config-prettier\n```\n\n.eslintrc.json:\n\n```json\n{\n  \"extends\": [\n    \"prettier\"\n  ]\n}\n```\n\n\n## Pre-commit Hook\n\nYou can use Prettier with a pre-commit tool. This can re-format your files that are marked as \"staged\" via `git add` before you commit.\n\n#### Option 1. [lint-staged](https://github.com/okonet/lint-staged)\n\nInstall it along with [husky](https://github.com/typicode/husky):\n\n```bash\nyarn add lint-staged husky --dev\n```\n\nand add this config to your `package.json`:\n\n```json\n{\n  \"scripts\": {\n    \"precommit\": \"lint-staged\"\n  },\n  \"lint-staged\": {\n    \"*.js\": [\n      \"prettier --write\",\n      \"git add\"\n    ]\n  }\n}\n```\n\nSee https://github.com/okonet/lint-staged#configuration for more details about how you can configure lint-staged.\n\n\n#### Option 2. [pre-commit](https://github.com/pre-commit/pre-commit)\n\nCopy the following config into your `.pre-commit-config.yaml` file:\n\n```yaml\n\n    -   repo: https://github.com/prettier/prettier\n        sha: ''  # Use the sha or tag you want to point at\n        hooks:\n        -   id: prettier\n ```\n\nFind more info from [here](https://github.com/awebdeveloper/pre-commit-prettier).\n\n#### Option 3. bash script\n\nAlternately you can save this script as `.git/hooks/pre-commit` and give it execute permission:\n\n```bash\n#!/bin/sh\njsfiles=$(git diff --cached --name-only --diff-filter=ACM | grep '\\.jsx\\?$' | tr '\\n' ' ')\n[ -z \"$jsfiles\" ] && exit 0\n\n# Prettify all staged .js files\necho \"jsfiles\" | xargs ./node_modules/.bin/prettier --write\n\n# Add back the modified/prettified files to staging\necho \"jsfiles\" | xargs git add\n\nexit 0\n```\n\n## API\n\nThe API has three functions:  `format`, `check`, and `formatWithCursor`.\n\n```js\nconst prettier = require(\"prettier\");\n```\n\n### `prettier.format(source [, options])`\n\n`format` is used to format text using Prettier. [Options](#options) may be provided to override the defaults.\n\n```js\nprettier.format(\"foo ( );\", { semi: false });\n// -> \"foo()\"\n```\n\n### `prettier.check(source [, options])`\n\n`check` checks to see if the file has been formatted with Prettier given those options and returns a `Boolean`.\nThis is similar to the `--list-different` parameter in the CLI and is useful for running Prettier in CI scenarios.\n\n### `prettier.formatWithCursor(source [, options])`\n\n`formatWithCursor` both formats the code, and translates a cursor position from unformatted code to formatted code.\nThis is useful for editor integrations, to prevent the cursor from moving when code is formatted.\n\nThe `cursorOffset` option should be provided, to specify where the cursor is. This option cannot be used with `rangeStart` and `rangeEnd`.\n\n```js\nprettier.formatWithCursor(\" 1\", { cursorOffset: 2 });\n// -> { formatted: '1;\\n', cursorOffset: 1 }\n```\n\n### Custom Parser API\n\nIf you need to make modifications to the AST (such as codemods), or you want to provide an alternate parser, you can do so by setting the `parser` option to a function. The function signature of the parser function is:\n```js\n(text: string, parsers: object, options: object) => AST;\n```\n\nPrettier's built-in parsers are exposed as properties on the `parsers` argument.\n\n```js\nprettier.format(\"lodash ( )\", {\n  parser(text, { babylon }) {\n    const ast = babylon(text);\n    ast.program.body[0].expression.callee.name = \"_\";\n    return ast;\n  }\n});\n// -> \"_();\\n\"\n```\n\nThe `--parser` CLI option may be a path to a node.js module exporting a parse function.\n\n## Excluding code from formatting\n\nA JavaScript comment of `// prettier-ignore` will exclude the next node in the abstract syntax tree from formatting.\n\nFor example:\n\n```js\nmatrix(\n  1, 0, 0,\n  0, 1, 0,\n  0, 0, 1\n)\n\n// prettier-ignore\nmatrix(\n  1, 0, 0,\n  0, 1, 0,\n  0, 0, 1\n)\n```\n\nwill be transformed to:\n\n```js\nmatrix(1, 0, 0, 0, 1, 0, 0, 0, 1);\n\n// prettier-ignore\nmatrix(\n  1, 0, 0,\n  0, 1, 0,\n  0, 0, 1\n)\n```\n"
  },
  {
    "path": "docs/en/why-prettier.md",
    "content": "---\nid: why-prettier\ntitle: Why Prettier?\nlayout: docs\ncategory: Prettier\npermalink: docs/en/why-prettier.html\nnext: usage\n---\n\n## Building and enforcing a style guide\n\nBy far the biggest reason for adopting prettier is to stop all the ongoing debates over styles. It is generally accepted that having a common style guide is valuable for a project & team but getting there is a very painful and unrewarding process. People get very emotional around particular ways of writing code and nobody likes spending time writing and receiving nits.\n\n- “We want to free mental threads and end discussions around style. While sometimes fruitful, these discussions are for the most part wasteful.”\n- “Literally had an engineer go through a huge effort of cleaning up all of our code because we were debating ternary style for the longest time and were inconsistent about it. It was dumb, but it was a weird on-going \"great debate\" that wasted lots of little back and forth bits. It's far easier for us all to agree now: just run prettier, and go with that style.”\n- “Getting tired telling people how to style their product code.”\n- “Our top reason was to stop wasting our time debating style nits.”\n- “Having a githook set up has reduced the amount of style issues in PRs that result in broken builds due to ESLint rules or things I have to nit-pick or clean up later.”\n- “I don't want anybody to nitpick any other person ever again.”\n- “It reminds me of how Steve Jobs used to wear the same clothes every day because he has a million decisions to make and he didn't want to be bothered to make trivial ones like picking out clothes. I think Prettier is like that.”\n\n## Helping Newcomers\n\nPrettier is usually introduced by people with experience in the current codebase and JavaScript but the people that disproportionally benefit from it are newcomers to the codebase. One may think that it's only useful for people with very limited programming experience, but we've seen it quicken the ramp up time from experienced engineers joining the company, as they likely used a different coding style before, and developers coming from a different programming language.\n\n- “My motivations for using Prettier are: appearing that I know how to write JavaScript well.”\n- “I always put spaces in the wrong place, now I don't have to worry about it anymore.”\n- “When you're a beginner you're making a lot of mistakes caused by the syntax. Thanks to Prettier, you can reduce these mistakes and save a lot of time to focus on what really matters.”\n- “As a teacher, I will also tell to my students to install Prettier to help them to learn the JS syntax and have readable files.”\n\n## Writing code\n\nWhat usually happens once people are using prettier is that they realize that they actually spend a lot of time and mental energy formatting their code. With prettier editor integration, you can just press that magic key binding and poof, the code is formatted. This is an eye opening experience if anything else.\n\n- “I want to write code. Not spend cycles on formatting.”\n- “It removed 5% that sucks in our daily life - aka formatting”\n- “We're in 2017 and it's still painful to break a call into multiple lines when you happen to add an argument that makes it go over the 80 columns limit :(“\n\n## Easy to adopt\n\nWe've worked very hard to use the least controversial coding styles, went through many rounds of fixing all the edge cases and polished the getting started experience. When you're ready to push prettier into your codebase, not only should it be painless for you to do it technically but the newly formatted codebase should not generate major controversy and be accepted painlessly by your co-workers.\n\n- “It's low overhead. We were able to throw Prettier at very different kinds of repos without much work.”\n- “It's been mostly bug free. Had there been major styling issues during the course of implementation we would have been wary about throwing this at our JS codebase. I'm happy to say that's not the case.”\n- “Everyone runs it as part of their pre commit scripts, a couple of us use the editor on save extensions as well.”\n- “It's fast, against one of our larger JS codebases we were able to run Prettier in under 13 seconds.”\n- “The biggest benefit for prettier for us was being able to format the entire code base at once.”\n\n## Clean up an existing codebase\n\nSince coming up with a coding style and enforcing it is a big undertaking, it often slips through the cracks and you are left working on inconsistent codebases. Running prettier in this case is a quick win, the codebase is now uniform and easier to read without spending hardly any time.\n\n- “Take a look at the code :) I just need to restore sanity.”\n- “We inherited a ~2000 module ES6 code base, developed by 20 different developers over 18 months, in a global team. Felt like such a win without much research.\n\n## Ride the hype train\n\nPurely technical aspects of the projects aren't the only thing people look into when choosing to adopt prettier. Who built and uses it and how quickly it spreads through the community have a non trivial impact.\n\n- “The amazing thing, for me, is: 1) Announced 2 months ago. 2) Already adopted by, it seems, every major JS project. 3) 7000 stars, 100,000 npm downloads/mo”\n- “Was built by the same people as React & React Native.”\n- “I like to be part of the hot new things.”\n- “Because soon enough people are gonna ask for it.”\n"
  },
  {
    "path": "editors/atom.md",
    "content": "See https://github.com/prettier/prettier-atom\n"
  },
  {
    "path": "editors/emacs/README.md",
    "content": "This package has been moved to https://github.com/prettier/prettier-emacs.\n\nPlease, update your configuration to use the new location.\n"
  },
  {
    "path": "editors/vim/README.md",
    "content": "# Vim Prettier\n\n<details>\n<summary><strong>Table of Contents</strong></summary>\n\n- [Vim and Prettier integration](#vim-and-prettier-integration)\n  * [Neoformat](#neoformat)\n    + [Neoformat - Installation](#neoformat---installation)\n    + [Neoformat - Usage](#neoformat---usage)\n    + [Neoformat - Other autocmd events](#neoformat---other-autocmd-events)\n    + [Neoformat - Customizing Prettier](#neoformat---customizing-prettier)\n  * [vim-prettier](#vim-prettier-1)\n    + [vim-prettier - Installation](#vim-prettier---installation)\n    + [vim-prettier - Usage](#vim-prettier---usage)\n    + [vim-prettier - Configuration](#vim-prettier---configuration)\n  * [ALE](#ale)\n    + [ALE - Installation](#ale---installation)\n    + [ALE - Usage](#ale---usage)\n    + [ALE - Configuration](#ale---configuration)\n  * [Running manually](#running-manually)\n    + [Running Prettier manually in Vim](#running-prettier-manually-in-vim)\n</details>\n\n--------------------------------------------------------------------------------\n\n## Vim and Prettier integration\n\nVim users can simply install either [sbdchd](https://github.com/sbdchd)/[neoformat](https://github.com/sbdchd/neoformat), [w0rp](https://github.com/w0rp)/[ale](https://github.com/w0rp/ale), or [mitermayer](https://github.com/mitermayer)/[vim-prettier](https://github.com/mitermayer/vim-prettier).\n\n--------------------------------------------------------------------------------\n\n### Neoformat \n\n#### Neoformat - Installation\n\nAdd [sbdchd](https://github.com/sbdchd)/[neoformat](https://github.com/sbdchd/neoformat) to your list based on the tool you use:\n\n```vim\nPlug 'sbdchd/neoformat'\n```\n\n#### Neoformat - Usage\n\nThen make Neoformat run on save:\n\n```vim\nautocmd BufWritePre *.js Neoformat\n```\n\n#### Neoformat - Other `autocmd` events\n\nYou can also make Vim format your code more frequently, by setting an `autocmd` for other events. Here are a couple of useful ones:\n\n* `TextChanged`: after a change was made to the text in Normal mode\n* `InsertLeave`: when leaving Insert mode\n\nFor example, you can format on both of the above events together with `BufWritePre` like this:\n\n```vim\nautocmd BufWritePre,TextChanged,InsertLeave *.js Neoformat\n```\n\nSee `:help autocmd-events` in Vim for details.\n\n#### Neoformat - Customizing Prettier \n\nIf your project requires settings other than the default Prettier settings, you can pass arguments to do so in your `.vimrc` or [vim project](http://vim.wikia.com/wiki/Project_specific_settings), you can do so:\n\n```vim\nautocmd FileType javascript setlocal formatprg=prettier\\ --stdin\\ --parser\\ flow\\ --single-quote\\ --trailing-comma\\ es5\n\" Use formatprg when available\nlet g:neoformat_try_formatprg = 1\n```\n\nEach space in prettier options should be escaped with `\\`.\n\n--------------------------------------------------------------------------------\n\n### vim-prettier\n\n![vim-prettier](https://raw.githubusercontent.com/mitermayer/vim-prettier/master/media/vim-prettier.gif?raw=true \"vim-prettier\")\n \n#### vim-prettier - Installation\n\nInstall with [vim-plug](https://github.com/junegunn/vim-plug), assumes node and yarn|npm installed globally.\n\nBy default it will auto format **javascript**, **typescript**, **less**, **scss** and **css** files that have \"@format\" annotation in the header of the file.\n\n```vim\n\" post install (yarn install | npm install) then load plugin only for editing supported files\nPlug 'mitermayer/vim-prettier', { \n    \\ 'do': 'npm install', \n    \\ 'for': ['javascript', 'typescript', 'css', 'less', 'scss'] } \n```\n\nIf using other vim plugin managers or doing manual setup make sure to have `prettier` installed globally or go to your vim-prettier directory and either do `npm install` or `yarn install`\n\nWhen installed via vim-plug, a default prettier executable is installed inside vim-prettier.\n\nvim-prettier executable resolution:\n\n1. Tranverse parents and search for Prettier installation inside `node_modules`\n2. Look for a global prettier installation\n3. Use locally installed vim-prettier prettier executable\n\n#### vim-prettier - Usage\n\nPrettier by default will run on auto save but can also be manualy triggered by:\n\n```vim\n<Leader>p\n```\nor \n```vim\n:Prettier\n```\n\nIf your are on vim 8+ you can also trigger async formatting by:\n\n```vim\n:PrettierAsync\n```\n\n#### vim-prettier - Configuration\n\nDisable auto formatting of files that have \"@format\" tag \n\n```vim\nlet g:prettier#autoformat = 0\n```\n\nThe command `:Prettier` by default is synchronous but can also be forced async\n\n```vim\nlet g:prettier#exec_cmd_async = 1\n```\n\nBy default parsing errors will open the quickfix but can also be disabled\n\n```vim\nlet g:prettier#quickfix_enabled = 0\n```\n\nTo enable vim-prettier to run in files without requiring the \"@format\" doc tag.\nFirst disable the default autoformat, then update to your own custom behaviour\n\nRunning before saving sync:\n\n```vim\nlet g:prettier#autoformat = 0\nautocmd BufWritePre *.js,*.css,*.scss,*.less Prettier\n```\n\nRunning before saving async (vim 8+):\n\n```vim\nlet g:prettier#autoformat = 0\nautocmd BufWritePre *.js,*.css,*.scss,*.less PrettierAsync\n```\n\nRunning before saving, changing text or leaving insert mode: \n\n```vim\n\" when running at every change you may want to disable quickfix\nlet g:prettier#quickfix_enabled = 0\n\nlet g:prettier#autoformat = 0\nautocmd BufWritePre,TextChanged,InsertLeave *.js,*.css,*.scss,*.less PrettierAsync\n```\n\n**Vim-prettier default formatting settings are different from the prettier defaults, but they can be configured** \n\n```vim\n\" max line lengh that prettier will wrap on\ng:prettier#config#print_width = 80\n\n\" number of spaces per indentation level\ng:prettier#config#tab_width = 2\n\n\" use tabs over spaces\ng:prettier#config#use_tabs = 'false'\n\n\" print semicolons\ng:prettier#config#semi = 'true'\n\n\" single quotes over double quotes\ng:prettier#config#single_quote = 'true' \n\n\" print spaces between brackets\ng:prettier#config#bracket_spacing = 'false' \n\n\" put > on the last line instead of new line\ng:prettier#config#jsx_bracket_same_line = 'true' \n\n\" none|es5|all\ng:prettier#config#trailing_comma = 'all'\n\n\" flow|babylon|typescript|postcss\ng:prettier#config#parser = 'flow'\n\n```\n--------------------------------------------------------------------------------\n\n### ALE\n\n#### ALE - Installation\n\n[ALE](https://github.com/w0rp/ale) is an asynchronous lint engine for Vim that\nalso has the ability to run formatters over code, including Prettier. For ALE\nto work you'll have to be using either Vim 8 or Neovim as ALE makes use of the\nasynchronous abilities that both Vim 8 and Neovim provide.\n\nThe best way to install ALE is with your favourite plugin manager for Vim, such\nas [Vim-Plug](https://github.com/junegunn/vim-plug):\n\n```vim\nPlug 'w0rp/ale'\n```\n\nYou can find further instructions on the [ALE repository](https://github.com/w0rp/ale#3-installation).\n\n#### ALE - Usage\n\nOnce you've installed ALE you need to enable the Prettier fixer:\n\n```vim\nlet g:ale_fixers = {}\nlet g:ale_fixers['javascript'] = ['prettier']\n```\n\nALE will first use the Prettier installed locally (in\n`node_modules/.bin/prettier`) before looking for a global installation.\n\nYou can then run `:ALEFix` in a JavaScript file to run Prettier.\n\n#### ALE - Configuration\n\nTo have ALE run `prettier` when you save a file you can tell ALE to run\nautomatically:\n\n```vim\nlet g:ale_fix_on_save = 1\n```\n\nTo configure Prettier, you can set `g:ale_javascript_prettier_options`. This is\na string that will be passed through to the Prettier command line tool:\n\n```vim\nlet g:ale_javascript_prettier_options = '--single-quote --trailing-comma es5'\n```\n\n--------------------------------------------------------------------------------\n\n### Running manually  \n\n#### Running Prettier manually in Vim\n\nIf you need a little more control over when prettier is run, you can create a\ncustom key binding. In this example, `gp` (mnemonic: \"get pretty\") is used to\nrun prettier (with options) in the currently active buffer:\n\n```vim\nnnoremap gp :silent %!prettier --stdin --trailing-comma all --single-quote<CR>\n```\n"
  },
  {
    "path": "editors/webstorm/README.md",
    "content": "## Configure External Tool\n\nhttps://blog.jetbrains.com/webstorm/2016/08/using-external-tools/\n\nGo to *File | Settings | Tools | External Tools* for Windows and Linux or *WebStorm | Preferences | Tools | External Tools* for OS X and click **+** to add a new tool. Let’s name it **Prettier**.\n\n* **Program** set `prettier`\n\n> If on the other hand you have `prettier` installed locally, replace the **Program** with `./node_modules/.bin/prettier` (on OS X and Linux) or `.\\node_modules\\.bin\\prettier.cmd` (on Windows).\n\n* **Parameters** set `--write [other opts] $FilePathRelativeToProjectRoot$`\n* **Working directory** set `$ProjectFileDir$`\n\n![Example](https://raw.githubusercontent.com/prettier/prettier/master/editors/webstorm/with-prettier.png)\n\n### Process directories\n\n* Clone the External tool created above and name it `Prettier Directories`\n* **Parameters** set `--write [other opts] $FileDirRelativeToProjectRoot$/**/(*.js|*.jsx)`\n\n## Usage\n\n* Cmd-Shift-A on OS X or Ctrl+Shift+A on Windows and Linux\n* Type: 'prettier' and hit enter\n\n### Configure Keymap\n\nNow when you setup **External Tool** I guess you want to add hotkey for it. Go to *File | Settings | Keymap* for Windows and Linux *WebStorm | Preferences | Keymap* and type external tool name in search box.\n\nSee [this documentation](https://www.jetbrains.com/help/webstorm/configuring-keyboard-shortcuts.html) about configuring keyboard shortcuts.\n\n## Using File Watcher\n\nTo automatically format using `prettier` on save, you can use a file watcher.\n\nGo to *File | Settings | Tools | File Watchers* for Windows and Linux or *WebStorm | Preferences | Tools | File Watchers* for OS X and click **+** to add a new tool. Let’s name it **Prettier**.\n\n* **Program** set the full path to a `prettier` executable, such as `/Users/developer/repo/jest/node_modules/.bin/prettier` (on OS X and Linux) or `C:/\\Users\\developer\\repo\\jest\\node_modules\\.bin\\prettier.cmd` (on Windows).\n* **Parameters** set `--write [other opts] $FilePath$`\n* **Working directory** set `$ProjectFileDir$`\n* **Immediate file synchronization**: Uncheck to reformat on Save only (otherwise code will jump around while you type)\n"
  },
  {
    "path": "index.js",
    "content": "\"use strict\";\n\nconst stripBom = require(\"strip-bom\");\nconst comments = require(\"./src/comments\");\nconst version = require(\"./package.json\").version;\nconst printAstToDoc = require(\"./src/printer\").printAstToDoc;\nconst util = require(\"./src/util\");\nconst printDocToString = require(\"./src/doc-printer\").printDocToString;\nconst normalizeOptions = require(\"./src/options\").normalize;\nconst parser = require(\"./src/parser\");\nconst printDocToDebug = require(\"./src/doc-debug\").printDocToDebug;\nconst config = require(\"./src/resolve-config\");\n\nfunction guessLineEnding(text) {\n  const index = text.indexOf(\"\\n\");\n  if (index >= 0 && text.charAt(index - 1) === \"\\r\") {\n    return \"\\r\\n\";\n  }\n  return \"\\n\";\n}\n\nfunction attachComments(text, ast, opts) {\n  const astComments = ast.comments;\n  if (astComments) {\n    delete ast.comments;\n    comments.attach(astComments, ast, text, opts);\n  }\n  ast.tokens = [];\n  opts.originalText = text.trimRight();\n  return astComments;\n}\n\nfunction ensureAllCommentsPrinted(astComments) {\n  if (!astComments) {\n    return;\n  }\n\n  for (let i = 0; i < astComments.length; ++i) {\n    if (astComments[i].value.trim() === \"prettier-ignore\") {\n      // If there's a prettier-ignore, we're not printing that sub-tree so we\n      // don't know if the comments was printed or not.\n      return;\n    }\n  }\n\n  astComments.forEach(comment => {\n    if (!comment.printed) {\n      throw new Error(\n        'Comment \"' +\n          comment.value.trim() +\n          '\" was not printed. Please report this error!'\n      );\n    }\n    delete comment.printed;\n  });\n}\n\nfunction formatWithCursor(text, opts, addAlignmentSize) {\n  text = stripBom(text);\n  addAlignmentSize = addAlignmentSize || 0;\n\n  const ast = parser.parse(text, opts);\n\n  const formattedRangeOnly = formatRange(text, opts, ast);\n  if (formattedRangeOnly) {\n    return { formatted: formattedRangeOnly };\n  }\n\n  let cursorOffset;\n  if (opts.cursorOffset >= 0) {\n    const cursorNodeAndParents = findNodeAtOffset(ast, opts.cursorOffset);\n    const cursorNode = cursorNodeAndParents.node;\n    if (cursorNode) {\n      cursorOffset = opts.cursorOffset - util.locStart(cursorNode);\n      opts.cursorNode = cursorNode;\n    }\n  }\n\n  const astComments = attachComments(text, ast, opts);\n  const doc = printAstToDoc(ast, opts, addAlignmentSize);\n  opts.newLine = guessLineEnding(text);\n  const toStringResult = printDocToString(doc, opts);\n  const str = toStringResult.formatted;\n  const cursorOffsetResult = toStringResult.cursor;\n  ensureAllCommentsPrinted(astComments);\n  // Remove extra leading indentation as well as the added indentation after last newline\n  if (addAlignmentSize > 0) {\n    return { formatted: str.trim() + opts.newLine };\n  }\n\n  if (cursorOffset !== undefined) {\n    return {\n      formatted: str,\n      cursorOffset: cursorOffsetResult + cursorOffset\n    };\n  }\n\n  return { formatted: str };\n}\n\nfunction format(text, opts, addAlignmentSize) {\n  return formatWithCursor(text, opts, addAlignmentSize).formatted;\n}\n\nfunction findSiblingAncestors(startNodeAndParents, endNodeAndParents) {\n  let resultStartNode = startNodeAndParents.node;\n  let resultEndNode = endNodeAndParents.node;\n\n  if (resultStartNode === resultEndNode) {\n    return {\n      startNode: resultStartNode,\n      endNode: resultEndNode\n    };\n  }\n\n  for (const endParent of endNodeAndParents.parentNodes) {\n    if (\n      endParent.type !== \"Program\" &&\n      endParent.type !== \"File\" &&\n      util.locStart(endParent) >= util.locStart(startNodeAndParents.node)\n    ) {\n      resultEndNode = endParent;\n    } else {\n      break;\n    }\n  }\n\n  for (const startParent of startNodeAndParents.parentNodes) {\n    if (\n      startParent.type !== \"Program\" &&\n      startParent.type !== \"File\" &&\n      util.locEnd(startParent) <= util.locEnd(endNodeAndParents.node)\n    ) {\n      resultStartNode = startParent;\n    } else {\n      break;\n    }\n  }\n\n  return {\n    startNode: resultStartNode,\n    endNode: resultEndNode\n  };\n}\n\nfunction findNodeAtOffset(node, offset, predicate, parentNodes) {\n  predicate = predicate || (() => true);\n  parentNodes = parentNodes || [];\n  const start = util.locStart(node);\n  const end = util.locEnd(node);\n  if (start <= offset && offset <= end) {\n    for (const childNode of comments.getSortedChildNodes(node)) {\n      const childResult = findNodeAtOffset(\n        childNode,\n        offset,\n        predicate,\n        [node].concat(parentNodes)\n      );\n      if (childResult) {\n        return childResult;\n      }\n    }\n\n    if (predicate(node)) {\n      return {\n        node: node,\n        parentNodes: parentNodes\n      };\n    }\n  }\n}\n\n// See https://www.ecma-international.org/ecma-262/5.1/#sec-A.5\nfunction isSourceElement(opts, node) {\n  if (node == null) {\n    return false;\n  }\n  switch (node.type || node.kind) {\n    case \"ObjectExpression\": // JSON\n    case \"ArrayExpression\": // JSON\n    case \"StringLiteral\": // JSON\n    case \"NumericLiteral\": // JSON\n    case \"BooleanLiteral\": // JSON\n    case \"NullLiteral\": // JSON\n    case \"json-identifier\": // JSON\n      return opts.parser === \"json\";\n    case \"FunctionDeclaration\":\n    case \"BlockStatement\":\n    case \"BreakStatement\":\n    case \"ContinueStatement\":\n    case \"DebuggerStatement\":\n    case \"DoWhileStatement\":\n    case \"EmptyStatement\":\n    case \"ExpressionStatement\":\n    case \"ForInStatement\":\n    case \"ForStatement\":\n    case \"IfStatement\":\n    case \"LabeledStatement\":\n    case \"ReturnStatement\":\n    case \"SwitchStatement\":\n    case \"ThrowStatement\":\n    case \"TryStatement\":\n    case \"VariableDeclaration\":\n    case \"WhileStatement\":\n    case \"WithStatement\":\n    case \"ClassDeclaration\": // ES 2015\n    case \"ImportDeclaration\": // Module\n    case \"ExportDefaultDeclaration\": // Module\n    case \"ExportNamedDeclaration\": // Module\n    case \"ExportAllDeclaration\": // Module\n    case \"TypeAlias\": // Flow\n    case \"InterfaceDeclaration\": // Flow, Typescript\n    case \"TypeAliasDeclaration\": // Typescript\n    case \"ExportAssignment\": // Typescript\n    case \"ExportDeclaration\": // Typescript\n    case \"OperationDefinition\": // GraphQL\n    case \"FragmentDefinition\": // GraphQL\n    case \"VariableDefinition\": // GraphQL\n    case \"TypeExtensionDefinition\": // GraphQL\n    case \"ObjectTypeDefinition\": // GraphQL\n    case \"FieldDefinition\": // GraphQL\n    case \"DirectiveDefinition\": // GraphQL\n    case \"EnumTypeDefinition\": // GraphQL\n    case \"EnumValueDefinition\": // GraphQL\n    case \"InputValueDefinition\": // GraphQL\n    case \"InputObjectTypeDefinition\": // GraphQL\n    case \"SchemaDefinition\": // GraphQL\n    case \"OperationTypeDefinition\": // GraphQL\n    case \"InterfaceTypeDefinition\": // GraphQL\n    case \"UnionTypeDefinition\": // GraphQL\n    case \"ScalarTypeDefinition\": // GraphQL\n      return true;\n  }\n  return false;\n}\n\nfunction calculateRange(text, opts, ast) {\n  // Contract the range so that it has non-whitespace characters at its endpoints.\n  // This ensures we can format a range that doesn't end on a node.\n  const rangeStringOrig = text.slice(opts.rangeStart, opts.rangeEnd);\n  const startNonWhitespace = Math.max(\n    opts.rangeStart + rangeStringOrig.search(/\\S/),\n    opts.rangeStart\n  );\n  let endNonWhitespace;\n  for (\n    endNonWhitespace = opts.rangeEnd;\n    endNonWhitespace > opts.rangeStart;\n    --endNonWhitespace\n  ) {\n    if (text[endNonWhitespace - 1].match(/\\S/)) {\n      break;\n    }\n  }\n\n  const startNodeAndParents = findNodeAtOffset(ast, startNonWhitespace, node =>\n    isSourceElement(opts, node)\n  );\n  const endNodeAndParents = findNodeAtOffset(ast, endNonWhitespace, node =>\n    isSourceElement(opts, node)\n  );\n\n  if (!startNodeAndParents || !endNodeAndParents) {\n    return {\n      rangeStart: 0,\n      rangeEnd: 0\n    };\n  }\n\n  const siblingAncestors = findSiblingAncestors(\n    startNodeAndParents,\n    endNodeAndParents\n  );\n  const startNode = siblingAncestors.startNode;\n  const endNode = siblingAncestors.endNode;\n  const rangeStart = Math.min(util.locStart(startNode), util.locStart(endNode));\n  const rangeEnd = Math.max(util.locEnd(startNode), util.locEnd(endNode));\n\n  return {\n    rangeStart: rangeStart,\n    rangeEnd: rangeEnd\n  };\n}\n\nfunction formatRange(text, opts, ast) {\n  if (opts.rangeStart <= 0 && text.length <= opts.rangeEnd) {\n    return;\n  }\n\n  const range = calculateRange(text, opts, ast);\n  const rangeStart = range.rangeStart;\n  const rangeEnd = range.rangeEnd;\n  const rangeString = text.slice(rangeStart, rangeEnd);\n\n  // Try to extend the range backwards to the beginning of the line.\n  // This is so we can detect indentation correctly and restore it.\n  // Use `Math.min` since `lastIndexOf` returns 0 when `rangeStart` is 0\n  const rangeStart2 = Math.min(\n    rangeStart,\n    text.lastIndexOf(\"\\n\", rangeStart) + 1\n  );\n  const indentString = text.slice(rangeStart2, rangeStart);\n\n  const alignmentSize = util.getAlignmentSize(indentString, opts.tabWidth);\n\n  const rangeFormatted = format(\n    rangeString,\n    Object.assign({}, opts, {\n      rangeStart: 0,\n      rangeEnd: Infinity,\n      printWidth: opts.printWidth - alignmentSize\n    }),\n    alignmentSize\n  );\n\n  // Since the range contracts to avoid trailing whitespace,\n  // we need to remove the newline that was inserted by the `format` call.\n  const rangeTrimmed = rangeFormatted.trimRight();\n\n  return text.slice(0, rangeStart) + rangeTrimmed + text.slice(rangeEnd);\n}\n\nmodule.exports = {\n  formatWithCursor: function(text, opts) {\n    return formatWithCursor(text, normalizeOptions(opts));\n  },\n\n  format: function(text, opts) {\n    return format(text, normalizeOptions(opts));\n  },\n\n  check: function(text, opts) {\n    try {\n      const formatted = format(text, normalizeOptions(opts));\n      return formatted === text;\n    } catch (e) {\n      return false;\n    }\n  },\n\n  resolveConfig: config.resolveConfig,\n  clearConfigCache: config.clearCache,\n\n  version,\n\n  /* istanbul ignore next */\n  __debug: {\n    parse: function(text, opts) {\n      return parser.parse(text, opts);\n    },\n    formatAST: function(ast, opts) {\n      opts = normalizeOptions(opts);\n      const doc = printAstToDoc(ast, opts);\n      const str = printDocToString(doc, opts);\n      return str;\n    },\n    // Doesn't handle shebang for now\n    formatDoc: function(doc, opts) {\n      opts = normalizeOptions(opts);\n      const debug = printDocToDebug(doc);\n      const str = format(debug, opts);\n      return str;\n    },\n    printToDoc: function(text, opts) {\n      opts = normalizeOptions(opts);\n      const ast = parser.parse(text, opts);\n      attachComments(text, ast, opts);\n      const doc = printAstToDoc(ast, opts);\n      return doc;\n    },\n    printDocToString: function(doc, opts) {\n      opts = normalizeOptions(opts);\n      const str = printDocToString(doc, opts);\n      return str;\n    }\n  }\n};\n"
  },
  {
    "path": "jest.config.js",
    "content": "\"use strict\";\n\nconst ENABLE_COVERAGE = !!process.env.CI;\n\nmodule.exports = {\n  setupFiles: [\"<rootDir>/tests_config/run_spec.js\"],\n  snapshotSerializers: [\"<rootDir>/tests_config/raw-serializer.js\"],\n  testRegex: \"jsfmt\\\\.spec\\\\.js$|__tests__/.*\\\\.js$\",\n  testPathIgnorePatterns: [\"tests/new_react\", \"tests/more_react\"],\n  collectCoverage: ENABLE_COVERAGE,\n  collectCoverageFrom: [\"src/**/*.js\", \"index.js\", \"!<rootDir>/node_modules/\"],\n  coveragePathIgnorePatterns: [\n    \"<rootDir>/src/doc-debug.js\",\n    \"<rootDir>/src/clean-ast.js\",\n    \"<rootDir>/src/deprecated.js\"\n  ],\n  testPathIgnorePatterns: [\n    \"tests_integration/__tests__/the-following-tests-all-hang-forever-on-my-machine.js\",\n    \"tests_integration/__tests__/debug-check.js\",\n    \"tests_integration/__tests__/debug-print-doc.js\",\n    \"tests_integration/__tests__/list-different.js\",\n    \"tests_integration/__tests__/multiple-patterns.js\",\n    \"tests_integration/__tests__/syntax-error.js\"\n  ]\n};\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"prettier-miscellaneous\",\n  \"version\": \"1.5.3\",\n  \"description\": \"Prettier Miscellaneous is a fork of Prettier with the goal of supporting minor extra options\",\n  \"bin\": {\n    \"prettier\": \"./bin/prettier.js\"\n  },\n  \"repository\": \"arijs/prettier-miscellaneous\",\n  \"homepage\": \"https://prettier.io\",\n  \"author\": \"Rafael Hengles\",\n  \"license\": \"MIT\",\n  \"main\": \"./index.js\",\n  \"dependencies\": {\n    \"babel-code-frame\": \"7.0.0-alpha.12\",\n    \"babylon\": \"7.0.0-beta.13\",\n    \"chalk\": \"2.0.1\",\n    \"cosmiconfig\": \"2.1.3\",\n    \"dashify\": \"0.2.2\",\n    \"diff\": \"3.2.0\",\n    \"esutils\": \"2.0.2\",\n    \"flow-parser\": \"0.47.0\",\n    \"get-stream\": \"3.0.0\",\n    \"globby\": \"^6.1.0\",\n    \"graphql\": \"0.10.1\",\n    \"ignore\": \"^3.3.3\",\n    \"jest-validate\": \"20.0.3\",\n    \"json-to-ast\": \"2.0.0-alpha1.2\",\n    \"minimatch\": \"3.0.4\",\n    \"minimist\": \"1.2.0\",\n    \"parse5\": \"3.0.2\",\n    \"postcss\": \"^6.0.1\",\n    \"postcss-less\": \"^1.0.0\",\n    \"postcss-media-query-parser\": \"0.2.3\",\n    \"postcss-scss\": \"1.0.0\",\n    \"postcss-selector-parser\": \"2.2.3\",\n    \"postcss-values-parser\": \"git://github.com/shellscape/postcss-values-parser.git#5e351360479116f3fe309602cdd15b0a233bc29f\",\n    \"strip-bom\": \"3.0.0\",\n    \"typescript\": \"2.5.0-dev.20170617\",\n    \"typescript-eslint-parser\": \"git://github.com/eslint/typescript-eslint-parser.git#7c38401aa1452e6cc493151b8ab3a591e4d5e74a\"\n  },\n  \"devDependencies\": {\n    \"babel-cli\": \"6.24.1\",\n    \"babel-preset-es2015\": \"6.24.1\",\n    \"codecov\": \"2.2.0\",\n    \"cross-env\": \"5.0.1\",\n    \"cross-spawn\": \"5.1.0\",\n    \"eslint\": \"4.1.1\",\n    \"eslint-friendly-formatter\": \"3.0.0\",\n    \"eslint-plugin-import\": \"2.6.1\",\n    \"eslint-plugin-prettier\": \"2.1.2\",\n    \"eslint-plugin-react\": \"7.1.0\",\n    \"jest\": \"20.0.0\",\n    \"mkdirp\": \"^0.5.1\",\n    \"prettier\": \"1.5.2\",\n    \"rimraf\": \"2.6.1\",\n    \"rollup\": \"0.41.1\",\n    \"rollup-plugin-commonjs\": \"7.0.0\",\n    \"rollup-plugin-json\": \"2.1.0\",\n    \"rollup-plugin-node-builtins\": \"2.0.0\",\n    \"rollup-plugin-node-globals\": \"1.1.0\",\n    \"rollup-plugin-node-resolve\": \"2.0.0\",\n    \"rollup-plugin-replace\": \"1.1.1\",\n    \"shelljs\": \"0.7.8\",\n    \"sw-toolbox\": \"3.6.0\",\n    \"uglify-es\": \"3.0.15\",\n    \"webpack\": \"2.6.1\"\n  },\n  \"scripts\": {\n    \"test\": \"jest\",\n    \"posttest\": \"npm run test-tabs && npm run test-tabs-inv\",\n    \"test-tabs\": \"node ./bin/prettier.js --use-tabs --bracket-spacing --trailing-comma array,object -- ./bin/prettier.js > ./bin/prettier-with-tabs.js\",\n    \"test-tabs-inv\": \"node ./bin/prettier-with-tabs.js -- ./bin/prettier-with-tabs.js > ./bin/prettier-spaces.js\",\n    \"test-integration\": \"jest tests_integration\",\n    \"lint\": \"cross-env EFF_NO_LINK_RULES=true eslint . --format node_modules/eslint-friendly-formatter\",\n    \"build\": \"./scripts/build/build.js\"\n  }\n}\n"
  },
  {
    "path": "scripts/build/.eslintrc.js",
    "content": "\"use strict\";\n\nmodule.exports = {\n  overrides: [\n    {\n      files: \"rollup.*.config.js\",\n      parserOptions: {\n        sourceType: \"module\"\n      }\n    }\n  ]\n};\n"
  },
  {
    "path": "scripts/build/build.js",
    "content": "#!/usr/bin/env node\n\n\"use strict\";\n\nconst path = require(\"path\");\nconst shell = require(\"shelljs\");\nconst pkg = require(\"../../package.json\");\n\nconst rootDir = path.join(__dirname, \"..\", \"..\");\nconst docs = path.join(rootDir, \"website/static/lib\");\nconst parsers = [\n  \"babylon\",\n  \"flow\",\n  \"typescript\",\n  \"graphql\",\n  \"postcss\",\n  \"parse5\",\n  \"json\"\n];\n\nprocess.env.PATH += path.delimiter + path.join(rootDir, \"node_modules\", \".bin\");\n\nfunction pipe(string) {\n  return new shell.ShellString(string);\n}\n\nshell.set(\"-e\");\nshell.cd(rootDir);\n\nshell.rm(\"-Rf\", \"dist/\", docs);\nshell.mkdir(\"-p\", docs);\n\n// --- Lib ---\n\nshell.echo(\"Bundling lib index...\");\nshell.exec(\"rollup -c scripts/build/rollup.index.config.js\");\n\nshell.echo(\"Bundling lib bin...\");\nshell.exec(\"rollup -c scripts/build/rollup.bin.config.js\");\nshell.chmod(\"+x\", \"./dist/bin/prettier.js\");\n\nfor (const parser of parsers) {\n  if (parser === \"postcss\") {\n    continue;\n  }\n  shell.echo(`Bundling lib ${parser}...`);\n  shell.exec(\n    `rollup -c scripts/build/rollup.parser.config.js --environment parser:${parser}`\n  );\n}\n\nshell.echo(\"Bundling lib postcss...\");\n// PostCSS has dependency cycles and won't work correctly with rollup :(\nshell.exec(\n  \"webpack --hide-modules src/parser-postcss.js dist/parser-postcss.js\"\n);\n// Prepend module.exports =\nconst content = shell.cat(\"dist/parser-postcss.js\").stdout;\npipe(`module.exports = ${content}`).to(\"dist/parser-postcss.js\");\n\nshell.echo();\n\n// --- Docs ---\n\nshell.echo(\"Bundling docs index...\");\nshell.cp(\"dist/index.js\", `${docs}/index.js`);\nshell.exec(\n  `node_modules/babel-cli/bin/babel.js dist/index.js --out-file ${docs}/index.js --presets=es2015`\n);\n\nshell.echo(\"Bundling docs babylon...\");\nshell.exec(\n  \"rollup -c scripts/build/rollup.docs.config.js --environment filepath:parser-babylon.js\"\n);\nshell.exec(\n  `node_modules/babel-cli/bin/babel.js ${docs}/parser-babylon.js --out-file ${docs}/parser-babylon.js --presets=es2015`\n);\n\nfor (const parser of parsers) {\n  if (parser === \"babylon\") {\n    continue;\n  }\n  shell.echo(`Bundling docs ${parser}...`);\n  shell.exec(\n    `rollup -c scripts/build/rollup.docs.config.js --environment filepath:parser-${parser}.js`\n  );\n}\n\nshell.echo();\n\n// --- Misc ---\n\nshell.echo(\"Remove eval\");\nshell.sed(\n  \"-i\",\n  /eval\\(\"require\"\\)/,\n  \"require\",\n  \"dist/index.js\",\n  \"dist/bin/prettier.js\"\n);\n\nshell.echo(\"Create prettier-version.js\");\npipe(`prettierVersion = \"${pkg.version}\";`).to(`${docs}/prettier-version.js`);\n\nshell.echo(\"Copy sw-toolbox.js to docs\");\nshell.cp(\"node_modules/sw-toolbox/sw-toolbox.js\", `${docs}/sw-toolbox.js`);\n\nshell.echo(\"Copy package.json\");\nconst pkgWithoutDependencies = Object.assign({}, pkg);\ndelete pkgWithoutDependencies.dependencies;\npipe(JSON.stringify(pkgWithoutDependencies, null, 2)).to(\"dist/package.json\");\n\nshell.echo(\"Copy README.md\");\nshell.cp(\"README.md\", \"dist/README.md\");\n\nshell.echo(\"Done!\");\nshell.echo();\nshell.echo(\"How to test against dist:\");\nshell.echo(\"  1) yarn test --prod\");\nshell.echo();\nshell.echo(\"How to publish:\");\nshell.echo(\"  1) IMPORTANT!!! Go to dist/\");\nshell.echo(\"  2) npm publish\");\n"
  },
  {
    "path": "scripts/build/rollup.base.config.js",
    "content": "export default {\n  onwarn: function(warning) {\n    if (\n      [\n        \"EVAL\",\n        \"MISSING_GLOBAL_NAME\",\n        \"MISSING_NODE_BUILTINS\",\n        \"UNRESOLVED_IMPORT\"\n      ].find(code => code === warning.code)\n    ) {\n      return;\n    }\n\n    console.warn(warning.message);\n  }\n};\n"
  },
  {
    "path": "scripts/build/rollup.bin.config.js",
    "content": "import baseConfig from \"./rollup.base.config.js\";\nimport resolve from \"rollup-plugin-node-resolve\";\nimport commonjs from \"rollup-plugin-commonjs\";\nimport json from \"rollup-plugin-json\";\nimport replace from \"rollup-plugin-replace\";\n\nexport default Object.assign(baseConfig, {\n  entry: \"bin/prettier.js\",\n  dest: \"dist/bin/prettier.js\",\n  format: \"cjs\",\n  banner: \"#!/usr/bin/env node\",\n  plugins: [\n    replace({\n      \"#!/usr/bin/env node\": \"\"\n    }),\n    json(),\n    resolve({ preferBuiltins: true }),\n    commonjs()\n  ],\n  external: [\"fs\", \"readline\", \"path\", \"module\", \"assert\", \"util\", \"events\"]\n});\n"
  },
  {
    "path": "scripts/build/rollup.docs.config.js",
    "content": "import baseConfig from \"./rollup.base.config.js\";\nimport resolve from \"rollup-plugin-node-resolve\";\nimport commonjs from \"rollup-plugin-commonjs\";\nimport globals from \"rollup-plugin-node-globals\";\nimport json from \"rollup-plugin-json\";\n\nconst filepath = process.env.filepath;\nconst filename = filepath.replace(/.+\\//, \"\");\nconst basename = filename.replace(/\\..+/, \"\");\n\nexport default Object.assign(baseConfig, {\n  entry: \"dist/\" + filepath,\n  dest: \"website/static/lib/\" + filename,\n  format: \"iife\",\n  plugins: [json(), resolve({ preferBuiltins: true }), commonjs(), globals()],\n  useStrict: false,\n  moduleName: basename.replace(/.+-/, \"\"),\n  external: [\"assert\", \"fs\", \"module\"]\n});\n"
  },
  {
    "path": "scripts/build/rollup.index.config.js",
    "content": "import baseConfig from \"./rollup.base.config.js\";\nimport resolve from \"rollup-plugin-node-resolve\";\nimport commonjs from \"rollup-plugin-commonjs\";\nimport json from \"rollup-plugin-json\";\n\nexport default Object.assign(baseConfig, {\n  entry: \"index.js\",\n  dest: \"dist/index.js\",\n  format: \"cjs\",\n  plugins: [json(), resolve({ preferBuiltins: true }), commonjs()],\n  external: [\"assert\"]\n});\n"
  },
  {
    "path": "scripts/build/rollup.parser.config.js",
    "content": "import baseConfig from \"./rollup.base.config.js\";\nimport resolve from \"rollup-plugin-node-resolve\";\nimport commonjs from \"rollup-plugin-commonjs\";\nimport json from \"rollup-plugin-json\";\nimport replace from \"rollup-plugin-replace\";\nimport uglify from \"uglify-es\";\n\nconst parser = process.env.parser;\n\nexport default Object.assign(baseConfig, {\n  entry: \"src/parser-\" + parser + \".js\",\n  dest: \"dist/parser-\" + parser + \".js\",\n  format: \"cjs\",\n  plugins: [\n    parser === \"typescript\"\n      ? replace({\n          \"exports.Syntax =\": \"1,\",\n          include: \"node_modules/typescript-eslint-parser/parser.js\"\n        })\n      : {},\n    json(),\n    resolve({ preferBuiltins: true }),\n    commonjs(),\n    {\n      transformBundle(code) {\n        const result = uglify.minify(code, {});\n        if (result.error) {\n          throw result.error;\n        }\n        return result;\n      }\n    }\n  ],\n  external: [\n    \"fs\",\n    \"buffer\",\n    \"path\",\n    \"module\",\n    \"assert\",\n    \"util\",\n    \"os\",\n    \"crypto\"\n  ],\n  useStrict: parser !== \"flow\"\n});\n"
  },
  {
    "path": "scripts/run-external-typescript-tests.js",
    "content": "\"use strict\";\n\n/**\n * There's an issue with this script's assumption that each run of prettier\n * will result in one output to stderr or stdout.\n *\n * On Mac this seems not to hold for stderr, where multiple errors are buffered\n * into one emit on the stderr stream.\n *\n * If you have any ideas on how to fix this, please send a PR!\n */\nif (process.platform !== \"win32\") {\n  console.log(\"Warning: this script may not work on macOS.\");\n}\n\nconst fs = require(\"fs\");\nconst path = require(\"path\");\nconst spawn = require(\"child_process\").spawn;\nconst rimraf = require(\"rimraf\");\n\nconst tsRoot = path.resolve(__dirname, \"../../TypeScript\");\nconst testsDir = path.relative(process.cwd(), path.join(tsRoot, \"tests\"));\nconst errorsPath = \"./errors/\";\nconst fileGlob = path.join(testsDir, \"**/*.ts\");\n\nif (!fs.existsSync(tsRoot) || !fs.existsSync(testsDir)) {\n  console.error(`Error: TypeScript is not cloned at ../TypeScript`);\n  process.exit(1);\n}\n\nconst badFiles = [];\nconst errorTypes = {};\nlet good = 0;\nlet skipped = 0;\n\nrimraf.sync(errorsPath);\n\nconst cp = spawn(\"node\", [\n  \"./bin/prettier.js\",\n  \"--parser\",\n  \"typescript\",\n  \"--debug-check\",\n  fileGlob\n]);\n\ncp.stdout.on(\"data\", () => {\n  good++;\n  printStatus();\n});\n\ncp.stderr.on(\"data\", err => {\n  const error = err.toString();\n  const { file, errorType } = splitFileAndError(error);\n  if (errorType.startsWith(\"SyntaxError:\")) {\n    skipped++;\n  } else {\n    badFiles.push({ file, errorType, error });\n    errorTypes[errorType] = (errorTypes[errorType] || 0) + 1;\n  }\n  printStatus();\n});\n\ncp.on(\"close\", () => {\n  const total = badFiles.length + good + skipped;\n  const percentNoError = (100 * (good + skipped) / total).toFixed(0);\n  console.log(\n    `\\n${percentNoError}% of ${total} files processed without errors.\\n`\n  );\n  Object.keys(errorTypes)\n    .sort((a, b) => errorTypes[b] - errorTypes[a])\n    .forEach(errorType => {\n      console.log(`${errorTypes[errorType]}\\t${errorType}`);\n    });\n\n  console.log(`\\nWriting errors to '${errorsPath}' directory`);\n  writeErrorsToFiles();\n});\n\nfunction printStatus() {\n  process.stdout.write(\n    `\\r${good} good, ${skipped} skipped, ${badFiles.length} bad`\n  );\n}\n\nfunction splitFileAndError(err) {\n  const lines = err.split(\"\\n\");\n  const [file, ...rest] = lines[0].split(\":\");\n  if (rest.length) {\n    return {\n      file,\n      errorType: rest\n        .join(\":\")\n        .replace(/\\(\\d+:\\d+\\)/, \"\")\n        .replace(/(Comment )\".*\"/, '$1\"<omitted>\"')\n        .trim()\n    };\n  }\n  console.error(\"Could not process error:\", err);\n  return {\n    file: \"?\",\n    errorType: err\n  };\n}\n\nfunction writeErrorsToFiles() {\n  const splitter = \"@\".repeat(80);\n  fs.mkdirSync(errorsPath);\n  Object.keys(errorTypes).forEach(errorType => {\n    const files = badFiles.filter(f => f.errorType === errorType);\n    const contents = files\n      .map(({ file, error }) => {\n        // Trim file name from error.\n        if (error.startsWith(file)) {\n          error = error.substring(file.length);\n        }\n        return `\\n\\n${file}\\n${error}\\n${splitter}\\n`;\n      })\n      .join(\"\\n\");\n    fs.writeFileSync(\n      path.join(errorsPath, sanitize(errorType) + \".log\"),\n      contents\n    );\n  });\n}\n\nfunction sanitize(string) {\n  return string.replace(/[^A-Z0-9_.() -]/gi, \"_\").replace(/\\.$/, \"\");\n}\n"
  },
  {
    "path": "scripts/sync-flow-tests.js",
    "content": "\"use strict\";\n\nconst fs = require(\"fs\");\nconst flowParser = require(\"flow-parser\");\nconst globby = require(\"globby\");\nconst mkdirp = require(\"mkdirp\");\nconst path = require(\"path\");\nconst rimraf = require(\"rimraf\");\n\nconst DEFAULT_SPEC_CONTENT = \"run_spec(__dirname);\\n\";\nconst SPEC_FILE_NAME = \"jsfmt.spec.js\";\nconst FLOW_TESTS_DIR = path.join(__dirname, \"..\", \"tests\", \"flow\");\n\nfunction tryParse(file, content) {\n  const ast = flowParser.parse(content, {\n    esproposal_class_instance_fields: true,\n    esproposal_class_static_fields: true,\n    esproposal_export_star_as: true\n  });\n\n  if (ast.errors.length > 0) {\n    const line = ast.errors[0].loc.start.line;\n    const column = ast.errors[0].loc.start.column;\n    const message = ast.errors[0].message;\n    return `${file}:${line}:${column}: ${message}`;\n  }\n\n  return null;\n}\n\nfunction syncTests(syncDir) {\n  const specFiles = globby.sync(\n    path.join(FLOW_TESTS_DIR, \"**\", SPEC_FILE_NAME)\n  );\n  const filesToCopy = globby.sync(path.join(syncDir, \"**/*.js\"));\n\n  if (filesToCopy.length === 0) {\n    throw new Error(\n      [\n        \"Couldn't find any files to copy.\",\n        `Please make sure that \\`${syncDir}\\` exists and contains the flow tests.`\n      ].join(\"\\n\")\n    );\n  }\n\n  const specContents = specFiles.reduce((obj, specFile) => {\n    obj[specFile] = fs.readFileSync(specFile, \"utf8\");\n    return obj;\n  }, {});\n\n  const skipped = [];\n\n  rimraf.sync(FLOW_TESTS_DIR);\n\n  filesToCopy.forEach(file => {\n    const content = fs.readFileSync(file, \"utf8\");\n    const parseError = tryParse(file, content);\n\n    if (parseError) {\n      skipped.push(parseError);\n      return;\n    }\n\n    const newFile = path.join(FLOW_TESTS_DIR, path.relative(syncDir, file));\n    const dirname = path.dirname(newFile);\n    const specFile = path.join(dirname, SPEC_FILE_NAME);\n    const specContent = specContents[specFile] || DEFAULT_SPEC_CONTENT;\n\n    mkdirp.sync(dirname);\n    fs.writeFileSync(newFile, content);\n    fs.writeFileSync(specFile, specContent);\n  });\n\n  return skipped;\n}\n\nfunction run(argv) {\n  if (argv.length !== 1) {\n    console.error(\n      [\n        \"You must provide the path to a flow tests directory to sync from!\",\n        \"Example: node scripts/sync-flow-tests.js ../flow/tests/\"\n      ].join(\"\\n\")\n    );\n    return 1;\n  }\n\n  const syncDir = argv[0];\n  let skipped = [];\n\n  try {\n    skipped = syncTests(syncDir);\n  } catch (error) {\n    console.error(`Failed to sync.\\n${error}`);\n    return 1;\n  }\n\n  if (skipped.length > 0) {\n    console.log(\n      [\n        \"Some files were skipped due to syntax errors.\",\n        \"This is expected since flow tests for handling invalid code,\",\n        \"but that's not interesting for Prettier's tests.\",\n        \"This is the skipped stuff:\",\n        \"\"\n      ]\n        .concat(skipped, \"\")\n        .join(\"\\n\")\n    );\n  }\n\n  console.log(\n    [\n      \"Done syncing! Now you need to:\",\n      \"\",\n      `1. Optional: Adjust some ${SPEC_FILE_NAME} files.`,\n      \"2. Run `jest -u` to create snapshots.\",\n      \"3. Run `git diff` to check how tests and snapshots have changed\",\n      \"4. Take a look at new snapshots to see if they're OK.\"\n    ].join(\"\\n\")\n  );\n\n  return 0;\n}\n\nif (require.main === module) {\n  const exitCode = run(process.argv.slice(2));\n  process.exit(exitCode);\n}\n"
  },
  {
    "path": "src/clean-ast.js",
    "content": "\"use strict\";\n\nfunction cleanAST(ast) {\n  return JSON.stringify(massageAST(ast), null, 2);\n}\n\nfunction massageAST(ast) {\n  if (Array.isArray(ast)) {\n    return ast.map(e => massageAST(e)).filter(e => e);\n  }\n  if (ast && typeof ast === \"object\") {\n    // We remove extra `;` and add them when needed\n    if (ast.type === \"EmptyStatement\") {\n      return undefined;\n    }\n\n    // We move text around, including whitespaces and add {\" \"}\n    if (ast.type === \"JSXText\") {\n      return undefined;\n    }\n    if (\n      ast.type === \"JSXExpressionContainer\" &&\n      ast.expression.type === \"Literal\" &&\n      ast.expression.value === \" \"\n    ) {\n      return undefined;\n    }\n\n    const newObj = {};\n    for (const key in ast) {\n      if (typeof ast[key] !== \"function\") {\n        newObj[key] = massageAST(ast[key]);\n      }\n    }\n\n    [\n      \"loc\",\n      \"range\",\n      \"raw\",\n      \"comments\",\n      \"leadingComments\",\n      \"trailingComments\",\n      \"extra\",\n      \"start\",\n      \"end\",\n      \"tokens\",\n      \"flags\",\n      \"raws\",\n      \"sourceIndex\",\n      \"id\",\n      \"source\",\n      \"before\",\n      \"after\",\n      \"trailingComma\",\n      \"parent\",\n      \"prev\"\n    ].forEach(name => {\n      delete newObj[name];\n    });\n\n    if (\n      ast.type === \"media-query\" ||\n      ast.type === \"media-query-list\" ||\n      ast.type === \"media-feature-expression\"\n    ) {\n      delete newObj.value;\n    }\n\n    if (ast.type === \"css-rule\") {\n      delete newObj.params;\n    }\n\n    if (ast.type === \"selector-combinator\") {\n      newObj.value = newObj.value.replace(/\\s+/g, \" \");\n    }\n\n    if (ast.type === \"media-feature\") {\n      newObj.value = newObj.value.replace(/ /g, \"\");\n    }\n\n    if (ast.type === \"value-word\" && ast.isColor && ast.isHex) {\n      newObj.value = newObj.value.toLowerCase();\n    }\n\n    // (TypeScript) Ignore `static` in `constructor(static p) {}`\n    // and `export` in `constructor(export p) {}`\n    if (\n      ast.type === \"TSParameterProperty\" &&\n      ast.accessibility === null &&\n      !ast.readonly\n    ) {\n      return {\n        type: \"Identifier\",\n        name: ast.parameter.name,\n        typeAnnotation: newObj.parameter.typeAnnotation,\n        decorators: newObj.decorators\n      };\n    }\n\n    // (TypeScript) ignore empty `specifiers` array\n    if (\n      ast.type === \"TSNamespaceExportDeclaration\" &&\n      ast.specifiers &&\n      ast.specifiers.length === 0\n    ) {\n      delete newObj.specifiers;\n    }\n\n    // (TypeScript) bypass TSParenthesizedType\n    if (\n      ast.type === \"TSParenthesizedType\" &&\n      ast.typeAnnotation.type === \"TypeAnnotation\"\n    ) {\n      return newObj.typeAnnotation.typeAnnotation;\n    }\n\n    // We convert <div></div> to <div />\n    if (ast.type === \"JSXOpeningElement\") {\n      delete newObj.selfClosing;\n    }\n    if (ast.type === \"JSXElement\") {\n      delete newObj.closingElement;\n    }\n\n    // We change {'key': value} into {key: value}\n    if (\n      (ast.type === \"Property\" ||\n        ast.type === \"MethodDefinition\" ||\n        ast.type === \"ClassProperty\") &&\n      typeof ast.key === \"object\" &&\n      ast.key &&\n      (ast.key.type === \"Literal\" || ast.key.type === \"Identifier\")\n    ) {\n      delete newObj.key;\n    }\n\n    // Remove raw and cooked values from TemplateElement when it's CSS\n    // styled-jsx\n    if (\n      ast.type === \"JSXElement\" &&\n      ast.openingElement.name.name === \"style\" &&\n      ast.openingElement.attributes.some(attr => attr.name.name === \"jsx\")\n    ) {\n      const templateLiterals = newObj.children\n        .filter(\n          child =>\n            child.type === \"JSXExpressionContainer\" &&\n            child.expression.type === \"TemplateLiteral\"\n        )\n        .map(container => container.expression);\n\n      const quasis = templateLiterals.reduce(\n        (quasis, templateLiteral) => quasis.concat(templateLiteral.quasis),\n        []\n      );\n\n      quasis.forEach(q => delete q.value);\n    }\n    // styled-components and graphql\n    if (\n      ast.type === \"TaggedTemplateExpression\" &&\n      (ast.tag.type === \"MemberExpression\" ||\n        (ast.tag.type === \"Identifier\" &&\n          (ast.tag.name === \"gql\" ||\n            ast.tag.name === \"graphql\" ||\n            ast.tag.name === \"css\")))\n    ) {\n      newObj.quasi.quasis.forEach(quasi => delete quasi.value);\n    }\n\n    return newObj;\n  }\n  return ast;\n}\n\nmodule.exports = { cleanAST, massageAST };\n"
  },
  {
    "path": "src/comments.js",
    "content": "\"use strict\";\n\nconst assert = require(\"assert\");\nconst docBuilders = require(\"./doc-builders\");\nconst concat = docBuilders.concat;\nconst hardline = docBuilders.hardline;\nconst breakParent = docBuilders.breakParent;\nconst indent = docBuilders.indent;\nconst lineSuffix = docBuilders.lineSuffix;\nconst join = docBuilders.join;\nconst cursor = docBuilders.cursor;\nconst util = require(\"./util\");\nconst childNodesCacheKey = Symbol(\"child-nodes\");\nconst locStart = util.locStart;\nconst locEnd = util.locEnd;\nconst getNextNonSpaceNonCommentCharacter =\n  util.getNextNonSpaceNonCommentCharacter;\n\nfunction getSortedChildNodes(node, text, resultArray) {\n  if (!node) {\n    return;\n  }\n\n  if (resultArray) {\n    if (\n      node &&\n      ((node.type &&\n        node.type !== \"CommentBlock\" &&\n        node.type !== \"CommentLine\" &&\n        node.type !== \"Line\" &&\n        node.type !== \"Block\" &&\n        node.type !== \"EmptyStatement\" &&\n        node.type !== \"TemplateElement\") ||\n        (node.kind && node.kind !== \"Comment\"))\n    ) {\n      // This reverse insertion sort almost always takes constant\n      // time because we almost always (maybe always?) append the\n      // nodes in order anyway.\n      let i;\n      for (i = resultArray.length - 1; i >= 0; --i) {\n        if (\n          locStart(resultArray[i]) <= locStart(node) &&\n          locEnd(resultArray[i]) <= locEnd(node)\n        ) {\n          break;\n        }\n      }\n      resultArray.splice(i + 1, 0, node);\n      return;\n    }\n  } else if (node[childNodesCacheKey]) {\n    return node[childNodesCacheKey];\n  }\n\n  let names;\n  if (node && typeof node === \"object\") {\n    names = Object.keys(node).filter(\n      n =>\n        n !== \"enclosingNode\" && n !== \"precedingNode\" && n !== \"followingNode\"\n    );\n  } else {\n    return;\n  }\n\n  if (!resultArray) {\n    Object.defineProperty(node, childNodesCacheKey, {\n      value: (resultArray = []),\n      enumerable: false\n    });\n  }\n\n  for (let i = 0, nameCount = names.length; i < nameCount; ++i) {\n    getSortedChildNodes(node[names[i]], text, resultArray);\n  }\n\n  return resultArray;\n}\n\n// As efficiently as possible, decorate the comment object with\n// .precedingNode, .enclosingNode, and/or .followingNode properties, at\n// least one of which is guaranteed to be defined.\nfunction decorateComment(node, comment, text) {\n  const childNodes = getSortedChildNodes(node, text);\n  let precedingNode;\n  let followingNode;\n  // Time to dust off the old binary search robes and wizard hat.\n  let left = 0;\n  let right = childNodes.length;\n  while (left < right) {\n    const middle = (left + right) >> 1;\n    const child = childNodes[middle];\n\n    if (\n      locStart(child) - locStart(comment) <= 0 &&\n      locEnd(comment) - locEnd(child) <= 0\n    ) {\n      // The comment is completely contained by this child node.\n      comment.enclosingNode = child;\n\n      decorateComment(child, comment, text);\n      return; // Abandon the binary search at this level.\n    }\n\n    if (locEnd(child) - locStart(comment) <= 0) {\n      // This child node falls completely before the comment.\n      // Because we will never consider this node or any nodes\n      // before it again, this node must be the closest preceding\n      // node we have encountered so far.\n      precedingNode = child;\n      left = middle + 1;\n      continue;\n    }\n\n    if (locEnd(comment) - locStart(child) <= 0) {\n      // This child node falls completely after the comment.\n      // Because we will never consider this node or any nodes after\n      // it again, this node must be the closest following node we\n      // have encountered so far.\n      followingNode = child;\n      right = middle;\n      continue;\n    }\n\n    throw new Error(\"Comment location overlaps with node location\");\n  }\n\n  // We don't want comments inside of different expressions inside of the same\n  // template literal to move to another expression.\n  if (\n    comment.enclosingNode &&\n    comment.enclosingNode.type === \"TemplateLiteral\"\n  ) {\n    const quasis = comment.enclosingNode.quasis;\n    const commentIndex = findExpressionIndexForComment(quasis, comment);\n\n    if (\n      precedingNode &&\n      findExpressionIndexForComment(quasis, precedingNode) !== commentIndex\n    ) {\n      precedingNode = null;\n    }\n    if (\n      followingNode &&\n      findExpressionIndexForComment(quasis, followingNode) !== commentIndex\n    ) {\n      followingNode = null;\n    }\n  }\n\n  if (precedingNode) {\n    comment.precedingNode = precedingNode;\n  }\n\n  if (followingNode) {\n    comment.followingNode = followingNode;\n  }\n}\n\nfunction attach(comments, ast, text) {\n  if (!Array.isArray(comments)) {\n    return;\n  }\n\n  const tiesToBreak = [];\n\n  comments.forEach((comment, i) => {\n    decorateComment(ast, comment, text);\n\n    const precedingNode = comment.precedingNode;\n    const enclosingNode = comment.enclosingNode;\n    const followingNode = comment.followingNode;\n\n    const isLastComment = comments.length - 1 === i;\n\n    if (util.hasNewline(text, locStart(comment), { backwards: true })) {\n      // If a comment exists on its own line, prefer a leading comment.\n      // We also need to check if it's the first line of the file.\n      if (\n        handleLastFunctionArgComments(\n          text,\n          precedingNode,\n          enclosingNode,\n          followingNode,\n          comment\n        ) ||\n        handleMemberExpressionComments(enclosingNode, followingNode, comment) ||\n        handleIfStatementComments(\n          text,\n          precedingNode,\n          enclosingNode,\n          followingNode,\n          comment\n        ) ||\n        handleTryStatementComments(enclosingNode, followingNode, comment) ||\n        handleClassComments(enclosingNode, comment) ||\n        handleImportSpecifierComments(enclosingNode, comment) ||\n        handleObjectPropertyComments(enclosingNode, comment) ||\n        handleForComments(enclosingNode, precedingNode, comment) ||\n        handleUnionTypeComments(\n          precedingNode,\n          enclosingNode,\n          followingNode,\n          comment\n        ) ||\n        handleOnlyComments(enclosingNode, ast, comment, isLastComment) ||\n        handleImportDeclarationComments(\n          text,\n          enclosingNode,\n          precedingNode,\n          comment\n        ) ||\n        handleAssignmentPatternComments(enclosingNode, comment)\n      ) {\n        // We're good\n      } else if (followingNode) {\n        // Always a leading comment.\n        addLeadingComment(followingNode, comment);\n      } else if (precedingNode) {\n        addTrailingComment(precedingNode, comment);\n      } else if (enclosingNode) {\n        addDanglingComment(enclosingNode, comment);\n      } else {\n        // There are no nodes, let's attach it to the root of the ast\n        addDanglingComment(ast, comment);\n      }\n    } else if (util.hasNewline(text, locEnd(comment))) {\n      if (\n        handleLastFunctionArgComments(\n          text,\n          precedingNode,\n          enclosingNode,\n          followingNode,\n          comment\n        ) ||\n        handleConditionalExpressionComments(\n          enclosingNode,\n          precedingNode,\n          followingNode,\n          comment,\n          text\n        ) ||\n        handleImportSpecifierComments(enclosingNode, comment) ||\n        handleIfStatementComments(\n          text,\n          precedingNode,\n          enclosingNode,\n          followingNode,\n          comment\n        ) ||\n        handleClassComments(enclosingNode, comment) ||\n        handleLabeledStatementComments(enclosingNode, comment) ||\n        handleCallExpressionComments(precedingNode, enclosingNode, comment) ||\n        handlePropertyComments(enclosingNode, comment) ||\n        handleExportNamedDeclarationComments(enclosingNode, comment) ||\n        handleOnlyComments(enclosingNode, ast, comment, isLastComment) ||\n        handleClassMethodComments(enclosingNode, comment) ||\n        handleTypeAliasComments(enclosingNode, followingNode, comment) ||\n        handleVariableDeclaratorComments(enclosingNode, followingNode, comment)\n      ) {\n        // We're good\n      } else if (precedingNode) {\n        // There is content before this comment on the same line, but\n        // none after it, so prefer a trailing comment of the previous node.\n        addTrailingComment(precedingNode, comment);\n      } else if (followingNode) {\n        addLeadingComment(followingNode, comment);\n      } else if (enclosingNode) {\n        addDanglingComment(enclosingNode, comment);\n      } else {\n        // There are no nodes, let's attach it to the root of the ast\n        addDanglingComment(ast, comment);\n      }\n    } else {\n      if (\n        handleIfStatementComments(\n          text,\n          precedingNode,\n          enclosingNode,\n          followingNode,\n          comment\n        ) ||\n        handleObjectPropertyAssignment(enclosingNode, precedingNode, comment) ||\n        handleCommentInEmptyParens(text, enclosingNode, comment) ||\n        handleMethodNameComments(enclosingNode, precedingNode, comment) ||\n        handleOnlyComments(enclosingNode, ast, comment, isLastComment)\n      ) {\n        // We're good\n      } else if (precedingNode && followingNode) {\n        // Otherwise, text exists both before and after the comment on\n        // the same line. If there is both a preceding and following\n        // node, use a tie-breaking algorithm to determine if it should\n        // be attached to the next or previous node. In the last case,\n        // simply attach the right node;\n        const tieCount = tiesToBreak.length;\n        if (tieCount > 0) {\n          const lastTie = tiesToBreak[tieCount - 1];\n          if (lastTie.followingNode !== comment.followingNode) {\n            breakTies(tiesToBreak, text);\n          }\n        }\n        tiesToBreak.push(comment);\n      } else if (precedingNode) {\n        addTrailingComment(precedingNode, comment);\n      } else if (followingNode) {\n        addLeadingComment(followingNode, comment);\n      } else if (enclosingNode) {\n        addDanglingComment(enclosingNode, comment);\n      } else {\n        // There are no nodes, let's attach it to the root of the ast\n        addDanglingComment(ast, comment);\n      }\n    }\n  });\n\n  breakTies(tiesToBreak, text);\n\n  comments.forEach(comment => {\n    // These node references were useful for breaking ties, but we\n    // don't need them anymore, and they create cycles in the AST that\n    // may lead to infinite recursion if we don't delete them here.\n    delete comment.precedingNode;\n    delete comment.enclosingNode;\n    delete comment.followingNode;\n  });\n}\n\nfunction breakTies(tiesToBreak, text) {\n  const tieCount = tiesToBreak.length;\n  if (tieCount === 0) {\n    return;\n  }\n\n  const precedingNode = tiesToBreak[0].precedingNode;\n  const followingNode = tiesToBreak[0].followingNode;\n  let gapEndPos = locStart(followingNode);\n\n  // Iterate backwards through tiesToBreak, examining the gaps\n  // between the tied comments. In order to qualify as leading, a\n  // comment must be separated from followingNode by an unbroken series of\n  // whitespace-only gaps (or other comments).\n  let indexOfFirstLeadingComment;\n  for (\n    indexOfFirstLeadingComment = tieCount;\n    indexOfFirstLeadingComment > 0;\n    --indexOfFirstLeadingComment\n  ) {\n    const comment = tiesToBreak[indexOfFirstLeadingComment - 1];\n    assert.strictEqual(comment.precedingNode, precedingNode);\n    assert.strictEqual(comment.followingNode, followingNode);\n\n    const gap = text.slice(locEnd(comment), gapEndPos);\n    if (/\\S/.test(gap)) {\n      // The gap string contained something other than whitespace.\n      break;\n    }\n\n    gapEndPos = locStart(comment);\n  }\n\n  tiesToBreak.forEach((comment, i) => {\n    if (i < indexOfFirstLeadingComment) {\n      addTrailingComment(precedingNode, comment);\n    } else {\n      addLeadingComment(followingNode, comment);\n    }\n  });\n\n  tiesToBreak.length = 0;\n}\n\nfunction addCommentHelper(node, comment) {\n  const comments = node.comments || (node.comments = []);\n  comments.push(comment);\n  comment.printed = false;\n\n  // For some reason, TypeScript parses `// x` inside of JSXText as a comment\n  // We already \"print\" it via the raw text, we don't need to re-print it as a\n  // comment\n  if (node.type === \"JSXText\") {\n    comment.printed = true;\n  }\n}\n\nfunction addLeadingComment(node, comment) {\n  comment.leading = true;\n  comment.trailing = false;\n  addCommentHelper(node, comment);\n}\n\nfunction addDanglingComment(node, comment) {\n  comment.leading = false;\n  comment.trailing = false;\n  addCommentHelper(node, comment);\n}\n\nfunction addTrailingComment(node, comment) {\n  comment.leading = false;\n  comment.trailing = true;\n  addCommentHelper(node, comment);\n}\n\nfunction addBlockStatementFirstComment(node, comment) {\n  const body = node.body.filter(n => n.type !== \"EmptyStatement\");\n  if (body.length === 0) {\n    addDanglingComment(node, comment);\n  } else {\n    addLeadingComment(body[0], comment);\n  }\n}\n\nfunction addBlockOrNotComment(node, comment) {\n  if (node.type === \"BlockStatement\") {\n    addBlockStatementFirstComment(node, comment);\n  } else {\n    addLeadingComment(node, comment);\n  }\n}\n\n// There are often comments before the else clause of if statements like\n//\n//   if (1) { ... }\n//   // comment\n//   else { ... }\n//\n// They are being attached as leading comments of the BlockExpression which\n// is not well printed. What we want is to instead move the comment inside\n// of the block and make it leadingComment of the first element of the block\n// or dangling comment of the block if there is nothing inside\n//\n//   if (1) { ... }\n//   else {\n//     // comment\n//     ...\n//   }\nfunction handleIfStatementComments(\n  text,\n  precedingNode,\n  enclosingNode,\n  followingNode,\n  comment\n) {\n  if (\n    !enclosingNode ||\n    enclosingNode.type !== \"IfStatement\" ||\n    !followingNode\n  ) {\n    return false;\n  }\n\n  // We unfortunately have no way using the AST or location of nodes to know\n  // if the comment is positioned before or after the condition parenthesis:\n  //   if (a /* comment */) {}\n  //   if (a) /* comment */ {}\n  // The only workaround I found is to look at the next character to see if\n  // it is a ).\n  if (getNextNonSpaceNonCommentCharacter(text, comment) === \")\") {\n    addTrailingComment(precedingNode, comment);\n    return true;\n  }\n\n  if (followingNode.type === \"BlockStatement\") {\n    addBlockStatementFirstComment(followingNode, comment);\n    return true;\n  }\n\n  if (followingNode.type === \"IfStatement\") {\n    addBlockOrNotComment(followingNode.consequent, comment);\n    return true;\n  }\n\n  return false;\n}\n\n// Same as IfStatement but for TryStatement\nfunction handleTryStatementComments(enclosingNode, followingNode, comment) {\n  if (\n    !enclosingNode ||\n    enclosingNode.type !== \"TryStatement\" ||\n    !followingNode\n  ) {\n    return false;\n  }\n\n  if (followingNode.type === \"BlockStatement\") {\n    addBlockStatementFirstComment(followingNode, comment);\n    return true;\n  }\n\n  if (followingNode.type === \"TryStatement\") {\n    addBlockOrNotComment(followingNode.finalizer, comment);\n    return true;\n  }\n\n  if (followingNode.type === \"CatchClause\") {\n    addBlockOrNotComment(followingNode.body, comment);\n    return true;\n  }\n\n  return false;\n}\n\nfunction handleMemberExpressionComments(enclosingNode, followingNode, comment) {\n  if (\n    enclosingNode &&\n    enclosingNode.type === \"MemberExpression\" &&\n    followingNode &&\n    followingNode.type === \"Identifier\"\n  ) {\n    addLeadingComment(enclosingNode, comment);\n    return true;\n  }\n\n  return false;\n}\n\nfunction handleConditionalExpressionComments(\n  enclosingNode,\n  precedingNode,\n  followingNode,\n  comment,\n  text\n) {\n  const isSameLineAsPrecedingNode =\n    precedingNode &&\n    !util.hasNewlineInRange(text, locEnd(precedingNode), locStart(comment));\n\n  if (\n    (!precedingNode || !isSameLineAsPrecedingNode) &&\n    enclosingNode &&\n    enclosingNode.type === \"ConditionalExpression\" &&\n    followingNode\n  ) {\n    addLeadingComment(followingNode, comment);\n    return true;\n  }\n  return false;\n}\n\nfunction handleObjectPropertyAssignment(enclosingNode, precedingNode, comment) {\n  if (\n    enclosingNode &&\n    (enclosingNode.type === \"ObjectProperty\" ||\n      enclosingNode.type === \"Property\") &&\n    enclosingNode.shorthand &&\n    enclosingNode.key === precedingNode &&\n    enclosingNode.value.type === \"AssignmentPattern\"\n  ) {\n    addTrailingComment(enclosingNode.value.left, comment);\n    return true;\n  }\n  return false;\n}\n\nfunction handleMethodNameComments(enclosingNode, precedingNode, comment) {\n  // This is only needed for estree parsers (flow, typescript) to attach\n  // after a method name:\n  // obj = { fn /*comment*/() {} };\n  if (\n    enclosingNode &&\n    precedingNode &&\n    (enclosingNode.type === \"Property\" ||\n      enclosingNode.type === \"MethodDefinition\") &&\n    precedingNode.type === \"Identifier\" &&\n    enclosingNode.key === precedingNode\n  ) {\n    addTrailingComment(precedingNode, comment);\n    return true;\n  }\n  return false;\n}\n\nfunction handleCommentInEmptyParens(text, enclosingNode, comment) {\n  if (getNextNonSpaceNonCommentCharacter(text, comment) !== \")\") {\n    return false;\n  }\n\n  // Only add dangling comments to fix the case when no params are present,\n  // i.e. a function without any argument.\n  if (\n    enclosingNode &&\n    (((enclosingNode.type === \"FunctionDeclaration\" ||\n      enclosingNode.type === \"FunctionExpression\" ||\n      enclosingNode.type === \"ArrowFunctionExpression\" ||\n      enclosingNode.type === \"ClassMethod\" ||\n      enclosingNode.type === \"ObjectMethod\") &&\n      enclosingNode.params.length === 0) ||\n      (enclosingNode.type === \"CallExpression\" &&\n        enclosingNode.arguments.length === 0))\n  ) {\n    addDanglingComment(enclosingNode, comment);\n    return true;\n  }\n  if (\n    enclosingNode &&\n    (enclosingNode.type === \"MethodDefinition\" &&\n      enclosingNode.value.params.length === 0)\n  ) {\n    addDanglingComment(enclosingNode.value, comment);\n    return true;\n  }\n  return false;\n}\n\nfunction handleLastFunctionArgComments(\n  text,\n  precedingNode,\n  enclosingNode,\n  followingNode,\n  comment\n) {\n  // Type definitions functions\n  if (\n    precedingNode &&\n    precedingNode.type === \"FunctionTypeParam\" &&\n    enclosingNode &&\n    enclosingNode.type === \"FunctionTypeAnnotation\" &&\n    followingNode &&\n    followingNode.type !== \"FunctionTypeParam\"\n  ) {\n    addTrailingComment(precedingNode, comment);\n    return true;\n  }\n\n  // Real functions\n  if (\n    precedingNode &&\n    (precedingNode.type === \"Identifier\" ||\n      precedingNode.type === \"AssignmentPattern\") &&\n    enclosingNode &&\n    (enclosingNode.type === \"ArrowFunctionExpression\" ||\n      enclosingNode.type === \"FunctionExpression\" ||\n      enclosingNode.type === \"FunctionDeclaration\" ||\n      enclosingNode.type === \"ObjectMethod\" ||\n      enclosingNode.type === \"ClassMethod\") &&\n    getNextNonSpaceNonCommentCharacter(text, comment) === \")\"\n  ) {\n    addTrailingComment(precedingNode, comment);\n    return true;\n  }\n  return false;\n}\n\nfunction handleClassComments(enclosingNode, comment) {\n  if (\n    enclosingNode &&\n    (enclosingNode.type === \"ClassDeclaration\" ||\n      enclosingNode.type === \"ClassExpression\")\n  ) {\n    addLeadingComment(enclosingNode, comment);\n    return true;\n  }\n  return false;\n}\n\nfunction handleImportSpecifierComments(enclosingNode, comment) {\n  if (enclosingNode && enclosingNode.type === \"ImportSpecifier\") {\n    addLeadingComment(enclosingNode, comment);\n    return true;\n  }\n  return false;\n}\n\nfunction handleObjectPropertyComments(enclosingNode, comment) {\n  if (enclosingNode && enclosingNode.type === \"ObjectProperty\") {\n    addLeadingComment(enclosingNode, comment);\n    return true;\n  }\n  return false;\n}\n\nfunction handleLabeledStatementComments(enclosingNode, comment) {\n  if (enclosingNode && enclosingNode.type === \"LabeledStatement\") {\n    addLeadingComment(enclosingNode, comment);\n    return true;\n  }\n  return false;\n}\n\nfunction handleCallExpressionComments(precedingNode, enclosingNode, comment) {\n  if (\n    enclosingNode &&\n    enclosingNode.type === \"CallExpression\" &&\n    precedingNode &&\n    enclosingNode.callee === precedingNode &&\n    enclosingNode.arguments.length > 0\n  ) {\n    addLeadingComment(enclosingNode.arguments[0], comment);\n    return true;\n  }\n  return false;\n}\n\nfunction handleUnionTypeComments(\n  precedingNode,\n  enclosingNode,\n  followingNode,\n  comment\n) {\n  if (\n    enclosingNode &&\n    (enclosingNode.type === \"UnionTypeAnnotation\" ||\n      enclosingNode.type === \"TSUnionType\")\n  ) {\n    addTrailingComment(precedingNode, comment);\n    return true;\n  }\n  return false;\n}\n\nfunction handlePropertyComments(enclosingNode, comment) {\n  if (\n    enclosingNode &&\n    (enclosingNode.type === \"Property\" ||\n      enclosingNode.type === \"ObjectProperty\")\n  ) {\n    addLeadingComment(enclosingNode, comment);\n    return true;\n  }\n  return false;\n}\n\nfunction handleExportNamedDeclarationComments(enclosingNode, comment) {\n  if (enclosingNode && enclosingNode.type === \"ExportNamedDeclaration\") {\n    addLeadingComment(enclosingNode, comment);\n    return true;\n  }\n  return false;\n}\n\nfunction handleOnlyComments(enclosingNode, ast, comment, isLastComment) {\n  // With Flow the enclosingNode is undefined so use the AST instead.\n  if (ast && ast.body && ast.body.length === 0) {\n    if (isLastComment) {\n      addDanglingComment(ast, comment);\n    } else {\n      addLeadingComment(ast, comment);\n    }\n    return true;\n  } else if (\n    enclosingNode &&\n    enclosingNode.type === \"Program\" &&\n    enclosingNode.body.length === 0 &&\n    enclosingNode.directives &&\n    enclosingNode.directives.length === 0\n  ) {\n    if (isLastComment) {\n      addDanglingComment(enclosingNode, comment);\n    } else {\n      addLeadingComment(enclosingNode, comment);\n    }\n    return true;\n  }\n  return false;\n}\n\nfunction handleForComments(enclosingNode, precedingNode, comment) {\n  if (\n    enclosingNode &&\n    (enclosingNode.type === \"ForInStatement\" ||\n      enclosingNode.type === \"ForOfStatement\")\n  ) {\n    addLeadingComment(enclosingNode, comment);\n    return true;\n  }\n  return false;\n}\n\nfunction handleImportDeclarationComments(\n  text,\n  enclosingNode,\n  precedingNode,\n  comment\n) {\n  if (\n    precedingNode &&\n    enclosingNode &&\n    enclosingNode.type === \"ImportDeclaration\" &&\n    util.hasNewline(text, util.locEnd(comment))\n  ) {\n    addTrailingComment(precedingNode, comment);\n    return true;\n  }\n  return false;\n}\n\nfunction handleAssignmentPatternComments(enclosingNode, comment) {\n  if (enclosingNode && enclosingNode.type === \"AssignmentPattern\") {\n    addLeadingComment(enclosingNode, comment);\n    return true;\n  }\n  return false;\n}\n\nfunction handleClassMethodComments(enclosingNode, comment) {\n  if (enclosingNode && enclosingNode.type === \"ClassMethod\") {\n    addTrailingComment(enclosingNode, comment);\n    return true;\n  }\n  return false;\n}\n\nfunction handleTypeAliasComments(enclosingNode, followingNode, comment) {\n  if (enclosingNode && enclosingNode.type === \"TypeAlias\") {\n    addLeadingComment(enclosingNode, comment);\n    return true;\n  }\n  return false;\n}\n\nfunction handleVariableDeclaratorComments(\n  enclosingNode,\n  followingNode,\n  comment\n) {\n  if (\n    enclosingNode &&\n    enclosingNode.type === \"VariableDeclarator\" &&\n    followingNode &&\n    (followingNode.type === \"ObjectExpression\" ||\n      followingNode.type === \"ArrayExpression\")\n  ) {\n    addLeadingComment(followingNode, comment);\n    return true;\n  }\n  return false;\n}\n\nfunction printComment(commentPath, options) {\n  const comment = commentPath.getValue();\n  comment.printed = true;\n\n  switch (comment.type || comment.kind) {\n    case \"Comment\":\n      return \"#\" + comment.value.trimRight();\n    case \"CommentBlock\":\n    case \"Block\":\n      return \"/*\" + comment.value + \"*/\";\n    case \"CommentLine\":\n    case \"Line\":\n      // Print shebangs with the proper comment characters\n      if (options.originalText.slice(util.locStart(comment)).startsWith(\"#!\")) {\n        return \"#!\" + comment.value.trimRight();\n      }\n      return \"//\" + comment.value.trimRight();\n    default:\n      throw new Error(\"Not a comment: \" + JSON.stringify(comment));\n  }\n}\n\nfunction findExpressionIndexForComment(quasis, comment) {\n  const startPos = locStart(comment) - 1;\n\n  for (let i = 1; i < quasis.length; ++i) {\n    if (startPos < getQuasiRange(quasis[i]).start) {\n      return i - 1;\n    }\n  }\n\n  // We haven't found it, it probably means that some of the locations are off.\n  // Let's just return the first one.\n  return 0;\n}\n\nfunction getQuasiRange(expr) {\n  if (expr.start !== undefined) {\n    // Babylon\n    return { start: expr.start, end: expr.end };\n  }\n  // Flow\n  return { start: expr.range[0], end: expr.range[1] };\n}\n\nfunction printLeadingComment(commentPath, print, options) {\n  const comment = commentPath.getValue();\n  const contents = printComment(commentPath, options);\n  if (!contents) {\n    return \"\";\n  }\n  const isBlock = util.isBlockComment(comment);\n\n  // Leading block comments should see if they need to stay on the\n  // same line or not.\n  if (isBlock) {\n    return concat([\n      contents,\n      util.hasNewline(options.originalText, locEnd(comment)) ? hardline : \" \"\n    ]);\n  }\n\n  return concat([contents, hardline]);\n}\n\nfunction printTrailingComment(commentPath, print, options) {\n  const comment = commentPath.getValue();\n  const contents = printComment(commentPath, options);\n  if (!contents) {\n    return \"\";\n  }\n  const isBlock = util.isBlockComment(comment);\n\n  if (\n    util.hasNewline(options.originalText, locStart(comment), {\n      backwards: true\n    })\n  ) {\n    // This allows comments at the end of nested structures:\n    // {\n    //   x: 1,\n    //   y: 2\n    //   // A comment\n    // }\n    // Those kinds of comments are almost always leading comments, but\n    // here it doesn't go \"outside\" the block and turns it into a\n    // trailing comment for `2`. We can simulate the above by checking\n    // if this a comment on its own line; normal trailing comments are\n    // always at the end of another expression.\n\n    const isLineBeforeEmpty = util.isPreviousLineEmpty(\n      options.originalText,\n      comment\n    );\n\n    return lineSuffix(\n      concat([hardline, isLineBeforeEmpty ? hardline : \"\", contents])\n    );\n  } else if (isBlock) {\n    // Trailing block comments never need a newline\n    return concat([\" \", contents]);\n  }\n\n  return concat([lineSuffix(\" \" + contents), !isBlock ? breakParent : \"\"]);\n}\n\nfunction printDanglingComments(path, options, sameIndent) {\n  const parts = [];\n  const node = path.getValue();\n\n  if (!node || !node.comments) {\n    return \"\";\n  }\n\n  path.each(commentPath => {\n    const comment = commentPath.getValue();\n    if (comment && !comment.leading && !comment.trailing) {\n      parts.push(printComment(commentPath, options));\n    }\n  }, \"comments\");\n\n  if (parts.length === 0) {\n    return \"\";\n  }\n\n  if (sameIndent) {\n    return join(hardline, parts);\n  }\n  return indent(concat([hardline, join(hardline, parts)]));\n}\n\nfunction prependCursorPlaceholder(path, options, printed) {\n  if (path.getNode() === options.cursorNode && path.getValue()) {\n    return concat([cursor, printed]);\n  }\n  return printed;\n}\n\nfunction printComments(path, print, options, needsSemi) {\n  const value = path.getValue();\n  const printed = print(path);\n  const comments = value && value.comments;\n\n  if (!comments || comments.length === 0) {\n    return prependCursorPlaceholder(path, options, printed);\n  }\n\n  const leadingParts = [];\n  const trailingParts = [needsSemi ? \";\" : \"\", printed];\n\n  path.each(commentPath => {\n    const comment = commentPath.getValue();\n    const leading = comment.leading;\n    const trailing = comment.trailing;\n\n    if (leading) {\n      const contents = printLeadingComment(commentPath, print, options);\n      if (!contents) {\n        return;\n      }\n      leadingParts.push(contents);\n\n      const text = options.originalText;\n      if (util.hasNewline(text, util.skipNewline(text, util.locEnd(comment)))) {\n        leadingParts.push(hardline);\n      }\n    } else if (trailing) {\n      trailingParts.push(printTrailingComment(commentPath, print, options));\n    }\n  }, \"comments\");\n\n  return prependCursorPlaceholder(\n    path,\n    options,\n    concat(leadingParts.concat(trailingParts))\n  );\n}\n\nmodule.exports = {\n  attach,\n  printComments,\n  printDanglingComments,\n  getSortedChildNodes\n};\n"
  },
  {
    "path": "src/deprecated.js",
    "content": "\"use strict\";\n\nconst deprecated = {\n  useFlowParser: config =>\n    `  The ${'\"useFlowParser\"'} option is deprecated. Use ${'\"parser\"'} instead.\n\n  Prettier now treats your configuration as:\n  {\n    ${'\"parser\"'}: ${config.useFlowParser ? '\"flow\"' : '\"babylon\"'}\n  }`\n};\n\nmodule.exports = deprecated;\n"
  },
  {
    "path": "src/doc-builders.js",
    "content": "\"use strict\";\n\nfunction assertDoc(val) {\n  if (\n    !(typeof val === \"string\" || (val != null && typeof val.type === \"string\"))\n  ) {\n    throw new Error(\n      \"Value \" + JSON.stringify(val) + \" is not a valid document\"\n    );\n  }\n}\n\nfunction concat(parts) {\n  parts.forEach(assertDoc);\n\n  // We cannot do this until we change `printJSXElement` to not\n  // access the internals of a document directly.\n  // if(parts.length === 1) {\n  //   // If it's a single document, no need to concat it.\n  //   return parts[0];\n  // }\n  return { type: \"concat\", parts };\n}\n\nfunction indent(contents) {\n  assertDoc(contents);\n\n  return { type: \"indent\", contents };\n}\n\nfunction align(n, contents) {\n  assertDoc(contents);\n\n  return { type: \"align\", contents, n };\n}\n\nfunction group(contents, opts) {\n  opts = opts || {};\n\n  assertDoc(contents);\n\n  return {\n    type: \"group\",\n    contents: contents,\n    break: !!opts.shouldBreak,\n    expandedStates: opts.expandedStates\n  };\n}\n\nfunction conditionalGroup(states, opts) {\n  return group(\n    states[0],\n    Object.assign(opts || {}, { expandedStates: states })\n  );\n}\n\nfunction fill(parts) {\n  parts.forEach(assertDoc);\n\n  return { type: \"fill\", parts };\n}\n\nfunction ifBreak(breakContents, flatContents) {\n  if (breakContents) {\n    assertDoc(breakContents);\n  }\n  if (flatContents) {\n    assertDoc(flatContents);\n  }\n\n  return { type: \"if-break\", breakContents, flatContents };\n}\n\nfunction lineSuffix(contents) {\n  assertDoc(contents);\n  return { type: \"line-suffix\", contents };\n}\n\nconst lineSuffixBoundary = { type: \"line-suffix-boundary\" };\nconst breakParent = { type: \"break-parent\" };\nconst line = { type: \"line\" };\nconst softline = { type: \"line\", soft: true };\nconst hardline = concat([{ type: \"line\", hard: true }, breakParent]);\nconst literalline = concat([\n  { type: \"line\", hard: true, literal: true },\n  breakParent\n]);\nconst cursor = { type: \"cursor\", placeholder: Symbol(\"cursor\") };\n\nfunction join(sep, arr) {\n  const res = [];\n\n  for (let i = 0; i < arr.length; i++) {\n    if (i !== 0) {\n      res.push(sep);\n    }\n\n    res.push(arr[i]);\n  }\n\n  return concat(res);\n}\n\nfunction addAlignmentToDoc(doc, size, tabWidth) {\n  let aligned = doc;\n  if (size > 0) {\n    // Use indent to add tabs for all the levels of tabs we need\n    for (let i = 0; i < Math.floor(size / tabWidth); ++i) {\n      aligned = indent(aligned);\n    }\n    // Use align for all the spaces that are needed\n    aligned = align(size % tabWidth, aligned);\n    // size is absolute from 0 and not relative to the current\n    // indentation, so we use -Infinity to reset the indentation to 0\n    aligned = align(-Infinity, aligned);\n  }\n  return aligned;\n}\n\nmodule.exports = {\n  concat,\n  join,\n  line,\n  softline,\n  hardline,\n  literalline,\n  group,\n  conditionalGroup,\n  fill,\n  lineSuffix,\n  lineSuffixBoundary,\n  cursor,\n  breakParent,\n  ifBreak,\n  indent,\n  align,\n  addAlignmentToDoc\n};\n"
  },
  {
    "path": "src/doc-debug.js",
    "content": "\"use strict\";\n\nfunction flattenDoc(doc) {\n  if (doc.type === \"concat\") {\n    const res = [];\n\n    for (let i = 0; i < doc.parts.length; ++i) {\n      const doc2 = doc.parts[i];\n      if (typeof doc2 !== \"string\" && doc2.type === \"concat\") {\n        [].push.apply(res, flattenDoc(doc2).parts);\n      } else {\n        const flattened = flattenDoc(doc2);\n        if (flattened !== \"\") {\n          res.push(flattened);\n        }\n      }\n    }\n\n    return Object.assign({}, doc, { parts: res });\n  } else if (doc.type === \"if-break\") {\n    return Object.assign({}, doc, {\n      breakContents:\n        doc.breakContents != null ? flattenDoc(doc.breakContents) : null,\n      flatContents:\n        doc.flatContents != null ? flattenDoc(doc.flatContents) : null\n    });\n  } else if (doc.type === \"group\") {\n    return Object.assign({}, doc, {\n      contents: flattenDoc(doc.contents),\n      expandedStates: doc.expandedStates\n        ? doc.expandedStates.map(flattenDoc)\n        : doc.expandedStates\n    });\n  } else if (doc.contents) {\n    return Object.assign({}, doc, { contents: flattenDoc(doc.contents) });\n  }\n  return doc;\n}\n\nfunction printDoc(doc) {\n  if (typeof doc === \"string\") {\n    return JSON.stringify(doc);\n  }\n\n  if (doc.type === \"line\") {\n    if (doc.literalline) {\n      return \"literalline\";\n    }\n    if (doc.hard) {\n      return \"hardline\";\n    }\n    if (doc.soft) {\n      return \"softline\";\n    }\n    return \"line\";\n  }\n\n  if (doc.type === \"break-parent\") {\n    return \"breakParent\";\n  }\n\n  if (doc.type === \"concat\") {\n    return \"[\" + doc.parts.map(printDoc).join(\", \") + \"]\";\n  }\n\n  if (doc.type === \"indent\") {\n    return \"indent(\" + printDoc(doc.contents) + \")\";\n  }\n\n  if (doc.type === \"align\") {\n    return \"align(\" + doc.n + \", \" + printDoc(doc.contents) + \")\";\n  }\n\n  if (doc.type === \"if-break\") {\n    return (\n      \"ifBreak(\" +\n      printDoc(doc.breakContents) +\n      (doc.flatContents ? \", \" + printDoc(doc.flatContents) : \"\") +\n      \")\"\n    );\n  }\n\n  if (doc.type === \"group\") {\n    if (doc.expandedStates) {\n      return (\n        \"conditionalGroup(\" +\n        \"[\" +\n        doc.expandedStates.map(printDoc).join(\",\") +\n        \"])\"\n      );\n    }\n\n    return (\n      (doc.break ? \"wrappedGroup\" : \"group\") +\n      \"(\" +\n      printDoc(doc.contents) +\n      \")\"\n    );\n  }\n\n  if (doc.type === \"fill\") {\n    return \"fill\" + \"(\" + doc.parts.map(printDoc).join(\", \") + \")\";\n  }\n\n  if (doc.type === \"line-suffix\") {\n    return \"lineSuffix(\" + printDoc(doc.contents) + \")\";\n  }\n\n  if (doc.type === \"line-suffix-boundary\") {\n    return \"lineSuffixBoundary\";\n  }\n\n  throw new Error(\"Unknown doc type \" + doc.type);\n}\n\nmodule.exports = {\n  printDocToDebug: function(doc) {\n    return printDoc(flattenDoc(doc));\n  }\n};\n"
  },
  {
    "path": "src/doc-printer.js",
    "content": "\"use strict\";\n\nconst docBuilders = require(\"./doc-builders\");\nconst concat = docBuilders.concat;\nconst fill = docBuilders.fill;\nconst cursor = docBuilders.cursor;\n\nconst MODE_BREAK = 1;\nconst MODE_FLAT = 2;\n\nfunction rootIndent() {\n  return {\n    indent: 0,\n    align: {\n      spaces: 0,\n      tabs: 0\n    }\n  };\n}\n\nfunction makeIndent(ind) {\n  return {\n    indent: ind.indent + 1,\n    align: ind.align\n  };\n}\n\nfunction makeAlign(ind, n) {\n  if (n === -Infinity) {\n    return {\n      indent: 0,\n      align: {\n        spaces: 0,\n        tabs: 0\n      }\n    };\n  }\n\n  return {\n    indent: ind.indent,\n    align: {\n      spaces: ind.align.spaces + n,\n      tabs: ind.align.tabs + (n ? 1 : 0)\n    }\n  };\n}\n\nfunction fits(next, restCommands, width, mustBeFlat) {\n  let restIdx = restCommands.length;\n  const cmds = [next];\n  while (width >= 0) {\n    if (cmds.length === 0) {\n      if (restIdx === 0) {\n        return true;\n      }\n      cmds.push(restCommands[restIdx - 1]);\n\n      restIdx--;\n\n      continue;\n    }\n\n    const x = cmds.pop();\n    const ind = x[0];\n    const mode = x[1];\n    const doc = x[2];\n    const align = x[3];\n\n    if (typeof doc === \"string\") {\n      width -= doc.length;\n    } else {\n      switch (doc.type) {\n        case \"concat\":\n          for (let i = doc.parts.length - 1; i >= 0; i--) {\n            cmds.push([ind, mode, doc.parts[i]]);\n          }\n\n          break;\n        case \"indent\":\n          cmds.push([makeIndent(ind), mode, doc.contents]);\n\n          break;\n        case \"align\":\n          cmds.push([makeAlign(ind, doc.n), mode, doc.contents]);\n\n          break;\n        case \"group\":\n          if (mustBeFlat && doc.break) {\n            return false;\n          }\n          cmds.push([ind, doc.break ? MODE_BREAK : mode, doc.contents]);\n\n          break;\n        case \"fill\":\n          for (let i = doc.parts.length - 1; i >= 0; i--) {\n            cmds.push([ind, mode, doc.parts[i]]);\n          }\n\n          break;\n        case \"if-break\":\n          if (mode === MODE_BREAK) {\n            if (doc.breakContents) {\n              cmds.push([ind, mode, doc.breakContents, align]);\n            }\n          }\n          if (mode === MODE_FLAT) {\n            if (doc.flatContents) {\n              cmds.push([ind, mode, doc.flatContents, align]);\n            }\n          }\n\n          break;\n        case \"line\":\n          switch (mode) {\n            // fallthrough\n            case MODE_FLAT:\n              if (!doc.hard) {\n                if (!doc.soft) {\n                  width -= 1;\n                }\n\n                break;\n              }\n              return true;\n\n            case MODE_BREAK:\n              return true;\n          }\n          break;\n      }\n    }\n  }\n  return false;\n}\n\nfunction printDocToString(doc, options) {\n  const width = options.printWidth;\n  const newLine = options.newLine || \"\\n\";\n  let pos = 0;\n  // cmds is basically a stack. We've turned a recursive call into a\n  // while loop which is much faster. The while loop below adds new\n  // cmds to the array instead of recursively calling `print`.\n  const cmds = [[rootIndent(), MODE_BREAK, doc]];\n  const out = [];\n  let shouldRemeasure = false;\n  let lineSuffix = [];\n\n  while (cmds.length !== 0) {\n    const x = cmds.pop();\n    const ind = x[0];\n    const mode = x[1];\n    const doc = x[2];\n    const align = x[3];\n\n    if (typeof doc === \"string\") {\n      out.push(doc);\n\n      pos += doc.length;\n    } else {\n      switch (doc.type) {\n        case \"cursor\":\n          out.push(cursor.placeholder);\n\n          break;\n        case \"concat\":\n          for (let i = doc.parts.length - 1; i >= 0; i--) {\n            cmds.push([ind, mode, doc.parts[i]]);\n          }\n\n          break;\n        case \"indent\":\n          cmds.push([makeIndent(ind), mode, doc.contents]);\n\n          break;\n        case \"align\":\n          cmds.push([makeAlign(ind, doc.n), mode, doc.contents]);\n\n          break;\n        case \"group\":\n          switch (mode) {\n            case MODE_FLAT:\n              if (!shouldRemeasure) {\n                cmds.push([\n                  ind,\n                  doc.break ? MODE_BREAK : MODE_FLAT,\n                  doc.contents,\n                  align\n                ]);\n\n                break;\n              }\n            // fallthrough\n\n            case MODE_BREAK: {\n              shouldRemeasure = false;\n\n              const next = [ind, MODE_FLAT, doc.contents];\n              const rem = width - pos;\n\n              if (!doc.break && fits(next, cmds, rem)) {\n                cmds.push(next);\n              } else {\n                // Expanded states are a rare case where a document\n                // can manually provide multiple representations of\n                // itself. It provides an array of documents\n                // going from the least expanded (most flattened)\n                // representation first to the most expanded. If a\n                // group has these, we need to manually go through\n                // these states and find the first one that fits.\n                if (doc.expandedStates) {\n                  const mostExpanded =\n                    doc.expandedStates[doc.expandedStates.length - 1];\n\n                  if (doc.break) {\n                    cmds.push([ind, MODE_BREAK, mostExpanded, align]);\n\n                    break;\n                  } else {\n                    for (let i = 1; i < doc.expandedStates.length + 1; i++) {\n                      if (i >= doc.expandedStates.length) {\n                        cmds.push([ind, MODE_BREAK, mostExpanded, align]);\n\n                        break;\n                      } else {\n                        const state = doc.expandedStates[i];\n                        const cmd = [ind, MODE_FLAT, state, align];\n\n                        if (fits(cmd, cmds, rem)) {\n                          cmds.push(cmd);\n\n                          break;\n                        }\n                      }\n                    }\n                  }\n                } else {\n                  cmds.push([ind, MODE_BREAK, doc.contents, align]);\n                }\n              }\n\n              break;\n            }\n          }\n          break;\n        // Fills each line with as much code as possible before moving to a new\n        // line with the same indentation.\n        //\n        // Expects doc.parts to be an array of alternating content and\n        // whitespace. The whitespace contains the linebreaks.\n        //\n        // For example:\n        //   [\"I\", line, \"love\", line, \"monkeys\"]\n        // or\n        //   [{ type: group, ... }, softline, { type: group, ... }]\n        //\n        // It uses this parts structure to handle three main layout cases:\n        // * The first two content items fit on the same line without\n        //   breaking\n        //   -> output the first content item and the whitespace \"flat\".\n        // * Only the first content item fits on the line without breaking\n        //   -> output the first content item \"flat\" and the whitespace with\n        //   \"break\".\n        // * Neither content item fits on the line without breaking\n        //   -> output the first content item and the whitespace with \"break\".\n        case \"fill\": {\n          const rem = width - pos;\n\n          const parts = doc.parts;\n          if (parts.length === 0) {\n            break;\n          }\n\n          const content = parts[0];\n          const contentFlatCmd = [ind, MODE_FLAT, content];\n          const contentBreakCmd = [ind, MODE_BREAK, content];\n          const contentFits = fits(contentFlatCmd, [], width - rem, true);\n\n          if (parts.length === 1) {\n            if (contentFits) {\n              cmds.push(contentFlatCmd);\n            } else {\n              cmds.push(contentBreakCmd);\n            }\n            break;\n          }\n\n          const whitespace = parts[1];\n          const whitespaceFlatCmd = [ind, MODE_FLAT, whitespace];\n          const whitespaceBreakCmd = [ind, MODE_BREAK, whitespace];\n\n          if (parts.length === 2) {\n            if (contentFits) {\n              cmds.push(whitespaceFlatCmd);\n              cmds.push(contentFlatCmd);\n            } else {\n              cmds.push(whitespaceBreakCmd);\n              cmds.push(contentBreakCmd);\n            }\n            break;\n          }\n\n          const remaining = parts.slice(2);\n          const remainingCmd = [ind, mode, fill(remaining)];\n\n          const secondContent = parts[2];\n          const firstAndSecondContentFlatCmd = [\n            ind,\n            MODE_FLAT,\n            concat([content, whitespace, secondContent])\n          ];\n          const firstAndSecondContentFits = fits(\n            firstAndSecondContentFlatCmd,\n            [],\n            rem,\n            true\n          );\n\n          if (firstAndSecondContentFits) {\n            cmds.push(remainingCmd);\n            cmds.push(whitespaceFlatCmd);\n            cmds.push(contentFlatCmd);\n          } else if (contentFits) {\n            cmds.push(remainingCmd);\n            cmds.push(whitespaceBreakCmd);\n            cmds.push(contentFlatCmd);\n          } else {\n            cmds.push(remainingCmd);\n            cmds.push(whitespaceBreakCmd);\n            cmds.push(contentBreakCmd);\n          }\n          break;\n        }\n        case \"if-break\":\n          if (mode === MODE_BREAK) {\n            if (doc.breakContents) {\n              cmds.push([ind, mode, doc.breakContents, align]);\n            }\n          }\n          if (mode === MODE_FLAT) {\n            if (doc.flatContents) {\n              cmds.push([ind, mode, doc.flatContents, align]);\n            }\n          }\n\n          break;\n        case \"line-suffix\":\n          lineSuffix.push([ind, mode, doc.contents, align]);\n          break;\n        case \"line-suffix-boundary\":\n          if (lineSuffix.length > 0) {\n            cmds.push([ind, mode, { type: \"line\", hard: true }]);\n          }\n          break;\n        case \"line\":\n          switch (mode) {\n            case MODE_FLAT:\n              if (!doc.hard) {\n                if (!doc.soft) {\n                  out.push(\" \");\n\n                  pos += 1;\n                }\n\n                break;\n              } else {\n                // This line was forced into the output even if we\n                // were in flattened mode, so we need to tell the next\n                // group that no matter what, it needs to remeasure\n                // because the previous measurement didn't accurately\n                // capture the entire expression (this is necessary\n                // for nested groups)\n                shouldRemeasure = true;\n              }\n            // fallthrough\n\n            case MODE_BREAK:\n              if (lineSuffix.length) {\n                cmds.push([ind, mode, doc, align]);\n                [].push.apply(cmds, lineSuffix.reverse());\n                lineSuffix = [];\n                break;\n              }\n\n              if (doc.literal) {\n                out.push(newLine);\n                pos = 0;\n              } else {\n                if (out.length > 0) {\n                  // Trim whitespace at the end of line\n                  while (\n                    out.length > 0 &&\n                    out[out.length - 1].match(/^[^\\S\\n]*$/)\n                  ) {\n                    out.pop();\n                  }\n\n                  if (out.length) {\n                    out[out.length - 1] = out[out.length - 1].replace(\n                      /[^\\S\\n]*$/,\n                      \"\"\n                    );\n                  }\n                }\n\n                const length = ind.indent * options.tabWidth + ind.align.spaces;\n                const indentString = options.useTabs\n                  ? \"\\t\".repeat(ind.indent + ind.align.tabs)\n                  : \" \".repeat(length);\n                out.push(newLine + indentString);\n                pos = length;\n              }\n              break;\n          }\n          break;\n        default:\n      }\n    }\n  }\n\n  const cursorPlaceholderIndex = out.indexOf(cursor.placeholder);\n  if (cursorPlaceholderIndex !== -1) {\n    const beforeCursor = out.slice(0, cursorPlaceholderIndex).join(\"\");\n    const afterCursor = out.slice(cursorPlaceholderIndex + 1).join(\"\");\n\n    return {\n      formatted: beforeCursor + afterCursor,\n      cursor: beforeCursor.length\n    };\n  }\n\n  return { formatted: out.join(\"\") };\n}\n\nmodule.exports = { printDocToString };\n"
  },
  {
    "path": "src/doc-utils.js",
    "content": "\"use strict\";\n\nfunction traverseDoc(doc, onEnter, onExit, shouldTraverseConditionalGroups) {\n  function traverseDocRec(doc) {\n    let shouldRecurse = true;\n    if (onEnter) {\n      if (onEnter(doc) === false) {\n        shouldRecurse = false;\n      }\n    }\n\n    if (shouldRecurse) {\n      if (doc.type === \"concat\" || doc.type === \"fill\") {\n        for (let i = 0; i < doc.parts.length; i++) {\n          traverseDocRec(doc.parts[i]);\n        }\n      } else if (doc.type === \"if-break\") {\n        if (doc.breakContents) {\n          traverseDocRec(doc.breakContents);\n        }\n        if (doc.flatContents) {\n          traverseDocRec(doc.flatContents);\n        }\n      } else if (doc.type === \"group\" && doc.expandedStates) {\n        if (shouldTraverseConditionalGroups) {\n          doc.expandedStates.forEach(traverseDocRec);\n        } else {\n          traverseDocRec(doc.contents);\n        }\n      } else if (doc.contents) {\n        traverseDocRec(doc.contents);\n      }\n    }\n\n    if (onExit) {\n      onExit(doc);\n    }\n  }\n\n  traverseDocRec(doc);\n}\n\nfunction mapDoc(doc, func) {\n  doc = func(doc);\n\n  if (doc.type === \"concat\" || doc.type === \"fill\") {\n    return Object.assign({}, doc, {\n      parts: doc.parts.map(d => mapDoc(d, func))\n    });\n  } else if (doc.type === \"if-break\") {\n    return Object.assign({}, doc, {\n      breakContents: doc.breakContents && mapDoc(doc.breakContents, func),\n      flatContents: doc.flatContents && mapDoc(doc.flatContents, func)\n    });\n  } else if (doc.contents) {\n    return Object.assign({}, doc, { contents: mapDoc(doc.contents, func) });\n  }\n  return doc;\n}\n\nfunction findInDoc(doc, fn, defaultValue) {\n  let result = defaultValue;\n  let hasStopped = false;\n  traverseDoc(doc, doc => {\n    const maybeResult = fn(doc);\n    if (maybeResult !== undefined) {\n      hasStopped = true;\n      result = maybeResult;\n    }\n    if (hasStopped) {\n      return false;\n    }\n  });\n  return result;\n}\n\nfunction isEmpty(n) {\n  return typeof n === \"string\" && n.length === 0;\n}\n\nfunction getFirstString(doc) {\n  return findInDoc(\n    doc,\n    doc => {\n      if (typeof doc === \"string\" && doc.trim().length !== 0) {\n        return doc;\n      }\n    },\n    null\n  );\n}\n\nfunction isLineNext(doc) {\n  return findInDoc(\n    doc,\n    doc => {\n      if (typeof doc === \"string\") {\n        return false;\n      }\n      if (doc.type === \"line\") {\n        return true;\n      }\n    },\n    false\n  );\n}\n\nfunction willBreak(doc) {\n  return findInDoc(\n    doc,\n    doc => {\n      if (doc.type === \"group\" && doc.break) {\n        return true;\n      }\n      if (doc.type === \"line\" && doc.hard) {\n        return true;\n      }\n      if (doc.type === \"break-parent\") {\n        return true;\n      }\n    },\n    false\n  );\n}\n\nfunction breakParentGroup(groupStack) {\n  if (groupStack.length > 0) {\n    const parentGroup = groupStack[groupStack.length - 1];\n    // Breaks are not propagated through conditional groups because\n    // the user is expected to manually handle what breaks.\n    if (!parentGroup.expandedStates) {\n      parentGroup.break = true;\n    }\n  }\n  return null;\n}\n\nfunction propagateBreaks(doc) {\n  const alreadyVisited = new Map();\n  const groupStack = [];\n  traverseDoc(\n    doc,\n    doc => {\n      if (doc.type === \"break-parent\") {\n        breakParentGroup(groupStack);\n      }\n      if (doc.type === \"group\") {\n        groupStack.push(doc);\n        if (alreadyVisited.has(doc)) {\n          return false;\n        }\n        alreadyVisited.set(doc, true);\n      }\n    },\n    doc => {\n      if (doc.type === \"group\") {\n        const group = groupStack.pop();\n        if (group.break) {\n          breakParentGroup(groupStack);\n        }\n      }\n    },\n    /* shouldTraverseConditionalGroups */ true\n  );\n}\n\nfunction removeLines(doc) {\n  // Force this doc into flat mode by statically converting all\n  // lines into spaces (or soft lines into nothing). Hard lines\n  // should still output because there's too great of a chance\n  // of breaking existing assumptions otherwise.\n  return mapDoc(doc, d => {\n    if (d.type === \"line\" && !d.hard) {\n      return d.soft ? \"\" : \" \";\n    } else if (d.type === \"if-break\") {\n      return d.flatContents || \"\";\n    }\n    return d;\n  });\n}\n\nfunction rawText(node) {\n  return node.extra ? node.extra.raw : node.raw;\n}\n\nmodule.exports = {\n  isEmpty,\n  getFirstString,\n  willBreak,\n  isLineNext,\n  traverseDoc,\n  mapDoc,\n  propagateBreaks,\n  removeLines,\n  rawText\n};\n"
  },
  {
    "path": "src/fast-path.js",
    "content": "\"use strict\";\n\nconst assert = require(\"assert\");\nconst util = require(\"./util\");\nconst startsWithNoLookaheadToken = util.startsWithNoLookaheadToken;\n\nfunction FastPath(value) {\n  assert.ok(this instanceof FastPath);\n  this.stack = [value];\n}\n\n// The name of the current property is always the penultimate element of\n// this.stack, and always a String.\nFastPath.prototype.getName = function getName() {\n  const s = this.stack;\n  const len = s.length;\n  if (len > 1) {\n    return s[len - 2];\n  }\n  // Since the name is always a string, null is a safe sentinel value to\n  // return if we do not know the name of the (root) value.\n  return null;\n};\n\n// The value of the current property is always the final element of\n// this.stack.\nFastPath.prototype.getValue = function getValue() {\n  const s = this.stack;\n  return s[s.length - 1];\n};\n\nfunction getNodeHelper(path, count) {\n  const s = path.stack;\n\n  for (let i = s.length - 1; i >= 0; i -= 2) {\n    const value = s[i];\n\n    if (value && !Array.isArray(value) && --count < 0) {\n      return value;\n    }\n  }\n\n  return null;\n}\n\nFastPath.prototype.getNode = function getNode(count) {\n  return getNodeHelper(this, ~~count);\n};\n\nFastPath.prototype.getParentNode = function getParentNode(count) {\n  return getNodeHelper(this, ~~count + 1);\n};\n\n// Temporarily push properties named by string arguments given after the\n// callback function onto this.stack, then call the callback with a\n// reference to this (modified) FastPath object. Note that the stack will\n// be restored to its original state after the callback is finished, so it\n// is probably a mistake to retain a reference to the path.\nFastPath.prototype.call = function call(callback /*, name1, name2, ... */) {\n  const s = this.stack;\n  const origLen = s.length;\n  let value = s[origLen - 1];\n  const argc = arguments.length;\n  for (let i = 1; i < argc; ++i) {\n    const name = arguments[i];\n    value = value[name];\n    s.push(name, value);\n  }\n  const result = callback(this);\n  s.length = origLen;\n  return result;\n};\n\n// Similar to FastPath.prototype.call, except that the value obtained by\n// accessing this.getValue()[name1][name2]... should be array-like. The\n// callback will be called with a reference to this path object for each\n// element of the array.\nFastPath.prototype.each = function each(callback /*, name1, name2, ... */) {\n  const s = this.stack;\n  const origLen = s.length;\n  let value = s[origLen - 1];\n  const argc = arguments.length;\n\n  for (let i = 1; i < argc; ++i) {\n    const name = arguments[i];\n    value = value[name];\n    s.push(name, value);\n  }\n\n  for (let i = 0; i < value.length; ++i) {\n    if (i in value) {\n      s.push(i, value[i]);\n      // If the callback needs to know the value of i, call\n      // path.getName(), assuming path is the parameter name.\n      callback(this);\n      s.length -= 2;\n    }\n  }\n\n  s.length = origLen;\n};\n\n// Similar to FastPath.prototype.each, except that the results of the\n// callback function invocations are stored in an array and returned at\n// the end of the iteration.\nFastPath.prototype.map = function map(callback /*, name1, name2, ... */) {\n  const s = this.stack;\n  const origLen = s.length;\n  let value = s[origLen - 1];\n  const argc = arguments.length;\n\n  for (let i = 1; i < argc; ++i) {\n    const name = arguments[i];\n    value = value[name];\n    s.push(name, value);\n  }\n\n  const result = new Array(value.length);\n\n  for (let i = 0; i < value.length; ++i) {\n    if (i in value) {\n      s.push(i, value[i]);\n      result[i] = callback(this, i);\n      s.length -= 2;\n    }\n  }\n\n  s.length = origLen;\n\n  return result;\n};\n\nFastPath.prototype.needsParens = function(options) {\n  const parent = this.getParentNode();\n  if (!parent) {\n    return false;\n  }\n\n  const name = this.getName();\n  const node = this.getNode();\n\n  // If the value of this path is some child of a Node and not a Node\n  // itself, then it doesn't need parentheses. Only Node objects (in\n  // fact, only Expression nodes) need parentheses.\n  if (this.getValue() !== node) {\n    return false;\n  }\n\n  // Only statements don't need parentheses.\n  if (isStatement(node)) {\n    return false;\n  }\n\n  // Identifiers never need parentheses.\n  if (node.type === \"Identifier\") {\n    return false;\n  }\n\n  if (parent.type === \"ParenthesizedExpression\") {\n    return false;\n  }\n\n  // Add parens around the extends clause of a class. It is needed for almost\n  // all expressions.\n  if (\n    (parent.type === \"ClassDeclaration\" || parent.type === \"ClassExpression\") &&\n    parent.superClass === node &&\n    (node.type === \"ArrowFunctionExpression\" ||\n      node.type === \"AssignmentExpression\" ||\n      node.type === \"AwaitExpression\" ||\n      node.type === \"BinaryExpression\" ||\n      node.type === \"ConditionalExpression\" ||\n      node.type === \"LogicalExpression\" ||\n      node.type === \"NewExpression\" ||\n      node.type === \"ObjectExpression\" ||\n      node.type === \"ParenthesizedExpression\" ||\n      node.type === \"SequenceExpression\" ||\n      node.type === \"TaggedTemplateExpression\" ||\n      node.type === \"UnaryExpression\" ||\n      node.type === \"UpdateExpression\" ||\n      node.type === \"YieldExpression\")\n  ) {\n    return true;\n  }\n\n  if (\n    (parent.type === \"ArrowFunctionExpression\" &&\n    parent.body === node &&\n    node.type !== \"SequenceExpression\" && // these have parens added anyway\n      startsWithNoLookaheadToken(node, /* forbidFunctionAndClass */ false)) ||\n    (parent.type === \"ExpressionStatement\" &&\n      startsWithNoLookaheadToken(node, /* forbidFunctionAndClass */ true))\n  ) {\n    return true;\n  }\n\n  switch (node.type) {\n    case \"CallExpression\": {\n      let firstParentNotMemberExpression = parent;\n      let i = 0;\n      while (\n        firstParentNotMemberExpression &&\n        firstParentNotMemberExpression.type === \"MemberExpression\"\n      ) {\n        firstParentNotMemberExpression = this.getParentNode(++i);\n      }\n\n      if (\n        firstParentNotMemberExpression.type === \"NewExpression\" &&\n        firstParentNotMemberExpression.callee === this.getParentNode(i - 1)\n      ) {\n        return true;\n      }\n      return false;\n    }\n\n    case \"SpreadElement\":\n    case \"SpreadProperty\":\n      return (\n        parent.type === \"MemberExpression\" &&\n        name === \"object\" &&\n        parent.object === node\n      );\n\n    case \"UpdateExpression\":\n      if (parent.type === \"UnaryExpression\") {\n        return (\n          node.prefix &&\n          ((node.operator === \"++\" && parent.operator === \"+\") ||\n            (node.operator === \"--\" && parent.operator === \"-\"))\n        );\n      }\n    // else fallthrough\n    case \"UnaryExpression\":\n      switch (parent.type) {\n        case \"UnaryExpression\":\n          return (\n            node.operator === parent.operator &&\n            (node.operator === \"+\" || node.operator === \"-\")\n          );\n\n        case \"MemberExpression\":\n          return name === \"object\" && parent.object === node;\n\n        case \"TaggedTemplateExpression\":\n          return true;\n\n        case \"NewExpression\":\n        case \"CallExpression\":\n          return name === \"callee\" && parent.callee === node;\n\n        case \"BinaryExpression\":\n          return parent.operator === \"**\" && name === \"left\";\n\n        default:\n          return false;\n      }\n\n    case \"BinaryExpression\": {\n      if (parent.type === \"UpdateExpression\") {\n        return true;\n      }\n\n      const isLeftOfAForStatement = node => {\n        let i = 0;\n        while (node) {\n          const parent = this.getParentNode(i++);\n          if (!parent) {\n            return false;\n          }\n          if (parent.type === \"ForStatement\" && parent.init === node) {\n            return true;\n          }\n          node = parent;\n        }\n        return false;\n      };\n      if (node.operator === \"in\" && isLeftOfAForStatement(node)) {\n        return true;\n      }\n    }\n    // fallthrough\n    case \"TSTypeAssertionExpression\":\n    case \"TSAsExpression\":\n    case \"LogicalExpression\":\n      switch (parent.type) {\n        case \"CallExpression\":\n        case \"NewExpression\":\n          return name === \"callee\" && parent.callee === node;\n\n        case \"ClassDeclaration\":\n          return name === \"superClass\" && parent.superClass === node;\n        case \"TSTypeAssertionExpression\":\n        case \"TaggedTemplateExpression\":\n        case \"UnaryExpression\":\n        case \"SpreadElement\":\n        case \"SpreadProperty\":\n        case \"BindExpression\":\n        case \"AwaitExpression\":\n        case \"TSAsExpression\":\n        case \"TSNonNullExpression\":\n          return true;\n\n        case \"MemberExpression\":\n          return name === \"object\" && parent.object === node;\n\n        case \"BinaryExpression\":\n        case \"LogicalExpression\": {\n          if (!node.operator && node.type !== \"TSTypeAssertionExpression\") {\n            return true;\n          }\n\n          const po = parent.operator;\n          const pp = util.getPrecedence(po);\n          const no = node.operator;\n          const np = util.getPrecedence(no);\n\n          if (pp > np) {\n            return true;\n          }\n\n          if (po === \"||\" && no === \"&&\") {\n            return true;\n          }\n\n          if (pp === np && name === \"right\") {\n            assert.strictEqual(parent.right, node);\n            return true;\n          }\n\n          if (pp === np && !util.shouldFlatten(po, no)) {\n            return true;\n          }\n\n          // Add parenthesis when working with binary operators\n          // It's not stricly needed but helps with code understanding\n          if (util.isBitwiseOperator(po)) {\n            return true;\n          }\n\n          return false;\n        }\n\n        default:\n          return false;\n      }\n\n    case \"TSParenthesizedType\": {\n      const grandParent = this.getParentNode(1);\n      if (\n        (parent.type === \"TypeParameter\" ||\n          parent.type === \"VariableDeclarator\" ||\n          parent.type === \"TypeAnnotation\" ||\n          parent.type === \"GenericTypeAnnotation\") &&\n        (node.typeAnnotation.type === \"TypeAnnotation\" &&\n          node.typeAnnotation.typeAnnotation.type !== \"TSFunctionType\" &&\n          grandParent.type !== \"TSTypeOperator\")\n      ) {\n        return false;\n      }\n      // Delegate to inner TSParenthesizedType\n      if (node.typeAnnotation.type === \"TSParenthesizedType\") {\n        return false;\n      }\n      return true;\n    }\n\n    case \"SequenceExpression\":\n      switch (parent.type) {\n        case \"ReturnStatement\":\n          return false;\n\n        case \"ForStatement\":\n          // Although parentheses wouldn't hurt around sequence\n          // expressions in the head of for loops, traditional style\n          // dictates that e.g. i++, j++ should not be wrapped with\n          // parentheses.\n          return false;\n\n        case \"ExpressionStatement\":\n          return name !== \"expression\";\n\n        case \"ArrowFunctionExpression\":\n          // We do need parentheses, but SequenceExpressions are handled\n          // specially when printing bodies of arrow functions.\n          return name !== \"body\";\n\n        default:\n          // Otherwise err on the side of overparenthesization, adding\n          // explicit exceptions above if this proves overzealous.\n          return true;\n      }\n\n    case \"YieldExpression\":\n      if (\n        parent.type === \"UnaryExpression\" ||\n        parent.type === \"AwaitExpression\" ||\n        parent.type === \"TSAsExpression\" ||\n        parent.type === \"TSNonNullExpression\"\n      ) {\n        return true;\n      }\n    // else fallthrough\n    case \"AwaitExpression\":\n      switch (parent.type) {\n        case \"TaggedTemplateExpression\":\n        case \"BinaryExpression\":\n        case \"LogicalExpression\":\n        case \"SpreadElement\":\n        case \"SpreadProperty\":\n        case \"TSAsExpression\":\n        case \"TSNonNullExpression\":\n          return true;\n\n        case \"MemberExpression\":\n          return parent.object === node;\n\n        case \"NewExpression\":\n        case \"CallExpression\":\n          return parent.callee === node;\n\n        case \"ConditionalExpression\":\n          return parent.test === node;\n\n        default:\n          return false;\n      }\n\n    case \"ArrayTypeAnnotation\":\n      return parent.type === \"NullableTypeAnnotation\";\n\n    case \"IntersectionTypeAnnotation\":\n    case \"UnionTypeAnnotation\":\n      return (\n        parent.type === \"ArrayTypeAnnotation\" ||\n        parent.type === \"NullableTypeAnnotation\" ||\n        parent.type === \"IntersectionTypeAnnotation\" ||\n        parent.type === \"UnionTypeAnnotation\"\n      );\n\n    case \"NullableTypeAnnotation\":\n      return parent.type === \"ArrayTypeAnnotation\";\n\n    case \"FunctionTypeAnnotation\":\n      return (\n        parent.type === \"UnionTypeAnnotation\" ||\n        parent.type === \"IntersectionTypeAnnotation\"\n      );\n\n    case \"StringLiteral\":\n    case \"NumericLiteral\":\n    case \"Literal\":\n      if (\n        typeof node.value === \"string\" &&\n        parent.type === \"ExpressionStatement\" &&\n        // TypeScript workaround for eslint/typescript-eslint-parser#267\n        // See corresponding workaround in printer.js case: \"Literal\"\n        ((options.parser !== \"typescript\" && !parent.directive) ||\n          (options.parser === \"typescript\" &&\n            options.originalText.substr(util.locStart(node) - 1, 1) === \"(\"))\n      ) {\n        // To avoid becoming a directive\n        const grandParent = this.getParentNode(1);\n\n        return (\n          grandParent.type === \"Program\" ||\n          grandParent.type === \"BlockStatement\"\n        );\n      }\n\n      return (\n        parent.type === \"MemberExpression\" &&\n        typeof node.value === \"number\" &&\n        name === \"object\" &&\n        parent.object === node\n      );\n\n    case \"AssignmentExpression\": {\n      const grandParent = this.getParentNode(1);\n\n      if (parent.type === \"ArrowFunctionExpression\" && parent.body === node) {\n        return true;\n      } else if (\n        parent.type === \"ClassProperty\" &&\n        parent.key === node &&\n        parent.computed\n      ) {\n        return false;\n      } else if (\n        parent.type === \"TSPropertySignature\" &&\n        parent.name === node\n      ) {\n        return false;\n      } else if (\n        parent.type === \"ForStatement\" &&\n        (parent.init === node || parent.update === node)\n      ) {\n        return false;\n      } else if (parent.type === \"ExpressionStatement\") {\n        return node.left.type === \"ObjectPattern\";\n      } else if (parent.type === \"TSPropertySignature\" && parent.key === node) {\n        return false;\n      } else if (parent.type === \"AssignmentExpression\") {\n        return false;\n      } else if (\n        parent.type === \"SequenceExpression\" &&\n        grandParent &&\n        grandParent.type === \"ForStatement\" &&\n        (grandParent.init === parent || grandParent.update === parent)\n      ) {\n        return false;\n      }\n      return true;\n    }\n    case \"ConditionalExpression\":\n      switch (parent.type) {\n        case \"TaggedTemplateExpression\":\n        case \"UnaryExpression\":\n        case \"SpreadElement\":\n        case \"SpreadProperty\":\n        case \"BinaryExpression\":\n        case \"LogicalExpression\":\n        case \"ExportDefaultDeclaration\":\n        case \"AwaitExpression\":\n        case \"JSXSpreadAttribute\":\n        case \"TSTypeAssertionExpression\":\n        case \"TSAsExpression\":\n        case \"TSNonNullExpression\":\n          return true;\n\n        case \"NewExpression\":\n        case \"CallExpression\":\n          return name === \"callee\" && parent.callee === node;\n\n        case \"ConditionalExpression\":\n          return name === \"test\" && parent.test === node;\n\n        case \"MemberExpression\":\n          return name === \"object\" && parent.object === node;\n\n        default:\n          return false;\n      }\n\n    case \"FunctionExpression\":\n      switch (parent.type) {\n        case \"CallExpression\":\n          return name === \"callee\"; // Not strictly necessary, but it's clearer to the reader if IIFEs are wrapped in parentheses.\n        case \"TaggedTemplateExpression\":\n          return true; // This is basically a kind of IIFE.\n        case \"ExportDefaultDeclaration\":\n          return true;\n        default:\n          return false;\n      }\n\n    case \"ArrowFunctionExpression\":\n      switch (parent.type) {\n        case \"CallExpression\":\n          return name === \"callee\";\n\n        case \"NewExpression\":\n          return name === \"callee\";\n\n        case \"MemberExpression\":\n          return name === \"object\";\n\n        case \"TSAsExpression\":\n        case \"BindExpression\":\n        case \"TaggedTemplateExpression\":\n        case \"UnaryExpression\":\n        case \"LogicalExpression\":\n        case \"BinaryExpression\":\n        case \"AwaitExpression\":\n        case \"TSTypeAssertionExpression\":\n          return true;\n\n        case \"ConditionalExpression\":\n          return name === \"test\";\n\n        default:\n          return false;\n      }\n\n    case \"ClassExpression\":\n      return parent.type === \"ExportDefaultDeclaration\";\n  }\n\n  return false;\n};\n\nfunction isStatement(node) {\n  return (\n    node.type === \"BlockStatement\" ||\n    node.type === \"BreakStatement\" ||\n    node.type === \"ClassBody\" ||\n    node.type === \"ClassDeclaration\" ||\n    node.type === \"ClassMethod\" ||\n    node.type === \"ClassProperty\" ||\n    node.type === \"ContinueStatement\" ||\n    node.type === \"DebuggerStatement\" ||\n    node.type === \"DeclareClass\" ||\n    node.type === \"DeclareExportAllDeclaration\" ||\n    node.type === \"DeclareExportDeclaration\" ||\n    node.type === \"DeclareFunction\" ||\n    node.type === \"DeclareInterface\" ||\n    node.type === \"DeclareModule\" ||\n    node.type === \"DeclareModuleExports\" ||\n    node.type === \"DeclareVariable\" ||\n    node.type === \"DoWhileStatement\" ||\n    node.type === \"ExportAllDeclaration\" ||\n    node.type === \"ExportDefaultDeclaration\" ||\n    node.type === \"ExportNamedDeclaration\" ||\n    node.type === \"ExpressionStatement\" ||\n    node.type === \"ForAwaitStatement\" ||\n    node.type === \"ForInStatement\" ||\n    node.type === \"ForOfStatement\" ||\n    node.type === \"ForStatement\" ||\n    node.type === \"FunctionDeclaration\" ||\n    node.type === \"IfStatement\" ||\n    node.type === \"ImportDeclaration\" ||\n    node.type === \"InterfaceDeclaration\" ||\n    node.type === \"LabeledStatement\" ||\n    node.type === \"MethodDefinition\" ||\n    node.type === \"ReturnStatement\" ||\n    node.type === \"SwitchStatement\" ||\n    node.type === \"ThrowStatement\" ||\n    node.type === \"TryStatement\" ||\n    node.type === \"TSAbstractClassDeclaration\" ||\n    node.type === \"TSEnumDeclaration\" ||\n    node.type === \"TSImportEqualsDeclaration\" ||\n    node.type === \"TSInterfaceDeclaration\" ||\n    node.type === \"TSModuleDeclaration\" ||\n    node.type === \"TSNamespaceExportDeclaration\" ||\n    node.type === \"TSNamespaceFunctionDeclaration\" ||\n    node.type === \"TypeAlias\" ||\n    node.type === \"VariableDeclaration\" ||\n    node.type === \"WhileStatement\" ||\n    node.type === \"WithStatement\"\n  );\n}\n\nmodule.exports = FastPath;\n"
  },
  {
    "path": "src/multiparser.js",
    "content": "\"use strict\";\n\nconst util = require(\"./util\");\nconst docUtils = require(\"./doc-utils\");\nconst docBuilders = require(\"./doc-builders\");\nconst comments = require(\"./comments\");\nconst indent = docBuilders.indent;\nconst hardline = docBuilders.hardline;\nconst softline = docBuilders.softline;\nconst concat = docBuilders.concat;\n\nfunction printSubtree(subtreeParser, path, print, options) {\n  const next = Object.assign({}, { transformDoc: doc => doc }, subtreeParser);\n  next.options = Object.assign({}, options, next.options, {\n    originalText: next.text\n  });\n  const ast = require(\"./parser\").parse(next.text, next.options);\n  const astComments = ast.comments;\n  delete ast.comments;\n  comments.attach(astComments, ast, next.text, next.options);\n  const nextDoc = require(\"./printer\").printAstToDoc(ast, next.options);\n  return next.transformDoc(nextDoc, { path, print });\n}\n\n/**\n * @returns {{ text, options?, transformDoc? } | void}\n */\nfunction getSubtreeParser(path, options) {\n  switch (options.parser) {\n    case \"parse5\":\n      return fromHtmlParser2(path, options);\n    case \"babylon\":\n    case \"flow\":\n    case \"typescript\":\n      return fromBabylonFlowOrTypeScript(path, options);\n  }\n}\n\nfunction fromBabylonFlowOrTypeScript(path) {\n  const node = path.getValue();\n\n  switch (node.type) {\n    case \"TemplateLiteral\": {\n      const isCss = [isStyledJsx, isStyledComponents].some(isIt => isIt(path));\n\n      if (isCss) {\n        // Get full template literal with expressions replaced by placeholders\n        const rawQuasis = node.quasis.map(q => q.value.raw);\n        const text = rawQuasis.join(\"@prettier-placeholder\");\n        return {\n          options: { parser: \"postcss\" },\n          transformDoc: transformCssDoc,\n          text: text\n        };\n      }\n\n      break;\n    }\n    case \"TemplateElement\": {\n      const parent = path.getParentNode();\n      const parentParent = path.getParentNode(1);\n\n      /*\n       * react-relay and graphql-tag\n       * graphql`...`\n       * graphql.experimental`...`\n       * gql`...`\n       */\n      if (\n        parentParent &&\n        parentParent.type === \"TaggedTemplateExpression\" &&\n        parent.quasis.length === 1 &&\n        ((parentParent.tag.type === \"MemberExpression\" &&\n          parentParent.tag.object.name === \"graphql\" &&\n          parentParent.tag.property.name === \"experimental\") ||\n          (parentParent.tag.type === \"Identifier\" &&\n            (parentParent.tag.name === \"gql\" ||\n              parentParent.tag.name === \"graphql\")))\n      ) {\n        return {\n          options: { parser: \"graphql\" },\n          transformDoc: doc =>\n            concat([\n              indent(concat([softline, stripTrailingHardline(doc)])),\n              softline\n            ]),\n          text: parent.quasis[0].value.raw\n        };\n      }\n\n      break;\n    }\n  }\n}\n\nfunction fromHtmlParser2(path, options) {\n  const node = path.getValue();\n\n  switch (node.type) {\n    case \"text\": {\n      const parent = path.getParentNode();\n      // Inline JavaScript\n      if (\n        parent.type === \"script\" &&\n        ((!parent.attribs.lang && !parent.attribs.lang) ||\n          parent.attribs.type === \"text/javascript\" ||\n          parent.attribs.type === \"application/javascript\")\n      ) {\n        const parser = options.parser === \"flow\" ? \"flow\" : \"babylon\";\n        return {\n          options: { parser },\n          transformDoc: doc => concat([hardline, doc]),\n          text: getText(options, node)\n        };\n      }\n\n      // Inline TypeScript\n      if (\n        parent.type === \"script\" &&\n        (parent.attribs.type === \"application/x-typescript\" ||\n          parent.attribs.lang === \"ts\")\n      ) {\n        return {\n          options: { parser: \"typescript\" },\n          transformDoc: doc => concat([hardline, doc]),\n          text: getText(options, node)\n        };\n      }\n\n      // Inline Styles\n      if (parent.type === \"style\") {\n        return {\n          options: { parser: \"postcss\" },\n          transformDoc: doc => concat([hardline, stripTrailingHardline(doc)]),\n          text: getText(options, node)\n        };\n      }\n\n      break;\n    }\n\n    case \"attribute\": {\n      /*\n       * Vue binding sytax: JS expressions\n       * :class=\"{ 'some-key': value }\"\n       * v-bind:id=\"'list-' + id\"\n       * v-if=\"foo && !bar\"\n       * @click=\"someFunction()\"\n       */\n      if (/(^@)|(^v-)|:/.test(node.key) && !/^\\w+$/.test(node.value)) {\n        return {\n          text: node.value,\n          options: {\n            parser: parseJavaScriptExpression,\n            // Use singleQuote since HTML attributes use double-quotes.\n            // TODO(azz): We still need to do an entity escape on the attribute.\n            singleQuote: true\n          },\n          transformDoc: doc => {\n            return concat([\n              node.key,\n              '=\"',\n              util.hasNewlineInRange(node.value, 0, node.value.length)\n                ? doc\n                : docUtils.removeLines(doc),\n              '\"'\n            ]);\n          }\n        };\n      }\n    }\n  }\n}\n\nfunction transformCssDoc(quasisDoc, parent) {\n  const parentNode = parent.path.getValue();\n  const expressionDocs = parentNode.expressions\n    ? parent.path.map(parent.print, \"expressions\")\n    : [];\n  const newDoc = replacePlaceholders(quasisDoc, expressionDocs);\n  if (!newDoc) {\n    throw new Error(\"Couldn't insert all the expressions\");\n  }\n  return concat([\n    \"`\",\n    indent(concat([softline, stripTrailingHardline(newDoc)])),\n    softline,\n    \"`\"\n  ]);\n}\n\n// Search all the placeholders in the quasisDoc tree\n// and replace them with the expression docs one by one\n// returns a new doc with all the placeholders replaced,\n// or null if it couldn't replace any expression\nfunction replacePlaceholders(quasisDoc, expressionDocs) {\n  if (!expressionDocs || !expressionDocs.length) {\n    return quasisDoc;\n  }\n\n  const expressions = expressionDocs.slice();\n  const newDoc = docUtils.mapDoc(quasisDoc, doc => {\n    if (!doc || !doc.parts || !doc.parts.length) {\n      return doc;\n    }\n    let parts = doc.parts;\n    if (\n      parts.length > 1 &&\n      parts[0] === \"@\" &&\n      typeof parts[1] === \"string\" &&\n      parts[1].startsWith(\"prettier-placeholder\")\n    ) {\n      // If placeholder is split, join it\n      const at = parts[0];\n      const placeholder = parts[1];\n      const rest = parts.slice(2);\n      parts = [at + placeholder].concat(rest);\n    }\n    if (\n      typeof parts[0] === \"string\" &&\n      parts[0].startsWith(\"@prettier-placeholder\")\n    ) {\n      const placeholder = parts[0];\n      const rest = parts.slice(1);\n\n      // When the expression has a suffix appended, like:\n      // animation: linear ${time}s ease-out;\n      const suffix = placeholder.slice(\"@prettier-placeholder\".length);\n\n      const expression = expressions.shift();\n      parts = [\"${\", expression, \"}\" + suffix].concat(rest);\n    }\n    return Object.assign({}, doc, {\n      parts: parts\n    });\n  });\n\n  return expressions.length === 0 ? newDoc : null;\n}\n\nfunction parseJavaScriptExpression(text, parsers) {\n  // Force parsing as an expression\n  const ast = parsers.babylon(`(${text})`);\n  // Extract expression from the declaration\n  return {\n    type: \"File\",\n    program: ast.program.body[0].expression\n  };\n}\n\nfunction getText(options, node) {\n  return options.originalText.slice(util.locStart(node), util.locEnd(node));\n}\n\nfunction stripTrailingHardline(doc) {\n  // HACK remove ending hardline, original PR: #1984\n  if (\n    doc.type === \"concat\" &&\n    doc.parts[0].type === \"concat\" &&\n    doc.parts[0].parts.length === 2 &&\n    // doc.parts[0].parts[1] === hardline :\n    doc.parts[0].parts[1].type === \"concat\" &&\n    doc.parts[0].parts[1].parts.length === 2 &&\n    doc.parts[0].parts[1].parts[0].hard &&\n    doc.parts[0].parts[1].parts[1].type === \"break-parent\"\n  ) {\n    return doc.parts[0].parts[0];\n  }\n  return doc;\n}\n\n/**\n * Template literal in this context:\n * <style jsx>{`div{color:red}`}</style>\n */\nfunction isStyledJsx(path) {\n  const node = path.getValue();\n  const parent = path.getParentNode();\n  const parentParent = path.getParentNode(1);\n  return (\n    parentParent &&\n    node.quasis &&\n    parent.type === \"JSXExpressionContainer\" &&\n    parentParent.type === \"JSXElement\" &&\n    parentParent.openingElement.name.name === \"style\" &&\n    parentParent.openingElement.attributes.some(\n      attribute => attribute.name.name === \"jsx\"\n    )\n  );\n}\n\n/**\n * Template literal in these contexts:\n * styled.button`color: red`\n * Foo.extend`color: red`\n * css`color: red`\n * keyframes`0% { opacity: 0; }`\n * injectGlobal`body{ margin:0: }`\n */\nfunction isStyledComponents(path) {\n  const parent = path.getParentNode();\n  return (\n    parent &&\n    parent.type === \"TaggedTemplateExpression\" &&\n    ((parent.tag.type === \"MemberExpression\" &&\n      (parent.tag.object.name === \"styled\" ||\n        (/^[A-Z]/.test(parent.tag.object.name) &&\n          parent.tag.property.name === \"extend\"))) ||\n      (parent.tag.type === \"Identifier\" && parent.tag.name === \"css\"))\n  );\n}\n\nmodule.exports = {\n  getSubtreeParser,\n  printSubtree\n};\n"
  },
  {
    "path": "src/options.js",
    "content": "\"use strict\";\n\nconst validate = require(\"jest-validate\").validate;\nconst deprecatedConfig = require(\"./deprecated\");\nconst defaultsTrailingComma = {\n  array: false,\n  object: false,\n  import: false,\n  export: false,\n  arguments: false\n};\nconst trailingCommaPresets = {\n  none: Object.assign({}, defaultsTrailingComma),\n  es5: Object.assign({}, defaultsTrailingComma, {\n    array: true,\n    object: true,\n    import: true,\n    export: true\n  }),\n  all: Object.assign({}, defaultsTrailingComma, {\n    array: true,\n    object: true,\n    import: true,\n    export: true,\n    arguments: true\n  })\n};\n\nconst defaults = {\n  cursorOffset: -1,\n  rangeStart: 0,\n  rangeEnd: Infinity,\n  useTabs: false,\n  tabWidth: 2,\n  printWidth: 80,\n  singleQuote: false,\n  jsxSingleQuote: false,\n  trailingComma: Object.assign({}, defaultsTrailingComma),\n  bracketSpacing: false,\n  bracesSpacing: true,\n  breakProperty: false,\n  arrowParens: false,\n  arrayExpand: false,\n  flattenTernaries: false,\n  breakBeforeElse: false,\n  jsxBracketSameLine: false,\n  alignObjectProperties: false,\n  noSpaceEmptyFn: false,\n  parser: \"babylon\",\n  semi: true,\n  spaceBeforeFunctionParen: false,\n  __log: false\n};\n\nconst exampleConfig = Object.assign({}, defaults, {\n  filepath: \"path/to/Filename\",\n  printWidth: 80,\n  originalText: \"text\"\n});\n\n// Copy options and fill in default values.\nfunction normalize(options) {\n  const normalized = Object.assign({}, options || {});\n  const filepath = normalized.filepath;\n\n  if (/\\.(css|less|scss)$/.test(filepath)) {\n    normalized.parser = \"postcss\";\n  } else if (/\\.html$/.test(filepath)) {\n    normalized.parser = \"parse5\";\n  } else if (/\\.(ts|tsx)$/.test(filepath)) {\n    normalized.parser = \"typescript\";\n  } else if (/\\.(graphql|gql)$/.test(filepath)) {\n    normalized.parser = \"graphql\";\n  } else if (/\\.json$/.test(filepath)) {\n    normalized.parser = \"json\";\n  }\n\n  if (normalized.parser === \"json\") {\n    normalized.trailingComma = \"none\";\n  }\n\n  normalized.trailingComma = normalizeTrailingComma(normalized.trailingComma);\n\n  const parserBackup = normalized.parser;\n  if (typeof normalized.parser === \"function\") {\n    // Delete the function from the object to pass validation.\n    delete normalized.parser;\n  }\n\n  validate(normalized, { exampleConfig, deprecatedConfig });\n\n  // Restore the option back to a function;\n  normalized.parser = parserBackup;\n\n  // For backward compatibility. Deprecated in 0.0.10\n  if (\"useFlowParser\" in normalized) {\n    normalized.parser = normalized.useFlowParser ? \"flow\" : \"babylon\";\n    delete normalized.useFlowParser;\n  }\n\n  Object.keys(defaults).forEach(k => {\n    if (normalized[k] == null) {\n      normalized[k] = defaults[k];\n    }\n  });\n\n  return normalized;\n}\n\nfunction normalizeTrailingComma(value) {\n  let trailingComma;\n  if (\"boolean\" === typeof value) {\n    // Support a deprecated boolean type for the trailing comma config\n    // for a few versions. This code can be removed later.\n    trailingComma = Object.assign(\n      {},\n      trailingCommaPresets[value ? \"es5\" : \"none\"]\n    );\n\n    console.warn(\n      \"Warning: `trailingComma` without any argument is deprecated. \" +\n        'Specify \"none\", \"es5\", or \"all\".'\n    );\n  } else if (\"object\" === typeof value) {\n    trailingComma = {};\n    Object.keys(defaultsTrailingComma).forEach(k => {\n      trailingComma[k] = null == value[k] ? defaultsTrailingComma[k] : value[k];\n    });\n  } else if (\"string\" === typeof value) {\n    trailingComma = trailingCommaPresets[value];\n    if (trailingComma) {\n      trailingComma = Object.assign({}, trailingComma);\n    } else {\n      trailingComma = Object.assign({}, trailingCommaPresets.none);\n      value.split(\",\").forEach(k => {\n        if (k in defaultsTrailingComma) {\n          trailingComma[k] = true;\n        }\n      });\n    }\n  } else {\n    trailingComma = Object.assign({}, defaultsTrailingComma);\n  }\n  return trailingComma;\n}\n\nmodule.exports = { normalize };\n"
  },
  {
    "path": "src/parser-babylon.js",
    "content": "\"use strict\";\n\nconst createError = require(\"./parser-create-error\");\n\nfunction parse(text) {\n  // Inline the require to avoid loading all the JS if we don't use it\n  const babylon = require(\"babylon\");\n\n  const babylonOptions = {\n    sourceType: \"module\",\n    allowImportExportEverywhere: true,\n    allowReturnOutsideFunction: true,\n    plugins: [\n      \"jsx\",\n      \"flow\",\n      \"doExpressions\",\n      \"objectRestSpread\",\n      \"decorators\",\n      \"classProperties\",\n      \"exportExtensions\",\n      \"asyncGenerators\",\n      \"functionBind\",\n      \"functionSent\",\n      \"dynamicImport\",\n      \"numericSeparator\",\n      \"importMeta\"\n    ]\n  };\n\n  let ast;\n  try {\n    ast = babylon.parse(text, babylonOptions);\n  } catch (originalError) {\n    try {\n      ast = babylon.parse(\n        text,\n        Object.assign({}, babylonOptions, { strictMode: false })\n      );\n    } catch (nonStrictError) {\n      throw createError(\n        // babel error prints (l:c) with cols that are zero indexed\n        // so we need our custom error\n        originalError.message.replace(/ \\(.*\\)/, \"\"),\n        {\n          start: {\n            line: originalError.loc.line,\n            column: originalError.loc.column + 1\n          }\n        }\n      );\n    }\n  }\n  delete ast.tokens;\n  return ast;\n}\n\nmodule.exports = parse;\n"
  },
  {
    "path": "src/parser-create-error.js",
    "content": "\"use strict\";\n\nfunction createError(message, loc) {\n  // Construct an error similar to the ones thrown by Babylon.\n  const error = new SyntaxError(\n    message + \" (\" + loc.start.line + \":\" + loc.start.column + \")\"\n  );\n  error.loc = loc;\n  return error;\n}\n\nmodule.exports = createError;\n"
  },
  {
    "path": "src/parser-flow.js",
    "content": "\"use strict\";\n\nconst createError = require(\"./parser-create-error\");\nconst includeShebang = require(\"./parser-include-shebang\");\n\nfunction parse(text) {\n  // Fixes Node 4 issue (#1986)\n  \"use strict\"; // eslint-disable-line\n  // Inline the require to avoid loading all the JS if we don't use it\n  const flowParser = require(\"flow-parser\");\n\n  const ast = flowParser.parse(text, {\n    esproposal_class_instance_fields: true,\n    esproposal_class_static_fields: true,\n    esproposal_export_star_as: true\n  });\n\n  if (ast.errors.length > 0) {\n    const loc = ast.errors[0].loc;\n    throw createError(ast.errors[0].message, {\n      start: { line: loc.start.line, column: loc.start.column + 1 },\n      end: { line: loc.end.line, column: loc.end.column + 1 }\n    });\n  }\n\n  includeShebang(text, ast);\n  return ast;\n}\nmodule.exports = parse;\n"
  },
  {
    "path": "src/parser-graphql.js",
    "content": "\"use strict\";\n\nconst createError = require(\"./parser-create-error\");\n\nfunction parseComments(ast) {\n  const comments = [];\n  const startToken = ast.loc.startToken;\n  let next = startToken.next;\n  while (next.kind !== \"<EOF>\") {\n    if (next.kind === \"Comment\") {\n      Object.assign(next, {\n        // The Comment token's column starts _after_ the `#`,\n        // but we need to make sure the node captures the `#`\n        column: next.column - 1\n      });\n      comments.push(next);\n    }\n    next = next.next;\n  }\n\n  return comments;\n}\n\nfunction removeTokens(node) {\n  if (node && typeof node === \"object\") {\n    delete node.startToken;\n    delete node.endToken;\n    delete node.prev;\n    delete node.next;\n    for (const key in node) {\n      removeTokens(node[key]);\n    }\n  }\n  return node;\n}\n\nfunction parse(text) {\n  // Inline the require to avoid loading all the JS if we don't use it\n  const parser = require(\"graphql/language\");\n  try {\n    const ast = parser.parse(text);\n    ast.comments = parseComments(ast);\n    removeTokens(ast);\n    return ast;\n  } catch (error) {\n    const GraphQLError = require(\"graphql/error\").GraphQLError;\n    if (error instanceof GraphQLError) {\n      throw createError(error.message, {\n        start: {\n          line: error.locations[0].line,\n          column: error.locations[0].column\n        }\n      });\n    } else {\n      throw error;\n    }\n  }\n}\n\nmodule.exports = parse;\n"
  },
  {
    "path": "src/parser-include-shebang.js",
    "content": "\"use strict\";\n\nfunction includeShebang(text, ast) {\n  if (!text.startsWith(\"#!\")) {\n    return;\n  }\n\n  const index = text.indexOf(\"\\n\");\n  const shebang = text.slice(2, index);\n  const comment = {\n    type: \"Line\",\n    value: shebang,\n    range: [0, index],\n    loc: {\n      source: null,\n      start: {\n        line: 1,\n        column: 0\n      },\n      end: {\n        line: 1,\n        column: index\n      }\n    }\n  };\n\n  ast.comments = [comment].concat(ast.comments);\n}\n\nmodule.exports = includeShebang;\n"
  },
  {
    "path": "src/parser-json.js",
    "content": "\"use strict\";\n\nconst createError = require(\"./parser-create-error\");\n\nfunction parse(text) {\n  const jsonToAst = require(\"json-to-ast\");\n  try {\n    const ast = jsonToAst(text);\n    return toBabylon(ast);\n  } catch (err) {\n    const firstNewlineIndex = err.message.indexOf(\"\\n\");\n    const firstLine = err.message.slice(0, firstNewlineIndex);\n    const lastSpaceIndex = firstLine.lastIndexOf(\" \");\n    const message = firstLine.slice(0, lastSpaceIndex);\n    const locString = firstLine.slice(lastSpaceIndex + 1);\n    const lineCol = locString.split(\":\").map(Number);\n\n    throw createError(\"(json-to-ast) \" + message, {\n      start: {\n        line: lineCol[0],\n        column: lineCol[1]\n      }\n    });\n  }\n}\n\nfunction toBabylon(node) {\n  const typeMap = {\n    object: \"ObjectExpression\",\n    property: \"ObjectProperty\",\n    identifier: \"json-identifier\",\n    array: \"ArrayExpression\"\n  };\n\n  const result = {\n    type: typeMap[node.type],\n    start: node.loc.start.offset,\n    end: node.loc.end.offset,\n    loc: node.loc\n  };\n\n  switch (node.type) {\n    case \"object\":\n      return Object.assign(result, {\n        properties: node.children.map(toBabylon)\n      });\n    case \"property\":\n      return Object.assign(result, {\n        key: toBabylon(node.key),\n        value: toBabylon(node.value)\n      });\n    case \"identifier\":\n      return Object.assign(result, {\n        value: node.value\n      });\n    case \"array\":\n      return Object.assign(result, {\n        elements: node.children.map(toBabylon)\n      });\n    case \"literal\": {\n      const constructorTypes = {\n        String: \"StringLiteral\",\n        Number: \"NumericLiteral\",\n        Boolean: \"BooleanLiteral\"\n      };\n\n      const value = JSON.parse(node.rawValue);\n      const type =\n        value === null\n          ? \"NullLiteral\"\n          : constructorTypes[value.constructor.name];\n\n      return Object.assign(result, {\n        type: type,\n        value: value,\n        extra: { raw: node.rawValue }\n      });\n    }\n  }\n}\n\nmodule.exports = parse;\n"
  },
  {
    "path": "src/parser-parse5.js",
    "content": "\"use strict\";\n\n// const createError = require(\"./parser-create-error\");\n\nfunction parse(text) {\n  // Inline the require to avoid loading all the JS if we don't use it\n  const parse5 = require(\"parse5\");\n  try {\n    const isFragment = !/^\\s*<(!doctype|html|head|body)/i.test(text);\n    const ast = (isFragment ? parse5.parseFragment : parse5.parse)(text, {\n      treeAdapter: parse5.treeAdapters.htmlparser2,\n      locationInfo: true\n    });\n    return extendAst(ast);\n  } catch (error) {\n    //   throw createError(error.message, {\n    //     start: {\n    //       line: error.locations[0].line,\n    //       column: error.locations[0].column\n    //     }\n    // } else {\n    throw error;\n    // }\n  }\n}\n\nfunction extendAst(ast) {\n  if (!ast || !ast.children) {\n    return ast;\n  }\n  for (const child of ast.children) {\n    extendAst(child);\n    if (child.attribs) {\n      child.attributes = convertAttribs(child.attribs);\n    }\n  }\n  return ast;\n}\n\nfunction convertAttribs(attribs) {\n  return Object.keys(attribs).map(attributeKey => {\n    return {\n      type: \"attribute\",\n      key: attributeKey,\n      value: attribs[attributeKey]\n    };\n  });\n}\n\nmodule.exports = parse;\n"
  },
  {
    "path": "src/parser-postcss.js",
    "content": "\"use strict\";\n\nconst createError = require(\"./parser-create-error\");\n\nfunction parseSelector(selector) {\n  const selectorParser = require(\"postcss-selector-parser\");\n  let result;\n  selectorParser(result_ => {\n    result = result_;\n  }).process(selector);\n  return addTypePrefix(result, \"selector-\");\n}\n\nfunction parseValueNodes(nodes) {\n  let parenGroup = {\n    open: null,\n    close: null,\n    groups: [],\n    type: \"paren_group\"\n  };\n  const parenGroupStack = [parenGroup];\n  const rootParenGroup = parenGroup;\n  let commaGroup = {\n    groups: [],\n    type: \"comma_group\"\n  };\n  const commaGroupStack = [commaGroup];\n\n  for (let i = 0; i < nodes.length; ++i) {\n    const node = nodes[i];\n    if (node.type === \"paren\" && node.value === \"(\") {\n      parenGroup = {\n        open: node,\n        close: null,\n        groups: [],\n        type: \"paren_group\"\n      };\n      parenGroupStack.push(parenGroup);\n\n      commaGroup = {\n        groups: [],\n        type: \"comma_group\"\n      };\n      commaGroupStack.push(commaGroup);\n    } else if (node.type === \"paren\" && node.value === \")\") {\n      if (commaGroup.groups.length) {\n        parenGroup.groups.push(commaGroup);\n      }\n      parenGroup.close = node;\n\n      if (commaGroupStack.length === 1) {\n        throw new Error(\"Unbalanced parenthesis\");\n      }\n\n      commaGroupStack.pop();\n      commaGroup = commaGroupStack[commaGroupStack.length - 1];\n      commaGroup.groups.push(parenGroup);\n\n      parenGroupStack.pop();\n      parenGroup = parenGroupStack[parenGroupStack.length - 1];\n    } else if (node.type === \"comma\") {\n      parenGroup.groups.push(commaGroup);\n      commaGroup = {\n        groups: [],\n        type: \"comma_group\"\n      };\n      commaGroupStack[commaGroupStack.length - 1] = commaGroup;\n    } else {\n      commaGroup.groups.push(node);\n    }\n  }\n  if (commaGroup.groups.length > 0) {\n    parenGroup.groups.push(commaGroup);\n  }\n  return rootParenGroup;\n}\n\nfunction flattenGroups(node) {\n  if (\n    node.type === \"paren_group\" &&\n    !node.open &&\n    !node.close &&\n    node.groups.length === 1\n  ) {\n    return flattenGroups(node.groups[0]);\n  }\n\n  if (node.type === \"comma_group\" && node.groups.length === 1) {\n    return flattenGroups(node.groups[0]);\n  }\n\n  if (node.type === \"paren_group\" || node.type === \"comma_group\") {\n    return Object.assign({}, node, { groups: node.groups.map(flattenGroups) });\n  }\n\n  return node;\n}\n\nfunction addTypePrefix(node, prefix) {\n  if (node && typeof node === \"object\") {\n    delete node.parent;\n    for (const key in node) {\n      addTypePrefix(node[key], prefix);\n      if (key === \"type\" && typeof node[key] === \"string\") {\n        if (!node[key].startsWith(prefix)) {\n          node[key] = prefix + node[key];\n        }\n      }\n    }\n  }\n  return node;\n}\n\nfunction addMissingType(node) {\n  if (node && typeof node === \"object\") {\n    delete node.parent;\n    for (const key in node) {\n      addMissingType(node[key]);\n    }\n    if (!Array.isArray(node) && node.value && !node.type) {\n      node.type = \"unknown\";\n    }\n  }\n  return node;\n}\n\nfunction parseNestedValue(node) {\n  if (node && typeof node === \"object\") {\n    delete node.parent;\n    for (const key in node) {\n      parseNestedValue(node[key]);\n      if (key === \"nodes\") {\n        node.group = flattenGroups(parseValueNodes(node[key]));\n        delete node[key];\n      }\n    }\n  }\n  return node;\n}\n\nfunction parseValue(value) {\n  const valueParser = require(\"postcss-values-parser\");\n  const result = valueParser(value, { loose: true }).parse();\n  const parsedResult = parseNestedValue(result);\n  return addTypePrefix(parsedResult, \"value-\");\n}\n\nfunction parseMediaQuery(value) {\n  const mediaParser = require(\"postcss-media-query-parser\").default;\n  const result = addMissingType(mediaParser(value));\n  return addTypePrefix(result, \"media-\");\n}\n\nfunction parseNestedCSS(node) {\n  if (node && typeof node === \"object\") {\n    delete node.parent;\n    for (const key in node) {\n      parseNestedCSS(node[key]);\n    }\n    if (typeof node.selector === \"string\") {\n      const selector = node.raws.selector\n        ? node.raws.selector.raw\n        : node.selector;\n\n      try {\n        node.selector = parseSelector(selector);\n      } catch (e) {\n        // Fail silently. It's better to print it as is than to try and parse it\n        node.selector = selector;\n      }\n    }\n    if (node.type && typeof node.value === \"string\") {\n      try {\n        node.value = parseValue(node.value);\n      } catch (e) {\n        throw createError(\n          \"(postcss-values-parser) \" + e.toString(),\n          node.source\n        );\n      }\n    }\n    if (node.type === \"css-atrule\" && typeof node.params === \"string\") {\n      node.params = parseMediaQuery(node.params);\n    }\n  }\n  return node;\n}\n\nfunction parseWithParser(parser, text) {\n  let result;\n  try {\n    result = parser.parse(text);\n  } catch (e) {\n    if (typeof e.line !== \"number\") {\n      throw e;\n    }\n    throw createError(\"(postcss) \" + e.name + \" \" + e.reason, { start: e });\n  }\n  const prefixedResult = addTypePrefix(result, \"css-\");\n  const parsedResult = parseNestedCSS(prefixedResult);\n  return parsedResult;\n}\n\nfunction requireParser(isSCSS) {\n  if (isSCSS) {\n    return require(\"postcss-scss\");\n  }\n  return require(\"postcss-less\");\n}\n\nfunction parse(text) {\n  const isLikelySCSS = !!text.match(/(\\w\\s*: [^}:]+|#){|@import[^\\n]+(url|,)/);\n  try {\n    return parseWithParser(requireParser(isLikelySCSS), text);\n  } catch (e) {\n    try {\n      return parseWithParser(requireParser(!isLikelySCSS), text);\n    } catch (e2) {\n      throw e;\n    }\n  }\n}\n\nmodule.exports = parse;\n"
  },
  {
    "path": "src/parser-typescript.js",
    "content": "\"use strict\";\n\nconst createError = require(\"./parser-create-error\");\nconst includeShebang = require(\"./parser-include-shebang\");\n\nfunction parse(text) {\n  const jsx = isProbablyJsx(text);\n  let ast;\n  try {\n    try {\n      // Try passing with our best guess first.\n      ast = tryParseTypeScript(text, jsx);\n    } catch (e) {\n      // But if we get it wrong, try the opposite.\n      /* istanbul ignore next */\n      ast = tryParseTypeScript(text, !jsx);\n    }\n  } catch (e) /* istanbul ignore next */ {\n    if (typeof e.lineNumber === \"undefined\") {\n      throw e;\n    }\n\n    throw createError(e.message, {\n      start: { line: e.lineNumber, column: e.column + 1 }\n    });\n  }\n\n  delete ast.tokens;\n  includeShebang(text, ast);\n  return ast;\n}\n\nfunction tryParseTypeScript(text, jsx) {\n  // While we are working on typescript, we are putting it in devDependencies\n  // so it shouldn't be picked up by static analysis\n  const parser = require(\"typescript-eslint-parser\");\n  return parser.parse(text, {\n    loc: true,\n    range: true,\n    tokens: true,\n    comment: true,\n    useJSXTextNode: true,\n    ecmaFeatures: { jsx },\n    // Override logger function with noop,\n    // to avoid unsupported version errors being logged\n    loggerFn: () => {}\n  });\n}\n\n/**\n * Use a naive regular expression until we address\n * https://github.com/prettier/prettier/issues/1538\n */\nfunction isProbablyJsx(text) {\n  return new RegExp(\n    [\n      \"(^[^\\\"'`]*</)\", // Contains \"</\" when probably not in a string\n      \"|\",\n      \"(^[^/]{2}.*/>)\" // Contains \"/>\" on line not starting with \"//\"\n    ].join(\"\"),\n    \"m\"\n  ).test(text);\n}\n\nmodule.exports = parse;\n"
  },
  {
    "path": "src/parser.js",
    "content": "\"use strict\";\n\nconst path = require(\"path\");\n\nconst parsers = {\n  get flow() {\n    return eval(\"require\")(\"./parser-flow\");\n  },\n  get graphql() {\n    return eval(\"require\")(\"./parser-graphql\");\n  },\n  get parse5() {\n    return eval(\"require\")(\"./parser-parse5\");\n  },\n  get babylon() {\n    return eval(\"require\")(\"./parser-babylon\");\n  },\n  get typescript() {\n    return eval(\"require\")(\"./parser-typescript\");\n  },\n  get postcss() {\n    return eval(\"require\")(\"./parser-postcss\");\n  },\n  get json() {\n    return eval(\"require\")(\"./parser-json\");\n  }\n};\n\nfunction resolveParseFunction(opts) {\n  if (typeof opts.parser === \"function\") {\n    return opts.parser;\n  }\n  if (typeof opts.parser === \"string\") {\n    if (parsers.hasOwnProperty(opts.parser)) {\n      return parsers[opts.parser];\n    }\n    try {\n      return eval(\"require\")(path.resolve(process.cwd(), opts.parser));\n    } catch (err) {\n      throw new Error(`Couldn't resolve parser \"${opts.parser}\"`);\n    }\n  }\n  return parsers.babylon;\n}\n\nfunction parse(text, opts) {\n  const parseFunction = resolveParseFunction(opts);\n\n  try {\n    return parseFunction(text, parsers, opts);\n  } catch (error) {\n    const loc = error.loc;\n\n    if (loc) {\n      const codeFrame = require(\"babel-code-frame\");\n      error.codeFrame = codeFrame.codeFrameColumns(text, loc, {\n        highlightCode: true\n      });\n      error.message += \"\\n\" + error.codeFrame;\n      throw error;\n    }\n\n    throw error.stack;\n  }\n}\n\nmodule.exports = { parse };\n"
  },
  {
    "path": "src/printer-graphql.js",
    "content": "\"use strict\";\n\nconst docBuilders = require(\"./doc-builders\");\nconst concat = docBuilders.concat;\nconst join = docBuilders.join;\nconst hardline = docBuilders.hardline;\nconst line = docBuilders.line;\nconst softline = docBuilders.softline;\nconst group = docBuilders.group;\nconst indent = docBuilders.indent;\nconst ifBreak = docBuilders.ifBreak;\n\nfunction genericPrint(path, options, print) {\n  const n = path.getValue();\n  if (!n) {\n    return \"\";\n  }\n\n  if (typeof n === \"string\") {\n    return n;\n  }\n\n  switch (n.kind) {\n    case \"Document\": {\n      return concat([\n        join(concat([hardline, hardline]), path.map(print, \"definitions\")),\n        hardline\n      ]);\n    }\n    case \"OperationDefinition\": {\n      return concat([\n        n.name === null ? \"\" : n.operation,\n        n.name ? concat([\" \", path.call(print, \"name\")]) : \"\",\n        n.variableDefinitions && n.variableDefinitions.length\n          ? group(\n              concat([\n                \"(\",\n                indent(\n                  concat([\n                    softline,\n                    join(\n                      concat([ifBreak(\"\", \", \"), softline]),\n                      path.map(print, \"variableDefinitions\")\n                    )\n                  ])\n                ),\n                softline,\n                \")\"\n              ])\n            )\n          : \"\",\n        printDirectives(path, print, n),\n        n.selectionSet ? (n.name === null ? \"\" : \" \") : \"\",\n        path.call(print, \"selectionSet\")\n      ]);\n    }\n    case \"FragmentDefinition\": {\n      return concat([\n        \"fragment \",\n        path.call(print, \"name\"),\n        \" on \",\n        path.call(print, \"typeCondition\"),\n        printDirectives(path, print, n),\n        \" \",\n        path.call(print, \"selectionSet\")\n      ]);\n    }\n    case \"SelectionSet\": {\n      return concat([\n        \"{\",\n        indent(\n          concat([hardline, join(hardline, path.map(print, \"selections\"))])\n        ),\n        hardline,\n        \"}\"\n      ]);\n    }\n    case \"Field\": {\n      return group(\n        concat([\n          n.alias ? concat([path.call(print, \"alias\"), \": \"]) : \"\",\n          path.call(print, \"name\"),\n          n.arguments.length > 0\n            ? group(\n                concat([\n                  \"(\",\n                  indent(\n                    concat([\n                      softline,\n                      join(\n                        concat([ifBreak(\"\", \", \"), softline]),\n                        path.map(print, \"arguments\")\n                      )\n                    ])\n                  ),\n                  softline,\n                  \")\"\n                ])\n              )\n            : \"\",\n          printDirectives(path, print, n),\n          n.selectionSet ? \" \" : \"\",\n          path.call(print, \"selectionSet\")\n        ])\n      );\n    }\n    case \"Name\": {\n      return n.value;\n    }\n    case \"StringValue\": {\n      return concat(['\"', n.value, '\"']);\n    }\n    case \"IntValue\":\n    case \"FloatValue\":\n    case \"EnumValue\": {\n      return n.value;\n    }\n    case \"BooleanValue\": {\n      return n.value ? \"true\" : \"false\";\n    }\n    case \"NullValue\": {\n      return \"null\";\n    }\n    case \"Variable\": {\n      return concat([\"$\", path.call(print, \"name\")]);\n    }\n    case \"ListValue\": {\n      return group(\n        concat([\n          \"[\",\n          indent(\n            concat([\n              softline,\n              join(\n                concat([ifBreak(\"\", \", \"), softline]),\n                path.map(print, \"values\")\n              )\n            ])\n          ),\n          softline,\n          \"]\"\n        ])\n      );\n    }\n    case \"ObjectValue\": {\n      return group(\n        concat([\n          \"{\",\n          options.bracesSpacing && n.fields.length > 0 ? \" \" : \"\",\n          indent(\n            concat([\n              softline,\n              join(\n                concat([ifBreak(\"\", \", \"), softline]),\n                path.map(print, \"fields\")\n              )\n            ])\n          ),\n          softline,\n          ifBreak(\"\", options.bracesSpacing && n.fields.length > 0 ? \" \" : \"\"),\n          \"}\"\n        ])\n      );\n    }\n    case \"ObjectField\":\n    case \"Argument\": {\n      return concat([\n        path.call(print, \"name\"),\n        \": \",\n        path.call(print, \"value\")\n      ]);\n    }\n\n    case \"Directive\": {\n      return concat([\n        \"@\",\n        path.call(print, \"name\"),\n        n.arguments.length > 0\n          ? group(\n              concat([\n                \"(\",\n                indent(\n                  concat([\n                    softline,\n                    join(\n                      concat([ifBreak(\"\", \", \"), softline]),\n                      path.map(print, \"arguments\")\n                    )\n                  ])\n                ),\n                softline,\n                \")\"\n              ])\n            )\n          : \"\"\n      ]);\n    }\n\n    case \"NamedType\": {\n      return path.call(print, \"name\");\n    }\n\n    case \"VariableDefinition\": {\n      return concat([\n        path.call(print, \"variable\"),\n        \": \",\n        path.call(print, \"type\"),\n        n.defaultValue ? concat([\" = \", path.call(print, \"defaultValue\")]) : \"\"\n      ]);\n    }\n\n    case \"TypeExtensionDefinition\": {\n      return concat([\"extend \", path.call(print, \"definition\")]);\n    }\n\n    case \"ObjectTypeDefinition\": {\n      return concat([\n        \"type \",\n        path.call(print, \"name\"),\n        n.interfaces.length > 0\n          ? concat([\" implements \", join(\", \", path.map(print, \"interfaces\"))])\n          : \"\",\n        printDirectives(path, print, n),\n        \" {\",\n        n.fields.length > 0\n          ? indent(\n              concat([hardline, join(hardline, path.map(print, \"fields\"))])\n            )\n          : \"\",\n        hardline,\n        \"}\"\n      ]);\n    }\n\n    case \"FieldDefinition\": {\n      return concat([\n        path.call(print, \"name\"),\n        n.arguments.length > 0\n          ? group(\n              concat([\n                \"(\",\n                indent(\n                  concat([\n                    softline,\n                    join(\n                      concat([ifBreak(\"\", \", \"), softline]),\n                      path.map(print, \"arguments\")\n                    )\n                  ])\n                ),\n                softline,\n                \")\"\n              ])\n            )\n          : \"\",\n        \": \",\n        path.call(print, \"type\"),\n        printDirectives(path, print, n)\n      ]);\n    }\n\n    case \"DirectiveDefinition\": {\n      return concat([\n        \"directive \",\n        \"@\",\n        path.call(print, \"name\"),\n        n.arguments.length > 0\n          ? group(\n              concat([\n                \"(\",\n                indent(\n                  concat([\n                    softline,\n                    join(\n                      concat([ifBreak(\"\", \", \"), softline]),\n                      path.map(print, \"arguments\")\n                    )\n                  ])\n                ),\n                softline,\n                \")\"\n              ])\n            )\n          : \"\",\n        concat([\" on \", join(\" | \", path.map(print, \"locations\"))])\n      ]);\n    }\n\n    case \"EnumTypeDefinition\": {\n      return concat([\n        \"enum \",\n        path.call(print, \"name\"),\n        printDirectives(path, print, n),\n        \" {\",\n        n.values.length > 0\n          ? indent(\n              concat([hardline, join(hardline, path.map(print, \"values\"))])\n            )\n          : \"\",\n        hardline,\n        \"}\"\n      ]);\n    }\n\n    case \"EnumValueDefinition\": {\n      return concat([\n        path.call(print, \"name\"),\n        printDirectives(path, print, n)\n      ]);\n    }\n\n    case \"InputValueDefinition\": {\n      return concat([\n        path.call(print, \"name\"),\n        \": \",\n        path.call(print, \"type\"),\n        n.defaultValue ? concat([\" = \", path.call(print, \"defaultValue\")]) : \"\",\n        printDirectives(path, print, n)\n      ]);\n    }\n\n    case \"InputObjectTypeDefinition\": {\n      return concat([\n        \"input \",\n        path.call(print, \"name\"),\n        printDirectives(path, print, n),\n        \" {\",\n        n.fields.length > 0\n          ? indent(\n              concat([hardline, join(hardline, path.map(print, \"fields\"))])\n            )\n          : \"\",\n        hardline,\n        \"}\"\n      ]);\n    }\n\n    case \"SchemaDefinition\": {\n      return concat([\n        \"schema\",\n        printDirectives(path, print, n),\n        \" {\",\n        n.operationTypes.length > 0\n          ? indent(\n              concat([\n                hardline,\n                join(hardline, path.map(print, \"operationTypes\"))\n              ])\n            )\n          : \"\",\n        hardline,\n        \"}\"\n      ]);\n    }\n\n    case \"OperationTypeDefinition\": {\n      return concat([\n        path.call(print, \"operation\"),\n        \": \",\n        path.call(print, \"type\")\n      ]);\n    }\n\n    case \"InterfaceTypeDefinition\": {\n      return concat([\n        \"interface \",\n        path.call(print, \"name\"),\n        printDirectives(path, print, n),\n        \" {\",\n        n.fields.length > 0\n          ? indent(\n              concat([hardline, join(hardline, path.map(print, \"fields\"))])\n            )\n          : \"\",\n        hardline,\n        \"}\"\n      ]);\n    }\n\n    case \"FragmentSpread\": {\n      return concat([\n        \"...\",\n        path.call(print, \"name\"),\n        printDirectives(path, print, n)\n      ]);\n    }\n\n    case \"InlineFragment\": {\n      return concat([\n        \"...\",\n        n.typeCondition\n          ? concat([\" on \", path.call(print, \"typeCondition\")])\n          : \"\",\n        printDirectives(path, print, n),\n        \" \",\n        path.call(print, \"selectionSet\")\n      ]);\n    }\n\n    case \"UnionTypeDefinition\": {\n      return group(\n        concat([\n          \"union \",\n          path.call(print, \"name\"),\n          \" =\",\n          ifBreak(\"\", \" \"),\n          indent(\n            concat([\n              ifBreak(concat([line, \"  \"])),\n              join(concat([line, \"| \"]), path.map(print, \"types\"))\n            ])\n          )\n        ])\n      );\n    }\n\n    case \"ScalarTypeDefinition\": {\n      return concat([\n        \"scalar \",\n        path.call(print, \"name\"),\n        printDirectives(path, print, n)\n      ]);\n    }\n\n    case \"NonNullType\": {\n      return concat([path.call(print, \"type\"), \"!\"]);\n    }\n\n    case \"ListType\": {\n      return concat([\"[\", path.call(print, \"type\"), \"]\"]);\n    }\n\n    default:\n      throw new Error(\"unknown graphql type: \" + JSON.stringify(n.kind));\n  }\n}\n\nfunction printDirectives(path, print, n) {\n  if (n.directives.length === 0) {\n    return \"\";\n  }\n\n  return concat([\n    \" \",\n    group(\n      indent(\n        concat([\n          softline,\n          join(\n            concat([ifBreak(\"\", \" \"), softline]),\n            path.map(print, \"directives\")\n          )\n        ])\n      )\n    )\n  ]);\n}\n\nmodule.exports = genericPrint;\n"
  },
  {
    "path": "src/printer-htmlparser2.js",
    "content": "\"use strict\";\n\nconst util = require(\"./util\");\nconst docBuilders = require(\"./doc-builders\");\nconst concat = docBuilders.concat;\nconst join = docBuilders.join;\nconst hardline = docBuilders.hardline;\nconst line = docBuilders.line;\nconst softline = docBuilders.softline;\nconst group = docBuilders.group;\nconst indent = docBuilders.indent;\n// const ifBreak = docBuilders.ifBreak;\n\n// http://w3c.github.io/html/single-page.html#void-elements\nconst voidTags = {\n  area: true,\n  base: true,\n  br: true,\n  col: true,\n  embed: true,\n  hr: true,\n  img: true,\n  input: true,\n  link: true,\n  meta: true,\n  param: true,\n  source: true,\n  track: true,\n  wbr: true\n};\n\nfunction genericPrint(path, options, print) {\n  const n = path.getValue();\n  if (!n) {\n    return \"\";\n  }\n\n  if (typeof n === \"string\") {\n    return n;\n  }\n\n  switch (n.type) {\n    case \"root\": {\n      return printChildren(path, print);\n    }\n    case \"directive\": {\n      return concat([\"<\", n.data, \">\", hardline]);\n    }\n    case \"text\": {\n      return n.data.replace(/\\s+/g, \" \").trim();\n    }\n    case \"script\":\n    case \"style\":\n    case \"tag\": {\n      const selfClose = voidTags[n.name] ? \">\" : \" />\";\n      const children = printChildren(path, print);\n\n      const hasNewline = util.hasNewlineInRange(\n        options.originalText,\n        util.locStart(n),\n        util.locEnd(n)\n      );\n\n      return group(\n        concat([\n          hasNewline ? hardline : \"\",\n          \"<\",\n          n.name,\n          printAttributes(path, print),\n\n          n.children.length ? \">\" : selfClose,\n\n          n.name.toLowerCase() === \"html\"\n            ? concat([hardline, children])\n            : indent(children),\n          n.children.length ? concat([softline, \"</\", n.name, \">\"]) : hardline\n        ])\n      );\n    }\n    case \"comment\": {\n      return concat([\"<!-- \", n.data.trim(), \" -->\"]);\n    }\n    case \"attribute\": {\n      if (!n.value) {\n        return n.key;\n      }\n      return concat([n.key, '=\"', n.value, '\"']);\n    }\n\n    default:\n      throw new Error(\"unknown htmlparser2 type: \" + n.type);\n  }\n}\n\nfunction printAttributes(path, print) {\n  const node = path.getValue();\n\n  return concat([\n    node.attributes.length ? \" \" : \"\",\n    indent(join(line, path.map(print, \"attributes\")))\n  ]);\n}\n\nfunction printChildren(path, print) {\n  const children = [];\n  path.each(childPath => {\n    const child = childPath.getValue();\n    if (child.type !== \"text\") {\n      children.push(hardline);\n    }\n    children.push(childPath.call(print));\n  }, \"children\");\n  return concat(children);\n}\n\nmodule.exports = genericPrint;\n"
  },
  {
    "path": "src/printer-postcss.js",
    "content": "\"use strict\";\n\nconst util = require(\"./util\");\nconst docBuilders = require(\"./doc-builders\");\nconst concat = docBuilders.concat;\nconst join = docBuilders.join;\nconst line = docBuilders.line;\nconst hardline = docBuilders.hardline;\nconst softline = docBuilders.softline;\nconst group = docBuilders.group;\nconst fill = docBuilders.fill;\nconst indent = docBuilders.indent;\n\nconst docUtils = require(\"./doc-utils\");\nconst removeLines = docUtils.removeLines;\n\nfunction genericPrint(path, options, print) {\n  const n = path.getValue();\n\n  if (!n) {\n    return \"\";\n  }\n\n  if (typeof n === \"string\") {\n    return n;\n  }\n\n  switch (n.type) {\n    case \"css-root\": {\n      return concat([printNodeSequence(path, options, print), hardline]);\n    }\n    case \"css-comment\": {\n      if (n.raws.content) {\n        return n.raws.content;\n      }\n      const text = options.originalText.slice(util.locStart(n), util.locEnd(n));\n      const rawText = n.raws.text || n.text;\n      // Workaround a bug where the location is off.\n      // https://github.com/postcss/postcss-scss/issues/63\n      if (text.indexOf(rawText) === -1) {\n        if (n.raws.inline) {\n          return concat([\"// \", rawText]);\n        }\n        return concat([\"/* \", rawText, \" */\"]);\n      }\n      return text;\n    }\n    case \"css-rule\": {\n      return concat([\n        path.call(print, \"selector\"),\n        n.important ? \" !important\" : \"\",\n        n.nodes\n          ? concat([\n              \" {\",\n              n.nodes.length > 0\n                ? indent(\n                    concat([hardline, printNodeSequence(path, options, print)])\n                  )\n                : \"\",\n              hardline,\n              \"}\"\n            ])\n          : \";\"\n      ]);\n    }\n    case \"css-decl\": {\n      // When the following less construct &:extend(.foo); is parsed with scss,\n      // it will put a space after `:` and break it. Ideally we should parse\n      // less files with less, but we can hardcode this to work with scss as\n      // well.\n      const isValueExtend =\n        n.value.type === \"value-root\" &&\n        n.value.group.type === \"value-value\" &&\n        n.value.group.group.type === \"value-func\" &&\n        n.value.group.group.value === \"extend\";\n      const isComposed =\n        n.value.type === \"value-root\" &&\n        n.value.group.type === \"value-value\" &&\n        n.prop === \"composes\";\n\n      return concat([\n        n.raws.before.replace(/[\\s;]/g, \"\"),\n        n.prop,\n        \":\",\n        isValueExtend ? \"\" : \" \",\n        isComposed\n          ? removeLines(path.call(print, \"value\"))\n          : path.call(print, \"value\"),\n        n.important ? \" !important\" : \"\",\n        n.nodes\n          ? concat([\n              \" {\",\n              indent(\n                concat([softline, printNodeSequence(path, options, print)])\n              ),\n              softline,\n              \"}\"\n            ])\n          : \";\"\n      ]);\n    }\n    case \"css-atrule\": {\n      const hasParams =\n        n.params &&\n        !(n.params.type === \"media-query-list\" && n.params.value === \"\");\n      return concat([\n        \"@\",\n        n.name,\n        hasParams ? concat([\" \", path.call(print, \"params\")]) : \"\",\n        n.nodes\n          ? concat([\n              \" {\",\n              indent(\n                concat([\n                  n.nodes.length > 0 ? softline : \"\",\n                  printNodeSequence(path, options, print)\n                ])\n              ),\n              softline,\n              \"}\"\n            ])\n          : \";\"\n      ]);\n    }\n    case \"css-import\": {\n      return concat([\n        \"@\",\n        n.name,\n        \" \",\n        n.directives ? concat([n.directives, \" \"]) : \"\",\n        n.importPath,\n        \";\"\n      ]);\n    }\n    // postcss-media-query-parser\n    case \"media-query-list\": {\n      const parts = [];\n      path.each(childPath => {\n        const node = childPath.getValue();\n        if (node.type === \"media-query\" && node.value === \"\") {\n          return;\n        }\n        parts.push(childPath.call(print));\n      }, \"nodes\");\n      return group(indent(join(concat([\",\", line]), parts)));\n    }\n    case \"media-query\": {\n      return join(\" \", path.map(print, \"nodes\"));\n    }\n    case \"media-type\": {\n      return n.value;\n    }\n    case \"media-feature-expression\": {\n      if (!n.nodes) {\n        return n.value;\n      }\n      return concat([\"(\", concat(path.map(print, \"nodes\")), \")\"]);\n    }\n    case \"media-feature\": {\n      return n.value.replace(/ +/g, \" \");\n    }\n    case \"media-colon\": {\n      return concat([n.value, \" \"]);\n    }\n    case \"media-value\": {\n      return n.value;\n    }\n    case \"media-keyword\": {\n      return n.value;\n    }\n    case \"media-url\": {\n      return n.value;\n    }\n    case \"media-unknown\": {\n      return n.value;\n    }\n    // postcss-selector-parser\n    case \"selector-root\": {\n      return group(join(concat([\",\", hardline]), path.map(print, \"nodes\")));\n    }\n    case \"selector-comment\": {\n      return n.value;\n    }\n    case \"selector-string\": {\n      return n.value;\n    }\n    case \"selector-tag\": {\n      return n.value;\n    }\n    case \"selector-id\": {\n      return concat([\"#\", n.value]);\n    }\n    case \"selector-class\": {\n      return concat([\".\", n.value]);\n    }\n    case \"selector-attribute\": {\n      return concat([\n        \"[\",\n        n.attribute,\n        n.operator ? n.operator : \"\",\n        n.value ? n.value : \"\",\n        n.insensitive ? \" i\" : \"\",\n        \"]\"\n      ]);\n    }\n    case \"selector-combinator\": {\n      if (n.value === \"+\" || n.value === \">\" || n.value === \"~\") {\n        const parent = path.getParentNode();\n        const leading =\n          parent.type === \"selector-selector\" && parent.nodes[0] === n\n            ? \"\"\n            : line;\n        return concat([leading, n.value, \" \"]);\n      }\n      return n.value.trim() || line;\n    }\n    case \"selector-universal\": {\n      return n.value;\n    }\n    case \"selector-selector\": {\n      return group(indent(concat(path.map(print, \"nodes\"))));\n    }\n    case \"selector-pseudo\": {\n      return concat([\n        n.value,\n        n.nodes && n.nodes.length > 0\n          ? concat([\"(\", join(\", \", path.map(print, \"nodes\")), \")\"])\n          : \"\"\n      ]);\n    }\n    case \"selector-nesting\": {\n      return printValue(n.value);\n    }\n    // postcss-values-parser\n    case \"value-root\": {\n      return path.call(print, \"group\");\n    }\n    case \"value-comma_group\": {\n      const printed = path.map(print, \"groups\");\n      const parts = [];\n      for (let i = 0; i < n.groups.length; ++i) {\n        parts.push(printed[i]);\n        if (\n          i !== n.groups.length - 1 &&\n          n.groups[i + 1].raws &&\n          n.groups[i + 1].raws.before !== \"\"\n        ) {\n          if (\n            n.groups[i + 1].type === \"value-operator\" &&\n            [\"+\", \"-\", \"/\", \"*\", \"%\"].indexOf(n.groups[i + 1].value) !== -1\n          ) {\n            parts.push(\" \");\n          } else {\n            parts.push(line);\n          }\n        }\n      }\n\n      return group(indent(fill(parts)));\n    }\n    case \"value-paren_group\": {\n      const parent = path.getParentNode();\n      const isURLCall =\n        parent && parent.type === \"value-func\" && parent.value === \"url\";\n\n      if (\n        isURLCall &&\n        (n.groups.length === 1 ||\n          (n.groups.length > 0 &&\n            n.groups[0].type === \"value-comma_group\" &&\n            n.groups[0].groups.length > 0 &&\n            n.groups[0].groups[0].type === \"value-word\" &&\n            n.groups[0].groups[0].value === \"data\"))\n      ) {\n        return concat([\n          n.open ? path.call(print, \"open\") : \"\",\n          join(\",\", path.map(print, \"groups\")),\n          n.close ? path.call(print, \"close\") : \"\"\n        ]);\n      }\n\n      if (!n.open) {\n        const printed = path.map(print, \"groups\");\n        const res = [];\n\n        for (let i = 0; i < printed.length; i++) {\n          if (i !== 0) {\n            res.push(concat([\",\", line]));\n          }\n          res.push(printed[i]);\n        }\n        return group(indent(fill(res)));\n      }\n\n      return group(\n        concat([\n          n.open ? path.call(print, \"open\") : \"\",\n          indent(\n            concat([\n              softline,\n              join(concat([\",\", line]), path.map(print, \"groups\"))\n            ])\n          ),\n          softline,\n          n.close ? path.call(print, \"close\") : \"\"\n        ])\n      );\n    }\n    case \"value-value\": {\n      return path.call(print, \"group\");\n    }\n    case \"value-func\": {\n      return concat([n.value, path.call(print, \"group\")]);\n    }\n    case \"value-paren\": {\n      if (n.raws.before !== \"\") {\n        return concat([line, n.value]);\n      }\n      return n.value;\n    }\n    case \"value-number\": {\n      return concat([n.value, n.unit]);\n    }\n    case \"value-operator\": {\n      return n.value;\n    }\n    case \"value-word\": {\n      if (n.isColor && n.isHex) {\n        return n.value.toLowerCase();\n      }\n      return n.value;\n    }\n    case \"value-colon\": {\n      return n.value;\n    }\n    case \"value-comma\": {\n      return concat([n.value, \" \"]);\n    }\n    case \"value-string\": {\n      return concat([\n        n.quoted ? n.raws.quote : \"\",\n        n.value,\n        n.quoted ? n.raws.quote : \"\"\n      ]);\n    }\n    case \"value-atword\": {\n      return concat([\"@\", n.value]);\n    }\n\n    default:\n      throw new Error(\"unknown postcss type: \" + JSON.stringify(n.type));\n  }\n}\n\nfunction printNodeSequence(path, options, print) {\n  const node = path.getValue();\n  const parts = [];\n  let i = 0;\n  path.map(pathChild => {\n    const prevNode = node.nodes[i - 1];\n    if (\n      prevNode &&\n      prevNode.type === \"css-comment\" &&\n      prevNode.text.trim() === \"prettier-ignore\"\n    ) {\n      const childNode = pathChild.getValue();\n      parts.push(\n        options.originalText.slice(\n          util.locStart(childNode),\n          util.locEnd(childNode)\n        )\n      );\n    } else {\n      parts.push(pathChild.call(print));\n    }\n\n    if (i !== node.nodes.length - 1) {\n      if (\n        (node.nodes[i + 1].type === \"css-comment\" &&\n          !util.hasNewline(\n            options.originalText,\n            util.locStart(node.nodes[i + 1]),\n            { backwards: true }\n          )) ||\n        (node.nodes[i + 1].type === \"css-atrule\" &&\n          node.nodes[i + 1].name === \"else\")\n      ) {\n        parts.push(\" \");\n      } else {\n        parts.push(hardline);\n        if (util.isNextLineEmpty(options.originalText, pathChild.getValue())) {\n          parts.push(hardline);\n        }\n      }\n    }\n    i++;\n  }, \"nodes\");\n\n  return concat(parts);\n}\n\nfunction printValue(value) {\n  return value;\n}\n\nmodule.exports = genericPrint;\n"
  },
  {
    "path": "src/printer.js",
    "content": "\"use strict\";\n\nconst assert = require(\"assert\");\nconst comments = require(\"./comments\");\nconst FastPath = require(\"./fast-path\");\nconst multiparser = require(\"./multiparser\");\nconst util = require(\"./util\");\nconst isIdentifierName = require(\"esutils\").keyword.isIdentifierNameES6;\n\nconst docBuilders = require(\"./doc-builders\");\nconst concat = docBuilders.concat;\nconst join = docBuilders.join;\nconst line = docBuilders.line;\nconst hardline = docBuilders.hardline;\nconst softline = docBuilders.softline;\nconst literalline = docBuilders.literalline;\nconst group = docBuilders.group;\nconst indent = docBuilders.indent;\nconst align = docBuilders.align;\nconst conditionalGroup = docBuilders.conditionalGroup;\nconst fill = docBuilders.fill;\nconst ifBreak = docBuilders.ifBreak;\nconst breakParent = docBuilders.breakParent;\nconst lineSuffixBoundary = docBuilders.lineSuffixBoundary;\nconst addAlignmentToDoc = docBuilders.addAlignmentToDoc;\n\nconst docUtils = require(\"./doc-utils\");\nconst willBreak = docUtils.willBreak;\nconst isLineNext = docUtils.isLineNext;\nconst isEmpty = docUtils.isEmpty;\nconst rawText = docUtils.rawText;\n\nfunction shouldPrintComma(options, level) {\n  return options.trailingComma[level];\n}\n\nfunction getPrintFunction(options) {\n  switch (options.parser) {\n    case \"graphql\":\n      return require(\"./printer-graphql\");\n    case \"parse5\":\n      return require(\"./printer-htmlparser2\");\n    case \"postcss\":\n      return require(\"./printer-postcss\");\n    default:\n      return genericPrintNoParens;\n  }\n}\n\nfunction hasJsxIgnoreComment(path) {\n  const node = path.getValue();\n  const parent = path.getParentNode();\n  if (!parent || node.type !== \"JSXElement\" || parent.type !== \"JSXElement\") {\n    return false;\n  }\n\n  // Lookup the previous sibling, ignoring any empty JSXText elements\n  const index = parent.children.indexOf(node);\n  let prevSibling = null;\n  for (let i = index; i > 0; i--) {\n    const candidate = parent.children[i - 1];\n    if (candidate.type === \"JSXText\" && !isMeaningfulJSXText(candidate)) {\n      continue;\n    }\n    prevSibling = candidate;\n    break;\n  }\n\n  return (\n    prevSibling &&\n    prevSibling.type === \"JSXExpressionContainer\" &&\n    prevSibling.expression.type === \"JSXEmptyExpression\" &&\n    prevSibling.expression.comments.find(\n      comment => comment.value.trim() === \"prettier-ignore\"\n    )\n  );\n}\n\nfunction genericPrint(path, options, printPath, args) {\n  assert.ok(path instanceof FastPath);\n\n  const node = path.getValue();\n\n  // Escape hatch\n  if (\n    node &&\n    ((node.comments &&\n      node.comments.length > 0 &&\n      node.comments.some(\n        comment => comment.value.trim() === \"prettier-ignore\"\n      )) ||\n      hasJsxIgnoreComment(path))\n  ) {\n    return options.originalText.slice(util.locStart(node), util.locEnd(node));\n  }\n\n  if (node) {\n    // Potentially switch to a different parser\n    const next = multiparser.getSubtreeParser(path, options);\n    if (next) {\n      try {\n        return multiparser.printSubtree(next, path, printPath, options);\n      } catch (error) {\n        /* istanbul ignore if */\n        if (process.env.PRETTIER_DEBUG) {\n          const e = new Error(error);\n          e.parser = next.options.parser;\n          throw e;\n        }\n        // Continue with current parser\n      }\n    }\n  }\n\n  let needsParens = false;\n  const linesWithoutParens = getPrintFunction(options)(\n    path,\n    options,\n    printPath,\n    args\n  );\n\n  if (!node || isEmpty(linesWithoutParens)) {\n    return linesWithoutParens;\n  }\n\n  const decorators = [];\n  if (\n    node.decorators &&\n    node.decorators.length > 0 &&\n    // If the parent node is an export declaration, it will be\n    // responsible for printing node.decorators.\n    !util.getParentExportDeclaration(path)\n  ) {\n    let separator = hardline;\n    path.each(decoratorPath => {\n      let prefix = \"@\";\n      let decorator = decoratorPath.getValue();\n      if (decorator.expression) {\n        decorator = decorator.expression;\n        prefix = \"\";\n      }\n\n      if (\n        node.decorators.length === 1 &&\n        node.type !== \"ClassDeclaration\" &&\n        node.type !== \"MethodDefinition\" &&\n        node.type !== \"ClassMethod\" &&\n        (decorator.type === \"Identifier\" ||\n          decorator.type === \"MemberExpression\" ||\n          (decorator.type === \"CallExpression\" &&\n            (decorator.arguments.length === 0 ||\n              (decorator.arguments.length === 1 &&\n                (isStringLiteral(decorator.arguments[0]) ||\n                  decorator.arguments[0].type === \"Identifier\" ||\n                  decorator.arguments[0].type === \"MemberExpression\")))))\n      ) {\n        separator = line;\n      }\n\n      decorators.push(prefix, printPath(decoratorPath), separator);\n    }, \"decorators\");\n  } else if (\n    util.isExportDeclaration(node) &&\n    node.declaration &&\n    node.declaration.decorators\n  ) {\n    // Export declarations are responsible for printing any decorators\n    // that logically apply to node.declaration.\n    path.each(\n      decoratorPath => {\n        const decorator = decoratorPath.getValue();\n        const prefix = decorator.type === \"Decorator\" ? \"\" : \"@\";\n        decorators.push(prefix, printPath(decoratorPath), hardline);\n      },\n      \"declaration\",\n      \"decorators\"\n    );\n  } else {\n    // Nodes with decorators can't have parentheses, so we can avoid\n    // computing path.needsParens() except in this case.\n    needsParens = path.needsParens(options);\n  }\n\n  if (node.type) {\n    // HACK: ASI prevention in no-semi mode relies on knowledge of whether\n    // or not a paren has been inserted (see `exprNeedsASIProtection()`).\n    // For now, we're just passing that information by mutating the AST here,\n    // but it would be nice to find a cleaner way to do this.\n    node.needsParens = needsParens;\n  }\n\n  const parts = [];\n  if (needsParens) {\n    parts.unshift(\"(\");\n  }\n\n  parts.push(linesWithoutParens);\n\n  if (needsParens) {\n    parts.push(\")\");\n  }\n\n  if (decorators.length > 0) {\n    return group(concat(decorators.concat(parts)));\n  }\n  return concat(parts);\n}\n\nfunction getPropertyPadding(options, path) {\n  if (!options.alignObjectProperties) {\n    return \"\";\n  }\n\n  const n = path.getValue();\n  const type = n.type;\n\n  const parentNode = path.getParentNode();\n  const isPropertyKey =\n    (parentNode.type === \"Property\" || parentNode.type === \"ObjectProperty\") &&\n    parentNode.key === n;\n\n  if (!isPropertyKey) {\n    return \"\";\n  }\n\n  const parentObject = path.getParentNode(1);\n  const shouldBreak = util.hasNewlineInRange(\n    options.originalText,\n    util.locStart(parentObject),\n    util.locEnd(parentObject)\n  );\n\n  if (!shouldBreak) {\n    return \"\";\n  }\n\n  const nameLength = type === \"Identifier\"\n    ? n.name.length\n    : type === \"NumericLiteral\"\n      ? printNumber(n.extra.raw).length\n      : type === \"StringLiteral\" ? nodeStr(n, options).length : undefined;\n\n  if (nameLength === undefined) {\n    return \"\";\n  }\n\n  const properties = parentObject.properties;\n  const lengths = properties.map(p => {\n    if (!p.key) {\n      return 0;\n    }\n    return p.key.end - p.key.start + (p.computed ? 2 : 0);\n  });\n  const maxLength = Math.max.apply(null, lengths);\n  const padLength = maxLength - nameLength + 1;\n  const padding = \" \".repeat(padLength);\n\n  return padding;\n}\n\nfunction genericPrintNoParens(path, options, print, args) {\n  const n = path.getValue();\n  const semi = options.semi ? \";\" : \"\";\n\n  if (!n) {\n    return \"\";\n  }\n\n  if (typeof n === \"string\") {\n    return n;\n  }\n\n  let parts = [];\n  switch (n.type) {\n    case \"File\":\n      return path.call(print, \"program\");\n    case \"Program\":\n      // Babel 6\n      if (n.directives) {\n        path.each(childPath => {\n          parts.push(print(childPath), semi, hardline);\n          if (\n            util.isNextLineEmpty(options.originalText, childPath.getValue())\n          ) {\n            parts.push(hardline);\n          }\n        }, \"directives\");\n      }\n\n      parts.push(\n        path.call(bodyPath => {\n          return printStatementSequence(bodyPath, options, print);\n        }, \"body\")\n      );\n\n      parts.push(\n        comments.printDanglingComments(path, options, /* sameIndent */ true)\n      );\n\n      // Only force a trailing newline if there were any contents.\n      if (n.body.length || n.comments) {\n        parts.push(hardline);\n      }\n\n      return concat(parts);\n    // Babel extension.\n    case \"EmptyStatement\":\n      return \"\";\n    case \"ExpressionStatement\":\n      // Detect Flow-parsed directives\n      if (n.directive) {\n        return concat([nodeStr(n.expression, options, true), semi]);\n      }\n      return concat([path.call(print, \"expression\"), semi]); // Babel extension.\n    case \"ParenthesizedExpression\":\n      return concat([\"(\", path.call(print, \"expression\"), \")\"]);\n    case \"AssignmentExpression\":\n      return printAssignment(\n        n.left,\n        path.call(print, \"left\"),\n        concat([\" \", n.operator]),\n        n.right,\n        path.call(print, \"right\"),\n        options,\n        n.type\n      );\n    case \"BinaryExpression\":\n    case \"LogicalExpression\": {\n      const parent = path.getParentNode();\n      const parentParent = path.getParentNode(1);\n      const isInsideParenthesis =\n        n !== parent.body &&\n        (parent.type === \"IfStatement\" ||\n          parent.type === \"WhileStatement\" ||\n          parent.type === \"DoWhileStatement\");\n\n      const parts = printBinaryishExpressions(\n        path,\n        print,\n        options,\n        /* isNested */ false,\n        isInsideParenthesis\n      );\n\n      //   if (\n      //     this.hasPlugin(\"dynamicImports\") && this.lookahead().type === tt.parenLeft\n      //   ) {\n      //\n      // looks super weird, we want to break the children if the parent breaks\n      //\n      //   if (\n      //     this.hasPlugin(\"dynamicImports\") &&\n      //     this.lookahead().type === tt.parenLeft\n      //   ) {\n      if (isInsideParenthesis) {\n        return concat(parts);\n      }\n\n      if (parent.type === \"UnaryExpression\") {\n        return group(\n          concat([indent(concat([softline, concat(parts)])), softline])\n        );\n      }\n\n      // Avoid indenting sub-expressions in assignment/return/etc statements.\n      if (\n        parent.type === \"AssignmentExpression\" ||\n        parent.type === \"VariableDeclarator\" ||\n        shouldInlineLogicalExpression(n) ||\n        parent.type === \"ReturnStatement\" ||\n        (parent.type === \"JSXExpressionContainer\" &&\n          parentParent.type === \"JSXAttribute\") ||\n        (n === parent.body && parent.type === \"ArrowFunctionExpression\") ||\n        (n !== parent.body && parent.type === \"ForStatement\") ||\n        parent.type === \"ObjectProperty\" ||\n        parent.type === \"Property\" ||\n        parent.type === \"ConditionalExpression\"\n      ) {\n        return group(concat(parts));\n      }\n\n      const rest = concat(parts.slice(1));\n\n      return group(\n        concat([\n          // Don't include the initial expression in the indentation\n          // level. The first item is guaranteed to be the first\n          // left-most expression.\n          parts.length > 0 ? parts[0] : \"\",\n          indent(rest)\n        ])\n      );\n    }\n    case \"AssignmentPattern\":\n      return concat([\n        path.call(print, \"left\"),\n        \" = \",\n        path.call(print, \"right\")\n      ]);\n    case \"TSTypeAssertionExpression\":\n      return concat([\n        \"<\",\n        path.call(print, \"typeAnnotation\"),\n        \">\",\n        path.call(print, \"expression\")\n      ]);\n    case \"MemberExpression\": {\n      const parent = path.getParentNode();\n      let firstNonMemberParent;\n      let i = 0;\n      do {\n        firstNonMemberParent = path.getParentNode(i);\n        i++;\n      } while (\n        firstNonMemberParent && firstNonMemberParent.type === \"MemberExpression\"\n      );\n\n      const shouldInline =\n        (firstNonMemberParent &&\n          ((firstNonMemberParent.type === \"VariableDeclarator\" &&\n            firstNonMemberParent.id.type !== \"Identifier\") ||\n            (firstNonMemberParent.type === \"AssignmentExpression\" &&\n              firstNonMemberParent.left.type !== \"Identifier\"))) ||\n        n.computed ||\n        (n.object.type === \"Identifier\" &&\n          n.property.type === \"Identifier\" &&\n          parent.type !== \"MemberExpression\");\n\n      return concat([\n        path.call(print, \"object\"),\n        shouldInline\n          ? printMemberLookup(path, options, print)\n          : group(\n              indent(\n                concat([softline, printMemberLookup(path, options, print)])\n              )\n            )\n      ]);\n    }\n    case \"MetaProperty\":\n      return concat([\n        path.call(print, \"meta\"),\n        \".\",\n        path.call(print, \"property\")\n      ]);\n    case \"BindExpression\":\n      if (n.object) {\n        parts.push(path.call(print, \"object\"));\n      }\n\n      parts.push(printBindExpressionCallee(path, options, print));\n\n      return concat(parts);\n    case \"Identifier\": {\n      const parentNode = path.getParentNode();\n      const isFunctionDeclarationIdentifier =\n        parentNode.type === \"DeclareFunction\" && parentNode.id === n;\n\n      return concat([\n        n.name,\n        n.optional ? \"?\" : \"\",\n        n.typeAnnotation && !isFunctionDeclarationIdentifier ? \": \" : \"\",\n        path.call(print, \"typeAnnotation\")\n      ]);\n    }\n    case \"SpreadElement\":\n    case \"SpreadElementPattern\":\n    case \"RestProperty\":\n    case \"ExperimentalRestProperty\":\n    case \"ExperimentalSpreadProperty\":\n    case \"SpreadProperty\":\n    case \"SpreadPropertyPattern\":\n    case \"RestElement\":\n    case \"ObjectTypeSpreadProperty\":\n      return concat([\n        \"...\",\n        path.call(print, \"argument\"),\n        n.typeAnnotation ? \": \" : \"\",\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"FunctionDeclaration\":\n    case \"FunctionExpression\":\n    case \"TSNamespaceFunctionDeclaration\":\n      if (isNodeStartingWithDeclare(n, options)) {\n        parts.push(\"declare \");\n      }\n      parts.push(printFunctionDeclaration(path, print, options));\n      if (!n.body) {\n        parts.push(semi);\n      }\n      return concat(parts);\n    case \"ArrowFunctionExpression\": {\n      if (n.async) {\n        parts.push(\"async \");\n      }\n\n      //parts.push(printFunctionTypeParameters(path, options, print));\n      if (canPrintParamsWithoutParens(n, options)) {\n        parts.push(path.call(print, \"params\", 0));\n      } else {\n        parts.push(\n          group(\n            concat([\n              printFunctionParams(\n                path,\n                print,\n                options,\n                /* expandLast */ args &&\n                  (args.expandLastArg || args.expandFirstArg),\n                /* printTypeParams */ true\n              ),\n              printReturnType(path, print)\n            ])\n          )\n        );\n      }\n\n      parts.push(\" =>\");\n\n      const body = path.call(bodyPath => print(bodyPath, args), \"body\");\n\n      // We want to always keep these types of nodes on the same line\n      // as the arrow.\n      if (\n        !hasLeadingOwnLineComment(options.originalText, n.body) &&\n        (n.body.type === \"ArrayExpression\" ||\n          n.body.type === \"ObjectExpression\" ||\n          n.body.type === \"BlockStatement\" ||\n          n.body.type === \"JSXElement\" ||\n          isTemplateOnItsOwnLine(n.body, options.originalText) ||\n          n.body.type === \"ArrowFunctionExpression\")\n      ) {\n        return group(concat([concat(parts), \" \", body]));\n      }\n\n      // We handle sequence expressions as the body of arrows specially,\n      // so that the required parentheses end up on their own lines.\n      if (n.body.type === \"SequenceExpression\") {\n        return group(\n          concat([\n            concat(parts),\n            group(\n              concat([\" (\", indent(concat([softline, body])), softline, \")\"])\n            )\n          ])\n        );\n      }\n\n      // if the arrow function is expanded as last argument, we are adding a\n      // level of indentation and need to add a softline to align the closing )\n      // with the opening (.\n      const shouldAddSoftLine = args && args.expandLastArg;\n\n      // In order to avoid confusion between\n      // a => a ? a : a\n      // a <= a ? a : a\n      const shouldAddParens =\n        n.body.type === \"ConditionalExpression\" &&\n        !util.startsWithNoLookaheadToken(\n          n.body,\n          /* forbidFunctionAndClass */ false\n        );\n\n      return group(\n        concat([\n          concat(parts),\n          group(\n            concat([\n              indent(\n                concat([\n                  line,\n                  shouldAddParens ? ifBreak(\"\", \"(\") : \"\",\n                  body,\n                  shouldAddParens ? ifBreak(\"\", \")\") : \"\"\n                ])\n              ),\n              shouldAddSoftLine\n                ? concat([\n                    ifBreak(shouldPrintComma(options, \"arguments\") ? \",\" : \"\"),\n                    softline\n                  ])\n                : \"\"\n            ])\n          )\n        ])\n      );\n    }\n    case \"MethodDefinition\":\n    case \"TSAbstractMethodDefinition\":\n      if (n.accessibility) {\n        parts.push(n.accessibility + \" \");\n      }\n      if (n.static) {\n        parts.push(\"static \");\n      }\n      if (n.type === \"TSAbstractMethodDefinition\") {\n        parts.push(\"abstract \");\n      }\n\n      parts.push(printMethod(path, options, print));\n\n      return concat(parts);\n    case \"YieldExpression\":\n      parts.push(\"yield\");\n\n      if (n.delegate) {\n        parts.push(\"*\");\n      }\n      if (n.argument) {\n        parts.push(\" \", path.call(print, \"argument\"));\n      }\n\n      return concat(parts);\n    case \"AwaitExpression\":\n      return concat([\"await \", path.call(print, \"argument\")]);\n    case \"ImportSpecifier\":\n      if (n.importKind) {\n        parts.push(path.call(print, \"importKind\"), \" \");\n      }\n\n      parts.push(path.call(print, \"imported\"));\n\n      if (n.local && n.local.name !== n.imported.name) {\n        parts.push(\" as \", path.call(print, \"local\"));\n      }\n\n      return concat(parts);\n    case \"ExportSpecifier\":\n      parts.push(path.call(print, \"local\"));\n\n      if (n.exported && n.exported.name !== n.local.name) {\n        parts.push(\" as \", path.call(print, \"exported\"));\n      }\n\n      return concat(parts);\n    case \"ImportNamespaceSpecifier\":\n      parts.push(\"* as \");\n\n      if (n.local) {\n        parts.push(path.call(print, \"local\"));\n      } else if (n.id) {\n        parts.push(path.call(print, \"id\"));\n      }\n\n      return concat(parts);\n    case \"ImportDefaultSpecifier\":\n      if (n.local) {\n        return path.call(print, \"local\");\n      }\n\n      return path.call(print, \"id\");\n    case \"TSExportAssigment\":\n      return concat([\"export = \", path.call(print, \"expression\"), semi]);\n    case \"ExportDefaultDeclaration\":\n    case \"ExportNamedDeclaration\":\n      return printExportDeclaration(path, options, print);\n    case \"ExportAllDeclaration\":\n      return concat([\"export * from \", path.call(print, \"source\"), semi]);\n    case \"ExportNamespaceSpecifier\":\n    case \"ExportDefaultSpecifier\":\n      return path.call(print, \"exported\");\n    case \"ImportDeclaration\": {\n      parts.push(\"import \");\n\n      if (n.importKind && n.importKind !== \"value\") {\n        parts.push(n.importKind + \" \");\n      }\n\n      const standalones = [];\n      const grouped = [];\n      if (n.specifiers && n.specifiers.length > 0) {\n        path.each(specifierPath => {\n          const value = specifierPath.getValue();\n          if (\n            value.type === \"ImportDefaultSpecifier\" ||\n            value.type === \"ImportNamespaceSpecifier\"\n          ) {\n            standalones.push(print(specifierPath));\n          } else {\n            grouped.push(print(specifierPath));\n          }\n        }, \"specifiers\");\n\n        if (standalones.length > 0) {\n          parts.push(join(\", \", standalones));\n        }\n\n        if (standalones.length > 0 && grouped.length > 0) {\n          parts.push(\", \");\n        }\n\n        if (\n          grouped.length === 1 &&\n          standalones.length === 0 &&\n          n.specifiers &&\n          !n.specifiers.some(node => node.comments)\n        ) {\n          parts.push(\n            concat([\n              \"{\",\n              options.bracesSpacing ? \" \" : \"\",\n              concat(grouped),\n              options.bracesSpacing ? \" \" : \"\",\n              \"}\"\n            ])\n          );\n        } else if (grouped.length >= 1) {\n          parts.push(\n            group(\n              concat([\n                \"{\",\n                indent(\n                  concat([\n                    options.bracesSpacing ? line : softline,\n                    join(concat([\",\", line]), grouped)\n                  ])\n                ),\n                ifBreak(shouldPrintComma(options, \"import\") ? \",\" : \"\"),\n                options.bracesSpacing ? line : softline,\n                \"}\"\n              ])\n            )\n          );\n        }\n\n        parts.push(\" from \");\n      } else if (\n        (n.importKind && n.importKind === \"type\") ||\n        // import {} from 'x'\n        /{\\s*}/.test(\n          options.originalText.slice(util.locStart(n), util.locStart(n.source))\n        )\n      ) {\n        parts.push(\"{} from \");\n      }\n\n      parts.push(path.call(print, \"source\"), semi);\n\n      return concat(parts);\n    }\n\n    case \"Import\":\n      return \"import\";\n    case \"BlockStatement\": {\n      const naked = path.call(bodyPath => {\n        return printStatementSequence(bodyPath, options, print);\n      }, \"body\");\n\n      const hasContent = n.body.find(node => node.type !== \"EmptyStatement\");\n      const hasDirectives = n.directives && n.directives.length > 0;\n\n      const parent = path.getParentNode();\n      const parentParent = path.getParentNode(1);\n      if (\n        !hasContent &&\n        !hasDirectives &&\n        !n.comments &&\n        (parent.type === \"ArrowFunctionExpression\" ||\n          parent.type === \"FunctionExpression\" ||\n          parent.type === \"FunctionDeclaration\" ||\n          parent.type === \"ObjectMethod\" ||\n          parent.type === \"ClassMethod\" ||\n          parent.type === \"ForStatement\" ||\n          parent.type === \"WhileStatement\" ||\n          parent.type === \"DoWhileStatement\" ||\n          (parent.type === \"CatchClause\" && !parentParent.finalizer))\n      ) {\n        return \"{}\";\n      }\n\n      parts.push(\"{\");\n\n      // Babel 6\n      if (hasDirectives) {\n        path.each(childPath => {\n          parts.push(indent(concat([hardline, print(childPath), semi])));\n          if (\n            util.isNextLineEmpty(options.originalText, childPath.getValue())\n          ) {\n            parts.push(hardline);\n          }\n        }, \"directives\");\n      }\n\n      if (hasContent) {\n        parts.push(indent(concat([hardline, naked])));\n      }\n\n      parts.push(comments.printDanglingComments(path, options));\n      parts.push(hardline, \"}\");\n\n      return concat(parts);\n    }\n    case \"ReturnStatement\":\n      parts.push(\"return\");\n\n      if (n.argument) {\n        if (returnArgumentHasLeadingComment(options, n.argument)) {\n          parts.push(\n            concat([\n              \" (\",\n              indent(concat([softline, path.call(print, \"argument\")])),\n              line,\n              \")\"\n            ])\n          );\n        } else if (\n          n.argument.type === \"LogicalExpression\" ||\n          n.argument.type === \"BinaryExpression\" ||\n          n.argument.type === \"SequenceExpression\"\n        ) {\n          parts.push(\n            group(\n              concat([\n                ifBreak(\" (\", \" \"),\n                indent(concat([softline, path.call(print, \"argument\")])),\n                softline,\n                ifBreak(\")\")\n              ])\n            )\n          );\n        } else {\n          parts.push(\" \", path.call(print, \"argument\"));\n        }\n      }\n\n      if (hasDanglingComments(n)) {\n        parts.push(\n          \" \",\n          comments.printDanglingComments(path, options, /* sameIndent */ true)\n        );\n      }\n\n      parts.push(semi);\n\n      return concat(parts);\n    case \"NewExpression\":\n    case \"CallExpression\": {\n      const isNew = n.type === \"NewExpression\";\n      if (\n        // We want to keep require calls as a unit\n        (!isNew &&\n          n.callee.type === \"Identifier\" &&\n          n.callee.name === \"require\") ||\n        n.callee.type === \"Import\" ||\n        // Template literals as single arguments\n        (n.arguments.length === 1 &&\n          isTemplateOnItsOwnLine(n.arguments[0], options.originalText)) ||\n        // Keep test declarations on a single line\n        // e.g. `it('long name', () => {`\n        (!isNew &&\n          n.callee.type === \"Identifier\" &&\n          (n.callee.name === \"it\" ||\n            n.callee.name === \"test\" ||\n            n.callee.name === \"describe\") &&\n          n.arguments.length === 2 &&\n          (n.arguments[0].type === \"StringLiteral\" ||\n            n.arguments[0].type === \"TemplateLiteral\" ||\n            (n.arguments[0].type === \"Literal\" &&\n              typeof n.arguments[0].value === \"string\")) &&\n          (n.arguments[1].type === \"FunctionExpression\" ||\n            n.arguments[1].type === \"ArrowFunctionExpression\") &&\n          n.arguments[1].params.length <= 1)\n      ) {\n        return concat([\n          isNew ? \"new \" : \"\",\n          path.call(print, \"callee\"),\n          path.call(print, \"typeParameters\"),\n          concat([\"(\", join(\", \", path.map(print, \"arguments\")), \")\"])\n        ]);\n      }\n\n      // We detect calls on member lookups and possibly print them in a\n      // special chain format. See `printMemberChain` for more info.\n      if (!isNew && isMemberish(n.callee)) {\n        return printMemberChain(path, options, print);\n      }\n\n      return concat([\n        isNew ? \"new \" : \"\",\n        path.call(print, \"callee\"),\n        printFunctionTypeParameters(path, options, print),\n        printArgumentsList(path, options, print)\n      ]);\n    }\n    case \"TSInterfaceDeclaration\":\n      parts.push(\n        n.abstract ? \"abstract \" : \"\",\n        printTypeScriptModifiers(path, options, print),\n        \"interface \",\n        path.call(print, \"id\"),\n        n.typeParameters ? path.call(print, \"typeParameters\") : \"\",\n        \" \"\n      );\n\n      if (n.heritage.length) {\n        parts.push(\n          group(\n            indent(\n              concat([\n                softline,\n                \"extends \",\n                indent(join(concat([\",\", line]), path.map(print, \"heritage\"))),\n                \" \"\n              ])\n            )\n          )\n        );\n      }\n\n      parts.push(path.call(print, \"body\"));\n\n      return concat(parts);\n    case \"ObjectExpression\":\n    case \"ObjectPattern\":\n    case \"ObjectTypeAnnotation\":\n    case \"TSInterfaceBody\":\n    case \"TSTypeLiteral\": {\n      const isTypeAnnotation = n.type === \"ObjectTypeAnnotation\";\n      const shouldBreak =\n        n.type === \"TSInterfaceBody\" ||\n        (n.type !== \"ObjectPattern\" &&\n          util.hasNewlineInRange(\n            options.originalText,\n            util.locStart(n),\n            util.locEnd(n)\n          ));\n      const separator =\n        n.type === \"TSInterfaceBody\" || n.type === \"TSTypeLiteral\"\n          ? ifBreak(semi, \";\")\n          : \",\";\n      const fields = [];\n      const leftBrace = n.exact ? \"{|\" : \"{\";\n      const rightBrace = n.exact ? \"|}\" : \"}\";\n      const parent = path.getParentNode(0);\n\n      let propertiesField;\n\n      if (n.type === \"TSTypeLiteral\") {\n        propertiesField = \"members\";\n      } else if (n.type === \"TSInterfaceBody\") {\n        propertiesField = \"body\";\n      } else {\n        propertiesField = \"properties\";\n      }\n\n      if (isTypeAnnotation) {\n        fields.push(\"indexers\", \"callProperties\");\n      }\n      fields.push(propertiesField);\n\n      // Unfortunately, things are grouped together in the ast can be\n      // interleaved in the source code. So we need to reorder them before\n      // printing them.\n      const propsAndLoc = [];\n      fields.forEach(field => {\n        path.each(childPath => {\n          const node = childPath.getValue();\n          propsAndLoc.push({\n            node: node,\n            printed: print(childPath),\n            loc: util.locStart(node)\n          });\n        }, field);\n      });\n\n      let separatorParts = [];\n      const props = propsAndLoc.sort((a, b) => a.loc - b.loc).map(prop => {\n        const result = concat(separatorParts.concat(group(prop.printed)));\n        separatorParts = [separator, line];\n        if (util.isNextLineEmpty(options.originalText, prop.node)) {\n          separatorParts.push(hardline);\n        }\n        return result;\n      });\n\n      const lastElem = util.getLast(n[propertiesField]);\n\n      const canHaveTrailingSeparator = !(\n        lastElem &&\n        (lastElem.type === \"RestProperty\" || lastElem.type === \"RestElement\")\n      );\n\n      let content;\n      if (props.length === 0 && !n.typeAnnotation) {\n        if (!hasDanglingComments(n)) {\n          return concat([leftBrace, rightBrace]);\n        }\n\n        content = group(\n          concat([\n            leftBrace,\n            comments.printDanglingComments(path, options),\n            softline,\n            rightBrace,\n            n.optional ? \"?\" : \"\"\n          ])\n        );\n      } else {\n        content = concat([\n          leftBrace,\n          indent(\n            concat([options.bracesSpacing ? line : softline, concat(props)])\n          ),\n          ifBreak(\n            canHaveTrailingSeparator &&\n            (separator !== \",\" || shouldPrintComma(options, \"object\"))\n              ? separator\n              : \"\"\n          ),\n          concat([options.bracesSpacing ? line : softline, rightBrace]),\n          n.optional ? \"?\" : \"\",\n          n.typeAnnotation ? \": \" : \"\",\n          path.call(print, \"typeAnnotation\")\n        ]);\n      }\n\n      // If we inline the object as first argument of the parent, we don't want\n      // to create another group so that the object breaks before the return\n      // type\n      const parentParentParent = path.getParentNode(2);\n      if (\n        (n.type === \"ObjectPattern\" &&\n          parent &&\n          shouldHugArguments(parent) &&\n          parent.params[0] === n) ||\n        (shouldHugType(n) &&\n          parentParentParent &&\n          shouldHugArguments(parentParentParent) &&\n          parentParentParent.params[0].typeAnnotation.typeAnnotation === n)\n      ) {\n        return content;\n      }\n\n      return group(content, { shouldBreak });\n    }\n    // Babel 6\n    case \"ObjectProperty\": // Non-standard AST node type.\n    case \"Property\":\n      if (n.method || n.kind === \"get\" || n.kind === \"set\") {\n        return printMethod(path, options, print);\n      }\n\n      if (n.shorthand) {\n        parts.push(path.call(print, \"value\"));\n      } else {\n        let printedLeft;\n        const propertyPadding = path.call(\n          getPropertyPadding.bind(null, options),\n          \"key\"\n        );\n        if (n.computed) {\n          printedLeft = concat([\n            \"[\",\n            path.call(print, \"key\"),\n            \"]\",\n            propertyPadding.slice(2)\n          ]);\n        } else {\n          printedLeft = concat([\n            printPropertyKey(path, options, print),\n            propertyPadding\n          ]);\n        }\n        parts.push(\n          printAssignment(\n            n.key,\n            printedLeft,\n            \":\",\n            n.value,\n            path.call(print, \"value\"),\n            options,\n            n.type\n          )\n        );\n      }\n\n      return concat(parts); // Babel 6\n    case \"ClassMethod\":\n      if (n.static) {\n        parts.push(\"static \");\n      }\n\n      parts = parts.concat(printObjectMethod(path, options, print));\n\n      return concat(parts); // Babel 6\n    case \"ObjectMethod\":\n      return printObjectMethod(path, options, print);\n    case \"Decorator\":\n      return concat([\"@\", path.call(print, \"expression\")]);\n    case \"ArrayExpression\":\n    case \"ArrayPattern\":\n      if (n.elements.length === 0) {\n        if (!hasDanglingComments(n)) {\n          parts.push(\"[]\");\n        } else {\n          parts.push(\n            group(\n              concat([\n                \"[\",\n                comments.printDanglingComments(path, options),\n                softline,\n                \"]\"\n              ])\n            )\n          );\n        }\n      } else {\n        const lastElem = util.getLast(n.elements);\n        const canHaveTrailingComma = !(\n          lastElem && lastElem.type === \"RestElement\"\n        );\n\n        // JavaScript allows you to have empty elements in an array which\n        // changes its length based on the number of commas. The algorithm\n        // is that if the last argument is null, we need to force insert\n        // a comma to ensure JavaScript recognizes it.\n        //   [,].length === 1\n        //   [1,].length === 1\n        //   [1,,].length === 2\n        //\n        // Note that util.getLast returns null if the array is empty, but\n        // we already check for an empty array just above so we are safe\n        const needsForcedTrailingComma =\n          canHaveTrailingComma && lastElem === null;\n\n        const printedElements = [];\n        let separatorParts = [];\n        path.each(childPath => {\n          printedElements.push(concat(separatorParts));\n          printedElements.push(group(print(childPath)));\n\n          separatorParts = [\",\", options.arrayExpand ? hardline : line];\n          if (\n            childPath.getValue() &&\n            util.isNextLineEmpty(options.originalText, childPath.getValue())\n          ) {\n            separatorParts.push(softline);\n          }\n        }, \"elements\");\n\n        parts.push(\n          group(\n            concat([\n              \"[\",\n              indent(\n                concat([\n                  options.bracketSpacing ? line : softline,\n                  printArrayItems(path, options, \"elements\", print)\n                ])\n              ),\n              needsForcedTrailingComma ? \",\" : \"\",\n              ifBreak(\n                canHaveTrailingComma &&\n                !needsForcedTrailingComma &&\n                shouldPrintComma(options, \"array\")\n                  ? \",\"\n                  : \"\"\n              ),\n              comments.printDanglingComments(\n                path,\n                options,\n                /* sameIndent */ true\n              ),\n              options.arrayExpand\n                ? hardline\n                : options.bracketSpacing ? line : softline,\n              \"]\"\n            ])\n          )\n        );\n      }\n\n      if (n.optional) {\n        parts.push(\"?\");\n      }\n\n      if (n.typeAnnotation) {\n        parts.push(\": \", path.call(print, \"typeAnnotation\"));\n      }\n\n      return concat(parts);\n    case \"SequenceExpression\": {\n      const parent = path.getParentNode(0);\n      if (\n        parent.type === \"ExpressionStatement\" ||\n        parent.type === \"ForStatement\"\n      ) {\n        // For ExpressionStatements and for-loop heads, which are among\n        // the few places a SequenceExpression appears unparenthesized, we want\n        // to indent expressions after the first.\n        const parts = [];\n        path.each(p => {\n          if (p.getName() === 0) {\n            parts.push(print(p));\n          } else {\n            parts.push(\",\", indent(concat([line, print(p)])));\n          }\n        }, \"expressions\");\n        return group(concat(parts));\n      }\n      return group(\n        concat([join(concat([\",\", line]), path.map(print, \"expressions\"))])\n      );\n    }\n    case \"ThisExpression\":\n      return \"this\";\n    case \"Super\":\n      return \"super\";\n    case \"NullLiteral\": // Babel 6 Literal split\n      return \"null\";\n    case \"RegExpLiteral\": // Babel 6 Literal split\n      return printRegex(n);\n    case \"NumericLiteral\": // Babel 6 Literal split\n      return printNumber(n.extra.raw);\n    case \"BooleanLiteral\": // Babel 6 Literal split\n    case \"StringLiteral\": // Babel 6 Literal split\n    case \"Literal\": {\n      if (n.regex) {\n        return printRegex(n.regex);\n      }\n      if (typeof n.value === \"number\") {\n        return printNumber(n.raw);\n      }\n      if (typeof n.value !== \"string\") {\n        return \"\" + n.value;\n      }\n      // TypeScript workaround for eslint/typescript-eslint-parser#267\n      // See corresponding workaround in fast-path.js needsParens()\n      const grandParent = path.getParentNode(1);\n      const isTypeScriptDirective =\n        options.parser === \"typescript\" &&\n        typeof n.value === \"string\" &&\n        grandParent &&\n        (grandParent.type === \"Program\" ||\n          grandParent.type === \"BlockStatement\");\n\n      return nodeStr(n, options, isTypeScriptDirective);\n    }\n    case \"Directive\":\n      return path.call(print, \"value\"); // Babel 6\n    case \"DirectiveLiteral\":\n      return nodeStr(n, options);\n    case \"UnaryExpression\":\n      parts.push(n.operator);\n\n      if (/[a-z]$/.test(n.operator)) {\n        parts.push(\" \");\n      }\n\n      parts.push(path.call(print, \"argument\"));\n\n      return concat(parts);\n    case \"UpdateExpression\":\n      parts.push(path.call(print, \"argument\"), n.operator);\n\n      if (n.prefix) {\n        parts.reverse();\n      }\n\n      return concat(parts);\n    case \"ConditionalExpression\": {\n      // We print a ConditionalExpression in either \"JSX mode\" or \"normal mode\".\n      // See tests/jsx/conditional-expression.js for more info.\n      let jsxMode = false;\n      const parent = path.getParentNode();\n      let forceNoIndent = parent.type === \"ConditionalExpression\";\n\n      // Find the outermost non-ConditionalExpression parent, and the outermost\n      // ConditionalExpression parent. We'll use these to determine if we should\n      // print in JSX mode.\n      let currentParent;\n      let previousParent;\n      let i = 0;\n      do {\n        previousParent = currentParent || n;\n        currentParent = path.getParentNode(i);\n        i++;\n      } while (currentParent && currentParent.type === \"ConditionalExpression\");\n      const firstNonConditionalParent = currentParent || parent;\n      const lastConditionalParent = previousParent;\n\n      /**/\n      if (options.flattenTernaries) {\n        const subTernary = parent.type === n.type;\n        const parts = [\n          path.call(print, \"test\"),\n          \" ? \",\n          path.call(print, \"consequent\"),\n          \" :\",\n          hardline,\n          path.call(print, \"alternate\")\n        ];\n        return group(\n          subTernary ? concat(parts) : indent(concat([softline].concat(parts)))\n        );\n      }\n      /**/\n\n      if (\n        n.test.type === \"JSXElement\" ||\n        n.consequent.type === \"JSXElement\" ||\n        n.alternate.type === \"JSXElement\" ||\n        parent.type === \"JSXExpressionContainer\" ||\n        firstNonConditionalParent.type === \"JSXExpressionContainer\" ||\n        conditionalExpressionChainContainsJSX(lastConditionalParent)\n      ) {\n        jsxMode = true;\n        forceNoIndent = true;\n\n        // Even though they don't need parens, we wrap (almost) everything in\n        // parens when using ?: within JSX, because the parens are analagous to\n        // curly braces in an if statement.\n        const wrap = doc =>\n          concat([\n            ifBreak(\"(\", \"\"),\n            indent(concat([softline, doc])),\n            softline,\n            ifBreak(\")\", \"\")\n          ]);\n\n        // The only things we don't wrap are:\n        // * Nested conditional expressions\n        // * null\n        const shouldNotWrap = node =>\n          node.type === \"ConditionalExpression\" ||\n          node.type === \"NullLiteral\" ||\n          (node.type === \"Literal\" && node.value === null);\n\n        parts.push(\n          \" ? \",\n          shouldNotWrap(n.consequent)\n            ? path.call(print, \"consequent\")\n            : wrap(path.call(print, \"consequent\")),\n          \" : \",\n          shouldNotWrap(n.alternate)\n            ? path.call(print, \"alternate\")\n            : wrap(path.call(print, \"alternate\"))\n        );\n      } else {\n        // normal mode\n        parts.push(\n          line,\n          \"? \",\n          n.consequent.type === \"ConditionalExpression\" ? ifBreak(\"\", \"(\") : \"\",\n          align(2, path.call(print, \"consequent\")),\n          n.consequent.type === \"ConditionalExpression\" ? ifBreak(\"\", \")\") : \"\",\n          line,\n          \": \",\n          align(2, path.call(print, \"alternate\"))\n        );\n      }\n\n      // In JSX mode, we want a whole chain of ConditionalExpressions to all\n      // break if any of them break. That means we should only group around the\n      // outer-most ConditionalExpression.\n      const maybeGroup = doc =>\n        jsxMode\n          ? parent === firstNonConditionalParent ? group(doc) : doc\n          : group(doc); // Always group in normal mode.\n\n      return maybeGroup(\n        concat([\n          path.call(print, \"test\"),\n          forceNoIndent ? concat(parts) : indent(concat(parts))\n        ])\n      );\n    }\n    case \"VariableDeclaration\": {\n      const printed = path.map(childPath => {\n        return print(childPath);\n      }, \"declarations\");\n\n      // We generally want to terminate all variable declarations with a\n      // semicolon, except when they in the () part of for loops.\n      const parentNode = path.getParentNode();\n\n      const isParentForLoop =\n        parentNode.type === \"ForStatement\" ||\n        parentNode.type === \"ForInStatement\" ||\n        parentNode.type === \"ForOfStatement\" ||\n        parentNode.type === \"ForAwaitStatement\";\n\n      const hasValue = n.declarations.some(decl => decl.init);\n\n      let firstVariable;\n      if (printed.length === 1) {\n        firstVariable = printed[0];\n      } else if (printed.length > 1) {\n        // Indent first var to comply with eslint one-var rule\n        firstVariable = indent(printed[0]);\n      }\n\n      parts = [\n        isNodeStartingWithDeclare(n, options) ? \"declare \" : \"\",\n        n.kind,\n        firstVariable ? concat([\" \", firstVariable]) : \"\",\n        indent(\n          concat(\n            printed\n              .slice(1)\n              .map(p =>\n                concat([\",\", hasValue && !isParentForLoop ? hardline : line, p])\n              )\n          )\n        )\n      ];\n\n      if (!(isParentForLoop && parentNode.body !== n)) {\n        parts.push(semi);\n      }\n\n      return group(concat(parts));\n    }\n    case \"VariableDeclarator\":\n      return printAssignment(\n        n.id,\n        concat([path.call(print, \"id\"), path.call(print, \"typeParameters\")]),\n        \" =\",\n        n.init,\n        n.init && path.call(print, \"init\"),\n        options,\n        n.type\n      );\n    case \"WithStatement\":\n      return group(\n        concat([\n          \"with (\",\n          path.call(print, \"object\"),\n          \")\",\n          adjustClause(n.body, path.call(print, \"body\"))\n        ])\n      );\n    case \"IfStatement\": {\n      const con = adjustClause(n.consequent, path.call(print, \"consequent\"));\n      const opening = group(\n        concat([\n          \"if (\",\n          group(\n            concat([\n              indent(concat([softline, path.call(print, \"test\")])),\n              softline\n            ])\n          ),\n          \")\",\n          con\n        ])\n      );\n\n      parts.push(opening);\n\n      if (n.alternate) {\n        if (n.consequent.type === \"BlockStatement\") {\n          if (options.breakBeforeElse) {\n            parts.push(hardline, \"else\");\n          } else {\n            parts.push(\" \", \"else\");\n          }\n        } else {\n          parts.push(hardline, \"else\");\n        }\n\n        parts.push(\n          group(\n            adjustClause(\n              n.alternate,\n              path.call(print, \"alternate\"),\n              n.alternate.type === \"IfStatement\"\n            )\n          )\n        );\n      }\n\n      return concat(parts);\n    }\n    case \"ForStatement\": {\n      const body = adjustClause(n.body, path.call(print, \"body\"));\n\n      // We want to keep dangling comments above the loop to stay consistent.\n      // Any comment positioned between the for statement and the parentheses\n      // is going to be printed before the statement.\n      const dangling = comments.printDanglingComments(\n        path,\n        options,\n        /* sameLine */ true\n      );\n      const printedComments = dangling ? concat([dangling, softline]) : \"\";\n\n      if (!n.init && !n.test && !n.update) {\n        return concat([printedComments, group(concat([\"for (;;)\", body]))]);\n      }\n\n      return concat([\n        printedComments,\n        group(\n          concat([\n            \"for (\",\n            group(\n              concat([\n                indent(\n                  concat([\n                    softline,\n                    path.call(print, \"init\"),\n                    \";\",\n                    line,\n                    path.call(print, \"test\"),\n                    \";\",\n                    line,\n                    path.call(print, \"update\")\n                  ])\n                ),\n                softline\n              ])\n            ),\n            \")\",\n            body\n          ])\n        )\n      ]);\n    }\n    case \"WhileStatement\":\n      return group(\n        concat([\n          \"while (\",\n          group(\n            concat([\n              indent(concat([softline, path.call(print, \"test\")])),\n              softline\n            ])\n          ),\n          \")\",\n          adjustClause(n.body, path.call(print, \"body\"))\n        ])\n      );\n    case \"ForInStatement\":\n      // Note: esprima can't actually parse \"for each (\".\n      return group(\n        concat([\n          n.each ? \"for each (\" : \"for (\",\n          path.call(print, \"left\"),\n          \" in \",\n          path.call(print, \"right\"),\n          \")\",\n          adjustClause(n.body, path.call(print, \"body\"))\n        ])\n      );\n\n    case \"ForOfStatement\":\n    case \"ForAwaitStatement\": {\n      // Babylon 7 removed ForAwaitStatement in favor of ForOfStatement\n      // with `\"await\": true`:\n      // https://github.com/estree/estree/pull/138\n      const isAwait = n.type === \"ForAwaitStatement\" || n.await;\n\n      return group(\n        concat([\n          \"for\",\n          isAwait ? \" await\" : \"\",\n          \" (\",\n          path.call(print, \"left\"),\n          \" of \",\n          path.call(print, \"right\"),\n          \")\",\n          adjustClause(n.body, path.call(print, \"body\"))\n        ])\n      );\n    }\n\n    case \"DoWhileStatement\": {\n      const clause = adjustClause(n.body, path.call(print, \"body\"));\n      const doBody = group(concat([\"do\", clause]));\n      parts = [doBody];\n\n      if (n.body.type === \"BlockStatement\") {\n        parts.push(\" \");\n      } else {\n        parts.push(hardline);\n      }\n      parts.push(\"while (\");\n\n      parts.push(\n        group(\n          concat([\n            indent(concat([softline, path.call(print, \"test\")])),\n            softline\n          ])\n        ),\n        \")\",\n        semi\n      );\n\n      return concat(parts);\n    }\n    case \"DoExpression\":\n      return concat([\"do \", path.call(print, \"body\")]);\n    case \"BreakStatement\":\n      parts.push(\"break\");\n\n      if (n.label) {\n        parts.push(\" \", path.call(print, \"label\"));\n      }\n\n      parts.push(semi);\n\n      return concat(parts);\n    case \"ContinueStatement\":\n      parts.push(\"continue\");\n\n      if (n.label) {\n        parts.push(\" \", path.call(print, \"label\"));\n      }\n\n      parts.push(semi);\n\n      return concat(parts);\n    case \"LabeledStatement\":\n      if (n.body.type === \"EmptyStatement\") {\n        return concat([path.call(print, \"label\"), \":;\"]);\n      }\n\n      return concat([\n        path.call(print, \"label\"),\n        \": \",\n        path.call(print, \"body\")\n      ]);\n    case \"TryStatement\":\n      return concat([\n        \"try \",\n        path.call(print, \"block\"),\n        n.handler ? concat([\" \", path.call(print, \"handler\")]) : \"\",\n        n.finalizer ? concat([\" finally \", path.call(print, \"finalizer\")]) : \"\"\n      ]);\n    case \"CatchClause\":\n      return concat([\n        \"catch (\",\n        path.call(print, \"param\"),\n        \") \",\n        path.call(print, \"body\")\n      ]);\n    case \"ThrowStatement\":\n      return concat([\"throw \", path.call(print, \"argument\"), semi]);\n    // Note: ignoring n.lexical because it has no printing consequences.\n    case \"SwitchStatement\":\n      return concat([\n        \"switch (\",\n        path.call(print, \"discriminant\"),\n        \") {\",\n        n.cases.length > 0\n          ? indent(\n              concat([\n                hardline,\n                join(\n                  hardline,\n                  path.map(casePath => {\n                    const caseNode = casePath.getValue();\n                    return concat([\n                      casePath.call(print),\n                      n.cases.indexOf(caseNode) !== n.cases.length - 1 &&\n                      util.isNextLineEmpty(options.originalText, caseNode)\n                        ? hardline\n                        : \"\"\n                    ]);\n                  }, \"cases\")\n                )\n              ])\n            )\n          : \"\",\n        hardline,\n        \"}\"\n      ]);\n    case \"SwitchCase\": {\n      if (n.test) {\n        parts.push(\"case \", path.call(print, \"test\"), \":\");\n      } else {\n        parts.push(\"default:\");\n      }\n\n      const consequent = n.consequent.filter(\n        node => node.type !== \"EmptyStatement\"\n      );\n\n      if (consequent.length > 0) {\n        const cons = path.call(consequentPath => {\n          return printStatementSequence(consequentPath, options, print);\n        }, \"consequent\");\n\n        parts.push(\n          consequent.length === 1 && consequent[0].type === \"BlockStatement\"\n            ? concat([\" \", cons])\n            : indent(concat([hardline, cons]))\n        );\n      }\n\n      return concat(parts);\n    }\n    // JSX extensions below.\n    case \"DebuggerStatement\":\n      return concat([\"debugger\", semi]);\n    case \"JSXAttribute\":\n      parts.push(path.call(print, \"name\"));\n\n      if (n.value) {\n        let res;\n        if (isStringLiteral(n.value)) {\n          const value = rawText(n.value);\n          if (options.jsxSingleQuote) {\n            res = \"'\" + value.slice(1, -1).replace(/'/g, \"&#39;\") + \"'\";\n          } else {\n            res = '\"' + value.slice(1, -1).replace(/\"/g, \"&quot;\") + '\"';\n          }\n        } else {\n          res = path.call(print, \"value\");\n        }\n        parts.push(\"=\", res);\n      }\n\n      return concat(parts);\n    case \"JSXIdentifier\":\n      // Can be removed when this is fixed:\n      // https://github.com/eslint/typescript-eslint-parser/issues/337\n      if (!n.name) {\n        return \"this\";\n      }\n      return \"\" + n.name;\n    case \"JSXNamespacedName\":\n      return join(\":\", [\n        path.call(print, \"namespace\"),\n        path.call(print, \"name\")\n      ]);\n    case \"JSXMemberExpression\":\n      return join(\".\", [\n        path.call(print, \"object\"),\n        path.call(print, \"property\")\n      ]);\n    case \"TSQualifiedName\":\n      return join(\".\", [path.call(print, \"left\"), path.call(print, \"right\")]);\n    case \"JSXSpreadAttribute\":\n      return concat([\"{...\", path.call(print, \"argument\"), \"}\"]);\n    case \"JSXExpressionContainer\": {\n      const parent = path.getParentNode(0);\n\n      const shouldInline =\n        n.expression.type === \"ArrayExpression\" ||\n        n.expression.type === \"ObjectExpression\" ||\n        n.expression.type === \"ArrowFunctionExpression\" ||\n        n.expression.type === \"CallExpression\" ||\n        n.expression.type === \"FunctionExpression\" ||\n        n.expression.type === \"JSXEmptyExpression\" ||\n        n.expression.type === \"TemplateLiteral\" ||\n        n.expression.type === \"TaggedTemplateExpression\" ||\n        (parent.type === \"JSXElement\" &&\n          (n.expression.type === \"ConditionalExpression\" ||\n            isBinaryish(n.expression)));\n\n      if (shouldInline) {\n        return group(\n          concat([\"{\", path.call(print, \"expression\"), lineSuffixBoundary, \"}\"])\n        );\n      }\n\n      return group(\n        concat([\n          \"{\",\n          indent(concat([softline, path.call(print, \"expression\")])),\n          softline,\n          lineSuffixBoundary,\n          \"}\"\n        ])\n      );\n    }\n    case \"JSXElement\": {\n      const elem = comments.printComments(\n        path,\n        () => printJSXElement(path, options, print),\n        options\n      );\n      return maybeWrapJSXElementInParens(path, elem);\n    }\n    case \"JSXOpeningElement\": {\n      const n = path.getValue();\n\n      // don't break up opening elements with a single long text attribute\n      if (\n        n.attributes.length === 1 &&\n        n.attributes[0].value &&\n        isStringLiteral(n.attributes[0].value)\n      ) {\n        return group(\n          concat([\n            \"<\",\n            path.call(print, \"name\"),\n            \" \",\n            concat(path.map(print, \"attributes\")),\n            n.selfClosing ? \" />\" : \">\"\n          ])\n        );\n      }\n\n      return group(\n        concat([\n          \"<\",\n          path.call(print, \"name\"),\n          concat([\n            indent(\n              concat(\n                path.map(attr => concat([line, print(attr)]), \"attributes\")\n              )\n            ),\n            n.selfClosing ? line : options.jsxBracketSameLine ? \">\" : softline\n          ]),\n          n.selfClosing ? \"/>\" : options.jsxBracketSameLine ? \"\" : \">\"\n        ])\n      );\n    }\n    case \"JSXClosingElement\":\n      return concat([\"</\", path.call(print, \"name\"), \">\"]);\n    case \"JSXText\":\n      /* istanbul ignore next */\n      throw new Error(\"JSXTest should be handled by JSXElement\");\n    case \"JSXEmptyExpression\": {\n      const requiresHardline =\n        n.comments && !n.comments.every(util.isBlockComment);\n\n      return concat([\n        comments.printDanglingComments(\n          path,\n          options,\n          /* sameIndent */ !requiresHardline\n        ),\n        requiresHardline ? hardline : \"\"\n      ]);\n    }\n    case \"ClassBody\":\n      if (!n.comments && n.body.length === 0) {\n        return \"{}\";\n      }\n\n      return concat([\n        \"{\",\n        n.body.length > 0\n          ? indent(\n              concat([\n                hardline,\n                path.call(bodyPath => {\n                  return printStatementSequence(bodyPath, options, print);\n                }, \"body\")\n              ])\n            )\n          : comments.printDanglingComments(path, options),\n        hardline,\n        \"}\"\n      ]);\n    case \"ClassProperty\":\n    case \"TSAbstractClassProperty\": {\n      if (n.accessibility) {\n        parts.push(n.accessibility + \" \");\n      }\n      if (n.static) {\n        parts.push(\"static \");\n      }\n      if (n.type === \"TSAbstractClassProperty\") {\n        parts.push(\"abstract \");\n      }\n      if (n.readonly) {\n        parts.push(\"readonly \");\n      }\n      const variance = getFlowVariance(n);\n      if (variance) {\n        parts.push(variance);\n      }\n      if (n.computed) {\n        parts.push(\"[\", path.call(print, \"key\"), \"]\");\n      } else {\n        parts.push(printPropertyKey(path, options, print));\n      }\n      if (n.typeAnnotation) {\n        parts.push(\": \", path.call(print, \"typeAnnotation\"));\n      }\n      if (n.value) {\n        parts.push(\n          \" =\",\n          printAssignmentRight(\n            n.value,\n            path.call(print, \"value\"),\n            false, // canBreak\n            options\n          )\n        );\n      }\n\n      parts.push(semi);\n\n      return concat(parts);\n    }\n    case \"ClassDeclaration\":\n    case \"ClassExpression\":\n    case \"TSAbstractClassDeclaration\":\n      if (isNodeStartingWithDeclare(n, options)) {\n        parts.push(\"declare \");\n      }\n      parts.push(concat(printClass(path, options, print)));\n      return concat(parts);\n    case \"TSInterfaceHeritage\":\n      parts.push(path.call(print, \"id\"));\n\n      if (n.typeParameters) {\n        parts.push(path.call(print, \"typeParameters\"));\n      }\n\n      return concat(parts);\n    case \"TemplateElement\":\n      return join(literalline, n.value.raw.split(/\\r?\\n/g));\n    case \"TemplateLiteral\": {\n      const expressions = path.map(print, \"expressions\");\n\n      parts.push(\"`\");\n\n      path.each(childPath => {\n        const i = childPath.getName();\n\n        parts.push(print(childPath));\n\n        if (i < expressions.length) {\n          // For a template literal of the following form:\n          //   `someQuery {\n          //     ${call({\n          //       a,\n          //       b,\n          //     })}\n          //   }`\n          // the expression is on its own line (there is a \\n in the previous\n          // quasi literal), therefore we want to indent the JavaScript\n          // expression inside at the beginning of ${ instead of the beginning\n          // of the `.\n          let size = 0;\n          const value = childPath.getValue().value.raw;\n          const index = value.lastIndexOf(\"\\n\");\n          const tabWidth = options.tabWidth;\n          if (index !== -1) {\n            size = util.getAlignmentSize(\n              // All the leading whitespaces\n              value.slice(index + 1).match(/^[ \\t]*/)[0],\n              tabWidth\n            );\n          }\n\n          const aligned = addAlignmentToDoc(expressions[i], size, tabWidth);\n\n          parts.push(\"${\", aligned, lineSuffixBoundary, \"}\");\n        }\n      }, \"quasis\");\n\n      parts.push(\"`\");\n\n      return concat(parts);\n    }\n    // These types are unprintable because they serve as abstract\n    // supertypes for other (printable) types.\n    case \"TaggedTemplateExpression\":\n      return concat([path.call(print, \"tag\"), path.call(print, \"quasi\")]);\n    case \"Node\":\n    case \"Printable\":\n    case \"SourceLocation\":\n    case \"Position\":\n    case \"Statement\":\n    case \"Function\":\n    case \"Pattern\":\n    case \"Expression\":\n    case \"Declaration\":\n    case \"Specifier\":\n    case \"NamedSpecifier\":\n    case \"Comment\":\n    case \"MemberTypeAnnotation\": // Flow\n    case \"Type\":\n      /* istanbul ignore next */\n      throw new Error(\"unprintable type: \" + JSON.stringify(n.type));\n    // Type Annotations for Facebook Flow, typically stripped out or\n    // transformed away before printing.\n    case \"TypeAnnotation\":\n      if (n.typeAnnotation) {\n        return path.call(print, \"typeAnnotation\");\n      }\n\n      /* istanbul ignore next */\n      return \"\";\n    case \"TSTupleType\":\n    case \"TupleTypeAnnotation\": {\n      const typesField = n.type === \"TSTupleType\" ? \"elementTypes\" : \"types\";\n      return group(\n        concat([\n          \"[\",\n          indent(\n            concat([\n              softline,\n              printArrayItems(path, options, typesField, print)\n            ])\n          ),\n          // TypeScript doesn't support trailing commas in tuple types\n          n.type === \"TSTupleType\"\n            ? \"\"\n            : ifBreak(shouldPrintComma(options, \"array\") ? \",\" : \"\"),\n          comments.printDanglingComments(path, options, /* sameIndent */ true),\n          softline,\n          \"]\"\n        ])\n      );\n    }\n\n    case \"ExistsTypeAnnotation\":\n      return \"*\";\n    case \"EmptyTypeAnnotation\":\n      return \"empty\";\n    case \"AnyTypeAnnotation\":\n      return \"any\";\n    case \"MixedTypeAnnotation\":\n      return \"mixed\";\n    case \"ArrayTypeAnnotation\":\n      return concat([path.call(print, \"elementType\"), \"[]\"]);\n    case \"BooleanTypeAnnotation\":\n      return \"boolean\";\n    case \"BooleanLiteralTypeAnnotation\":\n      return \"\" + n.value;\n    case \"DeclareClass\":\n      return printFlowDeclaration(path, printClass(path, options, print));\n    case \"DeclareFunction\":\n      // For TypeScript the DeclareFunction node shares the AST\n      // structure with FunctionDeclaration\n      if (n.params) {\n        return concat([\n          \"declare \",\n          printFunctionDeclaration(path, print, options)\n        ]);\n      }\n      return printFlowDeclaration(path, [\n        \"function \",\n        path.call(print, \"id\"),\n        n.predicate ? \" \" : \"\",\n        path.call(print, \"predicate\"),\n        semi\n      ]);\n    case \"DeclareModule\":\n      return printFlowDeclaration(path, [\n        \"module \",\n        path.call(print, \"id\"),\n        \" \",\n        path.call(print, \"body\")\n      ]);\n    case \"DeclareModuleExports\":\n      return printFlowDeclaration(path, [\n        \"module.exports\",\n        \": \",\n        path.call(print, \"typeAnnotation\"),\n        semi\n      ]);\n    case \"DeclareVariable\":\n      return printFlowDeclaration(path, [\"var \", path.call(print, \"id\"), semi]);\n    case \"DeclareExportAllDeclaration\":\n      return concat([\"declare export * from \", path.call(print, \"source\")]);\n    case \"DeclareExportDeclaration\":\n      return concat([\"declare \", printExportDeclaration(path, options, print)]);\n    case \"FunctionTypeAnnotation\":\n    case \"TSFunctionType\": {\n      // FunctionTypeAnnotation is ambiguous:\n      // declare function foo(a: B): void; OR\n      // var A: (a: B) => void;\n      const parent = path.getParentNode(0);\n      const parentParent = path.getParentNode(1);\n      const parentParentParent = path.getParentNode(2);\n      let isArrowFunctionTypeAnnotation =\n        n.type === \"TSFunctionType\" ||\n        !(\n          (parent.type === \"ObjectTypeProperty\" &&\n            !getFlowVariance(parent) &&\n            !parent.optional &&\n            util.locStart(parent) === util.locStart(n)) ||\n          parent.type === \"ObjectTypeCallProperty\" ||\n          (parentParentParent && parentParentParent.type === \"DeclareFunction\")\n        );\n\n      let needsColon =\n        isArrowFunctionTypeAnnotation && parent.type === \"TypeAnnotation\";\n\n      // Sadly we can't put it inside of FastPath::needsColon because we are\n      // printing \":\" as part of the expression and it would put parenthesis\n      // around :(\n      const needsParens =\n        needsColon &&\n        isArrowFunctionTypeAnnotation &&\n        parent.type === \"TypeAnnotation\" &&\n        parentParent.type === \"ArrowFunctionExpression\";\n\n      if (isObjectTypePropertyAFunction(parent)) {\n        isArrowFunctionTypeAnnotation = true;\n        needsColon = true;\n      }\n\n      if (needsParens) {\n        parts.push(\"(\");\n      }\n\n      parts.push(\n        printFunctionParams(\n          path,\n          print,\n          options,\n          /* expandArg */ false,\n          /* printTypeParams */ true\n        )\n      );\n\n      // The returnType is not wrapped in a TypeAnnotation, so the colon\n      // needs to be added separately.\n      if (n.returnType || n.predicate || n.typeAnnotation) {\n        parts.push(\n          isArrowFunctionTypeAnnotation ? \" => \" : \": \",\n          path.call(print, \"returnType\"),\n          path.call(print, \"predicate\"),\n          path.call(print, \"typeAnnotation\")\n        );\n      }\n      if (needsParens) {\n        parts.push(\")\");\n      }\n\n      return group(concat(parts));\n    }\n    case \"FunctionTypeParam\":\n      return concat([\n        path.call(print, \"name\"),\n        n.optional ? \"?\" : \"\",\n        n.name ? \": \" : \"\",\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"GenericTypeAnnotation\":\n      return concat([\n        path.call(print, \"id\"),\n        path.call(print, \"typeParameters\")\n      ]);\n    case \"DeclareInterface\":\n    case \"InterfaceDeclaration\": {\n      if (\n        n.type === \"DeclareInterface\" ||\n        isNodeStartingWithDeclare(n, options)\n      ) {\n        parts.push(\"declare \");\n      }\n\n      parts.push(\n        \"interface \",\n        path.call(print, \"id\"),\n        path.call(print, \"typeParameters\")\n      );\n\n      if (n[\"extends\"].length > 0) {\n        parts.push(\n          group(\n            indent(\n              concat([line, \"extends \", join(\", \", path.map(print, \"extends\"))])\n            )\n          )\n        );\n      }\n\n      parts.push(\" \");\n      parts.push(path.call(print, \"body\"));\n\n      return group(concat(parts));\n    }\n    case \"ClassImplements\":\n    case \"InterfaceExtends\":\n      return concat([\n        path.call(print, \"id\"),\n        path.call(print, \"typeParameters\")\n      ]);\n    case \"TSIntersectionType\":\n    case \"IntersectionTypeAnnotation\": {\n      const types = path.map(print, \"types\");\n      const result = [];\n      for (let i = 0; i < types.length; ++i) {\n        if (i === 0) {\n          result.push(types[i]);\n        } else if (!isObjectType(n.types[i - 1]) && !isObjectType(n.types[i])) {\n          // If no object is involved, go to the next line if it breaks\n          result.push(indent(concat([\" &\", line, types[i]])));\n        } else {\n          // If you go from object to non-object or vis-versa, then inline it\n          result.push(\" & \", i > 1 ? indent(types[i]) : types[i]);\n        }\n      }\n      return group(concat(result));\n    }\n    case \"TSUnionType\":\n    case \"UnionTypeAnnotation\": {\n      // single-line variation\n      // A | B | C\n\n      // multi-line variation\n      // | A\n      // | B\n      // | C\n\n      const parent = path.getParentNode();\n      // If there's a leading comment, the parent is doing the indentation\n      const shouldIndent =\n        parent.type !== \"TypeParameterInstantiation\" &&\n        parent.type !== \"GenericTypeAnnotation\" &&\n        !(\n          (parent.type === \"TypeAlias\" ||\n            parent.type === \"VariableDeclarator\") &&\n          hasLeadingOwnLineComment(options.originalText, n)\n        );\n\n      // {\n      //   a: string\n      // } | null | void\n      // should be inlined and not be printed in the multi-line variant\n      const shouldHug = shouldHugType(n);\n\n      // We want to align the children but without its comment, so it looks like\n      // | child1\n      // // comment\n      // | child2\n      const printed = path.map(typePath => {\n        let printedType = typePath.call(print);\n        if (!shouldHug && shouldIndent) {\n          printedType = align(2, printedType);\n        }\n        return comments.printComments(typePath, () => printedType, options);\n      }, \"types\");\n\n      if (shouldHug) {\n        return join(\" | \", printed);\n      }\n\n      const code = concat([\n        ifBreak(concat([shouldIndent ? line : \"\", \"| \"])),\n        join(concat([line, \"| \"]), printed)\n      ]);\n\n      return group(shouldIndent ? indent(code) : code);\n    }\n    case \"NullableTypeAnnotation\":\n      return concat([\"?\", path.call(print, \"typeAnnotation\")]);\n    case \"TSNullKeyword\":\n    case \"NullLiteralTypeAnnotation\":\n      return \"null\";\n    case \"ThisTypeAnnotation\":\n      return \"this\";\n    case \"NumberTypeAnnotation\":\n      return \"number\";\n    case \"ObjectTypeCallProperty\":\n      if (n.static) {\n        parts.push(\"static \");\n      }\n\n      parts.push(path.call(print, \"value\"));\n\n      return concat(parts);\n    case \"ObjectTypeIndexer\": {\n      const variance = getFlowVariance(n);\n      return concat([\n        variance || \"\",\n        \"[\",\n        path.call(print, \"id\"),\n        n.id ? \": \" : \"\",\n        path.call(print, \"key\"),\n        \"]: \",\n        path.call(print, \"value\")\n      ]);\n    }\n    case \"ObjectTypeProperty\": {\n      const variance = getFlowVariance(n);\n\n      return concat([\n        n.static ? \"static \" : \"\",\n        isGetterOrSetter(n) ? n.kind + \" \" : \"\",\n        variance || \"\",\n        path.call(print, \"key\"),\n        n.optional ? \"?\" : \"\",\n        isFunctionNotation(n) ? \"\" : \": \",\n        path.call(print, \"value\")\n      ]);\n    }\n    case \"QualifiedTypeIdentifier\":\n      return concat([\n        path.call(print, \"qualification\"),\n        \".\",\n        path.call(print, \"id\")\n      ]);\n    case \"StringLiteralTypeAnnotation\":\n      return nodeStr(n, options);\n    case \"NumberLiteralTypeAnnotation\":\n      assert.strictEqual(typeof n.value, \"number\");\n\n      if (n.extra != null) {\n        return printNumber(n.extra.raw);\n      }\n      return printNumber(n.raw);\n\n    case \"StringTypeAnnotation\":\n      return \"string\";\n    case \"DeclareTypeAlias\":\n    case \"TypeAlias\": {\n      if (\n        n.type === \"DeclareTypeAlias\" ||\n        isNodeStartingWithDeclare(n, options)\n      ) {\n        parts.push(\"declare \");\n      }\n\n      const canBreak = n.right.type === \"StringLiteralTypeAnnotation\";\n\n      const printed = printAssignmentRight(\n        n.right,\n        path.call(print, \"right\"),\n        canBreak,\n        options\n      );\n\n      parts.push(\n        \"type \",\n        path.call(print, \"id\"),\n        path.call(print, \"typeParameters\"),\n        \" =\",\n        printed,\n        semi\n      );\n\n      return group(concat(parts));\n    }\n    case \"TypeCastExpression\":\n      return concat([\n        \"(\",\n        path.call(print, \"expression\"),\n        \": \",\n        path.call(print, \"typeAnnotation\"),\n        \")\"\n      ]);\n    case \"TypeParameterDeclaration\":\n    case \"TypeParameterInstantiation\":\n      return printTypeParameters(path, options, print, \"params\");\n    case \"TypeParameter\": {\n      const variance = getFlowVariance(n);\n\n      if (variance) {\n        parts.push(variance);\n      }\n\n      parts.push(path.call(print, \"name\"));\n\n      if (n.bound) {\n        parts.push(\": \");\n        parts.push(path.call(print, \"bound\"));\n      }\n\n      if (n.constraint) {\n        parts.push(\" extends \", path.call(print, \"constraint\"));\n      }\n\n      if (n[\"default\"]) {\n        parts.push(\" = \", path.call(print, \"default\"));\n      }\n\n      return concat(parts);\n    }\n    case \"TypeofTypeAnnotation\":\n      return concat([\"typeof \", path.call(print, \"argument\")]);\n    case \"VoidTypeAnnotation\":\n      return \"void\";\n    case \"InferredPredicate\":\n      return \"%checks\";\n    // Unhandled types below. If encountered, nodes of these types should\n    // be either left alone or desugared into AST types that are fully\n    // supported by the pretty-printer.\n    case \"DeclaredPredicate\":\n      return concat([\"%checks(\", path.call(print, \"value\"), \")\"]);\n    case \"TSAbstractKeyword\":\n      return \"abstract\";\n    case \"TSAnyKeyword\":\n      return \"any\";\n    case \"TSAsyncKeyword\":\n      return \"async\";\n    case \"TSBooleanKeyword\":\n      return \"boolean\";\n    case \"TSConstKeyword\":\n      return \"const\";\n    case \"TSDeclareKeyword\":\n      return \"declare\";\n    case \"TSExportKeyword\":\n      return \"export\";\n    case \"TSNeverKeyword\":\n      return \"never\";\n    case \"TSNumberKeyword\":\n      return \"number\";\n    case \"TSObjectKeyword\":\n      return \"object\";\n    case \"TSProtectedKeyword\":\n      return \"protected\";\n    case \"TSPrivateKeyword\":\n      return \"private\";\n    case \"TSPublicKeyword\":\n      return \"public\";\n    case \"TSReadonlyKeyword\":\n      return \"readonly\";\n    case \"TSSymbolKeyword\":\n      return \"symbol\";\n    case \"TSStaticKeyword\":\n      return \"static\";\n    case \"TSStringKeyword\":\n      return \"string\";\n    case \"TSUndefinedKeyword\":\n      return \"undefined\";\n    case \"TSVoidKeyword\":\n      return \"void\";\n    case \"TSAsExpression\":\n      return concat([\n        path.call(print, \"expression\"),\n        \" as \",\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"TSArrayType\":\n      return concat([path.call(print, \"elementType\"), \"[]\"]);\n    case \"TSPropertySignature\": {\n      if (n.export) {\n        parts.push(\"export \");\n      }\n      if (n.accessibility) {\n        parts.push(n.accessibility + \" \");\n      }\n      if (n.static) {\n        parts.push(\"static \");\n      }\n      if (n.readonly) {\n        parts.push(\"readonly \");\n      }\n      if (n.computed) {\n        parts.push(\"[\");\n      }\n\n      parts.push(path.call(print, \"key\"));\n\n      if (n.computed) {\n        parts.push(\"]\");\n      }\n      if (n.optional) {\n        parts.push(\"?\");\n      }\n      if (n.typeAnnotation) {\n        parts.push(\": \");\n        parts.push(path.call(print, \"typeAnnotation\"));\n      }\n\n      // This isn't valid semantically, but it's in the AST so we can print it.\n      if (n.initializer) {\n        parts.push(\" = \", path.call(print, \"initializer\"));\n      }\n\n      return concat(parts);\n    }\n    case \"TSParameterProperty\":\n      if (n.accessibility) {\n        parts.push(n.accessibility + \" \");\n      }\n      if (n.export) {\n        parts.push(\"export \");\n      }\n      if (n.static) {\n        parts.push(\"static \");\n      }\n      if (n.readonly) {\n        parts.push(\"readonly \");\n      }\n\n      parts.push(path.call(print, \"parameter\"));\n\n      return concat(parts);\n    case \"TSTypeReference\":\n      return concat([\n        path.call(print, \"typeName\"),\n        printTypeParameters(path, options, print, \"typeParameters\")\n      ]);\n    case \"TSTypeQuery\":\n      return concat([\"typeof \", path.call(print, \"exprName\")]);\n    case \"TSParenthesizedType\": {\n      return path.call(print, \"typeAnnotation\");\n    }\n    case \"TSIndexSignature\": {\n      const parent = path.getParentNode();\n\n      return concat([\n        n.export ? \"export \" : \"\",\n        n.accessibility ? concat([n.accessibility, \" \"]) : \"\",\n        n.static ? \"static \" : \"\",\n        n.readonly ? \"readonly \" : \"\",\n        \"[\",\n        path.call(print, \"index\"),\n        \"]: \",\n        path.call(print, \"typeAnnotation\"),\n        parent.type === \"ClassBody\" ? semi : \"\"\n      ]);\n    }\n    case \"TSTypePredicate\":\n      return concat([\n        path.call(print, \"parameterName\"),\n        \" is \",\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"TSNonNullExpression\":\n      return concat([path.call(print, \"expression\"), \"!\"]);\n    case \"TSThisType\":\n      return \"this\";\n    case \"TSLastTypeNode\":\n      return path.call(print, \"literal\");\n    case \"TSIndexedAccessType\":\n      return concat([\n        path.call(print, \"objectType\"),\n        \"[\",\n        path.call(print, \"indexType\"),\n        \"]\"\n      ]);\n    case \"TSConstructSignature\":\n    case \"TSConstructorType\":\n    case \"TSCallSignature\": {\n      if (n.type !== \"TSCallSignature\") {\n        parts.push(\"new \");\n      }\n\n      parts.push(\n        group(\n          printFunctionParams(\n            path,\n            print,\n            options,\n            /* expandArg */ false,\n            /* printTypeParams */ true\n          )\n        )\n      );\n\n      if (n.typeAnnotation) {\n        const isType = n.type === \"TSConstructorType\";\n        parts.push(isType ? \" => \" : \": \", path.call(print, \"typeAnnotation\"));\n      }\n      return concat(parts);\n    }\n    case \"TSTypeOperator\":\n      return concat([\"keyof \", path.call(print, \"typeAnnotation\")]);\n    case \"TSMappedType\":\n      return group(\n        concat([\n          \"{\",\n          indent(\n            concat([\n              options.bracesSpacing ? line : softline,\n              n.readonlyToken\n                ? concat([path.call(print, \"readonlyToken\"), \" \"])\n                : \"\",\n              printTypeScriptModifiers(path, options, print),\n              \"[\",\n              path.call(print, \"typeParameter\"),\n              \"]\",\n              n.questionToken ? \"?\" : \"\",\n              \": \",\n              path.call(print, \"typeAnnotation\")\n            ])\n          ),\n          comments.printDanglingComments(path, options, /* sameIndent */ true),\n          options.bracesSpacing ? line : softline,\n          \"}\"\n        ])\n      );\n    case \"TSTypeParameter\":\n      parts.push(path.call(print, \"name\"));\n\n      if (n.constraint) {\n        parts.push(\" in \", path.call(print, \"constraint\"));\n      }\n\n      return concat(parts);\n    case \"TSMethodSignature\":\n      parts.push(\n        n.accessibility ? concat([n.accessibility, \" \"]) : \"\",\n        n.export ? \"export \" : \"\",\n        n.static ? \"static \" : \"\",\n        n.readonly ? \"readonly \" : \"\",\n        n.computed ? \"[\" : \"\",\n        path.call(print, \"key\"),\n        n.computed ? \"]\" : \"\",\n        n.optional ? \"?\" : \"\",\n        printFunctionParams(\n          path,\n          print,\n          options,\n          /* expandArg */ false,\n          /* printTypeParams */ true\n        )\n      );\n\n      if (n.typeAnnotation) {\n        parts.push(\": \", path.call(print, \"typeAnnotation\"));\n      }\n      return group(concat(parts));\n    case \"TSNamespaceExportDeclaration\":\n      parts.push(\"export as namespace \", path.call(print, \"name\"));\n\n      if (options.semi) {\n        parts.push(\";\");\n      }\n\n      return group(concat(parts));\n    case \"TSEnumDeclaration\":\n      if (n.modifiers) {\n        parts.push(printTypeScriptModifiers(path, options, print));\n      }\n\n      parts.push(\"enum \", path.call(print, \"name\"), \" \");\n\n      if (n.members.length === 0) {\n        parts.push(\n          group(\n            concat([\n              \"{\",\n              comments.printDanglingComments(path, options),\n              softline,\n              \"}\"\n            ])\n          )\n        );\n      } else {\n        parts.push(\n          group(\n            concat([\n              \"{\",\n              indent(\n                concat([\n                  hardline, //options.bracesSpacing\n                  printArrayItems(path, options, \"members\", print),\n                  shouldPrintComma(options, \"object\") ? \",\" : \"\"\n                ])\n              ),\n              comments.printDanglingComments(\n                path,\n                options,\n                /* sameIndent */ true\n              ),\n              hardline, //options.bracesSpacing\n              \"}\"\n            ])\n          )\n        );\n      }\n\n      return concat(parts);\n    case \"TSEnumMember\":\n      parts.push(path.call(print, \"name\"));\n      if (n.initializer) {\n        parts.push(\" = \", path.call(print, \"initializer\"));\n      }\n      return concat(parts);\n    case \"TSImportEqualsDeclaration\":\n      parts.push(\n        printTypeScriptModifiers(path, options, print),\n        \"import \",\n        path.call(print, \"name\"),\n        \" = \",\n        path.call(print, \"moduleReference\")\n      );\n\n      if (options.semi) {\n        parts.push(\";\");\n      }\n\n      return group(concat(parts));\n    case \"TSExternalModuleReference\":\n      return concat([\"require(\", path.call(print, \"expression\"), \")\"]);\n    case \"TSModuleDeclaration\": {\n      const parent = path.getParentNode();\n      const isExternalModule = isLiteral(n.name);\n      const parentIsDeclaration = parent.type === \"TSModuleDeclaration\";\n      const bodyIsDeclaration = n.body && n.body.type === \"TSModuleDeclaration\";\n\n      if (parentIsDeclaration) {\n        parts.push(\".\");\n      } else {\n        parts.push(printTypeScriptModifiers(path, options, print));\n\n        // Global declaration looks like this:\n        // (declare)? global { ... }\n        const isGlobalDeclaration =\n          n.name.type === \"Identifier\" &&\n          n.name.name === \"global\" &&\n          !/namespace|module/.test(\n            options.originalText.slice(util.locStart(n), util.locStart(n.name))\n          );\n\n        if (!isGlobalDeclaration) {\n          parts.push(isExternalModule ? \"module \" : \"namespace \");\n        }\n      }\n\n      parts.push(path.call(print, \"name\"));\n\n      if (bodyIsDeclaration) {\n        parts.push(path.call(print, \"body\"));\n      } else if (n.body) {\n        parts.push(\n          \" {\",\n          indent(\n            concat([\n              line,\n              path.call(\n                bodyPath =>\n                  comments.printDanglingComments(bodyPath, options, true),\n                \"body\"\n              ),\n              group(path.call(print, \"body\"))\n            ])\n          ),\n          line,\n          \"}\"\n        );\n      } else {\n        parts.push(semi);\n      }\n\n      return concat(parts);\n    }\n    case \"TSModuleBlock\":\n      return path.call(bodyPath => {\n        return printStatementSequence(bodyPath, options, print);\n      }, \"body\");\n    case \"json-identifier\":\n      return '\"' + n.value + '\"';\n\n    default:\n      /* istanbul ignore next */\n      throw new Error(\"unknown type: \" + JSON.stringify(n.type));\n  }\n}\n\nfunction printStatementSequence(path, options, print) {\n  const printed = [];\n\n  const bodyNode = path.getNode();\n  const isClass = bodyNode.type === \"ClassBody\";\n\n  path.map((stmtPath, i) => {\n    const stmt = stmtPath.getValue();\n\n    // Just in case the AST has been modified to contain falsy\n    // \"statements,\" it's safer simply to skip them.\n    /* istanbul ignore if */\n    if (!stmt) {\n      return;\n    }\n\n    // Skip printing EmptyStatement nodes to avoid leaving stray\n    // semicolons lying around.\n    if (stmt.type === \"EmptyStatement\") {\n      return;\n    }\n\n    const stmtPrinted = print(stmtPath);\n    const text = options.originalText;\n    const parts = [];\n\n    // in no-semi mode, prepend statement with semicolon if it might break ASI\n    if (\n      !options.semi &&\n      !isClass &&\n      stmtNeedsASIProtection(stmtPath, options)\n    ) {\n      if (stmt.comments && stmt.comments.some(comment => comment.leading)) {\n        // Note: stmtNeedsASIProtection requires stmtPath to already be printed\n        // as it reads needsParens which is mutated on the instance\n        parts.push(print(stmtPath, { needsSemi: true }));\n      } else {\n        parts.push(\";\", stmtPrinted);\n      }\n    } else {\n      parts.push(stmtPrinted);\n    }\n\n    if (!options.semi && isClass) {\n      if (classPropMayCauseASIProblems(stmtPath)) {\n        parts.push(\";\");\n      } else if (stmt.type === \"ClassProperty\") {\n        const nextChild = bodyNode.body[i + 1];\n        if (classChildNeedsASIProtection(nextChild)) {\n          parts.push(\";\");\n        }\n      }\n    }\n\n    if (util.isNextLineEmpty(text, stmt) && !isLastStatement(stmtPath)) {\n      parts.push(hardline);\n    }\n\n    printed.push(concat(parts));\n  });\n\n  return join(hardline, printed);\n}\n\nfunction printPropertyKey(path, options, print) {\n  const node = path.getNode();\n  const key = node.key;\n\n  if (isStringLiteral(key) && isIdentifierName(key.value) && !node.computed) {\n    // 'a' -> a\n    return path.call(\n      keyPath => comments.printComments(keyPath, () => key.value, options),\n      \"key\"\n    );\n  }\n  return path.call(print, \"key\");\n}\n\nfunction printMethod(path, options, print) {\n  const node = path.getNode();\n  const semi = options.semi ? \";\" : \"\";\n  const kind = node.kind;\n  const parts = [];\n\n  if (node.type === \"ObjectMethod\" || node.type === \"ClassMethod\") {\n    node.value = node;\n  }\n\n  if (node.value.async) {\n    parts.push(\"async \");\n  }\n\n  if (!kind || kind === \"init\" || kind === \"method\" || kind === \"constructor\") {\n    if (node.value.generator) {\n      parts.push(\"*\");\n    }\n  } else {\n    assert.ok(kind === \"get\" || kind === \"set\");\n\n    parts.push(kind, \" \");\n  }\n\n  let key = printPropertyKey(path, options, print);\n\n  if (node.computed) {\n    key = concat([\"[\", key, \"]\"]);\n  }\n\n  parts.push(\n    key,\n    concat(\n      path.call(\n        valuePath => [\n          printFunctionTypeParameters(valuePath, options, print),\n          group(\n            concat([\n              options.spaceBeforeFunctionParen ? \" \" : \"\",\n              printFunctionParams(valuePath, print, options),\n              printReturnType(valuePath, print)\n            ])\n          )\n        ],\n        \"value\"\n      )\n    )\n  );\n\n  if (!node.value.body || node.value.body.length === 0) {\n    parts.push(semi);\n  } else {\n    parts.push(\" \", path.call(print, \"value\", \"body\"));\n  }\n\n  return concat(parts);\n}\n\nfunction couldGroupArg(arg) {\n  return (\n    (arg.type === \"ObjectExpression\" && arg.properties.length > 0) ||\n    (arg.type === \"ArrayExpression\" && arg.elements.length > 0) ||\n    arg.type === \"TSTypeAssertionExpression\" ||\n    arg.type === \"TSAsExpression\" ||\n    arg.type === \"FunctionExpression\" ||\n    (arg.type === \"ArrowFunctionExpression\" &&\n      (arg.body.type === \"BlockStatement\" ||\n        arg.body.type === \"ArrowFunctionExpression\" ||\n        arg.body.type === \"ObjectExpression\" ||\n        arg.body.type === \"ArrayExpression\" ||\n        arg.body.type === \"CallExpression\" ||\n        arg.body.type === \"JSXElement\"))\n  );\n}\n\nfunction shouldGroupLastArg(args) {\n  const lastArg = util.getLast(args);\n  const penultimateArg = util.getPenultimate(args);\n  return (\n    (!lastArg.comments || !lastArg.comments.length) &&\n    couldGroupArg(lastArg) &&\n    // If the last two arguments are of the same type,\n    // disable last element expansion.\n    (!penultimateArg || penultimateArg.type !== lastArg.type)\n  );\n}\n\nfunction shouldGroupFirstArg(args) {\n  if (args.length !== 2) {\n    return false;\n  }\n\n  const firstArg = args[0];\n  const secondArg = args[1];\n  return (\n    (!firstArg.comments || !firstArg.comments.length) &&\n    (firstArg.type === \"FunctionExpression\" ||\n      (firstArg.type === \"ArrowFunctionExpression\" &&\n        firstArg.body.type === \"BlockStatement\")) &&\n    !couldGroupArg(secondArg)\n  );\n}\n\nfunction printArgumentsList(path, options, print) {\n  const printed = path.map(print, \"arguments\");\n  if (printed.length === 0) {\n    return concat([\n      \"(\",\n      comments.printDanglingComments(path, options, /* sameIndent */ true),\n      \")\"\n    ]);\n  }\n\n  const args = path.getValue().arguments;\n\n  // This is just an optimization; I think we could return the\n  // conditional group for all function calls, but it's more expensive\n  // so only do it for specific forms.\n  const shouldGroupFirst = shouldGroupFirstArg(args);\n  const shouldGroupLast = shouldGroupLastArg(args);\n  if (shouldGroupFirst || shouldGroupLast) {\n    const shouldBreak = shouldGroupFirst\n      ? printed.slice(1).some(willBreak)\n      : printed.slice(0, -1).some(willBreak);\n\n    // We want to print the last argument with a special flag\n    let printedExpanded;\n    let i = 0;\n    path.each(argPath => {\n      if (shouldGroupFirst && i === 0) {\n        printedExpanded = [\n          argPath.call(p => print(p, { expandFirstArg: true }))\n        ].concat(printed.slice(1));\n      }\n      if (shouldGroupLast && i === args.length - 1) {\n        printedExpanded = printed\n          .slice(0, -1)\n          .concat(argPath.call(p => print(p, { expandLastArg: true })));\n      }\n      i++;\n    }, \"arguments\");\n\n    return concat([\n      printed.some(willBreak) ? breakParent : \"\",\n      conditionalGroup(\n        [\n          concat([\"(\", join(concat([\", \"]), printedExpanded), \")\"]),\n          shouldGroupFirst\n            ? concat([\n                \"(\",\n                group(printedExpanded[0], { shouldBreak: true }),\n                printed.length > 1 ? \", \" : \"\",\n                join(concat([\",\", line]), printed.slice(1)),\n                \")\"\n              ])\n            : concat([\n                \"(\",\n                join(concat([\",\", line]), printed.slice(0, -1)),\n                printed.length > 1 ? \", \" : \"\",\n                group(util.getLast(printedExpanded), {\n                  shouldBreak: true\n                }),\n                \")\"\n              ]),\n          group(\n            concat([\n              \"(\",\n              indent(concat([line, join(concat([\",\", line]), printed)])),\n              shouldPrintComma(options, \"arguments\") ? \",\" : \"\",\n              line,\n              \")\"\n            ]),\n            { shouldBreak: true }\n          )\n        ],\n        { shouldBreak }\n      )\n    ]);\n  }\n\n  return group(\n    concat([\n      \"(\",\n      indent(concat([softline, join(concat([\",\", line]), printed)])),\n      ifBreak(shouldPrintComma(options, \"arguments\") ? \",\" : \"\"),\n      softline,\n      \")\"\n    ]),\n    { shouldBreak: printed.some(willBreak) }\n  );\n}\n\nfunction printFunctionTypeParameters(path, options, print) {\n  const fun = path.getValue();\n  if (fun.typeParameters) {\n    return path.call(print, \"typeParameters\");\n  }\n  return \"\";\n}\n\nfunction printFunctionParams(path, print, options, expandArg, printTypeParams) {\n  const fun = path.getValue();\n  const paramsField = fun.parameters ? \"parameters\" : \"params\";\n\n  const typeParams = printTypeParams\n    ? printFunctionTypeParameters(path, options, print)\n    : \"\";\n\n  let printed = [];\n  if (fun[paramsField]) {\n    printed = path.map(print, paramsField);\n  }\n\n  if (fun.rest) {\n    printed.push(concat([\"...\", path.call(print, \"rest\")]));\n  }\n\n  if (printed.length === 0) {\n    return concat([\n      typeParams,\n      \"(\",\n      comments.printDanglingComments(path, options, /* sameIndent */ true),\n      \")\"\n    ]);\n  }\n\n  const lastParam = util.getLast(fun[paramsField]);\n\n  // If the parent is a call with the first/last argument expansion and this is the\n  // params of the first/last argument, we dont want the arguments to break and instead\n  // want the whole expression to be on a new line.\n  //\n  // Good:                 Bad:\n  //   verylongcall(         verylongcall((\n  //     (a, b) => {           a,\n  //     }                     b,\n  //   })                    ) => {\n  //                         })\n  if (\n    expandArg &&\n    !(fun[paramsField] && fun[paramsField].some(n => n.comments))\n  ) {\n    return group(\n      concat([\n        docUtils.removeLines(typeParams),\n        \"(\",\n        join(\", \", printed.map(docUtils.removeLines)),\n        \")\"\n      ])\n    );\n  }\n\n  // Single object destructuring should hug\n  //\n  // function({\n  //   a,\n  //   b,\n  //   c\n  // }) {}\n  if (shouldHugArguments(fun)) {\n    return concat([typeParams, \"(\", join(\", \", printed), \")\"]);\n  }\n\n  const parent = path.getParentNode();\n\n  const flowTypeAnnotations = [\n    \"AnyTypeAnnotation\",\n    \"NullLiteralTypeAnnotation\",\n    \"GenericTypeAnnotation\",\n    \"ThisTypeAnnotation\",\n    \"NumberTypeAnnotation\",\n    \"VoidTypeAnnotation\",\n    \"EmptyTypeAnnotation\",\n    \"MixedTypeAnnotation\",\n    \"BooleanTypeAnnotation\",\n    \"BooleanLiteralTypeAnnotation\",\n    \"StringTypeAnnotation\"\n  ];\n\n  const isFlowShorthandWithOneArg =\n    (isObjectTypePropertyAFunction(parent) ||\n      isTypeAnnotationAFunction(parent) ||\n      parent.type === \"TypeAlias\" ||\n      parent.type === \"UnionTypeAnnotation\" ||\n      parent.type === \"TSUnionType\" ||\n      parent.type === \"IntersectionTypeAnnotation\" ||\n      (parent.type === \"FunctionTypeAnnotation\" &&\n        parent.returnType === fun)) &&\n    fun[paramsField].length === 1 &&\n    fun[paramsField][0].name === null &&\n    fun[paramsField][0].typeAnnotation &&\n    fun.typeParameters === null &&\n    flowTypeAnnotations.indexOf(fun[paramsField][0].typeAnnotation.type) !==\n      -1 &&\n    !(\n      fun[paramsField][0].typeAnnotation.type === \"GenericTypeAnnotation\" &&\n      fun[paramsField][0].typeAnnotation.typeParameters\n    ) &&\n    !fun.rest;\n\n  if (isFlowShorthandWithOneArg) {\n    return concat(printed);\n  }\n\n  const canHaveTrailingComma =\n    !(lastParam && lastParam.type === \"RestElement\") && !fun.rest;\n\n  return concat([\n    typeParams,\n    \"(\",\n    indent(concat([softline, join(concat([\",\", line]), printed)])),\n    ifBreak(\n      canHaveTrailingComma && shouldPrintComma(options, \"arguments\") ? \",\" : \"\"\n    ),\n    softline,\n    \")\"\n  ]);\n}\n\nfunction canPrintParamsWithoutParens(node, options) {\n  return (\n    node.params.length === 1 &&\n    !node.rest &&\n    !node.typeParameters &&\n    node.params[0].type === \"Identifier\" &&\n    !node.params[0].typeAnnotation &&\n    !node.params[0].comments &&\n    !node.params[0].optional &&\n    !node.predicate &&\n    !node.returnType &&\n    !options.arrowParens\n  );\n}\n\nfunction printFunctionDeclaration(path, print, options) {\n  const n = path.getValue();\n  const parts = [];\n\n  if (n.async) {\n    parts.push(\"async \");\n  }\n\n  parts.push(\"function\");\n\n  if (n.generator) {\n    parts.push(\"*\");\n  }\n  if (n.id) {\n    parts.push(\" \", path.call(print, \"id\"));\n  }\n\n  parts.push(\n    printFunctionTypeParameters(path, options, print),\n    group(\n      concat([\n        options.spaceBeforeFunctionParen ? \" \" : \"\",\n        printFunctionParams(path, print, options),\n        printReturnType(path, print)\n      ])\n    ),\n    options.noSpaceEmptyFn ? \"\" : n.body ? \" \" : \"\",\n    //options.noSpaceEmptyFn ? \"\" : \" \",\n    path.call(print, \"body\")\n  );\n\n  return concat(parts);\n}\n\nfunction printObjectMethod(path, options, print) {\n  const objMethod = path.getValue();\n  const parts = [];\n\n  if (objMethod.async) {\n    parts.push(\"async \");\n  }\n  if (objMethod.generator) {\n    parts.push(\"*\");\n  }\n  if (\n    objMethod.method ||\n    objMethod.kind === \"get\" ||\n    objMethod.kind === \"set\"\n  ) {\n    return printMethod(path, options, print);\n  }\n\n  const key = printPropertyKey(path, options, print);\n\n  if (objMethod.computed) {\n    parts.push(\"[\", key, \"]\");\n  } else {\n    parts.push(key);\n  }\n\n  parts.push(\n    printFunctionTypeParameters(path, options, print),\n    group(\n      concat([\n        options.spaceBeforeFunctionParen ? \" \" : \"\",\n        printFunctionParams(path, print, options),\n        printReturnType(path, print)\n      ])\n    ),\n    \" \",\n    path.call(print, \"body\")\n  );\n\n  return concat(parts);\n}\n\nfunction printReturnType(path, print) {\n  const n = path.getValue();\n  const parts = [path.call(print, \"returnType\")];\n\n  // prepend colon to TypeScript type annotation\n  if (n.returnType && n.returnType.typeAnnotation) {\n    parts.unshift(\": \");\n  }\n\n  if (n.predicate) {\n    // The return type will already add the colon, but otherwise we\n    // need to do it ourselves\n    parts.push(n.returnType ? \" \" : \": \", path.call(print, \"predicate\"));\n  }\n\n  return concat(parts);\n}\n\nfunction printExportDeclaration(path, options, print) {\n  const decl = path.getValue();\n  const semi = options.semi ? \";\" : \"\";\n  const parts = [\"export \"];\n\n  if (decl[\"default\"] || decl.type === \"ExportDefaultDeclaration\") {\n    parts.push(\"default \");\n  }\n\n  parts.push(\n    comments.printDanglingComments(path, options, /* sameIndent */ true)\n  );\n\n  if (decl.declaration) {\n    parts.push(path.call(print, \"declaration\"));\n\n    if (\n      decl.type === \"ExportDefaultDeclaration\" &&\n      (decl.declaration.type !== \"ClassDeclaration\" &&\n        decl.declaration.type !== \"FunctionDeclaration\" &&\n        decl.declaration.type !== \"TSAbstractClassDeclaration\" &&\n        decl.declaration.type !== \"TSNamespaceFunctionDeclaration\")\n    ) {\n      parts.push(semi);\n    }\n  } else {\n    if (decl.specifiers && decl.specifiers.length > 0) {\n      const specifiers = [];\n      const defaultSpecifiers = [];\n      const namespaceSpecifiers = [];\n      path.each(specifierPath => {\n        const specifierType = path.getValue().type;\n        if (specifierType === \"ExportSpecifier\") {\n          specifiers.push(print(specifierPath));\n        } else if (specifierType === \"ExportDefaultSpecifier\") {\n          defaultSpecifiers.push(print(specifierPath));\n        } else if (specifierType === \"ExportNamespaceSpecifier\") {\n          namespaceSpecifiers.push(concat([\"* as \", print(specifierPath)]));\n        }\n      }, \"specifiers\");\n\n      const isNamespaceFollowed =\n        namespaceSpecifiers.length !== 0 &&\n        (specifiers.length !== 0 || defaultSpecifiers.length !== 0);\n      const isDefaultFollowed =\n        defaultSpecifiers.length !== 0 && specifiers.length !== 0;\n\n      parts.push(\n        decl.exportKind === \"type\" ? \"type \" : \"\",\n        concat(namespaceSpecifiers),\n        concat([isNamespaceFollowed ? \", \" : \"\"]),\n        concat(defaultSpecifiers),\n        concat([isDefaultFollowed ? \", \" : \"\"]),\n        specifiers.length !== 0\n          ? group(\n              concat([\n                \"{\",\n                indent(\n                  concat([\n                    options.bracesSpacing ? line : softline,\n                    join(concat([\",\", line]), specifiers)\n                  ])\n                ),\n                ifBreak(shouldPrintComma(options, \"export\") ? \",\" : \"\"),\n                options.bracesSpacing ? line : softline,\n                \"}\"\n              ])\n            )\n          : \"\"\n      );\n\n    } else {\n      parts.push(\"{}\");\n    }\n\n    if (decl.source) {\n      parts.push(\" from \", path.call(print, \"source\"));\n    }\n\n    parts.push(semi);\n  }\n\n  return concat(parts);\n}\n\nfunction printFlowDeclaration(path, parts) {\n  const parentExportDecl = util.getParentExportDeclaration(path);\n\n  if (parentExportDecl) {\n    assert.strictEqual(parentExportDecl.type, \"DeclareExportDeclaration\");\n  } else {\n    // If the parent node has type DeclareExportDeclaration, then it\n    // will be responsible for printing the \"declare\" token. Otherwise\n    // it needs to be printed with this non-exported declaration node.\n    parts.unshift(\"declare \");\n  }\n\n  return concat(parts);\n}\n\nfunction getFlowVariance(path) {\n  if (!path.variance) {\n    return null;\n  }\n\n  // Babylon 7.0 currently uses variance node type, and flow should\n  // follow suit soon:\n  // https://github.com/babel/babel/issues/4722\n  const variance = path.variance.kind || path.variance;\n\n  switch (variance) {\n    case \"plus\":\n      return \"+\";\n    case \"minus\":\n      return \"-\";\n    default:\n      /* istanbul ignore next */\n      return variance;\n  }\n}\n\nfunction printTypeScriptModifiers(path, options, print) {\n  const n = path.getValue();\n  if (!n.modifiers || !n.modifiers.length) {\n    return \"\";\n  }\n  return concat([join(\" \", path.map(print, \"modifiers\")), \" \"]);\n}\n\nfunction printTypeParameters(path, options, print, paramsKey) {\n  const n = path.getValue();\n\n  if (!n[paramsKey]) {\n    return \"\";\n  }\n\n  // for TypeParameterDeclaration typeParameters is a single node\n  if (!Array.isArray(n[paramsKey])) {\n    return path.call(print, paramsKey);\n  }\n\n  const shouldInline =\n    n[paramsKey].length === 1 &&\n    (shouldHugType(n[paramsKey][0]) ||\n      (n[paramsKey][0].type === \"GenericTypeAnnotation\" &&\n        shouldHugType(n[paramsKey][0].id)) ||\n      n[paramsKey][0].type === \"NullableTypeAnnotation\");\n\n  if (shouldInline) {\n    return concat([\"<\", join(\", \", path.map(print, paramsKey)), \">\"]);\n  }\n\n  return group(\n    concat([\n      \"<\",\n      indent(\n        concat([\n          softline,\n          join(concat([\",\", line]), path.map(print, paramsKey))\n        ])\n      ),\n      ifBreak(\n        options.parser !== \"typescript\" &&\n          shouldPrintComma(options, \"arguments\")\n          ? \",\"\n          : \"\"\n      ),\n      softline,\n      \">\"\n    ])\n  );\n}\n\nfunction printClass(path, options, print) {\n  const n = path.getValue();\n  const parts = [];\n\n  if (n.type === \"TSAbstractClassDeclaration\") {\n    parts.push(\"abstract \");\n  }\n\n  parts.push(\"class\");\n\n  if (n.id) {\n    parts.push(\" \", path.call(print, \"id\"));\n  }\n\n  parts.push(path.call(print, \"typeParameters\"));\n\n  const partsGroup = [];\n  if (n.superClass) {\n    parts.push(\n      \" extends \",\n      path.call(print, \"superClass\"),\n      path.call(print, \"superTypeParameters\")\n    );\n  } else if (n.extends && n.extends.length > 0) {\n    parts.push(\" extends \", join(\", \", path.map(print, \"extends\")));\n  }\n\n  if (n[\"implements\"] && n[\"implements\"].length > 0) {\n    partsGroup.push(\n      line,\n      \"implements \",\n      group(indent(join(concat([\",\", line]), path.map(print, \"implements\"))))\n    );\n  }\n\n  if (partsGroup.length > 0) {\n    parts.push(group(indent(concat(partsGroup))));\n  }\n\n  parts.push(\" \", path.call(print, \"body\"));\n\n  return parts;\n}\n\nfunction printMemberLookup(path, options, print) {\n  const property = path.call(print, \"property\");\n  const n = path.getValue();\n\n  if (!n.computed) {\n    return concat([\".\", property]);\n  }\n\n  if (\n    !n.property ||\n    (n.property.type === \"Literal\" && typeof n.property.value === \"number\") ||\n    n.property.type === \"NumericLiteral\"\n  ) {\n    return concat([\"[\", property, \"]\"]);\n  }\n\n  return group(\n    concat([\"[\", indent(concat([softline, property])), softline, \"]\"])\n  );\n}\n\nfunction printBindExpressionCallee(path, options, print) {\n  return concat([\"::\", path.call(print, \"callee\")]);\n}\n\n// We detect calls on member expressions specially to format a\n// common pattern better. The pattern we are looking for is this:\n//\n// arr\n//   .map(x => x + 1)\n//   .filter(x => x > 10)\n//   .some(x => x % 2)\n//\n// The way it is structured in the AST is via a nested sequence of\n// MemberExpression and CallExpression. We need to traverse the AST\n// and make groups out of it to print it in the desired way.\nfunction printMemberChain(path, options, print) {\n  // The first phase is to linearize the AST by traversing it down.\n  //\n  //   a().b()\n  // has the following AST structure:\n  //   CallExpression(MemberExpression(CallExpression(Identifier)))\n  // and we transform it into\n  //   [Identifier, CallExpression, MemberExpression, CallExpression]\n  const printedNodes = [];\n\n  function rec(path) {\n    const node = path.getValue();\n    if (node.type === \"CallExpression\" && isMemberish(node.callee)) {\n      printedNodes.unshift({\n        node: node,\n        printed: comments.printComments(\n          path,\n          () =>\n            concat([\n              printFunctionTypeParameters(path, options, print),\n              printArgumentsList(path, options, print)\n            ]),\n          options\n        )\n      });\n      path.call(callee => rec(callee), \"callee\");\n    } else if (isMemberish(node)) {\n      printedNodes.unshift({\n        node: node,\n        printed: comments.printComments(\n          path,\n          () =>\n            node.type === \"MemberExpression\"\n              ? printMemberLookup(path, options, print)\n              : printBindExpressionCallee(path, options, print),\n          options\n        )\n      });\n      path.call(object => rec(object), \"object\");\n    } else {\n      printedNodes.unshift({\n        node: node,\n        printed: path.call(print)\n      });\n    }\n  }\n  // Note: the comments of the root node have already been printed, so we\n  // need to extract this first call without printing them as they would\n  // if handled inside of the recursive call.\n  printedNodes.unshift({\n    node: path.getValue(),\n    printed: concat([\n      printFunctionTypeParameters(path, options, print),\n      printArgumentsList(path, options, print)\n    ])\n  });\n  path.call(callee => rec(callee), \"callee\");\n\n  // Once we have a linear list of printed nodes, we want to create groups out\n  // of it.\n  //\n  //   a().b.c().d().e\n  // will be grouped as\n  //   [\n  //     [Identifier, CallExpression],\n  //     [MemberExpression, MemberExpression, CallExpression],\n  //     [MemberExpression, CallExpression],\n  //     [MemberExpression],\n  //   ]\n  // so that we can print it as\n  //   a()\n  //     .b.c()\n  //     .d()\n  //     .e\n\n  // The first group is the first node followed by\n  //   - as many CallExpression as possible\n  //       < fn()()() >.something()\n  //   - then, as many MemberExpression as possible but the last one\n  //       < this.items >.something()\n  const groups = [];\n  let currentGroup = [printedNodes[0]];\n  let i = 1;\n  for (; i < printedNodes.length; ++i) {\n    if (printedNodes[i].node.type === \"CallExpression\") {\n      currentGroup.push(printedNodes[i]);\n    } else {\n      break;\n    }\n  }\n  for (; i + 1 < printedNodes.length; ++i) {\n    if (\n      isMemberish(printedNodes[i].node) &&\n      isMemberish(printedNodes[i + 1].node)\n    ) {\n      currentGroup.push(printedNodes[i]);\n    } else {\n      break;\n    }\n  }\n  groups.push(currentGroup);\n  currentGroup = [];\n\n  // Then, each following group is a sequence of MemberExpression followed by\n  // a sequence of CallExpression. To compute it, we keep adding things to the\n  // group until we has seen a CallExpression in the past and reach a\n  // MemberExpression\n  let hasSeenCallExpression = false;\n  for (; i < printedNodes.length; ++i) {\n    if (hasSeenCallExpression && isMemberish(printedNodes[i].node)) {\n      // [0] should be appended at the end of the group instead of the\n      // beginning of the next one\n      if (\n        printedNodes[i].node.computed &&\n        isLiteral(printedNodes[i].node.property)\n      ) {\n        currentGroup.push(printedNodes[i]);\n        continue;\n      }\n\n      groups.push(currentGroup);\n      currentGroup = [];\n      hasSeenCallExpression = false;\n    }\n\n    if (printedNodes[i].node.type === \"CallExpression\") {\n      hasSeenCallExpression = true;\n    }\n    currentGroup.push(printedNodes[i]);\n\n    if (\n      printedNodes[i].node.comments &&\n      printedNodes[i].node.comments.some(comment => comment.trailing)\n    ) {\n      groups.push(currentGroup);\n      currentGroup = [];\n      hasSeenCallExpression = false;\n    }\n  }\n  if (currentGroup.length > 0) {\n    groups.push(currentGroup);\n  }\n\n  // There are cases like Object.keys(), Observable.of(), _.values() where\n  // they are the subject of all the chained calls and therefore should\n  // be kept on the same line:\n  //\n  //   Object.keys(items)\n  //     .filter(x => x)\n  //     .map(x => x)\n  //\n  // In order to detect those cases, we use an heuristic: if the first\n  // node is just an identifier with the name starting with a capital\n  // letter, just a sequence of _$ or this. The rationale is that they are\n  // likely to be factories.\n  const shouldMerge =\n    groups.length >= 2 &&\n    !groups[1][0].node.comments &&\n    groups[0].length === 1 &&\n    (groups[0][0].node.type === \"ThisExpression\" ||\n      (groups[0][0].node.type === \"Identifier\" &&\n        groups[0][0].node.name.match(/(^[A-Z])|^[_$]+$/)));\n\n  function printGroup(printedGroup) {\n    return concat(printedGroup.map(tuple => tuple.printed));\n  }\n\n  function printIndentedGroup(groups) {\n    if (groups.length === 0) {\n      return \"\";\n    }\n    return indent(\n      group(concat([hardline, join(hardline, groups.map(printGroup))]))\n    );\n  }\n\n  const printedGroups = groups.map(printGroup);\n  const oneLine = concat(printedGroups);\n\n  const cutoff = shouldMerge ? 3 : 2;\n  const flatGroups = groups\n    .slice(0, cutoff)\n    .reduce((res, group) => res.concat(group), []);\n\n  const hasComment =\n    flatGroups.slice(1, -1).some(node => hasLeadingComment(node.node)) ||\n    flatGroups.slice(0, -1).some(node => hasTrailingComment(node.node)) ||\n    (groups[cutoff] && hasLeadingComment(groups[cutoff][0].node));\n\n  // If we only have a single `.`, we shouldn't do anything fancy and just\n  // render everything concatenated together.\n  if (\n    groups.length <= cutoff &&\n    !hasComment &&\n    // (a || b).map() should be break before .map() instead of ||\n    groups[0][0].node.type !== \"LogicalExpression\"\n  ) {\n    return group(oneLine);\n  }\n\n  const expanded = concat([\n    printGroup(groups[0]),\n    shouldMerge ? concat(groups.slice(1, 2).map(printGroup)) : \"\",\n    printIndentedGroup(groups.slice(shouldMerge ? 2 : 1))\n  ]);\n\n  // If there's a comment, we don't want to print in one line.\n  if (hasComment) {\n    return group(expanded);\n  }\n\n  // If any group but the last one has a hard line, we want to force expand\n  // it. If the last group is a function it's okay to inline if it fits.\n  if (printedGroups.slice(0, -1).some(willBreak)) {\n    return group(expanded);\n  }\n\n  return concat([\n    // We only need to check `oneLine` because if `expanded` is chosen\n    // that means that the parent group has already been broken\n    // naturally\n    willBreak(oneLine) ? breakParent : \"\",\n    conditionalGroup([oneLine, expanded])\n  ]);\n}\n\nfunction isEmptyJSXElement(node) {\n  if (node.children.length === 0) {\n    return true;\n  }\n  if (node.children.length > 1) {\n    return false;\n  }\n\n  // if there is one text child and does not contain any meaningful text\n  // we can treat the element as empty.\n  const child = node.children[0];\n  return isLiteral(child) && !isMeaningfulJSXText(child);\n}\n\n// Only space, newline, carriage return, and tab are treated as whitespace\n// inside JSX.\nconst jsxWhitespaceChars = \" \\n\\r\\t\";\nconst containsNonJsxWhitespaceRegex = new RegExp(\n  \"[^\" + jsxWhitespaceChars + \"]\"\n);\nconst matchJsxWhitespaceRegex = new RegExp(\"([\" + jsxWhitespaceChars + \"]+)\");\n\n// Meaningful if it contains non-whitespace characters,\n// or it contains whitespace without a new line.\nfunction isMeaningfulJSXText(node) {\n  return (\n    isLiteral(node) &&\n    (containsNonJsxWhitespaceRegex.test(rawText(node)) ||\n      !/\\n/.test(rawText(node)))\n  );\n}\n\nfunction conditionalExpressionChainContainsJSX(node) {\n  return Boolean(\n    getConditionalChainContents(node).find(child => child.type === \"JSXElement\")\n  );\n}\n\n// If we have nested conditional expressions, we want to print them in JSX mode\n// if there's at least one JSXElement somewhere in the tree.\n//\n// A conditional expression chain like this should be printed in normal mode,\n// because there aren't JSXElements anywhere in it:\n//\n// isA ? \"A\" : isB ? \"B\" : isC ? \"C\" : \"Unknown\";\n//\n// But a conditional expression chain like this should be printed in JSX mode,\n// because there is a JSXElement in the last ConditionalExpression:\n//\n// isA ? \"A\" : isB ? \"B\" : isC ? \"C\" : <span className=\"warning\">Unknown</span>;\n//\n// This type of ConditionalExpression chain is structured like this in the AST:\n//\n// ConditionalExpression {\n//   test: ...,\n//   consequent: ...,\n//   alternate: ConditionalExpression {\n//     test: ...,\n//     consequent: ...,\n//     alternate: ConditionalExpression {\n//       test: ...,\n//       consequent: ...,\n//       alternate: ...,\n//     }\n//   }\n// }\n//\n// We want to traverse over that shape and convert it into a flat structure so\n// that we can find if there's a JSXElement somewhere inside.\nfunction getConditionalChainContents(node) {\n  // Given this code:\n  //\n  // // Using a ConditionalExpression as the consequent is uncommon, but should\n  // // be handled.\n  // A ? B : C ? D : E ? F ? G : H : I\n  //\n  // which has this AST:\n  //\n  // ConditionalExpression {\n  //   test: Identifier(A),\n  //   consequent: Identifier(B),\n  //   alternate: ConditionalExpression {\n  //     test: Identifier(C),\n  //     consequent: Identifier(D),\n  //     alternate: ConditionalExpression {\n  //       test: Identifier(E),\n  //       consequent: ConditionalExpression {\n  //         test: Identifier(F),\n  //         consequent: Identifier(G),\n  //         alternate: Identifier(H),\n  //       },\n  //       alternate: Identifier(I),\n  //     }\n  //   }\n  // }\n  //\n  // we should return this Array:\n  //\n  // [\n  //   Identifier(A),\n  //   Identifier(B),\n  //   Identifier(C),\n  //   Identifier(D),\n  //   Identifier(E),\n  //   Identifier(F),\n  //   Identifier(G),\n  //   Identifier(H),\n  //   Identifier(I)\n  // ];\n  //\n  // This loses the information about whether each node was the test,\n  // consequent, or alternate, but we don't care about that here- we are only\n  // flattening this structure to find if there's any JSXElements inside.\n  const nonConditionalExpressions = [];\n\n  function recurse(node) {\n    if (node.type === \"ConditionalExpression\") {\n      recurse(node.test);\n      recurse(node.consequent);\n      recurse(node.alternate);\n    } else {\n      nonConditionalExpressions.push(node);\n    }\n  }\n  recurse(node);\n\n  return nonConditionalExpressions;\n}\n\n// Detect an expression node representing `{\" \"}`\nfunction isJSXWhitespaceExpression(node) {\n  return (\n    node.type === \"JSXExpressionContainer\" &&\n    isLiteral(node.expression) &&\n    node.expression.value === \" \" &&\n    !node.expression.comments\n  );\n}\n\n// JSX Children are strange, mostly for two reasons:\n// 1. JSX reads newlines into string values, instead of skipping them like JS\n// 2. up to one whitespace between elements within a line is significant,\n//    but not between lines.\n//\n// Leading, trailing, and lone whitespace all need to\n// turn themselves into the rather ugly `{' '}` when breaking.\n//\n// We print JSX using the `fill` doc primitive.\n// This requires that we give it an array of alternating\n// content and whitespace elements.\n// To ensure this we add dummy `\"\"` content elements as needed.\nfunction printJSXChildren(path, options, print, jsxWhitespace) {\n  const n = path.getValue();\n  const children = [];\n\n  // using `map` instead of `each` because it provides `i`\n  path.map((childPath, i) => {\n    const child = childPath.getValue();\n    if (isLiteral(child)) {\n      const text = rawText(child);\n\n      // Contains a non-whitespace character\n      if (isMeaningfulJSXText(child)) {\n        const words = text.split(matchJsxWhitespaceRegex);\n\n        // Starts with whitespace\n        if (words[0] === \"\") {\n          children.push(\"\");\n          words.shift();\n          if (/\\n/.test(words[0])) {\n            children.push(hardline);\n          } else {\n            children.push(jsxWhitespace);\n          }\n          words.shift();\n        }\n\n        let endWhitespace;\n        // Ends with whitespace\n        if (util.getLast(words) === \"\") {\n          words.pop();\n          endWhitespace = words.pop();\n        }\n\n        // This was whitespace only without a new line.\n        if (words.length === 0) {\n          return;\n        }\n\n        words.forEach((word, i) => {\n          if (i % 2 === 1) {\n            children.push(line);\n          } else {\n            children.push(word);\n          }\n        });\n\n        if (endWhitespace !== undefined) {\n          if (/\\n/.test(endWhitespace)) {\n            children.push(hardline);\n          } else {\n            children.push(jsxWhitespace);\n          }\n        } else {\n          // Ideally this would be a `hardline` to allow a break between\n          // tags and text.\n          // Unfortunately Facebook have a custom translation pipeline\n          // (https://github.com/prettier/prettier/issues/1581#issuecomment-300975032)\n          // that uses the JSX syntax, but does not follow the React whitespace\n          // rules.\n          // Ensuring that we never have a break between tags and text in JSX\n          // will allow Facebook to adopt Prettier without too much of an\n          // adverse effect on formatting algorithm.\n          children.push(\"\");\n        }\n      } else if (/\\n/.test(text)) {\n        // Keep (up to one) blank line between tags/expressions/text.\n        // Note: We don't keep blank lines between text elements.\n        if (text.match(/\\n/g).length > 1) {\n          children.push(\"\");\n          children.push(hardline);\n        }\n      } else {\n        children.push(\"\");\n        children.push(jsxWhitespace);\n      }\n    } else {\n      const printedChild = print(childPath);\n      children.push(printedChild);\n\n      const next = n.children[i + 1];\n      const directlyFollowedByMeaningfulText =\n        next && isMeaningfulJSXText(next) && !/^[ \\n\\r\\t]/.test(rawText(next));\n      if (directlyFollowedByMeaningfulText) {\n        // Potentially this could be a hardline as well.\n        // See the comment above about the Facebook translation pipeline as\n        // to why this is an empty string.\n        children.push(\"\");\n      } else {\n        children.push(hardline);\n      }\n    }\n  }, \"children\");\n\n  return children;\n}\n\n// JSX expands children from the inside-out, instead of the outside-in.\n// This is both to break children before attributes,\n// and to ensure that when children break, their parents do as well.\n//\n// Any element that is written without any newlines and fits on a single line\n// is left that way.\n// Not only that, any user-written-line containing multiple JSX siblings\n// should also be kept on one line if possible,\n// so each user-written-line is wrapped in its own group.\n//\n// Elements that contain newlines or don't fit on a single line (recursively)\n// are fully-split, using hardline and shouldBreak: true.\n//\n// To support that case properly, all leading and trailing spaces\n// are stripped from the list of children, and replaced with a single hardline.\nfunction printJSXElement(path, options, print) {\n  const n = path.getValue();\n\n  // Turn <div></div> into <div />\n  if (isEmptyJSXElement(n)) {\n    n.openingElement.selfClosing = true;\n    delete n.closingElement;\n  }\n\n  const openingLines = path.call(print, \"openingElement\");\n  const closingLines = path.call(print, \"closingElement\");\n\n  if (\n    n.children.length === 1 &&\n    n.children[0].type === \"JSXExpressionContainer\" &&\n    (n.children[0].expression.type === \"TemplateLiteral\" ||\n      n.children[0].expression.type === \"TaggedTemplateExpression\")\n  ) {\n    return concat([\n      openingLines,\n      concat(path.map(print, \"children\")),\n      closingLines\n    ]);\n  }\n\n  // If no children, just print the opening element\n  if (n.openingElement.selfClosing) {\n    assert.ok(!n.closingElement);\n    return openingLines;\n  }\n\n  // Convert `{\" \"}` to text nodes containing a space.\n  // This makes it easy to turn them into `jsxWhitespace` which\n  // can then print as either a space or `{\" \"}` when breaking.\n  n.children = n.children.map(child => {\n    if (isJSXWhitespaceExpression(child)) {\n      return {\n        type: \"JSXText\",\n        value: \" \",\n        raw: \" \"\n      };\n    }\n    return child;\n  });\n\n  const containsTag =\n    n.children.filter(child => child.type === \"JSXElement\").length > 0;\n  const containsMultipleExpressions =\n    n.children.filter(child => child.type === \"JSXExpressionContainer\").length >\n    1;\n  const containsMultipleAttributes = n.openingElement.attributes.length > 1;\n\n  // Record any breaks. Should never go from true to false, only false to true.\n  let forcedBreak =\n    willBreak(openingLines) ||\n    containsTag ||\n    containsMultipleAttributes ||\n    containsMultipleExpressions;\n\n  const rawJsxWhitespace = options.singleQuote ? \"{' '}\" : '{\" \"}';\n  const jsxWhitespace = ifBreak(concat([rawJsxWhitespace, softline]), \" \");\n\n  const children = printJSXChildren(path, options, print, jsxWhitespace);\n\n  const containsText =\n    n.children.filter(child => isMeaningfulJSXText(child)).length > 0;\n\n  // We can end up we multiple whitespace elements with empty string\n  // content between them.\n  // We need to remove empty whitespace and softlines before JSX whitespace\n  // to get the correct output.\n  for (let i = children.length - 2; i >= 0; i--) {\n    const isPairOfEmptyStrings = children[i] === \"\" && children[i + 1] === \"\";\n    const isPairOfHardlines =\n      children[i] === hardline &&\n      children[i + 1] === \"\" &&\n      children[i + 2] === hardline;\n    const isLineFollowedByJSXWhitespace =\n      (children[i] === softline || children[i] === hardline) &&\n      children[i + 1] === \"\" &&\n      children[i + 2] === jsxWhitespace;\n    const isJSXWhitespaceFollowedByLine =\n      children[i] === jsxWhitespace &&\n      children[i + 1] === \"\" &&\n      (children[i + 2] === softline || children[i + 2] === hardline);\n\n    if (\n      (isPairOfHardlines && containsText) ||\n      isPairOfEmptyStrings ||\n      isLineFollowedByJSXWhitespace\n    ) {\n      children.splice(i, 2);\n    } else if (isJSXWhitespaceFollowedByLine) {\n      children.splice(i + 1, 2);\n    }\n  }\n\n  // Trim trailing lines (or empty strings)\n  while (\n    children.length &&\n    (isLineNext(util.getLast(children)) || isEmpty(util.getLast(children)))\n  ) {\n    children.pop();\n  }\n\n  // Trim leading lines (or empty strings)\n  while (\n    children.length &&\n    (isLineNext(children[0]) || isEmpty(children[0])) &&\n    (isLineNext(children[1]) || isEmpty(children[1]))\n  ) {\n    children.shift();\n    children.shift();\n  }\n\n  // Tweak how we format children if outputting this element over multiple lines.\n  // Also detect whether we will force this element to output over multiple lines.\n  const multilineChildren = [];\n  children.forEach((child, i) => {\n    // There are a number of situations where we need to ensure we display\n    // whitespace as `{\" \"}` when outputting this element over multiple lines.\n    if (child === jsxWhitespace) {\n      if (i === 1 && children[i - 1] === \"\") {\n        if (children.length === 2) {\n          // Solitary whitespace\n          multilineChildren.push(rawJsxWhitespace);\n          return;\n        }\n        // Leading whitespace\n        multilineChildren.push(concat([rawJsxWhitespace, hardline]));\n        return;\n      } else if (i === children.length - 1) {\n        // Trailing whitespace\n        multilineChildren.push(rawJsxWhitespace);\n        return;\n      } else if (children[i - 1] === \"\" && children[i - 2] === hardline) {\n        // Whitespace after line break\n        multilineChildren.push(rawJsxWhitespace);\n        return;\n      }\n    }\n\n    multilineChildren.push(child);\n\n    if (willBreak(child)) {\n      forcedBreak = true;\n    }\n  });\n\n  // If there is text we use `fill` to fit as much onto each line as possible.\n  // When there is no text (just tags and expressions) we use `group`\n  // to output each on a separate line.\n  const content = containsText\n    ? fill(multilineChildren)\n    : group(concat(multilineChildren), { shouldBreak: true });\n\n  const multiLineElem = group(\n    concat([\n      openingLines,\n      indent(concat([hardline, content])),\n      hardline,\n      closingLines\n    ])\n  );\n\n  if (forcedBreak) {\n    return multiLineElem;\n  }\n\n  return conditionalGroup([\n    group(concat([openingLines, concat(children), closingLines])),\n    multiLineElem\n  ]);\n}\n\nfunction maybeWrapJSXElementInParens(path, elem) {\n  const parent = path.getParentNode();\n  if (!parent) {\n    return elem;\n  }\n\n  const NO_WRAP_PARENTS = {\n    ArrayExpression: true,\n    JSXElement: true,\n    JSXExpressionContainer: true,\n    ExpressionStatement: true,\n    CallExpression: true,\n    ConditionalExpression: true\n  };\n  if (NO_WRAP_PARENTS[parent.type]) {\n    return elem;\n  }\n\n  return group(\n    concat([\n      ifBreak(\"(\"),\n      indent(concat([softline, elem])),\n      softline,\n      ifBreak(\")\")\n    ])\n  );\n}\n\nfunction isBinaryish(node) {\n  return node.type === \"BinaryExpression\" || node.type === \"LogicalExpression\";\n}\n\nfunction isMemberish(node) {\n  return (\n    node.type === \"MemberExpression\" ||\n    (node.type === \"BindExpression\" && node.object)\n  );\n}\n\nfunction shouldInlineLogicalExpression(node) {\n  if (node.type !== \"LogicalExpression\") {\n    return false;\n  }\n\n  if (\n    node.right.type === \"ObjectExpression\" &&\n    node.right.properties.length !== 0\n  ) {\n    return true;\n  }\n\n  if (\n    node.right.type === \"ArrayExpression\" &&\n    node.right.elements.length !== 0\n  ) {\n    return true;\n  }\n\n  if (node.right.type === \"JSXElement\") {\n    return true;\n  }\n\n  return false;\n}\n\n// For binary expressions to be consistent, we need to group\n// subsequent operators with the same precedence level under a single\n// group. Otherwise they will be nested such that some of them break\n// onto new lines but not all. Operators with the same precedence\n// level should either all break or not. Because we group them by\n// precedence level and the AST is structured based on precedence\n// level, things are naturally broken up correctly, i.e. `&&` is\n// broken before `+`.\nfunction printBinaryishExpressions(\n  path,\n  print,\n  options,\n  isNested,\n  isInsideParenthesis\n) {\n  let parts = [];\n  const node = path.getValue();\n\n  // We treat BinaryExpression and LogicalExpression nodes the same.\n  if (isBinaryish(node)) {\n    // Put all operators with the same precedence level in the same\n    // group. The reason we only need to do this with the `left`\n    // expression is because given an expression like `1 + 2 - 3`, it\n    // is always parsed like `((1 + 2) - 3)`, meaning the `left` side\n    // is where the rest of the expression will exist. Binary\n    // expressions on the right side mean they have a difference\n    // precedence level and should be treated as a separate group, so\n    // print them normally. (This doesn't hold for the `**` operator,\n    // which is unique in that it is right-associative.)\n    if (util.shouldFlatten(node.operator, node.left.operator)) {\n      // Flatten them out by recursively calling this function.\n      parts = parts.concat(\n        path.call(\n          left =>\n            printBinaryishExpressions(\n              left,\n              print,\n              options,\n              /* isNested */ true,\n              isInsideParenthesis\n            ),\n          \"left\"\n        )\n      );\n    } else {\n      parts.push(path.call(print, \"left\"));\n    }\n\n    const right = concat([\n      node.operator,\n      shouldInlineLogicalExpression(node) ? \" \" : line,\n      path.call(print, \"right\")\n    ]);\n\n    // If there's only a single binary expression, we want to create a group\n    // in order to avoid having a small right part like -1 be on its own line.\n    const parent = path.getParentNode();\n    const shouldGroup =\n      !(isInsideParenthesis && node.type === \"LogicalExpression\") &&\n      parent.type !== node.type &&\n      node.left.type !== node.type &&\n      node.right.type !== node.type;\n\n    parts.push(\" \", shouldGroup ? group(right) : right);\n\n    // The root comments are already printed, but we need to manually print\n    // the other ones since we don't call the normal print on BinaryExpression,\n    // only for the left and right parts\n    if (isNested && node.comments) {\n      parts = comments.printComments(path, () => concat(parts), options);\n    }\n  } else {\n    // Our stopping case. Simply print the node normally.\n    parts.push(path.call(print));\n  }\n\n  return parts;\n}\n\nfunction printAssignmentRight(rightNode, printedRight, canBreak, options) {\n  if (hasLeadingOwnLineComment(options.originalText, rightNode)) {\n    return indent(concat([hardline, printedRight]));\n  }\n\n  if (canBreak) {\n    return indent(concat([line, printedRight]));\n  }\n\n  return concat([\" \", printedRight]);\n}\n\nfunction printAssignment(\n  leftNode,\n  printedLeft,\n  operator,\n  rightNode,\n  printedRight,\n  options,\n  type\n) {\n  if (!rightNode) {\n    return printedLeft;\n  }\n\n  const canBreak =\n    (options.breakProperty && type === \"Property\") ||\n    (isBinaryish(rightNode) && !shouldInlineLogicalExpression(rightNode)) ||\n    (rightNode.type === \"ConditionalExpression\" &&\n      isBinaryish(rightNode.test) &&\n      !shouldInlineLogicalExpression(rightNode.test)) ||\n    ((leftNode.type === \"Identifier\" ||\n      isStringLiteral(leftNode) ||\n      leftNode.type === \"MemberExpression\") &&\n      (isStringLiteral(rightNode) || isMemberExpressionChain(rightNode)));\n\n  const printed = printAssignmentRight(\n    rightNode,\n    printedRight,\n    canBreak,\n    options\n  );\n\n  return group(concat([printedLeft, operator, printed]));\n}\n\nfunction adjustClause(node, clause, forceSpace) {\n  if (node.type === \"EmptyStatement\") {\n    return \";\";\n  }\n\n  if (node.type === \"BlockStatement\" || forceSpace) {\n    return concat([\" \", clause]);\n  }\n\n  return indent(concat([line, clause]));\n}\n\nfunction nodeStr(node, options, isFlowOrTypeScriptDirectiveLiteral) {\n  const raw = rawText(node);\n  // `rawContent` is the string exactly like it appeared in the input source\n  // code, with its enclosing quote.\n  const rawContent = raw.slice(1, -1);\n\n  const double = { quote: '\"', regex: /\"/g };\n  const single = { quote: \"'\", regex: /'/g };\n\n  const preferred = options.singleQuote ? single : double;\n  const alternate = preferred === single ? double : single;\n\n  let shouldUseAlternateQuote = false;\n  const isDirectiveLiteral =\n    isFlowOrTypeScriptDirectiveLiteral || node.type === \"DirectiveLiteral\";\n\n  let canChangeDirectiveQuotes = false;\n\n  // If `rawContent` contains at least one of the quote preferred for enclosing\n  // the string, we might want to enclose with the alternate quote instead, to\n  // minimize the number of escaped quotes.\n  // Also check for the alternate quote, to determine if we're allowed to swap\n  // the quotes on a DirectiveLiteral.\n  if (\n    rawContent.includes(preferred.quote) ||\n    rawContent.includes(alternate.quote)\n  ) {\n    const numPreferredQuotes = (rawContent.match(preferred.regex) || []).length;\n    const numAlternateQuotes = (rawContent.match(alternate.regex) || []).length;\n\n    shouldUseAlternateQuote = numPreferredQuotes > numAlternateQuotes;\n  } else {\n    canChangeDirectiveQuotes = true;\n  }\n\n  const enclosingQuote =\n    options.parser === \"json\"\n      ? double.quote\n      : shouldUseAlternateQuote ? alternate.quote : preferred.quote;\n\n  // Directives are exact code unit sequences, which means that you can't\n  // change the escape sequences they use.\n  // See https://github.com/prettier/prettier/issues/1555\n  // and https://tc39.github.io/ecma262/#directive-prologue\n  if (isDirectiveLiteral) {\n    if (canChangeDirectiveQuotes) {\n      return enclosingQuote + rawContent + enclosingQuote;\n    }\n    return raw;\n  }\n\n  // It might sound unnecessary to use `makeString` even if `node.raw` already\n  // is enclosed with `enclosingQuote`, but it isn't. `node.raw` could contain\n  // unnecessary escapes (such as in `\"\\'\"`). Always using `makeString` makes\n  // sure that we consistently output the minimum amount of escaped quotes.\n  return makeString(rawContent, enclosingQuote);\n}\n\nfunction makeString(rawContent, enclosingQuote) {\n  const otherQuote = enclosingQuote === '\"' ? \"'\" : '\"';\n\n  // Matches _any_ escape and unescaped quotes (both single and double).\n  const regex = /\\\\([\\s\\S])|(['\"])/g;\n\n  // Escape and unescape single and double quotes as needed to be able to\n  // enclose `rawContent` with `enclosingQuote`.\n  const newContent = rawContent.replace(regex, (match, escaped, quote) => {\n    // If we matched an escape, and the escaped character is a quote of the\n    // other type than we intend to enclose the string with, there's no need for\n    // it to be escaped, so return it _without_ the backslash.\n    if (escaped === otherQuote) {\n      return escaped;\n    }\n\n    // If we matched an unescaped quote and it is of the _same_ type as we\n    // intend to enclose the string with, it must be escaped, so return it with\n    // a backslash.\n    if (quote === enclosingQuote) {\n      return \"\\\\\" + quote;\n    }\n\n    if (quote) {\n      return quote;\n    }\n\n    // Unescape any unnecessarily escaped character.\n    // Adapted from https://github.com/eslint/eslint/blob/de0b4ad7bd820ade41b1f606008bea68683dc11a/lib/rules/no-useless-escape.js#L27\n    return /^[^\\\\nrvtbfux\\r\\n\\u2028\\u2029\"'0-7]$/.test(escaped)\n      ? escaped\n      : \"\\\\\" + escaped;\n  });\n\n  return enclosingQuote + newContent + enclosingQuote;\n}\n\nfunction printRegex(node) {\n  const flags = node.flags.split(\"\").sort().join(\"\");\n  return `/${node.pattern}/${flags}`;\n}\n\nfunction printNumber(rawNumber) {\n  return (\n    rawNumber\n      .toLowerCase()\n      // Remove unnecessary plus and zeroes from scientific notation.\n      .replace(/^([\\d.]+e)(?:\\+|(-))?0*(\\d)/, \"$1$2$3\")\n      // Remove unnecessary scientific notation (1e0).\n      .replace(/^([\\d.]+)e[+-]?0+$/, \"$1\")\n      // Make sure numbers always start with a digit.\n      .replace(/^\\./, \"0.\")\n      // Remove extraneous trailing decimal zeroes.\n      .replace(/(\\.\\d+?)0+(?=e|$)/, \"$1\")\n      // Remove trailing dot.\n      .replace(/\\.(?=e|$)/, \"\")\n  );\n}\n\nfunction isLastStatement(path) {\n  const parent = path.getParentNode();\n  if (!parent) {\n    return true;\n  }\n  const node = path.getValue();\n  const body = (parent.body || parent.consequent)\n    .filter(stmt => stmt.type !== \"EmptyStatement\");\n  return body && body[body.length - 1] === node;\n}\n\nfunction hasLeadingComment(node) {\n  return node.comments && node.comments.some(comment => comment.leading);\n}\n\nfunction hasTrailingComment(node) {\n  return node.comments && node.comments.some(comment => comment.trailing);\n}\n\nfunction hasLeadingOwnLineComment(text, node) {\n  if (node.type === \"JSXElement\") {\n    return false;\n  }\n\n  const res =\n    node.comments &&\n    node.comments.some(\n      comment => comment.leading && util.hasNewline(text, util.locEnd(comment))\n    );\n  return res;\n}\n\nfunction hasNakedLeftSide(node) {\n  return (\n    node.type === \"AssignmentExpression\" ||\n    node.type === \"BinaryExpression\" ||\n    node.type === \"LogicalExpression\" ||\n    node.type === \"ConditionalExpression\" ||\n    node.type === \"CallExpression\" ||\n    node.type === \"MemberExpression\" ||\n    node.type === \"SequenceExpression\" ||\n    node.type === \"TaggedTemplateExpression\" ||\n    (node.type === \"BindExpression\" && !node.object) ||\n    (node.type === \"UpdateExpression\" && !node.prefix)\n  );\n}\n\nfunction getLeftSide(node) {\n  if (node.expressions) {\n    return node.expressions[0];\n  }\n  return (\n    node.left ||\n    node.test ||\n    node.callee ||\n    node.object ||\n    node.tag ||\n    node.argument ||\n    node.expression\n  );\n}\n\nfunction exprNeedsASIProtection(node, options) {\n  // HACK: node.needsParens is added in `genericPrint()` for the sole purpose\n  // of being used here. It'd be preferable to find a cleaner way to do this.\n  const maybeASIProblem =\n    node.needsParens ||\n    node.type === \"ParenthesizedExpression\" ||\n    node.type === \"TypeCastExpression\" ||\n    (node.type === \"ArrowFunctionExpression\" &&\n      !canPrintParamsWithoutParens(node, options)) ||\n    node.type === \"ArrayExpression\" ||\n    node.type === \"ArrayPattern\" ||\n    (node.type === \"UnaryExpression\" &&\n      node.prefix &&\n      (node.operator === \"+\" || node.operator === \"-\")) ||\n    node.type === \"TemplateLiteral\" ||\n    node.type === \"TemplateElement\" ||\n    node.type === \"JSXElement\" ||\n    node.type === \"BindExpression\" ||\n    node.type === \"RegExpLiteral\" ||\n    (node.type === \"Literal\" && node.pattern) ||\n    (node.type === \"Literal\" && node.regex);\n\n  if (maybeASIProblem) {\n    return true;\n  }\n\n  if (!hasNakedLeftSide(node)) {\n    return false;\n  }\n\n  return exprNeedsASIProtection(getLeftSide(node), options);\n}\n\nfunction stmtNeedsASIProtection(path, options) {\n  const node = path.getNode();\n\n  if (node.type !== \"ExpressionStatement\") {\n    return false;\n  }\n\n  return exprNeedsASIProtection(node.expression, options);\n}\n\nfunction classPropMayCauseASIProblems(path) {\n  const node = path.getNode();\n\n  if (node.type !== \"ClassProperty\") {\n    return false;\n  }\n\n  const name = node.key && node.key.name;\n\n  // this isn't actually possible yet with most parsers available today\n  // so isn't properly tested yet.\n  if (\n    (name === \"static\" || name === \"get\" || name === \"set\") &&\n    !node.typeAnnotation\n  ) {\n    return true;\n  }\n}\n\nfunction classChildNeedsASIProtection(node) {\n  if (!node) {\n    return;\n  }\n\n  if (!node.computed) {\n    const name = node.key && node.key.name;\n    if (name === \"in\" || name === \"instanceof\") {\n      return true;\n    }\n  }\n  switch (node.type) {\n    case \"ClassProperty\":\n    case \"TSAbstractClassProperty\":\n      return node.computed;\n    case \"MethodDefinition\": // Flow\n    case \"TSAbstractMethodDefinition\": // TypeScript\n    case \"ClassMethod\": {\n      // Babylon\n      const isAsync = node.value ? node.value.async : node.async;\n      const isGenerator = node.value ? node.value.generator : node.generator;\n      if (\n        isAsync ||\n        node.static ||\n        node.kind === \"get\" ||\n        node.kind === \"set\"\n      ) {\n        return false;\n      }\n      if (node.computed || isGenerator) {\n        return true;\n      }\n      return false;\n    }\n\n    default:\n      /* istanbul ignore next */\n      return false;\n  }\n}\n\n// This recurses the return argument, looking for the first token\n// (the leftmost leaf node) and, if it (or its parents) has any\n// leadingComments, returns true (so it can be wrapped in parens).\nfunction returnArgumentHasLeadingComment(options, argument) {\n  if (hasLeadingOwnLineComment(options.originalText, argument)) {\n    return true;\n  }\n\n  if (hasNakedLeftSide(argument)) {\n    let leftMost = argument;\n    let newLeftMost;\n    while ((newLeftMost = getLeftSide(leftMost))) {\n      leftMost = newLeftMost;\n\n      if (hasLeadingOwnLineComment(options.originalText, leftMost)) {\n        return true;\n      }\n    }\n  }\n\n  return false;\n}\n\nfunction isMemberExpressionChain(node) {\n  if (node.type !== \"MemberExpression\") {\n    return false;\n  }\n  if (node.object.type === \"Identifier\") {\n    return true;\n  }\n  return isMemberExpressionChain(node.object);\n}\n\n// Hack to differentiate between the following two which have the same ast\n// type T = { method: () => void };\n// type T = { method(): void };\nfunction isObjectTypePropertyAFunction(node) {\n  return (\n    node.type === \"ObjectTypeProperty\" &&\n    node.value.type === \"FunctionTypeAnnotation\" &&\n    !node.static &&\n    !isFunctionNotation(node)\n  );\n}\n\n// TODO: This is a bad hack and we need a better way to distinguish between\n// arrow functions and otherwise\nfunction isFunctionNotation(node) {\n  return isGetterOrSetter(node) || sameLocStart(node, node.value);\n}\n\nfunction isGetterOrSetter(node) {\n  return node.kind === \"get\" || node.kind === \"set\";\n}\n\nfunction sameLocStart(nodeA, nodeB) {\n  return util.locStart(nodeA) === util.locStart(nodeB);\n}\n\n// Hack to differentiate between the following two which have the same ast\n// declare function f(a): void;\n// var f: (a) => void;\nfunction isTypeAnnotationAFunction(node) {\n  return (\n    node.type === \"TypeAnnotation\" &&\n    node.typeAnnotation.type === \"FunctionTypeAnnotation\" &&\n    !node.static &&\n    !sameLocStart(node, node.typeAnnotation)\n  );\n}\n\nfunction isNodeStartingWithDeclare(node, options) {\n  if (!(options.parser === \"flow\" || options.parser === \"typescript\")) {\n    return false;\n  }\n  return (\n    options.originalText.slice(0, util.locStart(node)).match(/declare\\s*$/) ||\n    options.originalText\n      .slice(node.range[0], node.range[1])\n      .startsWith(\"declare \")\n  );\n}\n\nfunction shouldHugType(node) {\n  if (isObjectType(node)) {\n    return true;\n  }\n\n  if (node.type === \"UnionTypeAnnotation\" || node.type === \"TSUnionType\") {\n    const voidCount = node.types.filter(\n      n =>\n        n.type === \"VoidTypeAnnotation\" ||\n        n.type === \"TSVoidKeyword\" ||\n        n.type === \"NullLiteralTypeAnnotation\" ||\n        n.type === \"TSNullKeyword\"\n    ).length;\n\n    const objectCount = node.types.filter(\n      n =>\n        n.type === \"ObjectTypeAnnotation\" ||\n        n.type === \"TSTypeLiteral\" ||\n        // This is a bit aggressive but captures Array<{x}>\n        n.type === \"GenericTypeAnnotation\" ||\n        n.type === \"TSTypeReference\"\n    ).length;\n\n    if (node.types.length - 1 === voidCount && objectCount > 0) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction shouldHugArguments(fun) {\n  return (\n    fun &&\n    fun.params &&\n    fun.params.length === 1 &&\n    !fun.params[0].comments &&\n    (fun.params[0].type === \"ObjectPattern\" ||\n      (fun.params[0].type === \"Identifier\" &&\n        fun.params[0].typeAnnotation &&\n        fun.params[0].typeAnnotation.type === \"TypeAnnotation\" &&\n        isObjectType(fun.params[0].typeAnnotation.typeAnnotation)) ||\n      (fun.params[0].type === \"FunctionTypeParam\" &&\n        isObjectType(fun.params[0].typeAnnotation))) &&\n    !fun.rest\n  );\n}\n\nfunction templateLiteralHasNewLines(template) {\n  return template.quasis.some(quasi => quasi.value.raw.includes(\"\\n\"));\n}\n\nfunction isTemplateOnItsOwnLine(n, text) {\n  return (\n    ((n.type === \"TemplateLiteral\" && templateLiteralHasNewLines(n)) ||\n      (n.type === \"TaggedTemplateExpression\" &&\n        templateLiteralHasNewLines(n.quasi))) &&\n    !util.hasNewline(text, util.locStart(n), { backwards: true })\n  );\n}\n\nfunction printArrayItems(path, options, printPath, print) {\n  const printedElements = [];\n  let separatorParts = [];\n\n  path.each(childPath => {\n    printedElements.push(concat(separatorParts));\n    printedElements.push(group(print(childPath)));\n\n    separatorParts = [\",\", line];\n    if (\n      childPath.getValue() &&\n      util.isNextLineEmpty(options.originalText, childPath.getValue())\n    ) {\n      separatorParts.push(softline);\n    }\n  }, printPath);\n\n  return concat(printedElements);\n}\n\nfunction hasDanglingComments(node) {\n  return (\n    node.comments &&\n    node.comments.some(comment => !comment.leading && !comment.trailing)\n  );\n}\n\nfunction isLiteral(node) {\n  return (\n    node.type === \"BooleanLiteral\" ||\n    node.type === \"DirectiveLiteral\" ||\n    node.type === \"Literal\" ||\n    node.type === \"NullLiteral\" ||\n    node.type === \"NumericLiteral\" ||\n    node.type === \"RegExpLiteral\" ||\n    node.type === \"StringLiteral\" ||\n    node.type === \"TemplateLiteral\" ||\n    node.type === \"TSTypeLiteral\" ||\n    node.type === \"JSXText\"\n  );\n}\n\nfunction isStringLiteral(node) {\n  return (\n    node.type === \"StringLiteral\" ||\n    (node.type === \"Literal\" && typeof node.value === \"string\")\n  );\n}\n\nfunction isObjectType(n) {\n  return n.type === \"ObjectTypeAnnotation\" || n.type === \"TSTypeLiteral\";\n}\n\nfunction printAstToDoc(ast, options, addAlignmentSize) {\n  addAlignmentSize = addAlignmentSize || 0;\n\n  const cache = new Map();\n\n  function printGenerically(path, args) {\n    const node = path.getValue();\n\n    const shouldCache = node && typeof node === \"object\" && args === undefined;\n    if (shouldCache && cache.has(node)) {\n      return cache.get(node);\n    }\n\n    const parent = path.getParentNode(0);\n    // We let JSXElement print its comments itself because it adds () around\n    // UnionTypeAnnotation has to align the child without the comments\n    let res;\n    if (\n      (node && node.type === \"JSXElement\") ||\n      (parent &&\n        (parent.type === \"UnionTypeAnnotation\" ||\n          parent.type === \"TSUnionType\"))\n    ) {\n      res = genericPrint(path, options, printGenerically, args);\n    } else {\n      res = comments.printComments(\n        path,\n        p => genericPrint(p, options, printGenerically, args),\n        options,\n        args && args.needsSemi\n      );\n    }\n\n    if (shouldCache) {\n      cache.set(node, res);\n    }\n\n    return res;\n  }\n\n  let doc = printGenerically(new FastPath(ast));\n  if (addAlignmentSize > 0) {\n    // Add a hardline to make the indents take effect\n    // It should be removed in index.js format()\n    doc = addAlignmentToDoc(\n      docUtils.removeLines(concat([hardline, doc])),\n      addAlignmentSize,\n      options.tabWidth\n    );\n  }\n  docUtils.propagateBreaks(doc);\n\n  if (options.parser === \"json\") {\n    doc = concat([doc, hardline]);\n  }\n\n  return doc;\n}\n\nmodule.exports = { printAstToDoc };\n"
  },
  {
    "path": "src/resolve-config.js",
    "content": "\"use strict\";\n\nconst cosmiconfig = require(\"cosmiconfig\");\nconst minimatch = require(\"minimatch\");\nconst path = require(\"path\");\n\nconst withCache = cosmiconfig(\"prettier\");\nconst noCache = cosmiconfig(\"prettier\", { cache: false });\n\nfunction resolveConfig(filePath, opts) {\n  if (opts && opts.configFile === false) {\n    // do not look for a config file\n    return Promise.resolve(null);\n  }\n\n  const useCache = !(opts && opts.useCache === false);\n  const fileDir = filePath ? path.dirname(filePath) : undefined;\n\n  return (\n    (useCache ? withCache : noCache)\n      // https://github.com/davidtheclark/cosmiconfig/pull/68\n      .load(fileDir, opts && opts.configFile)\n      .then(result => {\n        if (!result) {\n          return null;\n        }\n\n        return mergeOverrides(result.config, filePath);\n      })\n  );\n}\n\nfunction clearCache() {\n  withCache.clearCaches();\n}\n\nfunction resolveConfigFile(filePath) {\n  return noCache.load(filePath).then(result => {\n    if (result) {\n      return result.filepath;\n    }\n    return null;\n  });\n}\n\nfunction mergeOverrides(config, filePath) {\n  const options = Object.assign({}, config);\n  if (filePath && options.overrides) {\n    for (const override of options.overrides) {\n      if (pathMatchesGlobs(filePath, override.files, override.excludeFiles)) {\n        Object.assign(options, override.options);\n      }\n    }\n  }\n\n  delete options.overrides;\n  return options;\n}\n\n// Based on eslint: https://github.com/eslint/eslint/blob/master/lib/config/config-ops.js\nfunction pathMatchesGlobs(filePath, patterns, excludedPatterns) {\n  const patternList = [].concat(patterns);\n  const excludedPatternList = [].concat(excludedPatterns || []);\n  const opts = { matchBase: true };\n\n  return (\n    patternList.some(pattern => minimatch(filePath, pattern, opts)) &&\n    !excludedPatternList.some(excludedPattern =>\n      minimatch(filePath, excludedPattern, opts)\n    )\n  );\n}\n\nmodule.exports = {\n  resolveConfig,\n  resolveConfigFile,\n  clearCache\n};\n"
  },
  {
    "path": "src/util.js",
    "content": "\"use strict\";\n\nfunction isExportDeclaration(node) {\n  if (node) {\n    switch (node.type) {\n      case \"ExportDefaultDeclaration\":\n      case \"ExportDefaultSpecifier\":\n      case \"DeclareExportDeclaration\":\n      case \"ExportNamedDeclaration\":\n      case \"ExportAllDeclaration\":\n        return true;\n    }\n  }\n\n  return false;\n}\n\nfunction getParentExportDeclaration(path) {\n  const parentNode = path.getParentNode();\n  if (path.getName() === \"declaration\" && isExportDeclaration(parentNode)) {\n    return parentNode;\n  }\n\n  return null;\n}\n\nfunction getPenultimate(arr) {\n  if (arr.length > 1) {\n    return arr[arr.length - 2];\n  }\n  return null;\n}\n\nfunction getLast(arr) {\n  if (arr.length > 0) {\n    return arr[arr.length - 1];\n  }\n  return null;\n}\n\nfunction skip(chars) {\n  return (text, index, opts) => {\n    const backwards = opts && opts.backwards;\n\n    // Allow `skip` functions to be threaded together without having\n    // to check for failures (did someone say monads?).\n    if (index === false) {\n      return false;\n    }\n\n    const length = text.length;\n    let cursor = index;\n    while (cursor >= 0 && cursor < length) {\n      const c = text.charAt(cursor);\n      if (chars instanceof RegExp) {\n        if (!chars.test(c)) {\n          return cursor;\n        }\n      } else if (chars.indexOf(c) === -1) {\n        return cursor;\n      }\n\n      backwards ? cursor-- : cursor++;\n    }\n\n    if (cursor === -1 || cursor === length) {\n      // If we reached the beginning or end of the file, return the\n      // out-of-bounds cursor. It's up to the caller to handle this\n      // correctly. We don't want to indicate `false` though if it\n      // actually skipped valid characters.\n      return cursor;\n    }\n    return false;\n  };\n}\n\nconst skipWhitespace = skip(/\\s/);\nconst skipSpaces = skip(\" \\t\");\nconst skipToLineEnd = skip(\",; \\t\");\nconst skipEverythingButNewLine = skip(/[^\\r\\n]/);\n\nfunction skipInlineComment(text, index) {\n  if (index === false) {\n    return false;\n  }\n\n  if (text.charAt(index) === \"/\" && text.charAt(index + 1) === \"*\") {\n    for (let i = index + 2; i < text.length; ++i) {\n      if (text.charAt(i) === \"*\" && text.charAt(i + 1) === \"/\") {\n        return i + 2;\n      }\n    }\n  }\n  return index;\n}\n\nfunction skipTrailingComment(text, index) {\n  if (index === false) {\n    return false;\n  }\n\n  if (text.charAt(index) === \"/\" && text.charAt(index + 1) === \"/\") {\n    return skipEverythingButNewLine(text, index);\n  }\n  return index;\n}\n\n// This one doesn't use the above helper function because it wants to\n// test \\r\\n in order and `skip` doesn't support ordering and we only\n// want to skip one newline. It's simple to implement.\nfunction skipNewline(text, index, opts) {\n  const backwards = opts && opts.backwards;\n  if (index === false) {\n    return false;\n  }\n\n  const atIndex = text.charAt(index);\n  if (backwards) {\n    if (text.charAt(index - 1) === \"\\r\" && atIndex === \"\\n\") {\n      return index - 2;\n    }\n    if (\n      atIndex === \"\\n\" ||\n      atIndex === \"\\r\" ||\n      atIndex === \"\\u2028\" ||\n      atIndex === \"\\u2029\"\n    ) {\n      return index - 1;\n    }\n  } else {\n    if (atIndex === \"\\r\" && text.charAt(index + 1) === \"\\n\") {\n      return index + 2;\n    }\n    if (\n      atIndex === \"\\n\" ||\n      atIndex === \"\\r\" ||\n      atIndex === \"\\u2028\" ||\n      atIndex === \"\\u2029\"\n    ) {\n      return index + 1;\n    }\n  }\n\n  return index;\n}\n\nfunction hasNewline(text, index, opts) {\n  opts = opts || {};\n  const idx = skipSpaces(text, opts.backwards ? index - 1 : index, opts);\n  const idx2 = skipNewline(text, idx, opts);\n  return idx !== idx2;\n}\n\nfunction hasNewlineInRange(text, start, end) {\n  for (let i = start; i < end; ++i) {\n    if (text.charAt(i) === \"\\n\") {\n      return true;\n    }\n  }\n  return false;\n}\n\n// Note: this function doesn't ignore leading comments unlike isNextLineEmpty\nfunction isPreviousLineEmpty(text, node) {\n  let idx = locStart(node) - 1;\n  idx = skipSpaces(text, idx, { backwards: true });\n  idx = skipNewline(text, idx, { backwards: true });\n  idx = skipSpaces(text, idx, { backwards: true });\n  const idx2 = skipNewline(text, idx, { backwards: true });\n  return idx !== idx2;\n}\n\nfunction isNextLineEmpty(text, node) {\n  let oldIdx = null;\n  let idx = locEnd(node);\n  while (idx !== oldIdx) {\n    // We need to skip all the potential trailing inline comments\n    oldIdx = idx;\n    idx = skipToLineEnd(text, idx);\n    idx = skipInlineComment(text, idx);\n    idx = skipSpaces(text, idx);\n  }\n  idx = skipTrailingComment(text, idx);\n  idx = skipNewline(text, idx);\n  return hasNewline(text, idx);\n}\n\nfunction getNextNonSpaceNonCommentCharacter(text, node) {\n  let oldIdx = null;\n  let idx = locEnd(node);\n  while (idx !== oldIdx) {\n    oldIdx = idx;\n    idx = skipSpaces(text, idx);\n    idx = skipInlineComment(text, idx);\n    idx = skipTrailingComment(text, idx);\n    idx = skipNewline(text, idx);\n  }\n  return text.charAt(idx);\n}\n\nfunction hasSpaces(text, index, opts) {\n  opts = opts || {};\n  const idx = skipSpaces(text, opts.backwards ? index - 1 : index, opts);\n  return idx !== index;\n}\n\nfunction locStart(node) {\n  // Handle nodes with decorators. They should start at the first decorator\n  if (\n    node.declaration &&\n    node.declaration.decorators &&\n    node.declaration.decorators.length > 0\n  ) {\n    return locStart(node.declaration.decorators[0]);\n  }\n  if (node.decorators && node.decorators.length > 0) {\n    return locStart(node.decorators[0]);\n  }\n\n  if (node.__location) {\n    return node.__location.startOffset;\n  }\n  if (node.range) {\n    return node.range[0];\n  }\n  if (typeof node.start === \"number\") {\n    return node.start;\n  }\n  if (node.source) {\n    return lineColumnToIndex(node.source.start, node.source.input.css) - 1;\n  }\n  if (node.loc) {\n    return node.loc.start;\n  }\n}\n\nfunction locEnd(node) {\n  const endNode = node.nodes && getLast(node.nodes);\n  if (endNode && node.source && !node.source.end) {\n    node = endNode;\n  }\n\n  let loc;\n  if (node.range) {\n    loc = node.range[1];\n  } else if (typeof node.end === \"number\") {\n    loc = node.end;\n  } else if (node.source) {\n    loc = lineColumnToIndex(node.source.end, node.source.input.css);\n  }\n\n  if (node.__location) {\n    return node.__location.endOffset;\n  }\n  if (node.typeAnnotation) {\n    return Math.max(loc, locEnd(node.typeAnnotation));\n  }\n\n  if (node.loc && !loc) {\n    return node.loc.end;\n  }\n\n  return loc;\n}\n\n// Super inefficient, needs to be cached.\nfunction lineColumnToIndex(lineColumn, text) {\n  let index = 0;\n  for (let i = 0; i < lineColumn.line - 1; ++i) {\n    index = text.indexOf(\"\\n\", index) + 1;\n    if (index === -1) {\n      return -1;\n    }\n  }\n  return index + lineColumn.column;\n}\n\nfunction setLocStart(node, index) {\n  if (node.range) {\n    node.range[0] = index;\n  } else {\n    node.start = index;\n  }\n}\n\nfunction setLocEnd(node, index) {\n  if (node.range) {\n    node.range[1] = index;\n  } else {\n    node.end = index;\n  }\n}\n\nconst PRECEDENCE = {};\n[\n  [\"||\"],\n  [\"&&\"],\n  [\"|\"],\n  [\"^\"],\n  [\"&\"],\n  [\"==\", \"===\", \"!=\", \"!==\"],\n  [\"<\", \">\", \"<=\", \">=\", \"in\", \"instanceof\"],\n  [\">>\", \"<<\", \">>>\"],\n  [\"+\", \"-\"],\n  [\"*\", \"/\", \"%\"],\n  [\"**\"]\n].forEach((tier, i) => {\n  tier.forEach(op => {\n    PRECEDENCE[op] = i;\n  });\n});\n\nfunction getPrecedence(op) {\n  return PRECEDENCE[op];\n}\n\nconst equalityOperators = {\n  \"==\": true,\n  \"!=\": true,\n  \"===\": true,\n  \"!==\": true\n};\nconst multiplicativeOperators = {\n  \"*\": true,\n  \"/\": true,\n  \"%\": true\n};\nconst bitshiftOperators = {\n  \">>\": true,\n  \">>>\": true,\n  \"<<\": true\n};\n\nfunction shouldFlatten(parentOp, nodeOp) {\n  if (getPrecedence(nodeOp) !== getPrecedence(parentOp)) {\n    return false;\n  }\n\n  // ** is right-associative\n  // x ** y ** z --> x ** (y ** z)\n  if (parentOp === \"**\") {\n    return false;\n  }\n\n  // x == y == z --> (x == y) == z\n  if (equalityOperators[parentOp] && equalityOperators[nodeOp]) {\n    return false;\n  }\n\n  // x * y % z --> (x * y) % z\n  if (\n    (nodeOp === \"%\" && multiplicativeOperators[parentOp]) ||\n    (parentOp === \"%\" && multiplicativeOperators[nodeOp])\n  ) {\n    return false;\n  }\n\n  // x << y << z --> (x << y) << z\n  if (bitshiftOperators[parentOp] && bitshiftOperators[nodeOp]) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction isBitwiseOperator(operator) {\n  return (\n    !!bitshiftOperators[operator] ||\n    operator === \"|\" ||\n    operator === \"^\" ||\n    operator === \"&\"\n  );\n}\n\n// Tests if an expression starts with `{`, or (if forbidFunctionAndClass holds) `function` or `class`.\n// Will be overzealous if there's already necessary grouping parentheses.\nfunction startsWithNoLookaheadToken(node, forbidFunctionAndClass) {\n  node = getLeftMost(node);\n  switch (node.type) {\n    // Hack. Remove after https://github.com/eslint/typescript-eslint-parser/issues/331\n    case \"ObjectPattern\":\n      return !forbidFunctionAndClass;\n    case \"FunctionExpression\":\n    case \"ClassExpression\":\n      return forbidFunctionAndClass;\n    case \"ObjectExpression\":\n      return true;\n    case \"MemberExpression\":\n      return startsWithNoLookaheadToken(node.object, forbidFunctionAndClass);\n    case \"TaggedTemplateExpression\":\n      if (node.tag.type === \"FunctionExpression\") {\n        // IIFEs are always already parenthesized\n        return false;\n      }\n      return startsWithNoLookaheadToken(node.tag, forbidFunctionAndClass);\n    case \"CallExpression\":\n      if (node.callee.type === \"FunctionExpression\") {\n        // IIFEs are always already parenthesized\n        return false;\n      }\n      return startsWithNoLookaheadToken(node.callee, forbidFunctionAndClass);\n    case \"ConditionalExpression\":\n      return startsWithNoLookaheadToken(node.test, forbidFunctionAndClass);\n    case \"UpdateExpression\":\n      return (\n        !node.prefix &&\n        startsWithNoLookaheadToken(node.argument, forbidFunctionAndClass)\n      );\n    case \"BindExpression\":\n      return (\n        node.object &&\n        startsWithNoLookaheadToken(node.object, forbidFunctionAndClass)\n      );\n    case \"SequenceExpression\":\n      return startsWithNoLookaheadToken(\n        node.expressions[0],\n        forbidFunctionAndClass\n      );\n    case \"TSAsExpression\":\n      return startsWithNoLookaheadToken(\n        node.expression,\n        forbidFunctionAndClass\n      );\n    default:\n      return false;\n  }\n}\n\nfunction getLeftMost(node) {\n  if (node.left) {\n    return getLeftMost(node.left);\n  }\n  return node;\n}\n\nfunction hasBlockComments(node) {\n  return node.comments && node.comments.some(isBlockComment);\n}\n\nfunction isBlockComment(comment) {\n  return comment.type === \"Block\" || comment.type === \"CommentBlock\";\n}\n\nfunction getAlignmentSize(value, tabWidth, startIndex) {\n  startIndex = startIndex || 0;\n\n  let size = 0;\n  for (let i = startIndex; i < value.length; ++i) {\n    if (value[i] === \"\\t\") {\n      // Tabs behave in a way that they are aligned to the nearest\n      // multiple of tabWidth:\n      // 0 -> 4, 1 -> 4, 2 -> 4, 3 -> 4\n      // 4 -> 8, 5 -> 8, 6 -> 8, 7 -> 8 ...\n      size = size + tabWidth - size % tabWidth;\n    } else {\n      size++;\n    }\n  }\n\n  return size;\n}\n\nmodule.exports = {\n  getPrecedence,\n  shouldFlatten,\n  isBitwiseOperator,\n  isExportDeclaration,\n  getParentExportDeclaration,\n  getPenultimate,\n  getLast,\n  getNextNonSpaceNonCommentCharacter,\n  skipWhitespace,\n  skipSpaces,\n  skipNewline,\n  isNextLineEmpty,\n  isPreviousLineEmpty,\n  hasNewline,\n  hasNewlineInRange,\n  hasSpaces,\n  locStart,\n  locEnd,\n  setLocStart,\n  setLocEnd,\n  startsWithNoLookaheadToken,\n  hasBlockComments,\n  isBlockComment,\n  getAlignmentSize\n};\n"
  },
  {
    "path": "tests/.eslintrc.js",
    "content": "\"use strict\";\n\nmodule.exports = {\n  env: {\n    jest: true\n  },\n  rules: {\n    strict: \"off\"\n  },\n  globals: {\n    run_spec: false\n  }\n};\n"
  },
  {
    "path": "tests/align-object-properties/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`o.js 1`] = `\no = {\n  [name]: 'value',\n  2:3,\n  \"k-2\":2,\n  keyasdf:3\n}\n\no = {\n  [namelonglonglong]: 'value',\n  2:3,\n  \"k-2\":2,\n  keyasdf:3\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\no = {\n  [name]  : \"value\",\n  2       : 3,\n  \"k-2\"   : 2,\n  keyasdf : 3\n};\n\no = {\n  [namelonglonglong] : \"value\",\n  2                  : 3,\n  \"k-2\"              : 2,\n  keyasdf            : 3\n};\n\n`;\n"
  },
  {
    "path": "tests/align-object-properties/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"babylon\", alignObjectProperties: true });\n"
  },
  {
    "path": "tests/align-object-properties/o.js",
    "content": "o = {\n  [name]: 'value',\n  2:3,\n  \"k-2\":2,\n  keyasdf:3\n}\n\no = {\n  [namelonglonglong]: 'value',\n  2:3,\n  \"k-2\":2,\n  keyasdf:3\n}\n"
  },
  {
    "path": "tests/array_spread/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`multiple.js 1`] = `\n[...a, ...b,];\n[...a, ...b];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n[...a, ...b];\n[...a, ...b];\n\n`;\n"
  },
  {
    "path": "tests/array_spread/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/array_spread/multiple.js",
    "content": "[...a, ...b,];\n[...a, ...b];\n"
  },
  {
    "path": "tests/arrays/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`empty.js 1`] = `\nconst a = someVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeLong.Expression || [];\nconst a = someVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeLong.Expression || {};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst a =\n  someVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeLong.Expression || [];\nconst a =\n  someVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeLong.Expression || {};\n\n`;\n\nexports[`empty.js 2`] = `\nconst a = someVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeLong.Expression || [];\nconst a = someVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeLong.Expression || {};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst a =\n  someVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeLong.Expression || [];\nconst a =\n  someVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeLong.Expression || {};\n\n`;\n\nexports[`last.js 1`] = `\n[,];\n[,,];\n[,,1,];\n[,,1,1];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n[,];\n[, ,];\n[, , 1];\n[, , 1, 1];\n\n`;\n\nexports[`last.js 2`] = `\n[,];\n[,,];\n[,,1,];\n[,,1,1];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n[\n  ,\n];\n[\n  ,\n  ,\n];\n[\n  ,\n  ,\n  1\n];\n[\n  ,\n  ,\n  1,\n  1\n];\n\n`;\n\nexports[`preserve_empty_lines.js 1`] = `\na = [\n\n  1,\n  2,\n\n  3,\n\n\n  4,\n\n\n]\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\na = [1, 2, 3, 4];\n\n`;\n\nexports[`preserve_empty_lines.js 2`] = `\na = [\n\n  1,\n  2,\n\n  3,\n\n\n  4,\n\n\n]\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\na = [\n  1,\n  2,\n\n  3,\n\n  4\n];\n\n`;\n"
  },
  {
    "path": "tests/arrays/empty.js",
    "content": "const a = someVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeLong.Expression || [];\nconst a = someVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeLong.Expression || {};\n"
  },
  {
    "path": "tests/arrays/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\nrun_spec(__dirname, { arrayExpand: true }, [\"typescript\"]);\n"
  },
  {
    "path": "tests/arrays/last.js",
    "content": "[,];\n[,,];\n[,,1,];\n[,,1,1];\n"
  },
  {
    "path": "tests/arrays/preserve_empty_lines.js",
    "content": "a = [\n\n  1,\n  2,\n\n  3,\n\n\n  4,\n\n\n]\n"
  },
  {
    "path": "tests/arrow-call/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`arrow_call.js 1`] = `\nconst testResults = results.testResults.map(testResult =>\n  formatResult(testResult, formatter, reporter)\n);\n\nit('mocks regexp instances', () => {\n  expect(\n    () => moduleMocker.generateFromMetadata(moduleMocker.getMetadata(/a/)),\n  ).not.toThrow();\n});\n\nexpect(() => asyncRequest({ url: \"/test-endpoint\" }))\n  .toThrowError(/Required parameter/);\n\nexpect(() => asyncRequest({ url: \"/test-endpoint-but-with-a-long-url\" }))\n  .toThrowError(/Required parameter/);\n\nexpect(() => asyncRequest({ url: \"/test-endpoint-but-with-a-suuuuuuuuper-long-url\" }))\n  .toThrowError(/Required parameter/);\n\nexpect(() => asyncRequest({ type: \"foo\", url: \"/test-endpoint\" }))\n  .not.toThrowError();\n\nexpect(() => asyncRequest({ type: \"foo\", url: \"/test-endpoint-but-with-a-long-url\" }))\n  .not.toThrowError();\n\nconst a = Observable\n  .fromPromise(axiosInstance.post('/carts/mine'))\n  .map((response) => response.data)\n\nconst b = Observable.fromPromise(axiosInstance.get(url))\n  .map((response) => response.data)\n\nfunc(\n  veryLoooooooooooooooooooooooongName,\n  veryLooooooooooooooooooooooooongName =>\n    veryLoooooooooooooooongName.something()\n);\n\nconst composition = (ViewComponent, ContainerComponent) =>\n  class extends React.Component {\n    static propTypes = {};\n  };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst testResults = results.testResults.map(testResult =>\n  formatResult(testResult, formatter, reporter)\n);\n\nit(\"mocks regexp instances\", () => {\n  expect(() =>\n    moduleMocker.generateFromMetadata(moduleMocker.getMetadata(/a/))\n  ).not.toThrow();\n});\n\nexpect(() => asyncRequest({ url: \"/test-endpoint\" })).toThrowError(\n  /Required parameter/\n);\n\nexpect(() =>\n  asyncRequest({ url: \"/test-endpoint-but-with-a-long-url\" })\n).toThrowError(/Required parameter/);\n\nexpect(() =>\n  asyncRequest({ url: \"/test-endpoint-but-with-a-suuuuuuuuper-long-url\" })\n).toThrowError(/Required parameter/);\n\nexpect(() =>\n  asyncRequest({ type: \"foo\", url: \"/test-endpoint\" })\n).not.toThrowError();\n\nexpect(() =>\n  asyncRequest({ type: \"foo\", url: \"/test-endpoint-but-with-a-long-url\" })\n).not.toThrowError();\n\nconst a = Observable.fromPromise(axiosInstance.post(\"/carts/mine\")).map(\n  response => response.data\n);\n\nconst b = Observable.fromPromise(axiosInstance.get(url)).map(\n  response => response.data\n);\n\nfunc(\n  veryLoooooooooooooooooooooooongName,\n  veryLooooooooooooooooooooooooongName =>\n    veryLoooooooooooooooongName.something()\n);\n\nconst composition = (ViewComponent, ContainerComponent) =>\n  class extends React.Component {\n    static propTypes = {};\n  };\n\n`;\n\nexports[`arrow_call.js 2`] = `\nconst testResults = results.testResults.map(testResult =>\n  formatResult(testResult, formatter, reporter)\n);\n\nit('mocks regexp instances', () => {\n  expect(\n    () => moduleMocker.generateFromMetadata(moduleMocker.getMetadata(/a/)),\n  ).not.toThrow();\n});\n\nexpect(() => asyncRequest({ url: \"/test-endpoint\" }))\n  .toThrowError(/Required parameter/);\n\nexpect(() => asyncRequest({ url: \"/test-endpoint-but-with-a-long-url\" }))\n  .toThrowError(/Required parameter/);\n\nexpect(() => asyncRequest({ url: \"/test-endpoint-but-with-a-suuuuuuuuper-long-url\" }))\n  .toThrowError(/Required parameter/);\n\nexpect(() => asyncRequest({ type: \"foo\", url: \"/test-endpoint\" }))\n  .not.toThrowError();\n\nexpect(() => asyncRequest({ type: \"foo\", url: \"/test-endpoint-but-with-a-long-url\" }))\n  .not.toThrowError();\n\nconst a = Observable\n  .fromPromise(axiosInstance.post('/carts/mine'))\n  .map((response) => response.data)\n\nconst b = Observable.fromPromise(axiosInstance.get(url))\n  .map((response) => response.data)\n\nfunc(\n  veryLoooooooooooooooooooooooongName,\n  veryLooooooooooooooooooooooooongName =>\n    veryLoooooooooooooooongName.something()\n);\n\nconst composition = (ViewComponent, ContainerComponent) =>\n  class extends React.Component {\n    static propTypes = {};\n  };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst testResults = results.testResults.map(testResult =>\n  formatResult(testResult, formatter, reporter),\n);\n\nit(\"mocks regexp instances\", () => {\n  expect(() =>\n    moduleMocker.generateFromMetadata(moduleMocker.getMetadata(/a/)),\n  ).not.toThrow();\n});\n\nexpect(() => asyncRequest({ url: \"/test-endpoint\" })).toThrowError(\n  /Required parameter/,\n);\n\nexpect(() =>\n  asyncRequest({ url: \"/test-endpoint-but-with-a-long-url\" }),\n).toThrowError(/Required parameter/);\n\nexpect(() =>\n  asyncRequest({ url: \"/test-endpoint-but-with-a-suuuuuuuuper-long-url\" }),\n).toThrowError(/Required parameter/);\n\nexpect(() =>\n  asyncRequest({ type: \"foo\", url: \"/test-endpoint\" }),\n).not.toThrowError();\n\nexpect(() =>\n  asyncRequest({ type: \"foo\", url: \"/test-endpoint-but-with-a-long-url\" }),\n).not.toThrowError();\n\nconst a = Observable.fromPromise(axiosInstance.post(\"/carts/mine\")).map(\n  response => response.data,\n);\n\nconst b = Observable.fromPromise(axiosInstance.get(url)).map(\n  response => response.data,\n);\n\nfunc(\n  veryLoooooooooooooooooooooooongName,\n  veryLooooooooooooooooooooooooongName =>\n    veryLoooooooooooooooongName.something(),\n);\n\nconst composition = (ViewComponent, ContainerComponent) =>\n  class extends React.Component {\n    static propTypes = {};\n  };\n\n`;\n"
  },
  {
    "path": "tests/arrow-call/arrow_call.js",
    "content": "const testResults = results.testResults.map(testResult =>\n  formatResult(testResult, formatter, reporter)\n);\n\nit('mocks regexp instances', () => {\n  expect(\n    () => moduleMocker.generateFromMetadata(moduleMocker.getMetadata(/a/)),\n  ).not.toThrow();\n});\n\nexpect(() => asyncRequest({ url: \"/test-endpoint\" }))\n  .toThrowError(/Required parameter/);\n\nexpect(() => asyncRequest({ url: \"/test-endpoint-but-with-a-long-url\" }))\n  .toThrowError(/Required parameter/);\n\nexpect(() => asyncRequest({ url: \"/test-endpoint-but-with-a-suuuuuuuuper-long-url\" }))\n  .toThrowError(/Required parameter/);\n\nexpect(() => asyncRequest({ type: \"foo\", url: \"/test-endpoint\" }))\n  .not.toThrowError();\n\nexpect(() => asyncRequest({ type: \"foo\", url: \"/test-endpoint-but-with-a-long-url\" }))\n  .not.toThrowError();\n\nconst a = Observable\n  .fromPromise(axiosInstance.post('/carts/mine'))\n  .map((response) => response.data)\n\nconst b = Observable.fromPromise(axiosInstance.get(url))\n  .map((response) => response.data)\n\nfunc(\n  veryLoooooooooooooooooooooooongName,\n  veryLooooooooooooooooooooooooongName =>\n    veryLoooooooooooooooongName.something()\n);\n\nconst composition = (ViewComponent, ContainerComponent) =>\n  class extends React.Component {\n    static propTypes = {};\n  };\n"
  },
  {
    "path": "tests/arrow-call/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\nrun_spec(__dirname, { trailingComma: \"all\" }, [\"typescript\"]);\n"
  },
  {
    "path": "tests/arrows/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`arrow_function_expression.js 1`] = `\n(a => {}).length\ntypeof (() => {});\nexport default (() => {})();\n(() => {})()\\`\\`;\n(() => {})\\`\\`;\nnew (() => {});\nif ((() => {}) ? 1 : 0) {}\nlet f = () => ({}())\nlet a = () => ({} instanceof a);\na = () => ({} && a);\na = () => ({}() && a);\na = () => ({} && a && b);\na = () => ({} + a);\na = () => ({}()() && a);\na = () => ({}.b && a);\na = () => ({}[b] && a);\na = () => ({}\\`\\` && a);\na = () => ({} = 0);\na = () => ({}, a);\na => a instanceof {};\na => ({}().b && 0)\na => ({}().c = 0)\nx => ({}()())\nx => ({}()\\`\\`)\nx => ({}().b);\na = b => c;\na = (b?) => c;\nx => (y = z);\nx => (y += z);\nf(a => ({})) + 1;\n(a => ({})) || 0;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n(a => {}).length;\ntypeof (() => {});\nexport default (() => {})();\n(() => {})()\\`\\`;\n(() => {})\\`\\`;\nnew (() => {})();\nif ((() => {}) ? 1 : 0) {\n}\nlet f = () => ({}());\nlet a = () => ({} instanceof a);\na = () => ({} && a);\na = () => ({}() && a);\na = () => ({} && a && b);\na = () => ({} + a);\na = () => ({}()() && a);\na = () => ({}.b && a);\na = () => ({}[b] && a);\na = () => ({}\\`\\` && a);\na = () => ({} = 0);\na = () => ({}, a);\na => a instanceof {};\na => ({}().b && 0);\na => ({}().c = 0);\nx => ({}()());\nx => ({}()\\`\\`);\nx => ({}().b);\na = b => c;\na = (b?) => c;\nx => (y = z);\nx => (y += z);\nf(a => ({})) + 1;\n(a => ({})) || 0;\n\n`;\n\nexports[`arrow_function_expression.js 2`] = `\n(a => {}).length\ntypeof (() => {});\nexport default (() => {})();\n(() => {})()\\`\\`;\n(() => {})\\`\\`;\nnew (() => {});\nif ((() => {}) ? 1 : 0) {}\nlet f = () => ({}())\nlet a = () => ({} instanceof a);\na = () => ({} && a);\na = () => ({}() && a);\na = () => ({} && a && b);\na = () => ({} + a);\na = () => ({}()() && a);\na = () => ({}.b && a);\na = () => ({}[b] && a);\na = () => ({}\\`\\` && a);\na = () => ({} = 0);\na = () => ({}, a);\na => a instanceof {};\na => ({}().b && 0)\na => ({}().c = 0)\nx => ({}()())\nx => ({}()\\`\\`)\nx => ({}().b);\na = b => c;\na = (b?) => c;\nx => (y = z);\nx => (y += z);\nf(a => ({})) + 1;\n(a => ({})) || 0;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n((a) => {}).length;\ntypeof (() => {});\nexport default (() => {})();\n(() => {})()\\`\\`;\n(() => {})\\`\\`;\nnew (() => {})();\nif ((() => {}) ? 1 : 0) {\n}\nlet f = () => ({}());\nlet a = () => ({} instanceof a);\na = () => ({} && a);\na = () => ({}() && a);\na = () => ({} && a && b);\na = () => ({} + a);\na = () => ({}()() && a);\na = () => ({}.b && a);\na = () => ({}[b] && a);\na = () => ({}\\`\\` && a);\na = () => ({} = 0);\na = () => ({}, a);\n(a) => a instanceof {};\n(a) => ({}().b && 0);\n(a) => ({}().c = 0);\n(x) => ({}()());\n(x) => ({}()\\`\\`);\n(x) => ({}().b);\na = (b) => c;\na = (b?) => c;\n(x) => (y = z);\n(x) => (y += z);\nf((a) => ({})) + 1;\n((a) => ({})) || 0;\n\n`;\n\nexports[`arrow-parens.js 1`] = `\n() => {};\n(a) => { return a; };\na => a;\n(a, b) => a * b;\n(a, b, c) => { return a * b + c; };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n() => {};\na => {\n  return a;\n};\na => a;\n(a, b) => a * b;\n(a, b, c) => {\n  return a * b + c;\n};\n\n`;\n\nexports[`arrow-parens.js 2`] = `\n() => {};\n(a) => { return a; };\na => a;\n(a, b) => a * b;\n(a, b, c) => { return a * b + c; };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n() => {};\n(a) => {\n  return a;\n};\n(a) => a;\n(a, b) => a * b;\n(a, b, c) => {\n  return a * b + c;\n};\n\n`;\n\nexports[`block_like.js 1`] = `\na = () => ({} = this);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\na = () => ({} = this);\n\n`;\n\nexports[`block_like.js 2`] = `\na = () => ({} = this);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\na = () => ({} = this);\n\n`;\n\nexports[`call.js 1`] = `\nSeq(typeDef.interface.groups).forEach(group =>\n  Seq(group.members).forEach((member, memberName) =>\n    markdownDoc(\n      member.doc,\n      { typePath: typePath.concat(memberName.slice(1)),\n       signatures: member.signatures }\n    )\n  )\n)\n\nconst promiseFromCallback = fn =>\n  new Promise((resolve, reject) =>\n    fn((err, result) => {\n      if (err) return reject(err);\n      return resolve(result);\n    })\n  );\n\nruntimeAgent.getProperties(\n  objectId,\n  false, // ownProperties\n  false, // accessorPropertiesOnly\n  false, // generatePreview\n  (error, properties, internalProperties) => {\n    return 1\n  },\n);\n\nfunction render() {\n  return (\n    <View>\n      <Image\n        onProgress={(e) => this.setState({progress: Math.round(100 * e.nativeEvent.loaded / e.nativeEvent.total)})}\n      />\n    </View>\n  );\n}\n\nfunction render() {\n  return (\n    <View>\n      <Image\n        onProgress={e =>\n          this.setState({\n            progress: Math.round(\n              100 * e.nativeEvent.loaded / e.nativeEvent.total,\n            ),\n          })}\n      />\n    </View>\n  );\n}\n\nfunction render() {\n  return (\n    <View>\n      <Image\n        onProgress={e =>\n          this.setState({\n            progress: Math.round(\n              100 * e.nativeEvent.loaded / e.nativeEvent.total,\n            ),\n          })}\n      />\n    </View>\n  );\n}\n\njest.mock(\n  '../SearchSource',\n  () => class {\n    findMatchingTests(pattern) {\n      return {paths: []};\n    }\n  },\n);\n\nfooooooooooooooooooooooooooooooooooooooooooooooooooo(action => next =>\n    dispatch(action),\n);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nSeq(typeDef.interface.groups).forEach(group =>\n  Seq(group.members).forEach((member, memberName) =>\n    markdownDoc(member.doc, {\n      typePath: typePath.concat(memberName.slice(1)),\n      signatures: member.signatures\n    })\n  )\n);\n\nconst promiseFromCallback = fn =>\n  new Promise((resolve, reject) =>\n    fn((err, result) => {\n      if (err) return reject(err);\n      return resolve(result);\n    })\n  );\n\nruntimeAgent.getProperties(\n  objectId,\n  false, // ownProperties\n  false, // accessorPropertiesOnly\n  false, // generatePreview\n  (error, properties, internalProperties) => {\n    return 1;\n  }\n);\n\nfunction render() {\n  return (\n    <View>\n      <Image\n        onProgress={e =>\n          this.setState({\n            progress: Math.round(\n              100 * e.nativeEvent.loaded / e.nativeEvent.total\n            )\n          })}\n      />\n    </View>\n  );\n}\n\nfunction render() {\n  return (\n    <View>\n      <Image\n        onProgress={e =>\n          this.setState({\n            progress: Math.round(\n              100 * e.nativeEvent.loaded / e.nativeEvent.total\n            )\n          })}\n      />\n    </View>\n  );\n}\n\nfunction render() {\n  return (\n    <View>\n      <Image\n        onProgress={e =>\n          this.setState({\n            progress: Math.round(\n              100 * e.nativeEvent.loaded / e.nativeEvent.total\n            )\n          })}\n      />\n    </View>\n  );\n}\n\njest.mock(\n  \"../SearchSource\",\n  () =>\n    class {\n      findMatchingTests(pattern) {\n        return { paths: [] };\n      }\n    }\n);\n\nfooooooooooooooooooooooooooooooooooooooooooooooooooo(action => next =>\n  dispatch(action)\n);\n\n`;\n\nexports[`call.js 2`] = `\nSeq(typeDef.interface.groups).forEach(group =>\n  Seq(group.members).forEach((member, memberName) =>\n    markdownDoc(\n      member.doc,\n      { typePath: typePath.concat(memberName.slice(1)),\n       signatures: member.signatures }\n    )\n  )\n)\n\nconst promiseFromCallback = fn =>\n  new Promise((resolve, reject) =>\n    fn((err, result) => {\n      if (err) return reject(err);\n      return resolve(result);\n    })\n  );\n\nruntimeAgent.getProperties(\n  objectId,\n  false, // ownProperties\n  false, // accessorPropertiesOnly\n  false, // generatePreview\n  (error, properties, internalProperties) => {\n    return 1\n  },\n);\n\nfunction render() {\n  return (\n    <View>\n      <Image\n        onProgress={(e) => this.setState({progress: Math.round(100 * e.nativeEvent.loaded / e.nativeEvent.total)})}\n      />\n    </View>\n  );\n}\n\nfunction render() {\n  return (\n    <View>\n      <Image\n        onProgress={e =>\n          this.setState({\n            progress: Math.round(\n              100 * e.nativeEvent.loaded / e.nativeEvent.total,\n            ),\n          })}\n      />\n    </View>\n  );\n}\n\nfunction render() {\n  return (\n    <View>\n      <Image\n        onProgress={e =>\n          this.setState({\n            progress: Math.round(\n              100 * e.nativeEvent.loaded / e.nativeEvent.total,\n            ),\n          })}\n      />\n    </View>\n  );\n}\n\njest.mock(\n  '../SearchSource',\n  () => class {\n    findMatchingTests(pattern) {\n      return {paths: []};\n    }\n  },\n);\n\nfooooooooooooooooooooooooooooooooooooooooooooooooooo(action => next =>\n    dispatch(action),\n);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nSeq(typeDef.interface.groups).forEach((group) =>\n  Seq(group.members).forEach((member, memberName) =>\n    markdownDoc(member.doc, {\n      typePath: typePath.concat(memberName.slice(1)),\n      signatures: member.signatures\n    })\n  )\n);\n\nconst promiseFromCallback = (fn) =>\n  new Promise((resolve, reject) =>\n    fn((err, result) => {\n      if (err) return reject(err);\n      return resolve(result);\n    })\n  );\n\nruntimeAgent.getProperties(\n  objectId,\n  false, // ownProperties\n  false, // accessorPropertiesOnly\n  false, // generatePreview\n  (error, properties, internalProperties) => {\n    return 1;\n  }\n);\n\nfunction render() {\n  return (\n    <View>\n      <Image\n        onProgress={(e) =>\n          this.setState({\n            progress: Math.round(\n              100 * e.nativeEvent.loaded / e.nativeEvent.total\n            )\n          })}\n      />\n    </View>\n  );\n}\n\nfunction render() {\n  return (\n    <View>\n      <Image\n        onProgress={(e) =>\n          this.setState({\n            progress: Math.round(\n              100 * e.nativeEvent.loaded / e.nativeEvent.total\n            )\n          })}\n      />\n    </View>\n  );\n}\n\nfunction render() {\n  return (\n    <View>\n      <Image\n        onProgress={(e) =>\n          this.setState({\n            progress: Math.round(\n              100 * e.nativeEvent.loaded / e.nativeEvent.total\n            )\n          })}\n      />\n    </View>\n  );\n}\n\njest.mock(\n  \"../SearchSource\",\n  () =>\n    class {\n      findMatchingTests(pattern) {\n        return { paths: [] };\n      }\n    }\n);\n\nfooooooooooooooooooooooooooooooooooooooooooooooooooo((action) => (next) =>\n  dispatch(action)\n);\n\n`;\n\nexports[`comment.js 1`] = `\n/**\n * Curried function that ends with a BEM CSS Selector\n *\n * @param {String} block - the BEM Block you'd like to select.\n * @returns {Function}\n */\nexport const bem = block =>\n  /**\n   * @param {String} [element] - the BEM Element within that block; if undefined, selects the block itself.\n   * @returns {Function}\n   */\n  element =>\n    /**\n     * @param {?String} [modifier] - the BEM Modifier for the Block or Element; if undefined, selects the Block or Element unmodified.\n     * @returns {String}\n     */\n    modifier =>\n      [\n        \".\",\n        css(block),\n        element ? \\`__\\${css(element)}\\` : \"\",\n        modifier ? \\`--\\${css(modifier)}\\` : \"\"\n      ].join(\"\");\n\n<FlatList\n  renderItem={(\n    info, // $FlowExpectedError - bad widgetCount type 6, should be Object\n  ) => <span>{info.item.widget.missingProp}</span>}\n  data={data}\n/>\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * Curried function that ends with a BEM CSS Selector\n *\n * @param {String} block - the BEM Block you'd like to select.\n * @returns {Function}\n */\nexport const bem = block =>\n  /**\n   * @param {String} [element] - the BEM Element within that block; if undefined, selects the block itself.\n   * @returns {Function}\n   */\n  element =>\n    /**\n     * @param {?String} [modifier] - the BEM Modifier for the Block or Element; if undefined, selects the Block or Element unmodified.\n     * @returns {String}\n     */\n    modifier =>\n      [\n        \".\",\n        css(block),\n        element ? \\`__\\${css(element)}\\` : \"\",\n        modifier ? \\`--\\${css(modifier)}\\` : \"\"\n      ].join(\"\");\n\n<FlatList\n  renderItem={(\n    info // $FlowExpectedError - bad widgetCount type 6, should be Object\n  ) => <span>{info.item.widget.missingProp}</span>}\n  data={data}\n/>;\n\n`;\n\nexports[`comment.js 2`] = `\n/**\n * Curried function that ends with a BEM CSS Selector\n *\n * @param {String} block - the BEM Block you'd like to select.\n * @returns {Function}\n */\nexport const bem = block =>\n  /**\n   * @param {String} [element] - the BEM Element within that block; if undefined, selects the block itself.\n   * @returns {Function}\n   */\n  element =>\n    /**\n     * @param {?String} [modifier] - the BEM Modifier for the Block or Element; if undefined, selects the Block or Element unmodified.\n     * @returns {String}\n     */\n    modifier =>\n      [\n        \".\",\n        css(block),\n        element ? \\`__\\${css(element)}\\` : \"\",\n        modifier ? \\`--\\${css(modifier)}\\` : \"\"\n      ].join(\"\");\n\n<FlatList\n  renderItem={(\n    info, // $FlowExpectedError - bad widgetCount type 6, should be Object\n  ) => <span>{info.item.widget.missingProp}</span>}\n  data={data}\n/>\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * Curried function that ends with a BEM CSS Selector\n *\n * @param {String} block - the BEM Block you'd like to select.\n * @returns {Function}\n */\nexport const bem = (block) =>\n  /**\n   * @param {String} [element] - the BEM Element within that block; if undefined, selects the block itself.\n   * @returns {Function}\n   */\n  (element) =>\n    /**\n     * @param {?String} [modifier] - the BEM Modifier for the Block or Element; if undefined, selects the Block or Element unmodified.\n     * @returns {String}\n     */\n    (modifier) =>\n      [\n        \".\",\n        css(block),\n        element ? \\`__\\${css(element)}\\` : \"\",\n        modifier ? \\`--\\${css(modifier)}\\` : \"\"\n      ].join(\"\");\n\n<FlatList\n  renderItem={(\n    info // $FlowExpectedError - bad widgetCount type 6, should be Object\n  ) => <span>{info.item.widget.missingProp}</span>}\n  data={data}\n/>;\n\n`;\n\nexports[`currying.js 1`] = `\nconst fn = b => c => d => {\n  return 3;\n};\n\nconst mw = store => next => action => {\n  return next(action)\n}\n\nconst middleware = options => (req, res, next) => {\n  // ...\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst fn = b => c => d => {\n  return 3;\n};\n\nconst mw = store => next => action => {\n  return next(action);\n};\n\nconst middleware = options => (req, res, next) => {\n  // ...\n};\n\n`;\n\nexports[`currying.js 2`] = `\nconst fn = b => c => d => {\n  return 3;\n};\n\nconst mw = store => next => action => {\n  return next(action)\n}\n\nconst middleware = options => (req, res, next) => {\n  // ...\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst fn = (b) => (c) => (d) => {\n  return 3;\n};\n\nconst mw = (store) => (next) => (action) => {\n  return next(action);\n};\n\nconst middleware = (options) => (req, res, next) => {\n  // ...\n};\n\n`;\n\nexports[`long-call-no-args.js 1`] = `\nveryLongCall(VERY_VERY_VERY_VERY_VERY_VERY_VERY_VERY_VERY_VERY_LONG_CONSTANT, () => {})\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nveryLongCall(\n  VERY_VERY_VERY_VERY_VERY_VERY_VERY_VERY_VERY_VERY_LONG_CONSTANT,\n  () => {}\n);\n\n`;\n\nexports[`long-call-no-args.js 2`] = `\nveryLongCall(VERY_VERY_VERY_VERY_VERY_VERY_VERY_VERY_VERY_VERY_LONG_CONSTANT, () => {})\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nveryLongCall(\n  VERY_VERY_VERY_VERY_VERY_VERY_VERY_VERY_VERY_VERY_LONG_CONSTANT,\n  () => {}\n);\n\n`;\n\nexports[`long-contents.js 1`] = `\nconst foo = () => {\n  expect(arg1, arg2, arg3).toEqual({message: 'test', messageType: 'SMS', status: 'Unknown', created: '11/01/2017 13:36'});\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst foo = () => {\n  expect(arg1, arg2, arg3).toEqual({\n    message: \"test\",\n    messageType: \"SMS\",\n    status: \"Unknown\",\n    created: \"11/01/2017 13:36\"\n  });\n};\n\n`;\n\nexports[`long-contents.js 2`] = `\nconst foo = () => {\n  expect(arg1, arg2, arg3).toEqual({message: 'test', messageType: 'SMS', status: 'Unknown', created: '11/01/2017 13:36'});\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst foo = () => {\n  expect(arg1, arg2, arg3).toEqual({\n    message: \"test\",\n    messageType: \"SMS\",\n    status: \"Unknown\",\n    created: \"11/01/2017 13:36\"\n  });\n};\n\n`;\n\nexports[`short_body.js 1`] = `\nconst initializeSnapshotState = (\n  testFile: Path,\n  update: boolean,\n  testPath: string,\n  expand: boolean,\n) => new SnapshotState(testFile, update, testPath, expand);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst initializeSnapshotState = (\n  testFile: Path,\n  update: boolean,\n  testPath: string,\n  expand: boolean\n) => new SnapshotState(testFile, update, testPath, expand);\n\n`;\n\nexports[`short_body.js 2`] = `\nconst initializeSnapshotState = (\n  testFile: Path,\n  update: boolean,\n  testPath: string,\n  expand: boolean,\n) => new SnapshotState(testFile, update, testPath, expand);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst initializeSnapshotState = (\n  testFile: Path,\n  update: boolean,\n  testPath: string,\n  expand: boolean\n) => new SnapshotState(testFile, update, testPath, expand);\n\n`;\n\nexports[`type_params.js 1`] = `\n<T>(a) => { }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<T>(a) => {};\n\n`;\n\nexports[`type_params.js 2`] = `\n<T>(a) => { }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<T>(a) => {};\n\n`;\n"
  },
  {
    "path": "tests/arrows/arrow-parens.js",
    "content": "() => {};\r\n(a) => { return a; };\r\na => a;\r\n(a, b) => a * b;\r\n(a, b, c) => { return a * b + c; };\r\n"
  },
  {
    "path": "tests/arrows/arrow_function_expression.js",
    "content": "(a => {}).length\ntypeof (() => {});\nexport default (() => {})();\n(() => {})()``;\n(() => {})``;\nnew (() => {});\nif ((() => {}) ? 1 : 0) {}\nlet f = () => ({}())\nlet a = () => ({} instanceof a);\na = () => ({} && a);\na = () => ({}() && a);\na = () => ({} && a && b);\na = () => ({} + a);\na = () => ({}()() && a);\na = () => ({}.b && a);\na = () => ({}[b] && a);\na = () => ({}`` && a);\na = () => ({} = 0);\na = () => ({}, a);\na => a instanceof {};\na => ({}().b && 0)\na => ({}().c = 0)\nx => ({}()())\nx => ({}()``)\nx => ({}().b);\na = b => c;\na = (b?) => c;\nx => (y = z);\nx => (y += z);\nf(a => ({})) + 1;\n(a => ({})) || 0;\n"
  },
  {
    "path": "tests/arrows/block_like.js",
    "content": "a = () => ({} = this);\n"
  },
  {
    "path": "tests/arrows/call.js",
    "content": "Seq(typeDef.interface.groups).forEach(group =>\n  Seq(group.members).forEach((member, memberName) =>\n    markdownDoc(\n      member.doc,\n      { typePath: typePath.concat(memberName.slice(1)),\n       signatures: member.signatures }\n    )\n  )\n)\n\nconst promiseFromCallback = fn =>\n  new Promise((resolve, reject) =>\n    fn((err, result) => {\n      if (err) return reject(err);\n      return resolve(result);\n    })\n  );\n\nruntimeAgent.getProperties(\n  objectId,\n  false, // ownProperties\n  false, // accessorPropertiesOnly\n  false, // generatePreview\n  (error, properties, internalProperties) => {\n    return 1\n  },\n);\n\nfunction render() {\n  return (\n    <View>\n      <Image\n        onProgress={(e) => this.setState({progress: Math.round(100 * e.nativeEvent.loaded / e.nativeEvent.total)})}\n      />\n    </View>\n  );\n}\n\nfunction render() {\n  return (\n    <View>\n      <Image\n        onProgress={e =>\n          this.setState({\n            progress: Math.round(\n              100 * e.nativeEvent.loaded / e.nativeEvent.total,\n            ),\n          })}\n      />\n    </View>\n  );\n}\n\nfunction render() {\n  return (\n    <View>\n      <Image\n        onProgress={e =>\n          this.setState({\n            progress: Math.round(\n              100 * e.nativeEvent.loaded / e.nativeEvent.total,\n            ),\n          })}\n      />\n    </View>\n  );\n}\n\njest.mock(\n  '../SearchSource',\n  () => class {\n    findMatchingTests(pattern) {\n      return {paths: []};\n    }\n  },\n);\n\nfooooooooooooooooooooooooooooooooooooooooooooooooooo(action => next =>\n    dispatch(action),\n);\n"
  },
  {
    "path": "tests/arrows/comment.js",
    "content": "/**\n * Curried function that ends with a BEM CSS Selector\n *\n * @param {String} block - the BEM Block you'd like to select.\n * @returns {Function}\n */\nexport const bem = block =>\n  /**\n   * @param {String} [element] - the BEM Element within that block; if undefined, selects the block itself.\n   * @returns {Function}\n   */\n  element =>\n    /**\n     * @param {?String} [modifier] - the BEM Modifier for the Block or Element; if undefined, selects the Block or Element unmodified.\n     * @returns {String}\n     */\n    modifier =>\n      [\n        \".\",\n        css(block),\n        element ? `__${css(element)}` : \"\",\n        modifier ? `--${css(modifier)}` : \"\"\n      ].join(\"\");\n\n<FlatList\n  renderItem={(\n    info, // $FlowExpectedError - bad widgetCount type 6, should be Object\n  ) => <span>{info.item.widget.missingProp}</span>}\n  data={data}\n/>\n"
  },
  {
    "path": "tests/arrows/currying.js",
    "content": "const fn = b => c => d => {\n  return 3;\n};\n\nconst mw = store => next => action => {\n  return next(action)\n}\n\nconst middleware = options => (req, res, next) => {\n  // ...\n};\n"
  },
  {
    "path": "tests/arrows/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"babylon\" }, [\"typescript\"]);\nrun_spec(__dirname, { parser: \"babylon\", arrowParens: true }, [\"typescript\"]);\n"
  },
  {
    "path": "tests/arrows/long-call-no-args.js",
    "content": "veryLongCall(VERY_VERY_VERY_VERY_VERY_VERY_VERY_VERY_VERY_VERY_LONG_CONSTANT, () => {})\n"
  },
  {
    "path": "tests/arrows/long-contents.js",
    "content": "const foo = () => {\n  expect(arg1, arg2, arg3).toEqual({message: 'test', messageType: 'SMS', status: 'Unknown', created: '11/01/2017 13:36'});\n};\n"
  },
  {
    "path": "tests/arrows/short_body.js",
    "content": "const initializeSnapshotState = (\n  testFile: Path,\n  update: boolean,\n  testPath: string,\n  expand: boolean,\n) => new SnapshotState(testFile, update, testPath, expand);\n"
  },
  {
    "path": "tests/arrows/type_params.js",
    "content": "<T>(a) => { }\n"
  },
  {
    "path": "tests/arrows_bind/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`arrows-bind.js 1`] = `\na => ({}::b()\\`\\`[''].c++ && 0 ? 0 : 0);\n(a => b)::c;\na::(b => c);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\na => ({}::b()\\`\\`[\"\"].c++ && 0 ? 0 : 0);\n(a => b)::c;\na::(b => c);\n\n`;\n"
  },
  {
    "path": "tests/arrows_bind/arrows-bind.js",
    "content": "a => ({}::b()``[''].c++ && 0 ? 0 : 0);\n(a => b)::c;\na::(b => c);\n"
  },
  {
    "path": "tests/arrows_bind/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"babylon\" });\n"
  },
  {
    "path": "tests/assignment/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`binaryish.js 1`] = `\nconst computedDescriptionLines = (showConfirm &&\n  descriptionLinesConfirming) ||\n  (focused && !loading && descriptionLinesFocused) ||\n  descriptionLines;\n\ncomputedDescriptionLines = (focused &&\n  !loading &&\n  descriptionLinesFocused) ||\n  descriptionLines;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst computedDescriptionLines =\n  (showConfirm && descriptionLinesConfirming) ||\n  (focused && !loading && descriptionLinesFocused) ||\n  descriptionLines;\n\ncomputedDescriptionLines =\n  (focused && !loading && descriptionLinesFocused) || descriptionLines;\n\n`;\n\nexports[`sequence.js 1`] = `\nfor ((i = 0), (len = arr.length); i < len; i++) {\n  console.log(arr[i])\n}\n\nfor (i = 0, len = arr.length; i < len; i++) {\n  console.log(arr[i])\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfor (i = 0, len = arr.length; i < len; i++) {\n  console.log(arr[i]);\n}\n\nfor (i = 0, len = arr.length; i < len; i++) {\n  console.log(arr[i]);\n}\n\n`;\n"
  },
  {
    "path": "tests/assignment/binaryish.js",
    "content": "const computedDescriptionLines = (showConfirm &&\n  descriptionLinesConfirming) ||\n  (focused && !loading && descriptionLinesFocused) ||\n  descriptionLines;\n\ncomputedDescriptionLines = (focused &&\n  !loading &&\n  descriptionLinesFocused) ||\n  descriptionLines;\n"
  },
  {
    "path": "tests/assignment/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/assignment/sequence.js",
    "content": "for ((i = 0), (len = arr.length); i < len; i++) {\n  console.log(arr[i])\n}\n\nfor (i = 0, len = arr.length; i < len; i++) {\n  console.log(arr[i])\n}\n"
  },
  {
    "path": "tests/assignment_comments/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`assignment_comments.js 1`] = `\nfnString =\n  // Comment\n  'some' + 'long' + 'string';\n\nvar fnString =\n  // Comment\n  'some' + 'long' + 'string';\n\nvar fnString =\n  // Comment\n\n  'some' + 'long' + 'string';\n\nvar fnString =\n\n  // Comment\n\n  'some' + 'long' + 'string';\n\nvar fnString =\n  /* comment */\n  'some' + 'long' + 'string';\n\nvar fnString =\n  /**\n   * multi-line\n   */\n  'some' + 'long' + 'string';\n\nvar fnString =\n  /* inline */ 'some' + 'long' + 'string' + 'some' + 'long' + 'string' + 'some' + 'long' + 'string' + 'some' + 'long' + 'string';\n\nvar fnString = // Comment\n  // Comment\n  'some' + 'long' + 'string';\n\nvar fnString = // Comment\n  'some' + 'long' + 'string';\n\nlet f = (\n  a =\n  //comment\n  b\n) => {};\n\nlet f = (\n  a = //comment\n  b\n) => {};\n\nlet f = (\n  a =\n  b //comment\n) => {};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfnString =\n  // Comment\n  \"some\" + \"long\" + \"string\";\n\nvar fnString =\n  // Comment\n  \"some\" + \"long\" + \"string\";\n\nvar fnString =\n  // Comment\n\n  \"some\" + \"long\" + \"string\";\n\nvar fnString =\n  // Comment\n\n  \"some\" + \"long\" + \"string\";\n\nvar fnString =\n  /* comment */\n  \"some\" + \"long\" + \"string\";\n\nvar fnString =\n  /**\n   * multi-line\n   */\n  \"some\" + \"long\" + \"string\";\n\nvar fnString =\n  /* inline */ \"some\" +\n  \"long\" +\n  \"string\" +\n  \"some\" +\n  \"long\" +\n  \"string\" +\n  \"some\" +\n  \"long\" +\n  \"string\" +\n  \"some\" +\n  \"long\" +\n  \"string\";\n\nvar fnString = // Comment\n  // Comment\n  \"some\" + \"long\" + \"string\";\n\nvar fnString = // Comment\n  \"some\" + \"long\" + \"string\";\n\nlet f = (\n  //comment\n  a = b\n) => {};\n\nlet f = (\n  a = b //comment\n) => {};\n\nlet f = (\n  a = b //comment\n) => {};\n\n`;\n"
  },
  {
    "path": "tests/assignment_comments/assignment_comments.js",
    "content": "fnString =\n  // Comment\n  'some' + 'long' + 'string';\n\nvar fnString =\n  // Comment\n  'some' + 'long' + 'string';\n\nvar fnString =\n  // Comment\n\n  'some' + 'long' + 'string';\n\nvar fnString =\n\n  // Comment\n\n  'some' + 'long' + 'string';\n\nvar fnString =\n  /* comment */\n  'some' + 'long' + 'string';\n\nvar fnString =\n  /**\n   * multi-line\n   */\n  'some' + 'long' + 'string';\n\nvar fnString =\n  /* inline */ 'some' + 'long' + 'string' + 'some' + 'long' + 'string' + 'some' + 'long' + 'string' + 'some' + 'long' + 'string';\n\nvar fnString = // Comment\n  // Comment\n  'some' + 'long' + 'string';\n\nvar fnString = // Comment\n  'some' + 'long' + 'string';\n\nlet f = (\n  a =\n  //comment\n  b\n) => {};\n\nlet f = (\n  a = //comment\n  b\n) => {};\n\nlet f = (\n  a =\n  b //comment\n) => {};\n"
  },
  {
    "path": "tests/assignment_comments/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/assignment_expression/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`assignment_expression.js 1`] = `\nthis.size = this._origin = this._capacity = 0;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nthis.size = this._origin = this._capacity = 0;\n\n`;\n"
  },
  {
    "path": "tests/assignment_expression/assignment_expression.js",
    "content": "this.size = this._origin = this._capacity = 0;\n"
  },
  {
    "path": "tests/assignment_expression/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/async/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`async-iteration.js 1`] = `\n\nasync function * a() {\n    yield* b();\n}\n\nclass X {\n    async * b() {\n        yield* a();\n    }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nasync function* a() {\n  yield* b();\n}\n\nclass X {\n  async *b() {\n    yield* a();\n  }\n}\n\n`;\n\nexports[`await_parse.js 1`] = `\nasync function f() { (await f()).length }\nasync function g() {\n  invariant(\n    (await driver.navigator.getUrl()).substr(-7)\n  );\n}\nfunction *f(){\n  !(yield a);\n}\nasync function f() {\n  a = !(await f());\n}\nasync () => {\n  new A(await x);\n  obj[await x];\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nasync function f() {\n  (await f()).length;\n}\nasync function g() {\n  invariant((await driver.navigator.getUrl()).substr(-7));\n}\nfunction* f() {\n  !(yield a);\n}\nasync function f() {\n  a = !await f();\n}\nasync () => {\n  new A(await x);\n  obj[await x];\n};\n\n`;\n\nexports[`conditional-expression.js 1`] = `\nasync function f() {\n  const result = typeof fn === 'function' ? await fn() : null;\n}\n\n(async function() {\n  console.log(\n    await (true ? Promise.resolve(\"A\") : Promise.resolve(\"B\"))\n  );\n})()\n\nasync function f() {\n  await (spellcheck && spellcheck.setChecking(false));\n  await spellcheck && spellcheck.setChecking(false)\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nasync function f() {\n  const result = typeof fn === \"function\" ? await fn() : null;\n}\n\n(async function() {\n  console.log(await (true ? Promise.resolve(\"A\") : Promise.resolve(\"B\")));\n})();\n\nasync function f() {\n  await (spellcheck && spellcheck.setChecking(false));\n  (await spellcheck) && spellcheck.setChecking(false);\n}\n\n`;\n\nexports[`parens.js 1`] = `\nasync function *f(){ await (yield x); }\n\nasync function f(){ await (() => {}); }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nasync function* f() {\n  await (yield x);\n}\n\nasync function f() {\n  await (() => {});\n}\n\n`;\n"
  },
  {
    "path": "tests/async/async-iteration.js",
    "content": "\nasync function * a() {\n    yield* b();\n}\n\nclass X {\n    async * b() {\n        yield* a();\n    }\n}\n"
  },
  {
    "path": "tests/async/await_parse.js",
    "content": "async function f() { (await f()).length }\nasync function g() {\n  invariant(\n    (await driver.navigator.getUrl()).substr(-7)\n  );\n}\nfunction *f(){\n  !(yield a);\n}\nasync function f() {\n  a = !(await f());\n}\nasync () => {\n  new A(await x);\n  obj[await x];\n}\n"
  },
  {
    "path": "tests/async/conditional-expression.js",
    "content": "async function f() {\n  const result = typeof fn === 'function' ? await fn() : null;\n}\n\n(async function() {\n  console.log(\n    await (true ? Promise.resolve(\"A\") : Promise.resolve(\"B\"))\n  );\n})()\n\nasync function f() {\n  await (spellcheck && spellcheck.setChecking(false));\n  await spellcheck && spellcheck.setChecking(false)\n}\n"
  },
  {
    "path": "tests/async/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/async/parens.js",
    "content": "async function *f(){ await (yield x); }\n\nasync function f(){ await (() => {}); }\n"
  },
  {
    "path": "tests/binary-expressions/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`arrow.js 1`] = `\nfunction f() {\n  const appEntitys = getAppEntitys(loadObject).filter(\n    entity => entity && entity.isInstallAvailable() && !entity.isQueue() && entity.isDisabled()\n  )\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction f() {\n  const appEntitys = getAppEntitys(loadObject).filter(\n    entity =>\n      entity &&\n      entity.isInstallAvailable() &&\n      !entity.isQueue() &&\n      entity.isDisabled()\n  );\n}\n\n`;\n\nexports[`bitwise-flags.js 1`] = `\nconst FLAG_A = 1 << 0;\nconst FLAG_B = 1 << 1;\nconst FLAG_C = 1 << 2;\n\nconst all = FLAG_A | FLAG_B | FLAG_C;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst FLAG_A = 1 << 0;\nconst FLAG_B = 1 << 1;\nconst FLAG_C = 1 << 2;\n\nconst all = FLAG_A | FLAG_B | FLAG_C;\n\n`;\n\nexports[`comment.js 1`] = `\na = (\n  // Commment 1\n  (Math.random() * (yRange * (1 - minVerticalFraction)))\n  + (minVerticalFraction * yRange)\n) - offset;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\na =\n  // Commment 1\n  Math.random() * (yRange * (1 - minVerticalFraction)) +\n  minVerticalFraction * yRange -\n  offset;\n\n`;\n\nexports[`equality.js 1`] = `\nx == y == z;\nx != y == z;\nx == y != z;\nx != y != z;\n\nx === y === z;\nx !== y === z;\nx === y !== z;\nx !== y !== z;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n(x == y) == z;\n(x != y) == z;\n(x == y) != z;\n(x != y) != z;\n\n(x === y) === z;\n(x !== y) === z;\n(x === y) !== z;\n(x !== y) !== z;\n\n`;\n\nexports[`exp.js 1`] = `\na ** b ** c;\n(a ** b) ** c;\na.b ** c;\n(-a) ** b;\na ** -b;\n-(a**b);\n(a * b) ** c;\na ** (b * c);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\na ** (b ** c);\n(a ** b) ** c;\na.b ** c;\n(-a) ** b;\na ** -b;\n-(a ** b);\n(a * b) ** c;\na ** (b * c);\n\n`;\n\nexports[`if.js 1`] = `\nif (this.hasPlugin(\"dynamicImports\") && this.lookahead().type) {}\n\nif (this.hasPlugin(\"dynamicImports\") && this.lookahead().type === tt.parenLeft) {}\n\nif (this.hasPlugin(\"dynamicImports\") && this.lookahead().type === tt.parenLeft.right) {}\n\nif (VeryVeryVeryVeryVeryVeryVeryVeryLong === VeryVeryVeryVeryVeryVeryVeryVeryLong) {\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nif (this.hasPlugin(\"dynamicImports\") && this.lookahead().type) {\n}\n\nif (\n  this.hasPlugin(\"dynamicImports\") &&\n  this.lookahead().type === tt.parenLeft\n) {\n}\n\nif (\n  this.hasPlugin(\"dynamicImports\") &&\n  this.lookahead().type === tt.parenLeft.right\n) {\n}\n\nif (\n  VeryVeryVeryVeryVeryVeryVeryVeryLong === VeryVeryVeryVeryVeryVeryVeryVeryLong\n) {\n}\n\n`;\n\nexports[`inline-object-array.js 1`] = `\nprevState = prevState || {\n  catalogs: [],\n  loadState: LOADED,\n  opened: false,\n  searchQuery: '',\n  selectedCatalog: null,\n};\n\nthis.steps = steps || [\n  {\n    name: 'mock-module',\n    path: '/nux/mock-module',\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nprevState = prevState || {\n  catalogs: [],\n  loadState: LOADED,\n  opened: false,\n  searchQuery: \"\",\n  selectedCatalog: null\n};\n\nthis.steps = steps || [\n  {\n    name: \"mock-module\",\n    path: \"/nux/mock-module\"\n  }\n];\n\n`;\n\nexports[`jsx_parent.js 1`] = `\n<div\n  src={\n    !isJellyfishEnabled &&\n    diffUpdateMessageInput != null &&\n    this.state.isUpdateMessageEmpty\n  }\n/>;\n\n<div>\n  {!isJellyfishEnabled &&\n    diffUpdateMessageInput != null &&\n    this.state.isUpdateMessageEmpty}\n</div>;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<div\n  src={\n    !isJellyfishEnabled &&\n    diffUpdateMessageInput != null &&\n    this.state.isUpdateMessageEmpty\n  }\n/>;\n\n<div>\n  {!isJellyfishEnabled &&\n    diffUpdateMessageInput != null &&\n    this.state.isUpdateMessageEmpty}\n</div>;\n\n`;\n\nexports[`math.js 1`] = `\nx + y / z;\nx / y + z;\n\nx * y % z;\nx / y % z;\nx % y * z;\nx % y / z;\n\nx % y % z;\n\nx << y >> z;\nx >>> y << z;\nx >>> y >>> z;\nx + y >> z;\n\nx | y & z;\nx & y | z;\nx ^ y ^ z;\nx & y & z;\nx | y | z;\nx & y >> z;\nx << y | z;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nx + y / z;\nx / y + z;\n\n(x * y) % z;\n(x / y) % z;\n(x % y) * z;\n(x % y) / z;\n\n(x % y) % z;\n\n(x << y) >> z;\n(x >>> y) << z;\n(x >>> y) >>> z;\n(x + y) >> z;\n\nx | (y & z);\n(x & y) | z;\nx ^ y ^ z;\nx & y & z;\nx | y | z;\nx & (y >> z);\n(x << y) | z;\n\n`;\n\nexports[`short-right.js 1`] = `\nthis._cumulativeHeights &&\n Math.abs(\n   this._cachedItemHeight(this._firstVisibleIndex + i) -\n     this._provider.fastHeight(i + this._firstVisibleIndex),\n ) >\n   1\n\nfoooooooooooooooooooooooooooooooooooooooooooooooooooooooooo(\n  aaaaaaaaaaaaaaaaaaa\n) +\n  a;\n\nconst isPartOfPackageJSON = dependenciesArray.indexOf(\n  dependencyWithOutRelativePath.split('/')[0],\n) !== -1;\n\ndefaultContent.filter(defaultLocale => {\n  // ...\n})[0] || null;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nthis._cumulativeHeights &&\n  Math.abs(\n    this._cachedItemHeight(this._firstVisibleIndex + i) -\n      this._provider.fastHeight(i + this._firstVisibleIndex)\n  ) > 1;\n\nfoooooooooooooooooooooooooooooooooooooooooooooooooooooooooo(\n  aaaaaaaaaaaaaaaaaaa\n) + a;\n\nconst isPartOfPackageJSON =\n  dependenciesArray.indexOf(dependencyWithOutRelativePath.split(\"/\")[0]) !== -1;\n\ndefaultContent.filter(defaultLocale => {\n  // ...\n})[0] || null;\n\n`;\n\nexports[`test.js 1`] = `\n// It should always break the highest precedence operators first, and\n// break them all at the same time.\n\nconst x = longVariable + longVariable + longVariable;\nconst x = longVariable + longVariable + longVariable + longVariable - longVariable + longVariable;\nconst x = longVariable + longVariable * longVariable + longVariable - longVariable + longVariable;\nconst x = longVariable + longVariable * longVariable * longVariable / longVariable + longVariable;\n\nconst x = longVariable && longVariable && longVariable && longVariable && longVariable && longVariable;\nconst x = longVariable && longVariable || longVariable && longVariable || longVariable && longVariable;\nconst x = firstItemWithAVeryLongNameThatKeepsGoing || firstItemWithAVeryLongNameThatKeepsGoing || {};\nconst x = firstItemWithAVeryLongNameThatKeepsGoing || firstItemWithAVeryLongNameThatKeepsGoing || [];\nconst x = call(firstItemWithAVeryLongNameThatKeepsGoing, firstItemWithAVeryLongNameThatKeepsGoing) || [];\n\nconst x = longVariable * longint && longVariable >> 0 && longVariable + longVariable;\n\nconst x = longVariable > longint && longVariable === 0 + longVariable * longVariable;\n\nfoo(obj.property * new Class() && obj instanceof Class && longVariable ? number + 5 : false);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// It should always break the highest precedence operators first, and\n// break them all at the same time.\n\nconst x = longVariable + longVariable + longVariable;\nconst x =\n  longVariable +\n  longVariable +\n  longVariable +\n  longVariable -\n  longVariable +\n  longVariable;\nconst x =\n  longVariable +\n  longVariable * longVariable +\n  longVariable -\n  longVariable +\n  longVariable;\nconst x =\n  longVariable +\n  longVariable * longVariable * longVariable / longVariable +\n  longVariable;\n\nconst x =\n  longVariable &&\n  longVariable &&\n  longVariable &&\n  longVariable &&\n  longVariable &&\n  longVariable;\nconst x =\n  (longVariable && longVariable) ||\n  (longVariable && longVariable) ||\n  (longVariable && longVariable);\nconst x =\n  firstItemWithAVeryLongNameThatKeepsGoing ||\n  firstItemWithAVeryLongNameThatKeepsGoing ||\n  {};\nconst x =\n  firstItemWithAVeryLongNameThatKeepsGoing ||\n  firstItemWithAVeryLongNameThatKeepsGoing ||\n  [];\nconst x =\n  call(\n    firstItemWithAVeryLongNameThatKeepsGoing,\n    firstItemWithAVeryLongNameThatKeepsGoing\n  ) || [];\n\nconst x =\n  longVariable * longint && longVariable >> 0 && longVariable + longVariable;\n\nconst x =\n  longVariable > longint && longVariable === 0 + longVariable * longVariable;\n\nfoo(\n  obj.property * new Class() && obj instanceof Class && longVariable\n    ? number + 5\n    : false\n);\n\n`;\n\nexports[`unary.js 1`] = `\nconst anyTestFailures = !(\n  aggregatedResults.numFailedTests === 0 &&\n  aggregatedResults.numRuntimeErrorTestSuites === 0\n);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst anyTestFailures = !(\n  aggregatedResults.numFailedTests === 0 &&\n  aggregatedResults.numRuntimeErrorTestSuites === 0\n);\n\n`;\n"
  },
  {
    "path": "tests/binary-expressions/arrow.js",
    "content": "function f() {\n  const appEntitys = getAppEntitys(loadObject).filter(\n    entity => entity && entity.isInstallAvailable() && !entity.isQueue() && entity.isDisabled()\n  )\n}\n"
  },
  {
    "path": "tests/binary-expressions/bitwise-flags.js",
    "content": "const FLAG_A = 1 << 0;\nconst FLAG_B = 1 << 1;\nconst FLAG_C = 1 << 2;\n\nconst all = FLAG_A | FLAG_B | FLAG_C;\n"
  },
  {
    "path": "tests/binary-expressions/comment.js",
    "content": "a = (\n  // Commment 1\n  (Math.random() * (yRange * (1 - minVerticalFraction)))\n  + (minVerticalFraction * yRange)\n) - offset;\n"
  },
  {
    "path": "tests/binary-expressions/equality.js",
    "content": "x == y == z;\nx != y == z;\nx == y != z;\nx != y != z;\n\nx === y === z;\nx !== y === z;\nx === y !== z;\nx !== y !== z;\n"
  },
  {
    "path": "tests/binary-expressions/exp.js",
    "content": "a ** b ** c;\n(a ** b) ** c;\na.b ** c;\n(-a) ** b;\na ** -b;\n-(a**b);\n(a * b) ** c;\na ** (b * c);\n"
  },
  {
    "path": "tests/binary-expressions/if.js",
    "content": "if (this.hasPlugin(\"dynamicImports\") && this.lookahead().type) {}\n\nif (this.hasPlugin(\"dynamicImports\") && this.lookahead().type === tt.parenLeft) {}\n\nif (this.hasPlugin(\"dynamicImports\") && this.lookahead().type === tt.parenLeft.right) {}\n\nif (VeryVeryVeryVeryVeryVeryVeryVeryLong === VeryVeryVeryVeryVeryVeryVeryVeryLong) {\n}\n"
  },
  {
    "path": "tests/binary-expressions/inline-object-array.js",
    "content": "prevState = prevState || {\n  catalogs: [],\n  loadState: LOADED,\n  opened: false,\n  searchQuery: '',\n  selectedCatalog: null,\n};\n\nthis.steps = steps || [\n  {\n    name: 'mock-module',\n    path: '/nux/mock-module',\n  },\n];\n"
  },
  {
    "path": "tests/binary-expressions/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/binary-expressions/jsx_parent.js",
    "content": "<div\n  src={\n    !isJellyfishEnabled &&\n    diffUpdateMessageInput != null &&\n    this.state.isUpdateMessageEmpty\n  }\n/>;\n\n<div>\n  {!isJellyfishEnabled &&\n    diffUpdateMessageInput != null &&\n    this.state.isUpdateMessageEmpty}\n</div>;\n"
  },
  {
    "path": "tests/binary-expressions/math.js",
    "content": "x + y / z;\nx / y + z;\n\nx * y % z;\nx / y % z;\nx % y * z;\nx % y / z;\n\nx % y % z;\n\nx << y >> z;\nx >>> y << z;\nx >>> y >>> z;\nx + y >> z;\n\nx | y & z;\nx & y | z;\nx ^ y ^ z;\nx & y & z;\nx | y | z;\nx & y >> z;\nx << y | z;\n"
  },
  {
    "path": "tests/binary-expressions/short-right.js",
    "content": "this._cumulativeHeights &&\n Math.abs(\n   this._cachedItemHeight(this._firstVisibleIndex + i) -\n     this._provider.fastHeight(i + this._firstVisibleIndex),\n ) >\n   1\n\nfoooooooooooooooooooooooooooooooooooooooooooooooooooooooooo(\n  aaaaaaaaaaaaaaaaaaa\n) +\n  a;\n\nconst isPartOfPackageJSON = dependenciesArray.indexOf(\n  dependencyWithOutRelativePath.split('/')[0],\n) !== -1;\n\ndefaultContent.filter(defaultLocale => {\n  // ...\n})[0] || null;\n"
  },
  {
    "path": "tests/binary-expressions/test.js",
    "content": "// It should always break the highest precedence operators first, and\n// break them all at the same time.\n\nconst x = longVariable + longVariable + longVariable;\nconst x = longVariable + longVariable + longVariable + longVariable - longVariable + longVariable;\nconst x = longVariable + longVariable * longVariable + longVariable - longVariable + longVariable;\nconst x = longVariable + longVariable * longVariable * longVariable / longVariable + longVariable;\n\nconst x = longVariable && longVariable && longVariable && longVariable && longVariable && longVariable;\nconst x = longVariable && longVariable || longVariable && longVariable || longVariable && longVariable;\nconst x = firstItemWithAVeryLongNameThatKeepsGoing || firstItemWithAVeryLongNameThatKeepsGoing || {};\nconst x = firstItemWithAVeryLongNameThatKeepsGoing || firstItemWithAVeryLongNameThatKeepsGoing || [];\nconst x = call(firstItemWithAVeryLongNameThatKeepsGoing, firstItemWithAVeryLongNameThatKeepsGoing) || [];\n\nconst x = longVariable * longint && longVariable >> 0 && longVariable + longVariable;\n\nconst x = longVariable > longint && longVariable === 0 + longVariable * longVariable;\n\nfoo(obj.property * new Class() && obj instanceof Class && longVariable ? number + 5 : false);\n"
  },
  {
    "path": "tests/binary-expressions/unary.js",
    "content": "const anyTestFailures = !(\n  aggregatedResults.numFailedTests === 0 &&\n  aggregatedResults.numRuntimeErrorTestSuites === 0\n);\n"
  },
  {
    "path": "tests/binary_math/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`parens.js 1`] = `\nconst result = (a + b) >>> 1;\nvar sizeIndex = ((index - 1) >>> level) & MASK;\nvar from = offset > left ? 0 : (left - offset) >> level;\nvar to = ((right - offset) >> level) + 1;\nif (rawIndex < 1 << (list._level + SHIFT)) {}\nvar res = size < SIZE ? 0 : (((size - 1) >>> SHIFT) << SHIFT);\nsign = 1 - (2 * (b[3] >> 7));\nexponent = (((b[3] << 1) & 0xff) | (b[2] >> 7)) - 127;\nmantissa = ((b[2] & 0x7f) << 16) | (b[1] << 8) | b[0];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst result = (a + b) >>> 1;\nvar sizeIndex = ((index - 1) >>> level) & MASK;\nvar from = offset > left ? 0 : (left - offset) >> level;\nvar to = ((right - offset) >> level) + 1;\nif (rawIndex < 1 << (list._level + SHIFT)) {\n}\nvar res = size < SIZE ? 0 : ((size - 1) >>> SHIFT) << SHIFT;\nsign = 1 - 2 * (b[3] >> 7);\nexponent = (((b[3] << 1) & 0xff) | (b[2] >> 7)) - 127;\nmantissa = ((b[2] & 0x7f) << 16) | (b[1] << 8) | b[0];\n\n`;\n"
  },
  {
    "path": "tests/binary_math/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\", \"typescript\"]);\n"
  },
  {
    "path": "tests/binary_math/parens.js",
    "content": "const result = (a + b) >>> 1;\nvar sizeIndex = ((index - 1) >>> level) & MASK;\nvar from = offset > left ? 0 : (left - offset) >> level;\nvar to = ((right - offset) >> level) + 1;\nif (rawIndex < 1 << (list._level + SHIFT)) {}\nvar res = size < SIZE ? 0 : (((size - 1) >>> SHIFT) << SHIFT);\nsign = 1 - (2 * (b[3] >> 7));\nexponent = (((b[3] << 1) & 0xff) | (b[2] >> 7)) - 127;\nmantissa = ((b[2] & 0x7f) << 16) | (b[1] << 8) | b[0];\n"
  },
  {
    "path": "tests/bind_expressions/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`bind_parens.js 1`] = `\n(a || b)::c;\na || (b::c);\n::obj.prop;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n(a || b)::c;\na || b::c;\n::obj.prop;\n\n`;\n\nexports[`bind_parens.js 2`] = `\n(a || b)::c;\na || (b::c);\n::obj.prop;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n;(a || b)::c\na || b::c\n;::obj.prop\n\n`;\n\nexports[`method_chain.js 1`] = `\nimport {interval} from 'rxjs/observable/interval';\nimport {filter} from 'rxjs/operator/filter';\nimport {take} from 'rxjs/operator/take';\nimport {map} from 'rxjs/operator/map';\nimport {throttle} from 'rxjs/operator/throttle';\nimport {takeUntil} from 'rxjs/operator/takeUntil';\n\nfunction test(observable) {\n    return observable\n        ::filter(data => data.someTest)\n        ::throttle(() =>\n            interval(10)\n                ::take(1)\n                ::takeUntil(observable::filter(data => someOtherTest))\n        )\n        ::map(someFunction);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport { interval } from \"rxjs/observable/interval\";\nimport { filter } from \"rxjs/operator/filter\";\nimport { take } from \"rxjs/operator/take\";\nimport { map } from \"rxjs/operator/map\";\nimport { throttle } from \"rxjs/operator/throttle\";\nimport { takeUntil } from \"rxjs/operator/takeUntil\";\n\nfunction test(observable) {\n  return observable\n    ::filter(data => data.someTest)\n    ::throttle(() =>\n      interval(10)\n        ::take(1)\n        ::takeUntil(observable::filter(data => someOtherTest))\n    )\n    ::map(someFunction);\n}\n\n`;\n\nexports[`method_chain.js 2`] = `\nimport {interval} from 'rxjs/observable/interval';\nimport {filter} from 'rxjs/operator/filter';\nimport {take} from 'rxjs/operator/take';\nimport {map} from 'rxjs/operator/map';\nimport {throttle} from 'rxjs/operator/throttle';\nimport {takeUntil} from 'rxjs/operator/takeUntil';\n\nfunction test(observable) {\n    return observable\n        ::filter(data => data.someTest)\n        ::throttle(() =>\n            interval(10)\n                ::take(1)\n                ::takeUntil(observable::filter(data => someOtherTest))\n        )\n        ::map(someFunction);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport { interval } from \"rxjs/observable/interval\"\nimport { filter } from \"rxjs/operator/filter\"\nimport { take } from \"rxjs/operator/take\"\nimport { map } from \"rxjs/operator/map\"\nimport { throttle } from \"rxjs/operator/throttle\"\nimport { takeUntil } from \"rxjs/operator/takeUntil\"\n\nfunction test(observable) {\n  return observable\n    ::filter(data => data.someTest)\n    ::throttle(() =>\n      interval(10)\n        ::take(1)\n        ::takeUntil(observable::filter(data => someOtherTest))\n    )\n    ::map(someFunction)\n}\n\n`;\n"
  },
  {
    "path": "tests/bind_expressions/bind_parens.js",
    "content": "(a || b)::c;\na || (b::c);\n::obj.prop;\n"
  },
  {
    "path": "tests/bind_expressions/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"babylon\" });\nrun_spec(__dirname, { parser: \"babylon\", semi: false });\n"
  },
  {
    "path": "tests/bind_expressions/method_chain.js",
    "content": "import {interval} from 'rxjs/observable/interval';\nimport {filter} from 'rxjs/operator/filter';\nimport {take} from 'rxjs/operator/take';\nimport {map} from 'rxjs/operator/map';\nimport {throttle} from 'rxjs/operator/throttle';\nimport {takeUntil} from 'rxjs/operator/takeUntil';\n\nfunction test(observable) {\n    return observable\n        ::filter(data => data.someTest)\n        ::throttle(() =>\n            interval(10)\n                ::take(1)\n                ::takeUntil(observable::filter(data => someOtherTest))\n        )\n        ::map(someFunction);\n}\n"
  },
  {
    "path": "tests/bracketSpacing/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`array.js 1`] = `\nconst arr1 = [1,2,3,4];\nconst arr2 = [1, 2, 3, 4];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst arr1 = [1, 2, 3, 4];\nconst arr2 = [1, 2, 3, 4];\n\n`;\n\nexports[`array.js 2`] = `\nconst arr1 = [1,2,3,4];\nconst arr2 = [1, 2, 3, 4];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst arr1 = [1, 2, 3, 4];\nconst arr2 = [1, 2, 3, 4];\n\n`;\n\nexports[`object.js 1`] = `\nconst obj1 = {a:1, b:2, c:3}\nconst obj2 = { a:1, b:2, c:3 };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst obj1 = { a: 1, b: 2, c: 3 };\nconst obj2 = { a: 1, b: 2, c: 3 };\n\n`;\n\nexports[`object.js 2`] = `\nconst obj1 = {a:1, b:2, c:3}\nconst obj2 = { a:1, b:2, c:3 };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst obj1 = {a: 1, b: 2, c: 3};\nconst obj2 = {a: 1, b: 2, c: 3};\n\n`;\n"
  },
  {
    "path": "tests/bracketSpacing/array.js",
    "content": "const arr1 = [1,2,3,4];\nconst arr2 = [1, 2, 3, 4];\n"
  },
  {
    "path": "tests/bracketSpacing/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\nrun_spec(__dirname, { bracesSpacing: false }, [\"typescript\"]);\n"
  },
  {
    "path": "tests/bracketSpacing/object.js",
    "content": "const obj1 = {a:1, b:2, c:3}\nconst obj2 = { a:1, b:2, c:3 };\n"
  },
  {
    "path": "tests/break-calls/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`break.js 1`] = `\nh(f(g(() => {\n  a\n})))\n\ndeepCopyAndAsyncMapLeavesA(\n  { source: sourceValue, destination: destination[sourceKey] },\n  { valueMapper, overwriteExistingKeys }\n)\n\ndeepCopyAndAsyncMapLeavesB(\n  1337,\n  { source: sourceValue, destination: destination[sourceKey] },\n  { valueMapper, overwriteExistingKeys }\n)\n\ndeepCopyAndAsyncMapLeavesC(\n  { source: sourceValue, destination: destination[sourceKey] },\n  1337,\n  { valueMapper, overwriteExistingKeys }\n)\n\nfunction someFunction(url) {\n  return get(url)\n    .then(\n      json => dispatch(success(json)),\n      error => dispatch(failed(error))\n    );\n}\n\nconst mapChargeItems = fp.flow(\n  l => l < 10 ? l: 1,\n  l => Immutable.Range(l).toMap()\n);\n\nexpect(new LongLongLongLongLongRange([0, 0], [0, 0])).toEqualAtomLongLongLongLongRange(new LongLongLongRange([0, 0], [0, 0]));\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nh(\n  f(\n    g(() => {\n      a;\n    })\n  )\n);\n\ndeepCopyAndAsyncMapLeavesA(\n  { source: sourceValue, destination: destination[sourceKey] },\n  { valueMapper, overwriteExistingKeys }\n);\n\ndeepCopyAndAsyncMapLeavesB(\n  1337,\n  { source: sourceValue, destination: destination[sourceKey] },\n  { valueMapper, overwriteExistingKeys }\n);\n\ndeepCopyAndAsyncMapLeavesC(\n  { source: sourceValue, destination: destination[sourceKey] },\n  1337,\n  { valueMapper, overwriteExistingKeys }\n);\n\nfunction someFunction(url) {\n  return get(url).then(\n    json => dispatch(success(json)),\n    error => dispatch(failed(error))\n  );\n}\n\nconst mapChargeItems = fp.flow(\n  l => (l < 10 ? l : 1),\n  l => Immutable.Range(l).toMap()\n);\n\nexpect(\n  new LongLongLongLongLongRange([0, 0], [0, 0])\n).toEqualAtomLongLongLongLongRange(new LongLongLongRange([0, 0], [0, 0]));\n\n`;\n\nexports[`parent.js 1`] = `\nruntimeAgent.getProperties(\n  objectId,\n  false, // ownProperties\n  false, // accessorPropertiesOnly\n  false, // generatePreview\n  (error, properties, internalProperties) => {\n    return 1\n  },\n);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nruntimeAgent.getProperties(\n  objectId,\n  false, // ownProperties\n  false, // accessorPropertiesOnly\n  false, // generatePreview\n  (error, properties, internalProperties) => {\n    return 1;\n  }\n);\n\n`;\n"
  },
  {
    "path": "tests/break-calls/break.js",
    "content": "h(f(g(() => {\n  a\n})))\n\ndeepCopyAndAsyncMapLeavesA(\n  { source: sourceValue, destination: destination[sourceKey] },\n  { valueMapper, overwriteExistingKeys }\n)\n\ndeepCopyAndAsyncMapLeavesB(\n  1337,\n  { source: sourceValue, destination: destination[sourceKey] },\n  { valueMapper, overwriteExistingKeys }\n)\n\ndeepCopyAndAsyncMapLeavesC(\n  { source: sourceValue, destination: destination[sourceKey] },\n  1337,\n  { valueMapper, overwriteExistingKeys }\n)\n\nfunction someFunction(url) {\n  return get(url)\n    .then(\n      json => dispatch(success(json)),\n      error => dispatch(failed(error))\n    );\n}\n\nconst mapChargeItems = fp.flow(\n  l => l < 10 ? l: 1,\n  l => Immutable.Range(l).toMap()\n);\n\nexpect(new LongLongLongLongLongRange([0, 0], [0, 0])).toEqualAtomLongLongLongLongRange(new LongLongLongRange([0, 0], [0, 0]));\n"
  },
  {
    "path": "tests/break-calls/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/break-calls/parent.js",
    "content": "runtimeAgent.getProperties(\n  objectId,\n  false, // ownProperties\n  false, // accessorPropertiesOnly\n  false, // generatePreview\n  (error, properties, internalProperties) => {\n    return 1\n  },\n);\n"
  },
  {
    "path": "tests/class_comment/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`comments.js 1`] = `\nclass A // comment 1\n  // comment 2\n  extends B {}\n\nclass A extends B // comment1\n// comment2\n// comment3\n{}\n\nclass A /* a */ extends B {}\nclass A extends B /* a */ {}\nclass A extends /* a */ B {}\n\n(class A // comment 1\n  // comment 2\n  extends B {});\n\n(class A extends B // comment1\n// comment2\n// comment3\n{});\n\n(class A /* a */ extends B {});\n(class A extends B /* a */ {});\n(class A extends /* a */ B {});\n\nclass x {\n  focus() // do nothing\n  {\n    // do nothing\n  }\n}\n\nclass X {\n  TEMPLATE =\n    // tab index is needed so we can focus, which is needed for keyboard events\n    '<div class=\"ag-large-text\" tabindex=\"0\">' +\n    '<div class=\"ag-large-textarea\"></div>' +\n    '</div>';\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// comment 1\n// comment 2\nclass A extends B {}\n\n// comment1\n// comment2\n// comment3\nclass A extends B {}\n\nclass A /* a */ extends B {}\nclass A extends B /* a */ {\n}\nclass A extends /* a */ B {}\n\n// comment 1\n// comment 2\n(class A extends B {});\n\n// comment1\n// comment2\n// comment3\n(class A extends B {});\n\n(class A /* a */ extends B {});\n(class A extends B /* a */ {\n});\n(class A extends /* a */ B {});\n\nclass x {\n  focus() // do nothing\n  {\n    // do nothing\n  }\n}\n\nclass X {\n  TEMPLATE =\n    // tab index is needed so we can focus, which is needed for keyboard events\n    '<div class=\"ag-large-text\" tabindex=\"0\">' +\n      '<div class=\"ag-large-textarea\"></div>' +\n      \"</div>\";\n}\n\n`;\n"
  },
  {
    "path": "tests/class_comment/comments.js",
    "content": "class A // comment 1\n  // comment 2\n  extends B {}\n\nclass A extends B // comment1\n// comment2\n// comment3\n{}\n\nclass A /* a */ extends B {}\nclass A extends B /* a */ {}\nclass A extends /* a */ B {}\n\n(class A // comment 1\n  // comment 2\n  extends B {});\n\n(class A extends B // comment1\n// comment2\n// comment3\n{});\n\n(class A /* a */ extends B {});\n(class A extends B /* a */ {});\n(class A extends /* a */ B {});\n\nclass x {\n  focus() // do nothing\n  {\n    // do nothing\n  }\n}\n\nclass X {\n  TEMPLATE =\n    // tab index is needed so we can focus, which is needed for keyboard events\n    '<div class=\"ag-large-text\" tabindex=\"0\">' +\n    '<div class=\"ag-large-textarea\"></div>' +\n    '</div>';\n}\n"
  },
  {
    "path": "tests/class_comment/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/class_extends/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`extends.js 1`] = `\n// \"ArrowFunctionExpression\"\nclass a extends (() => {}) {}\n\n// \"AssignmentExpression\"\nclass a extends (b = c) {}\n\n// \"AwaitExpression\"\nasync function f() {\n  class a extends (await b) {}\n}\n\n// \"BinaryExpression\"\nclass a extends (b + c) {}\n\n// \"CallExpression\"\nclass a extends b() {}\n\n// \"ClassExpression\"\nclass a extends class {} {}\n\n// \"ConditionalExpression\"\nclass a extends (b ? c : d) {}\n\n// \"FunctionExpression\"\nclass a extends (function() {}) {}\n\n// \"LogicalExpression\"\nclass a extends (b || c) {}\n\n// \"MemberExpression\"\nclass a extends b.c {}\n\n// \"NewExpression\"\nclass a extends (new B()) {}\n\n// \"ObjectExpression\"\nclass a extends ({}) {}\n\n// \"SequenceExpression\"\nclass a extends (b, c) {}\n\n// \"TaggedTemplateExpression\"\nclass a extends \\`\\` {}\n\n// \"UnaryExpression\"\nclass a extends (void b) {}\n\n// \"UpdateExpression\"\nclass a extends (++b) {}\n\n// \"YieldExpression\"\nfunction* f() {\n  // Flow has a bug parsing it.\n  // class a extends (yield 1) {}\n}\n\nx = class extends (++b) {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// \"ArrowFunctionExpression\"\nclass a extends (() => {}) {}\n\n// \"AssignmentExpression\"\nclass a extends (b = c) {}\n\n// \"AwaitExpression\"\nasync function f() {\n  class a extends (await b) {}\n}\n\n// \"BinaryExpression\"\nclass a extends (b + c) {}\n\n// \"CallExpression\"\nclass a extends b() {}\n\n// \"ClassExpression\"\nclass a extends class {} {}\n\n// \"ConditionalExpression\"\nclass a extends (b ? c : d) {}\n\n// \"FunctionExpression\"\nclass a extends function() {} {}\n\n// \"LogicalExpression\"\nclass a extends (b || c) {}\n\n// \"MemberExpression\"\nclass a extends b.c {}\n\n// \"NewExpression\"\nclass a extends (new B()) {}\n\n// \"ObjectExpression\"\nclass a extends ({}) {}\n\n// \"SequenceExpression\"\nclass a extends (b, c) {}\n\n// \"TaggedTemplateExpression\"\nclass a extends \\`\\` {}\n\n// \"UnaryExpression\"\nclass a extends (void b) {}\n\n// \"UpdateExpression\"\nclass a extends (++b) {}\n\n// \"YieldExpression\"\nfunction* f() {\n  // Flow has a bug parsing it.\n  // class a extends (yield 1) {}\n}\n\nx = class extends (++b) {};\n\n`;\n"
  },
  {
    "path": "tests/class_extends/extends.js",
    "content": "// \"ArrowFunctionExpression\"\nclass a extends (() => {}) {}\n\n// \"AssignmentExpression\"\nclass a extends (b = c) {}\n\n// \"AwaitExpression\"\nasync function f() {\n  class a extends (await b) {}\n}\n\n// \"BinaryExpression\"\nclass a extends (b + c) {}\n\n// \"CallExpression\"\nclass a extends b() {}\n\n// \"ClassExpression\"\nclass a extends class {} {}\n\n// \"ConditionalExpression\"\nclass a extends (b ? c : d) {}\n\n// \"FunctionExpression\"\nclass a extends (function() {}) {}\n\n// \"LogicalExpression\"\nclass a extends (b || c) {}\n\n// \"MemberExpression\"\nclass a extends b.c {}\n\n// \"NewExpression\"\nclass a extends (new B()) {}\n\n// \"ObjectExpression\"\nclass a extends ({}) {}\n\n// \"SequenceExpression\"\nclass a extends (b, c) {}\n\n// \"TaggedTemplateExpression\"\nclass a extends `` {}\n\n// \"UnaryExpression\"\nclass a extends (void b) {}\n\n// \"UpdateExpression\"\nclass a extends (++b) {}\n\n// \"YieldExpression\"\nfunction* f() {\n  // Flow has a bug parsing it.\n  // class a extends (yield 1) {}\n}\n\nx = class extends (++b) {}\n"
  },
  {
    "path": "tests/class_extends/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/classes/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`binary.js 1`] = `\n(class {}) + 1;\n(class a {}) + 1;\n(class extends b {}) + 1;\n(class a extends b {}) + 1;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n(class {} + 1);\n(class a {} + 1);\n(class extends b {} + 1);\n(class a extends b {} + 1);\n\n`;\n\nexports[`break.js 1`] = `\nclass MyContractSelectionWidget extends React.Component<void,  MyContractSelectionWidgetPropsType, void> implements SomethingLarge {\n  method() {}\n}\n\nclass DisplayObject\n  extends utils.EventEmitter\n  implements interaction_InteractiveTarget {\n}\n\nclass DisplayObject extends utils.EventEmitter\n  implements interaction_InteractiveTarget {\n}\n\nclass DisplayObject extends utils.EventEmitter\n  implements interaction_InteractiveTarget,\n    somethingElse_SomeOtherThing,\n    somethingElseAgain_RunningOutOfNames {\n}\n\nclass DisplayObject extends utils.EventEmitter implements interaction_InteractiveTarget {}\nclass Readable extends events.EventEmitter implements NodeJS_ReadableStream {}\nclass InMemoryAppender extends log4javascript.Appender implements ICachedLogMessageProvider {}\n\nclass Foo extends Immutable.Record({\n  ipaddress: '',\n}) {\n  ipaddress: string;\n}\n\nexport class VisTimelineComponent\n\timplements AfterViewInit, OnChanges, OnDestroy {\n}\nexport class VisTimelineComponent2\n\timplements AfterViewInit, OnChanges, OnDestroy, AndSomethingReallyReallyLong {\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass MyContractSelectionWidget extends React.Component<\n  void,\n  MyContractSelectionWidgetPropsType,\n  void\n> implements SomethingLarge {\n  method() {}\n}\n\nclass DisplayObject extends utils.EventEmitter\n  implements interaction_InteractiveTarget {}\n\nclass DisplayObject extends utils.EventEmitter\n  implements interaction_InteractiveTarget {}\n\nclass DisplayObject extends utils.EventEmitter\n  implements interaction_InteractiveTarget,\n    somethingElse_SomeOtherThing,\n    somethingElseAgain_RunningOutOfNames {}\n\nclass DisplayObject extends utils.EventEmitter\n  implements interaction_InteractiveTarget {}\nclass Readable extends events.EventEmitter implements NodeJS_ReadableStream {}\nclass InMemoryAppender extends log4javascript.Appender\n  implements ICachedLogMessageProvider {}\n\nclass Foo extends Immutable.Record({\n  ipaddress: \"\"\n}) {\n  ipaddress: string;\n}\n\nexport class VisTimelineComponent\n  implements AfterViewInit, OnChanges, OnDestroy {}\nexport class VisTimelineComponent2\n  implements AfterViewInit,\n    OnChanges,\n    OnDestroy,\n    AndSomethingReallyReallyLong {}\n\n`;\n\nexports[`call.js 1`] = `\n(class {})(class {});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n(class {}(class {}));\n\n`;\n\nexports[`empty.js 1`] = `\nclass A {\n  // comment\n}\n\nclass A { // comment\n}\n\nclass A {\n}\n\nclass A {\n  m() {}\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {\n  // comment\n}\n\nclass A {\n  // comment\n}\n\nclass A {}\n\nclass A {\n  m() {}\n}\n\n`;\n\nexports[`member.js 1`] = `\n(class {})[1];\n(class {}).a;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n(class {}[1]);\n(class {}.a);\n\n`;\n\nexports[`method.js 1`] = `\n\nclass C {\n  name/*comment*/() {\n  }\n};\n\n\n({\n  name/*comment*/() {\n  }\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {\n  name /*comment*/() {}\n}\n\n({\n  name /*comment*/() {}\n});\n\n`;\n\nexports[`ternary.js 1`] = `\nif (1) (class {}) ? 1 : 2;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nif (1) (class {} ? 1 : 2);\n\n`;\n"
  },
  {
    "path": "tests/classes/binary.js",
    "content": "(class {}) + 1;\n(class a {}) + 1;\n(class extends b {}) + 1;\n(class a extends b {}) + 1;\n"
  },
  {
    "path": "tests/classes/break.js",
    "content": "class MyContractSelectionWidget extends React.Component<void,  MyContractSelectionWidgetPropsType, void> implements SomethingLarge {\n  method() {}\n}\n\nclass DisplayObject\n  extends utils.EventEmitter\n  implements interaction_InteractiveTarget {\n}\n\nclass DisplayObject extends utils.EventEmitter\n  implements interaction_InteractiveTarget {\n}\n\nclass DisplayObject extends utils.EventEmitter\n  implements interaction_InteractiveTarget,\n    somethingElse_SomeOtherThing,\n    somethingElseAgain_RunningOutOfNames {\n}\n\nclass DisplayObject extends utils.EventEmitter implements interaction_InteractiveTarget {}\nclass Readable extends events.EventEmitter implements NodeJS_ReadableStream {}\nclass InMemoryAppender extends log4javascript.Appender implements ICachedLogMessageProvider {}\n\nclass Foo extends Immutable.Record({\n  ipaddress: '',\n}) {\n  ipaddress: string;\n}\n\nexport class VisTimelineComponent\n\timplements AfterViewInit, OnChanges, OnDestroy {\n}\nexport class VisTimelineComponent2\n\timplements AfterViewInit, OnChanges, OnDestroy, AndSomethingReallyReallyLong {\n}\n"
  },
  {
    "path": "tests/classes/call.js",
    "content": "(class {})(class {});\n"
  },
  {
    "path": "tests/classes/empty.js",
    "content": "class A {\n  // comment\n}\n\nclass A { // comment\n}\n\nclass A {\n}\n\nclass A {\n  m() {}\n}\n"
  },
  {
    "path": "tests/classes/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\", \"typescript\"]);\n"
  },
  {
    "path": "tests/classes/member.js",
    "content": "(class {})[1];\n(class {}).a;\n"
  },
  {
    "path": "tests/classes/method.js",
    "content": "\nclass C {\n  name/*comment*/() {\n  }\n};\n\n\n({\n  name/*comment*/() {\n  }\n});\n"
  },
  {
    "path": "tests/classes/ternary.js",
    "content": "if (1) (class {}) ? 1 : 2;\n"
  },
  {
    "path": "tests/comments/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`assignment-pattern.js 1`] = `\nconst { a /* comment */ = 1 } = b;\n\nconst { c = 1 /* comment */ } = d;\n\nlet {a //comment\n= b} = c\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst { a /* comment */ = 1 } = b;\n\nconst { c = 1 /* comment */ } = d;\n\nlet {\n  a = b //comment\n} = c;\n\n`;\n\nexports[`before-comma.js 1`] = `\nconst foo = {\n  a: 'a' /* comment for this line */,\n\n  /* Section B */\n  b: 'b',\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst foo = {\n  a: \"a\" /* comment for this line */,\n\n  /* Section B */\n  b: \"b\"\n};\n\n`;\n\nexports[`blank.js 1`] = `\n// This file only\n// has comments. This comment\n// should still exist\n//\n// when printed.\n\n/**\n * @typedef {DataDrivenMapping|ConstantMapping} Mapping\n */\n/**\n * @typedef {Object.<String, Mapping>} ConfigurationMapping\n */\n\n/**\n * @typedef {Function} D3Scale - a D3 scale\n * @property {Function} ticks\n * @property {Function} tickFormat\n */\n// comment\n\n// comment\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// This file only\n// has comments. This comment\n// should still exist\n//\n// when printed.\n\n/**\n * @typedef {DataDrivenMapping|ConstantMapping} Mapping\n */\n/**\n * @typedef {Object.<String, Mapping>} ConfigurationMapping\n */\n\n/**\n * @typedef {Function} D3Scale - a D3 scale\n * @property {Function} ticks\n * @property {Function} tickFormat\n */\n// comment\n\n// comment\n\n`;\n\nexports[`call_comment.js 1`] = `\nrender( // Warm any cache\n  <ChildUpdates renderAnchor={true} anchorClassOn={true} />,\n  container\n);\n\nReact.render( // Warm any cache\n  <ChildUpdates renderAnchor={true} anchorClassOn={true} />,\n  container\n);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nrender(\n  // Warm any cache\n  <ChildUpdates renderAnchor={true} anchorClassOn={true} />,\n  container\n);\n\nReact.render(\n  // Warm any cache\n  <ChildUpdates renderAnchor={true} anchorClassOn={true} />,\n  container\n);\n\n`;\n\nexports[`dangling.js 1`] = `\nvar x = {/* dangling */};\nvar x = {\n  // dangling\n};\nvar x = [/* dangling */];\nfunction x() {\n  /* dangling */\n}\ndeclare class Foo extends Qux<string> {/* dangling */}\nexport /* dangling */{};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x = {\n  /* dangling */\n};\nvar x = {\n  // dangling\n};\nvar x = [\n  /* dangling */\n];\nfunction x() {\n  /* dangling */\n}\ndeclare class Foo extends Qux<string> {\n  /* dangling */\n}\nexport /* dangling */{};\n\n`;\n\nexports[`dangling_array.js 1`] = `\nexpect(() => {}).toTriggerReadyStateChanges([\n  // Nothing.\n]);\n\n[1 /* first comment */, 2 /* second comment */, 3];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexpect(() => {}).toTriggerReadyStateChanges(\n  [\n    // Nothing.\n  ]\n);\n\n[1 /* first comment */, 2 /* second comment */, 3];\n\n`;\n\nexports[`dangling_for.js 1`] = `\nfor // comment\n(;;);\n\nfor /* comment */(;;);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// comment\nfor (;;);\n\n/* comment */\nfor (;;);\n\n`;\n\nexports[`export.js 1`] = `\nexport //comment\n{}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n//comment\nexport {};\n\n`;\n\nexports[`first-line.js 1`] = `\na // comment\nb\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\na; // comment\nb;\n\n`;\n\nexports[`flow_union.js 1`] = `\ntype UploadState<E, EM, D>\n  // The upload hasnt begun yet\n  = {type: \"Not_begun\"}\n  // The upload timed out\n  | {type: \"Timed_out\"}\n  // Failed somewhere on the line\n  | {type: \"Failed\", error: E, errorMsg: EM}\n  // Uploading to aws3 and CreatePostMutation succeeded\n  | {type: \"Success\", data: D};\n\ntype UploadState<E, EM, D>\n  // The upload hasnt begun yet\n  = A\n  // The upload timed out\n  | B\n  // Failed somewhere on the line\n  | C\n  // Uploading to aws3 and CreatePostMutation succeeded\n  | D;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype UploadState<E, EM, D> =\n  // The upload hasnt begun yet\n  | { type: \"Not_begun\" }\n  // The upload timed out\n  | { type: \"Timed_out\" }\n  // Failed somewhere on the line\n  | { type: \"Failed\", error: E, errorMsg: EM }\n  // Uploading to aws3 and CreatePostMutation succeeded\n  | { type: \"Success\", data: D };\n\ntype UploadState<E, EM, D> =\n  // The upload hasnt begun yet\n  | A\n  // The upload timed out\n  | B\n  // Failed somewhere on the line\n  | C\n  // Uploading to aws3 and CreatePostMutation succeeded\n  | D;\n\n`;\n\nexports[`function-declaration.js 1`] = `\nfunction a(/* comment */) {} // comment\nfunction b() {} // comment\nfunction c(/* comment */ argA, argB, argC) {} // comment\ncall((/*object*/ row) => {});\nKEYPAD_NUMBERS.map(num => ( // Buttons 0-9\n  <div />\n));\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction a(/* comment */) {} // comment\nfunction b() {} // comment\nfunction c(/* comment */ argA, argB, argC) {} // comment\ncall((/*object*/ row) => {});\nKEYPAD_NUMBERS.map((\n  num // Buttons 0-9\n) => <div />);\n\n`;\n\nexports[`if.js 1`] = `\nif (1)\n// comment\n{\n  false\n}\n// comment\nelse if (2)\n  true\n// multi\n// ple\n// lines\nelse if (3)\n  // existing comment\n  true\n// okay?\nelse if (4) {\n  // empty with existing comment\n}\n// comment\nelse {\n}\n\nif (1)\n{}\nelse // comment\n{}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nif (1) {\n  // comment\n  false;\n} else if (2)\n  // comment\n  true;\nelse if (3)\n  // multi\n  // ple\n  // lines\n  // existing comment\n  true;\nelse if (4) {\n  // okay?\n  // empty with existing comment\n} else {\n  // comment\n}\n\nif (1) {\n} else {\n  // comment\n}\n\n`;\n\nexports[`issues.js 1`] = `\n// Does not need to break as it fits in 80 columns\nthis.call(a, /* comment */ b);\n\nfunction f(\n  someReallyLongArgument: WithSomeLongType,\n  someReallyLongArgument2: WithSomeLongType,\n  // Trailing comment should stay after\n) {}\n\n// Comments should either stay at the end of the line or always before, but\n// not one before and one after.\nthrow new ProcessSystemError({\n  code: acc.error.code, // Alias of errno\n  originalError: acc.error, // Just in case.\n});\n\n// Adding a comment stops the pretty printing process and everything is\n// squished in a single line afterward\nexport type BuckWebSocketMessage = {\n  // Not actually from Buck - this is to let the receiver know that the socket is connected.\n  type: 'SocketConnected',\n} | {\n  type: 'BuildProgressUpdated',\n  progressValue: number,\n} | {\n  type: 'BuildFinished',\n  exitCode: number,\n} | {\n  type: 'BuildStarted',\n} | {\n  type: 'ParseStarted',\n} | {\n  type: 'ParseFinished',\n} | {\n  type: 'RunStarted',\n} | {\n  type: 'RunComplete',\n};\n\n// Missing one level of indentation because of the comment\nconst rootEpic = (actions, store) => (\n  combineEpics(...epics)(actions, store)\n    // Log errors and continue.\n    .catch((err, stream) => {\n      getLogger().error(err);\n      return stream;\n    })\n);\n\n// Two extra levels of indentation because of the comment\nexport type AsyncExecuteOptions = child_process$execFileOpts & {\n  // The contents to write to stdin.\n  stdin?: ?string,\n  dontLogInNuclide?: ?boolean,\n};\n\n// optional trailing comma gets moved all the way to the beginning\nconst regex = new RegExp(\n  '^\\\\\\\\s*' + // beginning of the line\n  'name\\\\\\\\s*=\\\\\\\\s*' + // name =\n  '[\\\\'\"]' + // opening quotation mark\n  escapeStringRegExp(target.name) + // target name\n  '[\\\\'\"]' + // closing quotation mark\n  ',?$', // optional trailing comma\n);\n\n// The comment is moved and doesn't trigger the eslint rule anymore\nimport path from 'path'; // eslint-disable-line nuclide-internal/prefer-nuclide-uri\n\n// Comments disappear in-between MemberExpressions\nObservable.of(process)\n  // Don't complete until we say so!\n  .merge(Observable.never())\n  // Get the errors.\n  .takeUntil(throwOnError ? errors.flatMap(Observable.throw) : errors)\n  .takeUntil(exit);\n\n// Comments disappear inside of JSX\n<div>\n  {/* Some comment */}\n</div>;\n\n// Comments in JSX tag are placed in a non optimal way\n<div\n  // comment\n/>;\n\n// Comments disappear in empty blocks\nif (1) {\n  // Comment\n}\n\n// Comments trigger invalid JavaScript in-between else if\nif (1) {\n}\n// Comment\nelse {\n\n}\n\n// The comment makes the line break in a weird way\nconst result = asyncExecute('non_existing_command', /* args */ []);\n\n// The closing paren is printed on the same line as the comment\nfoo({}\n  // Hi\n);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Does not need to break as it fits in 80 columns\nthis.call(a, /* comment */ b);\n\nfunction f(\n  someReallyLongArgument: WithSomeLongType,\n  someReallyLongArgument2: WithSomeLongType\n  // Trailing comment should stay after\n) {}\n\n// Comments should either stay at the end of the line or always before, but\n// not one before and one after.\nthrow new ProcessSystemError({\n  code: acc.error.code, // Alias of errno\n  originalError: acc.error // Just in case.\n});\n\n// Adding a comment stops the pretty printing process and everything is\n// squished in a single line afterward\nexport type BuckWebSocketMessage =\n  | {\n      // Not actually from Buck - this is to let the receiver know that the socket is connected.\n      type: \"SocketConnected\"\n    }\n  | {\n      type: \"BuildProgressUpdated\",\n      progressValue: number\n    }\n  | {\n      type: \"BuildFinished\",\n      exitCode: number\n    }\n  | {\n      type: \"BuildStarted\"\n    }\n  | {\n      type: \"ParseStarted\"\n    }\n  | {\n      type: \"ParseFinished\"\n    }\n  | {\n      type: \"RunStarted\"\n    }\n  | {\n      type: \"RunComplete\"\n    };\n\n// Missing one level of indentation because of the comment\nconst rootEpic = (actions, store) =>\n  combineEpics(...epics)(actions, store)\n    // Log errors and continue.\n    .catch((err, stream) => {\n      getLogger().error(err);\n      return stream;\n    });\n\n// Two extra levels of indentation because of the comment\nexport type AsyncExecuteOptions = child_process$execFileOpts & {\n  // The contents to write to stdin.\n  stdin?: ?string,\n  dontLogInNuclide?: ?boolean\n};\n\n// optional trailing comma gets moved all the way to the beginning\nconst regex = new RegExp(\n  \"^\\\\\\\\s*\" + // beginning of the line\n  \"name\\\\\\\\s*=\\\\\\\\s*\" + // name =\n  \"['\\\\\"]\" + // opening quotation mark\n  escapeStringRegExp(target.name) + // target name\n  \"['\\\\\"]\" + // closing quotation mark\n    \",?$\" // optional trailing comma\n);\n\n// The comment is moved and doesn't trigger the eslint rule anymore\nimport path from \"path\"; // eslint-disable-line nuclide-internal/prefer-nuclide-uri\n\n// Comments disappear in-between MemberExpressions\nObservable.of(process)\n  // Don't complete until we say so!\n  .merge(Observable.never())\n  // Get the errors.\n  .takeUntil(throwOnError ? errors.flatMap(Observable.throw) : errors)\n  .takeUntil(exit);\n\n// Comments disappear inside of JSX\n<div>{/* Some comment */}</div>;\n\n// Comments in JSX tag are placed in a non optimal way\n<div\n// comment\n/>;\n\n// Comments disappear in empty blocks\nif (1) {\n  // Comment\n}\n\n// Comments trigger invalid JavaScript in-between else if\nif (1) {\n} else {\n  // Comment\n}\n\n// The comment makes the line break in a weird way\nconst result = asyncExecute(\"non_existing_command\", /* args */ []);\n\n// The closing paren is printed on the same line as the comment\nfoo(\n  {}\n  // Hi\n);\n\n`;\n\nexports[`jsx.js 1`] = `\n<div>\n  {\n    /* comment */\n  }\n</div>;\n\n<div>\n  {/* comment */\n  }\n</div>;\n\n<div>\n  {/* comment\n*/\n  }\n</div>;\n\n<div>\n  {a/* comment\n*/\n  }\n</div>;\n\n<div>\n  {/* comment\n*/\n  a\n  }\n</div>;\n\n<div>\n  {/* comment */\n  }\n</div>;\n\n<div>\n  {/* comment */}\n</div>;\n\n<div>\n  {\n    // single line comment\n  }\n</div>;\n\n<div>\n  {\n    // multiple line comments 1\n    // multiple line comments 2\n  }\n</div>;\n\n<div>\n  {\n    // multiple mixed comments 1\n    /* multiple mixed comments 2 */\n    /* multiple mixed comments 3 */\n    // multiple mixed comments 4\n  }\n</div>;\n\n<div>\n  {\n    // Some very v  ery very very merry (xmas) very very long line to break line width limit\n  }\n</div>;\n\n<div>{/*<div>  Some very v  ery very very long line to break line width limit </div>*/}</div>;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<div>{/* comment */}</div>;\n\n<div>{/* comment */}</div>;\n\n<div>{/* comment\n*/}</div>;\n\n<div>{a /* comment\n*/}</div>;\n\n<div>\n  {\n    /* comment\n*/\n    a\n  }\n</div>;\n\n<div>{/* comment */}</div>;\n\n<div>{/* comment */}</div>;\n\n<div>\n  {\n    // single line comment\n  }\n</div>;\n\n<div>\n  {\n    // multiple line comments 1\n    // multiple line comments 2\n  }\n</div>;\n\n<div>\n  {\n    // multiple mixed comments 1\n    /* multiple mixed comments 2 */\n    /* multiple mixed comments 3 */\n    // multiple mixed comments 4\n  }\n</div>;\n\n<div>\n  {\n    // Some very v  ery very very merry (xmas) very very long line to break line width limit\n  }\n</div>;\n\n<div>\n  {/*<div>  Some very v  ery very very long line to break line width limit </div>*/}\n</div>;\n\n`;\n\nexports[`last-arg.js 1`] = `\ntype f = (\n  currentRequest: {a: number},\n  // TODO this is a very very very very long comment that makes it go > 80 columns\n) => number;\n\nf = (\n  currentRequest: {a: number},\n  // TODO this is a very very very very long comment that makes it go > 80 columns\n): number => {};\n\nf = (\n  currentRequest: {a: number},\n  // TODO this is a very very very very long comment that makes it go > 80 columns\n) => {};\n\nf = function(\n  currentRequest: {a: number},\n  // TODO this is a very very very very long comment that makes it go > 80 columns\n) {};\n\nclass X {\n  f(\n    currentRequest: {a: number},\n    // TODO this is a very very very very long comment that makes it go > 80 columns\n  ) {}\n}\n\nfunction f(\n  a: number\n// some comment here\n): number {\n  return a + 1;\n}\n\nvar x = {\n  getSectionMode(\n    pageMetaData: PageMetaData,\n    sectionMetaData: SectionMetaData\n    /* $FlowFixMe This error was exposed while converting keyMirror\n     * to keyMirrorRecursive */\n  ): $Enum<SectionMode> {\n  }\n}\n\nclass X {\n  getSectionMode(\n    pageMetaData: PageMetaData,\n    sectionMetaData: SectionMetaData = ['unknown']\n    /* $FlowFixMe This error was exposed while converting keyMirror\n     * to keyMirrorRecursive */\n  ): $Enum<SectionMode> {\n  }\n}\n\nclass Foo {\n  a(lol /*string*/) {}\n\n  b(lol /*string*/\n  ) {}\n\n  d(\n    lol /*string*/,\n    lol2 /*string*/,\n    lol3 /*string*/,\n    lol4 /*string*/\n  ) {}\n\n  d(\n    lol /*string*/,\n    lol2 /*string*/,\n    lol3 /*string*/,\n    lol4 /*string*/\n  ) /*string*/ {}\n\n  // prettier-ignore\n  c(lol /*string*/\n  ) {}\n\n  // prettier-ignore\n  d(\n    lol /*string*/,\n    lol2 /*string*/,\n    lol3 /*string*/,\n    lol4 /*string*/\n  ) {}\n\n  // prettier-ignore\n  e(\n    lol /*string*/,\n    lol2 /*string*/,\n    lol3 /*string*/,\n    lol4 /*string*/\n  ) {} /* string*/\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype f = (\n  currentRequest: { a: number }\n  // TODO this is a very very very very long comment that makes it go > 80 columns\n) => number;\n\nf = (\n  currentRequest: { a: number }\n  // TODO this is a very very very very long comment that makes it go > 80 columns\n): number => {};\n\nf = (\n  currentRequest: { a: number }\n  // TODO this is a very very very very long comment that makes it go > 80 columns\n) => {};\n\nf = function(\n  currentRequest: { a: number }\n  // TODO this is a very very very very long comment that makes it go > 80 columns\n) {};\n\nclass X {\n  f(\n    currentRequest: { a: number }\n    // TODO this is a very very very very long comment that makes it go > 80 columns\n  ) {}\n}\n\nfunction f(\n  a: number\n  // some comment here\n): number {\n  return a + 1;\n}\n\nvar x = {\n  getSectionMode(\n    pageMetaData: PageMetaData,\n    sectionMetaData: SectionMetaData\n    /* $FlowFixMe This error was exposed while converting keyMirror\n     * to keyMirrorRecursive */\n  ): $Enum<SectionMode> {}\n};\n\nclass X {\n  getSectionMode(\n    pageMetaData: PageMetaData,\n    sectionMetaData: SectionMetaData = [\"unknown\"]\n    /* $FlowFixMe This error was exposed while converting keyMirror\n     * to keyMirrorRecursive */\n  ): $Enum<SectionMode> {}\n}\n\nclass Foo {\n  a(lol /*string*/) {}\n\n  b(lol /*string*/) {}\n\n  d(lol /*string*/, lol2 /*string*/, lol3 /*string*/, lol4 /*string*/) {}\n\n  d(\n    lol /*string*/,\n    lol2 /*string*/,\n    lol3 /*string*/,\n    lol4 /*string*/\n  ) /*string*/ {\n  }\n\n  // prettier-ignore\n  c(lol /*string*/\n  ) {}\n\n  // prettier-ignore\n  d(\n    lol /*string*/,\n    lol2 /*string*/,\n    lol3 /*string*/,\n    lol4 /*string*/\n  ) {}\n\n  // prettier-ignore\n  e(\n    lol /*string*/,\n    lol2 /*string*/,\n    lol3 /*string*/,\n    lol4 /*string*/\n  ) {} /* string*/\n}\n\n`;\n\nexports[`preserve-new-line-last.js 1`] = `\nfunction f() {\n  a\n  /* eslint-disable */\n}\n\nfunction f() {\n  a\n\n  /* eslint-disable */\n}\n\nfunction name() {\n  // comment1\n  func1()\n\n  // comment2\n  func2()\n\n  // comment3 why func3 commented\n  // func3()\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction f() {\n  a;\n  /* eslint-disable */\n}\n\nfunction f() {\n  a;\n\n  /* eslint-disable */\n}\n\nfunction name() {\n  // comment1\n  func1();\n\n  // comment2\n  func2();\n\n  // comment3 why func3 commented\n  // func3()\n}\n\n`;\n\nexports[`return-statement.js 1`] = `\nfunction jsx() {\n  return (\n    // Comment\n    <div />\n  );\n}\n\nfunction unary() {\n  return (\n    // Comment\n    !!x\n  );\n}\n\nfunction numericLiteralNoParen() {\n  return 1337; // Comment\n}\n\nfunction logical() {\n  return (\n    // Reason for 42\n    42\n  ) && 84\n}\n\nfunction binary() {\n  return (\n    // Reason for 42\n    42\n  ) * 84\n}\n\nfunction binaryInBinaryLeft() {\n  return (\n    // Reason for 42\n    42\n  ) * 84 + 2\n}\n\nfunction binaryInBinaryRight() {\n  return (\n    // Reason for 42\n    42\n  ) + 84 * 2\n}\n\nfunction conditional() {\n  return (\n    // Reason for 42\n    42\n  ) ? 1 : 2\n}\n\nfunction binaryInConditional() {\n  return (\n    // Reason for 42\n    42\n  ) * 3 ? 1 : 2\n}\n\nfunction call() {\n  return (\n    // Reason for a\n    a\n  )()\n}\n\nfunction memberInside() {\n  return (\n    // Reason for a.b\n    a.b\n  ).c\n}\n\nfunction memberOutside() {\n  return (\n    // Reason for a\n    a\n  ).b.c\n}\n\nfunction memberInAndOutWithCalls() {\n  return (\n    // Reason for a\n    a.b()\n  ).c.d()\n}\n\nfunction excessiveEverything() {\n  return (\n    // Reason for stuff\n    a.b() * 3 + 4 ? (a\\`hi\\`, 1) ? 1 : 1 : 1\n  )\n}\n\n// See https://github.com/prettier/prettier/issues/2392\n// function sequenceExpression() {\n//   return (\n//     // Reason for a\n//     a\n//   ), b\n// }\n\nfunction sequenceExpressionInside() {\n  return ( // Reason for a\n    a, b\n  );\n}\n\nfunction taggedTemplate() {\n  return (\n    // Reason for a\n    a\n  )\\`b\\`\n}\n\nfunction inlineComment() {\n  return (\n    /* hi */ 42\n  ) || 42\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction jsx() {\n  return (\n    // Comment\n    <div />\n  );\n}\n\nfunction unary() {\n  return (\n    // Comment\n    !!x\n  );\n}\n\nfunction numericLiteralNoParen() {\n  return 1337; // Comment\n}\n\nfunction logical() {\n  return (\n    // Reason for 42\n    42 && 84\n  );\n}\n\nfunction binary() {\n  return (\n    // Reason for 42\n    42 * 84\n  );\n}\n\nfunction binaryInBinaryLeft() {\n  return (\n    // Reason for 42\n    42 *\n      84 +\n    2\n  );\n}\n\nfunction binaryInBinaryRight() {\n  return (\n    // Reason for 42\n    42 +\n    84 * 2\n  );\n}\n\nfunction conditional() {\n  return (\n    // Reason for 42\n    42\n      ? 1\n      : 2\n  );\n}\n\nfunction binaryInConditional() {\n  return (\n    // Reason for 42\n    42 * 3\n      ? 1\n      : 2\n  );\n}\n\nfunction call() {\n  return (\n    // Reason for a\n    a()\n  );\n}\n\nfunction memberInside() {\n  return (\n    // Reason for a.b\n    a.b.c\n  );\n}\n\nfunction memberOutside() {\n  return (\n    // Reason for a\n    a.b.c\n  );\n}\n\nfunction memberInAndOutWithCalls() {\n  return (\n    a\n      .b// Reason for a\n      ()\n      .c.d()\n  );\n}\n\nfunction excessiveEverything() {\n  return (\n    // Reason for stuff\n    a.b() * 3 + 4 ? ((a\\`hi\\`, 1) ? 1 : 1) : 1\n  );\n}\n\n// See https://github.com/prettier/prettier/issues/2392\n// function sequenceExpression() {\n//   return (\n//     // Reason for a\n//     a\n//   ), b\n// }\n\nfunction sequenceExpressionInside() {\n  return (\n    // Reason for a\n    a, b\n  );\n}\n\nfunction taggedTemplate() {\n  return (\n    // Reason for a\n    a\\`b\\`\n  );\n}\n\nfunction inlineComment() {\n  return /* hi */ 42 || 42;\n}\n\n`;\n\nexports[`switch.js 1`] = `\nswitch (node && node.type) {\n  case \"Property\":\n  case \"MethodDefinition\":\n    prop = node.key;\n    break;\n\n  case \"MemberExpression\":\n    prop = node.property;\n    break;\n\n  // no default\n}\n\nswitch (foo) {\n  case \"bar\":\n    doThing()\n\n  // no default\n}\n\nswitch (foo) {\n  case \"bar\": //comment\n    doThing(); //comment\n\n  case \"baz\":\n    doOtherThing(); //comment\n\n}\n\nswitch (foo) {\n  case \"bar\": {\n    doThing();\n  } //comment\n\n  case \"baz\": {\n    doThing();\n  } //comment\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nswitch (node && node.type) {\n  case \"Property\":\n  case \"MethodDefinition\":\n    prop = node.key;\n    break;\n\n  case \"MemberExpression\":\n    prop = node.property;\n    break;\n\n  // no default\n}\n\nswitch (foo) {\n  case \"bar\":\n    doThing();\n\n  // no default\n}\n\nswitch (foo) {\n  case \"bar\": //comment\n    doThing(); //comment\n\n  case \"baz\":\n    doOtherThing(); //comment\n}\n\nswitch (foo) {\n  case \"bar\": {\n    doThing();\n  } //comment\n\n  case \"baz\": {\n    doThing();\n  } //comment\n}\n\n`;\n\nexports[`template-literal.js 1`] = `\n\\`\n\\${a // comment\n}\n\n\\${b /* comment */}\n\n\\${/* comment */ c /* comment */}\n\n\\${// comment\nd //comment\n};\n\\`\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\\`\n\\${a // comment\n}\n\n\\${b /* comment */}\n\n\\${/* comment */ c /* comment */}\n\n\\${// comment\nd //comment\n};\n\\`;\n\n`;\n\nexports[`trailing_space.js 1`] = `\n#!/there/is-space-here->         \n\n// Do not trim trailing whitespace from this source file!\n\n// There is some space here ->                        \n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n#!/there/is-space-here->\n\n// Do not trim trailing whitespace from this source file!\n\n// There is some space here ->\n\n`;\n\nexports[`try.js 1`] = `\n// comment 1\ntry {\n  // comment 2\n}\n// comment 3\ncatch(e) {\n  // comment 4\n}\n// comment 5\nfinally // comment 6\n{\n  // comment 7\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// comment 1\ntry {\n  // comment 2\n} catch (e) {\n  // comment 3\n  // comment 4\n} finally { // comment 6\n  // comment 5\n  // comment 7\n}\n\n`;\n\nexports[`variable_declarator.js 1`] = `\nlet obj = // Comment\n{\n  key: 'val'\n}\n\nlet obj // Comment\n= {\n  key: 'val'\n}\n\nlet obj = { // Comment\n  key: 'val'\n}\n\nlet obj = {\n  // Comment\n  key: 'val'\n}\n\nlet obj = // Comment\n[\n  'val'\n]\n\nlet obj // Comment\n= [\n  'val'\n]\n\nlet obj = [ // Comment\n  'val'\n]\n\nlet obj = [\n  // Comment\n  'val'\n]\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nlet obj =\n  // Comment\n  {\n    key: \"val\"\n  };\n\nlet obj =\n  // Comment\n  {\n    key: \"val\"\n  };\n\nlet obj = {\n  // Comment\n  key: \"val\"\n};\n\nlet obj = {\n  // Comment\n  key: \"val\"\n};\n\nlet obj =\n  // Comment\n  [\"val\"];\n\nlet obj =\n  // Comment\n  [\"val\"];\n\nlet obj = [\n  // Comment\n  \"val\"\n];\n\nlet obj = [\n  // Comment\n  \"val\"\n];\n\n`;\n"
  },
  {
    "path": "tests/comments/assignment-pattern.js",
    "content": "const { a /* comment */ = 1 } = b;\n\nconst { c = 1 /* comment */ } = d;\n\nlet {a //comment\n= b} = c\n"
  },
  {
    "path": "tests/comments/before-comma.js",
    "content": "const foo = {\n  a: 'a' /* comment for this line */,\n\n  /* Section B */\n  b: 'b',\n};\n"
  },
  {
    "path": "tests/comments/blank.js",
    "content": "// This file only\n// has comments. This comment\n// should still exist\n//\n// when printed.\n\n/**\n * @typedef {DataDrivenMapping|ConstantMapping} Mapping\n */\n/**\n * @typedef {Object.<String, Mapping>} ConfigurationMapping\n */\n\n/**\n * @typedef {Function} D3Scale - a D3 scale\n * @property {Function} ticks\n * @property {Function} tickFormat\n */\n// comment\n\n// comment\n"
  },
  {
    "path": "tests/comments/call_comment.js",
    "content": "render( // Warm any cache\n  <ChildUpdates renderAnchor={true} anchorClassOn={true} />,\n  container\n);\n\nReact.render( // Warm any cache\n  <ChildUpdates renderAnchor={true} anchorClassOn={true} />,\n  container\n);\n"
  },
  {
    "path": "tests/comments/dangling.js",
    "content": "var x = {/* dangling */};\nvar x = {\n  // dangling\n};\nvar x = [/* dangling */];\nfunction x() {\n  /* dangling */\n}\ndeclare class Foo extends Qux<string> {/* dangling */}\nexport /* dangling */{};\n"
  },
  {
    "path": "tests/comments/dangling_array.js",
    "content": "expect(() => {}).toTriggerReadyStateChanges([\n  // Nothing.\n]);\n\n[1 /* first comment */, 2 /* second comment */, 3];\n"
  },
  {
    "path": "tests/comments/dangling_for.js",
    "content": "for // comment\n(;;);\n\nfor /* comment */(;;);\n"
  },
  {
    "path": "tests/comments/export.js",
    "content": "export //comment\n{}\n"
  },
  {
    "path": "tests/comments/first-line.js",
    "content": "a // comment\nb\n"
  },
  {
    "path": "tests/comments/flow_union.js",
    "content": "type UploadState<E, EM, D>\n  // The upload hasnt begun yet\n  = {type: \"Not_begun\"}\n  // The upload timed out\n  | {type: \"Timed_out\"}\n  // Failed somewhere on the line\n  | {type: \"Failed\", error: E, errorMsg: EM}\n  // Uploading to aws3 and CreatePostMutation succeeded\n  | {type: \"Success\", data: D};\n\ntype UploadState<E, EM, D>\n  // The upload hasnt begun yet\n  = A\n  // The upload timed out\n  | B\n  // Failed somewhere on the line\n  | C\n  // Uploading to aws3 and CreatePostMutation succeeded\n  | D;\n"
  },
  {
    "path": "tests/comments/function-declaration.js",
    "content": "function a(/* comment */) {} // comment\nfunction b() {} // comment\nfunction c(/* comment */ argA, argB, argC) {} // comment\ncall((/*object*/ row) => {});\nKEYPAD_NUMBERS.map(num => ( // Buttons 0-9\n  <div />\n));\n"
  },
  {
    "path": "tests/comments/if.js",
    "content": "if (1)\n// comment\n{\n  false\n}\n// comment\nelse if (2)\n  true\n// multi\n// ple\n// lines\nelse if (3)\n  // existing comment\n  true\n// okay?\nelse if (4) {\n  // empty with existing comment\n}\n// comment\nelse {\n}\n\nif (1)\n{}\nelse // comment\n{}\n"
  },
  {
    "path": "tests/comments/issues.js",
    "content": "// Does not need to break as it fits in 80 columns\nthis.call(a, /* comment */ b);\n\nfunction f(\n  someReallyLongArgument: WithSomeLongType,\n  someReallyLongArgument2: WithSomeLongType,\n  // Trailing comment should stay after\n) {}\n\n// Comments should either stay at the end of the line or always before, but\n// not one before and one after.\nthrow new ProcessSystemError({\n  code: acc.error.code, // Alias of errno\n  originalError: acc.error, // Just in case.\n});\n\n// Adding a comment stops the pretty printing process and everything is\n// squished in a single line afterward\nexport type BuckWebSocketMessage = {\n  // Not actually from Buck - this is to let the receiver know that the socket is connected.\n  type: 'SocketConnected',\n} | {\n  type: 'BuildProgressUpdated',\n  progressValue: number,\n} | {\n  type: 'BuildFinished',\n  exitCode: number,\n} | {\n  type: 'BuildStarted',\n} | {\n  type: 'ParseStarted',\n} | {\n  type: 'ParseFinished',\n} | {\n  type: 'RunStarted',\n} | {\n  type: 'RunComplete',\n};\n\n// Missing one level of indentation because of the comment\nconst rootEpic = (actions, store) => (\n  combineEpics(...epics)(actions, store)\n    // Log errors and continue.\n    .catch((err, stream) => {\n      getLogger().error(err);\n      return stream;\n    })\n);\n\n// Two extra levels of indentation because of the comment\nexport type AsyncExecuteOptions = child_process$execFileOpts & {\n  // The contents to write to stdin.\n  stdin?: ?string,\n  dontLogInNuclide?: ?boolean,\n};\n\n// optional trailing comma gets moved all the way to the beginning\nconst regex = new RegExp(\n  '^\\\\s*' + // beginning of the line\n  'name\\\\s*=\\\\s*' + // name =\n  '[\\'\"]' + // opening quotation mark\n  escapeStringRegExp(target.name) + // target name\n  '[\\'\"]' + // closing quotation mark\n  ',?$', // optional trailing comma\n);\n\n// The comment is moved and doesn't trigger the eslint rule anymore\nimport path from 'path'; // eslint-disable-line nuclide-internal/prefer-nuclide-uri\n\n// Comments disappear in-between MemberExpressions\nObservable.of(process)\n  // Don't complete until we say so!\n  .merge(Observable.never())\n  // Get the errors.\n  .takeUntil(throwOnError ? errors.flatMap(Observable.throw) : errors)\n  .takeUntil(exit);\n\n// Comments disappear inside of JSX\n<div>\n  {/* Some comment */}\n</div>;\n\n// Comments in JSX tag are placed in a non optimal way\n<div\n  // comment\n/>;\n\n// Comments disappear in empty blocks\nif (1) {\n  // Comment\n}\n\n// Comments trigger invalid JavaScript in-between else if\nif (1) {\n}\n// Comment\nelse {\n\n}\n\n// The comment makes the line break in a weird way\nconst result = asyncExecute('non_existing_command', /* args */ []);\n\n// The closing paren is printed on the same line as the comment\nfoo({}\n  // Hi\n);\n"
  },
  {
    "path": "tests/comments/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/comments/jsx.js",
    "content": "<div>\n  {\n    /* comment */\n  }\n</div>;\n\n<div>\n  {/* comment */\n  }\n</div>;\n\n<div>\n  {/* comment\n*/\n  }\n</div>;\n\n<div>\n  {a/* comment\n*/\n  }\n</div>;\n\n<div>\n  {/* comment\n*/\n  a\n  }\n</div>;\n\n<div>\n  {/* comment */\n  }\n</div>;\n\n<div>\n  {/* comment */}\n</div>;\n\n<div>\n  {\n    // single line comment\n  }\n</div>;\n\n<div>\n  {\n    // multiple line comments 1\n    // multiple line comments 2\n  }\n</div>;\n\n<div>\n  {\n    // multiple mixed comments 1\n    /* multiple mixed comments 2 */\n    /* multiple mixed comments 3 */\n    // multiple mixed comments 4\n  }\n</div>;\n\n<div>\n  {\n    // Some very v  ery very very merry (xmas) very very long line to break line width limit\n  }\n</div>;\n\n<div>{/*<div>  Some very v  ery very very long line to break line width limit </div>*/}</div>;\n"
  },
  {
    "path": "tests/comments/last-arg.js",
    "content": "type f = (\n  currentRequest: {a: number},\n  // TODO this is a very very very very long comment that makes it go > 80 columns\n) => number;\n\nf = (\n  currentRequest: {a: number},\n  // TODO this is a very very very very long comment that makes it go > 80 columns\n): number => {};\n\nf = (\n  currentRequest: {a: number},\n  // TODO this is a very very very very long comment that makes it go > 80 columns\n) => {};\n\nf = function(\n  currentRequest: {a: number},\n  // TODO this is a very very very very long comment that makes it go > 80 columns\n) {};\n\nclass X {\n  f(\n    currentRequest: {a: number},\n    // TODO this is a very very very very long comment that makes it go > 80 columns\n  ) {}\n}\n\nfunction f(\n  a: number\n// some comment here\n): number {\n  return a + 1;\n}\n\nvar x = {\n  getSectionMode(\n    pageMetaData: PageMetaData,\n    sectionMetaData: SectionMetaData\n    /* $FlowFixMe This error was exposed while converting keyMirror\n     * to keyMirrorRecursive */\n  ): $Enum<SectionMode> {\n  }\n}\n\nclass X {\n  getSectionMode(\n    pageMetaData: PageMetaData,\n    sectionMetaData: SectionMetaData = ['unknown']\n    /* $FlowFixMe This error was exposed while converting keyMirror\n     * to keyMirrorRecursive */\n  ): $Enum<SectionMode> {\n  }\n}\n\nclass Foo {\n  a(lol /*string*/) {}\n\n  b(lol /*string*/\n  ) {}\n\n  d(\n    lol /*string*/,\n    lol2 /*string*/,\n    lol3 /*string*/,\n    lol4 /*string*/\n  ) {}\n\n  d(\n    lol /*string*/,\n    lol2 /*string*/,\n    lol3 /*string*/,\n    lol4 /*string*/\n  ) /*string*/ {}\n\n  // prettier-ignore\n  c(lol /*string*/\n  ) {}\n\n  // prettier-ignore\n  d(\n    lol /*string*/,\n    lol2 /*string*/,\n    lol3 /*string*/,\n    lol4 /*string*/\n  ) {}\n\n  // prettier-ignore\n  e(\n    lol /*string*/,\n    lol2 /*string*/,\n    lol3 /*string*/,\n    lol4 /*string*/\n  ) {} /* string*/\n}\n"
  },
  {
    "path": "tests/comments/preserve-new-line-last.js",
    "content": "function f() {\n  a\n  /* eslint-disable */\n}\n\nfunction f() {\n  a\n\n  /* eslint-disable */\n}\n\nfunction name() {\n  // comment1\n  func1()\n\n  // comment2\n  func2()\n\n  // comment3 why func3 commented\n  // func3()\n}\n"
  },
  {
    "path": "tests/comments/return-statement.js",
    "content": "function jsx() {\n  return (\n    // Comment\n    <div />\n  );\n}\n\nfunction unary() {\n  return (\n    // Comment\n    !!x\n  );\n}\n\nfunction numericLiteralNoParen() {\n  return 1337; // Comment\n}\n\nfunction logical() {\n  return (\n    // Reason for 42\n    42\n  ) && 84\n}\n\nfunction binary() {\n  return (\n    // Reason for 42\n    42\n  ) * 84\n}\n\nfunction binaryInBinaryLeft() {\n  return (\n    // Reason for 42\n    42\n  ) * 84 + 2\n}\n\nfunction binaryInBinaryRight() {\n  return (\n    // Reason for 42\n    42\n  ) + 84 * 2\n}\n\nfunction conditional() {\n  return (\n    // Reason for 42\n    42\n  ) ? 1 : 2\n}\n\nfunction binaryInConditional() {\n  return (\n    // Reason for 42\n    42\n  ) * 3 ? 1 : 2\n}\n\nfunction call() {\n  return (\n    // Reason for a\n    a\n  )()\n}\n\nfunction memberInside() {\n  return (\n    // Reason for a.b\n    a.b\n  ).c\n}\n\nfunction memberOutside() {\n  return (\n    // Reason for a\n    a\n  ).b.c\n}\n\nfunction memberInAndOutWithCalls() {\n  return (\n    // Reason for a\n    a.b()\n  ).c.d()\n}\n\nfunction excessiveEverything() {\n  return (\n    // Reason for stuff\n    a.b() * 3 + 4 ? (a`hi`, 1) ? 1 : 1 : 1\n  )\n}\n\n// See https://github.com/prettier/prettier/issues/2392\n// function sequenceExpression() {\n//   return (\n//     // Reason for a\n//     a\n//   ), b\n// }\n\nfunction sequenceExpressionInside() {\n  return ( // Reason for a\n    a, b\n  );\n}\n\nfunction taggedTemplate() {\n  return (\n    // Reason for a\n    a\n  )`b`\n}\n\nfunction inlineComment() {\n  return (\n    /* hi */ 42\n  ) || 42\n}\n"
  },
  {
    "path": "tests/comments/switch.js",
    "content": "switch (node && node.type) {\n  case \"Property\":\n  case \"MethodDefinition\":\n    prop = node.key;\n    break;\n\n  case \"MemberExpression\":\n    prop = node.property;\n    break;\n\n  // no default\n}\n\nswitch (foo) {\n  case \"bar\":\n    doThing()\n\n  // no default\n}\n\nswitch (foo) {\n  case \"bar\": //comment\n    doThing(); //comment\n\n  case \"baz\":\n    doOtherThing(); //comment\n\n}\n\nswitch (foo) {\n  case \"bar\": {\n    doThing();\n  } //comment\n\n  case \"baz\": {\n    doThing();\n  } //comment\n}\n"
  },
  {
    "path": "tests/comments/template-literal.js",
    "content": "`\n${a // comment\n}\n\n${b /* comment */}\n\n${/* comment */ c /* comment */}\n\n${// comment\nd //comment\n};\n`\n"
  },
  {
    "path": "tests/comments/trailing_space.js",
    "content": "#!/there/is-space-here->         \n\n// Do not trim trailing whitespace from this source file!\n\n// There is some space here ->                        \n"
  },
  {
    "path": "tests/comments/try.js",
    "content": "// comment 1\ntry {\n  // comment 2\n}\n// comment 3\ncatch(e) {\n  // comment 4\n}\n// comment 5\nfinally // comment 6\n{\n  // comment 7\n}\n"
  },
  {
    "path": "tests/comments/variable_declarator.js",
    "content": "let obj = // Comment\n{\n  key: 'val'\n}\n\nlet obj // Comment\n= {\n  key: 'val'\n}\n\nlet obj = { // Comment\n  key: 'val'\n}\n\nlet obj = {\n  // Comment\n  key: 'val'\n}\n\nlet obj = // Comment\n[\n  'val'\n]\n\nlet obj // Comment\n= [\n  'val'\n]\n\nlet obj = [ // Comment\n  'val'\n]\n\nlet obj = [\n  // Comment\n  'val'\n]\n"
  },
  {
    "path": "tests/computed_props/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`classes.js 1`] = `\nclass c {\n  [\"i\"]() {}\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass c {\n  [\"i\"]() {}\n}\n\n`;\n"
  },
  {
    "path": "tests/computed_props/classes.js",
    "content": "class c {\n  [\"i\"]() {}\n}\n"
  },
  {
    "path": "tests/computed_props/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/conditional/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`comments.js 1`] = `\nvar inspect = 4 === util.inspect.length\n  ? // node <= 0.8.x\n    (function(v, colors) {\n      return util.inspect(v, void 0, void 0, colors);\n    })\n  : // node > 0.8.x\n    (function(v, colors) {\n      return util.inspect(v, { colors: colors });\n    });\n\nvar inspect = 4 === util.inspect.length\n  ? // node <= 0.8.x\n    (function(v, colors) {\n      return util.inspect(v, void 0, void 0, colors);\n    })\n  : // node > 0.8.x\n    (function(v, colors) {\n      return util.inspect(v, { colors: colors });\n    });\n\nconst extractTextPluginOptions = shouldUseRelativeAssetPaths\n  // Making sure that the publicPath goes back to to build folder.\n  ? { publicPath: Array(cssFilename.split('/').length).join('../') } :\n  {};\n\nconst extractTextPluginOptions = shouldUseRelativeAssetPaths\n  ? // Making sure that the publicPath goes back to to build folder.\n    { publicPath: Array(cssFilename.split(\"/\").length).join(\"../\") }\n  : {};\n\nconst extractTextPluginOptions = shouldUseRelativeAssetPaths // Making sure that the publicPath goes back to to build folder.\n  ? { publicPath: Array(cssFilename.split(\"/\").length).join(\"../\") }\n  : {};\n\nconst { configureStore } = process.env.NODE_ENV === \"production\"\n  ? require(\"./configureProdStore\") // a\n  : require(\"./configureDevStore\"); // b\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar inspect =\n  4 === util.inspect.length\n    ? // node <= 0.8.x\n      function(v, colors) {\n        return util.inspect(v, void 0, void 0, colors);\n      }\n    : // node > 0.8.x\n      function(v, colors) {\n        return util.inspect(v, { colors: colors });\n      };\n\nvar inspect =\n  4 === util.inspect.length\n    ? // node <= 0.8.x\n      function(v, colors) {\n        return util.inspect(v, void 0, void 0, colors);\n      }\n    : // node > 0.8.x\n      function(v, colors) {\n        return util.inspect(v, { colors: colors });\n      };\n\nconst extractTextPluginOptions = shouldUseRelativeAssetPaths\n  ? // Making sure that the publicPath goes back to to build folder.\n    { publicPath: Array(cssFilename.split(\"/\").length).join(\"../\") }\n  : {};\n\nconst extractTextPluginOptions = shouldUseRelativeAssetPaths\n  ? // Making sure that the publicPath goes back to to build folder.\n    { publicPath: Array(cssFilename.split(\"/\").length).join(\"../\") }\n  : {};\n\nconst extractTextPluginOptions = shouldUseRelativeAssetPaths // Making sure that the publicPath goes back to to build folder.\n  ? { publicPath: Array(cssFilename.split(\"/\").length).join(\"../\") }\n  : {};\n\nconst { configureStore } =\n  process.env.NODE_ENV === \"production\"\n    ? require(\"./configureProdStore\") // a\n    : require(\"./configureDevStore\"); // b\n\n`;\n\nexports[`new-expression.js 1`] = `\nconst testConsole = new TestConsole(\n  config.useStderr ? process.stderr : process.stdout\n);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst testConsole = new TestConsole(\n  config.useStderr ? process.stderr : process.stdout\n);\n\n`;\n\nexports[`no-confusing-arrow.js 1`] = `\n// no-confusing-arrow\nvar x = a => 1 ? 2 : 3;\nvar x = a <= 1 ? 2 : 3;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// no-confusing-arrow\nvar x = a => (1 ? 2 : 3);\nvar x = a <= 1 ? 2 : 3;\n\n`;\n"
  },
  {
    "path": "tests/conditional/comments.js",
    "content": "var inspect = 4 === util.inspect.length\n  ? // node <= 0.8.x\n    (function(v, colors) {\n      return util.inspect(v, void 0, void 0, colors);\n    })\n  : // node > 0.8.x\n    (function(v, colors) {\n      return util.inspect(v, { colors: colors });\n    });\n\nvar inspect = 4 === util.inspect.length\n  ? // node <= 0.8.x\n    (function(v, colors) {\n      return util.inspect(v, void 0, void 0, colors);\n    })\n  : // node > 0.8.x\n    (function(v, colors) {\n      return util.inspect(v, { colors: colors });\n    });\n\nconst extractTextPluginOptions = shouldUseRelativeAssetPaths\n  // Making sure that the publicPath goes back to to build folder.\n  ? { publicPath: Array(cssFilename.split('/').length).join('../') } :\n  {};\n\nconst extractTextPluginOptions = shouldUseRelativeAssetPaths\n  ? // Making sure that the publicPath goes back to to build folder.\n    { publicPath: Array(cssFilename.split(\"/\").length).join(\"../\") }\n  : {};\n\nconst extractTextPluginOptions = shouldUseRelativeAssetPaths // Making sure that the publicPath goes back to to build folder.\n  ? { publicPath: Array(cssFilename.split(\"/\").length).join(\"../\") }\n  : {};\n\nconst { configureStore } = process.env.NODE_ENV === \"production\"\n  ? require(\"./configureProdStore\") // a\n  : require(\"./configureDevStore\"); // b\n"
  },
  {
    "path": "tests/conditional/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/conditional/new-expression.js",
    "content": "const testConsole = new TestConsole(\n  config.useStderr ? process.stderr : process.stdout\n);\n"
  },
  {
    "path": "tests/conditional/no-confusing-arrow.js",
    "content": "// no-confusing-arrow\nvar x = a => 1 ? 2 : 3;\nvar x = a <= 1 ? 2 : 3;\n"
  },
  {
    "path": "tests/css_atrule/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`if-else.css 1`] = `\n@if $media == phonePortrait {\n    $k: .15625;\n} @else if $media == phoneLandscape {\n    $k: .08803;\n} @else if $media == tabletPortrait {\n    $k: .065106;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@if $media == phonePortrait {\n  $k: .15625;\n} @else if $media == phoneLandscape {\n  $k: .08803;\n} @else if $media == tabletPortrait {\n  $k: .065106;\n}\n\n`;\n"
  },
  {
    "path": "tests/css_atrule/if-else.css",
    "content": "@if $media == phonePortrait {\n    $k: .15625;\n} @else if $media == phoneLandscape {\n    $k: .08803;\n} @else if $media == tabletPortrait {\n    $k: .065106;\n}\n"
  },
  {
    "path": "tests/css_atrule/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_attribute/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`insensitive.css 1`] = `\ninput[type=\"radio\" i] {\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninput[type=\"radio\" i] {\n}\n\n`;\n"
  },
  {
    "path": "tests/css_attribute/insensitive.css",
    "content": "input[type=\"radio\" i] {\n}\n"
  },
  {
    "path": "tests/css_attribute/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_atword/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`atword.css 1`] = `\n.test { @color: red; color: @color; }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.test {\n  @color: red;\n  color: @color;\n}\n\n`;\n"
  },
  {
    "path": "tests/css_atword/atword.css",
    "content": ".test { @color: red; color: @color; }\n"
  },
  {
    "path": "tests/css_atword/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_bom/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`bom.css 1`] = `\n﻿\n\n/* Block comment */\n\nhtml {\n  content: \"#{1}\";\n\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* Block comment */\n\nhtml {\n  content: \"#{1}\";\n}\n\n`;\n"
  },
  {
    "path": "tests/css_bom/bom.css",
    "content": "﻿\n\n/* Block comment */\n\nhtml {\n  content: \"#{1}\";\n\n}\n"
  },
  {
    "path": "tests/css_bom/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_colon/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`colon.css 1`] = `\ndiv {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndiv {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);\n}\n\n`;\n"
  },
  {
    "path": "tests/css_colon/colon.css",
    "content": "div {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);\n}\n"
  },
  {
    "path": "tests/css_colon/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_color/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`hexcolor.css 1`] = `\n.foo {\n    color: #AAA;\n    -o-color: #fabcd3;\n    -webkit-color: #873;\n    -moz-color: #6bcdef;\n    -ms-color: #AAbbCC;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.foo {\n  color: #aaa;\n  -o-color: #fabcd3;\n  -webkit-color: #873;\n  -moz-color: #6bcdef;\n  -ms-color: #aabbcc;\n}\n\n`;\n"
  },
  {
    "path": "tests/css_color/hexcolor.css",
    "content": ".foo {\n    color: #AAA;\n    -o-color: #fabcd3;\n    -webkit-color: #873;\n    -moz-color: #6bcdef;\n    -ms-color: #AAbbCC;\n}\n"
  },
  {
    "path": "tests/css_color/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_combinator/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`combinator.css 1`] = `\n-Option/root .public/section ~ .public/section:before {\n}\n\n.x .y {}\n.x > .y {}\n.x ~ .y {}\n.x + .y {}\n.x.y {}\n.x     .y {}\n.x\n    .y {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n-Option/root .public/section ~ .public/section:before {\n}\n\n.x .y {\n}\n.x > .y {\n}\n.x ~ .y {\n}\n.x + .y {\n}\n.x.y {\n}\n.x .y {\n}\n.x .y {\n}\n\n`;\n\nexports[`leading.css 1`] = `\na {\n  > * {\n  }\n  &, > * {\n  }\n  + * {\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\na {\n  > * {\n  }\n  &,\n  > * {\n  }\n  + * {\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/css_combinator/combinator.css",
    "content": "-Option/root .public/section ~ .public/section:before {\n}\n\n.x .y {}\n.x > .y {}\n.x ~ .y {}\n.x + .y {}\n.x.y {}\n.x     .y {}\n.x\n    .y {}\n"
  },
  {
    "path": "tests/css_combinator/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_combinator/leading.css",
    "content": "a {\n  > * {\n  }\n  &, > * {\n  }\n  + * {\n  }\n}\n"
  },
  {
    "path": "tests/css_comments/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`block.css 1`] = `\n// Animation definitions cannot cross the shadow boundary,\n// and thus need to be loaded directly into the atom-text-editor scope.\n/* Kikoo */\n/**\n * Kikoo\n */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Animation definitions cannot cross the shadow boundary,\n// and thus need to be loaded directly into the atom-text-editor scope.\n/* Kikoo */\n/**\n * Kikoo\n */\n\n`;\n\nexports[`bug.css 1`] = `\n@font-face  {\n  src: url(if(\n    $bootstrap-sass-asset-helper,\n    twbs-font-path('#{$icon-font-path}#{$icon-font-name}.eot'),\n    '#{$icon-font-path}#{$icon-font-name}.eot'\n  ));\n}\n\n// Catchall baseclass\n/* Catchall baseclass */\n.glyphicon {\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@font-face {\n  src: url(if(\n    $bootstrap-sass-asset-helper,\n    twbs-font-path('#{$icon-font-path}#{$icon-font-name}.eot'),\n    '#{$icon-font-path}#{$icon-font-name}.eot'\n  ));\n}\n// Catchall baseclass\n/* Catchall baseclass */\n.glyphicon {\n}\n\n`;\n\nexports[`places.css 1`] = `\ndiv {\n  // a\n\n  margin-left: -@leftMargin; // b\n} // c\n\n// d\ndiv {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndiv {\n  // a\n\n  margin-left: -@leftMargin; // b\n} // c\n\n// d\ndiv {\n}\n\n`;\n\nexports[`prettier-ignore.css 1`] = `\n// prettier-ignore\n@blue:  blue;\n@black: darkgray;\n\nfoo {\n  /* prettier-ignore */\n  thing:     foo;\n  -ms-thing: foo;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// prettier-ignore\n@blue:  blue;\n@black: darkgray;\n\nfoo {\n  /* prettier-ignore */\n  thing:     foo;\n  -ms-thing: foo;\n}\n\n`;\n\nexports[`selector.css 1`] = `\n.powerPathNavigator .helm button.pressedButton, /* pressed buttons */\n.powerPathNavigator .helm button:active:not(.disabledButton),\n.powerPathNavigator table.powerPathInfo th:active,\n.powerPathNavigator table.powerPathInfo th:active + th:last-child {\n}\n\n/* pressed buttons */\n.powerPathNavigator .helm button.pressedButton,\n.powerPathNavigator .helm button:active:not(.disabledButton) {\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.powerPathNavigator .helm button.pressedButton,\n/* pressed buttons */\n  .powerPathNavigator\n  .helm\n  button:active:not(.disabledButton),\n.powerPathNavigator table.powerPathInfo th:active,\n.powerPathNavigator table.powerPathInfo th:active + th:last-child {\n}\n\n/* pressed buttons */\n.powerPathNavigator .helm button.pressedButton,\n.powerPathNavigator .helm button:active:not(.disabledButton) {\n}\n\n`;\n\nexports[`trailing_star_slash.css 1`] = `\n@media (max-width: 1) {}\na {\n  // element.style */\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@media (max-width: 1) {\n}\na {\n  // element.style */\n}\n\n`;\n"
  },
  {
    "path": "tests/css_comments/block.css",
    "content": "// Animation definitions cannot cross the shadow boundary,\n// and thus need to be loaded directly into the atom-text-editor scope.\n/* Kikoo */\n/**\n * Kikoo\n */\n"
  },
  {
    "path": "tests/css_comments/bug.css",
    "content": "@font-face  {\n  src: url(if(\n    $bootstrap-sass-asset-helper,\n    twbs-font-path('#{$icon-font-path}#{$icon-font-name}.eot'),\n    '#{$icon-font-path}#{$icon-font-name}.eot'\n  ));\n}\n\n// Catchall baseclass\n/* Catchall baseclass */\n.glyphicon {\n}\n"
  },
  {
    "path": "tests/css_comments/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_comments/places.css",
    "content": "div {\n  // a\n\n  margin-left: -@leftMargin; // b\n} // c\n\n// d\ndiv {}\n"
  },
  {
    "path": "tests/css_comments/prettier-ignore.css",
    "content": "// prettier-ignore\n@blue:  blue;\n@black: darkgray;\n\nfoo {\n  /* prettier-ignore */\n  thing:     foo;\n  -ms-thing: foo;\n}\n"
  },
  {
    "path": "tests/css_comments/selector.css",
    "content": ".powerPathNavigator .helm button.pressedButton, /* pressed buttons */\n.powerPathNavigator .helm button:active:not(.disabledButton),\n.powerPathNavigator table.powerPathInfo th:active,\n.powerPathNavigator table.powerPathInfo th:active + th:last-child {\n}\n\n/* pressed buttons */\n.powerPathNavigator .helm button.pressedButton,\n.powerPathNavigator .helm button:active:not(.disabledButton) {\n}\n"
  },
  {
    "path": "tests/css_comments/trailing_star_slash.css",
    "content": "@media (max-width: 1) {}\na {\n  // element.style */\n}\n"
  },
  {
    "path": "tests/css_composes/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`composes.css 1`] = `\n.reference {\n  composes: selector from \"a/long/file/path/exceeding/the/maximum/length/forcing/a/line-wrap/file.css\";\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.reference {\n  composes: selector from \"a/long/file/path/exceeding/the/maximum/length/forcing/a/line-wrap/file.css\";\n}\n\n`;\n"
  },
  {
    "path": "tests/css_composes/composes.css",
    "content": ".reference {\n  composes: selector from \"a/long/file/path/exceeding/the/maximum/length/forcing/a/line-wrap/file.css\";\n}\n"
  },
  {
    "path": "tests/css_composes/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_empty/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`empty.css 1`] = `\n.ui-syntax-color();\n\ndetails[open] {\n}\n\ndiv {\n  box-sizing: border-box;;\n  color: red;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.ui-syntax-color();\n\ndetails[open] {\n}\n\ndiv {\n  box-sizing: border-box;\n  color: red;\n}\n\n`;\n"
  },
  {
    "path": "tests/css_empty/empty.css",
    "content": ".ui-syntax-color();\n\ndetails[open] {\n}\n\ndiv {\n  box-sizing: border-box;;\n  color: red;\n}\n"
  },
  {
    "path": "tests/css_empty/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_extend/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`extend.css 1`] = `\n.foobar {\n  &:extend(.foo);\n}\n\n.thing {\n  &:hover {\n    background-color: blue;\n    .thing-child {\n    }\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.foobar {\n  &:extend(.foo);\n}\n\n.thing {\n  &:hover {\n    background-color: blue;\n    .thing-child {\n    }\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/css_extend/extend.css",
    "content": ".foobar {\n  &:extend(.foo);\n}\n\n.thing {\n  &:hover {\n    background-color: blue;\n    .thing-child {\n    }\n  }\n}\n"
  },
  {
    "path": "tests/css_extend/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_fill_value/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`fill.css 1`] = `\ndiv {\n  border-left: 1px solid mix($warningBackgroundColors, $warningBorderColors, 50%);\n  $fontFamily: \"Lato\", -apple-system, \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndiv {\n  border-left: 1px solid\n    mix($warningBackgroundColors, $warningBorderColors, 50%);\n  $fontFamily: \"Lato\", -apple-system, \"Helvetica Neue\", Helvetica, Arial,\n    sans-serif;\n}\n\n`;\n"
  },
  {
    "path": "tests/css_fill_value/fill.css",
    "content": "div {\n  border-left: 1px solid mix($warningBackgroundColors, $warningBorderColors, 50%);\n  $fontFamily: \"Lato\", -apple-system, \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n}\n"
  },
  {
    "path": "tests/css_fill_value/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_import/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`directives.css 1`] = `\n@import (multiple) \"foo.less\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@import (multiple) \"foo.less\";\n\n`;\n\nexports[`url.css 1`] = `\n@import url('foo');\n$dir: 'fonts';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@import url('foo');\n$dir: 'fonts';\n\n`;\n"
  },
  {
    "path": "tests/css_import/directives.css",
    "content": "@import (multiple) \"foo.less\";\n"
  },
  {
    "path": "tests/css_import/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_import/url.css",
    "content": "@import url('foo');\n$dir: 'fonts';\n"
  },
  {
    "path": "tests/css_important/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`important.css 1`] = `\ndiv {\n  max-height: none !important;\n}\n\n.important {\n  .foo() !important;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndiv {\n  max-height: none !important;\n}\n\n.important {\n  .foo() !important;\n}\n\n`;\n"
  },
  {
    "path": "tests/css_important/important.css",
    "content": "div {\n  max-height: none !important;\n}\n\n.important {\n  .foo() !important;\n}\n"
  },
  {
    "path": "tests/css_important/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_indent/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`indent.css 1`] = `\ndiv {\n  background: var(fig-light-02) url(/images/inset-shadow-east-ltr.png) 100% 0 repeat-y;\n  box-shadow: 0 0 1px 2px rgba(88, 144, 255, 0.75), 0 1px 1px rgba(0, 0, 0, 0.15);\n  padding-bottom: calc(var(ads-help-tray-footer-with-support-link-height) + var(ads-help-tray-header-height-new));\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndiv {\n  background: var(fig-light-02) url(/images/inset-shadow-east-ltr.png) 100% 0\n    repeat-y;\n  box-shadow: 0 0 1px 2px rgba(88, 144, 255, 0.75),\n    0 1px 1px rgba(0, 0, 0, 0.15);\n  padding-bottom: calc(\n    var(ads-help-tray-footer-with-support-link-height) +\n      var(ads-help-tray-header-height-new)\n  );\n}\n\n`;\n\nexports[`selectors.css 1`] = `\na {\n  ~ .Pagination-itemWrapper:not(.is-separator):not([data-priority^='#{$priority}'])\n    ~ .Pagination-itemWrapper.is-separator[data-priority^='#{$priority}'] {\n    display: flex;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\na {\n  ~ .Pagination-itemWrapper:not(.is-separator):not([data-priority^='#{$priority}'])\n    ~ .Pagination-itemWrapper.is-separator[data-priority^='#{$priority}'] {\n    display: flex;\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/css_indent/indent.css",
    "content": "div {\n  background: var(fig-light-02) url(/images/inset-shadow-east-ltr.png) 100% 0 repeat-y;\n  box-shadow: 0 0 1px 2px rgba(88, 144, 255, 0.75), 0 1px 1px rgba(0, 0, 0, 0.15);\n  padding-bottom: calc(var(ads-help-tray-footer-with-support-link-height) + var(ads-help-tray-header-height-new));\n}\n"
  },
  {
    "path": "tests/css_indent/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_indent/selectors.css",
    "content": "a {\n  ~ .Pagination-itemWrapper:not(.is-separator):not([data-priority^='#{$priority}'])\n    ~ .Pagination-itemWrapper.is-separator[data-priority^='#{$priority}'] {\n    display: flex;\n  }\n}\n"
  },
  {
    "path": "tests/css_inline_url/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`empty.css 1`] = `\n@font-face {\n  src: url();\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@font-face {\n  src: url();\n}\n\n`;\n\nexports[`inline_url.css 1`] = `\n.breadItem {\n  background-image: url('/images/product/simple_product_manager/breadcrumb/chevron_right.png');\n  background-image: url(/images/product/simple_product_manager/breadcrumb/chevron_right.png);\n  -fb-sprite: url(fbglyph:cross-outline, fig-white);\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mO4/B8AAqgB0yr7dJgAAAAASUVORK5CYII=);\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mO4/B8AAqgB0yr7dJgAAAAASUVORK5CYII=\");\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.breadItem {\n  background-image: url('/images/product/simple_product_manager/breadcrumb/chevron_right.png');\n  background-image: url(/images/product/simple_product_manager/breadcrumb/chevron_right.png);\n  -fb-sprite: url(fbglyph:cross-outline, fig-white);\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mO4/B8AAqgB0yr7dJgAAAAASUVORK5CYII=);\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mO4/B8AAqgB0yr7dJgAAAAASUVORK5CYII=\");\n}\n\n`;\n"
  },
  {
    "path": "tests/css_inline_url/empty.css",
    "content": "@font-face {\n  src: url();\n}\n"
  },
  {
    "path": "tests/css_inline_url/inline_url.css",
    "content": ".breadItem {\n  background-image: url('/images/product/simple_product_manager/breadcrumb/chevron_right.png');\n  background-image: url(/images/product/simple_product_manager/breadcrumb/chevron_right.png);\n  -fb-sprite: url(fbglyph:cross-outline, fig-white);\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mO4/B8AAqgB0yr7dJgAAAAASUVORK5CYII=);\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mO4/B8AAqgB0yr7dJgAAAAASUVORK5CYII=\");\n}\n"
  },
  {
    "path": "tests/css_inline_url/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_less_docs/less_docs.css",
    "content": "@nice-blue: #5B83AD;\n@light-blue: @nice-blue + #111;\n\n#header {\n  color: @light-blue;\n}\n\n\n#header {\n  color: #6c94be;\n}\n\n\n.bordered {\n  border-top: dotted 1px black;\n  border-bottom: solid 2px black;\n}\n\n\n#menu a {\n  color: #111;\n  .bordered;\n}\n\n.post a {\n  color: red;\n  .bordered;\n}\n\n\n#header {\n  color: black;\n}\n#header .navigation {\n  font-size: 12px;\n}\n#header .logo {\n  width: 300px;\n}\n\n\n#header {\n  color: black;\n  .navigation {\n    font-size: 12px;\n  }\n  .logo {\n    width: 300px;\n  }\n}\n\n\n.clearfix {\n  display: block;\n  zoom: 1;\n\n  &:after {\n    content: \" \";\n    display: block;\n    font-size: 0;\n    height: 0;\n    clear: both;\n    visibility: hidden;\n  }\n}\n\n\n.screen-color {\n  @media screen {\n    color: green;\n    @media (min-width: 768px) {\n      color: red;\n    }\n  }\n  @media tv {\n    color: black;\n  }\n}\n\n\n@media screen {\n  .screen-color {\n    color: green;\n  }\n}\n@media screen and (min-width: 768px) {\n  .screen-color {\n    color: red;\n  }\n}\n@media tv {\n  .screen-color {\n    color: black;\n  }\n}\n\n\n#a {\n  color: blue;\n  @font-face {\n    src: made-up-url;\n  }\n  padding: 2 2 2 2;\n}\n\n\n#a {\n  color: blue;\n}\n@font-face {\n  src: made-up-url;\n}\n#a {\n  padding: 2 2 2 2;\n}\n\n\n// numbers are converted into the same units\n@conversion-1: 5cm + 10mm; // result is 6cm\n@conversion-2: 2 - 3cm - 5mm; // result is -1.5cm\n\n// conversion is impossible\n@incompatible-units: 2 + 5px - 3cm; // result is 4px\n\n// example with variables\n@base: 5%;\n@filler: @base * 2; // result is 10%\n@other: @base + @filler; // result is 15%\n\n\n@base: 2cm * 3mm; // result is 6cm\n\n\n@color: #224488 / 2; //results in #112244\nbackground-color: #112244 + #111; // result is #223355\n\n\n.weird-element {\n  content: ~\"^//* some horrible but needed css hack\";\n}\n\n\n@base: #f04615;\n@width: 0.5;\n\n.class {\n  width: percentage(@width); // returns `50%`\n  color: saturate(@base, 5%);\n  background-color: spin(lighten(@base, 25%), 8);\n}\n\n\n#bundle {\n  .button {\n    display: block;\n    border: 1px solid black;\n    background-color: grey;\n    &:hover {\n      background-color: white\n    }\n  }\n  .tab { ... }\n  .citation { ... }\n}\n\n\n#header a {\n  color: orange;\n  #bundle > .button;\n}\n\n\n@var: red;\n\n#page {\n  @var: white;\n  #header {\n    color: @var; // white\n  }\n}\n\n\n@var: red;\n\n#page {\n  #header {\n    color: @var; // white\n  }\n  @var: white;\n}\n\n\n/* One hell of a block\nstyle comment! */\n@var: red;\n\n// Get in line!\n@var: white;\n\n\n@import \"library\"; // library.less\n@import \"typo.css\";\n\n\na,\n.link {\n  color: #428bca;\n}\n.widget {\n  color: #fff;\n  background: #428bca;\n}\n\n\n// Variables\n@link-color:        #428bca; // sea blue\n@link-color-hover:  darken(@link-color, 10%);\n\n// Usage\na,\n.link {\n  color: @link-color;\n}\na:hover {\n  color: @link-color-hover;\n}\n.widget {\n  color: #fff;\n  background: @link-color;\n}\n\n\n// Variables\n@my-selector: banner;\n\n// Usage\n.@{my-selector} {\n  font-weight: bold;\n  line-height: 40px;\n  margin: 0 auto;\n}\n\n\n.banner {\n  font-weight: bold;\n  line-height: 40px;\n  margin: 0 auto;\n}\n\n\n// Variables\n@images: \"../img\";\n\n// Usage\nbody {\n  color: #444;\n  background: url(\"@{images}/white-sand.png\");\n}\n\n\n// Variables\n@themes: \"../../src/themes\";\n\n// Usage\n@import \"@{themes}/tidal-wave.less\";\n\n\n@property: color;\n\n.widget {\n  @{property}: #0ee;\n  background-@{property}: #999;\n}\n\n\n.widget {\n  color: #0ee;\n  background-color: #999;\n}\n\n\n@fnord:  \"I am fnord.\";\n@var:    \"fnord\";\ncontent: @@var;\n\n\ncontent: \"I am fnord.\";\n\n\n.lazy-eval {\n  width: @var;\n}\n\n@var: @a;\n@a: 9%;\n\n\n.lazy-eval-scope {\n  width: @var;\n  @a: 9%;\n}\n\n@var: @a;\n@a: 100%;\n\n\n.lazy-eval-scope {\n  width: 9%;\n}\n\n\n@var: 0;\n.class {\n  @var: 1;\n  .brass {\n    @var: 2;\n    three: @var;\n    @var: 3;\n  }\n  one: @var;\n}\n\n\n.class {\n  one: 1;\n}\n.class .brass {\n  three: 3;\n}\n\n\n// library\n@base-color: green;\n@dark-color: darken(@base-color, 10%);\n\n// use of library\n@import \"library.less\";\n@base-color: red;\n\n\nnav ul {\n  &:extend(.inline);\n  background: blue;\n}\n\n\nnav ul {\n  &:extend(.inline);\n  background: blue;\n}\n.inline {\n  color: red;\n}\n\n\nnav ul {\n  background: blue;\n}\n.inline,\nnav ul {\n  color: red;\n}\n\n\n.a:extend(.b) {}\n\n// the above block does the same thing as the below block\n.a {\n  &:extend(.b);\n}\n\n\n.c:extend(.d all) {\n  // extends all instances of \".d\" e.g. \".x.d\" or \".d.x\"\n}\n.c:extend(.d) {\n  // extends only instances where the selector will be output as just \".d\"\n}\n\n\n.e:extend(.f) {}\n.e:extend(.g) {}\n\n// the above an the below do the same thing\n.e:extend(.f, .g) {}\n\n\n.big-division,\n.big-bag:extend(.bag),\n.big-bucket:extend(.bucket) {\n  // body\n}\n\n\npre:hover,\n.some-class {\n  &:extend(div pre);\n}\n\n\npre:hover:extend(div pre),\n.some-class:extend(div pre) {}\n\n\n.bucket {\n  tr { // nested ruleset with target selector\n    color: blue;\n  }\n}\n.some-class:extend(.bucket tr) {} // nested ruleset is recognized\n\n\n.bucket tr,\n.some-class {\n  color: blue;\n}\n\n\n.bucket {\n  tr & { // nested ruleset with target selector\n    color: blue;\n  }\n}\n.some-class:extend(tr .bucket) {} // nested ruleset is recognized\n\n\ntr .bucket,\n.some-class {\n  color: blue;\n}\n\n\n.a.class,\n.class.a,\n.class > .a {\n  color: blue;\n}\n.test:extend(.class) {} // this will NOT match the any selectors above\n\n\n*.class {\n  color: blue;\n}\n.noStar:extend(.class) {} // this will NOT match the *.class selector\n\n\n*.class {\n  color: blue;\n}\n\n\nlink:hover:visited {\n  color: blue;\n}\n.selector:extend(link:visited:hover) {}\n\n\nlink:hover:visited {\n  color: blue;\n}\n\n\n:nth-child(1n+3) {\n  color: blue;\n}\n.child:extend(:nth-child(n+3)) {}\n\n\n:nth-child(1n+3) {\n  color: blue;\n}\n\n\n[title=identifier] {\n  color: blue;\n}\n[title='identifier'] {\n  color: blue;\n}\n[title=\"identifier\"] {\n  color: blue;\n}\n\n.noQuote:extend([title=identifier]) {}\n.singleQuote:extend([title='identifier']) {}\n.doubleQuote:extend([title=\"identifier\"]) {}\n\n\n[title=identifier],\n.noQuote,\n.singleQuote,\n.doubleQuote {\n  color: blue;\n}\n\n[title='identifier'],\n.noQuote,\n.singleQuote,\n.doubleQuote {\n  color: blue;\n}\n\n[title=\"identifier\"],\n.noQuote,\n.singleQuote,\n.doubleQuote {\n  color: blue;\n}\n\n\n.a.b.test,\n.test.c {\n  color: orange;\n}\n.test {\n  &:hover {\n    color: green;\n  }\n}\n\n.replacement:extend(.test all) {}\n\n\n.a.b.test,\n.test.c,\n.a.b.replacement,\n.replacement.c {\n  color: orange;\n}\n.test:hover,\n.replacement:hover {\n  color: green;\n}\n\n\n@variable: .bucket;\n@{variable} { // interpolated selector\n  color: blue;\n}\n.some-class:extend(.bucket) {} // does nothing, no match is found\n\n\n.bucket {\n  color: blue;\n}\n.some-class:extend(@{variable}) {} // interpolated selector matches nothing\n@variable: .bucket;\n\n\n.bucket {\n  color: blue;\n}\n\n\n.bucket {\n  color: blue;\n}\n@{variable}:extend(.bucket) {}\n@variable: .selector;\n\n\n.bucket, .selector {\n  color: blue;\n}\n\n\n@media print {\n  .screenClass:extend(.selector) {} // extend inside media\n  .selector { // this will be matched - it is in the same media\n    color: black;\n  }\n}\n.selector { // ruleset on top of style sheet - extend ignores it\n  color: red;\n}\n@media screen {\n  .selector {  // ruleset inside another media - extend ignores it\n    color: blue;\n  }\n}\n\n\n@media print {\n  .selector,\n  .screenClass { /*  ruleset inside the same media was extended */\n    color: black;\n  }\n}\n.selector { /* ruleset on top of style sheet was ignored */\n  color: red;\n}\n@media screen {\n  .selector { /* ruleset inside another media was ignored */\n    color: blue;\n  }\n}\n\n\n@media screen {\n  .screenClass:extend(.selector) {} // extend inside media\n  @media (min-width: 1023px) {\n    .selector {  // ruleset inside nested media - extend ignores it\n      color: blue;\n    }\n  }\n}\n\n\n@media screen and (min-width: 1023px) {\n  .selector { /* ruleset inside another nested media was ignored */\n    color: blue;\n  }\n}\n\n\n@media screen {\n  .selector {  /* ruleset inside nested media - top level extend works */\n    color: blue;\n  }\n  @media (min-width: 1023px) {\n    .selector {  /* ruleset inside nested media - top level extend works */\n      color: blue;\n    }\n  }\n}\n\n.topLevel:extend(.selector) {} /* top level extend matches everything */\n\n\n@media screen {\n  .selector,\n  .topLevel { /* ruleset inside media was extended */\n    color: blue;\n  }\n}\n@media screen and (min-width: 1023px) {\n  .selector,\n  .topLevel { /* ruleset inside nested media was extended */\n    color: blue;\n  }\n}\n\n\n.alert-info,\n.widget {\n  /* declarations */\n}\n\n.alert:extend(.alert-info, .widget) {}\n\n\n.alert-info,\n.widget,\n.alert,\n.alert {\n  /* declarations */\n}\n\n\n.animal {\n  background-color: black;\n  color: white;\n}\n\n\n<a class=\"animal bear\">Bear</a>\n\n\n.animal {\n  background-color: black;\n  color: white;\n}\n.bear {\n  background-color: brown;\n}\n\n\n<a class=\"bear\">Bear</a>\n\n\n.animal {\n  background-color: black;\n  color: white;\n}\n.bear {\n  &:extend(.animal);\n  background-color: brown;\n}\n\n\n.my-inline-block() {\n  display: inline-block;\n  font-size: 0;\n}\n.thing1 {\n  .my-inline-block;\n}\n.thing2 {\n  .my-inline-block;\n}\n\n\n.thing1 {\n  display: inline-block;\n  font-size: 0;\n}\n.thing2 {\n  display: inline-block;\n  font-size: 0;\n}\n\n\n.my-inline-block {\n  display: inline-block;\n  font-size: 0;\n}\n.thing1 {\n  &:extend(.my-inline-block);\n}\n.thing2 {\n  &:extend(.my-inline-block);\n}\n\n\n.my-inline-block,\n.thing1,\n.thing2 {\n  display: inline-block;\n  font-size: 0;\n}\n\n\nli.list > a {\n  // list styles\n}\nbutton.list-style {\n  &:extend(li.list > a); // use the same list styles\n}\n\n\n.a, #b {\n  color: red;\n}\n.mixin-class {\n  .a();\n}\n.mixin-id {\n  #b();\n}\n\n\n.a, #b {\n  color: red;\n}\n.mixin-class {\n  color: red;\n}\n.mixin-id {\n  color: red;\n}\n\n\n// these two statements do the same thing:\n.a();\n.a;\n\n\n.my-mixin {\n  color: black;\n}\n.my-other-mixin() {\n  background: white;\n}\n.class {\n  .my-mixin;\n  .my-other-mixin;\n}\n\n\n.my-mixin {\n  color: black;\n}\n.class {\n  color: black;\n  background: white;\n}\n\n\n.my-hover-mixin() {\n  &:hover {\n    border: 1px solid red;\n  }\n}\nbutton {\n  .my-hover-mixin();\n}\n\n\nbutton:hover {\n  border: 1px solid red;\n}\n\n\n#outer {\n  .inner {\n    color: red;\n  }\n}\n\n.c {\n  #outer > .inner;\n}\n\n\n// all do the same thing\n#outer > .inner;\n#outer > .inner();\n#outer .inner;\n#outer .inner();\n#outer.inner;\n#outer.inner();\n\n\n#my-library {\n  .my-mixin() {\n    color: black;\n  }\n}\n// which can be used like this\n.class {\n  #my-library > .my-mixin();\n}\n\n\n#namespace when (@mode=huge) {\n  .mixin() { /* */ }\n}\n\n#namespace {\n  .mixin() when (@mode=huge) { /* */ }\n}\n\n\n#sp_1 when (default()) {\n  #sp_2 when (default()) {\n    .mixin() when not(default()) { /* */ }\n  }\n}\n\n\n.foo (@bg: #f5f5f5, @color: #900) {\n  background: @bg;\n  color: @color;\n}\n.unimportant {\n  .foo();\n}\n.important {\n  .foo() !important;\n}\n\n\n.unimportant {\n  background: #f5f5f5;\n  color: #900;\n}\n.important {\n  background: #f5f5f5 !important;\n  color: #900 !important;\n}\n\n\n.border-radius(@radius) {\n  -webkit-border-radius: @radius;\n     -moz-border-radius: @radius;\n          border-radius: @radius;\n}\n\n\n#header {\n  .border-radius(4px);\n}\n.button {\n  .border-radius(6px);\n}\n\n\n.border-radius(@radius: 5px) {\n  -webkit-border-radius: @radius;\n     -moz-border-radius: @radius;\n          border-radius: @radius;\n}\n\n\n#header {\n  .border-radius;\n}\n\n\n.wrap() {\n  text-wrap: wrap;\n  white-space: -moz-pre-wrap;\n  white-space: pre-wrap;\n  word-wrap: break-word;\n}\n\npre { .wrap }\n\n\npre {\n  text-wrap: wrap;\n  white-space: -moz-pre-wrap;\n  white-space: pre-wrap;\n  word-wrap: break-word;\n}\n\n\n.mixin(@color) {\n  color-1: @color;\n}\n.mixin(@color; @padding: 2) {\n  color-2: @color;\n  padding-2: @padding;\n}\n.mixin(@color; @padding; @margin: 2) {\n  color-3: @color;\n  padding-3: @padding;\n  margin: @margin @margin @margin @margin;\n}\n.some .selector div {\n  .mixin(#008000);\n}\n\n\n.some .selector div {\n  color-1: #008000;\n  color-2: #008000;\n  padding-2: 2;\n}\n\n\n.mixin(@color: black; @margin: 10px; @padding: 20px) {\n  color: @color;\n  margin: @margin;\n  padding: @padding;\n}\n.class1 {\n  .mixin(@margin: 20px; @color: #33acfe);\n}\n.class2 {\n  .mixin(#efca44; @padding: 40px);\n}\n\n\n.class1 {\n  color: #33acfe;\n  margin: 20px;\n  padding: 20px;\n}\n.class2 {\n  color: #efca44;\n  margin: 10px;\n  padding: 40px;\n}\n\n\n.box-shadow(@x: 0; @y: 0; @blur: 1px; @color: #000) {\n  -webkit-box-shadow: @arguments;\n     -moz-box-shadow: @arguments;\n          box-shadow: @arguments;\n}\n.big-block {\n  .box-shadow(2px; 5px);\n}\n\n\n.big-block {\n  -webkit-box-shadow: 2px 5px 1px #000;\n     -moz-box-shadow: 2px 5px 1px #000;\n          box-shadow: 2px 5px 1px #000;\n}\n\n\n.mixin(...) {}        // matches 0-N arguments\n.mixin() {}           // matches exactly 0 arguments\n.mixin(@a: 1) {}      // matches 0-1 arguments\n.mixin(@a: 1; ...) {} // matches 0-N arguments\n.mixin(@a; ...) {}    // matches 1-N arguments\n\n\n.mixin(@a; @rest...) {\n   // @rest is bound to arguments after @a\n   // @arguments is bound to all arguments\n}\n\n\n.mixin(@s; @color) { ... }\n\n.class {\n  .mixin(@switch; #888);\n}\n\n\n.mixin(dark; @color) {\n  color: darken(@color, 10%);\n}\n.mixin(light; @color) {\n  color: lighten(@color, 10%);\n}\n.mixin(@_; @color) {\n  display: block;\n}\n\n\n@switch: light;\n\n.class {\n  .mixin(@switch; #888);\n}\n\n\n.class {\n  color: #a2a2a2;\n  display: block;\n}\n\n\n.mixin(@a) {\n  color: @a;\n}\n.mixin(@a; @b) {\n  color: fade(@a; @b);\n}\n\n\n.mixin() {\n  @width:  100%;\n  @height: 200px;\n}\n\n.caller {\n  .mixin();\n  width:  @width;\n  height: @height;\n}\n\n\n.caller {\n  width:  100%;\n  height: 200px;\n}\n\n\n.average(@x, @y) {\n  @average: ((@x + @y) / 2);\n}\n\ndiv {\n  .average(16px, 50px); // \"call\" the mixin\n  padding: @average;    // use its \"return\" value\n}\n\n\ndiv {\n  padding: 33px;\n}\n\n\n.mixin() {\n  @size: in-mixin;\n  @definedOnlyInMixin: in-mixin;\n}\n\n.class {\n  margin: @size @definedOnlyInMixin;\n  .mixin();\n}\n\n@size: globaly-defined-value; // callers parent scope - no protection\n\n\n.class {\n  margin: in-mixin in-mixin;\n}\n\n\n.unlock(@value) { // outer mixin\n  .doSomething() { // nested mixin\n    declaration: @value;\n  }\n}\n\n#namespace {\n  .unlock(5); // unlock doSomething mixin\n  .doSomething(); //nested mixin was copied here and is usable\n}\n\n\n#namespace {\n  declaration: 5;\n}\n\n\n// declare detached ruleset\n@detached-ruleset: { background: red; };\n\n// use detached ruleset\n.top {\n    @detached-ruleset();\n}\n\n\n.top {\n  background: red;\n}\n\n\n.desktop-and-old-ie(@rules) {\n  @media screen and (min-width: 1200px) { @rules(); }\n  html.lt-ie9 &                         { @rules(); }\n}\n\nheader {\n  background-color: blue;\n\n  .desktop-and-old-ie({\n    background-color: red;\n  });\n}\n\n\nheader {\n  background-color: blue;\n}\n@media screen and (min-width: 1200px) {\n  header {\n    background-color: red;\n  }\n}\nhtml.lt-ie9 header {\n  background-color: red;\n}\n\n\n@my-ruleset: {\n    .my-selector {\n      background-color: black;\n    }\n  };\n\n\n@my-ruleset: {\n    .my-selector {\n      @media tv {\n        background-color: black;\n      }\n    }\n  };\n@media (orientation:portrait) {\n    @my-ruleset();\n}\n\n\n@media (orientation: portrait) and tv {\n  .my-selector {\n    background-color: black;\n  }\n}\n\n\n// detached ruleset with a mixin\n@detached-ruleset: {\n    .mixin() {\n        color:blue;\n    }\n};\n// call detached ruleset\n.caller {\n    @detached-ruleset();\n    .mixin();\n}\n\n\n.caller {\n  color: blue;\n}\n\n\n@detached-ruleset: {\n    @color:blue; // this variable is private\n};\n.caller {\n    color: @color; // syntax error\n}\n\n\n@detached-ruleset: {\n  caller-variable: @caller-variable; // variable is undefined here\n  .caller-mixin(); // mixin is undefined here\n};\n\nselector {\n  // use detached ruleset\n  @detached-ruleset();\n\n  // define variable and mixin needed inside the detached ruleset\n  @caller-variable: value;\n  .caller-mixin() {\n    variable: declaration;\n  }\n}\n\n\nselector {\n  caller-variable: value;\n  variable: declaration;\n}\n\n\n@variable: global;\n@detached-ruleset: {\n  // will use global variable, because it is accessible\n  // from detached-ruleset definition\n  variable: @variable;\n};\n\nselector {\n  @detached-ruleset();\n  @variable: value; // variable defined in caller - will be ignored\n}\n\n\nselector {\n  variable: global;\n}\n\n\n@detached-1: { scope-detached: @one @two; };\n.one {\n  @one: visible;\n  .two {\n    @detached-2: @detached-1; // copying/renaming ruleset\n    @two: visible; // ruleset can not see this variable\n  }\n}\n\n.use-place {\n  .one > .two();\n  @detached-2();\n}\n\n\nERROR 1:32 The variable \"@one\" was not declared.\n\n\n#space {\n  .importer-1() {\n    @detached: { scope-detached: @variable; }; // define detached ruleset\n  }\n}\n\n.importer-2() {\n  @variable: value; // unlocked detached ruleset CAN see this variable\n  #space > .importer-1(); // unlock/import detached ruleset\n}\n\n.use-place {\n  .importer-2(); // unlock/import detached ruleset second time\n   @detached();\n}\n\n\n.use-place {\n  scope-detached: value;\n}\n\n\n.foo {\n  background: #900;\n}\n@import \"this-is-valid.less\";\n\n\n@import \"foo\";      // foo.less is imported\n@import \"foo.less\"; // foo.less is imported\n@import \"foo.php\";  // foo.php imported as a less file\n@import \"foo.css\";  // statement left in place, as-is\n\n\n.navbar:extend(.navbar all) {}\n\n\n@import (less) \"foo.css\";\n\n\n@import (css) \"foo.less\";\n\n\n@import \"foo.less\";\n\n\n@import (once) \"foo.less\";\n@import (once) \"foo.less\"; // this statement will be ignored\n\n\n// file: foo.less\n.a {\n  color: green;\n}\n// file: main.less\n@import (multiple) \"foo.less\";\n@import (multiple) \"foo.less\";\n\n\n.a {\n  color: green;\n}\n.a {\n  color: green;\n}\n\n\n.mixin (@a) when (lightness(@a) >= 50%) {\n  background-color: black;\n}\n.mixin (@a) when (lightness(@a) < 50%) {\n  background-color: white;\n}\n.mixin (@a) {\n  color: @a;\n}\n\n\n.class1 { .mixin(#ddd) }\n.class2 { .mixin(#555) }\n\n\n.class1 {\n  background-color: black;\n  color: #ddd;\n}\n.class2 {\n  background-color: white;\n  color: #555;\n}\n\n\n.truth (@a) when (@a) { ... }\n.truth (@a) when (@a = true) { ... }\n\n\n.class {\n  .truth(40); // Will not match any of the above definitions.\n}\n\n\n@media: mobile;\n\n.mixin (@a) when (@media = mobile) { ... }\n.mixin (@a) when (@media = desktop) { ... }\n\n.max (@a; @b) when (@a > @b) { width: @a }\n.max (@a; @b) when (@a < @b) { width: @b }\n\n\n.mixin (@a) when (isnumber(@a)) and (@a > 0) { ... }\n\n\n.mixin (@a) when (@a > 10), (@a < -10) { ... }\n\n\n.mixin (@b) when not (@b > 0) { ... }\n\n\n.mixin (@a; @b: 0) when (isnumber(@b)) { ... }\n.mixin (@a; @b: black) when (iscolor(@b)) { ... }\n\n\n.mixin (@a) when (@a > 0) { ...  }\n.mixin (@a) when (default()) { ... } // matches only if first mixin does not, i.e. when @a <= 0\n\n\n.my-optional-style() when (@my-option = true) {\n  button {\n    color: white;\n  }\n}\n.my-optional-style();\n\n\nbutton when (@my-option = true) {\n  color: white;\n}\n\n\n& when (@my-option = true) {\n  button {\n    color: white;\n  }\n  a {\n    color: blue;\n  }\n}\n\n\n.loop(@counter) when (@counter > 0) {\n  .loop((@counter - 1));    // next iteration\n  width: (10px * @counter); // code for each iteration\n}\n\ndiv {\n  .loop(5); // launch the loop\n}\n\n\ndiv {\n  width: 10px;\n  width: 20px;\n  width: 30px;\n  width: 40px;\n  width: 50px;\n}\n\n\n.generate-columns(4);\n\n.generate-columns(@n, @i: 1) when (@i =< @n) {\n  .column-@{i} {\n    width: (@i * 100% / @n);\n  }\n  .generate-columns(@n, (@i + 1));\n}\n\n\n.column-1 {\n  width: 25%;\n}\n.column-2 {\n  width: 50%;\n}\n.column-3 {\n  width: 75%;\n}\n.column-4 {\n  width: 100%;\n}\n\n\n.mixin() {\n  box-shadow+: inset 0 0 10px #555;\n}\n.myclass {\n  .mixin();\n  box-shadow+: 0 0 20px black;\n}\n\n\n.myclass {\n  box-shadow: inset 0 0 10px #555, 0 0 20px black;\n}\n\n\n.mixin() {\n  transform+_: scale(2);\n}\n.myclass {\n  .mixin();\n  transform+_: rotate(15deg);\n}\n\n\n.myclass {\n  transform: scale(2) rotate(15deg);\n}\n\n\na {\n  color: blue;\n  &:hover {\n    color: green;\n  }\n}\n\n\na {\n  color: blue;\n}\n\na:hover {\n  color: green;\n}\n\n\n.button {\n  &-ok {\n    background-image: url(\"ok.png\");\n  }\n  &-cancel {\n    background-image: url(\"cancel.png\");\n  }\n\n  &-custom {\n    background-image: url(\"custom.png\");\n  }\n}\n\n\n.button-ok {\n  background-image: url(\"ok.png\");\n}\n.button-cancel {\n  background-image: url(\"cancel.png\");\n}\n.button-custom {\n  background-image: url(\"custom.png\");\n}\n\n\n.link {\n  & + & {\n    color: red;\n  }\n\n  & & {\n    color: green;\n  }\n\n  && {\n    color: blue;\n  }\n\n  &, &ish {\n    color: cyan;\n  }\n}\n\n\n.link + .link {\n  color: red;\n}\n.link .link {\n  color: green;\n}\n.link.link {\n  color: blue;\n}\n.link, .linkish {\n  color: cyan;\n}\n\n\n.grand {\n  .parent {\n    & > & {\n      color: red;\n    }\n\n    & & {\n      color: green;\n    }\n\n    && {\n      color: blue;\n    }\n\n    &, &ish {\n      color: cyan;\n    }\n  }\n}\n\n\n.grand .parent > .grand .parent {\n  color: red;\n}\n.grand .parent .grand .parent {\n  color: green;\n}\n.grand .parent.grand .parent {\n  color: blue;\n}\n.grand .parent,\n.grand .parentish {\n  color: cyan;\n}\n\n\n.header {\n  .menu {\n    border-radius: 5px;\n    .no-borderradius & {\n      background-image: url('images/button-background.png');\n    }\n  }\n}\n\n\n.header .menu {\n  border-radius: 5px;\n}\n.no-borderradius .header .menu {\n  background-image: url('images/button-background.png');\n}\n\n\np, a, ul, li {\n  border-top: 2px dotted #366;\n  & + & {\n    border-top: 0;\n  }\n}\n\n\np,\na,\nul,\nli {\n  border-top: 2px dotted #366;\n}\np + p,\np + a,\np + ul,\np + li,\na + p,\na + a,\na + ul,\na + li,\nul + p,\nul + a,\nul + ul,\nul + li,\nli + p,\nli + a,\nli + ul,\nli + li {\n  border-top: 0;\n}\n"
  },
  {
    "path": "tests/css_long_rule/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`long_rule.css 1`] = `\n.nuclide-resize-sensitive-container-sensor,\n.nuclide-resize-sensitive-container-expand,\n.nuclide-resize-sensitive-container-shrink {\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.nuclide-resize-sensitive-container-sensor,\n.nuclide-resize-sensitive-container-expand,\n.nuclide-resize-sensitive-container-shrink {\n}\n\n`;\n"
  },
  {
    "path": "tests/css_long_rule/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_long_rule/long_rule.css",
    "content": ".nuclide-resize-sensitive-container-sensor,\n.nuclide-resize-sensitive-container-expand,\n.nuclide-resize-sensitive-container-shrink {\n}\n"
  },
  {
    "path": "tests/css_loose/loose.js",
    "content": "div {\n  height: calc(-0.5 * var(ei-table-cell-padding));\n  width: -webkit-calc(100% + 20px);\n  margin: -moz-calc(100% - 320px);\n  background: url(var(audience-network-checkbox-image)) center no-repeat;\n  background-image: url() center center no-repeat black;\n}\n"
  },
  {
    "path": "tests/css_media/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`overflow.css 1`] = `\n@media all and (-webkit-min-device-pixel-ratio: 1.5), all and (-o-min-device-pixel-ratio: 3/2), all and (min--moz-device-pixel-ratio: 1.5), all and (min-device-pixel-ratio: 1.5) {\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@media all and (-webkit-min-device-pixel-ratio: 1.5),\n  all and (-o-min-device-pixel-ratio: 3/2),\n  all and (min--moz-device-pixel-ratio: 1.5),\n  all and (min-device-pixel-ratio: 1.5) {\n}\n\n`;\n"
  },
  {
    "path": "tests/css_media/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_media/overflow.css",
    "content": "@media all and (-webkit-min-device-pixel-ratio: 1.5), all and (-o-min-device-pixel-ratio: 3/2), all and (min--moz-device-pixel-ratio: 1.5), all and (min-device-pixel-ratio: 1.5) {\n}\n"
  },
  {
    "path": "tests/css_params/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`params.css 1`] = `\n.clusterPlannerDialog input[type=\"text\"],\n.clusterPlannerDialog .uiTypeahead {\n  width: 220px;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.clusterPlannerDialog input[type=\"text\"],\n.clusterPlannerDialog .uiTypeahead {\n  width: 220px;\n}\n\n`;\n"
  },
  {
    "path": "tests/css_params/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_params/params.css",
    "content": ".clusterPlannerDialog input[type=\"text\"],\n.clusterPlannerDialog .uiTypeahead {\n  width: 220px;\n}\n"
  },
  {
    "path": "tests/css_parens/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`parens.js 1`] = `\na {\n  box-shadow: inset 0 $size $size (-$size) black;\n  width: calc(100% - (#{var(--g-spacing)} - #{$iframe-x-padding}) * 2);\n  padding-right: (100% * $info-width / (1 - $image-width));\n  padding-bottom:\n    (\n      100% *\n      $image-height / ($image-width-responsive + $image-margin-responsive * 2)\n    );\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\na {\n  box-shadow: inset 0 $size $size (-$size) black;\n  width: calc(100% - (#{var(--g-spacing)} - #{$iframe-x-padding}) * 2);\n  padding-right: (100% * $info-width / (1 - $image-width));\n  padding-bottom: (\n    100% * $image-height / ($image-width-responsive + $image-margin-responsive *\n          2)\n  );\n}\n\n`;\n"
  },
  {
    "path": "tests/css_parens/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_parens/parens.js",
    "content": "a {\n  box-shadow: inset 0 $size $size (-$size) black;\n  width: calc(100% - (#{var(--g-spacing)} - #{$iframe-x-padding}) * 2);\n  padding-right: (100% * $info-width / (1 - $image-width));\n  padding-bottom:\n    (\n      100% *\n      $image-height / ($image-width-responsive + $image-margin-responsive * 2)\n    );\n}\n"
  },
  {
    "path": "tests/css_prefix/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`prefix.css 1`] = `\ndiv {\n  margin-left: -@leftMargin;\n  transform: translateY(-@offset);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndiv {\n  margin-left: -@leftMargin;\n  transform: translateY(-@offset);\n}\n\n`;\n"
  },
  {
    "path": "tests/css_prefix/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_prefix/prefix.css",
    "content": "div {\n  margin-left: -@leftMargin;\n  transform: translateY(-@offset);\n}\n"
  },
  {
    "path": "tests/css_pseudo_call/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`pseudo_call.css 1`] = `\ndiv:not(:last-child) {\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndiv:not(:last-child) {\n}\n\n`;\n"
  },
  {
    "path": "tests/css_pseudo_call/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_pseudo_call/pseudo_call.css",
    "content": "div:not(:last-child) {\n}\n"
  },
  {
    "path": "tests/css_scss/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`import_comma.css 1`] = `\n@import \"rounded-corners\", \"text-shadow\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@import \"rounded-corners\", \"text-shadow\";\n\n`;\n\nexports[`scss.css 1`] = `\n@media #{$g-breakpoint-tiny} {}\n.#{$fa-css-prefix}-glass:before { content: $fa-var-glass; }\na {height: calc(#{$foo} + 1);}\ndiv {\n  background: {\n      size: auto 60%;\n      position: bottom 2px left;\n  }\n}\na { margin: 0 { left: 10px; } }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@media #{$g-breakpoint-tiny} {\n}\n.#{$fa-css-prefix}-glass:before {\n  content: $fa-var-glass;\n}\na {\n  height: calc(#{$foo} + 1);\n}\ndiv {\n  background: {\n    size: auto 60%;\n    position: bottom 2px left;\n  }\n}\na {\n  margin: 0 {\n    left: 10px;\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/css_scss/import_comma.css",
    "content": "@import \"rounded-corners\", \"text-shadow\";\n"
  },
  {
    "path": "tests/css_scss/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_scss/scss.css",
    "content": "@media #{$g-breakpoint-tiny} {}\n.#{$fa-css-prefix}-glass:before { content: $fa-var-glass; }\na {height: calc(#{$foo} + 1);}\ndiv {\n  background: {\n      size: auto 60%;\n      position: bottom 2px left;\n  }\n}\na { margin: 0 { left: 10px; } }\n"
  },
  {
    "path": "tests/css_selector_call/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`call.css 1`] = `\n.e:extend(.f, .g) {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.e:extend(.f, .g) {\n}\n\n`;\n"
  },
  {
    "path": "tests/css_selector_call/call.css",
    "content": ".e:extend(.f, .g) {}\n"
  },
  {
    "path": "tests/css_selector_call/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_selector_list/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`selectors.css 1`] = `\n.a,.b,.c {}\n.r { &, &:hover {} }\n\n@media (min-width: 0px) {\n  .a,.b,:not(asdasldaskdhjkashdahsdkjahskdjhakj,asdasldaskdhjkashdahsdkjahskdjhakj) {color: red}\n}\n\n.asdasldaskdhjkashdahsdkjahskdjhakjsdkjahsdhkas .asdasldaskdhjkashdahsdkjahskdjhakjsdkjahsdhkas,\n.asdasldaskdhjkashdahsdkjahskdjhakjsdkjahsdhkas .asdasldaskdhjkashdahsdkjahskdjhakjsdkjahsdhkas {}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.a,\n.b,\n.c {\n}\n.r {\n  &,\n  &:hover {\n  }\n}\n\n@media (min-width: 0px) {\n  .a,\n  .b,\n  :not(asdasldaskdhjkashdahsdkjahskdjhakj, asdasldaskdhjkashdahsdkjahskdjhakj) {\n    color: red;\n  }\n}\n\n.asdasldaskdhjkashdahsdkjahskdjhakjsdkjahsdhkas\n  .asdasldaskdhjkashdahsdkjahskdjhakjsdkjahsdhkas,\n.asdasldaskdhjkashdahsdkjahskdjhakjsdkjahsdhkas\n  .asdasldaskdhjkashdahsdkjahskdjhakjsdkjahsdhkas {\n}\n\n`;\n"
  },
  {
    "path": "tests/css_selector_list/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_selector_list/selectors.css",
    "content": ".a,.b,.c {}\n.r { &, &:hover {} }\n\n@media (min-width: 0px) {\n  .a,.b,:not(asdasldaskdhjkashdahsdkjahskdjhakj,asdasldaskdhjkashdahsdkjahskdjhakj) {color: red}\n}\n\n.asdasldaskdhjkashdahsdkjahskdjhakjsdkjahsdhkas .asdasldaskdhjkashdahsdkjahskdjhakjsdkjahsdhkas,\n.asdasldaskdhjkashdahsdkjahskdjhakjsdkjahsdhkas .asdasldaskdhjkashdahsdkjahskdjhakjsdkjahsdhkas {}"
  },
  {
    "path": "tests/css_selector_string/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`string.css 1`] = `\n:not(\".public/basics/positioning\") {\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n:not(\".public/basics/positioning\") {\n}\n\n`;\n"
  },
  {
    "path": "tests/css_selector_string/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_selector_string/string.css",
    "content": ":not(\".public/basics/positioning\") {\n}\n"
  },
  {
    "path": "tests/css_trailing_comma/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`trailing.css 1`] = `\nasdasldaskdhjkashdahsdkjahskdjhakjsdkjahsdhkasdhkajsdhakjsdhkajsdhjkahskjdkjahsjkdjkakjsdm,\nasdasldaskdhjkashdahsdkjahskdjhakjsdkjahsdhkasdhkajsdhakjsdhkajsdhjkahskjdkjahsjkdjkakjsdm, {\n\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nasdasldaskdhjkashdahsdkjahskdjhakjsdkjahsdhkasdhkajsdhakjsdhkajsdhjkahskjdkjahsjkdjkakjsdm,\nasdasldaskdhjkashdahsdkjahskdjhakjsdkjahsdhkasdhkajsdhakjsdhkajsdhjkahskjdkjahsjkdjkakjsdm {\n}\n\n`;\n"
  },
  {
    "path": "tests/css_trailing_comma/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_trailing_comma/trailing.css",
    "content": "asdasldaskdhjkashdahsdkjahskdjhakjsdkjahsdhkasdhkajsdhakjsdhkajsdhjkahskjdkjahsjkdjkakjsdm,\nasdasldaskdhjkashdahsdkjahskdjhakjsdkjahsdhkasdhkajsdhakjsdhkajsdhjkahskjdkjahsjkdjkakjsdm, {\n\n}\n"
  },
  {
    "path": "tests/cursor/jsfmt.spec.js",
    "content": "const prettier = require(\"../..\");\n\ntest(\"translates cursor correctly in basic case\", () => {\n  expect(prettier.formatWithCursor(\" 1\", { cursorOffset: 2 })).toEqual({\n    formatted: \"1;\\n\",\n    cursorOffset: 1\n  });\n});\n\ntest(\"positions cursor relative to closest node, not SourceElement\", () => {\n  const code = \"return         15\";\n  expect(prettier.formatWithCursor(code, { cursorOffset: 15 })).toEqual({\n    formatted: \"return 15;\\n\",\n    cursorOffset: 7\n  });\n});\n\ntest(\"keeps cursor inside formatted node\", () => {\n  const code = \"return         15\";\n  expect(prettier.formatWithCursor(code, { cursorOffset: 14 })).toEqual({\n    formatted: \"return 15;\\n\",\n    cursorOffset: 14 // TODO fix this\n  });\n});\n\ntest(\"doesn't insert second placeholder for nonexistent TypeAnnotation\", () => {\n  const code = `\nfoo('bar', cb => {\n  console.log('stuff')\n})`;\n  expect(prettier.formatWithCursor(code, { cursorOffset: 24 })).toEqual({\n    formatted: `foo(\"bar\", cb => {\n  console.log(\"stuff\");\n});\n`,\n    cursorOffset: 23\n  });\n});\n"
  },
  {
    "path": "tests/decorators/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`comments.js 1`] = `\nvar x = 100\n\n@Hello({\n  a: 'a', // Comment is in the wrong place\n  // test\n  b: '2'\n})\nclass X {\n\n}\n\n\n@NgModule({\n  // Imports.\n  imports: [\n    // Angular modules.\n    BrowserModule,\n\n    // App modules.\n    CoreModule,\n    SharedModule,\n  ],\n})\nexport class AppModule {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x = 100;\n\n@Hello({\n  a: \"a\", // Comment is in the wrong place\n  // test\n  b: \"2\"\n})\nclass X {}\n\n@NgModule({\n  // Imports.\n  imports: [\n    // Angular modules.\n    BrowserModule,\n\n    // App modules.\n    CoreModule,\n    SharedModule\n  ]\n})\nexport class AppModule {}\n\n`;\n\nexports[`methods.js 1`] = `\n\nclass Yo {\n  @foo(\"hello\")\n  async plop() {}\n\n  @anotherDecoratorWithALongName(\"and a very long string as a first argument\")\n  async plip() {}\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass Yo {\n  @foo(\"hello\")\n  async plop() {}\n\n  @anotherDecoratorWithALongName(\"and a very long string as a first argument\")\n  async plip() {}\n}\n\n`;\n\nexports[`mobx.js 1`] = `\nimport {observable} from \"mobx\";\n\n@observer class OrderLine {\n  @observable price:number = 0;\n  @observable amount:number = 1;\n\n  constructor(price) {\n    this.price = price;\n  }\n\n  @computed get total() {\n    return this.price * this.amount;\n  }\n\n  @action.bound setPrice(price) {\n    this.price = price;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport { observable } from \"mobx\";\n\n@observer\nclass OrderLine {\n  @observable price: number = 0;\n  @observable amount: number = 1;\n\n  constructor(price) {\n    this.price = price;\n  }\n\n  @computed\n  get total() {\n    return this.price * this.amount;\n  }\n\n  @action.bound\n  setPrice(price) {\n    this.price = price;\n  }\n}\n\n`;\n\nexports[`multiple.js 1`] = `\nconst dog = {\n  @readonly\n  @nonenumerable\n  @doubledValue\n  legs: 4\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst dog = {\n  @readonly\n  @nonenumerable\n  @doubledValue\n  legs: 4\n};\n\n`;\n\nexports[`redux.js 1`] = `\n@connect(mapStateToProps, mapDispatchToProps)\nexport class MyApp extends React.Component {}\n\n@connect(state => ({ todos: state.todos }))\nexport class Home extends React.Component {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@connect(mapStateToProps, mapDispatchToProps)\nexport class MyApp extends React.Component {}\n\n@connect(state => ({ todos: state.todos }))\nexport class Home extends React.Component {}\n\n`;\n"
  },
  {
    "path": "tests/decorators/comments.js",
    "content": "var x = 100\n\n@Hello({\n  a: 'a', // Comment is in the wrong place\n  // test\n  b: '2'\n})\nclass X {\n\n}\n\n\n@NgModule({\n  // Imports.\n  imports: [\n    // Angular modules.\n    BrowserModule,\n\n    // App modules.\n    CoreModule,\n    SharedModule,\n  ],\n})\nexport class AppModule {}\n"
  },
  {
    "path": "tests/decorators/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"babylon\" });\n"
  },
  {
    "path": "tests/decorators/methods.js",
    "content": "\nclass Yo {\n  @foo(\"hello\")\n  async plop() {}\n\n  @anotherDecoratorWithALongName(\"and a very long string as a first argument\")\n  async plip() {}\n}\n"
  },
  {
    "path": "tests/decorators/mobx.js",
    "content": "import {observable} from \"mobx\";\n\n@observer class OrderLine {\n  @observable price:number = 0;\n  @observable amount:number = 1;\n\n  constructor(price) {\n    this.price = price;\n  }\n\n  @computed get total() {\n    return this.price * this.amount;\n  }\n\n  @action.bound setPrice(price) {\n    this.price = price;\n  }\n}\n"
  },
  {
    "path": "tests/decorators/multiple.js",
    "content": "const dog = {\n  @readonly\n  @nonenumerable\n  @doubledValue\n  legs: 4\n};\n"
  },
  {
    "path": "tests/decorators/redux.js",
    "content": "@connect(mapStateToProps, mapDispatchToProps)\nexport class MyApp extends React.Component {}\n\n@connect(state => ({ todos: state.todos }))\nexport class Home extends React.Component {}\n"
  },
  {
    "path": "tests/destructuring/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`destructuring.js 1`] = `\nconst [one, two = null, three = null] = arr;\na = ([s=1,]) => 1\nconst { children, ...props } = this.props\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst [one, two = null, three = null] = arr;\na = ([s = 1]) => 1;\nconst { children, ...props } = this.props;\n\n`;\n"
  },
  {
    "path": "tests/destructuring/destructuring.js",
    "content": "const [one, two = null, three = null] = arr;\na = ([s=1,]) => 1\nconst { children, ...props } = this.props\n"
  },
  {
    "path": "tests/destructuring/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\", \"typescript\"]);\n"
  },
  {
    "path": "tests/directives/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`escaped.js 1`] = `\n// Unnecessary escapes. (adapted from tests/quotes/strings.js)\n// Note that in directives, unnecessary escapes should be preserved.\n// See https://github.com/prettier/prettier/issues/1555\n'\\\\'';\n'\\\\\"';\n\"\\\\'\";\n\"\\\\\"\";\n'\\\\\\\\';\n'\\\\a';\n\"hol\\\\a\"\n'hol\\\\a'\n\"hol\\\\\\\\a (the a is not escaped)\"\n'hol\\\\\\\\a (the a is not escaped)'\n\"multiple \\\\a unnecessary \\\\a escapes\"\n'multiple \\\\a unnecessary \\\\a escapes'\n\"unnecessarily escaped character preceded by escaped backslash \\\\\\\\\\\\a\"\n'unnecessarily escaped character preceded by escaped backslash \\\\\\\\\\\\a'\n\"unescaped character preceded by two escaped backslashes       \\\\\\\\\\\\\\\\a\"\n'unescaped character preceded by two escaped backslashes       \\\\\\\\\\\\\\\\a'\n\"\\\\a\\\\a\" // consecutive unnecessarily escaped characters\n'\\\\a\\\\a' // consecutive unnecessarily escaped characters\n'escaped \\\\u2030 \\\\‰ (should still stay escaped)'\n\n// Meaningful escapes\n// Commented out to avoid \\`SyntaxError: Octal literals are not allowed in strict mode.\\`\n// \"octal escapes \\\\0 \\\\1 \\\\2 \\\\3 \\\\4 \\\\5 \\\\6 \\\\7\"\n// 'octal escapes \\\\0 \\\\1 \\\\2 \\\\3 \\\\4 \\\\5 \\\\6 \\\\7'\n\"meaningfully escaped alphabetical characters \\\\n \\\\r \\\\v \\\\t \\\\b \\\\f \\\\u2713 \\\\x61\"\n'meaningfully escaped alphabetical characters \\\\n \\\\r \\\\v \\\\t \\\\b \\\\f \\\\u2713 \\\\x61'\n'escaped newline \\\\\n'\n'escaped carriage return \\\\\n'\n'escaped \\\\u2028 \\\\ '\n'escaped \\\\u2029 \\\\ '\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Unnecessary escapes. (adapted from tests/quotes/strings.js)\n// Note that in directives, unnecessary escapes should be preserved.\n// See https://github.com/prettier/prettier/issues/1555\n'\\\\'';\n'\\\\\"';\n\"\\\\'\";\n\"\\\\\"\";\n\"\\\\\\\\\";\n\"\\\\a\";\n\"hol\\\\a\";\n\"hol\\\\a\";\n\"hol\\\\\\\\a (the a is not escaped)\";\n\"hol\\\\\\\\a (the a is not escaped)\";\n\"multiple \\\\a unnecessary \\\\a escapes\";\n\"multiple \\\\a unnecessary \\\\a escapes\";\n\"unnecessarily escaped character preceded by escaped backslash \\\\\\\\\\\\a\";\n\"unnecessarily escaped character preceded by escaped backslash \\\\\\\\\\\\a\";\n\"unescaped character preceded by two escaped backslashes       \\\\\\\\\\\\\\\\a\";\n\"unescaped character preceded by two escaped backslashes       \\\\\\\\\\\\\\\\a\";\n\"\\\\a\\\\a\"; // consecutive unnecessarily escaped characters\n\"\\\\a\\\\a\"; // consecutive unnecessarily escaped characters\n\"escaped \\\\u2030 \\\\‰ (should still stay escaped)\";\n\n// Meaningful escapes\n// Commented out to avoid \\`SyntaxError: Octal literals are not allowed in strict mode.\\`\n// \"octal escapes \\\\0 \\\\1 \\\\2 \\\\3 \\\\4 \\\\5 \\\\6 \\\\7\"\n// 'octal escapes \\\\0 \\\\1 \\\\2 \\\\3 \\\\4 \\\\5 \\\\6 \\\\7'\n\"meaningfully escaped alphabetical characters \\\\n \\\\r \\\\v \\\\t \\\\b \\\\f \\\\u2713 \\\\x61\";\n\"meaningfully escaped alphabetical characters \\\\n \\\\r \\\\v \\\\t \\\\b \\\\f \\\\u2713 \\\\x61\";\n\"escaped newline \\\\\n\";\n\"escaped carriage return \\\\\n\";\n\"escaped \\\\u2028 \\\\ \";\n\"escaped \\\\u2029 \\\\ \";\n\n`;\n\nexports[`last-line-0.js 1`] = `\n'use strict';~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\"use strict\";\n\n`;\n\nexports[`last-line-1.js 1`] = `\n'use strict';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\"use strict\";\n\n`;\n\nexports[`last-line-2.js 1`] = `\n'use strict';\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\"use strict\";\n\n`;\n\nexports[`newline.js 1`] = `\n/* @flow */\n\n\"use strict\";\n\nimport a from \"a\";\n\na();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n\"use strict\";\n\nimport a from \"a\";\n\na();\n\n`;\n\nexports[`no-newline.js 1`] = `\n\"use strict\";\na\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\"use strict\";\na;\n\n`;\n\nexports[`test.js 1`] = `\n\"use strict\";\n\nfunction fn() {\n  \"use strict\";\n}\n\nfunction f() {\n  'ngInject';\n  Object.assign(this, { $log, $uibModal });\n}\n\nfunction f() {\n\n  'ngInject';\n\n  Object.assign(this, { $log, $uibModal });\n\n}\n\nfunction f() {\n  'ngInject';\n\n\n  Object.assign(this, { $log, $uibModal });\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\"use strict\";\n\nfunction fn() {\n  \"use strict\";\n}\n\nfunction f() {\n  \"ngInject\";\n  Object.assign(this, { $log, $uibModal });\n}\n\nfunction f() {\n  \"ngInject\";\n\n  Object.assign(this, { $log, $uibModal });\n}\n\nfunction f() {\n  \"ngInject\";\n\n  Object.assign(this, { $log, $uibModal });\n}\n\n`;\n"
  },
  {
    "path": "tests/directives/escaped.js",
    "content": "// Unnecessary escapes. (adapted from tests/quotes/strings.js)\n// Note that in directives, unnecessary escapes should be preserved.\n// See https://github.com/prettier/prettier/issues/1555\n'\\'';\n'\\\"';\n\"\\'\";\n\"\\\"\";\n'\\\\';\n'\\a';\n\"hol\\a\"\n'hol\\a'\n\"hol\\\\a (the a is not escaped)\"\n'hol\\\\a (the a is not escaped)'\n\"multiple \\a unnecessary \\a escapes\"\n'multiple \\a unnecessary \\a escapes'\n\"unnecessarily escaped character preceded by escaped backslash \\\\\\a\"\n'unnecessarily escaped character preceded by escaped backslash \\\\\\a'\n\"unescaped character preceded by two escaped backslashes       \\\\\\\\a\"\n'unescaped character preceded by two escaped backslashes       \\\\\\\\a'\n\"\\a\\a\" // consecutive unnecessarily escaped characters\n'\\a\\a' // consecutive unnecessarily escaped characters\n'escaped \\u2030 \\‰ (should still stay escaped)'\n\n// Meaningful escapes\n// Commented out to avoid `SyntaxError: Octal literals are not allowed in strict mode.`\n// \"octal escapes \\0 \\1 \\2 \\3 \\4 \\5 \\6 \\7\"\n// 'octal escapes \\0 \\1 \\2 \\3 \\4 \\5 \\6 \\7'\n\"meaningfully escaped alphabetical characters \\n \\r \\v \\t \\b \\f \\u2713 \\x61\"\n'meaningfully escaped alphabetical characters \\n \\r \\v \\t \\b \\f \\u2713 \\x61'\n'escaped newline \\\n'\n'escaped carriage return \\\r\n'\n'escaped \\u2028 \\ '\n'escaped \\u2029 \\ '\n"
  },
  {
    "path": "tests/directives/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\", \"typescript\"]);\n"
  },
  {
    "path": "tests/directives/last-line-0.js",
    "content": "'use strict';"
  },
  {
    "path": "tests/directives/last-line-1.js",
    "content": "'use strict';\n"
  },
  {
    "path": "tests/directives/last-line-2.js",
    "content": "'use strict';\n\n"
  },
  {
    "path": "tests/directives/newline.js",
    "content": "/* @flow */\n\n\"use strict\";\n\nimport a from \"a\";\n\na();\n"
  },
  {
    "path": "tests/directives/no-newline.js",
    "content": "\"use strict\";\na\n"
  },
  {
    "path": "tests/directives/test.js",
    "content": "\"use strict\";\n\nfunction fn() {\n  \"use strict\";\n}\n\nfunction f() {\n  'ngInject';\n  Object.assign(this, { $log, $uibModal });\n}\n\nfunction f() {\n\n  'ngInject';\n\n  Object.assign(this, { $log, $uibModal });\n\n}\n\nfunction f() {\n  'ngInject';\n\n\n  Object.assign(this, { $log, $uibModal });\n}\n"
  },
  {
    "path": "tests/do/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`do.js 1`] = `\nconst envSpecific = {\n  domain:\n    do {\n      if(env === 'production') 'https://abc.mno.com/';\n      else if(env === 'development') 'http://localhost:4000';\n    }\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst envSpecific = {\n  domain: do {\n    if (env === \"production\") \"https://abc.mno.com/\";\n    else if (env === \"development\") \"http://localhost:4000\";\n  }\n};\n\n`;\n"
  },
  {
    "path": "tests/do/do.js",
    "content": "const envSpecific = {\n  domain:\n    do {\n      if(env === 'production') 'https://abc.mno.com/';\n      else if(env === 'development') 'http://localhost:4000';\n    }\n};\n"
  },
  {
    "path": "tests/do/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"babylon\" });\n"
  },
  {
    "path": "tests/dynamic_import/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nimport(\"module.js\");\nimport(\"module.js\").then((a) => a);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport(\"module.js\");\nimport(\"module.js\").then(a => a);\n\n`;\n"
  },
  {
    "path": "tests/dynamic_import/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\", \"typescript\"]);\n"
  },
  {
    "path": "tests/dynamic_import/test.js",
    "content": "import(\"module.js\");\nimport(\"module.js\").then((a) => a);\n"
  },
  {
    "path": "tests/empty/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`empty.js 1`] = `\n;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n\n`;\n"
  },
  {
    "path": "tests/empty/empty.js",
    "content": ";\n"
  },
  {
    "path": "tests/empty/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/empty_paren_comment/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`class.js 1`] = `\nclass x {\n  /**\n  * Set of default settings to be applied to model fetch calls in DAO layer.\n  */\n  static get defaultSettings() {\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass x {\n  /**\n  * Set of default settings to be applied to model fetch calls in DAO layer.\n  */\n  static get defaultSettings() {}\n}\n\n`;\n\nexports[`empty_paren_comment.js 1`] = `\nlet f = (/* ... */) => {}\n(function (/* ... */) {})(/* ... */)\nfunction f(/* ... */) {}\n\nconst obj = {\n  f(/* ... */) {},\n  f: (/* ... */) => {},\n  f: function(/* ... */) {},\n  f: function f(/* ... */) {}\n}\n\nclass Foo {\n  f(/* ... */) {}\n  f() /* ... */ {}\n  f = (/* ... */) => {};\n  static f(/* ... */) {};\n  static f = (/* ... */) => {};\n  static f = function(/* ... */) {};\n  static f = function f(/* ... */) {};\n}\n\nf(/* ... */);\nf(a, /* ... */);\nf(a, /* ... */ b);\nf(/* ... */ a, b);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nlet f = (/* ... */) => {};\n(function(/* ... */) {})(/* ... */);\nfunction f(/* ... */) {}\n\nconst obj = {\n  f(/* ... */) {},\n  f: (/* ... */) => {},\n  f: function(/* ... */) {},\n  f: function f(/* ... */) {}\n};\n\nclass Foo {\n  f(/* ... */) {}\n  f() /* ... */ {\n  }\n  f = (/* ... */) => {};\n  static f(/* ... */) {}\n  static f = (/* ... */) => {};\n  static f = function(/* ... */) {};\n  static f = function f(/* ... */) {};\n}\n\nf(/* ... */);\nf(a /* ... */);\nf(a, /* ... */ b);\nf(/* ... */ a, b);\n\n`;\n"
  },
  {
    "path": "tests/empty_paren_comment/class.js",
    "content": "class x {\n  /**\n  * Set of default settings to be applied to model fetch calls in DAO layer.\n  */\n  static get defaultSettings() {\n  }\n}\n"
  },
  {
    "path": "tests/empty_paren_comment/empty_paren_comment.js",
    "content": "let f = (/* ... */) => {}\n(function (/* ... */) {})(/* ... */)\nfunction f(/* ... */) {}\n\nconst obj = {\n  f(/* ... */) {},\n  f: (/* ... */) => {},\n  f: function(/* ... */) {},\n  f: function f(/* ... */) {}\n}\n\nclass Foo {\n  f(/* ... */) {}\n  f() /* ... */ {}\n  f = (/* ... */) => {};\n  static f(/* ... */) {};\n  static f = (/* ... */) => {};\n  static f = function(/* ... */) {};\n  static f = function f(/* ... */) {};\n}\n\nf(/* ... */);\nf(a, /* ... */);\nf(a, /* ... */ b);\nf(/* ... */ a, b);\n"
  },
  {
    "path": "tests/empty_paren_comment/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\", \"typescript\"]);\n"
  },
  {
    "path": "tests/empty_statement/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`body.js 1`] = `\nwith (a);\nif (1); else if (2); else;\nfor (;;);\nwhile (1);\nfor (var i in o);\nfor (var i of o);\ndo; while(1);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nwith (a);\nif (1);\nelse if (2);\nelse;\nfor (;;);\nwhile (1);\nfor (var i in o);\nfor (var i of o);\ndo;\nwhile (1);\n\n`;\n\nexports[`no-newline.js 1`] = `\nif (a) {\n  b;\n\n\n  ;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nif (a) {\n  b;\n}\n\n`;\n"
  },
  {
    "path": "tests/empty_statement/body.js",
    "content": "with (a);\nif (1); else if (2); else;\nfor (;;);\nwhile (1);\nfor (var i in o);\nfor (var i of o);\ndo; while(1);\n"
  },
  {
    "path": "tests/empty_statement/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/empty_statement/no-newline.js",
    "content": "if (a) {\n  b;\n\n\n  ;\n}\n"
  },
  {
    "path": "tests/es6modules/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`export_default_arrow_expression.js 1`] = `\nexport default () => {};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default () => {};\n\n`;\n\nexports[`export_default_arrow_expression.js 2`] = `\nexport default () => {};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default () => {};\n\n`;\n\nexports[`export_default_call_expression.js 1`] = `\nexport default foo()\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default foo();\n\n`;\n\nexports[`export_default_call_expression.js 2`] = `\nexport default foo()\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default foo();\n\n`;\n\nexports[`export_default_class_declaration.js 1`] = `\nexport default class Foo {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default class Foo {}\n\n`;\n\nexports[`export_default_class_declaration.js 2`] = `\nexport default class Foo {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default class Foo {}\n\n`;\n\nexports[`export_default_class_expression.js 1`] = `\nexport default (class foobar {})\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default (class foobar {});\n\n`;\n\nexports[`export_default_class_expression.js 2`] = `\nexport default (class foobar {})\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default (class foobar {});\n\n`;\n\nexports[`export_default_function_declaration.js 1`] = `\nexport default function() {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default function() {}\n\n`;\n\nexports[`export_default_function_declaration.js 2`] = `\nexport default function() {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default function() {}\n\n`;\n\nexports[`export_default_function_declaration_async.js 1`] = `\nexport default async function foo() {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default (async function foo() {});\n\n`;\n\nexports[`export_default_function_declaration_async.js 2`] = `\nexport default async function foo() {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default async function foo() {}\n\n`;\n\nexports[`export_default_function_declaration_named.js 1`] = `\nexport default function f(){}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default function f() {}\n\n`;\n\nexports[`export_default_function_declaration_named.js 2`] = `\nexport default function f(){}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default function f() {}\n\n`;\n\nexports[`export_default_function_expression.js 1`] = `\nexport default (function() {});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default (function() {});\n\n`;\n\nexports[`export_default_function_expression.js 2`] = `\nexport default (function() {});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default (function() {});\n\n`;\n\nexports[`export_default_function_expression_named.js 1`] = `\nexport default (function f(){})\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default (function f() {});\n\n`;\n\nexports[`export_default_function_expression_named.js 2`] = `\nexport default (function f(){})\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default (function f() {});\n\n`;\n\nexports[`export_default_new_expression.js 1`] = `\nexport default new Foo();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default new Foo();\n\n`;\n\nexports[`export_default_new_expression.js 2`] = `\nexport default new Foo();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default new Foo();\n\n`;\n"
  },
  {
    "path": "tests/es6modules/export_default_arrow_expression.js",
    "content": "export default () => {};\n"
  },
  {
    "path": "tests/es6modules/export_default_call_expression.js",
    "content": "export default foo()\n"
  },
  {
    "path": "tests/es6modules/export_default_class_declaration.js",
    "content": "export default class Foo {}\n"
  },
  {
    "path": "tests/es6modules/export_default_class_expression.js",
    "content": "export default (class foobar {})\n"
  },
  {
    "path": "tests/es6modules/export_default_function_declaration.js",
    "content": "export default function() {}\n"
  },
  {
    "path": "tests/es6modules/export_default_function_declaration_async.js",
    "content": "export default async function foo() {}\n"
  },
  {
    "path": "tests/es6modules/export_default_function_declaration_named.js",
    "content": "export default function f(){}\n"
  },
  {
    "path": "tests/es6modules/export_default_function_expression.js",
    "content": "export default (function() {});\n"
  },
  {
    "path": "tests/es6modules/export_default_function_expression_named.js",
    "content": "export default (function f(){})\n"
  },
  {
    "path": "tests/es6modules/export_default_new_expression.js",
    "content": "export default new Foo();\n"
  },
  {
    "path": "tests/es6modules/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n// FIXME export_default_function_declaration_async.js flow != babylon output\nrun_spec(__dirname, { parser: \"babylon\" }, [\"typescript\"]);\n"
  },
  {
    "path": "tests/exact_object/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\ntype Props = {||};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype Props = {||};\n\n`;\n"
  },
  {
    "path": "tests/exact_object/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/exact_object/test.js",
    "content": "type Props = {||};\n"
  },
  {
    "path": "tests/export/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`bracket.js 1`] = `\nexport {\n  runTaskForChanged,\n  description,\n  someOtherLabel,\n  thatMakes,\n  itGo,\n  multiLine,\n  andMore,\n  soWeCanGetItTo80Columns\n};\nexport {fitsIn, oneLine};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport {\n  runTaskForChanged,\n  description,\n  someOtherLabel,\n  thatMakes,\n  itGo,\n  multiLine,\n  andMore,\n  soWeCanGetItTo80Columns\n};\nexport { fitsIn, oneLine };\n\n`;\n\nexports[`bracket.js 2`] = `\nexport {\n  runTaskForChanged,\n  description,\n  someOtherLabel,\n  thatMakes,\n  itGo,\n  multiLine,\n  andMore,\n  soWeCanGetItTo80Columns\n};\nexport {fitsIn, oneLine};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport {\n  runTaskForChanged,\n  description,\n  someOtherLabel,\n  thatMakes,\n  itGo,\n  multiLine,\n  andMore,\n  soWeCanGetItTo80Columns\n};\nexport {fitsIn, oneLine};\n\n`;\n\nexports[`empty.js 1`] = `\nexport {};\nexport {} from \".\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport {};\nexport {} from \".\";\n\n`;\n\nexports[`empty.js 2`] = `\nexport {};\nexport {} from \".\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport {};\nexport {} from \".\";\n\n`;\n"
  },
  {
    "path": "tests/export/bracket.js",
    "content": "export {\n  runTaskForChanged,\n  description,\n  someOtherLabel,\n  thatMakes,\n  itGo,\n  multiLine,\n  andMore,\n  soWeCanGetItTo80Columns\n};\nexport {fitsIn, oneLine};\n"
  },
  {
    "path": "tests/export/empty.js",
    "content": "export {};\nexport {} from \".\";\n"
  },
  {
    "path": "tests/export/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\nrun_spec(__dirname, { bracesSpacing: false }, [\"typescript\"]);\n"
  },
  {
    "path": "tests/export_default/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`body.js 1`] = `\nexport default (class {}[1] = 1);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default (class {}[1] = 1);\n\n`;\n"
  },
  {
    "path": "tests/export_default/body.js",
    "content": "export default (class {}[1] = 1);\n"
  },
  {
    "path": "tests/export_default/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/export_extension/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`export.js 1`] = `\nexport * as ns from 'mod';\nexport v from 'mod';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport * as ns from \"mod\";\nexport v from \"mod\";\n\n`;\n"
  },
  {
    "path": "tests/export_extension/export.js",
    "content": "export * as ns from 'mod';\nexport v from 'mod';\n"
  },
  {
    "path": "tests/export_extension/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"babylon\" });\n"
  },
  {
    "path": "tests/exports/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nexport { value1, value2 as value2_renamed, value3, value4 as value4_renamed, value5 } from \"exports\";\n\nexport a,{b} from \"./baz\";\n\nexport * as ns from \"mod\";\n\nexport * as foo,{bar} from \"./baz\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport {\n  value1,\n  value2 as value2_renamed,\n  value3,\n  value4 as value4_renamed,\n  value5\n} from \"exports\";\n\nexport a, { b } from \"./baz\";\n\nexport * as ns from \"mod\";\n\nexport * as foo, { bar } from \"./baz\";\n\n`;\n"
  },
  {
    "path": "tests/exports/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"babylon\" });\n"
  },
  {
    "path": "tests/exports/test.js",
    "content": "export { value1, value2 as value2_renamed, value3, value4 as value4_renamed, value5 } from \"exports\";\n\nexport a,{b} from \"./baz\";\n\nexport * as ns from \"mod\";\n\nexport * as foo,{bar} from \"./baz\";\n"
  },
  {
    "path": "tests/expression_statement/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`no_regression.js 1`] = `\n// Ensure no regression.\n\"use strict\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Ensure no regression.\n\"use strict\";\n\n`;\n\nexports[`use_strict.js 1`] = `\n// Parentheses around expression statement should be preserved in this case.\n(\"use strict\");\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Parentheses around expression statement should be preserved in this case.\n(\"use strict\");\n\n`;\n"
  },
  {
    "path": "tests/expression_statement/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"babylon\" }, [\"flow\", \"typescript\"]);\n"
  },
  {
    "path": "tests/expression_statement/no_regression.js",
    "content": "// Ensure no regression.\n\"use strict\";\n"
  },
  {
    "path": "tests/expression_statement/use_strict.js",
    "content": "// Parentheses around expression statement should be preserved in this case.\n(\"use strict\");\n"
  },
  {
    "path": "tests/first_argument_expansion/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nsetTimeout(function() {\n  thing();\n}, 500);\n\n[\"a\",\"b\",\"c\"].reduce(function(item, thing) {\n  return thing + \" \" + item;\n}, \"letters:\")\n\nfunc(() => {\n  thing();\n}, identifier);\n\nfunc(function() {\n  thing();\n}, this.props.timeout * 1000);\n\nfunc((that) => {\n  thing();\n}, this.props.getTimeout());\n\nfunc(() => {\n  thing();\n}, true);\n\nfunc(() => {\n  thing();\n}, null);\n\nfunc(() => {\n  thing();\n}, undefined);\n\nfunc(() => {\n  thing();\n}, /regex.*?/);\n\ncompose((a) => {\n  return a.thing;\n}, b => b * b);\n\nsomthing.reduce(function(item, thing) {\n  return thing.blah =  item;\n}, {})\n\nsomthing.reduce(function(item, thing) {\n  return thing.push(item);\n}, [])\n\nreallyLongLongLongLongLongLongLongLongLongLongLongLongLongLongMethod((f, g, h) => {\n  return f.pop();\n}, true);\n\n// Don't do the rest of these\n\nfunc(function() {\n  thing();\n}, true, false);\n\nfunc(() => {\n  thing();\n}, {yes: true, cats: 5});\n\ncompose((a) => {\n  return a.thing;\n}, b => {\n  return b + \"\";\n});\n\ncompose((a) => {\n  return a.thing;\n}, b => [1, 2, 3, 4, 5]);\n\nrenderThing(a =>\n  <div>Content. So much to say. Oh my. Are we done yet?</div>\n,args);\n\nsetTimeout(\n  // Something\n  function() {\n    thing();\n  },\n  500\n);\n\nsetTimeout(/* blip */ function() {\n  thing();\n}, 500);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nsetTimeout(function() {\n  thing();\n}, 500);\n\n[\"a\", \"b\", \"c\"].reduce(function(item, thing) {\n  return thing + \" \" + item;\n}, \"letters:\");\n\nfunc(() => {\n  thing();\n}, identifier);\n\nfunc(function() {\n  thing();\n}, this.props.timeout * 1000);\n\nfunc(that => {\n  thing();\n}, this.props.getTimeout());\n\nfunc(() => {\n  thing();\n}, true);\n\nfunc(() => {\n  thing();\n}, null);\n\nfunc(() => {\n  thing();\n}, undefined);\n\nfunc(() => {\n  thing();\n}, /regex.*?/);\n\ncompose(a => {\n  return a.thing;\n}, b => b * b);\n\nsomthing.reduce(function(item, thing) {\n  return (thing.blah = item);\n}, {});\n\nsomthing.reduce(function(item, thing) {\n  return thing.push(item);\n}, []);\n\nreallyLongLongLongLongLongLongLongLongLongLongLongLongLongLongMethod(\n  (f, g, h) => {\n    return f.pop();\n  },\n  true\n);\n\n// Don't do the rest of these\n\nfunc(\n  function() {\n    thing();\n  },\n  true,\n  false\n);\n\nfunc(\n  () => {\n    thing();\n  },\n  { yes: true, cats: 5 }\n);\n\ncompose(\n  a => {\n    return a.thing;\n  },\n  b => {\n    return b + \"\";\n  }\n);\n\ncompose(\n  a => {\n    return a.thing;\n  },\n  b => [1, 2, 3, 4, 5]\n);\n\nrenderThing(\n  a => <div>Content. So much to say. Oh my. Are we done yet?</div>,\n  args\n);\n\nsetTimeout(\n  // Something\n  function() {\n    thing();\n  },\n  500\n);\n\nsetTimeout(\n  /* blip */ function() {\n    thing();\n  },\n  500\n);\n\n`;\n"
  },
  {
    "path": "tests/first_argument_expansion/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/first_argument_expansion/test.js",
    "content": "setTimeout(function() {\n  thing();\n}, 500);\n\n[\"a\",\"b\",\"c\"].reduce(function(item, thing) {\n  return thing + \" \" + item;\n}, \"letters:\")\n\nfunc(() => {\n  thing();\n}, identifier);\n\nfunc(function() {\n  thing();\n}, this.props.timeout * 1000);\n\nfunc((that) => {\n  thing();\n}, this.props.getTimeout());\n\nfunc(() => {\n  thing();\n}, true);\n\nfunc(() => {\n  thing();\n}, null);\n\nfunc(() => {\n  thing();\n}, undefined);\n\nfunc(() => {\n  thing();\n}, /regex.*?/);\n\ncompose((a) => {\n  return a.thing;\n}, b => b * b);\n\nsomthing.reduce(function(item, thing) {\n  return thing.blah =  item;\n}, {})\n\nsomthing.reduce(function(item, thing) {\n  return thing.push(item);\n}, [])\n\nreallyLongLongLongLongLongLongLongLongLongLongLongLongLongLongMethod((f, g, h) => {\n  return f.pop();\n}, true);\n\n// Don't do the rest of these\n\nfunc(function() {\n  thing();\n}, true, false);\n\nfunc(() => {\n  thing();\n}, {yes: true, cats: 5});\n\ncompose((a) => {\n  return a.thing;\n}, b => {\n  return b + \"\";\n});\n\ncompose((a) => {\n  return a.thing;\n}, b => [1, 2, 3, 4, 5]);\n\nrenderThing(a =>\n  <div>Content. So much to say. Oh my. Are we done yet?</div>\n,args);\n\nsetTimeout(\n  // Something\n  function() {\n    thing();\n  },\n  500\n);\n\nsetTimeout(/* blip */ function() {\n  thing();\n}, 500);\n"
  },
  {
    "path": "tests/flow/abnormal/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`break-continue.js 1`] = `\nfunction foo() {\n    while(true) { break; }\n}\n\nfunction bar() {\n    L: do { continue L; } while(false)\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo() {\n  while (true) {\n    break;\n  }\n}\n\nfunction bar() {\n  L: do {\n    continue L;\n  } while (false);\n}\n\n`;\n\nexports[`return.js 1`] = `\nfunction bar(x:number) { }\nfunction foo() {\n    var x = null;\n    if (x == null) return;\n    bar(x);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction bar(x: number) {}\nfunction foo() {\n  var x = null;\n  if (x == null) return;\n  bar(x);\n}\n\n`;\n\nexports[`toplevel_throw.js 1`] = `\n// @flow\n\nthrow new Error('foo'); // no error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nthrow new Error(\"foo\"); // no error\n\n`;\n"
  },
  {
    "path": "tests/flow/abnormal/break-continue.js",
    "content": "function foo() {\n    while(true) { break; }\n}\n\nfunction bar() {\n    L: do { continue L; } while(false)\n}\n"
  },
  {
    "path": "tests/flow/abnormal/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/abnormal/return.js",
    "content": "function bar(x:number) { }\nfunction foo() {\n    var x = null;\n    if (x == null) return;\n    bar(x);\n}\n"
  },
  {
    "path": "tests/flow/abnormal/toplevel_throw.js",
    "content": "// @flow\n\nthrow new Error('foo'); // no error\n"
  },
  {
    "path": "tests/flow/annot/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`annot.js 1`] = `\nfunction foo(str:string, i:number):string {\n  return str;\n}\nvar bar: (str:number, i:number)=> string = foo;\n\nvar qux = function(str:string, i:number):number { return foo(str,i); }\n\nvar obj: {str:string; i:number; j:boolean} = {str: \"...\", i: \"...\", k: false};\n\nvar arr: Array<number> = [1,2,\"...\"];\n\n// array sugar\nvar array: number[] = [1,2,\"...\"];\n\nvar matrix: number[][] = [[1,2],[3,4]];\nvar matrix_parens: (number[])[] = matrix;\n\nvar nullable_array: ?number[] = null;\nvar nullable_array_parens: ?(number[]) = nullable_array;\n\nvar array_of_nullable: (?number)[] = [null, 3];\n\nvar array_of_tuple: [number, string][] = [[0, \"foo\"], [1, \"bar\"]];\nvar array_of_tuple_parens: ([number, string])[] = array_of_tuple;\n\ntype ObjType = { 'bar-foo': string; 'foo-bar': number; };\nvar test_obj: ObjType = { 'bar-foo': '23' };\n\n// param type annos are strict UBs like var type annos\nfunction param_anno(n:number):void {\n  n = \"hey\"; // error\n}\n\n// another error on param UB, more typical of www (mis)use-cases\n// this one cribbed from API.atlas.js\nfunction param_anno2(\n    batchRequests: Array<{method: string; path: string; params: ?Object}>,\n  ): void {\n\n    // error below, since we're assigning elements to batchRequests\n    // which lack a path property.\n    // just assign result to new var instead of reassigning to param.\n\n    // Transform the requests to the format the Graph API expects.\n    batchRequests = batchRequests.map((request) => {\n      return {\n        method: request.method,\n        params: request.params,\n        relative_url: request.path,\n      };\n    });\n    // ...\n  }\n\nvar toz : null = 3;\n\nvar zer : null = null;\n\nfunction foobar(n : ?number) : number | null | void { return n; }\nfunction barfoo(n : number | null | void) : ?number { return n; }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo(str: string, i: number): string {\n  return str;\n}\nvar bar: (str: number, i: number) => string = foo;\n\nvar qux = function(str: string, i: number): number {\n  return foo(str, i);\n};\n\nvar obj: { str: string, i: number, j: boolean } = {\n  str: \"...\",\n  i: \"...\",\n  k: false\n};\n\nvar arr: Array<number> = [1, 2, \"...\"];\n\n// array sugar\nvar array: number[] = [1, 2, \"...\"];\n\nvar matrix: number[][] = [[1, 2], [3, 4]];\nvar matrix_parens: number[][] = matrix;\n\nvar nullable_array: ?(number[]) = null;\nvar nullable_array_parens: ?(number[]) = nullable_array;\n\nvar array_of_nullable: (?number)[] = [null, 3];\n\nvar array_of_tuple: [number, string][] = [[0, \"foo\"], [1, \"bar\"]];\nvar array_of_tuple_parens: [number, string][] = array_of_tuple;\n\ntype ObjType = { \"bar-foo\": string, \"foo-bar\": number };\nvar test_obj: ObjType = { \"bar-foo\": \"23\" };\n\n// param type annos are strict UBs like var type annos\nfunction param_anno(n: number): void {\n  n = \"hey\"; // error\n}\n\n// another error on param UB, more typical of www (mis)use-cases\n// this one cribbed from API.atlas.js\nfunction param_anno2(\n  batchRequests: Array<{ method: string, path: string, params: ?Object }>\n): void {\n  // error below, since we're assigning elements to batchRequests\n  // which lack a path property.\n  // just assign result to new var instead of reassigning to param.\n\n  // Transform the requests to the format the Graph API expects.\n  batchRequests = batchRequests.map(request => {\n    return {\n      method: request.method,\n      params: request.params,\n      relative_url: request.path\n    };\n  });\n  // ...\n}\n\nvar toz: null = 3;\n\nvar zer: null = null;\n\nfunction foobar(n: ?number): number | null | void {\n  return n;\n}\nfunction barfoo(n: number | null | void): ?number {\n  return n;\n}\n\n`;\n\nexports[`forward_ref.js 1`] = `\nlet myClassInstance: MyClass = null; // forward ref ok, null ~> class error\n\nfunction bar(): MyClass {\n  return null; // forward ref ok, null ~> class error\n}\n\nclass MyClass { } // looked up above\n\nfunction foo() {\n  let myClassInstance: MyClass = mk(); // ok (no confusion across scopes)\n  function mk() { return new MyClass(); }\n\n  class MyClass { } // looked up above\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nlet myClassInstance: MyClass = null; // forward ref ok, null ~> class error\n\nfunction bar(): MyClass {\n  return null; // forward ref ok, null ~> class error\n}\n\nclass MyClass {} // looked up above\n\nfunction foo() {\n  let myClassInstance: MyClass = mk(); // ok (no confusion across scopes)\n  function mk() {\n    return new MyClass();\n  }\n\n  class MyClass {} // looked up above\n}\n\n`;\n\nexports[`issue-530.js 1`] = `\nfunction foo(...args: any) { }\n\nmodule.exports = foo;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo(...args: any) {}\n\nmodule.exports = foo;\n\n`;\n\nexports[`leak.js 1`] = `\n/** @flow */\n\n/* This test documents an example we ran into of a type annotation leaking.\n *\n * When foo() calls bar(), we should make sure the type of x matches the type\n * annotation for y and stop. We should type the body of bar() with the type\n * annotation of y.\n *\n * However, the leaky type annotation meant that we were flowing x's type to y\n * and type checking the body of bar() using the stricter dictionary type,\n * leading to an error.\n */\n\ntype MyObj = Object;\n\nfunction foo(x: {[key: string]: mixed}) {\n  bar(x);\n}\n\nfunction bar(y: MyObj): string {\n  return y.foo;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/** @flow */\n\n/* This test documents an example we ran into of a type annotation leaking.\n *\n * When foo() calls bar(), we should make sure the type of x matches the type\n * annotation for y and stop. We should type the body of bar() with the type\n * annotation of y.\n *\n * However, the leaky type annotation meant that we were flowing x's type to y\n * and type checking the body of bar() using the stricter dictionary type,\n * leading to an error.\n */\n\ntype MyObj = Object;\n\nfunction foo(x: { [key: string]: mixed }) {\n  bar(x);\n}\n\nfunction bar(y: MyObj): string {\n  return y.foo;\n}\n\n`;\n\nexports[`other.js 1`] = `\nclass C { }\nmodule.exports = (C: any);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {}\nmodule.exports = (C: any);\n\n`;\n\nexports[`scope.js 1`] = `\ntype Merge<T> = (a: T, b: T) => T;\n\n// hypothetical immutable map\ndeclare class Map<K,V> {\n  (): Map<K,V>;\n  insertWith(fn: Merge<V>, k: K, v: V): Map<K,V>;\n}\n\ndeclare function foldr<A,B>(fn: (a: A, b: B) => B, b: B, as: A[]): B;\n\nfunction insertMany<K,V>(merge: Merge<V>, vs: [K,V][], m: Map<K,V>): Map<K,V> {\n  function f([k,v]: [K,V], m: Map<K,V>): Map<K,V> {\n    return m.insertWith(merge, k, v)\n  }\n  return foldr(f, m, vs)\n}\n\nclass Foo<A> {\n  bar<B>() {\n    return function<C>(a: A, b: B, c: C): void {\n      ([a,b,c] : [A,B,C]);\n    }\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype Merge<T> = (a: T, b: T) => T;\n\n// hypothetical immutable map\ndeclare class Map<K, V> {\n  (): Map<K, V>,\n  insertWith(fn: Merge<V>, k: K, v: V): Map<K, V>\n}\n\ndeclare function foldr<A, B>(fn: (a: A, b: B) => B, b: B, as: A[]): B;\n\nfunction insertMany<K, V>(\n  merge: Merge<V>,\n  vs: [K, V][],\n  m: Map<K, V>\n): Map<K, V> {\n  function f([k, v]: [K, V], m: Map<K, V>): Map<K, V> {\n    return m.insertWith(merge, k, v);\n  }\n  return foldr(f, m, vs);\n}\n\nclass Foo<A> {\n  bar<B>() {\n    return function<C>(a: A, b: B, c: C): void {\n      ([a, b, c]: [A, B, C]);\n    };\n  }\n}\n\n`;\n\nexports[`test.js 1`] = `\nvar C = require('./other');\n((0: C): string);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar C = require(\"./other\");\n((0: C): string);\n\n`;\n"
  },
  {
    "path": "tests/flow/annot/annot.js",
    "content": "function foo(str:string, i:number):string {\n  return str;\n}\nvar bar: (str:number, i:number)=> string = foo;\n\nvar qux = function(str:string, i:number):number { return foo(str,i); }\n\nvar obj: {str:string; i:number; j:boolean} = {str: \"...\", i: \"...\", k: false};\n\nvar arr: Array<number> = [1,2,\"...\"];\n\n// array sugar\nvar array: number[] = [1,2,\"...\"];\n\nvar matrix: number[][] = [[1,2],[3,4]];\nvar matrix_parens: (number[])[] = matrix;\n\nvar nullable_array: ?number[] = null;\nvar nullable_array_parens: ?(number[]) = nullable_array;\n\nvar array_of_nullable: (?number)[] = [null, 3];\n\nvar array_of_tuple: [number, string][] = [[0, \"foo\"], [1, \"bar\"]];\nvar array_of_tuple_parens: ([number, string])[] = array_of_tuple;\n\ntype ObjType = { 'bar-foo': string; 'foo-bar': number; };\nvar test_obj: ObjType = { 'bar-foo': '23' };\n\n// param type annos are strict UBs like var type annos\nfunction param_anno(n:number):void {\n  n = \"hey\"; // error\n}\n\n// another error on param UB, more typical of www (mis)use-cases\n// this one cribbed from API.atlas.js\nfunction param_anno2(\n    batchRequests: Array<{method: string; path: string; params: ?Object}>,\n  ): void {\n\n    // error below, since we're assigning elements to batchRequests\n    // which lack a path property.\n    // just assign result to new var instead of reassigning to param.\n\n    // Transform the requests to the format the Graph API expects.\n    batchRequests = batchRequests.map((request) => {\n      return {\n        method: request.method,\n        params: request.params,\n        relative_url: request.path,\n      };\n    });\n    // ...\n  }\n\nvar toz : null = 3;\n\nvar zer : null = null;\n\nfunction foobar(n : ?number) : number | null | void { return n; }\nfunction barfoo(n : number | null | void) : ?number { return n; }\n"
  },
  {
    "path": "tests/flow/annot/any/A.js",
    "content": "type T = any;\n\nexport default class {\n  p: T;\n\n  constructor() {\n    this.p = 0;\n  }\n}\n"
  },
  {
    "path": "tests/flow/annot/any/B.js",
    "content": "import A from \"./A\"\n\nclass B extends A {\n  p: string; // OK, string ~> any\n}\n"
  },
  {
    "path": "tests/flow/annot/any/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\ntype T = any;\n\nexport default class {\n  p: T;\n\n  constructor() {\n    this.p = 0;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype T = any;\n\nexport default class {\n  p: T;\n\n  constructor() {\n    this.p = 0;\n  }\n}\n\n`;\n\nexports[`B.js 1`] = `\nimport A from \"./A\"\n\nclass B extends A {\n  p: string; // OK, string ~> any\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport A from \"./A\";\n\nclass B extends A {\n  p: string; // OK, string ~> any\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/annot/any/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/annot/forward_ref.js",
    "content": "let myClassInstance: MyClass = null; // forward ref ok, null ~> class error\n\nfunction bar(): MyClass {\n  return null; // forward ref ok, null ~> class error\n}\n\nclass MyClass { } // looked up above\n\nfunction foo() {\n  let myClassInstance: MyClass = mk(); // ok (no confusion across scopes)\n  function mk() { return new MyClass(); }\n\n  class MyClass { } // looked up above\n}\n"
  },
  {
    "path": "tests/flow/annot/issue-530.js",
    "content": "function foo(...args: any) { }\n\nmodule.exports = foo;\n"
  },
  {
    "path": "tests/flow/annot/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/annot/leak.js",
    "content": "/** @flow */\n\n/* This test documents an example we ran into of a type annotation leaking.\n *\n * When foo() calls bar(), we should make sure the type of x matches the type\n * annotation for y and stop. We should type the body of bar() with the type\n * annotation of y.\n *\n * However, the leaky type annotation meant that we were flowing x's type to y\n * and type checking the body of bar() using the stricter dictionary type,\n * leading to an error.\n */\n\ntype MyObj = Object;\n\nfunction foo(x: {[key: string]: mixed}) {\n  bar(x);\n}\n\nfunction bar(y: MyObj): string {\n  return y.foo;\n}\n"
  },
  {
    "path": "tests/flow/annot/other.js",
    "content": "class C { }\nmodule.exports = (C: any);\n"
  },
  {
    "path": "tests/flow/annot/scope.js",
    "content": "type Merge<T> = (a: T, b: T) => T;\n\n// hypothetical immutable map\ndeclare class Map<K,V> {\n  (): Map<K,V>;\n  insertWith(fn: Merge<V>, k: K, v: V): Map<K,V>;\n}\n\ndeclare function foldr<A,B>(fn: (a: A, b: B) => B, b: B, as: A[]): B;\n\nfunction insertMany<K,V>(merge: Merge<V>, vs: [K,V][], m: Map<K,V>): Map<K,V> {\n  function f([k,v]: [K,V], m: Map<K,V>): Map<K,V> {\n    return m.insertWith(merge, k, v)\n  }\n  return foldr(f, m, vs)\n}\n\nclass Foo<A> {\n  bar<B>() {\n    return function<C>(a: A, b: B, c: C): void {\n      ([a,b,c] : [A,B,C]);\n    }\n  }\n}\n"
  },
  {
    "path": "tests/flow/annot/test.js",
    "content": "var C = require('./other');\n((0: C): string);\n"
  },
  {
    "path": "tests/flow/annot2/A.js",
    "content": "/**\n * @providesModule A\n * @flow\n */\n\nimport type T from \"T\";\n\nexport default class {\n  p: T;\n\n  constructor() {\n    this.p = 0;\n  }\n}\n"
  },
  {
    "path": "tests/flow/annot2/B.js",
    "content": "/**\n * @flow\n */\n\nimport A from \"A\"\n\nclass B extends A {\n  p: string; // OK, string ~> any\n}\n"
  },
  {
    "path": "tests/flow/annot2/T.js",
    "content": "/**\n * @providesModule T\n */\n"
  },
  {
    "path": "tests/flow/annot2/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\n/**\n * @providesModule A\n * @flow\n */\n\nimport type T from \"T\";\n\nexport default class {\n  p: T;\n\n  constructor() {\n    this.p = 0;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule A\n * @flow\n */\n\nimport type T from \"T\";\n\nexport default class {\n  p: T;\n\n  constructor() {\n    this.p = 0;\n  }\n}\n\n`;\n\nexports[`B.js 1`] = `\n/**\n * @flow\n */\n\nimport A from \"A\"\n\nclass B extends A {\n  p: string; // OK, string ~> any\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nimport A from \"A\";\n\nclass B extends A {\n  p: string; // OK, string ~> any\n}\n\n`;\n\nexports[`T.js 1`] = `\n/**\n * @providesModule T\n */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule T\n */\n\n`;\n"
  },
  {
    "path": "tests/flow/annot2/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/any/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`any.js 1`] = `\n// @flow\n\nfunction foo(x:any):any { return x; }\nfunction bar(x:any):mixed { return x; }\nfunction qux(x:mixed):any { return x; }\n\nvar x:string = foo(0);\nvar y:string = bar(0);\nvar z:string = qux(0);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nfunction foo(x: any): any {\n  return x;\n}\nfunction bar(x: any): mixed {\n  return x;\n}\nfunction qux(x: mixed): any {\n  return x;\n}\n\nvar x: string = foo(0);\nvar y: string = bar(0);\nvar z: string = qux(0);\n\n`;\n\nexports[`anyexportflowfile.js 1`] = `\n// @flow\n\nmodule.exports = ((x: any) => x: any);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nmodule.exports = ((x: any) => x: any);\n\n`;\n\nexports[`flowfixme.js 1`] = `\n/*\n  FlowFixMe is a synonym for any, used by the Flow team to\n  signal a needed mod to JS devs.\n\n  @flow\n */\n\n// no param\nfunction foo(x:$FlowFixMe):$FlowFixMe { return x; }\nfunction bar(x:$FlowFixMe):mixed { return x; }\n// param (info only)\nfunction qux(x:$FlowFixMe<number>):$FlowFixMe<number> { return x; }\n// ...params are still checked. unknown type\nfunction baz(x:$FlowFixMe<nnumber>): $FlowFixMe<number> { return x; }\n\nvar x:string = foo(0);\nvar y:string = bar(0);\nvar z:string = qux(0);\nvar w:string = baz(0);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/*\n  FlowFixMe is a synonym for any, used by the Flow team to\n  signal a needed mod to JS devs.\n\n  @flow\n */\n\n// no param\nfunction foo(x: $FlowFixMe): $FlowFixMe {\n  return x;\n}\nfunction bar(x: $FlowFixMe): mixed {\n  return x;\n}\n// param (info only)\nfunction qux(x: $FlowFixMe<number>): $FlowFixMe<number> {\n  return x;\n}\n// ...params are still checked. unknown type\nfunction baz(x: $FlowFixMe<nnumber>): $FlowFixMe<number> {\n  return x;\n}\n\nvar x: string = foo(0);\nvar y: string = bar(0);\nvar z: string = qux(0);\nvar w: string = baz(0);\n\n`;\n\nexports[`flowissue.js 1`] = `\n/*\n  $FlowIssue is a synonym for any, used by JS devs to signal\n  a potential typechecker bug to the Flow team.\n\n  @flow\n */\n\n// no param\nfunction foo(x:$FlowIssue):$FlowIssue { return x; }\nfunction bar(x:$FlowIssue):mixed { return x; }\n// param (info only)\nfunction qux(x:$FlowIssue<number>):$FlowIssue<number> { return x; }\n// ...params are still checked. unknown type\nfunction baz(x:$FlowIssue<nnumber>): $FlowIssue<number> { return x; }\n\nvar x:string = foo(0);\nvar y:string = bar(0);\nvar z:string = qux(0);\nvar w:string = baz(0);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/*\n  $FlowIssue is a synonym for any, used by JS devs to signal\n  a potential typechecker bug to the Flow team.\n\n  @flow\n */\n\n// no param\nfunction foo(x: $FlowIssue): $FlowIssue {\n  return x;\n}\nfunction bar(x: $FlowIssue): mixed {\n  return x;\n}\n// param (info only)\nfunction qux(x: $FlowIssue<number>): $FlowIssue<number> {\n  return x;\n}\n// ...params are still checked. unknown type\nfunction baz(x: $FlowIssue<nnumber>): $FlowIssue<number> {\n  return x;\n}\n\nvar x: string = foo(0);\nvar y: string = bar(0);\nvar z: string = qux(0);\nvar w: string = baz(0);\n\n`;\n\nexports[`nonflowfile.js 1`] = `\n// @noflow\n\nmodule.exports = (x) => x;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\nmodule.exports = x => x;\n\n`;\n\nexports[`propagate.js 1`] = `\n// @flow\n\ndeclare class C {\n  bar(n1: number, n2: number): number;\n  bar(s1: string, s2: string): string;\n}\n\nfunction foo(c: C, x: any): string {\n  let y = x.y;\n  return c.bar(0, y); // should be able to select first case and error\n}\n\nvar any_fun1 = require('./nonflowfile');\nfunction bar1(x: mixed) {\n  if (any_fun1(x)) {\n    (x: boolean);\n  }\n}\n\nvar any_fun2 = require('./anyexportflowfile');\nfunction bar2(x: mixed) {\n  if (any_fun2(x)) {\n    (x: boolean);\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ndeclare class C {\n  bar(n1: number, n2: number): number,\n  bar(s1: string, s2: string): string\n}\n\nfunction foo(c: C, x: any): string {\n  let y = x.y;\n  return c.bar(0, y); // should be able to select first case and error\n}\n\nvar any_fun1 = require(\"./nonflowfile\");\nfunction bar1(x: mixed) {\n  if (any_fun1(x)) {\n    (x: boolean);\n  }\n}\n\nvar any_fun2 = require(\"./anyexportflowfile\");\nfunction bar2(x: mixed) {\n  if (any_fun2(x)) {\n    (x: boolean);\n  }\n}\n\n`;\n\nexports[`reach.js 1`] = `\n/**\n * like class and function values, any-typed values may be used in\n * type annotations. Here we test propagation of any through the\n * annotation - without it, the body of the if will be unreachable \n */\n\ntype AsyncRequest = any;\n\nfunction foo(o: ?AsyncRequest) {\n  if (o) {\n    var n: number = o;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * like class and function values, any-typed values may be used in\n * type annotations. Here we test propagation of any through the\n * annotation - without it, the body of the if will be unreachable \n */\n\ntype AsyncRequest = any;\n\nfunction foo(o: ?AsyncRequest) {\n  if (o) {\n    var n: number = o;\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/any/any.js",
    "content": "// @flow\n\nfunction foo(x:any):any { return x; }\nfunction bar(x:any):mixed { return x; }\nfunction qux(x:mixed):any { return x; }\n\nvar x:string = foo(0);\nvar y:string = bar(0);\nvar z:string = qux(0);\n"
  },
  {
    "path": "tests/flow/any/anyexportflowfile.js",
    "content": "// @flow\n\nmodule.exports = ((x: any) => x: any);\n"
  },
  {
    "path": "tests/flow/any/flowfixme.js",
    "content": "/*\n  FlowFixMe is a synonym for any, used by the Flow team to\n  signal a needed mod to JS devs.\n\n  @flow\n */\n\n// no param\nfunction foo(x:$FlowFixMe):$FlowFixMe { return x; }\nfunction bar(x:$FlowFixMe):mixed { return x; }\n// param (info only)\nfunction qux(x:$FlowFixMe<number>):$FlowFixMe<number> { return x; }\n// ...params are still checked. unknown type\nfunction baz(x:$FlowFixMe<nnumber>): $FlowFixMe<number> { return x; }\n\nvar x:string = foo(0);\nvar y:string = bar(0);\nvar z:string = qux(0);\nvar w:string = baz(0);\n"
  },
  {
    "path": "tests/flow/any/flowissue.js",
    "content": "/*\n  $FlowIssue is a synonym for any, used by JS devs to signal\n  a potential typechecker bug to the Flow team.\n\n  @flow\n */\n\n// no param\nfunction foo(x:$FlowIssue):$FlowIssue { return x; }\nfunction bar(x:$FlowIssue):mixed { return x; }\n// param (info only)\nfunction qux(x:$FlowIssue<number>):$FlowIssue<number> { return x; }\n// ...params are still checked. unknown type\nfunction baz(x:$FlowIssue<nnumber>): $FlowIssue<number> { return x; }\n\nvar x:string = foo(0);\nvar y:string = bar(0);\nvar z:string = qux(0);\nvar w:string = baz(0);\n"
  },
  {
    "path": "tests/flow/any/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/any/nonflowfile.js",
    "content": "// @noflow\n\nmodule.exports = (x) => x;\n"
  },
  {
    "path": "tests/flow/any/propagate.js",
    "content": "// @flow\n\ndeclare class C {\n  bar(n1: number, n2: number): number;\n  bar(s1: string, s2: string): string;\n}\n\nfunction foo(c: C, x: any): string {\n  let y = x.y;\n  return c.bar(0, y); // should be able to select first case and error\n}\n\nvar any_fun1 = require('./nonflowfile');\nfunction bar1(x: mixed) {\n  if (any_fun1(x)) {\n    (x: boolean);\n  }\n}\n\nvar any_fun2 = require('./anyexportflowfile');\nfunction bar2(x: mixed) {\n  if (any_fun2(x)) {\n    (x: boolean);\n  }\n}\n"
  },
  {
    "path": "tests/flow/any/reach.js",
    "content": "/**\n * like class and function values, any-typed values may be used in\n * type annotations. Here we test propagation of any through the\n * annotation - without it, the body of the if will be unreachable \n */\n\ntype AsyncRequest = any;\n\nfunction foo(o: ?AsyncRequest) {\n  if (o) {\n    var n: number = o;\n  }\n}\n"
  },
  {
    "path": "tests/flow/arith/Arith.js",
    "content": "\n/* @providesModule Arith */\n\nfunction num(x:number) { }\n\nfunction str(x:string) { }\n\nfunction foo() {\n  var x = 0;\n  var y = \"...\";\n  var z = {};\n  num(x+x);\n  num(x+y); // error\n  str(x+y);\n  str(x+x); // error\n  str(z+y); // error\n}\n\n// test MaybeT(NumT)\nfunction bar0(x: ?number, y: number) {\n  num(x + y);\n}\nfunction bar1(x: number, y: ?number) {\n  num(x + y);\n}\n\n// test OptionalT(NumT)\nfunction bar2(x?: number, y: number) {\n  num(x + y);\n}\nfunction bar3(x: number, y?: number) {\n  num(x + y);\n}\n\n// test OptionalT(MaybeT(NumT))\nfunction bar4(x?: ?number, y: number) {\n  num(x + y);\n}\nfunction bar5(x: number, y?: ?number) {\n  num(x + y);\n}\n\nnum(null + null); // === 0\nnum(undefined + undefined); // === NaN\n\nnum(null + 1); // === 1\nnum(1 + null); // === 1\nnum(undefined + 1); // === NaN\nnum(1 + undefined); // === NaN\n\nnum(null + true); // === 1\nnum(true + null); // === 1\nnum(undefined + true); // === NaN\nnum(true + undefined); // === NaN\n\nstr(\"foo\" + true); // error\nstr(true + \"foo\"); // error\nstr(\"foo\" + null); // error\nstr(null + \"foo\"); // error\nstr(\"foo\" + undefined); // error\nstr(undefined + \"foo\"); // error\n\nlet tests = [\n  function(x: mixed, y: mixed) {\n    (x + y); // error\n    (x + 0); // error\n    (0 + x); // error\n    (x + \"\"); // error\n    (\"\" + x); // error\n    (x + {}); // error\n    ({} + x); // error\n  },\n\n  // when one side is a string or number and the other is invalid, we\n  // assume you are expecting a string or number (respectively), rather than\n  // erroring twice saying number !~> string and obj !~> string.\n  function() {\n    ((1 + {}): number); // error: object !~> number\n    (({} + 1): number); // error: object !~> number\n    ((\"1\" + {}): string); // error: object !~> string\n    (({} + \"1\"): string); // error: object !~> string\n  },\n\n  function(x: any, y: number, z: string) {\n    (x + y: string); // ok\n    (y + x: string); // ok\n\n    (x + z: empty); // error, string ~> empty\n    (z + x: empty); // error, string ~> empty\n  },\n];\n"
  },
  {
    "path": "tests/flow/arith/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Arith.js 1`] = `\n\n/* @providesModule Arith */\n\nfunction num(x:number) { }\n\nfunction str(x:string) { }\n\nfunction foo() {\n  var x = 0;\n  var y = \"...\";\n  var z = {};\n  num(x+x);\n  num(x+y); // error\n  str(x+y);\n  str(x+x); // error\n  str(z+y); // error\n}\n\n// test MaybeT(NumT)\nfunction bar0(x: ?number, y: number) {\n  num(x + y);\n}\nfunction bar1(x: number, y: ?number) {\n  num(x + y);\n}\n\n// test OptionalT(NumT)\nfunction bar2(x?: number, y: number) {\n  num(x + y);\n}\nfunction bar3(x: number, y?: number) {\n  num(x + y);\n}\n\n// test OptionalT(MaybeT(NumT))\nfunction bar4(x?: ?number, y: number) {\n  num(x + y);\n}\nfunction bar5(x: number, y?: ?number) {\n  num(x + y);\n}\n\nnum(null + null); // === 0\nnum(undefined + undefined); // === NaN\n\nnum(null + 1); // === 1\nnum(1 + null); // === 1\nnum(undefined + 1); // === NaN\nnum(1 + undefined); // === NaN\n\nnum(null + true); // === 1\nnum(true + null); // === 1\nnum(undefined + true); // === NaN\nnum(true + undefined); // === NaN\n\nstr(\"foo\" + true); // error\nstr(true + \"foo\"); // error\nstr(\"foo\" + null); // error\nstr(null + \"foo\"); // error\nstr(\"foo\" + undefined); // error\nstr(undefined + \"foo\"); // error\n\nlet tests = [\n  function(x: mixed, y: mixed) {\n    (x + y); // error\n    (x + 0); // error\n    (0 + x); // error\n    (x + \"\"); // error\n    (\"\" + x); // error\n    (x + {}); // error\n    ({} + x); // error\n  },\n\n  // when one side is a string or number and the other is invalid, we\n  // assume you are expecting a string or number (respectively), rather than\n  // erroring twice saying number !~> string and obj !~> string.\n  function() {\n    ((1 + {}): number); // error: object !~> number\n    (({} + 1): number); // error: object !~> number\n    ((\"1\" + {}): string); // error: object !~> string\n    (({} + \"1\"): string); // error: object !~> string\n  },\n\n  function(x: any, y: number, z: string) {\n    (x + y: string); // ok\n    (y + x: string); // ok\n\n    (x + z: empty); // error, string ~> empty\n    (z + x: empty); // error, string ~> empty\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule Arith */\n\nfunction num(x: number) {}\n\nfunction str(x: string) {}\n\nfunction foo() {\n  var x = 0;\n  var y = \"...\";\n  var z = {};\n  num(x + x);\n  num(x + y); // error\n  str(x + y);\n  str(x + x); // error\n  str(z + y); // error\n}\n\n// test MaybeT(NumT)\nfunction bar0(x: ?number, y: number) {\n  num(x + y);\n}\nfunction bar1(x: number, y: ?number) {\n  num(x + y);\n}\n\n// test OptionalT(NumT)\nfunction bar2(x?: number, y: number) {\n  num(x + y);\n}\nfunction bar3(x: number, y?: number) {\n  num(x + y);\n}\n\n// test OptionalT(MaybeT(NumT))\nfunction bar4(x?: ?number, y: number) {\n  num(x + y);\n}\nfunction bar5(x: number, y?: ?number) {\n  num(x + y);\n}\n\nnum(null + null); // === 0\nnum(undefined + undefined); // === NaN\n\nnum(null + 1); // === 1\nnum(1 + null); // === 1\nnum(undefined + 1); // === NaN\nnum(1 + undefined); // === NaN\n\nnum(null + true); // === 1\nnum(true + null); // === 1\nnum(undefined + true); // === NaN\nnum(true + undefined); // === NaN\n\nstr(\"foo\" + true); // error\nstr(true + \"foo\"); // error\nstr(\"foo\" + null); // error\nstr(null + \"foo\"); // error\nstr(\"foo\" + undefined); // error\nstr(undefined + \"foo\"); // error\n\nlet tests = [\n  function(x: mixed, y: mixed) {\n    x + y; // error\n    x + 0; // error\n    0 + x; // error\n    x + \"\"; // error\n    \"\" + x; // error\n    x + {}; // error\n    ({} + x); // error\n  },\n\n  // when one side is a string or number and the other is invalid, we\n  // assume you are expecting a string or number (respectively), rather than\n  // erroring twice saying number !~> string and obj !~> string.\n  function() {\n    (1 + {}: number); // error: object !~> number\n    ({} + 1: number); // error: object !~> number\n    (\"1\" + {}: string); // error: object !~> string\n    ({} + \"1\": string); // error: object !~> string\n  },\n\n  function(x: any, y: number, z: string) {\n    (x + y: string); // ok\n    (y + x: string); // ok\n\n    (x + z: empty); // error, string ~> empty\n    (z + x: empty); // error, string ~> empty\n  }\n];\n\n`;\n\nexports[`exponent.js 1`] = `\n/* @flow */\n\nlet x: number = 2 ** 3;\nx **= 4;\n\nlet y: string = \"123\";\ny **= 2; // error\n\n1 + 2 ** 3 + 4;\n2 ** 2;\n(-2) ** 2;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nlet x: number = 2 ** 3;\nx **= 4;\n\nlet y: string = \"123\";\ny **= 2; // error\n\n1 + 2 ** 3 + 4;\n2 ** 2;\n(-2) ** 2;\n\n`;\n\nexports[`generic.js 1`] = `\n/* @flow */\n\nfunction f<A>(a: A): A { return a + a; } // error\nfunction f<A,B>(a: A, b: B): A {return a + b; } // error\nfunction f<A,B>(a: A, b: B): A {return b + a; } // error\nfunction f<A,B>(a: A, b: B): B {return a + b; } // error\nfunction f<A,B>(a: A, b: B): B {return b + a; } // error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction f<A>(a: A): A {\n  return a + a;\n} // error\nfunction f<A, B>(a: A, b: B): A {\n  return a + b;\n} // error\nfunction f<A, B>(a: A, b: B): A {\n  return b + a;\n} // error\nfunction f<A, B>(a: A, b: B): B {\n  return a + b;\n} // error\nfunction f<A, B>(a: A, b: B): B {\n  return b + a;\n} // error\n\n`;\n\nexports[`mult.js 1`] = `\n/* @flow */\n\nfunction num(x:number) { }\n\nnum(null * 1);\nnum(1 * null);\n\nlet x: number = 2 * 3;\nx *= 4;\n\nlet y: string = \"123\";\ny *= 2; // error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction num(x: number) {}\n\nnum(null * 1);\nnum(1 * null);\n\nlet x: number = 2 * 3;\nx *= 4;\n\nlet y: string = \"123\";\ny *= 2; // error\n\n`;\n\nexports[`relational.js 1`] = `\n/* @flow */\n\n(1 < 2);\n(1 < \"foo\"); // error\n(\"foo\" < 1); // error\n(\"foo\" < \"bar\");\n(1 < {foo: 1}); // error\n({foo: 1} < 1); // error\n({foo: 1} < {foo: 1}); // error\n(\"foo\" < {foo: 1}); // error\n({foo: 1} < \"foo\"); // error\n\nvar x = (null : ?number);\n(1 < x); // 2 errors: null !~> number; undefined !~> number\n(x < 1); // 2 errors: null !~> number; undefined !~> number\n\n(null < null); // error\n(undefined < null); // error\n(null < undefined); // error\n(undefined < undefined); // error\n(NaN < 1);\n(1 < NaN);\n(NaN < NaN);\n\nlet tests = [\n  function(x: any, y: number, z: string) {\n    (x > y);\n    (x > z);\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n1 < 2;\n1 < \"foo\"; // error\n\"foo\" < 1; // error\n\"foo\" < \"bar\";\n1 < { foo: 1 }; // error\n({ foo: 1 } < 1); // error\n({ foo: 1 } < { foo: 1 }); // error\n\"foo\" < { foo: 1 }; // error\n({ foo: 1 } < \"foo\"); // error\n\nvar x = (null: ?number);\n1 < x; // 2 errors: null !~> number; undefined !~> number\nx < 1; // 2 errors: null !~> number; undefined !~> number\n\nnull < null; // error\nundefined < null; // error\nnull < undefined; // error\nundefined < undefined; // error\nNaN < 1;\n1 < NaN;\nNaN < NaN;\n\nlet tests = [\n  function(x: any, y: number, z: string) {\n    x > y;\n    x > z;\n  }\n];\n\n`;\n"
  },
  {
    "path": "tests/flow/arith/exponent.js",
    "content": "/* @flow */\n\nlet x: number = 2 ** 3;\nx **= 4;\n\nlet y: string = \"123\";\ny **= 2; // error\n\n1 + 2 ** 3 + 4;\n2 ** 2;\n(-2) ** 2;\n"
  },
  {
    "path": "tests/flow/arith/generic.js",
    "content": "/* @flow */\n\nfunction f<A>(a: A): A { return a + a; } // error\nfunction f<A,B>(a: A, b: B): A {return a + b; } // error\nfunction f<A,B>(a: A, b: B): A {return b + a; } // error\nfunction f<A,B>(a: A, b: B): B {return a + b; } // error\nfunction f<A,B>(a: A, b: B): B {return b + a; } // error\n"
  },
  {
    "path": "tests/flow/arith/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/arith/mult.js",
    "content": "/* @flow */\n\nfunction num(x:number) { }\n\nnum(null * 1);\nnum(1 * null);\n\nlet x: number = 2 * 3;\nx *= 4;\n\nlet y: string = \"123\";\ny *= 2; // error\n"
  },
  {
    "path": "tests/flow/arith/relational.js",
    "content": "/* @flow */\n\n(1 < 2);\n(1 < \"foo\"); // error\n(\"foo\" < 1); // error\n(\"foo\" < \"bar\");\n(1 < {foo: 1}); // error\n({foo: 1} < 1); // error\n({foo: 1} < {foo: 1}); // error\n(\"foo\" < {foo: 1}); // error\n({foo: 1} < \"foo\"); // error\n\nvar x = (null : ?number);\n(1 < x); // 2 errors: null !~> number; undefined !~> number\n(x < 1); // 2 errors: null !~> number; undefined !~> number\n\n(null < null); // error\n(undefined < null); // error\n(null < undefined); // error\n(undefined < undefined); // error\n(NaN < 1);\n(1 < NaN);\n(NaN < NaN);\n\nlet tests = [\n  function(x: any, y: number, z: string) {\n    (x > y);\n    (x > z);\n  },\n];\n"
  },
  {
    "path": "tests/flow/array-filter/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n/* @flow */\n\nfunction filterOutVoids<T> (arr: Array<?T>): Array<T> {\n  return arr.filter(Boolean)\n}\n\nfunction filterOutSmall (arr: Array<?number>): Array<?number> {\n  return arr.filter(num => num && num > 10)\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction filterOutVoids<T>(arr: Array<?T>): Array<T> {\n  return arr.filter(Boolean);\n}\n\nfunction filterOutSmall(arr: Array<?number>): Array<?number> {\n  return arr.filter(num => num && num > 10);\n}\n\n`;\n\nexports[`test2.js 1`] = `\n/* @flow */\n\nfunction filterItems(items: Array<string|number>): Array<string|number> {\n  return items.map(item => {\n    if (typeof item === 'string') {\n      return item.length > 2 ? item : null;\n    } else {\n      return item*10;\n    }\n  }).filter(Boolean);\n}\n\nconst filteredItems = filterItems(['foo', 'b', 1, 2]);\n\nconsole.log(filteredItems);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction filterItems(items: Array<string | number>): Array<string | number> {\n  return items\n    .map(item => {\n      if (typeof item === \"string\") {\n        return item.length > 2 ? item : null;\n      } else {\n        return item * 10;\n      }\n    })\n    .filter(Boolean);\n}\n\nconst filteredItems = filterItems([\"foo\", \"b\", 1, 2]);\n\nconsole.log(filteredItems);\n\n`;\n"
  },
  {
    "path": "tests/flow/array-filter/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/array-filter/test.js",
    "content": "/* @flow */\n\nfunction filterOutVoids<T> (arr: Array<?T>): Array<T> {\n  return arr.filter(Boolean)\n}\n\nfunction filterOutSmall (arr: Array<?number>): Array<?number> {\n  return arr.filter(num => num && num > 10)\n}\n"
  },
  {
    "path": "tests/flow/array-filter/test2.js",
    "content": "/* @flow */\n\nfunction filterItems(items: Array<string|number>): Array<string|number> {\n  return items.map(item => {\n    if (typeof item === 'string') {\n      return item.length > 2 ? item : null;\n    } else {\n      return item*10;\n    }\n  }).filter(Boolean);\n}\n\nconst filteredItems = filterItems(['foo', 'b', 1, 2]);\n\nconsole.log(filteredItems);\n"
  },
  {
    "path": "tests/flow/array_spread/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nvar A = [1,2,3];\nvar B = [...A];\nvar C = [1,2,3];\nB.sort((a, b) => a - b);\nC.sort((a, b) => a - b);\n\nvar x: Array<string> = ['1', '2'];\nvar y: Array<string> = ['3', ...x];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar A = [1, 2, 3];\nvar B = [...A];\nvar C = [1, 2, 3];\nB.sort((a, b) => a - b);\nC.sort((a, b) => a - b);\n\nvar x: Array<string> = [\"1\", \"2\"];\nvar y: Array<string> = [\"3\", ...x];\n\n`;\n"
  },
  {
    "path": "tests/flow/array_spread/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/array_spread/test.js",
    "content": "var A = [1,2,3];\nvar B = [...A];\nvar C = [1,2,3];\nB.sort((a, b) => a - b);\nC.sort((a, b) => a - b);\n\nvar x: Array<string> = ['1', '2'];\nvar y: Array<string> = ['3', ...x];\n"
  },
  {
    "path": "tests/flow/arraylib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`array_lib.js 1`] = `\n/* @flow */\nfunction foo(x:string) { }\n\nvar a = [0];\nvar b = a.map(function (x) { foo(x); return \"\" + x; });\n\nvar c: number = a[0];\nvar d: number = b[0];\n\nvar e:Array<string> = a.reverse();\n\nvar f = [\"\"];\nvar g:number = f.map(function () { return 0; })[0];\n\nvar h: Array<number> = [1,2,3];\nvar i: Array<string> = ['a', 'b', 'c'];\nvar j: Array<number | string> = h.concat(i);\nvar k: Array<number> = h.concat(h);\nvar l: Array<number> = h.concat(1,2,3);\nvar m: Array<number | string> = h.concat('a', 'b', 'c');\nvar n: Array<number> = h.concat('a', 'b', 'c'); // Error\n\nfunction reduce_test() {\n  /* Adapted from the following source:\n   * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce\n   */\n  [0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, index, array) {\n    return previousValue + currentValue + array[index];\n  });\n\n  [0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, index, array) {\n    return previousValue + currentValue + array[index];\n  }, 10);\n\n  var total = [0, 1, 2, 3].reduce(function(a, b) {\n    return a + b;\n  });\n\n  var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {\n    return a.concat(b);\n  });\n\n  /* Added later, because the above is insufficient */\n\n  // acc is element type of array when no init is provided\n  [\"\"].reduce((acc, str) => acc * str.length); // error, string ~> number\n  [\"\"].reduceRight((acc, str) => acc * str.length); // error, string ~> number\n}\n\nfunction from_test() {\n  var a: Array<string> = Array.from([1, 2, 3], function(val, index) {\n    return index % 2 ? \"foo\" : String(val);\n  });\n  var b: Array<string> = Array.from([1, 2, 3], function(val) {\n    return String(val);\n  });\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nfunction foo(x: string) {}\n\nvar a = [0];\nvar b = a.map(function(x) {\n  foo(x);\n  return \"\" + x;\n});\n\nvar c: number = a[0];\nvar d: number = b[0];\n\nvar e: Array<string> = a.reverse();\n\nvar f = [\"\"];\nvar g: number = f.map(function() {\n  return 0;\n})[0];\n\nvar h: Array<number> = [1, 2, 3];\nvar i: Array<string> = [\"a\", \"b\", \"c\"];\nvar j: Array<number | string> = h.concat(i);\nvar k: Array<number> = h.concat(h);\nvar l: Array<number> = h.concat(1, 2, 3);\nvar m: Array<number | string> = h.concat(\"a\", \"b\", \"c\");\nvar n: Array<number> = h.concat(\"a\", \"b\", \"c\"); // Error\n\nfunction reduce_test() {\n  /* Adapted from the following source:\n   * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce\n   */\n  [0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, index, array) {\n    return previousValue + currentValue + array[index];\n  });\n\n  [0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, index, array) {\n    return previousValue + currentValue + array[index];\n  }, 10);\n\n  var total = [0, 1, 2, 3].reduce(function(a, b) {\n    return a + b;\n  });\n\n  var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {\n    return a.concat(b);\n  });\n\n  /* Added later, because the above is insufficient */\n\n  // acc is element type of array when no init is provided\n  [\"\"].reduce((acc, str) => acc * str.length); // error, string ~> number\n  [\"\"].reduceRight((acc, str) => acc * str.length); // error, string ~> number\n}\n\nfunction from_test() {\n  var a: Array<string> = Array.from([1, 2, 3], function(val, index) {\n    return index % 2 ? \"foo\" : String(val);\n  });\n  var b: Array<string> = Array.from([1, 2, 3], function(val) {\n    return String(val);\n  });\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/arraylib/array_lib.js",
    "content": "/* @flow */\nfunction foo(x:string) { }\n\nvar a = [0];\nvar b = a.map(function (x) { foo(x); return \"\" + x; });\n\nvar c: number = a[0];\nvar d: number = b[0];\n\nvar e:Array<string> = a.reverse();\n\nvar f = [\"\"];\nvar g:number = f.map(function () { return 0; })[0];\n\nvar h: Array<number> = [1,2,3];\nvar i: Array<string> = ['a', 'b', 'c'];\nvar j: Array<number | string> = h.concat(i);\nvar k: Array<number> = h.concat(h);\nvar l: Array<number> = h.concat(1,2,3);\nvar m: Array<number | string> = h.concat('a', 'b', 'c');\nvar n: Array<number> = h.concat('a', 'b', 'c'); // Error\n\nfunction reduce_test() {\n  /* Adapted from the following source:\n   * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce\n   */\n  [0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, index, array) {\n    return previousValue + currentValue + array[index];\n  });\n\n  [0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, index, array) {\n    return previousValue + currentValue + array[index];\n  }, 10);\n\n  var total = [0, 1, 2, 3].reduce(function(a, b) {\n    return a + b;\n  });\n\n  var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {\n    return a.concat(b);\n  });\n\n  /* Added later, because the above is insufficient */\n\n  // acc is element type of array when no init is provided\n  [\"\"].reduce((acc, str) => acc * str.length); // error, string ~> number\n  [\"\"].reduceRight((acc, str) => acc * str.length); // error, string ~> number\n}\n\nfunction from_test() {\n  var a: Array<string> = Array.from([1, 2, 3], function(val, index) {\n    return index % 2 ? \"foo\" : String(val);\n  });\n  var b: Array<string> = Array.from([1, 2, 3], function(val) {\n    return String(val);\n  });\n}\n"
  },
  {
    "path": "tests/flow/arraylib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/arrays/Arrays.js",
    "content": "\n/* @providesModule Arrays */\n\nfunction foo(x:string) { }\n\nvar a = [];\na[0] = 1;\na[1] = \"...\";\n\nfoo(a[1]);\nvar y;\na.forEach(x => y=x);\n\n// for literals, composite element type is union of individuals\n// note: test both tuple and non-tuple inferred literals\nvar alittle: Array<?number> = [0, 1, 2, 3, null];\nvar abig: Array<?number> = [0, 1, 2, 3, 4, 5, 6, 8, null];\n\nvar abig2: Array<{x:number; y:number}> = [\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0, a:true},\n  {x:0, y:0, b:\"hey\"},\n  {x:0, y:0, c:1},\n  {x:0, y:0, c:\"hey\"}\n];\n\nmodule.exports = \"arrays\";\n"
  },
  {
    "path": "tests/flow/arrays/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Arrays.js 1`] = `\n\n/* @providesModule Arrays */\n\nfunction foo(x:string) { }\n\nvar a = [];\na[0] = 1;\na[1] = \"...\";\n\nfoo(a[1]);\nvar y;\na.forEach(x => y=x);\n\n// for literals, composite element type is union of individuals\n// note: test both tuple and non-tuple inferred literals\nvar alittle: Array<?number> = [0, 1, 2, 3, null];\nvar abig: Array<?number> = [0, 1, 2, 3, 4, 5, 6, 8, null];\n\nvar abig2: Array<{x:number; y:number}> = [\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0},\n  {x:0, y:0, a:true},\n  {x:0, y:0, b:\"hey\"},\n  {x:0, y:0, c:1},\n  {x:0, y:0, c:\"hey\"}\n];\n\nmodule.exports = \"arrays\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule Arrays */\n\nfunction foo(x: string) {}\n\nvar a = [];\na[0] = 1;\na[1] = \"...\";\n\nfoo(a[1]);\nvar y;\na.forEach(x => (y = x));\n\n// for literals, composite element type is union of individuals\n// note: test both tuple and non-tuple inferred literals\nvar alittle: Array<?number> = [0, 1, 2, 3, null];\nvar abig: Array<?number> = [0, 1, 2, 3, 4, 5, 6, 8, null];\n\nvar abig2: Array<{ x: number, y: number }> = [\n  { x: 0, y: 0 },\n  { x: 0, y: 0 },\n  { x: 0, y: 0 },\n  { x: 0, y: 0 },\n  { x: 0, y: 0 },\n  { x: 0, y: 0 },\n  { x: 0, y: 0 },\n  { x: 0, y: 0 },\n  { x: 0, y: 0 },\n  { x: 0, y: 0 },\n  { x: 0, y: 0 },\n  { x: 0, y: 0 },\n  { x: 0, y: 0 },\n  { x: 0, y: 0, a: true },\n  { x: 0, y: 0, b: \"hey\" },\n  { x: 0, y: 0, c: 1 },\n  { x: 0, y: 0, c: \"hey\" }\n];\n\nmodule.exports = \"arrays\";\n\n`;\n\nexports[`numeric_elem.js 1`] = `\nvar arr = [];\nvar day = new Date;\n\n// Date instances are numeric (see Flow_js.numeric) and thus can index into\n// arrays.\narr[day] = 0;\n(arr[day]: string); // error: number ~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar arr = [];\nvar day = new Date();\n\n// Date instances are numeric (see Flow_js.numeric) and thus can index into\n// arrays.\narr[day] = 0;\n(arr[day]: string); // error: number ~> string\n\n`;\n"
  },
  {
    "path": "tests/flow/arrays/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/arrays/numeric_elem.js",
    "content": "var arr = [];\nvar day = new Date;\n\n// Date instances are numeric (see Flow_js.numeric) and thus can index into\n// arrays.\narr[day] = 0;\n(arr[day]: string); // error: number ~> string\n"
  },
  {
    "path": "tests/flow/arrows/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`advanced_arrows.js 1`] = `\n/**\n * @flow\n */\n\nvar add = (x: number, y: number): number => x + y;\n\nvar bad = (x: number): string => x; // Error!\n\nvar ident = <T>(x: T): T => x;\n(ident(1): number);\n(ident(\"hi\"): number); // Error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nvar add = (x: number, y: number): number => x + y;\n\nvar bad = (x: number): string => x; // Error!\n\nvar ident = <T>(x: T): T => x;\n(ident(1): number);\n(ident(\"hi\"): number); // Error\n\n`;\n\nexports[`arrows.js 1`] = `\nfunction selectBestEffortImageForWidth(\n    maxWidth: number,\n    images: Array<Image>\n): Image {\n    var maxPixelWidth = maxWidth;\n    //images = images.sort(function (a, b) { return a.width - b.width });\n    images = images.sort((a, b) => (a.width - b.width) + \"\");\n    return images.find(image => image.width >= maxPixelWidth) ||\n        images[images.length - 1];\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction selectBestEffortImageForWidth(\n  maxWidth: number,\n  images: Array<Image>\n): Image {\n  var maxPixelWidth = maxWidth;\n  //images = images.sort(function (a, b) { return a.width - b.width });\n  images = images.sort((a, b) => a.width - b.width + \"\");\n  return (\n    images.find(image => image.width >= maxPixelWidth) ||\n    images[images.length - 1]\n  );\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/arrows/advanced_arrows.js",
    "content": "/**\n * @flow\n */\n\nvar add = (x: number, y: number): number => x + y;\n\nvar bad = (x: number): string => x; // Error!\n\nvar ident = <T>(x: T): T => x;\n(ident(1): number);\n(ident(\"hi\"): number); // Error\n"
  },
  {
    "path": "tests/flow/arrows/arrows.js",
    "content": "function selectBestEffortImageForWidth(\n    maxWidth: number,\n    images: Array<Image>\n): Image {\n    var maxPixelWidth = maxWidth;\n    //images = images.sort(function (a, b) { return a.width - b.width });\n    images = images.sort((a, b) => (a.width - b.width) + \"\");\n    return images.find(image => image.width >= maxPixelWidth) ||\n        images[images.length - 1];\n}\n"
  },
  {
    "path": "tests/flow/arrows/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/async/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`async.js 1`] = `\n// @flow\n\n// \"For async functions, a Promise<T> is returned,\n// and the type of return expressions must be T.\"\n//\n\nasync function f0(): Promise<number> {\n  return 1;\n}\n\nasync function f1(): Promise<bool> {\n  return 1;  // error, number != bool\n}\n\n// await: (p: Promise<T> | T) => T\n//\n\nasync function f2(p: Promise<number>): Promise<number> {\n  var x: number = await p;\n  var y: number = await 1;\n  return x + y;\n}\n\nasync function f3(p: Promise<number>): Promise<number> {\n  return await p;\n}\n\n// TODO: this is one of those bad generic errors, currently:\n// \"inconsistent use of library definitions\" with two core.js locs\nasync function f4(p: Promise<number>): Promise<bool> {\n  return await p; // error, number != bool\n}\n\n// async arrow functions\n//\n\nvar f5: () => Promise<number> = async () => await 1;\n\n// async methods\n//\n\nclass C {\n  async m() { return 1; }\n  async mt<T>(a: T): Promise<T> { return a; }\n  static async m(a): void { await a; } // error, void != Promise<void>\n  static async mt<T>(a: T): Promise<T> { return a; }\n}\n\n// async function props\n\nvar obj = { f: async () => await 1 };\nvar objf : () => Promise<number> = obj.f;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// \"For async functions, a Promise<T> is returned,\n// and the type of return expressions must be T.\"\n//\n\nasync function f0(): Promise<number> {\n  return 1;\n}\n\nasync function f1(): Promise<boolean> {\n  return 1; // error, number != bool\n}\n\n// await: (p: Promise<T> | T) => T\n//\n\nasync function f2(p: Promise<number>): Promise<number> {\n  var x: number = await p;\n  var y: number = await 1;\n  return x + y;\n}\n\nasync function f3(p: Promise<number>): Promise<number> {\n  return await p;\n}\n\n// TODO: this is one of those bad generic errors, currently:\n// \"inconsistent use of library definitions\" with two core.js locs\nasync function f4(p: Promise<number>): Promise<boolean> {\n  return await p; // error, number != bool\n}\n\n// async arrow functions\n//\n\nvar f5: () => Promise<number> = async () => await 1;\n\n// async methods\n//\n\nclass C {\n  async m() {\n    return 1;\n  }\n  async mt<T>(a: T): Promise<T> {\n    return a;\n  }\n  static async m(a): void {\n    await a;\n  } // error, void != Promise<void>\n  static async mt<T>(a: T): Promise<T> {\n    return a;\n  }\n}\n\n// async function props\n\nvar obj = { f: async () => await 1 };\nvar objf: () => Promise<number> = obj.f;\n\n`;\n\nexports[`async_base_class.js 1`] = `\n// This is kind of weird, but it should parse. This works in babel without the\n// parens around (await promise). From the es6 and async/await specs I (nmote)\n// am not clear on whether it should. In any case it's a strange corner case\n// that is probably not important to support.\nclass C {};\n\nvar P: Promise<Class<C>> = new Promise(function (resolve, reject) {\n  resolve(C);\n});\n\nasync function foo() {\n  class Bar extends (await P) { }\n  return Bar;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// This is kind of weird, but it should parse. This works in babel without the\n// parens around (await promise). From the es6 and async/await specs I (nmote)\n// am not clear on whether it should. In any case it's a strange corner case\n// that is probably not important to support.\nclass C {}\n\nvar P: Promise<Class<C>> = new Promise(function(resolve, reject) {\n  resolve(C);\n});\n\nasync function foo() {\n  class Bar extends (await P) {}\n  return Bar;\n}\n\n`;\n\nexports[`async_parse.js 1`] = `\nasync function f() {}\nasync function ft<T>(a: T) {}\n\nclass C {\n  async m() {}\n  async mt<T>(a: T) {}\n  static async m(a) {}\n  static async mt<T>(a: T) {}\n}\n\nvar e = async function () {};\nvar et = async function<T> (a: T) {};\n\nvar n = new async function() {};\n\nvar o = { async m() {} };\nvar ot = { async m<T>(a: T) {} };\nvar oz = { async async() {} };\n\nvar x = { async : 5 };\nconsole.log(x.async);\n\nvar async = 3;\nvar y = { async };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nasync function f() {}\nasync function ft<T>(a: T) {}\n\nclass C {\n  async m() {}\n  async mt<T>(a: T) {}\n  static async m(a) {}\n  static async mt<T>(a: T) {}\n}\n\nvar e = async function() {};\nvar et = async function<T>(a: T) {};\n\nvar n = new async function() {}();\n\nvar o = { async m() {} };\nvar ot = { async m<T>(a: T) {} };\nvar oz = { async async() {} };\n\nvar x = { async: 5 };\nconsole.log(x.async);\n\nvar async = 3;\nvar y = { async };\n\n`;\n\nexports[`async_promise.js 1`] = `\nasync function f(): Promise<number> {\n  return Promise.resolve(1);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nasync function f(): Promise<number> {\n  return Promise.resolve(1);\n}\n\n`;\n\nexports[`async_return_void.js 1`] = `\n// @flow\n\nasync function foo1(): Promise<string> {\n  return;\n}\n\nasync function foo2(): Promise<string> {\n  return undefined;\n}\n\nasync function foo3(): Promise<string> {\n  function bar() { }\n  return bar();\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nasync function foo1(): Promise<string> {\n  return;\n}\n\nasync function foo2(): Promise<string> {\n  return undefined;\n}\n\nasync function foo3(): Promise<string> {\n  function bar() {}\n  return bar();\n}\n\n`;\n\nexports[`async2.js 1`] = `\n// @flow\n\n// misc basic\n\nfunction test1() {\n  async function foo() {\n    return 42;\n  }\n\n  async function bar() {\n    var a = await foo();\n    var b: number = a; // valid\n    var c: string = a; // Error: number ~> string\n  }\n}\n\n//\n// void returns:\n//\n\n// inference should produce return type Promise<void>\n// in the absence of an explicit return\n//\n\nfunction test2() {\n  async function voidoid1() {\n    console.log(\"HEY\");\n  }\n\n  var voidoid2: () => Promise<void> = voidoid1; // ok\n\n  var voidoid3: () => void = voidoid1; // error, void != Promise<void>\n}\n\n// annotated return type of Promise<void> should work\n//\n\nfunction test3() {\n  async function voidoid4(): Promise<void> { // ok\n    console.log(\"HEY\");\n  }\n}\n\n// other annotated return types should fail\n// (note: misannotated return types with explicit\n// return statements are covered in async.js)\n//\n\nfunction test4() {\n  async function voidoid5(): void { // error, void != Promise<void>\n    console.log(\"HEY\");\n  }\n}\n\nfunction test5() {\n  async function voidoid6()\n  : Promise<number> { // error, number != void\n    console.log(\"HEY\");\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// misc basic\n\nfunction test1() {\n  async function foo() {\n    return 42;\n  }\n\n  async function bar() {\n    var a = await foo();\n    var b: number = a; // valid\n    var c: string = a; // Error: number ~> string\n  }\n}\n\n//\n// void returns:\n//\n\n// inference should produce return type Promise<void>\n// in the absence of an explicit return\n//\n\nfunction test2() {\n  async function voidoid1() {\n    console.log(\"HEY\");\n  }\n\n  var voidoid2: () => Promise<void> = voidoid1; // ok\n\n  var voidoid3: () => void = voidoid1; // error, void != Promise<void>\n}\n\n// annotated return type of Promise<void> should work\n//\n\nfunction test3() {\n  async function voidoid4(): Promise<void> {\n    // ok\n    console.log(\"HEY\");\n  }\n}\n\n// other annotated return types should fail\n// (note: misannotated return types with explicit\n// return statements are covered in async.js)\n//\n\nfunction test4() {\n  async function voidoid5(): void {\n    // error, void != Promise<void>\n    console.log(\"HEY\");\n  }\n}\n\nfunction test5() {\n  async function voidoid6(): Promise<number> {\n    // error, number != void\n    console.log(\"HEY\");\n  }\n}\n\n`;\n\nexports[`async3.js 1`] = `\n// @flow\n\n/**\n * test nested-promise unwrapping.\n * Note: currently we don't do this properly in the underlying\n * type of the Promise class, which causes spurious errors to\n * be raised here. Once that's fixed, the errors here will go\n * away.\n */\n\nasync function foo() {\n  return 42;\n}\n\nasync function bar() {\n  return foo();\n}\n\nasync function baz() {\n\n  // a should now be typed as number, but is in fact\n  // Promise<number> until nested-promise unwrap is fixed\n  var a = await bar();\n\n  // TODO this is valid code, but currently gives Promise ~> number error\n  // due to lack of transitive Promise unwrap.\n  var b: number = a;\n\n  // should be number ~> string error, but currently gives\n  // Promise ~> string error for the same reason\n  var c: string = a;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n/**\n * test nested-promise unwrapping.\n * Note: currently we don't do this properly in the underlying\n * type of the Promise class, which causes spurious errors to\n * be raised here. Once that's fixed, the errors here will go\n * away.\n */\n\nasync function foo() {\n  return 42;\n}\n\nasync function bar() {\n  return foo();\n}\n\nasync function baz() {\n  // a should now be typed as number, but is in fact\n  // Promise<number> until nested-promise unwrap is fixed\n  var a = await bar();\n\n  // TODO this is valid code, but currently gives Promise ~> number error\n  // due to lack of transitive Promise unwrap.\n  var b: number = a;\n\n  // should be number ~> string error, but currently gives\n  // Promise ~> string error for the same reason\n  var c: string = a;\n}\n\n`;\n\nexports[`await_parse.js 1`] = `\nasync function f() { await 1; }\nasync function ft<T>(a: T) { await 1; }\n\nclass C {\n  async m() { await 1; }\n  async mt<T>(a: T) { await 1; }\n  static async m(a) { await 1; }\n  static async mt<T>(a: T) { await 1; }\n}\n\nvar e = async function () { await 1; };\nvar et = async function<T> (a: T) { await 1; };\n\nvar n = new async function() { await 1; };\n\nvar o = { async m() { await 1; } };\nvar ot = { async m<T>(a: T) { await 1; } };\nvar oz = { async async(async) { await async; } };\n\nvar x = { await : 5 };\nconsole.log(x.await);\n\nvar await = 3;\nvar y = { await };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nasync function f() {\n  await 1;\n}\nasync function ft<T>(a: T) {\n  await 1;\n}\n\nclass C {\n  async m() {\n    await 1;\n  }\n  async mt<T>(a: T) {\n    await 1;\n  }\n  static async m(a) {\n    await 1;\n  }\n  static async mt<T>(a: T) {\n    await 1;\n  }\n}\n\nvar e = async function() {\n  await 1;\n};\nvar et = async function<T>(a: T) {\n  await 1;\n};\n\nvar n = new async function() {\n  await 1;\n}();\n\nvar o = {\n  async m() {\n    await 1;\n  }\n};\nvar ot = {\n  async m<T>(a: T) {\n    await 1;\n  }\n};\nvar oz = {\n  async async(async) {\n    await async;\n  }\n};\n\nvar x = { await: 5 };\nconsole.log(x.await);\n\nvar await = 3;\nvar y = { await };\n\n`;\n"
  },
  {
    "path": "tests/flow/async/async.js",
    "content": "// @flow\n\n// \"For async functions, a Promise<T> is returned,\n// and the type of return expressions must be T.\"\n//\n\nasync function f0(): Promise<number> {\n  return 1;\n}\n\nasync function f1(): Promise<bool> {\n  return 1;  // error, number != bool\n}\n\n// await: (p: Promise<T> | T) => T\n//\n\nasync function f2(p: Promise<number>): Promise<number> {\n  var x: number = await p;\n  var y: number = await 1;\n  return x + y;\n}\n\nasync function f3(p: Promise<number>): Promise<number> {\n  return await p;\n}\n\n// TODO: this is one of those bad generic errors, currently:\n// \"inconsistent use of library definitions\" with two core.js locs\nasync function f4(p: Promise<number>): Promise<bool> {\n  return await p; // error, number != bool\n}\n\n// async arrow functions\n//\n\nvar f5: () => Promise<number> = async () => await 1;\n\n// async methods\n//\n\nclass C {\n  async m() { return 1; }\n  async mt<T>(a: T): Promise<T> { return a; }\n  static async m(a): void { await a; } // error, void != Promise<void>\n  static async mt<T>(a: T): Promise<T> { return a; }\n}\n\n// async function props\n\nvar obj = { f: async () => await 1 };\nvar objf : () => Promise<number> = obj.f;\n"
  },
  {
    "path": "tests/flow/async/async2.js",
    "content": "// @flow\n\n// misc basic\n\nfunction test1() {\n  async function foo() {\n    return 42;\n  }\n\n  async function bar() {\n    var a = await foo();\n    var b: number = a; // valid\n    var c: string = a; // Error: number ~> string\n  }\n}\n\n//\n// void returns:\n//\n\n// inference should produce return type Promise<void>\n// in the absence of an explicit return\n//\n\nfunction test2() {\n  async function voidoid1() {\n    console.log(\"HEY\");\n  }\n\n  var voidoid2: () => Promise<void> = voidoid1; // ok\n\n  var voidoid3: () => void = voidoid1; // error, void != Promise<void>\n}\n\n// annotated return type of Promise<void> should work\n//\n\nfunction test3() {\n  async function voidoid4(): Promise<void> { // ok\n    console.log(\"HEY\");\n  }\n}\n\n// other annotated return types should fail\n// (note: misannotated return types with explicit\n// return statements are covered in async.js)\n//\n\nfunction test4() {\n  async function voidoid5(): void { // error, void != Promise<void>\n    console.log(\"HEY\");\n  }\n}\n\nfunction test5() {\n  async function voidoid6()\n  : Promise<number> { // error, number != void\n    console.log(\"HEY\");\n  }\n}\n"
  },
  {
    "path": "tests/flow/async/async3.js",
    "content": "// @flow\n\n/**\n * test nested-promise unwrapping.\n * Note: currently we don't do this properly in the underlying\n * type of the Promise class, which causes spurious errors to\n * be raised here. Once that's fixed, the errors here will go\n * away.\n */\n\nasync function foo() {\n  return 42;\n}\n\nasync function bar() {\n  return foo();\n}\n\nasync function baz() {\n\n  // a should now be typed as number, but is in fact\n  // Promise<number> until nested-promise unwrap is fixed\n  var a = await bar();\n\n  // TODO this is valid code, but currently gives Promise ~> number error\n  // due to lack of transitive Promise unwrap.\n  var b: number = a;\n\n  // should be number ~> string error, but currently gives\n  // Promise ~> string error for the same reason\n  var c: string = a;\n}\n"
  },
  {
    "path": "tests/flow/async/async_base_class.js",
    "content": "// This is kind of weird, but it should parse. This works in babel without the\n// parens around (await promise). From the es6 and async/await specs I (nmote)\n// am not clear on whether it should. In any case it's a strange corner case\n// that is probably not important to support.\nclass C {};\n\nvar P: Promise<Class<C>> = new Promise(function (resolve, reject) {\n  resolve(C);\n});\n\nasync function foo() {\n  class Bar extends (await P) { }\n  return Bar;\n}\n"
  },
  {
    "path": "tests/flow/async/async_parse.js",
    "content": "async function f() {}\nasync function ft<T>(a: T) {}\n\nclass C {\n  async m() {}\n  async mt<T>(a: T) {}\n  static async m(a) {}\n  static async mt<T>(a: T) {}\n}\n\nvar e = async function () {};\nvar et = async function<T> (a: T) {};\n\nvar n = new async function() {};\n\nvar o = { async m() {} };\nvar ot = { async m<T>(a: T) {} };\nvar oz = { async async() {} };\n\nvar x = { async : 5 };\nconsole.log(x.async);\n\nvar async = 3;\nvar y = { async };\n"
  },
  {
    "path": "tests/flow/async/async_promise.js",
    "content": "async function f(): Promise<number> {\n  return Promise.resolve(1);\n}\n"
  },
  {
    "path": "tests/flow/async/async_return_void.js",
    "content": "// @flow\n\nasync function foo1(): Promise<string> {\n  return;\n}\n\nasync function foo2(): Promise<string> {\n  return undefined;\n}\n\nasync function foo3(): Promise<string> {\n  function bar() { }\n  return bar();\n}\n"
  },
  {
    "path": "tests/flow/async/await_parse.js",
    "content": "async function f() { await 1; }\nasync function ft<T>(a: T) { await 1; }\n\nclass C {\n  async m() { await 1; }\n  async mt<T>(a: T) { await 1; }\n  static async m(a) { await 1; }\n  static async mt<T>(a: T) { await 1; }\n}\n\nvar e = async function () { await 1; };\nvar et = async function<T> (a: T) { await 1; };\n\nvar n = new async function() { await 1; };\n\nvar o = { async m() { await 1; } };\nvar ot = { async m<T>(a: T) { await 1; } };\nvar oz = { async async(async) { await async; } };\n\nvar x = { await : 5 };\nconsole.log(x.await);\n\nvar await = 3;\nvar y = { await };\n"
  },
  {
    "path": "tests/flow/async/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/async_iteration/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`delegate_yield.js 1`] = `\nasync function *delegate_next() {\n  async function *inner() {\n    var x: void = yield; // error: number ~> void\n  }\n  yield *inner();\n}\ndelegate_next().next(0);\n\nasync function *delegate_yield() {\n  async function *inner() {\n    yield 0;\n  }\n  yield *inner();\n}\n(async () => {\n  for await (const x of delegate_yield()) {\n    (x: void); // error: number ~> void\n  }\n});\n\nasync function *delegate_return() {\n  async function *inner() {\n    return 0;\n  }\n  var x: void = yield *inner(); // error: number ~> void\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nasync function* delegate_next() {\n  async function* inner() {\n    var x: void = yield; // error: number ~> void\n  }\n  yield* inner();\n}\ndelegate_next().next(0);\n\nasync function* delegate_yield() {\n  async function* inner() {\n    yield 0;\n  }\n  yield* inner();\n}\nasync () => {\n  for await (const x of delegate_yield()) {\n    (x: void); // error: number ~> void\n  }\n};\n\nasync function* delegate_return() {\n  async function* inner() {\n    return 0;\n  }\n  var x: void = yield* inner(); // error: number ~> void\n}\n\n`;\n\nexports[`generator.js 1`] = `\ndeclare interface File {\n  readLine(): Promise<string>;\n  close(): void;\n  EOF: boolean;\n}\n\ndeclare function fileOpen(path: string): Promise<File>;\n\nasync function* readLines(path) {\n  let file: File = await fileOpen(path);\n\n  try {\n    while (!file.EOF) {\n      yield await file.readLine();\n    }\n  } finally {\n    file.close();\n  }\n}\n\nasync function f() {\n  for await (const line of readLines(\"/path/to/file\")) {\n    (line: void); // error: string ~> void\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare interface File {\n  readLine(): Promise<string>,\n  close(): void,\n  EOF: boolean\n}\n\ndeclare function fileOpen(path: string): Promise<File>;\n\nasync function* readLines(path) {\n  let file: File = await fileOpen(path);\n\n  try {\n    while (!file.EOF) {\n      yield await file.readLine();\n    }\n  } finally {\n    file.close();\n  }\n}\n\nasync function f() {\n  for await (const line of readLines(\"/path/to/file\")) {\n    (line: void); // error: string ~> void\n  }\n}\n\n`;\n\nexports[`return.js 1`] = `\ndeclare var gen: AsyncGenerator<void,string,void>;\n\n// You can pass whatever you like to return, it doesn't need to be related to\n// the AsyncGenerator's return type\ngen.return(0).then(result => {\n  (result.value: void); // error: string | number ~> void\n});\n\n// However, a generator can \"refuse\" the return by catching an exception and\n// yielding or returning internally.\nasync function *refuse_return() {\n  try {\n    yield 1;\n  } finally {\n    return 0;\n  }\n}\nrefuse_return().return(\"string\").then(result => {\n  if (result.done) {\n    (result.value: string); // error: number | void ~> string\n  }\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare var gen: AsyncGenerator<void, string, void>;\n\n// You can pass whatever you like to return, it doesn't need to be related to\n// the AsyncGenerator's return type\ngen.return(0).then(result => {\n  (result.value: void); // error: string | number ~> void\n});\n\n// However, a generator can \"refuse\" the return by catching an exception and\n// yielding or returning internally.\nasync function* refuse_return() {\n  try {\n    yield 1;\n  } finally {\n    return 0;\n  }\n}\nrefuse_return().return(\"string\").then(result => {\n  if (result.done) {\n    (result.value: string); // error: number | void ~> string\n  }\n});\n\n`;\n\nexports[`throw.js 1`] = `\nasync function *catch_return() {\n  try {\n    yield 0;\n  } catch (e) {\n    return e;\n  }\n}\n\n(async () => {\n  catch_return().throw(\"\").then(({value}) => {\n    if (value !== undefined) {\n      (value: void); // error: number ~> void\n    }\n  });\n});\n\nasync function *yield_return() {\n  try {\n    yield 0;\n    return;\n  } catch (e) {\n    yield e;\n  }\n}\n\n(async () => {\n  yield_return().throw(\"\").then(({value}) => {\n    if (value !== undefined) {\n      (value: void); // error: number ~> void\n    }\n  });\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nasync function* catch_return() {\n  try {\n    yield 0;\n  } catch (e) {\n    return e;\n  }\n}\n\nasync () => {\n  catch_return().throw(\"\").then(({ value }) => {\n    if (value !== undefined) {\n      (value: void); // error: number ~> void\n    }\n  });\n};\n\nasync function* yield_return() {\n  try {\n    yield 0;\n    return;\n  } catch (e) {\n    yield e;\n  }\n}\n\nasync () => {\n  yield_return().throw(\"\").then(({ value }) => {\n    if (value !== undefined) {\n      (value: void); // error: number ~> void\n    }\n  });\n};\n\n`;\n"
  },
  {
    "path": "tests/flow/async_iteration/delegate_yield.js",
    "content": "async function *delegate_next() {\n  async function *inner() {\n    var x: void = yield; // error: number ~> void\n  }\n  yield *inner();\n}\ndelegate_next().next(0);\n\nasync function *delegate_yield() {\n  async function *inner() {\n    yield 0;\n  }\n  yield *inner();\n}\n(async () => {\n  for await (const x of delegate_yield()) {\n    (x: void); // error: number ~> void\n  }\n});\n\nasync function *delegate_return() {\n  async function *inner() {\n    return 0;\n  }\n  var x: void = yield *inner(); // error: number ~> void\n}\n"
  },
  {
    "path": "tests/flow/async_iteration/generator.js",
    "content": "declare interface File {\n  readLine(): Promise<string>;\n  close(): void;\n  EOF: boolean;\n}\n\ndeclare function fileOpen(path: string): Promise<File>;\n\nasync function* readLines(path) {\n  let file: File = await fileOpen(path);\n\n  try {\n    while (!file.EOF) {\n      yield await file.readLine();\n    }\n  } finally {\n    file.close();\n  }\n}\n\nasync function f() {\n  for await (const line of readLines(\"/path/to/file\")) {\n    (line: void); // error: string ~> void\n  }\n}\n"
  },
  {
    "path": "tests/flow/async_iteration/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow/async_iteration/return.js",
    "content": "declare var gen: AsyncGenerator<void,string,void>;\n\n// You can pass whatever you like to return, it doesn't need to be related to\n// the AsyncGenerator's return type\ngen.return(0).then(result => {\n  (result.value: void); // error: string | number ~> void\n});\n\n// However, a generator can \"refuse\" the return by catching an exception and\n// yielding or returning internally.\nasync function *refuse_return() {\n  try {\n    yield 1;\n  } finally {\n    return 0;\n  }\n}\nrefuse_return().return(\"string\").then(result => {\n  if (result.done) {\n    (result.value: string); // error: number | void ~> string\n  }\n});\n"
  },
  {
    "path": "tests/flow/async_iteration/throw.js",
    "content": "async function *catch_return() {\n  try {\n    yield 0;\n  } catch (e) {\n    return e;\n  }\n}\n\n(async () => {\n  catch_return().throw(\"\").then(({value}) => {\n    if (value !== undefined) {\n      (value: void); // error: number ~> void\n    }\n  });\n});\n\nasync function *yield_return() {\n  try {\n    yield 0;\n    return;\n  } catch (e) {\n    yield e;\n  }\n}\n\n(async () => {\n  yield_return().throw(\"\").then(({value}) => {\n    if (value !== undefined) {\n      (value: void); // error: number ~> void\n    }\n  });\n});\n"
  },
  {
    "path": "tests/flow/autocomplete/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`customfun.js 1`] = `\n// @flow\n\ndeclare var idx: $Facebookism$Idx;\ndeclare var merge: $Facebookism$Merge;\ndeclare var mergeDeepInto: $Facebookism$MergeDeepInto;\ndeclare var mergeInto: $Facebookism$MergeInto;\ndeclare var mixin: $Facebookism$Mixin;\ndeclare var objectGetPrototypeOf: Object$GetPrototypeOf\ndeclare var objectAssign: Object$Assign\n\nm\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ndeclare var idx: $Facebookism$Idx;\ndeclare var merge: $Facebookism$Merge;\ndeclare var mergeDeepInto: $Facebookism$MergeDeepInto;\ndeclare var mergeInto: $Facebookism$MergeInto;\ndeclare var mixin: $Facebookism$Mixin;\ndeclare var objectGetPrototypeOf: Object$GetPrototypeOf;\ndeclare var objectAssign: Object$Assign;\n\nm;\n\n`;\n\nexports[`unknown.js 1`] = `\n// @noflow\nmodule.exports = { x: { y: \"\" } };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\nmodule.exports = { x: { y: \"\" } };\n\n`;\n"
  },
  {
    "path": "tests/flow/autocomplete/customfun.js",
    "content": "// @flow\n\ndeclare var idx: $Facebookism$Idx;\ndeclare var merge: $Facebookism$Merge;\ndeclare var mergeDeepInto: $Facebookism$MergeDeepInto;\ndeclare var mergeInto: $Facebookism$MergeInto;\ndeclare var mixin: $Facebookism$Mixin;\ndeclare var objectGetPrototypeOf: Object$GetPrototypeOf\ndeclare var objectAssign: Object$Assign\n\nm\n"
  },
  {
    "path": "tests/flow/autocomplete/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/autocomplete/unknown.js",
    "content": "// @noflow\nmodule.exports = { x: { y: \"\" } };\n"
  },
  {
    "path": "tests/flow/auxiliary/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`client.js 1`] = `\nvar y:number = x;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar y: number = x;\n\n`;\n"
  },
  {
    "path": "tests/flow/auxiliary/client.js",
    "content": "var y:number = x;\n"
  },
  {
    "path": "tests/flow/auxiliary/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/auxiliary/lib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`lib.js 1`] = `\ndeclare var x: string;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare var x: string;\n\n`;\n"
  },
  {
    "path": "tests/flow/auxiliary/lib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/auxiliary/lib/lib.js",
    "content": "declare var x: string;\n"
  },
  {
    "path": "tests/flow/binary/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`in.js 1`] = `\n// @flow\n\nlet tests = [\n  // objects on RHS\n  function() {\n    ('foo' in {});\n    ('foo' in { foo: null });\n    (0 in {});\n    (0 in { \"0\": null });\n  },\n\n  // arrays on RHS\n  function() {\n    ('foo' in []);\n    (0 in []);\n    ('length' in []);\n  },\n\n  // primitive classes on RHS\n  function() {\n    ('foo' in new String('bar'));\n    ('foo' in new Number(123));\n  },\n\n  // primitives on RHS\n  function() {\n    ('foo' in 123); // error\n    ('foo' in 'bar'); // error\n    ('foo' in void 0); // error\n    ('foo' in null); // error\n  },\n\n  // bogus stuff on LHS\n  function() {\n    (null in {}); // error\n    (void 0 in {}); // error\n    ({} in {}); // error\n    ([] in {}); // error\n    (false in []); // error\n  },\n\n  // in predicates\n  function() {\n    if ('foo' in 123) {} // error\n    if (!'foo' in {}) {} // error, !'foo' is a boolean\n    if (!('foo' in {})) {}\n  },\n\n  // annotations on RHS\n  function(x: Object, y: mixed) {\n    ('foo' in x); // ok\n    ('foo' in y); // error\n  },\n]\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  // objects on RHS\n  function() {\n    \"foo\" in {};\n    \"foo\" in { foo: null };\n    0 in {};\n    0 in { \"0\": null };\n  },\n\n  // arrays on RHS\n  function() {\n    \"foo\" in [];\n    0 in [];\n    \"length\" in [];\n  },\n\n  // primitive classes on RHS\n  function() {\n    \"foo\" in new String(\"bar\");\n    \"foo\" in new Number(123);\n  },\n\n  // primitives on RHS\n  function() {\n    \"foo\" in 123; // error\n    \"foo\" in \"bar\"; // error\n    \"foo\" in void 0; // error\n    \"foo\" in null; // error\n  },\n\n  // bogus stuff on LHS\n  function() {\n    null in {}; // error\n    void 0 in {}; // error\n    ({} in {}); // error\n    [] in {}; // error\n    false in []; // error\n  },\n\n  // in predicates\n  function() {\n    if (\"foo\" in 123) {\n    } // error\n    if (!\"foo\" in {}) {\n    } // error, !'foo' is a boolean\n    if (!(\"foo\" in {})) {\n    }\n  },\n\n  // annotations on RHS\n  function(x: Object, y: mixed) {\n    \"foo\" in x; // ok\n    \"foo\" in y; // error\n  }\n];\n\n`;\n"
  },
  {
    "path": "tests/flow/binary/in.js",
    "content": "// @flow\n\nlet tests = [\n  // objects on RHS\n  function() {\n    ('foo' in {});\n    ('foo' in { foo: null });\n    (0 in {});\n    (0 in { \"0\": null });\n  },\n\n  // arrays on RHS\n  function() {\n    ('foo' in []);\n    (0 in []);\n    ('length' in []);\n  },\n\n  // primitive classes on RHS\n  function() {\n    ('foo' in new String('bar'));\n    ('foo' in new Number(123));\n  },\n\n  // primitives on RHS\n  function() {\n    ('foo' in 123); // error\n    ('foo' in 'bar'); // error\n    ('foo' in void 0); // error\n    ('foo' in null); // error\n  },\n\n  // bogus stuff on LHS\n  function() {\n    (null in {}); // error\n    (void 0 in {}); // error\n    ({} in {}); // error\n    ([] in {}); // error\n    (false in []); // error\n  },\n\n  // in predicates\n  function() {\n    if ('foo' in 123) {} // error\n    if (!'foo' in {}) {} // error, !'foo' is a boolean\n    if (!('foo' in {})) {}\n  },\n\n  // annotations on RHS\n  function(x: Object, y: mixed) {\n    ('foo' in x); // ok\n    ('foo' in y); // error\n  },\n]\n"
  },
  {
    "path": "tests/flow/binary/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/binding/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`const.js 1`] = `\nconst x = 0;\n\n// errors: const cannot be reassigned\nx++;\nx--;\nx += 0;\nx -= 0;\nx /= 0;\nx %= 0;\nx <<= 0\nx >>= 0;\nx >>>= 0;\nx |= 0;\nx ^= 0;\nx &= 0;\n\n// regression tests -- OK to assign consts like this:\n\nconst { foo } = { foo: \"foo\" }\nconst [ bar ] = [\"bar\"];\n(foo: number); // error: string ~> number\n(bar: number); // error: string ~> number\n\ndeclare var bazzes: { baz: string }[];\nfor (const { baz } of bazzes) {\n  (baz: number); // error: string ~> number\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst x = 0;\n\n// errors: const cannot be reassigned\nx++;\nx--;\nx += 0;\nx -= 0;\nx /= 0;\nx %= 0;\nx <<= 0;\nx >>= 0;\nx >>>= 0;\nx |= 0;\nx ^= 0;\nx &= 0;\n\n// regression tests -- OK to assign consts like this:\n\nconst { foo } = { foo: \"foo\" };\nconst [bar] = [\"bar\"];\n(foo: number); // error: string ~> number\n(bar: number); // error: string ~> number\n\ndeclare var bazzes: { baz: string }[];\nfor (const { baz } of bazzes) {\n  (baz: number); // error: string ~> number\n}\n\n`;\n\nexports[`rebinding.js 1`] = `\n/* @flow\n * test errors on illegal rebinding/reassignment\n *\n *       type class let const var (reassign)\n * type  x    x      x   x     x   x\n * class x    x      x   x     x\n * let   x    x      x   x     x\n * const x    x      x   x     x   x\n * var   x    x      x   x\n */\n\n// type x *\n\nfunction type_type() {\n  type A = number;\n  type A = number;  // error: name already bound\n}\n\nfunction type_class() {\n  type A = number;\n  class A {}        // error: name already bound\n}\n\nfunction type_let() {\n  type A = number;\n  let A = 0;        // error: name already bound\n}\n\nfunction type_const() {\n  type A = number;\n  const A = 0;     // error: name already bound\n}\n\nfunction type_var() {\n  type A = number;\n  var A = 0;        // error: name already bound\n}\n\nfunction type_reassign() {\n  type A = number;\n  A = 42;           // error: type alias ref'd from value pos\n}\n\n// class x *\n\nfunction class_type() {\n  class A {}\n  type A = number;  // error: name already bound\n}\n\nfunction class_class() {\n  class A {}\n  class A {}        // error: name already bound\n}\n\nfunction class_let() {\n  class A {}\n  let A = 0;        // error: name already bound\n}\n\nfunction class_const() {\n  class A {}\n  const A = 0;     // error: name already bound\n}\n\nfunction class_var() {\n  class A {}\n  var A = 0;        // error: name already bound\n}\n\n// let x *\n\nfunction let_type() {\n  let A = 0;\n  type A = number;  // error: name already bound\n}\n\nfunction let_class() {\n  let A = 0;\n  class A {}        // error: name already bound\n}\n\nfunction let_let() {\n  let A = 0;\n  let A = 0;        // error: name already bound\n}\n\nfunction let_const() {\n  let A = 0;\n  const A = 0;     // error: name already bound\n}\n\nfunction let_var() {\n  let A = 0;\n  var A = 0;        // error: name already bound\n}\n\n// const x *\n\nfunction const_type() {\n  const A = 0;\n  type A = number;  // error: name already bound\n}\n\nfunction const_class() {\n  const A = 0;\n  class A {}        // error: name already bound\n}\n\nfunction const_let() {\n  const A = 0;\n  let A = 0;        // error: name already bound\n}\n\nfunction const_const() {\n  const A = 0;\n  const A = 0;     // error: name already bound\n}\n\nfunction const_var() {\n  const A = 0;\n  var A = 0;        // error: name already bound\n}\n\nfunction const_reassign() {\n  const A = 0;\n  A = 42;           // error: cannot be reassigned\n}\n\n// var x *\n\nfunction var_type() {\n  var A = 0;\n  type A = number;  // error: name already bound\n}\n\nfunction var_class() {\n  var A = 0;\n  class A {}        // error: name already bound\n}\n\nfunction var_let() {\n  var A = 0;\n  let A = 0;        // error: name already bound\n}\n\nfunction var_const() {\n  var A = 0;\n  const A = 0;      // error: name already bound\n}\n\nfunction var_var() {\n  var A = 0;\n  var A = 0;       // OK\n}\n\n// function x *\n\nfunction function_toplevel() {\n  function a() {};\n  function a() {}; // OK\n}\n\nfunction function_block() {\n  {\n    function a() {};\n    function a() {}; // error: name already bound\n  }\n}\n\n// corner cases\n\nfunction var_shadow_nested_scope() {\n  {\n    let x = 0;\n    {\n      var x = 0; // error: name already bound\n    }\n  }\n}\n\nfunction type_shadow_nested_scope() {\n  {\n    let x = 0;\n    {\n      type x = string; // error: name already bound\n    }\n  }\n}\n\n// fn params name clash\n\nfunction fn_params_name_clash(x, x /* error: x already bound */) {}\nfunction fn_params_clash_fn_binding(x,y) {\n  let x = 0; // error: x already bound\n  var y = 0; // OK\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow\n * test errors on illegal rebinding/reassignment\n *\n *       type class let const var (reassign)\n * type  x    x      x   x     x   x\n * class x    x      x   x     x\n * let   x    x      x   x     x\n * const x    x      x   x     x   x\n * var   x    x      x   x\n */\n\n// type x *\n\nfunction type_type() {\n  type A = number;\n  type A = number; // error: name already bound\n}\n\nfunction type_class() {\n  type A = number;\n  class A {} // error: name already bound\n}\n\nfunction type_let() {\n  type A = number;\n  let A = 0; // error: name already bound\n}\n\nfunction type_const() {\n  type A = number;\n  const A = 0; // error: name already bound\n}\n\nfunction type_var() {\n  type A = number;\n  var A = 0; // error: name already bound\n}\n\nfunction type_reassign() {\n  type A = number;\n  A = 42; // error: type alias ref'd from value pos\n}\n\n// class x *\n\nfunction class_type() {\n  class A {}\n  type A = number; // error: name already bound\n}\n\nfunction class_class() {\n  class A {}\n  class A {} // error: name already bound\n}\n\nfunction class_let() {\n  class A {}\n  let A = 0; // error: name already bound\n}\n\nfunction class_const() {\n  class A {}\n  const A = 0; // error: name already bound\n}\n\nfunction class_var() {\n  class A {}\n  var A = 0; // error: name already bound\n}\n\n// let x *\n\nfunction let_type() {\n  let A = 0;\n  type A = number; // error: name already bound\n}\n\nfunction let_class() {\n  let A = 0;\n  class A {} // error: name already bound\n}\n\nfunction let_let() {\n  let A = 0;\n  let A = 0; // error: name already bound\n}\n\nfunction let_const() {\n  let A = 0;\n  const A = 0; // error: name already bound\n}\n\nfunction let_var() {\n  let A = 0;\n  var A = 0; // error: name already bound\n}\n\n// const x *\n\nfunction const_type() {\n  const A = 0;\n  type A = number; // error: name already bound\n}\n\nfunction const_class() {\n  const A = 0;\n  class A {} // error: name already bound\n}\n\nfunction const_let() {\n  const A = 0;\n  let A = 0; // error: name already bound\n}\n\nfunction const_const() {\n  const A = 0;\n  const A = 0; // error: name already bound\n}\n\nfunction const_var() {\n  const A = 0;\n  var A = 0; // error: name already bound\n}\n\nfunction const_reassign() {\n  const A = 0;\n  A = 42; // error: cannot be reassigned\n}\n\n// var x *\n\nfunction var_type() {\n  var A = 0;\n  type A = number; // error: name already bound\n}\n\nfunction var_class() {\n  var A = 0;\n  class A {} // error: name already bound\n}\n\nfunction var_let() {\n  var A = 0;\n  let A = 0; // error: name already bound\n}\n\nfunction var_const() {\n  var A = 0;\n  const A = 0; // error: name already bound\n}\n\nfunction var_var() {\n  var A = 0;\n  var A = 0; // OK\n}\n\n// function x *\n\nfunction function_toplevel() {\n  function a() {}\n  function a() {} // OK\n}\n\nfunction function_block() {\n  {\n    function a() {}\n    function a() {} // error: name already bound\n  }\n}\n\n// corner cases\n\nfunction var_shadow_nested_scope() {\n  {\n    let x = 0;\n    {\n      var x = 0; // error: name already bound\n    }\n  }\n}\n\nfunction type_shadow_nested_scope() {\n  {\n    let x = 0;\n    {\n      type x = string; // error: name already bound\n    }\n  }\n}\n\n// fn params name clash\n\nfunction fn_params_name_clash(x, x /* error: x already bound */) {}\nfunction fn_params_clash_fn_binding(x, y) {\n  let x = 0; // error: x already bound\n  var y = 0; // OK\n}\n\n`;\n\nexports[`scope.js 1`] = `\nfunction block_scope() {\n  let a: number = 0;\n  var b: number = 0;\n  {\n    let a = \"\"; // ok: local to block\n    var b = \"\"; // error: string ~> number\n  }\n}\n\nfunction switch_scope(x: string) {\n  let a: number = 0;\n  var b: number = 0;\n  switch (x) {\n    case \"foo\":\n      let a = \"\"; // ok: local to switch\n      var b = \"\"; // error: string ~> number\n      break;\n    case \"bar\":\n      let a = \"\"; // error: a already bound in switch\n      break;\n  }\n}\n\n// a switch is a single lexical scope, so lets and non-disjoint\n// cases can mix in odd ways. our support for edge cases is not\n// yet perfect.\nfunction switch_scope2(x: number) {\n  switch (x) {\n    case 0:\n     a = \"\";     // error: assign before declaration\n     break;\n    case 1:\n     var b = a;  // error: use before declaration\n     break;\n    case 2:\n      let a = \"\";\n      break;\n    case 3:\n      a = \"\";     // error: skipped initializer\n      break;\n    case 4:\n      var c:string = a;  // error: skipped initializer\n      break;\n  }\n  a = \"\"; // error: a no longer in scope\n}\n\nfunction try_scope() {\n  let a: number = 0;\n  try {\n    let a = \"\"; // ok\n  } catch (e) {\n    let a = \"\"; // ok\n  } finally {\n    let a = \"\"; // ok\n  }\n}\n\nfunction for_scope_let() {\n  let a: number = 0;\n  for (let a = \"\" /* ok: local to init */;;) {}\n}\n\nfunction for_scope_var() {\n  var a: number = 0;\n  for (var a = \"\" /* error: string ~> number */;;) {}\n}\n\nfunction for_in_scope_let(o: Object) {\n  let a: number = 0;\n  for (let a /* ok: local to init */ in o) {}\n}\n\nfunction for_in_scope_var(o: Object) {\n  var a: number = 0;\n  for (var a /* error: string ~> number */ in o) {}\n}\n\nfunction for_of_scope_let(xs: string[]) {\n  let a: number = 0;\n  for (let a /* ok: local to init */ of xs) {}\n}\n\nfunction for_of_scope_var(xs: string[]) {\n  var a: number = 0;\n  for (var a /* error: string ~> number */ of xs) {}\n}\n\nfunction default_param_1() {\n  // function binding in scope in default expr\n  function f(\n    x: () => string = f // error: number ~> string\n  ): number {\n    return 0;\n  }\n}\n\nfunction default_param_2() {\n  // fn body bindings not visible from param scope\n  let a = \"\";\n  function f0(x = () => a): number {\n    let a = 0;\n    return x(); // error: string ~> number\n  }\n  function f1(x = b /* error: cannot resolve b */): number {\n    let b = 0;\n    return x;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction block_scope() {\n  let a: number = 0;\n  var b: number = 0;\n  {\n    let a = \"\"; // ok: local to block\n    var b = \"\"; // error: string ~> number\n  }\n}\n\nfunction switch_scope(x: string) {\n  let a: number = 0;\n  var b: number = 0;\n  switch (x) {\n    case \"foo\":\n      let a = \"\"; // ok: local to switch\n      var b = \"\"; // error: string ~> number\n      break;\n    case \"bar\":\n      let a = \"\"; // error: a already bound in switch\n      break;\n  }\n}\n\n// a switch is a single lexical scope, so lets and non-disjoint\n// cases can mix in odd ways. our support for edge cases is not\n// yet perfect.\nfunction switch_scope2(x: number) {\n  switch (x) {\n    case 0:\n      a = \"\"; // error: assign before declaration\n      break;\n    case 1:\n      var b = a; // error: use before declaration\n      break;\n    case 2:\n      let a = \"\";\n      break;\n    case 3:\n      a = \"\"; // error: skipped initializer\n      break;\n    case 4:\n      var c: string = a; // error: skipped initializer\n      break;\n  }\n  a = \"\"; // error: a no longer in scope\n}\n\nfunction try_scope() {\n  let a: number = 0;\n  try {\n    let a = \"\"; // ok\n  } catch (e) {\n    let a = \"\"; // ok\n  } finally {\n    let a = \"\"; // ok\n  }\n}\n\nfunction for_scope_let() {\n  let a: number = 0;\n  for (let a = \"\" /* ok: local to init */; ; ) {}\n}\n\nfunction for_scope_var() {\n  var a: number = 0;\n  for (var a = \"\" /* error: string ~> number */; ; ) {}\n}\n\nfunction for_in_scope_let(o: Object) {\n  let a: number = 0;\n  for (let a /* ok: local to init */ in o) {\n  }\n}\n\nfunction for_in_scope_var(o: Object) {\n  var a: number = 0;\n  for (var a /* error: string ~> number */ in o) {\n  }\n}\n\nfunction for_of_scope_let(xs: string[]) {\n  let a: number = 0;\n  for (let a /* ok: local to init */ of xs) {\n  }\n}\n\nfunction for_of_scope_var(xs: string[]) {\n  var a: number = 0;\n  for (var a /* error: string ~> number */ of xs) {\n  }\n}\n\nfunction default_param_1() {\n  // function binding in scope in default expr\n  function f(\n    x: () => string = f // error: number ~> string\n  ): number {\n    return 0;\n  }\n}\n\nfunction default_param_2() {\n  // fn body bindings not visible from param scope\n  let a = \"\";\n  function f0(x = () => a): number {\n    let a = 0;\n    return x(); // error: string ~> number\n  }\n  function f1(x = b /* error: cannot resolve b */): number {\n    let b = 0;\n    return x;\n  }\n}\n\n`;\n\nexports[`tdz.js 1`] = `\n/** @flow */\n\n// -- types ---\n\n// type aliases are hoisted and always available\n\ntype T1 = T2;   // ok\ntype T2 = number;\n\n// --- lets ---\n\n// to be correct, we would\n// - not allow forward refs to lets from value positions,\n// while let is in TDZ.\n// - allow forward refs to lets from type positions.\n//\n// currently we're too lenient about TDZ in closures -\n// from value positions, we currently enforce TDZ only in-scope.\n// this is unsound - a let or const may remain uninitialized when\n// a lambda runs. But a simple conservative approach would prohibit\n// forward references to let/consts from within lambdas entirely,\n// which would be annoying. TODO\n\nfunction f0() {\n  var v = x * c;  // errors, let + const referenced before decl\n  let x = 0;\n  const c = 0;\n}\n\nfunction f1(b) {\n  x = 10;         // error, attempt to write to let before decl\n  let x = 0;\n  if (b) {\n    y = 10;       // error, attempt to write to let before decl\n    let y = 0;\n  }\n}\n\nfunction f2() {\n  {\n    var v = x * c; // errors, let + const referenced before decl\n  }\n  let x = 0;\n  const c = 0;\n}\n\n// functions are let-scoped and hoisted\nfunction f3() {\n  var s: string = foo();          // ok, finds hoisted outer\n  {\n    var n: number = foo();        // ok, finds hoisted inner\n    function foo() { return 0; }\n  }\n  var s2: string = foo();         // ok, hoisted outer not clobbered\n  function foo() { return \"\"; }\n}\n\n// out-of-scope TDZ not enforced. sometimes right...\nfunction f4() {\n  function g() { return x + c; }  // ok, g doesn't run in TDZ\n  let x = 0;\n  const c = 0;\n}\n\n// ...sometimes wrong\nfunction f5() {\n  function g() { return x; }\n  g();          // should error, but doesn't currently\n  let x = 0;\n  const c = 0;\n}\n\n// - from type positions, we currently error on forward refs to any\n// value (i.e., class or function). this is a basic flaw in our\n// phasing of AST traversal, and will be fixed.\n//\n\nvar x: C;       // ok\n\nvar y = new C(); // error: let ref before decl from value position\n\nclass C {}\n\nvar z: C = new C(); // ok\n\n// --- vars ---\n\n// it's possible to annotate a var with a non-maybe type,\n// but leave it uninitialized until later (as long as it's\n// initialized before use)\n\nvar a: number;  // not an error per se - only if used before init\n\nfunction f(n: number) { return n; }\n\nf(a); // error: undefined ~/> number\n\na = 10;\n\nf(a); // ok, a: number (not ?number)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/** @flow */\n\n// -- types ---\n\n// type aliases are hoisted and always available\n\ntype T1 = T2; // ok\ntype T2 = number;\n\n// --- lets ---\n\n// to be correct, we would\n// - not allow forward refs to lets from value positions,\n// while let is in TDZ.\n// - allow forward refs to lets from type positions.\n//\n// currently we're too lenient about TDZ in closures -\n// from value positions, we currently enforce TDZ only in-scope.\n// this is unsound - a let or const may remain uninitialized when\n// a lambda runs. But a simple conservative approach would prohibit\n// forward references to let/consts from within lambdas entirely,\n// which would be annoying. TODO\n\nfunction f0() {\n  var v = x * c; // errors, let + const referenced before decl\n  let x = 0;\n  const c = 0;\n}\n\nfunction f1(b) {\n  x = 10; // error, attempt to write to let before decl\n  let x = 0;\n  if (b) {\n    y = 10; // error, attempt to write to let before decl\n    let y = 0;\n  }\n}\n\nfunction f2() {\n  {\n    var v = x * c; // errors, let + const referenced before decl\n  }\n  let x = 0;\n  const c = 0;\n}\n\n// functions are let-scoped and hoisted\nfunction f3() {\n  var s: string = foo(); // ok, finds hoisted outer\n  {\n    var n: number = foo(); // ok, finds hoisted inner\n    function foo() {\n      return 0;\n    }\n  }\n  var s2: string = foo(); // ok, hoisted outer not clobbered\n  function foo() {\n    return \"\";\n  }\n}\n\n// out-of-scope TDZ not enforced. sometimes right...\nfunction f4() {\n  function g() {\n    return x + c;\n  } // ok, g doesn't run in TDZ\n  let x = 0;\n  const c = 0;\n}\n\n// ...sometimes wrong\nfunction f5() {\n  function g() {\n    return x;\n  }\n  g(); // should error, but doesn't currently\n  let x = 0;\n  const c = 0;\n}\n\n// - from type positions, we currently error on forward refs to any\n// value (i.e., class or function). this is a basic flaw in our\n// phasing of AST traversal, and will be fixed.\n//\n\nvar x: C; // ok\n\nvar y = new C(); // error: let ref before decl from value position\n\nclass C {}\n\nvar z: C = new C(); // ok\n\n// --- vars ---\n\n// it's possible to annotate a var with a non-maybe type,\n// but leave it uninitialized until later (as long as it's\n// initialized before use)\n\nvar a: number; // not an error per se - only if used before init\n\nfunction f(n: number) {\n  return n;\n}\n\nf(a); // error: undefined ~/> number\n\na = 10;\n\nf(a); // ok, a: number (not ?number)\n\n`;\n"
  },
  {
    "path": "tests/flow/binding/const.js",
    "content": "const x = 0;\n\n// errors: const cannot be reassigned\nx++;\nx--;\nx += 0;\nx -= 0;\nx /= 0;\nx %= 0;\nx <<= 0\nx >>= 0;\nx >>>= 0;\nx |= 0;\nx ^= 0;\nx &= 0;\n\n// regression tests -- OK to assign consts like this:\n\nconst { foo } = { foo: \"foo\" }\nconst [ bar ] = [\"bar\"];\n(foo: number); // error: string ~> number\n(bar: number); // error: string ~> number\n\ndeclare var bazzes: { baz: string }[];\nfor (const { baz } of bazzes) {\n  (baz: number); // error: string ~> number\n}\n"
  },
  {
    "path": "tests/flow/binding/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/binding/rebinding.js",
    "content": "/* @flow\n * test errors on illegal rebinding/reassignment\n *\n *       type class let const var (reassign)\n * type  x    x      x   x     x   x\n * class x    x      x   x     x\n * let   x    x      x   x     x\n * const x    x      x   x     x   x\n * var   x    x      x   x\n */\n\n// type x *\n\nfunction type_type() {\n  type A = number;\n  type A = number;  // error: name already bound\n}\n\nfunction type_class() {\n  type A = number;\n  class A {}        // error: name already bound\n}\n\nfunction type_let() {\n  type A = number;\n  let A = 0;        // error: name already bound\n}\n\nfunction type_const() {\n  type A = number;\n  const A = 0;     // error: name already bound\n}\n\nfunction type_var() {\n  type A = number;\n  var A = 0;        // error: name already bound\n}\n\nfunction type_reassign() {\n  type A = number;\n  A = 42;           // error: type alias ref'd from value pos\n}\n\n// class x *\n\nfunction class_type() {\n  class A {}\n  type A = number;  // error: name already bound\n}\n\nfunction class_class() {\n  class A {}\n  class A {}        // error: name already bound\n}\n\nfunction class_let() {\n  class A {}\n  let A = 0;        // error: name already bound\n}\n\nfunction class_const() {\n  class A {}\n  const A = 0;     // error: name already bound\n}\n\nfunction class_var() {\n  class A {}\n  var A = 0;        // error: name already bound\n}\n\n// let x *\n\nfunction let_type() {\n  let A = 0;\n  type A = number;  // error: name already bound\n}\n\nfunction let_class() {\n  let A = 0;\n  class A {}        // error: name already bound\n}\n\nfunction let_let() {\n  let A = 0;\n  let A = 0;        // error: name already bound\n}\n\nfunction let_const() {\n  let A = 0;\n  const A = 0;     // error: name already bound\n}\n\nfunction let_var() {\n  let A = 0;\n  var A = 0;        // error: name already bound\n}\n\n// const x *\n\nfunction const_type() {\n  const A = 0;\n  type A = number;  // error: name already bound\n}\n\nfunction const_class() {\n  const A = 0;\n  class A {}        // error: name already bound\n}\n\nfunction const_let() {\n  const A = 0;\n  let A = 0;        // error: name already bound\n}\n\nfunction const_const() {\n  const A = 0;\n  const A = 0;     // error: name already bound\n}\n\nfunction const_var() {\n  const A = 0;\n  var A = 0;        // error: name already bound\n}\n\nfunction const_reassign() {\n  const A = 0;\n  A = 42;           // error: cannot be reassigned\n}\n\n// var x *\n\nfunction var_type() {\n  var A = 0;\n  type A = number;  // error: name already bound\n}\n\nfunction var_class() {\n  var A = 0;\n  class A {}        // error: name already bound\n}\n\nfunction var_let() {\n  var A = 0;\n  let A = 0;        // error: name already bound\n}\n\nfunction var_const() {\n  var A = 0;\n  const A = 0;      // error: name already bound\n}\n\nfunction var_var() {\n  var A = 0;\n  var A = 0;       // OK\n}\n\n// function x *\n\nfunction function_toplevel() {\n  function a() {};\n  function a() {}; // OK\n}\n\nfunction function_block() {\n  {\n    function a() {};\n    function a() {}; // error: name already bound\n  }\n}\n\n// corner cases\n\nfunction var_shadow_nested_scope() {\n  {\n    let x = 0;\n    {\n      var x = 0; // error: name already bound\n    }\n  }\n}\n\nfunction type_shadow_nested_scope() {\n  {\n    let x = 0;\n    {\n      type x = string; // error: name already bound\n    }\n  }\n}\n\n// fn params name clash\n\nfunction fn_params_name_clash(x, x /* error: x already bound */) {}\nfunction fn_params_clash_fn_binding(x,y) {\n  let x = 0; // error: x already bound\n  var y = 0; // OK\n}\n"
  },
  {
    "path": "tests/flow/binding/scope.js",
    "content": "function block_scope() {\n  let a: number = 0;\n  var b: number = 0;\n  {\n    let a = \"\"; // ok: local to block\n    var b = \"\"; // error: string ~> number\n  }\n}\n\nfunction switch_scope(x: string) {\n  let a: number = 0;\n  var b: number = 0;\n  switch (x) {\n    case \"foo\":\n      let a = \"\"; // ok: local to switch\n      var b = \"\"; // error: string ~> number\n      break;\n    case \"bar\":\n      let a = \"\"; // error: a already bound in switch\n      break;\n  }\n}\n\n// a switch is a single lexical scope, so lets and non-disjoint\n// cases can mix in odd ways. our support for edge cases is not\n// yet perfect.\nfunction switch_scope2(x: number) {\n  switch (x) {\n    case 0:\n     a = \"\";     // error: assign before declaration\n     break;\n    case 1:\n     var b = a;  // error: use before declaration\n     break;\n    case 2:\n      let a = \"\";\n      break;\n    case 3:\n      a = \"\";     // error: skipped initializer\n      break;\n    case 4:\n      var c:string = a;  // error: skipped initializer\n      break;\n  }\n  a = \"\"; // error: a no longer in scope\n}\n\nfunction try_scope() {\n  let a: number = 0;\n  try {\n    let a = \"\"; // ok\n  } catch (e) {\n    let a = \"\"; // ok\n  } finally {\n    let a = \"\"; // ok\n  }\n}\n\nfunction for_scope_let() {\n  let a: number = 0;\n  for (let a = \"\" /* ok: local to init */;;) {}\n}\n\nfunction for_scope_var() {\n  var a: number = 0;\n  for (var a = \"\" /* error: string ~> number */;;) {}\n}\n\nfunction for_in_scope_let(o: Object) {\n  let a: number = 0;\n  for (let a /* ok: local to init */ in o) {}\n}\n\nfunction for_in_scope_var(o: Object) {\n  var a: number = 0;\n  for (var a /* error: string ~> number */ in o) {}\n}\n\nfunction for_of_scope_let(xs: string[]) {\n  let a: number = 0;\n  for (let a /* ok: local to init */ of xs) {}\n}\n\nfunction for_of_scope_var(xs: string[]) {\n  var a: number = 0;\n  for (var a /* error: string ~> number */ of xs) {}\n}\n\nfunction default_param_1() {\n  // function binding in scope in default expr\n  function f(\n    x: () => string = f // error: number ~> string\n  ): number {\n    return 0;\n  }\n}\n\nfunction default_param_2() {\n  // fn body bindings not visible from param scope\n  let a = \"\";\n  function f0(x = () => a): number {\n    let a = 0;\n    return x(); // error: string ~> number\n  }\n  function f1(x = b /* error: cannot resolve b */): number {\n    let b = 0;\n    return x;\n  }\n}\n"
  },
  {
    "path": "tests/flow/binding/tdz.js",
    "content": "/** @flow */\n\n// -- types ---\n\n// type aliases are hoisted and always available\n\ntype T1 = T2;   // ok\ntype T2 = number;\n\n// --- lets ---\n\n// to be correct, we would\n// - not allow forward refs to lets from value positions,\n// while let is in TDZ.\n// - allow forward refs to lets from type positions.\n//\n// currently we're too lenient about TDZ in closures -\n// from value positions, we currently enforce TDZ only in-scope.\n// this is unsound - a let or const may remain uninitialized when\n// a lambda runs. But a simple conservative approach would prohibit\n// forward references to let/consts from within lambdas entirely,\n// which would be annoying. TODO\n\nfunction f0() {\n  var v = x * c;  // errors, let + const referenced before decl\n  let x = 0;\n  const c = 0;\n}\n\nfunction f1(b) {\n  x = 10;         // error, attempt to write to let before decl\n  let x = 0;\n  if (b) {\n    y = 10;       // error, attempt to write to let before decl\n    let y = 0;\n  }\n}\n\nfunction f2() {\n  {\n    var v = x * c; // errors, let + const referenced before decl\n  }\n  let x = 0;\n  const c = 0;\n}\n\n// functions are let-scoped and hoisted\nfunction f3() {\n  var s: string = foo();          // ok, finds hoisted outer\n  {\n    var n: number = foo();        // ok, finds hoisted inner\n    function foo() { return 0; }\n  }\n  var s2: string = foo();         // ok, hoisted outer not clobbered\n  function foo() { return \"\"; }\n}\n\n// out-of-scope TDZ not enforced. sometimes right...\nfunction f4() {\n  function g() { return x + c; }  // ok, g doesn't run in TDZ\n  let x = 0;\n  const c = 0;\n}\n\n// ...sometimes wrong\nfunction f5() {\n  function g() { return x; }\n  g();          // should error, but doesn't currently\n  let x = 0;\n  const c = 0;\n}\n\n// - from type positions, we currently error on forward refs to any\n// value (i.e., class or function). this is a basic flaw in our\n// phasing of AST traversal, and will be fixed.\n//\n\nvar x: C;       // ok\n\nvar y = new C(); // error: let ref before decl from value position\n\nclass C {}\n\nvar z: C = new C(); // ok\n\n// --- vars ---\n\n// it's possible to annotate a var with a non-maybe type,\n// but leave it uninitialized until later (as long as it's\n// initialized before use)\n\nvar a: number;  // not an error per se - only if used before init\n\nfunction f(n: number) { return n; }\n\nf(a); // error: undefined ~/> number\n\na = 10;\n\nf(a); // ok, a: number (not ?number)\n"
  },
  {
    "path": "tests/flow/bom/FormData.js",
    "content": "/* @flow */\n\n// constructor\nconst a: FormData = new FormData(); // correct\nnew FormData(''); // incorrect\nnew FormData(document.createElement('input')); // incorrect\nnew FormData(document.createElement('form')); // correct\n\n// has\nconst b: boolean = a.has('foo'); // correct\n\n// get\nconst c: ?(string | File) = a.get('foo'); // correct\nconst d: string = a.get('foo'); // incorrect\nconst e: Blob = a.get('foo'); // incorrect\nconst f: ?(string | File | Blob) = a.get('foo'); // incorrect\na.get(2); // incorrect\n\n// getAll\nconst a1: Array<string | File> = a.getAll('foo'); // correct\nconst a2: Array<string | File | number> = a.getAll('foo'); // incorrect\nconst a3: Array<string | Blob | File> = a.getAll('foo'); // incorrect\na.getAll(23); // incorrect\n\n// set\na.set('foo', 'bar'); // correct\na.set('foo', {}); // incorrect\na.set(2, 'bar'); // incorrect\na.set('foo', 'bar', 'baz'); // incorrect\na.set('bar', new File([], 'q')) // correct\na.set('bar', new File([], 'q'), 'x') // correct\na.set('bar', new File([], 'q'), 2) // incorrect\na.set('bar', new Blob) // correct\na.set('bar', new Blob, 'x') // correct\na.set('bar', new Blob, 2) // incorrect\n\n// append\na.append('foo', 'bar'); // correct\na.append('foo', {}); // incorrect\na.append(2, 'bar'); // incorrect\na.append('foo', 'bar', 'baz'); // incorrect\na.append('foo', 'bar'); // correct\na.append('bar', new File([], 'q')) // correct\na.append('bar', new File([], 'q'), 'x') // correct\na.append('bar', new File([], 'q'), 2) // incorrect\na.append('bar', new Blob) // correct\na.append('bar', new Blob, 'x') // correct\na.append('bar', new Blob, 2) // incorrect\n\n// delete\na.delete('xx'); // correct\na.delete(3); // incorrect\n\n// keys\nfor (let x: string of a.keys()) {} // correct\nfor (let x: number of a.keys()) {} // incorrect\n\n// values\nfor (let x: string | File of a.values()) {} // correct\nfor (let x: string | File | Blob of a.values()) {} // incorrect\n\n// entries\nfor (let [x, y]: [string, string | File] of a.entries()) {} // correct\nfor (let [x, y]: [string, string | File | Blob] of a.entries()) {} // incorrect\nfor (let [x, y]: [number, string] of a.entries()) {} // incorrect\nfor (let [x, y]: [string, number] of a.entries()) {} // incorrect\nfor (let [x, y]: [number, number] of a.entries()) {} // incorrect\n"
  },
  {
    "path": "tests/flow/bom/MutationObserver.js",
    "content": "/* @flow */\n\n// constructor\nfunction callback(arr: Array<MutationRecord>, observer: MutationObserver): void {\n  return;\n}\nconst o: MutationObserver = new MutationObserver(callback); // correct\nnew MutationObserver((arr: Array<MutationRecord>) => true); // correct\nnew MutationObserver(() => {}); // correct\nnew MutationObserver(); // incorrect\nnew MutationObserver(42); // incorrect\nnew MutationObserver((n: number) => {}); // incorrect\n\n// observe\nconst div = document.createElement('div');\no.observe(div, { attributes: true, attributeFilter: ['style'] }); // correct\no.observe(div, { characterData: true, invalid: true }); // correct\no.observe(); // incorrect\no.observe('invalid'); // incorrect\no.observe(div); // incorrect\no.observe(div, {}); // incorrect\no.observe(div, { subtree: true }); // incorrect\no.observe(div, { attributes: true, attributeFilter: true }); // incorrect\n\n// takeRecords\no.takeRecords(); // correct\n\n// disconnect\no.disconnect(); // correct\n"
  },
  {
    "path": "tests/flow/bom/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`FormData.js 1`] = `\n/* @flow */\n\n// constructor\nconst a: FormData = new FormData(); // correct\nnew FormData(''); // incorrect\nnew FormData(document.createElement('input')); // incorrect\nnew FormData(document.createElement('form')); // correct\n\n// has\nconst b: boolean = a.has('foo'); // correct\n\n// get\nconst c: ?(string | File) = a.get('foo'); // correct\nconst d: string = a.get('foo'); // incorrect\nconst e: Blob = a.get('foo'); // incorrect\nconst f: ?(string | File | Blob) = a.get('foo'); // incorrect\na.get(2); // incorrect\n\n// getAll\nconst a1: Array<string | File> = a.getAll('foo'); // correct\nconst a2: Array<string | File | number> = a.getAll('foo'); // incorrect\nconst a3: Array<string | Blob | File> = a.getAll('foo'); // incorrect\na.getAll(23); // incorrect\n\n// set\na.set('foo', 'bar'); // correct\na.set('foo', {}); // incorrect\na.set(2, 'bar'); // incorrect\na.set('foo', 'bar', 'baz'); // incorrect\na.set('bar', new File([], 'q')) // correct\na.set('bar', new File([], 'q'), 'x') // correct\na.set('bar', new File([], 'q'), 2) // incorrect\na.set('bar', new Blob) // correct\na.set('bar', new Blob, 'x') // correct\na.set('bar', new Blob, 2) // incorrect\n\n// append\na.append('foo', 'bar'); // correct\na.append('foo', {}); // incorrect\na.append(2, 'bar'); // incorrect\na.append('foo', 'bar', 'baz'); // incorrect\na.append('foo', 'bar'); // correct\na.append('bar', new File([], 'q')) // correct\na.append('bar', new File([], 'q'), 'x') // correct\na.append('bar', new File([], 'q'), 2) // incorrect\na.append('bar', new Blob) // correct\na.append('bar', new Blob, 'x') // correct\na.append('bar', new Blob, 2) // incorrect\n\n// delete\na.delete('xx'); // correct\na.delete(3); // incorrect\n\n// keys\nfor (let x: string of a.keys()) {} // correct\nfor (let x: number of a.keys()) {} // incorrect\n\n// values\nfor (let x: string | File of a.values()) {} // correct\nfor (let x: string | File | Blob of a.values()) {} // incorrect\n\n// entries\nfor (let [x, y]: [string, string | File] of a.entries()) {} // correct\nfor (let [x, y]: [string, string | File | Blob] of a.entries()) {} // incorrect\nfor (let [x, y]: [number, string] of a.entries()) {} // incorrect\nfor (let [x, y]: [string, number] of a.entries()) {} // incorrect\nfor (let [x, y]: [number, number] of a.entries()) {} // incorrect\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n// constructor\nconst a: FormData = new FormData(); // correct\nnew FormData(\"\"); // incorrect\nnew FormData(document.createElement(\"input\")); // incorrect\nnew FormData(document.createElement(\"form\")); // correct\n\n// has\nconst b: boolean = a.has(\"foo\"); // correct\n\n// get\nconst c: ?(string | File) = a.get(\"foo\"); // correct\nconst d: string = a.get(\"foo\"); // incorrect\nconst e: Blob = a.get(\"foo\"); // incorrect\nconst f: ?(string | File | Blob) = a.get(\"foo\"); // incorrect\na.get(2); // incorrect\n\n// getAll\nconst a1: Array<string | File> = a.getAll(\"foo\"); // correct\nconst a2: Array<string | File | number> = a.getAll(\"foo\"); // incorrect\nconst a3: Array<string | Blob | File> = a.getAll(\"foo\"); // incorrect\na.getAll(23); // incorrect\n\n// set\na.set(\"foo\", \"bar\"); // correct\na.set(\"foo\", {}); // incorrect\na.set(2, \"bar\"); // incorrect\na.set(\"foo\", \"bar\", \"baz\"); // incorrect\na.set(\"bar\", new File([], \"q\")); // correct\na.set(\"bar\", new File([], \"q\"), \"x\"); // correct\na.set(\"bar\", new File([], \"q\"), 2); // incorrect\na.set(\"bar\", new Blob()); // correct\na.set(\"bar\", new Blob(), \"x\"); // correct\na.set(\"bar\", new Blob(), 2); // incorrect\n\n// append\na.append(\"foo\", \"bar\"); // correct\na.append(\"foo\", {}); // incorrect\na.append(2, \"bar\"); // incorrect\na.append(\"foo\", \"bar\", \"baz\"); // incorrect\na.append(\"foo\", \"bar\"); // correct\na.append(\"bar\", new File([], \"q\")); // correct\na.append(\"bar\", new File([], \"q\"), \"x\"); // correct\na.append(\"bar\", new File([], \"q\"), 2); // incorrect\na.append(\"bar\", new Blob()); // correct\na.append(\"bar\", new Blob(), \"x\"); // correct\na.append(\"bar\", new Blob(), 2); // incorrect\n\n// delete\na.delete(\"xx\"); // correct\na.delete(3); // incorrect\n\n// keys\nfor (let x: string of a.keys()) {\n} // correct\nfor (let x: number of a.keys()) {\n} // incorrect\n\n// values\nfor (let x: string | File of a.values()) {\n} // correct\nfor (let x: string | File | Blob of a.values()) {\n} // incorrect\n\n// entries\nfor (let [x, y]: [string, string | File] of a.entries()) {\n} // correct\nfor (let [x, y]: [string, string | File | Blob] of a.entries()) {\n} // incorrect\nfor (let [x, y]: [number, string] of a.entries()) {\n} // incorrect\nfor (let [x, y]: [string, number] of a.entries()) {\n} // incorrect\nfor (let [x, y]: [number, number] of a.entries()) {\n} // incorrect\n\n`;\n\nexports[`MutationObserver.js 1`] = `\n/* @flow */\n\n// constructor\nfunction callback(arr: Array<MutationRecord>, observer: MutationObserver): void {\n  return;\n}\nconst o: MutationObserver = new MutationObserver(callback); // correct\nnew MutationObserver((arr: Array<MutationRecord>) => true); // correct\nnew MutationObserver(() => {}); // correct\nnew MutationObserver(); // incorrect\nnew MutationObserver(42); // incorrect\nnew MutationObserver((n: number) => {}); // incorrect\n\n// observe\nconst div = document.createElement('div');\no.observe(div, { attributes: true, attributeFilter: ['style'] }); // correct\no.observe(div, { characterData: true, invalid: true }); // correct\no.observe(); // incorrect\no.observe('invalid'); // incorrect\no.observe(div); // incorrect\no.observe(div, {}); // incorrect\no.observe(div, { subtree: true }); // incorrect\no.observe(div, { attributes: true, attributeFilter: true }); // incorrect\n\n// takeRecords\no.takeRecords(); // correct\n\n// disconnect\no.disconnect(); // correct\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n// constructor\nfunction callback(\n  arr: Array<MutationRecord>,\n  observer: MutationObserver\n): void {\n  return;\n}\nconst o: MutationObserver = new MutationObserver(callback); // correct\nnew MutationObserver((arr: Array<MutationRecord>) => true); // correct\nnew MutationObserver(() => {}); // correct\nnew MutationObserver(); // incorrect\nnew MutationObserver(42); // incorrect\nnew MutationObserver((n: number) => {}); // incorrect\n\n// observe\nconst div = document.createElement(\"div\");\no.observe(div, { attributes: true, attributeFilter: [\"style\"] }); // correct\no.observe(div, { characterData: true, invalid: true }); // correct\no.observe(); // incorrect\no.observe(\"invalid\"); // incorrect\no.observe(div); // incorrect\no.observe(div, {}); // incorrect\no.observe(div, { subtree: true }); // incorrect\no.observe(div, { attributes: true, attributeFilter: true }); // incorrect\n\n// takeRecords\no.takeRecords(); // correct\n\n// disconnect\no.disconnect(); // correct\n\n`;\n"
  },
  {
    "path": "tests/flow/bom/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/bounded_poly/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`scope.js 1`] = `\nfunction foo<X, Y:X>(x:X, y:Y):void { }\nfoo(0, \"\");\n\nfunction bar<X:number, Y:X>(x:X, y:Y): number { return y*0; }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo<X, Y: X>(x: X, y: Y): void {}\nfoo(0, \"\");\n\nfunction bar<X: number, Y: X>(x: X, y: Y): number {\n  return y * 0;\n}\n\n`;\n\nexports[`test.js 1`] = `\nfunction foo<T: number>(x: T): T {\n    var _ = x * 1; // OK\n    var y: string = x; // error\n    return x; // OK\n}\n\nclass C<T: number> {\n    bar<U: number>(x: U): T {\n        return x; // error, since T: number and U: number does not imply U: T\n    }\n    qux<U: T>(x: U): T {\n        var _ = x * 1; // OK, since T: number and U: T implies U: number\n        var y: string = x; // error\n        return x; // OK, since U: T\n    }\n}\n\nfunction example<T: {x: number}>(o: T): T { o.x = 0; return o; }\nvar obj1: {x: number; y: string} = example({x: 0, y: \"\"});\nvar obj2: {x: number} = example({x: 0});\n\nvar c: C<string> = new C; // error, since T = string is incompatible with number\nvar q: number = c.qux(0);\n/* 2 more errors, since argument U = number is incompatible with T = string, and\n * result T = string is incompatible with number */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo<T: number>(x: T): T {\n  var _ = x * 1; // OK\n  var y: string = x; // error\n  return x; // OK\n}\n\nclass C<T: number> {\n  bar<U: number>(x: U): T {\n    return x; // error, since T: number and U: number does not imply U: T\n  }\n  qux<U: T>(x: U): T {\n    var _ = x * 1; // OK, since T: number and U: T implies U: number\n    var y: string = x; // error\n    return x; // OK, since U: T\n  }\n}\n\nfunction example<T: { x: number }>(o: T): T {\n  o.x = 0;\n  return o;\n}\nvar obj1: { x: number, y: string } = example({ x: 0, y: \"\" });\nvar obj2: { x: number } = example({ x: 0 });\n\nvar c: C<string> = new C(); // error, since T = string is incompatible with number\nvar q: number = c.qux(0);\n/* 2 more errors, since argument U = number is incompatible with T = string, and\n * result T = string is incompatible with number */\n\n`;\n"
  },
  {
    "path": "tests/flow/bounded_poly/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/bounded_poly/scope.js",
    "content": "function foo<X, Y:X>(x:X, y:Y):void { }\nfoo(0, \"\");\n\nfunction bar<X:number, Y:X>(x:X, y:Y): number { return y*0; }\n"
  },
  {
    "path": "tests/flow/bounded_poly/test.js",
    "content": "function foo<T: number>(x: T): T {\n    var _ = x * 1; // OK\n    var y: string = x; // error\n    return x; // OK\n}\n\nclass C<T: number> {\n    bar<U: number>(x: U): T {\n        return x; // error, since T: number and U: number does not imply U: T\n    }\n    qux<U: T>(x: U): T {\n        var _ = x * 1; // OK, since T: number and U: T implies U: number\n        var y: string = x; // error\n        return x; // OK, since U: T\n    }\n}\n\nfunction example<T: {x: number}>(o: T): T { o.x = 0; return o; }\nvar obj1: {x: number; y: string} = example({x: 0, y: \"\"});\nvar obj2: {x: number} = example({x: 0});\n\nvar c: C<string> = new C; // error, since T = string is incompatible with number\nvar q: number = c.qux(0);\n/* 2 more errors, since argument U = number is incompatible with T = string, and\n * result T = string is incompatible with number */\n"
  },
  {
    "path": "tests/flow/break/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`break.js 1`] = `\nfunction foo(b) {\n    var x = b ? null: false;\n    var z;\n    while(b) {\n        if (x == null) { z = \"\"; break; }\n        var y:number = x; // error: boolean !~> number\n    }\n    var w:number = z; // 2 errors: ?string !~> number\n}\n\nfunction bar(b) {\n    var x = b ? null: false;\n    if (x == null) return;\n    switch (\"\") {\n    case 0:\n        var y:number = x; // error: boolean !~> number\n        x = \"\";\n    case 1:\n        var z:number = x; // 2 errors: (boolean | string) !~> number\n        break;\n    case 2:\n    }\n    var w:number = x; // 2 errors: (boolean | string) !~> number\n}\n\nfunction bar2(b) {\n    var x = b ? null: false;\n    if (x == null) return;\n    switch (\"\") {\n    case 0: {\n      let y:number = x; // error: boolean !~> number\n      x = \"\";\n    }\n    case 1: {\n      let z:number = x; // 2 errors: (boolean | string) !~> number\n      break;\n    }\n    case 2:\n    }\n    var w:number = x; // 2 errors: (boolean | string) !~> number\n}\n\nfunction qux(b) {\n    var z = 0;\n    while(b) {\n        var y:number = z;\n        if (b) { z = \"\"; continue; } // error: string !~> number\n        z = 0;\n    }\n    var w:number = z; // error: string !~> number\n}\n\n// same basic test as foo(), but with const. probes the\n// logic that still uses havoc to do env resets.\nfunction test_const() {\n  let st: string = 'abc';\n\n  for (let i = 1; i < 100; i++) {\n    const fooRes: ?string = \"HEY\";\n    if (!fooRes) {\n      break;\n    }\n\n    st = fooRes; // no error\n  }\n\n  return st;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo(b) {\n  var x = b ? null : false;\n  var z;\n  while (b) {\n    if (x == null) {\n      z = \"\";\n      break;\n    }\n    var y: number = x; // error: boolean !~> number\n  }\n  var w: number = z; // 2 errors: ?string !~> number\n}\n\nfunction bar(b) {\n  var x = b ? null : false;\n  if (x == null) return;\n  switch (\"\") {\n    case 0:\n      var y: number = x; // error: boolean !~> number\n      x = \"\";\n    case 1:\n      var z: number = x; // 2 errors: (boolean | string) !~> number\n      break;\n    case 2:\n  }\n  var w: number = x; // 2 errors: (boolean | string) !~> number\n}\n\nfunction bar2(b) {\n  var x = b ? null : false;\n  if (x == null) return;\n  switch (\"\") {\n    case 0: {\n      let y: number = x; // error: boolean !~> number\n      x = \"\";\n    }\n    case 1: {\n      let z: number = x; // 2 errors: (boolean | string) !~> number\n      break;\n    }\n    case 2:\n  }\n  var w: number = x; // 2 errors: (boolean | string) !~> number\n}\n\nfunction qux(b) {\n  var z = 0;\n  while (b) {\n    var y: number = z;\n    if (b) {\n      z = \"\";\n      continue;\n    } // error: string !~> number\n    z = 0;\n  }\n  var w: number = z; // error: string !~> number\n}\n\n// same basic test as foo(), but with const. probes the\n// logic that still uses havoc to do env resets.\nfunction test_const() {\n  let st: string = \"abc\";\n\n  for (let i = 1; i < 100; i++) {\n    const fooRes: ?string = \"HEY\";\n    if (!fooRes) {\n      break;\n    }\n\n    st = fooRes; // no error\n  }\n\n  return st;\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/break/break.js",
    "content": "function foo(b) {\n    var x = b ? null: false;\n    var z;\n    while(b) {\n        if (x == null) { z = \"\"; break; }\n        var y:number = x; // error: boolean !~> number\n    }\n    var w:number = z; // 2 errors: ?string !~> number\n}\n\nfunction bar(b) {\n    var x = b ? null: false;\n    if (x == null) return;\n    switch (\"\") {\n    case 0:\n        var y:number = x; // error: boolean !~> number\n        x = \"\";\n    case 1:\n        var z:number = x; // 2 errors: (boolean | string) !~> number\n        break;\n    case 2:\n    }\n    var w:number = x; // 2 errors: (boolean | string) !~> number\n}\n\nfunction bar2(b) {\n    var x = b ? null: false;\n    if (x == null) return;\n    switch (\"\") {\n    case 0: {\n      let y:number = x; // error: boolean !~> number\n      x = \"\";\n    }\n    case 1: {\n      let z:number = x; // 2 errors: (boolean | string) !~> number\n      break;\n    }\n    case 2:\n    }\n    var w:number = x; // 2 errors: (boolean | string) !~> number\n}\n\nfunction qux(b) {\n    var z = 0;\n    while(b) {\n        var y:number = z;\n        if (b) { z = \"\"; continue; } // error: string !~> number\n        z = 0;\n    }\n    var w:number = z; // error: string !~> number\n}\n\n// same basic test as foo(), but with const. probes the\n// logic that still uses havoc to do env resets.\nfunction test_const() {\n  let st: string = 'abc';\n\n  for (let i = 1; i < 100; i++) {\n    const fooRes: ?string = \"HEY\";\n    if (!fooRes) {\n      break;\n    }\n\n    st = fooRes; // no error\n  }\n\n  return st;\n}\n"
  },
  {
    "path": "tests/flow/break/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/builtin_uses/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nvar o = Object.freeze({ foo: 0 });\n(o.foo: string);\nmodule.exports = o;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar o = Object.freeze({ foo: 0 });\n(o.foo: string);\nmodule.exports = o;\n\n`;\n\nexports[`test2.js 1`] = `\nvar o = require('./test');\n(o.foo: string);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar o = require(\"./test\");\n(o.foo: string);\n\n`;\n"
  },
  {
    "path": "tests/flow/builtin_uses/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/builtin_uses/test.js",
    "content": "var o = Object.freeze({ foo: 0 });\n(o.foo: string);\nmodule.exports = o;\n"
  },
  {
    "path": "tests/flow/builtin_uses/test2.js",
    "content": "var o = require('./test');\n(o.foo: string);\n"
  },
  {
    "path": "tests/flow/builtins/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`array.js 1`] = `\nvar a = [\"...\"];\nvar b = a.map (function (x) { return 0; });\nvar c: string = b[0]; // error: number !~> string\n\nvar array = [];\nfunction f() {\n    array = array.map (function () { return \"...\"; });\n    var x:number = array[0]; // error: string !~> number\n}\n\nvar Foo = require('./genericfoo');\nvar foo = new Foo();\nfunction g() {\n    var foo1 = foo.map (function() { return \"...\"; });\n    var x:number = foo1.get(); // error: string !~> number\n    foo = foo1;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar a = [\"...\"];\nvar b = a.map(function(x) {\n  return 0;\n});\nvar c: string = b[0]; // error: number !~> string\n\nvar array = [];\nfunction f() {\n  array = array.map(function() {\n    return \"...\";\n  });\n  var x: number = array[0]; // error: string !~> number\n}\n\nvar Foo = require(\"./genericfoo\");\nvar foo = new Foo();\nfunction g() {\n  var foo1 = foo.map(function() {\n    return \"...\";\n  });\n  var x: number = foo1.get(); // error: string !~> number\n  foo = foo1;\n}\n\n`;\n\nexports[`genericfoo.js 1`] = `\nclass Foo<T> {\n    x:T;\n    self():Foo<T> { return this; }\n    map<U>(callbackfn: () => U): Foo<U> { return new Foo(); }\n    set(x:T): void { }\n    get(): T { return this.x; }\n}\n\nmodule.exports = Foo;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass Foo<T> {\n  x: T;\n  self(): Foo<T> {\n    return this;\n  }\n  map<U>(callbackfn: () => U): Foo<U> {\n    return new Foo();\n  }\n  set(x: T): void {}\n  get(): T {\n    return this.x;\n  }\n}\n\nmodule.exports = Foo;\n\n`;\n"
  },
  {
    "path": "tests/flow/builtins/array.js",
    "content": "var a = [\"...\"];\nvar b = a.map (function (x) { return 0; });\nvar c: string = b[0]; // error: number !~> string\n\nvar array = [];\nfunction f() {\n    array = array.map (function () { return \"...\"; });\n    var x:number = array[0]; // error: string !~> number\n}\n\nvar Foo = require('./genericfoo');\nvar foo = new Foo();\nfunction g() {\n    var foo1 = foo.map (function() { return \"...\"; });\n    var x:number = foo1.get(); // error: string !~> number\n    foo = foo1;\n}\n"
  },
  {
    "path": "tests/flow/builtins/genericfoo.js",
    "content": "class Foo<T> {\n    x:T;\n    self():Foo<T> { return this; }\n    map<U>(callbackfn: () => U): Foo<U> { return new Foo(); }\n    set(x:T): void { }\n    get(): T { return this.x; }\n}\n\nmodule.exports = Foo;\n"
  },
  {
    "path": "tests/flow/builtins/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/call_caching1/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n// @flow\n\nconst Immutable = require('immutable');\n\nconst tasksPerStatusMap = new Map(\n  [].map(taskStatus => [taskStatus, new Map()]),\n);\nfor (let [taskStatus, tasksMap] of tasksPerStatusMap) {\n  tasksPerStatusMap.set(taskStatus, Immutable.Map(tasksMap));\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nconst Immutable = require(\"immutable\");\n\nconst tasksPerStatusMap = new Map(\n  [].map(taskStatus => [taskStatus, new Map()])\n);\nfor (let [taskStatus, tasksMap] of tasksPerStatusMap) {\n  tasksPerStatusMap.set(taskStatus, Immutable.Map(tasksMap));\n}\n\n`;\n\nexports[`test2.js 1`] = `\n/* @flow */\n\ndeclare class Bar<K> {\n  update<K_>(updater: (value: this) => Bar<K_>): Bar<K_>;\n}\n\ndeclare function foo<U>(\n  initialValue: U,\n  callbackfn: (previousValue: U) => U\n): U;\n\ndeclare var items: Bar<string>;\ndeclare var updater: (value: Bar<string>) => Bar<string>;\n\nfoo(\n  items,\n  (acc) => acc.update(updater)\n);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\ndeclare class Bar<K> {\n  update<K_>(updater: (value: this) => Bar<K_>): Bar<K_>\n}\n\ndeclare function foo<U>(\n  initialValue: U,\n  callbackfn: (previousValue: U) => U\n): U;\n\ndeclare var items: Bar<string>;\ndeclare var updater: (value: Bar<string>) => Bar<string>;\n\nfoo(items, acc => acc.update(updater));\n\n`;\n\nexports[`test3.js 1`] = `\n// @flow\n\ndeclare class ImmBox<T> {\n  static <U>(x: any): ImmBox<U>;\n  static (x: any): any;\n}\n\ndeclare class Box<T> {\n  constructor(x: T): void;\n  set(value: T): void;\n  get(): T;\n}\n\nconst outer = new Box();\nconst inner = outer.get();\nouter.set(ImmBox(inner));\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ndeclare class ImmBox<T> {\n  static <U>(x: any): ImmBox<U>,\n  static (x: any): any\n}\n\ndeclare class Box<T> {\n  constructor(x: T): void,\n  set(value: T): void,\n  get(): T\n}\n\nconst outer = new Box();\nconst inner = outer.get();\nouter.set(ImmBox(inner));\n\n`;\n"
  },
  {
    "path": "tests/flow/call_caching1/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/call_caching1/lib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`core.js 1`] = `\ndeclare class Array<T> {\n    @@iterator(): Iterator<T>;\n    map<U>(callbackfn: (value: T, index: number, array: Array<T>) => U, thisArg?: any): Array<U>;\n}\n\ntype IteratorResult<Yield,Return> =\n  | { done: true, value?: Return }\n  | { done: false, value: Yield };\n\ninterface $Iterator<+Yield,+Return,-Next> {\n    @@iterator(): $Iterator<Yield,Return,Next>;\n    next(value?: Next): IteratorResult<Yield,Return>;\n}\ntype Iterator<+T> = $Iterator<T,void,void>;\n\ninterface $Iterable<+Yield,+Return,-Next> {\n    @@iterator(): $Iterator<Yield,Return,Next>;\n}\ntype Iterable<+T> = $Iterable<T,void,void>;\n\ndeclare class Map<K, V> {\n    @@iterator(): Iterator<[K, V]>;\n    constructor(iterable: ?Iterable<[K, V]>): void;\n    set(key: K, value: V): Map<K, V>;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class Array<T> {\n  @@iterator(): Iterator<T>,\n  map<U>(\n    callbackfn: (value: T, index: number, array: Array<T>) => U,\n    thisArg?: any\n  ): Array<U>\n}\n\ntype IteratorResult<Yield, Return> =\n  | { done: true, value?: Return }\n  | { done: false, value: Yield };\n\ninterface $Iterator<+Yield, +Return, -Next> {\n  @@iterator(): $Iterator<Yield, Return, Next>,\n  next(value?: Next): IteratorResult<Yield, Return>\n}\ntype Iterator<+T> = $Iterator<T, void, void>;\n\ninterface $Iterable<+Yield, +Return, -Next> {\n  @@iterator(): $Iterator<Yield, Return, Next>\n}\ntype Iterable<+T> = $Iterable<T, void, void>;\n\ndeclare class Map<K, V> {\n  @@iterator(): Iterator<[K, V]>,\n  constructor(iterable: ?Iterable<[K, V]>): void,\n  set(key: K, value: V): Map<K, V>\n}\n\n`;\n\nexports[`immutable.js 1`] = `\ndeclare module \"immutable\" {\n  declare class Map<K,V> {\n    static <K,V>(iter: Iterator<[K,V]>): Map<K,V>;\n    static <K:string,V>(object: {+[k:K]:V}): Map<K,V>;\n\n    set(key: K, value: V): this;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare module \"immutable\" {\n  declare class Map<K, V> {\n    static <K, V>(iter: Iterator<[K, V]>): Map<K, V>,\n    static <K: string, V>(object: { +[k: K]: V }): Map<K, V>,\n\n    set(key: K, value: V): this\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/call_caching1/lib/core.js",
    "content": "declare class Array<T> {\n    @@iterator(): Iterator<T>;\n    map<U>(callbackfn: (value: T, index: number, array: Array<T>) => U, thisArg?: any): Array<U>;\n}\n\ntype IteratorResult<Yield,Return> =\n  | { done: true, value?: Return }\n  | { done: false, value: Yield };\n\ninterface $Iterator<+Yield,+Return,-Next> {\n    @@iterator(): $Iterator<Yield,Return,Next>;\n    next(value?: Next): IteratorResult<Yield,Return>;\n}\ntype Iterator<+T> = $Iterator<T,void,void>;\n\ninterface $Iterable<+Yield,+Return,-Next> {\n    @@iterator(): $Iterator<Yield,Return,Next>;\n}\ntype Iterable<+T> = $Iterable<T,void,void>;\n\ndeclare class Map<K, V> {\n    @@iterator(): Iterator<[K, V]>;\n    constructor(iterable: ?Iterable<[K, V]>): void;\n    set(key: K, value: V): Map<K, V>;\n}\n"
  },
  {
    "path": "tests/flow/call_caching1/lib/immutable.js",
    "content": "declare module \"immutable\" {\n  declare class Map<K,V> {\n    static <K,V>(iter: Iterator<[K,V]>): Map<K,V>;\n    static <K:string,V>(object: {+[k:K]:V}): Map<K,V>;\n\n    set(key: K, value: V): this;\n  }\n}\n"
  },
  {
    "path": "tests/flow/call_caching1/lib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/call_caching1/test.js",
    "content": "// @flow\n\nconst Immutable = require('immutable');\n\nconst tasksPerStatusMap = new Map(\n  [].map(taskStatus => [taskStatus, new Map()]),\n);\nfor (let [taskStatus, tasksMap] of tasksPerStatusMap) {\n  tasksPerStatusMap.set(taskStatus, Immutable.Map(tasksMap));\n}\n"
  },
  {
    "path": "tests/flow/call_caching1/test2.js",
    "content": "/* @flow */\n\ndeclare class Bar<K> {\n  update<K_>(updater: (value: this) => Bar<K_>): Bar<K_>;\n}\n\ndeclare function foo<U>(\n  initialValue: U,\n  callbackfn: (previousValue: U) => U\n): U;\n\ndeclare var items: Bar<string>;\ndeclare var updater: (value: Bar<string>) => Bar<string>;\n\nfoo(\n  items,\n  (acc) => acc.update(updater)\n);\n"
  },
  {
    "path": "tests/flow/call_caching1/test3.js",
    "content": "// @flow\n\ndeclare class ImmBox<T> {\n  static <U>(x: any): ImmBox<U>;\n  static (x: any): any;\n}\n\ndeclare class Box<T> {\n  constructor(x: T): void;\n  set(value: T): void;\n  get(): T;\n}\n\nconst outer = new Box();\nconst inner = outer.get();\nouter.set(ImmBox(inner));\n"
  },
  {
    "path": "tests/flow/call_caching2/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n// @flow\n\nfunction Foo(items: ?Iterable<number>) {\n  Iterable(items || []).size;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nfunction Foo(items: ?Iterable<number>) {\n  Iterable(items || []).size;\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/call_caching2/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/call_caching2/lib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`immutable.js 1`] = `\n// Copyright 2004-present Facebook. All Rights Reserved.\n\ndeclare class Array<T> { }\n\ndeclare class Iterable<S> {\n  static <V,Iter:Iterable<V>>(iter: Iter): Iter;\n  static <T>(iter: Array<T>): Iterable<T>;\n  size: number;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Copyright 2004-present Facebook. All Rights Reserved.\n\ndeclare class Array<T> {}\n\ndeclare class Iterable<S> {\n  static <V, Iter: Iterable<V>>(iter: Iter): Iter,\n  static <T>(iter: Array<T>): Iterable<T>,\n  size: number\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/call_caching2/lib/immutable.js",
    "content": "// Copyright 2004-present Facebook. All Rights Reserved.\n\ndeclare class Array<T> { }\n\ndeclare class Iterable<S> {\n  static <V,Iter:Iterable<V>>(iter: Iter): Iter;\n  static <T>(iter: Array<T>): Iterable<T>;\n  size: number;\n}\n"
  },
  {
    "path": "tests/flow/call_caching2/lib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/call_caching2/test.js",
    "content": "// @flow\n\nfunction Foo(items: ?Iterable<number>) {\n  Iterable(items || []).size;\n}\n"
  },
  {
    "path": "tests/flow/call_properties/A.js",
    "content": "// You should be able to call objects with call properties\nfunction a(f: { (): string }, g: { (x: number): string } ): string {\n  return f() + g(123);\n}\n\n// ...and get an error if the return type is wrong\nfunction b(f: { (): string }): number {\n  return f();\n}\n\n// ...or if the param type is wrong\nfunction c(f: { (x: number): number }): number {\n  return f(\"hello\");\n}\n\n// ...or if the arity is wrong\nfunction d(f: { (x: number): number }): number {\n  return f();\n}\n\n// ...or if there is no call property\nfunction e(f: {}): number {\n  return f();\n}\n\n// Make sure we complain even if the object literal is unsealed.\nfunction f(): number {\n  var x = {};\n  return x();\n}\n"
  },
  {
    "path": "tests/flow/call_properties/B.js",
    "content": "// You should be able to use a function as an object with a call property\nvar a: { (x: number): string } = function (x: number): string { return \"hi\"; };\n\n// ...and it should notice when the return type is wrong\nvar b: { (x: number): number } = function (x: number): string { return \"hi\"; };\n\n// ...or if the param type is wrong\nvar c: { (x: string): string } = function (x: number): string { return \"hi\"; };\n\n// ...or if the arity is wrong\nvar d: { (): string } = function (x: number): string { return \"hi\"; };\n\n// ...but subtyping rules still apply\nvar e: { (x: any): void } = function() { } // arity\nvar f: { (): mixed } = function(): string { return \"hi\" } // return type\nvar g: { (x: string): void } = function(x: mixed) { } // param type\n\n// A function can be an object\nvar y : {} = function (x: number): string { return \"hi\"; };\nvar z : Object = function (x: number): string { return \"hi\"; };\n"
  },
  {
    "path": "tests/flow/call_properties/C.js",
    "content": "// You should be able to use an object as a function\nfunction a(x: { (z: number): string }): (z: number) => string {\n  return x;\n}\n\n// ...and it should notice when the return type is wrong\nfunction b(x: { (z: number): string }): (z: number) => number {\n  return x;\n}\n\n// ...or if the param type is wrong\nfunction c(x: { (z: number): string }): (z: string) => string {\n  return x;\n}\n\n// ...or if the arity is wrong\nfunction d(x: { (z: number): string }): () => string {\n  return x;\n}\n\n// ...or if it doesn't have a call property\nfunction e(x: {}): () => string {\n  return x;\n}\n\n// AnyFunT should also be allowed\nfunction f(x: { (z: number): string }): Function {\n  return x;\n}\n\n// ... but only if the object is callable\nfunction g(x: {}): Function {\n  return x; // error\n}\n"
  },
  {
    "path": "tests/flow/call_properties/D.js",
    "content": "// Multiple call properties should also be supported\nfunction a(f: { (): string; (x: number): string }): string {\n  return f() + f(123);\n}\n\n// It should be fine when a function satisfies them all\nvar b: { (): string; (x: number): string } =\n  function (x?: number): string { return \"hi\"; };\n\n// ...but should notice when a function doesn't satisfy them all\nvar c: { (): string; (x: number): string } =\n  function (x: number): string { return \"hi\"; };\n\n// Only one call property needs to match the function\nfunction d(x: { (): string; (x: number): string }): () => string {\n  return x;\n}\n\n// ...but you need at least one\nfunction e(x: { (): string; (x: number): string }): () => number {\n  return x;\n}\n"
  },
  {
    "path": "tests/flow/call_properties/E.js",
    "content": "// Expecting properties that don't exist should be an error\nvar a : { someProp: number } = function () {};\n\n// Expecting properties that do exist should be fine\nvar b : { apply: Function } = function () {};\n\n// Expecting properties in the functions statics should be fine\nvar f = function () {};\nf.myProp = 123;\nvar c : { myProp: number } = f;\n"
  },
  {
    "path": "tests/flow/call_properties/F.js",
    "content": "// You should be able to use an arrow function as an object with a call property\n\nvar a: { (x: number): string } = (x) => x.toString()\n\n// ...and it should notice when the return type is wrong\nvar b: { (x: number): number } = (x) => \"hi\"\n\n// ...or if the param type is wrong\nvar c: { (x: string): string } = (x) => x.toFixed()\n\n// ...or if the arity is wrong\nvar d: { (): string } = (x) => \"hi\"\n\n// ...but subtyping rules still apply\nvar e: { (x: any): void } = () => { } // arity\nvar f: { (): mixed } = () => \"hi\" // return type\nvar g: { (x: Date): void } = (x) => { x * 2 } // param type (date < number)\n\n// A function can be an object\nvar y : {} = (x) => \"hi\"\nvar z : Object = (x) => \"hi\"\n"
  },
  {
    "path": "tests/flow/call_properties/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\n// You should be able to call objects with call properties\nfunction a(f: { (): string }, g: { (x: number): string } ): string {\n  return f() + g(123);\n}\n\n// ...and get an error if the return type is wrong\nfunction b(f: { (): string }): number {\n  return f();\n}\n\n// ...or if the param type is wrong\nfunction c(f: { (x: number): number }): number {\n  return f(\"hello\");\n}\n\n// ...or if the arity is wrong\nfunction d(f: { (x: number): number }): number {\n  return f();\n}\n\n// ...or if there is no call property\nfunction e(f: {}): number {\n  return f();\n}\n\n// Make sure we complain even if the object literal is unsealed.\nfunction f(): number {\n  var x = {};\n  return x();\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// You should be able to call objects with call properties\nfunction a(f: { (): string }, g: { (x: number): string }): string {\n  return f() + g(123);\n}\n\n// ...and get an error if the return type is wrong\nfunction b(f: { (): string }): number {\n  return f();\n}\n\n// ...or if the param type is wrong\nfunction c(f: { (x: number): number }): number {\n  return f(\"hello\");\n}\n\n// ...or if the arity is wrong\nfunction d(f: { (x: number): number }): number {\n  return f();\n}\n\n// ...or if there is no call property\nfunction e(f: {}): number {\n  return f();\n}\n\n// Make sure we complain even if the object literal is unsealed.\nfunction f(): number {\n  var x = {};\n  return x();\n}\n\n`;\n\nexports[`B.js 1`] = `\n// You should be able to use a function as an object with a call property\nvar a: { (x: number): string } = function (x: number): string { return \"hi\"; };\n\n// ...and it should notice when the return type is wrong\nvar b: { (x: number): number } = function (x: number): string { return \"hi\"; };\n\n// ...or if the param type is wrong\nvar c: { (x: string): string } = function (x: number): string { return \"hi\"; };\n\n// ...or if the arity is wrong\nvar d: { (): string } = function (x: number): string { return \"hi\"; };\n\n// ...but subtyping rules still apply\nvar e: { (x: any): void } = function() { } // arity\nvar f: { (): mixed } = function(): string { return \"hi\" } // return type\nvar g: { (x: string): void } = function(x: mixed) { } // param type\n\n// A function can be an object\nvar y : {} = function (x: number): string { return \"hi\"; };\nvar z : Object = function (x: number): string { return \"hi\"; };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// You should be able to use a function as an object with a call property\nvar a: { (x: number): string } = function(x: number): string {\n  return \"hi\";\n};\n\n// ...and it should notice when the return type is wrong\nvar b: { (x: number): number } = function(x: number): string {\n  return \"hi\";\n};\n\n// ...or if the param type is wrong\nvar c: { (x: string): string } = function(x: number): string {\n  return \"hi\";\n};\n\n// ...or if the arity is wrong\nvar d: { (): string } = function(x: number): string {\n  return \"hi\";\n};\n\n// ...but subtyping rules still apply\nvar e: { (x: any): void } = function() {}; // arity\nvar f: { (): mixed } = function(): string {\n  return \"hi\";\n}; // return type\nvar g: { (x: string): void } = function(x: mixed) {}; // param type\n\n// A function can be an object\nvar y: {} = function(x: number): string {\n  return \"hi\";\n};\nvar z: Object = function(x: number): string {\n  return \"hi\";\n};\n\n`;\n\nexports[`C.js 1`] = `\n// You should be able to use an object as a function\nfunction a(x: { (z: number): string }): (z: number) => string {\n  return x;\n}\n\n// ...and it should notice when the return type is wrong\nfunction b(x: { (z: number): string }): (z: number) => number {\n  return x;\n}\n\n// ...or if the param type is wrong\nfunction c(x: { (z: number): string }): (z: string) => string {\n  return x;\n}\n\n// ...or if the arity is wrong\nfunction d(x: { (z: number): string }): () => string {\n  return x;\n}\n\n// ...or if it doesn't have a call property\nfunction e(x: {}): () => string {\n  return x;\n}\n\n// AnyFunT should also be allowed\nfunction f(x: { (z: number): string }): Function {\n  return x;\n}\n\n// ... but only if the object is callable\nfunction g(x: {}): Function {\n  return x; // error\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// You should be able to use an object as a function\nfunction a(x: { (z: number): string }): (z: number) => string {\n  return x;\n}\n\n// ...and it should notice when the return type is wrong\nfunction b(x: { (z: number): string }): (z: number) => number {\n  return x;\n}\n\n// ...or if the param type is wrong\nfunction c(x: { (z: number): string }): (z: string) => string {\n  return x;\n}\n\n// ...or if the arity is wrong\nfunction d(x: { (z: number): string }): () => string {\n  return x;\n}\n\n// ...or if it doesn't have a call property\nfunction e(x: {}): () => string {\n  return x;\n}\n\n// AnyFunT should also be allowed\nfunction f(x: { (z: number): string }): Function {\n  return x;\n}\n\n// ... but only if the object is callable\nfunction g(x: {}): Function {\n  return x; // error\n}\n\n`;\n\nexports[`D.js 1`] = `\n// Multiple call properties should also be supported\nfunction a(f: { (): string; (x: number): string }): string {\n  return f() + f(123);\n}\n\n// It should be fine when a function satisfies them all\nvar b: { (): string; (x: number): string } =\n  function (x?: number): string { return \"hi\"; };\n\n// ...but should notice when a function doesn't satisfy them all\nvar c: { (): string; (x: number): string } =\n  function (x: number): string { return \"hi\"; };\n\n// Only one call property needs to match the function\nfunction d(x: { (): string; (x: number): string }): () => string {\n  return x;\n}\n\n// ...but you need at least one\nfunction e(x: { (): string; (x: number): string }): () => number {\n  return x;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Multiple call properties should also be supported\nfunction a(f: { (): string, (x: number): string }): string {\n  return f() + f(123);\n}\n\n// It should be fine when a function satisfies them all\nvar b: { (): string, (x: number): string } = function(x?: number): string {\n  return \"hi\";\n};\n\n// ...but should notice when a function doesn't satisfy them all\nvar c: { (): string, (x: number): string } = function(x: number): string {\n  return \"hi\";\n};\n\n// Only one call property needs to match the function\nfunction d(x: { (): string, (x: number): string }): () => string {\n  return x;\n}\n\n// ...but you need at least one\nfunction e(x: { (): string, (x: number): string }): () => number {\n  return x;\n}\n\n`;\n\nexports[`E.js 1`] = `\n// Expecting properties that don't exist should be an error\nvar a : { someProp: number } = function () {};\n\n// Expecting properties that do exist should be fine\nvar b : { apply: Function } = function () {};\n\n// Expecting properties in the functions statics should be fine\nvar f = function () {};\nf.myProp = 123;\nvar c : { myProp: number } = f;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Expecting properties that don't exist should be an error\nvar a: { someProp: number } = function() {};\n\n// Expecting properties that do exist should be fine\nvar b: { apply: Function } = function() {};\n\n// Expecting properties in the functions statics should be fine\nvar f = function() {};\nf.myProp = 123;\nvar c: { myProp: number } = f;\n\n`;\n\nexports[`F.js 1`] = `\n// You should be able to use an arrow function as an object with a call property\n\nvar a: { (x: number): string } = (x) => x.toString()\n\n// ...and it should notice when the return type is wrong\nvar b: { (x: number): number } = (x) => \"hi\"\n\n// ...or if the param type is wrong\nvar c: { (x: string): string } = (x) => x.toFixed()\n\n// ...or if the arity is wrong\nvar d: { (): string } = (x) => \"hi\"\n\n// ...but subtyping rules still apply\nvar e: { (x: any): void } = () => { } // arity\nvar f: { (): mixed } = () => \"hi\" // return type\nvar g: { (x: Date): void } = (x) => { x * 2 } // param type (date < number)\n\n// A function can be an object\nvar y : {} = (x) => \"hi\"\nvar z : Object = (x) => \"hi\"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// You should be able to use an arrow function as an object with a call property\n\nvar a: { (x: number): string } = x => x.toString();\n\n// ...and it should notice when the return type is wrong\nvar b: { (x: number): number } = x => \"hi\";\n\n// ...or if the param type is wrong\nvar c: { (x: string): string } = x => x.toFixed();\n\n// ...or if the arity is wrong\nvar d: { (): string } = x => \"hi\";\n\n// ...but subtyping rules still apply\nvar e: { (x: any): void } = () => {}; // arity\nvar f: { (): mixed } = () => \"hi\"; // return type\nvar g: { (x: Date): void } = x => {\n  x * 2;\n}; // param type (date < number)\n\n// A function can be an object\nvar y: {} = x => \"hi\";\nvar z: Object = x => \"hi\";\n\n`;\n"
  },
  {
    "path": "tests/flow/call_properties/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/callable/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`optional.js 1`] = `\ntype F = {\n  (x: string): number;\n  p?: string;\n}\n\nfunction f(x) {\n  return x.length;\n}\n\n(f: F);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype F = {\n  (x: string): number,\n  p?: string\n};\n\nfunction f(x) {\n  return x.length;\n}\n\n(f: F);\n\n`;\n\nexports[`primitives.js 1`] = `\nvar x = Boolean(4);\nfunction foo(fn:(value:any)=>boolean) { }\nfoo(Boolean);\n\nvar dict: { [k: string]: any } = {};\ndict(); // error, callable signature not found\n\ninterface ICall {\n  (x: string): void;\n}\ndeclare var icall: ICall;\nicall(0); // error, number ~> string\nicall.call(null, 0); // error, number ~> string\n\ntype Callable = {\n  (x: string): void;\n}\n\ndeclare var callable: Callable;\ncallable(0); // error, number ~> string\ncallable.call(null, 0); // error, number ~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x = Boolean(4);\nfunction foo(fn: (value: any) => boolean) {}\nfoo(Boolean);\n\nvar dict: { [k: string]: any } = {};\ndict(); // error, callable signature not found\n\ninterface ICall {\n  (x: string): void\n}\ndeclare var icall: ICall;\nicall(0); // error, number ~> string\nicall.call(null, 0); // error, number ~> string\n\ntype Callable = {\n  (x: string): void\n};\n\ndeclare var callable: Callable;\ncallable(0); // error, number ~> string\ncallable.call(null, 0); // error, number ~> string\n\n`;\n"
  },
  {
    "path": "tests/flow/callable/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/callable/optional.js",
    "content": "type F = {\n  (x: string): number;\n  p?: string;\n}\n\nfunction f(x) {\n  return x.length;\n}\n\n(f: F);\n"
  },
  {
    "path": "tests/flow/callable/primitives.js",
    "content": "var x = Boolean(4);\nfunction foo(fn:(value:any)=>boolean) { }\nfoo(Boolean);\n\nvar dict: { [k: string]: any } = {};\ndict(); // error, callable signature not found\n\ninterface ICall {\n  (x: string): void;\n}\ndeclare var icall: ICall;\nicall(0); // error, number ~> string\nicall.call(null, 0); // error, number ~> string\n\ntype Callable = {\n  (x: string): void;\n}\n\ndeclare var callable: Callable;\ncallable(0); // error, number ~> string\ncallable.call(null, 0); // error, number ~> string\n"
  },
  {
    "path": "tests/flow/check-contents/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`not_flow.js 1`] = `\n1 * 'foo';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n1 * \"foo\";\n\n`;\n"
  },
  {
    "path": "tests/flow/check-contents/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/check-contents/not_flow.js",
    "content": "1 * 'foo';\n"
  },
  {
    "path": "tests/flow/class_fields/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`base_class.js 1`] = `\n// @flow\n\nclass Base {\n  unannotatedField;\n  annotatedField: number;\n  initializedField = 42;\n  initializedFieldWithThis = this.initializedField;\n  annotatedInitializedFieldValid: ?number = 42;\n  annotatedInitializedFieldInvalid: number = 'asdf'; // Error: string ~> number\n\n  static unannotatedField;\n  static annotatedField: number;\n  static initializedField = 'asdf';\n  static initializedFieldWithThis = this.initializedField;\n  static annotatedInitializedFieldValid: ?number = 42;\n  static annotatedInitializedFieldInvalid: number = 'asdf'; // Error: string ~> number\n}\n\nvar o = new Base();\n\n/**\n * Unannotated fields are open.\n */\n(o.unannotatedField: string);\n(o.unannotatedField: number);\n(Base.unannotatedField: string);\n(Base.unannotatedField: number);\n\n/**\n * Annotated (but uninitialized) fields still have a type.\n */\n(o.annotatedField: number);\n(o.annotatedField: string); // Error: number ~> string\n(Base.annotatedField: number);\n(Base.annotatedField: string); // Error: number ~> string\n\n/**\n * Initialized (but unannotated) fields assume the type of their initializer.\n */\n(o.initializedField: number);\n(o.initializedField: string); // Error: number ~> string\n(Base.initializedField: string);\n(Base.initializedField: number); // Error: string ~> number\n\n/**\n * Initialized fields can reference \\`this\\`.\n */\n(o.initializedFieldWithThis: number);\n(o.initializedFieldWithThis: string); // Error: number ~> string\n(Base.initializedFieldWithThis: string);\n(Base.initializedFieldWithThis: number); // Error: string ~> number\n\n/**\n * Initialized + annotated fields take the type of the annotation.\n * (Note that this matters when the annotation is more general than the type of\n *  the initializer)\n */\n(o.annotatedInitializedFieldValid: ?number);\n(o.annotatedInitializedFieldValid: number); // Error: ?number ~> number\n(Base.annotatedInitializedFieldValid: ?number);\n(Base.annotatedInitializedFieldValid: number); // Error: ?number ~> number\n\n/**\n * Initialized + annotated fields where the init/annot combo is a mismatch\n * should assume the type of the annotation.\n *\n * (This happens in addition to erroring at the site of initialization)\n */\n(o.annotatedInitializedFieldInvalid: number);\n(o.annotatedInitializedFieldInvalid: string); // Error: number ~> string\n(Base.annotatedInitializedFieldInvalid: number);\n(Base.annotatedInitializedFieldInvalid: string); // Error: number ~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nclass Base {\n  unannotatedField;\n  annotatedField: number;\n  initializedField = 42;\n  initializedFieldWithThis = this.initializedField;\n  annotatedInitializedFieldValid: ?number = 42;\n  annotatedInitializedFieldInvalid: number = \"asdf\"; // Error: string ~> number\n\n  static unannotatedField;\n  static annotatedField: number;\n  static initializedField = \"asdf\";\n  static initializedFieldWithThis = this.initializedField;\n  static annotatedInitializedFieldValid: ?number = 42;\n  static annotatedInitializedFieldInvalid: number = \"asdf\"; // Error: string ~> number\n}\n\nvar o = new Base();\n\n/**\n * Unannotated fields are open.\n */\n(o.unannotatedField: string);\n(o.unannotatedField: number);\n(Base.unannotatedField: string);\n(Base.unannotatedField: number);\n\n/**\n * Annotated (but uninitialized) fields still have a type.\n */\n(o.annotatedField: number);\n(o.annotatedField: string); // Error: number ~> string\n(Base.annotatedField: number);\n(Base.annotatedField: string); // Error: number ~> string\n\n/**\n * Initialized (but unannotated) fields assume the type of their initializer.\n */\n(o.initializedField: number);\n(o.initializedField: string); // Error: number ~> string\n(Base.initializedField: string);\n(Base.initializedField: number); // Error: string ~> number\n\n/**\n * Initialized fields can reference \\`this\\`.\n */\n(o.initializedFieldWithThis: number);\n(o.initializedFieldWithThis: string); // Error: number ~> string\n(Base.initializedFieldWithThis: string);\n(Base.initializedFieldWithThis: number); // Error: string ~> number\n\n/**\n * Initialized + annotated fields take the type of the annotation.\n * (Note that this matters when the annotation is more general than the type of\n *  the initializer)\n */\n(o.annotatedInitializedFieldValid: ?number);\n(o.annotatedInitializedFieldValid: number); // Error: ?number ~> number\n(Base.annotatedInitializedFieldValid: ?number);\n(Base.annotatedInitializedFieldValid: number); // Error: ?number ~> number\n\n/**\n * Initialized + annotated fields where the init/annot combo is a mismatch\n * should assume the type of the annotation.\n *\n * (This happens in addition to erroring at the site of initialization)\n */\n(o.annotatedInitializedFieldInvalid: number);\n(o.annotatedInitializedFieldInvalid: string); // Error: number ~> string\n(Base.annotatedInitializedFieldInvalid: number);\n(Base.annotatedInitializedFieldInvalid: string); // Error: number ~> string\n\n`;\n\nexports[`derived_class.js 1`] = `\n// @flow\n\nclass Base {\n  base_unannotatedField;\n  base_annotatedField: number;\n  base_initializedField = 42;\n  base_initializedFieldWithThis = this.base_initializedField;\n  base_annotatedInitializedFieldValid: ?number = 42;\n  base_annotatedInitializedFieldInvalid: number = 'asdf'; // Error: string ~> number\n\n  static base_unannotatedField;\n  static base_annotatedField: number;\n  static base_initializedField = 'asdf';\n  static base_initializedFieldWithThis = this.base_initializedField;\n  static base_annotatedInitializedFieldValid: ?number = 42;\n  static base_annotatedInitializedFieldInvalid: number = 'asdf'; // Error: string ~> number\n\n  inherited_initializer = 42;\n  static inherited_initializer = 42;\n}\n\nclass Child extends Base {\n  child_unannotatedField;\n  child_annotatedField: number;\n  child_initializedField = 42;\n  child_initializedFieldWithThis = this.child_initializedField;\n  child_annotatedInitializedFieldValid: ?number = 42;\n  child_annotatedInitializedFieldInvalid: number = 'asdf'; // Error: string ~> number\n\n  static child_unannotatedField;\n  static child_annotatedField: number;\n  static child_initializedField = 'asdf';\n  static child_initializedFieldWithThis = this.child_initializedField;\n  static child_annotatedInitializedFieldValid: ?number = 42;\n  static child_annotatedInitializedFieldInvalid: number = 'asdf'; // Error: string ~> number\n\n  inherited_initializer;\n  static inherited_initializer;\n}\n\nvar o = new Child();\n\n/**\n * Unannotated fields are open.\n */\n(o.base_unannotatedField: string);\n(o.base_unannotatedField: number);\n(Child.base_unannotatedField: string);\n(Child.base_unannotatedField: number);\n\n(o.child_unannotatedField: string);\n(o.child_unannotatedField: number);\n(Child.child_unannotatedField: string);\n(Child.child_unannotatedField: number);\n\n\n/**\n * Annotated (but uninitialized) fields still have a type.\n */\n(o.base_annotatedField: number);\n(o.base_annotatedField: string); // Error: number ~> string\n(Child.base_annotatedField: number);\n(Child.base_annotatedField: string); // Error: number ~> string\n\n(o.child_annotatedField: number);\n(o.child_annotatedField: string); // Error: number ~> string\n(Child.child_annotatedField: number);\n(Child.child_annotatedField: string); // Error: number ~> string\n\n/**\n * Initialized (but unannotated) fields assume the type of their initializer.\n */\n(o.base_initializedField: number);\n(o.base_initializedField: string); // Error: number ~> string\n(Child.base_initializedField: string);\n(Child.base_initializedField: number); // Error: string ~> number\n\n(o.child_initializedField: number);\n(o.child_initializedField: string); // Error: number ~> string\n(Child.child_initializedField: string);\n(Child.child_initializedField: number); // Error: string ~> number\n\n/**\n * Initialized fields can reference \\`this\\`.\n */\n(o.base_initializedFieldWithThis: number);\n(o.base_initializedFieldWithThis: string); // Error: number ~> string\n(Child.base_initializedFieldWithThis: string);\n(Child.base_initializedFieldWithThis: number); // Error: string ~> number\n\n(o.child_initializedFieldWithThis: number);\n(o.child_initializedFieldWithThis: string); // Error: number ~> string\n(Child.child_initializedFieldWithThis: string);\n(Child.child_initializedFieldWithThis: number); // Error: string ~> number\n\n/**\n * Initialized + annotated fields take the type of the annotation.\n * (Note that this matters when the annotation is more general than the type of\n *  the initializer)\n */\n(o.base_annotatedInitializedFieldValid: ?number);\n(o.base_annotatedInitializedFieldValid: number); // Error: ?number ~> number\n(Child.base_annotatedInitializedFieldValid: ?number);\n(Child.base_annotatedInitializedFieldValid: number); // Error: ?number ~> number\n\n(o.child_annotatedInitializedFieldValid: ?number);\n(o.child_annotatedInitializedFieldValid: number); // Error: ?number ~> number\n(Child.child_annotatedInitializedFieldValid: ?number);\n(Child.child_annotatedInitializedFieldValid: number); // Error: ?number ~> number\n\n/**\n * Initialized + annotated fields where the init/annot combo is a mismatch\n * should assume the type of the annotation.\n *\n * (This happens in addition to erroring at the site of initialization)\n */\n(o.base_annotatedInitializedFieldInvalid: number);\n(o.base_annotatedInitializedFieldInvalid: string); // Error: number ~> string\n(Child.base_annotatedInitializedFieldInvalid: number);\n(Child.base_annotatedInitializedFieldInvalid: string); // Error: number ~> string\n\n(o.child_annotatedInitializedFieldInvalid: number);\n(o.child_annotatedInitializedFieldInvalid: string); // Error: number ~> string\n(Child.child_annotatedInitializedFieldInvalid: number);\n(Child.child_annotatedInitializedFieldInvalid: string); // Error: number ~> string\n\n/**\n * Derived fields without an initializer that shadow base fields *with* an\n * initializer should have the type of the base field.\n */\n(o.inherited_initializer: number);\n(o.inherited_initializer: string); // Error: number ~> string\n(Child.inherited_initializer: number);\n(Child.inherited_initializer: string); // Error: number ~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nclass Base {\n  base_unannotatedField;\n  base_annotatedField: number;\n  base_initializedField = 42;\n  base_initializedFieldWithThis = this.base_initializedField;\n  base_annotatedInitializedFieldValid: ?number = 42;\n  base_annotatedInitializedFieldInvalid: number = \"asdf\"; // Error: string ~> number\n\n  static base_unannotatedField;\n  static base_annotatedField: number;\n  static base_initializedField = \"asdf\";\n  static base_initializedFieldWithThis = this.base_initializedField;\n  static base_annotatedInitializedFieldValid: ?number = 42;\n  static base_annotatedInitializedFieldInvalid: number = \"asdf\"; // Error: string ~> number\n\n  inherited_initializer = 42;\n  static inherited_initializer = 42;\n}\n\nclass Child extends Base {\n  child_unannotatedField;\n  child_annotatedField: number;\n  child_initializedField = 42;\n  child_initializedFieldWithThis = this.child_initializedField;\n  child_annotatedInitializedFieldValid: ?number = 42;\n  child_annotatedInitializedFieldInvalid: number = \"asdf\"; // Error: string ~> number\n\n  static child_unannotatedField;\n  static child_annotatedField: number;\n  static child_initializedField = \"asdf\";\n  static child_initializedFieldWithThis = this.child_initializedField;\n  static child_annotatedInitializedFieldValid: ?number = 42;\n  static child_annotatedInitializedFieldInvalid: number = \"asdf\"; // Error: string ~> number\n\n  inherited_initializer;\n  static inherited_initializer;\n}\n\nvar o = new Child();\n\n/**\n * Unannotated fields are open.\n */\n(o.base_unannotatedField: string);\n(o.base_unannotatedField: number);\n(Child.base_unannotatedField: string);\n(Child.base_unannotatedField: number);\n\n(o.child_unannotatedField: string);\n(o.child_unannotatedField: number);\n(Child.child_unannotatedField: string);\n(Child.child_unannotatedField: number);\n\n/**\n * Annotated (but uninitialized) fields still have a type.\n */\n(o.base_annotatedField: number);\n(o.base_annotatedField: string); // Error: number ~> string\n(Child.base_annotatedField: number);\n(Child.base_annotatedField: string); // Error: number ~> string\n\n(o.child_annotatedField: number);\n(o.child_annotatedField: string); // Error: number ~> string\n(Child.child_annotatedField: number);\n(Child.child_annotatedField: string); // Error: number ~> string\n\n/**\n * Initialized (but unannotated) fields assume the type of their initializer.\n */\n(o.base_initializedField: number);\n(o.base_initializedField: string); // Error: number ~> string\n(Child.base_initializedField: string);\n(Child.base_initializedField: number); // Error: string ~> number\n\n(o.child_initializedField: number);\n(o.child_initializedField: string); // Error: number ~> string\n(Child.child_initializedField: string);\n(Child.child_initializedField: number); // Error: string ~> number\n\n/**\n * Initialized fields can reference \\`this\\`.\n */\n(o.base_initializedFieldWithThis: number);\n(o.base_initializedFieldWithThis: string); // Error: number ~> string\n(Child.base_initializedFieldWithThis: string);\n(Child.base_initializedFieldWithThis: number); // Error: string ~> number\n\n(o.child_initializedFieldWithThis: number);\n(o.child_initializedFieldWithThis: string); // Error: number ~> string\n(Child.child_initializedFieldWithThis: string);\n(Child.child_initializedFieldWithThis: number); // Error: string ~> number\n\n/**\n * Initialized + annotated fields take the type of the annotation.\n * (Note that this matters when the annotation is more general than the type of\n *  the initializer)\n */\n(o.base_annotatedInitializedFieldValid: ?number);\n(o.base_annotatedInitializedFieldValid: number); // Error: ?number ~> number\n(Child.base_annotatedInitializedFieldValid: ?number);\n(Child.base_annotatedInitializedFieldValid: number); // Error: ?number ~> number\n\n(o.child_annotatedInitializedFieldValid: ?number);\n(o.child_annotatedInitializedFieldValid: number); // Error: ?number ~> number\n(Child.child_annotatedInitializedFieldValid: ?number);\n(Child.child_annotatedInitializedFieldValid: number); // Error: ?number ~> number\n\n/**\n * Initialized + annotated fields where the init/annot combo is a mismatch\n * should assume the type of the annotation.\n *\n * (This happens in addition to erroring at the site of initialization)\n */\n(o.base_annotatedInitializedFieldInvalid: number);\n(o.base_annotatedInitializedFieldInvalid: string); // Error: number ~> string\n(Child.base_annotatedInitializedFieldInvalid: number);\n(Child.base_annotatedInitializedFieldInvalid: string); // Error: number ~> string\n\n(o.child_annotatedInitializedFieldInvalid: number);\n(o.child_annotatedInitializedFieldInvalid: string); // Error: number ~> string\n(Child.child_annotatedInitializedFieldInvalid: number);\n(Child.child_annotatedInitializedFieldInvalid: string); // Error: number ~> string\n\n/**\n * Derived fields without an initializer that shadow base fields *with* an\n * initializer should have the type of the base field.\n */\n(o.inherited_initializer: number);\n(o.inherited_initializer: string); // Error: number ~> string\n(Child.inherited_initializer: number);\n(Child.inherited_initializer: string); // Error: number ~> string\n\n`;\n\nexports[`generic_class.js 1`] = `\n// @flow\n\n/**\n * Fields annotated with a generic should assume a type once the type param\n * is instantiated.\n */\nclass ClassAnnotated<T> {\n  p: T;\n  static p: T;\n}\n\nvar o1 = new ClassAnnotated();\no1.p = 42;\n(o1.p: number);\n(o1.p: string); // Error: number ~> string\nClassAnnotated.p = 42;\n(ClassAnnotated.p: number);\n(ClassAnnotated.p: string); // Error: number ~> string\n\n\n/**\n * It's always an error to initialized a generically-typed field with an\n * expression of any type other than the generic itself.\n */\nclass ClassGenericInitialized<T, U> {\n  invalid: T = 42; // Error: number ~> Generic<T>\n  valid: T = ((42:any):T);\n\n  static invalid: T = 42; // Error: number ~> Generic<T>\n  static valid: T = ((42:any):T);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n/**\n * Fields annotated with a generic should assume a type once the type param\n * is instantiated.\n */\nclass ClassAnnotated<T> {\n  p: T;\n  static p: T;\n}\n\nvar o1 = new ClassAnnotated();\no1.p = 42;\n(o1.p: number);\n(o1.p: string); // Error: number ~> string\nClassAnnotated.p = 42;\n(ClassAnnotated.p: number);\n(ClassAnnotated.p: string); // Error: number ~> string\n\n/**\n * It's always an error to initialized a generically-typed field with an\n * expression of any type other than the generic itself.\n */\nclass ClassGenericInitialized<T, U> {\n  invalid: T = 42; // Error: number ~> Generic<T>\n  valid: T = ((42: any): T);\n\n  static invalid: T = 42; // Error: number ~> Generic<T>\n  static valid: T = ((42: any): T);\n}\n\n`;\n\nexports[`scoping.js 1`] = `\n// @flow\n\nvar someVar = 42;\n\nclass Foo {\n  outer = someVar;\n  selfTyped: Foo;\n  selfTypedInit = new Foo();\n\n  static outer = someVar;\n  static selfTyped: Foo;\n  static selfTypedInit = new Foo();\n\n  constructor() {\n    var someVar = 'asdf';\n  }\n}\n\n/**\n * Field initializers execute in a scope immediately under the scope outside the\n * class definition.\n */\n(new Foo().outer: number);\n(new Foo().outer: string); // Error: number ~> string\n(Foo.outer: number);\n(Foo.outer: string); // Error: number ~> string\n\n/**\n * Field initializers should be able to refer to the class type in their type\n * annotations.\n */\n(new Foo().selfTyped: Foo);\n(new Foo().selfTyped: number); // Error: Foo ~> number\n(Foo.selfTyped: Foo);\n(Foo.selfTyped: number); // Error: Foo ~> number\n\n(new Foo().selfTypedInit: Foo);\n(new Foo().selfTypedInit: number); // Error: Foo ~> number\n(Foo.selfTypedInit: Foo);\n(Foo.selfTypedInit: number); // Error: Foo ~> number\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nvar someVar = 42;\n\nclass Foo {\n  outer = someVar;\n  selfTyped: Foo;\n  selfTypedInit = new Foo();\n\n  static outer = someVar;\n  static selfTyped: Foo;\n  static selfTypedInit = new Foo();\n\n  constructor() {\n    var someVar = \"asdf\";\n  }\n}\n\n/**\n * Field initializers execute in a scope immediately under the scope outside the\n * class definition.\n */\n(new Foo().outer: number);\n(new Foo().outer: string); // Error: number ~> string\n(Foo.outer: number);\n(Foo.outer: string); // Error: number ~> string\n\n/**\n * Field initializers should be able to refer to the class type in their type\n * annotations.\n */\n(new Foo().selfTyped: Foo);\n(new Foo().selfTyped: number); // Error: Foo ~> number\n(Foo.selfTyped: Foo);\n(Foo.selfTyped: number); // Error: Foo ~> number\n\n(new Foo().selfTypedInit: Foo);\n(new Foo().selfTypedInit: number); // Error: Foo ~> number\n(Foo.selfTypedInit: Foo);\n(Foo.selfTypedInit: number); // Error: Foo ~> number\n\n`;\n"
  },
  {
    "path": "tests/flow/class_fields/base_class.js",
    "content": "// @flow\n\nclass Base {\n  unannotatedField;\n  annotatedField: number;\n  initializedField = 42;\n  initializedFieldWithThis = this.initializedField;\n  annotatedInitializedFieldValid: ?number = 42;\n  annotatedInitializedFieldInvalid: number = 'asdf'; // Error: string ~> number\n\n  static unannotatedField;\n  static annotatedField: number;\n  static initializedField = 'asdf';\n  static initializedFieldWithThis = this.initializedField;\n  static annotatedInitializedFieldValid: ?number = 42;\n  static annotatedInitializedFieldInvalid: number = 'asdf'; // Error: string ~> number\n}\n\nvar o = new Base();\n\n/**\n * Unannotated fields are open.\n */\n(o.unannotatedField: string);\n(o.unannotatedField: number);\n(Base.unannotatedField: string);\n(Base.unannotatedField: number);\n\n/**\n * Annotated (but uninitialized) fields still have a type.\n */\n(o.annotatedField: number);\n(o.annotatedField: string); // Error: number ~> string\n(Base.annotatedField: number);\n(Base.annotatedField: string); // Error: number ~> string\n\n/**\n * Initialized (but unannotated) fields assume the type of their initializer.\n */\n(o.initializedField: number);\n(o.initializedField: string); // Error: number ~> string\n(Base.initializedField: string);\n(Base.initializedField: number); // Error: string ~> number\n\n/**\n * Initialized fields can reference `this`.\n */\n(o.initializedFieldWithThis: number);\n(o.initializedFieldWithThis: string); // Error: number ~> string\n(Base.initializedFieldWithThis: string);\n(Base.initializedFieldWithThis: number); // Error: string ~> number\n\n/**\n * Initialized + annotated fields take the type of the annotation.\n * (Note that this matters when the annotation is more general than the type of\n *  the initializer)\n */\n(o.annotatedInitializedFieldValid: ?number);\n(o.annotatedInitializedFieldValid: number); // Error: ?number ~> number\n(Base.annotatedInitializedFieldValid: ?number);\n(Base.annotatedInitializedFieldValid: number); // Error: ?number ~> number\n\n/**\n * Initialized + annotated fields where the init/annot combo is a mismatch\n * should assume the type of the annotation.\n *\n * (This happens in addition to erroring at the site of initialization)\n */\n(o.annotatedInitializedFieldInvalid: number);\n(o.annotatedInitializedFieldInvalid: string); // Error: number ~> string\n(Base.annotatedInitializedFieldInvalid: number);\n(Base.annotatedInitializedFieldInvalid: string); // Error: number ~> string\n"
  },
  {
    "path": "tests/flow/class_fields/derived_class.js",
    "content": "// @flow\n\nclass Base {\n  base_unannotatedField;\n  base_annotatedField: number;\n  base_initializedField = 42;\n  base_initializedFieldWithThis = this.base_initializedField;\n  base_annotatedInitializedFieldValid: ?number = 42;\n  base_annotatedInitializedFieldInvalid: number = 'asdf'; // Error: string ~> number\n\n  static base_unannotatedField;\n  static base_annotatedField: number;\n  static base_initializedField = 'asdf';\n  static base_initializedFieldWithThis = this.base_initializedField;\n  static base_annotatedInitializedFieldValid: ?number = 42;\n  static base_annotatedInitializedFieldInvalid: number = 'asdf'; // Error: string ~> number\n\n  inherited_initializer = 42;\n  static inherited_initializer = 42;\n}\n\nclass Child extends Base {\n  child_unannotatedField;\n  child_annotatedField: number;\n  child_initializedField = 42;\n  child_initializedFieldWithThis = this.child_initializedField;\n  child_annotatedInitializedFieldValid: ?number = 42;\n  child_annotatedInitializedFieldInvalid: number = 'asdf'; // Error: string ~> number\n\n  static child_unannotatedField;\n  static child_annotatedField: number;\n  static child_initializedField = 'asdf';\n  static child_initializedFieldWithThis = this.child_initializedField;\n  static child_annotatedInitializedFieldValid: ?number = 42;\n  static child_annotatedInitializedFieldInvalid: number = 'asdf'; // Error: string ~> number\n\n  inherited_initializer;\n  static inherited_initializer;\n}\n\nvar o = new Child();\n\n/**\n * Unannotated fields are open.\n */\n(o.base_unannotatedField: string);\n(o.base_unannotatedField: number);\n(Child.base_unannotatedField: string);\n(Child.base_unannotatedField: number);\n\n(o.child_unannotatedField: string);\n(o.child_unannotatedField: number);\n(Child.child_unannotatedField: string);\n(Child.child_unannotatedField: number);\n\n\n/**\n * Annotated (but uninitialized) fields still have a type.\n */\n(o.base_annotatedField: number);\n(o.base_annotatedField: string); // Error: number ~> string\n(Child.base_annotatedField: number);\n(Child.base_annotatedField: string); // Error: number ~> string\n\n(o.child_annotatedField: number);\n(o.child_annotatedField: string); // Error: number ~> string\n(Child.child_annotatedField: number);\n(Child.child_annotatedField: string); // Error: number ~> string\n\n/**\n * Initialized (but unannotated) fields assume the type of their initializer.\n */\n(o.base_initializedField: number);\n(o.base_initializedField: string); // Error: number ~> string\n(Child.base_initializedField: string);\n(Child.base_initializedField: number); // Error: string ~> number\n\n(o.child_initializedField: number);\n(o.child_initializedField: string); // Error: number ~> string\n(Child.child_initializedField: string);\n(Child.child_initializedField: number); // Error: string ~> number\n\n/**\n * Initialized fields can reference `this`.\n */\n(o.base_initializedFieldWithThis: number);\n(o.base_initializedFieldWithThis: string); // Error: number ~> string\n(Child.base_initializedFieldWithThis: string);\n(Child.base_initializedFieldWithThis: number); // Error: string ~> number\n\n(o.child_initializedFieldWithThis: number);\n(o.child_initializedFieldWithThis: string); // Error: number ~> string\n(Child.child_initializedFieldWithThis: string);\n(Child.child_initializedFieldWithThis: number); // Error: string ~> number\n\n/**\n * Initialized + annotated fields take the type of the annotation.\n * (Note that this matters when the annotation is more general than the type of\n *  the initializer)\n */\n(o.base_annotatedInitializedFieldValid: ?number);\n(o.base_annotatedInitializedFieldValid: number); // Error: ?number ~> number\n(Child.base_annotatedInitializedFieldValid: ?number);\n(Child.base_annotatedInitializedFieldValid: number); // Error: ?number ~> number\n\n(o.child_annotatedInitializedFieldValid: ?number);\n(o.child_annotatedInitializedFieldValid: number); // Error: ?number ~> number\n(Child.child_annotatedInitializedFieldValid: ?number);\n(Child.child_annotatedInitializedFieldValid: number); // Error: ?number ~> number\n\n/**\n * Initialized + annotated fields where the init/annot combo is a mismatch\n * should assume the type of the annotation.\n *\n * (This happens in addition to erroring at the site of initialization)\n */\n(o.base_annotatedInitializedFieldInvalid: number);\n(o.base_annotatedInitializedFieldInvalid: string); // Error: number ~> string\n(Child.base_annotatedInitializedFieldInvalid: number);\n(Child.base_annotatedInitializedFieldInvalid: string); // Error: number ~> string\n\n(o.child_annotatedInitializedFieldInvalid: number);\n(o.child_annotatedInitializedFieldInvalid: string); // Error: number ~> string\n(Child.child_annotatedInitializedFieldInvalid: number);\n(Child.child_annotatedInitializedFieldInvalid: string); // Error: number ~> string\n\n/**\n * Derived fields without an initializer that shadow base fields *with* an\n * initializer should have the type of the base field.\n */\n(o.inherited_initializer: number);\n(o.inherited_initializer: string); // Error: number ~> string\n(Child.inherited_initializer: number);\n(Child.inherited_initializer: string); // Error: number ~> string\n"
  },
  {
    "path": "tests/flow/class_fields/generic_class.js",
    "content": "// @flow\n\n/**\n * Fields annotated with a generic should assume a type once the type param\n * is instantiated.\n */\nclass ClassAnnotated<T> {\n  p: T;\n  static p: T;\n}\n\nvar o1 = new ClassAnnotated();\no1.p = 42;\n(o1.p: number);\n(o1.p: string); // Error: number ~> string\nClassAnnotated.p = 42;\n(ClassAnnotated.p: number);\n(ClassAnnotated.p: string); // Error: number ~> string\n\n\n/**\n * It's always an error to initialized a generically-typed field with an\n * expression of any type other than the generic itself.\n */\nclass ClassGenericInitialized<T, U> {\n  invalid: T = 42; // Error: number ~> Generic<T>\n  valid: T = ((42:any):T);\n\n  static invalid: T = 42; // Error: number ~> Generic<T>\n  static valid: T = ((42:any):T);\n}\n"
  },
  {
    "path": "tests/flow/class_fields/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/class_fields/scoping.js",
    "content": "// @flow\n\nvar someVar = 42;\n\nclass Foo {\n  outer = someVar;\n  selfTyped: Foo;\n  selfTypedInit = new Foo();\n\n  static outer = someVar;\n  static selfTyped: Foo;\n  static selfTypedInit = new Foo();\n\n  constructor() {\n    var someVar = 'asdf';\n  }\n}\n\n/**\n * Field initializers execute in a scope immediately under the scope outside the\n * class definition.\n */\n(new Foo().outer: number);\n(new Foo().outer: string); // Error: number ~> string\n(Foo.outer: number);\n(Foo.outer: string); // Error: number ~> string\n\n/**\n * Field initializers should be able to refer to the class type in their type\n * annotations.\n */\n(new Foo().selfTyped: Foo);\n(new Foo().selfTyped: number); // Error: Foo ~> number\n(Foo.selfTyped: Foo);\n(Foo.selfTyped: number); // Error: Foo ~> number\n\n(new Foo().selfTypedInit: Foo);\n(new Foo().selfTypedInit: number); // Error: Foo ~> number\n(Foo.selfTypedInit: Foo);\n(Foo.selfTypedInit: number); // Error: Foo ~> number\n"
  },
  {
    "path": "tests/flow/class_method_default_parameters/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`class_method_default_parameters.js 1`] = `\nclass A {\n\n    b: string;\n\n    c(d = this.b) { // ok - can use \\`this\\` in function default parameter values\n\n    }\n\n    e() {\n        return this.b;\n    }\n\n    f(g = this.e()) { // ok - can use \\`this\\` in function default parameter values\n\n    }\n\n    h(i: number = this.b) { // error\n\n    }\n\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {\n  b: string;\n\n  c(d = this.b) {\n    // ok - can use \\`this\\` in function default parameter values\n  }\n\n  e() {\n    return this.b;\n  }\n\n  f(g = this.e()) {\n    // ok - can use \\`this\\` in function default parameter values\n  }\n\n  h(i: number = this.b) {\n    // error\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/class_method_default_parameters/class_method_default_parameters.js",
    "content": "class A {\n\n    b: string;\n\n    c(d = this.b) { // ok - can use `this` in function default parameter values\n\n    }\n\n    e() {\n        return this.b;\n    }\n\n    f(g = this.e()) { // ok - can use `this` in function default parameter values\n\n    }\n\n    h(i: number = this.b) { // error\n\n    }\n\n}\n"
  },
  {
    "path": "tests/flow/class_method_default_parameters/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/class_munging/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`with_munging.js 1`] = `\n/**\n * @flow\n */\n\nclass Foo {\n  _method(): string {\n    return 'this is private';\n  }\n}\n\nclass Bar extends Foo {\n  test() {\n    (this._method(): string); // error\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nclass Foo {\n  _method(): string {\n    return \"this is private\";\n  }\n}\n\nclass Bar extends Foo {\n  test() {\n    (this._method(): string); // error\n  }\n}\n\n`;\n\nexports[`without_munging.js 1`] = `\n/**\n * @flow\n * @preventMunge\n */\n\nclass Foo {\n  _method(): string {\n    return 'this is not private';\n  }\n}\n\nclass Bar extends Foo {\n  test() {\n    (this._method(): string); // ok\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n * @preventMunge\n */\n\nclass Foo {\n  _method(): string {\n    return \"this is not private\";\n  }\n}\n\nclass Bar extends Foo {\n  test() {\n    (this._method(): string); // ok\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/class_munging/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/class_munging/with_munging.js",
    "content": "/**\n * @flow\n */\n\nclass Foo {\n  _method(): string {\n    return 'this is private';\n  }\n}\n\nclass Bar extends Foo {\n  test() {\n    (this._method(): string); // error\n  }\n}\n"
  },
  {
    "path": "tests/flow/class_munging/without_munging.js",
    "content": "/**\n * @flow\n * @preventMunge\n */\n\nclass Foo {\n  _method(): string {\n    return 'this is not private';\n  }\n}\n\nclass Bar extends Foo {\n  test() {\n    (this._method(): string); // ok\n  }\n}\n"
  },
  {
    "path": "tests/flow/class_statics/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nclass A {\n  static x: number;\n  static y: string;\n  static foo(x: number) { }\n  static bar(y: string) { }\n}\nA.qux = function(x: string) { } // error?\n\nclass B extends A {\n  static x: string; // error?\n  static foo(x: string) { } // error?\n  static main() {\n    B.x = 0; // error\n    B.x = \"\";\n    B.foo(0); // error\n    B.foo(\"\");\n    B.y = 0; // error\n    B.bar(0); // error\n    B.qux(0); // error\n  }\n  static create(): A {\n    return new this();\n  }\n\n  static badCreate(): number {\n    return new this(); // error B ~> number\n  }\n}\n\nclass C<X> {\n  static x: X;\n  static bar(x: X) { }\n  static create(): C<*> {\n    return new this();\n  }\n}\n\nclass D extends C<string> {\n  static main() {\n    D.foo(0); // error?\n\n    D.bar(0);\n  }\n}\n\nvar d: C<*> = D.create();\n(new A: typeof A);\n(B: typeof A);\n\nclass E {\n  static x: number;\n  static foo(): string {\n    this.bar(); // error\n    return this.x; // error\n  }\n}\n\n// note: above classdefs are sufficiently annotated to export\nmodule.exports = {\n  A: A, B: B, C: C, D: D, E: E\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {\n  static x: number;\n  static y: string;\n  static foo(x: number) {}\n  static bar(y: string) {}\n}\nA.qux = function(x: string) {}; // error?\n\nclass B extends A {\n  static x: string; // error?\n  static foo(x: string) {} // error?\n  static main() {\n    B.x = 0; // error\n    B.x = \"\";\n    B.foo(0); // error\n    B.foo(\"\");\n    B.y = 0; // error\n    B.bar(0); // error\n    B.qux(0); // error\n  }\n  static create(): A {\n    return new this();\n  }\n\n  static badCreate(): number {\n    return new this(); // error B ~> number\n  }\n}\n\nclass C<X> {\n  static x: X;\n  static bar(x: X) {}\n  static create(): C<*> {\n    return new this();\n  }\n}\n\nclass D extends C<string> {\n  static main() {\n    D.foo(0); // error?\n\n    D.bar(0);\n  }\n}\n\nvar d: C<*> = D.create();\n(new A(): typeof A);\n(B: typeof A);\n\nclass E {\n  static x: number;\n  static foo(): string {\n    this.bar(); // error\n    return this.x; // error\n  }\n}\n\n// note: above classdefs are sufficiently annotated to export\nmodule.exports = {\n  A: A,\n  B: B,\n  C: C,\n  D: D,\n  E: E\n};\n\n`;\n"
  },
  {
    "path": "tests/flow/class_statics/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/class_statics/test.js",
    "content": "class A {\n  static x: number;\n  static y: string;\n  static foo(x: number) { }\n  static bar(y: string) { }\n}\nA.qux = function(x: string) { } // error?\n\nclass B extends A {\n  static x: string; // error?\n  static foo(x: string) { } // error?\n  static main() {\n    B.x = 0; // error\n    B.x = \"\";\n    B.foo(0); // error\n    B.foo(\"\");\n    B.y = 0; // error\n    B.bar(0); // error\n    B.qux(0); // error\n  }\n  static create(): A {\n    return new this();\n  }\n\n  static badCreate(): number {\n    return new this(); // error B ~> number\n  }\n}\n\nclass C<X> {\n  static x: X;\n  static bar(x: X) { }\n  static create(): C<*> {\n    return new this();\n  }\n}\n\nclass D extends C<string> {\n  static main() {\n    D.foo(0); // error?\n\n    D.bar(0);\n  }\n}\n\nvar d: C<*> = D.create();\n(new A: typeof A);\n(B: typeof A);\n\nclass E {\n  static x: number;\n  static foo(): string {\n    this.bar(); // error\n    return this.x; // error\n  }\n}\n\n// note: above classdefs are sufficiently annotated to export\nmodule.exports = {\n  A: A, B: B, C: C, D: D, E: E\n}\n"
  },
  {
    "path": "tests/flow/class_subtyping/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n/* @flow */\nclass A {}\nclass B {}\n\nmodule.exports = { A, B };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nclass A {}\nclass B {}\n\nmodule.exports = { A, B };\n\n`;\n\nexports[`test2.js 1`] = `\n/* @flow */\nvar I = require(\"./test.js\");\n\nclass C extends I.A {}\n\nvar x: I.A = new C();\nvar y: I.B = new C();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nvar I = require(\"./test.js\");\n\nclass C extends I.A {}\n\nvar x: I.A = new C();\nvar y: I.B = new C();\n\n`;\n\nexports[`test3.js 1`] = `\nclass A<X, Y, Z> {}\nclass B extends A<string, number, bool> {}\nclass C<X, Y, Z> extends B {}\n\nvar c: C<number, string, Array<bool>> = new C; // none of the type args matter\nvar a: A<string, number, Array<bool>> = c; // the third type arg is incorrect\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A<X, Y, Z> {}\nclass B extends A<string, number, boolean> {}\nclass C<X, Y, Z> extends B {}\n\nvar c: C<number, string, Array<boolean>> = new C(); // none of the type args matter\nvar a: A<string, number, Array<boolean>> = c; // the third type arg is incorrect\n\n`;\n\nexports[`test4.js 1`] = `\nclass C<X> { x: X; }\n\nfunction foo<X>(c: C<X>, x: X) { }\n\ntype O = { f: number };\n\nfoo((new C: C<O>), { f_: 0 });\n\nclass D extends C<O> {\n  bar() { this.x; }\n}\n\nfoo(new D, { f_: 0 });\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C<X> {\n  x: X;\n}\n\nfunction foo<X>(c: C<X>, x: X) {}\n\ntype O = { f: number };\n\nfoo((new C(): C<O>), { f_: 0 });\n\nclass D extends C<O> {\n  bar() {\n    this.x;\n  }\n}\n\nfoo(new D(), { f_: 0 });\n\n`;\n"
  },
  {
    "path": "tests/flow/class_subtyping/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/class_subtyping/test.js",
    "content": "/* @flow */\nclass A {}\nclass B {}\n\nmodule.exports = { A, B };\n"
  },
  {
    "path": "tests/flow/class_subtyping/test2.js",
    "content": "/* @flow */\nvar I = require(\"./test.js\");\n\nclass C extends I.A {}\n\nvar x: I.A = new C();\nvar y: I.B = new C();\n"
  },
  {
    "path": "tests/flow/class_subtyping/test3.js",
    "content": "class A<X, Y, Z> {}\nclass B extends A<string, number, bool> {}\nclass C<X, Y, Z> extends B {}\n\nvar c: C<number, string, Array<bool>> = new C; // none of the type args matter\nvar a: A<string, number, Array<bool>> = c; // the third type arg is incorrect\n"
  },
  {
    "path": "tests/flow/class_subtyping/test4.js",
    "content": "class C<X> { x: X; }\n\nfunction foo<X>(c: C<X>, x: X) { }\n\ntype O = { f: number };\n\nfoo((new C: C<O>), { f_: 0 });\n\nclass D extends C<O> {\n  bar() { this.x; }\n}\n\nfoo(new D, { f_: 0 });\n"
  },
  {
    "path": "tests/flow/class_type/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nclass A { }\nfunction foo(x: Class<A>): A {\n  return new x(); // OK\n}\n\nclass B {\n  constructor(_: any) { }\n}\nfunction bar(x: Class<B>): B {\n  return new x(); // error (too few args)\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {}\nfunction foo(x: Class<A>): A {\n  return new x(); // OK\n}\n\nclass B {\n  constructor(_: any) {}\n}\nfunction bar(x: Class<B>): B {\n  return new x(); // error (too few args)\n}\n\n`;\n\nexports[`test2.js 1`] = `\n// A function to typecheck values against their types. Covariance of Class<.>\n// makes it useless in such a function (when limited to classes and instances),\n// since everything can be trivially satisfied by going to \\`mixed\\`.\ndeclare function check<X>(cls: $Type<X>, inst: X): void;\n\nclass A { }\nclass B extends A { }\nclass C { }\n\ncheck(B, new A);\ncheck(A, new B);\ncheck(C, new A);\ncheck(C, new B);\ncheck(B, new C);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// A function to typecheck values against their types. Covariance of Class<.>\n// makes it useless in such a function (when limited to classes and instances),\n// since everything can be trivially satisfied by going to \\`mixed\\`.\ndeclare function check<X>(cls: $Type<X>, inst: X): void;\n\nclass A {}\nclass B extends A {}\nclass C {}\n\ncheck(B, new A());\ncheck(A, new B());\ncheck(C, new A());\ncheck(C, new B());\ncheck(B, new C());\n\n`;\n"
  },
  {
    "path": "tests/flow/class_type/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/class_type/test.js",
    "content": "class A { }\nfunction foo(x: Class<A>): A {\n  return new x(); // OK\n}\n\nclass B {\n  constructor(_: any) { }\n}\nfunction bar(x: Class<B>): B {\n  return new x(); // error (too few args)\n}\n"
  },
  {
    "path": "tests/flow/class_type/test2.js",
    "content": "// A function to typecheck values against their types. Covariance of Class<.>\n// makes it useless in such a function (when limited to classes and instances),\n// since everything can be trivially satisfied by going to `mixed`.\ndeclare function check<X>(cls: $Type<X>, inst: X): void;\n\nclass A { }\nclass B extends A { }\nclass C { }\n\ncheck(B, new A);\ncheck(A, new B);\ncheck(C, new A);\ncheck(C, new B);\ncheck(B, new C);\n"
  },
  {
    "path": "tests/flow/classes/A.js",
    "content": "class A {\n  foo(x:number):void { }\n}\n\nmodule.exports = A;\n"
  },
  {
    "path": "tests/flow/classes/B.js",
    "content": "var A = require('./A');\n\nclass B extends A { }\n\nlet b = new B();\n(b.foo: number); // error, number !~> function\n\nmodule.exports = B;\n"
  },
  {
    "path": "tests/flow/classes/C.js",
    "content": "var B = require('./B');\n\nclass C extends B {\n  foo(x:string):void { }\n}\n\nlet c = new C();\n(c.foo: number); // error, number !~> function\n\nmodule.exports = C;\n"
  },
  {
    "path": "tests/flow/classes/D.js",
    "content": "class D { }\nclass E { }\nnew E().x\n"
  },
  {
    "path": "tests/flow/classes/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\nclass A {\n  foo(x:number):void { }\n}\n\nmodule.exports = A;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {\n  foo(x: number): void {}\n}\n\nmodule.exports = A;\n\n`;\n\nexports[`B.js 1`] = `\nvar A = require('./A');\n\nclass B extends A { }\n\nlet b = new B();\n(b.foo: number); // error, number !~> function\n\nmodule.exports = B;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar A = require(\"./A\");\n\nclass B extends A {}\n\nlet b = new B();\n(b.foo: number); // error, number !~> function\n\nmodule.exports = B;\n\n`;\n\nexports[`C.js 1`] = `\nvar B = require('./B');\n\nclass C extends B {\n  foo(x:string):void { }\n}\n\nlet c = new C();\n(c.foo: number); // error, number !~> function\n\nmodule.exports = C;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar B = require(\"./B\");\n\nclass C extends B {\n  foo(x: string): void {}\n}\n\nlet c = new C();\n(c.foo: number); // error, number !~> function\n\nmodule.exports = C;\n\n`;\n\nexports[`D.js 1`] = `\nclass D { }\nclass E { }\nnew E().x\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass D {}\nclass E {}\nnew E().x;\n\n`;\n\nexports[`class_shapes.js 1`] = `\n/* @flow */\n\ntype Foo = {\n  a: string;    // exists in TestClass\n  b: string;    // doesn't exist\n  c?: ?string;  // exists in TestClass, optional\n  d?: number;   // doesn't exist\n}\n\nclass TestClass {\n  a: string;\n  c: ?string;\n}\n\nvar x = new TestClass();\n\nx.a; // ok\nx.b; // error, TestClass has no b\nx.c; // ok\nx.d; // error, TestClass has no d\n\nvar y : Foo = x;\ny.b; // error, doesn't exist in TestClass\ny.d; // ok, it's optional\n\nclass Test2Superclass {\n  a: number;  // conflicts with cast to Foo\n  c: ?number; // conflicts with cast to Foo\n}\nclass Test2Class extends Test2Superclass {\n  b: number;  // conflicts with cast to Foo\n}\n\nvar z = new Test2Class();\nvar w : Foo = z;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\ntype Foo = {\n  a: string, // exists in TestClass\n  b: string, // doesn't exist\n  c?: ?string, // exists in TestClass, optional\n  d?: number // doesn't exist\n};\n\nclass TestClass {\n  a: string;\n  c: ?string;\n}\n\nvar x = new TestClass();\n\nx.a; // ok\nx.b; // error, TestClass has no b\nx.c; // ok\nx.d; // error, TestClass has no d\n\nvar y: Foo = x;\ny.b; // error, doesn't exist in TestClass\ny.d; // ok, it's optional\n\nclass Test2Superclass {\n  a: number; // conflicts with cast to Foo\n  c: ?number; // conflicts with cast to Foo\n}\nclass Test2Class extends Test2Superclass {\n  b: number; // conflicts with cast to Foo\n}\n\nvar z = new Test2Class();\nvar w: Foo = z;\n\n`;\n\nexports[`expr.js 1`] = `\nvar Bar = class Foo {\n  static factory(): Foo { // OK: Foo is a type in this scope\n    return new Foo()      // OK: Foo is a runtime binding in this scope\n  }\n};\n\nvar bar1: Bar = new Bar() // OK\nvar bar2: Bar = Bar.factory() // OK\n\n// NB: Don't write expected errors using Foo to avoid error collapse hiding an\n// unexpected failure in the above code.\n\nvar B = class Baz { }\nvar b = new Baz(); // error: Baz is not a runtime binding in this scope\n\nvar C = class Qux { }\nvar c: Qux = new C(); // error: Qux is not a type in this scope\n\n// OK: anon classes create no binding, but can be bound manually\nvar Anon = class { }\nvar anon: Anon = new Anon();\n\nclass Alias { }\nvar _Alias = class Alias {\n  static factory(): Alias {\n    return new Alias();\n  }\n}\nvar alias1: Alias = new _Alias(); // error: bad pun\nvar alias2: Alias = _Alias.factory(); // error: bad pun\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar Bar = class Foo {\n  static factory(): Foo {\n    // OK: Foo is a type in this scope\n    return new Foo(); // OK: Foo is a runtime binding in this scope\n  }\n};\n\nvar bar1: Bar = new Bar(); // OK\nvar bar2: Bar = Bar.factory(); // OK\n\n// NB: Don't write expected errors using Foo to avoid error collapse hiding an\n// unexpected failure in the above code.\n\nvar B = class Baz {};\nvar b = new Baz(); // error: Baz is not a runtime binding in this scope\n\nvar C = class Qux {};\nvar c: Qux = new C(); // error: Qux is not a type in this scope\n\n// OK: anon classes create no binding, but can be bound manually\nvar Anon = class {};\nvar anon: Anon = new Anon();\n\nclass Alias {}\nvar _Alias = class Alias {\n  static factory(): Alias {\n    return new Alias();\n  }\n};\nvar alias1: Alias = new _Alias(); // error: bad pun\nvar alias2: Alias = _Alias.factory(); // error: bad pun\n\n`;\n\nexports[`extends_any.js 1`] = `\nconst Base: any = class {}\nclass Derived1 extends Base {}\nclass Derived2 extends Derived1 {\n    m() {}\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst Base: any = class {};\nclass Derived1 extends Base {}\nclass Derived2 extends Derived1 {\n  m() {}\n}\n\n`;\n\nexports[`loc.js 1`] = `\n/* @flow */\n\ntype Foo = number\n\nclass Foo {} // error, shadows type Foo\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\ntype Foo = number;\n\nclass Foo {} // error, shadows type Foo\n\n`;\n\nexports[`statics.js 1`] = `\n/* @flow */\n\nclass C {\n  static p: string;\n}\nC.p = \"hi\";\n\n// Class static fields are compatible with object types\n(C: {p:string}); // ok\n(C: {p:number}); // errors, string ~> number & vice versa (unify)\n\ndeclare var o: {p:number};\n(o: Class<C>); // error, object type incompatible with class type\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nclass C {\n  static p: string;\n}\nC.p = \"hi\";\n\n// Class static fields are compatible with object types\n(C: { p: string }); // ok\n(C: { p: number }); // errors, string ~> number & vice versa (unify)\n\ndeclare var o: { p: number };\n(o: Class<C>); // error, object type incompatible with class type\n\n`;\n"
  },
  {
    "path": "tests/flow/classes/class_shapes.js",
    "content": "/* @flow */\n\ntype Foo = {\n  a: string;    // exists in TestClass\n  b: string;    // doesn't exist\n  c?: ?string;  // exists in TestClass, optional\n  d?: number;   // doesn't exist\n}\n\nclass TestClass {\n  a: string;\n  c: ?string;\n}\n\nvar x = new TestClass();\n\nx.a; // ok\nx.b; // error, TestClass has no b\nx.c; // ok\nx.d; // error, TestClass has no d\n\nvar y : Foo = x;\ny.b; // error, doesn't exist in TestClass\ny.d; // ok, it's optional\n\nclass Test2Superclass {\n  a: number;  // conflicts with cast to Foo\n  c: ?number; // conflicts with cast to Foo\n}\nclass Test2Class extends Test2Superclass {\n  b: number;  // conflicts with cast to Foo\n}\n\nvar z = new Test2Class();\nvar w : Foo = z;\n"
  },
  {
    "path": "tests/flow/classes/expr.js",
    "content": "var Bar = class Foo {\n  static factory(): Foo { // OK: Foo is a type in this scope\n    return new Foo()      // OK: Foo is a runtime binding in this scope\n  }\n};\n\nvar bar1: Bar = new Bar() // OK\nvar bar2: Bar = Bar.factory() // OK\n\n// NB: Don't write expected errors using Foo to avoid error collapse hiding an\n// unexpected failure in the above code.\n\nvar B = class Baz { }\nvar b = new Baz(); // error: Baz is not a runtime binding in this scope\n\nvar C = class Qux { }\nvar c: Qux = new C(); // error: Qux is not a type in this scope\n\n// OK: anon classes create no binding, but can be bound manually\nvar Anon = class { }\nvar anon: Anon = new Anon();\n\nclass Alias { }\nvar _Alias = class Alias {\n  static factory(): Alias {\n    return new Alias();\n  }\n}\nvar alias1: Alias = new _Alias(); // error: bad pun\nvar alias2: Alias = _Alias.factory(); // error: bad pun\n"
  },
  {
    "path": "tests/flow/classes/extends_any.js",
    "content": "const Base: any = class {}\nclass Derived1 extends Base {}\nclass Derived2 extends Derived1 {\n    m() {}\n}\n"
  },
  {
    "path": "tests/flow/classes/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/classes/loc.js",
    "content": "/* @flow */\n\ntype Foo = number\n\nclass Foo {} // error, shadows type Foo\n"
  },
  {
    "path": "tests/flow/classes/statics.js",
    "content": "/* @flow */\n\nclass C {\n  static p: string;\n}\nC.p = \"hi\";\n\n// Class static fields are compatible with object types\n(C: {p:string}); // ok\n(C: {p:number}); // errors, string ~> number & vice versa (unify)\n\ndeclare var o: {p:number};\n(o: Class<C>); // error, object type incompatible with class type\n"
  },
  {
    "path": "tests/flow/closure/Closure.js",
    "content": "/***\n * Test tracking of variable types across closure calls.\n * @flow\n */\n\nfunction takes_string(_:string) { }\n\n// global write from function\n//\n\nvar global_x = \"hello\";\n\nfunction global_f() { }\nfunction global_g() { global_x = 42; }\n\nglobal_f();\ntakes_string(global_x); // ok\n\nglobal_g();\ntakes_string(global_x); // error\n\nglobal_x = 42;  // shouldn't pollute linear refinement\n\n// local write from function\n//\n\nfunction local_func() {\n\n  var local_x = \"hello\";\n\n  function local_f() { }\n  function local_g() { local_x = 42; }\n\n  local_f();\n  takes_string(local_x); // ok\n\n  local_g();\n  takes_string(local_x); // error\n\n  local_x = 42;  // shouldn't pollute linear refinement\n}\n\n// global write from method\n//\n\nvar global_y = \"hello\";\n\nvar global_o = {\n  f: function() { },\n  g: function() { global_y = 42; }\n}\n\nglobal_o.f();\ntakes_string(global_y); // ok\n\nglobal_o.g();\ntakes_string(global_y); // error\n\nglobal_y = 42;  // shouldn't pollute linear refinement\n\n// local write from method\n//\n\nfunction local_meth() {\n\n  var local_y = \"hello\";\n\n  var local_o = {\n    f: function() { },\n    g: function() { local_y = 42; }\n  }\n\n  local_o.f();\n  takes_string(local_y); // ok\n\n  local_o.g();\n  takes_string(local_y); // error\n\n  local_y = 42;  // shouldn't pollute linear refinement\n}\n"
  },
  {
    "path": "tests/flow/closure/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Closure.js 1`] = `\n/***\n * Test tracking of variable types across closure calls.\n * @flow\n */\n\nfunction takes_string(_:string) { }\n\n// global write from function\n//\n\nvar global_x = \"hello\";\n\nfunction global_f() { }\nfunction global_g() { global_x = 42; }\n\nglobal_f();\ntakes_string(global_x); // ok\n\nglobal_g();\ntakes_string(global_x); // error\n\nglobal_x = 42;  // shouldn't pollute linear refinement\n\n// local write from function\n//\n\nfunction local_func() {\n\n  var local_x = \"hello\";\n\n  function local_f() { }\n  function local_g() { local_x = 42; }\n\n  local_f();\n  takes_string(local_x); // ok\n\n  local_g();\n  takes_string(local_x); // error\n\n  local_x = 42;  // shouldn't pollute linear refinement\n}\n\n// global write from method\n//\n\nvar global_y = \"hello\";\n\nvar global_o = {\n  f: function() { },\n  g: function() { global_y = 42; }\n}\n\nglobal_o.f();\ntakes_string(global_y); // ok\n\nglobal_o.g();\ntakes_string(global_y); // error\n\nglobal_y = 42;  // shouldn't pollute linear refinement\n\n// local write from method\n//\n\nfunction local_meth() {\n\n  var local_y = \"hello\";\n\n  var local_o = {\n    f: function() { },\n    g: function() { local_y = 42; }\n  }\n\n  local_o.f();\n  takes_string(local_y); // ok\n\n  local_o.g();\n  takes_string(local_y); // error\n\n  local_y = 42;  // shouldn't pollute linear refinement\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/***\n * Test tracking of variable types across closure calls.\n * @flow\n */\n\nfunction takes_string(_: string) {}\n\n// global write from function\n//\n\nvar global_x = \"hello\";\n\nfunction global_f() {}\nfunction global_g() {\n  global_x = 42;\n}\n\nglobal_f();\ntakes_string(global_x); // ok\n\nglobal_g();\ntakes_string(global_x); // error\n\nglobal_x = 42; // shouldn't pollute linear refinement\n\n// local write from function\n//\n\nfunction local_func() {\n  var local_x = \"hello\";\n\n  function local_f() {}\n  function local_g() {\n    local_x = 42;\n  }\n\n  local_f();\n  takes_string(local_x); // ok\n\n  local_g();\n  takes_string(local_x); // error\n\n  local_x = 42; // shouldn't pollute linear refinement\n}\n\n// global write from method\n//\n\nvar global_y = \"hello\";\n\nvar global_o = {\n  f: function() {},\n  g: function() {\n    global_y = 42;\n  }\n};\n\nglobal_o.f();\ntakes_string(global_y); // ok\n\nglobal_o.g();\ntakes_string(global_y); // error\n\nglobal_y = 42; // shouldn't pollute linear refinement\n\n// local write from method\n//\n\nfunction local_meth() {\n  var local_y = \"hello\";\n\n  var local_o = {\n    f: function() {},\n    g: function() {\n      local_y = 42;\n    }\n  };\n\n  local_o.f();\n  takes_string(local_y); // ok\n\n  local_o.g();\n  takes_string(local_y); // error\n\n  local_y = 42; // shouldn't pollute linear refinement\n}\n\n`;\n\nexports[`cond_havoc.js 1`] = `\n// @flow\n\n// from sam, https://github.com/facebook/flow/issues/780\n// call to f() within if should properly havoc x.\n//\nfunction example(b: bool): number {\n  var x = 0;\n  function f() { x = \"\" }\n  if (b) {\n    f();\n  }\n  return x; // error, string ~/~> number (return type anno) TODO\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// from sam, https://github.com/facebook/flow/issues/780\n// call to f() within if should properly havoc x.\n//\nfunction example(b: boolean): number {\n  var x = 0;\n  function f() {\n    x = \"\";\n  }\n  if (b) {\n    f();\n  }\n  return x; // error, string ~/~> number (return type anno) TODO\n}\n\n`;\n\nexports[`const.js 1`] = `\n/***\n * consts retain refinements\n * @flow\n */\n\n// global, anybody can call it at any time\nvar call_me: () => void = () => {};\n\nfunction g(x: ?number) {\n\n  const const_x = x;\n  if (const_x) {\n    // ok: if const_x is truthy here, it's truthy everywhere\n    call_me = () => { var y:number = const_x; };\n  }\n\n  var var_x = x;\n  if (var_x) {\n    // error: var_x might no longer be truthy when call_me is called\n    call_me = () => { var y:number = var_x; };  // error\n  }\n  var_x = null;\n}\n\nfunction h(x: number | string | boolean) {\n\n  const const_x = x;\n  if (typeof(const_x) == \"number\") {\n    call_me = () => { var y:number = const_x; };  // ok\n  } else if (typeof(const_x) == \"string\") {\n    call_me = () => { var y:string = const_x; };  // ok\n  } else if (typeof(const_x) == \"boolean\") {\n    call_me = () => { var y:boolean = const_x; };  // ok\n  }\n\n  var var_x = x;\n  if (typeof(var_x) == \"number\") {\n    call_me = () => { var y:number = var_x; };  // error\n  } else if (typeof(var_x) == \"string\") {\n    call_me = () => { var y:string = var_x; };  // error\n  } else if (typeof(var_x) == \"boolean\") {\n    call_me = () => { var y:boolean = var_x; };  // error\n  }\n}\n\n// in a galaxy far far away\ncall_me();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/***\n * consts retain refinements\n * @flow\n */\n\n// global, anybody can call it at any time\nvar call_me: () => void = () => {};\n\nfunction g(x: ?number) {\n  const const_x = x;\n  if (const_x) {\n    // ok: if const_x is truthy here, it's truthy everywhere\n    call_me = () => {\n      var y: number = const_x;\n    };\n  }\n\n  var var_x = x;\n  if (var_x) {\n    // error: var_x might no longer be truthy when call_me is called\n    call_me = () => {\n      var y: number = var_x;\n    }; // error\n  }\n  var_x = null;\n}\n\nfunction h(x: number | string | boolean) {\n  const const_x = x;\n  if (typeof const_x == \"number\") {\n    call_me = () => {\n      var y: number = const_x;\n    }; // ok\n  } else if (typeof const_x == \"string\") {\n    call_me = () => {\n      var y: string = const_x;\n    }; // ok\n  } else if (typeof const_x == \"boolean\") {\n    call_me = () => {\n      var y: boolean = const_x;\n    }; // ok\n  }\n\n  var var_x = x;\n  if (typeof var_x == \"number\") {\n    call_me = () => {\n      var y: number = var_x;\n    }; // error\n  } else if (typeof var_x == \"string\") {\n    call_me = () => {\n      var y: string = var_x;\n    }; // error\n  } else if (typeof var_x == \"boolean\") {\n    call_me = () => {\n      var y: boolean = var_x;\n    }; // error\n  }\n}\n\n// in a galaxy far far away\ncall_me();\n\n`;\n"
  },
  {
    "path": "tests/flow/closure/cond_havoc.js",
    "content": "// @flow\n\n// from sam, https://github.com/facebook/flow/issues/780\n// call to f() within if should properly havoc x.\n//\nfunction example(b: bool): number {\n  var x = 0;\n  function f() { x = \"\" }\n  if (b) {\n    f();\n  }\n  return x; // error, string ~/~> number (return type anno) TODO\n}\n"
  },
  {
    "path": "tests/flow/closure/const.js",
    "content": "/***\n * consts retain refinements\n * @flow\n */\n\n// global, anybody can call it at any time\nvar call_me: () => void = () => {};\n\nfunction g(x: ?number) {\n\n  const const_x = x;\n  if (const_x) {\n    // ok: if const_x is truthy here, it's truthy everywhere\n    call_me = () => { var y:number = const_x; };\n  }\n\n  var var_x = x;\n  if (var_x) {\n    // error: var_x might no longer be truthy when call_me is called\n    call_me = () => { var y:number = var_x; };  // error\n  }\n  var_x = null;\n}\n\nfunction h(x: number | string | boolean) {\n\n  const const_x = x;\n  if (typeof(const_x) == \"number\") {\n    call_me = () => { var y:number = const_x; };  // ok\n  } else if (typeof(const_x) == \"string\") {\n    call_me = () => { var y:string = const_x; };  // ok\n  } else if (typeof(const_x) == \"boolean\") {\n    call_me = () => { var y:boolean = const_x; };  // ok\n  }\n\n  var var_x = x;\n  if (typeof(var_x) == \"number\") {\n    call_me = () => { var y:number = var_x; };  // error\n  } else if (typeof(var_x) == \"string\") {\n    call_me = () => { var y:string = var_x; };  // error\n  } else if (typeof(var_x) == \"boolean\") {\n    call_me = () => { var y:boolean = var_x; };  // error\n  }\n}\n\n// in a galaxy far far away\ncall_me();\n"
  },
  {
    "path": "tests/flow/closure/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/commonjs/Abs.js",
    "content": "\nfunction f(x:string) { }\n\nmodule.exports = f;\n"
  },
  {
    "path": "tests/flow/commonjs/Rel.js",
    "content": "\nvar f = require('./Abs');\n\nf(0);\n"
  },
  {
    "path": "tests/flow/commonjs/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Abs.js 1`] = `\n\nfunction f(x:string) { }\n\nmodule.exports = f;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction f(x: string) {}\n\nmodule.exports = f;\n\n`;\n\nexports[`Rel.js 1`] = `\n\nvar f = require('./Abs');\n\nf(0);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar f = require(\"./Abs\");\n\nf(0);\n\n`;\n"
  },
  {
    "path": "tests/flow/commonjs/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/computed_props/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nvar ColorId = {\n  RED: 'R',\n  GREEN: 'G',\n  BLUE: 'B',\n};\n\nvar ColorNumber = {\n  RED: 'ff0000',\n  GREEN: '00ff00',\n  BLUE: '0000ff',\n};\n\nvar ColorIdToNumber = {\n  [ColorId.RED]: ColorNumber.RED,\n  [ColorId.GREEN]: ColorNumber.GREEN,\n  [ColorId.BLUE]: ColorNumber.BLUE,\n};\n\n(ColorIdToNumber[ColorId.RED]: 'ffffff'); // oops\n\nColorIdToNumber.XXX; // oops\n\nmodule.exports = { ColorId, ColorNumber };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar ColorId = {\n  RED: \"R\",\n  GREEN: \"G\",\n  BLUE: \"B\"\n};\n\nvar ColorNumber = {\n  RED: \"ff0000\",\n  GREEN: \"00ff00\",\n  BLUE: \"0000ff\"\n};\n\nvar ColorIdToNumber = {\n  [ColorId.RED]: ColorNumber.RED,\n  [ColorId.GREEN]: ColorNumber.GREEN,\n  [ColorId.BLUE]: ColorNumber.BLUE\n};\n\n(ColorIdToNumber[ColorId.RED]: \"ffffff\"); // oops\n\nColorIdToNumber.XXX; // oops\n\nmodule.exports = { ColorId, ColorNumber };\n\n`;\n\nexports[`test2.js 1`] = `\nvar { ColorId, ColorNumber } = require('./test');\nvar ColorIdToNumber = {\n  [ColorId.RED]: ColorNumber.RED,\n  [ColorId.GREEN]: ColorNumber.GREEN,\n  [ColorId.BLUE]: ColorNumber.BLUE,\n};\n\n(ColorIdToNumber[ColorId.GREEN]: 'ffffff'); // oops\n\nmodule.exports = ColorIdToNumber;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar { ColorId, ColorNumber } = require(\"./test\");\nvar ColorIdToNumber = {\n  [ColorId.RED]: ColorNumber.RED,\n  [ColorId.GREEN]: ColorNumber.GREEN,\n  [ColorId.BLUE]: ColorNumber.BLUE\n};\n\n(ColorIdToNumber[ColorId.GREEN]: \"ffffff\"); // oops\n\nmodule.exports = ColorIdToNumber;\n\n`;\n\nexports[`test3.js 1`] = `\nvar { ColorId } = require('./test');\nvar ColorIdToNumber = require('./test2');\n\n(ColorIdToNumber[ColorId.BLUE]: 'ffffff'); // oops\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar { ColorId } = require(\"./test\");\nvar ColorIdToNumber = require(\"./test2\");\n\n(ColorIdToNumber[ColorId.BLUE]: \"ffffff\"); // oops\n\n`;\n\nexports[`test4.js 1`] = `\nmodule.exports = 'hello';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nmodule.exports = \"hello\";\n\n`;\n\nexports[`test5.js 1`] = `\nvar hello = require('./test4');\nvar dummy = require('./test');\nmodule.exports = {\n  ...dummy,\n  [hello]: 'world',\n  ...dummy,\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar hello = require(\"./test4\");\nvar dummy = require(\"./test\");\nmodule.exports = {\n  ...dummy,\n  [hello]: \"world\",\n  ...dummy\n};\n\n`;\n\nexports[`test6.js 1`] = `\nvar o = require('./test5');\n(o.hello: 'nothing'); // oops\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar o = require(\"./test5\");\n(o.hello: \"nothing\"); // oops\n\n`;\n\nexports[`test7.js 1`] = `\nvar obj = {x: 0, m() { return this.x }}\nvar x: string = obj['m'](); // error, number ~> string\n\nvar arr = [function() { return this.length }];\nvar y: string = arr[0](); // error: number ~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar obj = {\n  x: 0,\n  m() {\n    return this.x;\n  }\n};\nvar x: string = obj[\"m\"](); // error, number ~> string\n\nvar arr = [\n  function() {\n    return this.length;\n  }\n];\nvar y: string = arr[0](); // error: number ~> string\n\n`;\n"
  },
  {
    "path": "tests/flow/computed_props/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/computed_props/test.js",
    "content": "var ColorId = {\n  RED: 'R',\n  GREEN: 'G',\n  BLUE: 'B',\n};\n\nvar ColorNumber = {\n  RED: 'ff0000',\n  GREEN: '00ff00',\n  BLUE: '0000ff',\n};\n\nvar ColorIdToNumber = {\n  [ColorId.RED]: ColorNumber.RED,\n  [ColorId.GREEN]: ColorNumber.GREEN,\n  [ColorId.BLUE]: ColorNumber.BLUE,\n};\n\n(ColorIdToNumber[ColorId.RED]: 'ffffff'); // oops\n\nColorIdToNumber.XXX; // oops\n\nmodule.exports = { ColorId, ColorNumber };\n"
  },
  {
    "path": "tests/flow/computed_props/test2.js",
    "content": "var { ColorId, ColorNumber } = require('./test');\nvar ColorIdToNumber = {\n  [ColorId.RED]: ColorNumber.RED,\n  [ColorId.GREEN]: ColorNumber.GREEN,\n  [ColorId.BLUE]: ColorNumber.BLUE,\n};\n\n(ColorIdToNumber[ColorId.GREEN]: 'ffffff'); // oops\n\nmodule.exports = ColorIdToNumber;\n"
  },
  {
    "path": "tests/flow/computed_props/test3.js",
    "content": "var { ColorId } = require('./test');\nvar ColorIdToNumber = require('./test2');\n\n(ColorIdToNumber[ColorId.BLUE]: 'ffffff'); // oops\n"
  },
  {
    "path": "tests/flow/computed_props/test4.js",
    "content": "module.exports = 'hello';\n"
  },
  {
    "path": "tests/flow/computed_props/test5.js",
    "content": "var hello = require('./test4');\nvar dummy = require('./test');\nmodule.exports = {\n  ...dummy,\n  [hello]: 'world',\n  ...dummy,\n};\n"
  },
  {
    "path": "tests/flow/computed_props/test6.js",
    "content": "var o = require('./test5');\n(o.hello: 'nothing'); // oops\n"
  },
  {
    "path": "tests/flow/computed_props/test7.js",
    "content": "var obj = {x: 0, m() { return this.x }}\nvar x: string = obj['m'](); // error, number ~> string\n\nvar arr = [function() { return this.length }];\nvar y: string = arr[0](); // error: number ~> string\n"
  },
  {
    "path": "tests/flow/conditional/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`conditional.js 1`] = `\n/* @flow */\n\nfunction a(): number {\n  var x: ?string = null;\n  return x ? 1 : 0;\n}\n\nfunction b(): number {\n    var x: ?number = null;\n    return x != null ? x : 0;\n}\n\nfunction c(): number {\n  // equivalent to \\`return (x && 1) || 0\\`\n  var x = false;\n  var temp = (x ? 1 : x);\n  return temp ? temp : 0;\n}\n\nfunction d(): string { // expected \\`: number | boolean\\`\n  // equivalent to \\`return x != null && x\\`\n  var x: ?number = null;\n  return (x != null) ? x : (x != null);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction a(): number {\n  var x: ?string = null;\n  return x ? 1 : 0;\n}\n\nfunction b(): number {\n  var x: ?number = null;\n  return x != null ? x : 0;\n}\n\nfunction c(): number {\n  // equivalent to \\`return (x && 1) || 0\\`\n  var x = false;\n  var temp = x ? 1 : x;\n  return temp ? temp : 0;\n}\n\nfunction d(): string {\n  // expected \\`: number | boolean\\`\n  // equivalent to \\`return x != null && x\\`\n  var x: ?number = null;\n  return x != null ? x : x != null;\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/conditional/conditional.js",
    "content": "/* @flow */\n\nfunction a(): number {\n  var x: ?string = null;\n  return x ? 1 : 0;\n}\n\nfunction b(): number {\n    var x: ?number = null;\n    return x != null ? x : 0;\n}\n\nfunction c(): number {\n  // equivalent to `return (x && 1) || 0`\n  var x = false;\n  var temp = (x ? 1 : x);\n  return temp ? temp : 0;\n}\n\nfunction d(): string { // expected `: number | boolean`\n  // equivalent to `return x != null && x`\n  var x: ?number = null;\n  return (x != null) ? x : (x != null);\n}\n"
  },
  {
    "path": "tests/flow/conditional/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/config_all/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`no_at_flow.js 1`] = `\nvar x: number = \"not a number\"; // Error: string ~> number\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x: number = \"not a number\"; // Error: string ~> number\n\n`;\n"
  },
  {
    "path": "tests/flow/config_all/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/config_all/no_at_flow.js",
    "content": "var x: number = \"not a number\"; // Error: string ~> number\n"
  },
  {
    "path": "tests/flow/config_all_false/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`no_at_flow.js 1`] = `\nvar x: number = \"not a number\"; // No error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x: number = \"not a number\"; // No error\n\n`;\n"
  },
  {
    "path": "tests/flow/config_all_false/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/config_all_false/no_at_flow.js",
    "content": "var x: number = \"not a number\"; // No error\n"
  },
  {
    "path": "tests/flow/config_all_weak/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`no_at_flow.js 1`] = `\nvar x;\n\nx.length;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x;\n\nx.length;\n\n`;\n"
  },
  {
    "path": "tests/flow/config_all_weak/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/config_all_weak/no_at_flow.js",
    "content": "var x;\n\nx.length;\n"
  },
  {
    "path": "tests/flow/config_file_extensions/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n/*\n * @flow\n */\n\nfunction foo(x) {\n  var a: number = 'asdf';\n  return x * 10;\n}\n\n// This file should be ignored, so this should not result in an error\nfoo('Hello, world!');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/*\n * @flow\n */\n\nfunction foo(x) {\n  var a: number = \"asdf\";\n  return x * 10;\n}\n\n// This file should be ignored, so this should not result in an error\nfoo(\"Hello, world!\");\n\n`;\n"
  },
  {
    "path": "tests/flow/config_file_extensions/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/config_file_extensions/test.js",
    "content": "/*\n * @flow\n */\n\nfunction foo(x) {\n  var a: number = 'asdf';\n  return x * 10;\n}\n\n// This file should be ignored, so this should not result in an error\nfoo('Hello, world!');\n"
  },
  {
    "path": "tests/flow/config_ignore/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`foo.js 1`] = `\n/* @flow */\n\n// No error, this file is ignored\nvar x: number = \"string\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n// No error, this file is ignored\nvar x: number = \"string\";\n\n`;\n"
  },
  {
    "path": "tests/flow/config_ignore/dir/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`foo.js 1`] = `\n/* @flow */\n\nvar x: number = \"string\"; // Error string ~> number\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar x: number = \"string\"; // Error string ~> number\n\n`;\n"
  },
  {
    "path": "tests/flow/config_ignore/dir/foo.js",
    "content": "/* @flow */\n\nvar x: number = \"string\"; // Error string ~> number\n"
  },
  {
    "path": "tests/flow/config_ignore/dir/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/config_ignore/foo.js",
    "content": "/* @flow */\n\n// No error, this file is ignored\nvar x: number = \"string\";\n"
  },
  {
    "path": "tests/flow/config_ignore/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/config_module_name_mapper_PROJECT_ROOT-1.0/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`main.js 1`] = `\n// @flow\n\nimport {test} from 'testmodule';\n\nvar a: number = test;\nvar b: string = test; // Error: number ~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport { test } from \"testmodule\";\n\nvar a: number = test;\nvar b: string = test; // Error: number ~> string\n\n`;\n"
  },
  {
    "path": "tests/flow/config_module_name_mapper_PROJECT_ROOT-1.0/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/config_module_name_mapper_PROJECT_ROOT-1.0/main.js",
    "content": "// @flow\n\nimport {test} from 'testmodule';\n\nvar a: number = test;\nvar b: string = test; // Error: number ~> string\n"
  },
  {
    "path": "tests/flow/config_module_name_mapper_PROJECT_ROOT-1.0/src/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`testmodule.js 1`] = `\n// @flow\n\nexport let test = 42;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport let test = 42;\n\n`;\n"
  },
  {
    "path": "tests/flow/config_module_name_mapper_PROJECT_ROOT-1.0/src/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/config_module_name_mapper_PROJECT_ROOT-1.0/src/testmodule.js",
    "content": "// @flow\n\nexport let test = 42;\n"
  },
  {
    "path": "tests/flow/config_module_name_mapper_filetype/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n// @flow\n\nimport {className} from \"./SomeCSSFile.css\";\nimport {doesntExist} from \"./SomeCSSFile.css\"; // Error: \\`doestExist\\` isn't an export\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport { className } from \"./SomeCSSFile.css\";\nimport { doesntExist } from \"./SomeCSSFile.css\"; // Error: \\`doestExist\\` isn't an export\n\n`;\n"
  },
  {
    "path": "tests/flow/config_module_name_mapper_filetype/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/config_module_name_mapper_filetype/test.js",
    "content": "// @flow\n\nimport {className} from \"./SomeCSSFile.css\";\nimport {doesntExist} from \"./SomeCSSFile.css\"; // Error: `doestExist` isn't an export\n"
  },
  {
    "path": "tests/flow/config_module_name_rewrite_haste/A.js",
    "content": "/* @flow */\n\nvar m1 = require('1DoesntExist');\nimport {numVal as numVal1} from '1DoesntExist';\nvar a_1: number = m1.numVal;\nvar a_2: number = numVal1;\n\n// Error: 'Exists2' is not a valid module name\n//\n// This tests that, for haste, the first name_mapper regexp that happens to\n// match the given module name string is picked.\nvar m2 = require('2DoesntExist'); // Error\nimport {numVal as numVal2} from '3DoesntExist'; // Error\n"
  },
  {
    "path": "tests/flow/config_module_name_rewrite_haste/Exists.js",
    "content": "/**\n * @providesModule Exists\n * @flow\n */\n\nmodule.exports = {\n  numVal: 42\n};\n"
  },
  {
    "path": "tests/flow/config_module_name_rewrite_haste/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\n/* @flow */\n\nvar m1 = require('1DoesntExist');\nimport {numVal as numVal1} from '1DoesntExist';\nvar a_1: number = m1.numVal;\nvar a_2: number = numVal1;\n\n// Error: 'Exists2' is not a valid module name\n//\n// This tests that, for haste, the first name_mapper regexp that happens to\n// match the given module name string is picked.\nvar m2 = require('2DoesntExist'); // Error\nimport {numVal as numVal2} from '3DoesntExist'; // Error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar m1 = require(\"1DoesntExist\");\nimport { numVal as numVal1 } from \"1DoesntExist\";\nvar a_1: number = m1.numVal;\nvar a_2: number = numVal1;\n\n// Error: 'Exists2' is not a valid module name\n//\n// This tests that, for haste, the first name_mapper regexp that happens to\n// match the given module name string is picked.\nvar m2 = require(\"2DoesntExist\"); // Error\nimport { numVal as numVal2 } from \"3DoesntExist\"; // Error\n\n`;\n\nexports[`Exists.js 1`] = `\n/**\n * @providesModule Exists\n * @flow\n */\n\nmodule.exports = {\n  numVal: 42\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule Exists\n * @flow\n */\n\nmodule.exports = {\n  numVal: 42\n};\n\n`;\n"
  },
  {
    "path": "tests/flow/config_module_name_rewrite_haste/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/config_module_name_rewrite_node/A.js",
    "content": "/* @flow */\n\nvar m1 = require('./1DoesntExist');\nvar a_1: number = m1.numVal;\nvar a_2: string = m1.numVal; // Error: number ~> string\nimport {numVal} from './1DoesntExist';\nvar a_3: number = numVal;\nvar a_4: string = numVal; // Error: number ~> string\n\n// This tests that, for node, the first name mapping that both matches *and*\n// results in a valid module filename is picked.\nvar m2 = require('./2DoesntExist');\nvar b_1: number = m2.numVal;\nvar b_2: string = m2.numVal; // Error: number ~> string\nimport {numVal as numVal2} from './3DoesntExist';\nvar b_3: number = numVal2;\nvar b_4: string = numVal2; // Error: number ~> string\n\n// node_modules/Exists/index.js\nvar m3 = require('4DoesntExist');\nvar c_1: number = m3.numVal;\nvar c_2: string = m3.numVal; // Error: number ~> string\nimport {numVal as numVal3} from '5DoesntExist';\nvar c_3: number = numVal3;\nvar c_4: string = numVal3; // Error: number ~> string\n"
  },
  {
    "path": "tests/flow/config_module_name_rewrite_node/Exists.js",
    "content": "/* @flow */\n\nmodule.exports = {\n  numVal: 42\n};\n"
  },
  {
    "path": "tests/flow/config_module_name_rewrite_node/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\n/* @flow */\n\nvar m1 = require('./1DoesntExist');\nvar a_1: number = m1.numVal;\nvar a_2: string = m1.numVal; // Error: number ~> string\nimport {numVal} from './1DoesntExist';\nvar a_3: number = numVal;\nvar a_4: string = numVal; // Error: number ~> string\n\n// This tests that, for node, the first name mapping that both matches *and*\n// results in a valid module filename is picked.\nvar m2 = require('./2DoesntExist');\nvar b_1: number = m2.numVal;\nvar b_2: string = m2.numVal; // Error: number ~> string\nimport {numVal as numVal2} from './3DoesntExist';\nvar b_3: number = numVal2;\nvar b_4: string = numVal2; // Error: number ~> string\n\n// node_modules/Exists/index.js\nvar m3 = require('4DoesntExist');\nvar c_1: number = m3.numVal;\nvar c_2: string = m3.numVal; // Error: number ~> string\nimport {numVal as numVal3} from '5DoesntExist';\nvar c_3: number = numVal3;\nvar c_4: string = numVal3; // Error: number ~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar m1 = require(\"./1DoesntExist\");\nvar a_1: number = m1.numVal;\nvar a_2: string = m1.numVal; // Error: number ~> string\nimport { numVal } from \"./1DoesntExist\";\nvar a_3: number = numVal;\nvar a_4: string = numVal; // Error: number ~> string\n\n// This tests that, for node, the first name mapping that both matches *and*\n// results in a valid module filename is picked.\nvar m2 = require(\"./2DoesntExist\");\nvar b_1: number = m2.numVal;\nvar b_2: string = m2.numVal; // Error: number ~> string\nimport { numVal as numVal2 } from \"./3DoesntExist\";\nvar b_3: number = numVal2;\nvar b_4: string = numVal2; // Error: number ~> string\n\n// node_modules/Exists/index.js\nvar m3 = require(\"4DoesntExist\");\nvar c_1: number = m3.numVal;\nvar c_2: string = m3.numVal; // Error: number ~> string\nimport { numVal as numVal3 } from \"5DoesntExist\";\nvar c_3: number = numVal3;\nvar c_4: string = numVal3; // Error: number ~> string\n\n`;\n\nexports[`Exists.js 1`] = `\n/* @flow */\n\nmodule.exports = {\n  numVal: 42\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nmodule.exports = {\n  numVal: 42\n};\n\n`;\n"
  },
  {
    "path": "tests/flow/config_module_name_rewrite_node/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/config_module_system_node_resolve_dirname/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`toplevel.js 1`] = `\n// @flow\n\nimport {name} from \"testproj\";\n\n(name: \"node_modules/testproj\");\n(name: \"custom_resolve_dir/testproj\"); // Error: Resolve from node_modules first!\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport { name } from \"testproj\";\n\n(name: \"node_modules/testproj\");\n(name: \"custom_resolve_dir/testproj\"); // Error: Resolve from node_modules first!\n\n`;\n"
  },
  {
    "path": "tests/flow/config_module_system_node_resolve_dirname/custom_resolve_dir/testproj/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`index.js 1`] = `\n// @flow\n\nexport var name: \"otherdir/testproj\" = \"otherdir/testproj\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport var name: \"otherdir/testproj\" = \"otherdir/testproj\";\n\n`;\n"
  },
  {
    "path": "tests/flow/config_module_system_node_resolve_dirname/custom_resolve_dir/testproj/index.js",
    "content": "// @flow\n\nexport var name: \"otherdir/testproj\" = \"otherdir/testproj\";\n"
  },
  {
    "path": "tests/flow/config_module_system_node_resolve_dirname/custom_resolve_dir/testproj/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/config_module_system_node_resolve_dirname/custom_resolve_dir/testproj2/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`index.js 1`] = `\n// @flow\n\nexport var name: \"otherdir/testproj2\" = \"otherdir/testproj2\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport var name: \"otherdir/testproj2\" = \"otherdir/testproj2\";\n\n`;\n"
  },
  {
    "path": "tests/flow/config_module_system_node_resolve_dirname/custom_resolve_dir/testproj2/index.js",
    "content": "// @flow\n\nexport var name: \"otherdir/testproj2\" = \"otherdir/testproj2\";\n"
  },
  {
    "path": "tests/flow/config_module_system_node_resolve_dirname/custom_resolve_dir/testproj2/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/config_module_system_node_resolve_dirname/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/config_module_system_node_resolve_dirname/subdir/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`sublevel.js 1`] = `\n// @flow\n\nimport {name} from \"testproj2\";\n\n(name: \"node_modules/testproj2\"); // Error: Resolve from sibling 'custom_resolve_dir' first!\n(name: \"subdir/custom_resolve_dir/testproj2\");\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport { name } from \"testproj2\";\n\n(name: \"node_modules/testproj2\"); // Error: Resolve from sibling 'custom_resolve_dir' first!\n(name: \"subdir/custom_resolve_dir/testproj2\");\n\n`;\n"
  },
  {
    "path": "tests/flow/config_module_system_node_resolve_dirname/subdir/custom_resolve_dir/testproj2/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`index.js 1`] = `\n// @flow\n\nexport var name: \"subdir/custom_resolve_dir/testproj2\" = \"subdir/custom_resolve_dir/testproj2\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport var name: \"subdir/custom_resolve_dir/testproj2\" =\n  \"subdir/custom_resolve_dir/testproj2\";\n\n`;\n"
  },
  {
    "path": "tests/flow/config_module_system_node_resolve_dirname/subdir/custom_resolve_dir/testproj2/index.js",
    "content": "// @flow\n\nexport var name: \"subdir/custom_resolve_dir/testproj2\" = \"subdir/custom_resolve_dir/testproj2\";\n"
  },
  {
    "path": "tests/flow/config_module_system_node_resolve_dirname/subdir/custom_resolve_dir/testproj2/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/config_module_system_node_resolve_dirname/subdir/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/config_module_system_node_resolve_dirname/subdir/sublevel.js",
    "content": "// @flow\n\nimport {name} from \"testproj2\";\n\n(name: \"node_modules/testproj2\"); // Error: Resolve from sibling 'custom_resolve_dir' first!\n(name: \"subdir/custom_resolve_dir/testproj2\");\n"
  },
  {
    "path": "tests/flow/config_module_system_node_resolve_dirname/toplevel.js",
    "content": "// @flow\n\nimport {name} from \"testproj\";\n\n(name: \"node_modules/testproj\");\n(name: \"custom_resolve_dir/testproj\"); // Error: Resolve from node_modules first!\n"
  },
  {
    "path": "tests/flow/config_munging_underscores/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`chain.js 1`] = `\n/* @flow */\n\nclass A {\n  _property1: number;\n  static _sProperty: number;\n\n  constructor() {\n    this._property1 = 5;\n  }\n  _method1(): number {\n    return 1;\n  }\n  static _sMethod(): string {\n    return \"some string\";\n  }\n}\nA._sProperty = 48;\n\nclass B extends A {\n  _property1: string;\n  static _sProperty: string;\n\n  constructor() {\n    super();\n    this._property1 = \"another string\";\n  }\n  _method1(): string {\n    return \"yet another string\";\n  }\n  static _sMethod(): number {\n    return 23;\n  }\n}\nB._sProperty = \"B._sProperty string\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nclass A {\n  _property1: number;\n  static _sProperty: number;\n\n  constructor() {\n    this._property1 = 5;\n  }\n  _method1(): number {\n    return 1;\n  }\n  static _sMethod(): string {\n    return \"some string\";\n  }\n}\nA._sProperty = 48;\n\nclass B extends A {\n  _property1: string;\n  static _sProperty: string;\n\n  constructor() {\n    super();\n    this._property1 = \"another string\";\n  }\n  _method1(): string {\n    return \"yet another string\";\n  }\n  static _sMethod(): number {\n    return 23;\n  }\n}\nB._sProperty = \"B._sProperty string\";\n\n`;\n\nexports[`commonjs_export.js 1`] = `\n/* @flow */\n\nclass C {\n  _p: string;\n}\n\nmodule.exports = new C;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nclass C {\n  _p: string;\n}\n\nmodule.exports = new C();\n\n`;\n\nexports[`commonjs_import.js 1`] = `\n/* @flow */\n\nimport {_p} from \"./commonjs_export\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nimport { _p } from \"./commonjs_export\";\n\n`;\n"
  },
  {
    "path": "tests/flow/config_munging_underscores/chain.js",
    "content": "/* @flow */\n\nclass A {\n  _property1: number;\n  static _sProperty: number;\n\n  constructor() {\n    this._property1 = 5;\n  }\n  _method1(): number {\n    return 1;\n  }\n  static _sMethod(): string {\n    return \"some string\";\n  }\n}\nA._sProperty = 48;\n\nclass B extends A {\n  _property1: string;\n  static _sProperty: string;\n\n  constructor() {\n    super();\n    this._property1 = \"another string\";\n  }\n  _method1(): string {\n    return \"yet another string\";\n  }\n  static _sMethod(): number {\n    return 23;\n  }\n}\nB._sProperty = \"B._sProperty string\";\n"
  },
  {
    "path": "tests/flow/config_munging_underscores/commonjs_export.js",
    "content": "/* @flow */\n\nclass C {\n  _p: string;\n}\n\nmodule.exports = new C;\n"
  },
  {
    "path": "tests/flow/config_munging_underscores/commonjs_import.js",
    "content": "/* @flow */\n\nimport {_p} from \"./commonjs_export\";\n"
  },
  {
    "path": "tests/flow/config_munging_underscores/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/config_munging_underscores2/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`chain.js 1`] = `\n/* @flow */\n\nclass A {\n  _property1: number;\n  static _sProperty: number;\n\n  constructor() {\n    this._property1 = 5;\n  }\n  _method1(): number {\n    return 1;\n  }\n  static _sMethod(): string {\n    return \"some string\";\n  }\n}\nA._sProperty = 48;\n\nclass B extends A {\n  _property1: string;\n  static _sProperty: string;\n\n  constructor() {\n    super();\n    this._property1 = \"another string\";\n  }\n  _method1(): string {\n    return \"yet another string\";\n  }\n  static _sMethod(): number {\n    return 23;\n  }\n}\nB._sProperty = \"B._sProperty string\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nclass A {\n  _property1: number;\n  static _sProperty: number;\n\n  constructor() {\n    this._property1 = 5;\n  }\n  _method1(): number {\n    return 1;\n  }\n  static _sMethod(): string {\n    return \"some string\";\n  }\n}\nA._sProperty = 48;\n\nclass B extends A {\n  _property1: string;\n  static _sProperty: string;\n\n  constructor() {\n    super();\n    this._property1 = \"another string\";\n  }\n  _method1(): string {\n    return \"yet another string\";\n  }\n  static _sMethod(): number {\n    return 23;\n  }\n}\nB._sProperty = \"B._sProperty string\";\n\n`;\n"
  },
  {
    "path": "tests/flow/config_munging_underscores2/chain.js",
    "content": "/* @flow */\n\nclass A {\n  _property1: number;\n  static _sProperty: number;\n\n  constructor() {\n    this._property1 = 5;\n  }\n  _method1(): number {\n    return 1;\n  }\n  static _sMethod(): string {\n    return \"some string\";\n  }\n}\nA._sProperty = 48;\n\nclass B extends A {\n  _property1: string;\n  static _sProperty: string;\n\n  constructor() {\n    super();\n    this._property1 = \"another string\";\n  }\n  _method1(): string {\n    return \"yet another string\";\n  }\n  static _sMethod(): number {\n    return 23;\n  }\n}\nB._sProperty = \"B._sProperty string\";\n"
  },
  {
    "path": "tests/flow/config_munging_underscores2/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/const_params/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n/**\n * test handling of const params\n * - reassignment prohibited\n * - durable refinements\n *\n * Currently gated in .flowconfig:\n *\n * [options]\n * experimental.const_params\n *\n * Syntax to follow\n *\n * @flow\n */\n\nfunction cannot_reassign(x: string) {\n  x = \"hey\"; // error, const param cannot be reassigned\n}\n\n// Note: const params use the same machinery as explicit\n// const bindings, which are tested more extensively elsewhere.\n// Here we're just making sure the machinery is hooked up.\n//\nfunction durable_refi(x: ?number) {\n  if (x) {\n    // ok: if x is truthy here, it's truthy everywhere\n    return () => { var y:number = x; };\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * test handling of const params\n * - reassignment prohibited\n * - durable refinements\n *\n * Currently gated in .flowconfig:\n *\n * [options]\n * experimental.const_params\n *\n * Syntax to follow\n *\n * @flow\n */\n\nfunction cannot_reassign(x: string) {\n  x = \"hey\"; // error, const param cannot be reassigned\n}\n\n// Note: const params use the same machinery as explicit\n// const bindings, which are tested more extensively elsewhere.\n// Here we're just making sure the machinery is hooked up.\n//\nfunction durable_refi(x: ?number) {\n  if (x) {\n    // ok: if x is truthy here, it's truthy everywhere\n    return () => {\n      var y: number = x;\n    };\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/const_params/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/const_params/test.js",
    "content": "/**\n * test handling of const params\n * - reassignment prohibited\n * - durable refinements\n *\n * Currently gated in .flowconfig:\n *\n * [options]\n * experimental.const_params\n *\n * Syntax to follow\n *\n * @flow\n */\n\nfunction cannot_reassign(x: string) {\n  x = \"hey\"; // error, const param cannot be reassigned\n}\n\n// Note: const params use the same machinery as explicit\n// const bindings, which are tested more extensively elsewhere.\n// Here we're just making sure the machinery is hooked up.\n//\nfunction durable_refi(x: ?number) {\n  if (x) {\n    // ok: if x is truthy here, it's truthy everywhere\n    return () => { var y:number = x; };\n  }\n}\n"
  },
  {
    "path": "tests/flow/constructor/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`constructor.js 1`] = `\nclass C {\n    constructor() { }\n}\n\nclass D {\n    constructor():number { }\n}\n\n// the return type of a constructor overrides the type of the class\ndeclare class Bar<T> {}\ndeclare class Foo<T> {\n  constructor<U>(iterable: U): Bar<U>;\n}\n(new Foo('x'): Bar<string>); // ok\n(new Foo(123): Bar<string>); // error, number !~> string\n\n// also overrides when it returns a different specialization of the same class\ndeclare class Baz<T> {\n  constructor<U>(iterable: U): Baz<U>;\n}\n(new Baz('x'): Baz<string>); // ok\n(new Baz(123): Baz<string>); // error, number !~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {\n  constructor() {}\n}\n\nclass D {\n  constructor(): number {}\n}\n\n// the return type of a constructor overrides the type of the class\ndeclare class Bar<T> {}\ndeclare class Foo<T> {\n  constructor<U>(iterable: U): Bar<U>\n}\n(new Foo(\"x\"): Bar<string>); // ok\n(new Foo(123): Bar<string>); // error, number !~> string\n\n// also overrides when it returns a different specialization of the same class\ndeclare class Baz<T> {\n  constructor<U>(iterable: U): Baz<U>\n}\n(new Baz(\"x\"): Baz<string>); // ok\n(new Baz(123): Baz<string>); // error, number !~> string\n\n`;\n"
  },
  {
    "path": "tests/flow/constructor/constructor.js",
    "content": "class C {\n    constructor() { }\n}\n\nclass D {\n    constructor():number { }\n}\n\n// the return type of a constructor overrides the type of the class\ndeclare class Bar<T> {}\ndeclare class Foo<T> {\n  constructor<U>(iterable: U): Bar<U>;\n}\n(new Foo('x'): Bar<string>); // ok\n(new Foo(123): Bar<string>); // error, number !~> string\n\n// also overrides when it returns a different specialization of the same class\ndeclare class Baz<T> {\n  constructor<U>(iterable: U): Baz<U>;\n}\n(new Baz('x'): Baz<string>); // ok\n(new Baz(123): Baz<string>); // error, number !~> string\n"
  },
  {
    "path": "tests/flow/constructor/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/constructor_annots/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`constructors.js 1`] = `\n// Foo is a class-like function\nfunction Foo() {\n  this.x = 0; // constructs objects with property x\n}\nFoo.y = 0; // has static property y\nFoo.prototype = { m() { return 0; } };\n\n// exporting Foo directly doesn't work\n// Foo's instance and static props are not picked up\nexports.Foo = Foo;\n\n// so you want to type Foo, by declaring it as a class\ninterface IFooPrototype {\n  m: () => number;\n}\ninterface IFoo extends IFooPrototype {\n  x: boolean; // error, should have declared x: number instead\n  static (): void;\n  static y: boolean; // error, should have declared static y: number instead\n  constructor(): void;\n}\nexports.Foo2 = (Foo: Class<IFoo>);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Foo is a class-like function\nfunction Foo() {\n  this.x = 0; // constructs objects with property x\n}\nFoo.y = 0; // has static property y\nFoo.prototype = {\n  m() {\n    return 0;\n  }\n};\n\n// exporting Foo directly doesn't work\n// Foo's instance and static props are not picked up\nexports.Foo = Foo;\n\n// so you want to type Foo, by declaring it as a class\ninterface IFooPrototype {\n  m: () => number\n}\ninterface IFoo extends IFooPrototype {\n  x: boolean, // error, should have declared x: number instead\n  static (): void,\n  static y: boolean, // error, should have declared static y: number instead\n  constructor(): void\n}\nexports.Foo2 = (Foo: Class<IFoo>);\n\n`;\n\nexports[`test.js 1`] = `\nvar Foo = require('./constructors').Foo;\nvar x: string = new Foo().x; // error, found number instead of string\nvar y: string = Foo.y; // error, found number instead of string\nvar z: string = new Foo().m();\n\nvar Foo2 = require('./constructors').Foo2;\nvar x2: string = new Foo2().x; // error, found boolean instead of string\nvar y2: string = Foo2.y; // error, found boolean instead of string\nvar z2: string = new Foo2().m();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar Foo = require(\"./constructors\").Foo;\nvar x: string = new Foo().x; // error, found number instead of string\nvar y: string = Foo.y; // error, found number instead of string\nvar z: string = new Foo().m();\n\nvar Foo2 = require(\"./constructors\").Foo2;\nvar x2: string = new Foo2().x; // error, found boolean instead of string\nvar y2: string = Foo2.y; // error, found boolean instead of string\nvar z2: string = new Foo2().m();\n\n`;\n"
  },
  {
    "path": "tests/flow/constructor_annots/constructors.js",
    "content": "// Foo is a class-like function\nfunction Foo() {\n  this.x = 0; // constructs objects with property x\n}\nFoo.y = 0; // has static property y\nFoo.prototype = { m() { return 0; } };\n\n// exporting Foo directly doesn't work\n// Foo's instance and static props are not picked up\nexports.Foo = Foo;\n\n// so you want to type Foo, by declaring it as a class\ninterface IFooPrototype {\n  m: () => number;\n}\ninterface IFoo extends IFooPrototype {\n  x: boolean; // error, should have declared x: number instead\n  static (): void;\n  static y: boolean; // error, should have declared static y: number instead\n  constructor(): void;\n}\nexports.Foo2 = (Foo: Class<IFoo>);\n"
  },
  {
    "path": "tests/flow/constructor_annots/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/constructor_annots/test.js",
    "content": "var Foo = require('./constructors').Foo;\nvar x: string = new Foo().x; // error, found number instead of string\nvar y: string = Foo.y; // error, found number instead of string\nvar z: string = new Foo().m();\n\nvar Foo2 = require('./constructors').Foo2;\nvar x2: string = new Foo2().x; // error, found boolean instead of string\nvar y2: string = Foo2.y; // error, found boolean instead of string\nvar z2: string = new Foo2().m();\n"
  },
  {
    "path": "tests/flow/contents/ignore/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`dummy.js 1`] = `\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n`;\n\nexports[`test.js 1`] = `\nrequire('./dummy');\nvar xxx = 0;\nxxx\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nrequire(\"./dummy\");\nvar xxx = 0;\nxxx;\n\n`;\n"
  },
  {
    "path": "tests/flow/contents/ignore/dummy.js",
    "content": ""
  },
  {
    "path": "tests/flow/contents/ignore/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/contents/ignore/test.js",
    "content": "require('./dummy');\nvar xxx = 0;\nxxx\n"
  },
  {
    "path": "tests/flow/contents/no_flow/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`dummy.js 1`] = `\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n`;\n\nexports[`test.js 1`] = `\nrequire('./dummy');\nvar xxx = 0;\nxxx\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nrequire(\"./dummy\");\nvar xxx = 0;\nxxx;\n\n`;\n"
  },
  {
    "path": "tests/flow/contents/no_flow/dummy.js",
    "content": ""
  },
  {
    "path": "tests/flow/contents/no_flow/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/contents/no_flow/test.js",
    "content": "require('./dummy');\nvar xxx = 0;\nxxx\n"
  },
  {
    "path": "tests/flow/core_tests/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`boolean.js 1`] = `\n// @flow\n\n// Boolean (the class) tests. booleans (the literals) are not part of core.js\n\nlet tests = [\n  // constructor\n  function() {\n    new Boolean();\n    new Boolean(0);\n    new Boolean(-0);\n    new Boolean(null);\n    new Boolean(false);\n    new Boolean(NaN);\n    new Boolean(undefined);\n    new Boolean(\"\");\n  },\n\n  // toString\n  function() {\n    (true).toString();\n    let x: boolean = false;\n    x.toString();\n    (new Boolean(true)).toString();\n  },\n\n  // valueOf\n  function() {\n    ((new Boolean(0)).valueOf(): boolean);\n  },\n\n  // casting\n  function() {\n    Boolean();\n    Boolean(0);\n    Boolean(-0);\n    Boolean(null);\n    Boolean(false);\n    Boolean(NaN);\n    Boolean(undefined);\n    Boolean(\"\");\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// Boolean (the class) tests. booleans (the literals) are not part of core.js\n\nlet tests = [\n  // constructor\n  function() {\n    new Boolean();\n    new Boolean(0);\n    new Boolean(-0);\n    new Boolean(null);\n    new Boolean(false);\n    new Boolean(NaN);\n    new Boolean(undefined);\n    new Boolean(\"\");\n  },\n\n  // toString\n  function() {\n    true.toString();\n    let x: boolean = false;\n    x.toString();\n    new Boolean(true).toString();\n  },\n\n  // valueOf\n  function() {\n    (new Boolean(0).valueOf(): boolean);\n  },\n\n  // casting\n  function() {\n    Boolean();\n    Boolean(0);\n    Boolean(-0);\n    Boolean(null);\n    Boolean(false);\n    Boolean(NaN);\n    Boolean(undefined);\n    Boolean(\"\");\n  }\n];\n\n`;\n\nexports[`map.js 1`] = `\n// @flow\n\nfunction* generator(): Iterable<[string, number]> {\n  while (true) {\n    yield ['foo', 123];\n  }\n}\n\nlet tests = [\n  // good constructors\n  function() {\n    let w = new Map();\n    let x = new Map(null);\n    let y = new Map([['foo', 123]]);\n    let z = new Map(generator());\n    let a: Map<string, number> = new Map();\n    let b: Map<string, number> = new Map([['foo', 123]]);\n    let c: Map<string, number> = new Map(generator());\n  },\n\n  // bad constructors\n  function() {\n    let x = new Map(['foo', 123]); // error\n    let y: Map<number, string> = new Map([['foo', 123]]); // error\n  },\n\n  // get()\n  function(x: Map<string, number>) {\n    (x.get('foo'): boolean); // error, string | void\n    x.get(123); // error, wrong key type\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nfunction* generator(): Iterable<[string, number]> {\n  while (true) {\n    yield [\"foo\", 123];\n  }\n}\n\nlet tests = [\n  // good constructors\n  function() {\n    let w = new Map();\n    let x = new Map(null);\n    let y = new Map([[\"foo\", 123]]);\n    let z = new Map(generator());\n    let a: Map<string, number> = new Map();\n    let b: Map<string, number> = new Map([[\"foo\", 123]]);\n    let c: Map<string, number> = new Map(generator());\n  },\n\n  // bad constructors\n  function() {\n    let x = new Map([\"foo\", 123]); // error\n    let y: Map<number, string> = new Map([[\"foo\", 123]]); // error\n  },\n\n  // get()\n  function(x: Map<string, number>) {\n    (x.get(\"foo\"): boolean); // error, string | void\n    x.get(123); // error, wrong key type\n  }\n];\n\n`;\n\nexports[`regexp.js 1`] = `\n// @flow\n\nlet tests = [\n  // constructor\n  function() {\n    new RegExp('foo');\n    new RegExp(/foo/);\n    new RegExp('foo', 'i');\n    new RegExp('foo', 'ig');\n    new RegExp(/foo/, 'i'); // invalid in ES5, valid in ES6\n    new RegExp(/foo/g, 'i'); // invalid in ES5, valid in ES6\n  },\n\n  // called as a function (equivalent to the constructor per ES6 21.2.3)\n  function() {\n    RegExp('foo');\n    RegExp(/foo/);\n    RegExp('foo', 'i');\n    RegExp('foo', 'ig');\n    RegExp(/foo/, 'i'); // invalid in ES5, valid in ES6\n    RegExp(/foo/g, 'i'); // invalid in ES5, valid in ES6\n  },\n\n  // invalid flags\n  function() {\n    RegExp('foo', 'z'); // error\n    new RegExp('foo', 'z'); // error\n  }\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  // constructor\n  function() {\n    new RegExp(\"foo\");\n    new RegExp(/foo/);\n    new RegExp(\"foo\", \"i\");\n    new RegExp(\"foo\", \"ig\");\n    new RegExp(/foo/, \"i\"); // invalid in ES5, valid in ES6\n    new RegExp(/foo/g, \"i\"); // invalid in ES5, valid in ES6\n  },\n\n  // called as a function (equivalent to the constructor per ES6 21.2.3)\n  function() {\n    RegExp(\"foo\");\n    RegExp(/foo/);\n    RegExp(\"foo\", \"i\");\n    RegExp(\"foo\", \"ig\");\n    RegExp(/foo/, \"i\"); // invalid in ES5, valid in ES6\n    RegExp(/foo/g, \"i\"); // invalid in ES5, valid in ES6\n  },\n\n  // invalid flags\n  function() {\n    RegExp(\"foo\", \"z\"); // error\n    new RegExp(\"foo\", \"z\"); // error\n  }\n];\n\n`;\n\nexports[`weakset.js 1`] = `\n// @flow\n\nlet ws = new WeakSet();\nlet obj: Object = {};\nlet dict: {foo: string} = {foo: 'bar'};\n\nws.add(window);\nws.add(obj);\nws.add(dict);\nws.has(window);\nws.has(obj);\nws.has(dict);\nws.delete(window);\nws.delete(obj);\nws.delete(dict);\n\nlet ws2 = new WeakSet([obj, dict]);\n\nlet ws3 = new WeakSet([1, 2, 3]); // error, must be objects\n\nfunction* generator(): Iterable<{foo: string}> {\n  while (true) {\n    yield {foo: 'bar'};\n  }\n}\n\nlet ws4 = new WeakSet(generator());\n\nfunction* numbers(): Iterable<number> {\n  let i = 0;\n  while (true) {\n    yield i++;\n  }\n}\n\nlet ws5 = new WeakSet(numbers()); // error, must be objects\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet ws = new WeakSet();\nlet obj: Object = {};\nlet dict: { foo: string } = { foo: \"bar\" };\n\nws.add(window);\nws.add(obj);\nws.add(dict);\nws.has(window);\nws.has(obj);\nws.has(dict);\nws.delete(window);\nws.delete(obj);\nws.delete(dict);\n\nlet ws2 = new WeakSet([obj, dict]);\n\nlet ws3 = new WeakSet([1, 2, 3]); // error, must be objects\n\nfunction* generator(): Iterable<{ foo: string }> {\n  while (true) {\n    yield { foo: \"bar\" };\n  }\n}\n\nlet ws4 = new WeakSet(generator());\n\nfunction* numbers(): Iterable<number> {\n  let i = 0;\n  while (true) {\n    yield i++;\n  }\n}\n\nlet ws5 = new WeakSet(numbers()); // error, must be objects\n\n`;\n"
  },
  {
    "path": "tests/flow/core_tests/boolean.js",
    "content": "// @flow\n\n// Boolean (the class) tests. booleans (the literals) are not part of core.js\n\nlet tests = [\n  // constructor\n  function() {\n    new Boolean();\n    new Boolean(0);\n    new Boolean(-0);\n    new Boolean(null);\n    new Boolean(false);\n    new Boolean(NaN);\n    new Boolean(undefined);\n    new Boolean(\"\");\n  },\n\n  // toString\n  function() {\n    (true).toString();\n    let x: boolean = false;\n    x.toString();\n    (new Boolean(true)).toString();\n  },\n\n  // valueOf\n  function() {\n    ((new Boolean(0)).valueOf(): boolean);\n  },\n\n  // casting\n  function() {\n    Boolean();\n    Boolean(0);\n    Boolean(-0);\n    Boolean(null);\n    Boolean(false);\n    Boolean(NaN);\n    Boolean(undefined);\n    Boolean(\"\");\n  },\n];\n"
  },
  {
    "path": "tests/flow/core_tests/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/core_tests/map.js",
    "content": "// @flow\n\nfunction* generator(): Iterable<[string, number]> {\n  while (true) {\n    yield ['foo', 123];\n  }\n}\n\nlet tests = [\n  // good constructors\n  function() {\n    let w = new Map();\n    let x = new Map(null);\n    let y = new Map([['foo', 123]]);\n    let z = new Map(generator());\n    let a: Map<string, number> = new Map();\n    let b: Map<string, number> = new Map([['foo', 123]]);\n    let c: Map<string, number> = new Map(generator());\n  },\n\n  // bad constructors\n  function() {\n    let x = new Map(['foo', 123]); // error\n    let y: Map<number, string> = new Map([['foo', 123]]); // error\n  },\n\n  // get()\n  function(x: Map<string, number>) {\n    (x.get('foo'): boolean); // error, string | void\n    x.get(123); // error, wrong key type\n  },\n];\n"
  },
  {
    "path": "tests/flow/core_tests/regexp.js",
    "content": "// @flow\n\nlet tests = [\n  // constructor\n  function() {\n    new RegExp('foo');\n    new RegExp(/foo/);\n    new RegExp('foo', 'i');\n    new RegExp('foo', 'ig');\n    new RegExp(/foo/, 'i'); // invalid in ES5, valid in ES6\n    new RegExp(/foo/g, 'i'); // invalid in ES5, valid in ES6\n  },\n\n  // called as a function (equivalent to the constructor per ES6 21.2.3)\n  function() {\n    RegExp('foo');\n    RegExp(/foo/);\n    RegExp('foo', 'i');\n    RegExp('foo', 'ig');\n    RegExp(/foo/, 'i'); // invalid in ES5, valid in ES6\n    RegExp(/foo/g, 'i'); // invalid in ES5, valid in ES6\n  },\n\n  // invalid flags\n  function() {\n    RegExp('foo', 'z'); // error\n    new RegExp('foo', 'z'); // error\n  }\n];\n"
  },
  {
    "path": "tests/flow/core_tests/weakset.js",
    "content": "// @flow\n\nlet ws = new WeakSet();\nlet obj: Object = {};\nlet dict: {foo: string} = {foo: 'bar'};\n\nws.add(window);\nws.add(obj);\nws.add(dict);\nws.has(window);\nws.has(obj);\nws.has(dict);\nws.delete(window);\nws.delete(obj);\nws.delete(dict);\n\nlet ws2 = new WeakSet([obj, dict]);\n\nlet ws3 = new WeakSet([1, 2, 3]); // error, must be objects\n\nfunction* generator(): Iterable<{foo: string}> {\n  while (true) {\n    yield {foo: 'bar'};\n  }\n}\n\nlet ws4 = new WeakSet(generator());\n\nfunction* numbers(): Iterable<number> {\n  let i = 0;\n  while (true) {\n    yield i++;\n  }\n}\n\nlet ws5 = new WeakSet(numbers()); // error, must be objects\n"
  },
  {
    "path": "tests/flow/covariance/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\ntype CovArrayVerbose<X,Y:X> = Array<Y>;\nvar b: CovArrayVerbose<number,*> = [];\nvar y: CovArrayVerbose<mixed,*> = b;\ny[0] = \"\"; // error\n\nclass NVerbose<E,I:E> {\n    x: CovArrayVerbose<E,I>;\n    foo(): CovArrayVerbose<mixed,I> { return this.x; }\n}\n\nvar nv: NVerbose<number,*> = new NVerbose;\nnv.x = [0];\n(nv.x[0]: string); // error\n(nv.foo()[0]: string); // error\n\n/* TODO: use existentials for non-verbose covariance?\n\ntype CovArray<X> = Array<*:X>;\nvar c: CovArray<number> = [0];\nvar z: CovArray<string> = c; // error\n\nvar d: CovArray<number> = [];\nvar w: CovArray<mixed> = d;\nw[0] = \"\"; // error\n\ntype P<X> = CovArray<X>;\nvar p: P<mixed> = [];\n(p[0]: number); // not an error!\np[0] = \"\"; // error\n\nclass M {\n    x: CovArray<number>;\n    foo(): CovArray<mixed> { return this.x; }\n    bar(x: string) { this.foo()[0] = x; } // error\n}\n\nclass N<E> {\n    x: CovArray<E>;\n    foo(): CovArray<mixed> { return this.x; }\n    bar(e: string) { this.foo()[0] = e; } // error\n    qux(e: E) { this.foo()[0] = e; }\n}\n\nvar n: N<number> = new N;\nn.x = [0];\n(n.x[0]: string); // error\n(n.foo()[0]: string); // not an error!\n\n*/\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype CovArrayVerbose<X, Y: X> = Array<Y>;\nvar b: CovArrayVerbose<number, *> = [];\nvar y: CovArrayVerbose<mixed, *> = b;\ny[0] = \"\"; // error\n\nclass NVerbose<E, I: E> {\n  x: CovArrayVerbose<E, I>;\n  foo(): CovArrayVerbose<mixed, I> {\n    return this.x;\n  }\n}\n\nvar nv: NVerbose<number, *> = new NVerbose();\nnv.x = [0];\n(nv.x[0]: string); // error\n(nv.foo()[0]: string); // error\n\n/* TODO: use existentials for non-verbose covariance?\n\ntype CovArray<X> = Array<*:X>;\nvar c: CovArray<number> = [0];\nvar z: CovArray<string> = c; // error\n\nvar d: CovArray<number> = [];\nvar w: CovArray<mixed> = d;\nw[0] = \"\"; // error\n\ntype P<X> = CovArray<X>;\nvar p: P<mixed> = [];\n(p[0]: number); // not an error!\np[0] = \"\"; // error\n\nclass M {\n    x: CovArray<number>;\n    foo(): CovArray<mixed> { return this.x; }\n    bar(x: string) { this.foo()[0] = x; } // error\n}\n\nclass N<E> {\n    x: CovArray<E>;\n    foo(): CovArray<mixed> { return this.x; }\n    bar(e: string) { this.foo()[0] = e; } // error\n    qux(e: E) { this.foo()[0] = e; }\n}\n\nvar n: N<number> = new N;\nn.x = [0];\n(n.x[0]: string); // error\n(n.foo()[0]: string); // not an error!\n\n*/\n\n`;\n"
  },
  {
    "path": "tests/flow/covariance/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/covariance/test.js",
    "content": "type CovArrayVerbose<X,Y:X> = Array<Y>;\nvar b: CovArrayVerbose<number,*> = [];\nvar y: CovArrayVerbose<mixed,*> = b;\ny[0] = \"\"; // error\n\nclass NVerbose<E,I:E> {\n    x: CovArrayVerbose<E,I>;\n    foo(): CovArrayVerbose<mixed,I> { return this.x; }\n}\n\nvar nv: NVerbose<number,*> = new NVerbose;\nnv.x = [0];\n(nv.x[0]: string); // error\n(nv.foo()[0]: string); // error\n\n/* TODO: use existentials for non-verbose covariance?\n\ntype CovArray<X> = Array<*:X>;\nvar c: CovArray<number> = [0];\nvar z: CovArray<string> = c; // error\n\nvar d: CovArray<number> = [];\nvar w: CovArray<mixed> = d;\nw[0] = \"\"; // error\n\ntype P<X> = CovArray<X>;\nvar p: P<mixed> = [];\n(p[0]: number); // not an error!\np[0] = \"\"; // error\n\nclass M {\n    x: CovArray<number>;\n    foo(): CovArray<mixed> { return this.x; }\n    bar(x: string) { this.foo()[0] = x; } // error\n}\n\nclass N<E> {\n    x: CovArray<E>;\n    foo(): CovArray<mixed> { return this.x; }\n    bar(e: string) { this.foo()[0] = e; } // error\n    qux(e: E) { this.foo()[0] = e; }\n}\n\nvar n: N<number> = new N;\nn.x = [0];\n(n.x[0]: string); // error\n(n.foo()[0]: string); // not an error!\n\n*/\n"
  },
  {
    "path": "tests/flow/cycle/A.js",
    "content": "var B = require('./B');\n\nclass A extends B { }\n\nmodule.exports = A;\n"
  },
  {
    "path": "tests/flow/cycle/B.js",
    "content": "var A = require('./A');\n\n//class B extends A { }\n\nmodule.exports = B;\n"
  },
  {
    "path": "tests/flow/cycle/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\nvar B = require('./B');\n\nclass A extends B { }\n\nmodule.exports = A;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar B = require(\"./B\");\n\nclass A extends B {}\n\nmodule.exports = A;\n\n`;\n\nexports[`B.js 1`] = `\nvar A = require('./A');\n\n//class B extends A { }\n\nmodule.exports = B;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar A = require(\"./A\");\n\n//class B extends A { }\n\nmodule.exports = B;\n\n`;\n"
  },
  {
    "path": "tests/flow/cycle/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/date/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`date.js 1`] = `\nvar d = new Date(0);\nvar x:string = d.getTime();\n\nvar y:number = d;\n\n// valid constructors\nnew Date();\nnew Date(1234567890);\nnew Date('2015/06/18');\nnew Date(2015, 6);\nnew Date(2015, 6, 18);\nnew Date(2015, 6, 18, 11);\nnew Date(2015, 6, 18, 11, 55);\nnew Date(2015, 6, 18, 11, 55, 42);\nnew Date(2015, 6, 18, 11, 55, 42, 999);\n\n// invalid constructors\nnew Date({});\nnew Date(2015, '6');\nnew Date(2015, 6, '18');\nnew Date(2015, 6, 18, '11');\nnew Date(2015, 6, 18, 11, '55');\nnew Date(2015, 6, 18, 11, 55, '42');\nnew Date(2015, 6, 18, 11, 55, 42, '999');\nnew Date(2015, 6, 18, 11, 55, 42, 999, 'hahaha');\nnew Date('2015', 6);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar d = new Date(0);\nvar x: string = d.getTime();\n\nvar y: number = d;\n\n// valid constructors\nnew Date();\nnew Date(1234567890);\nnew Date(\"2015/06/18\");\nnew Date(2015, 6);\nnew Date(2015, 6, 18);\nnew Date(2015, 6, 18, 11);\nnew Date(2015, 6, 18, 11, 55);\nnew Date(2015, 6, 18, 11, 55, 42);\nnew Date(2015, 6, 18, 11, 55, 42, 999);\n\n// invalid constructors\nnew Date({});\nnew Date(2015, \"6\");\nnew Date(2015, 6, \"18\");\nnew Date(2015, 6, 18, \"11\");\nnew Date(2015, 6, 18, 11, \"55\");\nnew Date(2015, 6, 18, 11, 55, \"42\");\nnew Date(2015, 6, 18, 11, 55, 42, \"999\");\nnew Date(2015, 6, 18, 11, 55, 42, 999, \"hahaha\");\nnew Date(\"2015\", 6);\n\n`;\n"
  },
  {
    "path": "tests/flow/date/date.js",
    "content": "var d = new Date(0);\nvar x:string = d.getTime();\n\nvar y:number = d;\n\n// valid constructors\nnew Date();\nnew Date(1234567890);\nnew Date('2015/06/18');\nnew Date(2015, 6);\nnew Date(2015, 6, 18);\nnew Date(2015, 6, 18, 11);\nnew Date(2015, 6, 18, 11, 55);\nnew Date(2015, 6, 18, 11, 55, 42);\nnew Date(2015, 6, 18, 11, 55, 42, 999);\n\n// invalid constructors\nnew Date({});\nnew Date(2015, '6');\nnew Date(2015, 6, '18');\nnew Date(2015, 6, 18, '11');\nnew Date(2015, 6, 18, 11, '55');\nnew Date(2015, 6, 18, 11, 55, '42');\nnew Date(2015, 6, 18, 11, 55, 42, '999');\nnew Date(2015, 6, 18, 11, 55, 42, 999, 'hahaha');\nnew Date('2015', 6);\n"
  },
  {
    "path": "tests/flow/date/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/declaration_files_haste/ExplicitProvidesModuleDifferentName.js",
    "content": "/*\n * @providesModule ExplicitProvidesModuleDifferentName\n * @flow\n */\n\nmodule.exports.fun = (): string => \"hello there\";\n"
  },
  {
    "path": "tests/flow/declaration_files_haste/ExplicitProvidesModuleSameName.js",
    "content": "/*\n * @providesModule ExplicitProvidesModuleSameName\n * @flow\n */\n\nmodule.exports.fun = (): string => \"hello there\";\n"
  },
  {
    "path": "tests/flow/declaration_files_haste/ImplicitProvidesModule.js",
    "content": "/*\n * @providesModule ImplicitProvidesModule\n * @flow\n */\n\nmodule.exports.fun = (): string => \"hello there\";\n"
  },
  {
    "path": "tests/flow/declaration_files_haste/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`ExplicitProvidesModuleDifferentName.js 1`] = `\n/*\n * @providesModule ExplicitProvidesModuleDifferentName\n * @flow\n */\n\nmodule.exports.fun = (): string => \"hello there\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/*\n * @providesModule ExplicitProvidesModuleDifferentName\n * @flow\n */\n\nmodule.exports.fun = (): string => \"hello there\";\n\n`;\n\nexports[`ExplicitProvidesModuleSameName.js 1`] = `\n/*\n * @providesModule ExplicitProvidesModuleSameName\n * @flow\n */\n\nmodule.exports.fun = (): string => \"hello there\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/*\n * @providesModule ExplicitProvidesModuleSameName\n * @flow\n */\n\nmodule.exports.fun = (): string => \"hello there\";\n\n`;\n\nexports[`ImplicitProvidesModule.js 1`] = `\n/*\n * @providesModule ImplicitProvidesModule\n * @flow\n */\n\nmodule.exports.fun = (): string => \"hello there\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/*\n * @providesModule ImplicitProvidesModule\n * @flow\n */\n\nmodule.exports.fun = (): string => \"hello there\";\n\n`;\n\nexports[`md5.js 1`] = `\n/* @providesModule md5 */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule md5 */\n\n`;\n\nexports[`test.js 1`] = `\n/* @flow */\n\nvar Implicit = require('ImplicitProvidesModule');\n(Implicit.fun(): string);\n\nvar ExplicitSameName = require('ExplicitProvidesModuleSameName');\n(ExplicitSameName.fun(): string);\n\nvar ExplicitDifferentName = require('ExplicitProvidesModuleDifferentName');\n(ExplicitDifferentName.fun(): string);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar Implicit = require(\"ImplicitProvidesModule\");\n(Implicit.fun(): string);\n\nvar ExplicitSameName = require(\"ExplicitProvidesModuleSameName\");\n(ExplicitSameName.fun(): string);\n\nvar ExplicitDifferentName = require(\"ExplicitProvidesModuleDifferentName\");\n(ExplicitDifferentName.fun(): string);\n\n`;\n"
  },
  {
    "path": "tests/flow/declaration_files_haste/external/_d3/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`min.js 1`] = `\nmodule.exports.fun = (): string => \"hello there\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nmodule.exports.fun = (): string => \"hello there\";\n\n`;\n"
  },
  {
    "path": "tests/flow/declaration_files_haste/external/_d3/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/declaration_files_haste/external/_d3/min.js",
    "content": "module.exports.fun = (): string => \"hello there\";\n"
  },
  {
    "path": "tests/flow/declaration_files_haste/foo/bar/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`nested_test.js 1`] = `\n/* @flow */\n\nvar docblock = require('qux/docblock');\nvar min = require('d3/min.js');\nvar corge = require('qux/corge');\nvar SomeOtherModule = require('SomeOtherModule');\n\n// make sure we don't pick up non-header @providesModule\n// annotations - see node_modules/qux/docblock.js\nvar unreachable = require('annotation');\n\n(docblock.fun(): string);\n(min.fun(): string);\n(corge.fun(): string);\n(SomeOtherModule.fun(): string);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar docblock = require(\"qux/docblock\");\nvar min = require(\"d3/min.js\");\nvar corge = require(\"qux/corge\");\nvar SomeOtherModule = require(\"SomeOtherModule\");\n\n// make sure we don't pick up non-header @providesModule\n// annotations - see node_modules/qux/docblock.js\nvar unreachable = require(\"annotation\");\n\n(docblock.fun(): string);\n(min.fun(): string);\n(corge.fun(): string);\n(SomeOtherModule.fun(): string);\n\n`;\n"
  },
  {
    "path": "tests/flow/declaration_files_haste/foo/bar/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/declaration_files_haste/foo/bar/nested_test.js",
    "content": "/* @flow */\n\nvar docblock = require('qux/docblock');\nvar min = require('d3/min.js');\nvar corge = require('qux/corge');\nvar SomeOtherModule = require('SomeOtherModule');\n\n// make sure we don't pick up non-header @providesModule\n// annotations - see node_modules/qux/docblock.js\nvar unreachable = require('annotation');\n\n(docblock.fun(): string);\n(min.fun(): string);\n(corge.fun(): string);\n(SomeOtherModule.fun(): string);\n"
  },
  {
    "path": "tests/flow/declaration_files_haste/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/declaration_files_haste/md5.js",
    "content": "/* @providesModule md5 */\n"
  },
  {
    "path": "tests/flow/declaration_files_haste/test.js",
    "content": "/* @flow */\n\nvar Implicit = require('ImplicitProvidesModule');\n(Implicit.fun(): string);\n\nvar ExplicitSameName = require('ExplicitProvidesModuleSameName');\n(ExplicitSameName.fun(): string);\n\nvar ExplicitDifferentName = require('ExplicitProvidesModuleDifferentName');\n(ExplicitDifferentName.fun(): string);\n"
  },
  {
    "path": "tests/flow/declaration_files_haste/ws/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`index.js 1`] = `\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n`;\n"
  },
  {
    "path": "tests/flow/declaration_files_haste/ws/index.js",
    "content": ""
  },
  {
    "path": "tests/flow/declaration_files_haste/ws/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/declaration_files_haste/ws/test/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`client.js 1`] = `\nvar ws = require('../');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar ws = require(\"../\");\n\n`;\n"
  },
  {
    "path": "tests/flow/declaration_files_haste/ws/test/client.js",
    "content": "var ws = require('../');\n"
  },
  {
    "path": "tests/flow/declaration_files_haste/ws/test/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste/A.js",
    "content": "/* @providesModule A */\nclass Implementation {}\nexport function foo(): Implementation { return new Implementation; }\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste/ExplicitProvidesModuleDifferentName.js",
    "content": "/*\n * @providesModule ExplicitProvidesModuleDifferentName\n * @flow\n */\n\nclass Implementation {}\nmodule.exports.fun = (): Implementation => new Implementation;\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste/ExplicitProvidesModuleSameName.js",
    "content": "/*\n * @providesModule ExplicitProvidesModuleSameName\n * @flow\n */\n\nclass Implementation {}\nmodule.exports.fun = (): Implementation => new Implementation;\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste/ImplicitProvidesModule.js",
    "content": "/*\n * @providesModule ImplicitProvidesModule\n * @flow\n */\n\nclass Implementation {}\nmodule.exports.fun = (): Implementation => new Implementation;\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\n/* @providesModule A */\nclass Implementation {}\nexport function foo(): Implementation { return new Implementation; }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule A */\nclass Implementation {}\nexport function foo(): Implementation {\n  return new Implementation();\n}\n\n`;\n\nexports[`ExplicitProvidesModuleDifferentName.js 1`] = `\n/*\n * @providesModule ExplicitProvidesModuleDifferentName\n * @flow\n */\n\nclass Implementation {}\nmodule.exports.fun = (): Implementation => new Implementation;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/*\n * @providesModule ExplicitProvidesModuleDifferentName\n * @flow\n */\n\nclass Implementation {}\nmodule.exports.fun = (): Implementation => new Implementation();\n\n`;\n\nexports[`ExplicitProvidesModuleSameName.js 1`] = `\n/*\n * @providesModule ExplicitProvidesModuleSameName\n * @flow\n */\n\nclass Implementation {}\nmodule.exports.fun = (): Implementation => new Implementation;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/*\n * @providesModule ExplicitProvidesModuleSameName\n * @flow\n */\n\nclass Implementation {}\nmodule.exports.fun = (): Implementation => new Implementation();\n\n`;\n\nexports[`ImplicitProvidesModule.js 1`] = `\n/*\n * @providesModule ImplicitProvidesModule\n * @flow\n */\n\nclass Implementation {}\nmodule.exports.fun = (): Implementation => new Implementation;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/*\n * @providesModule ImplicitProvidesModule\n * @flow\n */\n\nclass Implementation {}\nmodule.exports.fun = (): Implementation => new Implementation();\n\n`;\n\nexports[`md5.js 1`] = `\n/* @providesModule md5 */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule md5 */\n\n`;\n\nexports[`test.js 1`] = `\n/* @flow */\n\nvar Implicit = require('ImplicitProvidesModule');\n(Implicit.fun(): boolean); // Error: Either Implementation ~> boolean or Declaration ~> boolean\n\nvar ExplicitSameName = require('ExplicitProvidesModuleSameName');\n(ExplicitSameName.fun(): boolean); // Error: Either Implementation ~> boolean or Declaration ~> boolean\n\nvar ExplicitDifferentName = require('ExplicitProvidesModuleDifferentName');\n(ExplicitDifferentName.fun(): boolean); // Error: Either Implementation ~> boolean or Declaration ~> boolean\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar Implicit = require(\"ImplicitProvidesModule\");\n(Implicit.fun(): boolean); // Error: Either Implementation ~> boolean or Declaration ~> boolean\n\nvar ExplicitSameName = require(\"ExplicitProvidesModuleSameName\");\n(ExplicitSameName.fun(): boolean); // Error: Either Implementation ~> boolean or Declaration ~> boolean\n\nvar ExplicitDifferentName = require(\"ExplicitProvidesModuleDifferentName\");\n(ExplicitDifferentName.fun(): boolean); // Error: Either Implementation ~> boolean or Declaration ~> boolean\n\n`;\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste/external/_d3/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`min.js 1`] = `\nclass Implementation {}\nmodule.exports.fun = (): Implementation => new Implementation;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass Implementation {}\nmodule.exports.fun = (): Implementation => new Implementation();\n\n`;\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste/external/_d3/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste/external/_d3/min.js",
    "content": "class Implementation {}\nmodule.exports.fun = (): Implementation => new Implementation;\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste/foo/bar/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`nested_test.js 1`] = `\n/* @flow */\n\nvar docblock = require('qux/docblock');\nvar min = require('d3/min.js');\nvar corge = require('qux/corge');\n\n(docblock.fun(): boolean); // Error: Either Implementation ~> boolean or Declaration ~> boolean\n(min.fun(): boolean); // Error: Either Implementation ~> boolean or Declaration ~> boolean\n(corge.fun(): boolean); // Error: Either Implementation ~> boolean or Declaration ~> boolean\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar docblock = require(\"qux/docblock\");\nvar min = require(\"d3/min.js\");\nvar corge = require(\"qux/corge\");\n\n(docblock.fun(): boolean); // Error: Either Implementation ~> boolean or Declaration ~> boolean\n(min.fun(): boolean); // Error: Either Implementation ~> boolean or Declaration ~> boolean\n(corge.fun(): boolean); // Error: Either Implementation ~> boolean or Declaration ~> boolean\n\n`;\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste/foo/bar/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste/foo/bar/nested_test.js",
    "content": "/* @flow */\n\nvar docblock = require('qux/docblock');\nvar min = require('d3/min.js');\nvar corge = require('qux/corge');\n\n(docblock.fun(): boolean); // Error: Either Implementation ~> boolean or Declaration ~> boolean\n(min.fun(): boolean); // Error: Either Implementation ~> boolean or Declaration ~> boolean\n(corge.fun(): boolean); // Error: Either Implementation ~> boolean or Declaration ~> boolean\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste/md5.js",
    "content": "/* @providesModule md5 */\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste/test.js",
    "content": "/* @flow */\n\nvar Implicit = require('ImplicitProvidesModule');\n(Implicit.fun(): boolean); // Error: Either Implementation ~> boolean or Declaration ~> boolean\n\nvar ExplicitSameName = require('ExplicitProvidesModuleSameName');\n(ExplicitSameName.fun(): boolean); // Error: Either Implementation ~> boolean or Declaration ~> boolean\n\nvar ExplicitDifferentName = require('ExplicitProvidesModuleDifferentName');\n(ExplicitDifferentName.fun(): boolean); // Error: Either Implementation ~> boolean or Declaration ~> boolean\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste/ws/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`index.js 1`] = `\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n`;\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste/ws/index.js",
    "content": ""
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste/ws/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste/ws/test/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`client.js 1`] = `\nvar ws = require('../');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar ws = require(\"../\");\n\n`;\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste/ws/test/client.js",
    "content": "var ws = require('../');\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste/ws/test/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste_name_reducers/A.js",
    "content": "/* @flow */\n\nclass AImplementation {}\nexport function foo(): AImplementation { return new AImplementation(); }\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste_name_reducers/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\n/* @flow */\n\nclass AImplementation {}\nexport function foo(): AImplementation { return new AImplementation(); }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nclass AImplementation {}\nexport function foo(): AImplementation {\n  return new AImplementation();\n}\n\n`;\n\nexports[`index.js 1`] = `\n/* @flow */\n\nvar A = require('A');\n(A.foo(): boolean); // Error: Either AImplementation ~> boolean or ADefinition ~> boolean\n\nvar test = require('test');\n(test.foo(): boolean); // Error: Either TestImplementation ~> boolean or TestDefinition ~> boolean\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar A = require(\"A\");\n(A.foo(): boolean); // Error: Either AImplementation ~> boolean or ADefinition ~> boolean\n\nvar test = require(\"test\");\n(test.foo(): boolean); // Error: Either TestImplementation ~> boolean or TestDefinition ~> boolean\n\n`;\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste_name_reducers/index.js",
    "content": "/* @flow */\n\nvar A = require('A');\n(A.foo(): boolean); // Error: Either AImplementation ~> boolean or ADefinition ~> boolean\n\nvar test = require('test');\n(test.foo(): boolean); // Error: Either TestImplementation ~> boolean or TestDefinition ~> boolean\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_haste_name_reducers/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_node/A.js",
    "content": "class Implementation {}\nexport function foo(): Implementation { return new Implementation; }\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_node/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\nclass Implementation {}\nexport function foo(): Implementation { return new Implementation; }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass Implementation {}\nexport function foo(): Implementation {\n  return new Implementation();\n}\n\n`;\n\nexports[`test_absolute.js 1`] = `\n/* @flow */\n\n// This will require ./node_modules/B.js.flow\nvar B1 = require('B');\n(B1.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\n// This will require ./node_modules/B.js.flow\nvar B2 = require('B.js');\n(B2.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar C = require('package_with_full_main');\n(C.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar D = require('package_with_partial_main');\n(D.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar E = require('package_with_no_package_json');\n(E.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar F = require('package_with_dir_main');\n(F.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\n// This will require ./node_modules/B.js.flow\nvar B1 = require('B');\n(B1.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\n// This will require ./node_modules/B.js.flow\nvar B2 = require('B.js');\n(B2.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar C = require('package_with_full_main');\n(C.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar D = require('package_with_partial_main');\n(D.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar E = require('package_with_no_package_json');\n(E.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar F = require('package_with_dir_main');\n(F.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n// This will require ./node_modules/B.js.flow\nvar B1 = require(\"B\");\n(B1.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\n// This will require ./node_modules/B.js.flow\nvar B2 = require(\"B.js\");\n(B2.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar C = require(\"package_with_full_main\");\n(C.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar D = require(\"package_with_partial_main\");\n(D.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar E = require(\"package_with_no_package_json\");\n(E.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar F = require(\"package_with_dir_main\");\n(F.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\n// This will require ./node_modules/B.js.flow\nvar B1 = require(\"B\");\n(B1.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\n// This will require ./node_modules/B.js.flow\nvar B2 = require(\"B.js\");\n(B2.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar C = require(\"package_with_full_main\");\n(C.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar D = require(\"package_with_partial_main\");\n(D.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar E = require(\"package_with_no_package_json\");\n(E.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar F = require(\"package_with_dir_main\");\n(F.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\n`;\n\nexports[`test_relative.js 1`] = `\nimport { foo } from './A';\n\n(foo(): boolean); // Error: either Implementation ~> boolean or Definition ~> boolean\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport { foo } from \"./A\";\n\n(foo(): boolean); // Error: either Implementation ~> boolean or Definition ~> boolean\n\n`;\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_node/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_node/test_absolute.js",
    "content": "/* @flow */\n\n// This will require ./node_modules/B.js.flow\nvar B1 = require('B');\n(B1.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\n// This will require ./node_modules/B.js.flow\nvar B2 = require('B.js');\n(B2.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar C = require('package_with_full_main');\n(C.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar D = require('package_with_partial_main');\n(D.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar E = require('package_with_no_package_json');\n(E.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar F = require('package_with_dir_main');\n(F.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\n// This will require ./node_modules/B.js.flow\nvar B1 = require('B');\n(B1.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\n// This will require ./node_modules/B.js.flow\nvar B2 = require('B.js');\n(B2.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar C = require('package_with_full_main');\n(C.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar D = require('package_with_partial_main');\n(D.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar E = require('package_with_no_package_json');\n(E.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n\nvar F = require('package_with_dir_main');\n(F.fun(): boolean); // Error either Implementation ~> boolean or Declaration ~> boolean\n"
  },
  {
    "path": "tests/flow/declaration_files_incremental_node/test_relative.js",
    "content": "import { foo } from './A';\n\n(foo(): boolean); // Error: either Implementation ~> boolean or Definition ~> boolean\n"
  },
  {
    "path": "tests/flow/declaration_files_node/A.js",
    "content": "/* @flow */\n\nmodule.exports.fun = (): string => 'hello there!';\n"
  },
  {
    "path": "tests/flow/declaration_files_node/CJS.js",
    "content": "// @flow\nmodule.exports = 42;\n"
  },
  {
    "path": "tests/flow/declaration_files_node/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\n/* @flow */\n\nmodule.exports.fun = (): string => 'hello there!';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nmodule.exports.fun = (): string => \"hello there!\";\n\n`;\n\nexports[`CJS.js 1`] = `\n// @flow\nmodule.exports = 42;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nmodule.exports = 42;\n\n`;\n\nexports[`test_absolute.js 1`] = `\n/* @flow */\n\n// This will require ./node_modules/B.js.flow\nvar B1 = require('B');\n(B1.fun(): string); // Error number ~> string\n\n// This will require ./node_modules/B.js.flow\nvar B2 = require('B.js');\n(B2.fun(): string); // Error number ~> string\n\nvar C = require('package_with_full_main');\n(C.fun(): string); // Error number ~> string\n\nvar D = require('package_with_partial_main');\n(D.fun(): string); // Error number ~> string\n\nvar E = require('package_with_no_package_json');\n(E.fun(): string); // Error number ~> string\n\nvar F = require('package_with_dir_main');\n(F.fun(): string); // Error number ~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n// This will require ./node_modules/B.js.flow\nvar B1 = require(\"B\");\n(B1.fun(): string); // Error number ~> string\n\n// This will require ./node_modules/B.js.flow\nvar B2 = require(\"B.js\");\n(B2.fun(): string); // Error number ~> string\n\nvar C = require(\"package_with_full_main\");\n(C.fun(): string); // Error number ~> string\n\nvar D = require(\"package_with_partial_main\");\n(D.fun(): string); // Error number ~> string\n\nvar E = require(\"package_with_no_package_json\");\n(E.fun(): string); // Error number ~> string\n\nvar F = require(\"package_with_dir_main\");\n(F.fun(): string); // Error number ~> string\n\n`;\n\nexports[`test_relative.js 1`] = `\n/* @flow */\n\n// This will require ./A.js.flow\nvar A1 = require('./A');\n(A1.fun(): string); // Error number ~> string\n\n// This will require ./A.js.flow\nvar A2 = require('./A.js');\n(A2.fun(): string); // Error number ~> string\n\nvar CJS = require('./CJS.js');\n(CJS: string);\n(CJS: number); // Error: string ~> number\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n// This will require ./A.js.flow\nvar A1 = require(\"./A\");\n(A1.fun(): string); // Error number ~> string\n\n// This will require ./A.js.flow\nvar A2 = require(\"./A.js\");\n(A2.fun(): string); // Error number ~> string\n\nvar CJS = require(\"./CJS.js\");\n(CJS: string);\n(CJS: number); // Error: string ~> number\n\n`;\n"
  },
  {
    "path": "tests/flow/declaration_files_node/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/declaration_files_node/test_absolute.js",
    "content": "/* @flow */\n\n// This will require ./node_modules/B.js.flow\nvar B1 = require('B');\n(B1.fun(): string); // Error number ~> string\n\n// This will require ./node_modules/B.js.flow\nvar B2 = require('B.js');\n(B2.fun(): string); // Error number ~> string\n\nvar C = require('package_with_full_main');\n(C.fun(): string); // Error number ~> string\n\nvar D = require('package_with_partial_main');\n(D.fun(): string); // Error number ~> string\n\nvar E = require('package_with_no_package_json');\n(E.fun(): string); // Error number ~> string\n\nvar F = require('package_with_dir_main');\n(F.fun(): string); // Error number ~> string\n"
  },
  {
    "path": "tests/flow/declaration_files_node/test_relative.js",
    "content": "/* @flow */\n\n// This will require ./A.js.flow\nvar A1 = require('./A');\n(A1.fun(): string); // Error number ~> string\n\n// This will require ./A.js.flow\nvar A2 = require('./A.js');\n(A2.fun(): string); // Error number ~> string\n\nvar CJS = require('./CJS.js');\n(CJS: string);\n(CJS: number); // Error: string ~> number\n"
  },
  {
    "path": "tests/flow/declare_class/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`declare_class.js 1`] = `\ndeclare class C {\n    static x: number;\n    static foo(x: number): void;\n\n    constructor(x: string): void;\n}\n\nC.x = \"\";\nC.foo(\"\");\n\n(C.name: string);\n(C.name: number); // error, it's a string\n\ndeclare class D extends C { }\nnew D(123); // error, number ~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class C {\n  static x: number,\n  static foo(x: number): void,\n\n  constructor(x: string): void\n}\n\nC.x = \"\";\nC.foo(\"\");\n\n(C.name: string);\n(C.name: number); // error, it's a string\n\ndeclare class D extends C {}\nnew D(123); // error, number ~> string\n\n`;\n"
  },
  {
    "path": "tests/flow/declare_class/declare_class.js",
    "content": "declare class C {\n    static x: number;\n    static foo(x: number): void;\n\n    constructor(x: string): void;\n}\n\nC.x = \"\";\nC.foo(\"\");\n\n(C.name: string);\n(C.name: number); // error, it's a string\n\ndeclare class D extends C { }\nnew D(123); // error, number ~> string\n"
  },
  {
    "path": "tests/flow/declare_class/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/declare_class/lib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\ndeclare class _C {\n  foo(): number;\n}\ndeclare var _module: {\n  C: Class<_C>;\n}\ndeclare class D extends _module.C {\n  foo(): string;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class _C {\n  foo(): number\n}\ndeclare var _module: {\n  C: Class<_C>\n};\ndeclare class D extends _module.C {\n  foo(): string\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/declare_class/lib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/declare_class/lib/test.js",
    "content": "declare class _C {\n  foo(): number;\n}\ndeclare var _module: {\n  C: Class<_C>;\n}\ndeclare class D extends _module.C {\n  foo(): string;\n}\n"
  },
  {
    "path": "tests/flow/declare_export/B.js",
    "content": "/* @flow */\n\nexports.numberValue = 42;\n"
  },
  {
    "path": "tests/flow/declare_export/C.js",
    "content": "/* @flow */\n"
  },
  {
    "path": "tests/flow/declare_export/CommonJS_Clobbering_Class.js",
    "content": "/**\n * @providesModule CommonJS_Clobbering_Class\n * @flow\n */\n\nclass Base {\n  static baseProp: number;\n}\n\nclass Test extends Base {\n  static childProp: number;\n\n  static staticNumber1():number { return 1; }\n  static staticNumber2():number { return 2; }\n  static staticNumber3():number { return 3; }\n\n  instNumber1():number { return 1; }\n  instNumber2():number { return 2; }\n};\n\nmodule.exports = Test;\n"
  },
  {
    "path": "tests/flow/declare_export/CommonJS_Clobbering_Lit.js",
    "content": "/**\n * @providesModule CommonJS_Clobbering_Lit\n * @flow\n */\n\nmodule.exports = {\n  numberValue1: 1,\n  numberValue2: 2,\n  numberValue3: 3,\n  numberValue4: 4,\n  numberValue5: 5\n};\n"
  },
  {
    "path": "tests/flow/declare_export/CommonJS_Named.js",
    "content": "/**\n * @providesModule CommonJS_Named\n * @flow\n */\n\nexports.numberValue1 = 1;\nexports.numberValue2 = 2;\nexports.numberValue3 = 3;\nexports.numberValue4 = 4;\nexports.numberValue5 = 5;\n"
  },
  {
    "path": "tests/flow/declare_export/ES6_DefaultAndNamed.js",
    "content": "/* @flow */\n\ndeclare export default number;\ndeclare export var str: string;\n"
  },
  {
    "path": "tests/flow/declare_export/ES6_Default_AnonFunction1.js",
    "content": "/**\n * @providesModule ES6_Default_AnonFunction1\n * @flow\n */\n\ndeclare export default () => number;\n"
  },
  {
    "path": "tests/flow/declare_export/ES6_Default_AnonFunction2.js",
    "content": "/**\n * @providesModule ES6_Default_AnonFunction2\n * @flow\n */\n\ndeclare export default () =>number;\n"
  },
  {
    "path": "tests/flow/declare_export/ES6_Default_NamedClass1.js",
    "content": "/**\n * @providesModule ES6_Default_NamedClass1\n * @flow\n */\n\ndeclare export default class FooImpl { givesANum(): number; };\n\n// Regression test for https://github.com/facebook/flow/issues/511\n//\n// Default-exported class should also be available in local scope\ndeclare export { FooImpl as Foo }\ndeclare export function getAFoo(): FooImpl;\n"
  },
  {
    "path": "tests/flow/declare_export/ES6_Default_NamedClass2.js",
    "content": "/**\n * @providesModule ES6_Default_NamedClass2\n * @flow\n */\n\ndeclare export default class Foo { givesANum(): number; };\n"
  },
  {
    "path": "tests/flow/declare_export/ES6_Default_NamedFunction1.js",
    "content": "/**\n * @providesModule ES6_Default_NamedFunction1\n * @flow\n */\n\ndeclare export default function foo():number;\n"
  },
  {
    "path": "tests/flow/declare_export/ES6_Default_NamedFunction2.js",
    "content": "/**\n * @providesModule ES6_Default_NamedFunction2\n * @flow\n */\n\ndeclare export default function foo():number;\n"
  },
  {
    "path": "tests/flow/declare_export/ES6_ExportAllFromMulti.js",
    "content": "// @flow\n\ndeclare export * from \"./ES6_ExportAllFrom_Source1\";\ndeclare export * from \"./ES6_ExportAllFrom_Source2\";\n"
  },
  {
    "path": "tests/flow/declare_export/ES6_ExportAllFrom_Intermediary1.js",
    "content": "/**\n * @providesModule ES6_ExportAllFrom_Intermediary1\n * @flow\n */\n\ndeclare export * from \"ES6_ExportAllFrom_Source1\";\n"
  },
  {
    "path": "tests/flow/declare_export/ES6_ExportAllFrom_Intermediary2.js",
    "content": "/**\n * @providesModule ES6_ExportAllFrom_Intermediary2\n * @flow\n */\n\ndeclare export * from \"ES6_ExportAllFrom_Source2\";\n"
  },
  {
    "path": "tests/flow/declare_export/ES6_ExportAllFrom_Source1.js",
    "content": "/**\n * @providesModule ES6_ExportAllFrom_Source1\n * @flow\n */\n\ndeclare export var numberValue1: number;\n"
  },
  {
    "path": "tests/flow/declare_export/ES6_ExportAllFrom_Source2.js",
    "content": "/**\n * @providesModule ES6_ExportAllFrom_Source2\n * @flow\n */\n\ndeclare export var numberValue2: number;\n"
  },
  {
    "path": "tests/flow/declare_export/ES6_ExportFrom_Intermediary1.js",
    "content": "/**\n * @providesModule ES6_ExportFrom_Intermediary1\n * @flow\n */\n\ndeclare export {\n  numberValue1,\n  numberValue2 as numberValue2_renamed\n} from \"ES6_ExportFrom_Source1\";\n"
  },
  {
    "path": "tests/flow/declare_export/ES6_ExportFrom_Intermediary2.js",
    "content": "/**\n * @providesModule ES6_ExportFrom_Intermediary2\n * @flow\n */\n\ndeclare export {\n  numberValue1,\n  numberValue2 as numberValue2_renamed2\n} from \"ES6_ExportFrom_Source2\";\n"
  },
  {
    "path": "tests/flow/declare_export/ES6_ExportFrom_Source1.js",
    "content": "/**\n * @providesModule ES6_ExportFrom_Source1\n * @flow\n */\n\ndeclare export var numberValue1: number;\ndeclare export var numberValue2: number;\n"
  },
  {
    "path": "tests/flow/declare_export/ES6_ExportFrom_Source2.js",
    "content": "/**\n * @providesModule ES6_ExportFrom_Source2\n * @flow\n */\n\ndeclare export var numberValue1: number;\ndeclare export var numberValue2: number;\n"
  },
  {
    "path": "tests/flow/declare_export/ES6_Named1.js",
    "content": "/**\n * @providesModule ES6_Named1\n * @flow\n */\n\nvar specifierNumber1 = 1;\nvar specifierNumber2 = 2;\nvar specifierNumber3 = 3;\nvar groupedSpecifierNumber1 = 1;\nvar groupedSpecifierNumber2 = 2;\n\ndeclare export {specifierNumber1};\ndeclare export {specifierNumber2 as specifierNumber2Renamed};\ndeclare export {specifierNumber3};\ndeclare export {groupedSpecifierNumber1, groupedSpecifierNumber2};\n\ndeclare export function givesANumber(): number;\ndeclare export class NumberGenerator { givesANumber(): number; };\n\ndeclare export var varDeclNumber1: number;\ndeclare export var varDeclNumber2: number;\n"
  },
  {
    "path": "tests/flow/declare_export/ES6_Named2.js",
    "content": "/**\n * @providesModule ES6_Named2\n * @flow\n */\n\nvar specifierNumber4 = 1;\nvar specifierNumber5 = 2;\nvar groupedSpecifierNumber3 = 1;\nvar groupedSpecifierNumber4 = 2;\n\ndeclare export {specifierNumber4};\ndeclare export {specifierNumber5 as specifierNumber5Renamed};\ndeclare export {groupedSpecifierNumber3, groupedSpecifierNumber4};\n\ndeclare export function givesANumber2(): number;\ndeclare export class NumberGenerator2 { givesANumber(): number; };\n\ndeclare export var varDeclNumber3: number;\ndeclare export var varDeclNumber4: number;\n"
  },
  {
    "path": "tests/flow/declare_export/ProvidesModuleA.js",
    "content": "/**\n * @providesModule A\n * @flow\n */\n\nexports.numberValue1 = 42;\nexports.numberValue2 = 42;\nexports.numberValue3 = 42;\nexports.numberValue4 = 42;\nexports.stringValue = \"str\";\n"
  },
  {
    "path": "tests/flow/declare_export/ProvidesModuleCJSDefault.js",
    "content": "/**\n * @providesModule CJSDefault\n * @flow\n */\n\nmodule.exports = {\n  numberValue: 42\n};\n"
  },
  {
    "path": "tests/flow/declare_export/ProvidesModuleD.js",
    "content": "/**\n * @providesModule D\n * @flow\n */\n"
  },
  {
    "path": "tests/flow/declare_export/ProvidesModuleES6Default.js",
    "content": "/**\n * @providesModule ES6Default\n * @flow\n */\n\n/*\nexport default {\n  numberValue: 42,\n};\n*/\n"
  },
  {
    "path": "tests/flow/declare_export/SideEffects.js",
    "content": "/* @flow */\n"
  },
  {
    "path": "tests/flow/declare_export/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`B.js 1`] = `\n/* @flow */\n\nexports.numberValue = 42;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nexports.numberValue = 42;\n\n`;\n\nexports[`C.js 1`] = `\n/* @flow */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n`;\n\nexports[`CommonJS_Clobbering_Class.js 1`] = `\n/**\n * @providesModule CommonJS_Clobbering_Class\n * @flow\n */\n\nclass Base {\n  static baseProp: number;\n}\n\nclass Test extends Base {\n  static childProp: number;\n\n  static staticNumber1():number { return 1; }\n  static staticNumber2():number { return 2; }\n  static staticNumber3():number { return 3; }\n\n  instNumber1():number { return 1; }\n  instNumber2():number { return 2; }\n};\n\nmodule.exports = Test;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule CommonJS_Clobbering_Class\n * @flow\n */\n\nclass Base {\n  static baseProp: number;\n}\n\nclass Test extends Base {\n  static childProp: number;\n\n  static staticNumber1(): number {\n    return 1;\n  }\n  static staticNumber2(): number {\n    return 2;\n  }\n  static staticNumber3(): number {\n    return 3;\n  }\n\n  instNumber1(): number {\n    return 1;\n  }\n  instNumber2(): number {\n    return 2;\n  }\n}\n\nmodule.exports = Test;\n\n`;\n\nexports[`CommonJS_Clobbering_Lit.js 1`] = `\n/**\n * @providesModule CommonJS_Clobbering_Lit\n * @flow\n */\n\nmodule.exports = {\n  numberValue1: 1,\n  numberValue2: 2,\n  numberValue3: 3,\n  numberValue4: 4,\n  numberValue5: 5\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule CommonJS_Clobbering_Lit\n * @flow\n */\n\nmodule.exports = {\n  numberValue1: 1,\n  numberValue2: 2,\n  numberValue3: 3,\n  numberValue4: 4,\n  numberValue5: 5\n};\n\n`;\n\nexports[`CommonJS_Named.js 1`] = `\n/**\n * @providesModule CommonJS_Named\n * @flow\n */\n\nexports.numberValue1 = 1;\nexports.numberValue2 = 2;\nexports.numberValue3 = 3;\nexports.numberValue4 = 4;\nexports.numberValue5 = 5;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule CommonJS_Named\n * @flow\n */\n\nexports.numberValue1 = 1;\nexports.numberValue2 = 2;\nexports.numberValue3 = 3;\nexports.numberValue4 = 4;\nexports.numberValue5 = 5;\n\n`;\n\nexports[`ES6_Default_AnonFunction1.js 1`] = `\n/**\n * @providesModule ES6_Default_AnonFunction1\n * @flow\n */\n\ndeclare export default () => number;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_Default_AnonFunction1\n * @flow\n */\n\ndeclare export default () => number\n\n`;\n\nexports[`ES6_Default_AnonFunction2.js 1`] = `\n/**\n * @providesModule ES6_Default_AnonFunction2\n * @flow\n */\n\ndeclare export default () =>number;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_Default_AnonFunction2\n * @flow\n */\n\ndeclare export default () => number\n\n`;\n\nexports[`ES6_Default_NamedClass1.js 1`] = `\n/**\n * @providesModule ES6_Default_NamedClass1\n * @flow\n */\n\ndeclare export default class FooImpl { givesANum(): number; };\n\n// Regression test for https://github.com/facebook/flow/issues/511\n//\n// Default-exported class should also be available in local scope\ndeclare export { FooImpl as Foo }\ndeclare export function getAFoo(): FooImpl;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_Default_NamedClass1\n * @flow\n */\n\ndeclare export default class FooImpl { givesANum(): number }\n\n// Regression test for https://github.com/facebook/flow/issues/511\n//\n// Default-exported class should also be available in local scope\ndeclare export { FooImpl as Foo };\ndeclare export function getAFoo(): FooImpl;\n\n`;\n\nexports[`ES6_Default_NamedClass2.js 1`] = `\n/**\n * @providesModule ES6_Default_NamedClass2\n * @flow\n */\n\ndeclare export default class Foo { givesANum(): number; };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_Default_NamedClass2\n * @flow\n */\n\ndeclare export default class Foo { givesANum(): number }\n\n`;\n\nexports[`ES6_Default_NamedFunction1.js 1`] = `\n/**\n * @providesModule ES6_Default_NamedFunction1\n * @flow\n */\n\ndeclare export default function foo():number;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_Default_NamedFunction1\n * @flow\n */\n\ndeclare export default function foo(): number;\n\n`;\n\nexports[`ES6_Default_NamedFunction2.js 1`] = `\n/**\n * @providesModule ES6_Default_NamedFunction2\n * @flow\n */\n\ndeclare export default function foo():number;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_Default_NamedFunction2\n * @flow\n */\n\ndeclare export default function foo(): number;\n\n`;\n\nexports[`ES6_DefaultAndNamed.js 1`] = `\n/* @flow */\n\ndeclare export default number;\ndeclare export var str: string;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\ndeclare export default number\ndeclare export var str: string;\n\n`;\n\nexports[`ES6_ExportAllFrom_Intermediary1.js 1`] = `\n/**\n * @providesModule ES6_ExportAllFrom_Intermediary1\n * @flow\n */\n\ndeclare export * from \"ES6_ExportAllFrom_Source1\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_ExportAllFrom_Intermediary1\n * @flow\n */\n\ndeclare export * from \"ES6_ExportAllFrom_Source1\"\n\n`;\n\nexports[`ES6_ExportAllFrom_Intermediary2.js 1`] = `\n/**\n * @providesModule ES6_ExportAllFrom_Intermediary2\n * @flow\n */\n\ndeclare export * from \"ES6_ExportAllFrom_Source2\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_ExportAllFrom_Intermediary2\n * @flow\n */\n\ndeclare export * from \"ES6_ExportAllFrom_Source2\"\n\n`;\n\nexports[`ES6_ExportAllFrom_Source1.js 1`] = `\n/**\n * @providesModule ES6_ExportAllFrom_Source1\n * @flow\n */\n\ndeclare export var numberValue1: number;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_ExportAllFrom_Source1\n * @flow\n */\n\ndeclare export var numberValue1: number;\n\n`;\n\nexports[`ES6_ExportAllFrom_Source2.js 1`] = `\n/**\n * @providesModule ES6_ExportAllFrom_Source2\n * @flow\n */\n\ndeclare export var numberValue2: number;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_ExportAllFrom_Source2\n * @flow\n */\n\ndeclare export var numberValue2: number;\n\n`;\n\nexports[`ES6_ExportAllFromMulti.js 1`] = `\n// @flow\n\ndeclare export * from \"./ES6_ExportAllFrom_Source1\";\ndeclare export * from \"./ES6_ExportAllFrom_Source2\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ndeclare export * from \"./ES6_ExportAllFrom_Source1\"\ndeclare export * from \"./ES6_ExportAllFrom_Source2\"\n\n`;\n\nexports[`ES6_ExportFrom_Intermediary1.js 1`] = `\n/**\n * @providesModule ES6_ExportFrom_Intermediary1\n * @flow\n */\n\ndeclare export {\n  numberValue1,\n  numberValue2 as numberValue2_renamed\n} from \"ES6_ExportFrom_Source1\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_ExportFrom_Intermediary1\n * @flow\n */\n\ndeclare export {\n  numberValue1,\n  numberValue2 as numberValue2_renamed\n} from \"ES6_ExportFrom_Source1\";\n\n`;\n\nexports[`ES6_ExportFrom_Intermediary2.js 1`] = `\n/**\n * @providesModule ES6_ExportFrom_Intermediary2\n * @flow\n */\n\ndeclare export {\n  numberValue1,\n  numberValue2 as numberValue2_renamed2\n} from \"ES6_ExportFrom_Source2\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_ExportFrom_Intermediary2\n * @flow\n */\n\ndeclare export {\n  numberValue1,\n  numberValue2 as numberValue2_renamed2\n} from \"ES6_ExportFrom_Source2\";\n\n`;\n\nexports[`ES6_ExportFrom_Source1.js 1`] = `\n/**\n * @providesModule ES6_ExportFrom_Source1\n * @flow\n */\n\ndeclare export var numberValue1: number;\ndeclare export var numberValue2: number;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_ExportFrom_Source1\n * @flow\n */\n\ndeclare export var numberValue1: number;\ndeclare export var numberValue2: number;\n\n`;\n\nexports[`ES6_ExportFrom_Source2.js 1`] = `\n/**\n * @providesModule ES6_ExportFrom_Source2\n * @flow\n */\n\ndeclare export var numberValue1: number;\ndeclare export var numberValue2: number;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_ExportFrom_Source2\n * @flow\n */\n\ndeclare export var numberValue1: number;\ndeclare export var numberValue2: number;\n\n`;\n\nexports[`ES6_Named1.js 1`] = `\n/**\n * @providesModule ES6_Named1\n * @flow\n */\n\nvar specifierNumber1 = 1;\nvar specifierNumber2 = 2;\nvar specifierNumber3 = 3;\nvar groupedSpecifierNumber1 = 1;\nvar groupedSpecifierNumber2 = 2;\n\ndeclare export {specifierNumber1};\ndeclare export {specifierNumber2 as specifierNumber2Renamed};\ndeclare export {specifierNumber3};\ndeclare export {groupedSpecifierNumber1, groupedSpecifierNumber2};\n\ndeclare export function givesANumber(): number;\ndeclare export class NumberGenerator { givesANumber(): number; };\n\ndeclare export var varDeclNumber1: number;\ndeclare export var varDeclNumber2: number;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_Named1\n * @flow\n */\n\nvar specifierNumber1 = 1;\nvar specifierNumber2 = 2;\nvar specifierNumber3 = 3;\nvar groupedSpecifierNumber1 = 1;\nvar groupedSpecifierNumber2 = 2;\n\ndeclare export { specifierNumber1 };\ndeclare export { specifierNumber2 as specifierNumber2Renamed };\ndeclare export { specifierNumber3 };\ndeclare export { groupedSpecifierNumber1, groupedSpecifierNumber2 };\n\ndeclare export function givesANumber(): number;\ndeclare export class NumberGenerator { givesANumber(): number }\n\ndeclare export var varDeclNumber1: number;\ndeclare export var varDeclNumber2: number;\n\n`;\n\nexports[`ES6_Named2.js 1`] = `\n/**\n * @providesModule ES6_Named2\n * @flow\n */\n\nvar specifierNumber4 = 1;\nvar specifierNumber5 = 2;\nvar groupedSpecifierNumber3 = 1;\nvar groupedSpecifierNumber4 = 2;\n\ndeclare export {specifierNumber4};\ndeclare export {specifierNumber5 as specifierNumber5Renamed};\ndeclare export {groupedSpecifierNumber3, groupedSpecifierNumber4};\n\ndeclare export function givesANumber2(): number;\ndeclare export class NumberGenerator2 { givesANumber(): number; };\n\ndeclare export var varDeclNumber3: number;\ndeclare export var varDeclNumber4: number;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_Named2\n * @flow\n */\n\nvar specifierNumber4 = 1;\nvar specifierNumber5 = 2;\nvar groupedSpecifierNumber3 = 1;\nvar groupedSpecifierNumber4 = 2;\n\ndeclare export { specifierNumber4 };\ndeclare export { specifierNumber5 as specifierNumber5Renamed };\ndeclare export { groupedSpecifierNumber3, groupedSpecifierNumber4 };\n\ndeclare export function givesANumber2(): number;\ndeclare export class NumberGenerator2 { givesANumber(): number }\n\ndeclare export var varDeclNumber3: number;\ndeclare export var varDeclNumber4: number;\n\n`;\n\nexports[`ProvidesModuleA.js 1`] = `\n/**\n * @providesModule A\n * @flow\n */\n\nexports.numberValue1 = 42;\nexports.numberValue2 = 42;\nexports.numberValue3 = 42;\nexports.numberValue4 = 42;\nexports.stringValue = \"str\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule A\n * @flow\n */\n\nexports.numberValue1 = 42;\nexports.numberValue2 = 42;\nexports.numberValue3 = 42;\nexports.numberValue4 = 42;\nexports.stringValue = \"str\";\n\n`;\n\nexports[`ProvidesModuleCJSDefault.js 1`] = `\n/**\n * @providesModule CJSDefault\n * @flow\n */\n\nmodule.exports = {\n  numberValue: 42\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule CJSDefault\n * @flow\n */\n\nmodule.exports = {\n  numberValue: 42\n};\n\n`;\n\nexports[`ProvidesModuleD.js 1`] = `\n/**\n * @providesModule D\n * @flow\n */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule D\n * @flow\n */\n\n`;\n\nexports[`ProvidesModuleES6Default.js 1`] = `\n/**\n * @providesModule ES6Default\n * @flow\n */\n\n/*\nexport default {\n  numberValue: 42,\n};\n*/\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6Default\n * @flow\n */\n\n/*\nexport default {\n  numberValue: 42,\n};\n*/\n\n`;\n\nexports[`SideEffects.js 1`] = `\n/* @flow */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n`;\n\nexports[`es6modules.js 1`] = `\n/* @flow */\n\n// ===================== //\n// == Path Resolution == //\n// ===================== //\n\n// @providesModule\nimport * as DefaultA from \"A\";\nvar a1: number = DefaultA.numberValue1;\nvar a2: string = DefaultA.numberValue1; // Error: number ~> string\n\n// File path\nimport * as DefaultB from \"./B\";\nvar b1: number = DefaultB.numberValue;\nvar b2: string = DefaultB.numberValue; // Error: number ~> string\n\n// C.js exists, but not as a providesModule\nimport DefaultC from \"C\"; // Error: No such module\n\n// @providesModule D exists, but not as a filename\nimport DefaultD from \"./D\"; // Error: No such module\n\n// ================================================ //\n// == CommonJS Clobbering Literal Exports -> ES6 == //\n// ================================================ //\n\nimport {doesntExist1} from \"CommonJS_Clobbering_Lit\"; // Error: Not an exported binding\n\nimport {numberValue1} from \"CommonJS_Clobbering_Lit\";\nvar c1: number = numberValue1;\nvar c2: string = numberValue1; // Error: number ~> string\n\nimport {numberValue2 as numVal1} from \"CommonJS_Clobbering_Lit\";\nvar d1: number = numVal1;\nvar d2: string = numVal1; // Error: number ~> string\n\nimport CJS_Clobb_Lit from \"CommonJS_Clobbering_Lit\";\nvar e1: number = CJS_Clobb_Lit.numberValue3;\nvar e2: string = CJS_Clobb_Lit.numberValue3; // Error: number ~> string\nCJS_Clobb_Lit.doesntExist; // Error: doesntExist isn't a property\n\nimport * as CJS_Clobb_Lit_NS from \"CommonJS_Clobbering_Lit\";\nvar f1: number = CJS_Clobb_Lit_NS.numberValue4;\nvar f2: number = CJS_Clobb_Lit_NS.default.numberValue4;\nCJS_Clobb_Lit_NS.default.default; // Error: No 'default' property on the exported obj\nvar f3: string = CJS_Clobb_Lit_NS.numberValue4; // Error: number ~> string\nvar f4: string = CJS_Clobb_Lit_NS.default.numberValue5; // Error: number ~> string\n\n// ============================================== //\n// == CommonJS Clobbering Class Exports -> ES6 == //\n// ============================================== //\n\nimport {doesntExist2} from \"CommonJS_Clobbering_Class\"; // Error: Not an exported binding\n\n// The following import should error because class statics are not turned into\n// named exports for now. This avoids complexities with polymorphic static\n// members (where the polymophism is defined on the class itself rather than the\n// method).\nimport {staticNumber1, baseProp, childProp} from \"CommonJS_Clobbering_Class\"; // Error\n\nimport CJS_Clobb_Class from \"CommonJS_Clobbering_Class\";\nnew CJS_Clobb_Class();\nnew CJS_Clobb_Class().doesntExist; // Error: Class has no \\`doesntExist\\` property\nvar h1: number = CJS_Clobb_Class.staticNumber2();\nvar h2: string = CJS_Clobb_Class.staticNumber2(); // Error: number ~> string\nvar h3: number = new CJS_Clobb_Class().instNumber1();\nvar h4: string = new CJS_Clobb_Class().instNumber1(); // Error: number ~> string\n\nimport * as CJS_Clobb_Class_NS from \"CommonJS_Clobbering_Class\";\nnew CJS_Clobb_Class_NS(); // Error: Namespace object isn't constructable\nvar i1: number = CJS_Clobb_Class_NS.staticNumber3(); // Error: Class statics not copied to Namespace object\nvar i2: number = new CJS_Clobb_Class_NS.default().instNumber2();\nvar i3: string = new CJS_Clobb_Class_NS.default().instNumber2(); // Error: number ~> string\n\n// =================================== //\n// == CommonJS Named Exports -> ES6 == //\n// =================================== //\n\nimport {doesntExist3} from \"CommonJS_Named\"; // Error: Not an exported binding\n\nimport {numberValue2} from \"CommonJS_Named\";\nvar j1: number = numberValue2;\nvar j2: string = numberValue2; // Error: number ~> string\n\nimport {numberValue3 as numVal3} from \"CommonJS_Named\";\nvar k1: number = numVal3;\nvar k2: string = numVal3; // Error: number ~> string\n\nimport * as CJS_Named from \"CommonJS_Named\";\nvar l1: number = CJS_Named.numberValue1;\nvar l2: string = CJS_Named.numberValue1; // Error: number ~> string\nCJS_Named.doesntExist; // Error: doesntExist isn't a property\n\nimport * as CJS_Named_NS from \"CommonJS_Named\";\nvar m1: number = CJS_Named_NS.numberValue4;\nvar m2: string = CJS_Named_NS.default.numberValue4; // Error: CommonJS_Named has no default export\nvar m3: string = CJS_Named_NS.numberValue4; // Error: number ~> string\n\n//////////////////////////////\n// == ES6 Default -> ES6 == //\n//////////////////////////////\n\nimport {doesntExist4} from \"ES6_Default_AnonFunction1\"; // Error: Not an exported binding\n\nimport ES6_Def_AnonFunc1 from \"ES6_Default_AnonFunction1\";\nvar n1: number = ES6_Def_AnonFunc1();\nvar n2: string = ES6_Def_AnonFunc1(); // Error: number ~> string\n\nimport ES6_Def_NamedFunc1 from \"ES6_Default_NamedFunction1\";\nvar o1: number = ES6_Def_NamedFunc1();\nvar o2: string = ES6_Def_NamedFunc1(); // Error: number ~> string\n\n\n\n\n\nimport ES6_Def_NamedClass1 from \"ES6_Default_NamedClass1\";\nvar q1: number = new ES6_Def_NamedClass1().givesANum();\nvar q2: string = new ES6_Def_NamedClass1().givesANum(); // Error: number ~> string\n\n////////////////////////////\n// == ES6 Named -> ES6 == //\n////////////////////////////\n\nimport doesntExist5 from \"ES6_Named1\"; // Error: Not an exported binding\n\nimport {specifierNumber1 as specifierNumber1_1} from \"ES6_Named1\";\nvar r1: number = specifierNumber1_1;\nvar r2: string = specifierNumber1_1; // Error: number ~> string\n\nimport {specifierNumber2Renamed} from \"ES6_Named1\";\nvar s1: number = specifierNumber2Renamed;\nvar s2: string = specifierNumber2Renamed; // Error: number ~> string\n\nimport {specifierNumber3 as specifierNumber3Renamed} from \"ES6_Named1\";\nvar t1: number = specifierNumber3Renamed;\nvar t2: string = specifierNumber3Renamed; // Error: number ~> string\n\nimport {groupedSpecifierNumber1, groupedSpecifierNumber2} from \"ES6_Named1\";\nvar u1: number = groupedSpecifierNumber1;\nvar u2: number = groupedSpecifierNumber2;\nvar u3: string = groupedSpecifierNumber1; // Error: number ~> string\nvar u4: string = groupedSpecifierNumber2; // Error: number ~> string\n\nimport {givesANumber} from \"ES6_Named1\";\nvar v1: number = givesANumber();\nvar v2: string = givesANumber(); // Error: number ~> string\n\nimport {NumberGenerator} from \"ES6_Named1\";\nvar w1: number = new NumberGenerator().givesANumber();\nvar w2: string = new NumberGenerator().givesANumber(); // Error: number ~> string\n\nimport {varDeclNumber1, varDeclNumber2} from \"ES6_Named1\";\nvar x1: number = varDeclNumber1;\nvar x2: number = varDeclNumber2;\nvar x3: string = varDeclNumber1; // Error: number ~> string\nvar x4: string = varDeclNumber2; // Error: number ~> string\n\n\n\n\n\n\n\n\n\nimport {numberValue1 as numberValue4} from \"ES6_ExportFrom_Intermediary1\";\nvar aa1: number = numberValue4;\nvar aa2: string = numberValue4; // Error: number ~> string\n\nimport {numberValue2_renamed} from \"ES6_ExportFrom_Intermediary1\";\nvar ab1: number = numberValue2_renamed;\nvar ab2: string = numberValue2_renamed; // Error: number ~> string\n\nimport {numberValue1 as numberValue5} from \"ES6_ExportAllFrom_Intermediary1\";\nvar ac1: number = numberValue5;\nvar ac2: string = numberValue5; // Error: number ~> string\n\n///////////////////////////////////\n// == ES6 Default -> CommonJS == //\n///////////////////////////////////\n\nrequire('ES6_Default_AnonFunction2').doesntExist; // Error: 'doesntExist' isn't an export\n\nvar ES6_Def_AnonFunc2 = require(\"ES6_Default_AnonFunction2\").default;\nvar ad1: number = ES6_Def_AnonFunc2();\nvar ad2: string = ES6_Def_AnonFunc2(); // Error: number ~> string\n\nvar ES6_Def_NamedFunc2 = require(\"ES6_Default_NamedFunction2\").default;\nvar ae1: number = ES6_Def_NamedFunc2();\nvar ae2: string = ES6_Def_NamedFunc2(); // Error: number ~> string\n\n\n\n\n\nvar ES6_Def_NamedClass2 = require(\"ES6_Default_NamedClass2\").default;\nvar ag1: number = new ES6_Def_NamedClass2().givesANum();\nvar ag2: string = new ES6_Def_NamedClass2().givesANum(); // Error: number ~> string\n\n/////////////////////////////////\n// == ES6 Named -> CommonJS == //\n/////////////////////////////////\n\nvar specifierNumber4 = require(\"ES6_Named2\").specifierNumber4;\nvar ah1: number = specifierNumber4;\nvar ah2: string = specifierNumber4; // Error: number ~> string\n\nvar specifierNumber5Renamed = require(\"ES6_Named2\").specifierNumber5Renamed;\nvar ai1: number = specifierNumber5Renamed;\nvar ai2: string = specifierNumber5Renamed; // Error: number ~> string\n\nvar groupedSpecifierNumber3 = require(\"ES6_Named2\").groupedSpecifierNumber3;\nvar groupedSpecifierNumber4 = require(\"ES6_Named2\").groupedSpecifierNumber4;\nvar aj1: number = groupedSpecifierNumber3;\nvar aj2: number = groupedSpecifierNumber4;\nvar aj3: string = groupedSpecifierNumber3; // Error: number ~> string\nvar aj4: string = groupedSpecifierNumber4; // Error: number ~> string\n\nvar givesANumber2 = require(\"ES6_Named2\").givesANumber2;\nvar ak1: number = givesANumber2();\nvar ak2: string = givesANumber2(); // Error: number ~> string\n\nvar NumberGenerator2 = require(\"ES6_Named2\").NumberGenerator2;\nvar al1: number = new NumberGenerator2().givesANumber();\nvar al2: string = new NumberGenerator2().givesANumber(); // Error: number ~> string\n\nvar varDeclNumber3 = require(\"ES6_Named2\").varDeclNumber3;\nvar varDeclNumber4 = require(\"ES6_Named2\").varDeclNumber4;\nvar am1: number = varDeclNumber3;\nvar am2: number = varDeclNumber4;\nvar am3: string = varDeclNumber3; // Error: number ~> string\nvar am4: string = varDeclNumber4; // Error: number ~> string\n\n\n\n\n\n\n\n\n\nvar numberValue6 = require(\"ES6_ExportFrom_Intermediary2\").numberValue1;\nvar ap1: number = numberValue6;\nvar ap2: string = numberValue6; // Error: number ~> string\n\nvar numberValue2_renamed2 = require(\"ES6_ExportFrom_Intermediary2\").numberValue2_renamed2;\nvar aq1: number = numberValue2_renamed2;\nvar aq2: string = numberValue2_renamed2; // Error: number ~> string\n\nvar numberValue7 = require(\"ES6_ExportAllFrom_Intermediary2\").numberValue2;\nvar ar1: number = numberValue7;\nvar ar2: string = numberValue7; // Error: number ~> string\n\n////////////////////////////////////////////////////////\n// == ES6 Default+Named -> ES6 import Default+Named== //\n////////////////////////////////////////////////////////\n\nimport defaultNum, {str as namedStr} from \"./ES6_DefaultAndNamed\";\n\nvar as1: number = defaultNum;\nvar as2: string = defaultNum; // Error: number ~> string\n\nvar as3: string = namedStr;\nvar as4: number = namedStr; // Error: string ~> number\n\n////////////////////////////////////////\n// == Side-effect only ES6 imports == //\n////////////////////////////////////////\n\nimport \"./SideEffects\";\n\n//////////////////////////////////////////////\n// == Suggest export name on likely typo == //\n//////////////////////////////////////////////\nimport specifierNumber1 from \"ES6_Named1\"; // Error: Did you mean \\`import {specifierNumber1} from ...\\`?\nimport {specifierNumber} from \"ES6_Named1\"; // Error: Did you mean \\`specifierNumber1\\`?\n\n///////////////////////////////////////////////////\n// == Multi \\`export *\\` should combine exports == //\n///////////////////////////////////////////////////\nimport {\n  numberValue1 as numberValue8,\n  numberValue2 as numberValue9\n} from \"./ES6_ExportAllFromMulti\";\n\nvar at1: number = numberValue8;\nvar at2: string = numberValue8; // Error: number ~> string\n\nvar at3: number = numberValue9;\nvar at4: string = numberValue9; // Error: number ~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n// ===================== //\n// == Path Resolution == //\n// ===================== //\n\n// @providesModule\nimport * as DefaultA from \"A\";\nvar a1: number = DefaultA.numberValue1;\nvar a2: string = DefaultA.numberValue1; // Error: number ~> string\n\n// File path\nimport * as DefaultB from \"./B\";\nvar b1: number = DefaultB.numberValue;\nvar b2: string = DefaultB.numberValue; // Error: number ~> string\n\n// C.js exists, but not as a providesModule\nimport DefaultC from \"C\"; // Error: No such module\n\n// @providesModule D exists, but not as a filename\nimport DefaultD from \"./D\"; // Error: No such module\n\n// ================================================ //\n// == CommonJS Clobbering Literal Exports -> ES6 == //\n// ================================================ //\n\nimport { doesntExist1 } from \"CommonJS_Clobbering_Lit\"; // Error: Not an exported binding\n\nimport { numberValue1 } from \"CommonJS_Clobbering_Lit\";\nvar c1: number = numberValue1;\nvar c2: string = numberValue1; // Error: number ~> string\n\nimport { numberValue2 as numVal1 } from \"CommonJS_Clobbering_Lit\";\nvar d1: number = numVal1;\nvar d2: string = numVal1; // Error: number ~> string\n\nimport CJS_Clobb_Lit from \"CommonJS_Clobbering_Lit\";\nvar e1: number = CJS_Clobb_Lit.numberValue3;\nvar e2: string = CJS_Clobb_Lit.numberValue3; // Error: number ~> string\nCJS_Clobb_Lit.doesntExist; // Error: doesntExist isn't a property\n\nimport * as CJS_Clobb_Lit_NS from \"CommonJS_Clobbering_Lit\";\nvar f1: number = CJS_Clobb_Lit_NS.numberValue4;\nvar f2: number = CJS_Clobb_Lit_NS.default.numberValue4;\nCJS_Clobb_Lit_NS.default.default; // Error: No 'default' property on the exported obj\nvar f3: string = CJS_Clobb_Lit_NS.numberValue4; // Error: number ~> string\nvar f4: string = CJS_Clobb_Lit_NS.default.numberValue5; // Error: number ~> string\n\n// ============================================== //\n// == CommonJS Clobbering Class Exports -> ES6 == //\n// ============================================== //\n\nimport { doesntExist2 } from \"CommonJS_Clobbering_Class\"; // Error: Not an exported binding\n\n// The following import should error because class statics are not turned into\n// named exports for now. This avoids complexities with polymorphic static\n// members (where the polymophism is defined on the class itself rather than the\n// method).\nimport { staticNumber1, baseProp, childProp } from \"CommonJS_Clobbering_Class\"; // Error\n\nimport CJS_Clobb_Class from \"CommonJS_Clobbering_Class\";\nnew CJS_Clobb_Class();\nnew CJS_Clobb_Class().doesntExist; // Error: Class has no \\`doesntExist\\` property\nvar h1: number = CJS_Clobb_Class.staticNumber2();\nvar h2: string = CJS_Clobb_Class.staticNumber2(); // Error: number ~> string\nvar h3: number = new CJS_Clobb_Class().instNumber1();\nvar h4: string = new CJS_Clobb_Class().instNumber1(); // Error: number ~> string\n\nimport * as CJS_Clobb_Class_NS from \"CommonJS_Clobbering_Class\";\nnew CJS_Clobb_Class_NS(); // Error: Namespace object isn't constructable\nvar i1: number = CJS_Clobb_Class_NS.staticNumber3(); // Error: Class statics not copied to Namespace object\nvar i2: number = new CJS_Clobb_Class_NS.default().instNumber2();\nvar i3: string = new CJS_Clobb_Class_NS.default().instNumber2(); // Error: number ~> string\n\n// =================================== //\n// == CommonJS Named Exports -> ES6 == //\n// =================================== //\n\nimport { doesntExist3 } from \"CommonJS_Named\"; // Error: Not an exported binding\n\nimport { numberValue2 } from \"CommonJS_Named\";\nvar j1: number = numberValue2;\nvar j2: string = numberValue2; // Error: number ~> string\n\nimport { numberValue3 as numVal3 } from \"CommonJS_Named\";\nvar k1: number = numVal3;\nvar k2: string = numVal3; // Error: number ~> string\n\nimport * as CJS_Named from \"CommonJS_Named\";\nvar l1: number = CJS_Named.numberValue1;\nvar l2: string = CJS_Named.numberValue1; // Error: number ~> string\nCJS_Named.doesntExist; // Error: doesntExist isn't a property\n\nimport * as CJS_Named_NS from \"CommonJS_Named\";\nvar m1: number = CJS_Named_NS.numberValue4;\nvar m2: string = CJS_Named_NS.default.numberValue4; // Error: CommonJS_Named has no default export\nvar m3: string = CJS_Named_NS.numberValue4; // Error: number ~> string\n\n//////////////////////////////\n// == ES6 Default -> ES6 == //\n//////////////////////////////\n\nimport { doesntExist4 } from \"ES6_Default_AnonFunction1\"; // Error: Not an exported binding\n\nimport ES6_Def_AnonFunc1 from \"ES6_Default_AnonFunction1\";\nvar n1: number = ES6_Def_AnonFunc1();\nvar n2: string = ES6_Def_AnonFunc1(); // Error: number ~> string\n\nimport ES6_Def_NamedFunc1 from \"ES6_Default_NamedFunction1\";\nvar o1: number = ES6_Def_NamedFunc1();\nvar o2: string = ES6_Def_NamedFunc1(); // Error: number ~> string\n\nimport ES6_Def_NamedClass1 from \"ES6_Default_NamedClass1\";\nvar q1: number = new ES6_Def_NamedClass1().givesANum();\nvar q2: string = new ES6_Def_NamedClass1().givesANum(); // Error: number ~> string\n\n////////////////////////////\n// == ES6 Named -> ES6 == //\n////////////////////////////\n\nimport doesntExist5 from \"ES6_Named1\"; // Error: Not an exported binding\n\nimport { specifierNumber1 as specifierNumber1_1 } from \"ES6_Named1\";\nvar r1: number = specifierNumber1_1;\nvar r2: string = specifierNumber1_1; // Error: number ~> string\n\nimport { specifierNumber2Renamed } from \"ES6_Named1\";\nvar s1: number = specifierNumber2Renamed;\nvar s2: string = specifierNumber2Renamed; // Error: number ~> string\n\nimport { specifierNumber3 as specifierNumber3Renamed } from \"ES6_Named1\";\nvar t1: number = specifierNumber3Renamed;\nvar t2: string = specifierNumber3Renamed; // Error: number ~> string\n\nimport { groupedSpecifierNumber1, groupedSpecifierNumber2 } from \"ES6_Named1\";\nvar u1: number = groupedSpecifierNumber1;\nvar u2: number = groupedSpecifierNumber2;\nvar u3: string = groupedSpecifierNumber1; // Error: number ~> string\nvar u4: string = groupedSpecifierNumber2; // Error: number ~> string\n\nimport { givesANumber } from \"ES6_Named1\";\nvar v1: number = givesANumber();\nvar v2: string = givesANumber(); // Error: number ~> string\n\nimport { NumberGenerator } from \"ES6_Named1\";\nvar w1: number = new NumberGenerator().givesANumber();\nvar w2: string = new NumberGenerator().givesANumber(); // Error: number ~> string\n\nimport { varDeclNumber1, varDeclNumber2 } from \"ES6_Named1\";\nvar x1: number = varDeclNumber1;\nvar x2: number = varDeclNumber2;\nvar x3: string = varDeclNumber1; // Error: number ~> string\nvar x4: string = varDeclNumber2; // Error: number ~> string\n\nimport { numberValue1 as numberValue4 } from \"ES6_ExportFrom_Intermediary1\";\nvar aa1: number = numberValue4;\nvar aa2: string = numberValue4; // Error: number ~> string\n\nimport { numberValue2_renamed } from \"ES6_ExportFrom_Intermediary1\";\nvar ab1: number = numberValue2_renamed;\nvar ab2: string = numberValue2_renamed; // Error: number ~> string\n\nimport { numberValue1 as numberValue5 } from \"ES6_ExportAllFrom_Intermediary1\";\nvar ac1: number = numberValue5;\nvar ac2: string = numberValue5; // Error: number ~> string\n\n///////////////////////////////////\n// == ES6 Default -> CommonJS == //\n///////////////////////////////////\n\nrequire(\"ES6_Default_AnonFunction2\").doesntExist; // Error: 'doesntExist' isn't an export\n\nvar ES6_Def_AnonFunc2 = require(\"ES6_Default_AnonFunction2\").default;\nvar ad1: number = ES6_Def_AnonFunc2();\nvar ad2: string = ES6_Def_AnonFunc2(); // Error: number ~> string\n\nvar ES6_Def_NamedFunc2 = require(\"ES6_Default_NamedFunction2\").default;\nvar ae1: number = ES6_Def_NamedFunc2();\nvar ae2: string = ES6_Def_NamedFunc2(); // Error: number ~> string\n\nvar ES6_Def_NamedClass2 = require(\"ES6_Default_NamedClass2\").default;\nvar ag1: number = new ES6_Def_NamedClass2().givesANum();\nvar ag2: string = new ES6_Def_NamedClass2().givesANum(); // Error: number ~> string\n\n/////////////////////////////////\n// == ES6 Named -> CommonJS == //\n/////////////////////////////////\n\nvar specifierNumber4 = require(\"ES6_Named2\").specifierNumber4;\nvar ah1: number = specifierNumber4;\nvar ah2: string = specifierNumber4; // Error: number ~> string\n\nvar specifierNumber5Renamed = require(\"ES6_Named2\").specifierNumber5Renamed;\nvar ai1: number = specifierNumber5Renamed;\nvar ai2: string = specifierNumber5Renamed; // Error: number ~> string\n\nvar groupedSpecifierNumber3 = require(\"ES6_Named2\").groupedSpecifierNumber3;\nvar groupedSpecifierNumber4 = require(\"ES6_Named2\").groupedSpecifierNumber4;\nvar aj1: number = groupedSpecifierNumber3;\nvar aj2: number = groupedSpecifierNumber4;\nvar aj3: string = groupedSpecifierNumber3; // Error: number ~> string\nvar aj4: string = groupedSpecifierNumber4; // Error: number ~> string\n\nvar givesANumber2 = require(\"ES6_Named2\").givesANumber2;\nvar ak1: number = givesANumber2();\nvar ak2: string = givesANumber2(); // Error: number ~> string\n\nvar NumberGenerator2 = require(\"ES6_Named2\").NumberGenerator2;\nvar al1: number = new NumberGenerator2().givesANumber();\nvar al2: string = new NumberGenerator2().givesANumber(); // Error: number ~> string\n\nvar varDeclNumber3 = require(\"ES6_Named2\").varDeclNumber3;\nvar varDeclNumber4 = require(\"ES6_Named2\").varDeclNumber4;\nvar am1: number = varDeclNumber3;\nvar am2: number = varDeclNumber4;\nvar am3: string = varDeclNumber3; // Error: number ~> string\nvar am4: string = varDeclNumber4; // Error: number ~> string\n\nvar numberValue6 = require(\"ES6_ExportFrom_Intermediary2\").numberValue1;\nvar ap1: number = numberValue6;\nvar ap2: string = numberValue6; // Error: number ~> string\n\nvar numberValue2_renamed2 = require(\"ES6_ExportFrom_Intermediary2\")\n  .numberValue2_renamed2;\nvar aq1: number = numberValue2_renamed2;\nvar aq2: string = numberValue2_renamed2; // Error: number ~> string\n\nvar numberValue7 = require(\"ES6_ExportAllFrom_Intermediary2\").numberValue2;\nvar ar1: number = numberValue7;\nvar ar2: string = numberValue7; // Error: number ~> string\n\n////////////////////////////////////////////////////////\n// == ES6 Default+Named -> ES6 import Default+Named== //\n////////////////////////////////////////////////////////\n\nimport defaultNum, { str as namedStr } from \"./ES6_DefaultAndNamed\";\n\nvar as1: number = defaultNum;\nvar as2: string = defaultNum; // Error: number ~> string\n\nvar as3: string = namedStr;\nvar as4: number = namedStr; // Error: string ~> number\n\n////////////////////////////////////////\n// == Side-effect only ES6 imports == //\n////////////////////////////////////////\n\nimport \"./SideEffects\";\n\n//////////////////////////////////////////////\n// == Suggest export name on likely typo == //\n//////////////////////////////////////////////\nimport specifierNumber1 from \"ES6_Named1\"; // Error: Did you mean \\`import {specifierNumber1} from ...\\`?\nimport { specifierNumber } from \"ES6_Named1\"; // Error: Did you mean \\`specifierNumber1\\`?\n\n///////////////////////////////////////////////////\n// == Multi \\`export *\\` should combine exports == //\n///////////////////////////////////////////////////\nimport {\n  numberValue1 as numberValue8,\n  numberValue2 as numberValue9\n} from \"./ES6_ExportAllFromMulti\";\n\nvar at1: number = numberValue8;\nvar at2: string = numberValue8; // Error: number ~> string\n\nvar at3: number = numberValue9;\nvar at4: string = numberValue9; // Error: number ~> string\n\n`;\n"
  },
  {
    "path": "tests/flow/declare_export/es6modules.js",
    "content": "/* @flow */\n\n// ===================== //\n// == Path Resolution == //\n// ===================== //\n\n// @providesModule\nimport * as DefaultA from \"A\";\nvar a1: number = DefaultA.numberValue1;\nvar a2: string = DefaultA.numberValue1; // Error: number ~> string\n\n// File path\nimport * as DefaultB from \"./B\";\nvar b1: number = DefaultB.numberValue;\nvar b2: string = DefaultB.numberValue; // Error: number ~> string\n\n// C.js exists, but not as a providesModule\nimport DefaultC from \"C\"; // Error: No such module\n\n// @providesModule D exists, but not as a filename\nimport DefaultD from \"./D\"; // Error: No such module\n\n// ================================================ //\n// == CommonJS Clobbering Literal Exports -> ES6 == //\n// ================================================ //\n\nimport {doesntExist1} from \"CommonJS_Clobbering_Lit\"; // Error: Not an exported binding\n\nimport {numberValue1} from \"CommonJS_Clobbering_Lit\";\nvar c1: number = numberValue1;\nvar c2: string = numberValue1; // Error: number ~> string\n\nimport {numberValue2 as numVal1} from \"CommonJS_Clobbering_Lit\";\nvar d1: number = numVal1;\nvar d2: string = numVal1; // Error: number ~> string\n\nimport CJS_Clobb_Lit from \"CommonJS_Clobbering_Lit\";\nvar e1: number = CJS_Clobb_Lit.numberValue3;\nvar e2: string = CJS_Clobb_Lit.numberValue3; // Error: number ~> string\nCJS_Clobb_Lit.doesntExist; // Error: doesntExist isn't a property\n\nimport * as CJS_Clobb_Lit_NS from \"CommonJS_Clobbering_Lit\";\nvar f1: number = CJS_Clobb_Lit_NS.numberValue4;\nvar f2: number = CJS_Clobb_Lit_NS.default.numberValue4;\nCJS_Clobb_Lit_NS.default.default; // Error: No 'default' property on the exported obj\nvar f3: string = CJS_Clobb_Lit_NS.numberValue4; // Error: number ~> string\nvar f4: string = CJS_Clobb_Lit_NS.default.numberValue5; // Error: number ~> string\n\n// ============================================== //\n// == CommonJS Clobbering Class Exports -> ES6 == //\n// ============================================== //\n\nimport {doesntExist2} from \"CommonJS_Clobbering_Class\"; // Error: Not an exported binding\n\n// The following import should error because class statics are not turned into\n// named exports for now. This avoids complexities with polymorphic static\n// members (where the polymophism is defined on the class itself rather than the\n// method).\nimport {staticNumber1, baseProp, childProp} from \"CommonJS_Clobbering_Class\"; // Error\n\nimport CJS_Clobb_Class from \"CommonJS_Clobbering_Class\";\nnew CJS_Clobb_Class();\nnew CJS_Clobb_Class().doesntExist; // Error: Class has no `doesntExist` property\nvar h1: number = CJS_Clobb_Class.staticNumber2();\nvar h2: string = CJS_Clobb_Class.staticNumber2(); // Error: number ~> string\nvar h3: number = new CJS_Clobb_Class().instNumber1();\nvar h4: string = new CJS_Clobb_Class().instNumber1(); // Error: number ~> string\n\nimport * as CJS_Clobb_Class_NS from \"CommonJS_Clobbering_Class\";\nnew CJS_Clobb_Class_NS(); // Error: Namespace object isn't constructable\nvar i1: number = CJS_Clobb_Class_NS.staticNumber3(); // Error: Class statics not copied to Namespace object\nvar i2: number = new CJS_Clobb_Class_NS.default().instNumber2();\nvar i3: string = new CJS_Clobb_Class_NS.default().instNumber2(); // Error: number ~> string\n\n// =================================== //\n// == CommonJS Named Exports -> ES6 == //\n// =================================== //\n\nimport {doesntExist3} from \"CommonJS_Named\"; // Error: Not an exported binding\n\nimport {numberValue2} from \"CommonJS_Named\";\nvar j1: number = numberValue2;\nvar j2: string = numberValue2; // Error: number ~> string\n\nimport {numberValue3 as numVal3} from \"CommonJS_Named\";\nvar k1: number = numVal3;\nvar k2: string = numVal3; // Error: number ~> string\n\nimport * as CJS_Named from \"CommonJS_Named\";\nvar l1: number = CJS_Named.numberValue1;\nvar l2: string = CJS_Named.numberValue1; // Error: number ~> string\nCJS_Named.doesntExist; // Error: doesntExist isn't a property\n\nimport * as CJS_Named_NS from \"CommonJS_Named\";\nvar m1: number = CJS_Named_NS.numberValue4;\nvar m2: string = CJS_Named_NS.default.numberValue4; // Error: CommonJS_Named has no default export\nvar m3: string = CJS_Named_NS.numberValue4; // Error: number ~> string\n\n//////////////////////////////\n// == ES6 Default -> ES6 == //\n//////////////////////////////\n\nimport {doesntExist4} from \"ES6_Default_AnonFunction1\"; // Error: Not an exported binding\n\nimport ES6_Def_AnonFunc1 from \"ES6_Default_AnonFunction1\";\nvar n1: number = ES6_Def_AnonFunc1();\nvar n2: string = ES6_Def_AnonFunc1(); // Error: number ~> string\n\nimport ES6_Def_NamedFunc1 from \"ES6_Default_NamedFunction1\";\nvar o1: number = ES6_Def_NamedFunc1();\nvar o2: string = ES6_Def_NamedFunc1(); // Error: number ~> string\n\n\n\n\n\nimport ES6_Def_NamedClass1 from \"ES6_Default_NamedClass1\";\nvar q1: number = new ES6_Def_NamedClass1().givesANum();\nvar q2: string = new ES6_Def_NamedClass1().givesANum(); // Error: number ~> string\n\n////////////////////////////\n// == ES6 Named -> ES6 == //\n////////////////////////////\n\nimport doesntExist5 from \"ES6_Named1\"; // Error: Not an exported binding\n\nimport {specifierNumber1 as specifierNumber1_1} from \"ES6_Named1\";\nvar r1: number = specifierNumber1_1;\nvar r2: string = specifierNumber1_1; // Error: number ~> string\n\nimport {specifierNumber2Renamed} from \"ES6_Named1\";\nvar s1: number = specifierNumber2Renamed;\nvar s2: string = specifierNumber2Renamed; // Error: number ~> string\n\nimport {specifierNumber3 as specifierNumber3Renamed} from \"ES6_Named1\";\nvar t1: number = specifierNumber3Renamed;\nvar t2: string = specifierNumber3Renamed; // Error: number ~> string\n\nimport {groupedSpecifierNumber1, groupedSpecifierNumber2} from \"ES6_Named1\";\nvar u1: number = groupedSpecifierNumber1;\nvar u2: number = groupedSpecifierNumber2;\nvar u3: string = groupedSpecifierNumber1; // Error: number ~> string\nvar u4: string = groupedSpecifierNumber2; // Error: number ~> string\n\nimport {givesANumber} from \"ES6_Named1\";\nvar v1: number = givesANumber();\nvar v2: string = givesANumber(); // Error: number ~> string\n\nimport {NumberGenerator} from \"ES6_Named1\";\nvar w1: number = new NumberGenerator().givesANumber();\nvar w2: string = new NumberGenerator().givesANumber(); // Error: number ~> string\n\nimport {varDeclNumber1, varDeclNumber2} from \"ES6_Named1\";\nvar x1: number = varDeclNumber1;\nvar x2: number = varDeclNumber2;\nvar x3: string = varDeclNumber1; // Error: number ~> string\nvar x4: string = varDeclNumber2; // Error: number ~> string\n\n\n\n\n\n\n\n\n\nimport {numberValue1 as numberValue4} from \"ES6_ExportFrom_Intermediary1\";\nvar aa1: number = numberValue4;\nvar aa2: string = numberValue4; // Error: number ~> string\n\nimport {numberValue2_renamed} from \"ES6_ExportFrom_Intermediary1\";\nvar ab1: number = numberValue2_renamed;\nvar ab2: string = numberValue2_renamed; // Error: number ~> string\n\nimport {numberValue1 as numberValue5} from \"ES6_ExportAllFrom_Intermediary1\";\nvar ac1: number = numberValue5;\nvar ac2: string = numberValue5; // Error: number ~> string\n\n///////////////////////////////////\n// == ES6 Default -> CommonJS == //\n///////////////////////////////////\n\nrequire('ES6_Default_AnonFunction2').doesntExist; // Error: 'doesntExist' isn't an export\n\nvar ES6_Def_AnonFunc2 = require(\"ES6_Default_AnonFunction2\").default;\nvar ad1: number = ES6_Def_AnonFunc2();\nvar ad2: string = ES6_Def_AnonFunc2(); // Error: number ~> string\n\nvar ES6_Def_NamedFunc2 = require(\"ES6_Default_NamedFunction2\").default;\nvar ae1: number = ES6_Def_NamedFunc2();\nvar ae2: string = ES6_Def_NamedFunc2(); // Error: number ~> string\n\n\n\n\n\nvar ES6_Def_NamedClass2 = require(\"ES6_Default_NamedClass2\").default;\nvar ag1: number = new ES6_Def_NamedClass2().givesANum();\nvar ag2: string = new ES6_Def_NamedClass2().givesANum(); // Error: number ~> string\n\n/////////////////////////////////\n// == ES6 Named -> CommonJS == //\n/////////////////////////////////\n\nvar specifierNumber4 = require(\"ES6_Named2\").specifierNumber4;\nvar ah1: number = specifierNumber4;\nvar ah2: string = specifierNumber4; // Error: number ~> string\n\nvar specifierNumber5Renamed = require(\"ES6_Named2\").specifierNumber5Renamed;\nvar ai1: number = specifierNumber5Renamed;\nvar ai2: string = specifierNumber5Renamed; // Error: number ~> string\n\nvar groupedSpecifierNumber3 = require(\"ES6_Named2\").groupedSpecifierNumber3;\nvar groupedSpecifierNumber4 = require(\"ES6_Named2\").groupedSpecifierNumber4;\nvar aj1: number = groupedSpecifierNumber3;\nvar aj2: number = groupedSpecifierNumber4;\nvar aj3: string = groupedSpecifierNumber3; // Error: number ~> string\nvar aj4: string = groupedSpecifierNumber4; // Error: number ~> string\n\nvar givesANumber2 = require(\"ES6_Named2\").givesANumber2;\nvar ak1: number = givesANumber2();\nvar ak2: string = givesANumber2(); // Error: number ~> string\n\nvar NumberGenerator2 = require(\"ES6_Named2\").NumberGenerator2;\nvar al1: number = new NumberGenerator2().givesANumber();\nvar al2: string = new NumberGenerator2().givesANumber(); // Error: number ~> string\n\nvar varDeclNumber3 = require(\"ES6_Named2\").varDeclNumber3;\nvar varDeclNumber4 = require(\"ES6_Named2\").varDeclNumber4;\nvar am1: number = varDeclNumber3;\nvar am2: number = varDeclNumber4;\nvar am3: string = varDeclNumber3; // Error: number ~> string\nvar am4: string = varDeclNumber4; // Error: number ~> string\n\n\n\n\n\n\n\n\n\nvar numberValue6 = require(\"ES6_ExportFrom_Intermediary2\").numberValue1;\nvar ap1: number = numberValue6;\nvar ap2: string = numberValue6; // Error: number ~> string\n\nvar numberValue2_renamed2 = require(\"ES6_ExportFrom_Intermediary2\").numberValue2_renamed2;\nvar aq1: number = numberValue2_renamed2;\nvar aq2: string = numberValue2_renamed2; // Error: number ~> string\n\nvar numberValue7 = require(\"ES6_ExportAllFrom_Intermediary2\").numberValue2;\nvar ar1: number = numberValue7;\nvar ar2: string = numberValue7; // Error: number ~> string\n\n////////////////////////////////////////////////////////\n// == ES6 Default+Named -> ES6 import Default+Named== //\n////////////////////////////////////////////////////////\n\nimport defaultNum, {str as namedStr} from \"./ES6_DefaultAndNamed\";\n\nvar as1: number = defaultNum;\nvar as2: string = defaultNum; // Error: number ~> string\n\nvar as3: string = namedStr;\nvar as4: number = namedStr; // Error: string ~> number\n\n////////////////////////////////////////\n// == Side-effect only ES6 imports == //\n////////////////////////////////////////\n\nimport \"./SideEffects\";\n\n//////////////////////////////////////////////\n// == Suggest export name on likely typo == //\n//////////////////////////////////////////////\nimport specifierNumber1 from \"ES6_Named1\"; // Error: Did you mean `import {specifierNumber1} from ...`?\nimport {specifierNumber} from \"ES6_Named1\"; // Error: Did you mean `specifierNumber1`?\n\n///////////////////////////////////////////////////\n// == Multi `export *` should combine exports == //\n///////////////////////////////////////////////////\nimport {\n  numberValue1 as numberValue8,\n  numberValue2 as numberValue9\n} from \"./ES6_ExportAllFromMulti\";\n\nvar at1: number = numberValue8;\nvar at2: string = numberValue8; // Error: number ~> string\n\nvar at3: number = numberValue9;\nvar at4: string = numberValue9; // Error: number ~> string\n"
  },
  {
    "path": "tests/flow/declare_export/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow/declare_fun/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\ndeclare function foo(x: number): string;\ndeclare function foo(x: string): number;\ndeclare function foo<X>(x: X): X;\n\n(foo(0): string); // OK\n(foo(\"hello\"): number); // OK\n(foo(false): void); // error, boolean ~/~ undefined\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare function foo(x: number): string;\ndeclare function foo(x: string): number;\ndeclare function foo<X>(x: X): X;\n\n(foo(0): string); // OK\n(foo(\"hello\"): number); // OK\n(foo(false): void); // error, boolean ~/~ undefined\n\n`;\n"
  },
  {
    "path": "tests/flow/declare_fun/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/declare_fun/test.js",
    "content": "declare function foo(x: number): string;\ndeclare function foo(x: string): number;\ndeclare function foo<X>(x: X): X;\n\n(foo(0): string); // OK\n(foo(\"hello\"): number); // OK\n(foo(false): void); // error, boolean ~/~ undefined\n"
  },
  {
    "path": "tests/flow/declare_module_exports/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`main.js 1`] = `\n// @flow\n\nimport declare_module_exports from \"declare_module_exports\";\n(declare_module_exports: number);\n(declare_module_exports: string); // Error: number ~> string\n\n// Error: Has no named export \"str\"!\nimport {str} from \"declare_m_e_with_other_value_declares\";\n\nimport type {str2} from \"declare_m_e_with_other_type_declares\";\n(\"asdf\": str2);\n(42: str2); // Error: number ~> string\n\n/**\n * \\`declare var exports\\` is deprecated, so we have a grace period where both\n * syntaxes will work.\n */\n\nimport DEPRECATED__declare_var_exports from \"DEPRECATED__declare_var_exports\";\n(DEPRECATED__declare_var_exports: number);\n(DEPRECATED__declare_var_exports: string); // Error: number ~> string\n\nimport declare_m_e_with_declare_var_e from \"declare_m_e_with_declare_var_e\";\n(declare_m_e_with_declare_var_e: number);\n(declare_m_e_with_declare_var_e: string); // Error: number ~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport declare_module_exports from \"declare_module_exports\";\n(declare_module_exports: number);\n(declare_module_exports: string); // Error: number ~> string\n\n// Error: Has no named export \"str\"!\nimport { str } from \"declare_m_e_with_other_value_declares\";\n\nimport type { str2 } from \"declare_m_e_with_other_type_declares\";\n(\"asdf\": str2);\n(42: str2); // Error: number ~> string\n\n/**\n * \\`declare var exports\\` is deprecated, so we have a grace period where both\n * syntaxes will work.\n */\n\nimport DEPRECATED__declare_var_exports from \"DEPRECATED__declare_var_exports\";\n(DEPRECATED__declare_var_exports: number);\n(DEPRECATED__declare_var_exports: string); // Error: number ~> string\n\nimport declare_m_e_with_declare_var_e from \"declare_m_e_with_declare_var_e\";\n(declare_m_e_with_declare_var_e: number);\n(declare_m_e_with_declare_var_e: string); // Error: number ~> string\n\n`;\n"
  },
  {
    "path": "tests/flow/declare_module_exports/flow-typed/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`libs.js 1`] = `\ndeclare module \"declare_module_exports\" {\n  declare module.exports: number;\n}\n\ndeclare module \"declare_m_e_with_other_value_declares\" {\n  declare module.exports: number;\n  declare var str: string;\n}\n\ndeclare module \"declare_m_e_with_other_type_declares\" {\n  declare module.exports: number;\n  declare type str2 = string;\n}\n\n/**\n * \\`declare var exports\\` is deprecated, so we have a grace period where both\n * syntaxes will work.\n */\n\ndeclare module \"DEPRECATED__declare_var_exports\" {\n  declare var exports: number;\n}\n\n/**\n * Ensure that, if both are present, \\`declare module.exports\\` wins\n */\ndeclare module \"declare_m_e_with_declare_var_e\" {\n  declare module.exports: number;\n  declare var exports: string;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare module \"declare_module_exports\" {\n  declare module.exports: number;\n}\n\ndeclare module \"declare_m_e_with_other_value_declares\" {\n  declare module.exports: number;\n  declare var str: string;\n}\n\ndeclare module \"declare_m_e_with_other_type_declares\" {\n  declare module.exports: number;\n  declare type str2 = string;\n}\n\n/**\n * \\`declare var exports\\` is deprecated, so we have a grace period where both\n * syntaxes will work.\n */\n\ndeclare module \"DEPRECATED__declare_var_exports\" {\n  declare var exports: number;\n}\n\n/**\n * Ensure that, if both are present, \\`declare module.exports\\` wins\n */\ndeclare module \"declare_m_e_with_declare_var_e\" {\n  declare module.exports: number;\n  declare var exports: string;\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/declare_module_exports/flow-typed/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/declare_module_exports/flow-typed/libs.js",
    "content": "declare module \"declare_module_exports\" {\n  declare module.exports: number;\n}\n\ndeclare module \"declare_m_e_with_other_value_declares\" {\n  declare module.exports: number;\n  declare var str: string;\n}\n\ndeclare module \"declare_m_e_with_other_type_declares\" {\n  declare module.exports: number;\n  declare type str2 = string;\n}\n\n/**\n * `declare var exports` is deprecated, so we have a grace period where both\n * syntaxes will work.\n */\n\ndeclare module \"DEPRECATED__declare_var_exports\" {\n  declare var exports: number;\n}\n\n/**\n * Ensure that, if both are present, `declare module.exports` wins\n */\ndeclare module \"declare_m_e_with_declare_var_e\" {\n  declare module.exports: number;\n  declare var exports: string;\n}\n"
  },
  {
    "path": "tests/flow/declare_module_exports/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/declare_module_exports/main.js",
    "content": "// @flow\n\nimport declare_module_exports from \"declare_module_exports\";\n(declare_module_exports: number);\n(declare_module_exports: string); // Error: number ~> string\n\n// Error: Has no named export \"str\"!\nimport {str} from \"declare_m_e_with_other_value_declares\";\n\nimport type {str2} from \"declare_m_e_with_other_type_declares\";\n(\"asdf\": str2);\n(42: str2); // Error: number ~> string\n\n/**\n * `declare var exports` is deprecated, so we have a grace period where both\n * syntaxes will work.\n */\n\nimport DEPRECATED__declare_var_exports from \"DEPRECATED__declare_var_exports\";\n(DEPRECATED__declare_var_exports: number);\n(DEPRECATED__declare_var_exports: string); // Error: number ~> string\n\nimport declare_m_e_with_declare_var_e from \"declare_m_e_with_declare_var_e\";\n(declare_m_e_with_declare_var_e: number);\n(declare_m_e_with_declare_var_e: string); // Error: number ~> string\n"
  },
  {
    "path": "tests/flow/declare_type/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`import_declare_type.js 1`] = `\n/**\n * @flow\n */\n\n////////////////////////////////////////////////////////////\n// == Import Declared Type Alias From Declared Module == //\n//////////////////////////////////////////////////////////\nimport type {baz} from \"ModuleAliasFoo\";\nimport {foo} from \"ModuleAliasFoo\";\nvar k1: baz = 42;\nvar k2: baz = \"shab\"; // Error: string to int\nvar k3: toz = foo(k1); // works\n\nimport type {toz} from \"ModuleAliasFoo\";\nvar k4: toz = foo(k1); // works\n\n//////////////////////////////////////////////////////////\n// == Declared Module with exports prop (issue 880) == //\n////////////////////////////////////////////////////////\n\nimport blah from 'foo';\nimport type { Foo, Bar, Id } from 'foo';\n\nblah(0, 0);\n\n({toz:3} : Foo); // error : {toz : number} ~> string\n\n(3 : Bar); // error : number ~> A\n\n(\"lol\" : Id<number>); // error : string ~> number\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\n////////////////////////////////////////////////////////////\n// == Import Declared Type Alias From Declared Module == //\n//////////////////////////////////////////////////////////\nimport type { baz } from \"ModuleAliasFoo\";\nimport { foo } from \"ModuleAliasFoo\";\nvar k1: baz = 42;\nvar k2: baz = \"shab\"; // Error: string to int\nvar k3: toz = foo(k1); // works\n\nimport type { toz } from \"ModuleAliasFoo\";\nvar k4: toz = foo(k1); // works\n\n//////////////////////////////////////////////////////////\n// == Declared Module with exports prop (issue 880) == //\n////////////////////////////////////////////////////////\n\nimport blah from \"foo\";\nimport type { Foo, Bar, Id } from \"foo\";\n\nblah(0, 0);\n\n({ toz: 3 }: Foo); // error : {toz : number} ~> string\n\n(3: Bar); // error : number ~> A\n\n(\"lol\": Id<number>); // error : string ~> number\n\n`;\n"
  },
  {
    "path": "tests/flow/declare_type/import_declare_type.js",
    "content": "/**\n * @flow\n */\n\n////////////////////////////////////////////////////////////\n// == Import Declared Type Alias From Declared Module == //\n//////////////////////////////////////////////////////////\nimport type {baz} from \"ModuleAliasFoo\";\nimport {foo} from \"ModuleAliasFoo\";\nvar k1: baz = 42;\nvar k2: baz = \"shab\"; // Error: string to int\nvar k3: toz = foo(k1); // works\n\nimport type {toz} from \"ModuleAliasFoo\";\nvar k4: toz = foo(k1); // works\n\n//////////////////////////////////////////////////////////\n// == Declared Module with exports prop (issue 880) == //\n////////////////////////////////////////////////////////\n\nimport blah from 'foo';\nimport type { Foo, Bar, Id } from 'foo';\n\nblah(0, 0);\n\n({toz:3} : Foo); // error : {toz : number} ~> string\n\n(3 : Bar); // error : number ~> A\n\n(\"lol\" : Id<number>); // error : string ~> number\n"
  },
  {
    "path": "tests/flow/declare_type/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/declare_type/lib/DeclareModule_TypeAlias.js",
    "content": "/**\n * @flow\n */\n\ndeclare module ModuleAliasFoo {\n    declare type baz = number;\n    declare type toz = string;\n    declare function foo(bar : baz) : toz;\n}\n"
  },
  {
    "path": "tests/flow/declare_type/lib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`DeclareModule_TypeAlias.js 1`] = `\n/**\n * @flow\n */\n\ndeclare module ModuleAliasFoo {\n    declare type baz = number;\n    declare type toz = string;\n    declare function foo(bar : baz) : toz;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\ndeclare module ModuleAliasFoo {\n  declare type baz = number;\n  declare type toz = string;\n  declare function foo(bar: baz): toz;\n}\n\n`;\n\nexports[`declare_type_exports.js 1`] = `\n/* @flow */\n\ndeclare module 'foo' {\n    declare class A {\n        toz : number\n    }\n\n    declare var n : string;\n\n    declare type Foo = typeof n;\n    declare type Bar = A;\n    declare type Id<T> = T;\n\n    declare var exports : {\n        (a : number, b : number) : number\n    };\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\ndeclare module \"foo\" {\n  declare class A {\n    toz: number\n  }\n\n  declare var n: string;\n\n  declare type Foo = typeof n;\n  declare type Bar = A;\n  declare type Id<T> = T;\n\n  declare var exports: {\n    (a: number, b: number): number\n  };\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/declare_type/lib/declare_type_exports.js",
    "content": "/* @flow */\n\ndeclare module 'foo' {\n    declare class A {\n        toz : number\n    }\n\n    declare var n : string;\n\n    declare type Foo = typeof n;\n    declare type Bar = A;\n    declare type Id<T> = T;\n\n    declare var exports : {\n        (a : number, b : number) : number\n    };\n}\n"
  },
  {
    "path": "tests/flow/declare_type/lib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/def_site_variance/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nclass Variance<+Out,-In> {\n  foo(x: Out): Out { return x; }\n  bar(y: In): In { return y; }\n}\n\nclass A { }\nclass B extends A { }\n\nfunction subtyping(\n  v1: Variance<A,B>,\n  v2: Variance<B,A>\n) {\n  (v1: Variance<B,A>); // error on both targs (A ~/~> B)\n  (v2: Variance<A,B>); // OK for both targs (B ~> A)\n}\n\nclass PropVariance<+Out,-In> {\n  inv1: Out; // error\n  inv2: In; // error\n  -co1: Out; // error\n  -co2: In; // ok\n  +con1: Out; // ok\n  +con2: In; // error\n\n  inv_dict1: {[k:string]: Out}; // error\n  inv_dict2: {[k:string]: In}; // error\n  co_dict1: {+[k:string]: Out}; // ok\n  co_dict2: {+[k:string]: In}; // error\n  con_dict1: {-[k:string]: Out}; // error\n  con_dict2: {-[k:string]: In}; // ok\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass Variance<+Out, -In> {\n  foo(x: Out): Out {\n    return x;\n  }\n  bar(y: In): In {\n    return y;\n  }\n}\n\nclass A {}\nclass B extends A {}\n\nfunction subtyping(v1: Variance<A, B>, v2: Variance<B, A>) {\n  (v1: Variance<B, A>); // error on both targs (A ~/~> B)\n  (v2: Variance<A, B>); // OK for both targs (B ~> A)\n}\n\nclass PropVariance<+Out, -In> {\n  inv1: Out; // error\n  inv2: In; // error\n  -co1: Out; // error\n  -co2: In; // ok\n  +con1: Out; // ok\n  +con2: In; // error\n\n  inv_dict1: { [k: string]: Out }; // error\n  inv_dict2: { [k: string]: In }; // error\n  co_dict1: { +[k: string]: Out }; // ok\n  co_dict2: { +[k: string]: In }; // error\n  con_dict1: { -[k: string]: Out }; // error\n  con_dict2: { -[k: string]: In }; // ok\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/def_site_variance/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow/def_site_variance/test.js",
    "content": "class Variance<+Out,-In> {\n  foo(x: Out): Out { return x; }\n  bar(y: In): In { return y; }\n}\n\nclass A { }\nclass B extends A { }\n\nfunction subtyping(\n  v1: Variance<A,B>,\n  v2: Variance<B,A>\n) {\n  (v1: Variance<B,A>); // error on both targs (A ~/~> B)\n  (v2: Variance<A,B>); // OK for both targs (B ~> A)\n}\n\nclass PropVariance<+Out,-In> {\n  inv1: Out; // error\n  inv2: In; // error\n  -co1: Out; // error\n  -co2: In; // ok\n  +con1: Out; // ok\n  +con2: In; // error\n\n  inv_dict1: {[k:string]: Out}; // error\n  inv_dict2: {[k:string]: In}; // error\n  co_dict1: {+[k:string]: Out}; // ok\n  co_dict2: {+[k:string]: In}; // error\n  con_dict1: {-[k:string]: Out}; // error\n  con_dict2: {-[k:string]: In}; // ok\n}\n"
  },
  {
    "path": "tests/flow/demo/1/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`f.js 1`] = `\n/* demo */\n\nfunction f(x) { return 42/x; }\n\nvar x = null;\n//...\n\nf(x);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* demo */\n\nfunction f(x) {\n  return 42 / x;\n}\n\nvar x = null;\n//...\n\nf(x);\n\n`;\n"
  },
  {
    "path": "tests/flow/demo/1/f.js",
    "content": "/* demo */\n\nfunction f(x) { return 42/x; }\n\nvar x = null;\n//...\n\nf(x);\n"
  },
  {
    "path": "tests/flow/demo/1/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/demo/2/A.js",
    "content": "/* @providesModule Demo */\n\nclass A {\n  x: number; // instance field declaration\n  constructor(x) { this.x = x; }\n\n  getX() { return this.x; }\n\n  onLoad(callback) {\n    return callback(this.getX());\n  }\n}\n\nfunction callback(x: string) { return x.length; }\n\nvar a = new A(42);\na.onLoad(callback);\n\nmodule.exports = A;\n"
  },
  {
    "path": "tests/flow/demo/2/B.js",
    "content": "var A = require('Demo');\n\nvar z = new A(\"42\").getX();\n"
  },
  {
    "path": "tests/flow/demo/2/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\n/* @providesModule Demo */\n\nclass A {\n  x: number; // instance field declaration\n  constructor(x) { this.x = x; }\n\n  getX() { return this.x; }\n\n  onLoad(callback) {\n    return callback(this.getX());\n  }\n}\n\nfunction callback(x: string) { return x.length; }\n\nvar a = new A(42);\na.onLoad(callback);\n\nmodule.exports = A;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule Demo */\n\nclass A {\n  x: number; // instance field declaration\n  constructor(x) {\n    this.x = x;\n  }\n\n  getX() {\n    return this.x;\n  }\n\n  onLoad(callback) {\n    return callback(this.getX());\n  }\n}\n\nfunction callback(x: string) {\n  return x.length;\n}\n\nvar a = new A(42);\na.onLoad(callback);\n\nmodule.exports = A;\n\n`;\n\nexports[`B.js 1`] = `\nvar A = require('Demo');\n\nvar z = new A(\"42\").getX();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar A = require(\"Demo\");\n\nvar z = new A(\"42\").getX();\n\n`;\n"
  },
  {
    "path": "tests/flow/demo/2/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/deps/A.js",
    "content": "require('./C');\n"
  },
  {
    "path": "tests/flow/deps/B.js",
    "content": "require('./C');\n"
  },
  {
    "path": "tests/flow/deps/C.js",
    "content": "require('./D');\nrequire('./E');\nrequire('./F');\nrequire('./G');\n"
  },
  {
    "path": "tests/flow/deps/D.js",
    "content": "require('./I');\n"
  },
  {
    "path": "tests/flow/deps/E.js",
    "content": "require('./I');\n"
  },
  {
    "path": "tests/flow/deps/F.js",
    "content": "// empty\n"
  },
  {
    "path": "tests/flow/deps/G.js",
    "content": "require('./H');\n"
  },
  {
    "path": "tests/flow/deps/H.js",
    "content": "// empty\n"
  },
  {
    "path": "tests/flow/deps/I.js",
    "content": "require('./A');\n"
  },
  {
    "path": "tests/flow/deps/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\nrequire('./C');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nrequire(\"./C\");\n\n`;\n\nexports[`B.js 1`] = `\nrequire('./C');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nrequire(\"./C\");\n\n`;\n\nexports[`C.js 1`] = `\nrequire('./D');\nrequire('./E');\nrequire('./F');\nrequire('./G');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nrequire(\"./D\");\nrequire(\"./E\");\nrequire(\"./F\");\nrequire(\"./G\");\n\n`;\n\nexports[`D.js 1`] = `\nrequire('./I');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nrequire(\"./I\");\n\n`;\n\nexports[`E.js 1`] = `\nrequire('./I');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nrequire(\"./I\");\n\n`;\n\nexports[`F.js 1`] = `\n// empty\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// empty\n\n`;\n\nexports[`G.js 1`] = `\nrequire('./H');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nrequire(\"./H\");\n\n`;\n\nexports[`H.js 1`] = `\n// empty\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// empty\n\n`;\n\nexports[`I.js 1`] = `\nrequire('./A');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nrequire(\"./A\");\n\n`;\n"
  },
  {
    "path": "tests/flow/deps/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/destructuring/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`array_rest.js 1`] = `\nlet xs = [0, \"\", true];\nlet [a, ...ys] = xs;\nlet [b, ...zs] = ys;\nlet c = zs[0]; // retain tuple info\nlet d = zs[1]; // run off the end\n\n(a: void); // error: number ~> void\n(b: void); // error: string ~> void\n(c: void); // error: boolean ~> void\n(d: void); // error: number|string|boolean ~> void\n\nlet [...e] = 0;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nlet xs = [0, \"\", true];\nlet [a, ...ys] = xs;\nlet [b, ...zs] = ys;\nlet c = zs[0]; // retain tuple info\nlet d = zs[1]; // run off the end\n\n(a: void); // error: number ~> void\n(b: void); // error: string ~> void\n(c: void); // error: boolean ~> void\n(d: void); // error: number|string|boolean ~> void\n\nlet [...e] = 0;\n\n`;\n\nexports[`computed.js 1`] = `\nvar { [\"key\"]: val1 } = { key: \"val\" };\n(val1: void); // error: string ~> void\n\nvar key: string = \"key\";\nvar { [key]: val2 } = { key: \"val\" };\n(val2: void); // ok (gasp!) by existing StrT -> ElemT rule\n\nvar { [\"key\"]: val3, ...spread } = { key: \"val\" };\n(spread.key: void); // error (gasp!) in general we don't know if a computed prop should be excluded from spread\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar { [\"key\"]: val1 } = { key: \"val\" };\n(val1: void); // error: string ~> void\n\nvar key: string = \"key\";\nvar { [key]: val2 } = { key: \"val\" };\n(val2: void); // ok (gasp!) by existing StrT -> ElemT rule\n\nvar { [\"key\"]: val3, ...spread } = { key: \"val\" };\n(spread.key: void); // error (gasp!) in general we don't know if a computed prop should be excluded from spread\n\n`;\n\nexports[`defaults.js 1`] = `\n/* @flow */\n\nfunction obj_prop_fun({p:{q=0}={q:true}}={p:{q:\"\"}}) {\n  // errors:\n  // * number  ~> void, from default on _.p.q\n  // * boolean ~> void, from default on _.p\n  // * string  ~> void, from default on _\n  // * null    ~> void, from call below\n  (q:void);\n}\nobj_prop_fun(); // ok\nobj_prop_fun({}); // ok\nobj_prop_fun({p:{}}); // ok\nobj_prop_fun({p:{q:null}}); // ok, provides add'l lower bound\n\nfunction obj_prop_var(o={p:{q:\"\"}}) {\n  var {p:{q=0}={q:true}} = o;\n  // errors:\n  // * number  ~> void, from default on o.p.q\n  // * boolean ~> void, from default on o.p\n  // * string  ~> void, from default on o\n  // * null    ~> void, from call below\n  (q:void);\n}\nobj_prop_var(); // ok\nobj_prop_var({}); // ok\nobj_prop_var({p:{}}); // ok\nobj_prop_var({p:{q:null}}); // ok, provides add'l lower bound\n\nfunction obj_rest({p:{q,...o}={q:0,r:0}}={p:{q:0,r:\"\"}}) {\n  // errors:\n  // * number  ~> void, from default on _.p\n  // * string  ~> void, from default on _\n  // * null    ~> void, from call below\n  (o.r:void);\n}\nobj_rest(); // ok\nobj_rest({}); // ok\nobj_rest({p:{}}); // ok\nobj_rest({p:{q:0,r:null}});\n\nfunction obj_prop_annot({\n  p = true // error: boolean ~> string\n}: {\n  p: string\n} = {\n  p: 0 // error: number ~> string\n}) {\n  (p:void); // error: string ~> void\n}\n\nvar {\n  p = true // error: boolean ~> string\n}: {\n  p: string\n} = {\n  p: 0 // error: number ~> string\n};\n(p:void); // error: string ~> void\n\nfunction obj_prop_err({x:{y}}=null) {} // error: property \\`x\\` cannot be accessed on null\nfunction obj_rest_err({...o}=0) {} // error: expected object instead of number\nfunction arr_elem_err([x]=null) {} // error: element 0 cannot be accessed on null\nfunction arr_rest_err([...a]=null) {} // error: expected array instead of null\n\nfunction gen<T>(x:T,{p=x}:{p:T}):T {\n  return p;\n}\n\n// Default values in destructuring unwrap optional types\nobj_prop_fun(({} : {p?:{q?:null}})); // ok\nobj_prop_var(({} : {p?:{q?:null}})); // ok\n\n// union-like upper bounds preserved through destructuring\nfunction obj_prop_opt({p}:{p?:string}={p:0}) {}\nfunction obj_prop_maybe({p}:{p:?string}={p:0}) {}\nfunction obj_prop_union({p}:{p:number|string}={p:true}) {}\n\n// TODO: union-of-objects upper bounds preserved through destructuring\nfunction obj_prop_union2({p}:{p:number}|{p:string}={p:true}) {}\n\nfunction default_expr_scope({a, b = a}) {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction obj_prop_fun({ p: { q = 0 } = { q: true } } = { p: { q: \"\" } }) {\n  // errors:\n  // * number  ~> void, from default on _.p.q\n  // * boolean ~> void, from default on _.p\n  // * string  ~> void, from default on _\n  // * null    ~> void, from call below\n  (q: void);\n}\nobj_prop_fun(); // ok\nobj_prop_fun({}); // ok\nobj_prop_fun({ p: {} }); // ok\nobj_prop_fun({ p: { q: null } }); // ok, provides add'l lower bound\n\nfunction obj_prop_var(o = { p: { q: \"\" } }) {\n  var { p: { q = 0 } = { q: true } } = o;\n  // errors:\n  // * number  ~> void, from default on o.p.q\n  // * boolean ~> void, from default on o.p\n  // * string  ~> void, from default on o\n  // * null    ~> void, from call below\n  (q: void);\n}\nobj_prop_var(); // ok\nobj_prop_var({}); // ok\nobj_prop_var({ p: {} }); // ok\nobj_prop_var({ p: { q: null } }); // ok, provides add'l lower bound\n\nfunction obj_rest(\n  { p: { q, ...o } = { q: 0, r: 0 } } = { p: { q: 0, r: \"\" } }\n) {\n  // errors:\n  // * number  ~> void, from default on _.p\n  // * string  ~> void, from default on _\n  // * null    ~> void, from call below\n  (o.r: void);\n}\nobj_rest(); // ok\nobj_rest({}); // ok\nobj_rest({ p: {} }); // ok\nobj_rest({ p: { q: 0, r: null } });\n\nfunction obj_prop_annot(\n  {\n    p = true // error: boolean ~> string\n  }: {\n    p: string\n  } = {\n    p: 0 // error: number ~> string\n  }\n) {\n  (p: void); // error: string ~> void\n}\n\nvar {\n  p = true // error: boolean ~> string\n}: {\n  p: string\n} = {\n  p: 0 // error: number ~> string\n};\n(p: void); // error: string ~> void\n\nfunction obj_prop_err({ x: { y } } = null) {} // error: property \\`x\\` cannot be accessed on null\nfunction obj_rest_err({ ...o } = 0) {} // error: expected object instead of number\nfunction arr_elem_err([x] = null) {} // error: element 0 cannot be accessed on null\nfunction arr_rest_err([...a] = null) {} // error: expected array instead of null\n\nfunction gen<T>(x: T, { p = x }: { p: T }): T {\n  return p;\n}\n\n// Default values in destructuring unwrap optional types\nobj_prop_fun(({}: { p?: { q?: null } })); // ok\nobj_prop_var(({}: { p?: { q?: null } })); // ok\n\n// union-like upper bounds preserved through destructuring\nfunction obj_prop_opt({ p }: { p?: string } = { p: 0 }) {}\nfunction obj_prop_maybe({ p }: { p: ?string } = { p: 0 }) {}\nfunction obj_prop_union({ p }: { p: number | string } = { p: true }) {}\n\n// TODO: union-of-objects upper bounds preserved through destructuring\nfunction obj_prop_union2({ p }: { p: number } | { p: string } = { p: true }) {}\n\nfunction default_expr_scope({ a, b = a }) {}\n\n`;\n\nexports[`destructuring.js 1`] = `\ndeclare var a:string;\ndeclare var b:string;\ndeclare var c:string;\n[{a1:a, b},c] = [{a1:0, b:1},2];\n\nvar {m} = {m:0};\n({m} = {m:m});\n\nvar obj;\n({n: obj.x} = {n:3});\n[obj.x] = ['foo'];\n\nfunction foo({p, z:[r]}) {\n    a = p;\n    b = z;\n    c = r;\n}\nfoo({p:0, z:[1,2]});\n\n[a,,b,...c] = [0,1,true,3];\n\nfunction bar({x, ...z}) {\n    var o:{x: string; y: number;} = z;\n}\nbar({x:\"\",y:0});\n\nvar spread = {y:\"\"};\nvar extend: {x:number; y:string; z: boolean} = {x:0, ...spread};\n\nfunction qux(_: {a:number}) { }\nqux({a:\"\"});\nfunction corge({b}: {b:string}) { }\ncorge({b:0});\n\nvar {n}:{n: number} = {n: \"\"}\n\nfunction test() {\n  var {foo} = {bar: 123}; // error on foo\n  var {bar, baz} = {bar: 123} // error on baz\n}\n\nfunction test() {\n  var x = {foo: 'abc', bar: 123};\n  var {foo, ...rest} = x;\n  (x.baz: string); // error, baz doesn't exist\n  (rest.baz: string); // no error, rest is unsealed\n}\n\nmodule.exports = corge;\n\nclass Base {\n  baseprop1: number;\n  baseprop2: number;\n}\n\nclass Child extends Base {\n  childprop1: number;\n  childprop2: number;\n}\n\nvar {baseprop1, childprop1, ...others} = new Child();\n\nvar bp1: number = baseprop1;\nvar bp1_err: string = baseprop1; // Error: number ~> string\nvar bp2: number = others.baseprop2;\nvar bp2_err: string = others.baseprop2; // Error: number ~> string\n\nvar cp1: number = childprop1;\nvar cp1_err: string = childprop1; // Error: number ~> string\nvar cp2: number = others.childprop1;\nvar cp2_err: string = others.childprop2; // Error: number ~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare var a: string;\ndeclare var b: string;\ndeclare var c: string;\n[{ a1: a, b }, c] = [{ a1: 0, b: 1 }, 2];\n\nvar { m } = { m: 0 };\n({ m } = { m: m });\n\nvar obj;\n({ n: obj.x } = { n: 3 });\n[obj.x] = [\"foo\"];\n\nfunction foo({ p, z: [r] }) {\n  a = p;\n  b = z;\n  c = r;\n}\nfoo({ p: 0, z: [1, 2] });\n\n[a, , b, ...c] = [0, 1, true, 3];\n\nfunction bar({ x, ...z }) {\n  var o: { x: string, y: number } = z;\n}\nbar({ x: \"\", y: 0 });\n\nvar spread = { y: \"\" };\nvar extend: { x: number, y: string, z: boolean } = { x: 0, ...spread };\n\nfunction qux(_: { a: number }) {}\nqux({ a: \"\" });\nfunction corge({ b }: { b: string }) {}\ncorge({ b: 0 });\n\nvar { n }: { n: number } = { n: \"\" };\n\nfunction test() {\n  var { foo } = { bar: 123 }; // error on foo\n  var { bar, baz } = { bar: 123 }; // error on baz\n}\n\nfunction test() {\n  var x = { foo: \"abc\", bar: 123 };\n  var { foo, ...rest } = x;\n  (x.baz: string); // error, baz doesn't exist\n  (rest.baz: string); // no error, rest is unsealed\n}\n\nmodule.exports = corge;\n\nclass Base {\n  baseprop1: number;\n  baseprop2: number;\n}\n\nclass Child extends Base {\n  childprop1: number;\n  childprop2: number;\n}\n\nvar { baseprop1, childprop1, ...others } = new Child();\n\nvar bp1: number = baseprop1;\nvar bp1_err: string = baseprop1; // Error: number ~> string\nvar bp2: number = others.baseprop2;\nvar bp2_err: string = others.baseprop2; // Error: number ~> string\n\nvar cp1: number = childprop1;\nvar cp1_err: string = childprop1; // Error: number ~> string\nvar cp2: number = others.childprop1;\nvar cp2_err: string = others.childprop2; // Error: number ~> string\n\n`;\n\nexports[`eager.js 1`] = `\nvar x;\n({x} = null); // error, property \\`x\\` can not be accessed on \\`null\\`\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x;\n({ x } = null); // error, property \\`x\\` can not be accessed on \\`null\\`\n\n`;\n\nexports[`poly.js 1`] = `\n// @flow\n\nfunction obj_pattern<X>({ prop } : { prop: X }) {} // prop: X\ntype Prop<X> = { prop: X };\nfunction obj_pattern2<X>({ prop } : Prop<X>) {} // prop: X\n\nfunction arr_pattern<X>([ elem ] : X[]) {} // elem: X\ntype Elem<X> = X[];\nfunction arr_pattern2<X>([ elem ] : Elem<X>) {} // elem: X\n\nfunction tup_pattern<X>([ proj ] : [X]) {} // proj: X\ntype Proj<X> = [X];\nfunction tup_pattern2<X>([ proj ] : Proj<X>) {} // proj: X\n\nfunction rest_pattern<X>(...r: X[]) {} // r: X[]\n\nfunction obj_rest_pattern<X>({ _, ...o } : { _: any, x: X }) { // o: { x: X }\n  o.x;\n}\ntype ObjRest<X> = { _: any, x: X };\nfunction obj_rest_pattern<X>({ _, ...o } : ObjRest<X>) { // o: { x: X }\n  o.x;\n}\n\nfunction arr_rest_pattern<X>([ _, ...a ] : [ any, X ]) { // a: [X]\n  a[0];\n}\ntype ArrRest<X> = [ any, X ];\nfunction arr_rest_pattern<X>([ _, ...a ] : ArrRest<X>) { // a: [X]\n  a[0];\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nfunction obj_pattern<X>({ prop }: { prop: X }) {} // prop: X\ntype Prop<X> = { prop: X };\nfunction obj_pattern2<X>({ prop }: Prop<X>) {} // prop: X\n\nfunction arr_pattern<X>([elem]: X[]) {} // elem: X\ntype Elem<X> = X[];\nfunction arr_pattern2<X>([elem]: Elem<X>) {} // elem: X\n\nfunction tup_pattern<X>([proj]: [X]) {} // proj: X\ntype Proj<X> = [X];\nfunction tup_pattern2<X>([proj]: Proj<X>) {} // proj: X\n\nfunction rest_pattern<X>(...r: X[]) {} // r: X[]\n\nfunction obj_rest_pattern<X>({ _, ...o }: { _: any, x: X }) {\n  // o: { x: X }\n  o.x;\n}\ntype ObjRest<X> = { _: any, x: X };\nfunction obj_rest_pattern<X>({ _, ...o }: ObjRest<X>) {\n  // o: { x: X }\n  o.x;\n}\n\nfunction arr_rest_pattern<X>([_, ...a]: [any, X]) {\n  // a: [X]\n  a[0];\n}\ntype ArrRest<X> = [any, X];\nfunction arr_rest_pattern<X>([_, ...a]: ArrRest<X>) {\n  // a: [X]\n  a[0];\n}\n\n`;\n\nexports[`rec.js 1`] = `\n// @flow\n\n// Make sure that destructuring doesn't cause infinite loops when combined with\n// funny doses of repositioning\n\nlet foo = (i: number) => [i];\n\nconst bar = (i: number) => {\n  [i] = foo(i);\n  return [i];\n};\n\nfoo = (i: number) => {\n  return bar(i);\n};\n\n// Also make sure that the following doesn't loop\n\ndeclare var o;\nvar { x: o } = o;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// Make sure that destructuring doesn't cause infinite loops when combined with\n// funny doses of repositioning\n\nlet foo = (i: number) => [i];\n\nconst bar = (i: number) => {\n  [i] = foo(i);\n  return [i];\n};\n\nfoo = (i: number) => {\n  return bar(i);\n};\n\n// Also make sure that the following doesn't loop\n\ndeclare var o;\nvar { x: o } = o;\n\n`;\n\nexports[`refinement_non_termination.js 1`] = `\n// @flow\n\nfunction _([argArray]: Array<Value>) {\n  if (argArray instanceof NullValue || argArray instanceof UndefinedValue) {\n  }\n};\n\nclass Value { }\nclass NullValue extends Value { }\nclass UndefinedValue extends Value { }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nfunction _([argArray]: Array<Value>) {\n  if (argArray instanceof NullValue || argArray instanceof UndefinedValue) {\n  }\n}\n\nclass Value {}\nclass NullValue extends Value {}\nclass UndefinedValue extends Value {}\n\n`;\n\nexports[`string_lit.js 1`] = `\nvar { \"key\": val } = { key: \"val\" };\n(val: void); // error: string ~> void\n\nvar { \"with-dash\": with_dash } = { \"with-dash\": \"motivating example\" };\n(with_dash: \"motivating example\"); // ok\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar { key: val } = { key: \"val\" };\n(val: void); // error: string ~> void\n\nvar { \"with-dash\": with_dash } = { \"with-dash\": \"motivating example\" };\n(with_dash: \"motivating example\"); // ok\n\n`;\n\nexports[`unannotated.js 1`] = `\n// @flow\n\nvar { x } = {\n  x: { foo: \"foo\" }\n};\n\nfunction bar() {\n  x.bar\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nvar { x } = {\n  x: { foo: \"foo\" }\n};\n\nfunction bar() {\n  x.bar;\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/destructuring/array_rest.js",
    "content": "let xs = [0, \"\", true];\nlet [a, ...ys] = xs;\nlet [b, ...zs] = ys;\nlet c = zs[0]; // retain tuple info\nlet d = zs[1]; // run off the end\n\n(a: void); // error: number ~> void\n(b: void); // error: string ~> void\n(c: void); // error: boolean ~> void\n(d: void); // error: number|string|boolean ~> void\n\nlet [...e] = 0;\n"
  },
  {
    "path": "tests/flow/destructuring/computed.js",
    "content": "var { [\"key\"]: val1 } = { key: \"val\" };\n(val1: void); // error: string ~> void\n\nvar key: string = \"key\";\nvar { [key]: val2 } = { key: \"val\" };\n(val2: void); // ok (gasp!) by existing StrT -> ElemT rule\n\nvar { [\"key\"]: val3, ...spread } = { key: \"val\" };\n(spread.key: void); // error (gasp!) in general we don't know if a computed prop should be excluded from spread\n"
  },
  {
    "path": "tests/flow/destructuring/defaults.js",
    "content": "/* @flow */\n\nfunction obj_prop_fun({p:{q=0}={q:true}}={p:{q:\"\"}}) {\n  // errors:\n  // * number  ~> void, from default on _.p.q\n  // * boolean ~> void, from default on _.p\n  // * string  ~> void, from default on _\n  // * null    ~> void, from call below\n  (q:void);\n}\nobj_prop_fun(); // ok\nobj_prop_fun({}); // ok\nobj_prop_fun({p:{}}); // ok\nobj_prop_fun({p:{q:null}}); // ok, provides add'l lower bound\n\nfunction obj_prop_var(o={p:{q:\"\"}}) {\n  var {p:{q=0}={q:true}} = o;\n  // errors:\n  // * number  ~> void, from default on o.p.q\n  // * boolean ~> void, from default on o.p\n  // * string  ~> void, from default on o\n  // * null    ~> void, from call below\n  (q:void);\n}\nobj_prop_var(); // ok\nobj_prop_var({}); // ok\nobj_prop_var({p:{}}); // ok\nobj_prop_var({p:{q:null}}); // ok, provides add'l lower bound\n\nfunction obj_rest({p:{q,...o}={q:0,r:0}}={p:{q:0,r:\"\"}}) {\n  // errors:\n  // * number  ~> void, from default on _.p\n  // * string  ~> void, from default on _\n  // * null    ~> void, from call below\n  (o.r:void);\n}\nobj_rest(); // ok\nobj_rest({}); // ok\nobj_rest({p:{}}); // ok\nobj_rest({p:{q:0,r:null}});\n\nfunction obj_prop_annot({\n  p = true // error: boolean ~> string\n}: {\n  p: string\n} = {\n  p: 0 // error: number ~> string\n}) {\n  (p:void); // error: string ~> void\n}\n\nvar {\n  p = true // error: boolean ~> string\n}: {\n  p: string\n} = {\n  p: 0 // error: number ~> string\n};\n(p:void); // error: string ~> void\n\nfunction obj_prop_err({x:{y}}=null) {} // error: property `x` cannot be accessed on null\nfunction obj_rest_err({...o}=0) {} // error: expected object instead of number\nfunction arr_elem_err([x]=null) {} // error: element 0 cannot be accessed on null\nfunction arr_rest_err([...a]=null) {} // error: expected array instead of null\n\nfunction gen<T>(x:T,{p=x}:{p:T}):T {\n  return p;\n}\n\n// Default values in destructuring unwrap optional types\nobj_prop_fun(({} : {p?:{q?:null}})); // ok\nobj_prop_var(({} : {p?:{q?:null}})); // ok\n\n// union-like upper bounds preserved through destructuring\nfunction obj_prop_opt({p}:{p?:string}={p:0}) {}\nfunction obj_prop_maybe({p}:{p:?string}={p:0}) {}\nfunction obj_prop_union({p}:{p:number|string}={p:true}) {}\n\n// TODO: union-of-objects upper bounds preserved through destructuring\nfunction obj_prop_union2({p}:{p:number}|{p:string}={p:true}) {}\n\nfunction default_expr_scope({a, b = a}) {}\n"
  },
  {
    "path": "tests/flow/destructuring/destructuring.js",
    "content": "declare var a:string;\ndeclare var b:string;\ndeclare var c:string;\n[{a1:a, b},c] = [{a1:0, b:1},2];\n\nvar {m} = {m:0};\n({m} = {m:m});\n\nvar obj;\n({n: obj.x} = {n:3});\n[obj.x] = ['foo'];\n\nfunction foo({p, z:[r]}) {\n    a = p;\n    b = z;\n    c = r;\n}\nfoo({p:0, z:[1,2]});\n\n[a,,b,...c] = [0,1,true,3];\n\nfunction bar({x, ...z}) {\n    var o:{x: string; y: number;} = z;\n}\nbar({x:\"\",y:0});\n\nvar spread = {y:\"\"};\nvar extend: {x:number; y:string; z: boolean} = {x:0, ...spread};\n\nfunction qux(_: {a:number}) { }\nqux({a:\"\"});\nfunction corge({b}: {b:string}) { }\ncorge({b:0});\n\nvar {n}:{n: number} = {n: \"\"}\n\nfunction test() {\n  var {foo} = {bar: 123}; // error on foo\n  var {bar, baz} = {bar: 123} // error on baz\n}\n\nfunction test() {\n  var x = {foo: 'abc', bar: 123};\n  var {foo, ...rest} = x;\n  (x.baz: string); // error, baz doesn't exist\n  (rest.baz: string); // no error, rest is unsealed\n}\n\nmodule.exports = corge;\n\nclass Base {\n  baseprop1: number;\n  baseprop2: number;\n}\n\nclass Child extends Base {\n  childprop1: number;\n  childprop2: number;\n}\n\nvar {baseprop1, childprop1, ...others} = new Child();\n\nvar bp1: number = baseprop1;\nvar bp1_err: string = baseprop1; // Error: number ~> string\nvar bp2: number = others.baseprop2;\nvar bp2_err: string = others.baseprop2; // Error: number ~> string\n\nvar cp1: number = childprop1;\nvar cp1_err: string = childprop1; // Error: number ~> string\nvar cp2: number = others.childprop1;\nvar cp2_err: string = others.childprop2; // Error: number ~> string\n"
  },
  {
    "path": "tests/flow/destructuring/eager.js",
    "content": "var x;\n({x} = null); // error, property `x` can not be accessed on `null`\n"
  },
  {
    "path": "tests/flow/destructuring/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/destructuring/poly.js",
    "content": "// @flow\n\nfunction obj_pattern<X>({ prop } : { prop: X }) {} // prop: X\ntype Prop<X> = { prop: X };\nfunction obj_pattern2<X>({ prop } : Prop<X>) {} // prop: X\n\nfunction arr_pattern<X>([ elem ] : X[]) {} // elem: X\ntype Elem<X> = X[];\nfunction arr_pattern2<X>([ elem ] : Elem<X>) {} // elem: X\n\nfunction tup_pattern<X>([ proj ] : [X]) {} // proj: X\ntype Proj<X> = [X];\nfunction tup_pattern2<X>([ proj ] : Proj<X>) {} // proj: X\n\nfunction rest_pattern<X>(...r: X[]) {} // r: X[]\n\nfunction obj_rest_pattern<X>({ _, ...o } : { _: any, x: X }) { // o: { x: X }\n  o.x;\n}\ntype ObjRest<X> = { _: any, x: X };\nfunction obj_rest_pattern<X>({ _, ...o } : ObjRest<X>) { // o: { x: X }\n  o.x;\n}\n\nfunction arr_rest_pattern<X>([ _, ...a ] : [ any, X ]) { // a: [X]\n  a[0];\n}\ntype ArrRest<X> = [ any, X ];\nfunction arr_rest_pattern<X>([ _, ...a ] : ArrRest<X>) { // a: [X]\n  a[0];\n}\n"
  },
  {
    "path": "tests/flow/destructuring/rec.js",
    "content": "// @flow\n\n// Make sure that destructuring doesn't cause infinite loops when combined with\n// funny doses of repositioning\n\nlet foo = (i: number) => [i];\n\nconst bar = (i: number) => {\n  [i] = foo(i);\n  return [i];\n};\n\nfoo = (i: number) => {\n  return bar(i);\n};\n\n// Also make sure that the following doesn't loop\n\ndeclare var o;\nvar { x: o } = o;\n"
  },
  {
    "path": "tests/flow/destructuring/refinement_non_termination.js",
    "content": "// @flow\n\nfunction _([argArray]: Array<Value>) {\n  if (argArray instanceof NullValue || argArray instanceof UndefinedValue) {\n  }\n};\n\nclass Value { }\nclass NullValue extends Value { }\nclass UndefinedValue extends Value { }\n"
  },
  {
    "path": "tests/flow/destructuring/string_lit.js",
    "content": "var { \"key\": val } = { key: \"val\" };\n(val: void); // error: string ~> void\n\nvar { \"with-dash\": with_dash } = { \"with-dash\": \"motivating example\" };\n(with_dash: \"motivating example\"); // ok\n"
  },
  {
    "path": "tests/flow/destructuring/unannotated.js",
    "content": "// @flow\n\nvar { x } = {\n  x: { foo: \"foo\" }\n};\n\nfunction bar() {\n  x.bar\n}\n"
  },
  {
    "path": "tests/flow/dictionary/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`any.js 1`] = `\n/* @flow */\n\nconst dict: {[key: string]: number} = {}\nconst k: any = 'foo'\nconst val: string = dict[k] // error: number incompatible with string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nconst dict: { [key: string]: number } = {};\nconst k: any = \"foo\";\nconst val: string = dict[k]; // error: number incompatible with string\n\n`;\n\nexports[`compatible.js 1`] = `\n/* @flow */\n\nfunction foo0(x: Array<{[key: string]: mixed}>): Array<{[key: string]: mixed}> {\n  // this adds a fooBar property to the param type, which should NOT cause\n  // an error in the return type because it is a dictionary.\n  x[0].fooBar = 'foobar';\n  return x;\n}\n\nfunction foo2(\n  x: {[key: string]: number}\n): {[key: string]: number, +toString: () => string} {\n  // x's prototype has a toString method\n  return x;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction foo0(\n  x: Array<{ [key: string]: mixed }>\n): Array<{ [key: string]: mixed }> {\n  // this adds a fooBar property to the param type, which should NOT cause\n  // an error in the return type because it is a dictionary.\n  x[0].fooBar = \"foobar\";\n  return x;\n}\n\nfunction foo2(x: {\n  [key: string]: number\n}): { [key: string]: number, +toString: () => string } {\n  // x's prototype has a toString method\n  return x;\n}\n\n`;\n\nexports[`dictionary.js 1`] = `\n/* Dictionary types are object types that include an indexer, which specifies a\n * key type and a value type. The presence of an indexer makes the object type\n * unsealed, but all added properties must be consistent with the indexer\n * signature.\n *\n * Dictionaries can be used to represent the common idiom of objects used as\n * maps. They can also be used to represent array-like objects, e.g., NodeList\n * from the DOM API.\n *\n * A dictionary is assumed to have every property described by it's key type.\n * This behavior is similar to the behavior of arrays, which are assumed to have\n * a value at every index.\n *\n * @flow\n */\n\n// Some logic is variance-sensitive.\nclass A {}\nclass B extends A {}\nclass C extends B {}\n\n// Just a couple of short type names. Compare to string/number.\nclass X {}\nclass Y {}\n\n// Any property can be set on a dict with string keys.\nfunction set_prop_to_string_key(\n  o: {[k:string]:any},\n) {\n  o.prop = \"ok\";\n}\n\n// **UNSOUND**\n// This is allowed by design. We don't track get/set and we don't wrap the\n// return type in a maybe.\nfunction unsound_dict_has_every_key(\n  o: {[k:string]:X},\n) {\n  (o.p: X); // ok\n  (o[\"p\"]: X); // ok\n}\n\n// As with any object type, we can assign subtypes to properties.\nfunction set_prop_covariant(\n  o: {[k:string]:B},\n) {\n  o.p = new A; // error, A ~> B\n  o.p = new B; // ok\n  o.p = new C; // ok\n}\n\n// This isn't specific behavior to dictionaries, but for completeness...\nfunction get_prop_contravariant(\n  o: {[k:string]:B},\n) {\n  (o.p: A); // ok\n  (o.p: B); // ok\n  (o.p: C); // error, C ~> B\n}\n\n// Dot-notation can not be used to add properties to dictionaries with\n// non-string keys, because keys are strings.\nfunction add_prop_to_nonstring_key_dot(\n  o: {[k:number]:any},\n) {\n  o.prop = \"err\"; // error: string ~> number\n}\n\n// Bracket notation can be used to add properties to dictionaries with\n// non-string keys, even though all keys are strings. This is a convenient\n// affordance.\nfunction add_prop_to_nonstring_key_bracket(\n  o: {[k:number]:any},\n) {\n  o[0] = \"ok\";\n}\n\n// Objects can be part dict, part not by mixing an indexer with declared props.\nfunction mix_with_declared_props(\n  o: {[k:number]:X,p:Y},\n  x: X,\n  y: Y,\n) {\n  (o[0]: X); // ok\n  (o.p: Y); // ok\n  o[0] = x; // ok\n  o.p = y; // ok\n}\n\n// Indeed, dict types are still Objects and have Object.prototype stuff\nfunction object_prototype(\n  o: {[k:string]:number},\n): {[k:string]:number, +toString: () => string} {\n  (o.toString(): boolean); // error: string ~> boolean\n  return o; // ok\n}\n\n// **UNSOUND**\n// Because we support non-string props w/ bracket notation, it's possible to\n// write into a declared prop unsoundly.\nfunction unsound_string_conversion_alias_declared_prop(\n  o: {[k:number]:any, \"0\":X},\n) {\n  o[0] = \"not-x\"; // a[\"0\"] no longer X\n}\n\nfunction unification_dict_values_invariant(\n  x: Array<{[k:string]:B}>,\n) {\n  let a: Array<{[k:string]:A}> = x; // error\n  a[0].p = new A; // in[0].p no longer B\n\n  let b: Array<{[k:string]:B}> = x; // ok\n\n  let c: Array<{[k:string]:C}> = x; // error\n  (x[0].p: C); // not true\n}\n\nfunction subtype_dict_values_invariant(\n  x: {[k:string]:B},\n) {\n  let a: {[k:string]:A} = x; // error\n  a.p = new A; // x[0].p no longer B\n\n  let b: {[k:string]:B} = x; // ok\n\n  let c: {[k:string]:C} = x; // error\n  (x.p: C); // not true\n}\n\nfunction subtype_dict_values_fresh_exception() {\n  let a: {[k:string]:A} = {\n    a: new A, // ok, A == A\n    b: new B, // ok, B <: A\n    c: new C, // ok, C <: A\n  };\n\n  let b: {[k:string]:B} = {\n    a: new A, // error, A not <: B\n    b: new B, // ok, B == B\n    c: new C, // ok, C <: A\n  };\n\n  let c: {[k:string]:C} = {\n    a: new A, // error, A not <: C\n    b: new B, // error, A not <: C\n    c: new C, // ok, C == C\n  };\n}\n\n// Actually, unsound_string_conversion_alias_declared_prop behavior makes an\n// argument that we shouldn't really care about this, since we ignore the fact\n// that coercing values to string keys can cause unintended aliasing in general.\n// Barring some compelling use case for that in this context, though, we choose\n// to be strict.\nfunction unification_dict_keys_invariant(\n  x: Array<{[k:B]:any}>,\n) {\n  let a: Array<{[k:A]:any}> = x; // error\n  let b: Array<{[k:B]:any}> = x; // ok\n  let c: Array<{[k:C]:any}> = x; // error\n}\n\nfunction subtype_dict_keys_invariant(\n  x: {[k:B]:any},\n) {\n  let a: {[k:A]:any} = x; // error\n  let b: {[k:B]:any} = x; // ok\n  let c: {[k:C]:any} = x; // error\n}\n\nfunction unification_mix_with_declared_props_invariant_l(\n  x: Array<{[k:string]:B}>,\n) {\n  let a: Array<{[k:string]:B, p:A}> = x; // error: A ~> B\n  a[0].p = new A; // x[0].p no longer B\n\n  let b: Array<{[k:string]:B, p:B}> = x; // ok\n\n  let c: Array<{[k:string]:B, p:C}> = x; // error\n  (x[0].p: C); // not true\n}\n\nfunction unification_mix_with_declared_props_invariant_r(\n  xa: Array<{[k:string]:A, p:B}>,\n  xb: Array<{[k:string]:B, p:B}>,\n  xc: Array<{[k:string]:C, p:B}>,\n) {\n  let a: Array<{[k:string]:A}> = xa; // error\n  a[0].p = new A; // xa[0].p no longer B\n\n  let b: Array<{[k:string]:B}> = xb; // ok\n\n  let c: Array<{[k:string]:C}> = xc; // error\n  (xc[0].p: C); // not true\n}\n\nfunction subtype_mix_with_declared_props_invariant_l(\n  x: {[k:string]:B},\n) {\n  let a: {[k:string]:B, p:A} = x; // error: A ~> B\n  a.p = new A; // x.p no longer B\n\n  let b: {[k:string]:B, p:B} = x; // ok\n\n  let c: {[k:string]:B, p:C} = x; // error\n  (x.p: C); // not true\n}\n\nfunction subtype_mix_with_declared_props_invariant_r(\n  xa: {[k:string]:A, p:B},\n  xb: {[k:string]:B, p:B},\n  xc: {[k:string]:C, p:B},\n) {\n  let a: {[k:string]:A} = xa; // error\n  a.p = new A; // xa.p no longer B\n\n  let b: {[k:string]:B} = xb; // ok\n\n  let c: {[k:string]:C} = xc; // error\n  (xc.p: C); // not true\n}\n\nfunction unification_dict_to_obj(\n  x: Array<{[k:string]:X}>,\n): Array<{p:X}> {\n  return x; // error: if allowed, could write {p:X,q:Y} into \\`x\\`\n}\n\nfunction unification_obj_to_dict(\n  x: Array<{p:X}>,\n): Array<{[k:string]:X}> {\n  return x; // error: if allowed, could write {p:X,q:Y} into returned array\n}\n\nfunction subtype_dict_to_obj(\n  x: {[k:string]:B},\n) {\n  let a: {p:A} = x; // error\n  a.p = new A; // x.p no longer B\n\n  let b: {p:B} = x; // ok\n\n  let c: {p:C} = x; // error\n  (x.p: C); // not true\n}\n\nfunction subtype_obj_to_dict(\n  x: {p:B},\n) {\n  let a: {[k:string]:A} = x; // error\n  a.p = new A; // x.p no longer B\n\n  let b: {[k:string]:B} = x;\n\n  let c: {[k:string]:C} = x; // error\n  (x.p: C); // not true\n}\n\n// Only props in l which are not in u must match indexer, but must do so\n// exactly.\nfunction subtype_obj_to_mixed(\n  x: {p:B, x:X},\n) {\n  let a: {[k:string]:A,x:X} = x; // error (as above), but exclusive of x\n  let b: {[k:string]:B,x:X} = x; // ok,\n  let c: {[k:string]:C,x:X} = x; // error (as above), but exclusive of x\n}\n\nfunction unification_dict_to_mixed(\n  x: Array<{[k:string]:B}>,\n) {\n  let a: Array<{[k:string]:B, p:A}> = x; // error\n  let b: Array<{[k:string]:B, p:B}> = x; // ok\n  let c: Array<{[k:string]:B, p:C}> = x; // error\n}\n\nfunction subtype_dict_to_mixed(\n  x: {[k:string]:B},\n) {\n  let a: {[k:string]:B, p:A} = x; // error\n  let b: {[k:string]:B, p:B} = x; // ok\n  let c: {[k:string]:B, p:C} = x; // error\n}\n\nfunction subtype_dict_to_optional_a(\n  x: {[k:string]:B},\n) {\n  let a: {p?:A} = x; // error\n}\n\nfunction subtype_dict_to_optional_b(\n  x: {[k:string]:B},\n) {\n  let b: {p?:B} = x; // ok\n}\n\nfunction subtype_dict_to_optional_c(\n  x: {[k:string]:B},\n) {\n  let c: {p?:C} = x; // error\n}\n\nfunction subtype_optional_a_to_dict(\n  x: {p?:A},\n): {[k:string]:B} { // error: A ~> B\n  return x;\n}\n\nfunction subtype_optional_b_to_dict(\n  x: {p?:B},\n): {[k:string]:B} { // ok\n  return x;\n}\n\nfunction subtype_optional_c_to_dict(\n  x: {p?:C},\n): {[k:string]:B} { // error: C ~> B\n  return x;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* Dictionary types are object types that include an indexer, which specifies a\n * key type and a value type. The presence of an indexer makes the object type\n * unsealed, but all added properties must be consistent with the indexer\n * signature.\n *\n * Dictionaries can be used to represent the common idiom of objects used as\n * maps. They can also be used to represent array-like objects, e.g., NodeList\n * from the DOM API.\n *\n * A dictionary is assumed to have every property described by it's key type.\n * This behavior is similar to the behavior of arrays, which are assumed to have\n * a value at every index.\n *\n * @flow\n */\n\n// Some logic is variance-sensitive.\nclass A {}\nclass B extends A {}\nclass C extends B {}\n\n// Just a couple of short type names. Compare to string/number.\nclass X {}\nclass Y {}\n\n// Any property can be set on a dict with string keys.\nfunction set_prop_to_string_key(o: { [k: string]: any }) {\n  o.prop = \"ok\";\n}\n\n// **UNSOUND**\n// This is allowed by design. We don't track get/set and we don't wrap the\n// return type in a maybe.\nfunction unsound_dict_has_every_key(o: { [k: string]: X }) {\n  (o.p: X); // ok\n  (o[\"p\"]: X); // ok\n}\n\n// As with any object type, we can assign subtypes to properties.\nfunction set_prop_covariant(o: { [k: string]: B }) {\n  o.p = new A(); // error, A ~> B\n  o.p = new B(); // ok\n  o.p = new C(); // ok\n}\n\n// This isn't specific behavior to dictionaries, but for completeness...\nfunction get_prop_contravariant(o: { [k: string]: B }) {\n  (o.p: A); // ok\n  (o.p: B); // ok\n  (o.p: C); // error, C ~> B\n}\n\n// Dot-notation can not be used to add properties to dictionaries with\n// non-string keys, because keys are strings.\nfunction add_prop_to_nonstring_key_dot(o: { [k: number]: any }) {\n  o.prop = \"err\"; // error: string ~> number\n}\n\n// Bracket notation can be used to add properties to dictionaries with\n// non-string keys, even though all keys are strings. This is a convenient\n// affordance.\nfunction add_prop_to_nonstring_key_bracket(o: { [k: number]: any }) {\n  o[0] = \"ok\";\n}\n\n// Objects can be part dict, part not by mixing an indexer with declared props.\nfunction mix_with_declared_props(o: { [k: number]: X, p: Y }, x: X, y: Y) {\n  (o[0]: X); // ok\n  (o.p: Y); // ok\n  o[0] = x; // ok\n  o.p = y; // ok\n}\n\n// Indeed, dict types are still Objects and have Object.prototype stuff\nfunction object_prototype(o: {\n  [k: string]: number\n}): { [k: string]: number, +toString: () => string } {\n  (o.toString(): boolean); // error: string ~> boolean\n  return o; // ok\n}\n\n// **UNSOUND**\n// Because we support non-string props w/ bracket notation, it's possible to\n// write into a declared prop unsoundly.\nfunction unsound_string_conversion_alias_declared_prop(o: {\n  [k: number]: any,\n  \"0\": X\n}) {\n  o[0] = \"not-x\"; // a[\"0\"] no longer X\n}\n\nfunction unification_dict_values_invariant(x: Array<{ [k: string]: B }>) {\n  let a: Array<{ [k: string]: A }> = x; // error\n  a[0].p = new A(); // in[0].p no longer B\n\n  let b: Array<{ [k: string]: B }> = x; // ok\n\n  let c: Array<{ [k: string]: C }> = x; // error\n  (x[0].p: C); // not true\n}\n\nfunction subtype_dict_values_invariant(x: { [k: string]: B }) {\n  let a: { [k: string]: A } = x; // error\n  a.p = new A(); // x[0].p no longer B\n\n  let b: { [k: string]: B } = x; // ok\n\n  let c: { [k: string]: C } = x; // error\n  (x.p: C); // not true\n}\n\nfunction subtype_dict_values_fresh_exception() {\n  let a: { [k: string]: A } = {\n    a: new A(), // ok, A == A\n    b: new B(), // ok, B <: A\n    c: new C() // ok, C <: A\n  };\n\n  let b: { [k: string]: B } = {\n    a: new A(), // error, A not <: B\n    b: new B(), // ok, B == B\n    c: new C() // ok, C <: A\n  };\n\n  let c: { [k: string]: C } = {\n    a: new A(), // error, A not <: C\n    b: new B(), // error, A not <: C\n    c: new C() // ok, C == C\n  };\n}\n\n// Actually, unsound_string_conversion_alias_declared_prop behavior makes an\n// argument that we shouldn't really care about this, since we ignore the fact\n// that coercing values to string keys can cause unintended aliasing in general.\n// Barring some compelling use case for that in this context, though, we choose\n// to be strict.\nfunction unification_dict_keys_invariant(x: Array<{ [k: B]: any }>) {\n  let a: Array<{ [k: A]: any }> = x; // error\n  let b: Array<{ [k: B]: any }> = x; // ok\n  let c: Array<{ [k: C]: any }> = x; // error\n}\n\nfunction subtype_dict_keys_invariant(x: { [k: B]: any }) {\n  let a: { [k: A]: any } = x; // error\n  let b: { [k: B]: any } = x; // ok\n  let c: { [k: C]: any } = x; // error\n}\n\nfunction unification_mix_with_declared_props_invariant_l(\n  x: Array<{ [k: string]: B }>\n) {\n  let a: Array<{ [k: string]: B, p: A }> = x; // error: A ~> B\n  a[0].p = new A(); // x[0].p no longer B\n\n  let b: Array<{ [k: string]: B, p: B }> = x; // ok\n\n  let c: Array<{ [k: string]: B, p: C }> = x; // error\n  (x[0].p: C); // not true\n}\n\nfunction unification_mix_with_declared_props_invariant_r(\n  xa: Array<{ [k: string]: A, p: B }>,\n  xb: Array<{ [k: string]: B, p: B }>,\n  xc: Array<{ [k: string]: C, p: B }>\n) {\n  let a: Array<{ [k: string]: A }> = xa; // error\n  a[0].p = new A(); // xa[0].p no longer B\n\n  let b: Array<{ [k: string]: B }> = xb; // ok\n\n  let c: Array<{ [k: string]: C }> = xc; // error\n  (xc[0].p: C); // not true\n}\n\nfunction subtype_mix_with_declared_props_invariant_l(x: { [k: string]: B }) {\n  let a: { [k: string]: B, p: A } = x; // error: A ~> B\n  a.p = new A(); // x.p no longer B\n\n  let b: { [k: string]: B, p: B } = x; // ok\n\n  let c: { [k: string]: B, p: C } = x; // error\n  (x.p: C); // not true\n}\n\nfunction subtype_mix_with_declared_props_invariant_r(\n  xa: { [k: string]: A, p: B },\n  xb: { [k: string]: B, p: B },\n  xc: { [k: string]: C, p: B }\n) {\n  let a: { [k: string]: A } = xa; // error\n  a.p = new A(); // xa.p no longer B\n\n  let b: { [k: string]: B } = xb; // ok\n\n  let c: { [k: string]: C } = xc; // error\n  (xc.p: C); // not true\n}\n\nfunction unification_dict_to_obj(\n  x: Array<{ [k: string]: X }>\n): Array<{ p: X }> {\n  return x; // error: if allowed, could write {p:X,q:Y} into \\`x\\`\n}\n\nfunction unification_obj_to_dict(\n  x: Array<{ p: X }>\n): Array<{ [k: string]: X }> {\n  return x; // error: if allowed, could write {p:X,q:Y} into returned array\n}\n\nfunction subtype_dict_to_obj(x: { [k: string]: B }) {\n  let a: { p: A } = x; // error\n  a.p = new A(); // x.p no longer B\n\n  let b: { p: B } = x; // ok\n\n  let c: { p: C } = x; // error\n  (x.p: C); // not true\n}\n\nfunction subtype_obj_to_dict(x: { p: B }) {\n  let a: { [k: string]: A } = x; // error\n  a.p = new A(); // x.p no longer B\n\n  let b: { [k: string]: B } = x;\n\n  let c: { [k: string]: C } = x; // error\n  (x.p: C); // not true\n}\n\n// Only props in l which are not in u must match indexer, but must do so\n// exactly.\nfunction subtype_obj_to_mixed(x: { p: B, x: X }) {\n  let a: { [k: string]: A, x: X } = x; // error (as above), but exclusive of x\n  let b: { [k: string]: B, x: X } = x; // ok,\n  let c: { [k: string]: C, x: X } = x; // error (as above), but exclusive of x\n}\n\nfunction unification_dict_to_mixed(x: Array<{ [k: string]: B }>) {\n  let a: Array<{ [k: string]: B, p: A }> = x; // error\n  let b: Array<{ [k: string]: B, p: B }> = x; // ok\n  let c: Array<{ [k: string]: B, p: C }> = x; // error\n}\n\nfunction subtype_dict_to_mixed(x: { [k: string]: B }) {\n  let a: { [k: string]: B, p: A } = x; // error\n  let b: { [k: string]: B, p: B } = x; // ok\n  let c: { [k: string]: B, p: C } = x; // error\n}\n\nfunction subtype_dict_to_optional_a(x: { [k: string]: B }) {\n  let a: { p?: A } = x; // error\n}\n\nfunction subtype_dict_to_optional_b(x: { [k: string]: B }) {\n  let b: { p?: B } = x; // ok\n}\n\nfunction subtype_dict_to_optional_c(x: { [k: string]: B }) {\n  let c: { p?: C } = x; // error\n}\n\nfunction subtype_optional_a_to_dict(x: { p?: A }): { [k: string]: B } {\n  // error: A ~> B\n  return x;\n}\n\nfunction subtype_optional_b_to_dict(x: { p?: B }): { [k: string]: B } {\n  // ok\n  return x;\n}\n\nfunction subtype_optional_c_to_dict(x: { p?: C }): { [k: string]: B } {\n  // error: C ~> B\n  return x;\n}\n\n`;\n\nexports[`incompatible.js 1`] = `\n/* @flow */\n\nvar x : {[key: string]: string} = {};\nvar y : {[key: string]: number} = x; // 2 errors, number !~> string & vice versa\nvar z : {[key: number]: string} = x; // 2 errors, string !~> number & vice versa\n\nvar a : {[key: string]: ?string} = {};\nvar b : {[key: string]: string} = a; // 2 errors (null & undefined)\nvar c : {[key: string]: ?string} = b; // 2 errors, since c['x'] = null updates b\n\n// 2 errors (number !~> string, string !~> number)\nfunction foo0(x: Array<{[key: string]: number}>): Array<{[key: string]: string}> {\n  return x;\n}\n\n// error, fooBar:string !~> number (x's dictionary)\nfunction foo1(\n  x: Array<{[key: string]: number}>\n): Array<{[key: string]: number, fooBar: string}> {\n  return x;\n}\n\nfunction foo2(\n  x: Array<{[key: string]: mixed}>\n): Array<{[key: string]: mixed, fooBar: string}> {\n  x[0].fooBar = 123; // OK, since number ~> mixed (x elem's dictionary)\n  return x; // error: mixed ~> string\n}\n\n// OK, since we assume dictionaries have every key\nfunction foo3(x: {[key: string]: number}): {foo: number} {\n  return x;\n}\n\n// error: foo can't exist in x\nfunction foo4(x: {[key: string]: number}): {[key: string]: number, foo: string} {\n  return x;\n}\n\n// error, some prop in x could be incompatible (covariance)\nfunction foo5(x: Array<{[key: string]: number}>): Array<{foo: number}> {\n  return x;\n}\n\n// error, some prop in return could be incompatible\nfunction foo6(x: Array<{foo: number}>): Array<{[key: string]: number}> {\n  return x;\n}\n\nfunction foo7(x: {bar: string, [key: string]: number}) {\n  (x.bar: string);\n}\n\nfunction foo8(x: {[key: string]: number}) {\n  (x.foo: string); // error\n  (x.foo: number);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar x: { [key: string]: string } = {};\nvar y: { [key: string]: number } = x; // 2 errors, number !~> string & vice versa\nvar z: { [key: number]: string } = x; // 2 errors, string !~> number & vice versa\n\nvar a: { [key: string]: ?string } = {};\nvar b: { [key: string]: string } = a; // 2 errors (null & undefined)\nvar c: { [key: string]: ?string } = b; // 2 errors, since c['x'] = null updates b\n\n// 2 errors (number !~> string, string !~> number)\nfunction foo0(\n  x: Array<{ [key: string]: number }>\n): Array<{ [key: string]: string }> {\n  return x;\n}\n\n// error, fooBar:string !~> number (x's dictionary)\nfunction foo1(\n  x: Array<{ [key: string]: number }>\n): Array<{ [key: string]: number, fooBar: string }> {\n  return x;\n}\n\nfunction foo2(\n  x: Array<{ [key: string]: mixed }>\n): Array<{ [key: string]: mixed, fooBar: string }> {\n  x[0].fooBar = 123; // OK, since number ~> mixed (x elem's dictionary)\n  return x; // error: mixed ~> string\n}\n\n// OK, since we assume dictionaries have every key\nfunction foo3(x: { [key: string]: number }): { foo: number } {\n  return x;\n}\n\n// error: foo can't exist in x\nfunction foo4(x: {\n  [key: string]: number\n}): { [key: string]: number, foo: string } {\n  return x;\n}\n\n// error, some prop in x could be incompatible (covariance)\nfunction foo5(x: Array<{ [key: string]: number }>): Array<{ foo: number }> {\n  return x;\n}\n\n// error, some prop in return could be incompatible\nfunction foo6(x: Array<{ foo: number }>): Array<{ [key: string]: number }> {\n  return x;\n}\n\nfunction foo7(x: { bar: string, [key: string]: number }) {\n  (x.bar: string);\n}\n\nfunction foo8(x: { [key: string]: number }) {\n  (x.foo: string); // error\n  (x.foo: number);\n}\n\n`;\n\nexports[`issue-1745.js 1`] = `\n/* @flow */\n\nclass A {\n  x: {[k:string]: number};\n\n  m1() {\n    this.x = { bar: 0 }; // no error\n  }\n\n  m2() {\n    this.x.foo = 0; // no error\n  }\n}\n\nclass B {\n  x: {[k:string]: number};\n\n  m2() {\n    this.x.foo = 0; // no error\n  }\n\n  m1() {\n    this.x = { bar: 0 }; // no error\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nclass A {\n  x: { [k: string]: number };\n\n  m1() {\n    this.x = { bar: 0 }; // no error\n  }\n\n  m2() {\n    this.x.foo = 0; // no error\n  }\n}\n\nclass B {\n  x: { [k: string]: number };\n\n  m2() {\n    this.x.foo = 0; // no error\n  }\n\n  m1() {\n    this.x = { bar: 0 }; // no error\n  }\n}\n\n`;\n\nexports[`test.js 1`] = `\ntype Params = {count: number; [name: string]: string};\ntype QueryFunction = (params: Params) => string;\n\nvar o: { foo: QueryFunction } = {\n  foo(params) {\n    return params.count; // error, number ~/~ string\n  }\n};\n\nmodule.exports = o;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype Params = { count: number, [name: string]: string };\ntype QueryFunction = (params: Params) => string;\n\nvar o: { foo: QueryFunction } = {\n  foo(params) {\n    return params.count; // error, number ~/~ string\n  }\n};\n\nmodule.exports = o;\n\n`;\n\nexports[`test_client.js 1`] = `\nvar o = require('./test');\n\no.foo = function (params) {\n  return params.count; // error, number ~/~ string\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar o = require(\"./test\");\n\no.foo = function(params) {\n  return params.count; // error, number ~/~ string\n};\n\n`;\n"
  },
  {
    "path": "tests/flow/dictionary/any.js",
    "content": "/* @flow */\n\nconst dict: {[key: string]: number} = {}\nconst k: any = 'foo'\nconst val: string = dict[k] // error: number incompatible with string\n"
  },
  {
    "path": "tests/flow/dictionary/compatible.js",
    "content": "/* @flow */\n\nfunction foo0(x: Array<{[key: string]: mixed}>): Array<{[key: string]: mixed}> {\n  // this adds a fooBar property to the param type, which should NOT cause\n  // an error in the return type because it is a dictionary.\n  x[0].fooBar = 'foobar';\n  return x;\n}\n\nfunction foo2(\n  x: {[key: string]: number}\n): {[key: string]: number, +toString: () => string} {\n  // x's prototype has a toString method\n  return x;\n}\n"
  },
  {
    "path": "tests/flow/dictionary/dictionary.js",
    "content": "/* Dictionary types are object types that include an indexer, which specifies a\n * key type and a value type. The presence of an indexer makes the object type\n * unsealed, but all added properties must be consistent with the indexer\n * signature.\n *\n * Dictionaries can be used to represent the common idiom of objects used as\n * maps. They can also be used to represent array-like objects, e.g., NodeList\n * from the DOM API.\n *\n * A dictionary is assumed to have every property described by it's key type.\n * This behavior is similar to the behavior of arrays, which are assumed to have\n * a value at every index.\n *\n * @flow\n */\n\n// Some logic is variance-sensitive.\nclass A {}\nclass B extends A {}\nclass C extends B {}\n\n// Just a couple of short type names. Compare to string/number.\nclass X {}\nclass Y {}\n\n// Any property can be set on a dict with string keys.\nfunction set_prop_to_string_key(\n  o: {[k:string]:any},\n) {\n  o.prop = \"ok\";\n}\n\n// **UNSOUND**\n// This is allowed by design. We don't track get/set and we don't wrap the\n// return type in a maybe.\nfunction unsound_dict_has_every_key(\n  o: {[k:string]:X},\n) {\n  (o.p: X); // ok\n  (o[\"p\"]: X); // ok\n}\n\n// As with any object type, we can assign subtypes to properties.\nfunction set_prop_covariant(\n  o: {[k:string]:B},\n) {\n  o.p = new A; // error, A ~> B\n  o.p = new B; // ok\n  o.p = new C; // ok\n}\n\n// This isn't specific behavior to dictionaries, but for completeness...\nfunction get_prop_contravariant(\n  o: {[k:string]:B},\n) {\n  (o.p: A); // ok\n  (o.p: B); // ok\n  (o.p: C); // error, C ~> B\n}\n\n// Dot-notation can not be used to add properties to dictionaries with\n// non-string keys, because keys are strings.\nfunction add_prop_to_nonstring_key_dot(\n  o: {[k:number]:any},\n) {\n  o.prop = \"err\"; // error: string ~> number\n}\n\n// Bracket notation can be used to add properties to dictionaries with\n// non-string keys, even though all keys are strings. This is a convenient\n// affordance.\nfunction add_prop_to_nonstring_key_bracket(\n  o: {[k:number]:any},\n) {\n  o[0] = \"ok\";\n}\n\n// Objects can be part dict, part not by mixing an indexer with declared props.\nfunction mix_with_declared_props(\n  o: {[k:number]:X,p:Y},\n  x: X,\n  y: Y,\n) {\n  (o[0]: X); // ok\n  (o.p: Y); // ok\n  o[0] = x; // ok\n  o.p = y; // ok\n}\n\n// Indeed, dict types are still Objects and have Object.prototype stuff\nfunction object_prototype(\n  o: {[k:string]:number},\n): {[k:string]:number, +toString: () => string} {\n  (o.toString(): boolean); // error: string ~> boolean\n  return o; // ok\n}\n\n// **UNSOUND**\n// Because we support non-string props w/ bracket notation, it's possible to\n// write into a declared prop unsoundly.\nfunction unsound_string_conversion_alias_declared_prop(\n  o: {[k:number]:any, \"0\":X},\n) {\n  o[0] = \"not-x\"; // a[\"0\"] no longer X\n}\n\nfunction unification_dict_values_invariant(\n  x: Array<{[k:string]:B}>,\n) {\n  let a: Array<{[k:string]:A}> = x; // error\n  a[0].p = new A; // in[0].p no longer B\n\n  let b: Array<{[k:string]:B}> = x; // ok\n\n  let c: Array<{[k:string]:C}> = x; // error\n  (x[0].p: C); // not true\n}\n\nfunction subtype_dict_values_invariant(\n  x: {[k:string]:B},\n) {\n  let a: {[k:string]:A} = x; // error\n  a.p = new A; // x[0].p no longer B\n\n  let b: {[k:string]:B} = x; // ok\n\n  let c: {[k:string]:C} = x; // error\n  (x.p: C); // not true\n}\n\nfunction subtype_dict_values_fresh_exception() {\n  let a: {[k:string]:A} = {\n    a: new A, // ok, A == A\n    b: new B, // ok, B <: A\n    c: new C, // ok, C <: A\n  };\n\n  let b: {[k:string]:B} = {\n    a: new A, // error, A not <: B\n    b: new B, // ok, B == B\n    c: new C, // ok, C <: A\n  };\n\n  let c: {[k:string]:C} = {\n    a: new A, // error, A not <: C\n    b: new B, // error, A not <: C\n    c: new C, // ok, C == C\n  };\n}\n\n// Actually, unsound_string_conversion_alias_declared_prop behavior makes an\n// argument that we shouldn't really care about this, since we ignore the fact\n// that coercing values to string keys can cause unintended aliasing in general.\n// Barring some compelling use case for that in this context, though, we choose\n// to be strict.\nfunction unification_dict_keys_invariant(\n  x: Array<{[k:B]:any}>,\n) {\n  let a: Array<{[k:A]:any}> = x; // error\n  let b: Array<{[k:B]:any}> = x; // ok\n  let c: Array<{[k:C]:any}> = x; // error\n}\n\nfunction subtype_dict_keys_invariant(\n  x: {[k:B]:any},\n) {\n  let a: {[k:A]:any} = x; // error\n  let b: {[k:B]:any} = x; // ok\n  let c: {[k:C]:any} = x; // error\n}\n\nfunction unification_mix_with_declared_props_invariant_l(\n  x: Array<{[k:string]:B}>,\n) {\n  let a: Array<{[k:string]:B, p:A}> = x; // error: A ~> B\n  a[0].p = new A; // x[0].p no longer B\n\n  let b: Array<{[k:string]:B, p:B}> = x; // ok\n\n  let c: Array<{[k:string]:B, p:C}> = x; // error\n  (x[0].p: C); // not true\n}\n\nfunction unification_mix_with_declared_props_invariant_r(\n  xa: Array<{[k:string]:A, p:B}>,\n  xb: Array<{[k:string]:B, p:B}>,\n  xc: Array<{[k:string]:C, p:B}>,\n) {\n  let a: Array<{[k:string]:A}> = xa; // error\n  a[0].p = new A; // xa[0].p no longer B\n\n  let b: Array<{[k:string]:B}> = xb; // ok\n\n  let c: Array<{[k:string]:C}> = xc; // error\n  (xc[0].p: C); // not true\n}\n\nfunction subtype_mix_with_declared_props_invariant_l(\n  x: {[k:string]:B},\n) {\n  let a: {[k:string]:B, p:A} = x; // error: A ~> B\n  a.p = new A; // x.p no longer B\n\n  let b: {[k:string]:B, p:B} = x; // ok\n\n  let c: {[k:string]:B, p:C} = x; // error\n  (x.p: C); // not true\n}\n\nfunction subtype_mix_with_declared_props_invariant_r(\n  xa: {[k:string]:A, p:B},\n  xb: {[k:string]:B, p:B},\n  xc: {[k:string]:C, p:B},\n) {\n  let a: {[k:string]:A} = xa; // error\n  a.p = new A; // xa.p no longer B\n\n  let b: {[k:string]:B} = xb; // ok\n\n  let c: {[k:string]:C} = xc; // error\n  (xc.p: C); // not true\n}\n\nfunction unification_dict_to_obj(\n  x: Array<{[k:string]:X}>,\n): Array<{p:X}> {\n  return x; // error: if allowed, could write {p:X,q:Y} into `x`\n}\n\nfunction unification_obj_to_dict(\n  x: Array<{p:X}>,\n): Array<{[k:string]:X}> {\n  return x; // error: if allowed, could write {p:X,q:Y} into returned array\n}\n\nfunction subtype_dict_to_obj(\n  x: {[k:string]:B},\n) {\n  let a: {p:A} = x; // error\n  a.p = new A; // x.p no longer B\n\n  let b: {p:B} = x; // ok\n\n  let c: {p:C} = x; // error\n  (x.p: C); // not true\n}\n\nfunction subtype_obj_to_dict(\n  x: {p:B},\n) {\n  let a: {[k:string]:A} = x; // error\n  a.p = new A; // x.p no longer B\n\n  let b: {[k:string]:B} = x;\n\n  let c: {[k:string]:C} = x; // error\n  (x.p: C); // not true\n}\n\n// Only props in l which are not in u must match indexer, but must do so\n// exactly.\nfunction subtype_obj_to_mixed(\n  x: {p:B, x:X},\n) {\n  let a: {[k:string]:A,x:X} = x; // error (as above), but exclusive of x\n  let b: {[k:string]:B,x:X} = x; // ok,\n  let c: {[k:string]:C,x:X} = x; // error (as above), but exclusive of x\n}\n\nfunction unification_dict_to_mixed(\n  x: Array<{[k:string]:B}>,\n) {\n  let a: Array<{[k:string]:B, p:A}> = x; // error\n  let b: Array<{[k:string]:B, p:B}> = x; // ok\n  let c: Array<{[k:string]:B, p:C}> = x; // error\n}\n\nfunction subtype_dict_to_mixed(\n  x: {[k:string]:B},\n) {\n  let a: {[k:string]:B, p:A} = x; // error\n  let b: {[k:string]:B, p:B} = x; // ok\n  let c: {[k:string]:B, p:C} = x; // error\n}\n\nfunction subtype_dict_to_optional_a(\n  x: {[k:string]:B},\n) {\n  let a: {p?:A} = x; // error\n}\n\nfunction subtype_dict_to_optional_b(\n  x: {[k:string]:B},\n) {\n  let b: {p?:B} = x; // ok\n}\n\nfunction subtype_dict_to_optional_c(\n  x: {[k:string]:B},\n) {\n  let c: {p?:C} = x; // error\n}\n\nfunction subtype_optional_a_to_dict(\n  x: {p?:A},\n): {[k:string]:B} { // error: A ~> B\n  return x;\n}\n\nfunction subtype_optional_b_to_dict(\n  x: {p?:B},\n): {[k:string]:B} { // ok\n  return x;\n}\n\nfunction subtype_optional_c_to_dict(\n  x: {p?:C},\n): {[k:string]:B} { // error: C ~> B\n  return x;\n}\n"
  },
  {
    "path": "tests/flow/dictionary/incompatible.js",
    "content": "/* @flow */\n\nvar x : {[key: string]: string} = {};\nvar y : {[key: string]: number} = x; // 2 errors, number !~> string & vice versa\nvar z : {[key: number]: string} = x; // 2 errors, string !~> number & vice versa\n\nvar a : {[key: string]: ?string} = {};\nvar b : {[key: string]: string} = a; // 2 errors (null & undefined)\nvar c : {[key: string]: ?string} = b; // 2 errors, since c['x'] = null updates b\n\n// 2 errors (number !~> string, string !~> number)\nfunction foo0(x: Array<{[key: string]: number}>): Array<{[key: string]: string}> {\n  return x;\n}\n\n// error, fooBar:string !~> number (x's dictionary)\nfunction foo1(\n  x: Array<{[key: string]: number}>\n): Array<{[key: string]: number, fooBar: string}> {\n  return x;\n}\n\nfunction foo2(\n  x: Array<{[key: string]: mixed}>\n): Array<{[key: string]: mixed, fooBar: string}> {\n  x[0].fooBar = 123; // OK, since number ~> mixed (x elem's dictionary)\n  return x; // error: mixed ~> string\n}\n\n// OK, since we assume dictionaries have every key\nfunction foo3(x: {[key: string]: number}): {foo: number} {\n  return x;\n}\n\n// error: foo can't exist in x\nfunction foo4(x: {[key: string]: number}): {[key: string]: number, foo: string} {\n  return x;\n}\n\n// error, some prop in x could be incompatible (covariance)\nfunction foo5(x: Array<{[key: string]: number}>): Array<{foo: number}> {\n  return x;\n}\n\n// error, some prop in return could be incompatible\nfunction foo6(x: Array<{foo: number}>): Array<{[key: string]: number}> {\n  return x;\n}\n\nfunction foo7(x: {bar: string, [key: string]: number}) {\n  (x.bar: string);\n}\n\nfunction foo8(x: {[key: string]: number}) {\n  (x.foo: string); // error\n  (x.foo: number);\n}\n"
  },
  {
    "path": "tests/flow/dictionary/issue-1745.js",
    "content": "/* @flow */\n\nclass A {\n  x: {[k:string]: number};\n\n  m1() {\n    this.x = { bar: 0 }; // no error\n  }\n\n  m2() {\n    this.x.foo = 0; // no error\n  }\n}\n\nclass B {\n  x: {[k:string]: number};\n\n  m2() {\n    this.x.foo = 0; // no error\n  }\n\n  m1() {\n    this.x = { bar: 0 }; // no error\n  }\n}\n"
  },
  {
    "path": "tests/flow/dictionary/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow/dictionary/test.js",
    "content": "type Params = {count: number; [name: string]: string};\ntype QueryFunction = (params: Params) => string;\n\nvar o: { foo: QueryFunction } = {\n  foo(params) {\n    return params.count; // error, number ~/~ string\n  }\n};\n\nmodule.exports = o;\n"
  },
  {
    "path": "tests/flow/dictionary/test_client.js",
    "content": "var o = require('./test');\n\no.foo = function (params) {\n  return params.count; // error, number ~/~ string\n}\n"
  },
  {
    "path": "tests/flow/disjoint-union-perf/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`ast.js 1`] = `\n/**\n * @flow\n */\n\nexport type InferredType =\n  | 'unknown'\n  | 'gender'\n  | 'enum'\n  | 'number-or-string'\n  | 'number'\n  | 'string'\n  | 'error'\n;\n\nexport type Pos = {\n  firstLine: number,\n  firstColumn: number,\n  lastLine: number,\n  lastColumn: number,\n};\n\nexport type TypedBinaryOpNode = {\n  exprNodeType: 'binary_op',\n  binaryOp: 'plus' | 'multiply' | 'divide' | 'minus',\n  lhs: TypedNode,\n  rhs: TypedNode,\n  pos: Pos,\n  exprType: InferredType,\n  typed: true,\n}\n\nexport type TypedUnaryMinusNode = {\n  exprNodeType: 'unary_minus',\n  op: TypedNode,\n  pos: Pos,\n  exprType: InferredType,\n  typed: true,\n}\n\nexport type TypedNumberNode = {\n  exprNodeType: 'number',\n  value: number,\n  pos: Pos,\n  exprType: 'number',\n  typed: true,\n}\n\nexport type TypedStringLiteralNode = {\n  exprNodeType: 'string_literal',\n  value: string,\n  pos: Pos,\n  exprType: 'string',\n  typed: true,\n}\n\nexport type TypedVariableNode = {\n  exprNodeType: 'variable',\n  name: string,\n  pos: Pos,\n  exprType: InferredType,\n  typed: true,\n};\n\nexport type TypedFunctionInvocationNode = {\n  exprNodeType: 'function_invocation',\n  name: string,\n  parameters: TypedNode[],\n  pos: Pos,\n  exprType: 'error' | 'string',\n  typed: true,\n}\n\nexport type TypedNode =\n  | TypedBinaryOpNode\n  | TypedUnaryMinusNode\n  | TypedNumberNode\n  | TypedStringLiteralNode\n  | TypedVariableNode\n  | TypedFunctionInvocationNode\n;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nexport type InferredType =\n  | \"unknown\"\n  | \"gender\"\n  | \"enum\"\n  | \"number-or-string\"\n  | \"number\"\n  | \"string\"\n  | \"error\";\n\nexport type Pos = {\n  firstLine: number,\n  firstColumn: number,\n  lastLine: number,\n  lastColumn: number\n};\n\nexport type TypedBinaryOpNode = {\n  exprNodeType: \"binary_op\",\n  binaryOp: \"plus\" | \"multiply\" | \"divide\" | \"minus\",\n  lhs: TypedNode,\n  rhs: TypedNode,\n  pos: Pos,\n  exprType: InferredType,\n  typed: true\n};\n\nexport type TypedUnaryMinusNode = {\n  exprNodeType: \"unary_minus\",\n  op: TypedNode,\n  pos: Pos,\n  exprType: InferredType,\n  typed: true\n};\n\nexport type TypedNumberNode = {\n  exprNodeType: \"number\",\n  value: number,\n  pos: Pos,\n  exprType: \"number\",\n  typed: true\n};\n\nexport type TypedStringLiteralNode = {\n  exprNodeType: \"string_literal\",\n  value: string,\n  pos: Pos,\n  exprType: \"string\",\n  typed: true\n};\n\nexport type TypedVariableNode = {\n  exprNodeType: \"variable\",\n  name: string,\n  pos: Pos,\n  exprType: InferredType,\n  typed: true\n};\n\nexport type TypedFunctionInvocationNode = {\n  exprNodeType: \"function_invocation\",\n  name: string,\n  parameters: TypedNode[],\n  pos: Pos,\n  exprType: \"error\" | \"string\",\n  typed: true\n};\n\nexport type TypedNode =\n  | TypedBinaryOpNode\n  | TypedUnaryMinusNode\n  | TypedNumberNode\n  | TypedStringLiteralNode\n  | TypedVariableNode\n  | TypedFunctionInvocationNode;\n\n`;\n\nexports[`emit.js 1`] = `\n/**\n * @flow\n */\nimport * as t from './jsAst';\n\nconst b = t.builders;\n\nimport type {\n        TypedNode\n} from './ast';\n\nfunction getBinaryOp(op: 'plus' | 'minus' | 'divide' | 'multiply') : '+' | '-' | '*' | '/' {\n  switch (op) {\n  case 'plus':\n    return '+';\n  case 'minus':\n    return '-';\n  case 'divide':\n    return '/';\n  case 'multiply':\n    return '*';\n  default:\n    throw new Error('Invalid binary operator: ' + op);\n  }\n}\n\nexport function emitExpression(node: TypedNode) : t.Expression {\n  switch (node.exprNodeType) {\n  case 'string_literal': // FALLTHROUGH\n  case 'number':\n    return b.literal(node.value);\n  case 'variable':\n    return b.memberExpression(\n      b.identifier('vars'),\n      b.identifier(node.name),\n      false\n    );\n  case 'binary_op': {\n    const lhs = emitExpression(node.lhs);\n    const rhs = emitExpression(node.rhs);\n\n    const op = getBinaryOp(node.binaryOp);\n    return b.binaryExpression(op, lhs, rhs);\n  }\n  case 'unary_minus': {\n    const operand = emitExpression(node.op);\n    return b.unaryExpression('-', operand, true);\n  }\n  case 'function_invocation': {\n    const callee = b.memberExpression(\n      b.identifier('fns'),\n      b.identifier(node.name),\n      false\n    );\n\n    const args = node.parameters.map(\n      (n) => emitExpression(n)\n    );\n\n    return b.callExpression(callee, args);\n  }\n  default:\n    throw new Error('Unknown expression type: ' + node.type);\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\nimport * as t from \"./jsAst\";\n\nconst b = t.builders;\n\nimport type { TypedNode } from \"./ast\";\n\nfunction getBinaryOp(\n  op: \"plus\" | \"minus\" | \"divide\" | \"multiply\"\n): \"+\" | \"-\" | \"*\" | \"/\" {\n  switch (op) {\n    case \"plus\":\n      return \"+\";\n    case \"minus\":\n      return \"-\";\n    case \"divide\":\n      return \"/\";\n    case \"multiply\":\n      return \"*\";\n    default:\n      throw new Error(\"Invalid binary operator: \" + op);\n  }\n}\n\nexport function emitExpression(node: TypedNode): t.Expression {\n  switch (node.exprNodeType) {\n    case \"string_literal\": // FALLTHROUGH\n    case \"number\":\n      return b.literal(node.value);\n    case \"variable\":\n      return b.memberExpression(\n        b.identifier(\"vars\"),\n        b.identifier(node.name),\n        false\n      );\n    case \"binary_op\": {\n      const lhs = emitExpression(node.lhs);\n      const rhs = emitExpression(node.rhs);\n\n      const op = getBinaryOp(node.binaryOp);\n      return b.binaryExpression(op, lhs, rhs);\n    }\n    case \"unary_minus\": {\n      const operand = emitExpression(node.op);\n      return b.unaryExpression(\"-\", operand, true);\n    }\n    case \"function_invocation\": {\n      const callee = b.memberExpression(\n        b.identifier(\"fns\"),\n        b.identifier(node.name),\n        false\n      );\n\n      const args = node.parameters.map(n => emitExpression(n));\n\n      return b.callExpression(callee, args);\n    }\n    default:\n      throw new Error(\"Unknown expression type: \" + node.type);\n  }\n}\n\n`;\n\nexports[`jsAst.js 1`] = `\n/**\n * @flow\n */\nexport type Comment = {\n  loc: ?SourceLocation,\n  value: string,\n  leading: boolean,\n  trailing: boolean,\n};\n\nexport type SourceLocation = {\n  start: SourcePosition,\n  end: SourcePosition,\n  source: ?string,\n};\n\nexport type SourcePosition = {\n  line: number,\n  column: number,\n};\n\nexport type File = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'File',\n  program: Program,\n}\n\nexport type Program = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'Program',\n  body: Statement[],\n}\n\nexport type BinaryOperator =\n  |'=='\n  | '!='\n  | '==='\n  | '!=='\n  | '<'\n  | '<='\n  | '>'\n  | '>='\n  | '<<'\n  | '>>'\n  | '>>>'\n  | '+'\n  | '-'\n  | '*'\n  | '/'\n  | '%'\n  | '&' // TODO Missing from the Parser API.\n  | '|'\n  | '^'\n  | 'in'\n  | 'instanceof'\n  | '..'\n;\n\nexport type UnaryOperator =\n  | '-'\n  | '+'\n  | '!'\n  | '~'\n  | 'typeof'\n  | 'void'\n  | 'delete'\n;\n\nexport type AssignmentOperator =\n  | '='\n  | '+='\n  | '-='\n  | '*='\n  | '/='\n  | '%='\n  | '<<='\n  | '>>='\n  | '>>>='\n  | '|='\n  | '^='\n  | '&='\n;\n\nexport type UpdateOperator =\n  | '++'\n  | '--'\n;\n\nexport type LogicalOperator =\n  | '&&'\n  | '||'\n;\n\nexport type Node =\n  | EmptyStatement\n  | BlockStatement\n  | ExpressionStatement\n  | IfStatement\n  | BreakStatement\n  | ContinueStatement\n  | ReturnStatement\n  | ThrowStatement\n  | WhileStatement\n  | ForStatement\n  | ForInStatement\n  | TryStatement\n  | CatchClause\n  | Identifier\n  | Literal\n  | ThisExpression\n  | ArrayExpression\n  | ObjectExpreession\n  | Property\n  | FunctionExpression\n  | BinaryExpression\n  | UnaryExpression\n  | AssignmentExpression\n  | UpdateExpression\n  | LogicalExpression\n  | ConditionalExpression\n  | NewExpression\n  | CallExpression\n  | MemberExpression\n  | VariableDeclaration\n  | FunctionDeclaration\n  | VariableDeclarator\n;\n\nexport type Statement =\n  | BlockStatement\n  | EmptyStatement\n  | ExpressionStatement\n  | IfStatement\n  | BreakStatement\n  | ContinueStatement\n  | ReturnStatement\n  | ThrowStatement\n  | WhileStatement\n  | ForStatement\n  | ForInStatement\n  | TryStatement\n  | Declaration\n;\n\nexport type EmptyStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'EmptyStatement',\n}\n\nexport type BlockStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'BlockStatement',\n  body: Statement[],\n}\n\nexport type ExpressionStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'ExpressionStatement',\n  expression: Expression,\n}\n\nexport type IfStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'IfStatement',\n  test: Expression,\n  consequent: Statement,\n  alternate: ?Statement,\n}\n\nexport type BreakStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'BreakStatement',\n  label: ?Identifier,\n}\n\nexport type ContinueStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'ContinueStatement',\n  label: ?Identifier,\n}\n\nexport type ReturnStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'ReturnStatement',\n  argument: ?Expression,\n}\n\nexport type ThrowStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'ThrowStatement',\n  argument: ?Expression,\n}\n\nexport type WhileStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'WhileStatement',\n  test: Expression,\n  body: Statement,\n}\n\nexport type ForStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'ForStatement',\n  init: ?(VariableDeclaration | Expression),\n  test: ?Expression,\n  update: ?Expression,\n  body: Statement,\n}\n\nexport type ForInStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'ForInStatement',\n  left: VariableDeclaration | Expression,\n  right: Expression,\n  body: Statement,\n}\n\nexport type TryStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'TryStatement',\n  block: BlockStatement,\n  handler: ?CatchClause,\n  handlers: CatchClause[],\n  finalizer: ?BlockStatement,\n};\n\nexport type CatchClause = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'CatchClause',\n  param: Pattern,\n  guard: ?Expression,\n  body: BlockStatement,\n};\n\nexport type Expression =\n  | Identifier\n  | ThisExpression\n  | Literal\n  | FunctionExpression\n  | BinaryExpression\n  | UnaryExpression\n  | AssignmentExpression\n  | UpdateExpression\n  | LogicalExpression\n  | ConditionalExpression\n  | NewExpression\n  | CallExpression\n  | MemberExpression\n  | ArrayExpression\n  | ObjectExpreession\n;\n\nexport type Identifier = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'Identifier',\n  name: string,\n}\n\nexport type Literal = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'Literal',\n  value: ?(string | boolean | number | RegExp),\n  regex: ?{ pattern: string, flags: string },\n}\n\nexport type ThisExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'ThisExpression',\n}\n\nexport type ArrayExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'ArrayExpression',\n  elements: Expression[],\n}\n\nexport type ObjectExpreession = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'ObjectExpression',\n  properties: Property[],\n}\n\nexport type Property = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'Property',\n  kind: 'init' | 'get' | 'set',\n  key: Literal | Identifier,\n  value: Expression,\n};\n\nexport type FunctionExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'FunctionExpression',\n  id: ?Identifier,\n  params: Pattern[],\n  body: BlockStatement,\n}\n\nexport type BinaryExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'BinaryExpression',\n  operator: BinaryOperator,\n  left: Expression,\n  right: Expression,\n}\n\nexport type UnaryExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'UnaryExpression',\n  operator: UnaryOperator,\n  argument: Expression,\n  prefix: boolean,\n};\n\nexport type AssignmentExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'AssignmentExpression',\n  operator: AssignmentOperator,\n  left: Pattern,\n  right: Expression,\n};\n\nexport type UpdateExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'UpdateExpression',\n  operator: UpdateOperator,\n  argument: Expression,\n  prefix: boolean,\n};\n\nexport type LogicalExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'LogicalExpression',\n  operator: LogicalOperator,\n  left: Expression,\n  right: Expression,\n};\n\nexport type ConditionalExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'ConditionalExpression',\n  test: Expression,\n  consequent: Expression,\n  alternate: Expression,\n};\n\nexport type NewExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'NewExpression',\n  callee: Expression,\n  arguments: Expression[],\n};\n\nexport type CallExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'CallExpression',\n  callee: Expression,\n  arguments: Expression[],\n};\n\nexport type MemberExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'MemberExpression',\n  object: Expression,\n  property: Identifier | Expression,\n  computed: bool,\n}\n// ast-types exports all expressions as patterns.\n// That seems not like it was intended.\nexport type Pattern =\n  | Identifier\n;\n\nexport type Declaration =\n  | VariableDeclaration\n  | FunctionDeclaration\n;\n\nexport type VariableDeclaration = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'VariableDeclaration',\n  kind: 'var' | 'let' | 'const',\n  declarations: VariableDeclarator[],\n}\n\nexport type FunctionDeclaration = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'FunctionDeclaration',\n  id: Identifier,\n  body: BlockStatement,\n  params: Pattern[],\n}\n\nexport type VariableDeclarator = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'VariableDeclarator',\n  id: Pattern,\n  init: ?Expression,\n}\n\nconst a : any = null;\n\nexport const builders : {\n  emptyStatement() : EmptyStatement,\n  blockStatement(\n    body: Statement[]\n  ) : BlockStatement,\n  expressionStatement(\n    expression: Expression\n  ) : ExpressionStatement,\n  ifStatement(\n    test: Expression,\n    consequent: Statement,\n    alternate?: Statement\n  ) : IfStatement,\n  breakStatement(\n    label?: Identifier\n  ) : BreakStatement,\n  continueStatement(\n    label?: Identifier\n  ) : ContinueStatement,\n  returnStatement(\n    argument: ?Expression\n  ) : ReturnStatement,\n  throwStatement(\n    argument: ?Expression\n  ) : ThrowStatement,\n  whileStatement(\n    test: Expression,\n    body: Statement\n  ) : WhileStatement,\n  forStatement(\n    init: ?(VariableDeclaration | Expression),\n    test: ?Expression,\n    update: ?Expression,\n    body: Statement\n  ) : ForStatement,\n  forInStatement(\n    left: VariableDeclaration | Expression,\n    right: Expression,\n    body: Statement\n  ) : ForInStatement,\n  tryStatement(\n    block: BlockStatement,\n    handler: ?CatchClause,\n    handlers: CatchClause[],\n    finalizer?: BlockStatement\n  ) : TryStatement,\n  catchClause(\n    param: Pattern,\n    guard: ?Expression,\n    body: BlockStatement\n  ) : CatchClause,\n  identifier(\n    name: string\n  ) : Identifier,\n  literal(\n    value: ?(string | boolean | number | RegExp),\n    regex?: { pattern: string, flags: string }\n  ) : Literal,\n  thisExpression() : ThisExpression,\n  arrayExpression(\n    elements: Expression[]\n  ) : ArrayExpression,\n  objectExpreession(\n    properties: Property[]\n  ) : ObjectExpreession,\n  property(\n    kind: 'init' | 'get' | 'set',\n    key: Literal | Identifier,\n    value: Expression\n  ) : Property,\n  functionExpression(\n    id: ?Identifier,\n    params: Pattern[],\n    body: BlockStatement\n  ) : FunctionExpression,\n  binaryExpression(\n    operator: BinaryOperator,\n    left: Expression,\n    right: Expression\n  ) : BinaryExpression,\n  unaryExpression(\n    operator: UnaryOperator,\n    argument: Expression,\n    prefix: boolean\n  ) : UnaryExpression,\n  assignmentExpression(\n    operator: AssignmentOperator,\n    left: Pattern,\n    right: Expression\n  ) : AssignmentExpression,\n  updateExpression(\n    operator: UpdateOperator,\n    argument: Expression,\n    prefix: boolean\n  ) : UpdateExpression,\n  logicalExpression(\n    operator: LogicalOperator,\n    left: Expression,\n    right: Expression\n  ) : LogicalExpression,\n  conditionalExpression(\n    test: Expression,\n    consequent: Expression,\n    alternate: Expression\n  ) : ConditionalExpression,\n  newExpression(\n    callee: Expression,\n    arguments: Expression[]\n  ) : NewExpression,\n  callExpression(\n    callee: Expression,\n    arguments: Expression[]\n  ) : CallExpression,\n  memberExpression(\n    object: Expression,\n    property: Identifier | Expression,\n    computed: bool\n  ) : MemberExpression,\n  variableDeclaration(\n    kind: 'var' | 'let' | 'const',\n    declarations: VariableDeclarator[]\n  ) : VariableDeclaration,\n  functionDeclaration(\n    id: Identifier,\n    body: BlockStatement,\n    params: Pattern[]\n  ) : FunctionDeclaration,\n  variableDeclarator(\n    id: Pattern,\n    init?: Expression\n  ) : VariableDeclarator,\n} = a;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\nexport type Comment = {\n  loc: ?SourceLocation,\n  value: string,\n  leading: boolean,\n  trailing: boolean\n};\n\nexport type SourceLocation = {\n  start: SourcePosition,\n  end: SourcePosition,\n  source: ?string\n};\n\nexport type SourcePosition = {\n  line: number,\n  column: number\n};\n\nexport type File = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"File\",\n  program: Program\n};\n\nexport type Program = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"Program\",\n  body: Statement[]\n};\n\nexport type BinaryOperator =\n  | \"==\"\n  | \"!=\"\n  | \"===\"\n  | \"!==\"\n  | \"<\"\n  | \"<=\"\n  | \">\"\n  | \">=\"\n  | \"<<\"\n  | \">>\"\n  | \">>>\"\n  | \"+\"\n  | \"-\"\n  | \"*\"\n  | \"/\"\n  | \"%\"\n  | \"&\" // TODO Missing from the Parser API.\n  | \"|\"\n  | \"^\"\n  | \"in\"\n  | \"instanceof\"\n  | \"..\";\n\nexport type UnaryOperator =\n  | \"-\"\n  | \"+\"\n  | \"!\"\n  | \"~\"\n  | \"typeof\"\n  | \"void\"\n  | \"delete\";\n\nexport type AssignmentOperator =\n  | \"=\"\n  | \"+=\"\n  | \"-=\"\n  | \"*=\"\n  | \"/=\"\n  | \"%=\"\n  | \"<<=\"\n  | \">>=\"\n  | \">>>=\"\n  | \"|=\"\n  | \"^=\"\n  | \"&=\";\n\nexport type UpdateOperator = \"++\" | \"--\";\n\nexport type LogicalOperator = \"&&\" | \"||\";\n\nexport type Node =\n  | EmptyStatement\n  | BlockStatement\n  | ExpressionStatement\n  | IfStatement\n  | BreakStatement\n  | ContinueStatement\n  | ReturnStatement\n  | ThrowStatement\n  | WhileStatement\n  | ForStatement\n  | ForInStatement\n  | TryStatement\n  | CatchClause\n  | Identifier\n  | Literal\n  | ThisExpression\n  | ArrayExpression\n  | ObjectExpreession\n  | Property\n  | FunctionExpression\n  | BinaryExpression\n  | UnaryExpression\n  | AssignmentExpression\n  | UpdateExpression\n  | LogicalExpression\n  | ConditionalExpression\n  | NewExpression\n  | CallExpression\n  | MemberExpression\n  | VariableDeclaration\n  | FunctionDeclaration\n  | VariableDeclarator;\n\nexport type Statement =\n  | BlockStatement\n  | EmptyStatement\n  | ExpressionStatement\n  | IfStatement\n  | BreakStatement\n  | ContinueStatement\n  | ReturnStatement\n  | ThrowStatement\n  | WhileStatement\n  | ForStatement\n  | ForInStatement\n  | TryStatement\n  | Declaration;\n\nexport type EmptyStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"EmptyStatement\"\n};\n\nexport type BlockStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"BlockStatement\",\n  body: Statement[]\n};\n\nexport type ExpressionStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"ExpressionStatement\",\n  expression: Expression\n};\n\nexport type IfStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"IfStatement\",\n  test: Expression,\n  consequent: Statement,\n  alternate: ?Statement\n};\n\nexport type BreakStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"BreakStatement\",\n  label: ?Identifier\n};\n\nexport type ContinueStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"ContinueStatement\",\n  label: ?Identifier\n};\n\nexport type ReturnStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"ReturnStatement\",\n  argument: ?Expression\n};\n\nexport type ThrowStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"ThrowStatement\",\n  argument: ?Expression\n};\n\nexport type WhileStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"WhileStatement\",\n  test: Expression,\n  body: Statement\n};\n\nexport type ForStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"ForStatement\",\n  init: ?(VariableDeclaration | Expression),\n  test: ?Expression,\n  update: ?Expression,\n  body: Statement\n};\n\nexport type ForInStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"ForInStatement\",\n  left: VariableDeclaration | Expression,\n  right: Expression,\n  body: Statement\n};\n\nexport type TryStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"TryStatement\",\n  block: BlockStatement,\n  handler: ?CatchClause,\n  handlers: CatchClause[],\n  finalizer: ?BlockStatement\n};\n\nexport type CatchClause = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"CatchClause\",\n  param: Pattern,\n  guard: ?Expression,\n  body: BlockStatement\n};\n\nexport type Expression =\n  | Identifier\n  | ThisExpression\n  | Literal\n  | FunctionExpression\n  | BinaryExpression\n  | UnaryExpression\n  | AssignmentExpression\n  | UpdateExpression\n  | LogicalExpression\n  | ConditionalExpression\n  | NewExpression\n  | CallExpression\n  | MemberExpression\n  | ArrayExpression\n  | ObjectExpreession;\n\nexport type Identifier = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"Identifier\",\n  name: string\n};\n\nexport type Literal = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"Literal\",\n  value: ?(string | boolean | number | RegExp),\n  regex: ?{ pattern: string, flags: string }\n};\n\nexport type ThisExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"ThisExpression\"\n};\n\nexport type ArrayExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"ArrayExpression\",\n  elements: Expression[]\n};\n\nexport type ObjectExpreession = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"ObjectExpression\",\n  properties: Property[]\n};\n\nexport type Property = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"Property\",\n  kind: \"init\" | \"get\" | \"set\",\n  key: Literal | Identifier,\n  value: Expression\n};\n\nexport type FunctionExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"FunctionExpression\",\n  id: ?Identifier,\n  params: Pattern[],\n  body: BlockStatement\n};\n\nexport type BinaryExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"BinaryExpression\",\n  operator: BinaryOperator,\n  left: Expression,\n  right: Expression\n};\n\nexport type UnaryExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"UnaryExpression\",\n  operator: UnaryOperator,\n  argument: Expression,\n  prefix: boolean\n};\n\nexport type AssignmentExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"AssignmentExpression\",\n  operator: AssignmentOperator,\n  left: Pattern,\n  right: Expression\n};\n\nexport type UpdateExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"UpdateExpression\",\n  operator: UpdateOperator,\n  argument: Expression,\n  prefix: boolean\n};\n\nexport type LogicalExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"LogicalExpression\",\n  operator: LogicalOperator,\n  left: Expression,\n  right: Expression\n};\n\nexport type ConditionalExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"ConditionalExpression\",\n  test: Expression,\n  consequent: Expression,\n  alternate: Expression\n};\n\nexport type NewExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"NewExpression\",\n  callee: Expression,\n  arguments: Expression[]\n};\n\nexport type CallExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"CallExpression\",\n  callee: Expression,\n  arguments: Expression[]\n};\n\nexport type MemberExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"MemberExpression\",\n  object: Expression,\n  property: Identifier | Expression,\n  computed: boolean\n};\n// ast-types exports all expressions as patterns.\n// That seems not like it was intended.\nexport type Pattern = Identifier;\n\nexport type Declaration = VariableDeclaration | FunctionDeclaration;\n\nexport type VariableDeclaration = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"VariableDeclaration\",\n  kind: \"var\" | \"let\" | \"const\",\n  declarations: VariableDeclarator[]\n};\n\nexport type FunctionDeclaration = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"FunctionDeclaration\",\n  id: Identifier,\n  body: BlockStatement,\n  params: Pattern[]\n};\n\nexport type VariableDeclarator = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: \"VariableDeclarator\",\n  id: Pattern,\n  init: ?Expression\n};\n\nconst a: any = null;\n\nexport const builders: {\n  emptyStatement(): EmptyStatement,\n  blockStatement(body: Statement[]): BlockStatement,\n  expressionStatement(expression: Expression): ExpressionStatement,\n  ifStatement(\n    test: Expression,\n    consequent: Statement,\n    alternate?: Statement\n  ): IfStatement,\n  breakStatement(label?: Identifier): BreakStatement,\n  continueStatement(label?: Identifier): ContinueStatement,\n  returnStatement(argument: ?Expression): ReturnStatement,\n  throwStatement(argument: ?Expression): ThrowStatement,\n  whileStatement(test: Expression, body: Statement): WhileStatement,\n  forStatement(\n    init: ?(VariableDeclaration | Expression),\n    test: ?Expression,\n    update: ?Expression,\n    body: Statement\n  ): ForStatement,\n  forInStatement(\n    left: VariableDeclaration | Expression,\n    right: Expression,\n    body: Statement\n  ): ForInStatement,\n  tryStatement(\n    block: BlockStatement,\n    handler: ?CatchClause,\n    handlers: CatchClause[],\n    finalizer?: BlockStatement\n  ): TryStatement,\n  catchClause(\n    param: Pattern,\n    guard: ?Expression,\n    body: BlockStatement\n  ): CatchClause,\n  identifier(name: string): Identifier,\n  literal(\n    value: ?(string | boolean | number | RegExp),\n    regex?: { pattern: string, flags: string }\n  ): Literal,\n  thisExpression(): ThisExpression,\n  arrayExpression(elements: Expression[]): ArrayExpression,\n  objectExpreession(properties: Property[]): ObjectExpreession,\n  property(\n    kind: \"init\" | \"get\" | \"set\",\n    key: Literal | Identifier,\n    value: Expression\n  ): Property,\n  functionExpression(\n    id: ?Identifier,\n    params: Pattern[],\n    body: BlockStatement\n  ): FunctionExpression,\n  binaryExpression(\n    operator: BinaryOperator,\n    left: Expression,\n    right: Expression\n  ): BinaryExpression,\n  unaryExpression(\n    operator: UnaryOperator,\n    argument: Expression,\n    prefix: boolean\n  ): UnaryExpression,\n  assignmentExpression(\n    operator: AssignmentOperator,\n    left: Pattern,\n    right: Expression\n  ): AssignmentExpression,\n  updateExpression(\n    operator: UpdateOperator,\n    argument: Expression,\n    prefix: boolean\n  ): UpdateExpression,\n  logicalExpression(\n    operator: LogicalOperator,\n    left: Expression,\n    right: Expression\n  ): LogicalExpression,\n  conditionalExpression(\n    test: Expression,\n    consequent: Expression,\n    alternate: Expression\n  ): ConditionalExpression,\n  newExpression(callee: Expression, arguments: Expression[]): NewExpression,\n  callExpression(callee: Expression, arguments: Expression[]): CallExpression,\n  memberExpression(\n    object: Expression,\n    property: Identifier | Expression,\n    computed: boolean\n  ): MemberExpression,\n  variableDeclaration(\n    kind: \"var\" | \"let\" | \"const\",\n    declarations: VariableDeclarator[]\n  ): VariableDeclaration,\n  functionDeclaration(\n    id: Identifier,\n    body: BlockStatement,\n    params: Pattern[]\n  ): FunctionDeclaration,\n  variableDeclarator(id: Pattern, init?: Expression): VariableDeclarator\n} = a;\n\n`;\n"
  },
  {
    "path": "tests/flow/disjoint-union-perf/ast.js",
    "content": "/**\n * @flow\n */\n\nexport type InferredType =\n  | 'unknown'\n  | 'gender'\n  | 'enum'\n  | 'number-or-string'\n  | 'number'\n  | 'string'\n  | 'error'\n;\n\nexport type Pos = {\n  firstLine: number,\n  firstColumn: number,\n  lastLine: number,\n  lastColumn: number,\n};\n\nexport type TypedBinaryOpNode = {\n  exprNodeType: 'binary_op',\n  binaryOp: 'plus' | 'multiply' | 'divide' | 'minus',\n  lhs: TypedNode,\n  rhs: TypedNode,\n  pos: Pos,\n  exprType: InferredType,\n  typed: true,\n}\n\nexport type TypedUnaryMinusNode = {\n  exprNodeType: 'unary_minus',\n  op: TypedNode,\n  pos: Pos,\n  exprType: InferredType,\n  typed: true,\n}\n\nexport type TypedNumberNode = {\n  exprNodeType: 'number',\n  value: number,\n  pos: Pos,\n  exprType: 'number',\n  typed: true,\n}\n\nexport type TypedStringLiteralNode = {\n  exprNodeType: 'string_literal',\n  value: string,\n  pos: Pos,\n  exprType: 'string',\n  typed: true,\n}\n\nexport type TypedVariableNode = {\n  exprNodeType: 'variable',\n  name: string,\n  pos: Pos,\n  exprType: InferredType,\n  typed: true,\n};\n\nexport type TypedFunctionInvocationNode = {\n  exprNodeType: 'function_invocation',\n  name: string,\n  parameters: TypedNode[],\n  pos: Pos,\n  exprType: 'error' | 'string',\n  typed: true,\n}\n\nexport type TypedNode =\n  | TypedBinaryOpNode\n  | TypedUnaryMinusNode\n  | TypedNumberNode\n  | TypedStringLiteralNode\n  | TypedVariableNode\n  | TypedFunctionInvocationNode\n;\n"
  },
  {
    "path": "tests/flow/disjoint-union-perf/emit.js",
    "content": "/**\n * @flow\n */\nimport * as t from './jsAst';\n\nconst b = t.builders;\n\nimport type {\n        TypedNode\n} from './ast';\n\nfunction getBinaryOp(op: 'plus' | 'minus' | 'divide' | 'multiply') : '+' | '-' | '*' | '/' {\n  switch (op) {\n  case 'plus':\n    return '+';\n  case 'minus':\n    return '-';\n  case 'divide':\n    return '/';\n  case 'multiply':\n    return '*';\n  default:\n    throw new Error('Invalid binary operator: ' + op);\n  }\n}\n\nexport function emitExpression(node: TypedNode) : t.Expression {\n  switch (node.exprNodeType) {\n  case 'string_literal': // FALLTHROUGH\n  case 'number':\n    return b.literal(node.value);\n  case 'variable':\n    return b.memberExpression(\n      b.identifier('vars'),\n      b.identifier(node.name),\n      false\n    );\n  case 'binary_op': {\n    const lhs = emitExpression(node.lhs);\n    const rhs = emitExpression(node.rhs);\n\n    const op = getBinaryOp(node.binaryOp);\n    return b.binaryExpression(op, lhs, rhs);\n  }\n  case 'unary_minus': {\n    const operand = emitExpression(node.op);\n    return b.unaryExpression('-', operand, true);\n  }\n  case 'function_invocation': {\n    const callee = b.memberExpression(\n      b.identifier('fns'),\n      b.identifier(node.name),\n      false\n    );\n\n    const args = node.parameters.map(\n      (n) => emitExpression(n)\n    );\n\n    return b.callExpression(callee, args);\n  }\n  default:\n    throw new Error('Unknown expression type: ' + node.type);\n  }\n}\n"
  },
  {
    "path": "tests/flow/disjoint-union-perf/jsAst.js",
    "content": "/**\n * @flow\n */\nexport type Comment = {\n  loc: ?SourceLocation,\n  value: string,\n  leading: boolean,\n  trailing: boolean,\n};\n\nexport type SourceLocation = {\n  start: SourcePosition,\n  end: SourcePosition,\n  source: ?string,\n};\n\nexport type SourcePosition = {\n  line: number,\n  column: number,\n};\n\nexport type File = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'File',\n  program: Program,\n}\n\nexport type Program = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'Program',\n  body: Statement[],\n}\n\nexport type BinaryOperator =\n  |'=='\n  | '!='\n  | '==='\n  | '!=='\n  | '<'\n  | '<='\n  | '>'\n  | '>='\n  | '<<'\n  | '>>'\n  | '>>>'\n  | '+'\n  | '-'\n  | '*'\n  | '/'\n  | '%'\n  | '&' // TODO Missing from the Parser API.\n  | '|'\n  | '^'\n  | 'in'\n  | 'instanceof'\n  | '..'\n;\n\nexport type UnaryOperator =\n  | '-'\n  | '+'\n  | '!'\n  | '~'\n  | 'typeof'\n  | 'void'\n  | 'delete'\n;\n\nexport type AssignmentOperator =\n  | '='\n  | '+='\n  | '-='\n  | '*='\n  | '/='\n  | '%='\n  | '<<='\n  | '>>='\n  | '>>>='\n  | '|='\n  | '^='\n  | '&='\n;\n\nexport type UpdateOperator =\n  | '++'\n  | '--'\n;\n\nexport type LogicalOperator =\n  | '&&'\n  | '||'\n;\n\nexport type Node =\n  | EmptyStatement\n  | BlockStatement\n  | ExpressionStatement\n  | IfStatement\n  | BreakStatement\n  | ContinueStatement\n  | ReturnStatement\n  | ThrowStatement\n  | WhileStatement\n  | ForStatement\n  | ForInStatement\n  | TryStatement\n  | CatchClause\n  | Identifier\n  | Literal\n  | ThisExpression\n  | ArrayExpression\n  | ObjectExpreession\n  | Property\n  | FunctionExpression\n  | BinaryExpression\n  | UnaryExpression\n  | AssignmentExpression\n  | UpdateExpression\n  | LogicalExpression\n  | ConditionalExpression\n  | NewExpression\n  | CallExpression\n  | MemberExpression\n  | VariableDeclaration\n  | FunctionDeclaration\n  | VariableDeclarator\n;\n\nexport type Statement =\n  | BlockStatement\n  | EmptyStatement\n  | ExpressionStatement\n  | IfStatement\n  | BreakStatement\n  | ContinueStatement\n  | ReturnStatement\n  | ThrowStatement\n  | WhileStatement\n  | ForStatement\n  | ForInStatement\n  | TryStatement\n  | Declaration\n;\n\nexport type EmptyStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'EmptyStatement',\n}\n\nexport type BlockStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'BlockStatement',\n  body: Statement[],\n}\n\nexport type ExpressionStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'ExpressionStatement',\n  expression: Expression,\n}\n\nexport type IfStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'IfStatement',\n  test: Expression,\n  consequent: Statement,\n  alternate: ?Statement,\n}\n\nexport type BreakStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'BreakStatement',\n  label: ?Identifier,\n}\n\nexport type ContinueStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'ContinueStatement',\n  label: ?Identifier,\n}\n\nexport type ReturnStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'ReturnStatement',\n  argument: ?Expression,\n}\n\nexport type ThrowStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'ThrowStatement',\n  argument: ?Expression,\n}\n\nexport type WhileStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'WhileStatement',\n  test: Expression,\n  body: Statement,\n}\n\nexport type ForStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'ForStatement',\n  init: ?(VariableDeclaration | Expression),\n  test: ?Expression,\n  update: ?Expression,\n  body: Statement,\n}\n\nexport type ForInStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'ForInStatement',\n  left: VariableDeclaration | Expression,\n  right: Expression,\n  body: Statement,\n}\n\nexport type TryStatement = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'TryStatement',\n  block: BlockStatement,\n  handler: ?CatchClause,\n  handlers: CatchClause[],\n  finalizer: ?BlockStatement,\n};\n\nexport type CatchClause = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'CatchClause',\n  param: Pattern,\n  guard: ?Expression,\n  body: BlockStatement,\n};\n\nexport type Expression =\n  | Identifier\n  | ThisExpression\n  | Literal\n  | FunctionExpression\n  | BinaryExpression\n  | UnaryExpression\n  | AssignmentExpression\n  | UpdateExpression\n  | LogicalExpression\n  | ConditionalExpression\n  | NewExpression\n  | CallExpression\n  | MemberExpression\n  | ArrayExpression\n  | ObjectExpreession\n;\n\nexport type Identifier = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'Identifier',\n  name: string,\n}\n\nexport type Literal = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'Literal',\n  value: ?(string | boolean | number | RegExp),\n  regex: ?{ pattern: string, flags: string },\n}\n\nexport type ThisExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'ThisExpression',\n}\n\nexport type ArrayExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'ArrayExpression',\n  elements: Expression[],\n}\n\nexport type ObjectExpreession = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'ObjectExpression',\n  properties: Property[],\n}\n\nexport type Property = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'Property',\n  kind: 'init' | 'get' | 'set',\n  key: Literal | Identifier,\n  value: Expression,\n};\n\nexport type FunctionExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'FunctionExpression',\n  id: ?Identifier,\n  params: Pattern[],\n  body: BlockStatement,\n}\n\nexport type BinaryExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'BinaryExpression',\n  operator: BinaryOperator,\n  left: Expression,\n  right: Expression,\n}\n\nexport type UnaryExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'UnaryExpression',\n  operator: UnaryOperator,\n  argument: Expression,\n  prefix: boolean,\n};\n\nexport type AssignmentExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'AssignmentExpression',\n  operator: AssignmentOperator,\n  left: Pattern,\n  right: Expression,\n};\n\nexport type UpdateExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'UpdateExpression',\n  operator: UpdateOperator,\n  argument: Expression,\n  prefix: boolean,\n};\n\nexport type LogicalExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'LogicalExpression',\n  operator: LogicalOperator,\n  left: Expression,\n  right: Expression,\n};\n\nexport type ConditionalExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'ConditionalExpression',\n  test: Expression,\n  consequent: Expression,\n  alternate: Expression,\n};\n\nexport type NewExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'NewExpression',\n  callee: Expression,\n  arguments: Expression[],\n};\n\nexport type CallExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'CallExpression',\n  callee: Expression,\n  arguments: Expression[],\n};\n\nexport type MemberExpression = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'MemberExpression',\n  object: Expression,\n  property: Identifier | Expression,\n  computed: bool,\n}\n// ast-types exports all expressions as patterns.\n// That seems not like it was intended.\nexport type Pattern =\n  | Identifier\n;\n\nexport type Declaration =\n  | VariableDeclaration\n  | FunctionDeclaration\n;\n\nexport type VariableDeclaration = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'VariableDeclaration',\n  kind: 'var' | 'let' | 'const',\n  declarations: VariableDeclarator[],\n}\n\nexport type FunctionDeclaration = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'FunctionDeclaration',\n  id: Identifier,\n  body: BlockStatement,\n  params: Pattern[],\n}\n\nexport type VariableDeclarator = {\n  source: ?string,\n  start: SourcePosition,\n  end: SourcePosition,\n  comments: ?Array<Comment>,\n  type: 'VariableDeclarator',\n  id: Pattern,\n  init: ?Expression,\n}\n\nconst a : any = null;\n\nexport const builders : {\n  emptyStatement() : EmptyStatement,\n  blockStatement(\n    body: Statement[]\n  ) : BlockStatement,\n  expressionStatement(\n    expression: Expression\n  ) : ExpressionStatement,\n  ifStatement(\n    test: Expression,\n    consequent: Statement,\n    alternate?: Statement\n  ) : IfStatement,\n  breakStatement(\n    label?: Identifier\n  ) : BreakStatement,\n  continueStatement(\n    label?: Identifier\n  ) : ContinueStatement,\n  returnStatement(\n    argument: ?Expression\n  ) : ReturnStatement,\n  throwStatement(\n    argument: ?Expression\n  ) : ThrowStatement,\n  whileStatement(\n    test: Expression,\n    body: Statement\n  ) : WhileStatement,\n  forStatement(\n    init: ?(VariableDeclaration | Expression),\n    test: ?Expression,\n    update: ?Expression,\n    body: Statement\n  ) : ForStatement,\n  forInStatement(\n    left: VariableDeclaration | Expression,\n    right: Expression,\n    body: Statement\n  ) : ForInStatement,\n  tryStatement(\n    block: BlockStatement,\n    handler: ?CatchClause,\n    handlers: CatchClause[],\n    finalizer?: BlockStatement\n  ) : TryStatement,\n  catchClause(\n    param: Pattern,\n    guard: ?Expression,\n    body: BlockStatement\n  ) : CatchClause,\n  identifier(\n    name: string\n  ) : Identifier,\n  literal(\n    value: ?(string | boolean | number | RegExp),\n    regex?: { pattern: string, flags: string }\n  ) : Literal,\n  thisExpression() : ThisExpression,\n  arrayExpression(\n    elements: Expression[]\n  ) : ArrayExpression,\n  objectExpreession(\n    properties: Property[]\n  ) : ObjectExpreession,\n  property(\n    kind: 'init' | 'get' | 'set',\n    key: Literal | Identifier,\n    value: Expression\n  ) : Property,\n  functionExpression(\n    id: ?Identifier,\n    params: Pattern[],\n    body: BlockStatement\n  ) : FunctionExpression,\n  binaryExpression(\n    operator: BinaryOperator,\n    left: Expression,\n    right: Expression\n  ) : BinaryExpression,\n  unaryExpression(\n    operator: UnaryOperator,\n    argument: Expression,\n    prefix: boolean\n  ) : UnaryExpression,\n  assignmentExpression(\n    operator: AssignmentOperator,\n    left: Pattern,\n    right: Expression\n  ) : AssignmentExpression,\n  updateExpression(\n    operator: UpdateOperator,\n    argument: Expression,\n    prefix: boolean\n  ) : UpdateExpression,\n  logicalExpression(\n    operator: LogicalOperator,\n    left: Expression,\n    right: Expression\n  ) : LogicalExpression,\n  conditionalExpression(\n    test: Expression,\n    consequent: Expression,\n    alternate: Expression\n  ) : ConditionalExpression,\n  newExpression(\n    callee: Expression,\n    arguments: Expression[]\n  ) : NewExpression,\n  callExpression(\n    callee: Expression,\n    arguments: Expression[]\n  ) : CallExpression,\n  memberExpression(\n    object: Expression,\n    property: Identifier | Expression,\n    computed: bool\n  ) : MemberExpression,\n  variableDeclaration(\n    kind: 'var' | 'let' | 'const',\n    declarations: VariableDeclarator[]\n  ) : VariableDeclaration,\n  functionDeclaration(\n    id: Identifier,\n    body: BlockStatement,\n    params: Pattern[]\n  ) : FunctionDeclaration,\n  variableDeclarator(\n    id: Pattern,\n    init?: Expression\n  ) : VariableDeclarator,\n} = a;\n"
  },
  {
    "path": "tests/flow/disjoint-union-perf/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/docblock_flow/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`license_with_flow.js 1`] = `\n/* Copyright example */\n/* @flow */\n\n(\"\": void); // error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* Copyright example */\n/* @flow */\n\n(\"\": void); // error\n\n`;\n\nexports[`max_header_tokens.js 1`] = `\n/* @flow */\n/* second token */\n/* third token */\n/**\n * After max_header_tokens (in .flowconfig), we no longer care:\n *\n * @flow\n */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n/* second token */\n/* third token */\n/**\n * After max_header_tokens (in .flowconfig), we no longer care:\n *\n * @flow\n */\n\n`;\n\nexports[`multiple_flows_1.js 1`] = `\n/* @flow */\n/* @flow */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n/* @flow */\n\n`;\n\nexports[`multiple_flows_2.js 1`] = `\n/**\n * @flow\n * @noflow\n */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n * @noflow\n */\n\n`;\n\nexports[`multiple_providesModule_1.js 1`] = `\n/**\n * @providesModule Foo\n * @providesModule Bar\n * @flow\n */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule Foo\n * @providesModule Bar\n * @flow\n */\n\n`;\n\nexports[`multiple_providesModule_2.js 1`] = `\n/**\n * @providesModule Foo\n * @flow\n */\n/**\n * @providesModule Bar\n */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule Foo\n * @flow\n */\n/**\n * @providesModule Bar\n */\n\n`;\n\nexports[`use_strict_with_flow.js 1`] = `\n\"use strict\";\n/* @flow */\n\n(\"\": void); // error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\"use strict\";\n/* @flow */\n\n(\"\": void); // error\n\n`;\n\nexports[`with_flow.js 1`] = `\n/* @flow */\n\n(\"\": void); // error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n(\"\": void); // error\n\n`;\n\nexports[`without_flow.js 1`] = `\n/* some other comment */\n\n(\"\": void); // no error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* some other comment */\n\n(\"\": void); // no error\n\n`;\n"
  },
  {
    "path": "tests/flow/docblock_flow/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/docblock_flow/license_with_flow.js",
    "content": "/* Copyright example */\n/* @flow */\n\n(\"\": void); // error\n"
  },
  {
    "path": "tests/flow/docblock_flow/max_header_tokens.js",
    "content": "/* @flow */\n/* second token */\n/* third token */\n/**\n * After max_header_tokens (in .flowconfig), we no longer care:\n *\n * @flow\n */\n"
  },
  {
    "path": "tests/flow/docblock_flow/multiple_flows_1.js",
    "content": "/* @flow */\n/* @flow */\n"
  },
  {
    "path": "tests/flow/docblock_flow/multiple_flows_2.js",
    "content": "/**\n * @flow\n * @noflow\n */\n"
  },
  {
    "path": "tests/flow/docblock_flow/multiple_providesModule_1.js",
    "content": "/**\n * @providesModule Foo\n * @providesModule Bar\n * @flow\n */\n"
  },
  {
    "path": "tests/flow/docblock_flow/multiple_providesModule_2.js",
    "content": "/**\n * @providesModule Foo\n * @flow\n */\n/**\n * @providesModule Bar\n */\n"
  },
  {
    "path": "tests/flow/docblock_flow/use_strict_with_flow.js",
    "content": "\"use strict\";\n/* @flow */\n\n(\"\": void); // error\n"
  },
  {
    "path": "tests/flow/docblock_flow/with_flow.js",
    "content": "/* @flow */\n\n(\"\": void); // error\n"
  },
  {
    "path": "tests/flow/docblock_flow/without_flow.js",
    "content": "/* some other comment */\n\n(\"\": void); // no error\n"
  },
  {
    "path": "tests/flow/dom/CanvasRenderingContext2D.js",
    "content": "// @flow\n\nlet tests = [\n  // fillRect\n  function(ctx: CanvasRenderingContext2D) {\n    ctx.fillRect(0, 0, 200, 100);\n  },\n\n  // moveTo\n  function(ctx: CanvasRenderingContext2D) {\n    ctx.moveTo('0', '1');  // error: should be numbers\n  },\n];\n"
  },
  {
    "path": "tests/flow/dom/CustomEvent.js",
    "content": "// @flow\n\nlet tests = [\n  // CustomEvent\n  function(document: Document) {\n    const event = document.createEvent('CustomEvent');\n    event.initCustomEvent('butts', true, false, { nice: 42 });\n  }\n];\n"
  },
  {
    "path": "tests/flow/dom/Document.js",
    "content": "// @flow\n\nlet tests = [\n  // createElement\n  function(document: Document) {\n    (document.createElement('canvas'): HTMLCanvasElement);\n    (document.createElement('link'): HTMLLinkElement);\n    (document.createElement('option'): HTMLOptionElement);\n    (document.createElement('select'): HTMLSelectElement);\n    (document.querySelector('select'): HTMLSelectElement | null);\n    (document.createElement('hr'): HTMLElement); // GH #3752\n  }\n];\n"
  },
  {
    "path": "tests/flow/dom/Element.js",
    "content": "// @flow\n\nlet tests = [\n  // scrollIntoView\n  function(element: Element) {\n    element.scrollIntoView();\n    element.scrollIntoView(false);\n    element.scrollIntoView({});\n    element.scrollIntoView({ behavior: 'smooth', block: 'end' });\n    element.scrollIntoView({ block: 'end' });\n    element.scrollIntoView({ behavior: 'smooth' });\n\n    // fails\n    element.scrollIntoView({ behavior: 'invalid' });\n    element.scrollIntoView({ block: 'invalid' });\n    element.scrollIntoView(1);\n  }\n];\n"
  },
  {
    "path": "tests/flow/dom/HTMLCanvasElement.js",
    "content": "// @flow\n\nlet tests = [\n  // getContext\n  function(el: HTMLCanvasElement) {\n    (el.getContext('2d'): ?CanvasRenderingContext2D);\n  }\n];\n"
  },
  {
    "path": "tests/flow/dom/HTMLElement.js",
    "content": "// @flow\n\nlet tests = [\n  // scrollIntoView\n  function(element: HTMLElement) {\n    element.scrollIntoView();\n    element.scrollIntoView(false);\n    element.scrollIntoView({});\n    element.scrollIntoView({ behavior: 'smooth', block: 'end' });\n    element.scrollIntoView({ block: 'end' });\n    element.scrollIntoView({ behavior: 'smooth' });\n\n    // fails\n    element.scrollIntoView({ behavior: 'invalid' });\n    element.scrollIntoView({ block: 'invalid' });\n    element.scrollIntoView(1);\n  }\n];\n"
  },
  {
    "path": "tests/flow/dom/HTMLInputElement.js",
    "content": "// @flow\n\nlet tests = [\n  // setRangeText\n  function(el: HTMLInputElement) {\n    el.setRangeText('foo');\n    el.setRangeText('foo', 123); // end is required\n    el.setRangeText('foo', 123, 234);\n    el.setRangeText('foo', 123, 234, 'select');\n    el.setRangeText('foo', 123, 234, 'bogus'); // invalid value\n  }\n];\n"
  },
  {
    "path": "tests/flow/dom/URL.js",
    "content": "/* @flow */\n\nconst a = new URL('http://flowtype.org/'); // correct\nconst b = new URL('/docs', a); // correct\nconst c = new URL('/docs', 'http://flowtype.org/'); // correct\n\nconst d: URLSearchParams = c.searchParams; // correct\nconst e: string = c.path; // not correct\nconst f: string = c.pathname; // correct\nconst g: string = c.hash; // correct\nconst h: string = c.host; // correct\nconst i: string = c.hostname; // correct\nconst j: string = c.href; // correct\nconst l: string = c.origin; // correct\nconst m: string = c.password; // correct\nconst n: string = c.pathname; // correct\nconst o: string = c.port; // correct\nconst p: string = c.protocol; // correct\nconst q: string = c.search; // correct\nconst r: string = c.username; // correct\n"
  },
  {
    "path": "tests/flow/dom/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`CanvasRenderingContext2D.js 1`] = `\n// @flow\n\nlet tests = [\n  // fillRect\n  function(ctx: CanvasRenderingContext2D) {\n    ctx.fillRect(0, 0, 200, 100);\n  },\n\n  // moveTo\n  function(ctx: CanvasRenderingContext2D) {\n    ctx.moveTo('0', '1');  // error: should be numbers\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  // fillRect\n  function(ctx: CanvasRenderingContext2D) {\n    ctx.fillRect(0, 0, 200, 100);\n  },\n\n  // moveTo\n  function(ctx: CanvasRenderingContext2D) {\n    ctx.moveTo(\"0\", \"1\"); // error: should be numbers\n  }\n];\n\n`;\n\nexports[`CustomEvent.js 1`] = `\n// @flow\n\nlet tests = [\n  // CustomEvent\n  function(document: Document) {\n    const event = document.createEvent('CustomEvent');\n    event.initCustomEvent('butts', true, false, { nice: 42 });\n  }\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  // CustomEvent\n  function(document: Document) {\n    const event = document.createEvent(\"CustomEvent\");\n    event.initCustomEvent(\"butts\", true, false, { nice: 42 });\n  }\n];\n\n`;\n\nexports[`Document.js 1`] = `\n// @flow\n\nlet tests = [\n  // createElement\n  function(document: Document) {\n    (document.createElement('canvas'): HTMLCanvasElement);\n    (document.createElement('link'): HTMLLinkElement);\n    (document.createElement('option'): HTMLOptionElement);\n    (document.createElement('select'): HTMLSelectElement);\n    (document.querySelector('select'): HTMLSelectElement | null);\n    (document.createElement('hr'): HTMLElement); // GH #3752\n  }\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  // createElement\n  function(document: Document) {\n    (document.createElement(\"canvas\"): HTMLCanvasElement);\n    (document.createElement(\"link\"): HTMLLinkElement);\n    (document.createElement(\"option\"): HTMLOptionElement);\n    (document.createElement(\"select\"): HTMLSelectElement);\n    (document.querySelector(\"select\"): HTMLSelectElement | null);\n    (document.createElement(\"hr\"): HTMLElement); // GH #3752\n  }\n];\n\n`;\n\nexports[`Element.js 1`] = `\n// @flow\n\nlet tests = [\n  // scrollIntoView\n  function(element: Element) {\n    element.scrollIntoView();\n    element.scrollIntoView(false);\n    element.scrollIntoView({});\n    element.scrollIntoView({ behavior: 'smooth', block: 'end' });\n    element.scrollIntoView({ block: 'end' });\n    element.scrollIntoView({ behavior: 'smooth' });\n\n    // fails\n    element.scrollIntoView({ behavior: 'invalid' });\n    element.scrollIntoView({ block: 'invalid' });\n    element.scrollIntoView(1);\n  }\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  // scrollIntoView\n  function(element: Element) {\n    element.scrollIntoView();\n    element.scrollIntoView(false);\n    element.scrollIntoView({});\n    element.scrollIntoView({ behavior: \"smooth\", block: \"end\" });\n    element.scrollIntoView({ block: \"end\" });\n    element.scrollIntoView({ behavior: \"smooth\" });\n\n    // fails\n    element.scrollIntoView({ behavior: \"invalid\" });\n    element.scrollIntoView({ block: \"invalid\" });\n    element.scrollIntoView(1);\n  }\n];\n\n`;\n\nexports[`HTMLCanvasElement.js 1`] = `\n// @flow\n\nlet tests = [\n  // getContext\n  function(el: HTMLCanvasElement) {\n    (el.getContext('2d'): ?CanvasRenderingContext2D);\n  }\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  // getContext\n  function(el: HTMLCanvasElement) {\n    (el.getContext(\"2d\"): ?CanvasRenderingContext2D);\n  }\n];\n\n`;\n\nexports[`HTMLElement.js 1`] = `\n// @flow\n\nlet tests = [\n  // scrollIntoView\n  function(element: HTMLElement) {\n    element.scrollIntoView();\n    element.scrollIntoView(false);\n    element.scrollIntoView({});\n    element.scrollIntoView({ behavior: 'smooth', block: 'end' });\n    element.scrollIntoView({ block: 'end' });\n    element.scrollIntoView({ behavior: 'smooth' });\n\n    // fails\n    element.scrollIntoView({ behavior: 'invalid' });\n    element.scrollIntoView({ block: 'invalid' });\n    element.scrollIntoView(1);\n  }\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  // scrollIntoView\n  function(element: HTMLElement) {\n    element.scrollIntoView();\n    element.scrollIntoView(false);\n    element.scrollIntoView({});\n    element.scrollIntoView({ behavior: \"smooth\", block: \"end\" });\n    element.scrollIntoView({ block: \"end\" });\n    element.scrollIntoView({ behavior: \"smooth\" });\n\n    // fails\n    element.scrollIntoView({ behavior: \"invalid\" });\n    element.scrollIntoView({ block: \"invalid\" });\n    element.scrollIntoView(1);\n  }\n];\n\n`;\n\nexports[`HTMLInputElement.js 1`] = `\n// @flow\n\nlet tests = [\n  // setRangeText\n  function(el: HTMLInputElement) {\n    el.setRangeText('foo');\n    el.setRangeText('foo', 123); // end is required\n    el.setRangeText('foo', 123, 234);\n    el.setRangeText('foo', 123, 234, 'select');\n    el.setRangeText('foo', 123, 234, 'bogus'); // invalid value\n  }\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  // setRangeText\n  function(el: HTMLInputElement) {\n    el.setRangeText(\"foo\");\n    el.setRangeText(\"foo\", 123); // end is required\n    el.setRangeText(\"foo\", 123, 234);\n    el.setRangeText(\"foo\", 123, 234, \"select\");\n    el.setRangeText(\"foo\", 123, 234, \"bogus\"); // invalid value\n  }\n];\n\n`;\n\nexports[`URL.js 1`] = `\n/* @flow */\n\nconst a = new URL('http://flowtype.org/'); // correct\nconst b = new URL('/docs', a); // correct\nconst c = new URL('/docs', 'http://flowtype.org/'); // correct\n\nconst d: URLSearchParams = c.searchParams; // correct\nconst e: string = c.path; // not correct\nconst f: string = c.pathname; // correct\nconst g: string = c.hash; // correct\nconst h: string = c.host; // correct\nconst i: string = c.hostname; // correct\nconst j: string = c.href; // correct\nconst l: string = c.origin; // correct\nconst m: string = c.password; // correct\nconst n: string = c.pathname; // correct\nconst o: string = c.port; // correct\nconst p: string = c.protocol; // correct\nconst q: string = c.search; // correct\nconst r: string = c.username; // correct\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nconst a = new URL(\"http://flowtype.org/\"); // correct\nconst b = new URL(\"/docs\", a); // correct\nconst c = new URL(\"/docs\", \"http://flowtype.org/\"); // correct\n\nconst d: URLSearchParams = c.searchParams; // correct\nconst e: string = c.path; // not correct\nconst f: string = c.pathname; // correct\nconst g: string = c.hash; // correct\nconst h: string = c.host; // correct\nconst i: string = c.hostname; // correct\nconst j: string = c.href; // correct\nconst l: string = c.origin; // correct\nconst m: string = c.password; // correct\nconst n: string = c.pathname; // correct\nconst o: string = c.port; // correct\nconst p: string = c.protocol; // correct\nconst q: string = c.search; // correct\nconst r: string = c.username; // correct\n\n`;\n\nexports[`eventtarget.js 1`] = `\n// @flow\n\nlet listener: EventListener = function (event: Event) :void {};\n\nlet tests = [\n  // attachEvent\n  function() {\n    let target = new EventTarget();\n    (target.attachEvent('foo', listener): void); // invalid, may be undefined\n    (target.attachEvent && target.attachEvent('foo', listener): void); // valid\n  },\n\n  // detachEvent\n  function() {\n    let target = new EventTarget();\n    (target.detachEvent('foo', listener): void); // invalid, may be undefined\n    (target.detachEvent && target.detachEvent('foo', listener): void); // valid\n  },\n\n  function() {\n    window.onmessage = (event: MessageEvent) => {\n      (event.target: window);\n    };\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet listener: EventListener = function(event: Event): void {};\n\nlet tests = [\n  // attachEvent\n  function() {\n    let target = new EventTarget();\n    (target.attachEvent(\"foo\", listener): void); // invalid, may be undefined\n    (target.attachEvent && target.attachEvent(\"foo\", listener): void); // valid\n  },\n\n  // detachEvent\n  function() {\n    let target = new EventTarget();\n    (target.detachEvent(\"foo\", listener): void); // invalid, may be undefined\n    (target.detachEvent && target.detachEvent(\"foo\", listener): void); // valid\n  },\n\n  function() {\n    window.onmessage = (event: MessageEvent) => {\n      (event.target: window);\n    };\n  }\n];\n\n`;\n\nexports[`path2d.js 1`] = `\n// @flow\n\nlet tests = [\n  // arcTo\n  function() {\n    let path = new Path2D();\n    (path.arcTo(0, 0, 0, 0, 10): void); // valid\n    (path.arcTo(0, 0, 0, 0, 10, 20, 5): void); // valid\n    (path.arcTo(0, 0, 0, 0, 10, '20', 5): void); // invalid\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  // arcTo\n  function() {\n    let path = new Path2D();\n    (path.arcTo(0, 0, 0, 0, 10): void); // valid\n    (path.arcTo(0, 0, 0, 0, 10, 20, 5): void); // valid\n    (path.arcTo(0, 0, 0, 0, 10, \"20\", 5): void); // invalid\n  }\n];\n\n`;\n\nexports[`registerElement.js 1`] = `\n// @flow\n\nlet tests = [\n  // should work with Object.create()\n  function() {\n    document.registerElement('custom-element', {\n      prototype: Object.create(HTMLElement.prototype, {\n        createdCallback: { value: function createdCallback () {\n        }},\n        attachedCallback: { value: function attachedCallback () {\n        }},\n        detachedCallback: { value: function detachedCallback () {\n        }},\n        attributeChangedCallback: {\n          value: function attributeChangedCallback (\n            attributeLocalName,\n            oldAttributeValue,\n            newAttributeValue,\n            attributeNamespace\n          ) {\n          }\n        }\n      })\n    })\n  },\n  // or with Object.assign()\n  function() {\n    document.registerElement('custom-element', {\n      prototype: Object.assign(Object.create(HTMLElement.prototype), {\n        createdCallback () {\n        },\n        attachedCallback () {\n        },\n        detachedCallback () {\n        },\n        attributeChangedCallback (\n          attributeLocalName,\n          oldAttributeValue,\n          newAttributeValue,\n          attributeNamespace\n        ) {\n        }\n      })\n    })\n  },\n  // should complain about invalid callback parameters\n  function() {\n    document.registerElement('custom-element', {\n      prototype: {\n        attributeChangedCallback(\n          localName: string,\n          oldVal: string, // Error: This might be null\n          newVal: string, // Error: This might be null\n          namespace: string) {}\n      },\n    });\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  // should work with Object.create()\n  function() {\n    document.registerElement(\"custom-element\", {\n      prototype: Object.create(HTMLElement.prototype, {\n        createdCallback: {\n          value: function createdCallback() {}\n        },\n        attachedCallback: {\n          value: function attachedCallback() {}\n        },\n        detachedCallback: {\n          value: function detachedCallback() {}\n        },\n        attributeChangedCallback: {\n          value: function attributeChangedCallback(\n            attributeLocalName,\n            oldAttributeValue,\n            newAttributeValue,\n            attributeNamespace\n          ) {}\n        }\n      })\n    });\n  },\n  // or with Object.assign()\n  function() {\n    document.registerElement(\"custom-element\", {\n      prototype: Object.assign(Object.create(HTMLElement.prototype), {\n        createdCallback() {},\n        attachedCallback() {},\n        detachedCallback() {},\n        attributeChangedCallback(\n          attributeLocalName,\n          oldAttributeValue,\n          newAttributeValue,\n          attributeNamespace\n        ) {}\n      })\n    });\n  },\n  // should complain about invalid callback parameters\n  function() {\n    document.registerElement(\"custom-element\", {\n      prototype: {\n        attributeChangedCallback(\n          localName: string,\n          oldVal: string, // Error: This might be null\n          newVal: string, // Error: This might be null\n          namespace: string\n        ) {}\n      }\n    });\n  }\n];\n\n`;\n\nexports[`traversal.js 1`] = `\n// @flow\n\nlet tests = [\n  // basic functionality\n  function() {\n    const i: NodeIterator<*,*> = document.createNodeIterator(document.body);\n    const filter: NodeFilter = i.filter;\n    const response:\n      typeof NodeFilter.FILTER_ACCEPT |\n      typeof NodeFilter.FILTER_REJECT |\n      typeof NodeFilter.FILTER_SKIP =\n      filter.acceptNode(document.body);\n  },\n  function() {\n    const w: TreeWalker<*,*> = document.createTreeWalker(document.body);\n    const filter: NodeFilter = w.filter;\n    const response:\n      typeof NodeFilter.FILTER_ACCEPT |\n      typeof NodeFilter.FILTER_REJECT |\n      typeof NodeFilter.FILTER_SKIP =\n      filter.acceptNode(document.body);\n  },\n  // rootNode must be a Node\n  function() {\n    document.createNodeIterator(document.body); // valid\n    document.createNodeIterator({}); // invalid\n  },\n  function() {\n    document.createTreeWalker(document.body);\n    document.createTreeWalker({}); // invalid\n  },\n  // Type Parameters\n  function() {\n    const _root = document.body;\n    const i = document.createNodeIterator(_root, NodeFilter.SHOW_ELEMENT);\n    const root: typeof _root = i.root;\n    const referenceNode: typeof _root | Element = i.referenceNode;\n    const previousNode: Element | null = i.previousNode();\n    const nextNode: Element | null = i.nextNode();\n  },\n  function() {\n    const _root = document.body.attributes[0];\n    const i = document.createNodeIterator(_root, NodeFilter.SHOW_ATTRIBUTE);\n    const root: typeof _root = i.root;\n    const referenceNode: typeof _root | Attr = i.referenceNode\n    const previousNode: Attr | null = i.previousNode();\n    const nextNode: Attr | null = i.nextNode();\n  },\n  function() {\n    const _root = document.body;\n    const i = document.createNodeIterator(_root, NodeFilter.SHOW_TEXT);\n    const root: typeof _root = i.root;\n    const referenceNode: typeof _root | Text = i.referenceNode;\n    const previousNode: Text | null = i.previousNode();\n    const nextNode: Text | null = i.nextNode();\n  },\n  function() {\n    const _root = document;\n    const i = document.createNodeIterator(_root, NodeFilter.SHOW_DOCUMENT);\n    const root: typeof _root = i.root;\n    const referenceNode: typeof _root | Document = i.referenceNode;\n    const previousNode: Document | null = i.previousNode();\n    const nextNode: Document | null = i.nextNode();\n  },\n  function() {\n    const _root = document;\n    const i = document.createNodeIterator(_root, NodeFilter.SHOW_DOCUMENT_TYPE);\n    const root: typeof _root = i.root;\n    const referenceNode: typeof _root | DocumentType = i.referenceNode;\n    const previousNode: DocumentType | null = i.previousNode();\n    const nextNode: DocumentType | null = i.nextNode();\n  },\n  function() {\n    const _root = document.createDocumentFragment();\n    const i = document.createNodeIterator(_root, NodeFilter.SHOW_DOCUMENT_FRAGMENT);\n    const root: typeof _root = i.root;\n    const referenceNode: typeof _root | DocumentFragment = i.referenceNode;\n    const previousNode: DocumentFragment | null = i.previousNode();\n    const nextNode: DocumentFragment | null = i.nextNode();\n  },\n  function() {\n    const _root = document.body;\n    const i = document.createNodeIterator(_root, NodeFilter.SHOW_ALL);\n    const root: typeof _root = i.root;\n    const referenceNode: typeof _root | Node = i.referenceNode;\n    const previousNode: Node | null = i.previousNode();\n    const nextNode: Node | null = i.nextNode();\n  },\n  function() {\n    const _root = document.body;\n    const w = document.createTreeWalker(_root, NodeFilter.SHOW_ELEMENT);\n    const root: typeof _root = w.root;\n    const currentNode: typeof _root | Element = w.currentNode;\n    const parentNode: Element | null = w.parentNode();\n    const firstChild: Element | null = w.firstChild();\n    const lastChild: Element | null = w.lastChild();\n    const previousSibling: Element | null = w.previousSibling();\n    const nextSibling: Element | null = w.nextSibling();\n    const previousNode: Element | null = w.previousNode();\n    const nextNode: Element | null = w.nextNode();\n  },\n  function() {\n    const _root = document.body.attributes[0];\n    const w = document.createTreeWalker(_root, NodeFilter.SHOW_ATTRIBUTE);\n    const root: typeof _root = w.root;\n    const currentNode: typeof _root | Attr = w.currentNode;\n    const parentNode: Attr | null = w.parentNode();\n    const firstChild: Attr | null = w.firstChild();\n    const lastChild: Attr | null = w.lastChild();\n    const previousSibling: Attr | null = w.previousSibling();\n    const nextSibling: Attr | null = w.nextSibling();\n    const previousNode: Attr | null = w.previousNode();\n    const nextNode: Attr | null = w.nextNode();\n  },\n  function() {\n    const _root = document.body;\n    const w = document.createTreeWalker(_root, NodeFilter.SHOW_TEXT);\n    const root: typeof _root = w.root;\n    const currentNode: typeof _root | Text = w.currentNode;\n    const parentNode: Text | null = w.parentNode();\n    const firstChild: Text | null = w.firstChild();\n    const lastChild: Text | null = w.lastChild();\n    const previousSibling: Text | null = w.previousSibling();\n    const nextSibling: Text | null = w.nextSibling();\n    const previousNode: Text | null = w.previousNode();\n    const nextNode: Text | null = w.nextNode();\n  },\n  function() {\n    const _root = document;\n    const w = document.createTreeWalker(_root, NodeFilter.SHOW_DOCUMENT);\n    const root: typeof _root = w.root;\n    const currentNode: typeof _root | Document = w.currentNode;\n    const parentNode: Document | null = w.parentNode();\n    const firstChild: Document | null = w.firstChild();\n    const lastChild: Document | null = w.lastChild();\n    const previousSibling: Document | null = w.previousSibling();\n    const nextSibling: Document | null = w.nextSibling();\n    const previousNode: Document | null = w.previousNode();\n    const nextNode: Document | null = w.nextNode();\n  },\n  function() {\n    const _root = document;\n    const w = document.createTreeWalker(_root, NodeFilter.SHOW_DOCUMENT_TYPE);\n    const root: typeof _root = w.root;\n    const currentNode: typeof _root | DocumentType = w.currentNode;\n    const parentNode: DocumentType | null = w.parentNode();\n    const firstChild: DocumentType | null = w.firstChild();\n    const lastChild: DocumentType | null = w.lastChild();\n    const previousSibling: DocumentType | null = w.previousSibling();\n    const nextSibling: DocumentType | null = w.nextSibling();\n    const previousNode: DocumentType | null = w.previousNode();\n    const nextNode: DocumentType | null = w.nextNode();\n  },\n  function() {\n    const _root = document.createDocumentFragment();\n    const w = document.createTreeWalker(_root, NodeFilter.SHOW_DOCUMENT_FRAGMENT);\n    const root: typeof _root = w.root;\n    const currentNode: typeof _root | DocumentFragment = w.currentNode;\n    const parentNode: DocumentFragment | null = w.parentNode();\n    const firstChild: DocumentFragment | null = w.firstChild();\n    const lastChild: DocumentFragment | null = w.lastChild();\n    const previousSibling: DocumentFragment | null = w.previousSibling();\n    const nextSibling: DocumentFragment | null = w.nextSibling();\n    const previousNode: DocumentFragment | null = w.previousNode();\n    const nextNode: DocumentFragment | null = w.nextNode();\n  },\n  function() {\n    const _root = document.body;\n    const w = document.createTreeWalker(_root, NodeFilter.SHOW_ALL);\n    const root: typeof _root = w.root;\n    const currentNode: typeof _root | Node = w.currentNode;\n    const parentNode: Node | null = w.parentNode();\n    const firstChild: Node | null = w.firstChild();\n    const lastChild: Node | null = w.lastChild();\n    const previousSibling: Node | null = w.previousSibling();\n    const nextSibling: Node | null = w.nextSibling();\n    const previousNode: Node | null = w.previousNode();\n    const nextNode: Node | null = w.nextNode();\n  },\n  // NodeFilterInterface\n  function() {\n    document.createNodeIterator(document.body, -1, node => NodeFilter.FILTER_ACCEPT); // valid\n    document.createNodeIterator(document.body, -1, node => 'accept'); // invalid\n    document.createNodeIterator(document.body, -1, { acceptNode: node => NodeFilter.FILTER_ACCEPT }); // valid\n    document.createNodeIterator(document.body, -1, { acceptNode: node => 'accept' }); // invalid\n    document.createNodeIterator(document.body, -1, {}); // invalid\n  },\n  function() {\n    document.createTreeWalker(document.body, -1, node => NodeFilter.FILTER_ACCEPT); // valid\n    document.createTreeWalker(document.body, -1, node => 'accept'); // invalid\n    document.createTreeWalker(document.body, -1, { acceptNode: node => NodeFilter.FILTER_ACCEPT }); // valid\n    document.createTreeWalker(document.body, -1, { acceptNode: node => 'accept' }); // invalid\n    document.createTreeWalker(document.body, -1, {}); // invalid\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  // basic functionality\n  function() {\n    const i: NodeIterator<*, *> = document.createNodeIterator(document.body);\n    const filter: NodeFilter = i.filter;\n    const response:\n      | typeof NodeFilter.FILTER_ACCEPT\n      | typeof NodeFilter.FILTER_REJECT\n      | typeof NodeFilter.FILTER_SKIP = filter.acceptNode(document.body);\n  },\n  function() {\n    const w: TreeWalker<*, *> = document.createTreeWalker(document.body);\n    const filter: NodeFilter = w.filter;\n    const response:\n      | typeof NodeFilter.FILTER_ACCEPT\n      | typeof NodeFilter.FILTER_REJECT\n      | typeof NodeFilter.FILTER_SKIP = filter.acceptNode(document.body);\n  },\n  // rootNode must be a Node\n  function() {\n    document.createNodeIterator(document.body); // valid\n    document.createNodeIterator({}); // invalid\n  },\n  function() {\n    document.createTreeWalker(document.body);\n    document.createTreeWalker({}); // invalid\n  },\n  // Type Parameters\n  function() {\n    const _root = document.body;\n    const i = document.createNodeIterator(_root, NodeFilter.SHOW_ELEMENT);\n    const root: typeof _root = i.root;\n    const referenceNode: typeof _root | Element = i.referenceNode;\n    const previousNode: Element | null = i.previousNode();\n    const nextNode: Element | null = i.nextNode();\n  },\n  function() {\n    const _root = document.body.attributes[0];\n    const i = document.createNodeIterator(_root, NodeFilter.SHOW_ATTRIBUTE);\n    const root: typeof _root = i.root;\n    const referenceNode: typeof _root | Attr = i.referenceNode;\n    const previousNode: Attr | null = i.previousNode();\n    const nextNode: Attr | null = i.nextNode();\n  },\n  function() {\n    const _root = document.body;\n    const i = document.createNodeIterator(_root, NodeFilter.SHOW_TEXT);\n    const root: typeof _root = i.root;\n    const referenceNode: typeof _root | Text = i.referenceNode;\n    const previousNode: Text | null = i.previousNode();\n    const nextNode: Text | null = i.nextNode();\n  },\n  function() {\n    const _root = document;\n    const i = document.createNodeIterator(_root, NodeFilter.SHOW_DOCUMENT);\n    const root: typeof _root = i.root;\n    const referenceNode: typeof _root | Document = i.referenceNode;\n    const previousNode: Document | null = i.previousNode();\n    const nextNode: Document | null = i.nextNode();\n  },\n  function() {\n    const _root = document;\n    const i = document.createNodeIterator(_root, NodeFilter.SHOW_DOCUMENT_TYPE);\n    const root: typeof _root = i.root;\n    const referenceNode: typeof _root | DocumentType = i.referenceNode;\n    const previousNode: DocumentType | null = i.previousNode();\n    const nextNode: DocumentType | null = i.nextNode();\n  },\n  function() {\n    const _root = document.createDocumentFragment();\n    const i = document.createNodeIterator(\n      _root,\n      NodeFilter.SHOW_DOCUMENT_FRAGMENT\n    );\n    const root: typeof _root = i.root;\n    const referenceNode: typeof _root | DocumentFragment = i.referenceNode;\n    const previousNode: DocumentFragment | null = i.previousNode();\n    const nextNode: DocumentFragment | null = i.nextNode();\n  },\n  function() {\n    const _root = document.body;\n    const i = document.createNodeIterator(_root, NodeFilter.SHOW_ALL);\n    const root: typeof _root = i.root;\n    const referenceNode: typeof _root | Node = i.referenceNode;\n    const previousNode: Node | null = i.previousNode();\n    const nextNode: Node | null = i.nextNode();\n  },\n  function() {\n    const _root = document.body;\n    const w = document.createTreeWalker(_root, NodeFilter.SHOW_ELEMENT);\n    const root: typeof _root = w.root;\n    const currentNode: typeof _root | Element = w.currentNode;\n    const parentNode: Element | null = w.parentNode();\n    const firstChild: Element | null = w.firstChild();\n    const lastChild: Element | null = w.lastChild();\n    const previousSibling: Element | null = w.previousSibling();\n    const nextSibling: Element | null = w.nextSibling();\n    const previousNode: Element | null = w.previousNode();\n    const nextNode: Element | null = w.nextNode();\n  },\n  function() {\n    const _root = document.body.attributes[0];\n    const w = document.createTreeWalker(_root, NodeFilter.SHOW_ATTRIBUTE);\n    const root: typeof _root = w.root;\n    const currentNode: typeof _root | Attr = w.currentNode;\n    const parentNode: Attr | null = w.parentNode();\n    const firstChild: Attr | null = w.firstChild();\n    const lastChild: Attr | null = w.lastChild();\n    const previousSibling: Attr | null = w.previousSibling();\n    const nextSibling: Attr | null = w.nextSibling();\n    const previousNode: Attr | null = w.previousNode();\n    const nextNode: Attr | null = w.nextNode();\n  },\n  function() {\n    const _root = document.body;\n    const w = document.createTreeWalker(_root, NodeFilter.SHOW_TEXT);\n    const root: typeof _root = w.root;\n    const currentNode: typeof _root | Text = w.currentNode;\n    const parentNode: Text | null = w.parentNode();\n    const firstChild: Text | null = w.firstChild();\n    const lastChild: Text | null = w.lastChild();\n    const previousSibling: Text | null = w.previousSibling();\n    const nextSibling: Text | null = w.nextSibling();\n    const previousNode: Text | null = w.previousNode();\n    const nextNode: Text | null = w.nextNode();\n  },\n  function() {\n    const _root = document;\n    const w = document.createTreeWalker(_root, NodeFilter.SHOW_DOCUMENT);\n    const root: typeof _root = w.root;\n    const currentNode: typeof _root | Document = w.currentNode;\n    const parentNode: Document | null = w.parentNode();\n    const firstChild: Document | null = w.firstChild();\n    const lastChild: Document | null = w.lastChild();\n    const previousSibling: Document | null = w.previousSibling();\n    const nextSibling: Document | null = w.nextSibling();\n    const previousNode: Document | null = w.previousNode();\n    const nextNode: Document | null = w.nextNode();\n  },\n  function() {\n    const _root = document;\n    const w = document.createTreeWalker(_root, NodeFilter.SHOW_DOCUMENT_TYPE);\n    const root: typeof _root = w.root;\n    const currentNode: typeof _root | DocumentType = w.currentNode;\n    const parentNode: DocumentType | null = w.parentNode();\n    const firstChild: DocumentType | null = w.firstChild();\n    const lastChild: DocumentType | null = w.lastChild();\n    const previousSibling: DocumentType | null = w.previousSibling();\n    const nextSibling: DocumentType | null = w.nextSibling();\n    const previousNode: DocumentType | null = w.previousNode();\n    const nextNode: DocumentType | null = w.nextNode();\n  },\n  function() {\n    const _root = document.createDocumentFragment();\n    const w = document.createTreeWalker(\n      _root,\n      NodeFilter.SHOW_DOCUMENT_FRAGMENT\n    );\n    const root: typeof _root = w.root;\n    const currentNode: typeof _root | DocumentFragment = w.currentNode;\n    const parentNode: DocumentFragment | null = w.parentNode();\n    const firstChild: DocumentFragment | null = w.firstChild();\n    const lastChild: DocumentFragment | null = w.lastChild();\n    const previousSibling: DocumentFragment | null = w.previousSibling();\n    const nextSibling: DocumentFragment | null = w.nextSibling();\n    const previousNode: DocumentFragment | null = w.previousNode();\n    const nextNode: DocumentFragment | null = w.nextNode();\n  },\n  function() {\n    const _root = document.body;\n    const w = document.createTreeWalker(_root, NodeFilter.SHOW_ALL);\n    const root: typeof _root = w.root;\n    const currentNode: typeof _root | Node = w.currentNode;\n    const parentNode: Node | null = w.parentNode();\n    const firstChild: Node | null = w.firstChild();\n    const lastChild: Node | null = w.lastChild();\n    const previousSibling: Node | null = w.previousSibling();\n    const nextSibling: Node | null = w.nextSibling();\n    const previousNode: Node | null = w.previousNode();\n    const nextNode: Node | null = w.nextNode();\n  },\n  // NodeFilterInterface\n  function() {\n    document.createNodeIterator(\n      document.body,\n      -1,\n      node => NodeFilter.FILTER_ACCEPT\n    ); // valid\n    document.createNodeIterator(document.body, -1, node => \"accept\"); // invalid\n    document.createNodeIterator(document.body, -1, {\n      acceptNode: node => NodeFilter.FILTER_ACCEPT\n    }); // valid\n    document.createNodeIterator(document.body, -1, {\n      acceptNode: node => \"accept\"\n    }); // invalid\n    document.createNodeIterator(document.body, -1, {}); // invalid\n  },\n  function() {\n    document.createTreeWalker(\n      document.body,\n      -1,\n      node => NodeFilter.FILTER_ACCEPT\n    ); // valid\n    document.createTreeWalker(document.body, -1, node => \"accept\"); // invalid\n    document.createTreeWalker(document.body, -1, {\n      acceptNode: node => NodeFilter.FILTER_ACCEPT\n    }); // valid\n    document.createTreeWalker(document.body, -1, {\n      acceptNode: node => \"accept\"\n    }); // invalid\n    document.createTreeWalker(document.body, -1, {}); // invalid\n  }\n];\n\n`;\n"
  },
  {
    "path": "tests/flow/dom/eventtarget.js",
    "content": "// @flow\n\nlet listener: EventListener = function (event: Event) :void {};\n\nlet tests = [\n  // attachEvent\n  function() {\n    let target = new EventTarget();\n    (target.attachEvent('foo', listener): void); // invalid, may be undefined\n    (target.attachEvent && target.attachEvent('foo', listener): void); // valid\n  },\n\n  // detachEvent\n  function() {\n    let target = new EventTarget();\n    (target.detachEvent('foo', listener): void); // invalid, may be undefined\n    (target.detachEvent && target.detachEvent('foo', listener): void); // valid\n  },\n\n  function() {\n    window.onmessage = (event: MessageEvent) => {\n      (event.target: window);\n    };\n  },\n];\n"
  },
  {
    "path": "tests/flow/dom/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/dom/path2d.js",
    "content": "// @flow\n\nlet tests = [\n  // arcTo\n  function() {\n    let path = new Path2D();\n    (path.arcTo(0, 0, 0, 0, 10): void); // valid\n    (path.arcTo(0, 0, 0, 0, 10, 20, 5): void); // valid\n    (path.arcTo(0, 0, 0, 0, 10, '20', 5): void); // invalid\n  },\n];\n"
  },
  {
    "path": "tests/flow/dom/registerElement.js",
    "content": "// @flow\n\nlet tests = [\n  // should work with Object.create()\n  function() {\n    document.registerElement('custom-element', {\n      prototype: Object.create(HTMLElement.prototype, {\n        createdCallback: { value: function createdCallback () {\n        }},\n        attachedCallback: { value: function attachedCallback () {\n        }},\n        detachedCallback: { value: function detachedCallback () {\n        }},\n        attributeChangedCallback: {\n          value: function attributeChangedCallback (\n            attributeLocalName,\n            oldAttributeValue,\n            newAttributeValue,\n            attributeNamespace\n          ) {\n          }\n        }\n      })\n    })\n  },\n  // or with Object.assign()\n  function() {\n    document.registerElement('custom-element', {\n      prototype: Object.assign(Object.create(HTMLElement.prototype), {\n        createdCallback () {\n        },\n        attachedCallback () {\n        },\n        detachedCallback () {\n        },\n        attributeChangedCallback (\n          attributeLocalName,\n          oldAttributeValue,\n          newAttributeValue,\n          attributeNamespace\n        ) {\n        }\n      })\n    })\n  },\n  // should complain about invalid callback parameters\n  function() {\n    document.registerElement('custom-element', {\n      prototype: {\n        attributeChangedCallback(\n          localName: string,\n          oldVal: string, // Error: This might be null\n          newVal: string, // Error: This might be null\n          namespace: string) {}\n      },\n    });\n  },\n];\n"
  },
  {
    "path": "tests/flow/dom/traversal.js",
    "content": "// @flow\n\nlet tests = [\n  // basic functionality\n  function() {\n    const i: NodeIterator<*,*> = document.createNodeIterator(document.body);\n    const filter: NodeFilter = i.filter;\n    const response:\n      typeof NodeFilter.FILTER_ACCEPT |\n      typeof NodeFilter.FILTER_REJECT |\n      typeof NodeFilter.FILTER_SKIP =\n      filter.acceptNode(document.body);\n  },\n  function() {\n    const w: TreeWalker<*,*> = document.createTreeWalker(document.body);\n    const filter: NodeFilter = w.filter;\n    const response:\n      typeof NodeFilter.FILTER_ACCEPT |\n      typeof NodeFilter.FILTER_REJECT |\n      typeof NodeFilter.FILTER_SKIP =\n      filter.acceptNode(document.body);\n  },\n  // rootNode must be a Node\n  function() {\n    document.createNodeIterator(document.body); // valid\n    document.createNodeIterator({}); // invalid\n  },\n  function() {\n    document.createTreeWalker(document.body);\n    document.createTreeWalker({}); // invalid\n  },\n  // Type Parameters\n  function() {\n    const _root = document.body;\n    const i = document.createNodeIterator(_root, NodeFilter.SHOW_ELEMENT);\n    const root: typeof _root = i.root;\n    const referenceNode: typeof _root | Element = i.referenceNode;\n    const previousNode: Element | null = i.previousNode();\n    const nextNode: Element | null = i.nextNode();\n  },\n  function() {\n    const _root = document.body.attributes[0];\n    const i = document.createNodeIterator(_root, NodeFilter.SHOW_ATTRIBUTE);\n    const root: typeof _root = i.root;\n    const referenceNode: typeof _root | Attr = i.referenceNode\n    const previousNode: Attr | null = i.previousNode();\n    const nextNode: Attr | null = i.nextNode();\n  },\n  function() {\n    const _root = document.body;\n    const i = document.createNodeIterator(_root, NodeFilter.SHOW_TEXT);\n    const root: typeof _root = i.root;\n    const referenceNode: typeof _root | Text = i.referenceNode;\n    const previousNode: Text | null = i.previousNode();\n    const nextNode: Text | null = i.nextNode();\n  },\n  function() {\n    const _root = document;\n    const i = document.createNodeIterator(_root, NodeFilter.SHOW_DOCUMENT);\n    const root: typeof _root = i.root;\n    const referenceNode: typeof _root | Document = i.referenceNode;\n    const previousNode: Document | null = i.previousNode();\n    const nextNode: Document | null = i.nextNode();\n  },\n  function() {\n    const _root = document;\n    const i = document.createNodeIterator(_root, NodeFilter.SHOW_DOCUMENT_TYPE);\n    const root: typeof _root = i.root;\n    const referenceNode: typeof _root | DocumentType = i.referenceNode;\n    const previousNode: DocumentType | null = i.previousNode();\n    const nextNode: DocumentType | null = i.nextNode();\n  },\n  function() {\n    const _root = document.createDocumentFragment();\n    const i = document.createNodeIterator(_root, NodeFilter.SHOW_DOCUMENT_FRAGMENT);\n    const root: typeof _root = i.root;\n    const referenceNode: typeof _root | DocumentFragment = i.referenceNode;\n    const previousNode: DocumentFragment | null = i.previousNode();\n    const nextNode: DocumentFragment | null = i.nextNode();\n  },\n  function() {\n    const _root = document.body;\n    const i = document.createNodeIterator(_root, NodeFilter.SHOW_ALL);\n    const root: typeof _root = i.root;\n    const referenceNode: typeof _root | Node = i.referenceNode;\n    const previousNode: Node | null = i.previousNode();\n    const nextNode: Node | null = i.nextNode();\n  },\n  function() {\n    const _root = document.body;\n    const w = document.createTreeWalker(_root, NodeFilter.SHOW_ELEMENT);\n    const root: typeof _root = w.root;\n    const currentNode: typeof _root | Element = w.currentNode;\n    const parentNode: Element | null = w.parentNode();\n    const firstChild: Element | null = w.firstChild();\n    const lastChild: Element | null = w.lastChild();\n    const previousSibling: Element | null = w.previousSibling();\n    const nextSibling: Element | null = w.nextSibling();\n    const previousNode: Element | null = w.previousNode();\n    const nextNode: Element | null = w.nextNode();\n  },\n  function() {\n    const _root = document.body.attributes[0];\n    const w = document.createTreeWalker(_root, NodeFilter.SHOW_ATTRIBUTE);\n    const root: typeof _root = w.root;\n    const currentNode: typeof _root | Attr = w.currentNode;\n    const parentNode: Attr | null = w.parentNode();\n    const firstChild: Attr | null = w.firstChild();\n    const lastChild: Attr | null = w.lastChild();\n    const previousSibling: Attr | null = w.previousSibling();\n    const nextSibling: Attr | null = w.nextSibling();\n    const previousNode: Attr | null = w.previousNode();\n    const nextNode: Attr | null = w.nextNode();\n  },\n  function() {\n    const _root = document.body;\n    const w = document.createTreeWalker(_root, NodeFilter.SHOW_TEXT);\n    const root: typeof _root = w.root;\n    const currentNode: typeof _root | Text = w.currentNode;\n    const parentNode: Text | null = w.parentNode();\n    const firstChild: Text | null = w.firstChild();\n    const lastChild: Text | null = w.lastChild();\n    const previousSibling: Text | null = w.previousSibling();\n    const nextSibling: Text | null = w.nextSibling();\n    const previousNode: Text | null = w.previousNode();\n    const nextNode: Text | null = w.nextNode();\n  },\n  function() {\n    const _root = document;\n    const w = document.createTreeWalker(_root, NodeFilter.SHOW_DOCUMENT);\n    const root: typeof _root = w.root;\n    const currentNode: typeof _root | Document = w.currentNode;\n    const parentNode: Document | null = w.parentNode();\n    const firstChild: Document | null = w.firstChild();\n    const lastChild: Document | null = w.lastChild();\n    const previousSibling: Document | null = w.previousSibling();\n    const nextSibling: Document | null = w.nextSibling();\n    const previousNode: Document | null = w.previousNode();\n    const nextNode: Document | null = w.nextNode();\n  },\n  function() {\n    const _root = document;\n    const w = document.createTreeWalker(_root, NodeFilter.SHOW_DOCUMENT_TYPE);\n    const root: typeof _root = w.root;\n    const currentNode: typeof _root | DocumentType = w.currentNode;\n    const parentNode: DocumentType | null = w.parentNode();\n    const firstChild: DocumentType | null = w.firstChild();\n    const lastChild: DocumentType | null = w.lastChild();\n    const previousSibling: DocumentType | null = w.previousSibling();\n    const nextSibling: DocumentType | null = w.nextSibling();\n    const previousNode: DocumentType | null = w.previousNode();\n    const nextNode: DocumentType | null = w.nextNode();\n  },\n  function() {\n    const _root = document.createDocumentFragment();\n    const w = document.createTreeWalker(_root, NodeFilter.SHOW_DOCUMENT_FRAGMENT);\n    const root: typeof _root = w.root;\n    const currentNode: typeof _root | DocumentFragment = w.currentNode;\n    const parentNode: DocumentFragment | null = w.parentNode();\n    const firstChild: DocumentFragment | null = w.firstChild();\n    const lastChild: DocumentFragment | null = w.lastChild();\n    const previousSibling: DocumentFragment | null = w.previousSibling();\n    const nextSibling: DocumentFragment | null = w.nextSibling();\n    const previousNode: DocumentFragment | null = w.previousNode();\n    const nextNode: DocumentFragment | null = w.nextNode();\n  },\n  function() {\n    const _root = document.body;\n    const w = document.createTreeWalker(_root, NodeFilter.SHOW_ALL);\n    const root: typeof _root = w.root;\n    const currentNode: typeof _root | Node = w.currentNode;\n    const parentNode: Node | null = w.parentNode();\n    const firstChild: Node | null = w.firstChild();\n    const lastChild: Node | null = w.lastChild();\n    const previousSibling: Node | null = w.previousSibling();\n    const nextSibling: Node | null = w.nextSibling();\n    const previousNode: Node | null = w.previousNode();\n    const nextNode: Node | null = w.nextNode();\n  },\n  // NodeFilterInterface\n  function() {\n    document.createNodeIterator(document.body, -1, node => NodeFilter.FILTER_ACCEPT); // valid\n    document.createNodeIterator(document.body, -1, node => 'accept'); // invalid\n    document.createNodeIterator(document.body, -1, { acceptNode: node => NodeFilter.FILTER_ACCEPT }); // valid\n    document.createNodeIterator(document.body, -1, { acceptNode: node => 'accept' }); // invalid\n    document.createNodeIterator(document.body, -1, {}); // invalid\n  },\n  function() {\n    document.createTreeWalker(document.body, -1, node => NodeFilter.FILTER_ACCEPT); // valid\n    document.createTreeWalker(document.body, -1, node => 'accept'); // invalid\n    document.createTreeWalker(document.body, -1, { acceptNode: node => NodeFilter.FILTER_ACCEPT }); // valid\n    document.createTreeWalker(document.body, -1, { acceptNode: node => 'accept' }); // invalid\n    document.createTreeWalker(document.body, -1, {}); // invalid\n  },\n];\n"
  },
  {
    "path": "tests/flow/dump-types/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`import.js 1`] = `\n// @flow\nvar num = 42;\nfunction bar() { }\nbar();\nmodule.exports = num;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nvar num = 42;\nfunction bar() {}\nbar();\nmodule.exports = num;\n\n`;\n\nexports[`test.js 1`] = `\n// @flow\nvar num = require('./import');\nfunction foo(x) { }\nfoo(0);\nvar a:string = num;\n\nfunction unannotated(x) {\n  return x;\n}\n\n// test deduping of inferred types\nconst nullToUndefined = val => val === null ? undefined : val;\n\nfunction f0(x: ?Object) { return nullToUndefined(x); }\nfunction f1(x: ?Object) { return nullToUndefined(x); }\nfunction f2(x: ?string) { return nullToUndefined(x); }\nfunction f3(x: ?string) { return nullToUndefined(x); }\n\ndeclare var idx: $Facebookism$Idx;\ndeclare var obj: {a?: {b: ?{c: null | {d: number}}}};\nconst idxResult = idx(obj, obj => obj.a.b.c.d);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nvar num = require(\"./import\");\nfunction foo(x) {}\nfoo(0);\nvar a: string = num;\n\nfunction unannotated(x) {\n  return x;\n}\n\n// test deduping of inferred types\nconst nullToUndefined = val => (val === null ? undefined : val);\n\nfunction f0(x: ?Object) {\n  return nullToUndefined(x);\n}\nfunction f1(x: ?Object) {\n  return nullToUndefined(x);\n}\nfunction f2(x: ?string) {\n  return nullToUndefined(x);\n}\nfunction f3(x: ?string) {\n  return nullToUndefined(x);\n}\n\ndeclare var idx: $Facebookism$Idx;\ndeclare var obj: { a?: { b: ?{ c: null | { d: number } } } };\nconst idxResult = idx(obj, obj => obj.a.b.c.d);\n\n`;\n"
  },
  {
    "path": "tests/flow/dump-types/import.js",
    "content": "// @flow\nvar num = 42;\nfunction bar() { }\nbar();\nmodule.exports = num;\n"
  },
  {
    "path": "tests/flow/dump-types/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/dump-types/test.js",
    "content": "// @flow\nvar num = require('./import');\nfunction foo(x) { }\nfoo(0);\nvar a:string = num;\n\nfunction unannotated(x) {\n  return x;\n}\n\n// test deduping of inferred types\nconst nullToUndefined = val => val === null ? undefined : val;\n\nfunction f0(x: ?Object) { return nullToUndefined(x); }\nfunction f1(x: ?Object) { return nullToUndefined(x); }\nfunction f2(x: ?string) { return nullToUndefined(x); }\nfunction f3(x: ?string) { return nullToUndefined(x); }\n\ndeclare var idx: $Facebookism$Idx;\ndeclare var obj: {a?: {b: ?{c: null | {d: number}}}};\nconst idxResult = idx(obj, obj => obj.a.b.c.d);\n"
  },
  {
    "path": "tests/flow/duplicate_methods/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nclass C1 {\n  m() { }\n  m() { }\n}\n\nnew C1().m();\n\nclass C2 {\n  get m() { return 42; }\n  m() { }\n}\n\nnew C2().m();\n\nclass C3 {\n  set m(x) { }\n  m() { }\n}\n\nnew C3().m();\n\nclass C4 {\n  get m() { return 42; }\n  set m(x: number) { }\n}\n\nnew C4().m = new C4().m - 42;\n\nclass C5 {\n  m() { }\n  get m() { return 42; }\n  set m(x: number) { }\n}\n\nnew C5().m = new C5().m - 42;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C1 {\n  m() {}\n  m() {}\n}\n\nnew C1().m();\n\nclass C2 {\n  get m() {\n    return 42;\n  }\n  m() {}\n}\n\nnew C2().m();\n\nclass C3 {\n  set m(x) {}\n  m() {}\n}\n\nnew C3().m();\n\nclass C4 {\n  get m() {\n    return 42;\n  }\n  set m(x: number) {}\n}\n\nnew C4().m = new C4().m - 42;\n\nclass C5 {\n  m() {}\n  get m() {\n    return 42;\n  }\n  set m(x: number) {}\n}\n\nnew C5().m = new C5().m - 42;\n\n`;\n"
  },
  {
    "path": "tests/flow/duplicate_methods/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/duplicate_methods/test.js",
    "content": "class C1 {\n  m() { }\n  m() { }\n}\n\nnew C1().m();\n\nclass C2 {\n  get m() { return 42; }\n  m() { }\n}\n\nnew C2().m();\n\nclass C3 {\n  set m(x) { }\n  m() { }\n}\n\nnew C3().m();\n\nclass C4 {\n  get m() { return 42; }\n  set m(x: number) { }\n}\n\nnew C4().m = new C4().m - 42;\n\nclass C5 {\n  m() { }\n  get m() { return 42; }\n  set m(x: number) { }\n}\n\nnew C5().m = new C5().m - 42;\n"
  },
  {
    "path": "tests/flow/encaps/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`encaps.js 1`] = `\nclass A { }\nvar a = new A();\nvar s1 = \\`l\\${a.x}r\\`; // error: no prop x in A\n\nfunction tag(strings,...values) {\n    var x:number = strings[0]; // error: string ~> number\n    return x;\n}\nvar s2 = tag \\`l\\${42}r\\`;\n\nfunction tag2(strings,...values) {\n  return { foo: \"\" }; // ok: tagged templates can return whatever\n}\n\nvar s3 = tag2 \\`la la la\\`;\n(s3.foo: number); // error: string ~> number\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {}\nvar a = new A();\nvar s1 = \\`l\\${a.x}r\\`; // error: no prop x in A\n\nfunction tag(strings, ...values) {\n  var x: number = strings[0]; // error: string ~> number\n  return x;\n}\nvar s2 = tag\\`l\\${42}r\\`;\n\nfunction tag2(strings, ...values) {\n  return { foo: \"\" }; // ok: tagged templates can return whatever\n}\n\nvar s3 = tag2\\`la la la\\`;\n(s3.foo: number); // error: string ~> number\n\n`;\n"
  },
  {
    "path": "tests/flow/encaps/encaps.js",
    "content": "class A { }\nvar a = new A();\nvar s1 = `l${a.x}r`; // error: no prop x in A\n\nfunction tag(strings,...values) {\n    var x:number = strings[0]; // error: string ~> number\n    return x;\n}\nvar s2 = tag `l${42}r`;\n\nfunction tag2(strings,...values) {\n  return { foo: \"\" }; // ok: tagged templates can return whatever\n}\n\nvar s3 = tag2 `la la la`;\n(s3.foo: number); // error: string ~> number\n"
  },
  {
    "path": "tests/flow/encaps/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/enumerror/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`enumerror.js 1`] = `\n/** @flow */\n\nfunction isActive(ad: {state: $Keys<{\n    PAUSED: string;\n    ACTIVE: string;\n    DELETED: string;\n}>}): boolean {\n    return ad.state === 'ACTIVE';\n};\nisActive({state: 'PAUSE'});\n\nvar MyStates = {\n    PAUSED: 'PAUSED',\n    ACTIVE: 'ACTIVE',\n    DELETED: 'DELETED',\n};\nfunction isActive2(ad: {state: $Keys<typeof MyStates>}): boolean {\n    return ad.state === MyStates.ACTIVE;\n};\nisActive2({state: 'PAUSE'});\n\ntype Keys = $Keys<{ x: any, y: any }>;\ntype Union = \"x\" | \"y\"\n\nfunction keys2union(s: Keys): Union { return s; } // ok\nfunction union2keys(s: Union): Keys { return s; } // ok\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/** @flow */\n\nfunction isActive(ad: {\n  state: $Keys<{\n    PAUSED: string,\n    ACTIVE: string,\n    DELETED: string\n  }>\n}): boolean {\n  return ad.state === \"ACTIVE\";\n}\nisActive({ state: \"PAUSE\" });\n\nvar MyStates = {\n  PAUSED: \"PAUSED\",\n  ACTIVE: \"ACTIVE\",\n  DELETED: \"DELETED\"\n};\nfunction isActive2(ad: { state: $Keys<typeof MyStates> }): boolean {\n  return ad.state === MyStates.ACTIVE;\n}\nisActive2({ state: \"PAUSE\" });\n\ntype Keys = $Keys<{ x: any, y: any }>;\ntype Union = \"x\" | \"y\";\n\nfunction keys2union(s: Keys): Union {\n  return s;\n} // ok\nfunction union2keys(s: Union): Keys {\n  return s;\n} // ok\n\n`;\n"
  },
  {
    "path": "tests/flow/enumerror/enumerror.js",
    "content": "/** @flow */\n\nfunction isActive(ad: {state: $Keys<{\n    PAUSED: string;\n    ACTIVE: string;\n    DELETED: string;\n}>}): boolean {\n    return ad.state === 'ACTIVE';\n};\nisActive({state: 'PAUSE'});\n\nvar MyStates = {\n    PAUSED: 'PAUSED',\n    ACTIVE: 'ACTIVE',\n    DELETED: 'DELETED',\n};\nfunction isActive2(ad: {state: $Keys<typeof MyStates>}): boolean {\n    return ad.state === MyStates.ACTIVE;\n};\nisActive2({state: 'PAUSE'});\n\ntype Keys = $Keys<{ x: any, y: any }>;\ntype Union = \"x\" | \"y\"\n\nfunction keys2union(s: Keys): Union { return s; } // ok\nfunction union2keys(s: Union): Keys { return s; } // ok\n"
  },
  {
    "path": "tests/flow/enumerror/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/equals/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`equals.js 1`] = `\n/* @flow */\n\n(1 == 1);\n(\"foo\" == \"bar\");\n(1 == null);\n(null == 1);\n(1 == \"\"); // error\n(\"\" == 1); // error\n\nvar x = (null : ?number);\n(x == 1);\n(1 == x);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n1 == 1;\n\"foo\" == \"bar\";\n1 == null;\nnull == 1;\n1 == \"\"; // error\n\"\" == 1; // error\n\nvar x = (null: ?number);\nx == 1;\n1 == x;\n\n`;\n"
  },
  {
    "path": "tests/flow/equals/equals.js",
    "content": "/* @flow */\n\n(1 == 1);\n(\"foo\" == \"bar\");\n(1 == null);\n(null == 1);\n(1 == \"\"); // error\n(\"\" == 1); // error\n\nvar x = (null : ?number);\n(x == 1);\n(1 == x);\n"
  },
  {
    "path": "tests/flow/equals/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/error_messages/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`errors.js 1`] = `\nif (typeof define === 'function' && define.amd) { }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nif (typeof define === \"function\" && define.amd) {\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/error_messages/errors.js",
    "content": "if (typeof define === 'function' && define.amd) { }\n"
  },
  {
    "path": "tests/flow/error_messages/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/es6modules/B.js",
    "content": "/* @flow */\n\nexports.numberValue = 42;\n"
  },
  {
    "path": "tests/flow/es6modules/C.js",
    "content": "/* @flow */\n"
  },
  {
    "path": "tests/flow/es6modules/CommonJS_Clobbering_Class.js",
    "content": "/**\n * @providesModule CommonJS_Clobbering_Class\n * @flow\n */\n\nclass Base {\n  static baseProp: number;\n}\n\nclass Test extends Base {\n  static childProp: number;\n\n  static staticNumber1():number { return 1; }\n  static staticNumber2():number { return 2; }\n  static staticNumber3():number { return 3; }\n\n  instNumber1():number { return 1; }\n  instNumber2():number { return 2; }\n};\n\nmodule.exports = Test;\n"
  },
  {
    "path": "tests/flow/es6modules/CommonJS_Clobbering_Frozen.js",
    "content": "/**\n * @providesModule CommonJS_Clobbering_Frozen\n * @flow\n */\n\nmodule.exports = Object.freeze({\n  numberValue1: 1,\n});\n"
  },
  {
    "path": "tests/flow/es6modules/CommonJS_Clobbering_Lit.js",
    "content": "/**\n * @providesModule CommonJS_Clobbering_Lit\n * @flow\n */\n\nmodule.exports = {\n  numberValue1: 1,\n  numberValue2: 2,\n  numberValue3: 3,\n  numberValue4: 4,\n  numberValue5: 5\n};\n"
  },
  {
    "path": "tests/flow/es6modules/CommonJS_Named.js",
    "content": "/**\n * @providesModule CommonJS_Named\n * @flow\n */\n\nexports.numberValue1 = 1;\nexports.numberValue2 = 2;\nexports.numberValue3 = 3;\nexports.numberValue4 = 4;\nexports.numberValue5 = 5;\n"
  },
  {
    "path": "tests/flow/es6modules/ES6_DefaultAndNamed.js",
    "content": "/* @flow */\n\nexport default 42;\nexport var str = 'asdf';\n"
  },
  {
    "path": "tests/flow/es6modules/ES6_Default_AnonClass1.js",
    "content": "/**\n * @providesModule ES6_Default_AnonClass1\n * @flow\n */\n\nexport default class { givesANum(): number { return 42; }};\n"
  },
  {
    "path": "tests/flow/es6modules/ES6_Default_AnonClass2.js",
    "content": "/**\n * @providesModule ES6_Default_AnonClass2\n * @flow\n */\n\nexport default class { givesANum(): number { return 42; }};\n"
  },
  {
    "path": "tests/flow/es6modules/ES6_Default_AnonFunction1.js",
    "content": "/**\n * @providesModule ES6_Default_AnonFunction1\n * @flow\n */\n\nexport default function():number { return 42; }\n"
  },
  {
    "path": "tests/flow/es6modules/ES6_Default_AnonFunction2.js",
    "content": "/**\n * @providesModule ES6_Default_AnonFunction2\n * @flow\n */\n\nexport default function():number { return 42; }\n"
  },
  {
    "path": "tests/flow/es6modules/ES6_Default_NamedClass1.js",
    "content": "/**\n * @providesModule ES6_Default_NamedClass1\n * @flow\n */\n\nexport default class Foo { givesANum(): number { return 42; }};\n\n// Regression test for https://github.com/facebook/flow/issues/511\n//\n// Default-exported class should also be available in local scope\nnew Foo();\n"
  },
  {
    "path": "tests/flow/es6modules/ES6_Default_NamedClass2.js",
    "content": "/**\n * @providesModule ES6_Default_NamedClass2\n * @flow\n */\n\nexport default class Foo { givesANum(): number { return 42; }};\n"
  },
  {
    "path": "tests/flow/es6modules/ES6_Default_NamedFunction1.js",
    "content": "/**\n * @providesModule ES6_Default_NamedFunction1\n * @flow\n */\n\nexport default function foo():number { return 42; }\n"
  },
  {
    "path": "tests/flow/es6modules/ES6_Default_NamedFunction2.js",
    "content": "/**\n * @providesModule ES6_Default_NamedFunction2\n * @flow\n */\n\nexport default function foo():number { return 42; }\n"
  },
  {
    "path": "tests/flow/es6modules/ES6_ExportAllFromMulti.js",
    "content": "// @flow\n\nexport * from \"./ES6_ExportAllFrom_Source1\";\nexport * from \"./ES6_ExportAllFrom_Source2\";\n"
  },
  {
    "path": "tests/flow/es6modules/ES6_ExportAllFrom_Intermediary1.js",
    "content": "/**\n * @providesModule ES6_ExportAllFrom_Intermediary1\n * @flow\n */\n\nexport * from \"ES6_ExportAllFrom_Source1\";\n"
  },
  {
    "path": "tests/flow/es6modules/ES6_ExportAllFrom_Intermediary2.js",
    "content": "/**\n * @providesModule ES6_ExportAllFrom_Intermediary2\n * @flow\n */\n\nexport * from \"ES6_ExportAllFrom_Source2\";\n"
  },
  {
    "path": "tests/flow/es6modules/ES6_ExportAllFrom_Source1.js",
    "content": "/**\n * @providesModule ES6_ExportAllFrom_Source1\n * @flow\n */\n\nexport var numberValue1 = 1;\n"
  },
  {
    "path": "tests/flow/es6modules/ES6_ExportAllFrom_Source2.js",
    "content": "/**\n * @providesModule ES6_ExportAllFrom_Source2\n * @flow\n */\n\nexport var numberValue2 = 1;\n"
  },
  {
    "path": "tests/flow/es6modules/ES6_ExportFrom_Intermediary1.js",
    "content": "/**\n * @providesModule ES6_ExportFrom_Intermediary1\n * @flow\n */\n\nexport {\n  numberValue1,\n  numberValue2 as numberValue2_renamed\n} from \"ES6_ExportFrom_Source1\";\n"
  },
  {
    "path": "tests/flow/es6modules/ES6_ExportFrom_Intermediary2.js",
    "content": "/**\n * @providesModule ES6_ExportFrom_Intermediary2\n * @flow\n */\n\nexport {\n  numberValue1,\n  numberValue2 as numberValue2_renamed2\n} from \"ES6_ExportFrom_Source2\";\n"
  },
  {
    "path": "tests/flow/es6modules/ES6_ExportFrom_Source1.js",
    "content": "/**\n * @providesModule ES6_ExportFrom_Source1\n * @flow\n */\n\nexport var numberValue1 = 1, numberValue2 = 2;\n"
  },
  {
    "path": "tests/flow/es6modules/ES6_ExportFrom_Source2.js",
    "content": "/**\n * @providesModule ES6_ExportFrom_Source2\n * @flow\n */\n\nexport var numberValue1 = 1, numberValue2 = 2;\n"
  },
  {
    "path": "tests/flow/es6modules/ES6_Named1.js",
    "content": "/**\n * @providesModule ES6_Named1\n * @flow\n */\n\nvar specifierNumber1 = 1;\nvar specifierNumber2 = 2;\nvar specifierNumber3 = 3;\nvar groupedSpecifierNumber1 = 1;\nvar groupedSpecifierNumber2 = 2;\n\nexport {specifierNumber1};\nexport {specifierNumber2 as specifierNumber2Renamed};\nexport {specifierNumber3};\nexport {groupedSpecifierNumber1, groupedSpecifierNumber2};\n\nexport function givesANumber(): number { return 42; };\nexport class NumberGenerator { givesANumber(): number { return 42; }};\n\nexport var varDeclNumber1 = 1, varDeclNumber2 = 2;\nexport var {destructuredObjNumber} = {destructuredObjNumber: 1};\nexport var [destructuredArrNumber] = [1]\n"
  },
  {
    "path": "tests/flow/es6modules/ES6_Named2.js",
    "content": "/**\n * @providesModule ES6_Named2\n * @flow\n */\n\nvar specifierNumber4 = 1;\nvar specifierNumber5 = 2;\nvar groupedSpecifierNumber3 = 1;\nvar groupedSpecifierNumber4 = 2;\n\nexport {specifierNumber4};\nexport {specifierNumber5 as specifierNumber5Renamed};\nexport {groupedSpecifierNumber3, groupedSpecifierNumber4};\n\nexport function givesANumber2(): number { return 42; };\nexport class NumberGenerator2 { givesANumber(): number { return 42; }};\n\nexport var varDeclNumber3 = 1, varDeclNumber4 = 2;\nexport var {destructuredObjNumber2} = {destructuredObjNumber2: 1};\nexport var [destructuredArrNumber2] = [1]\n"
  },
  {
    "path": "tests/flow/es6modules/ExportType.js",
    "content": "// @flow\n\nexport type typeAlias = number;\n"
  },
  {
    "path": "tests/flow/es6modules/ProvidesModuleA.js",
    "content": "/**\n * @providesModule A\n * @flow\n */\n\nexports.numberValue1 = 42;\nexports.numberValue2 = 42;\nexports.numberValue3 = 42;\nexports.numberValue4 = 42;\nexports.stringValue = \"str\";\n"
  },
  {
    "path": "tests/flow/es6modules/ProvidesModuleCJSDefault.js",
    "content": "/**\n * @providesModule CJSDefault\n * @flow\n */\n\nmodule.exports = {\n  numberValue: 42\n};\n"
  },
  {
    "path": "tests/flow/es6modules/ProvidesModuleD.js",
    "content": "/**\n * @providesModule D\n * @flow\n */\n"
  },
  {
    "path": "tests/flow/es6modules/ProvidesModuleES6Default.js",
    "content": "/**\n * @providesModule ES6Default\n * @flow\n */\n\n/*\nexport default {\n  numberValue: 42,\n};\n*/\n"
  },
  {
    "path": "tests/flow/es6modules/SideEffects.js",
    "content": "/* @flow */\n"
  },
  {
    "path": "tests/flow/es6modules/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`B.js 1`] = `\n/* @flow */\n\nexports.numberValue = 42;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nexports.numberValue = 42;\n\n`;\n\nexports[`C.js 1`] = `\n/* @flow */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n`;\n\nexports[`CommonJS_Clobbering_Class.js 1`] = `\n/**\n * @providesModule CommonJS_Clobbering_Class\n * @flow\n */\n\nclass Base {\n  static baseProp: number;\n}\n\nclass Test extends Base {\n  static childProp: number;\n\n  static staticNumber1():number { return 1; }\n  static staticNumber2():number { return 2; }\n  static staticNumber3():number { return 3; }\n\n  instNumber1():number { return 1; }\n  instNumber2():number { return 2; }\n};\n\nmodule.exports = Test;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule CommonJS_Clobbering_Class\n * @flow\n */\n\nclass Base {\n  static baseProp: number;\n}\n\nclass Test extends Base {\n  static childProp: number;\n\n  static staticNumber1(): number {\n    return 1;\n  }\n  static staticNumber2(): number {\n    return 2;\n  }\n  static staticNumber3(): number {\n    return 3;\n  }\n\n  instNumber1(): number {\n    return 1;\n  }\n  instNumber2(): number {\n    return 2;\n  }\n}\n\nmodule.exports = Test;\n\n`;\n\nexports[`CommonJS_Clobbering_Frozen.js 1`] = `\n/**\n * @providesModule CommonJS_Clobbering_Frozen\n * @flow\n */\n\nmodule.exports = Object.freeze({\n  numberValue1: 1,\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule CommonJS_Clobbering_Frozen\n * @flow\n */\n\nmodule.exports = Object.freeze({\n  numberValue1: 1\n});\n\n`;\n\nexports[`CommonJS_Clobbering_Lit.js 1`] = `\n/**\n * @providesModule CommonJS_Clobbering_Lit\n * @flow\n */\n\nmodule.exports = {\n  numberValue1: 1,\n  numberValue2: 2,\n  numberValue3: 3,\n  numberValue4: 4,\n  numberValue5: 5\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule CommonJS_Clobbering_Lit\n * @flow\n */\n\nmodule.exports = {\n  numberValue1: 1,\n  numberValue2: 2,\n  numberValue3: 3,\n  numberValue4: 4,\n  numberValue5: 5\n};\n\n`;\n\nexports[`CommonJS_Named.js 1`] = `\n/**\n * @providesModule CommonJS_Named\n * @flow\n */\n\nexports.numberValue1 = 1;\nexports.numberValue2 = 2;\nexports.numberValue3 = 3;\nexports.numberValue4 = 4;\nexports.numberValue5 = 5;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule CommonJS_Named\n * @flow\n */\n\nexports.numberValue1 = 1;\nexports.numberValue2 = 2;\nexports.numberValue3 = 3;\nexports.numberValue4 = 4;\nexports.numberValue5 = 5;\n\n`;\n\nexports[`ES6_Default_AnonClass1.js 1`] = `\n/**\n * @providesModule ES6_Default_AnonClass1\n * @flow\n */\n\nexport default class { givesANum(): number { return 42; }};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_Default_AnonClass1\n * @flow\n */\n\nexport default class {\n  givesANum(): number {\n    return 42;\n  }\n}\n\n`;\n\nexports[`ES6_Default_AnonClass2.js 1`] = `\n/**\n * @providesModule ES6_Default_AnonClass2\n * @flow\n */\n\nexport default class { givesANum(): number { return 42; }};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_Default_AnonClass2\n * @flow\n */\n\nexport default class {\n  givesANum(): number {\n    return 42;\n  }\n}\n\n`;\n\nexports[`ES6_Default_AnonFunction1.js 1`] = `\n/**\n * @providesModule ES6_Default_AnonFunction1\n * @flow\n */\n\nexport default function():number { return 42; }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_Default_AnonFunction1\n * @flow\n */\n\nexport default function(): number {\n  return 42;\n}\n\n`;\n\nexports[`ES6_Default_AnonFunction2.js 1`] = `\n/**\n * @providesModule ES6_Default_AnonFunction2\n * @flow\n */\n\nexport default function():number { return 42; }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_Default_AnonFunction2\n * @flow\n */\n\nexport default function(): number {\n  return 42;\n}\n\n`;\n\nexports[`ES6_Default_NamedClass1.js 1`] = `\n/**\n * @providesModule ES6_Default_NamedClass1\n * @flow\n */\n\nexport default class Foo { givesANum(): number { return 42; }};\n\n// Regression test for https://github.com/facebook/flow/issues/511\n//\n// Default-exported class should also be available in local scope\nnew Foo();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_Default_NamedClass1\n * @flow\n */\n\nexport default class Foo {\n  givesANum(): number {\n    return 42;\n  }\n}\n\n// Regression test for https://github.com/facebook/flow/issues/511\n//\n// Default-exported class should also be available in local scope\nnew Foo();\n\n`;\n\nexports[`ES6_Default_NamedClass2.js 1`] = `\n/**\n * @providesModule ES6_Default_NamedClass2\n * @flow\n */\n\nexport default class Foo { givesANum(): number { return 42; }};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_Default_NamedClass2\n * @flow\n */\n\nexport default class Foo {\n  givesANum(): number {\n    return 42;\n  }\n}\n\n`;\n\nexports[`ES6_Default_NamedFunction1.js 1`] = `\n/**\n * @providesModule ES6_Default_NamedFunction1\n * @flow\n */\n\nexport default function foo():number { return 42; }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_Default_NamedFunction1\n * @flow\n */\n\nexport default function foo(): number {\n  return 42;\n}\n\n`;\n\nexports[`ES6_Default_NamedFunction2.js 1`] = `\n/**\n * @providesModule ES6_Default_NamedFunction2\n * @flow\n */\n\nexport default function foo():number { return 42; }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_Default_NamedFunction2\n * @flow\n */\n\nexport default function foo(): number {\n  return 42;\n}\n\n`;\n\nexports[`ES6_DefaultAndNamed.js 1`] = `\n/* @flow */\n\nexport default 42;\nexport var str = 'asdf';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nexport default 42;\nexport var str = \"asdf\";\n\n`;\n\nexports[`ES6_ExportAllFrom_Intermediary1.js 1`] = `\n/**\n * @providesModule ES6_ExportAllFrom_Intermediary1\n * @flow\n */\n\nexport * from \"ES6_ExportAllFrom_Source1\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_ExportAllFrom_Intermediary1\n * @flow\n */\n\nexport * from \"ES6_ExportAllFrom_Source1\";\n\n`;\n\nexports[`ES6_ExportAllFrom_Intermediary2.js 1`] = `\n/**\n * @providesModule ES6_ExportAllFrom_Intermediary2\n * @flow\n */\n\nexport * from \"ES6_ExportAllFrom_Source2\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_ExportAllFrom_Intermediary2\n * @flow\n */\n\nexport * from \"ES6_ExportAllFrom_Source2\";\n\n`;\n\nexports[`ES6_ExportAllFrom_Source1.js 1`] = `\n/**\n * @providesModule ES6_ExportAllFrom_Source1\n * @flow\n */\n\nexport var numberValue1 = 1;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_ExportAllFrom_Source1\n * @flow\n */\n\nexport var numberValue1 = 1;\n\n`;\n\nexports[`ES6_ExportAllFrom_Source2.js 1`] = `\n/**\n * @providesModule ES6_ExportAllFrom_Source2\n * @flow\n */\n\nexport var numberValue2 = 1;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_ExportAllFrom_Source2\n * @flow\n */\n\nexport var numberValue2 = 1;\n\n`;\n\nexports[`ES6_ExportAllFromMulti.js 1`] = `\n// @flow\n\nexport * from \"./ES6_ExportAllFrom_Source1\";\nexport * from \"./ES6_ExportAllFrom_Source2\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport * from \"./ES6_ExportAllFrom_Source1\";\nexport * from \"./ES6_ExportAllFrom_Source2\";\n\n`;\n\nexports[`ES6_ExportFrom_Intermediary1.js 1`] = `\n/**\n * @providesModule ES6_ExportFrom_Intermediary1\n * @flow\n */\n\nexport {\n  numberValue1,\n  numberValue2 as numberValue2_renamed\n} from \"ES6_ExportFrom_Source1\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_ExportFrom_Intermediary1\n * @flow\n */\n\nexport {\n  numberValue1,\n  numberValue2 as numberValue2_renamed\n} from \"ES6_ExportFrom_Source1\";\n\n`;\n\nexports[`ES6_ExportFrom_Intermediary2.js 1`] = `\n/**\n * @providesModule ES6_ExportFrom_Intermediary2\n * @flow\n */\n\nexport {\n  numberValue1,\n  numberValue2 as numberValue2_renamed2\n} from \"ES6_ExportFrom_Source2\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_ExportFrom_Intermediary2\n * @flow\n */\n\nexport {\n  numberValue1,\n  numberValue2 as numberValue2_renamed2\n} from \"ES6_ExportFrom_Source2\";\n\n`;\n\nexports[`ES6_ExportFrom_Source1.js 1`] = `\n/**\n * @providesModule ES6_ExportFrom_Source1\n * @flow\n */\n\nexport var numberValue1 = 1, numberValue2 = 2;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_ExportFrom_Source1\n * @flow\n */\n\nexport var numberValue1 = 1,\n  numberValue2 = 2;\n\n`;\n\nexports[`ES6_ExportFrom_Source2.js 1`] = `\n/**\n * @providesModule ES6_ExportFrom_Source2\n * @flow\n */\n\nexport var numberValue1 = 1, numberValue2 = 2;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_ExportFrom_Source2\n * @flow\n */\n\nexport var numberValue1 = 1,\n  numberValue2 = 2;\n\n`;\n\nexports[`ES6_Named1.js 1`] = `\n/**\n * @providesModule ES6_Named1\n * @flow\n */\n\nvar specifierNumber1 = 1;\nvar specifierNumber2 = 2;\nvar specifierNumber3 = 3;\nvar groupedSpecifierNumber1 = 1;\nvar groupedSpecifierNumber2 = 2;\n\nexport {specifierNumber1};\nexport {specifierNumber2 as specifierNumber2Renamed};\nexport {specifierNumber3};\nexport {groupedSpecifierNumber1, groupedSpecifierNumber2};\n\nexport function givesANumber(): number { return 42; };\nexport class NumberGenerator { givesANumber(): number { return 42; }};\n\nexport var varDeclNumber1 = 1, varDeclNumber2 = 2;\nexport var {destructuredObjNumber} = {destructuredObjNumber: 1};\nexport var [destructuredArrNumber] = [1]\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_Named1\n * @flow\n */\n\nvar specifierNumber1 = 1;\nvar specifierNumber2 = 2;\nvar specifierNumber3 = 3;\nvar groupedSpecifierNumber1 = 1;\nvar groupedSpecifierNumber2 = 2;\n\nexport { specifierNumber1 };\nexport { specifierNumber2 as specifierNumber2Renamed };\nexport { specifierNumber3 };\nexport { groupedSpecifierNumber1, groupedSpecifierNumber2 };\n\nexport function givesANumber(): number {\n  return 42;\n}\nexport class NumberGenerator {\n  givesANumber(): number {\n    return 42;\n  }\n}\n\nexport var varDeclNumber1 = 1,\n  varDeclNumber2 = 2;\nexport var { destructuredObjNumber } = { destructuredObjNumber: 1 };\nexport var [destructuredArrNumber] = [1];\n\n`;\n\nexports[`ES6_Named2.js 1`] = `\n/**\n * @providesModule ES6_Named2\n * @flow\n */\n\nvar specifierNumber4 = 1;\nvar specifierNumber5 = 2;\nvar groupedSpecifierNumber3 = 1;\nvar groupedSpecifierNumber4 = 2;\n\nexport {specifierNumber4};\nexport {specifierNumber5 as specifierNumber5Renamed};\nexport {groupedSpecifierNumber3, groupedSpecifierNumber4};\n\nexport function givesANumber2(): number { return 42; };\nexport class NumberGenerator2 { givesANumber(): number { return 42; }};\n\nexport var varDeclNumber3 = 1, varDeclNumber4 = 2;\nexport var {destructuredObjNumber2} = {destructuredObjNumber2: 1};\nexport var [destructuredArrNumber2] = [1]\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6_Named2\n * @flow\n */\n\nvar specifierNumber4 = 1;\nvar specifierNumber5 = 2;\nvar groupedSpecifierNumber3 = 1;\nvar groupedSpecifierNumber4 = 2;\n\nexport { specifierNumber4 };\nexport { specifierNumber5 as specifierNumber5Renamed };\nexport { groupedSpecifierNumber3, groupedSpecifierNumber4 };\n\nexport function givesANumber2(): number {\n  return 42;\n}\nexport class NumberGenerator2 {\n  givesANumber(): number {\n    return 42;\n  }\n}\n\nexport var varDeclNumber3 = 1,\n  varDeclNumber4 = 2;\nexport var { destructuredObjNumber2 } = { destructuredObjNumber2: 1 };\nexport var [destructuredArrNumber2] = [1];\n\n`;\n\nexports[`ExportType.js 1`] = `\n// @flow\n\nexport type typeAlias = number;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport type typeAlias = number;\n\n`;\n\nexports[`ProvidesModuleA.js 1`] = `\n/**\n * @providesModule A\n * @flow\n */\n\nexports.numberValue1 = 42;\nexports.numberValue2 = 42;\nexports.numberValue3 = 42;\nexports.numberValue4 = 42;\nexports.stringValue = \"str\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule A\n * @flow\n */\n\nexports.numberValue1 = 42;\nexports.numberValue2 = 42;\nexports.numberValue3 = 42;\nexports.numberValue4 = 42;\nexports.stringValue = \"str\";\n\n`;\n\nexports[`ProvidesModuleCJSDefault.js 1`] = `\n/**\n * @providesModule CJSDefault\n * @flow\n */\n\nmodule.exports = {\n  numberValue: 42\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule CJSDefault\n * @flow\n */\n\nmodule.exports = {\n  numberValue: 42\n};\n\n`;\n\nexports[`ProvidesModuleD.js 1`] = `\n/**\n * @providesModule D\n * @flow\n */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule D\n * @flow\n */\n\n`;\n\nexports[`ProvidesModuleES6Default.js 1`] = `\n/**\n * @providesModule ES6Default\n * @flow\n */\n\n/*\nexport default {\n  numberValue: 42,\n};\n*/\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ES6Default\n * @flow\n */\n\n/*\nexport default {\n  numberValue: 42,\n};\n*/\n\n`;\n\nexports[`SideEffects.js 1`] = `\n/* @flow */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n`;\n\nexports[`es6modules.js 1`] = `\n/* @flow */\n\n// ===================== //\n// == Path Resolution == //\n// ===================== //\n\n// @providesModule\nimport * as DefaultA from \"A\";\nvar a1: number = DefaultA.numberValue1;\nvar a2: string = DefaultA.numberValue1; // Error: number ~> string\n\n// File path\nimport * as DefaultB from \"./B\";\nvar b1: number = DefaultB.numberValue;\nvar b2: string = DefaultB.numberValue; // Error: number ~> string\n\n// C.js exists, but not as a providesModule\nimport DefaultC from \"C\"; // Error: No such module\n\n// @providesModule D exists, but not as a filename\nimport DefaultD from \"./D\"; // Error: No such module\n\n// ================================================ //\n// == CommonJS Clobbering Literal Exports -> ES6 == //\n// ================================================ //\n\nimport {doesntExist1} from \"CommonJS_Clobbering_Lit\"; // Error: Not an exported binding\n\nimport {numberValue1} from \"CommonJS_Clobbering_Lit\";\nvar c1: number = numberValue1;\nvar c2: string = numberValue1; // Error: number ~> string\n\nimport {numberValue2 as numVal1} from \"CommonJS_Clobbering_Lit\";\nvar d1: number = numVal1;\nvar d2: string = numVal1; // Error: number ~> string\n\nimport CJS_Clobb_Lit from \"CommonJS_Clobbering_Lit\";\nvar e1: number = CJS_Clobb_Lit.numberValue3;\nvar e2: string = CJS_Clobb_Lit.numberValue3; // Error: number ~> string\nCJS_Clobb_Lit.doesntExist; // Error: doesntExist isn't a property\n\nimport * as CJS_Clobb_Lit_NS from \"CommonJS_Clobbering_Lit\";\nvar f1: number = CJS_Clobb_Lit_NS.numberValue4;\nvar f2: number = CJS_Clobb_Lit_NS.default.numberValue4;\nCJS_Clobb_Lit_NS.default.default; // Error: No 'default' property on the exported obj\nvar f3: string = CJS_Clobb_Lit_NS.numberValue4; // Error: number ~> string\nvar f4: string = CJS_Clobb_Lit_NS.default.numberValue5; // Error: number ~> string\n\n// ============================================== //\n// == CommonJS Clobbering Class Exports -> ES6 == //\n// ============================================== //\n\nimport {doesntExist2} from \"CommonJS_Clobbering_Class\"; // Error: Not an exported binding\n\n// The following import should error because class statics are not turned into\n// named exports for now. This avoids complexities with polymorphic static\n// members (where the polymophism is defined on the class itself rather than the\n// method).\nimport {staticNumber1, baseProp, childProp} from \"CommonJS_Clobbering_Class\"; // Error\n\nimport CJS_Clobb_Class from \"CommonJS_Clobbering_Class\";\nnew CJS_Clobb_Class();\nnew CJS_Clobb_Class().doesntExist; // Error: Class has no \\`doesntExist\\` property\nvar h1: number = CJS_Clobb_Class.staticNumber2();\nvar h2: string = CJS_Clobb_Class.staticNumber2(); // Error: number ~> string\nvar h3: number = new CJS_Clobb_Class().instNumber1();\nvar h4: string = new CJS_Clobb_Class().instNumber1(); // Error: number ~> string\n\nimport * as CJS_Clobb_Class_NS from \"CommonJS_Clobbering_Class\";\nnew CJS_Clobb_Class_NS(); // Error: Namespace object isn't constructable\nvar i1: number = CJS_Clobb_Class_NS.staticNumber3(); // Error: Class statics not copied to Namespace object\nvar i2: number = new CJS_Clobb_Class_NS.default().instNumber2();\nvar i3: string = new CJS_Clobb_Class_NS.default().instNumber2(); // Error: number ~> string\n\n// =================================== //\n// == CommonJS Named Exports -> ES6 == //\n// =================================== //\n\nimport {doesntExist3} from \"CommonJS_Named\"; // Error: Not an exported binding\n\nimport {numberValue2} from \"CommonJS_Named\";\nvar j1: number = numberValue2;\nvar j2: string = numberValue2; // Error: number ~> string\n\nimport {numberValue3 as numVal3} from \"CommonJS_Named\";\nvar k1: number = numVal3;\nvar k2: string = numVal3; // Error: number ~> string\n\nimport * as CJS_Named from \"CommonJS_Named\";\nvar l1: number = CJS_Named.numberValue1;\nvar l2: string = CJS_Named.numberValue1; // Error: number ~> string\nCJS_Named.doesntExist; // Error: doesntExist isn't a property\n\nimport * as CJS_Named_NS from \"CommonJS_Named\";\nvar m1: number = CJS_Named_NS.numberValue4;\nvar m2: string = CJS_Named_NS.default.numberValue4; // Error: CommonJS_Named has no default export\nvar m3: string = CJS_Named_NS.numberValue4; // Error: number ~> string\n\n//////////////////////////////\n// == ES6 Default -> ES6 == //\n//////////////////////////////\n\nimport {doesntExist4} from \"ES6_Default_AnonFunction1\"; // Error: Not an exported binding\n\nimport ES6_Def_AnonFunc1 from \"ES6_Default_AnonFunction1\";\nvar n1: number = ES6_Def_AnonFunc1();\nvar n2: string = ES6_Def_AnonFunc1(); // Error: number ~> string\n\nimport ES6_Def_NamedFunc1 from \"ES6_Default_NamedFunction1\";\nvar o1: number = ES6_Def_NamedFunc1();\nvar o2: string = ES6_Def_NamedFunc1(); // Error: number ~> string\n\nimport ES6_Def_AnonClass1 from \"ES6_Default_AnonClass1\";\nvar p1: number = new ES6_Def_AnonClass1().givesANum();\nvar p2: string = new ES6_Def_AnonClass1().givesANum(); // Error: number ~> string\n\nimport ES6_Def_NamedClass1 from \"ES6_Default_NamedClass1\";\nvar q1: number = new ES6_Def_NamedClass1().givesANum();\nvar q2: string = new ES6_Def_NamedClass1().givesANum(); // Error: number ~> string\n\n////////////////////////////\n// == ES6 Named -> ES6 == //\n////////////////////////////\n\nimport doesntExist5 from \"ES6_Named1\"; // Error: Not an exported binding\n\nimport {specifierNumber1 as specifierNumber1_1} from \"ES6_Named1\";\nvar r1: number = specifierNumber1_1;\nvar r2: string = specifierNumber1_1; // Error: number ~> string\n\nimport {specifierNumber2Renamed} from \"ES6_Named1\";\nvar s1: number = specifierNumber2Renamed;\nvar s2: string = specifierNumber2Renamed; // Error: number ~> string\n\nimport {specifierNumber3 as specifierNumber3Renamed} from \"ES6_Named1\";\nvar t1: number = specifierNumber3Renamed;\nvar t2: string = specifierNumber3Renamed; // Error: number ~> string\n\nimport {groupedSpecifierNumber1, groupedSpecifierNumber2} from \"ES6_Named1\";\nvar u1: number = groupedSpecifierNumber1;\nvar u2: number = groupedSpecifierNumber2;\nvar u3: string = groupedSpecifierNumber1; // Error: number ~> string\nvar u4: string = groupedSpecifierNumber2; // Error: number ~> string\n\nimport {givesANumber} from \"ES6_Named1\";\nvar v1: number = givesANumber();\nvar v2: string = givesANumber(); // Error: number ~> string\n\nimport {NumberGenerator} from \"ES6_Named1\";\nvar w1: number = new NumberGenerator().givesANumber();\nvar w2: string = new NumberGenerator().givesANumber(); // Error: number ~> string\n\nimport {varDeclNumber1, varDeclNumber2} from \"ES6_Named1\";\nvar x1: number = varDeclNumber1;\nvar x2: number = varDeclNumber2;\nvar x3: string = varDeclNumber1; // Error: number ~> string\nvar x4: string = varDeclNumber2; // Error: number ~> string\n\nimport {destructuredObjNumber} from \"ES6_Named1\";\nvar y1: number = destructuredObjNumber;\nvar y2: string = destructuredObjNumber; // Error: number ~> string\n\nimport {destructuredArrNumber} from \"ES6_Named1\";\nvar z1: number = destructuredArrNumber;\nvar z2: string = destructuredArrNumber; // Error: number ~> string\n\nimport {numberValue1 as numberValue4} from \"ES6_ExportFrom_Intermediary1\";\nvar aa1: number = numberValue4;\nvar aa2: string = numberValue4; // Error: number ~> string\n\nimport {numberValue2_renamed} from \"ES6_ExportFrom_Intermediary1\";\nvar ab1: number = numberValue2_renamed;\nvar ab2: string = numberValue2_renamed; // Error: number ~> string\n\nimport {numberValue1 as numberValue5} from \"ES6_ExportAllFrom_Intermediary1\";\nvar ac1: number = numberValue5;\nvar ac2: string = numberValue5; // Error: number ~> string\n\n///////////////////////////////////\n// == ES6 Default -> CommonJS == //\n///////////////////////////////////\n\nrequire('ES6_Default_AnonFunction2').doesntExist; // Error: 'doesntExist' isn't an export\n\nvar ES6_Def_AnonFunc2 = require(\"ES6_Default_AnonFunction2\").default;\nvar ad1: number = ES6_Def_AnonFunc2();\nvar ad2: string = ES6_Def_AnonFunc2(); // Error: number ~> string\n\nvar ES6_Def_NamedFunc2 = require(\"ES6_Default_NamedFunction2\").default;\nvar ae1: number = ES6_Def_NamedFunc2();\nvar ae2: string = ES6_Def_NamedFunc2(); // Error: number ~> string\n\nvar ES6_Def_AnonClass2 = require(\"ES6_Default_AnonClass2\").default;\nvar af1: number = new ES6_Def_AnonClass2().givesANum();\nvar af2: string = new ES6_Def_AnonClass2().givesANum(); // Error: number ~> string\n\nvar ES6_Def_NamedClass2 = require(\"ES6_Default_NamedClass2\").default;\nvar ag1: number = new ES6_Def_NamedClass2().givesANum();\nvar ag2: string = new ES6_Def_NamedClass2().givesANum(); // Error: number ~> string\n\n/////////////////////////////////\n// == ES6 Named -> CommonJS == //\n/////////////////////////////////\n\nvar specifierNumber4 = require(\"ES6_Named2\").specifierNumber4;\nvar ah1: number = specifierNumber4;\nvar ah2: string = specifierNumber4; // Error: number ~> string\n\nvar specifierNumber5Renamed = require(\"ES6_Named2\").specifierNumber5Renamed;\nvar ai1: number = specifierNumber5Renamed;\nvar ai2: string = specifierNumber5Renamed; // Error: number ~> string\n\nvar groupedSpecifierNumber3 = require(\"ES6_Named2\").groupedSpecifierNumber3;\nvar groupedSpecifierNumber4 = require(\"ES6_Named2\").groupedSpecifierNumber4;\nvar aj1: number = groupedSpecifierNumber3;\nvar aj2: number = groupedSpecifierNumber4;\nvar aj3: string = groupedSpecifierNumber3; // Error: number ~> string\nvar aj4: string = groupedSpecifierNumber4; // Error: number ~> string\n\nvar givesANumber2 = require(\"ES6_Named2\").givesANumber2;\nvar ak1: number = givesANumber2();\nvar ak2: string = givesANumber2(); // Error: number ~> string\n\nvar NumberGenerator2 = require(\"ES6_Named2\").NumberGenerator2;\nvar al1: number = new NumberGenerator2().givesANumber();\nvar al2: string = new NumberGenerator2().givesANumber(); // Error: number ~> string\n\nvar varDeclNumber3 = require(\"ES6_Named2\").varDeclNumber3;\nvar varDeclNumber4 = require(\"ES6_Named2\").varDeclNumber4;\nvar am1: number = varDeclNumber3;\nvar am2: number = varDeclNumber4;\nvar am3: string = varDeclNumber3; // Error: number ~> string\nvar am4: string = varDeclNumber4; // Error: number ~> string\n\nvar destructuredObjNumber2 = require(\"ES6_Named2\").destructuredObjNumber2;\nvar an1: number = destructuredObjNumber2;\nvar an2: string = destructuredObjNumber2; // Error: number ~> string\n\nvar destructuredArrNumber2 = require(\"ES6_Named2\").destructuredArrNumber2;\nvar ao1: number = destructuredArrNumber2;\nvar ao2: string = destructuredArrNumber2; // Error: number ~> string\n\nvar numberValue6 = require(\"ES6_ExportFrom_Intermediary2\").numberValue1;\nvar ap1: number = numberValue6;\nvar ap2: string = numberValue6; // Error: number ~> string\n\nvar numberValue2_renamed2 = require(\"ES6_ExportFrom_Intermediary2\").numberValue2_renamed2;\nvar aq1: number = numberValue2_renamed2;\nvar aq2: string = numberValue2_renamed2; // Error: number ~> string\n\nvar numberValue7 = require(\"ES6_ExportAllFrom_Intermediary2\").numberValue2;\nvar ar1: number = numberValue7;\nvar ar2: string = numberValue7; // Error: number ~> string\n\n////////////////////////////////////////////////////////\n// == ES6 Default+Named -> ES6 import Default+Named== //\n////////////////////////////////////////////////////////\n\nimport defaultNum, {str as namedStr} from \"./ES6_DefaultAndNamed\";\n\nvar as1: number = defaultNum;\nvar as2: string = defaultNum; // Error: number ~> string\n\nvar as3: string = namedStr;\nvar as4: number = namedStr; // Error: string ~> number\n\n////////////////////////////////////////\n// == Side-effect only ES6 imports == //\n////////////////////////////////////////\n\nimport \"./SideEffects\";\n\n//////////////////////////////////////////////\n// == Suggest export name on likely typo == //\n//////////////////////////////////////////////\nimport specifierNumber1 from \"ES6_Named1\"; // Error: Did you mean \\`import {specifierNumber1} from ...\\`?\nimport {specifierNumber} from \"ES6_Named1\"; // Error: Did you mean \\`specifierNumber1\\`?\n\n///////////////////////////////////////////////////\n// == Multi \\`export *\\` should combine exports == //\n///////////////////////////////////////////////////\nimport {\n  numberValue1 as numberValue8,\n  numberValue2 as numberValue9\n} from \"./ES6_ExportAllFromMulti\";\n\nvar at1: number = numberValue8;\nvar at2: string = numberValue8; // Error: number ~> string\n\nvar at3: number = numberValue9;\nvar at4: string = numberValue9; // Error: number ~> string\n\n/////////////////////////////////////////////////////////////\n// == Vanilla \\`import\\` cannot import a type-only export == //\n/////////////////////////////////////////////////////////////\nimport {typeAlias} from \"./ExportType\"; // Error: Cannot vanilla-import a type alias!\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n// ===================== //\n// == Path Resolution == //\n// ===================== //\n\n// @providesModule\nimport * as DefaultA from \"A\";\nvar a1: number = DefaultA.numberValue1;\nvar a2: string = DefaultA.numberValue1; // Error: number ~> string\n\n// File path\nimport * as DefaultB from \"./B\";\nvar b1: number = DefaultB.numberValue;\nvar b2: string = DefaultB.numberValue; // Error: number ~> string\n\n// C.js exists, but not as a providesModule\nimport DefaultC from \"C\"; // Error: No such module\n\n// @providesModule D exists, but not as a filename\nimport DefaultD from \"./D\"; // Error: No such module\n\n// ================================================ //\n// == CommonJS Clobbering Literal Exports -> ES6 == //\n// ================================================ //\n\nimport { doesntExist1 } from \"CommonJS_Clobbering_Lit\"; // Error: Not an exported binding\n\nimport { numberValue1 } from \"CommonJS_Clobbering_Lit\";\nvar c1: number = numberValue1;\nvar c2: string = numberValue1; // Error: number ~> string\n\nimport { numberValue2 as numVal1 } from \"CommonJS_Clobbering_Lit\";\nvar d1: number = numVal1;\nvar d2: string = numVal1; // Error: number ~> string\n\nimport CJS_Clobb_Lit from \"CommonJS_Clobbering_Lit\";\nvar e1: number = CJS_Clobb_Lit.numberValue3;\nvar e2: string = CJS_Clobb_Lit.numberValue3; // Error: number ~> string\nCJS_Clobb_Lit.doesntExist; // Error: doesntExist isn't a property\n\nimport * as CJS_Clobb_Lit_NS from \"CommonJS_Clobbering_Lit\";\nvar f1: number = CJS_Clobb_Lit_NS.numberValue4;\nvar f2: number = CJS_Clobb_Lit_NS.default.numberValue4;\nCJS_Clobb_Lit_NS.default.default; // Error: No 'default' property on the exported obj\nvar f3: string = CJS_Clobb_Lit_NS.numberValue4; // Error: number ~> string\nvar f4: string = CJS_Clobb_Lit_NS.default.numberValue5; // Error: number ~> string\n\n// ============================================== //\n// == CommonJS Clobbering Class Exports -> ES6 == //\n// ============================================== //\n\nimport { doesntExist2 } from \"CommonJS_Clobbering_Class\"; // Error: Not an exported binding\n\n// The following import should error because class statics are not turned into\n// named exports for now. This avoids complexities with polymorphic static\n// members (where the polymophism is defined on the class itself rather than the\n// method).\nimport { staticNumber1, baseProp, childProp } from \"CommonJS_Clobbering_Class\"; // Error\n\nimport CJS_Clobb_Class from \"CommonJS_Clobbering_Class\";\nnew CJS_Clobb_Class();\nnew CJS_Clobb_Class().doesntExist; // Error: Class has no \\`doesntExist\\` property\nvar h1: number = CJS_Clobb_Class.staticNumber2();\nvar h2: string = CJS_Clobb_Class.staticNumber2(); // Error: number ~> string\nvar h3: number = new CJS_Clobb_Class().instNumber1();\nvar h4: string = new CJS_Clobb_Class().instNumber1(); // Error: number ~> string\n\nimport * as CJS_Clobb_Class_NS from \"CommonJS_Clobbering_Class\";\nnew CJS_Clobb_Class_NS(); // Error: Namespace object isn't constructable\nvar i1: number = CJS_Clobb_Class_NS.staticNumber3(); // Error: Class statics not copied to Namespace object\nvar i2: number = new CJS_Clobb_Class_NS.default().instNumber2();\nvar i3: string = new CJS_Clobb_Class_NS.default().instNumber2(); // Error: number ~> string\n\n// =================================== //\n// == CommonJS Named Exports -> ES6 == //\n// =================================== //\n\nimport { doesntExist3 } from \"CommonJS_Named\"; // Error: Not an exported binding\n\nimport { numberValue2 } from \"CommonJS_Named\";\nvar j1: number = numberValue2;\nvar j2: string = numberValue2; // Error: number ~> string\n\nimport { numberValue3 as numVal3 } from \"CommonJS_Named\";\nvar k1: number = numVal3;\nvar k2: string = numVal3; // Error: number ~> string\n\nimport * as CJS_Named from \"CommonJS_Named\";\nvar l1: number = CJS_Named.numberValue1;\nvar l2: string = CJS_Named.numberValue1; // Error: number ~> string\nCJS_Named.doesntExist; // Error: doesntExist isn't a property\n\nimport * as CJS_Named_NS from \"CommonJS_Named\";\nvar m1: number = CJS_Named_NS.numberValue4;\nvar m2: string = CJS_Named_NS.default.numberValue4; // Error: CommonJS_Named has no default export\nvar m3: string = CJS_Named_NS.numberValue4; // Error: number ~> string\n\n//////////////////////////////\n// == ES6 Default -> ES6 == //\n//////////////////////////////\n\nimport { doesntExist4 } from \"ES6_Default_AnonFunction1\"; // Error: Not an exported binding\n\nimport ES6_Def_AnonFunc1 from \"ES6_Default_AnonFunction1\";\nvar n1: number = ES6_Def_AnonFunc1();\nvar n2: string = ES6_Def_AnonFunc1(); // Error: number ~> string\n\nimport ES6_Def_NamedFunc1 from \"ES6_Default_NamedFunction1\";\nvar o1: number = ES6_Def_NamedFunc1();\nvar o2: string = ES6_Def_NamedFunc1(); // Error: number ~> string\n\nimport ES6_Def_AnonClass1 from \"ES6_Default_AnonClass1\";\nvar p1: number = new ES6_Def_AnonClass1().givesANum();\nvar p2: string = new ES6_Def_AnonClass1().givesANum(); // Error: number ~> string\n\nimport ES6_Def_NamedClass1 from \"ES6_Default_NamedClass1\";\nvar q1: number = new ES6_Def_NamedClass1().givesANum();\nvar q2: string = new ES6_Def_NamedClass1().givesANum(); // Error: number ~> string\n\n////////////////////////////\n// == ES6 Named -> ES6 == //\n////////////////////////////\n\nimport doesntExist5 from \"ES6_Named1\"; // Error: Not an exported binding\n\nimport { specifierNumber1 as specifierNumber1_1 } from \"ES6_Named1\";\nvar r1: number = specifierNumber1_1;\nvar r2: string = specifierNumber1_1; // Error: number ~> string\n\nimport { specifierNumber2Renamed } from \"ES6_Named1\";\nvar s1: number = specifierNumber2Renamed;\nvar s2: string = specifierNumber2Renamed; // Error: number ~> string\n\nimport { specifierNumber3 as specifierNumber3Renamed } from \"ES6_Named1\";\nvar t1: number = specifierNumber3Renamed;\nvar t2: string = specifierNumber3Renamed; // Error: number ~> string\n\nimport { groupedSpecifierNumber1, groupedSpecifierNumber2 } from \"ES6_Named1\";\nvar u1: number = groupedSpecifierNumber1;\nvar u2: number = groupedSpecifierNumber2;\nvar u3: string = groupedSpecifierNumber1; // Error: number ~> string\nvar u4: string = groupedSpecifierNumber2; // Error: number ~> string\n\nimport { givesANumber } from \"ES6_Named1\";\nvar v1: number = givesANumber();\nvar v2: string = givesANumber(); // Error: number ~> string\n\nimport { NumberGenerator } from \"ES6_Named1\";\nvar w1: number = new NumberGenerator().givesANumber();\nvar w2: string = new NumberGenerator().givesANumber(); // Error: number ~> string\n\nimport { varDeclNumber1, varDeclNumber2 } from \"ES6_Named1\";\nvar x1: number = varDeclNumber1;\nvar x2: number = varDeclNumber2;\nvar x3: string = varDeclNumber1; // Error: number ~> string\nvar x4: string = varDeclNumber2; // Error: number ~> string\n\nimport { destructuredObjNumber } from \"ES6_Named1\";\nvar y1: number = destructuredObjNumber;\nvar y2: string = destructuredObjNumber; // Error: number ~> string\n\nimport { destructuredArrNumber } from \"ES6_Named1\";\nvar z1: number = destructuredArrNumber;\nvar z2: string = destructuredArrNumber; // Error: number ~> string\n\nimport { numberValue1 as numberValue4 } from \"ES6_ExportFrom_Intermediary1\";\nvar aa1: number = numberValue4;\nvar aa2: string = numberValue4; // Error: number ~> string\n\nimport { numberValue2_renamed } from \"ES6_ExportFrom_Intermediary1\";\nvar ab1: number = numberValue2_renamed;\nvar ab2: string = numberValue2_renamed; // Error: number ~> string\n\nimport { numberValue1 as numberValue5 } from \"ES6_ExportAllFrom_Intermediary1\";\nvar ac1: number = numberValue5;\nvar ac2: string = numberValue5; // Error: number ~> string\n\n///////////////////////////////////\n// == ES6 Default -> CommonJS == //\n///////////////////////////////////\n\nrequire(\"ES6_Default_AnonFunction2\").doesntExist; // Error: 'doesntExist' isn't an export\n\nvar ES6_Def_AnonFunc2 = require(\"ES6_Default_AnonFunction2\").default;\nvar ad1: number = ES6_Def_AnonFunc2();\nvar ad2: string = ES6_Def_AnonFunc2(); // Error: number ~> string\n\nvar ES6_Def_NamedFunc2 = require(\"ES6_Default_NamedFunction2\").default;\nvar ae1: number = ES6_Def_NamedFunc2();\nvar ae2: string = ES6_Def_NamedFunc2(); // Error: number ~> string\n\nvar ES6_Def_AnonClass2 = require(\"ES6_Default_AnonClass2\").default;\nvar af1: number = new ES6_Def_AnonClass2().givesANum();\nvar af2: string = new ES6_Def_AnonClass2().givesANum(); // Error: number ~> string\n\nvar ES6_Def_NamedClass2 = require(\"ES6_Default_NamedClass2\").default;\nvar ag1: number = new ES6_Def_NamedClass2().givesANum();\nvar ag2: string = new ES6_Def_NamedClass2().givesANum(); // Error: number ~> string\n\n/////////////////////////////////\n// == ES6 Named -> CommonJS == //\n/////////////////////////////////\n\nvar specifierNumber4 = require(\"ES6_Named2\").specifierNumber4;\nvar ah1: number = specifierNumber4;\nvar ah2: string = specifierNumber4; // Error: number ~> string\n\nvar specifierNumber5Renamed = require(\"ES6_Named2\").specifierNumber5Renamed;\nvar ai1: number = specifierNumber5Renamed;\nvar ai2: string = specifierNumber5Renamed; // Error: number ~> string\n\nvar groupedSpecifierNumber3 = require(\"ES6_Named2\").groupedSpecifierNumber3;\nvar groupedSpecifierNumber4 = require(\"ES6_Named2\").groupedSpecifierNumber4;\nvar aj1: number = groupedSpecifierNumber3;\nvar aj2: number = groupedSpecifierNumber4;\nvar aj3: string = groupedSpecifierNumber3; // Error: number ~> string\nvar aj4: string = groupedSpecifierNumber4; // Error: number ~> string\n\nvar givesANumber2 = require(\"ES6_Named2\").givesANumber2;\nvar ak1: number = givesANumber2();\nvar ak2: string = givesANumber2(); // Error: number ~> string\n\nvar NumberGenerator2 = require(\"ES6_Named2\").NumberGenerator2;\nvar al1: number = new NumberGenerator2().givesANumber();\nvar al2: string = new NumberGenerator2().givesANumber(); // Error: number ~> string\n\nvar varDeclNumber3 = require(\"ES6_Named2\").varDeclNumber3;\nvar varDeclNumber4 = require(\"ES6_Named2\").varDeclNumber4;\nvar am1: number = varDeclNumber3;\nvar am2: number = varDeclNumber4;\nvar am3: string = varDeclNumber3; // Error: number ~> string\nvar am4: string = varDeclNumber4; // Error: number ~> string\n\nvar destructuredObjNumber2 = require(\"ES6_Named2\").destructuredObjNumber2;\nvar an1: number = destructuredObjNumber2;\nvar an2: string = destructuredObjNumber2; // Error: number ~> string\n\nvar destructuredArrNumber2 = require(\"ES6_Named2\").destructuredArrNumber2;\nvar ao1: number = destructuredArrNumber2;\nvar ao2: string = destructuredArrNumber2; // Error: number ~> string\n\nvar numberValue6 = require(\"ES6_ExportFrom_Intermediary2\").numberValue1;\nvar ap1: number = numberValue6;\nvar ap2: string = numberValue6; // Error: number ~> string\n\nvar numberValue2_renamed2 = require(\"ES6_ExportFrom_Intermediary2\")\n  .numberValue2_renamed2;\nvar aq1: number = numberValue2_renamed2;\nvar aq2: string = numberValue2_renamed2; // Error: number ~> string\n\nvar numberValue7 = require(\"ES6_ExportAllFrom_Intermediary2\").numberValue2;\nvar ar1: number = numberValue7;\nvar ar2: string = numberValue7; // Error: number ~> string\n\n////////////////////////////////////////////////////////\n// == ES6 Default+Named -> ES6 import Default+Named== //\n////////////////////////////////////////////////////////\n\nimport defaultNum, { str as namedStr } from \"./ES6_DefaultAndNamed\";\n\nvar as1: number = defaultNum;\nvar as2: string = defaultNum; // Error: number ~> string\n\nvar as3: string = namedStr;\nvar as4: number = namedStr; // Error: string ~> number\n\n////////////////////////////////////////\n// == Side-effect only ES6 imports == //\n////////////////////////////////////////\n\nimport \"./SideEffects\";\n\n//////////////////////////////////////////////\n// == Suggest export name on likely typo == //\n//////////////////////////////////////////////\nimport specifierNumber1 from \"ES6_Named1\"; // Error: Did you mean \\`import {specifierNumber1} from ...\\`?\nimport { specifierNumber } from \"ES6_Named1\"; // Error: Did you mean \\`specifierNumber1\\`?\n\n///////////////////////////////////////////////////\n// == Multi \\`export *\\` should combine exports == //\n///////////////////////////////////////////////////\nimport {\n  numberValue1 as numberValue8,\n  numberValue2 as numberValue9\n} from \"./ES6_ExportAllFromMulti\";\n\nvar at1: number = numberValue8;\nvar at2: string = numberValue8; // Error: number ~> string\n\nvar at3: number = numberValue9;\nvar at4: string = numberValue9; // Error: number ~> string\n\n/////////////////////////////////////////////////////////////\n// == Vanilla \\`import\\` cannot import a type-only export == //\n/////////////////////////////////////////////////////////////\nimport { typeAlias } from \"./ExportType\"; // Error: Cannot vanilla-import a type alias!\n\n`;\n\nexports[`test_imports_are_frozen.js 1`] = `\n/* @flow */\n\n//\n// Imports\n//\n\n// CommonJS module\nimport * as DefaultA from \"A\";\nDefaultA.numberValue1 = 123; // Error: DefaultA is frozen\n\n// ES6 module\nimport * as ES6_Named1 from \"ES6_Named1\";\nES6_Named1.varDeclNumber1 = 123; // Error: ES6_Named1 is frozen\n\n// CommonJS module that clobbers module.exports\nimport * as CommonJS_Star from \"CommonJS_Clobbering_Lit\";\nCommonJS_Star.numberValue1 = 123; // Error: frozen\nCommonJS_Star.default.numberValue1 = 123; // ok\n\nimport CommonJS_Clobbering_Lit from \"CommonJS_Clobbering_Lit\";\nCommonJS_Clobbering_Lit.numberValue1 = 123; // ok\n\n// CommonJS module that clobbers module.exports with a frozen object\nimport * as CommonJS_Frozen_Star from \"CommonJS_Clobbering_Frozen\";\nCommonJS_Frozen_Star.numberValue1 = 123; // Error: frozen\nCommonJS_Frozen_Star.default.numberValue1 = 123; // Error: frozen\n\nimport CommonJS_Clobbering_Frozen from \"CommonJS_Clobbering_Frozen\";\nCommonJS_Clobbering_Frozen.numberValue1 = 123; // Error: exports are frozen\n\n\n//\n// Requires\n//\n\nfunction testRequires() {\n  // CommonJS module\n  var DefaultA = require(\"A\");\n  DefaultA.numberValue1 = 123; // ok, not frozen by default\n\n  // ES6 module\n  var ES6_Named1 = require(\"ES6_Named1\");\n  ES6_Named1.numberValue = 123; // error, es6 exports are frozen\n\n  // CommonJS module that clobbers module.exports\n  var CommonJS_Star = require(\"CommonJS_Clobbering_Lit\");\n  CommonJS_Star.numberValue1 = 123; // ok, not frozen by default\n\n  // CommonJS module that clobbers module.exports with a frozen object\n  var CommonJS_Frozen_Star = require(\"CommonJS_Clobbering_Frozen\");\n  CommonJS_Frozen_Star.numberValue1 = 123; // Error: frozen\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n//\n// Imports\n//\n\n// CommonJS module\nimport * as DefaultA from \"A\";\nDefaultA.numberValue1 = 123; // Error: DefaultA is frozen\n\n// ES6 module\nimport * as ES6_Named1 from \"ES6_Named1\";\nES6_Named1.varDeclNumber1 = 123; // Error: ES6_Named1 is frozen\n\n// CommonJS module that clobbers module.exports\nimport * as CommonJS_Star from \"CommonJS_Clobbering_Lit\";\nCommonJS_Star.numberValue1 = 123; // Error: frozen\nCommonJS_Star.default.numberValue1 = 123; // ok\n\nimport CommonJS_Clobbering_Lit from \"CommonJS_Clobbering_Lit\";\nCommonJS_Clobbering_Lit.numberValue1 = 123; // ok\n\n// CommonJS module that clobbers module.exports with a frozen object\nimport * as CommonJS_Frozen_Star from \"CommonJS_Clobbering_Frozen\";\nCommonJS_Frozen_Star.numberValue1 = 123; // Error: frozen\nCommonJS_Frozen_Star.default.numberValue1 = 123; // Error: frozen\n\nimport CommonJS_Clobbering_Frozen from \"CommonJS_Clobbering_Frozen\";\nCommonJS_Clobbering_Frozen.numberValue1 = 123; // Error: exports are frozen\n\n//\n// Requires\n//\n\nfunction testRequires() {\n  // CommonJS module\n  var DefaultA = require(\"A\");\n  DefaultA.numberValue1 = 123; // ok, not frozen by default\n\n  // ES6 module\n  var ES6_Named1 = require(\"ES6_Named1\");\n  ES6_Named1.numberValue = 123; // error, es6 exports are frozen\n\n  // CommonJS module that clobbers module.exports\n  var CommonJS_Star = require(\"CommonJS_Clobbering_Lit\");\n  CommonJS_Star.numberValue1 = 123; // ok, not frozen by default\n\n  // CommonJS module that clobbers module.exports with a frozen object\n  var CommonJS_Frozen_Star = require(\"CommonJS_Clobbering_Frozen\");\n  CommonJS_Frozen_Star.numberValue1 = 123; // Error: frozen\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/es6modules/es6modules.js",
    "content": "/* @flow */\n\n// ===================== //\n// == Path Resolution == //\n// ===================== //\n\n// @providesModule\nimport * as DefaultA from \"A\";\nvar a1: number = DefaultA.numberValue1;\nvar a2: string = DefaultA.numberValue1; // Error: number ~> string\n\n// File path\nimport * as DefaultB from \"./B\";\nvar b1: number = DefaultB.numberValue;\nvar b2: string = DefaultB.numberValue; // Error: number ~> string\n\n// C.js exists, but not as a providesModule\nimport DefaultC from \"C\"; // Error: No such module\n\n// @providesModule D exists, but not as a filename\nimport DefaultD from \"./D\"; // Error: No such module\n\n// ================================================ //\n// == CommonJS Clobbering Literal Exports -> ES6 == //\n// ================================================ //\n\nimport {doesntExist1} from \"CommonJS_Clobbering_Lit\"; // Error: Not an exported binding\n\nimport {numberValue1} from \"CommonJS_Clobbering_Lit\";\nvar c1: number = numberValue1;\nvar c2: string = numberValue1; // Error: number ~> string\n\nimport {numberValue2 as numVal1} from \"CommonJS_Clobbering_Lit\";\nvar d1: number = numVal1;\nvar d2: string = numVal1; // Error: number ~> string\n\nimport CJS_Clobb_Lit from \"CommonJS_Clobbering_Lit\";\nvar e1: number = CJS_Clobb_Lit.numberValue3;\nvar e2: string = CJS_Clobb_Lit.numberValue3; // Error: number ~> string\nCJS_Clobb_Lit.doesntExist; // Error: doesntExist isn't a property\n\nimport * as CJS_Clobb_Lit_NS from \"CommonJS_Clobbering_Lit\";\nvar f1: number = CJS_Clobb_Lit_NS.numberValue4;\nvar f2: number = CJS_Clobb_Lit_NS.default.numberValue4;\nCJS_Clobb_Lit_NS.default.default; // Error: No 'default' property on the exported obj\nvar f3: string = CJS_Clobb_Lit_NS.numberValue4; // Error: number ~> string\nvar f4: string = CJS_Clobb_Lit_NS.default.numberValue5; // Error: number ~> string\n\n// ============================================== //\n// == CommonJS Clobbering Class Exports -> ES6 == //\n// ============================================== //\n\nimport {doesntExist2} from \"CommonJS_Clobbering_Class\"; // Error: Not an exported binding\n\n// The following import should error because class statics are not turned into\n// named exports for now. This avoids complexities with polymorphic static\n// members (where the polymophism is defined on the class itself rather than the\n// method).\nimport {staticNumber1, baseProp, childProp} from \"CommonJS_Clobbering_Class\"; // Error\n\nimport CJS_Clobb_Class from \"CommonJS_Clobbering_Class\";\nnew CJS_Clobb_Class();\nnew CJS_Clobb_Class().doesntExist; // Error: Class has no `doesntExist` property\nvar h1: number = CJS_Clobb_Class.staticNumber2();\nvar h2: string = CJS_Clobb_Class.staticNumber2(); // Error: number ~> string\nvar h3: number = new CJS_Clobb_Class().instNumber1();\nvar h4: string = new CJS_Clobb_Class().instNumber1(); // Error: number ~> string\n\nimport * as CJS_Clobb_Class_NS from \"CommonJS_Clobbering_Class\";\nnew CJS_Clobb_Class_NS(); // Error: Namespace object isn't constructable\nvar i1: number = CJS_Clobb_Class_NS.staticNumber3(); // Error: Class statics not copied to Namespace object\nvar i2: number = new CJS_Clobb_Class_NS.default().instNumber2();\nvar i3: string = new CJS_Clobb_Class_NS.default().instNumber2(); // Error: number ~> string\n\n// =================================== //\n// == CommonJS Named Exports -> ES6 == //\n// =================================== //\n\nimport {doesntExist3} from \"CommonJS_Named\"; // Error: Not an exported binding\n\nimport {numberValue2} from \"CommonJS_Named\";\nvar j1: number = numberValue2;\nvar j2: string = numberValue2; // Error: number ~> string\n\nimport {numberValue3 as numVal3} from \"CommonJS_Named\";\nvar k1: number = numVal3;\nvar k2: string = numVal3; // Error: number ~> string\n\nimport * as CJS_Named from \"CommonJS_Named\";\nvar l1: number = CJS_Named.numberValue1;\nvar l2: string = CJS_Named.numberValue1; // Error: number ~> string\nCJS_Named.doesntExist; // Error: doesntExist isn't a property\n\nimport * as CJS_Named_NS from \"CommonJS_Named\";\nvar m1: number = CJS_Named_NS.numberValue4;\nvar m2: string = CJS_Named_NS.default.numberValue4; // Error: CommonJS_Named has no default export\nvar m3: string = CJS_Named_NS.numberValue4; // Error: number ~> string\n\n//////////////////////////////\n// == ES6 Default -> ES6 == //\n//////////////////////////////\n\nimport {doesntExist4} from \"ES6_Default_AnonFunction1\"; // Error: Not an exported binding\n\nimport ES6_Def_AnonFunc1 from \"ES6_Default_AnonFunction1\";\nvar n1: number = ES6_Def_AnonFunc1();\nvar n2: string = ES6_Def_AnonFunc1(); // Error: number ~> string\n\nimport ES6_Def_NamedFunc1 from \"ES6_Default_NamedFunction1\";\nvar o1: number = ES6_Def_NamedFunc1();\nvar o2: string = ES6_Def_NamedFunc1(); // Error: number ~> string\n\nimport ES6_Def_AnonClass1 from \"ES6_Default_AnonClass1\";\nvar p1: number = new ES6_Def_AnonClass1().givesANum();\nvar p2: string = new ES6_Def_AnonClass1().givesANum(); // Error: number ~> string\n\nimport ES6_Def_NamedClass1 from \"ES6_Default_NamedClass1\";\nvar q1: number = new ES6_Def_NamedClass1().givesANum();\nvar q2: string = new ES6_Def_NamedClass1().givesANum(); // Error: number ~> string\n\n////////////////////////////\n// == ES6 Named -> ES6 == //\n////////////////////////////\n\nimport doesntExist5 from \"ES6_Named1\"; // Error: Not an exported binding\n\nimport {specifierNumber1 as specifierNumber1_1} from \"ES6_Named1\";\nvar r1: number = specifierNumber1_1;\nvar r2: string = specifierNumber1_1; // Error: number ~> string\n\nimport {specifierNumber2Renamed} from \"ES6_Named1\";\nvar s1: number = specifierNumber2Renamed;\nvar s2: string = specifierNumber2Renamed; // Error: number ~> string\n\nimport {specifierNumber3 as specifierNumber3Renamed} from \"ES6_Named1\";\nvar t1: number = specifierNumber3Renamed;\nvar t2: string = specifierNumber3Renamed; // Error: number ~> string\n\nimport {groupedSpecifierNumber1, groupedSpecifierNumber2} from \"ES6_Named1\";\nvar u1: number = groupedSpecifierNumber1;\nvar u2: number = groupedSpecifierNumber2;\nvar u3: string = groupedSpecifierNumber1; // Error: number ~> string\nvar u4: string = groupedSpecifierNumber2; // Error: number ~> string\n\nimport {givesANumber} from \"ES6_Named1\";\nvar v1: number = givesANumber();\nvar v2: string = givesANumber(); // Error: number ~> string\n\nimport {NumberGenerator} from \"ES6_Named1\";\nvar w1: number = new NumberGenerator().givesANumber();\nvar w2: string = new NumberGenerator().givesANumber(); // Error: number ~> string\n\nimport {varDeclNumber1, varDeclNumber2} from \"ES6_Named1\";\nvar x1: number = varDeclNumber1;\nvar x2: number = varDeclNumber2;\nvar x3: string = varDeclNumber1; // Error: number ~> string\nvar x4: string = varDeclNumber2; // Error: number ~> string\n\nimport {destructuredObjNumber} from \"ES6_Named1\";\nvar y1: number = destructuredObjNumber;\nvar y2: string = destructuredObjNumber; // Error: number ~> string\n\nimport {destructuredArrNumber} from \"ES6_Named1\";\nvar z1: number = destructuredArrNumber;\nvar z2: string = destructuredArrNumber; // Error: number ~> string\n\nimport {numberValue1 as numberValue4} from \"ES6_ExportFrom_Intermediary1\";\nvar aa1: number = numberValue4;\nvar aa2: string = numberValue4; // Error: number ~> string\n\nimport {numberValue2_renamed} from \"ES6_ExportFrom_Intermediary1\";\nvar ab1: number = numberValue2_renamed;\nvar ab2: string = numberValue2_renamed; // Error: number ~> string\n\nimport {numberValue1 as numberValue5} from \"ES6_ExportAllFrom_Intermediary1\";\nvar ac1: number = numberValue5;\nvar ac2: string = numberValue5; // Error: number ~> string\n\n///////////////////////////////////\n// == ES6 Default -> CommonJS == //\n///////////////////////////////////\n\nrequire('ES6_Default_AnonFunction2').doesntExist; // Error: 'doesntExist' isn't an export\n\nvar ES6_Def_AnonFunc2 = require(\"ES6_Default_AnonFunction2\").default;\nvar ad1: number = ES6_Def_AnonFunc2();\nvar ad2: string = ES6_Def_AnonFunc2(); // Error: number ~> string\n\nvar ES6_Def_NamedFunc2 = require(\"ES6_Default_NamedFunction2\").default;\nvar ae1: number = ES6_Def_NamedFunc2();\nvar ae2: string = ES6_Def_NamedFunc2(); // Error: number ~> string\n\nvar ES6_Def_AnonClass2 = require(\"ES6_Default_AnonClass2\").default;\nvar af1: number = new ES6_Def_AnonClass2().givesANum();\nvar af2: string = new ES6_Def_AnonClass2().givesANum(); // Error: number ~> string\n\nvar ES6_Def_NamedClass2 = require(\"ES6_Default_NamedClass2\").default;\nvar ag1: number = new ES6_Def_NamedClass2().givesANum();\nvar ag2: string = new ES6_Def_NamedClass2().givesANum(); // Error: number ~> string\n\n/////////////////////////////////\n// == ES6 Named -> CommonJS == //\n/////////////////////////////////\n\nvar specifierNumber4 = require(\"ES6_Named2\").specifierNumber4;\nvar ah1: number = specifierNumber4;\nvar ah2: string = specifierNumber4; // Error: number ~> string\n\nvar specifierNumber5Renamed = require(\"ES6_Named2\").specifierNumber5Renamed;\nvar ai1: number = specifierNumber5Renamed;\nvar ai2: string = specifierNumber5Renamed; // Error: number ~> string\n\nvar groupedSpecifierNumber3 = require(\"ES6_Named2\").groupedSpecifierNumber3;\nvar groupedSpecifierNumber4 = require(\"ES6_Named2\").groupedSpecifierNumber4;\nvar aj1: number = groupedSpecifierNumber3;\nvar aj2: number = groupedSpecifierNumber4;\nvar aj3: string = groupedSpecifierNumber3; // Error: number ~> string\nvar aj4: string = groupedSpecifierNumber4; // Error: number ~> string\n\nvar givesANumber2 = require(\"ES6_Named2\").givesANumber2;\nvar ak1: number = givesANumber2();\nvar ak2: string = givesANumber2(); // Error: number ~> string\n\nvar NumberGenerator2 = require(\"ES6_Named2\").NumberGenerator2;\nvar al1: number = new NumberGenerator2().givesANumber();\nvar al2: string = new NumberGenerator2().givesANumber(); // Error: number ~> string\n\nvar varDeclNumber3 = require(\"ES6_Named2\").varDeclNumber3;\nvar varDeclNumber4 = require(\"ES6_Named2\").varDeclNumber4;\nvar am1: number = varDeclNumber3;\nvar am2: number = varDeclNumber4;\nvar am3: string = varDeclNumber3; // Error: number ~> string\nvar am4: string = varDeclNumber4; // Error: number ~> string\n\nvar destructuredObjNumber2 = require(\"ES6_Named2\").destructuredObjNumber2;\nvar an1: number = destructuredObjNumber2;\nvar an2: string = destructuredObjNumber2; // Error: number ~> string\n\nvar destructuredArrNumber2 = require(\"ES6_Named2\").destructuredArrNumber2;\nvar ao1: number = destructuredArrNumber2;\nvar ao2: string = destructuredArrNumber2; // Error: number ~> string\n\nvar numberValue6 = require(\"ES6_ExportFrom_Intermediary2\").numberValue1;\nvar ap1: number = numberValue6;\nvar ap2: string = numberValue6; // Error: number ~> string\n\nvar numberValue2_renamed2 = require(\"ES6_ExportFrom_Intermediary2\").numberValue2_renamed2;\nvar aq1: number = numberValue2_renamed2;\nvar aq2: string = numberValue2_renamed2; // Error: number ~> string\n\nvar numberValue7 = require(\"ES6_ExportAllFrom_Intermediary2\").numberValue2;\nvar ar1: number = numberValue7;\nvar ar2: string = numberValue7; // Error: number ~> string\n\n////////////////////////////////////////////////////////\n// == ES6 Default+Named -> ES6 import Default+Named== //\n////////////////////////////////////////////////////////\n\nimport defaultNum, {str as namedStr} from \"./ES6_DefaultAndNamed\";\n\nvar as1: number = defaultNum;\nvar as2: string = defaultNum; // Error: number ~> string\n\nvar as3: string = namedStr;\nvar as4: number = namedStr; // Error: string ~> number\n\n////////////////////////////////////////\n// == Side-effect only ES6 imports == //\n////////////////////////////////////////\n\nimport \"./SideEffects\";\n\n//////////////////////////////////////////////\n// == Suggest export name on likely typo == //\n//////////////////////////////////////////////\nimport specifierNumber1 from \"ES6_Named1\"; // Error: Did you mean `import {specifierNumber1} from ...`?\nimport {specifierNumber} from \"ES6_Named1\"; // Error: Did you mean `specifierNumber1`?\n\n///////////////////////////////////////////////////\n// == Multi `export *` should combine exports == //\n///////////////////////////////////////////////////\nimport {\n  numberValue1 as numberValue8,\n  numberValue2 as numberValue9\n} from \"./ES6_ExportAllFromMulti\";\n\nvar at1: number = numberValue8;\nvar at2: string = numberValue8; // Error: number ~> string\n\nvar at3: number = numberValue9;\nvar at4: string = numberValue9; // Error: number ~> string\n\n/////////////////////////////////////////////////////////////\n// == Vanilla `import` cannot import a type-only export == //\n/////////////////////////////////////////////////////////////\nimport {typeAlias} from \"./ExportType\"; // Error: Cannot vanilla-import a type alias!\n"
  },
  {
    "path": "tests/flow/es6modules/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/es6modules/test_imports_are_frozen.js",
    "content": "/* @flow */\n\n//\n// Imports\n//\n\n// CommonJS module\nimport * as DefaultA from \"A\";\nDefaultA.numberValue1 = 123; // Error: DefaultA is frozen\n\n// ES6 module\nimport * as ES6_Named1 from \"ES6_Named1\";\nES6_Named1.varDeclNumber1 = 123; // Error: ES6_Named1 is frozen\n\n// CommonJS module that clobbers module.exports\nimport * as CommonJS_Star from \"CommonJS_Clobbering_Lit\";\nCommonJS_Star.numberValue1 = 123; // Error: frozen\nCommonJS_Star.default.numberValue1 = 123; // ok\n\nimport CommonJS_Clobbering_Lit from \"CommonJS_Clobbering_Lit\";\nCommonJS_Clobbering_Lit.numberValue1 = 123; // ok\n\n// CommonJS module that clobbers module.exports with a frozen object\nimport * as CommonJS_Frozen_Star from \"CommonJS_Clobbering_Frozen\";\nCommonJS_Frozen_Star.numberValue1 = 123; // Error: frozen\nCommonJS_Frozen_Star.default.numberValue1 = 123; // Error: frozen\n\nimport CommonJS_Clobbering_Frozen from \"CommonJS_Clobbering_Frozen\";\nCommonJS_Clobbering_Frozen.numberValue1 = 123; // Error: exports are frozen\n\n\n//\n// Requires\n//\n\nfunction testRequires() {\n  // CommonJS module\n  var DefaultA = require(\"A\");\n  DefaultA.numberValue1 = 123; // ok, not frozen by default\n\n  // ES6 module\n  var ES6_Named1 = require(\"ES6_Named1\");\n  ES6_Named1.numberValue = 123; // error, es6 exports are frozen\n\n  // CommonJS module that clobbers module.exports\n  var CommonJS_Star = require(\"CommonJS_Clobbering_Lit\");\n  CommonJS_Star.numberValue1 = 123; // ok, not frozen by default\n\n  // CommonJS module that clobbers module.exports with a frozen object\n  var CommonJS_Frozen_Star = require(\"CommonJS_Clobbering_Frozen\");\n  CommonJS_Frozen_Star.numberValue1 = 123; // Error: frozen\n}\n"
  },
  {
    "path": "tests/flow/es_declare_module/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`es_declare_module.js 1`] = `\n// @flow\n\nimport {num1, str1} from \"CJS_Named\";\nimport CJS_Named from \"CJS_Named\";\n(num1: number);\n(num1: string); // Error: number ~> string\n(str1: string);\n(str1: number); // Error: string ~> number\n(CJS_Named: {num1: number, str1: string});\n(CJS_Named: number); // Error: Module ~> number\n\nimport {num2} from \"CJS_Clobbered\"; // Error: No such export!\nimport {numExport} from \"CJS_Clobbered\";\n(numExport: number);\n(numExport: string); // Error: number ~> string\nimport type {numType} from \"CJS_Clobbered\";\n(42: numType);\n('asdf': numType); // Error: string ~> number\n\nimport {strHidden} from \"ES\"; // Error: No such export!\nimport {str3} from \"ES\";\n(str3: string);\n(str3: number); // Error: string ~> number\n\nimport {num3} from \"ES\";\n(num3: number);\n(num3: string); // Error: number ~> string\n\nimport {C} from \"ES\";\nimport type {C as CType} from \"ES\";\n(new C(): C);\n(42: C); // Error: number ~> C\n(new C(): CType);\n(42: CType); // Error: number ~> CType\n\nimport {T} from \"ES\"; // Error: T is a type import, not a value\nimport type {T as T2} from \"ES\";\n(42: T2);\n('asdf': T2); // Error: string ~> number\n\nimport {exports as nope} from \"ES\"; // Error: Not an export\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport { num1, str1 } from \"CJS_Named\";\nimport CJS_Named from \"CJS_Named\";\n(num1: number);\n(num1: string); // Error: number ~> string\n(str1: string);\n(str1: number); // Error: string ~> number\n(CJS_Named: { num1: number, str1: string });\n(CJS_Named: number); // Error: Module ~> number\n\nimport { num2 } from \"CJS_Clobbered\"; // Error: No such export!\nimport { numExport } from \"CJS_Clobbered\";\n(numExport: number);\n(numExport: string); // Error: number ~> string\nimport type { numType } from \"CJS_Clobbered\";\n(42: numType);\n(\"asdf\": numType); // Error: string ~> number\n\nimport { strHidden } from \"ES\"; // Error: No such export!\nimport { str3 } from \"ES\";\n(str3: string);\n(str3: number); // Error: string ~> number\n\nimport { num3 } from \"ES\";\n(num3: number);\n(num3: string); // Error: number ~> string\n\nimport { C } from \"ES\";\nimport type { C as CType } from \"ES\";\n(new C(): C);\n(42: C); // Error: number ~> C\n(new C(): CType);\n(42: CType); // Error: number ~> CType\n\nimport { T } from \"ES\"; // Error: T is a type import, not a value\nimport type { T as T2 } from \"ES\";\n(42: T2);\n(\"asdf\": T2); // Error: string ~> number\n\nimport { exports as nope } from \"ES\"; // Error: Not an export\n\n`;\n"
  },
  {
    "path": "tests/flow/es_declare_module/es_declare_module.js",
    "content": "// @flow\n\nimport {num1, str1} from \"CJS_Named\";\nimport CJS_Named from \"CJS_Named\";\n(num1: number);\n(num1: string); // Error: number ~> string\n(str1: string);\n(str1: number); // Error: string ~> number\n(CJS_Named: {num1: number, str1: string});\n(CJS_Named: number); // Error: Module ~> number\n\nimport {num2} from \"CJS_Clobbered\"; // Error: No such export!\nimport {numExport} from \"CJS_Clobbered\";\n(numExport: number);\n(numExport: string); // Error: number ~> string\nimport type {numType} from \"CJS_Clobbered\";\n(42: numType);\n('asdf': numType); // Error: string ~> number\n\nimport {strHidden} from \"ES\"; // Error: No such export!\nimport {str3} from \"ES\";\n(str3: string);\n(str3: number); // Error: string ~> number\n\nimport {num3} from \"ES\";\n(num3: number);\n(num3: string); // Error: number ~> string\n\nimport {C} from \"ES\";\nimport type {C as CType} from \"ES\";\n(new C(): C);\n(42: C); // Error: number ~> C\n(new C(): CType);\n(42: CType); // Error: number ~> CType\n\nimport {T} from \"ES\"; // Error: T is a type import, not a value\nimport type {T as T2} from \"ES\";\n(42: T2);\n('asdf': T2); // Error: string ~> number\n\nimport {exports as nope} from \"ES\"; // Error: Not an export\n"
  },
  {
    "path": "tests/flow/es_declare_module/flow-typed/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`declares.js 1`] = `\ndeclare module \"CJS_Named\" {\n  declare var num1: number;\n  declare var str1: string;\n}\n\ndeclare module \"CJS_Clobbered\" {\n  declare var num2: number;\n  declare type numType = number;\n  declare var exports: {\n    numExport: number,\n  };\n}\n\ndeclare module \"ES\" {\n  declare var strHidden: string;\n  declare export {strHidden as str3};\n  declare export var num3: number;\n  declare export class C {}\n  declare export type T = number;\n  declare var exports: number;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare module \"CJS_Named\" {\n  declare var num1: number;\n  declare var str1: string;\n}\n\ndeclare module \"CJS_Clobbered\" {\n  declare var num2: number;\n  declare type numType = number;\n  declare var exports: {\n    numExport: number\n  };\n}\n\ndeclare module \"ES\" {\n  declare var strHidden: string;\n  declare export { strHidden as str3 };\n  declare export var num3: number;\n  declare export class C {}\n  declare export type T = number;\n  declare var exports: number;\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/es_declare_module/flow-typed/declares.js",
    "content": "declare module \"CJS_Named\" {\n  declare var num1: number;\n  declare var str1: string;\n}\n\ndeclare module \"CJS_Clobbered\" {\n  declare var num2: number;\n  declare type numType = number;\n  declare var exports: {\n    numExport: number,\n  };\n}\n\ndeclare module \"ES\" {\n  declare var strHidden: string;\n  declare export {strHidden as str3};\n  declare export var num3: number;\n  declare export class C {}\n  declare export type T = number;\n  declare var exports: number;\n}\n"
  },
  {
    "path": "tests/flow/es_declare_module/flow-typed/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n\n// TODO: While the tests render the same, Flow is dropping the line breaks\n// between each declaration while Babylon preserves them.\n//run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow/es_declare_module/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow/esproposal_class_instance_fields.ignore/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n/* @flow */\n\nclass Foo {\n  annotationOnly: string;\n  initOnly = 'asdf'\n  initWithAnnotation: string = 'asdf';\n  [computed]: string;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nclass Foo {\n  annotationOnly: string;\n  initOnly = \"asdf\";\n  initWithAnnotation: string = \"asdf\";\n  [computed]: string;\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/esproposal_class_instance_fields.ignore/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/esproposal_class_instance_fields.ignore/test.js",
    "content": "/* @flow */\n\nclass Foo {\n  annotationOnly: string;\n  initOnly = 'asdf'\n  initWithAnnotation: string = 'asdf';\n  [computed]: string;\n}\n"
  },
  {
    "path": "tests/flow/esproposal_class_instance_fields.warn/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n/* @flow */\n\nclass Foo {\n  annotationOnly: string;\n  initOnly = 'asdf';\n  initWithAnnotation: string = 'asdf';\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nclass Foo {\n  annotationOnly: string;\n  initOnly = \"asdf\";\n  initWithAnnotation: string = \"asdf\";\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/esproposal_class_instance_fields.warn/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/esproposal_class_instance_fields.warn/test.js",
    "content": "/* @flow */\n\nclass Foo {\n  annotationOnly: string;\n  initOnly = 'asdf';\n  initWithAnnotation: string = 'asdf';\n}\n"
  },
  {
    "path": "tests/flow/esproposal_class_static_fields.ignore/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n/* @flow */\n\nclass Foo {\n  static annotationOnly: string;\n  static initOnly = 'asdf';\n  static initWithAnnotation: string = 'asdf';\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nclass Foo {\n  static annotationOnly: string;\n  static initOnly = \"asdf\";\n  static initWithAnnotation: string = \"asdf\";\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/esproposal_class_static_fields.ignore/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/esproposal_class_static_fields.ignore/test.js",
    "content": "/* @flow */\n\nclass Foo {\n  static annotationOnly: string;\n  static initOnly = 'asdf';\n  static initWithAnnotation: string = 'asdf';\n}\n"
  },
  {
    "path": "tests/flow/esproposal_class_static_fields.warn/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n/* @flow */\n\nclass Foo {\n  static annotationOnly: string;\n  static initOnly = 'asdf';\n  static initWithAnnotation: string = 'asdf';\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nclass Foo {\n  static annotationOnly: string;\n  static initOnly = \"asdf\";\n  static initWithAnnotation: string = \"asdf\";\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/esproposal_class_static_fields.warn/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/esproposal_class_static_fields.warn/test.js",
    "content": "/* @flow */\n\nclass Foo {\n  static annotationOnly: string;\n  static initOnly = 'asdf';\n  static initWithAnnotation: string = 'asdf';\n}\n"
  },
  {
    "path": "tests/flow/esproposal_export_star_as.enable/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`dest.js 1`] = `\n// @flow\n\nimport {source} from \"./test\";\n\nvar a: number = source.num;\nvar b: string = source.num; // Error: num ~> string\n\nvar c: string = source.str;\nvar d: number = source.str; // Error: num ~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport { source } from \"./test\";\n\nvar a: number = source.num;\nvar b: string = source.num; // Error: num ~> string\n\nvar c: string = source.str;\nvar d: number = source.str; // Error: num ~> string\n\n`;\n\nexports[`source.js 1`] = `\n// @flow\n\nexport var str = 'asdf';\nexport var num = 42;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport var str = \"asdf\";\nexport var num = 42;\n\n`;\n\nexports[`test.js 1`] = `\n// @flow\n\nexport * as source from \"./source\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport * as source from \"./source\";\n\n`;\n"
  },
  {
    "path": "tests/flow/esproposal_export_star_as.enable/dest.js",
    "content": "// @flow\n\nimport {source} from \"./test\";\n\nvar a: number = source.num;\nvar b: string = source.num; // Error: num ~> string\n\nvar c: string = source.str;\nvar d: number = source.str; // Error: num ~> string\n"
  },
  {
    "path": "tests/flow/esproposal_export_star_as.enable/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/esproposal_export_star_as.enable/source.js",
    "content": "// @flow\n\nexport var str = 'asdf';\nexport var num = 42;\n"
  },
  {
    "path": "tests/flow/esproposal_export_star_as.enable/test.js",
    "content": "// @flow\n\nexport * as source from \"./source\";\n"
  },
  {
    "path": "tests/flow/esproposal_export_star_as.ignore/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`dest.js 1`] = `\n// @flow\n\nimport {source} from \"./test\";\n\nvar a: number = source.num;\nvar b: string = source.num; // Error: num ~> string\n\nvar c: string = source.str;\nvar d: number = source.str; // Ignored error: num ~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport { source } from \"./test\";\n\nvar a: number = source.num;\nvar b: string = source.num; // Error: num ~> string\n\nvar c: string = source.str;\nvar d: number = source.str; // Ignored error: num ~> string\n\n`;\n\nexports[`source.js 1`] = `\n// @flow\n\nexport var str = 'asdf';\nexport var num = 42;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport var str = \"asdf\";\nexport var num = 42;\n\n`;\n\nexports[`test.js 1`] = `\n// @flow\n\nexport * as source from \"./source\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport * as source from \"./source\";\n\n`;\n"
  },
  {
    "path": "tests/flow/esproposal_export_star_as.ignore/dest.js",
    "content": "// @flow\n\nimport {source} from \"./test\";\n\nvar a: number = source.num;\nvar b: string = source.num; // Error: num ~> string\n\nvar c: string = source.str;\nvar d: number = source.str; // Ignored error: num ~> string\n"
  },
  {
    "path": "tests/flow/esproposal_export_star_as.ignore/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/esproposal_export_star_as.ignore/source.js",
    "content": "// @flow\n\nexport var str = 'asdf';\nexport var num = 42;\n"
  },
  {
    "path": "tests/flow/esproposal_export_star_as.ignore/test.js",
    "content": "// @flow\n\nexport * as source from \"./source\";\n"
  },
  {
    "path": "tests/flow/esproposal_export_star_as.warn/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n/* @flow */\n\nexport * as foo from \"./test\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nexport * as foo from \"./test\";\n\n`;\n"
  },
  {
    "path": "tests/flow/esproposal_export_star_as.warn/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/esproposal_export_star_as.warn/test.js",
    "content": "/* @flow */\n\nexport * as foo from \"./test\";\n"
  },
  {
    "path": "tests/flow/export_default/P.js",
    "content": "module.exports = require('M');\n"
  },
  {
    "path": "tests/flow/export_default/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`P.js 1`] = `\nmodule.exports = require('M');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nmodule.exports = require(\"M\");\n\n`;\n\nexports[`test.js 1`] = `\nvar M = require('M');\nvar N = require('N');\nN.x = M(N.x);\nvar P = require('./P'); // implementation of P redirects to module M\nN.y = P(N.y);\nvar Q = require('Q'); // declaration of Q redirects to module M\nN.z = Q(N.z);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar M = require(\"M\");\nvar N = require(\"N\");\nN.x = M(N.x);\nvar P = require(\"./P\"); // implementation of P redirects to module M\nN.y = P(N.y);\nvar Q = require(\"Q\"); // declaration of Q redirects to module M\nN.z = Q(N.z);\n\n`;\n"
  },
  {
    "path": "tests/flow/export_default/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/export_default/lib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`lib.js 1`] = `\ndeclare module M {\n    declare function exports(x:string): string;\n}\ndeclare module N {\n    declare var x: number;\n    declare var y: number;\n    declare var z: number;\n}\ndeclare module Q {\n    declare var exports: $Exports<'M'>;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare module M {\n  declare function exports(x: string): string;\n}\ndeclare module N {\n  declare var x: number;\n  declare var y: number;\n  declare var z: number;\n}\ndeclare module Q {\n  declare var exports: $Exports<\"M\">;\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/export_default/lib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/export_default/lib/lib.js",
    "content": "declare module M {\n    declare function exports(x:string): string;\n}\ndeclare module N {\n    declare var x: number;\n    declare var y: number;\n    declare var z: number;\n}\ndeclare module Q {\n    declare var exports: $Exports<'M'>;\n}\n"
  },
  {
    "path": "tests/flow/export_default/test.js",
    "content": "var M = require('M');\nvar N = require('N');\nN.x = M(N.x);\nvar P = require('./P'); // implementation of P redirects to module M\nN.y = P(N.y);\nvar Q = require('Q'); // declaration of Q redirects to module M\nN.z = Q(N.z);\n"
  },
  {
    "path": "tests/flow/export_type/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`cjs_with_types.js 1`] = `\n/* @flow */\n\nexport type talias4 = number;\nexport interface IFoo { prop: number };\n\nmodule.exports = {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nexport type talias4 = number;\nexport interface IFoo { prop: number }\n\nmodule.exports = {};\n\n`;\n\nexports[`importer.js 1`] = `\n/* @flow */\n\nimport type {\n  inlinedType1,\n  standaloneType1,\n  talias1,\n  talias3,\n} from \"./types_only\";\n\nvar a: inlinedType1 = 42;\nvar b: inlinedType1 = 'asdf'; // Error: string ~> number\n\nvar c: standaloneType1 = 42;\nvar d: standaloneType1 = 'asdf'; // Error: string ~> number\n\nvar e: talias1 = 42;\nvar f: talias1 = 'asdf'; // Error: string ~> number\n\nvar g: talias3 = 42;\nvar h: talias3 = 'asdf'; // Error: string ~> number\n\nimport type {talias4} from \"./cjs_with_types\";\nvar i: talias4 = 42;\nvar j: talias4 = 'asdf'; // Error: string ~> number\n\nimport {IFoo, IFoo2} from \"./types_only\";\n\nvar k: IFoo = {prop: 42};\nvar l: IFoo = {prop: 'asdf'}; // Error: {prop:string} ~> {prop:number}\n\nvar m: IFoo2 = {prop: 'asdf'};\nvar n: IFoo2 = {prop: 42}; // Error: {prop:number} ~> {prop:string}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nimport type {\n  inlinedType1,\n  standaloneType1,\n  talias1,\n  talias3\n} from \"./types_only\";\n\nvar a: inlinedType1 = 42;\nvar b: inlinedType1 = \"asdf\"; // Error: string ~> number\n\nvar c: standaloneType1 = 42;\nvar d: standaloneType1 = \"asdf\"; // Error: string ~> number\n\nvar e: talias1 = 42;\nvar f: talias1 = \"asdf\"; // Error: string ~> number\n\nvar g: talias3 = 42;\nvar h: talias3 = \"asdf\"; // Error: string ~> number\n\nimport type { talias4 } from \"./cjs_with_types\";\nvar i: talias4 = 42;\nvar j: talias4 = \"asdf\"; // Error: string ~> number\n\nimport { IFoo, IFoo2 } from \"./types_only\";\n\nvar k: IFoo = { prop: 42 };\nvar l: IFoo = { prop: \"asdf\" }; // Error: {prop:string} ~> {prop:number}\n\nvar m: IFoo2 = { prop: \"asdf\" };\nvar n: IFoo2 = { prop: 42 }; // Error: {prop:number} ~> {prop:string}\n\n`;\n\nexports[`types_only.js 1`] = `\n/* @flow */\n\nexport type inlinedType1 = number;\nvar a: inlinedType1 = 42;\nvar b: inlinedType1 = 'asdf'; // Error: string ~> number\n\ntype standaloneType1 = number;\nexport type {standaloneType1};\n\ntype standaloneType2 = number;\nexport {standaloneType2}; // Error: Missing \\`type\\` keyword\n\nexport type {talias1, talias2 as talias3, IFoo2} from \"./types_only2\";\n\nexport interface IFoo { prop: number };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nexport type inlinedType1 = number;\nvar a: inlinedType1 = 42;\nvar b: inlinedType1 = \"asdf\"; // Error: string ~> number\n\ntype standaloneType1 = number;\nexport type { standaloneType1 };\n\ntype standaloneType2 = number;\nexport { standaloneType2 }; // Error: Missing \\`type\\` keyword\n\nexport type { talias1, talias2 as talias3, IFoo2 } from \"./types_only2\";\n\nexport interface IFoo { prop: number }\n\n`;\n\nexports[`types_only2.js 1`] = `\n/* @flow */\n\nexport type talias1 = number;\nexport type talias2 = number;\nexport interface IFoo2 { prop: string };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nexport type talias1 = number;\nexport type talias2 = number;\nexport interface IFoo2 { prop: string }\n\n`;\n"
  },
  {
    "path": "tests/flow/export_type/cjs_with_types.js",
    "content": "/* @flow */\n\nexport type talias4 = number;\nexport interface IFoo { prop: number };\n\nmodule.exports = {}\n"
  },
  {
    "path": "tests/flow/export_type/importer.js",
    "content": "/* @flow */\n\nimport type {\n  inlinedType1,\n  standaloneType1,\n  talias1,\n  talias3,\n} from \"./types_only\";\n\nvar a: inlinedType1 = 42;\nvar b: inlinedType1 = 'asdf'; // Error: string ~> number\n\nvar c: standaloneType1 = 42;\nvar d: standaloneType1 = 'asdf'; // Error: string ~> number\n\nvar e: talias1 = 42;\nvar f: talias1 = 'asdf'; // Error: string ~> number\n\nvar g: talias3 = 42;\nvar h: talias3 = 'asdf'; // Error: string ~> number\n\nimport type {talias4} from \"./cjs_with_types\";\nvar i: talias4 = 42;\nvar j: talias4 = 'asdf'; // Error: string ~> number\n\nimport {IFoo, IFoo2} from \"./types_only\";\n\nvar k: IFoo = {prop: 42};\nvar l: IFoo = {prop: 'asdf'}; // Error: {prop:string} ~> {prop:number}\n\nvar m: IFoo2 = {prop: 'asdf'};\nvar n: IFoo2 = {prop: 42}; // Error: {prop:number} ~> {prop:string}\n"
  },
  {
    "path": "tests/flow/export_type/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/export_type/types_only.js",
    "content": "/* @flow */\n\nexport type inlinedType1 = number;\nvar a: inlinedType1 = 42;\nvar b: inlinedType1 = 'asdf'; // Error: string ~> number\n\ntype standaloneType1 = number;\nexport type {standaloneType1};\n\ntype standaloneType2 = number;\nexport {standaloneType2}; // Error: Missing `type` keyword\n\nexport type {talias1, talias2 as talias3, IFoo2} from \"./types_only2\";\n\nexport interface IFoo { prop: number };\n"
  },
  {
    "path": "tests/flow/export_type/types_only2.js",
    "content": "/* @flow */\n\nexport type talias1 = number;\nexport type talias2 = number;\nexport interface IFoo2 { prop: string };\n"
  },
  {
    "path": "tests/flow/extensions/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`foo.js 1`] = `\nvar imp = require('./bar');\nimp(1337);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar imp = require(\"./bar\");\nimp(1337);\n\n`;\n"
  },
  {
    "path": "tests/flow/extensions/foo.js",
    "content": "var imp = require('./bar');\nimp(1337);\n"
  },
  {
    "path": "tests/flow/extensions/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/facebook_fbt_none/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`main.js 1`] = `\n// @flow\nvar React = require('react');\n(<fbt />: React.Element<*>);\n(<fbt />: number); // Error: ReactElement ~> number\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nvar React = require(\"react\");\n(<fbt />: React.Element<*>);\n(<fbt />: number); // Error: ReactElement ~> number\n\n`;\n"
  },
  {
    "path": "tests/flow/facebook_fbt_none/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/facebook_fbt_none/main.js",
    "content": "// @flow\nvar React = require('react');\n(<fbt />: React.Element<*>);\n(<fbt />: number); // Error: ReactElement ~> number\n"
  },
  {
    "path": "tests/flow/facebook_fbt_some/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`main.js 1`] = `\n// @flow\n\n(<fbt />: number);\n(<fbt />: string); // Error (the libdef in this test marks fbt as number)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n(<fbt />: number);\n(<fbt />: string); // Error (the libdef in this test marks fbt as number)\n\n`;\n"
  },
  {
    "path": "tests/flow/facebook_fbt_some/flow-typed/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`fbt.js 1`] = `\ntype Fbt = number\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype Fbt = number;\n\n`;\n"
  },
  {
    "path": "tests/flow/facebook_fbt_some/flow-typed/fbt.js",
    "content": "type Fbt = number\n"
  },
  {
    "path": "tests/flow/facebook_fbt_some/flow-typed/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/facebook_fbt_some/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/facebook_fbt_some/main.js",
    "content": "// @flow\n\n(<fbt />: number);\n(<fbt />: string); // Error (the libdef in this test marks fbt as number)\n"
  },
  {
    "path": "tests/flow/facebookisms/Bar.js",
    "content": "var Bar = { x: 0 };\nmodule.exports = Bar;\n"
  },
  {
    "path": "tests/flow/facebookisms/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Bar.js 1`] = `\nvar Bar = { x: 0 };\nmodule.exports = Bar;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar Bar = { x: 0 };\nmodule.exports = Bar;\n\n`;\n\nexports[`copyProperties.js 1`] = `\n// @flow\n\nlet tests = [\n  // global\n  function() {\n    (copyProperties()); // error, unknown global\n  },\n\n  // annotation\n  function(copyProperties: Object$Assign) {\n    let result = {};\n    result.baz = false;\n    (copyProperties(\n      result,\n      { foo: 'a' },\n      { bar: 123 }\n    ): { foo: string, bar: number, baz: boolean });\n  },\n\n  // module from lib\n  function() {\n    const copyProperties = require('copyProperties');\n    let x = { foo: 'a' };\n    let y = { bar: 123 };\n    (copyProperties({}, x, y): { foo: string, bar: number });\n  },\n\n  // too few args\n  function(copyProperties: Object$Assign) {\n    copyProperties();\n    (copyProperties({ foo: 'a' }): { foo: number }); // err, num !~> string\n  },\n\n  // passed as a function\n  function(copyProperties: Object$Assign) {\n    function x(cb: Function) {}\n    x(copyProperties);\n  }\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  // global\n  function() {\n    copyProperties(); // error, unknown global\n  },\n\n  // annotation\n  function(copyProperties: Object$Assign) {\n    let result = {};\n    result.baz = false;\n    (copyProperties(result, { foo: \"a\" }, { bar: 123 }): {\n      foo: string,\n      bar: number,\n      baz: boolean\n    });\n  },\n\n  // module from lib\n  function() {\n    const copyProperties = require(\"copyProperties\");\n    let x = { foo: \"a\" };\n    let y = { bar: 123 };\n    (copyProperties({}, x, y): { foo: string, bar: number });\n  },\n\n  // too few args\n  function(copyProperties: Object$Assign) {\n    copyProperties();\n    (copyProperties({ foo: \"a\" }): { foo: number }); // err, num !~> string\n  },\n\n  // passed as a function\n  function(copyProperties: Object$Assign) {\n    function x(cb: Function) {}\n    x(copyProperties);\n  }\n];\n\n`;\n\nexports[`invariant.js 1`] = `\n/* @flow */\n\nlet tests = [\n  function() {\n    let x: ?string = null;\n    invariant(x, 'truthy only'); // error, forgot to require invariant\n  },\n\n  function(invariant: Function) {\n    let x: ?string = null;\n    invariant(x);\n    (x: string);\n  }\n]\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nlet tests = [\n  function() {\n    let x: ?string = null;\n    invariant(x, \"truthy only\"); // error, forgot to require invariant\n  },\n\n  function(invariant: Function) {\n    let x: ?string = null;\n    invariant(x);\n    (x: string);\n  }\n];\n\n`;\n\nexports[`lib.js 1`] = `\ndeclare module \"copyProperties\" {\n  declare var exports: Object$Assign;\n}\n\ndeclare module \"mergeInto\" {\n  declare var exports: $Facebookism$MergeInto;\n}\n\ndeclare module \"mixin\" {\n  declare var exports: $Facebookism$Mixin;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare module \"copyProperties\" {\n  declare var exports: Object$Assign;\n}\n\ndeclare module \"mergeInto\" {\n  declare var exports: $Facebookism$MergeInto;\n}\n\ndeclare module \"mixin\" {\n  declare var exports: $Facebookism$Mixin;\n}\n\n`;\n\nexports[`mergeInto.js 1`] = `\n// @flow\n\nlet tests = [\n  // global\n  function() {\n    (mergeInto()); // error, unknown global\n  },\n\n  // annotation\n  function(mergeInto: $Facebookism$MergeInto) {\n    let result = {};\n    result.baz = false;\n    (mergeInto(result, { foo: 'a' }, { bar: 123 }): void);\n    (result: { foo: string, bar: number, baz: boolean });\n  },\n\n  // module from lib\n  function() {\n    const mergeInto = require('mergeInto');\n    let result: { foo?: string, bar?: number, baz: boolean } = { baz: false };\n    (mergeInto(result, { foo: 'a' }, { bar: 123 }): void);\n  },\n\n  // too few args\n  function(mergeInto: $Facebookism$MergeInto) {\n    mergeInto();\n  },\n\n  // passed as a function\n  function(mergeInto: $Facebookism$MergeInto) {\n    function x(cb: Function) {}\n    x(mergeInto);\n  }\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  // global\n  function() {\n    mergeInto(); // error, unknown global\n  },\n\n  // annotation\n  function(mergeInto: $Facebookism$MergeInto) {\n    let result = {};\n    result.baz = false;\n    (mergeInto(result, { foo: \"a\" }, { bar: 123 }): void);\n    (result: { foo: string, bar: number, baz: boolean });\n  },\n\n  // module from lib\n  function() {\n    const mergeInto = require(\"mergeInto\");\n    let result: { foo?: string, bar?: number, baz: boolean } = { baz: false };\n    (mergeInto(result, { foo: \"a\" }, { bar: 123 }): void);\n  },\n\n  // too few args\n  function(mergeInto: $Facebookism$MergeInto) {\n    mergeInto();\n  },\n\n  // passed as a function\n  function(mergeInto: $Facebookism$MergeInto) {\n    function x(cb: Function) {}\n    x(mergeInto);\n  }\n];\n\n`;\n\nexports[`test.js 1`] = `\nvar Bar = require('./Bar');\nvar mixin = require('mixin');\n\nclass Foo extends mixin(Bar) {\n  m() {\n    var x: string = this.x;\n    this.y = \"\";\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar Bar = require(\"./Bar\");\nvar mixin = require(\"mixin\");\n\nclass Foo extends mixin(Bar) {\n  m() {\n    var x: string = this.x;\n    this.y = \"\";\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/facebookisms/copyProperties.js",
    "content": "// @flow\n\nlet tests = [\n  // global\n  function() {\n    (copyProperties()); // error, unknown global\n  },\n\n  // annotation\n  function(copyProperties: Object$Assign) {\n    let result = {};\n    result.baz = false;\n    (copyProperties(\n      result,\n      { foo: 'a' },\n      { bar: 123 }\n    ): { foo: string, bar: number, baz: boolean });\n  },\n\n  // module from lib\n  function() {\n    const copyProperties = require('copyProperties');\n    let x = { foo: 'a' };\n    let y = { bar: 123 };\n    (copyProperties({}, x, y): { foo: string, bar: number });\n  },\n\n  // too few args\n  function(copyProperties: Object$Assign) {\n    copyProperties();\n    (copyProperties({ foo: 'a' }): { foo: number }); // err, num !~> string\n  },\n\n  // passed as a function\n  function(copyProperties: Object$Assign) {\n    function x(cb: Function) {}\n    x(copyProperties);\n  }\n];\n"
  },
  {
    "path": "tests/flow/facebookisms/invariant.js",
    "content": "/* @flow */\n\nlet tests = [\n  function() {\n    let x: ?string = null;\n    invariant(x, 'truthy only'); // error, forgot to require invariant\n  },\n\n  function(invariant: Function) {\n    let x: ?string = null;\n    invariant(x);\n    (x: string);\n  }\n]\n"
  },
  {
    "path": "tests/flow/facebookisms/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/facebookisms/lib.js",
    "content": "declare module \"copyProperties\" {\n  declare var exports: Object$Assign;\n}\n\ndeclare module \"mergeInto\" {\n  declare var exports: $Facebookism$MergeInto;\n}\n\ndeclare module \"mixin\" {\n  declare var exports: $Facebookism$Mixin;\n}\n"
  },
  {
    "path": "tests/flow/facebookisms/mergeInto.js",
    "content": "// @flow\n\nlet tests = [\n  // global\n  function() {\n    (mergeInto()); // error, unknown global\n  },\n\n  // annotation\n  function(mergeInto: $Facebookism$MergeInto) {\n    let result = {};\n    result.baz = false;\n    (mergeInto(result, { foo: 'a' }, { bar: 123 }): void);\n    (result: { foo: string, bar: number, baz: boolean });\n  },\n\n  // module from lib\n  function() {\n    const mergeInto = require('mergeInto');\n    let result: { foo?: string, bar?: number, baz: boolean } = { baz: false };\n    (mergeInto(result, { foo: 'a' }, { bar: 123 }): void);\n  },\n\n  // too few args\n  function(mergeInto: $Facebookism$MergeInto) {\n    mergeInto();\n  },\n\n  // passed as a function\n  function(mergeInto: $Facebookism$MergeInto) {\n    function x(cb: Function) {}\n    x(mergeInto);\n  }\n];\n"
  },
  {
    "path": "tests/flow/facebookisms/test.js",
    "content": "var Bar = require('./Bar');\nvar mixin = require('mixin');\n\nclass Foo extends mixin(Bar) {\n  m() {\n    var x: string = this.x;\n    this.y = \"\";\n  }\n}\n"
  },
  {
    "path": "tests/flow/fetch/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`fetch.js 1`] = `\n/* @flow */\n\n// most of the details are tested in the separate file\n// here I test the basic usage\n\nconst myRequest = new Request('http://google.com');\n\nconst a: Promise<string> =\n  fetch(myRequest)\n  .then(response => response.text());\n\nconst b: Promise<string> = fetch(myRequest); // incorrect\n\nvar myInit = { method: 'GET',\n               headers: {\n                   'Content-Type': 'image/jpeg'\n               },\n               mode: 'cors',\n               cache: 'default' };\n\nconst c: Promise<Blob> =\n  fetch('image.png')\n  .then(response => response.blob()); // correct\n\nconst d: Promise<Blob> = fetch('image.png'); // incorrect\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n// most of the details are tested in the separate file\n// here I test the basic usage\n\nconst myRequest = new Request(\"http://google.com\");\n\nconst a: Promise<string> = fetch(myRequest).then(response => response.text());\n\nconst b: Promise<string> = fetch(myRequest); // incorrect\n\nvar myInit = {\n  method: \"GET\",\n  headers: {\n    \"Content-Type\": \"image/jpeg\"\n  },\n  mode: \"cors\",\n  cache: \"default\"\n};\n\nconst c: Promise<Blob> = fetch(\"image.png\").then(response => response.blob()); // correct\n\nconst d: Promise<Blob> = fetch(\"image.png\"); // incorrect\n\n`;\n\nexports[`headers.js 1`] = `\n/* @flow */\n\nconst a = new Headers(\"'Content-Type': 'image/jpeg'\"); // not correct\nconst b = new Headers(['Content-Type', 'image/jpeg']); // not correct\nconst c = new Headers({'Content-Type', 'image/jpeg'}); // correct\nconst d = new Headers(c); // correct\nconst e: Headers = new Headers(); // correct\ne.append('Content-Type', 'image/jpeg'); // correct\ne.append('Content-Type'); // not correct\ne.append({'Content-Type', 'image/jpeg'}); // not correct\ne.set('Content-Type', 'image/jpeg'); // correct\ne.set('Content-Type'); // not correct\ne.set({'Content-Type', 'image/jpeg'}); // not correct\n\nconst f: Headers = e.append('Content-Type', 'image/jpeg'); // not correct\n\nconst g: string = e.get('Content-Type'); // correct\nconst h: number = e.get('Content-Type'); // not correct\n\nfor (let v of e) {\n  const [i, j]: [string, string] = v; // correct\n}\n\nfor (let v of e.entries()) {\n  const [i, j]: [string, string] = v; // correct\n}\n\ne.getAll('content-type'); // incorrect\ne.forEach((val: string) => val); // correct\ne.forEach((val: string, key: string) => \\`\\${key}: \\${val}\\`); // correct\ne.forEach((val: string, key: string, o: Headers) => {}); // correct\ne.forEach(() => {}, {}); // correct\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nconst a = new Headers(\"'Content-Type': 'image/jpeg'\"); // not correct\nconst b = new Headers([\"Content-Type\", \"image/jpeg\"]); // not correct\nconst c = new Headers({ \"Content-Type\", \"image/jpeg\" }); // correct\nconst d = new Headers(c); // correct\nconst e: Headers = new Headers(); // correct\ne.append(\"Content-Type\", \"image/jpeg\"); // correct\ne.append(\"Content-Type\"); // not correct\ne.append({ \"Content-Type\", \"image/jpeg\" }); // not correct\ne.set(\"Content-Type\", \"image/jpeg\"); // correct\ne.set(\"Content-Type\"); // not correct\ne.set({ \"Content-Type\", \"image/jpeg\" }); // not correct\n\nconst f: Headers = e.append(\"Content-Type\", \"image/jpeg\"); // not correct\n\nconst g: string = e.get(\"Content-Type\"); // correct\nconst h: number = e.get(\"Content-Type\"); // not correct\n\nfor (let v of e) {\n  const [i, j]: [string, string] = v; // correct\n}\n\nfor (let v of e.entries()) {\n  const [i, j]: [string, string] = v; // correct\n}\n\ne.getAll(\"content-type\"); // incorrect\ne.forEach((val: string) => val); // correct\ne.forEach((val: string, key: string) => \\`\\${key}: \\${val}\\`); // correct\ne.forEach((val: string, key: string, o: Headers) => {}); // correct\ne.forEach(() => {}, {}); // correct\n\n`;\n\nexports[`request.js 1`] = `\n/* @flow */\nconst a: Request = new Request(); // incorrect\nconst b: Request = new Request('http://example.org'); // correct\nconst c: Request = new Request(b); // correct\nconst d: Request = new Request(c.clone()); // correct (doesn't make much sense though)\nconst e: Request = new Request(b, c); // incorrect\n\nconst f: Request = new Request({}) // incorrect\nconst g: Request = new Request('http://example.org', {}) // correct\nnew Request(new URL('http://example.org')); // correct\n\nconst h: Request = new Request('http://example.org', {\n  method: 'GET',\n  headers: {\n    'Content-Type': 'image/jpeg'\n  },\n  mode: 'cors',\n  cache: 'default'\n}) // correct\n\nvar bodyUsed: boolean = h.bodyUsed;\n\nh.text().then((t: string) => t); // correct\nh.text().then((t: Buffer) => t); // incorrect\nh.arrayBuffer().then((ab: ArrayBuffer) => ab); // correct\nh.arrayBuffer().then((ab: Buffer) => ab); // incorrect\n\nconst i: Request = new Request('http://example.org', {\n  method: 'POST',\n  headers: {\n    'Content-Type': 'application/octet-stream'\n  },\n  body: new ArrayBuffer(10),\n}); // correct\n\nconst j: Request = new Request('http://example.org', {\n  method: 'POST',\n  headers: {\n    'Content-Type': 'application/octet-stream'\n  },\n  body: new Uint8Array(10),\n}); // correct\n\nconst k: Request = new Request('http://example.org', {\n  method: 'POST',\n  headers: {\n    'Content-Type': 'image/jpeg'\n  },\n  body: new URLSearchParams(\"key=value\"),\n  mode: 'cors',\n  cache: 'default'\n}) // correct\n\nconst l: Request = new Request('http://example.org', {\n  method: 'GET',\n  headers: 'Content-Type: image/jpeg',\n  mode: 'cors',\n  cache: 'default'\n}) // incorrect - headers is string\n\nnew Request('/', { method: 'post' }); // correct\nnew Request('/', { method: 'hello' }); // correct\nnew Request('/', { method: null }); // incorrect\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nconst a: Request = new Request(); // incorrect\nconst b: Request = new Request(\"http://example.org\"); // correct\nconst c: Request = new Request(b); // correct\nconst d: Request = new Request(c.clone()); // correct (doesn't make much sense though)\nconst e: Request = new Request(b, c); // incorrect\n\nconst f: Request = new Request({}); // incorrect\nconst g: Request = new Request(\"http://example.org\", {}); // correct\nnew Request(new URL(\"http://example.org\")); // correct\n\nconst h: Request = new Request(\"http://example.org\", {\n  method: \"GET\",\n  headers: {\n    \"Content-Type\": \"image/jpeg\"\n  },\n  mode: \"cors\",\n  cache: \"default\"\n}); // correct\n\nvar bodyUsed: boolean = h.bodyUsed;\n\nh.text().then((t: string) => t); // correct\nh.text().then((t: Buffer) => t); // incorrect\nh.arrayBuffer().then((ab: ArrayBuffer) => ab); // correct\nh.arrayBuffer().then((ab: Buffer) => ab); // incorrect\n\nconst i: Request = new Request(\"http://example.org\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"application/octet-stream\"\n  },\n  body: new ArrayBuffer(10)\n}); // correct\n\nconst j: Request = new Request(\"http://example.org\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"application/octet-stream\"\n  },\n  body: new Uint8Array(10)\n}); // correct\n\nconst k: Request = new Request(\"http://example.org\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"image/jpeg\"\n  },\n  body: new URLSearchParams(\"key=value\"),\n  mode: \"cors\",\n  cache: \"default\"\n}); // correct\n\nconst l: Request = new Request(\"http://example.org\", {\n  method: \"GET\",\n  headers: \"Content-Type: image/jpeg\",\n  mode: \"cors\",\n  cache: \"default\"\n}); // incorrect - headers is string\n\nnew Request(\"/\", { method: \"post\" }); // correct\nnew Request(\"/\", { method: \"hello\" }); // correct\nnew Request(\"/\", { method: null }); // incorrect\n\n`;\n\nexports[`response.js 1`] = `\n/* @flow */\nconst a: Response = new Response(); // correct\nconst b: Response = new Response(new Blob()); // correct\nconst c: Response = new Response(new FormData()); // correct\n\nnew Response(\"\", { status: 404 }); // correct\nnew Response(null, { status: 204 }); // correct\nnew Response(\"\", { status: \"404\" }); // incorrect\nnew Response(\"\", { status: null }); // incorrect\n\nconst f: Response = new Response(\"responsebody\", {\n    status: 404,\n    headers: \"'Content-Type': 'image/jpeg'\"\n}); // incorrect\n\nconst g: Response = new Response(\"responsebody\", {\n    status: 404,\n    headers: {\n        'Content-Type': 'image/jpeg'\n    }\n}); // correct\n\nconst h: Response = new Response(\"responsebody\", {\n    status: 404,\n    headers: new Headers({\n        'Content-Type': 'image/jpeg'\n    })\n}); // correct, if verbose\n\nconst i: Response = new Response({\n    status: 404,\n    headers: new Headers({\n        'Content-Type': 'image/jpeg'\n    })\n}); // incorrect\n\nconst ok: boolean = h.ok;\nconst redirected: boolean = h.redirected;\nconst status: number = h.status;\n\nh.text().then((t: string) => t); // correct\nh.text().then((t: Buffer) => t); // incorrect\nh.arrayBuffer().then((ab: ArrayBuffer) => ab); // correct\nh.arrayBuffer().then((ab: Buffer) => ab); // incorrect\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nconst a: Response = new Response(); // correct\nconst b: Response = new Response(new Blob()); // correct\nconst c: Response = new Response(new FormData()); // correct\n\nnew Response(\"\", { status: 404 }); // correct\nnew Response(null, { status: 204 }); // correct\nnew Response(\"\", { status: \"404\" }); // incorrect\nnew Response(\"\", { status: null }); // incorrect\n\nconst f: Response = new Response(\"responsebody\", {\n  status: 404,\n  headers: \"'Content-Type': 'image/jpeg'\"\n}); // incorrect\n\nconst g: Response = new Response(\"responsebody\", {\n  status: 404,\n  headers: {\n    \"Content-Type\": \"image/jpeg\"\n  }\n}); // correct\n\nconst h: Response = new Response(\"responsebody\", {\n  status: 404,\n  headers: new Headers({\n    \"Content-Type\": \"image/jpeg\"\n  })\n}); // correct, if verbose\n\nconst i: Response = new Response({\n  status: 404,\n  headers: new Headers({\n    \"Content-Type\": \"image/jpeg\"\n  })\n}); // incorrect\n\nconst ok: boolean = h.ok;\nconst redirected: boolean = h.redirected;\nconst status: number = h.status;\n\nh.text().then((t: string) => t); // correct\nh.text().then((t: Buffer) => t); // incorrect\nh.arrayBuffer().then((ab: ArrayBuffer) => ab); // correct\nh.arrayBuffer().then((ab: Buffer) => ab); // incorrect\n\n`;\n\nexports[`urlsearchparams.js 1`] = `\n/* @flow */\n\nconst a = new URLSearchParams(\"key1=value1\"); // correct\nconst b = new URLSearchParams(['key1', 'value1']); // not correct\nconst c = new URLSearchParams({'key1', 'value1'}); // not correct\nconst d = new URLSearchParams(c); // correct\nconst e: URLSearchParams = new URLSearchParams(); // correct\ne.append('key1', 'value1'); // correct\ne.append('key1'); // not correct\ne.append({'key1', 'value1'}); // not correct\ne.set('key1', 'value1'); // correct\ne.set('key1'); // not correct\ne.set({'key1', 'value1'}); // not correct\n\nconst f: URLSearchParams = e.append('key1', 'value1'); // not correct\n\nconst g: string = e.get('key1'); // correct\nconst h: number = e.get('key1'); // not correct\n\nfor (let v of e) {\n  const [i, j]: [string, string] = v; // correct\n}\n\nfor (let v of e.entries()) {\n  const [i, j]: [string, string] = v; // correct\n}\n\ne.getAll('key1').forEach((v: string) => {}); // correct\n\ne.forEach((val: string) => val); // correct\ne.forEach((val: string, key: string) => \\`\\${key}: \\${val}\\`); // correct\ne.forEach((val: string, key: string, o: URLSearchParams) => {}); // correct\ne.forEach(() => {}, {}); // correct\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nconst a = new URLSearchParams(\"key1=value1\"); // correct\nconst b = new URLSearchParams([\"key1\", \"value1\"]); // not correct\nconst c = new URLSearchParams({ \"key1\", \"value1\" }); // not correct\nconst d = new URLSearchParams(c); // correct\nconst e: URLSearchParams = new URLSearchParams(); // correct\ne.append(\"key1\", \"value1\"); // correct\ne.append(\"key1\"); // not correct\ne.append({ \"key1\", \"value1\" }); // not correct\ne.set(\"key1\", \"value1\"); // correct\ne.set(\"key1\"); // not correct\ne.set({ \"key1\", \"value1\" }); // not correct\n\nconst f: URLSearchParams = e.append(\"key1\", \"value1\"); // not correct\n\nconst g: string = e.get(\"key1\"); // correct\nconst h: number = e.get(\"key1\"); // not correct\n\nfor (let v of e) {\n  const [i, j]: [string, string] = v; // correct\n}\n\nfor (let v of e.entries()) {\n  const [i, j]: [string, string] = v; // correct\n}\n\ne.getAll(\"key1\").forEach((v: string) => {}); // correct\n\ne.forEach((val: string) => val); // correct\ne.forEach((val: string, key: string) => \\`\\${key}: \\${val}\\`); // correct\ne.forEach((val: string, key: string, o: URLSearchParams) => {}); // correct\ne.forEach(() => {}, {}); // correct\n\n`;\n"
  },
  {
    "path": "tests/flow/fetch/fetch.js",
    "content": "/* @flow */\n\n// most of the details are tested in the separate file\n// here I test the basic usage\n\nconst myRequest = new Request('http://google.com');\n\nconst a: Promise<string> =\n  fetch(myRequest)\n  .then(response => response.text());\n\nconst b: Promise<string> = fetch(myRequest); // incorrect\n\nvar myInit = { method: 'GET',\n               headers: {\n                   'Content-Type': 'image/jpeg'\n               },\n               mode: 'cors',\n               cache: 'default' };\n\nconst c: Promise<Blob> =\n  fetch('image.png')\n  .then(response => response.blob()); // correct\n\nconst d: Promise<Blob> = fetch('image.png'); // incorrect\n"
  },
  {
    "path": "tests/flow/fetch/headers.js",
    "content": "/* @flow */\n\nconst a = new Headers(\"'Content-Type': 'image/jpeg'\"); // not correct\nconst b = new Headers(['Content-Type', 'image/jpeg']); // not correct\nconst c = new Headers({'Content-Type', 'image/jpeg'}); // correct\nconst d = new Headers(c); // correct\nconst e: Headers = new Headers(); // correct\ne.append('Content-Type', 'image/jpeg'); // correct\ne.append('Content-Type'); // not correct\ne.append({'Content-Type', 'image/jpeg'}); // not correct\ne.set('Content-Type', 'image/jpeg'); // correct\ne.set('Content-Type'); // not correct\ne.set({'Content-Type', 'image/jpeg'}); // not correct\n\nconst f: Headers = e.append('Content-Type', 'image/jpeg'); // not correct\n\nconst g: string = e.get('Content-Type'); // correct\nconst h: number = e.get('Content-Type'); // not correct\n\nfor (let v of e) {\n  const [i, j]: [string, string] = v; // correct\n}\n\nfor (let v of e.entries()) {\n  const [i, j]: [string, string] = v; // correct\n}\n\ne.getAll('content-type'); // incorrect\ne.forEach((val: string) => val); // correct\ne.forEach((val: string, key: string) => `${key}: ${val}`); // correct\ne.forEach((val: string, key: string, o: Headers) => {}); // correct\ne.forEach(() => {}, {}); // correct\n"
  },
  {
    "path": "tests/flow/fetch/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/fetch/request.js",
    "content": "/* @flow */\nconst a: Request = new Request(); // incorrect\nconst b: Request = new Request('http://example.org'); // correct\nconst c: Request = new Request(b); // correct\nconst d: Request = new Request(c.clone()); // correct (doesn't make much sense though)\nconst e: Request = new Request(b, c); // incorrect\n\nconst f: Request = new Request({}) // incorrect\nconst g: Request = new Request('http://example.org', {}) // correct\nnew Request(new URL('http://example.org')); // correct\n\nconst h: Request = new Request('http://example.org', {\n  method: 'GET',\n  headers: {\n    'Content-Type': 'image/jpeg'\n  },\n  mode: 'cors',\n  cache: 'default'\n}) // correct\n\nvar bodyUsed: boolean = h.bodyUsed;\n\nh.text().then((t: string) => t); // correct\nh.text().then((t: Buffer) => t); // incorrect\nh.arrayBuffer().then((ab: ArrayBuffer) => ab); // correct\nh.arrayBuffer().then((ab: Buffer) => ab); // incorrect\n\nconst i: Request = new Request('http://example.org', {\n  method: 'POST',\n  headers: {\n    'Content-Type': 'application/octet-stream'\n  },\n  body: new ArrayBuffer(10),\n}); // correct\n\nconst j: Request = new Request('http://example.org', {\n  method: 'POST',\n  headers: {\n    'Content-Type': 'application/octet-stream'\n  },\n  body: new Uint8Array(10),\n}); // correct\n\nconst k: Request = new Request('http://example.org', {\n  method: 'POST',\n  headers: {\n    'Content-Type': 'image/jpeg'\n  },\n  body: new URLSearchParams(\"key=value\"),\n  mode: 'cors',\n  cache: 'default'\n}) // correct\n\nconst l: Request = new Request('http://example.org', {\n  method: 'GET',\n  headers: 'Content-Type: image/jpeg',\n  mode: 'cors',\n  cache: 'default'\n}) // incorrect - headers is string\n\nnew Request('/', { method: 'post' }); // correct\nnew Request('/', { method: 'hello' }); // correct\nnew Request('/', { method: null }); // incorrect\n"
  },
  {
    "path": "tests/flow/fetch/response.js",
    "content": "/* @flow */\nconst a: Response = new Response(); // correct\nconst b: Response = new Response(new Blob()); // correct\nconst c: Response = new Response(new FormData()); // correct\n\nnew Response(\"\", { status: 404 }); // correct\nnew Response(null, { status: 204 }); // correct\nnew Response(\"\", { status: \"404\" }); // incorrect\nnew Response(\"\", { status: null }); // incorrect\n\nconst f: Response = new Response(\"responsebody\", {\n    status: 404,\n    headers: \"'Content-Type': 'image/jpeg'\"\n}); // incorrect\n\nconst g: Response = new Response(\"responsebody\", {\n    status: 404,\n    headers: {\n        'Content-Type': 'image/jpeg'\n    }\n}); // correct\n\nconst h: Response = new Response(\"responsebody\", {\n    status: 404,\n    headers: new Headers({\n        'Content-Type': 'image/jpeg'\n    })\n}); // correct, if verbose\n\nconst i: Response = new Response({\n    status: 404,\n    headers: new Headers({\n        'Content-Type': 'image/jpeg'\n    })\n}); // incorrect\n\nconst ok: boolean = h.ok;\nconst redirected: boolean = h.redirected;\nconst status: number = h.status;\n\nh.text().then((t: string) => t); // correct\nh.text().then((t: Buffer) => t); // incorrect\nh.arrayBuffer().then((ab: ArrayBuffer) => ab); // correct\nh.arrayBuffer().then((ab: Buffer) => ab); // incorrect\n"
  },
  {
    "path": "tests/flow/fetch/urlsearchparams.js",
    "content": "/* @flow */\n\nconst a = new URLSearchParams(\"key1=value1\"); // correct\nconst b = new URLSearchParams(['key1', 'value1']); // not correct\nconst c = new URLSearchParams({'key1', 'value1'}); // not correct\nconst d = new URLSearchParams(c); // correct\nconst e: URLSearchParams = new URLSearchParams(); // correct\ne.append('key1', 'value1'); // correct\ne.append('key1'); // not correct\ne.append({'key1', 'value1'}); // not correct\ne.set('key1', 'value1'); // correct\ne.set('key1'); // not correct\ne.set({'key1', 'value1'}); // not correct\n\nconst f: URLSearchParams = e.append('key1', 'value1'); // not correct\n\nconst g: string = e.get('key1'); // correct\nconst h: number = e.get('key1'); // not correct\n\nfor (let v of e) {\n  const [i, j]: [string, string] = v; // correct\n}\n\nfor (let v of e.entries()) {\n  const [i, j]: [string, string] = v; // correct\n}\n\ne.getAll('key1').forEach((v: string) => {}); // correct\n\ne.forEach((val: string) => val); // correct\ne.forEach((val: string, key: string) => `${key}: ${val}`); // correct\ne.forEach((val: string, key: string, o: URLSearchParams) => {}); // correct\ne.forEach(() => {}, {}); // correct\n"
  },
  {
    "path": "tests/flow/find-module/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`req.js 1`] = `\nmodule.exports = 0;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nmodule.exports = 0;\n\n`;\n\nexports[`test.js 1`] = `\nvar x = require('./req');\n(x: string);\n\nimport x from './req';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x = require(\"./req\");\n(x: string);\n\nimport x from \"./req\";\n\n`;\n"
  },
  {
    "path": "tests/flow/find-module/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/find-module/req.js",
    "content": "module.exports = 0;\n"
  },
  {
    "path": "tests/flow/find-module/test.js",
    "content": "var x = require('./req');\n(x: string);\n\nimport x from './req';\n"
  },
  {
    "path": "tests/flow/fixpoint/Fun.js",
    "content": "\n/* @providesModule Fun */\n\nfunction eq(x:number,y:number) { return true };\nfunction sub(x:number,y:number) { return 0; }\nfunction mul(x:number,y:number) { return 0; }\n\nfunction fix(fold) {\n  var delta = function(delta) {\n    return fold(\n      function(x) { var eta = delta(delta); return eta(x); }\n    );\n  };\n  return delta(delta);\n}\n\nfunction mk_factorial() {\n  return fix(function(factorial) {\n    return function(n) {\n      if (eq (n, 1)) { return 1; }\n      return mul (factorial (sub (n, 1)), n);\n    };\n  });\n}\n\n\nvar factorial = mk_factorial();\nfactorial(\"...\");\n\nmodule.exports = {fn: fix};\n"
  },
  {
    "path": "tests/flow/fixpoint/Ycombinator.js",
    "content": "\n/* @providesModule Ycombinator */\n\nfunction Y(f) {\n  function g(x) { return f(x(x)); }\n  g(g);\n}\n\nfunction func1(f) {\n  function fix_f(x:number):number { return f(x); }\n  return fix_f;\n}\nfunction func2(f) {\n  function fix_f(x:string):string { return f(x); }\n  return fix_f;\n}\n\nY(func1);\nY(func2);\n\nmodule.exports = Y;\n"
  },
  {
    "path": "tests/flow/fixpoint/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Fun.js 1`] = `\n\n/* @providesModule Fun */\n\nfunction eq(x:number,y:number) { return true };\nfunction sub(x:number,y:number) { return 0; }\nfunction mul(x:number,y:number) { return 0; }\n\nfunction fix(fold) {\n  var delta = function(delta) {\n    return fold(\n      function(x) { var eta = delta(delta); return eta(x); }\n    );\n  };\n  return delta(delta);\n}\n\nfunction mk_factorial() {\n  return fix(function(factorial) {\n    return function(n) {\n      if (eq (n, 1)) { return 1; }\n      return mul (factorial (sub (n, 1)), n);\n    };\n  });\n}\n\n\nvar factorial = mk_factorial();\nfactorial(\"...\");\n\nmodule.exports = {fn: fix};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule Fun */\n\nfunction eq(x: number, y: number) {\n  return true;\n}\nfunction sub(x: number, y: number) {\n  return 0;\n}\nfunction mul(x: number, y: number) {\n  return 0;\n}\n\nfunction fix(fold) {\n  var delta = function(delta) {\n    return fold(function(x) {\n      var eta = delta(delta);\n      return eta(x);\n    });\n  };\n  return delta(delta);\n}\n\nfunction mk_factorial() {\n  return fix(function(factorial) {\n    return function(n) {\n      if (eq(n, 1)) {\n        return 1;\n      }\n      return mul(factorial(sub(n, 1)), n);\n    };\n  });\n}\n\nvar factorial = mk_factorial();\nfactorial(\"...\");\n\nmodule.exports = { fn: fix };\n\n`;\n\nexports[`Ycombinator.js 1`] = `\n\n/* @providesModule Ycombinator */\n\nfunction Y(f) {\n  function g(x) { return f(x(x)); }\n  g(g);\n}\n\nfunction func1(f) {\n  function fix_f(x:number):number { return f(x); }\n  return fix_f;\n}\nfunction func2(f) {\n  function fix_f(x:string):string { return f(x); }\n  return fix_f;\n}\n\nY(func1);\nY(func2);\n\nmodule.exports = Y;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule Ycombinator */\n\nfunction Y(f) {\n  function g(x) {\n    return f(x(x));\n  }\n  g(g);\n}\n\nfunction func1(f) {\n  function fix_f(x: number): number {\n    return f(x);\n  }\n  return fix_f;\n}\nfunction func2(f) {\n  function fix_f(x: string): string {\n    return f(x);\n  }\n  return fix_f;\n}\n\nY(func1);\nY(func2);\n\nmodule.exports = Y;\n\n`;\n"
  },
  {
    "path": "tests/flow/fixpoint/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/flow_ast.template_strings/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`foo.js 1`] = `\na\\`foo \\${bar} baz\\`\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\na\\`foo \\${bar} baz\\`;\n\n`;\n"
  },
  {
    "path": "tests/flow/flow_ast.template_strings/foo.js",
    "content": "a`foo ${bar} baz`\n"
  },
  {
    "path": "tests/flow/flow_ast.template_strings/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/focus-check/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`a.js 1`] = `\n// @flow\n\n(require('./b'): number);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n(require(\"./b\"): number);\n\n`;\n\nexports[`b.js 1`] = `\n// @flow\n\nmodule.exports = \"\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nmodule.exports = \"\";\n\n`;\n\nexports[`test.js 1`] = `\n// @flow\n\n(\"\": number);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n(\"\": number);\n\n`;\n"
  },
  {
    "path": "tests/flow/focus-check/a.js",
    "content": "// @flow\n\n(require('./b'): number);\n"
  },
  {
    "path": "tests/flow/focus-check/b.js",
    "content": "// @flow\n\nmodule.exports = \"\";\n"
  },
  {
    "path": "tests/flow/focus-check/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/focus-check/test.js",
    "content": "// @flow\n\n(\"\": number);\n"
  },
  {
    "path": "tests/flow/for/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`abnormal.js 1`] = `\n/* @flow */\n\nfunction foo(x: boolean) {\n  var max = 10;\n  for (var ii = 0; ii < max; ii++) {\n    if (x) {\n      continue;\n    }\n    return;\n  }\n  console.log('this is still reachable');\n}\n\nfunction bar(x: boolean) {\n  var max = 0;\n  for (var ii = 0; ii < max; ii++) {\n    return;\n  }\n  console.log('this is still reachable');\n}\n\nfunction baz(x: boolean) {\n  var max = 0;\n  for (var ii = 0; ii < max; ii++) {\n    continue;\n  }\n  console.log('this is still reachable');\n}\n\nfunction bliffl(x: boolean) {\n  var max = 10;\n  loop1: for (var ii = 0; ii < max; ii++) {\n    loop2: for (var jj = 0; jj < max; jj++) {\n      break loop1;\n    }\n    console.log('this is still reachable');\n  }\n  console.log('this is still reachable');\n}\n\nfunction corge(x: boolean) {\n  var max = 0;\n  for (var ii = 0; ii < max; ii++) {\n    break;\n  }\n  console.log('this is still reachable');\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction foo(x: boolean) {\n  var max = 10;\n  for (var ii = 0; ii < max; ii++) {\n    if (x) {\n      continue;\n    }\n    return;\n  }\n  console.log(\"this is still reachable\");\n}\n\nfunction bar(x: boolean) {\n  var max = 0;\n  for (var ii = 0; ii < max; ii++) {\n    return;\n  }\n  console.log(\"this is still reachable\");\n}\n\nfunction baz(x: boolean) {\n  var max = 0;\n  for (var ii = 0; ii < max; ii++) {\n    continue;\n  }\n  console.log(\"this is still reachable\");\n}\n\nfunction bliffl(x: boolean) {\n  var max = 10;\n  loop1: for (var ii = 0; ii < max; ii++) {\n    loop2: for (var jj = 0; jj < max; jj++) {\n      break loop1;\n    }\n    console.log(\"this is still reachable\");\n  }\n  console.log(\"this is still reachable\");\n}\n\nfunction corge(x: boolean) {\n  var max = 0;\n  for (var ii = 0; ii < max; ii++) {\n    break;\n  }\n  console.log(\"this is still reachable\");\n}\n\n`;\n\nexports[`abnormal_for_in.js 1`] = `\nfunction foo(x: boolean) {\n  var obj = { a: 1, b: 2};\n  for (var prop in obj) {\n    if (x) {\n      continue;\n    }\n    return;\n  }\n  console.log('this is still reachable');\n}\n\nfunction bar(x: boolean) {\n  for (var prop in {}) {\n    return;\n  }\n  console.log('this is still reachable');\n}\n\nfunction baz(x: boolean) {\n  for (var prop in {}) {\n    continue;\n  }\n  console.log('this is still reachable');\n}\n\nfunction bliffl(x: boolean) {\n  var obj = { a: 1, b: 2};\n  loop1: for (var prop1 in obj) {\n    loop2: for (var prop2 in obj) {\n      break loop1;\n    }\n    console.log('this is still reachable');\n  }\n  console.log('this is still reachable');\n}\n\nfunction corge(x: boolean) {\n  for (var prop in {}) {\n    break;\n  }\n  console.log('this is still reachable');\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo(x: boolean) {\n  var obj = { a: 1, b: 2 };\n  for (var prop in obj) {\n    if (x) {\n      continue;\n    }\n    return;\n  }\n  console.log(\"this is still reachable\");\n}\n\nfunction bar(x: boolean) {\n  for (var prop in {}) {\n    return;\n  }\n  console.log(\"this is still reachable\");\n}\n\nfunction baz(x: boolean) {\n  for (var prop in {}) {\n    continue;\n  }\n  console.log(\"this is still reachable\");\n}\n\nfunction bliffl(x: boolean) {\n  var obj = { a: 1, b: 2 };\n  loop1: for (var prop1 in obj) {\n    loop2: for (var prop2 in obj) {\n      break loop1;\n    }\n    console.log(\"this is still reachable\");\n  }\n  console.log(\"this is still reachable\");\n}\n\nfunction corge(x: boolean) {\n  for (var prop in {}) {\n    break;\n  }\n  console.log(\"this is still reachable\");\n}\n\n`;\n\nexports[`abnormal_for_of.js 1`] = `\nfunction foo(x: boolean) {\n  var arr = [1, 2, 3];\n  for (var elem of arr) {\n    if (x) {\n      continue;\n    }\n    return;\n  }\n  console.log('this is still reachable');\n}\n\nfunction bar(x: boolean) {\n  for (var elem of []) {\n    return;\n  }\n  console.log('this is still reachable');\n}\n\nfunction baz(x: boolean) {\n  for (var elem of []) {\n    continue;\n  }\n  console.log('this is still reachable');\n}\n\nfunction bliffl(x: boolean) {\n  var arr = [1, 2, 3];\n  loop1: for (var elem of arr) {\n    loop2: for (var elem of arr) {\n      break loop1;\n    }\n    console.log('this is still reachable');\n  }\n  console.log('this is still reachable');\n}\n\nfunction corge(x: boolean) {\n  for (var elem of []) {\n    break;\n  }\n  console.log('this is still reachable');\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo(x: boolean) {\n  var arr = [1, 2, 3];\n  for (var elem of arr) {\n    if (x) {\n      continue;\n    }\n    return;\n  }\n  console.log(\"this is still reachable\");\n}\n\nfunction bar(x: boolean) {\n  for (var elem of []) {\n    return;\n  }\n  console.log(\"this is still reachable\");\n}\n\nfunction baz(x: boolean) {\n  for (var elem of []) {\n    continue;\n  }\n  console.log(\"this is still reachable\");\n}\n\nfunction bliffl(x: boolean) {\n  var arr = [1, 2, 3];\n  loop1: for (var elem of arr) {\n    loop2: for (var elem of arr) {\n      break loop1;\n    }\n    console.log(\"this is still reachable\");\n  }\n  console.log(\"this is still reachable\");\n}\n\nfunction corge(x: boolean) {\n  for (var elem of []) {\n    break;\n  }\n  console.log(\"this is still reachable\");\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/for/abnormal.js",
    "content": "/* @flow */\n\nfunction foo(x: boolean) {\n  var max = 10;\n  for (var ii = 0; ii < max; ii++) {\n    if (x) {\n      continue;\n    }\n    return;\n  }\n  console.log('this is still reachable');\n}\n\nfunction bar(x: boolean) {\n  var max = 0;\n  for (var ii = 0; ii < max; ii++) {\n    return;\n  }\n  console.log('this is still reachable');\n}\n\nfunction baz(x: boolean) {\n  var max = 0;\n  for (var ii = 0; ii < max; ii++) {\n    continue;\n  }\n  console.log('this is still reachable');\n}\n\nfunction bliffl(x: boolean) {\n  var max = 10;\n  loop1: for (var ii = 0; ii < max; ii++) {\n    loop2: for (var jj = 0; jj < max; jj++) {\n      break loop1;\n    }\n    console.log('this is still reachable');\n  }\n  console.log('this is still reachable');\n}\n\nfunction corge(x: boolean) {\n  var max = 0;\n  for (var ii = 0; ii < max; ii++) {\n    break;\n  }\n  console.log('this is still reachable');\n}\n"
  },
  {
    "path": "tests/flow/for/abnormal_for_in.js",
    "content": "function foo(x: boolean) {\n  var obj = { a: 1, b: 2};\n  for (var prop in obj) {\n    if (x) {\n      continue;\n    }\n    return;\n  }\n  console.log('this is still reachable');\n}\n\nfunction bar(x: boolean) {\n  for (var prop in {}) {\n    return;\n  }\n  console.log('this is still reachable');\n}\n\nfunction baz(x: boolean) {\n  for (var prop in {}) {\n    continue;\n  }\n  console.log('this is still reachable');\n}\n\nfunction bliffl(x: boolean) {\n  var obj = { a: 1, b: 2};\n  loop1: for (var prop1 in obj) {\n    loop2: for (var prop2 in obj) {\n      break loop1;\n    }\n    console.log('this is still reachable');\n  }\n  console.log('this is still reachable');\n}\n\nfunction corge(x: boolean) {\n  for (var prop in {}) {\n    break;\n  }\n  console.log('this is still reachable');\n}\n"
  },
  {
    "path": "tests/flow/for/abnormal_for_of.js",
    "content": "function foo(x: boolean) {\n  var arr = [1, 2, 3];\n  for (var elem of arr) {\n    if (x) {\n      continue;\n    }\n    return;\n  }\n  console.log('this is still reachable');\n}\n\nfunction bar(x: boolean) {\n  for (var elem of []) {\n    return;\n  }\n  console.log('this is still reachable');\n}\n\nfunction baz(x: boolean) {\n  for (var elem of []) {\n    continue;\n  }\n  console.log('this is still reachable');\n}\n\nfunction bliffl(x: boolean) {\n  var arr = [1, 2, 3];\n  loop1: for (var elem of arr) {\n    loop2: for (var elem of arr) {\n      break loop1;\n    }\n    console.log('this is still reachable');\n  }\n  console.log('this is still reachable');\n}\n\nfunction corge(x: boolean) {\n  for (var elem of []) {\n    break;\n  }\n  console.log('this is still reachable');\n}\n"
  },
  {
    "path": "tests/flow/for/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/forof/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`forof.js 1`] = `\n/**\n * @flow\n */\n\nfunction testArray(arr: Array<number>): void {\n  for (var x of arr) {\n    (x: string); // Error - number ~> string\n  }\n}\n\nfunction testIterable1(iterable: Iterable<number>): void {\n  for (var x of iterable) {\n    (x: string); // Error - number ~> string\n  }\n}\n\nfunction testIterable2(iterable: Iterable<*>): void {\n  for (var x of iterable) {\n    (x: string);\n  }\n}\n\nfunction testString(str: string): void {\n  for (var x of str) {\n    (x: number); // Error - string ~> number\n  }\n}\n\nfunction testMap1(map: Map<string, number>): void {\n  for (var elem of map) {\n    (elem: [string, number]);\n    (elem: number); // Error - tuple ~> number\n  }\n}\n\nfunction testMap2(map: Map<*, *>): void {\n  for (var elem of map) {\n    (elem: [number, string]); // Any tuple is fine\n    (elem: number); // Error - tuple ~> number\n  }\n}\n\nfunction testSet1(set: Set<string>): void {\n  for (var x of set) {\n    (x: number); // Error - string ~> number\n  }\n}\n\nfunction testSet2(set: Set<*>): void {\n  for (var x of set) {\n    (x: number); // Anything goes\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nfunction testArray(arr: Array<number>): void {\n  for (var x of arr) {\n    (x: string); // Error - number ~> string\n  }\n}\n\nfunction testIterable1(iterable: Iterable<number>): void {\n  for (var x of iterable) {\n    (x: string); // Error - number ~> string\n  }\n}\n\nfunction testIterable2(iterable: Iterable<*>): void {\n  for (var x of iterable) {\n    (x: string);\n  }\n}\n\nfunction testString(str: string): void {\n  for (var x of str) {\n    (x: number); // Error - string ~> number\n  }\n}\n\nfunction testMap1(map: Map<string, number>): void {\n  for (var elem of map) {\n    (elem: [string, number]);\n    (elem: number); // Error - tuple ~> number\n  }\n}\n\nfunction testMap2(map: Map<*, *>): void {\n  for (var elem of map) {\n    (elem: [number, string]); // Any tuple is fine\n    (elem: number); // Error - tuple ~> number\n  }\n}\n\nfunction testSet1(set: Set<string>): void {\n  for (var x of set) {\n    (x: number); // Error - string ~> number\n  }\n}\n\nfunction testSet2(set: Set<*>): void {\n  for (var x of set) {\n    (x: number); // Anything goes\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/forof/forof.js",
    "content": "/**\n * @flow\n */\n\nfunction testArray(arr: Array<number>): void {\n  for (var x of arr) {\n    (x: string); // Error - number ~> string\n  }\n}\n\nfunction testIterable1(iterable: Iterable<number>): void {\n  for (var x of iterable) {\n    (x: string); // Error - number ~> string\n  }\n}\n\nfunction testIterable2(iterable: Iterable<*>): void {\n  for (var x of iterable) {\n    (x: string);\n  }\n}\n\nfunction testString(str: string): void {\n  for (var x of str) {\n    (x: number); // Error - string ~> number\n  }\n}\n\nfunction testMap1(map: Map<string, number>): void {\n  for (var elem of map) {\n    (elem: [string, number]);\n    (elem: number); // Error - tuple ~> number\n  }\n}\n\nfunction testMap2(map: Map<*, *>): void {\n  for (var elem of map) {\n    (elem: [number, string]); // Any tuple is fine\n    (elem: number); // Error - tuple ~> number\n  }\n}\n\nfunction testSet1(set: Set<string>): void {\n  for (var x of set) {\n    (x: number); // Error - string ~> number\n  }\n}\n\nfunction testSet2(set: Set<*>): void {\n  for (var x of set) {\n    (x: number); // Anything goes\n  }\n}\n"
  },
  {
    "path": "tests/flow/forof/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/function/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`apply.js 1`] = `\nfunction test(a: string, b: number): number {\n  return this.length; // expect []/\"\" this\n}\n\n// tuples flow correctly into params\ntest.apply(\"\", [\"\", 0]);\n\n// wrong this is an error\ntest.apply(0, [\"\", 0]); // error: lookup \\`length\\` on Number\n\n// not enough arguments is an error\ntest.apply(\"\", [\"\"]); // error: void ~> number\n\n// mistyped arguments is an error\ntest.apply(\"\", [\"\", \"\"]); // error: string ~> number (2nd arg)\ntest.apply(\"\", [0, 0]); // error: number ~> string (1st arg)\n\n// resolve args array from tvar\nfunction f(args) { test.apply(\"\", args) }\nf([\"\", 0]); // OK\nf([\"\", \"\"]); // error: string ~> number (2nd arg)\nf([0, 0]); // error: number ~> string (1st arg)\n\n// expect array\ntest.apply(\"\", \"not array\"); // error: expect array of args\n\n// expect 4 errors:\n// - lookup length on Number (because 0 is used as \\`this\\`)\n// - 123 is not a string\n// - 'foo' is not a number\n// - return type (number) is not void\n(test.call.apply(test, [0, 123, 'foo']): void);\n\n// expect 2 errors:\n// - lookup length on number (0 is used as \\`this\\`)\n// - 123 is not a string\n(test.bind.apply(test, [0, 123]): (b: number) => number);\n\n// args are optional\nfunction test2(): number { return 0; }\n(test2.apply(): number);\n(test2.apply(\"\"): number);\n\n// callable objects\nfunction test3(x: { (a: string, b: string): void }) {\n  x.apply(x, ['foo', 'bar']); // ok\n  x.apply(x, ['foo', 123]); // error, number !~> string\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction test(a: string, b: number): number {\n  return this.length; // expect []/\"\" this\n}\n\n// tuples flow correctly into params\ntest.apply(\"\", [\"\", 0]);\n\n// wrong this is an error\ntest.apply(0, [\"\", 0]); // error: lookup \\`length\\` on Number\n\n// not enough arguments is an error\ntest.apply(\"\", [\"\"]); // error: void ~> number\n\n// mistyped arguments is an error\ntest.apply(\"\", [\"\", \"\"]); // error: string ~> number (2nd arg)\ntest.apply(\"\", [0, 0]); // error: number ~> string (1st arg)\n\n// resolve args array from tvar\nfunction f(args) {\n  test.apply(\"\", args);\n}\nf([\"\", 0]); // OK\nf([\"\", \"\"]); // error: string ~> number (2nd arg)\nf([0, 0]); // error: number ~> string (1st arg)\n\n// expect array\ntest.apply(\"\", \"not array\"); // error: expect array of args\n\n// expect 4 errors:\n// - lookup length on Number (because 0 is used as \\`this\\`)\n// - 123 is not a string\n// - 'foo' is not a number\n// - return type (number) is not void\n(test.call.apply(test, [0, 123, \"foo\"]): void);\n\n// expect 2 errors:\n// - lookup length on number (0 is used as \\`this\\`)\n// - 123 is not a string\n(test.bind.apply(test, [0, 123]): (b: number) => number);\n\n// args are optional\nfunction test2(): number {\n  return 0;\n}\n(test2.apply(): number);\n(test2.apply(\"\"): number);\n\n// callable objects\nfunction test3(x: { (a: string, b: string): void }) {\n  x.apply(x, [\"foo\", \"bar\"]); // ok\n  x.apply(x, [\"foo\", 123]); // error, number !~> string\n}\n\n`;\n\nexports[`bind.js 1`] = `\n// @flow\n\nlet tests = [\n  function(x: (a: string, b: string) => void) {\n    let y = x.bind(x, 'foo');\n    y('bar'); // ok\n    y(123); // error, number !~> string\n  },\n\n  // callable objects\n  function(x: { (a: string, b: string): void }) {\n    let y = x.bind(x, 'foo');\n    y('bar'); // ok\n    y(123); // error, number !~> string\n  },\n\n  // non-callable objects\n  function(x: { a: string }) {\n    x.bind(x, 'foo'); // error\n  },\n\n  // callable objects with overridden \\`bind\\` method\n  function(x: {(a: string, b: string): void, bind(a: string): void}) {\n    (x.bind('foo'): void); // ok\n    (x.bind(123): void); // error, number !~> string\n  },\n\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  function(x: (a: string, b: string) => void) {\n    let y = x.bind(x, \"foo\");\n    y(\"bar\"); // ok\n    y(123); // error, number !~> string\n  },\n\n  // callable objects\n  function(x: { (a: string, b: string): void }) {\n    let y = x.bind(x, \"foo\");\n    y(\"bar\"); // ok\n    y(123); // error, number !~> string\n  },\n\n  // non-callable objects\n  function(x: { a: string }) {\n    x.bind(x, \"foo\"); // error\n  },\n\n  // callable objects with overridden \\`bind\\` method\n  function(x: { (a: string, b: string): void, bind(a: string): void }) {\n    (x.bind(\"foo\"): void); // ok\n    (x.bind(123): void); // error, number !~> string\n  }\n];\n\n`;\n\nexports[`call.js 1`] = `\n// @flow\n\nfunction test(a: string, b: number): number {\n  return this.length; // expect []/\"\" this\n}\n\n// args flow correctly into params\ntest.call(\"\", \"\", 0);\n\n// wrong this is an error\ntest.call(0, \"\", 0); // error: lookup \\`length\\` on Number\n\n// not enough arguments is an error\ntest.call(\"\", \"\"); // error: void ~> number\n\n// mistyped arguments is an error\ntest.call(\"\", \"\", \"\"); // error: string ~> number (2nd arg)\ntest.call(\"\", 0, 0); // error: number ~> string (1st arg)\n\n// resolve args array from tvar\nfunction f(args) { test.call(\"\", args[0], args[1]) }\nf([\"\", 0]); // OK\nf([\"\", \"\"]); // error: string ~> number (2nd arg)\nf([0, 0]); // error: number ~> string (1st arg)\n\n// expect 3 errors:\n// - lookup length on Number (0 used as \\`this\\`)\n// - number !~> string (param a)\n// - string !~> number (param b)\n(test.apply.call(test, 0, [0, 'foo']): number);\n\n// args are optional\nfunction test2(): number { return 0; }\n(test2.call(): number);\n(test2.call(\"\"): number);\n\n// callable objects\nfunction test3(x: { (a: string, b: string): void }) {\n  x.call(x, 'foo', 'bar'); // ok\n  x.call(x, 'foo', 123); // error, number !~> string\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nfunction test(a: string, b: number): number {\n  return this.length; // expect []/\"\" this\n}\n\n// args flow correctly into params\ntest.call(\"\", \"\", 0);\n\n// wrong this is an error\ntest.call(0, \"\", 0); // error: lookup \\`length\\` on Number\n\n// not enough arguments is an error\ntest.call(\"\", \"\"); // error: void ~> number\n\n// mistyped arguments is an error\ntest.call(\"\", \"\", \"\"); // error: string ~> number (2nd arg)\ntest.call(\"\", 0, 0); // error: number ~> string (1st arg)\n\n// resolve args array from tvar\nfunction f(args) {\n  test.call(\"\", args[0], args[1]);\n}\nf([\"\", 0]); // OK\nf([\"\", \"\"]); // error: string ~> number (2nd arg)\nf([0, 0]); // error: number ~> string (1st arg)\n\n// expect 3 errors:\n// - lookup length on Number (0 used as \\`this\\`)\n// - number !~> string (param a)\n// - string !~> number (param b)\n(test.apply.call(test, 0, [0, \"foo\"]): number);\n\n// args are optional\nfunction test2(): number {\n  return 0;\n}\n(test2.call(): number);\n(test2.call(\"\"): number);\n\n// callable objects\nfunction test3(x: { (a: string, b: string): void }) {\n  x.call(x, \"foo\", \"bar\"); // ok\n  x.call(x, \"foo\", 123); // error, number !~> string\n}\n\n`;\n\nexports[`function.js 1`] = `\n/**\n * @flow\n */\n\n// Previously we represented Function as (...rest: any) => any\n// This means the following wouldn't pass, because that arrow function\n// can only be called with 3 arguments.\nvar a: Function = (a, b, c) => 123;\n\nvar b: Function = function(a: number, b: number): number { return a + b; };\n\nclass C {}\n\nvar c: Function = C;\n\nfunction good(x: Function, MyThing: Function): number {\n  var o: Object = x; // Function is an Object\n  x.foo = 123;\n  x['foo'] = 456;\n  x();\n  <MyThing />;\n  var {...something} = x;\n  Object.assign(x, {hi: 'there'});\n  Object.keys(x);\n  return x.bar + x['bar'] + x.lala();\n}\n\nfunction bad(x: Function, y: Object): void {\n  var a: number = x; // Error\n  var b: string = x; // Error\n  var c: Function = y; // Object is not a Function\n}\n\nlet tests = [\n  function(y: () => void, z: Function) {\n    function x() {}\n    (x.length: void); // error, it's a number\n    (y.length: void); // error, it's a number\n    (z.length: void); // error, it's a number\n\n    (x.name: void); // error, it's a string\n    (y.name: void); // error, it's a string\n    (z.name: void); // error, it's a string\n  },\n\n  function(y: () => void, z: Function) {\n    function x() {}\n    x.length = 'foo'; // error, it's a number\n    y.length = 'foo'; // error, it's a number\n    z.length = 'foo'; // error, it's a number\n\n    x.name = 123; // error, it's a string\n    y.name = 123; // error, it's a string\n    z.name = 123; // error, it's a string\n\n    // Non-(Function.prototype) properties on a \\`Function\\` type should be \\`any\\`\n    (z.foo: number);\n    (z.foo: string);\n  },\n];\n\n// \\`Function\\` types can be bound (resulting in a \\`Function\\` type)\nvar d: Function = () => 1;\nvar e = (d.bind(1): Function)();\n(e: number);\n(e: string);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\n// Previously we represented Function as (...rest: any) => any\n// This means the following wouldn't pass, because that arrow function\n// can only be called with 3 arguments.\nvar a: Function = (a, b, c) => 123;\n\nvar b: Function = function(a: number, b: number): number {\n  return a + b;\n};\n\nclass C {}\n\nvar c: Function = C;\n\nfunction good(x: Function, MyThing: Function): number {\n  var o: Object = x; // Function is an Object\n  x.foo = 123;\n  x[\"foo\"] = 456;\n  x();\n  <MyThing />;\n  var { ...something } = x;\n  Object.assign(x, { hi: \"there\" });\n  Object.keys(x);\n  return x.bar + x[\"bar\"] + x.lala();\n}\n\nfunction bad(x: Function, y: Object): void {\n  var a: number = x; // Error\n  var b: string = x; // Error\n  var c: Function = y; // Object is not a Function\n}\n\nlet tests = [\n  function(y: () => void, z: Function) {\n    function x() {}\n    (x.length: void); // error, it's a number\n    (y.length: void); // error, it's a number\n    (z.length: void); // error, it's a number\n\n    (x.name: void); // error, it's a string\n    (y.name: void); // error, it's a string\n    (z.name: void); // error, it's a string\n  },\n\n  function(y: () => void, z: Function) {\n    function x() {}\n    x.length = \"foo\"; // error, it's a number\n    y.length = \"foo\"; // error, it's a number\n    z.length = \"foo\"; // error, it's a number\n\n    x.name = 123; // error, it's a string\n    y.name = 123; // error, it's a string\n    z.name = 123; // error, it's a string\n\n    // Non-(Function.prototype) properties on a \\`Function\\` type should be \\`any\\`\n    (z.foo: number);\n    (z.foo: string);\n  }\n];\n\n// \\`Function\\` types can be bound (resulting in a \\`Function\\` type)\nvar d: Function = () => 1;\nvar e = (d.bind(1): Function)();\n(e: number);\n(e: string);\n\n`;\n\nexports[`rest.js 1`] = `\n/* regression tests */\n\nfunction rest_array<T>(...xs: Array<T>): T { // Ok, arrays can be rest params\n  return xs[0];\n}\n\nfunction rest_tuple<T>(...xs: [T]): T { // Ok, tuples can be rest params\n  return xs[0];\n}\n\nfunction rest_ro_array<T>(...xs: $ReadOnlyArray<T>): T { // Ok\n  return xs[0];\n}\n\nfunction rest_any(...xs: any): any { // Ok, any can be a rest param\n  return xs[0];\n}\n\nfunction rest_t<U, T: Array<U>>(...xs: T): U { // Ok, bounded targ can be rest\n  return xs[0];\n}\n\n// These are ok bounds for the rest param\nfunction unbound_rest_t<T>(...xs: T): void {}\nfunction mixed_rest_t<T: mixed>(...xs: T): void {}\nfunction array_rest_t<T: Array<mixed>>(...xs: T): void {}\nfunction roarray_rest_t<T: $ReadOnlyArray<mixed>>(...xs: T): void {}\nfunction iterable_rest_t<T: Iterable<mixed>>(...xs: T): void {}\nfunction empty_rest_t<T: empty>(...xs: T): void {}\nfunction bounds_on_bounds<T>() {\n  return function<U: T>(...xs: T): void {}\n}\n\n// These are bad bounds for the rest param\nfunction bad_unbound_rest_t<T>(...xs: T): T {\n  return xs.pop(); // Error - no bound on T\n}\nfunction string_rest_t<T: string>(...xs: T): void {} // Error - rest param can't be a string\nfunction empty_rest_t<T: empty>(...xs: T): void {} // Error - rest param can't be empty\n\ntype Rest = Array<string>;\nfunction rest_alias(...xs: Rest): void {} // Ok\n\nfunction rest_union(...xs: [1,2] | Array<number>): number { // OK\n  return xs[0];\n}\n\nfunction rest_intersection(...xs: { x: number } & [1,2]): number { // OK\n  return xs[0] + xs.x;\n}\n\nfunction empty_rest<T:Array<mixed>>(...xs: T): T { return xs; }\n(empty_rest(): empty); // Error Array ~> empty\n\nfunction return_rest_param<Args:Array<mixed>>(\n  f: (...args: Args) => void,\n): (...args: Args) => number {\n  return function(...args) {\n    return args; // Error: Array ~> number\n  }\n}\n\nfunction requires_first_param(x: number, ...rest: Array<number>): void {}\nrequires_first_param(); // Error: missing first arg\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* regression tests */\n\nfunction rest_array<T>(...xs: Array<T>): T {\n  // Ok, arrays can be rest params\n  return xs[0];\n}\n\nfunction rest_tuple<T>(...xs: [T]): T {\n  // Ok, tuples can be rest params\n  return xs[0];\n}\n\nfunction rest_ro_array<T>(...xs: $ReadOnlyArray<T>): T {\n  // Ok\n  return xs[0];\n}\n\nfunction rest_any(...xs: any): any {\n  // Ok, any can be a rest param\n  return xs[0];\n}\n\nfunction rest_t<U, T: Array<U>>(...xs: T): U {\n  // Ok, bounded targ can be rest\n  return xs[0];\n}\n\n// These are ok bounds for the rest param\nfunction unbound_rest_t<T>(...xs: T): void {}\nfunction mixed_rest_t<T: mixed>(...xs: T): void {}\nfunction array_rest_t<T: Array<mixed>>(...xs: T): void {}\nfunction roarray_rest_t<T: $ReadOnlyArray<mixed>>(...xs: T): void {}\nfunction iterable_rest_t<T: Iterable<mixed>>(...xs: T): void {}\nfunction empty_rest_t<T: empty>(...xs: T): void {}\nfunction bounds_on_bounds<T>() {\n  return function<U: T>(...xs: T): void {};\n}\n\n// These are bad bounds for the rest param\nfunction bad_unbound_rest_t<T>(...xs: T): T {\n  return xs.pop(); // Error - no bound on T\n}\nfunction string_rest_t<T: string>(...xs: T): void {} // Error - rest param can't be a string\nfunction empty_rest_t<T: empty>(...xs: T): void {} // Error - rest param can't be empty\n\ntype Rest = Array<string>;\nfunction rest_alias(...xs: Rest): void {} // Ok\n\nfunction rest_union(...xs: [1, 2] | Array<number>): number {\n  // OK\n  return xs[0];\n}\n\nfunction rest_intersection(...xs: { x: number } & [1, 2]): number {\n  // OK\n  return xs[0] + xs.x;\n}\n\nfunction empty_rest<T: Array<mixed>>(...xs: T): T {\n  return xs;\n}\n(empty_rest(): empty); // Error Array ~> empty\n\nfunction return_rest_param<Args: Array<mixed>>(\n  f: (...args: Args) => void\n): (...args: Args) => number {\n  return function(...args) {\n    return args; // Error: Array ~> number\n  };\n}\n\nfunction requires_first_param(x: number, ...rest: Array<number>): void {}\nrequires_first_param(); // Error: missing first arg\n\n`;\n\nexports[`rest_type.js 1`] = `\n/* regression tests */\n\ntype rest_array = <T>(...xs: Array<T>) => T; // Ok, arrays can be rest params\n\ntype rest_tuple = <T>(...xs: [T]) => T; // Ok, tuples can be rest params\n\ntype rest_ro_array = <T>(...xs: $ReadOnlyArray<T>) => T;  // Ok\n\ntype rest_any = (...xs: any) => any; // Ok, any can be a rest param\n\ntype rest_t = <U, T: Array<U>>(...xs: T) => U; // Ok, bounded targ can be rest\n\ntype unbound_rest_t = <T>(...xs: T) => void; // Should be error but no way to check yet :(\nfunction test_unbound_rest(f: <T>(x: T, ...xs: T) => void) {\n  f(123); // Error - number ~> array - luckily this errors\n}\n\ntype string_rest_t = (...xs: string) => void; // Should be error but no way to check yet :(\nfunction test_string_rest(f: string_rest_t) {\n  f('hello'); // Error - string ~> array - luckily this errors\n}\n\ntype Rest = Array<string>;\ntype rest_alias = (...xs: Rest) => void; // Ok\n\ntype rest_union = (...xs: [1,2] | Array<number>) => number; // OK\n\ntype rest_intersection = (...xs: { x: number } & [1,2]) => number; // OK\n\ntype empty_rest = <T:Array<mixed>>(...xs: T) => T; // OK\n((f: empty_rest) => (f(): empty)); // Error Array ~> empty\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* regression tests */\n\ntype rest_array = <T>(...xs: Array<T>) => T; // Ok, arrays can be rest params\n\ntype rest_tuple = <T>(...xs: [T]) => T; // Ok, tuples can be rest params\n\ntype rest_ro_array = <T>(...xs: $ReadOnlyArray<T>) => T; // Ok\n\ntype rest_any = (...xs: any) => any; // Ok, any can be a rest param\n\ntype rest_t = <U, T: Array<U>>(...xs: T) => U; // Ok, bounded targ can be rest\n\ntype unbound_rest_t = <T>(...xs: T) => void; // Should be error but no way to check yet :(\nfunction test_unbound_rest(f: <T>(x: T, ...xs: T) => void) {\n  f(123); // Error - number ~> array - luckily this errors\n}\n\ntype string_rest_t = (...xs: string) => void; // Should be error but no way to check yet :(\nfunction test_string_rest(f: string_rest_t) {\n  f(\"hello\"); // Error - string ~> array - luckily this errors\n}\n\ntype Rest = Array<string>;\ntype rest_alias = (...xs: Rest) => void; // Ok\n\ntype rest_union = (...xs: [1, 2] | Array<number>) => number; // OK\n\ntype rest_intersection = (...xs: { x: number } & [1, 2]) => number; // OK\n\ntype empty_rest = <T: Array<mixed>>(...xs: T) => T; // OK\n(f: empty_rest) => (f(): empty); // Error Array ~> empty\n\n`;\n"
  },
  {
    "path": "tests/flow/function/apply.js",
    "content": "function test(a: string, b: number): number {\n  return this.length; // expect []/\"\" this\n}\n\n// tuples flow correctly into params\ntest.apply(\"\", [\"\", 0]);\n\n// wrong this is an error\ntest.apply(0, [\"\", 0]); // error: lookup `length` on Number\n\n// not enough arguments is an error\ntest.apply(\"\", [\"\"]); // error: void ~> number\n\n// mistyped arguments is an error\ntest.apply(\"\", [\"\", \"\"]); // error: string ~> number (2nd arg)\ntest.apply(\"\", [0, 0]); // error: number ~> string (1st arg)\n\n// resolve args array from tvar\nfunction f(args) { test.apply(\"\", args) }\nf([\"\", 0]); // OK\nf([\"\", \"\"]); // error: string ~> number (2nd arg)\nf([0, 0]); // error: number ~> string (1st arg)\n\n// expect array\ntest.apply(\"\", \"not array\"); // error: expect array of args\n\n// expect 4 errors:\n// - lookup length on Number (because 0 is used as `this`)\n// - 123 is not a string\n// - 'foo' is not a number\n// - return type (number) is not void\n(test.call.apply(test, [0, 123, 'foo']): void);\n\n// expect 2 errors:\n// - lookup length on number (0 is used as `this`)\n// - 123 is not a string\n(test.bind.apply(test, [0, 123]): (b: number) => number);\n\n// args are optional\nfunction test2(): number { return 0; }\n(test2.apply(): number);\n(test2.apply(\"\"): number);\n\n// callable objects\nfunction test3(x: { (a: string, b: string): void }) {\n  x.apply(x, ['foo', 'bar']); // ok\n  x.apply(x, ['foo', 123]); // error, number !~> string\n}\n"
  },
  {
    "path": "tests/flow/function/bind.js",
    "content": "// @flow\n\nlet tests = [\n  function(x: (a: string, b: string) => void) {\n    let y = x.bind(x, 'foo');\n    y('bar'); // ok\n    y(123); // error, number !~> string\n  },\n\n  // callable objects\n  function(x: { (a: string, b: string): void }) {\n    let y = x.bind(x, 'foo');\n    y('bar'); // ok\n    y(123); // error, number !~> string\n  },\n\n  // non-callable objects\n  function(x: { a: string }) {\n    x.bind(x, 'foo'); // error\n  },\n\n  // callable objects with overridden `bind` method\n  function(x: {(a: string, b: string): void, bind(a: string): void}) {\n    (x.bind('foo'): void); // ok\n    (x.bind(123): void); // error, number !~> string\n  },\n\n];\n"
  },
  {
    "path": "tests/flow/function/call.js",
    "content": "// @flow\n\nfunction test(a: string, b: number): number {\n  return this.length; // expect []/\"\" this\n}\n\n// args flow correctly into params\ntest.call(\"\", \"\", 0);\n\n// wrong this is an error\ntest.call(0, \"\", 0); // error: lookup `length` on Number\n\n// not enough arguments is an error\ntest.call(\"\", \"\"); // error: void ~> number\n\n// mistyped arguments is an error\ntest.call(\"\", \"\", \"\"); // error: string ~> number (2nd arg)\ntest.call(\"\", 0, 0); // error: number ~> string (1st arg)\n\n// resolve args array from tvar\nfunction f(args) { test.call(\"\", args[0], args[1]) }\nf([\"\", 0]); // OK\nf([\"\", \"\"]); // error: string ~> number (2nd arg)\nf([0, 0]); // error: number ~> string (1st arg)\n\n// expect 3 errors:\n// - lookup length on Number (0 used as `this`)\n// - number !~> string (param a)\n// - string !~> number (param b)\n(test.apply.call(test, 0, [0, 'foo']): number);\n\n// args are optional\nfunction test2(): number { return 0; }\n(test2.call(): number);\n(test2.call(\"\"): number);\n\n// callable objects\nfunction test3(x: { (a: string, b: string): void }) {\n  x.call(x, 'foo', 'bar'); // ok\n  x.call(x, 'foo', 123); // error, number !~> string\n}\n"
  },
  {
    "path": "tests/flow/function/function.js",
    "content": "/**\n * @flow\n */\n\n// Previously we represented Function as (...rest: any) => any\n// This means the following wouldn't pass, because that arrow function\n// can only be called with 3 arguments.\nvar a: Function = (a, b, c) => 123;\n\nvar b: Function = function(a: number, b: number): number { return a + b; };\n\nclass C {}\n\nvar c: Function = C;\n\nfunction good(x: Function, MyThing: Function): number {\n  var o: Object = x; // Function is an Object\n  x.foo = 123;\n  x['foo'] = 456;\n  x();\n  <MyThing />;\n  var {...something} = x;\n  Object.assign(x, {hi: 'there'});\n  Object.keys(x);\n  return x.bar + x['bar'] + x.lala();\n}\n\nfunction bad(x: Function, y: Object): void {\n  var a: number = x; // Error\n  var b: string = x; // Error\n  var c: Function = y; // Object is not a Function\n}\n\nlet tests = [\n  function(y: () => void, z: Function) {\n    function x() {}\n    (x.length: void); // error, it's a number\n    (y.length: void); // error, it's a number\n    (z.length: void); // error, it's a number\n\n    (x.name: void); // error, it's a string\n    (y.name: void); // error, it's a string\n    (z.name: void); // error, it's a string\n  },\n\n  function(y: () => void, z: Function) {\n    function x() {}\n    x.length = 'foo'; // error, it's a number\n    y.length = 'foo'; // error, it's a number\n    z.length = 'foo'; // error, it's a number\n\n    x.name = 123; // error, it's a string\n    y.name = 123; // error, it's a string\n    z.name = 123; // error, it's a string\n\n    // Non-(Function.prototype) properties on a `Function` type should be `any`\n    (z.foo: number);\n    (z.foo: string);\n  },\n];\n\n// `Function` types can be bound (resulting in a `Function` type)\nvar d: Function = () => 1;\nvar e = (d.bind(1): Function)();\n(e: number);\n(e: string);\n"
  },
  {
    "path": "tests/flow/function/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/function/rest.js",
    "content": "/* regression tests */\n\nfunction rest_array<T>(...xs: Array<T>): T { // Ok, arrays can be rest params\n  return xs[0];\n}\n\nfunction rest_tuple<T>(...xs: [T]): T { // Ok, tuples can be rest params\n  return xs[0];\n}\n\nfunction rest_ro_array<T>(...xs: $ReadOnlyArray<T>): T { // Ok\n  return xs[0];\n}\n\nfunction rest_any(...xs: any): any { // Ok, any can be a rest param\n  return xs[0];\n}\n\nfunction rest_t<U, T: Array<U>>(...xs: T): U { // Ok, bounded targ can be rest\n  return xs[0];\n}\n\n// These are ok bounds for the rest param\nfunction unbound_rest_t<T>(...xs: T): void {}\nfunction mixed_rest_t<T: mixed>(...xs: T): void {}\nfunction array_rest_t<T: Array<mixed>>(...xs: T): void {}\nfunction roarray_rest_t<T: $ReadOnlyArray<mixed>>(...xs: T): void {}\nfunction iterable_rest_t<T: Iterable<mixed>>(...xs: T): void {}\nfunction empty_rest_t<T: empty>(...xs: T): void {}\nfunction bounds_on_bounds<T>() {\n  return function<U: T>(...xs: T): void {}\n}\n\n// These are bad bounds for the rest param\nfunction bad_unbound_rest_t<T>(...xs: T): T {\n  return xs.pop(); // Error - no bound on T\n}\nfunction string_rest_t<T: string>(...xs: T): void {} // Error - rest param can't be a string\nfunction empty_rest_t<T: empty>(...xs: T): void {} // Error - rest param can't be empty\n\ntype Rest = Array<string>;\nfunction rest_alias(...xs: Rest): void {} // Ok\n\nfunction rest_union(...xs: [1,2] | Array<number>): number { // OK\n  return xs[0];\n}\n\nfunction rest_intersection(...xs: { x: number } & [1,2]): number { // OK\n  return xs[0] + xs.x;\n}\n\nfunction empty_rest<T:Array<mixed>>(...xs: T): T { return xs; }\n(empty_rest(): empty); // Error Array ~> empty\n\nfunction return_rest_param<Args:Array<mixed>>(\n  f: (...args: Args) => void,\n): (...args: Args) => number {\n  return function(...args) {\n    return args; // Error: Array ~> number\n  }\n}\n\nfunction requires_first_param(x: number, ...rest: Array<number>): void {}\nrequires_first_param(); // Error: missing first arg\n"
  },
  {
    "path": "tests/flow/function/rest_type.js",
    "content": "/* regression tests */\n\ntype rest_array = <T>(...xs: Array<T>) => T; // Ok, arrays can be rest params\n\ntype rest_tuple = <T>(...xs: [T]) => T; // Ok, tuples can be rest params\n\ntype rest_ro_array = <T>(...xs: $ReadOnlyArray<T>) => T;  // Ok\n\ntype rest_any = (...xs: any) => any; // Ok, any can be a rest param\n\ntype rest_t = <U, T: Array<U>>(...xs: T) => U; // Ok, bounded targ can be rest\n\ntype unbound_rest_t = <T>(...xs: T) => void; // Should be error but no way to check yet :(\nfunction test_unbound_rest(f: <T>(x: T, ...xs: T) => void) {\n  f(123); // Error - number ~> array - luckily this errors\n}\n\ntype string_rest_t = (...xs: string) => void; // Should be error but no way to check yet :(\nfunction test_string_rest(f: string_rest_t) {\n  f('hello'); // Error - string ~> array - luckily this errors\n}\n\ntype Rest = Array<string>;\ntype rest_alias = (...xs: Rest) => void; // Ok\n\ntype rest_union = (...xs: [1,2] | Array<number>) => number; // OK\n\ntype rest_intersection = (...xs: { x: number } & [1,2]) => number; // OK\n\ntype empty_rest = <T:Array<mixed>>(...xs: T) => T; // OK\n((f: empty_rest) => (f(): empty)); // Error Array ~> empty\n"
  },
  {
    "path": "tests/flow/funrec/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`funrec.js 1`] = `\nfunction bar(x) { return x; }\nfunction foo() {\n    return function bound() {\n        return bar(bound);\n    };\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction bar(x) {\n  return x;\n}\nfunction foo() {\n  return function bound() {\n    return bar(bound);\n  };\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/funrec/funrec.js",
    "content": "function bar(x) { return x; }\nfunction foo() {\n    return function bound() {\n        return bar(bound);\n    };\n}\n"
  },
  {
    "path": "tests/flow/funrec/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/generators/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`class.js 1`] = `\nclass GeneratorExamples {\n  *stmt_yield(): Generator<number, void, void> {\n    yield 0; // ok\n    yield \"\"; // error: string ~> number\n  }\n\n  *stmt_next(): Generator<void, void, number> {\n    var a = yield;\n    if (a) {\n      (a : number); // ok\n    }\n\n    var b = yield;\n    if (b) {\n      (b : string); // error: number ~> string\n    }\n  }\n\n  *stmt_return_ok(): Generator<void, number, void> {\n    return 0; // ok\n  }\n\n  *stmt_return_err(): Generator<void, number, void> {\n    return \"\"; // error: string ~> number\n  }\n\n  *infer_stmt() {\n    var x: boolean = yield 0; // error: number ~> boolean\n    return \"\";\n  }\n\n  *widen_next() {\n    var x = yield 0;\n    if (typeof x === \"number\") {\n    } else if (typeof x === \"boolean\") {\n    } else {\n      (x : string) // ok, sherlock\n    }\n  }\n\n  *widen_yield() {\n    yield 0;\n    yield \"\";\n    yield true;\n  }\n\n  *delegate_next_generator() {\n    function *inner() {\n      var x: number = yield; // error: string ~> number\n    }\n    yield *inner();\n  }\n\n  *delegate_yield_generator() {\n    function *inner() {\n      yield \"\";\n    }\n\n    yield *inner();\n  }\n\n  *delegate_return_generator() {\n    function *inner() {\n      return \"\";\n    }\n\n    var x: number = yield *inner(); // error: string ~> number\n  }\n\n  // only generators can make use of a value passed to next\n  *delegate_next_iterable(xs: Array<number>) {\n    yield *xs;\n  }\n\n  *delegate_yield_iterable(xs: Array<number>) {\n    yield *xs;\n  }\n\n  *delegate_return_iterable(xs: Array<number>) {\n    var x: void = yield *xs // ok: Iterator has no yield value\n  }\n\n  *generic_yield<Y>(y: Y): Generator<Y,void,void> {\n    yield y;\n  }\n\n  *generic_return<R>(r: R): Generator<void,R,void> {\n    return r;\n  }\n\n  *generic_next<N>(): Generator<void,N,N> {\n    return yield undefined;\n  }\n}\n\nvar examples = new GeneratorExamples();\n\nfor (var x of examples.infer_stmt()) { (x : string) } // error: number ~> string\n\nvar infer_stmt_next = examples.infer_stmt().next(0).value; // error: number ~> boolean\nif (typeof infer_stmt_next === \"undefined\") {\n} else if (typeof infer_stmt_next === \"number\") {\n} else {\n  (infer_stmt_next : boolean) // error: string ~> boolean\n}\n\nexamples.widen_next().next(0)\nexamples.widen_next().next(\"\")\nexamples.widen_next().next(true)\n\nfor (var x of examples.widen_yield()) {\n  if (typeof x === \"number\") {\n  } else if (typeof x === \"boolean\") {\n  } else {\n    (x : string) // ok, sherlock\n  }\n}\n\nexamples.delegate_next_generator().next(\"\");\n\nfor (var x of examples.delegate_yield_generator()) {\n  (x : number) // error: string ~> number\n}\n\nexamples.delegate_next_iterable([]).next(\"\"); // error: Iterator has no next value\n\nfor (var x of examples.delegate_yield_iterable([])) {\n  (x : string) // error: number ~> string\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass GeneratorExamples {\n  *stmt_yield(): Generator<number, void, void> {\n    yield 0; // ok\n    yield \"\"; // error: string ~> number\n  }\n\n  *stmt_next(): Generator<void, void, number> {\n    var a = yield;\n    if (a) {\n      (a: number); // ok\n    }\n\n    var b = yield;\n    if (b) {\n      (b: string); // error: number ~> string\n    }\n  }\n\n  *stmt_return_ok(): Generator<void, number, void> {\n    return 0; // ok\n  }\n\n  *stmt_return_err(): Generator<void, number, void> {\n    return \"\"; // error: string ~> number\n  }\n\n  *infer_stmt() {\n    var x: boolean = yield 0; // error: number ~> boolean\n    return \"\";\n  }\n\n  *widen_next() {\n    var x = yield 0;\n    if (typeof x === \"number\") {\n    } else if (typeof x === \"boolean\") {\n    } else {\n      (x: string); // ok, sherlock\n    }\n  }\n\n  *widen_yield() {\n    yield 0;\n    yield \"\";\n    yield true;\n  }\n\n  *delegate_next_generator() {\n    function* inner() {\n      var x: number = yield; // error: string ~> number\n    }\n    yield* inner();\n  }\n\n  *delegate_yield_generator() {\n    function* inner() {\n      yield \"\";\n    }\n\n    yield* inner();\n  }\n\n  *delegate_return_generator() {\n    function* inner() {\n      return \"\";\n    }\n\n    var x: number = yield* inner(); // error: string ~> number\n  }\n\n  // only generators can make use of a value passed to next\n  *delegate_next_iterable(xs: Array<number>) {\n    yield* xs;\n  }\n\n  *delegate_yield_iterable(xs: Array<number>) {\n    yield* xs;\n  }\n\n  *delegate_return_iterable(xs: Array<number>) {\n    var x: void = yield* xs; // ok: Iterator has no yield value\n  }\n\n  *generic_yield<Y>(y: Y): Generator<Y, void, void> {\n    yield y;\n  }\n\n  *generic_return<R>(r: R): Generator<void, R, void> {\n    return r;\n  }\n\n  *generic_next<N>(): Generator<void, N, N> {\n    return yield undefined;\n  }\n}\n\nvar examples = new GeneratorExamples();\n\nfor (var x of examples.infer_stmt()) {\n  (x: string);\n} // error: number ~> string\n\nvar infer_stmt_next = examples.infer_stmt().next(0).value; // error: number ~> boolean\nif (typeof infer_stmt_next === \"undefined\") {\n} else if (typeof infer_stmt_next === \"number\") {\n} else {\n  (infer_stmt_next: boolean); // error: string ~> boolean\n}\n\nexamples.widen_next().next(0);\nexamples.widen_next().next(\"\");\nexamples.widen_next().next(true);\n\nfor (var x of examples.widen_yield()) {\n  if (typeof x === \"number\") {\n  } else if (typeof x === \"boolean\") {\n  } else {\n    (x: string); // ok, sherlock\n  }\n}\n\nexamples.delegate_next_generator().next(\"\");\n\nfor (var x of examples.delegate_yield_generator()) {\n  (x: number); // error: string ~> number\n}\n\nexamples.delegate_next_iterable([]).next(\"\"); // error: Iterator has no next value\n\nfor (var x of examples.delegate_yield_iterable([])) {\n  (x: string); // error: number ~> string\n}\n\n`;\n\nexports[`class_failure.js 1`] = `\n// generalization of failure in class.js\n\nclass GeneratorExamples<X> {\n  *infer_stmt() {\n    var x: boolean = yield 0; // error: number ~> boolean\n    return \"\";\n  }\n}\n\nvar examples = new GeneratorExamples();\n\nfor (var x of examples.infer_stmt()) { (x : string) } // error: number ~> string\n\nvar infer_stmt_next = examples.infer_stmt().next(0).value; // error: number ~> boolean\n\nif (typeof infer_stmt_next === \"undefined\") {\n} else if (typeof infer_stmt_next === \"number\") {\n} else {\n  (infer_stmt_next : boolean) // error: string ~> boolean\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// generalization of failure in class.js\n\nclass GeneratorExamples<X> {\n  *infer_stmt() {\n    var x: boolean = yield 0; // error: number ~> boolean\n    return \"\";\n  }\n}\n\nvar examples = new GeneratorExamples();\n\nfor (var x of examples.infer_stmt()) {\n  (x: string);\n} // error: number ~> string\n\nvar infer_stmt_next = examples.infer_stmt().next(0).value; // error: number ~> boolean\n\nif (typeof infer_stmt_next === \"undefined\") {\n} else if (typeof infer_stmt_next === \"number\") {\n} else {\n  (infer_stmt_next: boolean); // error: string ~> boolean\n}\n\n`;\n\nexports[`generators.js 1`] = `\nfunction *stmt_yield(): Generator<number, void, void> {\n  yield 0; // ok\n  yield \"\"; // error: string ~> number\n}\n\nfunction *stmt_next(): Generator<void, void, number> {\n  var a = yield;\n  if (a) {\n    (a : number); // ok\n  }\n\n  var b = yield;\n  if (b) {\n    (b : string); // error: number ~> string\n  }\n}\n\nfunction *stmt_return_ok(): Generator<void, number, void> {\n  return 0; // ok\n}\n\nfunction *stmt_return_err(): Generator<void, number, void> {\n  return \"\"; // error: string ~> number\n}\n\nfunction *infer_stmt() {\n  var x: boolean = yield 0;\n  return \"\";\n}\nfor (var x of infer_stmt()) { (x : string) } // error: number ~> string\nvar infer_stmt_next = infer_stmt().next(0).value; // error: number ~> boolean\nif (typeof infer_stmt_next === \"undefined\") {\n} else if (typeof infer_stmt_next === \"number\") {\n} else {\n  (infer_stmt_next : boolean) // error: string ~> boolean\n}\n\nfunction *widen_next() {\n  var x = yield 0;\n  if (typeof x === \"number\") {\n  } else if (typeof x === \"boolean\") {\n  } else {\n    (x : string) // ok, sherlock\n  }\n}\nwiden_next().next(0)\nwiden_next().next(\"\")\nwiden_next().next(true)\n\nfunction *widen_yield() {\n  yield 0;\n  yield \"\";\n  yield true;\n}\nfor (var x of widen_yield()) {\n  if (typeof x === \"number\") {\n  } else if (typeof x === \"boolean\") {\n  } else {\n    (x : string) // ok, sherlock\n  }\n}\n\nfunction *delegate_next_generator() {\n  function *inner() {\n    var x: number = yield; // error: string ~> number\n  }\n  yield *inner();\n}\ndelegate_next_generator().next(\"\");\n\nfunction *delegate_yield_generator() {\n  function *inner() {\n    yield \"\";\n  }\n\n  yield *inner();\n}\nfor (var x of delegate_yield_generator()) {\n  (x : number) // error: string ~> number\n}\n\nfunction *delegate_return_generator() {\n  function *inner() {\n    return \"\";\n  }\n\n  var x: number = yield *inner(); // error: string ~> number\n}\n\n// only generators can make use of a value passed to next\nfunction *delegate_next_iterable(xs: Array<number>) {\n  yield *xs;\n}\ndelegate_next_iterable([]).next(\"\"); // error: Iterator has no next value\n\nfunction *delegate_yield_iterable(xs: Array<number>) {\n  yield *xs;\n}\nfor (var x of delegate_yield_iterable([])) {\n  (x : string) // error: number ~> string\n}\n\nfunction *delegate_return_iterable(xs: Array<number>) {\n  var x: void = yield *xs // ok: Iterator has no yield value\n}\n\nfunction *generic_yield<Y>(y: Y): Generator<Y,void,void> {\n  yield y;\n}\n\nfunction *generic_return<R>(r: R): Generator<void,R,void> {\n  return r;\n}\n\nfunction *generic_next<N>(): Generator<void,N,N> {\n  return yield undefined;\n}\n\nfunction *multiple_return(b) {\n  if (b) {\n    return 0;\n  } else {\n    return \"foo\";\n  }\n}\nlet multiple_return_result = multiple_return().next();\nif (multiple_return_result.done) {\n  (multiple_return_result.value: void); // error: number|string ~> void\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction* stmt_yield(): Generator<number, void, void> {\n  yield 0; // ok\n  yield \"\"; // error: string ~> number\n}\n\nfunction* stmt_next(): Generator<void, void, number> {\n  var a = yield;\n  if (a) {\n    (a: number); // ok\n  }\n\n  var b = yield;\n  if (b) {\n    (b: string); // error: number ~> string\n  }\n}\n\nfunction* stmt_return_ok(): Generator<void, number, void> {\n  return 0; // ok\n}\n\nfunction* stmt_return_err(): Generator<void, number, void> {\n  return \"\"; // error: string ~> number\n}\n\nfunction* infer_stmt() {\n  var x: boolean = yield 0;\n  return \"\";\n}\nfor (var x of infer_stmt()) {\n  (x: string);\n} // error: number ~> string\nvar infer_stmt_next = infer_stmt().next(0).value; // error: number ~> boolean\nif (typeof infer_stmt_next === \"undefined\") {\n} else if (typeof infer_stmt_next === \"number\") {\n} else {\n  (infer_stmt_next: boolean); // error: string ~> boolean\n}\n\nfunction* widen_next() {\n  var x = yield 0;\n  if (typeof x === \"number\") {\n  } else if (typeof x === \"boolean\") {\n  } else {\n    (x: string); // ok, sherlock\n  }\n}\nwiden_next().next(0);\nwiden_next().next(\"\");\nwiden_next().next(true);\n\nfunction* widen_yield() {\n  yield 0;\n  yield \"\";\n  yield true;\n}\nfor (var x of widen_yield()) {\n  if (typeof x === \"number\") {\n  } else if (typeof x === \"boolean\") {\n  } else {\n    (x: string); // ok, sherlock\n  }\n}\n\nfunction* delegate_next_generator() {\n  function* inner() {\n    var x: number = yield; // error: string ~> number\n  }\n  yield* inner();\n}\ndelegate_next_generator().next(\"\");\n\nfunction* delegate_yield_generator() {\n  function* inner() {\n    yield \"\";\n  }\n\n  yield* inner();\n}\nfor (var x of delegate_yield_generator()) {\n  (x: number); // error: string ~> number\n}\n\nfunction* delegate_return_generator() {\n  function* inner() {\n    return \"\";\n  }\n\n  var x: number = yield* inner(); // error: string ~> number\n}\n\n// only generators can make use of a value passed to next\nfunction* delegate_next_iterable(xs: Array<number>) {\n  yield* xs;\n}\ndelegate_next_iterable([]).next(\"\"); // error: Iterator has no next value\n\nfunction* delegate_yield_iterable(xs: Array<number>) {\n  yield* xs;\n}\nfor (var x of delegate_yield_iterable([])) {\n  (x: string); // error: number ~> string\n}\n\nfunction* delegate_return_iterable(xs: Array<number>) {\n  var x: void = yield* xs; // ok: Iterator has no yield value\n}\n\nfunction* generic_yield<Y>(y: Y): Generator<Y, void, void> {\n  yield y;\n}\n\nfunction* generic_return<R>(r: R): Generator<void, R, void> {\n  return r;\n}\n\nfunction* generic_next<N>(): Generator<void, N, N> {\n  return yield undefined;\n}\n\nfunction* multiple_return(b) {\n  if (b) {\n    return 0;\n  } else {\n    return \"foo\";\n  }\n}\nlet multiple_return_result = multiple_return().next();\nif (multiple_return_result.done) {\n  (multiple_return_result.value: void); // error: number|string ~> void\n}\n\n`;\n\nexports[`refi.js 1`] = `\nfunction *a(x: {a: void | string}): Generator<void, void, void> {\n  if (!x.a) return;\n  (x.a: string); // ok\n  yield;\n  (x.a: string); // error\n}\n\nfunction *b(x: void | string): Generator<void, void, void> {\n  if (!x) return;\n  (x: string); // ok\n  yield;\n  (x: string); // ok\n}\n\ndeclare function fn(): Generator<void, void, void>;\n\nfunction *c(x: {a: void | string}): Generator<void, void, void> {\n  const gen = fn();\n  if (!x.a) return;\n  (x.a: string); // ok\n  yield * gen;\n  (x.a: string); // error\n}\n\nfunction *d(x: void | string): Generator<void, void, void> {\n  const gen = fn();\n  if (!x) return;\n  (x: string); // ok\n  yield * gen;\n  (x: string); // ok\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction* a(x: { a: void | string }): Generator<void, void, void> {\n  if (!x.a) return;\n  (x.a: string); // ok\n  yield;\n  (x.a: string); // error\n}\n\nfunction* b(x: void | string): Generator<void, void, void> {\n  if (!x) return;\n  (x: string); // ok\n  yield;\n  (x: string); // ok\n}\n\ndeclare function fn(): Generator<void, void, void>;\n\nfunction* c(x: { a: void | string }): Generator<void, void, void> {\n  const gen = fn();\n  if (!x.a) return;\n  (x.a: string); // ok\n  yield* gen;\n  (x.a: string); // error\n}\n\nfunction* d(x: void | string): Generator<void, void, void> {\n  const gen = fn();\n  if (!x) return;\n  (x: string); // ok\n  yield* gen;\n  (x: string); // ok\n}\n\n`;\n\nexports[`return.js 1`] = `\nfunction test1(gen: Generator<void, string, void>) {\n  // You can pass whatever you like to return, it doesn't need to be related to\n  // the Generator's return type\n  var ret = gen.return(0);\n  (ret.value: void); // error: string | number ~> void\n}\n\n// However, a generator can \"refuse\" the return by catching an exception and\n// yielding or returning internally.\nfunction *refuse_return() {\n  try {\n    yield 1;\n  } finally {\n    return 0;\n  }\n}\nvar refuse_return_gen = refuse_return();\nvar refuse_return_result = refuse_return_gen.return(\"string\");\nif (refuse_return_result.done) {\n  (refuse_return_result.value: string); // error: number | void ~> string\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction test1(gen: Generator<void, string, void>) {\n  // You can pass whatever you like to return, it doesn't need to be related to\n  // the Generator's return type\n  var ret = gen.return(0);\n  (ret.value: void); // error: string | number ~> void\n}\n\n// However, a generator can \"refuse\" the return by catching an exception and\n// yielding or returning internally.\nfunction* refuse_return() {\n  try {\n    yield 1;\n  } finally {\n    return 0;\n  }\n}\nvar refuse_return_gen = refuse_return();\nvar refuse_return_result = refuse_return_gen.return(\"string\");\nif (refuse_return_result.done) {\n  (refuse_return_result.value: string); // error: number | void ~> string\n}\n\n`;\n\nexports[`throw.js 1`] = `\nfunction *catch_return() {\n  try {\n    yield 0;\n  } catch (e) {\n    return e;\n  }\n}\n\nvar catch_return_value = catch_return().throw(\"\").value;\nif (catch_return_value !== undefined) {\n  (catch_return_value : string); // error: number ~> string\n}\n\nfunction *yield_return() {\n  try {\n    yield 0;\n    return;\n  } catch (e) {\n    yield e;\n  }\n}\nvar yield_return_value = yield_return().throw(\"\").value;\nif (yield_return_value !== undefined) {\n  (yield_return_value: string); // error: number ~> string\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction* catch_return() {\n  try {\n    yield 0;\n  } catch (e) {\n    return e;\n  }\n}\n\nvar catch_return_value = catch_return().throw(\"\").value;\nif (catch_return_value !== undefined) {\n  (catch_return_value: string); // error: number ~> string\n}\n\nfunction* yield_return() {\n  try {\n    yield 0;\n    return;\n  } catch (e) {\n    yield e;\n  }\n}\nvar yield_return_value = yield_return().throw(\"\").value;\nif (yield_return_value !== undefined) {\n  (yield_return_value: string); // error: number ~> string\n}\n\n`;\n\nexports[`variance.js 1`] = `\ndeclare var g1: Generator<string, string, ?string>;\nvar g2: Generator<?string, ?string, string> = g1;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare var g1: Generator<string, string, ?string>;\nvar g2: Generator<?string, ?string, string> = g1;\n\n`;\n"
  },
  {
    "path": "tests/flow/generators/class.js",
    "content": "class GeneratorExamples {\n  *stmt_yield(): Generator<number, void, void> {\n    yield 0; // ok\n    yield \"\"; // error: string ~> number\n  }\n\n  *stmt_next(): Generator<void, void, number> {\n    var a = yield;\n    if (a) {\n      (a : number); // ok\n    }\n\n    var b = yield;\n    if (b) {\n      (b : string); // error: number ~> string\n    }\n  }\n\n  *stmt_return_ok(): Generator<void, number, void> {\n    return 0; // ok\n  }\n\n  *stmt_return_err(): Generator<void, number, void> {\n    return \"\"; // error: string ~> number\n  }\n\n  *infer_stmt() {\n    var x: boolean = yield 0; // error: number ~> boolean\n    return \"\";\n  }\n\n  *widen_next() {\n    var x = yield 0;\n    if (typeof x === \"number\") {\n    } else if (typeof x === \"boolean\") {\n    } else {\n      (x : string) // ok, sherlock\n    }\n  }\n\n  *widen_yield() {\n    yield 0;\n    yield \"\";\n    yield true;\n  }\n\n  *delegate_next_generator() {\n    function *inner() {\n      var x: number = yield; // error: string ~> number\n    }\n    yield *inner();\n  }\n\n  *delegate_yield_generator() {\n    function *inner() {\n      yield \"\";\n    }\n\n    yield *inner();\n  }\n\n  *delegate_return_generator() {\n    function *inner() {\n      return \"\";\n    }\n\n    var x: number = yield *inner(); // error: string ~> number\n  }\n\n  // only generators can make use of a value passed to next\n  *delegate_next_iterable(xs: Array<number>) {\n    yield *xs;\n  }\n\n  *delegate_yield_iterable(xs: Array<number>) {\n    yield *xs;\n  }\n\n  *delegate_return_iterable(xs: Array<number>) {\n    var x: void = yield *xs // ok: Iterator has no yield value\n  }\n\n  *generic_yield<Y>(y: Y): Generator<Y,void,void> {\n    yield y;\n  }\n\n  *generic_return<R>(r: R): Generator<void,R,void> {\n    return r;\n  }\n\n  *generic_next<N>(): Generator<void,N,N> {\n    return yield undefined;\n  }\n}\n\nvar examples = new GeneratorExamples();\n\nfor (var x of examples.infer_stmt()) { (x : string) } // error: number ~> string\n\nvar infer_stmt_next = examples.infer_stmt().next(0).value; // error: number ~> boolean\nif (typeof infer_stmt_next === \"undefined\") {\n} else if (typeof infer_stmt_next === \"number\") {\n} else {\n  (infer_stmt_next : boolean) // error: string ~> boolean\n}\n\nexamples.widen_next().next(0)\nexamples.widen_next().next(\"\")\nexamples.widen_next().next(true)\n\nfor (var x of examples.widen_yield()) {\n  if (typeof x === \"number\") {\n  } else if (typeof x === \"boolean\") {\n  } else {\n    (x : string) // ok, sherlock\n  }\n}\n\nexamples.delegate_next_generator().next(\"\");\n\nfor (var x of examples.delegate_yield_generator()) {\n  (x : number) // error: string ~> number\n}\n\nexamples.delegate_next_iterable([]).next(\"\"); // error: Iterator has no next value\n\nfor (var x of examples.delegate_yield_iterable([])) {\n  (x : string) // error: number ~> string\n}\n"
  },
  {
    "path": "tests/flow/generators/class_failure.js",
    "content": "// generalization of failure in class.js\n\nclass GeneratorExamples<X> {\n  *infer_stmt() {\n    var x: boolean = yield 0; // error: number ~> boolean\n    return \"\";\n  }\n}\n\nvar examples = new GeneratorExamples();\n\nfor (var x of examples.infer_stmt()) { (x : string) } // error: number ~> string\n\nvar infer_stmt_next = examples.infer_stmt().next(0).value; // error: number ~> boolean\n\nif (typeof infer_stmt_next === \"undefined\") {\n} else if (typeof infer_stmt_next === \"number\") {\n} else {\n  (infer_stmt_next : boolean) // error: string ~> boolean\n}\n"
  },
  {
    "path": "tests/flow/generators/generators.js",
    "content": "function *stmt_yield(): Generator<number, void, void> {\n  yield 0; // ok\n  yield \"\"; // error: string ~> number\n}\n\nfunction *stmt_next(): Generator<void, void, number> {\n  var a = yield;\n  if (a) {\n    (a : number); // ok\n  }\n\n  var b = yield;\n  if (b) {\n    (b : string); // error: number ~> string\n  }\n}\n\nfunction *stmt_return_ok(): Generator<void, number, void> {\n  return 0; // ok\n}\n\nfunction *stmt_return_err(): Generator<void, number, void> {\n  return \"\"; // error: string ~> number\n}\n\nfunction *infer_stmt() {\n  var x: boolean = yield 0;\n  return \"\";\n}\nfor (var x of infer_stmt()) { (x : string) } // error: number ~> string\nvar infer_stmt_next = infer_stmt().next(0).value; // error: number ~> boolean\nif (typeof infer_stmt_next === \"undefined\") {\n} else if (typeof infer_stmt_next === \"number\") {\n} else {\n  (infer_stmt_next : boolean) // error: string ~> boolean\n}\n\nfunction *widen_next() {\n  var x = yield 0;\n  if (typeof x === \"number\") {\n  } else if (typeof x === \"boolean\") {\n  } else {\n    (x : string) // ok, sherlock\n  }\n}\nwiden_next().next(0)\nwiden_next().next(\"\")\nwiden_next().next(true)\n\nfunction *widen_yield() {\n  yield 0;\n  yield \"\";\n  yield true;\n}\nfor (var x of widen_yield()) {\n  if (typeof x === \"number\") {\n  } else if (typeof x === \"boolean\") {\n  } else {\n    (x : string) // ok, sherlock\n  }\n}\n\nfunction *delegate_next_generator() {\n  function *inner() {\n    var x: number = yield; // error: string ~> number\n  }\n  yield *inner();\n}\ndelegate_next_generator().next(\"\");\n\nfunction *delegate_yield_generator() {\n  function *inner() {\n    yield \"\";\n  }\n\n  yield *inner();\n}\nfor (var x of delegate_yield_generator()) {\n  (x : number) // error: string ~> number\n}\n\nfunction *delegate_return_generator() {\n  function *inner() {\n    return \"\";\n  }\n\n  var x: number = yield *inner(); // error: string ~> number\n}\n\n// only generators can make use of a value passed to next\nfunction *delegate_next_iterable(xs: Array<number>) {\n  yield *xs;\n}\ndelegate_next_iterable([]).next(\"\"); // error: Iterator has no next value\n\nfunction *delegate_yield_iterable(xs: Array<number>) {\n  yield *xs;\n}\nfor (var x of delegate_yield_iterable([])) {\n  (x : string) // error: number ~> string\n}\n\nfunction *delegate_return_iterable(xs: Array<number>) {\n  var x: void = yield *xs // ok: Iterator has no yield value\n}\n\nfunction *generic_yield<Y>(y: Y): Generator<Y,void,void> {\n  yield y;\n}\n\nfunction *generic_return<R>(r: R): Generator<void,R,void> {\n  return r;\n}\n\nfunction *generic_next<N>(): Generator<void,N,N> {\n  return yield undefined;\n}\n\nfunction *multiple_return(b) {\n  if (b) {\n    return 0;\n  } else {\n    return \"foo\";\n  }\n}\nlet multiple_return_result = multiple_return().next();\nif (multiple_return_result.done) {\n  (multiple_return_result.value: void); // error: number|string ~> void\n}\n"
  },
  {
    "path": "tests/flow/generators/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/generators/refi.js",
    "content": "function *a(x: {a: void | string}): Generator<void, void, void> {\n  if (!x.a) return;\n  (x.a: string); // ok\n  yield;\n  (x.a: string); // error\n}\n\nfunction *b(x: void | string): Generator<void, void, void> {\n  if (!x) return;\n  (x: string); // ok\n  yield;\n  (x: string); // ok\n}\n\ndeclare function fn(): Generator<void, void, void>;\n\nfunction *c(x: {a: void | string}): Generator<void, void, void> {\n  const gen = fn();\n  if (!x.a) return;\n  (x.a: string); // ok\n  yield * gen;\n  (x.a: string); // error\n}\n\nfunction *d(x: void | string): Generator<void, void, void> {\n  const gen = fn();\n  if (!x) return;\n  (x: string); // ok\n  yield * gen;\n  (x: string); // ok\n}\n"
  },
  {
    "path": "tests/flow/generators/return.js",
    "content": "function test1(gen: Generator<void, string, void>) {\n  // You can pass whatever you like to return, it doesn't need to be related to\n  // the Generator's return type\n  var ret = gen.return(0);\n  (ret.value: void); // error: string | number ~> void\n}\n\n// However, a generator can \"refuse\" the return by catching an exception and\n// yielding or returning internally.\nfunction *refuse_return() {\n  try {\n    yield 1;\n  } finally {\n    return 0;\n  }\n}\nvar refuse_return_gen = refuse_return();\nvar refuse_return_result = refuse_return_gen.return(\"string\");\nif (refuse_return_result.done) {\n  (refuse_return_result.value: string); // error: number | void ~> string\n}\n"
  },
  {
    "path": "tests/flow/generators/throw.js",
    "content": "function *catch_return() {\n  try {\n    yield 0;\n  } catch (e) {\n    return e;\n  }\n}\n\nvar catch_return_value = catch_return().throw(\"\").value;\nif (catch_return_value !== undefined) {\n  (catch_return_value : string); // error: number ~> string\n}\n\nfunction *yield_return() {\n  try {\n    yield 0;\n    return;\n  } catch (e) {\n    yield e;\n  }\n}\nvar yield_return_value = yield_return().throw(\"\").value;\nif (yield_return_value !== undefined) {\n  (yield_return_value: string); // error: number ~> string\n}\n"
  },
  {
    "path": "tests/flow/generators/variance.js",
    "content": "declare var g1: Generator<string, string, ?string>;\nvar g2: Generator<?string, ?string, string> = g1;\n"
  },
  {
    "path": "tests/flow/generics/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`generics.js 1`] = `\nclass C<X> {\n  x:X;\n  constructor(x:X) { this.x = x; }\n  get():X { return this.x; }\n}\n\nclass D<T> {\n  x:T;\n  m<S>(z:S,u:T,v):S {\n    this.x = u;\n    v.u = u;\n    return z;\n  }\n}\n\nvar d = new D();\nvar o = {};\nvar b = d.m(true,0,o);\nvar s:string = d.x;\nvar n:number = o.u;\n\nclass E<X> extends C<X> {\n    //x:X;\n    set(x:X):X { /*return x;*/ this.x = x; return /*this.x; */this.get(); }\n}\n\nvar e = new E(); // error: too few arguments to inherited constructor\nvar x:string = e.set(0);\n\nclass F<X> { }\nclass G<Y> extends F<Array<Y>> {}\nclass H<Z> extends G<Array<Z>> {\n    x:Z;\n    foo(x:Z) { this.x = x; }\n}\n\nvar h1 = new H();\nh1.foo([\"...\"]);\nvar h2:F<Array<Array<Array<number>>>> = h1;\n\nvar obj : Object<string, string> = {} // error, arity 0\nvar fn : Function<string> = function() { return 'foo'; } // error, arity 0\nvar fn : function<string> = function() { return 'foo'; } // error, arity 0\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C<X> {\n  x: X;\n  constructor(x: X) {\n    this.x = x;\n  }\n  get(): X {\n    return this.x;\n  }\n}\n\nclass D<T> {\n  x: T;\n  m<S>(z: S, u: T, v): S {\n    this.x = u;\n    v.u = u;\n    return z;\n  }\n}\n\nvar d = new D();\nvar o = {};\nvar b = d.m(true, 0, o);\nvar s: string = d.x;\nvar n: number = o.u;\n\nclass E<X> extends C<X> {\n  //x:X;\n  set(x: X): X {\n    /*return x;*/ this.x = x;\n    return /*this.x; */ this.get();\n  }\n}\n\nvar e = new E(); // error: too few arguments to inherited constructor\nvar x: string = e.set(0);\n\nclass F<X> {}\nclass G<Y> extends F<Array<Y>> {}\nclass H<Z> extends G<Array<Z>> {\n  x: Z;\n  foo(x: Z) {\n    this.x = x;\n  }\n}\n\nvar h1 = new H();\nh1.foo([\"...\"]);\nvar h2: F<Array<Array<Array<number>>>> = h1;\n\nvar obj: Object<string, string> = {}; // error, arity 0\nvar fn: Function<string> = function() {\n  return \"foo\";\n}; // error, arity 0\nvar fn: function<string> = function() {\n  return \"foo\";\n}; // error, arity 0\n\n`;\n"
  },
  {
    "path": "tests/flow/generics/generics.js",
    "content": "class C<X> {\n  x:X;\n  constructor(x:X) { this.x = x; }\n  get():X { return this.x; }\n}\n\nclass D<T> {\n  x:T;\n  m<S>(z:S,u:T,v):S {\n    this.x = u;\n    v.u = u;\n    return z;\n  }\n}\n\nvar d = new D();\nvar o = {};\nvar b = d.m(true,0,o);\nvar s:string = d.x;\nvar n:number = o.u;\n\nclass E<X> extends C<X> {\n    //x:X;\n    set(x:X):X { /*return x;*/ this.x = x; return /*this.x; */this.get(); }\n}\n\nvar e = new E(); // error: too few arguments to inherited constructor\nvar x:string = e.set(0);\n\nclass F<X> { }\nclass G<Y> extends F<Array<Y>> {}\nclass H<Z> extends G<Array<Z>> {\n    x:Z;\n    foo(x:Z) { this.x = x; }\n}\n\nvar h1 = new H();\nh1.foo([\"...\"]);\nvar h2:F<Array<Array<Array<number>>>> = h1;\n\nvar obj : Object<string, string> = {} // error, arity 0\nvar fn : Function<string> = function() { return 'foo'; } // error, arity 0\nvar fn : function<string> = function() { return 'foo'; } // error, arity 0\n"
  },
  {
    "path": "tests/flow/generics/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/geolocation/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`a.js 1`] = `\n/* @flow */\n\nvar geolocation = new Geolocation();\nvar id = geolocation.watchPosition(\n  position => {\n    var coords: Coordinates = position.coords;\n    var accuracy: number = coords.accuracy;\n  },\n  e => {\n    var message: string = e.message;\n    switch (e.code) {\n      case e.PERMISSION_DENIED:\n      case e.POSITION_UNAVAILABLE:\n      case e.TIMEOUT:\n      default:\n        break;\n    }\n  }\n);\ngeolocation.clearWatch(id);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar geolocation = new Geolocation();\nvar id = geolocation.watchPosition(\n  position => {\n    var coords: Coordinates = position.coords;\n    var accuracy: number = coords.accuracy;\n  },\n  e => {\n    var message: string = e.message;\n    switch (e.code) {\n      case e.PERMISSION_DENIED:\n      case e.POSITION_UNAVAILABLE:\n      case e.TIMEOUT:\n      default:\n        break;\n    }\n  }\n);\ngeolocation.clearWatch(id);\n\n`;\n"
  },
  {
    "path": "tests/flow/geolocation/a.js",
    "content": "/* @flow */\n\nvar geolocation = new Geolocation();\nvar id = geolocation.watchPosition(\n  position => {\n    var coords: Coordinates = position.coords;\n    var accuracy: number = coords.accuracy;\n  },\n  e => {\n    var message: string = e.message;\n    switch (e.code) {\n      case e.PERMISSION_DENIED:\n      case e.POSITION_UNAVAILABLE:\n      case e.TIMEOUT:\n      default:\n        break;\n    }\n  }\n);\ngeolocation.clearWatch(id);\n"
  },
  {
    "path": "tests/flow/geolocation/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/get-def/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`example.js 1`] = `\n/* @flow */\n\nvar lib = require('./library');\n\nfunction add(a: number, b: number): number {\n  return a + b;\n}\n\nvar re = /^keynote (talk){2} (lightning){3,5} (talk){2} closing partytime!!!/\n\n// t123456\nadd(lib.iTakeAString(42), 7);\n\n// D123456\nlib.bar();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar lib = require(\"./library\");\n\nfunction add(a: number, b: number): number {\n  return a + b;\n}\n\nvar re = /^keynote (talk){2} (lightning){3,5} (talk){2} closing partytime!!!/;\n\n// t123456\nadd(lib.iTakeAString(42), 7);\n\n// D123456\nlib.bar();\n\n`;\n\nexports[`imports.js 1`] = `\n// @flow\n\nimport thing from \"./helpers/exports_default.js\";\nthing;\n\nimport {foo, bar as baz} from \"./helpers/exports_named.js\";\nfoo;\nbaz;\n\nimport * as things from \"./helpers/exports_named.js\";\nthings;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport thing from \"./helpers/exports_default.js\";\nthing;\n\nimport { foo, bar as baz } from \"./helpers/exports_named.js\";\nfoo;\nbaz;\n\nimport * as things from \"./helpers/exports_named.js\";\nthings;\n\n`;\n\nexports[`library.js 1`] = `\n/* @flow */\n\nmodule.exports = {\n\n  iTakeAString: function(name: string): number {\n    return 42;\n  },\n\n  bar: function(): number {\n    return 42;\n  },\n\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nmodule.exports = {\n  iTakeAString: function(name: string): number {\n    return 42;\n  },\n\n  bar: function(): number {\n    return 42;\n  }\n};\n\n`;\n"
  },
  {
    "path": "tests/flow/get-def/example.js",
    "content": "/* @flow */\n\nvar lib = require('./library');\n\nfunction add(a: number, b: number): number {\n  return a + b;\n}\n\nvar re = /^keynote (talk){2} (lightning){3,5} (talk){2} closing partytime!!!/\n\n// t123456\nadd(lib.iTakeAString(42), 7);\n\n// D123456\nlib.bar();\n"
  },
  {
    "path": "tests/flow/get-def/helpers/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`exports_default.js 1`] = `\n// @flow\n\nconst x = \"foo\";\n\nexport default x;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nconst x = \"foo\";\n\nexport default x;\n\n`;\n\nexports[`exports_named.js 1`] = `\n// @flow\n\nexport const foo = \"foo\";\nexport const bar = \"bar\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport const foo = \"foo\";\nexport const bar = \"bar\";\n\n`;\n"
  },
  {
    "path": "tests/flow/get-def/helpers/exports_default.js",
    "content": "// @flow\n\nconst x = \"foo\";\n\nexport default x;\n"
  },
  {
    "path": "tests/flow/get-def/helpers/exports_named.js",
    "content": "// @flow\n\nexport const foo = \"foo\";\nexport const bar = \"bar\";\n"
  },
  {
    "path": "tests/flow/get-def/helpers/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/get-def/imports.js",
    "content": "// @flow\n\nimport thing from \"./helpers/exports_default.js\";\nthing;\n\nimport {foo, bar as baz} from \"./helpers/exports_named.js\";\nfoo;\nbaz;\n\nimport * as things from \"./helpers/exports_named.js\";\nthings;\n"
  },
  {
    "path": "tests/flow/get-def/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/get-def/library.js",
    "content": "/* @flow */\n\nmodule.exports = {\n\n  iTakeAString: function(name: string): number {\n    return 42;\n  },\n\n  bar: function(): number {\n    return 42;\n  },\n\n};\n"
  },
  {
    "path": "tests/flow/get-def2/Parent.js",
    "content": "// @flow\n\nvar ParentFoo = {foo: 'bar'};\nmodule.exports = {ParentFoo};\n"
  },
  {
    "path": "tests/flow/get-def2/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Parent.js 1`] = `\n// @flow\n\nvar ParentFoo = {foo: 'bar'};\nmodule.exports = {ParentFoo};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nvar ParentFoo = { foo: \"bar\" };\nmodule.exports = { ParentFoo };\n\n`;\n\nexports[`main.js 1`] = `\n// @flow\n\nvar Parent = require('./Parent');\n\n// Hops through destructuring\nlet ParentFoo;\n({ParentFoo} = Parent);\nParentFoo; // Points to lval in line above this\n\n// Follows assignment on simple/\"non-destructuring\" patterns\nlet ParentFoo2;\nParentFoo2 = Parent;\nParentFoo2; // Points to LHS of line above this\n\n// Follows assignment with declaration\nlet ParentFoo3 = Parent;\nParentFoo3; // Points to LHS of line above this\n\n// Follows non-destructured property access of \\`require('Parent')\\`\nlet foo = require('./Parent').ParentFoo.foo;\nfoo;\n\nimport type {Foo} from './types';\nfunction takesFoo(foo: Foo) { }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nvar Parent = require(\"./Parent\");\n\n// Hops through destructuring\nlet ParentFoo;\n({ ParentFoo } = Parent);\nParentFoo; // Points to lval in line above this\n\n// Follows assignment on simple/\"non-destructuring\" patterns\nlet ParentFoo2;\nParentFoo2 = Parent;\nParentFoo2; // Points to LHS of line above this\n\n// Follows assignment with declaration\nlet ParentFoo3 = Parent;\nParentFoo3; // Points to LHS of line above this\n\n// Follows non-destructured property access of \\`require('Parent')\\`\nlet foo = require(\"./Parent\").ParentFoo.foo;\nfoo;\n\nimport type { Foo } from \"./types\";\nfunction takesFoo(foo: Foo) {}\n\n`;\n\nexports[`override.js 1`] = `\n// @flow\n\nclass C {\n  override() { }\n}\n\nclass D extends C {\n  foo() { this.override() }\n  bar() { this.override }\n  override() { }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nclass C {\n  override() {}\n}\n\nclass D extends C {\n  foo() {\n    this.override();\n  }\n  bar() {\n    this.override;\n  }\n  override() {}\n}\n\n`;\n\nexports[`react.js 1`] = `\nvar React = require('react');\n\nclass C extends React.Component {\n  props: { x: string };\n}\n\nlet msg = \"hello\";\n\n(<C x={msg}/>);\n\n(<div id={msg}/>);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar React = require(\"react\");\n\nclass C extends React.Component {\n  props: { x: string };\n}\n\nlet msg = \"hello\";\n\n<C x={msg} />;\n\n<div id={msg} />;\n\n`;\n\nexports[`types.js 1`] = `\n// @flow\n\nexport type Foo = {};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport type Foo = {};\n\n`;\n"
  },
  {
    "path": "tests/flow/get-def2/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/get-def2/lib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`jsx.js 1`] = `\ndeclare var $React: $Exports<'react'>; // fake import\ntype $JSXIntrinsic<T> = Class<$React.Component<void,T,mixed>>;\n\ntype $JSXIntrinsics = {\n  div: $JSXIntrinsic<{id: string}>,\n  span: $JSXIntrinsic<{id: string, class: string}>,\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare var $React: $Exports<\"react\">; // fake import\ntype $JSXIntrinsic<T> = Class<$React.Component<void, T, mixed>>;\n\ntype $JSXIntrinsics = {\n  div: $JSXIntrinsic<{ id: string }>,\n  span: $JSXIntrinsic<{ id: string, class: string }>\n};\n\n`;\n"
  },
  {
    "path": "tests/flow/get-def2/lib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/get-def2/lib/jsx.js",
    "content": "declare var $React: $Exports<'react'>; // fake import\ntype $JSXIntrinsic<T> = Class<$React.Component<void,T,mixed>>;\n\ntype $JSXIntrinsics = {\n  div: $JSXIntrinsic<{id: string}>,\n  span: $JSXIntrinsic<{id: string, class: string}>,\n};\n"
  },
  {
    "path": "tests/flow/get-def2/main.js",
    "content": "// @flow\n\nvar Parent = require('./Parent');\n\n// Hops through destructuring\nlet ParentFoo;\n({ParentFoo} = Parent);\nParentFoo; // Points to lval in line above this\n\n// Follows assignment on simple/\"non-destructuring\" patterns\nlet ParentFoo2;\nParentFoo2 = Parent;\nParentFoo2; // Points to LHS of line above this\n\n// Follows assignment with declaration\nlet ParentFoo3 = Parent;\nParentFoo3; // Points to LHS of line above this\n\n// Follows non-destructured property access of `require('Parent')`\nlet foo = require('./Parent').ParentFoo.foo;\nfoo;\n\nimport type {Foo} from './types';\nfunction takesFoo(foo: Foo) { }\n"
  },
  {
    "path": "tests/flow/get-def2/override.js",
    "content": "// @flow\n\nclass C {\n  override() { }\n}\n\nclass D extends C {\n  foo() { this.override() }\n  bar() { this.override }\n  override() { }\n}\n"
  },
  {
    "path": "tests/flow/get-def2/react.js",
    "content": "var React = require('react');\n\nclass C extends React.Component {\n  props: { x: string };\n}\n\nlet msg = \"hello\";\n\n(<C x={msg}/>);\n\n(<div id={msg}/>);\n"
  },
  {
    "path": "tests/flow/get-def2/types.js",
    "content": "// @flow\n\nexport type Foo = {};\n"
  },
  {
    "path": "tests/flow/get-imports/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`a.js 1`] = `\n// @flow\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n`;\n\nexports[`b.js 1`] = `\n/**\n * @flow\n * @providesModule b\n */\nrequire('./a');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n * @providesModule b\n */\nrequire(\"./a\");\n\n`;\n\nexports[`c.js 1`] = `\n// @flow\nrequire('./a.js');\nrequire('b');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nrequire(\"./a.js\");\nrequire(\"b\");\n\n`;\n"
  },
  {
    "path": "tests/flow/get-imports/a.js",
    "content": "// @flow\n"
  },
  {
    "path": "tests/flow/get-imports/b.js",
    "content": "/**\n * @flow\n * @providesModule b\n */\nrequire('./a');\n"
  },
  {
    "path": "tests/flow/get-imports/c.js",
    "content": "// @flow\nrequire('./a.js');\nrequire('b');\n"
  },
  {
    "path": "tests/flow/get-imports/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/getters_and_setters_disabled/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`getters_and_setters.js 1`] = `\n/**\n * @flow\n */\n\nvar f = {\n  get a() { return 4; },\n  set b(x: number) { this.c = x; },\n  c: 10,\n  get ['d']() { return 'foo'; },\n  set ['d'](x: number) {},\n};\n\ntype T = {\n  get a(): number,\n  set b(x: number): void,\n  c: 10,\n}\n\ndeclare class Foo {\n  get a(): number;\n  set b(x: number): void;\n  c: 10;\n}\n\nclass Bar {\n  get a() { return 4; }\n  set b(x: number) { this.c = x; }\n  c: number;\n  get ['d']() { return 'foo'; }\n  set ['d'](x: number) {}\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nvar f = {\n  get a() {\n    return 4;\n  },\n  set b(x: number) {\n    this.c = x;\n  },\n  c: 10,\n  get [\"d\"]() {\n    return \"foo\";\n  },\n  set [\"d\"](x: number) {}\n};\n\ntype T = {\n  get a(): number,\n  set b(x: number): void,\n  c: 10\n};\n\ndeclare class Foo {\n  get a(): number,\n  set b(x: number): void,\n  c: 10\n}\n\nclass Bar {\n  get a() {\n    return 4;\n  }\n  set b(x: number) {\n    this.c = x;\n  }\n  c: number;\n  get [\"d\"]() {\n    return \"foo\";\n  }\n  set [\"d\"](x: number) {}\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/getters_and_setters_disabled/getters_and_setters.js",
    "content": "/**\n * @flow\n */\n\nvar f = {\n  get a() { return 4; },\n  set b(x: number) { this.c = x; },\n  c: 10,\n  get ['d']() { return 'foo'; },\n  set ['d'](x: number) {},\n};\n\ntype T = {\n  get a(): number,\n  set b(x: number): void,\n  c: 10,\n}\n\ndeclare class Foo {\n  get a(): number;\n  set b(x: number): void;\n  c: 10;\n}\n\nclass Bar {\n  get a() { return 4; }\n  set b(x: number) { this.c = x; }\n  c: number;\n  get ['d']() { return 'foo'; }\n  set ['d'](x: number) {}\n}\n"
  },
  {
    "path": "tests/flow/getters_and_setters_disabled/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow/getters_and_setters_enabled/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`class.js 1`] = `\n/**\n * @flow\n */\n\nvar z: number = 123;\n\nclass Foo {\n  get goodGetterNoAnnotation() { return 4; }\n  get goodGetterWithAnnotation(): number { return 4; }\n\n  set goodSetterNoAnnotation(x) { z = x; }\n  set goodSetterWithAnnotation(x: number) { z = x; }\n\n  get propWithMatchingGetterAndSetter(): number { return 4; }\n  set propWithMatchingGetterAndSetter(x: number) { }\n\n  // The getter and setter need not have the same type - no error\n  get propWithSubtypingGetterAndSetter(): ?number { return 4; }\n  set propWithSubtypingGetterAndSetter(x: number) { }\n\n  // The getter and setter need not have the same type - no error\n  set propWithSubtypingGetterAndSetterReordered(x: number) { }\n  get propWithSubtypingGetterAndSetterReordered(): ?number { return 4; }\n\n  get propWithMismatchingGetterAndSetter(): number { return 4; }\n  set propWithMismatchingGetterAndSetter(x: string) { } // doesn't match getter (OK)\n\n  propOverriddenWithGetter: number;\n  get propOverriddenWithGetter() { return \"hello\"; }\n\n  propOverriddenWithSetter: number;\n  set propOverriddenWithSetter(x: string) { }\n\n  set [z](x: string) {}\n  get [z](): string { return string; }\n};\n\nvar foo = new Foo();\n\n// Test getting properties with getters\nvar testGetterNoError1: number = foo.goodGetterNoAnnotation;\nvar testGetterNoError2: number = foo.goodGetterWithAnnotation;\n\nvar testGetterWithError1: string = foo.goodGetterNoAnnotation; // Error number ~> string\nvar testGetterWithError2: string = foo.goodGetterWithAnnotation; // Error number ~> string\n\n// Test setting properties with getters\nfoo.goodSetterNoAnnotation = 123;\nfoo.goodSetterWithAnnotation = 123;\n\n// TODO: Why does no annotation mean no error?\nfoo.goodSetterNoAnnotation = \"hello\"; // Error string ~> number\nfoo.goodSetterWithAnnotation = \"hello\"; // Error string ~> number\n\nvar testSubtypingGetterAndSetter: number = foo.propWithSubtypingGetterAndSetter; // Error ?number ~> number\n\nvar testPropOverridenWithGetter: number = foo.propOverriddenWithGetter; // Error string ~> number\nfoo.propOverriddenWithSetter = 123; // Error number ~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nvar z: number = 123;\n\nclass Foo {\n  get goodGetterNoAnnotation() {\n    return 4;\n  }\n  get goodGetterWithAnnotation(): number {\n    return 4;\n  }\n\n  set goodSetterNoAnnotation(x) {\n    z = x;\n  }\n  set goodSetterWithAnnotation(x: number) {\n    z = x;\n  }\n\n  get propWithMatchingGetterAndSetter(): number {\n    return 4;\n  }\n  set propWithMatchingGetterAndSetter(x: number) {}\n\n  // The getter and setter need not have the same type - no error\n  get propWithSubtypingGetterAndSetter(): ?number {\n    return 4;\n  }\n  set propWithSubtypingGetterAndSetter(x: number) {}\n\n  // The getter and setter need not have the same type - no error\n  set propWithSubtypingGetterAndSetterReordered(x: number) {}\n  get propWithSubtypingGetterAndSetterReordered(): ?number {\n    return 4;\n  }\n\n  get propWithMismatchingGetterAndSetter(): number {\n    return 4;\n  }\n  set propWithMismatchingGetterAndSetter(x: string) {} // doesn't match getter (OK)\n\n  propOverriddenWithGetter: number;\n  get propOverriddenWithGetter() {\n    return \"hello\";\n  }\n\n  propOverriddenWithSetter: number;\n  set propOverriddenWithSetter(x: string) {}\n\n  set [z](x: string) {}\n  get [z](): string {\n    return string;\n  }\n}\n\nvar foo = new Foo();\n\n// Test getting properties with getters\nvar testGetterNoError1: number = foo.goodGetterNoAnnotation;\nvar testGetterNoError2: number = foo.goodGetterWithAnnotation;\n\nvar testGetterWithError1: string = foo.goodGetterNoAnnotation; // Error number ~> string\nvar testGetterWithError2: string = foo.goodGetterWithAnnotation; // Error number ~> string\n\n// Test setting properties with getters\nfoo.goodSetterNoAnnotation = 123;\nfoo.goodSetterWithAnnotation = 123;\n\n// TODO: Why does no annotation mean no error?\nfoo.goodSetterNoAnnotation = \"hello\"; // Error string ~> number\nfoo.goodSetterWithAnnotation = \"hello\"; // Error string ~> number\n\nvar testSubtypingGetterAndSetter: number = foo.propWithSubtypingGetterAndSetter; // Error ?number ~> number\n\nvar testPropOverridenWithGetter: number = foo.propOverriddenWithGetter; // Error string ~> number\nfoo.propOverriddenWithSetter = 123; // Error number ~> string\n\n`;\n\nexports[`declare_class.js 1`] = `\n/**\n * @flow\n */\n\nvar z: number = 123;\n\ndeclare class Foo {\n  get goodGetterWithAnnotation(): number;\n  set goodSetterWithAnnotation(x: number): void;\n\n  get propWithMatchingGetterAndSetter(): number;\n  set propWithMatchingGetterAndSetter(x: number): void;\n\n  // The getter and setter need not have the same type - no error\n  get propWithSubtypingGetterAndSetter(): ?number;\n  set propWithSubtypingGetterAndSetter(x: number): void;\n\n  // The getter and setter need not have the same type - no error\n  set propWithSubtypingGetterAndSetterReordered(x: number): void;\n  get propWithSubtypingGetterAndSetterReordered(): ?number;\n\n  get propWithMismatchingGetterAndSetter(): number;\n  set propWithMismatchingGetterAndSetter(x: string): void; // doesn't match getter (OK)\n\n  propOverriddenWithGetter: number;\n  get propOverriddenWithGetter(): string;\n\n  propOverriddenWithSetter: number;\n  set propOverriddenWithSetter(x: string): void;\n};\n\nvar foo = new Foo();\n\n// Test getting properties with getters\nvar testGetterNoError2: number = foo.goodGetterWithAnnotation;\n\nvar testGetterWithError2: string = foo.goodGetterWithAnnotation; // Error number ~> string\n\n// Test setting properties with getters\nfoo.goodSetterWithAnnotation = 123;\n\nfoo.goodSetterWithAnnotation = \"hello\"; // Error string ~> number\n\nvar testSubtypingGetterAndSetter: number = foo.propWithSubtypingGetterAndSetter; // Error ?number ~> number\n\nvar testPropOverridenWithGetter: number = foo.propOverriddenWithGetter; // Error string ~> number\nfoo.propOverriddenWithSetter = 123; // Error number ~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nvar z: number = 123;\n\ndeclare class Foo {\n  get goodGetterWithAnnotation(): number,\n  set goodSetterWithAnnotation(x: number): void,\n\n  get propWithMatchingGetterAndSetter(): number,\n  set propWithMatchingGetterAndSetter(x: number): void,\n\n  // The getter and setter need not have the same type - no error\n  get propWithSubtypingGetterAndSetter(): ?number,\n  set propWithSubtypingGetterAndSetter(x: number): void,\n\n  // The getter and setter need not have the same type - no error\n  set propWithSubtypingGetterAndSetterReordered(x: number): void,\n  get propWithSubtypingGetterAndSetterReordered(): ?number,\n\n  get propWithMismatchingGetterAndSetter(): number,\n  set propWithMismatchingGetterAndSetter(x: string): void, // doesn't match getter (OK)\n\n  propOverriddenWithGetter: number,\n  get propOverriddenWithGetter(): string,\n\n  propOverriddenWithSetter: number,\n  set propOverriddenWithSetter(x: string): void\n}\n\nvar foo = new Foo();\n\n// Test getting properties with getters\nvar testGetterNoError2: number = foo.goodGetterWithAnnotation;\n\nvar testGetterWithError2: string = foo.goodGetterWithAnnotation; // Error number ~> string\n\n// Test setting properties with getters\nfoo.goodSetterWithAnnotation = 123;\n\nfoo.goodSetterWithAnnotation = \"hello\"; // Error string ~> number\n\nvar testSubtypingGetterAndSetter: number = foo.propWithSubtypingGetterAndSetter; // Error ?number ~> number\n\nvar testPropOverridenWithGetter: number = foo.propOverriddenWithGetter; // Error string ~> number\nfoo.propOverriddenWithSetter = 123; // Error number ~> string\n\n`;\n\nexports[`object.js 1`] = `\n/**\n * @flow\n */\n\nvar z: number = 123;\n\nclass A {}\nclass B extends A {}\nclass C extends A {}\n\nvar obj = {\n  get goodGetterNoAnnotation() { return 4; },\n  get goodGetterWithAnnotation(): number { return 4; },\n\n  set goodSetterNoAnnotation(x) { z = x; },\n  set goodSetterWithAnnotation(x: number) { z = x; },\n\n  get propWithMatchingGetterAndSetter(): number { return 4; },\n  set propWithMatchingGetterAndSetter(x: number) { },\n\n  // The getter and setter need not have the same type\n  get propWithSubtypingGetterAndSetter(): ?number { return 4; }, // OK\n  set propWithSubtypingGetterAndSetter(x: number) { },\n\n  set propWithSubtypingGetterAndSetterReordered(x: number) { }, // OK\n  get propWithSubtypingGetterAndSetterReordered(): ?number { return 4; },\n\n  get exampleOfOrderOfGetterAndSetter(): A { return new A(); },\n  set exampleOfOrderOfGetterAndSetter(x: B) {},\n\n  set exampleOfOrderOfGetterAndSetterReordered(x: B) {},\n  get exampleOfOrderOfGetterAndSetterReordered(): A { return new A(); },\n\n  set [z](x: string) {},\n  get [z](): string { return string; },\n};\n\n\n\n// Test getting properties with getters\nvar testGetterNoError1: number = obj.goodGetterNoAnnotation;\nvar testGetterNoError2: number = obj.goodGetterWithAnnotation;\n\nvar testGetterWithError1: string = obj.goodGetterNoAnnotation; // Error number ~> string\nvar testGetterWithError2: string = obj.goodGetterWithAnnotation; // Error number ~> string\n\n// Test setting properties with getters\nobj.goodSetterNoAnnotation = 123;\nobj.goodSetterWithAnnotation = 123;\n\nobj.goodSetterNoAnnotation = \"hello\"; // Error string ~> number\nobj.goodSetterWithAnnotation = \"hello\"; // Error string ~> number\n\nvar testSubtypingGetterAndSetter: number = obj.propWithSubtypingGetterAndSetter; // Error ?number ~> number\n\n// When building this feature, it was tempting to flow the setter into the\n// getter and then use either the getter or setter as the type of the property.\n// This example shows the danger of using the getter's type\nobj.exampleOfOrderOfGetterAndSetter = new C(); // Error C ~> B\n\n// And this example shows the danger of using the setter's type.\nvar testExampleOrOrderOfGetterAndSetterReordered: number =\n  obj.exampleOfOrderOfGetterAndSetterReordered; // Error A ~> B\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nvar z: number = 123;\n\nclass A {}\nclass B extends A {}\nclass C extends A {}\n\nvar obj = {\n  get goodGetterNoAnnotation() {\n    return 4;\n  },\n  get goodGetterWithAnnotation(): number {\n    return 4;\n  },\n\n  set goodSetterNoAnnotation(x) {\n    z = x;\n  },\n  set goodSetterWithAnnotation(x: number) {\n    z = x;\n  },\n\n  get propWithMatchingGetterAndSetter(): number {\n    return 4;\n  },\n  set propWithMatchingGetterAndSetter(x: number) {},\n\n  // The getter and setter need not have the same type\n  get propWithSubtypingGetterAndSetter(): ?number {\n    return 4;\n  }, // OK\n  set propWithSubtypingGetterAndSetter(x: number) {},\n\n  set propWithSubtypingGetterAndSetterReordered(x: number) {}, // OK\n  get propWithSubtypingGetterAndSetterReordered(): ?number {\n    return 4;\n  },\n\n  get exampleOfOrderOfGetterAndSetter(): A {\n    return new A();\n  },\n  set exampleOfOrderOfGetterAndSetter(x: B) {},\n\n  set exampleOfOrderOfGetterAndSetterReordered(x: B) {},\n  get exampleOfOrderOfGetterAndSetterReordered(): A {\n    return new A();\n  },\n\n  set [z](x: string) {},\n  get [z](): string {\n    return string;\n  }\n};\n\n// Test getting properties with getters\nvar testGetterNoError1: number = obj.goodGetterNoAnnotation;\nvar testGetterNoError2: number = obj.goodGetterWithAnnotation;\n\nvar testGetterWithError1: string = obj.goodGetterNoAnnotation; // Error number ~> string\nvar testGetterWithError2: string = obj.goodGetterWithAnnotation; // Error number ~> string\n\n// Test setting properties with getters\nobj.goodSetterNoAnnotation = 123;\nobj.goodSetterWithAnnotation = 123;\n\nobj.goodSetterNoAnnotation = \"hello\"; // Error string ~> number\nobj.goodSetterWithAnnotation = \"hello\"; // Error string ~> number\n\nvar testSubtypingGetterAndSetter: number = obj.propWithSubtypingGetterAndSetter; // Error ?number ~> number\n\n// When building this feature, it was tempting to flow the setter into the\n// getter and then use either the getter or setter as the type of the property.\n// This example shows the danger of using the getter's type\nobj.exampleOfOrderOfGetterAndSetter = new C(); // Error C ~> B\n\n// And this example shows the danger of using the setter's type.\nvar testExampleOrOrderOfGetterAndSetterReordered: number =\n  obj.exampleOfOrderOfGetterAndSetterReordered; // Error A ~> B\n\n`;\n\nexports[`object_type.js 1`] = `\n/**\n * @flow\n */\n\nvar z: number = 123;\n\nclass A {}\nclass B extends A {}\nclass C extends A {}\n\ntype T = {\n  get goodGetterWithAnnotation(): number,\n  set goodSetterWithAnnotation(x: number): void,\n\n  get propWithMatchingGetterAndSetter(): number,\n  set propWithMatchingGetterAndSetter(x: number): void,\n\n  // The getter and setter need not have the same type\n  get propWithSubtypingGetterAndSetter(): ?number, // OK\n  set propWithSubtypingGetterAndSetter(x: number): void,\n\n  set propWithSubtypingGetterAndSetterReordered(x: number): void, // OK\n  get propWithSubtypingGetterAndSetterReordered(): ?number,\n\n  get exampleOfOrderOfGetterAndSetter(): A,\n  set exampleOfOrderOfGetterAndSetter(x: B): void,\n\n  set exampleOfOrderOfGetterAndSetterReordered(x: B): void,\n  get exampleOfOrderOfGetterAndSetterReordered(): A,\n};\n\nfunction test(obj: T) {\n  // Test getting properties with getters\n  var testGetterNoError2: number = obj.goodGetterWithAnnotation;\n\n  var testGetterWithError2: string = obj.goodGetterWithAnnotation; // Error number ~> string\n\n  // Test setting properties with getters\n  obj.goodSetterWithAnnotation = 123;\n\n  obj.goodSetterWithAnnotation = \"hello\"; // Error string ~> number\n\n  var testSubtypingGetterAndSetter: number = obj.propWithSubtypingGetterAndSetter; // Error ?number ~> number\n\n  // When building this feature, it was tempting to flow the setter into the\n  // getter and then use either the getter or setter as the type of the\n  // property. This example shows the danger of using the getter's type\n  obj.exampleOfOrderOfGetterAndSetter = new C(); // Error C ~> B\n\n  // And this example shows the danger of using the setter's type.\n  var testExampleOrOrderOfGetterAndSetterReordered: number =\n    obj.exampleOfOrderOfGetterAndSetterReordered; // Error A ~> B\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nvar z: number = 123;\n\nclass A {}\nclass B extends A {}\nclass C extends A {}\n\ntype T = {\n  get goodGetterWithAnnotation(): number,\n  set goodSetterWithAnnotation(x: number): void,\n\n  get propWithMatchingGetterAndSetter(): number,\n  set propWithMatchingGetterAndSetter(x: number): void,\n\n  // The getter and setter need not have the same type\n  get propWithSubtypingGetterAndSetter(): ?number, // OK\n  set propWithSubtypingGetterAndSetter(x: number): void,\n\n  set propWithSubtypingGetterAndSetterReordered(x: number): void, // OK\n  get propWithSubtypingGetterAndSetterReordered(): ?number,\n\n  get exampleOfOrderOfGetterAndSetter(): A,\n  set exampleOfOrderOfGetterAndSetter(x: B): void,\n\n  set exampleOfOrderOfGetterAndSetterReordered(x: B): void,\n  get exampleOfOrderOfGetterAndSetterReordered(): A\n};\n\nfunction test(obj: T) {\n  // Test getting properties with getters\n  var testGetterNoError2: number = obj.goodGetterWithAnnotation;\n\n  var testGetterWithError2: string = obj.goodGetterWithAnnotation; // Error number ~> string\n\n  // Test setting properties with getters\n  obj.goodSetterWithAnnotation = 123;\n\n  obj.goodSetterWithAnnotation = \"hello\"; // Error string ~> number\n\n  var testSubtypingGetterAndSetter: number =\n    obj.propWithSubtypingGetterAndSetter; // Error ?number ~> number\n\n  // When building this feature, it was tempting to flow the setter into the\n  // getter and then use either the getter or setter as the type of the\n  // property. This example shows the danger of using the getter's type\n  obj.exampleOfOrderOfGetterAndSetter = new C(); // Error C ~> B\n\n  // And this example shows the danger of using the setter's type.\n  var testExampleOrOrderOfGetterAndSetterReordered: number =\n    obj.exampleOfOrderOfGetterAndSetterReordered; // Error A ~> B\n}\n\n`;\n\nexports[`react.js 1`] = `\n/**\n * @flow\n */\n\nimport React from \"react\";\n\nconst Example = React.createClass({\n  propTypes: {\n    get a() { return React.PropTypes.number.isRequired; },\n    set b(x: number) { this.c = x; },\n    c: React.PropTypes.string,\n  }\n});\n\n(<Example />); // error: property \\`a\\` not found\n(<Example a={0} />); // ok\n(<Example a=\"bad\" />); // error: number ~> string\n(<Example a={0} c={0} />); // error: number ~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nimport React from \"react\";\n\nconst Example = React.createClass({\n  propTypes: {\n    get a() {\n      return React.PropTypes.number.isRequired;\n    },\n    set b(x: number) {\n      this.c = x;\n    },\n    c: React.PropTypes.string\n  }\n});\n\n<Example />; // error: property \\`a\\` not found\n<Example a={0} />; // ok\n<Example a=\"bad\" />; // error: number ~> string\n<Example a={0} c={0} />; // error: number ~> string\n\n`;\n\nexports[`variance.js 1`] = `\n/* @flow */\n\nclass A {}\nclass B extends A {}\nclass C extends B {}\n\ndeclare var a: A;\ndeclare var b: B;\ndeclare var c: C;\n\nclass Base {\n  x: B;\n  +pos: B;\n  -neg: B;\n  get get(): B { return this.x };\n  set set(value: B): void { this.x = value };\n  get getset(): B { return this.x };\n  set getset(value: B): void { this.x = value };\n}\n\n(class extends Base {\n  // error: getter incompatible with read/write property\n  get x(): B { return b }\n});\n\n(class extends Base {\n  // error: setter incompatible with read/write property\n  set x(value: B): void {}\n});\n\n(class extends Base {\n  // ok: get/set co/contra with read/write property, resp.\n  get x(): C { return c }\n  set x(value: A): void {}\n});\n\n(class extends Base {\n  // error: setter incompatible with read-only property\n  set pos(value: B): void {}\n});\n\n(class extends Base {\n  // ok: getter covariant with read-only property\n  get pos(): C { return c }\n});\n\n(class extends Base {\n  // error: getter incompatible with write-only property\n  get neg(): B { return b }\n});\n\n(class extends Base {\n  // ok: setter contravariant with write-only property\n  set neg(value: A): void {}\n});\n\n(class extends Base {\n  // ok: read/write covariant with getter\n  get: C;\n});\n\n(class extends Base {\n  // ok: read/write contravariant with setter\n  set: A;\n});\n\n(class extends Base {\n  // ok: read/write invariant with get/set\n  getset: B;\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nclass A {}\nclass B extends A {}\nclass C extends B {}\n\ndeclare var a: A;\ndeclare var b: B;\ndeclare var c: C;\n\nclass Base {\n  x: B;\n  +pos: B;\n  -neg: B;\n  get get(): B {\n    return this.x;\n  }\n  set set(value: B): void {\n    this.x = value;\n  }\n  get getset(): B {\n    return this.x;\n  }\n  set getset(value: B): void {\n    this.x = value;\n  }\n}\n\n(class extends Base {\n  // error: getter incompatible with read/write property\n  get x(): B {\n    return b;\n  }\n});\n\n(class extends Base {\n  // error: setter incompatible with read/write property\n  set x(value: B): void {}\n});\n\n(class extends Base {\n  // ok: get/set co/contra with read/write property, resp.\n  get x(): C {\n    return c;\n  }\n  set x(value: A): void {}\n});\n\n(class extends Base {\n  // error: setter incompatible with read-only property\n  set pos(value: B): void {}\n});\n\n(class extends Base {\n  // ok: getter covariant with read-only property\n  get pos(): C {\n    return c;\n  }\n});\n\n(class extends Base {\n  // error: getter incompatible with write-only property\n  get neg(): B {\n    return b;\n  }\n});\n\n(class extends Base {\n  // ok: setter contravariant with write-only property\n  set neg(value: A): void {}\n});\n\n(class extends Base {\n  // ok: read/write covariant with getter\n  get: C;\n});\n\n(class extends Base {\n  // ok: read/write contravariant with setter\n  set: A;\n});\n\n(class extends Base {\n  // ok: read/write invariant with get/set\n  getset: B;\n});\n\n`;\n"
  },
  {
    "path": "tests/flow/getters_and_setters_enabled/class.js",
    "content": "/**\n * @flow\n */\n\nvar z: number = 123;\n\nclass Foo {\n  get goodGetterNoAnnotation() { return 4; }\n  get goodGetterWithAnnotation(): number { return 4; }\n\n  set goodSetterNoAnnotation(x) { z = x; }\n  set goodSetterWithAnnotation(x: number) { z = x; }\n\n  get propWithMatchingGetterAndSetter(): number { return 4; }\n  set propWithMatchingGetterAndSetter(x: number) { }\n\n  // The getter and setter need not have the same type - no error\n  get propWithSubtypingGetterAndSetter(): ?number { return 4; }\n  set propWithSubtypingGetterAndSetter(x: number) { }\n\n  // The getter and setter need not have the same type - no error\n  set propWithSubtypingGetterAndSetterReordered(x: number) { }\n  get propWithSubtypingGetterAndSetterReordered(): ?number { return 4; }\n\n  get propWithMismatchingGetterAndSetter(): number { return 4; }\n  set propWithMismatchingGetterAndSetter(x: string) { } // doesn't match getter (OK)\n\n  propOverriddenWithGetter: number;\n  get propOverriddenWithGetter() { return \"hello\"; }\n\n  propOverriddenWithSetter: number;\n  set propOverriddenWithSetter(x: string) { }\n\n  set [z](x: string) {}\n  get [z](): string { return string; }\n};\n\nvar foo = new Foo();\n\n// Test getting properties with getters\nvar testGetterNoError1: number = foo.goodGetterNoAnnotation;\nvar testGetterNoError2: number = foo.goodGetterWithAnnotation;\n\nvar testGetterWithError1: string = foo.goodGetterNoAnnotation; // Error number ~> string\nvar testGetterWithError2: string = foo.goodGetterWithAnnotation; // Error number ~> string\n\n// Test setting properties with getters\nfoo.goodSetterNoAnnotation = 123;\nfoo.goodSetterWithAnnotation = 123;\n\n// TODO: Why does no annotation mean no error?\nfoo.goodSetterNoAnnotation = \"hello\"; // Error string ~> number\nfoo.goodSetterWithAnnotation = \"hello\"; // Error string ~> number\n\nvar testSubtypingGetterAndSetter: number = foo.propWithSubtypingGetterAndSetter; // Error ?number ~> number\n\nvar testPropOverridenWithGetter: number = foo.propOverriddenWithGetter; // Error string ~> number\nfoo.propOverriddenWithSetter = 123; // Error number ~> string\n"
  },
  {
    "path": "tests/flow/getters_and_setters_enabled/declare_class.js",
    "content": "/**\n * @flow\n */\n\nvar z: number = 123;\n\ndeclare class Foo {\n  get goodGetterWithAnnotation(): number;\n  set goodSetterWithAnnotation(x: number): void;\n\n  get propWithMatchingGetterAndSetter(): number;\n  set propWithMatchingGetterAndSetter(x: number): void;\n\n  // The getter and setter need not have the same type - no error\n  get propWithSubtypingGetterAndSetter(): ?number;\n  set propWithSubtypingGetterAndSetter(x: number): void;\n\n  // The getter and setter need not have the same type - no error\n  set propWithSubtypingGetterAndSetterReordered(x: number): void;\n  get propWithSubtypingGetterAndSetterReordered(): ?number;\n\n  get propWithMismatchingGetterAndSetter(): number;\n  set propWithMismatchingGetterAndSetter(x: string): void; // doesn't match getter (OK)\n\n  propOverriddenWithGetter: number;\n  get propOverriddenWithGetter(): string;\n\n  propOverriddenWithSetter: number;\n  set propOverriddenWithSetter(x: string): void;\n};\n\nvar foo = new Foo();\n\n// Test getting properties with getters\nvar testGetterNoError2: number = foo.goodGetterWithAnnotation;\n\nvar testGetterWithError2: string = foo.goodGetterWithAnnotation; // Error number ~> string\n\n// Test setting properties with getters\nfoo.goodSetterWithAnnotation = 123;\n\nfoo.goodSetterWithAnnotation = \"hello\"; // Error string ~> number\n\nvar testSubtypingGetterAndSetter: number = foo.propWithSubtypingGetterAndSetter; // Error ?number ~> number\n\nvar testPropOverridenWithGetter: number = foo.propOverriddenWithGetter; // Error string ~> number\nfoo.propOverriddenWithSetter = 123; // Error number ~> string\n"
  },
  {
    "path": "tests/flow/getters_and_setters_enabled/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow/getters_and_setters_enabled/object.js",
    "content": "/**\n * @flow\n */\n\nvar z: number = 123;\n\nclass A {}\nclass B extends A {}\nclass C extends A {}\n\nvar obj = {\n  get goodGetterNoAnnotation() { return 4; },\n  get goodGetterWithAnnotation(): number { return 4; },\n\n  set goodSetterNoAnnotation(x) { z = x; },\n  set goodSetterWithAnnotation(x: number) { z = x; },\n\n  get propWithMatchingGetterAndSetter(): number { return 4; },\n  set propWithMatchingGetterAndSetter(x: number) { },\n\n  // The getter and setter need not have the same type\n  get propWithSubtypingGetterAndSetter(): ?number { return 4; }, // OK\n  set propWithSubtypingGetterAndSetter(x: number) { },\n\n  set propWithSubtypingGetterAndSetterReordered(x: number) { }, // OK\n  get propWithSubtypingGetterAndSetterReordered(): ?number { return 4; },\n\n  get exampleOfOrderOfGetterAndSetter(): A { return new A(); },\n  set exampleOfOrderOfGetterAndSetter(x: B) {},\n\n  set exampleOfOrderOfGetterAndSetterReordered(x: B) {},\n  get exampleOfOrderOfGetterAndSetterReordered(): A { return new A(); },\n\n  set [z](x: string) {},\n  get [z](): string { return string; },\n};\n\n\n\n// Test getting properties with getters\nvar testGetterNoError1: number = obj.goodGetterNoAnnotation;\nvar testGetterNoError2: number = obj.goodGetterWithAnnotation;\n\nvar testGetterWithError1: string = obj.goodGetterNoAnnotation; // Error number ~> string\nvar testGetterWithError2: string = obj.goodGetterWithAnnotation; // Error number ~> string\n\n// Test setting properties with getters\nobj.goodSetterNoAnnotation = 123;\nobj.goodSetterWithAnnotation = 123;\n\nobj.goodSetterNoAnnotation = \"hello\"; // Error string ~> number\nobj.goodSetterWithAnnotation = \"hello\"; // Error string ~> number\n\nvar testSubtypingGetterAndSetter: number = obj.propWithSubtypingGetterAndSetter; // Error ?number ~> number\n\n// When building this feature, it was tempting to flow the setter into the\n// getter and then use either the getter or setter as the type of the property.\n// This example shows the danger of using the getter's type\nobj.exampleOfOrderOfGetterAndSetter = new C(); // Error C ~> B\n\n// And this example shows the danger of using the setter's type.\nvar testExampleOrOrderOfGetterAndSetterReordered: number =\n  obj.exampleOfOrderOfGetterAndSetterReordered; // Error A ~> B\n"
  },
  {
    "path": "tests/flow/getters_and_setters_enabled/object_type.js",
    "content": "/**\n * @flow\n */\n\nvar z: number = 123;\n\nclass A {}\nclass B extends A {}\nclass C extends A {}\n\ntype T = {\n  get goodGetterWithAnnotation(): number,\n  set goodSetterWithAnnotation(x: number): void,\n\n  get propWithMatchingGetterAndSetter(): number,\n  set propWithMatchingGetterAndSetter(x: number): void,\n\n  // The getter and setter need not have the same type\n  get propWithSubtypingGetterAndSetter(): ?number, // OK\n  set propWithSubtypingGetterAndSetter(x: number): void,\n\n  set propWithSubtypingGetterAndSetterReordered(x: number): void, // OK\n  get propWithSubtypingGetterAndSetterReordered(): ?number,\n\n  get exampleOfOrderOfGetterAndSetter(): A,\n  set exampleOfOrderOfGetterAndSetter(x: B): void,\n\n  set exampleOfOrderOfGetterAndSetterReordered(x: B): void,\n  get exampleOfOrderOfGetterAndSetterReordered(): A,\n};\n\nfunction test(obj: T) {\n  // Test getting properties with getters\n  var testGetterNoError2: number = obj.goodGetterWithAnnotation;\n\n  var testGetterWithError2: string = obj.goodGetterWithAnnotation; // Error number ~> string\n\n  // Test setting properties with getters\n  obj.goodSetterWithAnnotation = 123;\n\n  obj.goodSetterWithAnnotation = \"hello\"; // Error string ~> number\n\n  var testSubtypingGetterAndSetter: number = obj.propWithSubtypingGetterAndSetter; // Error ?number ~> number\n\n  // When building this feature, it was tempting to flow the setter into the\n  // getter and then use either the getter or setter as the type of the\n  // property. This example shows the danger of using the getter's type\n  obj.exampleOfOrderOfGetterAndSetter = new C(); // Error C ~> B\n\n  // And this example shows the danger of using the setter's type.\n  var testExampleOrOrderOfGetterAndSetterReordered: number =\n    obj.exampleOfOrderOfGetterAndSetterReordered; // Error A ~> B\n}\n"
  },
  {
    "path": "tests/flow/getters_and_setters_enabled/react.js",
    "content": "/**\n * @flow\n */\n\nimport React from \"react\";\n\nconst Example = React.createClass({\n  propTypes: {\n    get a() { return React.PropTypes.number.isRequired; },\n    set b(x: number) { this.c = x; },\n    c: React.PropTypes.string,\n  }\n});\n\n(<Example />); // error: property `a` not found\n(<Example a={0} />); // ok\n(<Example a=\"bad\" />); // error: number ~> string\n(<Example a={0} c={0} />); // error: number ~> string\n"
  },
  {
    "path": "tests/flow/getters_and_setters_enabled/variance.js",
    "content": "/* @flow */\n\nclass A {}\nclass B extends A {}\nclass C extends B {}\n\ndeclare var a: A;\ndeclare var b: B;\ndeclare var c: C;\n\nclass Base {\n  x: B;\n  +pos: B;\n  -neg: B;\n  get get(): B { return this.x };\n  set set(value: B): void { this.x = value };\n  get getset(): B { return this.x };\n  set getset(value: B): void { this.x = value };\n}\n\n(class extends Base {\n  // error: getter incompatible with read/write property\n  get x(): B { return b }\n});\n\n(class extends Base {\n  // error: setter incompatible with read/write property\n  set x(value: B): void {}\n});\n\n(class extends Base {\n  // ok: get/set co/contra with read/write property, resp.\n  get x(): C { return c }\n  set x(value: A): void {}\n});\n\n(class extends Base {\n  // error: setter incompatible with read-only property\n  set pos(value: B): void {}\n});\n\n(class extends Base {\n  // ok: getter covariant with read-only property\n  get pos(): C { return c }\n});\n\n(class extends Base {\n  // error: getter incompatible with write-only property\n  get neg(): B { return b }\n});\n\n(class extends Base {\n  // ok: setter contravariant with write-only property\n  set neg(value: A): void {}\n});\n\n(class extends Base {\n  // ok: read/write covariant with getter\n  get: C;\n});\n\n(class extends Base {\n  // ok: read/write contravariant with setter\n  set: A;\n});\n\n(class extends Base {\n  // ok: read/write invariant with get/set\n  getset: B;\n});\n"
  },
  {
    "path": "tests/flow/haste_cycle/API.js",
    "content": "// @flow\n\nvar OpenGraphObject = require('./models/OpenGraphObject.js');\n"
  },
  {
    "path": "tests/flow/haste_cycle/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`API.js 1`] = `\n// @flow\n\nvar OpenGraphObject = require('./models/OpenGraphObject.js');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nvar OpenGraphObject = require(\"./models/OpenGraphObject.js\");\n\n`;\n"
  },
  {
    "path": "tests/flow/haste_cycle/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/haste_cycle/models/OpenGraphAction.js",
    "content": "// @flow\n\nvar OpenGraphValueContainer = require('./OpenGraphValueContainer.js');\n"
  },
  {
    "path": "tests/flow/haste_cycle/models/OpenGraphObject.js",
    "content": "// @flow\n\nvar OpenGraphValueContainer = require('./OpenGraphValueContainer.js');\n"
  },
  {
    "path": "tests/flow/haste_cycle/models/OpenGraphValueContainer.js",
    "content": "// @flow\n\nvar OpenGraphObject = require('./OpenGraphObject.js');\n"
  },
  {
    "path": "tests/flow/haste_cycle/models/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`OpenGraphAction.js 1`] = `\n// @flow\n\nvar OpenGraphValueContainer = require('./OpenGraphValueContainer.js');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nvar OpenGraphValueContainer = require(\"./OpenGraphValueContainer.js\");\n\n`;\n\nexports[`OpenGraphObject.js 1`] = `\n// @flow\n\nvar OpenGraphValueContainer = require('./OpenGraphValueContainer.js');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nvar OpenGraphValueContainer = require(\"./OpenGraphValueContainer.js\");\n\n`;\n\nexports[`OpenGraphValueContainer.js 1`] = `\n// @flow\n\nvar OpenGraphObject = require('./OpenGraphObject.js');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nvar OpenGraphObject = require(\"./OpenGraphObject.js\");\n\n`;\n"
  },
  {
    "path": "tests/flow/haste_cycle/models/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/haste_dupe/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`dupe1.js 1`] = `\n/**\n * Dupe provider 1/2\n * @providesModule Dupe\n * @flow\n */\nmodule.exports = \"dupe1\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * Dupe provider 1/2\n * @providesModule Dupe\n * @flow\n */\nmodule.exports = \"dupe1\";\n\n`;\n\nexports[`dupe2.js 1`] = `\n/**\n * Dupe provider 2/2\n * @providesModule Dupe\n * @flow\n */\nmodule.exports = \"dupe2\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * Dupe provider 2/2\n * @providesModule Dupe\n * @flow\n */\nmodule.exports = \"dupe2\";\n\n`;\n\nexports[`requires_dupe.js 1`] = `\n/**\n * depends on doubly-provided module\n * @flow\n */\nvar dupe = require('Dupe');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * depends on doubly-provided module\n * @flow\n */\nvar dupe = require(\"Dupe\");\n\n`;\n"
  },
  {
    "path": "tests/flow/haste_dupe/dupe1.js",
    "content": "/**\n * Dupe provider 1/2\n * @providesModule Dupe\n * @flow\n */\nmodule.exports = \"dupe1\";\n"
  },
  {
    "path": "tests/flow/haste_dupe/dupe2.js",
    "content": "/**\n * Dupe provider 2/2\n * @providesModule Dupe\n * @flow\n */\nmodule.exports = \"dupe2\";\n"
  },
  {
    "path": "tests/flow/haste_dupe/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/haste_dupe/requires_dupe.js",
    "content": "/**\n * depends on doubly-provided module\n * @flow\n */\nvar dupe = require('Dupe');\n"
  },
  {
    "path": "tests/flow/haste_name_reducers_defaults/Module1.js",
    "content": "/* @flow */\n\nvar test = require('test');\n\n(test: boolean);\n\nmodule.exports = test;\n"
  },
  {
    "path": "tests/flow/haste_name_reducers_defaults/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Module1.js 1`] = `\n/* @flow */\n\nvar test = require('test');\n\n(test: boolean);\n\nmodule.exports = test;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar test = require(\"test\");\n\n(test: boolean);\n\nmodule.exports = test;\n\n`;\n\nexports[`index.js 1`] = `\n/* @flow */\n\n(require('Module1'): boolean);\n(require('Module2').foo(): boolean);\nrequire('Module3');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n(require(\"Module1\"): boolean);\n(require(\"Module2\").foo(): boolean);\nrequire(\"Module3\");\n\n`;\n"
  },
  {
    "path": "tests/flow/haste_name_reducers_defaults/index.js",
    "content": "/* @flow */\n\n(require('Module1'): boolean);\n(require('Module2').foo(): boolean);\nrequire('Module3');\n"
  },
  {
    "path": "tests/flow/haste_name_reducers_defaults/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/haste_use_name_reducers/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`index.js 1`] = `\n/* @flow */\n\n(require('Module1'): boolean);\nrequire('Module2');\nrequire('Module3');\nrequire('Module4');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n(require(\"Module1\"): boolean);\nrequire(\"Module2\");\nrequire(\"Module3\");\nrequire(\"Module4\");\n\n`;\n"
  },
  {
    "path": "tests/flow/haste_use_name_reducers/dir1/Module1.js",
    "content": "/* @flow */\n\nrequire('test');\n\nclass Impl {}\n\nmodule.exports = new Impl();\n"
  },
  {
    "path": "tests/flow/haste_use_name_reducers/dir1/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Module1.js 1`] = `\n/* @flow */\n\nrequire('test');\n\nclass Impl {}\n\nmodule.exports = new Impl();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nrequire(\"test\");\n\nclass Impl {}\n\nmodule.exports = new Impl();\n\n`;\n"
  },
  {
    "path": "tests/flow/haste_use_name_reducers/dir1/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/haste_use_name_reducers/dir2/Module2.ios.js",
    "content": "/* @flow */\n\nrequire('test2');\n"
  },
  {
    "path": "tests/flow/haste_use_name_reducers/dir2/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Module2.ios.js 1`] = `\n/* @flow */\n\nrequire('test2');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nrequire(\"test2\");\n\n`;\n"
  },
  {
    "path": "tests/flow/haste_use_name_reducers/dir2/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/haste_use_name_reducers/index.js",
    "content": "/* @flow */\n\n(require('Module1'): boolean);\nrequire('Module2');\nrequire('Module3');\nrequire('Module4');\n"
  },
  {
    "path": "tests/flow/haste_use_name_reducers/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/ignore_package/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`foo.js 1`] = `\n/** @flow */\n/* this require routes to nothing, because\n   our node_modules/underscore directory\n   has been excluded. If package.json files\n   are being excluded properly, we'll get\n   'Required module not found'.\n */\nvar _ = require('underscore');\n\nfunction foo(): string {\n  return _.foo();\n}\n\nmodule.exports = foo;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/** @flow */\n/* this require routes to nothing, because\n   our node_modules/underscore directory\n   has been excluded. If package.json files\n   are being excluded properly, we'll get\n   'Required module not found'.\n */\nvar _ = require(\"underscore\");\n\nfunction foo(): string {\n  return _.foo();\n}\n\nmodule.exports = foo;\n\n`;\n"
  },
  {
    "path": "tests/flow/ignore_package/foo.js",
    "content": "/** @flow */\n/* this require routes to nothing, because\n   our node_modules/underscore directory\n   has been excluded. If package.json files\n   are being excluded properly, we'll get\n   'Required module not found'.\n */\nvar _ = require('underscore');\n\nfunction foo(): string {\n  return _.foo();\n}\n\nmodule.exports = foo;\n"
  },
  {
    "path": "tests/flow/ignore_package/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/immutable_methods/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nclass A {\n    foo(): A { return this; }\n}\nclass B extends A {\n    foo(): B { return this; }\n}\nclass C extends A {}\nvar a: A = new B();\na.foo = function(): C { return new C(); }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {\n  foo(): A {\n    return this;\n  }\n}\nclass B extends A {\n  foo(): B {\n    return this;\n  }\n}\nclass C extends A {}\nvar a: A = new B();\na.foo = function(): C {\n  return new C();\n};\n\n`;\n"
  },
  {
    "path": "tests/flow/immutable_methods/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/immutable_methods/test.js",
    "content": "class A {\n    foo(): A { return this; }\n}\nclass B extends A {\n    foo(): B { return this; }\n}\nclass C extends A {}\nvar a: A = new B();\na.foo = function(): C { return new C(); }\n"
  },
  {
    "path": "tests/flow/implements/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n/* @noflow */\n\ninterface IFoo { foo: string }\n\nclass C1 implements IFoo {} // error: property \\`foo\\` not found\nclass C2 implements IFoo { foo: number } // error: number <~> string\nclass C3 implements IFoo { foo: string } // ok\n\n(new C1: IFoo); // ok, we already errored at def site\n\ninterface IBar { bar: number }\n\nclass C4 implements IFoo, IBar {} // error: properties \\`foo\\`, \\`bar\\` not found\n(new C4: IBar); // ok, we already errored at def site\n\ninterface IFooBar extends IFoo { bar: number }\n\nclass C5 implements IFooBar {} // error: properties \\`foo\\`, \\`bar\\` not found\n(new C5: IFooBar); // ok, already errored at def site\n(new C5: IFoo); // ok, already errored at def site\n(new C5: IBar); // error: property \\`bar\\` not found (despite IBar < IFooBar)\n\nclass C6 extends C1 {}\n(new C6: IFoo); // ok, C1 implements IFoo\n\nclass C7 implements C1 {} // error: C1 is a class, expected an interface\n\n// ensure BoundT substituted appropriately\ninterface IPoly<T> { x: T }\nclass C8<T> implements IPoly<T> { x: T }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @noflow */\n\ninterface IFoo { foo: string }\n\nclass C1 implements IFoo {} // error: property \\`foo\\` not found\nclass C2 implements IFoo {\n  foo: number;\n} // error: number <~> string\nclass C3 implements IFoo {\n  foo: string;\n} // ok\n\n(new C1(): IFoo); // ok, we already errored at def site\n\ninterface IBar { bar: number }\n\nclass C4 implements IFoo, IBar {} // error: properties \\`foo\\`, \\`bar\\` not found\n(new C4(): IBar); // ok, we already errored at def site\n\ninterface IFooBar extends IFoo { bar: number }\n\nclass C5 implements IFooBar {} // error: properties \\`foo\\`, \\`bar\\` not found\n(new C5(): IFooBar); // ok, already errored at def site\n(new C5(): IFoo); // ok, already errored at def site\n(new C5(): IBar); // error: property \\`bar\\` not found (despite IBar < IFooBar)\n\nclass C6 extends C1 {}\n(new C6(): IFoo); // ok, C1 implements IFoo\n\nclass C7 implements C1 {} // error: C1 is a class, expected an interface\n\n// ensure BoundT substituted appropriately\ninterface IPoly<T> { x: T }\nclass C8<T> implements IPoly<T> {\n  x: T;\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/implements/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/implements/test.js",
    "content": "/* @noflow */\n\ninterface IFoo { foo: string }\n\nclass C1 implements IFoo {} // error: property `foo` not found\nclass C2 implements IFoo { foo: number } // error: number <~> string\nclass C3 implements IFoo { foo: string } // ok\n\n(new C1: IFoo); // ok, we already errored at def site\n\ninterface IBar { bar: number }\n\nclass C4 implements IFoo, IBar {} // error: properties `foo`, `bar` not found\n(new C4: IBar); // ok, we already errored at def site\n\ninterface IFooBar extends IFoo { bar: number }\n\nclass C5 implements IFooBar {} // error: properties `foo`, `bar` not found\n(new C5: IFooBar); // ok, already errored at def site\n(new C5: IFoo); // ok, already errored at def site\n(new C5: IBar); // error: property `bar` not found (despite IBar < IFooBar)\n\nclass C6 extends C1 {}\n(new C6: IFoo); // ok, C1 implements IFoo\n\nclass C7 implements C1 {} // error: C1 is a class, expected an interface\n\n// ensure BoundT substituted appropriately\ninterface IPoly<T> { x: T }\nclass C8<T> implements IPoly<T> { x: T }\n"
  },
  {
    "path": "tests/flow/import_type/ExportCJSDefault_Class.js",
    "content": "/**\n * @flow\n */\n\nclass ClassFoo3 {\n  givesANum(): number { return 42; }\n  static givesAFoo3(): ClassFoo3 {\n    return new ClassFoo3();\n  }\n}\n\nmodule.exports = ClassFoo3;\n"
  },
  {
    "path": "tests/flow/import_type/ExportCJSNamed_Class.js",
    "content": "/**\n * @flow\n */\n\nclass ClassFoo4 {\n  returnsANumber(): number { return 42; }\n}\n\nclass ClassFoo5 {}\n\nfunction givesAFoo4(): ClassFoo4 {\n  return new ClassFoo4();\n}\n\nfunction givesAFoo5(): ClassFoo5 {\n  return new ClassFoo5();\n}\n\nexports.ClassFoo4 = ClassFoo4;\nexports.ClassFoo5 = ClassFoo5\nexports.foo4Inst = new ClassFoo4();\nexports.foo5Inst = new ClassFoo5();\n"
  },
  {
    "path": "tests/flow/import_type/ExportDefault_Class.js",
    "content": "/**\n * @flow\n */\n\nclass ClassFoo1 {\n  returnsANumber(): number { return 42; }\n}\n\nexport default ClassFoo1;\nexport var foo1Inst = new ClassFoo1();\n"
  },
  {
    "path": "tests/flow/import_type/ExportNamed_Alias.js",
    "content": "/**\n * @flow\n */\n\nexport type AliasFoo3  = {\n  givesANum(): number\n};\nexport function givesAFoo3Obj(): AliasFoo3 {\n  return {\n    givesANum(): number { return 42; }\n  };\n};\n"
  },
  {
    "path": "tests/flow/import_type/ExportNamed_Class.js",
    "content": "/**\n * @flow\n */\n\nclass ClassFoo2 {\n  returnsANumber(): number { return 42; }\n}\n\nexport {ClassFoo2};\nexport var foo2Inst = new ClassFoo2();\n"
  },
  {
    "path": "tests/flow/import_type/ExportsANumber.js",
    "content": "/* @ flow */\n\nexport var numValue = 42;\n"
  },
  {
    "path": "tests/flow/import_type/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`ExportCJSDefault_Class.js 1`] = `\n/**\n * @flow\n */\n\nclass ClassFoo3 {\n  givesANum(): number { return 42; }\n  static givesAFoo3(): ClassFoo3 {\n    return new ClassFoo3();\n  }\n}\n\nmodule.exports = ClassFoo3;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nclass ClassFoo3 {\n  givesANum(): number {\n    return 42;\n  }\n  static givesAFoo3(): ClassFoo3 {\n    return new ClassFoo3();\n  }\n}\n\nmodule.exports = ClassFoo3;\n\n`;\n\nexports[`ExportCJSNamed_Class.js 1`] = `\n/**\n * @flow\n */\n\nclass ClassFoo4 {\n  returnsANumber(): number { return 42; }\n}\n\nclass ClassFoo5 {}\n\nfunction givesAFoo4(): ClassFoo4 {\n  return new ClassFoo4();\n}\n\nfunction givesAFoo5(): ClassFoo5 {\n  return new ClassFoo5();\n}\n\nexports.ClassFoo4 = ClassFoo4;\nexports.ClassFoo5 = ClassFoo5\nexports.foo4Inst = new ClassFoo4();\nexports.foo5Inst = new ClassFoo5();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nclass ClassFoo4 {\n  returnsANumber(): number {\n    return 42;\n  }\n}\n\nclass ClassFoo5 {}\n\nfunction givesAFoo4(): ClassFoo4 {\n  return new ClassFoo4();\n}\n\nfunction givesAFoo5(): ClassFoo5 {\n  return new ClassFoo5();\n}\n\nexports.ClassFoo4 = ClassFoo4;\nexports.ClassFoo5 = ClassFoo5;\nexports.foo4Inst = new ClassFoo4();\nexports.foo5Inst = new ClassFoo5();\n\n`;\n\nexports[`ExportDefault_Class.js 1`] = `\n/**\n * @flow\n */\n\nclass ClassFoo1 {\n  returnsANumber(): number { return 42; }\n}\n\nexport default ClassFoo1;\nexport var foo1Inst = new ClassFoo1();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nclass ClassFoo1 {\n  returnsANumber(): number {\n    return 42;\n  }\n}\n\nexport default ClassFoo1;\nexport var foo1Inst = new ClassFoo1();\n\n`;\n\nexports[`ExportNamed_Alias.js 1`] = `\n/**\n * @flow\n */\n\nexport type AliasFoo3  = {\n  givesANum(): number\n};\nexport function givesAFoo3Obj(): AliasFoo3 {\n  return {\n    givesANum(): number { return 42; }\n  };\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nexport type AliasFoo3 = {\n  givesANum(): number\n};\nexport function givesAFoo3Obj(): AliasFoo3 {\n  return {\n    givesANum(): number {\n      return 42;\n    }\n  };\n}\n\n`;\n\nexports[`ExportNamed_Class.js 1`] = `\n/**\n * @flow\n */\n\nclass ClassFoo2 {\n  returnsANumber(): number { return 42; }\n}\n\nexport {ClassFoo2};\nexport var foo2Inst = new ClassFoo2();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nclass ClassFoo2 {\n  returnsANumber(): number {\n    return 42;\n  }\n}\n\nexport { ClassFoo2 };\nexport var foo2Inst = new ClassFoo2();\n\n`;\n\nexports[`ExportsANumber.js 1`] = `\n/* @ flow */\n\nexport var numValue = 42;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @ flow */\n\nexport var numValue = 42;\n\n`;\n\nexports[`import_type.js 1`] = `\n/**\n * @flow\n */\n\n/////////////////////////////////////////////////\n// == Importing Class Type (Default Export) == //\n/////////////////////////////////////////////////\n\nimport type ClassFoo1 from \"./ExportDefault_Class\";\nimport {foo1Inst} from \"./ExportDefault_Class\";\n\nvar a1: ClassFoo1 = foo1Inst;\nvar a2: number = foo1Inst; // Error: ClassFoo1 ~> number\nnew ClassFoo1(); // Error: ClassFoo1 is not a value-identifier\n\n///////////////////////////////////////////////\n// == Importing Class Type (Named Export) == //\n///////////////////////////////////////////////\n\nimport type {ClassFoo2} from \"./ExportNamed_Class\";\nimport {foo2Inst} from \"./ExportNamed_Class\";\n\nvar b1: ClassFoo2 = foo2Inst;\nvar b2: number = foo2Inst; // Error: ClassFoo2 ~> number\nnew ClassFoo2(); // Error: ClassFoo2 is not a value-identifier\n\n/////////////////////////////////////////////////////\n// == Importing Class Type (CJS Default Export) == //\n/////////////////////////////////////////////////////\n\nimport type ClassFoo3T from \"./ExportCJSDefault_Class\";\nimport ClassFoo3 from \"./ExportCJSDefault_Class\";\nvar c1: ClassFoo3T = new ClassFoo3();\nnew ClassFoo3T(); // Error: ClassFoo3 is not a value-identifier\n\n///////////////////////////////////////////////////\n// == Importing Class Type (CJS Named Export) == //\n///////////////////////////////////////////////////\n\nimport type {ClassFoo4, ClassFoo5} from \"./ExportCJSNamed_Class\";\nimport {foo4Inst, foo5Inst} from \"./ExportCJSNamed_Class\";\n\nvar d1: ClassFoo4 = foo4Inst;\nvar d2: number = foo4Inst; // Error: ClassFoo4 ~> number\nnew ClassFoo4(); // Error: ClassFoo4 is not a value-identifier\n// TODO: this errors correctly, but the message is just 'can't resolve name'\nvar d3: typeof ClassFoo5 = foo5Inst; // Error: Can't typeof a type alias\n\n////////////////////////////////////////////\n// == Import Type Alias (Named Export) == //\n////////////////////////////////////////////\n\nimport type {AliasFoo3} from \"./ExportNamed_Alias\";\nimport {givesAFoo3Obj} from \"./ExportNamed_Alias\";\nvar e1: AliasFoo3 = givesAFoo3Obj();\nvar e2: number = givesAFoo3Obj(); // Error: AliasFoo3 ~> number\nvar e3: typeof AliasFoo3 = givesAFoo3Obj(); // Error: Can't typeof a type alias\n\n//////////////////////////////////////////////\n// == Import Type Alias (Default Export) == //\n//////////////////////////////////////////////\n\n// TODO: No support for this right now. It's most likely possible, but it's\n//       unclear how useful it is at the moment and it entails a little\n//       more work than named type exports, so I'm punting on it for now.\n\n///////////////////////////////////////////////////////\n// == Import Type With Non-Alias Compatible Value == //\n///////////////////////////////////////////////////////\n\nimport type {numValue} from \"./ExportsANumber\"; // Error: Cannot import-type a number value\n\n////////////////////////////////////////////////////////////////////////\n// == Regression Test: https://github.com/facebook/flow/issues/359 == //\n// Ensure that type bindings stay type bindings across function body  //\n// env contexts.                                                      //\n////////////////////////////////////////////////////////////////////////\n\nimport type ClassFoo6 from \"./issue-359\";\nfunction foo() {\n  ClassFoo6; // Error: Not a value binding\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\n/////////////////////////////////////////////////\n// == Importing Class Type (Default Export) == //\n/////////////////////////////////////////////////\n\nimport type ClassFoo1 from \"./ExportDefault_Class\";\nimport { foo1Inst } from \"./ExportDefault_Class\";\n\nvar a1: ClassFoo1 = foo1Inst;\nvar a2: number = foo1Inst; // Error: ClassFoo1 ~> number\nnew ClassFoo1(); // Error: ClassFoo1 is not a value-identifier\n\n///////////////////////////////////////////////\n// == Importing Class Type (Named Export) == //\n///////////////////////////////////////////////\n\nimport type { ClassFoo2 } from \"./ExportNamed_Class\";\nimport { foo2Inst } from \"./ExportNamed_Class\";\n\nvar b1: ClassFoo2 = foo2Inst;\nvar b2: number = foo2Inst; // Error: ClassFoo2 ~> number\nnew ClassFoo2(); // Error: ClassFoo2 is not a value-identifier\n\n/////////////////////////////////////////////////////\n// == Importing Class Type (CJS Default Export) == //\n/////////////////////////////////////////////////////\n\nimport type ClassFoo3T from \"./ExportCJSDefault_Class\";\nimport ClassFoo3 from \"./ExportCJSDefault_Class\";\nvar c1: ClassFoo3T = new ClassFoo3();\nnew ClassFoo3T(); // Error: ClassFoo3 is not a value-identifier\n\n///////////////////////////////////////////////////\n// == Importing Class Type (CJS Named Export) == //\n///////////////////////////////////////////////////\n\nimport type { ClassFoo4, ClassFoo5 } from \"./ExportCJSNamed_Class\";\nimport { foo4Inst, foo5Inst } from \"./ExportCJSNamed_Class\";\n\nvar d1: ClassFoo4 = foo4Inst;\nvar d2: number = foo4Inst; // Error: ClassFoo4 ~> number\nnew ClassFoo4(); // Error: ClassFoo4 is not a value-identifier\n// TODO: this errors correctly, but the message is just 'can't resolve name'\nvar d3: typeof ClassFoo5 = foo5Inst; // Error: Can't typeof a type alias\n\n////////////////////////////////////////////\n// == Import Type Alias (Named Export) == //\n////////////////////////////////////////////\n\nimport type { AliasFoo3 } from \"./ExportNamed_Alias\";\nimport { givesAFoo3Obj } from \"./ExportNamed_Alias\";\nvar e1: AliasFoo3 = givesAFoo3Obj();\nvar e2: number = givesAFoo3Obj(); // Error: AliasFoo3 ~> number\nvar e3: typeof AliasFoo3 = givesAFoo3Obj(); // Error: Can't typeof a type alias\n\n//////////////////////////////////////////////\n// == Import Type Alias (Default Export) == //\n//////////////////////////////////////////////\n\n// TODO: No support for this right now. It's most likely possible, but it's\n//       unclear how useful it is at the moment and it entails a little\n//       more work than named type exports, so I'm punting on it for now.\n\n///////////////////////////////////////////////////////\n// == Import Type With Non-Alias Compatible Value == //\n///////////////////////////////////////////////////////\n\nimport type { numValue } from \"./ExportsANumber\"; // Error: Cannot import-type a number value\n\n////////////////////////////////////////////////////////////////////////\n// == Regression Test: https://github.com/facebook/flow/issues/359 == //\n// Ensure that type bindings stay type bindings across function body  //\n// env contexts.                                                      //\n////////////////////////////////////////////////////////////////////////\n\nimport type ClassFoo6 from \"./issue-359\";\nfunction foo() {\n  ClassFoo6; // Error: Not a value binding\n}\n\n`;\n\nexports[`issue-359.js 1`] = `\n/* @flow */\n\nclass ClassFoo6 {};\n\nexport default ClassFoo6;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nclass ClassFoo6 {}\n\nexport default ClassFoo6;\n\n`;\n"
  },
  {
    "path": "tests/flow/import_type/import_type.js",
    "content": "/**\n * @flow\n */\n\n/////////////////////////////////////////////////\n// == Importing Class Type (Default Export) == //\n/////////////////////////////////////////////////\n\nimport type ClassFoo1 from \"./ExportDefault_Class\";\nimport {foo1Inst} from \"./ExportDefault_Class\";\n\nvar a1: ClassFoo1 = foo1Inst;\nvar a2: number = foo1Inst; // Error: ClassFoo1 ~> number\nnew ClassFoo1(); // Error: ClassFoo1 is not a value-identifier\n\n///////////////////////////////////////////////\n// == Importing Class Type (Named Export) == //\n///////////////////////////////////////////////\n\nimport type {ClassFoo2} from \"./ExportNamed_Class\";\nimport {foo2Inst} from \"./ExportNamed_Class\";\n\nvar b1: ClassFoo2 = foo2Inst;\nvar b2: number = foo2Inst; // Error: ClassFoo2 ~> number\nnew ClassFoo2(); // Error: ClassFoo2 is not a value-identifier\n\n/////////////////////////////////////////////////////\n// == Importing Class Type (CJS Default Export) == //\n/////////////////////////////////////////////////////\n\nimport type ClassFoo3T from \"./ExportCJSDefault_Class\";\nimport ClassFoo3 from \"./ExportCJSDefault_Class\";\nvar c1: ClassFoo3T = new ClassFoo3();\nnew ClassFoo3T(); // Error: ClassFoo3 is not a value-identifier\n\n///////////////////////////////////////////////////\n// == Importing Class Type (CJS Named Export) == //\n///////////////////////////////////////////////////\n\nimport type {ClassFoo4, ClassFoo5} from \"./ExportCJSNamed_Class\";\nimport {foo4Inst, foo5Inst} from \"./ExportCJSNamed_Class\";\n\nvar d1: ClassFoo4 = foo4Inst;\nvar d2: number = foo4Inst; // Error: ClassFoo4 ~> number\nnew ClassFoo4(); // Error: ClassFoo4 is not a value-identifier\n// TODO: this errors correctly, but the message is just 'can't resolve name'\nvar d3: typeof ClassFoo5 = foo5Inst; // Error: Can't typeof a type alias\n\n////////////////////////////////////////////\n// == Import Type Alias (Named Export) == //\n////////////////////////////////////////////\n\nimport type {AliasFoo3} from \"./ExportNamed_Alias\";\nimport {givesAFoo3Obj} from \"./ExportNamed_Alias\";\nvar e1: AliasFoo3 = givesAFoo3Obj();\nvar e2: number = givesAFoo3Obj(); // Error: AliasFoo3 ~> number\nvar e3: typeof AliasFoo3 = givesAFoo3Obj(); // Error: Can't typeof a type alias\n\n//////////////////////////////////////////////\n// == Import Type Alias (Default Export) == //\n//////////////////////////////////////////////\n\n// TODO: No support for this right now. It's most likely possible, but it's\n//       unclear how useful it is at the moment and it entails a little\n//       more work than named type exports, so I'm punting on it for now.\n\n///////////////////////////////////////////////////////\n// == Import Type With Non-Alias Compatible Value == //\n///////////////////////////////////////////////////////\n\nimport type {numValue} from \"./ExportsANumber\"; // Error: Cannot import-type a number value\n\n////////////////////////////////////////////////////////////////////////\n// == Regression Test: https://github.com/facebook/flow/issues/359 == //\n// Ensure that type bindings stay type bindings across function body  //\n// env contexts.                                                      //\n////////////////////////////////////////////////////////////////////////\n\nimport type ClassFoo6 from \"./issue-359\";\nfunction foo() {\n  ClassFoo6; // Error: Not a value binding\n}\n"
  },
  {
    "path": "tests/flow/import_type/issue-359.js",
    "content": "/* @flow */\n\nclass ClassFoo6 {};\n\nexport default ClassFoo6;\n"
  },
  {
    "path": "tests/flow/import_type/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/import_typeof/ExportCJSDefault_Class.js",
    "content": "/**\n * @flow\n */\n\nclass ClassFoo3 {\n  givesANum(): number { return 42; }\n  static givesAFoo3(): ClassFoo3 {\n    return new ClassFoo3();\n  }\n}\n\nmodule.exports = ClassFoo3;\n"
  },
  {
    "path": "tests/flow/import_typeof/ExportCJSDefault_Number.js",
    "content": "/* @flow */\n\nmodule.exports = 42;\n"
  },
  {
    "path": "tests/flow/import_typeof/ExportCJSNamed_Class.js",
    "content": "/**\n * @flow\n */\n\nclass ClassFoo4 {}\n\nexports.ClassFoo4 = ClassFoo4;\n"
  },
  {
    "path": "tests/flow/import_typeof/ExportCJSNamed_Number.js",
    "content": "/* @flow */\n\nexports.num = 42;\n"
  },
  {
    "path": "tests/flow/import_typeof/ExportDefault_Class.js",
    "content": "/**\n * @flow\n */\n\nclass ClassFoo1 {\n  returnsANumber(): number { return 42; }\n}\n\nexport default ClassFoo1;\n"
  },
  {
    "path": "tests/flow/import_typeof/ExportDefault_Number.js",
    "content": "/* @flow */\n\nexport default 42;\n"
  },
  {
    "path": "tests/flow/import_typeof/ExportNamed_Alias.js",
    "content": "/**\n * @flow\n */\n\nexport type AliasFoo3  = {\n  givesANum(): number\n};\nexport function givesAFoo3Obj(): AliasFoo3 {\n  return {\n    givesANum(): number { return 42; }\n  };\n};\n"
  },
  {
    "path": "tests/flow/import_typeof/ExportNamed_Class.js",
    "content": "/**\n * @flow\n */\n\nclass ClassFoo2 {\n  returnsANumber(): number { return 42; }\n}\n\nexport {ClassFoo2};\n"
  },
  {
    "path": "tests/flow/import_typeof/ExportNamed_Multi.js",
    "content": "// @flow\n\nexport var num = 42;\nexport var str = 'asdf';\n"
  },
  {
    "path": "tests/flow/import_typeof/ExportNamed_Number.js",
    "content": "/* @flow */\n\nexport var num = 42;\n"
  },
  {
    "path": "tests/flow/import_typeof/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`ExportCJSDefault_Class.js 1`] = `\n/**\n * @flow\n */\n\nclass ClassFoo3 {\n  givesANum(): number { return 42; }\n  static givesAFoo3(): ClassFoo3 {\n    return new ClassFoo3();\n  }\n}\n\nmodule.exports = ClassFoo3;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nclass ClassFoo3 {\n  givesANum(): number {\n    return 42;\n  }\n  static givesAFoo3(): ClassFoo3 {\n    return new ClassFoo3();\n  }\n}\n\nmodule.exports = ClassFoo3;\n\n`;\n\nexports[`ExportCJSDefault_Number.js 1`] = `\n/* @flow */\n\nmodule.exports = 42;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nmodule.exports = 42;\n\n`;\n\nexports[`ExportCJSNamed_Class.js 1`] = `\n/**\n * @flow\n */\n\nclass ClassFoo4 {}\n\nexports.ClassFoo4 = ClassFoo4;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nclass ClassFoo4 {}\n\nexports.ClassFoo4 = ClassFoo4;\n\n`;\n\nexports[`ExportCJSNamed_Number.js 1`] = `\n/* @flow */\n\nexports.num = 42;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nexports.num = 42;\n\n`;\n\nexports[`ExportDefault_Class.js 1`] = `\n/**\n * @flow\n */\n\nclass ClassFoo1 {\n  returnsANumber(): number { return 42; }\n}\n\nexport default ClassFoo1;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nclass ClassFoo1 {\n  returnsANumber(): number {\n    return 42;\n  }\n}\n\nexport default ClassFoo1;\n\n`;\n\nexports[`ExportDefault_Number.js 1`] = `\n/* @flow */\n\nexport default 42;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nexport default 42;\n\n`;\n\nexports[`ExportNamed_Alias.js 1`] = `\n/**\n * @flow\n */\n\nexport type AliasFoo3  = {\n  givesANum(): number\n};\nexport function givesAFoo3Obj(): AliasFoo3 {\n  return {\n    givesANum(): number { return 42; }\n  };\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nexport type AliasFoo3 = {\n  givesANum(): number\n};\nexport function givesAFoo3Obj(): AliasFoo3 {\n  return {\n    givesANum(): number {\n      return 42;\n    }\n  };\n}\n\n`;\n\nexports[`ExportNamed_Class.js 1`] = `\n/**\n * @flow\n */\n\nclass ClassFoo2 {\n  returnsANumber(): number { return 42; }\n}\n\nexport {ClassFoo2};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nclass ClassFoo2 {\n  returnsANumber(): number {\n    return 42;\n  }\n}\n\nexport { ClassFoo2 };\n\n`;\n\nexports[`ExportNamed_Multi.js 1`] = `\n// @flow\n\nexport var num = 42;\nexport var str = 'asdf';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport var num = 42;\nexport var str = \"asdf\";\n\n`;\n\nexports[`ExportNamed_Number.js 1`] = `\n/* @flow */\n\nexport var num = 42;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nexport var num = 42;\n\n`;\n\nexports[`import_typeof.js 1`] = `\n/**\n * @flow\n */\n\n///////////////////////////////////////////////////\n// == Importing Class Typeof (Default Export) == //\n///////////////////////////////////////////////////\n\nimport typeof ClassFoo1T from \"./ExportDefault_Class\";\nimport ClassFoo1 from \"./ExportDefault_Class\";\n\nvar a1: ClassFoo1T = ClassFoo1;\nvar a2: ClassFoo1T = new ClassFoo1(); // Error: ClassFoo1 (inst) ~> ClassFoo1 (class)\nnew ClassFoo1T(); // Error: ClassFoo1T is not bound to a value\n\n/////////////////////////////////////////////////\n// == Importing Class Typeof (Named Export) == //\n/////////////////////////////////////////////////\n\nimport typeof {ClassFoo2 as ClassFoo2T} from \"./ExportNamed_Class\";\nimport {ClassFoo2} from \"./ExportNamed_Class\";\n\nvar b1: ClassFoo2T = ClassFoo2;\nvar b2: ClassFoo2T = new ClassFoo2(); // Error: ClassFoo2 (inst) ~> ClassFoo2 (class)\nnew ClassFoo2T(); // Error: ClassFoo2T is not bound to a value\n\n///////////////////////////////////////////////////////\n// == Importing Class Typeof (CJS Default Export) == //\n///////////////////////////////////////////////////////\n\nimport typeof ClassFoo3T from \"./ExportCJSDefault_Class\";\nimport ClassFoo3 from \"./ExportCJSDefault_Class\";\n\nvar c1: ClassFoo3T = ClassFoo3;\nvar c2: ClassFoo3T = new ClassFoo3(); // Error: ClassFoo3 (inst) ~> ClassFoo3 (class)\n\n/////////////////////////////////////////////////////\n// == Importing Class Typeof (CJS Named Export) == //\n/////////////////////////////////////////////////////\n\nimport typeof {ClassFoo4 as ClassFoo4T} from \"./ExportCJSNamed_Class\";\nimport {ClassFoo4} from \"./ExportCJSNamed_Class\";\n\nvar d1: ClassFoo4T = ClassFoo4;\nvar d2: ClassFoo4T = new ClassFoo4(); // Error: ClassFoo4 (inst) ~> ClassFoo4 (class)\n\n//////////////////////////////////////////////\n// == Import Typeof Alias (Named Export) == //\n//////////////////////////////////////////////\n\nimport typeof {AliasFoo3} from \"./ExportNamed_Alias\"; // Error: Can't \\`import typeof\\` type aliases!\n\n////////////////////////////////////////////////\n// == Import Typeof Alias (Default Export) == //\n////////////////////////////////////////////////\n\n// TODO: No support for this right now. It's most likely possible, but it's\n//       unclear how useful it is at the moment and it entails a little\n//       more work than named type exports, so I'm punting on it for now.\n\n///////////////////////////////////////////////////////////////\n// == Import Typeof With Non-Class Value (Default Export) == //\n///////////////////////////////////////////////////////////////\n\nimport typeof num_default from \"./ExportDefault_Number\";\n\nvar f1: num_default = 42;\nvar f2: num_default = 'asdf'; // Error: string ~> number\n\n/////////////////////////////////////////////////////////////\n// == Import Typeof With Non-Class Value (Named Export) == //\n/////////////////////////////////////////////////////////////\n\nimport typeof {num as num_named} from \"./ExportNamed_Number\";\n\nvar g1: num_named = 42;\nvar g2: num_named = 'asdf'; // Error: string ~> number\n\n///////////////////////////////////////////////////////////////////\n// == Import Typeof With Non-Class Value (CJS Default Export) == //\n///////////////////////////////////////////////////////////////////\n\nimport typeof num_cjs_default from \"./ExportCJSDefault_Number\";\n\nvar h1: num_cjs_default = 42;\nvar h2: num_cjs_default = 'asdf'; // Error: string ~> number\n\n/////////////////////////////////////////////////////////////////\n// == Import Typeof With Non-Class Value (CJS Named Export) == //\n/////////////////////////////////////////////////////////////////\n\nimport typeof {num as num_cjs_named} from \"./ExportCJSNamed_Number\";\n\nvar i1: num_cjs_named = 42;\nvar i2: num_cjs_named = 'asdf'; // Error: string ~> number\n\n///////////////////////////////////////////////\n// == Import Typeof ModuleNamespaceObject == //\n///////////////////////////////////////////////\n\nimport typeof * as ModuleNSObjT from \"./ExportNamed_Multi\";\nvar j1: ModuleNSObjT = {num: 42, str: 'asdf'};\nvar j2: ModuleNSObjT = {num: 42, str: 42}; // Error: number ~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\n///////////////////////////////////////////////////\n// == Importing Class Typeof (Default Export) == //\n///////////////////////////////////////////////////\n\nimport typeof ClassFoo1T from \"./ExportDefault_Class\";\nimport ClassFoo1 from \"./ExportDefault_Class\";\n\nvar a1: ClassFoo1T = ClassFoo1;\nvar a2: ClassFoo1T = new ClassFoo1(); // Error: ClassFoo1 (inst) ~> ClassFoo1 (class)\nnew ClassFoo1T(); // Error: ClassFoo1T is not bound to a value\n\n/////////////////////////////////////////////////\n// == Importing Class Typeof (Named Export) == //\n/////////////////////////////////////////////////\n\nimport typeof { ClassFoo2 as ClassFoo2T } from \"./ExportNamed_Class\";\nimport { ClassFoo2 } from \"./ExportNamed_Class\";\n\nvar b1: ClassFoo2T = ClassFoo2;\nvar b2: ClassFoo2T = new ClassFoo2(); // Error: ClassFoo2 (inst) ~> ClassFoo2 (class)\nnew ClassFoo2T(); // Error: ClassFoo2T is not bound to a value\n\n///////////////////////////////////////////////////////\n// == Importing Class Typeof (CJS Default Export) == //\n///////////////////////////////////////////////////////\n\nimport typeof ClassFoo3T from \"./ExportCJSDefault_Class\";\nimport ClassFoo3 from \"./ExportCJSDefault_Class\";\n\nvar c1: ClassFoo3T = ClassFoo3;\nvar c2: ClassFoo3T = new ClassFoo3(); // Error: ClassFoo3 (inst) ~> ClassFoo3 (class)\n\n/////////////////////////////////////////////////////\n// == Importing Class Typeof (CJS Named Export) == //\n/////////////////////////////////////////////////////\n\nimport typeof { ClassFoo4 as ClassFoo4T } from \"./ExportCJSNamed_Class\";\nimport { ClassFoo4 } from \"./ExportCJSNamed_Class\";\n\nvar d1: ClassFoo4T = ClassFoo4;\nvar d2: ClassFoo4T = new ClassFoo4(); // Error: ClassFoo4 (inst) ~> ClassFoo4 (class)\n\n//////////////////////////////////////////////\n// == Import Typeof Alias (Named Export) == //\n//////////////////////////////////////////////\n\nimport typeof { AliasFoo3 } from \"./ExportNamed_Alias\"; // Error: Can't \\`import typeof\\` type aliases!\n\n////////////////////////////////////////////////\n// == Import Typeof Alias (Default Export) == //\n////////////////////////////////////////////////\n\n// TODO: No support for this right now. It's most likely possible, but it's\n//       unclear how useful it is at the moment and it entails a little\n//       more work than named type exports, so I'm punting on it for now.\n\n///////////////////////////////////////////////////////////////\n// == Import Typeof With Non-Class Value (Default Export) == //\n///////////////////////////////////////////////////////////////\n\nimport typeof num_default from \"./ExportDefault_Number\";\n\nvar f1: num_default = 42;\nvar f2: num_default = \"asdf\"; // Error: string ~> number\n\n/////////////////////////////////////////////////////////////\n// == Import Typeof With Non-Class Value (Named Export) == //\n/////////////////////////////////////////////////////////////\n\nimport typeof { num as num_named } from \"./ExportNamed_Number\";\n\nvar g1: num_named = 42;\nvar g2: num_named = \"asdf\"; // Error: string ~> number\n\n///////////////////////////////////////////////////////////////////\n// == Import Typeof With Non-Class Value (CJS Default Export) == //\n///////////////////////////////////////////////////////////////////\n\nimport typeof num_cjs_default from \"./ExportCJSDefault_Number\";\n\nvar h1: num_cjs_default = 42;\nvar h2: num_cjs_default = \"asdf\"; // Error: string ~> number\n\n/////////////////////////////////////////////////////////////////\n// == Import Typeof With Non-Class Value (CJS Named Export) == //\n/////////////////////////////////////////////////////////////////\n\nimport typeof { num as num_cjs_named } from \"./ExportCJSNamed_Number\";\n\nvar i1: num_cjs_named = 42;\nvar i2: num_cjs_named = \"asdf\"; // Error: string ~> number\n\n///////////////////////////////////////////////\n// == Import Typeof ModuleNamespaceObject == //\n///////////////////////////////////////////////\n\nimport typeof * as ModuleNSObjT from \"./ExportNamed_Multi\";\nvar j1: ModuleNSObjT = { num: 42, str: \"asdf\" };\nvar j2: ModuleNSObjT = { num: 42, str: 42 }; // Error: number ~> string\n\n`;\n"
  },
  {
    "path": "tests/flow/import_typeof/import_typeof.js",
    "content": "/**\n * @flow\n */\n\n///////////////////////////////////////////////////\n// == Importing Class Typeof (Default Export) == //\n///////////////////////////////////////////////////\n\nimport typeof ClassFoo1T from \"./ExportDefault_Class\";\nimport ClassFoo1 from \"./ExportDefault_Class\";\n\nvar a1: ClassFoo1T = ClassFoo1;\nvar a2: ClassFoo1T = new ClassFoo1(); // Error: ClassFoo1 (inst) ~> ClassFoo1 (class)\nnew ClassFoo1T(); // Error: ClassFoo1T is not bound to a value\n\n/////////////////////////////////////////////////\n// == Importing Class Typeof (Named Export) == //\n/////////////////////////////////////////////////\n\nimport typeof {ClassFoo2 as ClassFoo2T} from \"./ExportNamed_Class\";\nimport {ClassFoo2} from \"./ExportNamed_Class\";\n\nvar b1: ClassFoo2T = ClassFoo2;\nvar b2: ClassFoo2T = new ClassFoo2(); // Error: ClassFoo2 (inst) ~> ClassFoo2 (class)\nnew ClassFoo2T(); // Error: ClassFoo2T is not bound to a value\n\n///////////////////////////////////////////////////////\n// == Importing Class Typeof (CJS Default Export) == //\n///////////////////////////////////////////////////////\n\nimport typeof ClassFoo3T from \"./ExportCJSDefault_Class\";\nimport ClassFoo3 from \"./ExportCJSDefault_Class\";\n\nvar c1: ClassFoo3T = ClassFoo3;\nvar c2: ClassFoo3T = new ClassFoo3(); // Error: ClassFoo3 (inst) ~> ClassFoo3 (class)\n\n/////////////////////////////////////////////////////\n// == Importing Class Typeof (CJS Named Export) == //\n/////////////////////////////////////////////////////\n\nimport typeof {ClassFoo4 as ClassFoo4T} from \"./ExportCJSNamed_Class\";\nimport {ClassFoo4} from \"./ExportCJSNamed_Class\";\n\nvar d1: ClassFoo4T = ClassFoo4;\nvar d2: ClassFoo4T = new ClassFoo4(); // Error: ClassFoo4 (inst) ~> ClassFoo4 (class)\n\n//////////////////////////////////////////////\n// == Import Typeof Alias (Named Export) == //\n//////////////////////////////////////////////\n\nimport typeof {AliasFoo3} from \"./ExportNamed_Alias\"; // Error: Can't `import typeof` type aliases!\n\n////////////////////////////////////////////////\n// == Import Typeof Alias (Default Export) == //\n////////////////////////////////////////////////\n\n// TODO: No support for this right now. It's most likely possible, but it's\n//       unclear how useful it is at the moment and it entails a little\n//       more work than named type exports, so I'm punting on it for now.\n\n///////////////////////////////////////////////////////////////\n// == Import Typeof With Non-Class Value (Default Export) == //\n///////////////////////////////////////////////////////////////\n\nimport typeof num_default from \"./ExportDefault_Number\";\n\nvar f1: num_default = 42;\nvar f2: num_default = 'asdf'; // Error: string ~> number\n\n/////////////////////////////////////////////////////////////\n// == Import Typeof With Non-Class Value (Named Export) == //\n/////////////////////////////////////////////////////////////\n\nimport typeof {num as num_named} from \"./ExportNamed_Number\";\n\nvar g1: num_named = 42;\nvar g2: num_named = 'asdf'; // Error: string ~> number\n\n///////////////////////////////////////////////////////////////////\n// == Import Typeof With Non-Class Value (CJS Default Export) == //\n///////////////////////////////////////////////////////////////////\n\nimport typeof num_cjs_default from \"./ExportCJSDefault_Number\";\n\nvar h1: num_cjs_default = 42;\nvar h2: num_cjs_default = 'asdf'; // Error: string ~> number\n\n/////////////////////////////////////////////////////////////////\n// == Import Typeof With Non-Class Value (CJS Named Export) == //\n/////////////////////////////////////////////////////////////////\n\nimport typeof {num as num_cjs_named} from \"./ExportCJSNamed_Number\";\n\nvar i1: num_cjs_named = 42;\nvar i2: num_cjs_named = 'asdf'; // Error: string ~> number\n\n///////////////////////////////////////////////\n// == Import Typeof ModuleNamespaceObject == //\n///////////////////////////////////////////////\n\nimport typeof * as ModuleNSObjT from \"./ExportNamed_Multi\";\nvar j1: ModuleNSObjT = {num: 42, str: 'asdf'};\nvar j2: ModuleNSObjT = {num: 42, str: 42}; // Error: number ~> string\n"
  },
  {
    "path": "tests/flow/import_typeof/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/include/foo/batman/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`baz.js 1`] = `\n/* @flow */\n\nvar x: number = \"not a number\" // Error string ~> number\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar x: number = \"not a number\"; // Error string ~> number\n\n`;\n"
  },
  {
    "path": "tests/flow/include/foo/batman/baz.js",
    "content": "/* @flow */\n\nvar x: number = \"not a number\" // Error string ~> number\n"
  },
  {
    "path": "tests/flow/include/foo/batman/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/include/included/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n(123: string);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n(123: string);\n\n`;\n"
  },
  {
    "path": "tests/flow/include/included/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/include/included/test.js",
    "content": "(123: string);\n"
  },
  {
    "path": "tests/flow/include_suppressed/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n// @flow\n\n(123: string); // Normal error\n\n// $FlowFixMe\n(123: string); // Suppressed error\n\n// $FlowFixMe - unused suppression comment\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n(123: string); // Normal error\n\n// $FlowFixMe\n(123: string); // Suppressed error\n\n// $FlowFixMe - unused suppression comment\n\n`;\n"
  },
  {
    "path": "tests/flow/include_suppressed/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/include_suppressed/test.js",
    "content": "// @flow\n\n(123: string); // Normal error\n\n// $FlowFixMe\n(123: string); // Suppressed error\n\n// $FlowFixMe - unused suppression comment\n"
  },
  {
    "path": "tests/flow/incremental/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`a.js 1`] = `\n/* @providesModule IncrModuleA */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule IncrModuleA */\n\n`;\n\nexports[`b.js 1`] = `\n/* @providesModule IncrModuleB\n   @flow\n*/\n\nvar A = require('IncrModuleA');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule IncrModuleB\n   @flow\n*/\n\nvar A = require(\"IncrModuleA\");\n\n`;\n\nexports[`dup_a.js 1`] = `\n/* @providesModule IncrModuleA */\n\nvar x:string = 0;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule IncrModuleA */\n\nvar x: string = 0;\n\n`;\n"
  },
  {
    "path": "tests/flow/incremental/a.js",
    "content": "/* @providesModule IncrModuleA */\n"
  },
  {
    "path": "tests/flow/incremental/b.js",
    "content": "/* @providesModule IncrModuleB\n   @flow\n*/\n\nvar A = require('IncrModuleA');\n"
  },
  {
    "path": "tests/flow/incremental/dup_a.js",
    "content": "/* @providesModule IncrModuleA */\n\nvar x:string = 0;\n"
  },
  {
    "path": "tests/flow/incremental/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/incremental_basic/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`a.js 1`] = `\n// @flow\nvar a: string = 0;\nmodule.exports = a;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nvar a: string = 0;\nmodule.exports = a;\n\n`;\n\nexports[`b.js 1`] = `\n// @flow\nvar a = require('./a');\nvar b: number = a;\nmodule.exports = b;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nvar a = require(\"./a\");\nvar b: number = a;\nmodule.exports = b;\n\n`;\n\nexports[`c.js 1`] = `\n// @flow\nvar b = require('./b');\nvar c: string = b;\nmodule.exports = c;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nvar b = require(\"./b\");\nvar c: string = b;\nmodule.exports = c;\n\n`;\n"
  },
  {
    "path": "tests/flow/incremental_basic/a.js",
    "content": "// @flow\nvar a: string = 0;\nmodule.exports = a;\n"
  },
  {
    "path": "tests/flow/incremental_basic/b.js",
    "content": "// @flow\nvar a = require('./a');\nvar b: number = a;\nmodule.exports = b;\n"
  },
  {
    "path": "tests/flow/incremental_basic/c.js",
    "content": "// @flow\nvar b = require('./b');\nvar c: string = b;\nmodule.exports = c;\n"
  },
  {
    "path": "tests/flow/incremental_basic/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/incremental_basic/tmp1/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`b.js 1`] = `\n// @flow\nvar a = require('./a');\nvar b = a;\nmodule.exports = b;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nvar a = require(\"./a\");\nvar b = a;\nmodule.exports = b;\n\n`;\n"
  },
  {
    "path": "tests/flow/incremental_basic/tmp1/b.js",
    "content": "// @flow\nvar a = require('./a');\nvar b = a;\nmodule.exports = b;\n"
  },
  {
    "path": "tests/flow/incremental_basic/tmp1/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/incremental_basic/tmp2/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`a.js 1`] = `\n// @flow\nvar a = 0;\nmodule.exports = a;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nvar a = 0;\nmodule.exports = a;\n\n`;\n"
  },
  {
    "path": "tests/flow/incremental_basic/tmp2/a.js",
    "content": "// @flow\nvar a = 0;\nmodule.exports = a;\n"
  },
  {
    "path": "tests/flow/incremental_basic/tmp2/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/incremental_basic/tmp3/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`b.js 1`] = `\n// @flow\nvar a = require('./a');\nvar b: number = a;\nmodule.exports = b;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nvar a = require(\"./a\");\nvar b: number = a;\nmodule.exports = b;\n\n`;\n"
  },
  {
    "path": "tests/flow/incremental_basic/tmp3/b.js",
    "content": "// @flow\nvar a = require('./a');\nvar b: number = a;\nmodule.exports = b;\n"
  },
  {
    "path": "tests/flow/incremental_basic/tmp3/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/incremental_cycle/A.js",
    "content": "// @flow\n\nclass A {\n  b: number;\n  c: string;\n}\n\nmodule.exports = A;\n"
  },
  {
    "path": "tests/flow/incremental_cycle/B.js",
    "content": "// @flow\nvar A = require ('./A');\nimport type C from './C';\n\nclass B extends A {\n  c: C;\n}\n\nmodule.exports = B;\n"
  },
  {
    "path": "tests/flow/incremental_cycle/C.js",
    "content": "// @flow\nvar A = require ('./A');\nimport type B from './B';\n\nclass C extends A {\n  b: B;\n}\n\nmodule.exports = C;\n"
  },
  {
    "path": "tests/flow/incremental_cycle/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\n// @flow\n\nclass A {\n  b: number;\n  c: string;\n}\n\nmodule.exports = A;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nclass A {\n  b: number;\n  c: string;\n}\n\nmodule.exports = A;\n\n`;\n\nexports[`B.js 1`] = `\n// @flow\nvar A = require ('./A');\nimport type C from './C';\n\nclass B extends A {\n  c: C;\n}\n\nmodule.exports = B;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nvar A = require(\"./A\");\nimport type C from \"./C\";\n\nclass B extends A {\n  c: C;\n}\n\nmodule.exports = B;\n\n`;\n\nexports[`C.js 1`] = `\n// @flow\nvar A = require ('./A');\nimport type B from './B';\n\nclass C extends A {\n  b: B;\n}\n\nmodule.exports = C;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nvar A = require(\"./A\");\nimport type B from \"./B\";\n\nclass C extends A {\n  b: B;\n}\n\nmodule.exports = C;\n\n`;\n"
  },
  {
    "path": "tests/flow/incremental_cycle/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/incremental_cycle/tmp1/B.js",
    "content": "// @flow\nvar A = require ('./A');\nimport type C from './C';\n\nexport type B = string;\n"
  },
  {
    "path": "tests/flow/incremental_cycle/tmp1/C.js",
    "content": "// @flow\nvar A = require ('./A');\nimport type { B } from './B'\n\nclass C extends A {\n  b: B;\n}\n\nmodule.exports = C;\n"
  },
  {
    "path": "tests/flow/incremental_cycle/tmp1/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`B.js 1`] = `\n// @flow\nvar A = require ('./A');\nimport type C from './C';\n\nexport type B = string;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nvar A = require(\"./A\");\nimport type C from \"./C\";\n\nexport type B = string;\n\n`;\n\nexports[`C.js 1`] = `\n// @flow\nvar A = require ('./A');\nimport type { B } from './B'\n\nclass C extends A {\n  b: B;\n}\n\nmodule.exports = C;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nvar A = require(\"./A\");\nimport type { B } from \"./B\";\n\nclass C extends A {\n  b: B;\n}\n\nmodule.exports = C;\n\n`;\n"
  },
  {
    "path": "tests/flow/incremental_cycle/tmp1/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/incremental_cycle/tmp2/B.js",
    "content": "// @flow\nvar A = require ('./A');\n//import type C from './C';\n\nexport type B = string;\n"
  },
  {
    "path": "tests/flow/incremental_cycle/tmp2/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`B.js 1`] = `\n// @flow\nvar A = require ('./A');\n//import type C from './C';\n\nexport type B = string;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nvar A = require(\"./A\");\n//import type C from './C';\n\nexport type B = string;\n\n`;\n"
  },
  {
    "path": "tests/flow/incremental_cycle/tmp2/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/incremental_cycle/tmp3/B.js",
    "content": "// @flow\nvar A = require ('./A');\nimport type C from './C';\n\n\nexport type B = string;\n"
  },
  {
    "path": "tests/flow/incremental_cycle/tmp3/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`B.js 1`] = `\n// @flow\nvar A = require ('./A');\nimport type C from './C';\n\n\nexport type B = string;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nvar A = require(\"./A\");\nimport type C from \"./C\";\n\nexport type B = string;\n\n`;\n"
  },
  {
    "path": "tests/flow/incremental_cycle/tmp3/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/incremental_cycle_break/A.js",
    "content": "/**\n * @providesModule A\n * @flow\n */\n\nrequire('B');\n"
  },
  {
    "path": "tests/flow/incremental_cycle_break/B.js",
    "content": "/**\n * @providesModule B\n * @flow\n */\nrequire('A');\n"
  },
  {
    "path": "tests/flow/incremental_cycle_break/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\n/**\n * @providesModule A\n * @flow\n */\n\nrequire('B');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule A\n * @flow\n */\n\nrequire(\"B\");\n\n`;\n\nexports[`B.js 1`] = `\n/**\n * @providesModule B\n * @flow\n */\nrequire('A');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule B\n * @flow\n */\nrequire(\"A\");\n\n`;\n"
  },
  {
    "path": "tests/flow/incremental_cycle_break/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/incremental_cycle_break/tmp1/A.js",
    "content": ""
  },
  {
    "path": "tests/flow/incremental_cycle_break/tmp1/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n`;\n"
  },
  {
    "path": "tests/flow/incremental_cycle_break/tmp1/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/incremental_delete/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`a.js 1`] = `\n// @flow\nvar a: string = 0;\nmodule.exports = a;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nvar a: string = 0;\nmodule.exports = a;\n\n`;\n\nexports[`b.js 1`] = `\n// @flow\nvar a = require('./a');\nvar b: number = a;\nmodule.exports = b;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nvar a = require(\"./a\");\nvar b: number = a;\nmodule.exports = b;\n\n`;\n\nexports[`c.js 1`] = `\n// @flow\nvar b = require('./b');\nvar c: string = b;\nmodule.exports = c;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nvar b = require(\"./b\");\nvar c: string = b;\nmodule.exports = c;\n\n`;\n\nexports[`dupe1.js 1`] = `\n/**\n * Dupe provider 1/2\n * @providesModule Dupe\n * @flow\n */\nmodule.exports = \"dupe1\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * Dupe provider 1/2\n * @providesModule Dupe\n * @flow\n */\nmodule.exports = \"dupe1\";\n\n`;\n\nexports[`dupe2.js 1`] = `\n/**\n * Dupe provider 2/2\n * @providesModule Dupe\n * @flow\n */\nmodule.exports = \"dupe2\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * Dupe provider 2/2\n * @providesModule Dupe\n * @flow\n */\nmodule.exports = \"dupe2\";\n\n`;\n\nexports[`requires_dupe.js 1`] = `\n/**\n * depends on doubly-provided module\n * @flow\n */\nvar dupe = require('Dupe');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * depends on doubly-provided module\n * @flow\n */\nvar dupe = require(\"Dupe\");\n\n`;\n\nexports[`requires_unchecked.js 1`] = `\n/**\n * depends on an unchecked module, which will be deleted\n * @flow\n */\nvar unchecked = require('Unchecked');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * depends on an unchecked module, which will be deleted\n * @flow\n */\nvar unchecked = require(\"Unchecked\");\n\n`;\n\nexports[`unchecked.js 1`] = `\n/**\n * Not a flow module.\n * @providesModule Unchecked\n */\nmodule.exports = \"unchecked\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * Not a flow module.\n * @providesModule Unchecked\n */\nmodule.exports = \"unchecked\";\n\n`;\n"
  },
  {
    "path": "tests/flow/incremental_delete/a.js",
    "content": "// @flow\nvar a: string = 0;\nmodule.exports = a;\n"
  },
  {
    "path": "tests/flow/incremental_delete/b.js",
    "content": "// @flow\nvar a = require('./a');\nvar b: number = a;\nmodule.exports = b;\n"
  },
  {
    "path": "tests/flow/incremental_delete/c.js",
    "content": "// @flow\nvar b = require('./b');\nvar c: string = b;\nmodule.exports = c;\n"
  },
  {
    "path": "tests/flow/incremental_delete/dupe1.js",
    "content": "/**\n * Dupe provider 1/2\n * @providesModule Dupe\n * @flow\n */\nmodule.exports = \"dupe1\";\n"
  },
  {
    "path": "tests/flow/incremental_delete/dupe2.js",
    "content": "/**\n * Dupe provider 2/2\n * @providesModule Dupe\n * @flow\n */\nmodule.exports = \"dupe2\";\n"
  },
  {
    "path": "tests/flow/incremental_delete/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/incremental_delete/requires_dupe.js",
    "content": "/**\n * depends on doubly-provided module\n * @flow\n */\nvar dupe = require('Dupe');\n"
  },
  {
    "path": "tests/flow/incremental_delete/requires_unchecked.js",
    "content": "/**\n * depends on an unchecked module, which will be deleted\n * @flow\n */\nvar unchecked = require('Unchecked');\n"
  },
  {
    "path": "tests/flow/incremental_delete/unchecked.js",
    "content": "/**\n * Not a flow module.\n * @providesModule Unchecked\n */\nmodule.exports = \"unchecked\";\n"
  },
  {
    "path": "tests/flow/incremental_duplicate_delete/A.js",
    "content": "/**\n * @providesModule A\n * @flow\n */\n"
  },
  {
    "path": "tests/flow/incremental_duplicate_delete/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\n/**\n * @providesModule A\n * @flow\n */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule A\n * @flow\n */\n\n`;\n"
  },
  {
    "path": "tests/flow/incremental_duplicate_delete/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/incremental_haste_blacklist/A.js",
    "content": "/* @flow */\n"
  },
  {
    "path": "tests/flow/incremental_haste_blacklist/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\n/* @flow */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n`;\n\nexports[`index.js 1`] = `\n/* @flow */\nrequire('A');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nrequire(\"A\");\n\n`;\n"
  },
  {
    "path": "tests/flow/incremental_haste_blacklist/index.js",
    "content": "/* @flow */\nrequire('A');\n"
  },
  {
    "path": "tests/flow/incremental_haste_blacklist/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/incremental_haste_name_reducers_duplicate/A.js",
    "content": "/* @flow */\n"
  },
  {
    "path": "tests/flow/incremental_haste_name_reducers_duplicate/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\n/* @flow */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n`;\n\nexports[`index.js 1`] = `\n/* @flow */\nrequire('A');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nrequire(\"A\");\n\n`;\n"
  },
  {
    "path": "tests/flow/incremental_haste_name_reducers_duplicate/index.js",
    "content": "/* @flow */\nrequire('A');\n"
  },
  {
    "path": "tests/flow/incremental_haste_name_reducers_duplicate/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/incremental_json/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n/**\n * @flow\n */\nvar data = require('./data');\nvar x: number = data.x;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\nvar data = require(\"./data\");\nvar x: number = data.x;\n\n`;\n"
  },
  {
    "path": "tests/flow/incremental_json/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/incremental_json/test.js",
    "content": "/**\n * @flow\n */\nvar data = require('./data');\nvar x: number = data.x;\n"
  },
  {
    "path": "tests/flow/incremental_mixed_naming_cycle/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`a.js 1`] = `\n/**\n * @providesModule A\n * @flow\n */\n\n(require('./b'): void);\n(require('C'): void);\n\nmodule.exports = 'A';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule A\n * @flow\n */\n\n(require(\"./b\"): void);\n(require(\"C\"): void);\n\nmodule.exports = \"A\";\n\n`;\n\nexports[`b.js 1`] = `\n/**\n * @providesModule B\n * @flow\n */\n\n(require('A'): void);\n(require('D'): void);\n\nmodule.exports = 'B';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule B\n * @flow\n */\n\n(require(\"A\"): void);\n(require(\"D\"): void);\n\nmodule.exports = \"B\";\n\n`;\n\nexports[`c.js 1`] = `\n/**\n * @providesModule C\n * @flow\n */\n\nrequire('Root');\n(require('./b'): void);\n\nmodule.exports = 'C';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule C\n * @flow\n */\n\nrequire(\"Root\");\n(require(\"./b\"): void);\n\nmodule.exports = \"C\";\n\n`;\n\nexports[`d.js 1`] = `\n/**\n * @providesModule D\n * @flow\n */\n\n(require('./b'): void);\n\nmodule.exports = 'D';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule D\n * @flow\n */\n\n(require(\"./b\"): void);\n\nmodule.exports = \"D\";\n\n`;\n\nexports[`root.js 1`] = `\n/**\n * @providesModule Root\n * @flow\n */\n\nmodule.exports = 'Root';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule Root\n * @flow\n */\n\nmodule.exports = \"Root\";\n\n`;\n"
  },
  {
    "path": "tests/flow/incremental_mixed_naming_cycle/a.js",
    "content": "/**\n * @providesModule A\n * @flow\n */\n\n(require('./b'): void);\n(require('C'): void);\n\nmodule.exports = 'A';\n"
  },
  {
    "path": "tests/flow/incremental_mixed_naming_cycle/b.js",
    "content": "/**\n * @providesModule B\n * @flow\n */\n\n(require('A'): void);\n(require('D'): void);\n\nmodule.exports = 'B';\n"
  },
  {
    "path": "tests/flow/incremental_mixed_naming_cycle/c.js",
    "content": "/**\n * @providesModule C\n * @flow\n */\n\nrequire('Root');\n(require('./b'): void);\n\nmodule.exports = 'C';\n"
  },
  {
    "path": "tests/flow/incremental_mixed_naming_cycle/d.js",
    "content": "/**\n * @providesModule D\n * @flow\n */\n\n(require('./b'): void);\n\nmodule.exports = 'D';\n"
  },
  {
    "path": "tests/flow/incremental_mixed_naming_cycle/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/incremental_mixed_naming_cycle/root.js",
    "content": "/**\n * @providesModule Root\n * @flow\n */\n\nmodule.exports = 'Root';\n"
  },
  {
    "path": "tests/flow/incremental_mixed_naming_cycle/tmp1/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`root.js 1`] = `\n/**\n * @providesModule Root\n * @flow\n */\n\n// trivial edit (adding this comment)\nmodule.exports = 'Root';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule Root\n * @flow\n */\n\n// trivial edit (adding this comment)\nmodule.exports = \"Root\";\n\n`;\n"
  },
  {
    "path": "tests/flow/incremental_mixed_naming_cycle/tmp1/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/incremental_mixed_naming_cycle/tmp1/root.js",
    "content": "/**\n * @providesModule Root\n * @flow\n */\n\n// trivial edit (adding this comment)\nmodule.exports = 'Root';\n"
  },
  {
    "path": "tests/flow/incremental_non_flow_move/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`foo.js 1`] = `\n/*\n * @providesModule Foo\n */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/*\n * @providesModule Foo\n */\n\n`;\n\nexports[`test.js 1`] = `\n/**\n * @flow\n */\n\nrequire('Foo');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nrequire(\"Foo\");\n\n`;\n"
  },
  {
    "path": "tests/flow/incremental_non_flow_move/foo.js",
    "content": "/*\n * @providesModule Foo\n */\n"
  },
  {
    "path": "tests/flow/incremental_non_flow_move/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/incremental_non_flow_move/test.js",
    "content": "/**\n * @flow\n */\n\nrequire('Foo');\n"
  },
  {
    "path": "tests/flow/incremental_path/dir/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`a.js 1`] = `\n// @flow\n(require('b'): boolean);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n(require(\"b\"): boolean);\n\n`;\n"
  },
  {
    "path": "tests/flow/incremental_path/dir/a.js",
    "content": "// @flow\n(require('b'): boolean);\n"
  },
  {
    "path": "tests/flow/incremental_path/dir/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/indexer/A.js",
    "content": "// No indexer should be fine\nfunction foo0(): {} {\n  return { foo: \"bar\" }\n}\n\n// Matching indexer should be fine\nfunction foo1(): {[key: string]: string} {\n  return { foo: \"bar\" }\n}\n\n// Indexer with different key type is an error when it matches\nfunction foo2(): {[key: number]: string} {\n  return { foo: \"bar\" }\n}\n\n// Matching indexer with different value type is an error\nfunction foo3(): {[key: string]: number} {\n  return { foo: \"bar\" }\n}\n\n// Indexer with different key type and different value type is twice an error\nfunction foo4(): {[key: number]: number} {\n  return { foo: \"bar\" }\n}\n\n// If key exists in object type then indexer is not matched\nfunction foo5(): {[key: string]: number; foo: string} {\n  return { foo: \"bar\" }\n}\n\n// If key exists in object type then indexer is not matched\nfunction foo6(): {[key: number]: number; foo: string} {\n  return { foo: \"bar\" }\n}\n\n// Should still complain about mistyped properties\nfunction foo7(): {[key: string]: number; foo: number} {\n  return { foo: \"bar\" }\n}\n"
  },
  {
    "path": "tests/flow/indexer/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\n// No indexer should be fine\nfunction foo0(): {} {\n  return { foo: \"bar\" }\n}\n\n// Matching indexer should be fine\nfunction foo1(): {[key: string]: string} {\n  return { foo: \"bar\" }\n}\n\n// Indexer with different key type is an error when it matches\nfunction foo2(): {[key: number]: string} {\n  return { foo: \"bar\" }\n}\n\n// Matching indexer with different value type is an error\nfunction foo3(): {[key: string]: number} {\n  return { foo: \"bar\" }\n}\n\n// Indexer with different key type and different value type is twice an error\nfunction foo4(): {[key: number]: number} {\n  return { foo: \"bar\" }\n}\n\n// If key exists in object type then indexer is not matched\nfunction foo5(): {[key: string]: number; foo: string} {\n  return { foo: \"bar\" }\n}\n\n// If key exists in object type then indexer is not matched\nfunction foo6(): {[key: number]: number; foo: string} {\n  return { foo: \"bar\" }\n}\n\n// Should still complain about mistyped properties\nfunction foo7(): {[key: string]: number; foo: number} {\n  return { foo: \"bar\" }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// No indexer should be fine\nfunction foo0(): {} {\n  return { foo: \"bar\" };\n}\n\n// Matching indexer should be fine\nfunction foo1(): { [key: string]: string } {\n  return { foo: \"bar\" };\n}\n\n// Indexer with different key type is an error when it matches\nfunction foo2(): { [key: number]: string } {\n  return { foo: \"bar\" };\n}\n\n// Matching indexer with different value type is an error\nfunction foo3(): { [key: string]: number } {\n  return { foo: \"bar\" };\n}\n\n// Indexer with different key type and different value type is twice an error\nfunction foo4(): { [key: number]: number } {\n  return { foo: \"bar\" };\n}\n\n// If key exists in object type then indexer is not matched\nfunction foo5(): { [key: string]: number, foo: string } {\n  return { foo: \"bar\" };\n}\n\n// If key exists in object type then indexer is not matched\nfunction foo6(): { [key: number]: number, foo: string } {\n  return { foo: \"bar\" };\n}\n\n// Should still complain about mistyped properties\nfunction foo7(): { [key: string]: number, foo: number } {\n  return { foo: \"bar\" };\n}\n\n`;\n\nexports[`multiple.js 1`] = `\n// @flow\n\nlet tests = [\n  function() {\n    ({}: {\n      [k1: string]: string,\n      [k2: number]: number, // error: not supported (yet)\n    });\n  }\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  function() {\n    ({}: {\n      [k1: string]: string,\n      [k2: number]: number // error: not supported (yet)\n    });\n  }\n];\n\n`;\n"
  },
  {
    "path": "tests/flow/indexer/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/indexer/multiple.js",
    "content": "// @flow\n\nlet tests = [\n  function() {\n    ({}: {\n      [k1: string]: string,\n      [k2: number]: number, // error: not supported (yet)\n    });\n  }\n];\n"
  },
  {
    "path": "tests/flow/init/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`hoisted.js 1`] = `\n/**\n * test initialization tracking in the presence of hoisting\n * @flow\n */\n\nfunction _if(b: () => boolean) {\n  if (b()) {\n    var f = function () {};\n  }\n  f(); // error, possibly undefined\n}\n\nfunction _while(b: () => boolean) {\n  while (b()) {\n    var f = function () {};\n  }\n  f(); // error, possibly undefined\n}\n\nfunction _do_while(b: () => boolean) {\n  do {\n    var f = function () {};\n  } while (b());\n  f(); // ok\n}\n\nfunction _for(n: number) {\n  for (var i = 0; i < n; i++) {\n    var f = function () {};\n  }\n  f(); // error, possibly undefined\n}\n\nfunction _for_in(obj: Object) {\n  for (var p in obj) {\n    var f = function () {};\n  }\n  f(); // error, possibly undefined\n}\n\nfunction _for_of(arr: Array<number>) {\n  for (var x of arr) {\n    var f = function () {};\n  }\n  f(); // error, possibly undefined\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * test initialization tracking in the presence of hoisting\n * @flow\n */\n\nfunction _if(b: () => boolean) {\n  if (b()) {\n    var f = function() {};\n  }\n  f(); // error, possibly undefined\n}\n\nfunction _while(b: () => boolean) {\n  while (b()) {\n    var f = function() {};\n  }\n  f(); // error, possibly undefined\n}\n\nfunction _do_while(b: () => boolean) {\n  do {\n    var f = function() {};\n  } while (b());\n  f(); // ok\n}\n\nfunction _for(n: number) {\n  for (var i = 0; i < n; i++) {\n    var f = function() {};\n  }\n  f(); // error, possibly undefined\n}\n\nfunction _for_in(obj: Object) {\n  for (var p in obj) {\n    var f = function() {};\n  }\n  f(); // error, possibly undefined\n}\n\nfunction _for_of(arr: Array<number>) {\n  for (var x of arr) {\n    var f = function() {};\n  }\n  f(); // error, possibly undefined\n}\n\n`;\n\nexports[`hoisted2.js 1`] = `\n/**\n * test initialization tracking for vars\n * note: for try/catch/finally, see tests/try/init.js\n * @flow\n */\n\n// deferred init on annotated vars is ok\nfunction linear_deferred_init() {\n  var x:number;\n  x = 0;\n  var y:number = x;\n}\n\n// ...but use of var before init gives undefined\nfunction linear_pre_init() {\n  var x:number;\n  var y:number = x; // error\n}\n\n// local use of annotated vars in an if is ok\nfunction if_scoped_init(b) {\n  if (b) {\n    var x:number = 0;\n    var y:number = x;\n  }\n}\n\n// but not across if/else\nfunction if_else_partial_init(b) {\n  if (b) {\n    var x:number = 0;\n  } else {\n    var y:number = x; // error\n  }\n}\n\n// use of var before if gives undefined\nfunction if_pre_init(b) {\n  var y:number = x; // error\n  if (b) {\n    var x:number = 0;\n  }\n}\n\n// ...and after\nfunction if_partial_post_init(b) {\n  if (b) {\n    var x:number = 0;\n  }\n  var y:number = x; // error\n}\n\n// ...unless both branches have initialized\nfunction if_post_init(b) {\n  if (b) {\n    var x:number = 0;\n  } else {\n    var x:number = 1;\n  }\n  var y:number = x;\n}\n\n// use of var after partial init (non-exhaustive if) gives undefined\nfunction if_partial_post_init(b) {\n  var x:number;\n  if (b) {\n    x = 0;\n  }\n  var y:number = x; // error, possibly uninitialized\n}\n\n// use of var after guaranteed init (exhaustive if) is ok\nfunction if_post_init(b) {\n  var x:number;\n  if (b) {\n    x = 0;\n  } else {\n    x = 1;\n  }\n  var y:number = x;\n}\n\n// use of var after partial init (non-exhaustive switch) gives undefined\nfunction switch_partial_post_init(i) {\n  var x:number;\n  switch (i) {\n    case 0:\n      x = 0;\n      break;\n    case 1:\n      x = 1;\n      break;\n  }\n  var y:number = x; // error, possibly uninitialized\n}\n\n// use of var after guaranteed init (exhaustive switch) is ok\nfunction switch_post_init(i) {\n  var x:number;\n  switch (i) {\n    case 0:\n      x = 0;\n      break;\n    case 1:\n      x = 1;\n      break;\n    default:\n      x = 2;\n  }\n  var y:number = x; // no error, all cases covered\n}\n\n// local use of annotated var in switch is ok\nfunction switch_scoped_init_1(i) {\n  switch (i) {\n    case 0:\n      var x:number = 0;\n      var y:number = x;\n  }\n}\n\n// ...but use of var before switch gives undefined\nfunction switch_scoped_init_2(i) {\n  var y:number = x; // error\n  switch (i) {\n    case 0:\n      var x:number = 0;\n  }\n}\n\n// ...and after\nfunction switch_scoped_init_3(i) {\n  switch (i) {\n    case 0:\n      var x:number = 0;\n  }\n  var y:number = x; // error\n}\n\n// ...and in a fallthrough case without initialization\nfunction switch_scoped_init_4(i) {\n  switch (i) {\n    case 0:\n      var x:number = 0;\n    case 1:\n      var y:number = x; // error\n  }\n}\n\n// local use of annotated var in while is ok\nfunction while_scoped_init(b) {\n  while (b) {\n    var x:number = 0;\n    var y:number = x;\n  }\n}\n\n// ...but use of var before while gives undefined\nfunction while_pre_init(b) {\n  var y:number = x; // error\n  while (b) {\n    var x:number = 0;\n  }\n}\n\n// ...and after\nfunction while_post_init(b) {\n   while (b) {\n    var x:number = 0;\n  }\n  var y:number = x; // error\n}\n\n// local use of annotated var in do-while is ok\nfunction do_while_scoped_init(b) {\n  do {\n    var x:number = 0;\n    var y:number = x;\n  } while (b);\n}\n\n// ...but use before do-while gives undefined\nfunction do_while_pre_init(b) {\n  var y:number = x; // error\n  do {\n    var x:number = 0;\n  } while (b);\n}\n\n// after is ok, because loop is guaranteed to run\nfunction do_while_post_init(b) {\n  do {\n    var x:number = 0;\n  } while (b);\n  var y:number = x;\n}\n\n// local use of annotated var in for is ok\nfunction for_scoped_init(b) {\n  for (;b;) {\n    var x:number = 0;\n    var y:number = x;\n  }\n}\n\n// ...but use before for gives undefined\nfunction for_pre_init(b) {\n  var y:number = x; // error\n  for (;b;) {\n    var x:number = 0;\n  }\n}\n\n// ...and after\nfunction for_post_init(b) {\n   for (;b;) {\n    var x:number = 0;\n  }\n  var y:number = x; // error\n}\n\n// local use of annotated var in for-in is ok\nfunction for_in_scoped_init() {\n  for (var p in { a:1, b: 2 }) {\n    var x:number = 0;\n    var y:number = x;\n  }\n}\n\n// ...but use before while gives undefined\nfunction for_in_pre_init() {\n  var y:number = x; // error\n  for (var p in { a:1, b: 2 }) {\n    var x:number = 0;\n  }\n}\n\n// ...and after\nfunction for_in_post_init() {\n  for (var p in { a:1, b: 2 }) {\n    var x:number = 0;\n  }\n  var y:number = x; // error\n}\n\n// local use of annotated var in for-of is ok\nfunction for_of_scoped_init() {\n  for (var x of [1, 2, 3]) {\n    var x:number = 0;\n    var y:number = x;\n  }\n}\n\n// ...but use before while gives undefined\nfunction for_in_pre_init() {\n  var y:number = x; // error\n  for (var x of [1, 2, 3]) {\n    var x:number = 0;\n  }\n}\n\n// ...and after\nfunction for_in_post_init() {\n  for (var x of [1, 2, 3]) {\n    var x:number = 0;\n  }\n  var y:number = x; // error\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * test initialization tracking for vars\n * note: for try/catch/finally, see tests/try/init.js\n * @flow\n */\n\n// deferred init on annotated vars is ok\nfunction linear_deferred_init() {\n  var x: number;\n  x = 0;\n  var y: number = x;\n}\n\n// ...but use of var before init gives undefined\nfunction linear_pre_init() {\n  var x: number;\n  var y: number = x; // error\n}\n\n// local use of annotated vars in an if is ok\nfunction if_scoped_init(b) {\n  if (b) {\n    var x: number = 0;\n    var y: number = x;\n  }\n}\n\n// but not across if/else\nfunction if_else_partial_init(b) {\n  if (b) {\n    var x: number = 0;\n  } else {\n    var y: number = x; // error\n  }\n}\n\n// use of var before if gives undefined\nfunction if_pre_init(b) {\n  var y: number = x; // error\n  if (b) {\n    var x: number = 0;\n  }\n}\n\n// ...and after\nfunction if_partial_post_init(b) {\n  if (b) {\n    var x: number = 0;\n  }\n  var y: number = x; // error\n}\n\n// ...unless both branches have initialized\nfunction if_post_init(b) {\n  if (b) {\n    var x: number = 0;\n  } else {\n    var x: number = 1;\n  }\n  var y: number = x;\n}\n\n// use of var after partial init (non-exhaustive if) gives undefined\nfunction if_partial_post_init(b) {\n  var x: number;\n  if (b) {\n    x = 0;\n  }\n  var y: number = x; // error, possibly uninitialized\n}\n\n// use of var after guaranteed init (exhaustive if) is ok\nfunction if_post_init(b) {\n  var x: number;\n  if (b) {\n    x = 0;\n  } else {\n    x = 1;\n  }\n  var y: number = x;\n}\n\n// use of var after partial init (non-exhaustive switch) gives undefined\nfunction switch_partial_post_init(i) {\n  var x: number;\n  switch (i) {\n    case 0:\n      x = 0;\n      break;\n    case 1:\n      x = 1;\n      break;\n  }\n  var y: number = x; // error, possibly uninitialized\n}\n\n// use of var after guaranteed init (exhaustive switch) is ok\nfunction switch_post_init(i) {\n  var x: number;\n  switch (i) {\n    case 0:\n      x = 0;\n      break;\n    case 1:\n      x = 1;\n      break;\n    default:\n      x = 2;\n  }\n  var y: number = x; // no error, all cases covered\n}\n\n// local use of annotated var in switch is ok\nfunction switch_scoped_init_1(i) {\n  switch (i) {\n    case 0:\n      var x: number = 0;\n      var y: number = x;\n  }\n}\n\n// ...but use of var before switch gives undefined\nfunction switch_scoped_init_2(i) {\n  var y: number = x; // error\n  switch (i) {\n    case 0:\n      var x: number = 0;\n  }\n}\n\n// ...and after\nfunction switch_scoped_init_3(i) {\n  switch (i) {\n    case 0:\n      var x: number = 0;\n  }\n  var y: number = x; // error\n}\n\n// ...and in a fallthrough case without initialization\nfunction switch_scoped_init_4(i) {\n  switch (i) {\n    case 0:\n      var x: number = 0;\n    case 1:\n      var y: number = x; // error\n  }\n}\n\n// local use of annotated var in while is ok\nfunction while_scoped_init(b) {\n  while (b) {\n    var x: number = 0;\n    var y: number = x;\n  }\n}\n\n// ...but use of var before while gives undefined\nfunction while_pre_init(b) {\n  var y: number = x; // error\n  while (b) {\n    var x: number = 0;\n  }\n}\n\n// ...and after\nfunction while_post_init(b) {\n  while (b) {\n    var x: number = 0;\n  }\n  var y: number = x; // error\n}\n\n// local use of annotated var in do-while is ok\nfunction do_while_scoped_init(b) {\n  do {\n    var x: number = 0;\n    var y: number = x;\n  } while (b);\n}\n\n// ...but use before do-while gives undefined\nfunction do_while_pre_init(b) {\n  var y: number = x; // error\n  do {\n    var x: number = 0;\n  } while (b);\n}\n\n// after is ok, because loop is guaranteed to run\nfunction do_while_post_init(b) {\n  do {\n    var x: number = 0;\n  } while (b);\n  var y: number = x;\n}\n\n// local use of annotated var in for is ok\nfunction for_scoped_init(b) {\n  for (; b; ) {\n    var x: number = 0;\n    var y: number = x;\n  }\n}\n\n// ...but use before for gives undefined\nfunction for_pre_init(b) {\n  var y: number = x; // error\n  for (; b; ) {\n    var x: number = 0;\n  }\n}\n\n// ...and after\nfunction for_post_init(b) {\n  for (; b; ) {\n    var x: number = 0;\n  }\n  var y: number = x; // error\n}\n\n// local use of annotated var in for-in is ok\nfunction for_in_scoped_init() {\n  for (var p in { a: 1, b: 2 }) {\n    var x: number = 0;\n    var y: number = x;\n  }\n}\n\n// ...but use before while gives undefined\nfunction for_in_pre_init() {\n  var y: number = x; // error\n  for (var p in { a: 1, b: 2 }) {\n    var x: number = 0;\n  }\n}\n\n// ...and after\nfunction for_in_post_init() {\n  for (var p in { a: 1, b: 2 }) {\n    var x: number = 0;\n  }\n  var y: number = x; // error\n}\n\n// local use of annotated var in for-of is ok\nfunction for_of_scoped_init() {\n  for (var x of [1, 2, 3]) {\n    var x: number = 0;\n    var y: number = x;\n  }\n}\n\n// ...but use before while gives undefined\nfunction for_in_pre_init() {\n  var y: number = x; // error\n  for (var x of [1, 2, 3]) {\n    var x: number = 0;\n  }\n}\n\n// ...and after\nfunction for_in_post_init() {\n  for (var x of [1, 2, 3]) {\n    var x: number = 0;\n  }\n  var y: number = x; // error\n}\n\n`;\n\nexports[`let.js 1`] = `\n/**\n * test initialization tracking for lets\n * @flow\n */\n\n// deferred init on annotated lets is ok\nfunction linear_deferred_init() {\n  let x:number;\n  x = 0;\n  let y:number = x;\n}\n\n// use of let before init gives undefined\nfunction linear_pre_init() {\n  let x:number;\n  let y:?number = x;  // ok\n  let z:number = x;   // error\n  x = 0;\n  let w:number = x;   // ok\n}\n\n// self-references in let bindings are not ok\nfunction self_init() {\n  let x = x;  // 'x' not initialized!\n}\n\n// use of let after partial init (non-exhaustive if) gives undefined\nfunction if_partial_post_init(b) {\n  let x:number;\n  if (b) {\n    x = 0;\n  }\n  var y:number = x; // error, possibly uninitialized\n}\n\n// use of let after guaranteed init (exhaustive if) is ok\nfunction if_post_init(b) {\n  let x:number;\n  if (b) {\n    x = 0;\n  } else {\n    x = 1;\n  }\n  var y:number = x;\n}\n\n// use of let after partial init (non-exhaustive switch) gives undefined\nfunction switch_partial_post_init(i) {\n  let x:number;\n  switch (i) {\n    case 0:\n      x = 0;\n      break;\n    case 1:\n      x = 1;\n      break;\n  }\n  var y:number = x; // error, possibly uninitialized\n}\n\n// use of let after guaranteed init (exhaustive switch) is ok\nfunction switch_post_init(i) {\n  let x:number;\n  switch (i) {\n    case 0:\n      x = 0;\n      break;\n    case 1:\n      x = 1;\n      break;\n    default:\n      x = 2;\n  }\n  var y:number = x; // no error, all cases covered\n}\n\n// use in a switch after a skipped decl is an error\nfunction switch_scoped_init_2(i) {\n  switch (i) {\n    case 0:\n      let x:number;\n    case 1:\n      let y:number = x; // error, skipped declaration\n  }\n}\n\n// while leaves it possibly uninitialized\nfunction while_post_init(b) {\n  let x:number;\n  while (b) {\n    x = 0;\n  }\n  var y:number = x; // error\n}\n\n// do-while is ok, because loop is guaranteed to run at least once\nfunction do_while_post_init(b) {\n  let x:number;\n  do {\n    x = 0;\n  } while (b);\n  var y:number = x; // ok\n}\n\n// for-in leaves it possibly uninitialized\nfunction for_in_post_init() {\n  var x:number;\n  for (var p in {}) {\n    x = 0;\n  }\n  var y:number = x; // error\n}\n\n// for-of leaves it possibly uninitialized\nfunction for_of_post_init() {\n  var x:number;\n  for (var x of []) {\n    x = 0;\n  }\n  var y:number = x; // error\n}\n\n// use of let after guaranteed init (exhaustive switch + throw) is ok\nfunction switch_post_init2(i): number {\n  let bar;\n  switch (i) {\n    case 1:\n      bar = 3;\n      break;\n    default:\n      throw new Error('Invalid state');\n  }\n  return bar; // ok, definitely initialized\n}\n\n// use of let after guaranteed init (exhaustive switch + throw) is ok\nfunction switch_post_init2(i): number {\n  let bar;\n  switch (i) {\n    case 1:\n      bar = 3;\n      break;\n    default:\n      throw new Error('Invalid state');\n  }\n  return bar; // ok, definitely initialized\n}\n\n// reference of a let-binding is permitted in a sub-closure within the init expr\nfunction sub_closure_init_reference() {\n  let x = function() { return x; };\n  const y = function() { return y; };\n\n  // var-bindings can reference each other cyclically since they do not incur a\n  // TDZ (...even though this is weird...)\n  var z = z;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * test initialization tracking for lets\n * @flow\n */\n\n// deferred init on annotated lets is ok\nfunction linear_deferred_init() {\n  let x: number;\n  x = 0;\n  let y: number = x;\n}\n\n// use of let before init gives undefined\nfunction linear_pre_init() {\n  let x: number;\n  let y: ?number = x; // ok\n  let z: number = x; // error\n  x = 0;\n  let w: number = x; // ok\n}\n\n// self-references in let bindings are not ok\nfunction self_init() {\n  let x = x; // 'x' not initialized!\n}\n\n// use of let after partial init (non-exhaustive if) gives undefined\nfunction if_partial_post_init(b) {\n  let x: number;\n  if (b) {\n    x = 0;\n  }\n  var y: number = x; // error, possibly uninitialized\n}\n\n// use of let after guaranteed init (exhaustive if) is ok\nfunction if_post_init(b) {\n  let x: number;\n  if (b) {\n    x = 0;\n  } else {\n    x = 1;\n  }\n  var y: number = x;\n}\n\n// use of let after partial init (non-exhaustive switch) gives undefined\nfunction switch_partial_post_init(i) {\n  let x: number;\n  switch (i) {\n    case 0:\n      x = 0;\n      break;\n    case 1:\n      x = 1;\n      break;\n  }\n  var y: number = x; // error, possibly uninitialized\n}\n\n// use of let after guaranteed init (exhaustive switch) is ok\nfunction switch_post_init(i) {\n  let x: number;\n  switch (i) {\n    case 0:\n      x = 0;\n      break;\n    case 1:\n      x = 1;\n      break;\n    default:\n      x = 2;\n  }\n  var y: number = x; // no error, all cases covered\n}\n\n// use in a switch after a skipped decl is an error\nfunction switch_scoped_init_2(i) {\n  switch (i) {\n    case 0:\n      let x: number;\n    case 1:\n      let y: number = x; // error, skipped declaration\n  }\n}\n\n// while leaves it possibly uninitialized\nfunction while_post_init(b) {\n  let x: number;\n  while (b) {\n    x = 0;\n  }\n  var y: number = x; // error\n}\n\n// do-while is ok, because loop is guaranteed to run at least once\nfunction do_while_post_init(b) {\n  let x: number;\n  do {\n    x = 0;\n  } while (b);\n  var y: number = x; // ok\n}\n\n// for-in leaves it possibly uninitialized\nfunction for_in_post_init() {\n  var x: number;\n  for (var p in {}) {\n    x = 0;\n  }\n  var y: number = x; // error\n}\n\n// for-of leaves it possibly uninitialized\nfunction for_of_post_init() {\n  var x: number;\n  for (var x of []) {\n    x = 0;\n  }\n  var y: number = x; // error\n}\n\n// use of let after guaranteed init (exhaustive switch + throw) is ok\nfunction switch_post_init2(i): number {\n  let bar;\n  switch (i) {\n    case 1:\n      bar = 3;\n      break;\n    default:\n      throw new Error(\"Invalid state\");\n  }\n  return bar; // ok, definitely initialized\n}\n\n// use of let after guaranteed init (exhaustive switch + throw) is ok\nfunction switch_post_init2(i): number {\n  let bar;\n  switch (i) {\n    case 1:\n      bar = 3;\n      break;\n    default:\n      throw new Error(\"Invalid state\");\n  }\n  return bar; // ok, definitely initialized\n}\n\n// reference of a let-binding is permitted in a sub-closure within the init expr\nfunction sub_closure_init_reference() {\n  let x = function() {\n    return x;\n  };\n  const y = function() {\n    return y;\n  };\n\n  // var-bindings can reference each other cyclically since they do not incur a\n  // TDZ (...even though this is weird...)\n  var z = z;\n}\n\n`;\n\nexports[`nullable-init.js 1`] = `\nvar o: {x: ?number} = { x: null };\nvar a: Array<?number> = [null,null];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar o: { x: ?number } = { x: null };\nvar a: Array<?number> = [null, null];\n\n`;\n"
  },
  {
    "path": "tests/flow/init/hoisted.js",
    "content": "/**\n * test initialization tracking in the presence of hoisting\n * @flow\n */\n\nfunction _if(b: () => boolean) {\n  if (b()) {\n    var f = function () {};\n  }\n  f(); // error, possibly undefined\n}\n\nfunction _while(b: () => boolean) {\n  while (b()) {\n    var f = function () {};\n  }\n  f(); // error, possibly undefined\n}\n\nfunction _do_while(b: () => boolean) {\n  do {\n    var f = function () {};\n  } while (b());\n  f(); // ok\n}\n\nfunction _for(n: number) {\n  for (var i = 0; i < n; i++) {\n    var f = function () {};\n  }\n  f(); // error, possibly undefined\n}\n\nfunction _for_in(obj: Object) {\n  for (var p in obj) {\n    var f = function () {};\n  }\n  f(); // error, possibly undefined\n}\n\nfunction _for_of(arr: Array<number>) {\n  for (var x of arr) {\n    var f = function () {};\n  }\n  f(); // error, possibly undefined\n}\n"
  },
  {
    "path": "tests/flow/init/hoisted2.js",
    "content": "/**\n * test initialization tracking for vars\n * note: for try/catch/finally, see tests/try/init.js\n * @flow\n */\n\n// deferred init on annotated vars is ok\nfunction linear_deferred_init() {\n  var x:number;\n  x = 0;\n  var y:number = x;\n}\n\n// ...but use of var before init gives undefined\nfunction linear_pre_init() {\n  var x:number;\n  var y:number = x; // error\n}\n\n// local use of annotated vars in an if is ok\nfunction if_scoped_init(b) {\n  if (b) {\n    var x:number = 0;\n    var y:number = x;\n  }\n}\n\n// but not across if/else\nfunction if_else_partial_init(b) {\n  if (b) {\n    var x:number = 0;\n  } else {\n    var y:number = x; // error\n  }\n}\n\n// use of var before if gives undefined\nfunction if_pre_init(b) {\n  var y:number = x; // error\n  if (b) {\n    var x:number = 0;\n  }\n}\n\n// ...and after\nfunction if_partial_post_init(b) {\n  if (b) {\n    var x:number = 0;\n  }\n  var y:number = x; // error\n}\n\n// ...unless both branches have initialized\nfunction if_post_init(b) {\n  if (b) {\n    var x:number = 0;\n  } else {\n    var x:number = 1;\n  }\n  var y:number = x;\n}\n\n// use of var after partial init (non-exhaustive if) gives undefined\nfunction if_partial_post_init(b) {\n  var x:number;\n  if (b) {\n    x = 0;\n  }\n  var y:number = x; // error, possibly uninitialized\n}\n\n// use of var after guaranteed init (exhaustive if) is ok\nfunction if_post_init(b) {\n  var x:number;\n  if (b) {\n    x = 0;\n  } else {\n    x = 1;\n  }\n  var y:number = x;\n}\n\n// use of var after partial init (non-exhaustive switch) gives undefined\nfunction switch_partial_post_init(i) {\n  var x:number;\n  switch (i) {\n    case 0:\n      x = 0;\n      break;\n    case 1:\n      x = 1;\n      break;\n  }\n  var y:number = x; // error, possibly uninitialized\n}\n\n// use of var after guaranteed init (exhaustive switch) is ok\nfunction switch_post_init(i) {\n  var x:number;\n  switch (i) {\n    case 0:\n      x = 0;\n      break;\n    case 1:\n      x = 1;\n      break;\n    default:\n      x = 2;\n  }\n  var y:number = x; // no error, all cases covered\n}\n\n// local use of annotated var in switch is ok\nfunction switch_scoped_init_1(i) {\n  switch (i) {\n    case 0:\n      var x:number = 0;\n      var y:number = x;\n  }\n}\n\n// ...but use of var before switch gives undefined\nfunction switch_scoped_init_2(i) {\n  var y:number = x; // error\n  switch (i) {\n    case 0:\n      var x:number = 0;\n  }\n}\n\n// ...and after\nfunction switch_scoped_init_3(i) {\n  switch (i) {\n    case 0:\n      var x:number = 0;\n  }\n  var y:number = x; // error\n}\n\n// ...and in a fallthrough case without initialization\nfunction switch_scoped_init_4(i) {\n  switch (i) {\n    case 0:\n      var x:number = 0;\n    case 1:\n      var y:number = x; // error\n  }\n}\n\n// local use of annotated var in while is ok\nfunction while_scoped_init(b) {\n  while (b) {\n    var x:number = 0;\n    var y:number = x;\n  }\n}\n\n// ...but use of var before while gives undefined\nfunction while_pre_init(b) {\n  var y:number = x; // error\n  while (b) {\n    var x:number = 0;\n  }\n}\n\n// ...and after\nfunction while_post_init(b) {\n   while (b) {\n    var x:number = 0;\n  }\n  var y:number = x; // error\n}\n\n// local use of annotated var in do-while is ok\nfunction do_while_scoped_init(b) {\n  do {\n    var x:number = 0;\n    var y:number = x;\n  } while (b);\n}\n\n// ...but use before do-while gives undefined\nfunction do_while_pre_init(b) {\n  var y:number = x; // error\n  do {\n    var x:number = 0;\n  } while (b);\n}\n\n// after is ok, because loop is guaranteed to run\nfunction do_while_post_init(b) {\n  do {\n    var x:number = 0;\n  } while (b);\n  var y:number = x;\n}\n\n// local use of annotated var in for is ok\nfunction for_scoped_init(b) {\n  for (;b;) {\n    var x:number = 0;\n    var y:number = x;\n  }\n}\n\n// ...but use before for gives undefined\nfunction for_pre_init(b) {\n  var y:number = x; // error\n  for (;b;) {\n    var x:number = 0;\n  }\n}\n\n// ...and after\nfunction for_post_init(b) {\n   for (;b;) {\n    var x:number = 0;\n  }\n  var y:number = x; // error\n}\n\n// local use of annotated var in for-in is ok\nfunction for_in_scoped_init() {\n  for (var p in { a:1, b: 2 }) {\n    var x:number = 0;\n    var y:number = x;\n  }\n}\n\n// ...but use before while gives undefined\nfunction for_in_pre_init() {\n  var y:number = x; // error\n  for (var p in { a:1, b: 2 }) {\n    var x:number = 0;\n  }\n}\n\n// ...and after\nfunction for_in_post_init() {\n  for (var p in { a:1, b: 2 }) {\n    var x:number = 0;\n  }\n  var y:number = x; // error\n}\n\n// local use of annotated var in for-of is ok\nfunction for_of_scoped_init() {\n  for (var x of [1, 2, 3]) {\n    var x:number = 0;\n    var y:number = x;\n  }\n}\n\n// ...but use before while gives undefined\nfunction for_in_pre_init() {\n  var y:number = x; // error\n  for (var x of [1, 2, 3]) {\n    var x:number = 0;\n  }\n}\n\n// ...and after\nfunction for_in_post_init() {\n  for (var x of [1, 2, 3]) {\n    var x:number = 0;\n  }\n  var y:number = x; // error\n}\n"
  },
  {
    "path": "tests/flow/init/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/init/let.js",
    "content": "/**\n * test initialization tracking for lets\n * @flow\n */\n\n// deferred init on annotated lets is ok\nfunction linear_deferred_init() {\n  let x:number;\n  x = 0;\n  let y:number = x;\n}\n\n// use of let before init gives undefined\nfunction linear_pre_init() {\n  let x:number;\n  let y:?number = x;  // ok\n  let z:number = x;   // error\n  x = 0;\n  let w:number = x;   // ok\n}\n\n// self-references in let bindings are not ok\nfunction self_init() {\n  let x = x;  // 'x' not initialized!\n}\n\n// use of let after partial init (non-exhaustive if) gives undefined\nfunction if_partial_post_init(b) {\n  let x:number;\n  if (b) {\n    x = 0;\n  }\n  var y:number = x; // error, possibly uninitialized\n}\n\n// use of let after guaranteed init (exhaustive if) is ok\nfunction if_post_init(b) {\n  let x:number;\n  if (b) {\n    x = 0;\n  } else {\n    x = 1;\n  }\n  var y:number = x;\n}\n\n// use of let after partial init (non-exhaustive switch) gives undefined\nfunction switch_partial_post_init(i) {\n  let x:number;\n  switch (i) {\n    case 0:\n      x = 0;\n      break;\n    case 1:\n      x = 1;\n      break;\n  }\n  var y:number = x; // error, possibly uninitialized\n}\n\n// use of let after guaranteed init (exhaustive switch) is ok\nfunction switch_post_init(i) {\n  let x:number;\n  switch (i) {\n    case 0:\n      x = 0;\n      break;\n    case 1:\n      x = 1;\n      break;\n    default:\n      x = 2;\n  }\n  var y:number = x; // no error, all cases covered\n}\n\n// use in a switch after a skipped decl is an error\nfunction switch_scoped_init_2(i) {\n  switch (i) {\n    case 0:\n      let x:number;\n    case 1:\n      let y:number = x; // error, skipped declaration\n  }\n}\n\n// while leaves it possibly uninitialized\nfunction while_post_init(b) {\n  let x:number;\n  while (b) {\n    x = 0;\n  }\n  var y:number = x; // error\n}\n\n// do-while is ok, because loop is guaranteed to run at least once\nfunction do_while_post_init(b) {\n  let x:number;\n  do {\n    x = 0;\n  } while (b);\n  var y:number = x; // ok\n}\n\n// for-in leaves it possibly uninitialized\nfunction for_in_post_init() {\n  var x:number;\n  for (var p in {}) {\n    x = 0;\n  }\n  var y:number = x; // error\n}\n\n// for-of leaves it possibly uninitialized\nfunction for_of_post_init() {\n  var x:number;\n  for (var x of []) {\n    x = 0;\n  }\n  var y:number = x; // error\n}\n\n// use of let after guaranteed init (exhaustive switch + throw) is ok\nfunction switch_post_init2(i): number {\n  let bar;\n  switch (i) {\n    case 1:\n      bar = 3;\n      break;\n    default:\n      throw new Error('Invalid state');\n  }\n  return bar; // ok, definitely initialized\n}\n\n// use of let after guaranteed init (exhaustive switch + throw) is ok\nfunction switch_post_init2(i): number {\n  let bar;\n  switch (i) {\n    case 1:\n      bar = 3;\n      break;\n    default:\n      throw new Error('Invalid state');\n  }\n  return bar; // ok, definitely initialized\n}\n\n// reference of a let-binding is permitted in a sub-closure within the init expr\nfunction sub_closure_init_reference() {\n  let x = function() { return x; };\n  const y = function() { return y; };\n\n  // var-bindings can reference each other cyclically since they do not incur a\n  // TDZ (...even though this is weird...)\n  var z = z;\n}\n"
  },
  {
    "path": "tests/flow/init/nullable-init.js",
    "content": "var o: {x: ?number} = { x: null };\nvar a: Array<?number> = [null,null];\n"
  },
  {
    "path": "tests/flow/instanceof/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`instanceof.js 1`] = `\n/* @flow */\n\n// x instancof t\nclass X1 { foo: number; };\nclass X2 { foo: string; };\n\nfunction x(b) { return b ? new X1 : new X2; }\n\nfunction consumer1(b) {\n    var g = x(b);\n    if (g instanceof X2) g.foo = '1337';\n    else g.foo = 1337;\n}\n\nfunction consumer2(b) {\n    var g = x(b);\n    if (g instanceof X1) g.foo = '1337';  // oops\n}\n\n// x.y instanceof t\nclass Y1 { bar: X1; };\nclass Y2 { bar: X2; };\n\nfunction y(b) { return b ? new Y1 : new Y2; }\n\nfunction consumer3(b) {\n    var g = y(b);\n    if (g.bar instanceof X2) g.bar.foo = '1337';\n    else g.bar.foo = 1337;\n}\n\nfunction consumer4(b) {\n    var g = y(b);\n    if (g.bar instanceof X1) g.bar.foo = '1337';  // oops\n}\n\n// x.y.z instance of t\nclass Z1 { baz: Y1; };\nclass Z2 { baz: Y2; };\n\nfunction z(b) { return b ? new Z1 : new Z2; }\n\nfunction consumer5(b) {\n    var g = z(b);\n    if (g.baz.bar instanceof X2) g.baz.bar.foo = '1337';\n    else g.baz.bar.foo = 1337;\n}\n\nfunction consumer6(b) {\n    var g = z(b);\n    if (g.baz.bar instanceof X1) g.baz.bar.foo = '1337';  // oops\n}\n\n// this instanceof t\nclass C {\n  m() {\n    if (this instanceof D)\n      alert(this.s);\n    else\n      alert(\"nope\");\n  }\n}\n\nclass D extends C {\n  s: string;\n  constructor() {\n    super();\n    this.s = \"yup\";\n  }\n}\n\n\nfunction foo0(x: Array<number> | number) {\n  if (x instanceof Array) {\n    x[0] = 123;\n  } else {\n    x++;\n  }\n}\n\nfunction foo1(x: Array<number> | number) {\n  if (x instanceof Array) {\n    x++; // error\n  } else {\n    x[0] = 123; // error\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n// x instancof t\nclass X1 {\n  foo: number;\n}\nclass X2 {\n  foo: string;\n}\n\nfunction x(b) {\n  return b ? new X1() : new X2();\n}\n\nfunction consumer1(b) {\n  var g = x(b);\n  if (g instanceof X2) g.foo = \"1337\";\n  else g.foo = 1337;\n}\n\nfunction consumer2(b) {\n  var g = x(b);\n  if (g instanceof X1) g.foo = \"1337\"; // oops\n}\n\n// x.y instanceof t\nclass Y1 {\n  bar: X1;\n}\nclass Y2 {\n  bar: X2;\n}\n\nfunction y(b) {\n  return b ? new Y1() : new Y2();\n}\n\nfunction consumer3(b) {\n  var g = y(b);\n  if (g.bar instanceof X2) g.bar.foo = \"1337\";\n  else g.bar.foo = 1337;\n}\n\nfunction consumer4(b) {\n  var g = y(b);\n  if (g.bar instanceof X1) g.bar.foo = \"1337\"; // oops\n}\n\n// x.y.z instance of t\nclass Z1 {\n  baz: Y1;\n}\nclass Z2 {\n  baz: Y2;\n}\n\nfunction z(b) {\n  return b ? new Z1() : new Z2();\n}\n\nfunction consumer5(b) {\n  var g = z(b);\n  if (g.baz.bar instanceof X2) g.baz.bar.foo = \"1337\";\n  else g.baz.bar.foo = 1337;\n}\n\nfunction consumer6(b) {\n  var g = z(b);\n  if (g.baz.bar instanceof X1) g.baz.bar.foo = \"1337\"; // oops\n}\n\n// this instanceof t\nclass C {\n  m() {\n    if (this instanceof D) alert(this.s);\n    else alert(\"nope\");\n  }\n}\n\nclass D extends C {\n  s: string;\n  constructor() {\n    super();\n    this.s = \"yup\";\n  }\n}\n\nfunction foo0(x: Array<number> | number) {\n  if (x instanceof Array) {\n    x[0] = 123;\n  } else {\n    x++;\n  }\n}\n\nfunction foo1(x: Array<number> | number) {\n  if (x instanceof Array) {\n    x++; // error\n  } else {\n    x[0] = 123; // error\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/instanceof/instanceof.js",
    "content": "/* @flow */\n\n// x instancof t\nclass X1 { foo: number; };\nclass X2 { foo: string; };\n\nfunction x(b) { return b ? new X1 : new X2; }\n\nfunction consumer1(b) {\n    var g = x(b);\n    if (g instanceof X2) g.foo = '1337';\n    else g.foo = 1337;\n}\n\nfunction consumer2(b) {\n    var g = x(b);\n    if (g instanceof X1) g.foo = '1337';  // oops\n}\n\n// x.y instanceof t\nclass Y1 { bar: X1; };\nclass Y2 { bar: X2; };\n\nfunction y(b) { return b ? new Y1 : new Y2; }\n\nfunction consumer3(b) {\n    var g = y(b);\n    if (g.bar instanceof X2) g.bar.foo = '1337';\n    else g.bar.foo = 1337;\n}\n\nfunction consumer4(b) {\n    var g = y(b);\n    if (g.bar instanceof X1) g.bar.foo = '1337';  // oops\n}\n\n// x.y.z instance of t\nclass Z1 { baz: Y1; };\nclass Z2 { baz: Y2; };\n\nfunction z(b) { return b ? new Z1 : new Z2; }\n\nfunction consumer5(b) {\n    var g = z(b);\n    if (g.baz.bar instanceof X2) g.baz.bar.foo = '1337';\n    else g.baz.bar.foo = 1337;\n}\n\nfunction consumer6(b) {\n    var g = z(b);\n    if (g.baz.bar instanceof X1) g.baz.bar.foo = '1337';  // oops\n}\n\n// this instanceof t\nclass C {\n  m() {\n    if (this instanceof D)\n      alert(this.s);\n    else\n      alert(\"nope\");\n  }\n}\n\nclass D extends C {\n  s: string;\n  constructor() {\n    super();\n    this.s = \"yup\";\n  }\n}\n\n\nfunction foo0(x: Array<number> | number) {\n  if (x instanceof Array) {\n    x[0] = 123;\n  } else {\n    x++;\n  }\n}\n\nfunction foo1(x: Array<number> | number) {\n  if (x instanceof Array) {\n    x++; // error\n  } else {\n    x[0] = 123; // error\n  }\n}\n"
  },
  {
    "path": "tests/flow/instanceof/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/integration/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`bar.js 1`] = `\n// @flow\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n`;\n\nexports[`foo.js 1`] = `\n// @flow\nrequire('./bar');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nrequire(\"./bar\");\n\n`;\n"
  },
  {
    "path": "tests/flow/integration/bar.js",
    "content": "// @flow\n"
  },
  {
    "path": "tests/flow/integration/foo.js",
    "content": "// @flow\nrequire('./bar');\n"
  },
  {
    "path": "tests/flow/integration/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/interface/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`import.js 1`] = `\ninterface I { x: number }\nexport type J = I; // workaround for export interface\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface I { x: number }\nexport type J = I; // workaround for export interface\n\n`;\n\nexports[`indexer.js 1`] = `\n// @flow\n\ninterface Ok {\n  [key: string]: string;\n}\n\ninterface Bad {\n  [k1: string]: string;\n  [k2: number]: number; // error: not supported (yet)\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ninterface Ok {\n  [key: string]: string\n}\n\ninterface Bad {\n  [k1: string]: string,\n  [k2: number]: number // error: not supported (yet)\n}\n\n`;\n\nexports[`interface.js 1`] = `\ndeclare class C { x: number; }\n\nvar x: string = new C().x;\n\ninterface I { x: number; }\n\nvar i = new I(); // error\n\nfunction testInterfaceName(o: I) {\n  (o.name: string); // error, name is static\n  (o.constructor.name: string); // ok\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class C { x: number }\n\nvar x: string = new C().x;\n\ninterface I { x: number }\n\nvar i = new I(); // error\n\nfunction testInterfaceName(o: I) {\n  (o.name: string); // error, name is static\n  (o.constructor.name: string); // ok\n}\n\n`;\n\nexports[`test.js 1`] = `\ninterface I { y: string }\ninterface I_ { x: number }\ninterface J extends I, I_ { }\ninterface K extends J { }\n\nvar k: K = { x: \"\", y: \"\" }; // error: x should be number\n(k.x: string); // error: x is number\n(k.y: string);\n\ndeclare class C { x: number }\ndeclare class D extends C, Other { } // error: multiple extends\n//declare class E implements I { } // parse error\n\ninterface A<Y> { y: Y }\ninterface A_<X> { x: X }\ninterface B<Z> extends A<string>, A_<Z> { z: Z }\ninterface E<Z> extends B<Z> { }\n\nvar e: E<number> = { x: \"\", y: \"\", z: \"\" }; // error: x and z should be numbers\n(e.x: string); // error: x is number\n(e.y: string);\n(e.z: string); // error: z is number\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface I { y: string }\ninterface I_ { x: number }\ninterface J extends I, I_ {}\ninterface K extends J {}\n\nvar k: K = { x: \"\", y: \"\" }; // error: x should be number\n(k.x: string); // error: x is number\n(k.y: string);\n\ndeclare class C { x: number }\ndeclare class D extends C, Other {} // error: multiple extends\n//declare class E implements I { } // parse error\n\ninterface A<Y> { y: Y }\ninterface A_<X> { x: X }\ninterface B<Z> extends A<string>, A_<Z> { z: Z }\ninterface E<Z> extends B<Z> {}\n\nvar e: E<number> = { x: \"\", y: \"\", z: \"\" }; // error: x and z should be numbers\n(e.x: string); // error: x is number\n(e.y: string);\n(e.z: string); // error: z is number\n\n`;\n\nexports[`test2.js 1`] = `\nimport type { J } from './import';\ninterface K { }\ninterface L extends J, K { y: string }\n\nfunction foo(l: L) { l.x; l.y; l.z; } // error: z not found in L\n\n// interface + multiple inheritance is similar to object type + intersection\ntype M = { y: string } & J & { z: boolean }\n\nfunction bar(m: M) { m.x; m.y; m.z; } // OK\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport type { J } from \"./import\";\ninterface K {}\ninterface L extends J, K { y: string }\n\nfunction foo(l: L) {\n  l.x;\n  l.y;\n  l.z;\n} // error: z not found in L\n\n// interface + multiple inheritance is similar to object type + intersection\ntype M = { y: string } & J & { z: boolean };\n\nfunction bar(m: M) {\n  m.x;\n  m.y;\n  m.z;\n} // OK\n\n`;\n\nexports[`test3.js 1`] = `\ninterface I { x: number, y : string }\ninterface J { y : number }\ninterface K extends I, J { x: string } // error: x is number in I\nfunction foo(k: K) {\n  (k.x: number); // error: x is string in K\n  (k.y: number); // error: y is string in I\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface I { x: number, y: string }\ninterface J { y: number }\ninterface K extends I, J { x: string } // error: x is number in I\nfunction foo(k: K) {\n  (k.x: number); // error: x is string in K\n  (k.y: number); // error: y is string in I\n}\n\n`;\n\nexports[`test4.js 1`] = `\ninterface I { foo(x: number): void; }\n(function foo(x: number) { }: I); // error, property \\`foo\\` not found function\n\ndeclare class C {\n  bar(i: I): void;\n  bar(f: (x: number) => void): void;\n}\n\nnew C().bar((x: string) => { }); // error, number ~/~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface I { foo(x: number): void }\n(function foo(x: number) {}: I); // error, property \\`foo\\` not found function\n\ndeclare class C {\n  bar(i: I): void,\n  bar(f: (x: number) => void): void\n}\n\nnew C().bar((x: string) => {}); // error, number ~/~> string\n\n`;\n"
  },
  {
    "path": "tests/flow/interface/import.js",
    "content": "interface I { x: number }\nexport type J = I; // workaround for export interface\n"
  },
  {
    "path": "tests/flow/interface/indexer.js",
    "content": "// @flow\n\ninterface Ok {\n  [key: string]: string;\n}\n\ninterface Bad {\n  [k1: string]: string;\n  [k2: number]: number; // error: not supported (yet)\n}\n"
  },
  {
    "path": "tests/flow/interface/interface.js",
    "content": "declare class C { x: number; }\n\nvar x: string = new C().x;\n\ninterface I { x: number; }\n\nvar i = new I(); // error\n\nfunction testInterfaceName(o: I) {\n  (o.name: string); // error, name is static\n  (o.constructor.name: string); // ok\n}\n"
  },
  {
    "path": "tests/flow/interface/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/interface/test.js",
    "content": "interface I { y: string }\ninterface I_ { x: number }\ninterface J extends I, I_ { }\ninterface K extends J { }\n\nvar k: K = { x: \"\", y: \"\" }; // error: x should be number\n(k.x: string); // error: x is number\n(k.y: string);\n\ndeclare class C { x: number }\ndeclare class D extends C, Other { } // error: multiple extends\n//declare class E implements I { } // parse error\n\ninterface A<Y> { y: Y }\ninterface A_<X> { x: X }\ninterface B<Z> extends A<string>, A_<Z> { z: Z }\ninterface E<Z> extends B<Z> { }\n\nvar e: E<number> = { x: \"\", y: \"\", z: \"\" }; // error: x and z should be numbers\n(e.x: string); // error: x is number\n(e.y: string);\n(e.z: string); // error: z is number\n"
  },
  {
    "path": "tests/flow/interface/test2.js",
    "content": "import type { J } from './import';\ninterface K { }\ninterface L extends J, K { y: string }\n\nfunction foo(l: L) { l.x; l.y; l.z; } // error: z not found in L\n\n// interface + multiple inheritance is similar to object type + intersection\ntype M = { y: string } & J & { z: boolean }\n\nfunction bar(m: M) { m.x; m.y; m.z; } // OK\n"
  },
  {
    "path": "tests/flow/interface/test3.js",
    "content": "interface I { x: number, y : string }\ninterface J { y : number }\ninterface K extends I, J { x: string } // error: x is number in I\nfunction foo(k: K) {\n  (k.x: number); // error: x is string in K\n  (k.y: number); // error: y is string in I\n}\n"
  },
  {
    "path": "tests/flow/interface/test4.js",
    "content": "interface I { foo(x: number): void; }\n(function foo(x: number) { }: I); // error, property `foo` not found function\n\ndeclare class C {\n  bar(i: I): void;\n  bar(f: (x: number) => void): void;\n}\n\nnew C().bar((x: string) => { }); // error, number ~/~> string\n"
  },
  {
    "path": "tests/flow/intersection/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`intersection.js 1`] = `\nfunction foo(x: $All<Error,{type:number}>): number {\n    return x.type;\n}\n\nfunction bar(x: Error & {type:number}): number {\n    return x.type;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo(x: $All<Error, { type: number }>): number {\n  return x.type;\n}\n\nfunction bar(x: Error & { type: number }): number {\n  return x.type;\n}\n\n`;\n\nexports[`objassign.js 1`] = `\n/**\n * Test intersection of objects flowing to spread assignment.\n *\n * Definitions in lib/lib.js\n *\n * @noflow\n */\n\ndeclare var x: ObjAssignT;\n\nlet y: ObjAssignT = { ...x }; // should be fine\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * Test intersection of objects flowing to spread assignment.\n *\n * Definitions in lib/lib.js\n *\n * @noflow\n */\n\ndeclare var x: ObjAssignT;\n\nlet y: ObjAssignT = { ...x }; // should be fine\n\n`;\n\nexports[`pred.js 1`] = `\n/**\n * Test interaction of object intersections and predicates.\n * Definitions in lib/lib.js\n *\n * @flow\n */\n\ntype DuplexStreamOptions = ReadableStreamOptions & WritableStreamOptions & {\n  allowHalfOpen? : boolean,\n  readableObjectMode? : boolean,\n  writableObjectMode? : boolean\n};\n\nfunction hasObjectMode_bad(options: DuplexStreamOptions): boolean {\n  return options.objectMode\n    || options.readableObjectMode\n    || options.writableObjectMode; // error, undefined ~> boolean\n}\n\nfunction hasObjectMode_ok(options: DuplexStreamOptions): boolean {\n  return !!(options.objectMode\n    || options.readableObjectMode\n    || options.writableObjectMode);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * Test interaction of object intersections and predicates.\n * Definitions in lib/lib.js\n *\n * @flow\n */\n\ntype DuplexStreamOptions = ReadableStreamOptions &\n  WritableStreamOptions & {\n    allowHalfOpen?: boolean,\n    readableObjectMode?: boolean,\n    writableObjectMode?: boolean\n  };\n\nfunction hasObjectMode_bad(options: DuplexStreamOptions): boolean {\n  return (\n    options.objectMode ||\n    options.readableObjectMode ||\n    options.writableObjectMode\n  ); // error, undefined ~> boolean\n}\n\nfunction hasObjectMode_ok(options: DuplexStreamOptions): boolean {\n  return !!(\n    options.objectMode ||\n    options.readableObjectMode ||\n    options.writableObjectMode\n  );\n}\n\n`;\n\nexports[`test_fun.js 1`] = `\n/**\n * Tests for intersections of function types.\n *\n * Note: Flow abuses intersection types to model\n * function overloading, which precludes using a\n * correct intersection of return types in the result.\n *\n * Here we test the special case where return types\n * are equal. Tests of the overloading behavior can\n * be found in tests/overload\n *\n * Definitions lin lib/lib.js\n *\n * @noflow\n */\n\n// intersection of function types satisfies union of param types\n\ntype F = (_: ObjA) => void;\ntype G = (_: ObjB) => void;\ntype FG = (_: ObjA | ObjB) => void;\n\ndeclare var fun1 : F & G;\n\n(fun1 : FG);\n\nvar fun2 : FG = fun1;\n\n// simpler variation\ndeclare var f : ((_: number) => void) & ((_: string) => void);\nvar g: (_: number | string) => void = f;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * Tests for intersections of function types.\n *\n * Note: Flow abuses intersection types to model\n * function overloading, which precludes using a\n * correct intersection of return types in the result.\n *\n * Here we test the special case where return types\n * are equal. Tests of the overloading behavior can\n * be found in tests/overload\n *\n * Definitions lin lib/lib.js\n *\n * @noflow\n */\n\n// intersection of function types satisfies union of param types\n\ntype F = (_: ObjA) => void;\ntype G = (_: ObjB) => void;\ntype FG = (_: ObjA | ObjB) => void;\n\ndeclare var fun1: F & G;\n\n(fun1: FG);\n\nvar fun2: FG = fun1;\n\n// simpler variation\ndeclare var f: ((_: number) => void) & ((_: string) => void);\nvar g: (_: number | string) => void = f;\n\n`;\n\nexports[`test_obj.js 1`] = `\n/**\n * Tests for intersections of object types\n *\n * @noflow\n */\n\n// TODO we should give explicit errors for incompatibilities\n// which make an intersection uninhabitable:\n// - shared mutable properties with different types\n// - different dictionary types\n//\n// Currently we give no such errors. Instead, we rely on\n// the impossibility of providing a value for such a type\n// to produce errors on value inflows. This is clearly\n// suboptimal, since eg declared vars require no explicit\n// provision of values. This leaves the impossible types\n// free to flow downstream and satisfy impossible constraints.\n\n// intersection of object types satisfies union of properties\ndeclare var a: A;\nvar b: B = a;\n\n// intersection of dictionary types:\ndeclare var c: C;\nvar d: D = c; // ok\n\n// dict type mismatch\ntype E = { [key: string]: string };\nvar e: E = c; // error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * Tests for intersections of object types\n *\n * @noflow\n */\n\n// TODO we should give explicit errors for incompatibilities\n// which make an intersection uninhabitable:\n// - shared mutable properties with different types\n// - different dictionary types\n//\n// Currently we give no such errors. Instead, we rely on\n// the impossibility of providing a value for such a type\n// to produce errors on value inflows. This is clearly\n// suboptimal, since eg declared vars require no explicit\n// provision of values. This leaves the impossible types\n// free to flow downstream and satisfy impossible constraints.\n\n// intersection of object types satisfies union of properties\ndeclare var a: A;\nvar b: B = a;\n\n// intersection of dictionary types:\ndeclare var c: C;\nvar d: D = c; // ok\n\n// dict type mismatch\ntype E = { [key: string]: string };\nvar e: E = c; // error\n\n`;\n"
  },
  {
    "path": "tests/flow/intersection/intersection.js",
    "content": "function foo(x: $All<Error,{type:number}>): number {\n    return x.type;\n}\n\nfunction bar(x: Error & {type:number}): number {\n    return x.type;\n}\n"
  },
  {
    "path": "tests/flow/intersection/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/intersection/lib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`lib.js 1`] = `\n// @flow\n\n// defs used in tests, here to stress tvar machinery\n\n// used in ObjAssign.js\n//\ntype ObjAssignT = { foo: string } & { bar: string };\n\n// used in pred.js\n//\ntype ReadableStreamOptions = {\n  highWaterMark? : number,\n  encoding? : ?string,\n  objectMode? : boolean\n};\n\ntype WritableStreamOptions = {\n  highWaterMark? : number,\n  decodeString? : boolean,\n  objectMode? : boolean\n};\n\n// used in test_fun.js\n//\ntype ObjA = { foo: number, bar: string };\ntype ObjB = { baz: bool };\n\n// used in test_obj.js\n//\ntype A = { a: string } & { b: string };\ntype B = { a: string, b: string };\n\ntype C = { [key: string]: number } & { [key: string]: number };\ntype D = { [key: string]: number };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// defs used in tests, here to stress tvar machinery\n\n// used in ObjAssign.js\n//\ntype ObjAssignT = { foo: string } & { bar: string };\n\n// used in pred.js\n//\ntype ReadableStreamOptions = {\n  highWaterMark?: number,\n  encoding?: ?string,\n  objectMode?: boolean\n};\n\ntype WritableStreamOptions = {\n  highWaterMark?: number,\n  decodeString?: boolean,\n  objectMode?: boolean\n};\n\n// used in test_fun.js\n//\ntype ObjA = { foo: number, bar: string };\ntype ObjB = { baz: boolean };\n\n// used in test_obj.js\n//\ntype A = { a: string } & { b: string };\ntype B = { a: string, b: string };\n\ntype C = { [key: string]: number } & { [key: string]: number };\ntype D = { [key: string]: number };\n\n`;\n"
  },
  {
    "path": "tests/flow/intersection/lib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/intersection/lib/lib.js",
    "content": "// @flow\n\n// defs used in tests, here to stress tvar machinery\n\n// used in ObjAssign.js\n//\ntype ObjAssignT = { foo: string } & { bar: string };\n\n// used in pred.js\n//\ntype ReadableStreamOptions = {\n  highWaterMark? : number,\n  encoding? : ?string,\n  objectMode? : boolean\n};\n\ntype WritableStreamOptions = {\n  highWaterMark? : number,\n  decodeString? : boolean,\n  objectMode? : boolean\n};\n\n// used in test_fun.js\n//\ntype ObjA = { foo: number, bar: string };\ntype ObjB = { baz: bool };\n\n// used in test_obj.js\n//\ntype A = { a: string } & { b: string };\ntype B = { a: string, b: string };\n\ntype C = { [key: string]: number } & { [key: string]: number };\ntype D = { [key: string]: number };\n"
  },
  {
    "path": "tests/flow/intersection/objassign.js",
    "content": "/**\n * Test intersection of objects flowing to spread assignment.\n *\n * Definitions in lib/lib.js\n *\n * @noflow\n */\n\ndeclare var x: ObjAssignT;\n\nlet y: ObjAssignT = { ...x }; // should be fine\n"
  },
  {
    "path": "tests/flow/intersection/pred.js",
    "content": "/**\n * Test interaction of object intersections and predicates.\n * Definitions in lib/lib.js\n *\n * @flow\n */\n\ntype DuplexStreamOptions = ReadableStreamOptions & WritableStreamOptions & {\n  allowHalfOpen? : boolean,\n  readableObjectMode? : boolean,\n  writableObjectMode? : boolean\n};\n\nfunction hasObjectMode_bad(options: DuplexStreamOptions): boolean {\n  return options.objectMode\n    || options.readableObjectMode\n    || options.writableObjectMode; // error, undefined ~> boolean\n}\n\nfunction hasObjectMode_ok(options: DuplexStreamOptions): boolean {\n  return !!(options.objectMode\n    || options.readableObjectMode\n    || options.writableObjectMode);\n}\n"
  },
  {
    "path": "tests/flow/intersection/test_fun.js",
    "content": "/**\n * Tests for intersections of function types.\n *\n * Note: Flow abuses intersection types to model\n * function overloading, which precludes using a\n * correct intersection of return types in the result.\n *\n * Here we test the special case where return types\n * are equal. Tests of the overloading behavior can\n * be found in tests/overload\n *\n * Definitions lin lib/lib.js\n *\n * @noflow\n */\n\n// intersection of function types satisfies union of param types\n\ntype F = (_: ObjA) => void;\ntype G = (_: ObjB) => void;\ntype FG = (_: ObjA | ObjB) => void;\n\ndeclare var fun1 : F & G;\n\n(fun1 : FG);\n\nvar fun2 : FG = fun1;\n\n// simpler variation\ndeclare var f : ((_: number) => void) & ((_: string) => void);\nvar g: (_: number | string) => void = f;\n"
  },
  {
    "path": "tests/flow/intersection/test_obj.js",
    "content": "/**\n * Tests for intersections of object types\n *\n * @noflow\n */\n\n// TODO we should give explicit errors for incompatibilities\n// which make an intersection uninhabitable:\n// - shared mutable properties with different types\n// - different dictionary types\n//\n// Currently we give no such errors. Instead, we rely on\n// the impossibility of providing a value for such a type\n// to produce errors on value inflows. This is clearly\n// suboptimal, since eg declared vars require no explicit\n// provision of values. This leaves the impossible types\n// free to flow downstream and satisfy impossible constraints.\n\n// intersection of object types satisfies union of properties\ndeclare var a: A;\nvar b: B = a;\n\n// intersection of dictionary types:\ndeclare var c: C;\nvar d: D = c; // ok\n\n// dict type mismatch\ntype E = { [key: string]: string };\nvar e: E = c; // error\n"
  },
  {
    "path": "tests/flow/issues-11/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`export.js 1`] = `\n/* @flow */\nexports.x = 1;\nexports.y = \"\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nexports.x = 1;\nexports.y = \"\";\n\n`;\n\nexports[`import.js 1`] = `\n/* @flow */\nvar e = require('./export');\nvar x: string = e.x;\nvar y: number = e.y;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nvar e = require(\"./export\");\nvar x: string = e.x;\nvar y: number = e.y;\n\n`;\n"
  },
  {
    "path": "tests/flow/issues-11/export.js",
    "content": "/* @flow */\nexports.x = 1;\nexports.y = \"\";\n"
  },
  {
    "path": "tests/flow/issues-11/import.js",
    "content": "/* @flow */\nvar e = require('./export');\nvar x: string = e.x;\nvar y: number = e.y;\n"
  },
  {
    "path": "tests/flow/issues-11/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/iter/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`iter.js 1`] = `\nvar a = [true,false];\nfunction foo(x) { }\n\nfor (var i=0;i<3;i++) {\n    foo(a[i]);\n}\nfor (var k in a) {\n    foo(a[k]); // k is a string, which shouldn't be used for array access\n}\n\nvar b = (null : ?{[key: string]: string});\nfor (var j in b) {\n    foo(b[j]);\n}\n\nvar c;\nfor (var m in (c = b)) {\n    foo(c[m]);\n}\n\nvar d;\nfor (var n in (d = a)) {\n    foo(d[n]); // d is a string, which shouldn't be used for array access\n}\n\nfor (var x in undefined) {\n    foo(x); // unreachable\n}\n\nfor (var x in null) {\n    foo(x); // unreachable\n}\n\nfor (var y in this) {\n    // regression test to make sure \\`in this\\` doesn't fatal. it's currently\n    // allowed, even though we can't actually enumerate all the keys on \\`this\\`.\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar a = [true, false];\nfunction foo(x) {}\n\nfor (var i = 0; i < 3; i++) {\n  foo(a[i]);\n}\nfor (var k in a) {\n  foo(a[k]); // k is a string, which shouldn't be used for array access\n}\n\nvar b = (null: ?{ [key: string]: string });\nfor (var j in b) {\n  foo(b[j]);\n}\n\nvar c;\nfor (var m in (c = b)) {\n  foo(c[m]);\n}\n\nvar d;\nfor (var n in (d = a)) {\n  foo(d[n]); // d is a string, which shouldn't be used for array access\n}\n\nfor (var x in undefined) {\n  foo(x); // unreachable\n}\n\nfor (var x in null) {\n  foo(x); // unreachable\n}\n\nfor (var y in this) {\n  // regression test to make sure \\`in this\\` doesn't fatal. it's currently\n  // allowed, even though we can't actually enumerate all the keys on \\`this\\`.\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/iter/iter.js",
    "content": "var a = [true,false];\nfunction foo(x) { }\n\nfor (var i=0;i<3;i++) {\n    foo(a[i]);\n}\nfor (var k in a) {\n    foo(a[k]); // k is a string, which shouldn't be used for array access\n}\n\nvar b = (null : ?{[key: string]: string});\nfor (var j in b) {\n    foo(b[j]);\n}\n\nvar c;\nfor (var m in (c = b)) {\n    foo(c[m]);\n}\n\nvar d;\nfor (var n in (d = a)) {\n    foo(d[n]); // d is a string, which shouldn't be used for array access\n}\n\nfor (var x in undefined) {\n    foo(x); // unreachable\n}\n\nfor (var x in null) {\n    foo(x); // unreachable\n}\n\nfor (var y in this) {\n    // regression test to make sure `in this` doesn't fatal. it's currently\n    // allowed, even though we can't actually enumerate all the keys on `this`.\n}\n"
  },
  {
    "path": "tests/flow/iter/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/iterable/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`array.js 1`] = `\n/* @flow */\n\n(([1, 2]: Array<number>): Iterable<number>);\n([1,2,\"hi\"]: Iterable<number | string>);\n([1,2,3]: Iterable<*>);\n\n([\"hi\"]: Iterable<number>); // Error string ~> number\n([\"hi\", 1]: Iterable<string>); // Error number ~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n(([1, 2]: Array<number>): Iterable<number>);\n([1, 2, \"hi\"]: Iterable<number | string>);\n([1, 2, 3]: Iterable<*>);\n\n([\"hi\"]: Iterable<number>); // Error string ~> number\n([\"hi\", 1]: Iterable<string>); // Error number ~> string\n\n`;\n\nexports[`caching_bug.js 1`] = `\n/* @flow */\n\n/**\n * I've hit a bug with the caching in flow_js.ml. Avik is removing that caching\n * so it should be fixed soon. The basic idea is I flow something like\n *\n * Array<any | any> ~> Iterable<string>\n *\n * then Flow won't notice when I try to flow\n *\n * Array<string | number> ~> Iterable<string>\n *\n * We shouldn't hit the cache because the union types are different, but we do\n * anyway. I've fixed this temporarily by bumping the \"meaningful\" param to\n * Hashtbl.hash_param\n */\n\nfunction fill_the_cache(x: Array<any | any>): Iterable<string> { return x; }\n\n// Error: number ~> string\nfunction miss_the_cache(x: Array<string | number>): Iterable<string> { return x; }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n/**\n * I've hit a bug with the caching in flow_js.ml. Avik is removing that caching\n * so it should be fixed soon. The basic idea is I flow something like\n *\n * Array<any | any> ~> Iterable<string>\n *\n * then Flow won't notice when I try to flow\n *\n * Array<string | number> ~> Iterable<string>\n *\n * We shouldn't hit the cache because the union types are different, but we do\n * anyway. I've fixed this temporarily by bumping the \"meaningful\" param to\n * Hashtbl.hash_param\n */\n\nfunction fill_the_cache(x: Array<any | any>): Iterable<string> {\n  return x;\n}\n\n// Error: number ~> string\nfunction miss_the_cache(x: Array<string | number>): Iterable<string> {\n  return x;\n}\n\n`;\n\nexports[`iter.js 1`] = `\n/* @flow */\n\nfunction foo(strs: Iterable<string>): void {\n  for (var s: string of strs) {\n    console.log(s);\n  }\n}\n\nvar m: Map<string, number> = new Map();\n\nfoo(m.keys());\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction foo(strs: Iterable<string>): void {\n  for (var s: string of strs) {\n    console.log(s);\n  }\n}\n\nvar m: Map<string, number> = new Map();\n\nfoo(m.keys());\n\n`;\n\nexports[`iterator_result.js 1`] = `\n/* @flow */\n\nfunction makeIterator(coin_flip: () => boolean ): Iterator<string> {\n  return {\n    \"@@iterator\"() { return makeIterator(coin_flip); },\n    next(): IteratorResult<string, void> {\n      var done = coin_flip();\n      if (!done) {\n        return { done, value: \"still going...\" };\n      } else {\n        return { done };\n      }\n    }\n  }\n}\n\nfunction makeIterator(coin_flip: () => boolean ): Iterator<string> {\n  return {\n    \"@@iterator\"() { return makeIterator(coin_flip); },\n    next(): IteratorResult<string, void> {\n      var done = coin_flip();\n      if (done) { // Whoops, made a mistake and forgot to negate done\n        return { done, value: \"still going...\" }; // Error string ~> void\n      } else {\n        return { done }; // Error void ~> string\n      }\n    }\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction makeIterator(coin_flip: () => boolean): Iterator<string> {\n  return {\n    \"@@iterator\"() {\n      return makeIterator(coin_flip);\n    },\n    next(): IteratorResult<string, void> {\n      var done = coin_flip();\n      if (!done) {\n        return { done, value: \"still going...\" };\n      } else {\n        return { done };\n      }\n    }\n  };\n}\n\nfunction makeIterator(coin_flip: () => boolean): Iterator<string> {\n  return {\n    \"@@iterator\"() {\n      return makeIterator(coin_flip);\n    },\n    next(): IteratorResult<string, void> {\n      var done = coin_flip();\n      if (done) {\n        // Whoops, made a mistake and forgot to negate done\n        return { done, value: \"still going...\" }; // Error string ~> void\n      } else {\n        return { done }; // Error void ~> string\n      }\n    }\n  };\n}\n\n`;\n\nexports[`map.js 1`] = `\n/* @flow */\n\nfunction mapTest1(map: Map<string, number>): Iterable<[string, number]> {\n  return map;\n}\nfunction mapTest2<K, V>(map: Map<K, V>): Iterable<[K, V]> {\n  return map;\n};\nfunction mapTest3(map: Map<string, number>): Iterable<*> {\n  return map;\n}\n// Error - Map is an Iterable<[K, V]>\nfunction mapTest4(map: Map<number, string>): Iterable<string> {\n  return map;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction mapTest1(map: Map<string, number>): Iterable<[string, number]> {\n  return map;\n}\nfunction mapTest2<K, V>(map: Map<K, V>): Iterable<[K, V]> {\n  return map;\n}\nfunction mapTest3(map: Map<string, number>): Iterable<*> {\n  return map;\n}\n// Error - Map is an Iterable<[K, V]>\nfunction mapTest4(map: Map<number, string>): Iterable<string> {\n  return map;\n}\n\n`;\n\nexports[`set.js 1`] = `\n/* @flow */\n\nfunction setTest1(set: Set<string>): Iterable<string> {\n  return set;\n}\nfunction setTest2<T>(set: Set<T>): Iterable<T> {\n  return set;\n};\nfunction setTest3(set: Set<string>): Iterable<*> {\n  return set;\n}\n// Error string ~> number\nfunction setTest4(set: Set<string>): Iterable<number> {\n  return set;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction setTest1(set: Set<string>): Iterable<string> {\n  return set;\n}\nfunction setTest2<T>(set: Set<T>): Iterable<T> {\n  return set;\n}\nfunction setTest3(set: Set<string>): Iterable<*> {\n  return set;\n}\n// Error string ~> number\nfunction setTest4(set: Set<string>): Iterable<number> {\n  return set;\n}\n\n`;\n\nexports[`string.js 1`] = `\n/* @flow */\n\n(\"hi\": Iterable<string>);\n(\"hi\": Iterable<*>);\n(\"hi\": Iterable<number>); // Error - string is a Iterable<string>\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n(\"hi\": Iterable<string>);\n(\"hi\": Iterable<*>);\n(\"hi\": Iterable<number>); // Error - string is a Iterable<string>\n\n`;\n\nexports[`variance.js 1`] = `\n/* @flow */\n\n(([]: Array<string>): Iterable<?string>); // ok, Iterable<+T>\n\n(([]: Array<string>).values(): Iterable<?string>); // ok, Iterator<+T>\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n(([]: Array<string>): Iterable<?string>); // ok, Iterable<+T>\n\n(([]: Array<string>).values(): Iterable<?string>); // ok, Iterator<+T>\n\n`;\n"
  },
  {
    "path": "tests/flow/iterable/array.js",
    "content": "/* @flow */\n\n(([1, 2]: Array<number>): Iterable<number>);\n([1,2,\"hi\"]: Iterable<number | string>);\n([1,2,3]: Iterable<*>);\n\n([\"hi\"]: Iterable<number>); // Error string ~> number\n([\"hi\", 1]: Iterable<string>); // Error number ~> string\n"
  },
  {
    "path": "tests/flow/iterable/caching_bug.js",
    "content": "/* @flow */\n\n/**\n * I've hit a bug with the caching in flow_js.ml. Avik is removing that caching\n * so it should be fixed soon. The basic idea is I flow something like\n *\n * Array<any | any> ~> Iterable<string>\n *\n * then Flow won't notice when I try to flow\n *\n * Array<string | number> ~> Iterable<string>\n *\n * We shouldn't hit the cache because the union types are different, but we do\n * anyway. I've fixed this temporarily by bumping the \"meaningful\" param to\n * Hashtbl.hash_param\n */\n\nfunction fill_the_cache(x: Array<any | any>): Iterable<string> { return x; }\n\n// Error: number ~> string\nfunction miss_the_cache(x: Array<string | number>): Iterable<string> { return x; }\n"
  },
  {
    "path": "tests/flow/iterable/iter.js",
    "content": "/* @flow */\n\nfunction foo(strs: Iterable<string>): void {\n  for (var s: string of strs) {\n    console.log(s);\n  }\n}\n\nvar m: Map<string, number> = new Map();\n\nfoo(m.keys());\n"
  },
  {
    "path": "tests/flow/iterable/iterator_result.js",
    "content": "/* @flow */\n\nfunction makeIterator(coin_flip: () => boolean ): Iterator<string> {\n  return {\n    \"@@iterator\"() { return makeIterator(coin_flip); },\n    next(): IteratorResult<string, void> {\n      var done = coin_flip();\n      if (!done) {\n        return { done, value: \"still going...\" };\n      } else {\n        return { done };\n      }\n    }\n  }\n}\n\nfunction makeIterator(coin_flip: () => boolean ): Iterator<string> {\n  return {\n    \"@@iterator\"() { return makeIterator(coin_flip); },\n    next(): IteratorResult<string, void> {\n      var done = coin_flip();\n      if (done) { // Whoops, made a mistake and forgot to negate done\n        return { done, value: \"still going...\" }; // Error string ~> void\n      } else {\n        return { done }; // Error void ~> string\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "tests/flow/iterable/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/iterable/map.js",
    "content": "/* @flow */\n\nfunction mapTest1(map: Map<string, number>): Iterable<[string, number]> {\n  return map;\n}\nfunction mapTest2<K, V>(map: Map<K, V>): Iterable<[K, V]> {\n  return map;\n};\nfunction mapTest3(map: Map<string, number>): Iterable<*> {\n  return map;\n}\n// Error - Map is an Iterable<[K, V]>\nfunction mapTest4(map: Map<number, string>): Iterable<string> {\n  return map;\n}\n"
  },
  {
    "path": "tests/flow/iterable/set.js",
    "content": "/* @flow */\n\nfunction setTest1(set: Set<string>): Iterable<string> {\n  return set;\n}\nfunction setTest2<T>(set: Set<T>): Iterable<T> {\n  return set;\n};\nfunction setTest3(set: Set<string>): Iterable<*> {\n  return set;\n}\n// Error string ~> number\nfunction setTest4(set: Set<string>): Iterable<number> {\n  return set;\n}\n"
  },
  {
    "path": "tests/flow/iterable/string.js",
    "content": "/* @flow */\n\n(\"hi\": Iterable<string>);\n(\"hi\": Iterable<*>);\n(\"hi\": Iterable<number>); // Error - string is a Iterable<string>\n"
  },
  {
    "path": "tests/flow/iterable/variance.js",
    "content": "/* @flow */\n\n(([]: Array<string>): Iterable<?string>); // ok, Iterable<+T>\n\n(([]: Array<string>).values(): Iterable<?string>); // ok, Iterator<+T>\n"
  },
  {
    "path": "tests/flow/jsx_intrinsics.builtin/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`main.js 1`] = `\n// @flow\n\nvar React = require('react');\n\nclass CustomComponent extends React.Component {\n  props: {\n    prop: string\n  };\n}\n\nvar a: React.Element<{prop: string}> = <CustomComponent prop=\"asdf\" />;\nvar b: React.Element<{prop1: string}> = <CustomComponent prop=\"asdf\" />; // Error: Props<{prop}> ~> Props<{prop1}>\n\n// Since intrinsics are typed as \\`any\\` out of the box, we can pass any\n// attributes to intrinsics!\nvar c: React.Element<any> = <div not_a_real_attr=\"asdf\" />;\n// However, we don't allow such elements to be viewed as React elements with\n// different attributes.\nvar d: React.Element<{doesntmatch: string}> = <div not_a_real_attr=\"asdf\" />;\n// No error as long as expectations are consistent, though.\nvar e: React.Element<{not_a_real_attr: string}> = <div not_a_real_attr=\"asdf\" />;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nvar React = require(\"react\");\n\nclass CustomComponent extends React.Component {\n  props: {\n    prop: string\n  };\n}\n\nvar a: React.Element<{ prop: string }> = <CustomComponent prop=\"asdf\" />;\nvar b: React.Element<{ prop1: string }> = <CustomComponent prop=\"asdf\" />; // Error: Props<{prop}> ~> Props<{prop1}>\n\n// Since intrinsics are typed as \\`any\\` out of the box, we can pass any\n// attributes to intrinsics!\nvar c: React.Element<any> = <div not_a_real_attr=\"asdf\" />;\n// However, we don't allow such elements to be viewed as React elements with\n// different attributes.\nvar d: React.Element<{ doesntmatch: string }> = <div not_a_real_attr=\"asdf\" />;\n// No error as long as expectations are consistent, though.\nvar e: React.Element<{ not_a_real_attr: string }> = (\n  <div not_a_real_attr=\"asdf\" />\n);\n\n`;\n\nexports[`strings.js 1`] = `\n/* @flow */\n\nvar React = require('react');\n\n// The builtin $JSXIntrinsics should allow any string\n\nvar Div = 'div';\nvar Bad = 'bad';\nvar Str: string = 'str';\n\n<Div />; // This is fine\n<Bad />; // This is fine\n<Str />; // This is fine\n\nReact.createElement('div', {}); // This is fine\nReact.createElement('bad', {}); // This is fine\n\n<Div id={42} />; // This is fine\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar React = require(\"react\");\n\n// The builtin $JSXIntrinsics should allow any string\n\nvar Div = \"div\";\nvar Bad = \"bad\";\nvar Str: string = \"str\";\n\n<Div />; // This is fine\n<Bad />; // This is fine\n<Str />; // This is fine\n\nReact.createElement(\"div\", {}); // This is fine\nReact.createElement(\"bad\", {}); // This is fine\n\n<Div id={42} />; // This is fine\n\n`;\n"
  },
  {
    "path": "tests/flow/jsx_intrinsics.builtin/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/jsx_intrinsics.builtin/main.js",
    "content": "// @flow\n\nvar React = require('react');\n\nclass CustomComponent extends React.Component {\n  props: {\n    prop: string\n  };\n}\n\nvar a: React.Element<{prop: string}> = <CustomComponent prop=\"asdf\" />;\nvar b: React.Element<{prop1: string}> = <CustomComponent prop=\"asdf\" />; // Error: Props<{prop}> ~> Props<{prop1}>\n\n// Since intrinsics are typed as `any` out of the box, we can pass any\n// attributes to intrinsics!\nvar c: React.Element<any> = <div not_a_real_attr=\"asdf\" />;\n// However, we don't allow such elements to be viewed as React elements with\n// different attributes.\nvar d: React.Element<{doesntmatch: string}> = <div not_a_real_attr=\"asdf\" />;\n// No error as long as expectations are consistent, though.\nvar e: React.Element<{not_a_real_attr: string}> = <div not_a_real_attr=\"asdf\" />;\n"
  },
  {
    "path": "tests/flow/jsx_intrinsics.builtin/strings.js",
    "content": "/* @flow */\n\nvar React = require('react');\n\n// The builtin $JSXIntrinsics should allow any string\n\nvar Div = 'div';\nvar Bad = 'bad';\nvar Str: string = 'str';\n\n<Div />; // This is fine\n<Bad />; // This is fine\n<Str />; // This is fine\n\nReact.createElement('div', {}); // This is fine\nReact.createElement('bad', {}); // This is fine\n\n<Div id={42} />; // This is fine\n"
  },
  {
    "path": "tests/flow/jsx_intrinsics.custom/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`main.js 1`] = `\n// @flow\n\nvar React = require('react');\n\nclass CustomComponent extends React.Component {\n  props: {\n    prop: string\n  };\n}\n\nvar a: React.Element<{prop: string}> = <CustomComponent prop=\"asdf\" />;\nvar b: React.Element<{prop1: string}> = <CustomComponent prop=\"asdf\" />; // Error: Props<{prop}> ~> Props<{prop1}>\n\n<div id=\"asdf\" />;\n<div id={42} />; // Error: (\\`id\\` prop) number ~> string\nvar c: React.Element<{id: string}> = <div id=\"asdf\" />;\nvar d: React.Element<{id: number}> = <div id=\"asdf\" />; // Error: Props<{id:string}> ~> Props<{id:number}>\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nvar React = require(\"react\");\n\nclass CustomComponent extends React.Component {\n  props: {\n    prop: string\n  };\n}\n\nvar a: React.Element<{ prop: string }> = <CustomComponent prop=\"asdf\" />;\nvar b: React.Element<{ prop1: string }> = <CustomComponent prop=\"asdf\" />; // Error: Props<{prop}> ~> Props<{prop1}>\n\n<div id=\"asdf\" />;\n<div id={42} />; // Error: (\\`id\\` prop) number ~> string\nvar c: React.Element<{ id: string }> = <div id=\"asdf\" />;\nvar d: React.Element<{ id: number }> = <div id=\"asdf\" />; // Error: Props<{id:string}> ~> Props<{id:number}>\n\n`;\n\nexports[`strings.js 1`] = `\n/* @flow */\n\nvar React = require('react');\n\nvar Div = 'div';\nvar Bad = 'bad';\nvar Str: string = 'str';\n\n<Div />; // This is fine\n<Bad />; // Error: 'bad' not in JSXIntrinsics\n<Str />; // Error: string ~> keys of JSXIntrinsics\n\nReact.createElement('div', {}); // This is fine\nReact.createElement('bad', {}); // Error: 'bad' not in JSXIntrinsics\nReact.createElement(Str, {}); // Error: string ~> keys of JSXIntrinsics\n\n// TODO: Make this an error\n<Div id={42} />; // Not an error but should be eventually\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar React = require(\"react\");\n\nvar Div = \"div\";\nvar Bad = \"bad\";\nvar Str: string = \"str\";\n\n<Div />; // This is fine\n<Bad />; // Error: 'bad' not in JSXIntrinsics\n<Str />; // Error: string ~> keys of JSXIntrinsics\n\nReact.createElement(\"div\", {}); // This is fine\nReact.createElement(\"bad\", {}); // Error: 'bad' not in JSXIntrinsics\nReact.createElement(Str, {}); // Error: string ~> keys of JSXIntrinsics\n\n// TODO: Make this an error\n<Div id={42} />; // Not an error but should be eventually\n\n`;\n"
  },
  {
    "path": "tests/flow/jsx_intrinsics.custom/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/jsx_intrinsics.custom/lib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`jsx.js 1`] = `\ndeclare var $React: $Exports<'react'>; // fake import\ntype $JSXIntrinsic<T> = Class<$React.Component<void,T,mixed>>;\n\ntype $JSXIntrinsics = {\n  div: $JSXIntrinsic<{id: string}>,\n  span: $JSXIntrinsic<{id: string, class: string}>,\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare var $React: $Exports<\"react\">; // fake import\ntype $JSXIntrinsic<T> = Class<$React.Component<void, T, mixed>>;\n\ntype $JSXIntrinsics = {\n  div: $JSXIntrinsic<{ id: string }>,\n  span: $JSXIntrinsic<{ id: string, class: string }>\n};\n\n`;\n"
  },
  {
    "path": "tests/flow/jsx_intrinsics.custom/lib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/jsx_intrinsics.custom/lib/jsx.js",
    "content": "declare var $React: $Exports<'react'>; // fake import\ntype $JSXIntrinsic<T> = Class<$React.Component<void,T,mixed>>;\n\ntype $JSXIntrinsics = {\n  div: $JSXIntrinsic<{id: string}>,\n  span: $JSXIntrinsic<{id: string, class: string}>,\n};\n"
  },
  {
    "path": "tests/flow/jsx_intrinsics.custom/main.js",
    "content": "// @flow\n\nvar React = require('react');\n\nclass CustomComponent extends React.Component {\n  props: {\n    prop: string\n  };\n}\n\nvar a: React.Element<{prop: string}> = <CustomComponent prop=\"asdf\" />;\nvar b: React.Element<{prop1: string}> = <CustomComponent prop=\"asdf\" />; // Error: Props<{prop}> ~> Props<{prop1}>\n\n<div id=\"asdf\" />;\n<div id={42} />; // Error: (`id` prop) number ~> string\nvar c: React.Element<{id: string}> = <div id=\"asdf\" />;\nvar d: React.Element<{id: number}> = <div id=\"asdf\" />; // Error: Props<{id:string}> ~> Props<{id:number}>\n"
  },
  {
    "path": "tests/flow/jsx_intrinsics.custom/strings.js",
    "content": "/* @flow */\n\nvar React = require('react');\n\nvar Div = 'div';\nvar Bad = 'bad';\nvar Str: string = 'str';\n\n<Div />; // This is fine\n<Bad />; // Error: 'bad' not in JSXIntrinsics\n<Str />; // Error: string ~> keys of JSXIntrinsics\n\nReact.createElement('div', {}); // This is fine\nReact.createElement('bad', {}); // Error: 'bad' not in JSXIntrinsics\nReact.createElement(Str, {}); // Error: string ~> keys of JSXIntrinsics\n\n// TODO: Make this an error\n<Div id={42} />; // Not an error but should be eventually\n"
  },
  {
    "path": "tests/flow/keys/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`keys.js 1`] = `\n/* @flow */\n\nfunction testKeysOfObject(str: string, lit: 'hi') {\n  (str: $Keys<Object>); // Any string should be fine\n  if (str) {\n    (str: $Keys<Object>); // No error, truthy string should be fine\n  }\n  ('hi': $Keys<Object>); // String literal should be fine\n\n  (123: $Keys<Object>); // Error: number -> keys of Object\n}\n\ntype StrDict = {[key: string]: mixed};\nfunction testKeysOfStrDict(str: string, lit: 'hi') {\n  (str: $Keys<StrDict>); // Any string should be fine\n  if (str) {\n    (str: $Keys<StrDict>); // No error, truthy string should be fine\n  }\n  ('hi': $Keys<StrDict>); // String literal should be fine\n\n  (123: $Keys<StrDict>); // Error: number -> keys of StrDict\n}\n\ntype StrLitDict = {[key: 'hi']: mixed};\nfunction testKeysOfStrLitDict(str: string, lit: 'hi') {\n  (str: $Keys<StrLitDict>); // Error: Not all strings are allowed\n  if (str) {\n    (str: $Keys<StrLitDict>); // Error: Not all truthy strings are allowed\n  }\n  ('hi': $Keys<StrLitDict>); // The right string literal is allowed\n  ('bye': $Keys<StrLitDict>); // Error: The wrong string literal is not allowed\n\n  (123: $Keys<StrLitDict>); // Error: number -> keys of StrLitDict\n}\n\ntype ObjLit = {hi: mixed};\nfunction testKeysOfOtherObj(str: string, lit: 'hi') {\n  (str: $Keys<ObjLit>); // Error: string -> keys of ObjLit\n  if (str) {\n    (str: $Keys<ObjLit>); // Error: truthy string -> keys of ObjLit\n  }\n  ('hi': $Keys<ObjLit>); // String literal should be fine\n\n  (123: $Keys<ObjLit>); // Error: number -> keys of ObjLit\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction testKeysOfObject(str: string, lit: \"hi\") {\n  (str: $Keys<Object>); // Any string should be fine\n  if (str) {\n    (str: $Keys<Object>); // No error, truthy string should be fine\n  }\n  (\"hi\": $Keys<Object>); // String literal should be fine\n\n  (123: $Keys<Object>); // Error: number -> keys of Object\n}\n\ntype StrDict = { [key: string]: mixed };\nfunction testKeysOfStrDict(str: string, lit: \"hi\") {\n  (str: $Keys<StrDict>); // Any string should be fine\n  if (str) {\n    (str: $Keys<StrDict>); // No error, truthy string should be fine\n  }\n  (\"hi\": $Keys<StrDict>); // String literal should be fine\n\n  (123: $Keys<StrDict>); // Error: number -> keys of StrDict\n}\n\ntype StrLitDict = { [key: \"hi\"]: mixed };\nfunction testKeysOfStrLitDict(str: string, lit: \"hi\") {\n  (str: $Keys<StrLitDict>); // Error: Not all strings are allowed\n  if (str) {\n    (str: $Keys<StrLitDict>); // Error: Not all truthy strings are allowed\n  }\n  (\"hi\": $Keys<StrLitDict>); // The right string literal is allowed\n  (\"bye\": $Keys<StrLitDict>); // Error: The wrong string literal is not allowed\n\n  (123: $Keys<StrLitDict>); // Error: number -> keys of StrLitDict\n}\n\ntype ObjLit = { hi: mixed };\nfunction testKeysOfOtherObj(str: string, lit: \"hi\") {\n  (str: $Keys<ObjLit>); // Error: string -> keys of ObjLit\n  if (str) {\n    (str: $Keys<ObjLit>); // Error: truthy string -> keys of ObjLit\n  }\n  (\"hi\": $Keys<ObjLit>); // String literal should be fine\n\n  (123: $Keys<ObjLit>); // Error: number -> keys of ObjLit\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/keys/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/keys/keys.js",
    "content": "/* @flow */\n\nfunction testKeysOfObject(str: string, lit: 'hi') {\n  (str: $Keys<Object>); // Any string should be fine\n  if (str) {\n    (str: $Keys<Object>); // No error, truthy string should be fine\n  }\n  ('hi': $Keys<Object>); // String literal should be fine\n\n  (123: $Keys<Object>); // Error: number -> keys of Object\n}\n\ntype StrDict = {[key: string]: mixed};\nfunction testKeysOfStrDict(str: string, lit: 'hi') {\n  (str: $Keys<StrDict>); // Any string should be fine\n  if (str) {\n    (str: $Keys<StrDict>); // No error, truthy string should be fine\n  }\n  ('hi': $Keys<StrDict>); // String literal should be fine\n\n  (123: $Keys<StrDict>); // Error: number -> keys of StrDict\n}\n\ntype StrLitDict = {[key: 'hi']: mixed};\nfunction testKeysOfStrLitDict(str: string, lit: 'hi') {\n  (str: $Keys<StrLitDict>); // Error: Not all strings are allowed\n  if (str) {\n    (str: $Keys<StrLitDict>); // Error: Not all truthy strings are allowed\n  }\n  ('hi': $Keys<StrLitDict>); // The right string literal is allowed\n  ('bye': $Keys<StrLitDict>); // Error: The wrong string literal is not allowed\n\n  (123: $Keys<StrLitDict>); // Error: number -> keys of StrLitDict\n}\n\ntype ObjLit = {hi: mixed};\nfunction testKeysOfOtherObj(str: string, lit: 'hi') {\n  (str: $Keys<ObjLit>); // Error: string -> keys of ObjLit\n  if (str) {\n    (str: $Keys<ObjLit>); // Error: truthy string -> keys of ObjLit\n  }\n  ('hi': $Keys<ObjLit>); // String literal should be fine\n\n  (123: $Keys<ObjLit>); // Error: number -> keys of ObjLit\n}\n"
  },
  {
    "path": "tests/flow/keyvalue/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`keyvalue.js 1`] = `\n// @flow\n\nlet tests = [\n  function(x: { [key: number]: string }) {\n    (x[\"\"]: number);\n  }\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  function(x: { [key: number]: string }) {\n    (x[\"\"]: number);\n  }\n];\n\n`;\n"
  },
  {
    "path": "tests/flow/keyvalue/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/keyvalue/keyvalue.js",
    "content": "// @flow\n\nlet tests = [\n  function(x: { [key: number]: string }) {\n    (x[\"\"]: number);\n  }\n];\n"
  },
  {
    "path": "tests/flow/last_duplicate_property_wins/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n// @flow\n\n// Classes\n\nclass C {\n  foo(): number { return 0; }\n  foo(): string { return \"hello\" } // last wins\n  x: number;\n  x: string; // last wins\n  bar(): number { return 0; }\n  bar: string; // field wins over method\n  qux: number;\n  qux(): string { return \"hello\" } // method loses to field!\n}\n\n// check\n\n((new C).foo(): boolean); // last wins\n((new C).x: boolean); // last wins\n((new C).bar: boolean); // last wins\n((new C).qux: boolean); // weird outlier where last doesn't win in classes\n\n// Objects\n\nconst o = {\n  foo(): number { return 0; },\n  foo(): string { return \"hello\" }, // last wins\n  x: 42,\n  x: \"hello\", // last wins\n  bar(): number { return 0; },\n  bar: \"hello\", // last wins\n  qux: 42,\n  qux(): string { return \"hello\" }, // last wins\n};\n\n// check\n\n(o.foo(): boolean); // last wins\n(o.x: boolean); // last wins\n(o.bar: boolean); // last wins\n(o.qux(): boolean); // last wins\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// Classes\n\nclass C {\n  foo(): number {\n    return 0;\n  }\n  foo(): string {\n    return \"hello\";\n  } // last wins\n  x: number;\n  x: string; // last wins\n  bar(): number {\n    return 0;\n  }\n  bar: string; // field wins over method\n  qux: number;\n  qux(): string {\n    return \"hello\";\n  } // method loses to field!\n}\n\n// check\n\n(new C().foo(): boolean); // last wins\n(new C().x: boolean); // last wins\n(new C().bar: boolean); // last wins\n(new C().qux: boolean); // weird outlier where last doesn't win in classes\n\n// Objects\n\nconst o = {\n  foo(): number {\n    return 0;\n  },\n  foo(): string {\n    return \"hello\";\n  }, // last wins\n  x: 42,\n  x: \"hello\", // last wins\n  bar(): number {\n    return 0;\n  },\n  bar: \"hello\", // last wins\n  qux: 42,\n  qux(): string {\n    return \"hello\";\n  } // last wins\n};\n\n// check\n\n(o.foo(): boolean); // last wins\n(o.x: boolean); // last wins\n(o.bar: boolean); // last wins\n(o.qux(): boolean); // last wins\n\n`;\n"
  },
  {
    "path": "tests/flow/last_duplicate_property_wins/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/last_duplicate_property_wins/test.js",
    "content": "// @flow\n\n// Classes\n\nclass C {\n  foo(): number { return 0; }\n  foo(): string { return \"hello\" } // last wins\n  x: number;\n  x: string; // last wins\n  bar(): number { return 0; }\n  bar: string; // field wins over method\n  qux: number;\n  qux(): string { return \"hello\" } // method loses to field!\n}\n\n// check\n\n((new C).foo(): boolean); // last wins\n((new C).x: boolean); // last wins\n((new C).bar: boolean); // last wins\n((new C).qux: boolean); // weird outlier where last doesn't win in classes\n\n// Objects\n\nconst o = {\n  foo(): number { return 0; },\n  foo(): string { return \"hello\" }, // last wins\n  x: 42,\n  x: \"hello\", // last wins\n  bar(): number { return 0; },\n  bar: \"hello\", // last wins\n  qux: 42,\n  qux(): string { return \"hello\" }, // last wins\n};\n\n// check\n\n(o.foo(): boolean); // last wins\n(o.x: boolean); // last wins\n(o.bar: boolean); // last wins\n(o.qux(): boolean); // last wins\n"
  },
  {
    "path": "tests/flow/lib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`libtest.js 1`] = `\nvar x:string = NaN\nvar y:string = Number.MAX_VALUE;\nvar z:number = new TypeError().name;\nvar w:string = parseInt(\"...\");\n\nvar a = new Map();\na.delete('foobar');\n\nvar b = undefined;\nif (undefined) {\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x: string = NaN;\nvar y: string = Number.MAX_VALUE;\nvar z: number = new TypeError().name;\nvar w: string = parseInt(\"...\");\n\nvar a = new Map();\na.delete(\"foobar\");\n\nvar b = undefined;\nif (undefined) {\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/lib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/lib/libtest.js",
    "content": "var x:string = NaN\nvar y:string = Number.MAX_VALUE;\nvar z:number = new TypeError().name;\nvar w:string = parseInt(\"...\");\n\nvar a = new Map();\na.delete('foobar');\n\nvar b = undefined;\nif (undefined) {\n}\n"
  },
  {
    "path": "tests/flow/lib_interfaces/declarations/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`underscore.js 1`] = `\ninterface C<T> {\n  foo(): CArrays<T>;\n  bar(): C<any>;\n}\ninterface CArrays<T> extends C<Array<T>> {\n  bar(): C<any>;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface C<T> {\n  foo(): CArrays<T>,\n  bar(): C<any>\n}\ninterface CArrays<T> extends C<Array<T>> {\n  bar(): C<any>\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/lib_interfaces/declarations/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/lib_interfaces/declarations/underscore.js",
    "content": "interface C<T> {\n  foo(): CArrays<T>;\n  bar(): C<any>;\n}\ninterface CArrays<T> extends C<Array<T>> {\n  bar(): C<any>;\n}\n"
  },
  {
    "path": "tests/flow/libconfig/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`libA.js 1`] = `\ndeclare function foo(x: number): void;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare function foo(x: number): void;\n\n`;\n\nexports[`libB.js 1`] = `\ndeclare function bar(x: string): void;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare function bar(x: string): void;\n\n`;\n\nexports[`libtest.js 1`] = `\nfoo(123);\nbar(123);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfoo(123);\nbar(123);\n\n`;\n"
  },
  {
    "path": "tests/flow/libconfig/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/libconfig/libA.js",
    "content": "declare function foo(x: number): void;\n"
  },
  {
    "path": "tests/flow/libconfig/libB.js",
    "content": "declare function bar(x: string): void;\n"
  },
  {
    "path": "tests/flow/libconfig/libtest.js",
    "content": "foo(123);\nbar(123);\n"
  },
  {
    "path": "tests/flow/libdef_ignored_module/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n/* @flow */\n\nimport foo from \"foo\";\n\n(foo.bar : string); // error number ~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nimport foo from \"foo\";\n\n(foo.bar: string); // error number ~> string\n\n`;\n"
  },
  {
    "path": "tests/flow/libdef_ignored_module/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/libdef_ignored_module/lib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`foo.js 1`] = `\ndeclare module foo {\n  declare var bar: number;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare module foo {\n  declare var bar: number;\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/libdef_ignored_module/lib/foo.js",
    "content": "declare module foo {\n  declare var bar: number;\n}\n"
  },
  {
    "path": "tests/flow/libdef_ignored_module/lib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/libdef_ignored_module/test.js",
    "content": "/* @flow */\n\nimport foo from \"foo\";\n\n(foo.bar : string); // error number ~> string\n"
  },
  {
    "path": "tests/flow/liberr/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`a.js 1`] = `\n/**\n * @flow\n */\n// one error here, to verify lib errors sort to top.\nvar x: string = 0;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n// one error here, to verify lib errors sort to top.\nvar x: string = 0;\n\n`;\n"
  },
  {
    "path": "tests/flow/liberr/a.js",
    "content": "/**\n * @flow\n */\n// one error here, to verify lib errors sort to top.\nvar x: string = 0;\n"
  },
  {
    "path": "tests/flow/liberr/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/liberr/libs/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`type_error.js 1`] = `\n// @flow\ndeclare function foo(x: number): Array;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\ndeclare function foo(x: number): Array;\n\n`;\n"
  },
  {
    "path": "tests/flow/liberr/libs/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/liberr/libs/type_error.js",
    "content": "// @flow\ndeclare function foo(x: number): Array;\n"
  },
  {
    "path": "tests/flow/libflow-typed/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`libtest.js 1`] = `\n/* @flow */\nconst dino : Dinosaur = \"Stegosaurus\"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nconst dino: Dinosaur = \"Stegosaurus\";\n\n`;\n"
  },
  {
    "path": "tests/flow/libflow-typed/flow-typed/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`dino.js 1`] = `\ndeclare type Dinosaur = \"T-Rex\" | \"Apatosaurus\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare type Dinosaur = \"T-Rex\" | \"Apatosaurus\";\n\n`;\n"
  },
  {
    "path": "tests/flow/libflow-typed/flow-typed/dino.js",
    "content": "declare type Dinosaur = \"T-Rex\" | \"Apatosaurus\";\n"
  },
  {
    "path": "tests/flow/libflow-typed/flow-typed/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/libflow-typed/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/libflow-typed/libtest.js",
    "content": "/* @flow */\nconst dino : Dinosaur = \"Stegosaurus\"\n"
  },
  {
    "path": "tests/flow/librec/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`libtest.js 1`] = `\nfoo(123);\nbar(123);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfoo(123);\nbar(123);\n\n`;\n"
  },
  {
    "path": "tests/flow/librec/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/librec/lib/A/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`libA.js 1`] = `\ndeclare function foo(x: number): void;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare function foo(x: number): void;\n\n`;\n"
  },
  {
    "path": "tests/flow/librec/lib/A/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/librec/lib/A/libA.js",
    "content": "declare function foo(x: number): void;\n"
  },
  {
    "path": "tests/flow/librec/lib/B/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`libB.js 1`] = `\ndeclare function bar(x: string): void;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare function bar(x: string): void;\n\n`;\n"
  },
  {
    "path": "tests/flow/librec/lib/B/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/librec/lib/B/libB.js",
    "content": "declare function bar(x: string): void;\n"
  },
  {
    "path": "tests/flow/librec/libtest.js",
    "content": "foo(123);\nbar(123);\n"
  },
  {
    "path": "tests/flow/literal/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`enum.js 1`] = `\nvar APIKeys = {\n    AGE: 'age',\n    NAME: 'name',\n};\n\nmodule.exports = APIKeys;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar APIKeys = {\n  AGE: \"age\",\n  NAME: \"name\"\n};\n\nmodule.exports = APIKeys;\n\n`;\n\nexports[`enum_client.js 1`] = `\nvar APIKeys = require('./enum');\n// object that maps \"AGE\" to \"age\", \"NAME\" to \"name\"\n\nfunction foo(x: $Keys<typeof APIKeys>) { }\nfoo(\"AGE\");\nfoo(\"LOCATION\"); // error\n\nfunction bar(x: $Keys<{age: number}>) { }\nbar(APIKeys.AGE); // not an error: APIKeys.AGE = \"age\"\nbar(APIKeys.NAME); // error: since \"NAME\" is not in the smaller enum\n\nvar object = {};\nobject[APIKeys.AGE] = 123; // i.e., object.age = 123\nobject[APIKeys.NAME] = \"FOO\"; // i.e., object.name = \"FOO\"\n\nvar age:number = object[APIKeys.AGE];\nvar name:number = object[APIKeys.NAME]; // error: object.name is a string\n\nvar indices = { red: 0, green: 1, blue: 2 };\nvar tuple = [42, \"hello\", false];\nvar red:string = tuple[indices.red]; // error: tuple[0] is a number\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar APIKeys = require(\"./enum\");\n// object that maps \"AGE\" to \"age\", \"NAME\" to \"name\"\n\nfunction foo(x: $Keys<typeof APIKeys>) {}\nfoo(\"AGE\");\nfoo(\"LOCATION\"); // error\n\nfunction bar(x: $Keys<{ age: number }>) {}\nbar(APIKeys.AGE); // not an error: APIKeys.AGE = \"age\"\nbar(APIKeys.NAME); // error: since \"NAME\" is not in the smaller enum\n\nvar object = {};\nobject[APIKeys.AGE] = 123; // i.e., object.age = 123\nobject[APIKeys.NAME] = \"FOO\"; // i.e., object.name = \"FOO\"\n\nvar age: number = object[APIKeys.AGE];\nvar name: number = object[APIKeys.NAME]; // error: object.name is a string\n\nvar indices = { red: 0, green: 1, blue: 2 };\nvar tuple = [42, \"hello\", false];\nvar red: string = tuple[indices.red]; // error: tuple[0] is a number\n\n`;\n\nexports[`number.js 1`] = `\nfunction test1(x: number): number {\n  return -x;\n}\n\nfunction test2(x: string): number {\n  return -x;\n}\n\n// sanity checks to make sure merging envs doesn't keep creating new NumT's\n// because of the UnaryMinusT's, causing nontermination\nfunction test3(x: number, flip_times: number): number {\n  for (var i = 0; i < flip_times; i++) {\n    x = -x;\n  }\n  return x;\n}\nfunction test4(flip_times: number): number {\n  var x = 1;\n  for (var i = 0; i < flip_times; i++) {\n    x = -x;\n  }\n  return x;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction test1(x: number): number {\n  return -x;\n}\n\nfunction test2(x: string): number {\n  return -x;\n}\n\n// sanity checks to make sure merging envs doesn't keep creating new NumT's\n// because of the UnaryMinusT's, causing nontermination\nfunction test3(x: number, flip_times: number): number {\n  for (var i = 0; i < flip_times; i++) {\n    x = -x;\n  }\n  return x;\n}\nfunction test4(flip_times: number): number {\n  var x = 1;\n  for (var i = 0; i < flip_times; i++) {\n    x = -x;\n  }\n  return x;\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/literal/enum.js",
    "content": "var APIKeys = {\n    AGE: 'age',\n    NAME: 'name',\n};\n\nmodule.exports = APIKeys;\n"
  },
  {
    "path": "tests/flow/literal/enum_client.js",
    "content": "var APIKeys = require('./enum');\n// object that maps \"AGE\" to \"age\", \"NAME\" to \"name\"\n\nfunction foo(x: $Keys<typeof APIKeys>) { }\nfoo(\"AGE\");\nfoo(\"LOCATION\"); // error\n\nfunction bar(x: $Keys<{age: number}>) { }\nbar(APIKeys.AGE); // not an error: APIKeys.AGE = \"age\"\nbar(APIKeys.NAME); // error: since \"NAME\" is not in the smaller enum\n\nvar object = {};\nobject[APIKeys.AGE] = 123; // i.e., object.age = 123\nobject[APIKeys.NAME] = \"FOO\"; // i.e., object.name = \"FOO\"\n\nvar age:number = object[APIKeys.AGE];\nvar name:number = object[APIKeys.NAME]; // error: object.name is a string\n\nvar indices = { red: 0, green: 1, blue: 2 };\nvar tuple = [42, \"hello\", false];\nvar red:string = tuple[indices.red]; // error: tuple[0] is a number\n"
  },
  {
    "path": "tests/flow/literal/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/literal/number.js",
    "content": "function test1(x: number): number {\n  return -x;\n}\n\nfunction test2(x: string): number {\n  return -x;\n}\n\n// sanity checks to make sure merging envs doesn't keep creating new NumT's\n// because of the UnaryMinusT's, causing nontermination\nfunction test3(x: number, flip_times: number): number {\n  for (var i = 0; i < flip_times; i++) {\n    x = -x;\n  }\n  return x;\n}\nfunction test4(flip_times: number): number {\n  var x = 1;\n  for (var i = 0; i < flip_times; i++) {\n    x = -x;\n  }\n  return x;\n}\n"
  },
  {
    "path": "tests/flow/locals/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`lex.js 1`] = `\nfunction switch_scope(x: mixed) {\n  let a = \"\";\n  let b = \"\";\n  switch (x) {\n    case \"foo\":\n      let a;\n      a = 0; // doesn't add lower bound to outer a\n      b = 0;\n  }\n  (a : string); // OK\n  (b : string); // error: number ~> string\n}\n\nfunction try_scope_finally() {\n  let a;\n  let b;\n  try {\n    a = \"\";\n    b = \"\";\n  } finally {\n    let a;\n    a = 0; // doesn't add lower bound to outer a\n    b = 0;\n  }\n  (a : string); // ok\n  (b : string); // error: number ~> string\n}\n\nfunction for_scope() {\n  let a = \"\";\n  let b = \"\";\n  for (let a;;) {\n    a = 0; // doesn't add lower bound to outer a\n    b = 0;\n  }\n  (a : string);\n  (b : string); // error: number ~> string\n}\n\nfunction for_in_scope(o: Object) {\n  let a = 0;\n  let b = 0;\n  for (let a in o) {\n    a = \"\"; // doesn't add lower bound to outer a\n    b = \"\";\n  }\n  (a : number);\n  (b : number); // error: string ~> number\n}\n\nfunction for_of_scope(xs: number[]) {\n  let a = \"\";\n  let b = \"\";\n  for (let a of xs) {\n    a = 0; // doesn't add lower bound to outer a\n    b = 0;\n  }\n  (a : string);\n  (b : string); // error: number ~> string\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction switch_scope(x: mixed) {\n  let a = \"\";\n  let b = \"\";\n  switch (x) {\n    case \"foo\":\n      let a;\n      a = 0; // doesn't add lower bound to outer a\n      b = 0;\n  }\n  (a: string); // OK\n  (b: string); // error: number ~> string\n}\n\nfunction try_scope_finally() {\n  let a;\n  let b;\n  try {\n    a = \"\";\n    b = \"\";\n  } finally {\n    let a;\n    a = 0; // doesn't add lower bound to outer a\n    b = 0;\n  }\n  (a: string); // ok\n  (b: string); // error: number ~> string\n}\n\nfunction for_scope() {\n  let a = \"\";\n  let b = \"\";\n  for (let a; ; ) {\n    a = 0; // doesn't add lower bound to outer a\n    b = 0;\n  }\n  (a: string);\n  (b: string); // error: number ~> string\n}\n\nfunction for_in_scope(o: Object) {\n  let a = 0;\n  let b = 0;\n  for (let a in o) {\n    a = \"\"; // doesn't add lower bound to outer a\n    b = \"\";\n  }\n  (a: number);\n  (b: number); // error: string ~> number\n}\n\nfunction for_of_scope(xs: number[]) {\n  let a = \"\";\n  let b = \"\";\n  for (let a of xs) {\n    a = 0; // doesn't add lower bound to outer a\n    b = 0;\n  }\n  (a: string);\n  (b: string); // error: number ~> string\n}\n\n`;\n\nexports[`locals.js 1`] = `\nvar x:string = 0;\nvar x:number = 1;\n\n//declare var T: $Type<number | Array<T>>;\n\nfunction foo(p: bool) {}\n\nfunction sorry(really: bool) {\n    if (really) {\n        var x: number | string = 1337;\n    } else {\n        var x: bool = true;\n    }\n    foo(x);\n}\n\nfunction foo0(b: bool): number {\n  var x = 0;\n  if (b) {\n    var x = \"\"; // error: string ~> number\n  }\n  return x;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x: string = 0;\nvar x: number = 1;\n\n//declare var T: $Type<number | Array<T>>;\n\nfunction foo(p: boolean) {}\n\nfunction sorry(really: boolean) {\n  if (really) {\n    var x: number | string = 1337;\n  } else {\n    var x: boolean = true;\n  }\n  foo(x);\n}\n\nfunction foo0(b: boolean): number {\n  var x = 0;\n  if (b) {\n    var x = \"\"; // error: string ~> number\n  }\n  return x;\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/locals/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/locals/lex.js",
    "content": "function switch_scope(x: mixed) {\n  let a = \"\";\n  let b = \"\";\n  switch (x) {\n    case \"foo\":\n      let a;\n      a = 0; // doesn't add lower bound to outer a\n      b = 0;\n  }\n  (a : string); // OK\n  (b : string); // error: number ~> string\n}\n\nfunction try_scope_finally() {\n  let a;\n  let b;\n  try {\n    a = \"\";\n    b = \"\";\n  } finally {\n    let a;\n    a = 0; // doesn't add lower bound to outer a\n    b = 0;\n  }\n  (a : string); // ok\n  (b : string); // error: number ~> string\n}\n\nfunction for_scope() {\n  let a = \"\";\n  let b = \"\";\n  for (let a;;) {\n    a = 0; // doesn't add lower bound to outer a\n    b = 0;\n  }\n  (a : string);\n  (b : string); // error: number ~> string\n}\n\nfunction for_in_scope(o: Object) {\n  let a = 0;\n  let b = 0;\n  for (let a in o) {\n    a = \"\"; // doesn't add lower bound to outer a\n    b = \"\";\n  }\n  (a : number);\n  (b : number); // error: string ~> number\n}\n\nfunction for_of_scope(xs: number[]) {\n  let a = \"\";\n  let b = \"\";\n  for (let a of xs) {\n    a = 0; // doesn't add lower bound to outer a\n    b = 0;\n  }\n  (a : string);\n  (b : string); // error: number ~> string\n}\n"
  },
  {
    "path": "tests/flow/locals/locals.js",
    "content": "var x:string = 0;\nvar x:number = 1;\n\n//declare var T: $Type<number | Array<T>>;\n\nfunction foo(p: bool) {}\n\nfunction sorry(really: bool) {\n    if (really) {\n        var x: number | string = 1337;\n    } else {\n        var x: bool = true;\n    }\n    foo(x);\n}\n\nfunction foo0(b: bool): number {\n  var x = 0;\n  if (b) {\n    var x = \"\"; // error: string ~> number\n  }\n  return x;\n}\n"
  },
  {
    "path": "tests/flow/logical/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`logical.js 1`] = `\n/* @flow */\n\n/**\n * A falsy variable on the left side of &&\n */\nfunction logical1a(): number { // expected \\`: boolean\\`\n    var x = false;\n    return x && '123';\n}\n\n/**\n * A truthy variable on the left side of &&\n */\nfunction logical1b(): string {\n    var x = true;\n    return x && '123';\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2a(): number { // expected \\`: boolean\\`\n    return false && '123';\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2b(): number {\n    return 0 && '123';\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2c(): string {\n    return \"\" && 123;\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2d(): string {\n    return true && '123';\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2e(): number {\n    return 'foo' && 123;\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2f(): string {\n    return 123 && 'foo';\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2g(): string {\n    return [1,2,3] && 'foo';\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2h(x: {a: number}): string {\n    return x && 'foo';\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2i(x: Object): string {\n    return x && 'foo';\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2j(x: (a: number) => number): string {\n    return x && 'foo';\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2k(x: Function): string {\n    return x && 'foo';\n}\n\n/**\n * An expression on the left side of &&\n */\nfunction logical3a(): string { // expected \\`: boolean\\`\n    var x: ?number = null;\n    return x != null && x > 10;\n}\n\n/**\n * An expression on the left side of &&\n */\nfunction logical3b(): number { // expected \\`: boolean | number\\`\n    var x: ?number = null;\n    return x != null && x;\n}\n\n/**\n * An expression on the left side of &&\n */\nfunction logical3c(): ?number { // expected \\`: boolean | ?number\\`\n    var x: ?number = null;\n    return x != undefined && x;\n}\n\n/**\n * Maybe truthy returns both types\n */\nfunction logical4(x: boolean): string { // expected \\`: boolean | string\\`\n    return x && '123';\n}\n\n/**\n * A falsy variable on the left side of ||\n */\nfunction logical5a(): number {\n    var x = false;\n    return x || 0;\n}\n\n/**\n * A maybe variable on the left side of ||\n */\nfunction logical5b(): number {\n    var x: ?number = null;\n    return x || 0;\n}\n\n/**\n * A truthy variable on the left side of ||\n */\nfunction logical5c(): string { // expected \\`: boolean\\`\n    var x = true;\n    return x || 0;\n}\n\n/**\n * A literal on the left side of ||\n */\nfunction logical6a(): string {\n    return false || '123';\n}\n\n/**\n * A literal on the left side of ||\n */\nfunction logical6b(): string {\n    return 0 || '123';\n}\n\n/**\n * A literal on the left side of ||\n */\nfunction logical6c(): number {\n    return \"\" || 123;\n}\n\n/**\n * A literal on the left side of ||\n */\nfunction logical6d(): number { // expected \\`: boolean\\`\n    return true || '123';\n}\n\n/**\n * A literal on the left side of ||\n */\nfunction logical6e(): string {\n    return 'foo' || 123;\n}\n\n/**\n * A literal on the left side of ||\n */\nfunction logical6f(): number {\n    return 123 || 'foo';\n}\n\n/**\n * A composite && and ||\n */\nfunction logical7a(): number {\n    var x: ?number = null;\n    return x != null && x || 0;\n}\n\n/**\n * A composite && and || where the truthiness is unknown\n */\nfunction logical7b(x: boolean, y: number): number {\n    return x && y || 0;\n}\n\n/**\n * A composite && and ||\n */\nfunction logical7c(x: string): number {\n    return x && 1 || 0;\n}\n\n/**\n * A composite && and ||\n */\nfunction logical7d(x: number): string {\n    return x && 'foo' || 'bar';\n}\n\n/**\n * A composite && and ||\n */\nfunction logical7e(x: number): string {\n    return false && x || 'bar';\n}\n\n/**\n * A composite || and &&\n *\n * \\`x || 0\\` always returns a number (never a boolean) and then short\n * circuits the && because 0 is falsy, so this should just return number.\n */\nfunction logical8a(): number {\n    var x = false;\n    return (x || 0) && 'foo';\n}\n\n/**\n * A composite || and &&\n *\n * \\`x || 1\\` always returns something truthy, so this returns a string\n */\nfunction logical8b(): string {\n    var x = false;\n    return (x || 1) && 'foo';\n}\n\n/**\n * A composite || and &&\n *\n * \\`x\\` is always truthy, so this returns a string\n */\nfunction logical8c(): string {\n    var x = true;\n    return (x || 1) && 'foo';\n}\n\n/**\n * A composite || and &&\n */\nfunction logical8d(): number {\n    var x = false;\n    return x || (0 && 'foo');\n}\n\n/**\n * A composite || and &&\n */\nfunction logical8e(): string {\n    var x = false;\n    return x || (1 && 'foo');\n}\n\n/**\n * A composite || and &&\n */\nfunction logical8f(): string { // expected \\`: boolean\\`\n    var x = true;\n    return x || (1 && 'foo');\n}\n\n/**\n * A composite || and ||\n */\nfunction logical9a(\n    x: number,\n    y: string\n): number | string { // expected \\`: number | string | boolean\\`\n    return x || y || false;\n}\n\n/**\n * A composite || and ||\n */\nfunction logical9b(x: number, y: string): number | string {\n    return false || x || y;\n}\n\n/**\n * A composite || and ||\n */\nfunction logical9c(x: number, y: boolean): string {\n    return 'a' || x || y;\n}\n\n/**\n * A composite && and &&\n */\nfunction logical10a(\n    x: number,\n    y: string\n): number | string { // expected \\`: number | string | boolean\\`\n    return x && y && false;\n}\n\n/**\n * A composite && and &&\n */\nfunction logical10b(x: number, y: string): Array<any> { // expected \\`: boolean\\`\n    return false && x && y;\n}\n\n/**\n * A composite && and &&\n */\nfunction logical10c(x: number, y: string): Array<any> { // expected \\`number | boolean\\`\n    return x && false && y;\n}\n\n/**\n * || in a loop\n */\nfunction logical11a(): number {\n    var y = 1;\n    for (var x = 0; x < 5; x++) {\n        y = y || true;\n    }\n    return y;\n}\n\n/**\n * || in a loop\n */\nfunction logical11b(y: number): number {\n    for (var x = 0; x < 5; x++) {\n        y = y || true; // expected a number\n    }\n    return y;\n}\n\n/**\n * && in a loop\n */\nfunction logical12a(): number {\n    var y = 1;\n    var z = true;\n    for (var x = 0; x < 5; x++) {\n        y = z && y;\n        z = false;\n    }\n    return y;\n}\n\n/**\n * && in a loop\n */\nfunction logical12b(y: number): number {\n    for (var x = 0; x < 5; x++) {\n        y = y && true; // expected a number\n    }\n    return y;\n}\n\n/**\n * Complex &&\n */\nfunction logical13(x: number): Array<{x: string}> {\n    return [\n        {x: x && \"bar\"},\n        {x: true && \"bar\"},\n        {x: true && false},\n        {x: false && false},\n        {x: 1 && \"bar\"},\n        {x: \"foo\" && \"bar\"},\n        {x: \"foo\" && \"bar\"},\n        {x: \"foo\" && \"bar\"},\n    ];\n}\n\n/**\n * Complex ||\n */\nfunction logical14(x: number): Array<{x: string}> {\n    return [\n        {x: x || \"bar\"},\n        {x: false || \"bar\"},\n        {x: false || true},\n        {x: true || false},\n        {x: 0 || \"bar\"},\n        {x: \"foo\" || \"bar\"},\n        {x: \"foo\" || \"bar\"},\n        {x: \"foo\" || \"bar\"},\n    ];\n}\n\n/**\n * || in an addition\n */\nfunction logical15a(x: number): number {\n    return 5 + (x || 7);\n}\n\n/**\n * || in an addition\n */\nfunction logical15b(x: number): number {\n    return (x || 7) + 5;\n}\n\n/**\n * && in an addition\n */\nfunction logical15c(x: number): number {\n    return 5 + (x && 7);\n}\n\n/**\n * && in an addition\n */\nfunction logical15d(x: number): number {\n    return (x && 7) + 5;\n}\n\n/**\n * || in a comparison\n */\nfunction logical16a(x: number): boolean {\n    return 5 < (x || 7);\n}\n\n/**\n * || in a comparison\n */\nfunction logical16b(x: number): boolean {\n    return (x || 7) < 5;\n}\n\n/**\n * && in a comparison\n */\nfunction logical16c(x: number): boolean {\n    return 5 < (x && 7);\n}\n\n/**\n * && in a comparison\n */\nfunction logical16d(x: number): boolean {\n    return (x && 7) < 5;\n}\n\n/**\n * || in an equality\n */\nfunction logical17a(x: number): boolean {\n    return 5 == (x || 7);\n}\n\n/**\n * || in an equality\n */\nfunction logical17b(x: number): boolean {\n    return (x || 7) == 5;\n}\n\n/**\n * && in an equality\n */\nfunction logical17c(x: number): boolean {\n    return 5 == (x && 7);\n}\n\n/**\n * && in an equality\n */\nfunction logical17d(x: number): boolean {\n    return (x && 7) == 5;\n}\n\n/**\n * Expressions on each side that return truthy things\n */\nfunction logical18a(x: number, y: number): number {\n    return x - 1 || y - 1;\n}\n\n/**\n * Sentinel properties should not interfere\n */\nfunction logical18b(x: {a: number}, y: {b: number}): number {\n    return x.a - 1 || y.b - 1;\n}\n\n/**\n * Layer of indirection in the LHS (get prop)\n */\nfunction logical19a(x: { y: string, z: boolean }): boolean {\n  return (x.y && x.z); // error: x.y is a string\n}\nfunction logical19b(x: { y: string, z: boolean }): boolean {\n  return (x.y || x.z); // error: x.y is a string\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n/**\n * A falsy variable on the left side of &&\n */\nfunction logical1a(): number {\n  // expected \\`: boolean\\`\n  var x = false;\n  return x && \"123\";\n}\n\n/**\n * A truthy variable on the left side of &&\n */\nfunction logical1b(): string {\n  var x = true;\n  return x && \"123\";\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2a(): number {\n  // expected \\`: boolean\\`\n  return false && \"123\";\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2b(): number {\n  return 0 && \"123\";\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2c(): string {\n  return \"\" && 123;\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2d(): string {\n  return true && \"123\";\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2e(): number {\n  return \"foo\" && 123;\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2f(): string {\n  return 123 && \"foo\";\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2g(): string {\n  return [1, 2, 3] && \"foo\";\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2h(x: { a: number }): string {\n  return x && \"foo\";\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2i(x: Object): string {\n  return x && \"foo\";\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2j(x: (a: number) => number): string {\n  return x && \"foo\";\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2k(x: Function): string {\n  return x && \"foo\";\n}\n\n/**\n * An expression on the left side of &&\n */\nfunction logical3a(): string {\n  // expected \\`: boolean\\`\n  var x: ?number = null;\n  return x != null && x > 10;\n}\n\n/**\n * An expression on the left side of &&\n */\nfunction logical3b(): number {\n  // expected \\`: boolean | number\\`\n  var x: ?number = null;\n  return x != null && x;\n}\n\n/**\n * An expression on the left side of &&\n */\nfunction logical3c(): ?number {\n  // expected \\`: boolean | ?number\\`\n  var x: ?number = null;\n  return x != undefined && x;\n}\n\n/**\n * Maybe truthy returns both types\n */\nfunction logical4(x: boolean): string {\n  // expected \\`: boolean | string\\`\n  return x && \"123\";\n}\n\n/**\n * A falsy variable on the left side of ||\n */\nfunction logical5a(): number {\n  var x = false;\n  return x || 0;\n}\n\n/**\n * A maybe variable on the left side of ||\n */\nfunction logical5b(): number {\n  var x: ?number = null;\n  return x || 0;\n}\n\n/**\n * A truthy variable on the left side of ||\n */\nfunction logical5c(): string {\n  // expected \\`: boolean\\`\n  var x = true;\n  return x || 0;\n}\n\n/**\n * A literal on the left side of ||\n */\nfunction logical6a(): string {\n  return false || \"123\";\n}\n\n/**\n * A literal on the left side of ||\n */\nfunction logical6b(): string {\n  return 0 || \"123\";\n}\n\n/**\n * A literal on the left side of ||\n */\nfunction logical6c(): number {\n  return \"\" || 123;\n}\n\n/**\n * A literal on the left side of ||\n */\nfunction logical6d(): number {\n  // expected \\`: boolean\\`\n  return true || \"123\";\n}\n\n/**\n * A literal on the left side of ||\n */\nfunction logical6e(): string {\n  return \"foo\" || 123;\n}\n\n/**\n * A literal on the left side of ||\n */\nfunction logical6f(): number {\n  return 123 || \"foo\";\n}\n\n/**\n * A composite && and ||\n */\nfunction logical7a(): number {\n  var x: ?number = null;\n  return (x != null && x) || 0;\n}\n\n/**\n * A composite && and || where the truthiness is unknown\n */\nfunction logical7b(x: boolean, y: number): number {\n  return (x && y) || 0;\n}\n\n/**\n * A composite && and ||\n */\nfunction logical7c(x: string): number {\n  return (x && 1) || 0;\n}\n\n/**\n * A composite && and ||\n */\nfunction logical7d(x: number): string {\n  return (x && \"foo\") || \"bar\";\n}\n\n/**\n * A composite && and ||\n */\nfunction logical7e(x: number): string {\n  return (false && x) || \"bar\";\n}\n\n/**\n * A composite || and &&\n *\n * \\`x || 0\\` always returns a number (never a boolean) and then short\n * circuits the && because 0 is falsy, so this should just return number.\n */\nfunction logical8a(): number {\n  var x = false;\n  return (x || 0) && \"foo\";\n}\n\n/**\n * A composite || and &&\n *\n * \\`x || 1\\` always returns something truthy, so this returns a string\n */\nfunction logical8b(): string {\n  var x = false;\n  return (x || 1) && \"foo\";\n}\n\n/**\n * A composite || and &&\n *\n * \\`x\\` is always truthy, so this returns a string\n */\nfunction logical8c(): string {\n  var x = true;\n  return (x || 1) && \"foo\";\n}\n\n/**\n * A composite || and &&\n */\nfunction logical8d(): number {\n  var x = false;\n  return x || (0 && \"foo\");\n}\n\n/**\n * A composite || and &&\n */\nfunction logical8e(): string {\n  var x = false;\n  return x || (1 && \"foo\");\n}\n\n/**\n * A composite || and &&\n */\nfunction logical8f(): string {\n  // expected \\`: boolean\\`\n  var x = true;\n  return x || (1 && \"foo\");\n}\n\n/**\n * A composite || and ||\n */\nfunction logical9a(x: number, y: string): number | string {\n  // expected \\`: number | string | boolean\\`\n  return x || y || false;\n}\n\n/**\n * A composite || and ||\n */\nfunction logical9b(x: number, y: string): number | string {\n  return false || x || y;\n}\n\n/**\n * A composite || and ||\n */\nfunction logical9c(x: number, y: boolean): string {\n  return \"a\" || x || y;\n}\n\n/**\n * A composite && and &&\n */\nfunction logical10a(x: number, y: string): number | string {\n  // expected \\`: number | string | boolean\\`\n  return x && y && false;\n}\n\n/**\n * A composite && and &&\n */\nfunction logical10b(x: number, y: string): Array<any> {\n  // expected \\`: boolean\\`\n  return false && x && y;\n}\n\n/**\n * A composite && and &&\n */\nfunction logical10c(x: number, y: string): Array<any> {\n  // expected \\`number | boolean\\`\n  return x && false && y;\n}\n\n/**\n * || in a loop\n */\nfunction logical11a(): number {\n  var y = 1;\n  for (var x = 0; x < 5; x++) {\n    y = y || true;\n  }\n  return y;\n}\n\n/**\n * || in a loop\n */\nfunction logical11b(y: number): number {\n  for (var x = 0; x < 5; x++) {\n    y = y || true; // expected a number\n  }\n  return y;\n}\n\n/**\n * && in a loop\n */\nfunction logical12a(): number {\n  var y = 1;\n  var z = true;\n  for (var x = 0; x < 5; x++) {\n    y = z && y;\n    z = false;\n  }\n  return y;\n}\n\n/**\n * && in a loop\n */\nfunction logical12b(y: number): number {\n  for (var x = 0; x < 5; x++) {\n    y = y && true; // expected a number\n  }\n  return y;\n}\n\n/**\n * Complex &&\n */\nfunction logical13(x: number): Array<{ x: string }> {\n  return [\n    { x: x && \"bar\" },\n    { x: true && \"bar\" },\n    { x: true && false },\n    { x: false && false },\n    { x: 1 && \"bar\" },\n    { x: \"foo\" && \"bar\" },\n    { x: \"foo\" && \"bar\" },\n    { x: \"foo\" && \"bar\" }\n  ];\n}\n\n/**\n * Complex ||\n */\nfunction logical14(x: number): Array<{ x: string }> {\n  return [\n    { x: x || \"bar\" },\n    { x: false || \"bar\" },\n    { x: false || true },\n    { x: true || false },\n    { x: 0 || \"bar\" },\n    { x: \"foo\" || \"bar\" },\n    { x: \"foo\" || \"bar\" },\n    { x: \"foo\" || \"bar\" }\n  ];\n}\n\n/**\n * || in an addition\n */\nfunction logical15a(x: number): number {\n  return 5 + (x || 7);\n}\n\n/**\n * || in an addition\n */\nfunction logical15b(x: number): number {\n  return (x || 7) + 5;\n}\n\n/**\n * && in an addition\n */\nfunction logical15c(x: number): number {\n  return 5 + (x && 7);\n}\n\n/**\n * && in an addition\n */\nfunction logical15d(x: number): number {\n  return (x && 7) + 5;\n}\n\n/**\n * || in a comparison\n */\nfunction logical16a(x: number): boolean {\n  return 5 < (x || 7);\n}\n\n/**\n * || in a comparison\n */\nfunction logical16b(x: number): boolean {\n  return (x || 7) < 5;\n}\n\n/**\n * && in a comparison\n */\nfunction logical16c(x: number): boolean {\n  return 5 < (x && 7);\n}\n\n/**\n * && in a comparison\n */\nfunction logical16d(x: number): boolean {\n  return (x && 7) < 5;\n}\n\n/**\n * || in an equality\n */\nfunction logical17a(x: number): boolean {\n  return 5 == (x || 7);\n}\n\n/**\n * || in an equality\n */\nfunction logical17b(x: number): boolean {\n  return (x || 7) == 5;\n}\n\n/**\n * && in an equality\n */\nfunction logical17c(x: number): boolean {\n  return 5 == (x && 7);\n}\n\n/**\n * && in an equality\n */\nfunction logical17d(x: number): boolean {\n  return (x && 7) == 5;\n}\n\n/**\n * Expressions on each side that return truthy things\n */\nfunction logical18a(x: number, y: number): number {\n  return x - 1 || y - 1;\n}\n\n/**\n * Sentinel properties should not interfere\n */\nfunction logical18b(x: { a: number }, y: { b: number }): number {\n  return x.a - 1 || y.b - 1;\n}\n\n/**\n * Layer of indirection in the LHS (get prop)\n */\nfunction logical19a(x: { y: string, z: boolean }): boolean {\n  return x.y && x.z; // error: x.y is a string\n}\nfunction logical19b(x: { y: string, z: boolean }): boolean {\n  return x.y || x.z; // error: x.y is a string\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/logical/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/logical/logical.js",
    "content": "/* @flow */\n\n/**\n * A falsy variable on the left side of &&\n */\nfunction logical1a(): number { // expected `: boolean`\n    var x = false;\n    return x && '123';\n}\n\n/**\n * A truthy variable on the left side of &&\n */\nfunction logical1b(): string {\n    var x = true;\n    return x && '123';\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2a(): number { // expected `: boolean`\n    return false && '123';\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2b(): number {\n    return 0 && '123';\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2c(): string {\n    return \"\" && 123;\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2d(): string {\n    return true && '123';\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2e(): number {\n    return 'foo' && 123;\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2f(): string {\n    return 123 && 'foo';\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2g(): string {\n    return [1,2,3] && 'foo';\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2h(x: {a: number}): string {\n    return x && 'foo';\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2i(x: Object): string {\n    return x && 'foo';\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2j(x: (a: number) => number): string {\n    return x && 'foo';\n}\n\n/**\n * A literal on the left side of &&\n */\nfunction logical2k(x: Function): string {\n    return x && 'foo';\n}\n\n/**\n * An expression on the left side of &&\n */\nfunction logical3a(): string { // expected `: boolean`\n    var x: ?number = null;\n    return x != null && x > 10;\n}\n\n/**\n * An expression on the left side of &&\n */\nfunction logical3b(): number { // expected `: boolean | number`\n    var x: ?number = null;\n    return x != null && x;\n}\n\n/**\n * An expression on the left side of &&\n */\nfunction logical3c(): ?number { // expected `: boolean | ?number`\n    var x: ?number = null;\n    return x != undefined && x;\n}\n\n/**\n * Maybe truthy returns both types\n */\nfunction logical4(x: boolean): string { // expected `: boolean | string`\n    return x && '123';\n}\n\n/**\n * A falsy variable on the left side of ||\n */\nfunction logical5a(): number {\n    var x = false;\n    return x || 0;\n}\n\n/**\n * A maybe variable on the left side of ||\n */\nfunction logical5b(): number {\n    var x: ?number = null;\n    return x || 0;\n}\n\n/**\n * A truthy variable on the left side of ||\n */\nfunction logical5c(): string { // expected `: boolean`\n    var x = true;\n    return x || 0;\n}\n\n/**\n * A literal on the left side of ||\n */\nfunction logical6a(): string {\n    return false || '123';\n}\n\n/**\n * A literal on the left side of ||\n */\nfunction logical6b(): string {\n    return 0 || '123';\n}\n\n/**\n * A literal on the left side of ||\n */\nfunction logical6c(): number {\n    return \"\" || 123;\n}\n\n/**\n * A literal on the left side of ||\n */\nfunction logical6d(): number { // expected `: boolean`\n    return true || '123';\n}\n\n/**\n * A literal on the left side of ||\n */\nfunction logical6e(): string {\n    return 'foo' || 123;\n}\n\n/**\n * A literal on the left side of ||\n */\nfunction logical6f(): number {\n    return 123 || 'foo';\n}\n\n/**\n * A composite && and ||\n */\nfunction logical7a(): number {\n    var x: ?number = null;\n    return x != null && x || 0;\n}\n\n/**\n * A composite && and || where the truthiness is unknown\n */\nfunction logical7b(x: boolean, y: number): number {\n    return x && y || 0;\n}\n\n/**\n * A composite && and ||\n */\nfunction logical7c(x: string): number {\n    return x && 1 || 0;\n}\n\n/**\n * A composite && and ||\n */\nfunction logical7d(x: number): string {\n    return x && 'foo' || 'bar';\n}\n\n/**\n * A composite && and ||\n */\nfunction logical7e(x: number): string {\n    return false && x || 'bar';\n}\n\n/**\n * A composite || and &&\n *\n * `x || 0` always returns a number (never a boolean) and then short\n * circuits the && because 0 is falsy, so this should just return number.\n */\nfunction logical8a(): number {\n    var x = false;\n    return (x || 0) && 'foo';\n}\n\n/**\n * A composite || and &&\n *\n * `x || 1` always returns something truthy, so this returns a string\n */\nfunction logical8b(): string {\n    var x = false;\n    return (x || 1) && 'foo';\n}\n\n/**\n * A composite || and &&\n *\n * `x` is always truthy, so this returns a string\n */\nfunction logical8c(): string {\n    var x = true;\n    return (x || 1) && 'foo';\n}\n\n/**\n * A composite || and &&\n */\nfunction logical8d(): number {\n    var x = false;\n    return x || (0 && 'foo');\n}\n\n/**\n * A composite || and &&\n */\nfunction logical8e(): string {\n    var x = false;\n    return x || (1 && 'foo');\n}\n\n/**\n * A composite || and &&\n */\nfunction logical8f(): string { // expected `: boolean`\n    var x = true;\n    return x || (1 && 'foo');\n}\n\n/**\n * A composite || and ||\n */\nfunction logical9a(\n    x: number,\n    y: string\n): number | string { // expected `: number | string | boolean`\n    return x || y || false;\n}\n\n/**\n * A composite || and ||\n */\nfunction logical9b(x: number, y: string): number | string {\n    return false || x || y;\n}\n\n/**\n * A composite || and ||\n */\nfunction logical9c(x: number, y: boolean): string {\n    return 'a' || x || y;\n}\n\n/**\n * A composite && and &&\n */\nfunction logical10a(\n    x: number,\n    y: string\n): number | string { // expected `: number | string | boolean`\n    return x && y && false;\n}\n\n/**\n * A composite && and &&\n */\nfunction logical10b(x: number, y: string): Array<any> { // expected `: boolean`\n    return false && x && y;\n}\n\n/**\n * A composite && and &&\n */\nfunction logical10c(x: number, y: string): Array<any> { // expected `number | boolean`\n    return x && false && y;\n}\n\n/**\n * || in a loop\n */\nfunction logical11a(): number {\n    var y = 1;\n    for (var x = 0; x < 5; x++) {\n        y = y || true;\n    }\n    return y;\n}\n\n/**\n * || in a loop\n */\nfunction logical11b(y: number): number {\n    for (var x = 0; x < 5; x++) {\n        y = y || true; // expected a number\n    }\n    return y;\n}\n\n/**\n * && in a loop\n */\nfunction logical12a(): number {\n    var y = 1;\n    var z = true;\n    for (var x = 0; x < 5; x++) {\n        y = z && y;\n        z = false;\n    }\n    return y;\n}\n\n/**\n * && in a loop\n */\nfunction logical12b(y: number): number {\n    for (var x = 0; x < 5; x++) {\n        y = y && true; // expected a number\n    }\n    return y;\n}\n\n/**\n * Complex &&\n */\nfunction logical13(x: number): Array<{x: string}> {\n    return [\n        {x: x && \"bar\"},\n        {x: true && \"bar\"},\n        {x: true && false},\n        {x: false && false},\n        {x: 1 && \"bar\"},\n        {x: \"foo\" && \"bar\"},\n        {x: \"foo\" && \"bar\"},\n        {x: \"foo\" && \"bar\"},\n    ];\n}\n\n/**\n * Complex ||\n */\nfunction logical14(x: number): Array<{x: string}> {\n    return [\n        {x: x || \"bar\"},\n        {x: false || \"bar\"},\n        {x: false || true},\n        {x: true || false},\n        {x: 0 || \"bar\"},\n        {x: \"foo\" || \"bar\"},\n        {x: \"foo\" || \"bar\"},\n        {x: \"foo\" || \"bar\"},\n    ];\n}\n\n/**\n * || in an addition\n */\nfunction logical15a(x: number): number {\n    return 5 + (x || 7);\n}\n\n/**\n * || in an addition\n */\nfunction logical15b(x: number): number {\n    return (x || 7) + 5;\n}\n\n/**\n * && in an addition\n */\nfunction logical15c(x: number): number {\n    return 5 + (x && 7);\n}\n\n/**\n * && in an addition\n */\nfunction logical15d(x: number): number {\n    return (x && 7) + 5;\n}\n\n/**\n * || in a comparison\n */\nfunction logical16a(x: number): boolean {\n    return 5 < (x || 7);\n}\n\n/**\n * || in a comparison\n */\nfunction logical16b(x: number): boolean {\n    return (x || 7) < 5;\n}\n\n/**\n * && in a comparison\n */\nfunction logical16c(x: number): boolean {\n    return 5 < (x && 7);\n}\n\n/**\n * && in a comparison\n */\nfunction logical16d(x: number): boolean {\n    return (x && 7) < 5;\n}\n\n/**\n * || in an equality\n */\nfunction logical17a(x: number): boolean {\n    return 5 == (x || 7);\n}\n\n/**\n * || in an equality\n */\nfunction logical17b(x: number): boolean {\n    return (x || 7) == 5;\n}\n\n/**\n * && in an equality\n */\nfunction logical17c(x: number): boolean {\n    return 5 == (x && 7);\n}\n\n/**\n * && in an equality\n */\nfunction logical17d(x: number): boolean {\n    return (x && 7) == 5;\n}\n\n/**\n * Expressions on each side that return truthy things\n */\nfunction logical18a(x: number, y: number): number {\n    return x - 1 || y - 1;\n}\n\n/**\n * Sentinel properties should not interfere\n */\nfunction logical18b(x: {a: number}, y: {b: number}): number {\n    return x.a - 1 || y.b - 1;\n}\n\n/**\n * Layer of indirection in the LHS (get prop)\n */\nfunction logical19a(x: { y: string, z: boolean }): boolean {\n  return (x.y && x.z); // error: x.y is a string\n}\nfunction logical19b(x: { y: string, z: boolean }): boolean {\n  return (x.y || x.z); // error: x.y is a string\n}\n"
  },
  {
    "path": "tests/flow/loners/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`loners.js 1`] = `\nvar o = { x: 5, y: \"jello\" };\nvar z = o.z;\nvar export_o: { x: number; } = o;\n\nfunction f(u,v?):number { return u; }\nvar export_f: (u: number) => number = f;\n\n//exports = export_o;\nmodule.exports = export_f;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar o = { x: 5, y: \"jello\" };\nvar z = o.z;\nvar export_o: { x: number } = o;\n\nfunction f(u, v?): number {\n  return u;\n}\nvar export_f: (u: number) => number = f;\n\n//exports = export_o;\nmodule.exports = export_f;\n\n`;\n"
  },
  {
    "path": "tests/flow/loners/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/loners/loners.js",
    "content": "var o = { x: 5, y: \"jello\" };\nvar z = o.z;\nvar export_o: { x: number; } = o;\n\nfunction f(u,v?):number { return u; }\nvar export_f: (u: number) => number = f;\n\n//exports = export_o;\nmodule.exports = export_f;\n"
  },
  {
    "path": "tests/flow/malformed_code/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`text.js 1`] = `\n// @flow\n// Example found at\n// https://github.com/sebmarkbage/art/blob/51ffce8164a555d652843241c2fdda52e186cbbd/parsers/svg/text.js#L137\nconst evil_regex_as_a_string = \"/[\\\\s�]*$/\";\n\nconst error: string = 123; // Should be an error, but can't lex this file\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n// Example found at\n// https://github.com/sebmarkbage/art/blob/51ffce8164a555d652843241c2fdda52e186cbbd/parsers/svg/text.js#L137\nconst evil_regex_as_a_string = \"/[s�]*$/\";\n\nconst error: string = 123; // Should be an error, but can't lex this file\n\n`;\n"
  },
  {
    "path": "tests/flow/malformed_code/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/malformed_code/text.js",
    "content": "// @flow\r\n// Example found at\r\n// https://github.com/sebmarkbage/art/blob/51ffce8164a555d652843241c2fdda52e186cbbd/parsers/svg/text.js#L137\r\nconst evil_regex_as_a_string = \"/[\\s�]*$/\";\r\n\r\nconst error: string = 123; // Should be an error, but can't lex this file\r\n"
  },
  {
    "path": "tests/flow/match_failure/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`disjoint_union.js 1`] = `\n/* @flow */\n\ntype Shape =\n  {type: 'rectangle', width: number, height: number} |\n  {type: 'circle', radius: number};\n\nfunction area(shape: Shape): number {\n  if (shape.type === 'square') { // TODO: this should be an error\n    return shape.width * shape.height;\n  } else if (shape.type === 'circle') {\n    return Math.PI * Math.pow(shape.radius, 2);\n  }\n  throw \"unreachable\"; // TODO: this shouldn't be needed\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\ntype Shape =\n  | { type: \"rectangle\", width: number, height: number }\n  | { type: \"circle\", radius: number };\n\nfunction area(shape: Shape): number {\n  if (shape.type === \"square\") {\n    // TODO: this should be an error\n    return shape.width * shape.height;\n  } else if (shape.type === \"circle\") {\n    return Math.PI * Math.pow(shape.radius, 2);\n  }\n  throw \"unreachable\"; // TODO: this shouldn't be needed\n}\n\n`;\n\nexports[`enum.js 1`] = `\n// @flow\n\ntype Binary = 0 | 1;\n\nfunction stringifyBinary(binary: Binary): string {\n  if (binary === 0) {\n    return 'zero';\n  } else if (binary === 2) { // oops\n    return 'one';\n  }\n  throw \"unreachable\"; // TODO: this shouldn't be needed\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ntype Binary = 0 | 1;\n\nfunction stringifyBinary(binary: Binary): string {\n  if (binary === 0) {\n    return \"zero\";\n  } else if (binary === 2) {\n    // oops\n    return \"one\";\n  }\n  throw \"unreachable\"; // TODO: this shouldn't be needed\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/match_failure/disjoint_union.js",
    "content": "/* @flow */\n\ntype Shape =\n  {type: 'rectangle', width: number, height: number} |\n  {type: 'circle', radius: number};\n\nfunction area(shape: Shape): number {\n  if (shape.type === 'square') { // TODO: this should be an error\n    return shape.width * shape.height;\n  } else if (shape.type === 'circle') {\n    return Math.PI * Math.pow(shape.radius, 2);\n  }\n  throw \"unreachable\"; // TODO: this shouldn't be needed\n}\n"
  },
  {
    "path": "tests/flow/match_failure/enum.js",
    "content": "// @flow\n\ntype Binary = 0 | 1;\n\nfunction stringifyBinary(binary: Binary): string {\n  if (binary === 0) {\n    return 'zero';\n  } else if (binary === 2) { // oops\n    return 'one';\n  }\n  throw \"unreachable\"; // TODO: this shouldn't be needed\n}\n"
  },
  {
    "path": "tests/flow/match_failure/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/method_properties/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`exports_optional_prop.js 1`] = `\n// @flow\n\ndeclare class Foo {\n  bar?: () => string\n}\n\nexport {Foo};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ndeclare class Foo {\n  bar?: () => string\n}\n\nexport { Foo };\n\n`;\n\nexports[`test.js 1`] = `\nclass C {\n  C() { }\n  foo() { }\n  static bar() { }\n  qux() { this.constructor.x; }\n}\nC.x;\n(new C).foo.x;\nC.bar.x;\n\nimport {Foo} from './exports_optional_prop';\nconst foo = new Foo();\n(foo.bar(): string); // error, could be undefined\n\nfunction f(x) {\n  (x.bar(): string); // error. caused by \\`f(foo)\\`; annotate x to track it down.\n}\nf(foo);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {\n  C() {}\n  foo() {}\n  static bar() {}\n  qux() {\n    this.constructor.x;\n  }\n}\nC.x;\nnew C().foo.x;\nC.bar.x;\n\nimport { Foo } from \"./exports_optional_prop\";\nconst foo = new Foo();\n(foo.bar(): string); // error, could be undefined\n\nfunction f(x) {\n  (x.bar(): string); // error. caused by \\`f(foo)\\`; annotate x to track it down.\n}\nf(foo);\n\n`;\n"
  },
  {
    "path": "tests/flow/method_properties/exports_optional_prop.js",
    "content": "// @flow\n\ndeclare class Foo {\n  bar?: () => string\n}\n\nexport {Foo};\n"
  },
  {
    "path": "tests/flow/method_properties/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/method_properties/test.js",
    "content": "class C {\n  C() { }\n  foo() { }\n  static bar() { }\n  qux() { this.constructor.x; }\n}\nC.x;\n(new C).foo.x;\nC.bar.x;\n\nimport {Foo} from './exports_optional_prop';\nconst foo = new Foo();\n(foo.bar(): string); // error, could be undefined\n\nfunction f(x) {\n  (x.bar(): string); // error. caused by `f(foo)`; annotate x to track it down.\n}\nf(foo);\n"
  },
  {
    "path": "tests/flow/misc/A.js",
    "content": "\n/* @providesModule A */\n\nmodule.exports = {};\n\nvar A = {x:true, ...{}};\nmodule.exports.cls = A;\n\nfunction f(x:boolean) { }\nmodule.exports.fn = f;\n\nA.y = \"?\";\nA.x = A.y;\nf(A.x); // A.x is now a string, by def assign\n"
  },
  {
    "path": "tests/flow/misc/B.js",
    "content": "\n/* @providesModule B */\n\nvar A = require('A').cls;\n\nfunction B() {\n  this.b = \"...\";\n}\n\nfunction f():number { return this.b; }\n\nB.prototype.s = 0;\nB.prototype.fn = f;\n\nmodule.exports = B;\n"
  },
  {
    "path": "tests/flow/misc/C.js",
    "content": "\n/* @providesModule C */\n\nvar B = require('B');\nvar f = require('A').fn;\n\nfunction C() {\n  var o = new B();\n  f(o.b);\n  f(o.s);\n  o.fn();\n}\n\nmodule.exports = C;\n"
  },
  {
    "path": "tests/flow/misc/D.js",
    "content": "\n/* @providesModule D */\n\nvar f = require('A').fn;\n\nfunction g():string { return this.i; }\n\nvar o = {fn: g, ...{}};\no.i = true;\n\nvar i = o.fn();\nf(i);\n\nmodule.exports = \"D for dummy\";\n"
  },
  {
    "path": "tests/flow/misc/E.js",
    "content": "\n/* @providesModule E */\n\nfunction h(x:number) { }\nvar proto = { fn: h }\n\nvar o = Object.create(proto);\no.fn(false);\n\nmodule.exports = {obj: o};\n"
  },
  {
    "path": "tests/flow/misc/F.js",
    "content": "function fn2(x) { return x.length * 4; }\nfn2({length: 'hi'});\n\nfunction foo(x: Array<number>): string {\n  return x.length;\n}\n"
  },
  {
    "path": "tests/flow/misc/G.js",
    "content": "var a = { length: \"duck\" };\na.length = 123;\na.length();\n\nvar b = [ 123 ];\nb.length = \"duck\";\nb.length();\n"
  },
  {
    "path": "tests/flow/misc/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\n\n/* @providesModule A */\n\nmodule.exports = {};\n\nvar A = {x:true, ...{}};\nmodule.exports.cls = A;\n\nfunction f(x:boolean) { }\nmodule.exports.fn = f;\n\nA.y = \"?\";\nA.x = A.y;\nf(A.x); // A.x is now a string, by def assign\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule A */\n\nmodule.exports = {};\n\nvar A = { x: true, ...{} };\nmodule.exports.cls = A;\n\nfunction f(x: boolean) {}\nmodule.exports.fn = f;\n\nA.y = \"?\";\nA.x = A.y;\nf(A.x); // A.x is now a string, by def assign\n\n`;\n\nexports[`B.js 1`] = `\n\n/* @providesModule B */\n\nvar A = require('A').cls;\n\nfunction B() {\n  this.b = \"...\";\n}\n\nfunction f():number { return this.b; }\n\nB.prototype.s = 0;\nB.prototype.fn = f;\n\nmodule.exports = B;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule B */\n\nvar A = require(\"A\").cls;\n\nfunction B() {\n  this.b = \"...\";\n}\n\nfunction f(): number {\n  return this.b;\n}\n\nB.prototype.s = 0;\nB.prototype.fn = f;\n\nmodule.exports = B;\n\n`;\n\nexports[`C.js 1`] = `\n\n/* @providesModule C */\n\nvar B = require('B');\nvar f = require('A').fn;\n\nfunction C() {\n  var o = new B();\n  f(o.b);\n  f(o.s);\n  o.fn();\n}\n\nmodule.exports = C;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule C */\n\nvar B = require(\"B\");\nvar f = require(\"A\").fn;\n\nfunction C() {\n  var o = new B();\n  f(o.b);\n  f(o.s);\n  o.fn();\n}\n\nmodule.exports = C;\n\n`;\n\nexports[`D.js 1`] = `\n\n/* @providesModule D */\n\nvar f = require('A').fn;\n\nfunction g():string { return this.i; }\n\nvar o = {fn: g, ...{}};\no.i = true;\n\nvar i = o.fn();\nf(i);\n\nmodule.exports = \"D for dummy\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule D */\n\nvar f = require(\"A\").fn;\n\nfunction g(): string {\n  return this.i;\n}\n\nvar o = { fn: g, ...{} };\no.i = true;\n\nvar i = o.fn();\nf(i);\n\nmodule.exports = \"D for dummy\";\n\n`;\n\nexports[`E.js 1`] = `\n\n/* @providesModule E */\n\nfunction h(x:number) { }\nvar proto = { fn: h }\n\nvar o = Object.create(proto);\no.fn(false);\n\nmodule.exports = {obj: o};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule E */\n\nfunction h(x: number) {}\nvar proto = { fn: h };\n\nvar o = Object.create(proto);\no.fn(false);\n\nmodule.exports = { obj: o };\n\n`;\n\nexports[`F.js 1`] = `\nfunction fn2(x) { return x.length * 4; }\nfn2({length: 'hi'});\n\nfunction foo(x: Array<number>): string {\n  return x.length;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction fn2(x) {\n  return x.length * 4;\n}\nfn2({ length: \"hi\" });\n\nfunction foo(x: Array<number>): string {\n  return x.length;\n}\n\n`;\n\nexports[`G.js 1`] = `\nvar a = { length: \"duck\" };\na.length = 123;\na.length();\n\nvar b = [ 123 ];\nb.length = \"duck\";\nb.length();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar a = { length: \"duck\" };\na.length = 123;\na.length();\n\nvar b = [123];\nb.length = \"duck\";\nb.length();\n\n`;\n"
  },
  {
    "path": "tests/flow/misc/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/missing_annotation/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`array.js 1`] = `\n// @flow\n\ntype Foo = {};\nvar f: Foo = {};\nexport var arr = [f];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ntype Foo = {};\nvar f: Foo = {};\nexport var arr = [f];\n\n`;\n\nexports[`async_return.js 1`] = `\n// @flow\n\nexport async function foo() {\n  return 123;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport async function foo() {\n  return 123;\n}\n\n`;\n\nexports[`infer.js 1`] = `\n/* @flow */\n\nvar Foo = {\n  a: function(arg) {  // missing arg annotation\n    return arg;\n  },\n\n  b: function(arg) {  // missing arg annotation\n    return {\n      bar: arg\n    };\n  },\n\n  c: function(arg: string) {  // no return annotation required\n    return {\n      bar: arg\n    };\n  },\n\n  d: function(arg: string): {\n    bar: string\n  } {\n    return {\n      bar: arg\n    };\n  },\n\n  // return type annotation may be omitted, but if so, input positions on\n  // observed return type (e.g. param types in a function type) must come\n  // from annotations\n  e: function(arg: string) {\n    return function(x) {  // missing param annotation\n      return x;\n    }\n  },\n\n  // ...if the return type is annotated explicitly, this is unnecessary\n  f: function(arg: string): (x:number) => number {\n    return function(x) {  // no error\n      return x;\n    }\n  }\n\n};\n\nvar Bar = {\n  a: Foo.a('Foo'),    // no annotation required\n\n  // object property types are inferred, so make sure that this doesn't cause\n  // us to also infer the parameter's type.\n  b: Foo.b('bar'),    // no annotation required\n\n  c: Foo.c('bar'),            // no annotation required\n\n  d: Foo.d('bar'),            // no annotation required\n};\n\nmodule.exports = Foo, Bar;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar Foo = {\n  a: function(arg) {\n    // missing arg annotation\n    return arg;\n  },\n\n  b: function(arg) {\n    // missing arg annotation\n    return {\n      bar: arg\n    };\n  },\n\n  c: function(arg: string) {\n    // no return annotation required\n    return {\n      bar: arg\n    };\n  },\n\n  d: function(\n    arg: string\n  ): {\n    bar: string\n  } {\n    return {\n      bar: arg\n    };\n  },\n\n  // return type annotation may be omitted, but if so, input positions on\n  // observed return type (e.g. param types in a function type) must come\n  // from annotations\n  e: function(arg: string) {\n    return function(x) {\n      // missing param annotation\n      return x;\n    };\n  },\n\n  // ...if the return type is annotated explicitly, this is unnecessary\n  f: function(arg: string): (x: number) => number {\n    return function(x) {\n      // no error\n      return x;\n    };\n  }\n};\n\nvar Bar = {\n  a: Foo.a(\"Foo\"), // no annotation required\n\n  // object property types are inferred, so make sure that this doesn't cause\n  // us to also infer the parameter's type.\n  b: Foo.b(\"bar\"), // no annotation required\n\n  c: Foo.c(\"bar\"), // no annotation required\n\n  d: Foo.d(\"bar\") // no annotation required\n};\n\n(module.exports = Foo), Bar;\n\n`;\n"
  },
  {
    "path": "tests/flow/missing_annotation/array.js",
    "content": "// @flow\n\ntype Foo = {};\nvar f: Foo = {};\nexport var arr = [f];\n"
  },
  {
    "path": "tests/flow/missing_annotation/async_return.js",
    "content": "// @flow\n\nexport async function foo() {\n  return 123;\n}\n"
  },
  {
    "path": "tests/flow/missing_annotation/infer.js",
    "content": "/* @flow */\n\nvar Foo = {\n  a: function(arg) {  // missing arg annotation\n    return arg;\n  },\n\n  b: function(arg) {  // missing arg annotation\n    return {\n      bar: arg\n    };\n  },\n\n  c: function(arg: string) {  // no return annotation required\n    return {\n      bar: arg\n    };\n  },\n\n  d: function(arg: string): {\n    bar: string\n  } {\n    return {\n      bar: arg\n    };\n  },\n\n  // return type annotation may be omitted, but if so, input positions on\n  // observed return type (e.g. param types in a function type) must come\n  // from annotations\n  e: function(arg: string) {\n    return function(x) {  // missing param annotation\n      return x;\n    }\n  },\n\n  // ...if the return type is annotated explicitly, this is unnecessary\n  f: function(arg: string): (x:number) => number {\n    return function(x) {  // no error\n      return x;\n    }\n  }\n\n};\n\nvar Bar = {\n  a: Foo.a('Foo'),    // no annotation required\n\n  // object property types are inferred, so make sure that this doesn't cause\n  // us to also infer the parameter's type.\n  b: Foo.b('bar'),    // no annotation required\n\n  c: Foo.c('bar'),            // no annotation required\n\n  d: Foo.d('bar'),            // no annotation required\n};\n\nmodule.exports = Foo, Bar;\n"
  },
  {
    "path": "tests/flow/missing_annotation/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/modified_lib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n// @flow\n\nimport {bar} from 'foo';\n\nbar(5);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport { bar } from \"foo\";\n\nbar(5);\n\n`;\n"
  },
  {
    "path": "tests/flow/modified_lib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/modified_lib/lib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`lib.js 1`] = `\ndeclare module 'foo' {\n  declare function bar(str: string): number;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare module \"foo\" {\n  declare function bar(str: string): number;\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/modified_lib/lib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/modified_lib/lib/lib.js",
    "content": "declare module 'foo' {\n  declare function bar(str: string): number;\n}\n"
  },
  {
    "path": "tests/flow/modified_lib/test.js",
    "content": "// @flow\n\nimport {bar} from 'foo';\n\nbar(5);\n"
  },
  {
    "path": "tests/flow/module_not_found_errors/src/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`index.js 1`] = `\n// @flow\n\nrequire('module_completely_absent');\n\n// node_modules/module_outside_of_root/ sits outside of the Flow project root.\n// Flow should give a descriptive error about this\nrequire('module_outside_of_root');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nrequire(\"module_completely_absent\");\n\n// node_modules/module_outside_of_root/ sits outside of the Flow project root.\n// Flow should give a descriptive error about this\nrequire(\"module_outside_of_root\");\n\n`;\n"
  },
  {
    "path": "tests/flow/module_not_found_errors/src/index.js",
    "content": "// @flow\n\nrequire('module_completely_absent');\n\n// node_modules/module_outside_of_root/ sits outside of the Flow project root.\n// Flow should give a descriptive error about this\nrequire('module_outside_of_root');\n"
  },
  {
    "path": "tests/flow/module_not_found_errors/src/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/module_redirect/A.js",
    "content": "declare module A {\n  declare function foo(): string;\n}\n"
  },
  {
    "path": "tests/flow/module_redirect/B.js",
    "content": "/**\n * @providesModule B\n * @flow\n */\n\nmodule.exports = require('A');\n"
  },
  {
    "path": "tests/flow/module_redirect/C.js",
    "content": "/**\n * @providesModule C\n * @flow\n */\n\nmodule.exports = require('B');\n"
  },
  {
    "path": "tests/flow/module_redirect/D.js",
    "content": "/**\n * @providesModule D\n * @flow\n */\n\nvar bar1: string = require('A');\nvar bar2: string = require('B');\nvar bar3: string = require('C');\n"
  },
  {
    "path": "tests/flow/module_redirect/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\ndeclare module A {\n  declare function foo(): string;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare module A {\n  declare function foo(): string;\n}\n\n`;\n\nexports[`B.js 1`] = `\n/**\n * @providesModule B\n * @flow\n */\n\nmodule.exports = require('A');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule B\n * @flow\n */\n\nmodule.exports = require(\"A\");\n\n`;\n\nexports[`C.js 1`] = `\n/**\n * @providesModule C\n * @flow\n */\n\nmodule.exports = require('B');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule C\n * @flow\n */\n\nmodule.exports = require(\"B\");\n\n`;\n\nexports[`D.js 1`] = `\n/**\n * @providesModule D\n * @flow\n */\n\nvar bar1: string = require('A');\nvar bar2: string = require('B');\nvar bar3: string = require('C');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule D\n * @flow\n */\n\nvar bar1: string = require(\"A\");\nvar bar2: string = require(\"B\");\nvar bar3: string = require(\"C\");\n\n`;\n"
  },
  {
    "path": "tests/flow/module_redirect/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/module_use_strict/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n// @flow\n\n(01: number);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n(01: number);\n\n`;\n"
  },
  {
    "path": "tests/flow/module_use_strict/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/module_use_strict/test.js",
    "content": "// @flow\n\n(01: number);\n"
  },
  {
    "path": "tests/flow/modules/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`cli.js 1`] = `\n/* @flow */\n\nvar f = require('./lib');\n\nvar y:number = f(0);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar f = require(\"./lib\");\n\nvar y: number = f(0);\n\n`;\n\nexports[`cli2.js 1`] = `\n/* @flow */\n\nvar f = require('./lib');\n\nf(\"...\");\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar f = require(\"./lib\");\n\nf(\"...\");\n\n`;\n\nexports[`lib.js 1`] = `\n/* @flow */\n\nfunction g(x:string) { }\n\n//function f(x) { g(x); return x; }\n//function f(x:number) { g(x); return x; }\nfunction f(x:number):number { g(x); return x; }\n\nmodule.exports = f;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction g(x: string) {}\n\n//function f(x) { g(x); return x; }\n//function f(x:number) { g(x); return x; }\nfunction f(x: number): number {\n  g(x);\n  return x;\n}\n\nmodule.exports = f;\n\n`;\n"
  },
  {
    "path": "tests/flow/modules/cli.js",
    "content": "/* @flow */\n\nvar f = require('./lib');\n\nvar y:number = f(0);\n"
  },
  {
    "path": "tests/flow/modules/cli2.js",
    "content": "/* @flow */\n\nvar f = require('./lib');\n\nf(\"...\");\n"
  },
  {
    "path": "tests/flow/modules/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/modules/lib.js",
    "content": "/* @flow */\n\nfunction g(x:string) { }\n\n//function f(x) { g(x); return x; }\n//function f(x:number) { g(x); return x; }\nfunction f(x:number):number { g(x); return x; }\n\nmodule.exports = f;\n"
  },
  {
    "path": "tests/flow/more_annot/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`client_object.js 1`] = `\nvar o = require('./object');\n\nvar a:number = o.w.z.y;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar o = require(\"./object\");\n\nvar a: number = o.w.z.y;\n\n`;\n\nexports[`object.js 1`] = `\nvar o1 = { x: 0, y: \"\" };\nvar o2 = { z: o1 }\n\nvar o3 = {};\no3.w = o2;\n\n//declare var exports: { w: any };\n\nmodule.exports = o3;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar o1 = { x: 0, y: \"\" };\nvar o2 = { z: o1 };\n\nvar o3 = {};\no3.w = o2;\n\n//declare var exports: { w: any };\n\nmodule.exports = o3;\n\n`;\n\nexports[`proto.js 1`] = `\nfunction Foo() { this.x = 0; }\nFoo.prototype.m = function() { }\n\nvar o1: { x: number; m(): void } = new Foo();\n\nvar o2: Foo = new Foo();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction Foo() {\n  this.x = 0;\n}\nFoo.prototype.m = function() {};\n\nvar o1: { x: number, m(): void } = new Foo();\n\nvar o2: Foo = new Foo();\n\n`;\n\nexports[`super.js 1`] = `\nclass C { m() { } }\nclass D extends C { }\n\nvar d: { +m: () => void } = new D();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {\n  m() {}\n}\nclass D extends C {}\n\nvar d: { +m: () => void } = new D();\n\n`;\n"
  },
  {
    "path": "tests/flow/more_annot/client_object.js",
    "content": "var o = require('./object');\n\nvar a:number = o.w.z.y;\n"
  },
  {
    "path": "tests/flow/more_annot/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow/more_annot/object.js",
    "content": "var o1 = { x: 0, y: \"\" };\nvar o2 = { z: o1 }\n\nvar o3 = {};\no3.w = o2;\n\n//declare var exports: { w: any };\n\nmodule.exports = o3;\n"
  },
  {
    "path": "tests/flow/more_annot/proto.js",
    "content": "function Foo() { this.x = 0; }\nFoo.prototype.m = function() { }\n\nvar o1: { x: number; m(): void } = new Foo();\n\nvar o2: Foo = new Foo();\n"
  },
  {
    "path": "tests/flow/more_annot/super.js",
    "content": "class C { m() { } }\nclass D extends C { }\n\nvar d: { +m: () => void } = new D();\n"
  },
  {
    "path": "tests/flow/more_classes/Bar.js",
    "content": "\n/* @providesModule Bar */\n\nvar Qux = require('Qux');\n\nclass Bar {\n  y:number;\n  self:Bar;\n  constructor(y:number) {\n    this.y = y;\n    this.self = this;\n  }\n\n  bar(z:string,u:string):string {\n    new Qux().w = \"?\";\n    return z;\n  }\n}\n\nmodule.exports = Bar;\n"
  },
  {
    "path": "tests/flow/more_classes/Foo.js",
    "content": "\n/* @providesModule Foo */\n\nvar Bar = require('Bar');\nvar Qux = require('Qux');\n\nclass Foo extends Qux {\n  x:string;\n  constructor(x:string) {\n    this.x = x;\n  }\n\n  foo(y:string,z):number {\n    this.x = y;\n    var u = new Foo(\"...\").qux();\n    var v = new Bar(y);\n    v.self = v;\n    return v.bar(z,u);\n  }\n\n  fooqux(x:string) {\n    this.x;\n  }\n}\n\nmodule.exports = Foo;\n"
  },
  {
    "path": "tests/flow/more_classes/Qux.js",
    "content": "\n/* @providesModule Qux */\n\nclass Qux {\n  w:number;\n\n  qux() { return this.w; }\n\n  fooqux(x:number) { }\n}\n\nmodule.exports = Qux;\n"
  },
  {
    "path": "tests/flow/more_classes/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Bar.js 1`] = `\n\n/* @providesModule Bar */\n\nvar Qux = require('Qux');\n\nclass Bar {\n  y:number;\n  self:Bar;\n  constructor(y:number) {\n    this.y = y;\n    this.self = this;\n  }\n\n  bar(z:string,u:string):string {\n    new Qux().w = \"?\";\n    return z;\n  }\n}\n\nmodule.exports = Bar;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule Bar */\n\nvar Qux = require(\"Qux\");\n\nclass Bar {\n  y: number;\n  self: Bar;\n  constructor(y: number) {\n    this.y = y;\n    this.self = this;\n  }\n\n  bar(z: string, u: string): string {\n    new Qux().w = \"?\";\n    return z;\n  }\n}\n\nmodule.exports = Bar;\n\n`;\n\nexports[`Foo.js 1`] = `\n\n/* @providesModule Foo */\n\nvar Bar = require('Bar');\nvar Qux = require('Qux');\n\nclass Foo extends Qux {\n  x:string;\n  constructor(x:string) {\n    this.x = x;\n  }\n\n  foo(y:string,z):number {\n    this.x = y;\n    var u = new Foo(\"...\").qux();\n    var v = new Bar(y);\n    v.self = v;\n    return v.bar(z,u);\n  }\n\n  fooqux(x:string) {\n    this.x;\n  }\n}\n\nmodule.exports = Foo;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule Foo */\n\nvar Bar = require(\"Bar\");\nvar Qux = require(\"Qux\");\n\nclass Foo extends Qux {\n  x: string;\n  constructor(x: string) {\n    this.x = x;\n  }\n\n  foo(y: string, z): number {\n    this.x = y;\n    var u = new Foo(\"...\").qux();\n    var v = new Bar(y);\n    v.self = v;\n    return v.bar(z, u);\n  }\n\n  fooqux(x: string) {\n    this.x;\n  }\n}\n\nmodule.exports = Foo;\n\n`;\n\nexports[`Qux.js 1`] = `\n\n/* @providesModule Qux */\n\nclass Qux {\n  w:number;\n\n  qux() { return this.w; }\n\n  fooqux(x:number) { }\n}\n\nmodule.exports = Qux;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule Qux */\n\nclass Qux {\n  w: number;\n\n  qux() {\n    return this.w;\n  }\n\n  fooqux(x: number) {}\n}\n\nmodule.exports = Qux;\n\n`;\n"
  },
  {
    "path": "tests/flow/more_classes/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/more_generics/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`poly.js 1`] = `\nvar foo1 = function<T>(x:T):T { return x; }\n\nfunction foo2<T,S>(x:T):S { return x; }\n\nvar foo3 = function <T>(x:T):T { return foo3(x); }\n\nfunction foo4<T,S>(x:T):S { return foo4(x); }\n\nvar x = [];\nfunction foo5<T>():Array<T> { return x; }\n/*\n var a = foo5();\n a[0] = 0;\n var b = foo5();\n var y: string = b[0];\n*/\n\nvar foo6 = function<R>(x:R):R { return foo1(x); }\n\nfunction foo7<R>(x:R):R { return foo5(); }\n\nfunction foo8<U>(x:U,y):U {\n  var z = foo8(x,x);\n  y();\n  return x;\n}\n/*\n foo8(0,void 0);\n*/\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar foo1 = function<T>(x: T): T {\n  return x;\n};\n\nfunction foo2<T, S>(x: T): S {\n  return x;\n}\n\nvar foo3 = function<T>(x: T): T {\n  return foo3(x);\n};\n\nfunction foo4<T, S>(x: T): S {\n  return foo4(x);\n}\n\nvar x = [];\nfunction foo5<T>(): Array<T> {\n  return x;\n}\n/*\n var a = foo5();\n a[0] = 0;\n var b = foo5();\n var y: string = b[0];\n*/\n\nvar foo6 = function<R>(x: R): R {\n  return foo1(x);\n};\n\nfunction foo7<R>(x: R): R {\n  return foo5();\n}\n\nfunction foo8<U>(x: U, y): U {\n  var z = foo8(x, x);\n  y();\n  return x;\n}\n/*\n foo8(0,void 0);\n*/\n\n`;\n"
  },
  {
    "path": "tests/flow/more_generics/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/more_generics/poly.js",
    "content": "var foo1 = function<T>(x:T):T { return x; }\n\nfunction foo2<T,S>(x:T):S { return x; }\n\nvar foo3 = function <T>(x:T):T { return foo3(x); }\n\nfunction foo4<T,S>(x:T):S { return foo4(x); }\n\nvar x = [];\nfunction foo5<T>():Array<T> { return x; }\n/*\n var a = foo5();\n a[0] = 0;\n var b = foo5();\n var y: string = b[0];\n*/\n\nvar foo6 = function<R>(x:R):R { return foo1(x); }\n\nfunction foo7<R>(x:R):R { return foo5(); }\n\nfunction foo8<U>(x:U,y):U {\n  var z = foo8(x,x);\n  y();\n  return x;\n}\n/*\n foo8(0,void 0);\n*/\n"
  },
  {
    "path": "tests/flow/more_path/Condition.js",
    "content": "/* @providesModule Condition */\n\nfunction f(x:number) { }\nfunction g() { return (42 || \"hello\"); }\n\nvar x = g();\nif (typeof x === \"string\") {\n  x = 0;\n}\nf(x);\n\nclass A {}\nfunction h() { return (42 || new A()); }\n\nvar y = h();\nif (y instanceof A) {\n  y = 0;\n}\n//f(y);\n\nfunction bar() { return true; }\n\nclass C { qux() { } }\n\nfunction foo() {\n\n  var c = \"...\";\n  c = new C();\n  if (bar()) {\n    c.qux();\n  }\n\n}\n\nfunction goofy() {\n  var x = g();\n  if (typeof x == 'function') {\n    x();\n  } else { // if (typeof x == 'number') {\n    //f(x);\n  }\n}\n\nfunction goofy2() {\n  var o = {x : 0}\n  if (typeof o.x == 'function') {\n    o.x();\n  }\n  var y = o.x;\n  if (typeof y == 'function') {\n    y();\n  } else {\n    //f(y);\n  }\n}\n\nmodule.exports = true;\n"
  },
  {
    "path": "tests/flow/more_path/FlowSA.js",
    "content": "\n/* @providesModule FlowSA */\n\nfunction check(x:string) { }\n\nfunction FlowSA() {\n  var x = 0;\n  x = \"...\";\n  check(x);\n}\n\nmodule.exports = FlowSA;\n"
  },
  {
    "path": "tests/flow/more_path/Sigma.js",
    "content": "\n/* @providesModule Sigma */\n\nclass A { a() {} }\n\nclass B extends A { b() {} }\n\nclass C extends B { c() {} }\n\nfunction bar(x:B) {\n  if (x instanceof A) {\n    x.a();\n    x.c(); // error\n  } else {\n    x++; // TODO no error? since unreachable (x: B implies x: A)\n  }\n}\n\nfunction foo(x:A) {\n  if (x instanceof C) {\n    x.a();\n    x.b();\n    x.c();\n    x.d(); // error\n  } else {\n    x.a();\n    x.c(); // error\n  }\n}\n\n\nclass D { d() {} }\n\nfunction baz(x:D) {\n  if (x instanceof A) {\n    // unreachable, TODO: this shouldn't throw\n  }\n}\n\nmodule.exports = \"sigma\";\n"
  },
  {
    "path": "tests/flow/more_path/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Condition.js 1`] = `\n/* @providesModule Condition */\n\nfunction f(x:number) { }\nfunction g() { return (42 || \"hello\"); }\n\nvar x = g();\nif (typeof x === \"string\") {\n  x = 0;\n}\nf(x);\n\nclass A {}\nfunction h() { return (42 || new A()); }\n\nvar y = h();\nif (y instanceof A) {\n  y = 0;\n}\n//f(y);\n\nfunction bar() { return true; }\n\nclass C { qux() { } }\n\nfunction foo() {\n\n  var c = \"...\";\n  c = new C();\n  if (bar()) {\n    c.qux();\n  }\n\n}\n\nfunction goofy() {\n  var x = g();\n  if (typeof x == 'function') {\n    x();\n  } else { // if (typeof x == 'number') {\n    //f(x);\n  }\n}\n\nfunction goofy2() {\n  var o = {x : 0}\n  if (typeof o.x == 'function') {\n    o.x();\n  }\n  var y = o.x;\n  if (typeof y == 'function') {\n    y();\n  } else {\n    //f(y);\n  }\n}\n\nmodule.exports = true;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule Condition */\n\nfunction f(x: number) {}\nfunction g() {\n  return 42 || \"hello\";\n}\n\nvar x = g();\nif (typeof x === \"string\") {\n  x = 0;\n}\nf(x);\n\nclass A {}\nfunction h() {\n  return 42 || new A();\n}\n\nvar y = h();\nif (y instanceof A) {\n  y = 0;\n}\n//f(y);\n\nfunction bar() {\n  return true;\n}\n\nclass C {\n  qux() {}\n}\n\nfunction foo() {\n  var c = \"...\";\n  c = new C();\n  if (bar()) {\n    c.qux();\n  }\n}\n\nfunction goofy() {\n  var x = g();\n  if (typeof x == \"function\") {\n    x();\n  } else {\n    // if (typeof x == 'number') {\n    //f(x);\n  }\n}\n\nfunction goofy2() {\n  var o = { x: 0 };\n  if (typeof o.x == \"function\") {\n    o.x();\n  }\n  var y = o.x;\n  if (typeof y == \"function\") {\n    y();\n  } else {\n    //f(y);\n  }\n}\n\nmodule.exports = true;\n\n`;\n\nexports[`FlowSA.js 1`] = `\n\n/* @providesModule FlowSA */\n\nfunction check(x:string) { }\n\nfunction FlowSA() {\n  var x = 0;\n  x = \"...\";\n  check(x);\n}\n\nmodule.exports = FlowSA;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule FlowSA */\n\nfunction check(x: string) {}\n\nfunction FlowSA() {\n  var x = 0;\n  x = \"...\";\n  check(x);\n}\n\nmodule.exports = FlowSA;\n\n`;\n\nexports[`Sigma.js 1`] = `\n\n/* @providesModule Sigma */\n\nclass A { a() {} }\n\nclass B extends A { b() {} }\n\nclass C extends B { c() {} }\n\nfunction bar(x:B) {\n  if (x instanceof A) {\n    x.a();\n    x.c(); // error\n  } else {\n    x++; // TODO no error? since unreachable (x: B implies x: A)\n  }\n}\n\nfunction foo(x:A) {\n  if (x instanceof C) {\n    x.a();\n    x.b();\n    x.c();\n    x.d(); // error\n  } else {\n    x.a();\n    x.c(); // error\n  }\n}\n\n\nclass D { d() {} }\n\nfunction baz(x:D) {\n  if (x instanceof A) {\n    // unreachable, TODO: this shouldn't throw\n  }\n}\n\nmodule.exports = \"sigma\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule Sigma */\n\nclass A {\n  a() {}\n}\n\nclass B extends A {\n  b() {}\n}\n\nclass C extends B {\n  c() {}\n}\n\nfunction bar(x: B) {\n  if (x instanceof A) {\n    x.a();\n    x.c(); // error\n  } else {\n    x++; // TODO no error? since unreachable (x: B implies x: A)\n  }\n}\n\nfunction foo(x: A) {\n  if (x instanceof C) {\n    x.a();\n    x.b();\n    x.c();\n    x.d(); // error\n  } else {\n    x.a();\n    x.c(); // error\n  }\n}\n\nclass D {\n  d() {}\n}\n\nfunction baz(x: D) {\n  if (x instanceof A) {\n    // unreachable, TODO: this shouldn't throw\n  }\n}\n\nmodule.exports = \"sigma\";\n\n`;\n\nexports[`test.js 1`] = `\nclass BaseClass {\n  baseProp: string;\n}\n\nclass ChildClass extends BaseClass {\n  childProp: string;\n}\n\nfunction test(obj: BaseClass): string {\n  if (obj instanceof ChildClass) {\n    return obj.childProp_TYPO; // error (obj: ChildClass)\n  }\n  return obj.baseProp;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass BaseClass {\n  baseProp: string;\n}\n\nclass ChildClass extends BaseClass {\n  childProp: string;\n}\n\nfunction test(obj: BaseClass): string {\n  if (obj instanceof ChildClass) {\n    return obj.childProp_TYPO; // error (obj: ChildClass)\n  }\n  return obj.baseProp;\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/more_path/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/more_path/test.js",
    "content": "class BaseClass {\n  baseProp: string;\n}\n\nclass ChildClass extends BaseClass {\n  childProp: string;\n}\n\nfunction test(obj: BaseClass): string {\n  if (obj instanceof ChildClass) {\n    return obj.childProp_TYPO; // error (obj: ChildClass)\n  }\n  return obj.baseProp;\n}\n"
  },
  {
    "path": "tests/flow/more_react/API.react.js",
    "content": "\nvar app = require('JSX');\n\napp.setProps({y:42}); // error, y:number but foo expects string in App.react\napp.setState({z:42}); // error, z:number but foo expects string in App.react\n\nfunction bar(x:number) { }\nbar(app.props.children); // No error, App doesn't specify propTypes so anything goes\n"
  },
  {
    "path": "tests/flow/more_react/App.react.js",
    "content": "\n/**\n * @providesModule App.react\n * @jsx React.DOM\n */\n\nvar React = require('react');\n\n// expect args to be strings\nfunction foo(p:string,q:string):string { return p+q; }\n\nvar App = React.createClass({\n\n  getDefaultProps: function(): { y: string } {\n    return {y:\"\"}; // infer props.y: string\n  },\n\n  getInitialState: function() {\n    return {z:0}; // infer state.z: number\n  },\n\n  handler: function() {\n    this.setState({z:42}); // ok\n  },\n\n  render: function() {\n    var x = this.props.x;\n    var y = this.props.y;\n    var z = this.state.z;\n\n    //this.state;\n\n    return (\n      <div>\n        {foo(x,y)}\n        {foo(z,x)} // error, since z: number\n      </div>\n    );\n  }\n\n});\n\nmodule.exports = App;\n"
  },
  {
    "path": "tests/flow/more_react/InitializedFields.js",
    "content": "/**\n * @providesModule InitializedFields.react\n */\n\nvar React = require('react');\n\n/** This is a regression test for a bug where we forgot to mark the fields of\n * react classes as initialized, when the class was created with createClass().\n * This would manifest as complaining that metric requires an annotation */\nvar App = React.createClass({\n  metrics: [1,2,3],\n});\n\nmodule.exports = App;\n"
  },
  {
    "path": "tests/flow/more_react/JSX.js",
    "content": "\n/* @providesModule JSX */\n\nvar React = require('react');\nvar App = require('App.react');\n\nvar app =\n  <App y={42}> // error, y: number but foo expects string in App.react\n    Some text.\n  </App>;\n\nmodule.exports = app;\n"
  },
  {
    "path": "tests/flow/more_react/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`API.react.js 1`] = `\n\nvar app = require('JSX');\n\napp.setProps({y:42}); // error, y:number but foo expects string in App.react\napp.setState({z:42}); // error, z:number but foo expects string in App.react\n\nfunction bar(x:number) { }\nbar(app.props.children); // No error, App doesn't specify propTypes so anything goes\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar app = require(\"JSX\");\n\napp.setProps({ y: 42 }); // error, y:number but foo expects string in App.react\napp.setState({ z: 42 }); // error, z:number but foo expects string in App.react\n\nfunction bar(x: number) {}\nbar(app.props.children); // No error, App doesn't specify propTypes so anything goes\n\n`;\n\nexports[`App.react.js 1`] = `\n\n/**\n * @providesModule App.react\n * @jsx React.DOM\n */\n\nvar React = require('react');\n\n// expect args to be strings\nfunction foo(p:string,q:string):string { return p+q; }\n\nvar App = React.createClass({\n\n  getDefaultProps: function(): { y: string } {\n    return {y:\"\"}; // infer props.y: string\n  },\n\n  getInitialState: function() {\n    return {z:0}; // infer state.z: number\n  },\n\n  handler: function() {\n    this.setState({z:42}); // ok\n  },\n\n  render: function() {\n    var x = this.props.x;\n    var y = this.props.y;\n    var z = this.state.z;\n\n    //this.state;\n\n    return (\n      <div>\n        {foo(x,y)}\n        {foo(z,x)} // error, since z: number\n      </div>\n    );\n  }\n\n});\n\nmodule.exports = App;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule App.react\n * @jsx React.DOM\n */\n\nvar React = require(\"react\");\n\n// expect args to be strings\nfunction foo(p: string, q: string): string {\n  return p + q;\n}\n\nvar App = React.createClass({\n  getDefaultProps: function(): { y: string } {\n    return { y: \"\" }; // infer props.y: string\n  },\n\n  getInitialState: function() {\n    return { z: 0 }; // infer state.z: number\n  },\n\n  handler: function() {\n    this.setState({ z: 42 }); // ok\n  },\n\n  render: function() {\n    var x = this.props.x;\n    var y = this.props.y;\n    var z = this.state.z;\n\n    //this.state;\n\n    return (\n      <div>\n        {foo(x, y)}\n        {foo(z, x)} // error, since z: number\n      </div>\n    );\n  }\n});\n\nmodule.exports = App;\n\n`;\n\nexports[`InitializedFields.js 1`] = `\n/**\n * @providesModule InitializedFields.react\n */\n\nvar React = require('react');\n\n/** This is a regression test for a bug where we forgot to mark the fields of\n * react classes as initialized, when the class was created with createClass().\n * This would manifest as complaining that metric requires an annotation */\nvar App = React.createClass({\n  metrics: [1,2,3],\n});\n\nmodule.exports = App;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule InitializedFields.react\n */\n\nvar React = require(\"react\");\n\n/** This is a regression test for a bug where we forgot to mark the fields of\n * react classes as initialized, when the class was created with createClass().\n * This would manifest as complaining that metric requires an annotation */\nvar App = React.createClass({\n  metrics: [1, 2, 3]\n});\n\nmodule.exports = App;\n\n`;\n\nexports[`JSX.js 1`] = `\n\n/* @providesModule JSX */\n\nvar React = require('react');\nvar App = require('App.react');\n\nvar app =\n  <App y={42}> // error, y: number but foo expects string in App.react\n    Some text.\n  </App>;\n\nmodule.exports = app;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule JSX */\n\nvar React = require(\"react\");\nvar App = require(\"App.react\");\n\nvar app = (\n  <App y={42}>\n    {\" \"}\n    // error, y: number but foo expects string in App.react Some text.\n  </App>\n);\n\nmodule.exports = app;\n\n`;\n\nexports[`checkPropTypes.js 1`] = `\n/* @flow */\n\nimport { PropTypes, checkPropTypes } from \"react\";\n\ncheckPropTypes({ foo: PropTypes.string }, { foo: 'foo' }, 'value', 'TestComponent'); // OK\n\ncheckPropTypes({ foo: PropTypes.string }, { foo: 'foo' }); // error: missing arguments\ncheckPropTypes({ foo: PropTypes.string }, { foo: 'foo' }, 'value'); // error: missing argument\n\ncheckPropTypes({ bar: PropTypes.string }, { foo: 'foo' }, 'value', 'TestComponent'); // error: property not found\n\ncheckPropTypes({ foo: PropTypes.string }, { foo: 'foo' }, 'value', 'TestComponent', () => 123); // error: number ~> string\ncheckPropTypes({ foo: PropTypes.string }, { foo: 'foo' }, 'value', 'TestComponent', () => null); // OK\ncheckPropTypes({ foo: PropTypes.string }, { foo: 'foo' }, 'value', 'TestComponent', () => undefined); // OK\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nimport { PropTypes, checkPropTypes } from \"react\";\n\ncheckPropTypes(\n  { foo: PropTypes.string },\n  { foo: \"foo\" },\n  \"value\",\n  \"TestComponent\"\n); // OK\n\ncheckPropTypes({ foo: PropTypes.string }, { foo: \"foo\" }); // error: missing arguments\ncheckPropTypes({ foo: PropTypes.string }, { foo: \"foo\" }, \"value\"); // error: missing argument\n\ncheckPropTypes(\n  { bar: PropTypes.string },\n  { foo: \"foo\" },\n  \"value\",\n  \"TestComponent\"\n); // error: property not found\n\ncheckPropTypes(\n  { foo: PropTypes.string },\n  { foo: \"foo\" },\n  \"value\",\n  \"TestComponent\",\n  () => 123\n); // error: number ~> string\ncheckPropTypes(\n  { foo: PropTypes.string },\n  { foo: \"foo\" },\n  \"value\",\n  \"TestComponent\",\n  () => null\n); // OK\ncheckPropTypes(\n  { foo: PropTypes.string },\n  { foo: \"foo\" },\n  \"value\",\n  \"TestComponent\",\n  () => undefined\n); // OK\n\n`;\n\nexports[`propTypes.js 1`] = `\nvar React = require('React');\n\nvar C = React.createClass({\n  propTypes: {\n    title: React.PropTypes.string.isRequired,\n  }\n});\nvar D = React.createClass({\n  propTypes: {\n    name: React.PropTypes.string.isRequired,\n    ...C.propTypes,\n  }\n});\n\n<D />; // errors: properties \\`name\\` and \\`title\\` not found\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar React = require(\"React\");\n\nvar C = React.createClass({\n  propTypes: {\n    title: React.PropTypes.string.isRequired\n  }\n});\nvar D = React.createClass({\n  propTypes: {\n    name: React.PropTypes.string.isRequired,\n    ...C.propTypes\n  }\n});\n\n<D />; // errors: properties \\`name\\` and \\`title\\` not found\n\n`;\n"
  },
  {
    "path": "tests/flow/more_react/checkPropTypes.js",
    "content": "/* @flow */\n\nimport { PropTypes, checkPropTypes } from \"react\";\n\ncheckPropTypes({ foo: PropTypes.string }, { foo: 'foo' }, 'value', 'TestComponent'); // OK\n\ncheckPropTypes({ foo: PropTypes.string }, { foo: 'foo' }); // error: missing arguments\ncheckPropTypes({ foo: PropTypes.string }, { foo: 'foo' }, 'value'); // error: missing argument\n\ncheckPropTypes({ bar: PropTypes.string }, { foo: 'foo' }, 'value', 'TestComponent'); // error: property not found\n\ncheckPropTypes({ foo: PropTypes.string }, { foo: 'foo' }, 'value', 'TestComponent', () => 123); // error: number ~> string\ncheckPropTypes({ foo: PropTypes.string }, { foo: 'foo' }, 'value', 'TestComponent', () => null); // OK\ncheckPropTypes({ foo: PropTypes.string }, { foo: 'foo' }, 'value', 'TestComponent', () => undefined); // OK\n"
  },
  {
    "path": "tests/flow/more_react/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/more_react/propTypes.js",
    "content": "var React = require('React');\n\nvar C = React.createClass({\n  propTypes: {\n    title: React.PropTypes.string.isRequired,\n  }\n});\nvar D = React.createClass({\n  propTypes: {\n    name: React.PropTypes.string.isRequired,\n    ...C.propTypes,\n  }\n});\n\n<D />; // errors: properties `name` and `title` not found\n"
  },
  {
    "path": "tests/flow/more_statics/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`class_static.js 1`] = `\nclass B {\n    static foo(): string { return \"\"; }\n}\n\nclass C extends B {\n    static bar(): string { return \"\"; }\n}\n\nvar x: number = C.bar();\nvar y: number = C.foo();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass B {\n  static foo(): string {\n    return \"\";\n  }\n}\n\nclass C extends B {\n  static bar(): string {\n    return \"\";\n  }\n}\n\nvar x: number = C.bar();\nvar y: number = C.foo();\n\n`;\n"
  },
  {
    "path": "tests/flow/more_statics/class_static.js",
    "content": "class B {\n    static foo(): string { return \"\"; }\n}\n\nclass C extends B {\n    static bar(): string { return \"\"; }\n}\n\nvar x: number = C.bar();\nvar y: number = C.foo();\n"
  },
  {
    "path": "tests/flow/more_statics/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/multiflow/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`apply.js 1`] = `\n// @flow\n\nfunction apply<Args: $ReadOnlyArray<mixed>, Ret>(\n  fn: (...Args) => Ret,\n  args: Args,\n): Ret {\n  return fn(...args);\n}\n\nfunction noRest(x: 'hi', y: 123): true { return true; }\napply(noRest, ['hi', 123]); // No error\napply(noRest, ['hi', 456]); // Error - 456 ~> 123\napply(noRest, ['hi']); // Error - too few args\napply(noRest, ['hi', 123, false]); // No error - too many args is fine\n\n// withRest behaves the same as noRest except you can't pass too many args in\nfunction withRest(...rest: ['hi', 123]): true { return true; }\napply(withRest, ['hi', 123]); // No error\napply(withRest, ['hi', 456]); // Error - 456 ~> 123\napply(withRest, ['hi']); // Error - too few args\napply(withRest, ['hi', 123, false]); // Error - too many args\n\n// Same thing, but with types instead of functions\ndeclare var applyType: <Args: $ReadOnlyArray<mixed>, Ret>(\n  fn: (...Args) => Ret,\n  args: Args,\n) => Ret;\n\nfunction noRest(x: 'hi', y: 123): true { return true; }\napplyType(noRest, ['hi', 123]); // No error\napplyType(noRest, ['hi', 456]); // Error - 456 ~> 123\napplyType(noRest, ['hi']); // Error - too few args\napplyType(noRest, ['hi', 123, false]); // No error - too many args is fine\n\n// withRest behaves the same as noRest except you can't pass too many args in\nfunction withRest(...rest: ['hi', 123]): true { return true; }\napplyType(withRest, ['hi', 123]); // No error\napplyType(withRest, ['hi', 456]); // Error - 456 ~> 123\napplyType(withRest, ['hi']); // Error - too few args\napplyType(withRest, ['hi', 123, false]); // Error - too many args\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nfunction apply<Args: $ReadOnlyArray<mixed>, Ret>(\n  fn: (...Args) => Ret,\n  args: Args\n): Ret {\n  return fn(...args);\n}\n\nfunction noRest(x: \"hi\", y: 123): true {\n  return true;\n}\napply(noRest, [\"hi\", 123]); // No error\napply(noRest, [\"hi\", 456]); // Error - 456 ~> 123\napply(noRest, [\"hi\"]); // Error - too few args\napply(noRest, [\"hi\", 123, false]); // No error - too many args is fine\n\n// withRest behaves the same as noRest except you can't pass too many args in\nfunction withRest(...rest: [\"hi\", 123]): true {\n  return true;\n}\napply(withRest, [\"hi\", 123]); // No error\napply(withRest, [\"hi\", 456]); // Error - 456 ~> 123\napply(withRest, [\"hi\"]); // Error - too few args\napply(withRest, [\"hi\", 123, false]); // Error - too many args\n\n// Same thing, but with types instead of functions\ndeclare var applyType: <Args: $ReadOnlyArray<mixed>, Ret>(\n  fn: (...Args) => Ret,\n  args: Args\n) => Ret;\n\nfunction noRest(x: \"hi\", y: 123): true {\n  return true;\n}\napplyType(noRest, [\"hi\", 123]); // No error\napplyType(noRest, [\"hi\", 456]); // Error - 456 ~> 123\napplyType(noRest, [\"hi\"]); // Error - too few args\napplyType(noRest, [\"hi\", 123, false]); // No error - too many args is fine\n\n// withRest behaves the same as noRest except you can't pass too many args in\nfunction withRest(...rest: [\"hi\", 123]): true {\n  return true;\n}\napplyType(withRest, [\"hi\", 123]); // No error\napplyType(withRest, [\"hi\", 456]); // Error - 456 ~> 123\napplyType(withRest, [\"hi\"]); // Error - too few args\napplyType(withRest, [\"hi\", 123, false]); // Error - too many args\n\n`;\n\nexports[`issue3443.js 1`] = `\n// @flow\n\n// Adapted from https://github.com/facebook/flow/issues/3443\n\nclass A {\n    f(...args: any[]) {}\n}\n\nclass B extends A {\n    f(...args) {\n      this.f(...args);\n    }\n}\n\nfunction foo(...args) {\n  foo(1, ...args);\n}\nfoo(123);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// Adapted from https://github.com/facebook/flow/issues/3443\n\nclass A {\n  f(...args: any[]) {}\n}\n\nclass B extends A {\n  f(...args) {\n    this.f(...args);\n  }\n}\n\nfunction foo(...args) {\n  foo(1, ...args);\n}\nfoo(123);\n\n`;\n\nexports[`jsx.js 1`] = `\n/**\n * @jsx JSX\n * @flow\n */\n\n// This one for when there are no JSX attributes\ndeclare function JSX<\n  Children: $ReadOnlyArray<mixed>,\n  Elem,\n  C: (props: {}, children: Children) => Elem\n>(\n  component: C,\n  props: null,\n  ...children: Children\n): Elem;\n\n// This one for when there are JSX attributes.\ndeclare function JSX<\n  Children: $ReadOnlyArray<mixed>,\n  Elem,\n  Props: Object,\n  C: (props: Props, children: Children) => Elem\n>(\n  component: C,\n  props: Props,\n  ...children: Children\n): Elem;\n\ndeclare function AcceptsWhatever(props: {} | null, children: any): string;\n(<AcceptsWhatever />: number); // Error string ~> number\n(<AcceptsWhatever name=\"hi\">Text</AcceptsWhatever>: number); // Error string ~> number\n\ndeclare function ExpectsProps(props: { name: string }, children: any): string;\n(<ExpectsProps />); // Error - missing prop\n(<ExpectsProps name=\"hi\">Text</ExpectsProps>: number); // Error string ~> number\n\ndeclare function ExpectsChildrenTuple(props: any, children: [string]): string;\n(<ExpectsChildrenTuple />); // Error - mising child\n(<ExpectsChildrenTuple>Hi</ExpectsChildrenTuple>); // No error\n(<ExpectsChildrenTuple>{123}</ExpectsChildrenTuple>); // Error: number ~> string\n(<ExpectsChildrenTuple>Hi {\"there\"}</ExpectsChildrenTuple>); // Error: too many children\n\ndeclare function ExpectsChildrenArray(props: any, children: Array<string>): string;\n(<ExpectsChildrenArray />); // No error - 0 children is fine\n(<ExpectsChildrenArray>Hi</ExpectsChildrenArray>); // No error - 1 child is fine\n(<ExpectsChildrenArray>{123}</ExpectsChildrenArray>); // Error: number ~> string\n(<ExpectsChildrenArray>Hi {\"there\"}</ExpectsChildrenArray>); // No error - 2 children is fine\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @jsx JSX\n * @flow\n */\n\n// This one for when there are no JSX attributes\ndeclare function JSX<\n  Children: $ReadOnlyArray<mixed>,\n  Elem,\n  C: (props: {}, children: Children) => Elem\n>(\n  component: C,\n  props: null,\n  ...children: Children\n): Elem;\n\n// This one for when there are JSX attributes.\ndeclare function JSX<\n  Children: $ReadOnlyArray<mixed>,\n  Elem,\n  Props: Object,\n  C: (props: Props, children: Children) => Elem\n>(\n  component: C,\n  props: Props,\n  ...children: Children\n): Elem;\n\ndeclare function AcceptsWhatever(props: {} | null, children: any): string;\n(<AcceptsWhatever />: number); // Error string ~> number\n(<AcceptsWhatever name=\"hi\">Text</AcceptsWhatever>: number); // Error string ~> number\n\ndeclare function ExpectsProps(props: { name: string }, children: any): string;\n<ExpectsProps />; // Error - missing prop\n(<ExpectsProps name=\"hi\">Text</ExpectsProps>: number); // Error string ~> number\n\ndeclare function ExpectsChildrenTuple(props: any, children: [string]): string;\n<ExpectsChildrenTuple />; // Error - mising child\n<ExpectsChildrenTuple>Hi</ExpectsChildrenTuple>; // No error\n<ExpectsChildrenTuple>{123}</ExpectsChildrenTuple>; // Error: number ~> string\n<ExpectsChildrenTuple>Hi {\"there\"}</ExpectsChildrenTuple>; // Error: too many children\n\ndeclare function ExpectsChildrenArray(\n  props: any,\n  children: Array<string>\n): string;\n<ExpectsChildrenArray />; // No error - 0 children is fine\n<ExpectsChildrenArray>Hi</ExpectsChildrenArray>; // No error - 1 child is fine\n<ExpectsChildrenArray>{123}</ExpectsChildrenArray>; // Error: number ~> string\n<ExpectsChildrenArray>Hi {\"there\"}</ExpectsChildrenArray>; // No error - 2 children is fine\n\n`;\n\nexports[`spread.js 1`] = `\n// @flow\n\nfunction fun(x: 'hi', y: 123) {}\nfun(...['hi', 123]); // No error\nfun(...['hi'], ...[123]); // No error\nfun(...['hi'], ...[], ...[123]); // No error\nfun(...['hi'], ...[], ...[123], ...[true]); // Error - true is unused\nfun(...['hi'], ...[true], ...[123]); // Error: true ~> 123 and 123 is unused\n\ndeclare var arrOf123: Array<123>;\nfun('hi', ...arrOf123); // No error - ignore the fact arrOf123 could be empty\n\n\nfunction funWithRestArray(x: 'hi', y: 123, ...rest: Array<number>) {}\nfunWithRestArray(...['hi', 123]); // No error\nfunWithRestArray(...['hi'], ...[123]); // No error\nfunWithRestArray(...['hi'], ...[], ...[123]); // No error\nfunWithRestArray(...['hi'], ...[], ...[123], ...[456, 789]); // No error\nfunWithRestArray(...['hi'], ...[true], ...[123]); // Error: true ~> 123\n\nfunWithRestArray('hi', 123, ...arrOf123); // Ok\nfunWithRestArray('hi', ...arrOf123); // No error - ignore the fact arrOf123 could be empty\nfunWithRestArray('hi', ...arrOf123, ...arrOf123); // No error - ignore the fact arrOf123 could be empty\n\n// 2 errors\n// 1. 'bye' ~> 123 in case the first spread is empty\n// 2. 'bye' ~> number in case the first spread is not empty\nfunWithRestArray('hi', ...arrOf123, 'bye', ...arrOf123);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nfunction fun(x: \"hi\", y: 123) {}\nfun(...[\"hi\", 123]); // No error\nfun(...[\"hi\"], ...[123]); // No error\nfun(...[\"hi\"], ...[], ...[123]); // No error\nfun(...[\"hi\"], ...[], ...[123], ...[true]); // Error - true is unused\nfun(...[\"hi\"], ...[true], ...[123]); // Error: true ~> 123 and 123 is unused\n\ndeclare var arrOf123: Array<123>;\nfun(\"hi\", ...arrOf123); // No error - ignore the fact arrOf123 could be empty\n\nfunction funWithRestArray(x: \"hi\", y: 123, ...rest: Array<number>) {}\nfunWithRestArray(...[\"hi\", 123]); // No error\nfunWithRestArray(...[\"hi\"], ...[123]); // No error\nfunWithRestArray(...[\"hi\"], ...[], ...[123]); // No error\nfunWithRestArray(...[\"hi\"], ...[], ...[123], ...[456, 789]); // No error\nfunWithRestArray(...[\"hi\"], ...[true], ...[123]); // Error: true ~> 123\n\nfunWithRestArray(\"hi\", 123, ...arrOf123); // Ok\nfunWithRestArray(\"hi\", ...arrOf123); // No error - ignore the fact arrOf123 could be empty\nfunWithRestArray(\"hi\", ...arrOf123, ...arrOf123); // No error - ignore the fact arrOf123 could be empty\n\n// 2 errors\n// 1. 'bye' ~> 123 in case the first spread is empty\n// 2. 'bye' ~> number in case the first spread is not empty\nfunWithRestArray(\"hi\", ...arrOf123, \"bye\", ...arrOf123);\n\n`;\n"
  },
  {
    "path": "tests/flow/multiflow/apply.js",
    "content": "// @flow\n\nfunction apply<Args: $ReadOnlyArray<mixed>, Ret>(\n  fn: (...Args) => Ret,\n  args: Args,\n): Ret {\n  return fn(...args);\n}\n\nfunction noRest(x: 'hi', y: 123): true { return true; }\napply(noRest, ['hi', 123]); // No error\napply(noRest, ['hi', 456]); // Error - 456 ~> 123\napply(noRest, ['hi']); // Error - too few args\napply(noRest, ['hi', 123, false]); // No error - too many args is fine\n\n// withRest behaves the same as noRest except you can't pass too many args in\nfunction withRest(...rest: ['hi', 123]): true { return true; }\napply(withRest, ['hi', 123]); // No error\napply(withRest, ['hi', 456]); // Error - 456 ~> 123\napply(withRest, ['hi']); // Error - too few args\napply(withRest, ['hi', 123, false]); // Error - too many args\n\n// Same thing, but with types instead of functions\ndeclare var applyType: <Args: $ReadOnlyArray<mixed>, Ret>(\n  fn: (...Args) => Ret,\n  args: Args,\n) => Ret;\n\nfunction noRest(x: 'hi', y: 123): true { return true; }\napplyType(noRest, ['hi', 123]); // No error\napplyType(noRest, ['hi', 456]); // Error - 456 ~> 123\napplyType(noRest, ['hi']); // Error - too few args\napplyType(noRest, ['hi', 123, false]); // No error - too many args is fine\n\n// withRest behaves the same as noRest except you can't pass too many args in\nfunction withRest(...rest: ['hi', 123]): true { return true; }\napplyType(withRest, ['hi', 123]); // No error\napplyType(withRest, ['hi', 456]); // Error - 456 ~> 123\napplyType(withRest, ['hi']); // Error - too few args\napplyType(withRest, ['hi', 123, false]); // Error - too many args\n"
  },
  {
    "path": "tests/flow/multiflow/issue3443.js",
    "content": "// @flow\n\n// Adapted from https://github.com/facebook/flow/issues/3443\n\nclass A {\n    f(...args: any[]) {}\n}\n\nclass B extends A {\n    f(...args) {\n      this.f(...args);\n    }\n}\n\nfunction foo(...args) {\n  foo(1, ...args);\n}\nfoo(123);\n"
  },
  {
    "path": "tests/flow/multiflow/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/multiflow/jsx.js",
    "content": "/**\n * @jsx JSX\n * @flow\n */\n\n// This one for when there are no JSX attributes\ndeclare function JSX<\n  Children: $ReadOnlyArray<mixed>,\n  Elem,\n  C: (props: {}, children: Children) => Elem\n>(\n  component: C,\n  props: null,\n  ...children: Children\n): Elem;\n\n// This one for when there are JSX attributes.\ndeclare function JSX<\n  Children: $ReadOnlyArray<mixed>,\n  Elem,\n  Props: Object,\n  C: (props: Props, children: Children) => Elem\n>(\n  component: C,\n  props: Props,\n  ...children: Children\n): Elem;\n\ndeclare function AcceptsWhatever(props: {} | null, children: any): string;\n(<AcceptsWhatever />: number); // Error string ~> number\n(<AcceptsWhatever name=\"hi\">Text</AcceptsWhatever>: number); // Error string ~> number\n\ndeclare function ExpectsProps(props: { name: string }, children: any): string;\n(<ExpectsProps />); // Error - missing prop\n(<ExpectsProps name=\"hi\">Text</ExpectsProps>: number); // Error string ~> number\n\ndeclare function ExpectsChildrenTuple(props: any, children: [string]): string;\n(<ExpectsChildrenTuple />); // Error - mising child\n(<ExpectsChildrenTuple>Hi</ExpectsChildrenTuple>); // No error\n(<ExpectsChildrenTuple>{123}</ExpectsChildrenTuple>); // Error: number ~> string\n(<ExpectsChildrenTuple>Hi {\"there\"}</ExpectsChildrenTuple>); // Error: too many children\n\ndeclare function ExpectsChildrenArray(props: any, children: Array<string>): string;\n(<ExpectsChildrenArray />); // No error - 0 children is fine\n(<ExpectsChildrenArray>Hi</ExpectsChildrenArray>); // No error - 1 child is fine\n(<ExpectsChildrenArray>{123}</ExpectsChildrenArray>); // Error: number ~> string\n(<ExpectsChildrenArray>Hi {\"there\"}</ExpectsChildrenArray>); // No error - 2 children is fine\n"
  },
  {
    "path": "tests/flow/multiflow/spread.js",
    "content": "// @flow\n\nfunction fun(x: 'hi', y: 123) {}\nfun(...['hi', 123]); // No error\nfun(...['hi'], ...[123]); // No error\nfun(...['hi'], ...[], ...[123]); // No error\nfun(...['hi'], ...[], ...[123], ...[true]); // Error - true is unused\nfun(...['hi'], ...[true], ...[123]); // Error: true ~> 123 and 123 is unused\n\ndeclare var arrOf123: Array<123>;\nfun('hi', ...arrOf123); // No error - ignore the fact arrOf123 could be empty\n\n\nfunction funWithRestArray(x: 'hi', y: 123, ...rest: Array<number>) {}\nfunWithRestArray(...['hi', 123]); // No error\nfunWithRestArray(...['hi'], ...[123]); // No error\nfunWithRestArray(...['hi'], ...[], ...[123]); // No error\nfunWithRestArray(...['hi'], ...[], ...[123], ...[456, 789]); // No error\nfunWithRestArray(...['hi'], ...[true], ...[123]); // Error: true ~> 123\n\nfunWithRestArray('hi', 123, ...arrOf123); // Ok\nfunWithRestArray('hi', ...arrOf123); // No error - ignore the fact arrOf123 could be empty\nfunWithRestArray('hi', ...arrOf123, ...arrOf123); // No error - ignore the fact arrOf123 could be empty\n\n// 2 errors\n// 1. 'bye' ~> 123 in case the first spread is empty\n// 2. 'bye' ~> number in case the first spread is not empty\nfunWithRestArray('hi', ...arrOf123, 'bye', ...arrOf123);\n"
  },
  {
    "path": "tests/flow/multiflow_with_flowlib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`spread.js 1`] = `\ndeclare var iterableOf123: Iterable<123>;\nfunction fun(x: 'hi', y: 123) {}\nfun('hi', ...iterableOf123); // No error - ignore the fact iterableOf123 could be empty\n\nfunction funWithRestArray(x: 'hi', y: 123, ...rest: Array<number>) {}\n\nfunWithRestArray('hi', 123, ...iterableOf123); // Ok\nfunWithRestArray('hi', ...iterableOf123); // No error - ignore the fact iterableOf123 could be empty\nfunWithRestArray('hi', ...iterableOf123, ...iterableOf123); // No error - ignore the fact iterableOf123 could be empty\n\n// 2 errors\n// 1. 'bye' ~> 123 in case the first spread is empty\n// 2. 'bye' ~> number in case the first spread is not empty\nfunWithRestArray('hi', ...iterableOf123, 'bye', ...iterableOf123);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare var iterableOf123: Iterable<123>;\nfunction fun(x: \"hi\", y: 123) {}\nfun(\"hi\", ...iterableOf123); // No error - ignore the fact iterableOf123 could be empty\n\nfunction funWithRestArray(x: \"hi\", y: 123, ...rest: Array<number>) {}\n\nfunWithRestArray(\"hi\", 123, ...iterableOf123); // Ok\nfunWithRestArray(\"hi\", ...iterableOf123); // No error - ignore the fact iterableOf123 could be empty\nfunWithRestArray(\"hi\", ...iterableOf123, ...iterableOf123); // No error - ignore the fact iterableOf123 could be empty\n\n// 2 errors\n// 1. 'bye' ~> 123 in case the first spread is empty\n// 2. 'bye' ~> number in case the first spread is not empty\nfunWithRestArray(\"hi\", ...iterableOf123, \"bye\", ...iterableOf123);\n\n`;\n"
  },
  {
    "path": "tests/flow/multiflow_with_flowlib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/multiflow_with_flowlib/spread.js",
    "content": "declare var iterableOf123: Iterable<123>;\nfunction fun(x: 'hi', y: 123) {}\nfun('hi', ...iterableOf123); // No error - ignore the fact iterableOf123 could be empty\n\nfunction funWithRestArray(x: 'hi', y: 123, ...rest: Array<number>) {}\n\nfunWithRestArray('hi', 123, ...iterableOf123); // Ok\nfunWithRestArray('hi', ...iterableOf123); // No error - ignore the fact iterableOf123 could be empty\nfunWithRestArray('hi', ...iterableOf123, ...iterableOf123); // No error - ignore the fact iterableOf123 could be empty\n\n// 2 errors\n// 1. 'bye' ~> 123 in case the first spread is empty\n// 2. 'bye' ~> number in case the first spread is not empty\nfunWithRestArray('hi', ...iterableOf123, 'bye', ...iterableOf123);\n"
  },
  {
    "path": "tests/flow/name_prop/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`class.js 1`] = `\nclass A {}\n\nvar test1 = A.bar; // Error bar doesn't exist\nvar test2: string = A.name;\nvar test3: number = A.name; // Error string ~> number\n\nvar a = new A();\nvar test4 = a.constructor.bar; // Error bar doesn't exist\nvar test5: string = a.constructor.name;\nvar test6: number = a.constructor.name; // Error string ~> number\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {}\n\nvar test1 = A.bar; // Error bar doesn't exist\nvar test2: string = A.name;\nvar test3: number = A.name; // Error string ~> number\n\nvar a = new A();\nvar test4 = a.constructor.bar; // Error bar doesn't exist\nvar test5: string = a.constructor.name;\nvar test6: number = a.constructor.name; // Error string ~> number\n\n`;\n\nexports[`function.js 1`] = `\n/* TODO - we currently say that a function's statics are an AnyObjT and\n * anything goes. When we start enforcing the statics properly, we'll need to\n * know that .name exists\n */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* TODO - we currently say that a function's statics are an AnyObjT and\n * anything goes. When we start enforcing the statics properly, we'll need to\n * know that .name exists\n */\n\n`;\n"
  },
  {
    "path": "tests/flow/name_prop/class.js",
    "content": "class A {}\n\nvar test1 = A.bar; // Error bar doesn't exist\nvar test2: string = A.name;\nvar test3: number = A.name; // Error string ~> number\n\nvar a = new A();\nvar test4 = a.constructor.bar; // Error bar doesn't exist\nvar test5: string = a.constructor.name;\nvar test6: number = a.constructor.name; // Error string ~> number\n"
  },
  {
    "path": "tests/flow/name_prop/function.js",
    "content": "/* TODO - we currently say that a function's statics are an AnyObjT and\n * anything goes. When we start enforcing the statics properly, we'll need to\n * know that .name exists\n */\n"
  },
  {
    "path": "tests/flow/name_prop/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/namespace/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`client.js 1`] = `\nvar ns = require('./namespace')\n\nvar bar: string = ns.foo\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar ns = require(\"./namespace\");\n\nvar bar: string = ns.foo;\n\n`;\n\nexports[`namespace.js 1`] = `\n/*@flow*/// import type { T } from '...'\ntype T = (x:number) => void;\nvar f: T = function(x:string): void { }\n\ntype Map<X,Y> = (x:X) => Y;\n\nfunction bar<U,V>(x:U, f:Map<U,V>): V {\n    return f(x);\n}\n\nvar y:number = bar(0, x => \"\");\n\ntype Seq = number | Array<Seq>;\nvar s1:Seq = [0,[0]];\nvar s2:Seq = [[\"\"]];\n\nmodule.exports = { foo: (\"\": number) };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/*@flow*/ // import type { T } from '...'\ntype T = (x: number) => void;\nvar f: T = function(x: string): void {};\n\ntype Map<X, Y> = (x: X) => Y;\n\nfunction bar<U, V>(x: U, f: Map<U, V>): V {\n  return f(x);\n}\n\nvar y: number = bar(0, x => \"\");\n\ntype Seq = number | Array<Seq>;\nvar s1: Seq = [0, [0]];\nvar s2: Seq = [[\"\"]];\n\nmodule.exports = { foo: (\"\": number) };\n\n`;\n"
  },
  {
    "path": "tests/flow/namespace/client.js",
    "content": "var ns = require('./namespace')\n\nvar bar: string = ns.foo\n"
  },
  {
    "path": "tests/flow/namespace/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/namespace/namespace.js",
    "content": "/*@flow*/// import type { T } from '...'\ntype T = (x:number) => void;\nvar f: T = function(x:string): void { }\n\ntype Map<X,Y> = (x:X) => Y;\n\nfunction bar<U,V>(x:U, f:Map<U,V>): V {\n    return f(x);\n}\n\nvar y:number = bar(0, x => \"\");\n\ntype Seq = number | Array<Seq>;\nvar s1:Seq = [0,[0]];\nvar s2:Seq = [[\"\"]];\n\nmodule.exports = { foo: (\"\": number) };\n"
  },
  {
    "path": "tests/flow/new_react/FeedUFI.react.js",
    "content": "/**\n * Copyright 2004-present Facebook. All Rights Reserved.\n *\n * @providesModule FeedUFI.react\n * @flow\n */\n\n'use strict';\n\nvar UFILikeCount = require('UFILikeCount.react');\nvar React = require('react');\n\nvar FeedUFI = React.createClass({\n  _renderLikeCount: function(\n      feedback: any\n  ) {\n    var props = {\n      className: \"\",\n      key: \"\",\n      feedback: {feedback},\n      permalink: \"\",\n    };\n    var ignored = <UFILikeCount {...props} />;\n    return (\n      <UFILikeCount\n        className=\"\"\n        key=\"\"\n        feedback={feedback}\n        permalink=\"\"\n      />\n    );\n  },\n\n  render: function(): ?React.Element<any> {\n    return (\n      <div/>\n    );\n  }\n\n});\n\nmodule.exports = FeedUFI;\n"
  },
  {
    "path": "tests/flow/new_react/Mixin.js",
    "content": "/* @providesModule Mixin */\nmodule.exports = {\n    success: function() { }\n};\n"
  },
  {
    "path": "tests/flow/new_react/UFILikeCount.react.js",
    "content": "/**\n * Copyright 2004-present Facebook. All Rights Reserved.\n *\n * @providesModule UFILikeCount.react\n * @flow\n */\n\n'use strict';\n\nvar React = require('react');\n\nvar UFILikeCount = React.createClass({\n  propTypes: {\n    permalink: React.PropTypes.string,\n    feedback: React.PropTypes.object.isRequired\n  },\n\n  render: function(): ?React.Element<any> {\n    return <div/>;\n  }\n});\n\nmodule.exports = UFILikeCount;\n"
  },
  {
    "path": "tests/flow/new_react/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`FeedUFI.react.js 1`] = `\n/**\n * Copyright 2004-present Facebook. All Rights Reserved.\n *\n * @providesModule FeedUFI.react\n * @flow\n */\n\n'use strict';\n\nvar UFILikeCount = require('UFILikeCount.react');\nvar React = require('react');\n\nvar FeedUFI = React.createClass({\n  _renderLikeCount: function(\n      feedback: any\n  ) {\n    var props = {\n      className: \"\",\n      key: \"\",\n      feedback: {feedback},\n      permalink: \"\",\n    };\n    var ignored = <UFILikeCount {...props} />;\n    return (\n      <UFILikeCount\n        className=\"\"\n        key=\"\"\n        feedback={feedback}\n        permalink=\"\"\n      />\n    );\n  },\n\n  render: function(): ?React.Element<any> {\n    return (\n      <div/>\n    );\n  }\n\n});\n\nmodule.exports = FeedUFI;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * Copyright 2004-present Facebook. All Rights Reserved.\n *\n * @providesModule FeedUFI.react\n * @flow\n */\n\n\"use strict\";\n\nvar UFILikeCount = require(\"UFILikeCount.react\");\nvar React = require(\"react\");\n\nvar FeedUFI = React.createClass({\n  _renderLikeCount: function(feedback: any) {\n    var props = {\n      className: \"\",\n      key: \"\",\n      feedback: { feedback },\n      permalink: \"\"\n    };\n    var ignored = <UFILikeCount {...props} />;\n    return (\n      <UFILikeCount className=\"\" key=\"\" feedback={feedback} permalink=\"\" />\n    );\n  },\n\n  render: function(): ?React.Element<any> {\n    return <div />;\n  }\n});\n\nmodule.exports = FeedUFI;\n\n`;\n\nexports[`Mixin.js 1`] = `\n/* @providesModule Mixin */\nmodule.exports = {\n    success: function() { }\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule Mixin */\nmodule.exports = {\n  success: function() {}\n};\n\n`;\n\nexports[`UFILikeCount.react.js 1`] = `\n/**\n * Copyright 2004-present Facebook. All Rights Reserved.\n *\n * @providesModule UFILikeCount.react\n * @flow\n */\n\n'use strict';\n\nvar React = require('react');\n\nvar UFILikeCount = React.createClass({\n  propTypes: {\n    permalink: React.PropTypes.string,\n    feedback: React.PropTypes.object.isRequired\n  },\n\n  render: function(): ?React.Element<any> {\n    return <div/>;\n  }\n});\n\nmodule.exports = UFILikeCount;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * Copyright 2004-present Facebook. All Rights Reserved.\n *\n * @providesModule UFILikeCount.react\n * @flow\n */\n\n\"use strict\";\n\nvar React = require(\"react\");\n\nvar UFILikeCount = React.createClass({\n  propTypes: {\n    permalink: React.PropTypes.string,\n    feedback: React.PropTypes.object.isRequired\n  },\n\n  render: function(): ?React.Element<any> {\n    return <div />;\n  }\n});\n\nmodule.exports = UFILikeCount;\n\n`;\n\nexports[`bad_default_props.js 1`] = `\nvar React = require('React');\n\ntype T1 = { }\ntype T2 = { x: number }\ntype T3 = { x: number, y: number }\n\nclass C1 extends React.Component<T1, T2, any> { // error\n}\n\nclass C2 extends React.Component<void, T2, any> { // OK\n}\n\n// no need to add type arguments to React.Component\nclass C3 extends React.Component { // OK\n  static defaultProps: T1;\n  props: T2;\n}\n\nclass C4 extends React.Component { // OK, recommended\n  // no need to declare defaultProps unless necessary\n  props: T2;\n}\n\nclass C5 extends React.Component<T2, T3, any> { // error\n}\n\nclass C6 extends React.Component { // OK, recommended\n  static defaultProps: T2;\n  props: T3;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar React = require(\"React\");\n\ntype T1 = {};\ntype T2 = { x: number };\ntype T3 = { x: number, y: number };\n\nclass C1 extends React.Component<T1, T2, any> {\n  // error\n}\n\nclass C2 extends React.Component<void, T2, any> {\n  // OK\n}\n\n// no need to add type arguments to React.Component\nclass C3 extends React.Component {\n  // OK\n  static defaultProps: T1;\n  props: T2;\n}\n\nclass C4 extends React.Component {\n  // OK, recommended\n  // no need to declare defaultProps unless necessary\n  props: T2;\n}\n\nclass C5 extends React.Component<T2, T3, any> {\n  // error\n}\n\nclass C6 extends React.Component {\n  // OK, recommended\n  static defaultProps: T2;\n  props: T3;\n}\n\n`;\n\nexports[`classes.js 1`] = `\nvar React = require('React');\n\ntype DefaultProps = { };\ntype Props = { x: number };\ntype State = { y: number };\n\nclass Foo extends React.Component {\n  props: Props;\n  state: State;\n  static defaultProps: DefaultProps;\n\n  is_mounted: boolean;\n\n  static bar(): void {}\n\n  qux(): void {\n    var _: string = this.props.x;\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = { y: \"\" };\n  }\n\n  setState(o: { y_: string }): void { }\n\n  componentDidMount(): void {\n    this.is_mounted = true;\n  }\n\n  componentWillReceiveProps(\n    nextProps: Object,\n    nextContext: any\n  ): void {\n    this.qux();\n  }\n\n}\n\nFoo.defaultProps = 0;\nvar foo: $jsx<number> = <Foo/>;\n\nFoo.bar();\n\nvar FooLegacy = React.createClass({\n  is_mounted: (undefined: ?boolean),\n\n  propTypes: {\n    x: React.PropTypes.number.isRequired\n  },\n\n  getDefaultProps(): DefaultProps { return {} },\n\n  statics: {\n    bar(): void {}\n  },\n\n  qux(): void {\n    var _: string = this.props.x;\n  },\n\n  getInitialState(): { y: string } {\n    return { y: \"\" };\n  },\n\n  setState(o: { y_: string }): void { },\n\n  componentDidMount(): void {\n    this.is_mounted = true;\n  },\n\n  componentWillReceiveProps(\n    nextProps: Object,\n    nextContext: any\n  ): void {\n    this.qux();\n  },\n});\n\nFooLegacy.defaultProps = 0;\nvar foo_legacy: $jsx<number> = <FooLegacy/>;\n\nFooLegacy.bar();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar React = require(\"React\");\n\ntype DefaultProps = {};\ntype Props = { x: number };\ntype State = { y: number };\n\nclass Foo extends React.Component {\n  props: Props;\n  state: State;\n  static defaultProps: DefaultProps;\n\n  is_mounted: boolean;\n\n  static bar(): void {}\n\n  qux(): void {\n    var _: string = this.props.x;\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = { y: \"\" };\n  }\n\n  setState(o: { y_: string }): void {}\n\n  componentDidMount(): void {\n    this.is_mounted = true;\n  }\n\n  componentWillReceiveProps(nextProps: Object, nextContext: any): void {\n    this.qux();\n  }\n}\n\nFoo.defaultProps = 0;\nvar foo: $jsx<number> = <Foo />;\n\nFoo.bar();\n\nvar FooLegacy = React.createClass({\n  is_mounted: (undefined: ?boolean),\n\n  propTypes: {\n    x: React.PropTypes.number.isRequired\n  },\n\n  getDefaultProps(): DefaultProps {\n    return {};\n  },\n\n  statics: {\n    bar(): void {}\n  },\n\n  qux(): void {\n    var _: string = this.props.x;\n  },\n\n  getInitialState(): { y: string } {\n    return { y: \"\" };\n  },\n\n  setState(o: { y_: string }): void {},\n\n  componentDidMount(): void {\n    this.is_mounted = true;\n  },\n\n  componentWillReceiveProps(nextProps: Object, nextContext: any): void {\n    this.qux();\n  }\n});\n\nFooLegacy.defaultProps = 0;\nvar foo_legacy: $jsx<number> = <FooLegacy />;\n\nFooLegacy.bar();\n\n`;\n\nexports[`import-react.js 1`] = `\n/* @flow */\n\n// Testing local binding of React in all kinds of ways. The only reason this\n// might even be an issue is that internally, the use of JSX triggers an\n// implicit require('react'), so any bugs in (1) interop of CJS require and ES6\n// import (2) module re-export, as used to redirect the module name 'React' to\n// 'react' might show up here.\n\nimport React from \"react\";\n//import React from \"React\";\n//var React = require(\"react\");\n//var React = require(\"React\");\n\nclass HelloMessage extends React.Component {\n  props: { name: string };\n}\n\n<HelloMessage name={007} />; // number ~/~> string error\n<HelloMessage name=\"Bond\" />; // ok\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n// Testing local binding of React in all kinds of ways. The only reason this\n// might even be an issue is that internally, the use of JSX triggers an\n// implicit require('react'), so any bugs in (1) interop of CJS require and ES6\n// import (2) module re-export, as used to redirect the module name 'React' to\n// 'react' might show up here.\n\nimport React from \"react\";\n//import React from \"React\";\n//var React = require(\"react\");\n//var React = require(\"React\");\n\nclass HelloMessage extends React.Component {\n  props: { name: string };\n}\n\n<HelloMessage name={007} />; // number ~/~> string error\n<HelloMessage name=\"Bond\" />; // ok\n\n`;\n\nexports[`new_react.js 1`] = `\nvar React = require('react');\nvar Mixin = require('Mixin');\nvar C = React.createClass({\n    mixins: [Mixin],\n    propTypes: {\n        x: React.PropTypes.string.isRequired,\n        y: React.PropTypes.array,\n        z: React.PropTypes.number\n    },\n    replaceProps(props: { }) { },\n\n    getDefaultProps(): { z: number } {\n        return { z: 0 };\n    },\n    getInitialState() { return null; },\n    render() {\n        var foo: string = this.state;\n        var bar: string = this.props;\n        var qux: string = this.props.z;\n        var w:number = this.props.x;\n        this.props.y[0];\n        var len:number = this.props.x.length;\n        this.success();\n        return <div/>;\n    }\n\n})\n\nvar element = <C x = {0}/>;\nvar element_ = <C/>;\n\nvar x: number = C.displayName;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar React = require(\"react\");\nvar Mixin = require(\"Mixin\");\nvar C = React.createClass({\n  mixins: [Mixin],\n  propTypes: {\n    x: React.PropTypes.string.isRequired,\n    y: React.PropTypes.array,\n    z: React.PropTypes.number\n  },\n  replaceProps(props: {}) {},\n\n  getDefaultProps(): { z: number } {\n    return { z: 0 };\n  },\n  getInitialState() {\n    return null;\n  },\n  render() {\n    var foo: string = this.state;\n    var bar: string = this.props;\n    var qux: string = this.props.z;\n    var w: number = this.props.x;\n    this.props.y[0];\n    var len: number = this.props.x.length;\n    this.success();\n    return <div />;\n  }\n});\n\nvar element = <C x={0} />;\nvar element_ = <C />;\n\nvar x: number = C.displayName;\n\n`;\n\nexports[`propTypes.js 1`] = `\nvar React = require('react');\nvar PropTypes = React.PropTypes;\n\nvar C = React.createClass({\n  propTypes: {\n    statistics: PropTypes.arrayOf(PropTypes.shape({\n      label: PropTypes.string.isRequired,\n      value: PropTypes.number,\n    })).isRequired,\n  }\n});\n\n<C statistics={[\n  {},\n  {label:\"\",value:undefined},\n]}/>; // error (label is required, value not required)\n\nvar props: Array<{label: string, value?: number}> = [\n  {},\n  {label:\"\",value:undefined},\n]; // error (same as ^)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar React = require(\"react\");\nvar PropTypes = React.PropTypes;\n\nvar C = React.createClass({\n  propTypes: {\n    statistics: PropTypes.arrayOf(\n      PropTypes.shape({\n        label: PropTypes.string.isRequired,\n        value: PropTypes.number\n      })\n    ).isRequired\n  }\n});\n\n<C statistics={[{}, { label: \"\", value: undefined }]} />; // error (label is required, value not required)\n\nvar props: Array<{ label: string, value?: number }> = [\n  {},\n  { label: \"\", value: undefined }\n]; // error (same as ^)\n\n`;\n\nexports[`props.js 1`] = `\nvar React = require('react');\nvar TestProps = React.createClass({\n\n    propTypes: {\n        x: React.PropTypes.string,\n        z: React.PropTypes.number\n    },\n\n    getDefaultProps: function() {\n        return {x: '', y: 0}\n    },\n\n    test: function() {\n        var a: number = this.props.x; // error\n        var b: string = this.props.y; // error\n        var c: string = this.props.z; // error\n    }\n});\n\nvar element = <TestProps x={false} y={false} z={false} />; // 3 errors\n\n(element: $jsx<*>);\n(element: $jsx<TestProps>);\nvar FooProps = React.createClass({\n    propTypes: { w: React.PropTypes.string.isRequired }\n});\n(element: $jsx<FooProps>);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar React = require(\"react\");\nvar TestProps = React.createClass({\n  propTypes: {\n    x: React.PropTypes.string,\n    z: React.PropTypes.number\n  },\n\n  getDefaultProps: function() {\n    return { x: \"\", y: 0 };\n  },\n\n  test: function() {\n    var a: number = this.props.x; // error\n    var b: string = this.props.y; // error\n    var c: string = this.props.z; // error\n  }\n});\n\nvar element = <TestProps x={false} y={false} z={false} />; // 3 errors\n\n(element: $jsx<*>);\n(element: $jsx<TestProps>);\nvar FooProps = React.createClass({\n  propTypes: { w: React.PropTypes.string.isRequired }\n});\n(element: $jsx<FooProps>);\n\n`;\n\nexports[`props2.js 1`] = `\nvar React = require('react');\nvar C = React.createClass({\n    propTypes: {\n        foo: React.PropTypes.string.isRequired,\n        bar: React.PropTypes.string.isRequired,\n    }\n});\nvar D = React.createClass({\n    getInitialState: function(): { bar: number } {\n        return { bar: 0 };\n    },\n    render: function() {\n        var obj = { bar: 0 };\n        var s: string = this.state.bar;\n        return <C {...this.state} foo = {0} />;\n    }\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar React = require(\"react\");\nvar C = React.createClass({\n  propTypes: {\n    foo: React.PropTypes.string.isRequired,\n    bar: React.PropTypes.string.isRequired\n  }\n});\nvar D = React.createClass({\n  getInitialState: function(): { bar: number } {\n    return { bar: 0 };\n  },\n  render: function() {\n    var obj = { bar: 0 };\n    var s: string = this.state.bar;\n    return <C {...this.state} foo={0} />;\n  }\n});\n\n`;\n\nexports[`props3.js 1`] = `\nvar React = require('react');\nvar TestProps = React.createClass({\n    // Do something illegal inside of propTypes and make sure Flow notices\n    propTypes: {\n      arr: React.PropTypes.array,\n      arr_rec: React.PropTypes.array.isRequired,\n      bool: React.PropTypes.bool,\n      bool_rec: React.PropTypes.bool.isRequired,\n      func: React.PropTypes.func,\n      func_rec: React.PropTypes.func.isRequired,\n      number: React.PropTypes.number,\n      number_rec: React.PropTypes.number.isRequired,\n      object: React.PropTypes.object,\n      object_rec: React.PropTypes.object.isRequired,\n      string: React.PropTypes.string,\n      string_rec: React.PropTypes.string.isRequired,\n\n      any: React.PropTypes.any,\n      any_rec: React.PropTypes.any.isRequired,\n      element: React.PropTypes.element,\n      element_rec: React.PropTypes.element.isRequired,\n      node: React.PropTypes.node,\n      node_rec: React.PropTypes.node.isRequired,\n\n      arrayOf: React.PropTypes.arrayOf(React.PropTypes.string),\n      arrayOf_rec: React.PropTypes.arrayOf(React.PropTypes.string).isRequired,\n      instanceOf: React.PropTypes.instanceOf(Object),\n      instanceOf_rec: React.PropTypes.instanceOf(Object).isRequired,\n      objectOf: React.PropTypes.objectOf(React.PropTypes.string),\n      objectOf_rec: React.PropTypes.objectOf(React.PropTypes.string).isRequired,\n      oneOf: React.PropTypes.oneOf([\"yes\", \"no\"]),\n      oneOf_rec: React.PropTypes.oneOf([\"yes\", \"no\"]).isRequired,\n      oneOfType: React.PropTypes.oneOfType(\n        [React.PropTypes.string, React.PropTypes.number]\n      ),\n      oneOfType_rec: React.PropTypes.oneOfType(\n        [React.PropTypes.string, React.PropTypes.number]\n      ).isRequired,\n      shape: React.PropTypes.shape({\n        foo: React.PropTypes.string,\n        bar: React.PropTypes.number,\n      }),\n      shape_rec: React.PropTypes.shape({\n        foo: React.PropTypes.string,\n        bar: React.PropTypes.number,\n      }).isRequired,\n\n      // And do something bad here\n      bad_one: React.PropTypes.imaginaryType,\n      bad_two: React.PropTypes.string.inRequired,\n    },\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar React = require(\"react\");\nvar TestProps = React.createClass({\n  // Do something illegal inside of propTypes and make sure Flow notices\n  propTypes: {\n    arr: React.PropTypes.array,\n    arr_rec: React.PropTypes.array.isRequired,\n    bool: React.PropTypes.bool,\n    bool_rec: React.PropTypes.bool.isRequired,\n    func: React.PropTypes.func,\n    func_rec: React.PropTypes.func.isRequired,\n    number: React.PropTypes.number,\n    number_rec: React.PropTypes.number.isRequired,\n    object: React.PropTypes.object,\n    object_rec: React.PropTypes.object.isRequired,\n    string: React.PropTypes.string,\n    string_rec: React.PropTypes.string.isRequired,\n\n    any: React.PropTypes.any,\n    any_rec: React.PropTypes.any.isRequired,\n    element: React.PropTypes.element,\n    element_rec: React.PropTypes.element.isRequired,\n    node: React.PropTypes.node,\n    node_rec: React.PropTypes.node.isRequired,\n\n    arrayOf: React.PropTypes.arrayOf(React.PropTypes.string),\n    arrayOf_rec: React.PropTypes.arrayOf(React.PropTypes.string).isRequired,\n    instanceOf: React.PropTypes.instanceOf(Object),\n    instanceOf_rec: React.PropTypes.instanceOf(Object).isRequired,\n    objectOf: React.PropTypes.objectOf(React.PropTypes.string),\n    objectOf_rec: React.PropTypes.objectOf(React.PropTypes.string).isRequired,\n    oneOf: React.PropTypes.oneOf([\"yes\", \"no\"]),\n    oneOf_rec: React.PropTypes.oneOf([\"yes\", \"no\"]).isRequired,\n    oneOfType: React.PropTypes.oneOfType([\n      React.PropTypes.string,\n      React.PropTypes.number\n    ]),\n    oneOfType_rec: React.PropTypes.oneOfType([\n      React.PropTypes.string,\n      React.PropTypes.number\n    ]).isRequired,\n    shape: React.PropTypes.shape({\n      foo: React.PropTypes.string,\n      bar: React.PropTypes.number\n    }),\n    shape_rec: React.PropTypes.shape({\n      foo: React.PropTypes.string,\n      bar: React.PropTypes.number\n    }).isRequired,\n\n    // And do something bad here\n    bad_one: React.PropTypes.imaginaryType,\n    bad_two: React.PropTypes.string.inRequired\n  }\n});\n\n`;\n\nexports[`props4.js 1`] = `\n// @flow\n\nimport React from \"React\";\n\nclass JDiv extends React.Component {\n  // static defaultProps: { };\n  props: {\n    id: string\n  };\n}\n\n// Should be a type error ('id' takes a string, not a number..)\n<JDiv id={42} />;\n\nclass Example extends React.Component {\n  props: { bar: string };\n\n  render() {\n    return <div>{this.props.bar}</div>\n  }\n}\n\nReact.render(\n  <Example foo=\"foo\" />,\n  document.body\n);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport React from \"React\";\n\nclass JDiv extends React.Component {\n  // static defaultProps: { };\n  props: {\n    id: string\n  };\n}\n\n// Should be a type error ('id' takes a string, not a number..)\n<JDiv id={42} />;\n\nclass Example extends React.Component {\n  props: { bar: string };\n\n  render() {\n    return <div>{this.props.bar}</div>;\n  }\n}\n\nReact.render(<Example foo=\"foo\" />, document.body);\n\n`;\n\nexports[`props5.js 1`] = `\nvar React = require('React');\n\nvar C = React.createClass({\n  getDefaultProps: function() {\n    return { x: 0 };\n  }\n});\n\nmodule.exports = C;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar React = require(\"React\");\n\nvar C = React.createClass({\n  getDefaultProps: function() {\n    return { x: 0 };\n  }\n});\n\nmodule.exports = C;\n\n`;\n\nexports[`state.js 1`] = `\n/* @flow */\n\nvar React = require('react');\n\ntype State = {\n    bar: ?{ qux: string; };\n};\n\nvar ReactClass = React.createClass({\n    getInitialState: function():State {\n        return { bar: null };\n    },\n\n    render: function(): any {\n        // Any state access here seems to make state any\n        this.state;\n        return (\n        <div>\n                {this.state.bar.qux}\n        </div>\n        );\n    }\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar React = require(\"react\");\n\ntype State = {\n  bar: ?{ qux: string }\n};\n\nvar ReactClass = React.createClass({\n  getInitialState: function(): State {\n    return { bar: null };\n  },\n\n  render: function(): any {\n    // Any state access here seems to make state any\n    this.state;\n    return <div>{this.state.bar.qux}</div>;\n  }\n});\n\n`;\n\nexports[`state2.js 1`] = `\n// @flow\n\nvar React = require('react');\n\ntype FooState = {\n    key: ?Object;\n};\n\nvar Comp = React.createClass({\n    getInitialState: function(): FooState {\n        return {\n            key: null, // this used to cause a missing annotation error\n        };\n    }\n});\n\nmodule.exports = Comp;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nvar React = require(\"react\");\n\ntype FooState = {\n  key: ?Object\n};\n\nvar Comp = React.createClass({\n  getInitialState: function(): FooState {\n    return {\n      key: null // this used to cause a missing annotation error\n    };\n  }\n});\n\nmodule.exports = Comp;\n\n`;\n\nexports[`state3.js 1`] = `\nvar React = require('react');\nvar TestState = React.createClass({\n\n    getInitialState: function(): { x: string; } {\n        return {\n            x: ''\n        }\n    },\n\n    test: function() {\n        var a: number = this.state.x; // error\n\n        this.setState({\n            x: false // error\n        })\n    }\n\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar React = require(\"react\");\nvar TestState = React.createClass({\n  getInitialState: function(): { x: string } {\n    return {\n      x: \"\"\n    };\n  },\n\n  test: function() {\n    var a: number = this.state.x; // error\n\n    this.setState({\n      x: false // error\n    });\n  }\n});\n\n`;\n\nexports[`state4.js 1`] = `\nvar React = require('React');\n\nvar C = React.createClass({\n  getInitialState: function(): { x: number } {\n    return { x: 0 };\n  },\n\n  render() {\n    this.setState({ y: 0 });\n    return <div>{this.state.z}</div>\n  }\n\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar React = require(\"React\");\n\nvar C = React.createClass({\n  getInitialState: function(): { x: number } {\n    return { x: 0 };\n  },\n\n  render() {\n    this.setState({ y: 0 });\n    return <div>{this.state.z}</div>;\n  }\n});\n\n`;\n\nexports[`state5.js 1`] = `\nvar React = require('React');\n\nclass C extends React.Component {\n  foo(): number {\n    return this.state.x; // error: need to declare type of state\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar React = require(\"React\");\n\nclass C extends React.Component {\n  foo(): number {\n    return this.state.x; // error: need to declare type of state\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/new_react/bad_default_props.js",
    "content": "var React = require('React');\n\ntype T1 = { }\ntype T2 = { x: number }\ntype T3 = { x: number, y: number }\n\nclass C1 extends React.Component<T1, T2, any> { // error\n}\n\nclass C2 extends React.Component<void, T2, any> { // OK\n}\n\n// no need to add type arguments to React.Component\nclass C3 extends React.Component { // OK\n  static defaultProps: T1;\n  props: T2;\n}\n\nclass C4 extends React.Component { // OK, recommended\n  // no need to declare defaultProps unless necessary\n  props: T2;\n}\n\nclass C5 extends React.Component<T2, T3, any> { // error\n}\n\nclass C6 extends React.Component { // OK, recommended\n  static defaultProps: T2;\n  props: T3;\n}\n"
  },
  {
    "path": "tests/flow/new_react/classes.js",
    "content": "var React = require('React');\n\ntype DefaultProps = { };\ntype Props = { x: number };\ntype State = { y: number };\n\nclass Foo extends React.Component {\n  props: Props;\n  state: State;\n  static defaultProps: DefaultProps;\n\n  is_mounted: boolean;\n\n  static bar(): void {}\n\n  qux(): void {\n    var _: string = this.props.x;\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = { y: \"\" };\n  }\n\n  setState(o: { y_: string }): void { }\n\n  componentDidMount(): void {\n    this.is_mounted = true;\n  }\n\n  componentWillReceiveProps(\n    nextProps: Object,\n    nextContext: any\n  ): void {\n    this.qux();\n  }\n\n}\n\nFoo.defaultProps = 0;\nvar foo: $jsx<number> = <Foo/>;\n\nFoo.bar();\n\nvar FooLegacy = React.createClass({\n  is_mounted: (undefined: ?boolean),\n\n  propTypes: {\n    x: React.PropTypes.number.isRequired\n  },\n\n  getDefaultProps(): DefaultProps { return {} },\n\n  statics: {\n    bar(): void {}\n  },\n\n  qux(): void {\n    var _: string = this.props.x;\n  },\n\n  getInitialState(): { y: string } {\n    return { y: \"\" };\n  },\n\n  setState(o: { y_: string }): void { },\n\n  componentDidMount(): void {\n    this.is_mounted = true;\n  },\n\n  componentWillReceiveProps(\n    nextProps: Object,\n    nextContext: any\n  ): void {\n    this.qux();\n  },\n});\n\nFooLegacy.defaultProps = 0;\nvar foo_legacy: $jsx<number> = <FooLegacy/>;\n\nFooLegacy.bar();\n"
  },
  {
    "path": "tests/flow/new_react/fakelib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`type_aliases.js 1`] = `\ndeclare var $React: $Exports<'react'>; // fake import\n// Strawman: revised definition of $jsx (alternatively, React.Element).\n// Using bounded poly to specify a constraint on a type parameter, and\n// existentials to elide type arguments.\ntype _ReactElement<DefaultProps, Props, Config: $Diff<Props, DefaultProps>, C: $React.Component<DefaultProps, Props, any>> = $React.Element<Config>;\ntype $jsx<C> = _ReactElement<*, *, *, C>;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare var $React: $Exports<\"react\">; // fake import\n// Strawman: revised definition of $jsx (alternatively, React.Element).\n// Using bounded poly to specify a constraint on a type parameter, and\n// existentials to elide type arguments.\ntype _ReactElement<\n  DefaultProps,\n  Props,\n  Config: $Diff<Props, DefaultProps>,\n  C: $React.Component<DefaultProps, Props, any>\n> = $React.Element<Config>;\ntype $jsx<C> = _ReactElement<*, *, *, C>;\n\n`;\n"
  },
  {
    "path": "tests/flow/new_react/fakelib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/new_react/fakelib/type_aliases.js",
    "content": "declare var $React: $Exports<'react'>; // fake import\n// Strawman: revised definition of $jsx (alternatively, React.Element).\n// Using bounded poly to specify a constraint on a type parameter, and\n// existentials to elide type arguments.\ntype _ReactElement<DefaultProps, Props, Config: $Diff<Props, DefaultProps>, C: $React.Component<DefaultProps, Props, any>> = $React.Element<Config>;\ntype $jsx<C> = _ReactElement<*, *, *, C>;\n"
  },
  {
    "path": "tests/flow/new_react/import-react.js",
    "content": "/* @flow */\n\n// Testing local binding of React in all kinds of ways. The only reason this\n// might even be an issue is that internally, the use of JSX triggers an\n// implicit require('react'), so any bugs in (1) interop of CJS require and ES6\n// import (2) module re-export, as used to redirect the module name 'React' to\n// 'react' might show up here.\n\nimport React from \"react\";\n//import React from \"React\";\n//var React = require(\"react\");\n//var React = require(\"React\");\n\nclass HelloMessage extends React.Component {\n  props: { name: string };\n}\n\n<HelloMessage name={007} />; // number ~/~> string error\n<HelloMessage name=\"Bond\" />; // ok\n"
  },
  {
    "path": "tests/flow/new_react/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/new_react/new_react.js",
    "content": "var React = require('react');\nvar Mixin = require('Mixin');\nvar C = React.createClass({\n    mixins: [Mixin],\n    propTypes: {\n        x: React.PropTypes.string.isRequired,\n        y: React.PropTypes.array,\n        z: React.PropTypes.number\n    },\n    replaceProps(props: { }) { },\n\n    getDefaultProps(): { z: number } {\n        return { z: 0 };\n    },\n    getInitialState() { return null; },\n    render() {\n        var foo: string = this.state;\n        var bar: string = this.props;\n        var qux: string = this.props.z;\n        var w:number = this.props.x;\n        this.props.y[0];\n        var len:number = this.props.x.length;\n        this.success();\n        return <div/>;\n    }\n\n})\n\nvar element = <C x = {0}/>;\nvar element_ = <C/>;\n\nvar x: number = C.displayName;\n"
  },
  {
    "path": "tests/flow/new_react/propTypes.js",
    "content": "var React = require('react');\nvar PropTypes = React.PropTypes;\n\nvar C = React.createClass({\n  propTypes: {\n    statistics: PropTypes.arrayOf(PropTypes.shape({\n      label: PropTypes.string.isRequired,\n      value: PropTypes.number,\n    })).isRequired,\n  }\n});\n\n<C statistics={[\n  {},\n  {label:\"\",value:undefined},\n]}/>; // error (label is required, value not required)\n\nvar props: Array<{label: string, value?: number}> = [\n  {},\n  {label:\"\",value:undefined},\n]; // error (same as ^)\n"
  },
  {
    "path": "tests/flow/new_react/props.js",
    "content": "var React = require('react');\nvar TestProps = React.createClass({\n\n    propTypes: {\n        x: React.PropTypes.string,\n        z: React.PropTypes.number\n    },\n\n    getDefaultProps: function() {\n        return {x: '', y: 0}\n    },\n\n    test: function() {\n        var a: number = this.props.x; // error\n        var b: string = this.props.y; // error\n        var c: string = this.props.z; // error\n    }\n});\n\nvar element = <TestProps x={false} y={false} z={false} />; // 3 errors\n\n(element: $jsx<*>);\n(element: $jsx<TestProps>);\nvar FooProps = React.createClass({\n    propTypes: { w: React.PropTypes.string.isRequired }\n});\n(element: $jsx<FooProps>);\n"
  },
  {
    "path": "tests/flow/new_react/props2.js",
    "content": "var React = require('react');\nvar C = React.createClass({\n    propTypes: {\n        foo: React.PropTypes.string.isRequired,\n        bar: React.PropTypes.string.isRequired,\n    }\n});\nvar D = React.createClass({\n    getInitialState: function(): { bar: number } {\n        return { bar: 0 };\n    },\n    render: function() {\n        var obj = { bar: 0 };\n        var s: string = this.state.bar;\n        return <C {...this.state} foo = {0} />;\n    }\n});\n"
  },
  {
    "path": "tests/flow/new_react/props3.js",
    "content": "var React = require('react');\nvar TestProps = React.createClass({\n    // Do something illegal inside of propTypes and make sure Flow notices\n    propTypes: {\n      arr: React.PropTypes.array,\n      arr_rec: React.PropTypes.array.isRequired,\n      bool: React.PropTypes.bool,\n      bool_rec: React.PropTypes.bool.isRequired,\n      func: React.PropTypes.func,\n      func_rec: React.PropTypes.func.isRequired,\n      number: React.PropTypes.number,\n      number_rec: React.PropTypes.number.isRequired,\n      object: React.PropTypes.object,\n      object_rec: React.PropTypes.object.isRequired,\n      string: React.PropTypes.string,\n      string_rec: React.PropTypes.string.isRequired,\n\n      any: React.PropTypes.any,\n      any_rec: React.PropTypes.any.isRequired,\n      element: React.PropTypes.element,\n      element_rec: React.PropTypes.element.isRequired,\n      node: React.PropTypes.node,\n      node_rec: React.PropTypes.node.isRequired,\n\n      arrayOf: React.PropTypes.arrayOf(React.PropTypes.string),\n      arrayOf_rec: React.PropTypes.arrayOf(React.PropTypes.string).isRequired,\n      instanceOf: React.PropTypes.instanceOf(Object),\n      instanceOf_rec: React.PropTypes.instanceOf(Object).isRequired,\n      objectOf: React.PropTypes.objectOf(React.PropTypes.string),\n      objectOf_rec: React.PropTypes.objectOf(React.PropTypes.string).isRequired,\n      oneOf: React.PropTypes.oneOf([\"yes\", \"no\"]),\n      oneOf_rec: React.PropTypes.oneOf([\"yes\", \"no\"]).isRequired,\n      oneOfType: React.PropTypes.oneOfType(\n        [React.PropTypes.string, React.PropTypes.number]\n      ),\n      oneOfType_rec: React.PropTypes.oneOfType(\n        [React.PropTypes.string, React.PropTypes.number]\n      ).isRequired,\n      shape: React.PropTypes.shape({\n        foo: React.PropTypes.string,\n        bar: React.PropTypes.number,\n      }),\n      shape_rec: React.PropTypes.shape({\n        foo: React.PropTypes.string,\n        bar: React.PropTypes.number,\n      }).isRequired,\n\n      // And do something bad here\n      bad_one: React.PropTypes.imaginaryType,\n      bad_two: React.PropTypes.string.inRequired,\n    },\n});\n"
  },
  {
    "path": "tests/flow/new_react/props4.js",
    "content": "// @flow\n\nimport React from \"React\";\n\nclass JDiv extends React.Component {\n  // static defaultProps: { };\n  props: {\n    id: string\n  };\n}\n\n// Should be a type error ('id' takes a string, not a number..)\n<JDiv id={42} />;\n\nclass Example extends React.Component {\n  props: { bar: string };\n\n  render() {\n    return <div>{this.props.bar}</div>\n  }\n}\n\nReact.render(\n  <Example foo=\"foo\" />,\n  document.body\n);\n"
  },
  {
    "path": "tests/flow/new_react/props5.js",
    "content": "var React = require('React');\n\nvar C = React.createClass({\n  getDefaultProps: function() {\n    return { x: 0 };\n  }\n});\n\nmodule.exports = C;\n"
  },
  {
    "path": "tests/flow/new_react/state.js",
    "content": "/* @flow */\n\nvar React = require('react');\n\ntype State = {\n    bar: ?{ qux: string; };\n};\n\nvar ReactClass = React.createClass({\n    getInitialState: function():State {\n        return { bar: null };\n    },\n\n    render: function(): any {\n        // Any state access here seems to make state any\n        this.state;\n        return (\n        <div>\n                {this.state.bar.qux}\n        </div>\n        );\n    }\n});\n"
  },
  {
    "path": "tests/flow/new_react/state2.js",
    "content": "// @flow\n\nvar React = require('react');\n\ntype FooState = {\n    key: ?Object;\n};\n\nvar Comp = React.createClass({\n    getInitialState: function(): FooState {\n        return {\n            key: null, // this used to cause a missing annotation error\n        };\n    }\n});\n\nmodule.exports = Comp;\n"
  },
  {
    "path": "tests/flow/new_react/state3.js",
    "content": "var React = require('react');\nvar TestState = React.createClass({\n\n    getInitialState: function(): { x: string; } {\n        return {\n            x: ''\n        }\n    },\n\n    test: function() {\n        var a: number = this.state.x; // error\n\n        this.setState({\n            x: false // error\n        })\n    }\n\n});\n"
  },
  {
    "path": "tests/flow/new_react/state4.js",
    "content": "var React = require('React');\n\nvar C = React.createClass({\n  getInitialState: function(): { x: number } {\n    return { x: 0 };\n  },\n\n  render() {\n    this.setState({ y: 0 });\n    return <div>{this.state.z}</div>\n  }\n\n});\n"
  },
  {
    "path": "tests/flow/new_react/state5.js",
    "content": "var React = require('React');\n\nclass C extends React.Component {\n  foo(): number {\n    return this.state.x; // error: need to declare type of state\n  }\n}\n"
  },
  {
    "path": "tests/flow/new_spread/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`type.js 1`] = `\ndeclare class T {}\ndeclare var x: T;\n\ndeclare class U {}\ndeclare var y: U;\n\ndeclare var nil: {||};\n\n// inexact: \\`p\\` may be non-own\ntype O1 = {...{p:T}};\ndeclare var o1: O1;\n(o1: {p?:T}); // ok\n(o1: {p:T}); // error: o1.p is optional\n({}: O1); // ok\n({p:x}: O1); // ok\n({p:y}: O1); // error: y ~> T\n({p:x,q:y}: O1); // ok\n\n// inexact: optional \\`p\\`, if own, must be \\`T\\`\ntype O2 = {...{p?:T}};\ndeclare var o2: O2;\n(o2: {p?:T}); // ok\n(o2: {p:T}); // error: o2.p is optional\n({}: O2); // ok\n({p:x}: O2); // ok\n({p:y}: O2); // error: y ~> T\n({p:x,q:y}: O2); // ok\n\n// can't make exact from inexact (TODO: force EvalT eagerly)\ntype O3 = {|...{p:T}|}; ({p:x}: O3); // error: spread result is not exact\n\n// exact\ntype O4 = {...{|p:T|}};\ndeclare var o4: O4;\n(o4: {p:T}); // ok\n(o4: {|p:T|}); // error: not exact\n({}: O4); // error: property \\`p\\` not found\n({p:x}: O4); // ok\n({p:y}: O4); // error: y ~> T\n({p:x,q:y}: O4); // ok\n\n// can make exact from exact\ntype O5 = {|...{|p:T|}|};\ndeclare var o5: O5;\n(o5: {p:T}); // ok\n(o5: {|p:T|}); // ok\n(nil: O5); // error: property \\`p\\` not found\n({p:x}: O5); // ok\n({p:y}: O5); // error: y ~> T\n({p:x,q:y}: O5); // error: additional property \\`q\\` found\n\n// inexact p + exact p\ntype O6 = {...{p:T},...{|p:U|}};\ndeclare var o6: O6;\n(o6: {p:U}); // ok\n({}: O6); // error: property \\`p\\` not found\n({p:x}: O6); // error: x ~> U\n({p:y}: O6); // ok\n({p:y,q:x}: O6); // ok\n\n// inexact p + exact p ~> exact (TODO: force EvalT eagerly)\ntype O7 = {|...{p:T},...{|p:U|}|}; ({p:y}: O7);// error: spread result is not exact\n\n// exact p + inexact p\ntype O8 = {...{|p:T|},...{p:U}};\ndeclare var o8: O8;\n(o8: {p:T|U}); // ok\n(o8.p: T); // error: U ~> T\n(o8.p: U); // error: T ~> U\n\n// inexact p + exact q\ntype O9 = {...{p:T},...{|q:U|}};\ndeclare var o9: O9;\n(o9: {p?:T,q:U});\n(o9.p: T); // error: o9.p is optional\n(o9.q: U); // ok\n\n// exact p + inexact q\ntype O10 = {...{|p:T|},...{q:U}};\ndeclare var o10: O10;\n(o10: {p:mixed, q?: U}); // ok\n\n// inexact p + inexact q\ntype O11 = {...{p:T},...{q:U}};\ndeclare var o11: O11;\n(o11: {p:mixed, q: mixed}); // ok\n\n// exact + exact\ntype O12 = {...{|p:T|},...{|q:U|}};\ndeclare var o12: O12;\n(o12: {p:T,q:U}); // ok\n\n// inline properties are exact\ntype O13 = {...{p:T},p:U};\ndeclare var o13: O13;\n(o13: {p:U});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class T {}\ndeclare var x: T;\n\ndeclare class U {}\ndeclare var y: U;\n\ndeclare var nil: {||};\n\n// inexact: \\`p\\` may be non-own\ntype O1 = { ...{ p: T } };\ndeclare var o1: O1;\n(o1: { p?: T }); // ok\n(o1: { p: T }); // error: o1.p is optional\n({}: O1); // ok\n({ p: x }: O1); // ok\n({ p: y }: O1); // error: y ~> T\n({ p: x, q: y }: O1); // ok\n\n// inexact: optional \\`p\\`, if own, must be \\`T\\`\ntype O2 = { ...{ p?: T } };\ndeclare var o2: O2;\n(o2: { p?: T }); // ok\n(o2: { p: T }); // error: o2.p is optional\n({}: O2); // ok\n({ p: x }: O2); // ok\n({ p: y }: O2); // error: y ~> T\n({ p: x, q: y }: O2); // ok\n\n// can't make exact from inexact (TODO: force EvalT eagerly)\ntype O3 = {| ...{ p: T } |};\n({ p: x }: O3); // error: spread result is not exact\n\n// exact\ntype O4 = { ...{| p: T |} };\ndeclare var o4: O4;\n(o4: { p: T }); // ok\n(o4: {| p: T |}); // error: not exact\n({}: O4); // error: property \\`p\\` not found\n({ p: x }: O4); // ok\n({ p: y }: O4); // error: y ~> T\n({ p: x, q: y }: O4); // ok\n\n// can make exact from exact\ntype O5 = {| ...{| p: T |} |};\ndeclare var o5: O5;\n(o5: { p: T }); // ok\n(o5: {| p: T |}); // ok\n(nil: O5); // error: property \\`p\\` not found\n({ p: x }: O5); // ok\n({ p: y }: O5); // error: y ~> T\n({ p: x, q: y }: O5); // error: additional property \\`q\\` found\n\n// inexact p + exact p\ntype O6 = { ...{ p: T }, ...{| p: U |} };\ndeclare var o6: O6;\n(o6: { p: U }); // ok\n({}: O6); // error: property \\`p\\` not found\n({ p: x }: O6); // error: x ~> U\n({ p: y }: O6); // ok\n({ p: y, q: x }: O6); // ok\n\n// inexact p + exact p ~> exact (TODO: force EvalT eagerly)\ntype O7 = {| ...{ p: T }, ...{| p: U |} |};\n({ p: y }: O7); // error: spread result is not exact\n\n// exact p + inexact p\ntype O8 = { ...{| p: T |}, ...{ p: U } };\ndeclare var o8: O8;\n(o8: { p: T | U }); // ok\n(o8.p: T); // error: U ~> T\n(o8.p: U); // error: T ~> U\n\n// inexact p + exact q\ntype O9 = { ...{ p: T }, ...{| q: U |} };\ndeclare var o9: O9;\n(o9: { p?: T, q: U });\n(o9.p: T); // error: o9.p is optional\n(o9.q: U); // ok\n\n// exact p + inexact q\ntype O10 = { ...{| p: T |}, ...{ q: U } };\ndeclare var o10: O10;\n(o10: { p: mixed, q?: U }); // ok\n\n// inexact p + inexact q\ntype O11 = { ...{ p: T }, ...{ q: U } };\ndeclare var o11: O11;\n(o11: { p: mixed, q: mixed }); // ok\n\n// exact + exact\ntype O12 = { ...{| p: T |}, ...{| q: U |} };\ndeclare var o12: O12;\n(o12: { p: T, q: U }); // ok\n\n// inline properties are exact\ntype O13 = { ...{ p: T }, p: U };\ndeclare var o13: O13;\n(o13: { p: U });\n\n`;\n\nexports[`type_any.js 1`] = `\ntype O1 = {...any};\nvar o1: O1 = (0: mixed); // ok\n(o1: empty); // ok\n\ntype O2 = {...Object};\nvar o2: O2 = (0: mixed); // ok\n(o2: empty); // ok\n\ndeclare var Base: any;\ndeclare class Derived extends Base {}\ntype O3 = {...Derived};\nvar o3: O3 = (0: mixed); // ok\n(o3: empty) // ok\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype O1 = { ...any };\nvar o1: O1 = (0: mixed); // ok\n(o1: empty); // ok\n\ntype O2 = { ...Object };\nvar o2: O2 = (0: mixed); // ok\n(o2: empty); // ok\n\ndeclare var Base: any;\ndeclare class Derived extends Base {}\ntype O3 = { ...Derived };\nvar o3: O3 = (0: mixed); // ok\n(o3: empty); // ok\n\n`;\n\nexports[`type_contra.js 1`] = `\ndeclare class T {};\n\ntype O1 = {...{-p:T}};\ndeclare var o1: O1;\n(o1: {p?:mixed}); // ok\n(o1: {p?:T}); // error: unknown ~> T\n(o1.p: T); // errors: undefined ~> T, unknown ~> T\n\ntype O2 = {...{-[string]:T}};\ndeclare var o2: O2;\n(o2: {[string]:mixed}); // ok\n(o2: {[string]:T}); // error: unknown ~> T\n(o2.p: T); // errors: unknown ~> T\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class T {}\n\ntype O1 = { ...{ -p: T } };\ndeclare var o1: O1;\n(o1: { p?: mixed }); // ok\n(o1: { p?: T }); // error: unknown ~> T\n(o1.p: T); // errors: undefined ~> T, unknown ~> T\n\ntype O2 = { ...{ -[string]: T } };\ndeclare var o2: O2;\n(o2: { [string]: mixed }); // ok\n(o2: { [string]: T }); // error: unknown ~> T\n(o2.p: T); // errors: unknown ~> T\n\n`;\n\nexports[`type_dict.js 1`] = `\ndeclare class T {}\ndeclare class U {}\n\ndeclare var o1: {...{[string]:T},...{p:U}};\n(o1: {p?:T|U,[string]:T}); // ok\n\ndeclare var o2: {...{p:T},...{[string]:U}};\n(o2: {p?:T|U,[string]:U}); // ok\n\ndeclare var o3: {...{[string]:T},...{[string]:U}};\n(o3: {[string]:T|U}); // ok\n\ndeclare var o4: {...{|[string]:T|},...{p:U}};\n(o4: {p?:T|U,[string]:T}); // ok\n\ndeclare var o5: {...{|p:T|},...{[string]:U}};\n(o5: {p:T|U,[string]:U}); // ok\n\ndeclare var o6: {...{|[string]:T|},...{[string]:U}};\n(o6: {[string]:T|U}); // ok\n\ndeclare var o7: {...{[string]:T},...{|p:U|}};\n(o7: {p:U,[string]:T}); // ok\n\ndeclare var o8: {...{p:T},...{|[string]:U|}};\n(o8: {p?:T|U,[string]:U}); // ok\n\ndeclare var o9: {...{[string]:T},...{|[string]:U|}};\n(o9: {[string]:T|U}); // ok\n\ndeclare var o10: {...{|[string]:T|},...{|p:U|}};\n(o10: {|p:U,[string]:T|}); // ok\n\ndeclare var o11: {...{|p :T|},...{|[string]:U|}};\n(o11: {|p:T|U,[string]:U|}); // ok\n\ndeclare var o12: {...{|[string]:T|},...{|[string]:U|}};\n(o12: {|[string]:T|U|}); // ok\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class T {}\ndeclare class U {}\n\ndeclare var o1: { ...{ [string]: T }, ...{ p: U } };\n(o1: { p?: T | U, [string]: T }); // ok\n\ndeclare var o2: { ...{ p: T }, ...{ [string]: U } };\n(o2: { p?: T | U, [string]: U }); // ok\n\ndeclare var o3: { ...{ [string]: T }, ...{ [string]: U } };\n(o3: { [string]: T | U }); // ok\n\ndeclare var o4: { ...{| [string]: T |}, ...{ p: U } };\n(o4: { p?: T | U, [string]: T }); // ok\n\ndeclare var o5: { ...{| p: T |}, ...{ [string]: U } };\n(o5: { p: T | U, [string]: U }); // ok\n\ndeclare var o6: { ...{| [string]: T |}, ...{ [string]: U } };\n(o6: { [string]: T | U }); // ok\n\ndeclare var o7: { ...{ [string]: T }, ...{| p: U |} };\n(o7: { p: U, [string]: T }); // ok\n\ndeclare var o8: { ...{ p: T }, ...{| [string]: U |} };\n(o8: { p?: T | U, [string]: U }); // ok\n\ndeclare var o9: { ...{ [string]: T }, ...{| [string]: U |} };\n(o9: { [string]: T | U }); // ok\n\ndeclare var o10: { ...{| [string]: T |}, ...{| p: U |} };\n(o10: {| p: U, [string]: T |}); // ok\n\ndeclare var o11: { ...{| p: T |}, ...{| [string]: U |} };\n(o11: {| p: T | U, [string]: U |}); // ok\n\ndeclare var o12: { ...{| [string]: T |}, ...{| [string]: U |} };\n(o12: {| [string]: T | U |}); // ok\n\n`;\n\nexports[`type_generic.js 1`] = `\ndeclare function spread<A,B>(a: A, b: B): {...A, ...B};\n(spread({p:0},{q:0}): {|+p:number,+q:number|}); // ok\n(spread({p:0},{q:0}): {|+p:empty,+q:empty|}); // number ~> empty (x2)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare function spread<A, B>(a: A, b: B): { ...A, ...B };\n(spread({ p: 0 }, { q: 0 }): {| +p: number, +q: number |}); // ok\n(spread({ p: 0 }, { q: 0 }): {| +p: empty, +q: empty |}); // number ~> empty (x2)\n\n`;\n\nexports[`type_instance.js 1`] = `\nclass A {+p: string|number}\nclass B extends A {p: number}\n\ntype O1 = {...B};\ndeclare var o1: O1;\n(o1: {p?:number}); // ok\n\ndeclare class C {[string]:number}\ntype O2 = {...C};\ndeclare var o2: O2;\n(o2: {[string]:number}); // ok\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {\n  +p: string | number;\n}\nclass B extends A {\n  p: number;\n}\n\ntype O1 = { ...B };\ndeclare var o1: O1;\n(o1: { p?: number }); // ok\n\ndeclare class C { [string]: number }\ntype O2 = { ...C };\ndeclare var o2: O2;\n(o2: { [string]: number }); // ok\n\n`;\n\nexports[`type_intersection.js 1`] = `\ndeclare class T {}\ndeclare class U {}\n\ndeclare class A {}\ndeclare class B extends A {}\n\ntype O1 = {...{p:T}&{q:U}};\ndeclare var o1: O1;\n(o1: {p?:T,q?:U}); // ok\n\ntype O2 = {...{p:A}&{p:B}};\ndeclare var o2: O2;\n(o2: {p?:B}); // ok\n({p: new B}: O2); // ok\n({p: new A}: O2); // error: A ~> B\n\ntype O3 = {...{p:A}&{[string]:B}};\ndeclare var o3: O3;\n(o3: {p:B,[string]:B});// ok: A&B = B\n(o3.q: B); // ok\n\ntype O4 = {...{[string]:A}&{p:B}};\ndeclare var o4: O4;\n(o4: {p:B,[string]:A}); // ok: A&B = B\n\ntype O5 = {...{[string]:A}&{[string]:B}};\ndeclare var o5: O5;\n(o5: {[string]:B}); // ok: A&B = B\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class T {}\ndeclare class U {}\n\ndeclare class A {}\ndeclare class B extends A {}\n\ntype O1 = { ...{ p: T } & { q: U } };\ndeclare var o1: O1;\n(o1: { p?: T, q?: U }); // ok\n\ntype O2 = { ...{ p: A } & { p: B } };\ndeclare var o2: O2;\n(o2: { p?: B }); // ok\n({ p: new B() }: O2); // ok\n({ p: new A() }: O2); // error: A ~> B\n\ntype O3 = { ...{ p: A } & { [string]: B } };\ndeclare var o3: O3;\n(o3: { p: B, [string]: B }); // ok: A&B = B\n(o3.q: B); // ok\n\ntype O4 = { ...{ [string]: A } & { p: B } };\ndeclare var o4: O4;\n(o4: { p: B, [string]: A }); // ok: A&B = B\n\ntype O5 = { ...{ [string]: A } & { [string]: B } };\ndeclare var o5: O5;\n(o5: { [string]: B }); // ok: A&B = B\n\n`;\n\nexports[`type_intersection_optional.js 1`] = `\ndeclare class T {}\ndeclare class U {}\n\ndeclare var o1: {...{p:T}&{p:U}};\n(o1: {p?:T&U}); // ok\n\ndeclare var o2: {...{p?:T}&{p:U}};\n(o2: {p?:T&U}); // ok\n\ndeclare var o3: {...{p:T}&{p?:U}};\n(o3: {p?:T&U}); // ok\n\ndeclare var o4: {...{p?:T}&{p?:U}};\n(o4: {p?:T&U}); // ok\n\ndeclare var o5: {...{|p:T|}&{p:U}};\n(o5: {p:T&U}); // ok\n\ndeclare var o6: {...{|p?:T|}&{p:U}};\n(o6: {p:T&U}); // ok\n\ndeclare var o7: {...{|p:T|}&{p?:U}};\n(o7: {p:T&U}); // ok\n\ndeclare var o8: {...{|p?:T|}&{p?:U}};\n(o8: {p?:T&U}); // ok\n\ndeclare var o9: {...{p:T}&{|p:U|}};\n(o9: {p:T&U}); // ok\n\ndeclare var o10: {...{p?:T}&{|p:U|}};\n(o10: {p:T&U}); // ok\n\ndeclare var o11: {...{p:T}&{|p?:U|}};\n(o11: {p:T&U}); // ok\n\ndeclare var o12: {...{p?:T}&{|p?:U|}};\n(o12: {p?:T&U}); // ok\n\ndeclare var o13: {...{|p:T|}&{|p:U|}};\n(o13: {|p:T&U|}); // ok\n\ndeclare var o14: {...{|p?:T|}&{|p:U|}};\n(o14: {|p:T&U|}); // ok\n\ndeclare var o15: {...{|p:T|}&{|p?:U|}};\n(o15: {|p:T&U|}); // ok\n\ndeclare var o16: {...{|p?:T|}&{|p?:U|}};\n(o16: {|p?:T&U|}); // ok\n\ndeclare var o17: {...{p:T}&{q:U}};\n(o17: {p?:T,q?:U}); // ok\n\ndeclare var o18: {...{p?:T}&{q:U}};\n(o18: {p?:T,q?:U}); // ok\n\ndeclare var o19: {...{p:T}&{q?:U}};\n(o19: {p?:T,q?:U}); // ok\n\ndeclare var o20: {...{p?:T}&{q?:U}};\n(o20: {p?:T,q?:U}); // ok\n\ndeclare var o21: {...{|p:T|}&{q:U}};\n(o21: {p:T,q?:U}); // ok\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class T {}\ndeclare class U {}\n\ndeclare var o1: { ...{ p: T } & { p: U } };\n(o1: { p?: T & U }); // ok\n\ndeclare var o2: { ...{ p?: T } & { p: U } };\n(o2: { p?: T & U }); // ok\n\ndeclare var o3: { ...{ p: T } & { p?: U } };\n(o3: { p?: T & U }); // ok\n\ndeclare var o4: { ...{ p?: T } & { p?: U } };\n(o4: { p?: T & U }); // ok\n\ndeclare var o5: { ...{| p: T |} & { p: U } };\n(o5: { p: T & U }); // ok\n\ndeclare var o6: { ...{| p?: T |} & { p: U } };\n(o6: { p: T & U }); // ok\n\ndeclare var o7: { ...{| p: T |} & { p?: U } };\n(o7: { p: T & U }); // ok\n\ndeclare var o8: { ...{| p?: T |} & { p?: U } };\n(o8: { p?: T & U }); // ok\n\ndeclare var o9: { ...{ p: T } & {| p: U |} };\n(o9: { p: T & U }); // ok\n\ndeclare var o10: { ...{ p?: T } & {| p: U |} };\n(o10: { p: T & U }); // ok\n\ndeclare var o11: { ...{ p: T } & {| p?: U |} };\n(o11: { p: T & U }); // ok\n\ndeclare var o12: { ...{ p?: T } & {| p?: U |} };\n(o12: { p?: T & U }); // ok\n\ndeclare var o13: { ...{| p: T |} & {| p: U |} };\n(o13: {| p: T & U |}); // ok\n\ndeclare var o14: { ...{| p?: T |} & {| p: U |} };\n(o14: {| p: T & U |}); // ok\n\ndeclare var o15: { ...{| p: T |} & {| p?: U |} };\n(o15: {| p: T & U |}); // ok\n\ndeclare var o16: { ...{| p?: T |} & {| p?: U |} };\n(o16: {| p?: T & U |}); // ok\n\ndeclare var o17: { ...{ p: T } & { q: U } };\n(o17: { p?: T, q?: U }); // ok\n\ndeclare var o18: { ...{ p?: T } & { q: U } };\n(o18: { p?: T, q?: U }); // ok\n\ndeclare var o19: { ...{ p: T } & { q?: U } };\n(o19: { p?: T, q?: U }); // ok\n\ndeclare var o20: { ...{ p?: T } & { q?: U } };\n(o20: { p?: T, q?: U }); // ok\n\ndeclare var o21: { ...{| p: T |} & { q: U } };\n(o21: { p: T, q?: U }); // ok\n\n`;\n\nexports[`type_optional.js 1`] = `\ndeclare class T {}\ndeclare class U {}\n\ndeclare var a: {...{ p :T },...{ p :U }}; (a: { p?:T|U });\ndeclare var b: {...{ p?:T },...{ p :U }}; (b: { p?:T|U });\ndeclare var c: {...{ p :T },...{ p?:U }}; (c: { p?:T|U });\ndeclare var d: {...{ p?:T },...{ p?:U }}; (d: { p?:T|U });\n\ndeclare var e: {...{|p :T|},...{ p :U }}; (e: { p :T|U });\ndeclare var f: {...{|p?:T|},...{ p :U }}; (f: { p?:T|U });\ndeclare var g: {...{|p :T|},...{ p?:U }}; (g: { p :T|U });\ndeclare var h: {...{|p?:T|},...{ p?:U }}; (h: { p?:T|U });\n\ndeclare var i: {...{ p :T },...{|p :U|}}; (i: { p :  U });\ndeclare var j: {...{ p?:T },...{|p :U|}}; (j: { p :  U });\ndeclare var k: {...{ p :T },...{|p?:U|}}; (k: { p?:T|U });\ndeclare var l: {...{ p?:T },...{|p?:U|}}; (l: { p?:T|U });\n\ndeclare var m: {...{|p :T|},...{|p :U|}}; (m: {|p :  U|});\ndeclare var n: {...{|p?:T|},...{|p :U|}}; (n: {|p :  U|});\ndeclare var o: {...{|p :T|},...{|p?:U|}}; (o: {|p :T|U|});\ndeclare var p: {...{|p?:T|},...{|p?:U|}}; (p: {|p?:T|U|});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class T {}\ndeclare class U {}\n\ndeclare var a: { ...{ p: T }, ...{ p: U } };\n(a: { p?: T | U });\ndeclare var b: { ...{ p?: T }, ...{ p: U } };\n(b: { p?: T | U });\ndeclare var c: { ...{ p: T }, ...{ p?: U } };\n(c: { p?: T | U });\ndeclare var d: { ...{ p?: T }, ...{ p?: U } };\n(d: { p?: T | U });\n\ndeclare var e: { ...{| p: T |}, ...{ p: U } };\n(e: { p: T | U });\ndeclare var f: { ...{| p?: T |}, ...{ p: U } };\n(f: { p?: T | U });\ndeclare var g: { ...{| p: T |}, ...{ p?: U } };\n(g: { p: T | U });\ndeclare var h: { ...{| p?: T |}, ...{ p?: U } };\n(h: { p?: T | U });\n\ndeclare var i: { ...{ p: T }, ...{| p: U |} };\n(i: { p: U });\ndeclare var j: { ...{ p?: T }, ...{| p: U |} };\n(j: { p: U });\ndeclare var k: { ...{ p: T }, ...{| p?: U |} };\n(k: { p?: T | U });\ndeclare var l: { ...{ p?: T }, ...{| p?: U |} };\n(l: { p?: T | U });\n\ndeclare var m: { ...{| p: T |}, ...{| p: U |} };\n(m: {| p: U |});\ndeclare var n: { ...{| p?: T |}, ...{| p: U |} };\n(n: {| p: U |});\ndeclare var o: { ...{| p: T |}, ...{| p?: U |} };\n(o: {| p: T | U |});\ndeclare var p: { ...{| p?: T |}, ...{| p?: U |} };\n(p: {| p?: T | U |});\n\n`;\n\nexports[`type_union.js 1`] = `\ndeclare class T {}\ndeclare var x: T;\n\ndeclare class U {}\ndeclare var y: U;\n\ntype O1 = {...{p:T}|{q:U}};\ndeclare var o1: O1;\n(o1: {p?:T}|{q?:U}); // ok\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class T {}\ndeclare var x: T;\n\ndeclare class U {}\ndeclare var y: U;\n\ntype O1 = { ...{ p: T } | { q: U } };\ndeclare var o1: O1;\n(o1: { p?: T } | { q?: U }); // ok\n\n`;\n"
  },
  {
    "path": "tests/flow/new_spread/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow/new_spread/type.js",
    "content": "declare class T {}\ndeclare var x: T;\n\ndeclare class U {}\ndeclare var y: U;\n\ndeclare var nil: {||};\n\n// inexact: `p` may be non-own\ntype O1 = {...{p:T}};\ndeclare var o1: O1;\n(o1: {p?:T}); // ok\n(o1: {p:T}); // error: o1.p is optional\n({}: O1); // ok\n({p:x}: O1); // ok\n({p:y}: O1); // error: y ~> T\n({p:x,q:y}: O1); // ok\n\n// inexact: optional `p`, if own, must be `T`\ntype O2 = {...{p?:T}};\ndeclare var o2: O2;\n(o2: {p?:T}); // ok\n(o2: {p:T}); // error: o2.p is optional\n({}: O2); // ok\n({p:x}: O2); // ok\n({p:y}: O2); // error: y ~> T\n({p:x,q:y}: O2); // ok\n\n// can't make exact from inexact (TODO: force EvalT eagerly)\ntype O3 = {|...{p:T}|}; ({p:x}: O3); // error: spread result is not exact\n\n// exact\ntype O4 = {...{|p:T|}};\ndeclare var o4: O4;\n(o4: {p:T}); // ok\n(o4: {|p:T|}); // error: not exact\n({}: O4); // error: property `p` not found\n({p:x}: O4); // ok\n({p:y}: O4); // error: y ~> T\n({p:x,q:y}: O4); // ok\n\n// can make exact from exact\ntype O5 = {|...{|p:T|}|};\ndeclare var o5: O5;\n(o5: {p:T}); // ok\n(o5: {|p:T|}); // ok\n(nil: O5); // error: property `p` not found\n({p:x}: O5); // ok\n({p:y}: O5); // error: y ~> T\n({p:x,q:y}: O5); // error: additional property `q` found\n\n// inexact p + exact p\ntype O6 = {...{p:T},...{|p:U|}};\ndeclare var o6: O6;\n(o6: {p:U}); // ok\n({}: O6); // error: property `p` not found\n({p:x}: O6); // error: x ~> U\n({p:y}: O6); // ok\n({p:y,q:x}: O6); // ok\n\n// inexact p + exact p ~> exact (TODO: force EvalT eagerly)\ntype O7 = {|...{p:T},...{|p:U|}|}; ({p:y}: O7);// error: spread result is not exact\n\n// exact p + inexact p\ntype O8 = {...{|p:T|},...{p:U}};\ndeclare var o8: O8;\n(o8: {p:T|U}); // ok\n(o8.p: T); // error: U ~> T\n(o8.p: U); // error: T ~> U\n\n// inexact p + exact q\ntype O9 = {...{p:T},...{|q:U|}};\ndeclare var o9: O9;\n(o9: {p?:T,q:U});\n(o9.p: T); // error: o9.p is optional\n(o9.q: U); // ok\n\n// exact p + inexact q\ntype O10 = {...{|p:T|},...{q:U}};\ndeclare var o10: O10;\n(o10: {p:mixed, q?: U}); // ok\n\n// inexact p + inexact q\ntype O11 = {...{p:T},...{q:U}};\ndeclare var o11: O11;\n(o11: {p:mixed, q: mixed}); // ok\n\n// exact + exact\ntype O12 = {...{|p:T|},...{|q:U|}};\ndeclare var o12: O12;\n(o12: {p:T,q:U}); // ok\n\n// inline properties are exact\ntype O13 = {...{p:T},p:U};\ndeclare var o13: O13;\n(o13: {p:U});\n"
  },
  {
    "path": "tests/flow/new_spread/type_any.js",
    "content": "type O1 = {...any};\nvar o1: O1 = (0: mixed); // ok\n(o1: empty); // ok\n\ntype O2 = {...Object};\nvar o2: O2 = (0: mixed); // ok\n(o2: empty); // ok\n\ndeclare var Base: any;\ndeclare class Derived extends Base {}\ntype O3 = {...Derived};\nvar o3: O3 = (0: mixed); // ok\n(o3: empty) // ok\n"
  },
  {
    "path": "tests/flow/new_spread/type_contra.js",
    "content": "declare class T {};\n\ntype O1 = {...{-p:T}};\ndeclare var o1: O1;\n(o1: {p?:mixed}); // ok\n(o1: {p?:T}); // error: unknown ~> T\n(o1.p: T); // errors: undefined ~> T, unknown ~> T\n\ntype O2 = {...{-[string]:T}};\ndeclare var o2: O2;\n(o2: {[string]:mixed}); // ok\n(o2: {[string]:T}); // error: unknown ~> T\n(o2.p: T); // errors: unknown ~> T\n"
  },
  {
    "path": "tests/flow/new_spread/type_dict.js",
    "content": "declare class T {}\ndeclare class U {}\n\ndeclare var o1: {...{[string]:T},...{p:U}};\n(o1: {p?:T|U,[string]:T}); // ok\n\ndeclare var o2: {...{p:T},...{[string]:U}};\n(o2: {p?:T|U,[string]:U}); // ok\n\ndeclare var o3: {...{[string]:T},...{[string]:U}};\n(o3: {[string]:T|U}); // ok\n\ndeclare var o4: {...{|[string]:T|},...{p:U}};\n(o4: {p?:T|U,[string]:T}); // ok\n\ndeclare var o5: {...{|p:T|},...{[string]:U}};\n(o5: {p:T|U,[string]:U}); // ok\n\ndeclare var o6: {...{|[string]:T|},...{[string]:U}};\n(o6: {[string]:T|U}); // ok\n\ndeclare var o7: {...{[string]:T},...{|p:U|}};\n(o7: {p:U,[string]:T}); // ok\n\ndeclare var o8: {...{p:T},...{|[string]:U|}};\n(o8: {p?:T|U,[string]:U}); // ok\n\ndeclare var o9: {...{[string]:T},...{|[string]:U|}};\n(o9: {[string]:T|U}); // ok\n\ndeclare var o10: {...{|[string]:T|},...{|p:U|}};\n(o10: {|p:U,[string]:T|}); // ok\n\ndeclare var o11: {...{|p :T|},...{|[string]:U|}};\n(o11: {|p:T|U,[string]:U|}); // ok\n\ndeclare var o12: {...{|[string]:T|},...{|[string]:U|}};\n(o12: {|[string]:T|U|}); // ok\n"
  },
  {
    "path": "tests/flow/new_spread/type_generic.js",
    "content": "declare function spread<A,B>(a: A, b: B): {...A, ...B};\n(spread({p:0},{q:0}): {|+p:number,+q:number|}); // ok\n(spread({p:0},{q:0}): {|+p:empty,+q:empty|}); // number ~> empty (x2)\n"
  },
  {
    "path": "tests/flow/new_spread/type_instance.js",
    "content": "class A {+p: string|number}\nclass B extends A {p: number}\n\ntype O1 = {...B};\ndeclare var o1: O1;\n(o1: {p?:number}); // ok\n\ndeclare class C {[string]:number}\ntype O2 = {...C};\ndeclare var o2: O2;\n(o2: {[string]:number}); // ok\n"
  },
  {
    "path": "tests/flow/new_spread/type_intersection.js",
    "content": "declare class T {}\ndeclare class U {}\n\ndeclare class A {}\ndeclare class B extends A {}\n\ntype O1 = {...{p:T}&{q:U}};\ndeclare var o1: O1;\n(o1: {p?:T,q?:U}); // ok\n\ntype O2 = {...{p:A}&{p:B}};\ndeclare var o2: O2;\n(o2: {p?:B}); // ok\n({p: new B}: O2); // ok\n({p: new A}: O2); // error: A ~> B\n\ntype O3 = {...{p:A}&{[string]:B}};\ndeclare var o3: O3;\n(o3: {p:B,[string]:B});// ok: A&B = B\n(o3.q: B); // ok\n\ntype O4 = {...{[string]:A}&{p:B}};\ndeclare var o4: O4;\n(o4: {p:B,[string]:A}); // ok: A&B = B\n\ntype O5 = {...{[string]:A}&{[string]:B}};\ndeclare var o5: O5;\n(o5: {[string]:B}); // ok: A&B = B\n"
  },
  {
    "path": "tests/flow/new_spread/type_intersection_optional.js",
    "content": "declare class T {}\ndeclare class U {}\n\ndeclare var o1: {...{p:T}&{p:U}};\n(o1: {p?:T&U}); // ok\n\ndeclare var o2: {...{p?:T}&{p:U}};\n(o2: {p?:T&U}); // ok\n\ndeclare var o3: {...{p:T}&{p?:U}};\n(o3: {p?:T&U}); // ok\n\ndeclare var o4: {...{p?:T}&{p?:U}};\n(o4: {p?:T&U}); // ok\n\ndeclare var o5: {...{|p:T|}&{p:U}};\n(o5: {p:T&U}); // ok\n\ndeclare var o6: {...{|p?:T|}&{p:U}};\n(o6: {p:T&U}); // ok\n\ndeclare var o7: {...{|p:T|}&{p?:U}};\n(o7: {p:T&U}); // ok\n\ndeclare var o8: {...{|p?:T|}&{p?:U}};\n(o8: {p?:T&U}); // ok\n\ndeclare var o9: {...{p:T}&{|p:U|}};\n(o9: {p:T&U}); // ok\n\ndeclare var o10: {...{p?:T}&{|p:U|}};\n(o10: {p:T&U}); // ok\n\ndeclare var o11: {...{p:T}&{|p?:U|}};\n(o11: {p:T&U}); // ok\n\ndeclare var o12: {...{p?:T}&{|p?:U|}};\n(o12: {p?:T&U}); // ok\n\ndeclare var o13: {...{|p:T|}&{|p:U|}};\n(o13: {|p:T&U|}); // ok\n\ndeclare var o14: {...{|p?:T|}&{|p:U|}};\n(o14: {|p:T&U|}); // ok\n\ndeclare var o15: {...{|p:T|}&{|p?:U|}};\n(o15: {|p:T&U|}); // ok\n\ndeclare var o16: {...{|p?:T|}&{|p?:U|}};\n(o16: {|p?:T&U|}); // ok\n\ndeclare var o17: {...{p:T}&{q:U}};\n(o17: {p?:T,q?:U}); // ok\n\ndeclare var o18: {...{p?:T}&{q:U}};\n(o18: {p?:T,q?:U}); // ok\n\ndeclare var o19: {...{p:T}&{q?:U}};\n(o19: {p?:T,q?:U}); // ok\n\ndeclare var o20: {...{p?:T}&{q?:U}};\n(o20: {p?:T,q?:U}); // ok\n\ndeclare var o21: {...{|p:T|}&{q:U}};\n(o21: {p:T,q?:U}); // ok\n"
  },
  {
    "path": "tests/flow/new_spread/type_optional.js",
    "content": "declare class T {}\ndeclare class U {}\n\ndeclare var a: {...{ p :T },...{ p :U }}; (a: { p?:T|U });\ndeclare var b: {...{ p?:T },...{ p :U }}; (b: { p?:T|U });\ndeclare var c: {...{ p :T },...{ p?:U }}; (c: { p?:T|U });\ndeclare var d: {...{ p?:T },...{ p?:U }}; (d: { p?:T|U });\n\ndeclare var e: {...{|p :T|},...{ p :U }}; (e: { p :T|U });\ndeclare var f: {...{|p?:T|},...{ p :U }}; (f: { p?:T|U });\ndeclare var g: {...{|p :T|},...{ p?:U }}; (g: { p :T|U });\ndeclare var h: {...{|p?:T|},...{ p?:U }}; (h: { p?:T|U });\n\ndeclare var i: {...{ p :T },...{|p :U|}}; (i: { p :  U });\ndeclare var j: {...{ p?:T },...{|p :U|}}; (j: { p :  U });\ndeclare var k: {...{ p :T },...{|p?:U|}}; (k: { p?:T|U });\ndeclare var l: {...{ p?:T },...{|p?:U|}}; (l: { p?:T|U });\n\ndeclare var m: {...{|p :T|},...{|p :U|}}; (m: {|p :  U|});\ndeclare var n: {...{|p?:T|},...{|p :U|}}; (n: {|p :  U|});\ndeclare var o: {...{|p :T|},...{|p?:U|}}; (o: {|p :T|U|});\ndeclare var p: {...{|p?:T|},...{|p?:U|}}; (p: {|p?:T|U|});\n"
  },
  {
    "path": "tests/flow/new_spread/type_union.js",
    "content": "declare class T {}\ndeclare var x: T;\n\ndeclare class U {}\ndeclare var y: U;\n\ntype O1 = {...{p:T}|{q:U}};\ndeclare var o1: O1;\n(o1: {p?:T}|{q?:U}); // ok\n"
  },
  {
    "path": "tests/flow/node_haste/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`client.js 1`] = `\nvar md5 = require('./md5');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar md5 = require(\"./md5\");\n\n`;\n\nexports[`md5.js 1`] = `\n/* @providesModule md5 */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule md5 */\n\n`;\n"
  },
  {
    "path": "tests/flow/node_haste/client.js",
    "content": "var md5 = require('./md5');\n"
  },
  {
    "path": "tests/flow/node_haste/external/_d3/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`min.js 1`] = `\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n`;\n"
  },
  {
    "path": "tests/flow/node_haste/external/_d3/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_haste/external/_d3/min.js",
    "content": ""
  },
  {
    "path": "tests/flow/node_haste/foo/bar/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`client.js 1`] = `\nvar docblock = require('qux/docblock');\nvar min = require('d3/min.js');\nvar corge = require('qux/corge');\n\n// make sure we don't pick up non-header @providesModule\n// annotations - see node_modules/qux/docblock.js\nvar unreachable = require('annotation');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar docblock = require(\"qux/docblock\");\nvar min = require(\"d3/min.js\");\nvar corge = require(\"qux/corge\");\n\n// make sure we don't pick up non-header @providesModule\n// annotations - see node_modules/qux/docblock.js\nvar unreachable = require(\"annotation\");\n\n`;\n"
  },
  {
    "path": "tests/flow/node_haste/foo/bar/client.js",
    "content": "var docblock = require('qux/docblock');\nvar min = require('d3/min.js');\nvar corge = require('qux/corge');\n\n// make sure we don't pick up non-header @providesModule\n// annotations - see node_modules/qux/docblock.js\nvar unreachable = require('annotation');\n"
  },
  {
    "path": "tests/flow/node_haste/foo/bar/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_haste/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_haste/md5.js",
    "content": "/* @providesModule md5 */\n"
  },
  {
    "path": "tests/flow/node_haste/ws/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`index.js 1`] = `\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n`;\n"
  },
  {
    "path": "tests/flow/node_haste/ws/index.js",
    "content": ""
  },
  {
    "path": "tests/flow/node_haste/ws/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_haste/ws/test/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`client.js 1`] = `\nvar ws = require('../');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar ws = require(\"../\");\n\n`;\n"
  },
  {
    "path": "tests/flow/node_haste/ws/test/client.js",
    "content": "var ws = require('../');\n"
  },
  {
    "path": "tests/flow/node_haste/ws/test/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_modules_with_symlinks/root/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`foo.js 1`] = `\nvar x = require('symlink_lib');\nvar y = require('symlink_lib_outside_root');\nconsole.log(x);\nconsole.log(y);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x = require(\"symlink_lib\");\nvar y = require(\"symlink_lib_outside_root\");\nconsole.log(x);\nconsole.log(y);\n\n`;\n"
  },
  {
    "path": "tests/flow/node_modules_with_symlinks/root/foo.js",
    "content": "var x = require('symlink_lib');\nvar y = require('symlink_lib_outside_root');\nconsole.log(x);\nconsole.log(y);\n"
  },
  {
    "path": "tests/flow/node_modules_with_symlinks/root/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_modules_with_symlinks/root/symlink_lib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`index.js 1`] = `\nmodule.exports = { bar: \"bar\" };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nmodule.exports = { bar: \"bar\" };\n\n`;\n"
  },
  {
    "path": "tests/flow/node_modules_with_symlinks/root/symlink_lib/index.js",
    "content": "module.exports = { bar: \"bar\" };\n"
  },
  {
    "path": "tests/flow/node_modules_with_symlinks/root/symlink_lib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_modules_with_symlinks/symlink_lib_outside_root/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`index.js 1`] = `\nmodule.exports = { bar: \"bar\" };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nmodule.exports = { bar: \"bar\" };\n\n`;\n"
  },
  {
    "path": "tests/flow/node_modules_with_symlinks/symlink_lib_outside_root/index.js",
    "content": "module.exports = { bar: \"bar\" };\n"
  },
  {
    "path": "tests/flow/node_modules_with_symlinks/symlink_lib_outside_root/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_modules_without_json/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n// @flow\n\nlet foo = require('foo');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet foo = require(\"foo\");\n\n`;\n"
  },
  {
    "path": "tests/flow/node_modules_without_json/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_modules_without_json/test.js",
    "content": "// @flow\n\nlet foo = require('foo');\n"
  },
  {
    "path": "tests/flow/node_tests/assert/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`assert.js 1`] = `\n/* @flow */\n\nvar assert = require(\"assert\")\nassert(true) // ok\nassert.ok(true) // ok\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar assert = require(\"assert\");\nassert(true); // ok\nassert.ok(true); // ok\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/assert/assert.js",
    "content": "/* @flow */\n\nvar assert = require(\"assert\")\nassert(true) // ok\nassert.ok(true) // ok\n"
  },
  {
    "path": "tests/flow/node_tests/assert/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/basic/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`bar.js 1`] = `\nmodule.exports = \"bar\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nmodule.exports = \"bar\";\n\n`;\n\nexports[`foo.js 1`] = `\nvar x = require('./bar.js');\nconsole.log(x);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x = require(\"./bar.js\");\nconsole.log(x);\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/basic/bar.js",
    "content": "module.exports = \"bar\";\n"
  },
  {
    "path": "tests/flow/node_tests/basic/foo.js",
    "content": "var x = require('./bar.js');\nconsole.log(x);\n"
  },
  {
    "path": "tests/flow/node_tests/basic/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/basic_file/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`bar.js 1`] = `\nmodule.exports = \"bar\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nmodule.exports = \"bar\";\n\n`;\n\nexports[`foo.js 1`] = `\nvar x = require('./bar'); // bar.js does not work\nconsole.log(x);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x = require(\"./bar\"); // bar.js does not work\nconsole.log(x);\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/basic_file/bar.js",
    "content": "module.exports = \"bar\";\n"
  },
  {
    "path": "tests/flow/node_tests/basic_file/foo.js",
    "content": "var x = require('./bar'); // bar.js does not work\nconsole.log(x);\n"
  },
  {
    "path": "tests/flow/node_tests/basic_file/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/basic_node_modules/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`foo.js 1`] = `\nvar x = require('bar.js');\nconsole.log(x);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x = require(\"bar.js\");\nconsole.log(x);\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/basic_node_modules/foo.js",
    "content": "var x = require('bar.js');\nconsole.log(x);\n"
  },
  {
    "path": "tests/flow/node_tests/basic_node_modules/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/basic_node_modules_with_path/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`foo.js 1`] = `\nvar x = require('bar_lib/bar');\nconsole.log(x);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x = require(\"bar_lib/bar\");\nconsole.log(x);\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/basic_node_modules_with_path/foo.js",
    "content": "var x = require('bar_lib/bar');\nconsole.log(x);\n"
  },
  {
    "path": "tests/flow/node_tests/basic_node_modules_with_path/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/basic_package/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`foo.js 1`] = `\nvar x = require('./bar_lib'); // 'bar_lib' does not work!\nconsole.log(x);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x = require(\"./bar_lib\"); // 'bar_lib' does not work!\nconsole.log(x);\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/basic_package/bar_lib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`bar.js 1`] = `\nmodule.exports = \"bar\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nmodule.exports = \"bar\";\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/basic_package/bar_lib/bar.js",
    "content": "module.exports = \"bar\";\n"
  },
  {
    "path": "tests/flow/node_tests/basic_package/bar_lib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/basic_package/foo.js",
    "content": "var x = require('./bar_lib'); // 'bar_lib' does not work!\nconsole.log(x);\n"
  },
  {
    "path": "tests/flow/node_tests/basic_package/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/buffer/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`buffer.js 1`] = `\n/* @flow */\n\nlet bool: boolean = false;\nlet buffer: Buffer = new Buffer(0);\nlet num: number = 0;\nlet maybeNum: ?number;\n\n// Uint8Array properties. All of these should type check ok.\nbuffer.length;\nbuffer.buffer;\nbuffer.byteOffset;\nbuffer.byteLength;\nbuffer[1];\n\n// A few Uint8Array instance methods. All of these should type check ok.\nbuffer.copyWithin(0, 0);\nbuffer.copyWithin(0, 0, 0);\n\nconst it1: Iterator<[number, number]> = buffer.entries();\n\nbool = buffer.every((element: number) => false);\nbool = buffer.every((element: number) => false, buffer);\n\nbuffer = buffer.fill(1);\nbuffer = buffer.fill(1, 0, 0);\nbuffer = buffer.fill(\"a\");\nbuffer = buffer.fill(\"a\", 0, 0);\nbuffer = buffer.fill(\"a\", 0, 0, \"utf8\");\nbuffer = buffer.fill(\"a\", \"utf8\");\n\nmaybeNum = buffer.find((element: number, index: number, array:Uint8Array) => false);\nmaybeNum = buffer.find((element: number, index: number, array:Uint8Array) => false, buffer);\n\nnum = buffer.findIndex((element: number, index: number, array:Uint8Array) => false);\nnum = buffer.findIndex((element: number, index: number, array:Uint8Array) => false, buffer);\n\nbuffer.forEach((value: number) => console.log(value), buffer);\nbuffer.forEach((value: number, index:number, array:Uint8Array) => console.log(value), buffer);\n\nbool = buffer.includes(3);\nbool = buffer.includes(3, 4);\n\nnum = buffer.indexOf(3);\nnum = buffer.indexOf(3, 4);\n\n// static methods\nbuffer = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);\nconst typedArray = new Uint8Array([0x34]);\nbuffer = Buffer.from(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\nbuffer = Buffer.from(new Buffer(0));\nbuffer = Buffer.from(\"foo\", \"utf8\");\n\n// This call to from() used to type check ok, but should not. Buffer\n// extends Uint8Array but gets rid of this signature to .from(). Understandably,\n// flow didn't used to support a subclass hiding a superclass member, so this\n// used to check out as ok, even though it is not correct.\nbuffer = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72], (a:number) => a + 1, {}); // error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nlet bool: boolean = false;\nlet buffer: Buffer = new Buffer(0);\nlet num: number = 0;\nlet maybeNum: ?number;\n\n// Uint8Array properties. All of these should type check ok.\nbuffer.length;\nbuffer.buffer;\nbuffer.byteOffset;\nbuffer.byteLength;\nbuffer[1];\n\n// A few Uint8Array instance methods. All of these should type check ok.\nbuffer.copyWithin(0, 0);\nbuffer.copyWithin(0, 0, 0);\n\nconst it1: Iterator<[number, number]> = buffer.entries();\n\nbool = buffer.every((element: number) => false);\nbool = buffer.every((element: number) => false, buffer);\n\nbuffer = buffer.fill(1);\nbuffer = buffer.fill(1, 0, 0);\nbuffer = buffer.fill(\"a\");\nbuffer = buffer.fill(\"a\", 0, 0);\nbuffer = buffer.fill(\"a\", 0, 0, \"utf8\");\nbuffer = buffer.fill(\"a\", \"utf8\");\n\nmaybeNum = buffer.find(\n  (element: number, index: number, array: Uint8Array) => false\n);\nmaybeNum = buffer.find(\n  (element: number, index: number, array: Uint8Array) => false,\n  buffer\n);\n\nnum = buffer.findIndex(\n  (element: number, index: number, array: Uint8Array) => false\n);\nnum = buffer.findIndex(\n  (element: number, index: number, array: Uint8Array) => false,\n  buffer\n);\n\nbuffer.forEach((value: number) => console.log(value), buffer);\nbuffer.forEach(\n  (value: number, index: number, array: Uint8Array) => console.log(value),\n  buffer\n);\n\nbool = buffer.includes(3);\nbool = buffer.includes(3, 4);\n\nnum = buffer.indexOf(3);\nnum = buffer.indexOf(3, 4);\n\n// static methods\nbuffer = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);\nconst typedArray = new Uint8Array([0x34]);\nbuffer = Buffer.from(\n  typedArray.buffer,\n  typedArray.byteOffset,\n  typedArray.byteLength\n);\nbuffer = Buffer.from(new Buffer(0));\nbuffer = Buffer.from(\"foo\", \"utf8\");\n\n// This call to from() used to type check ok, but should not. Buffer\n// extends Uint8Array but gets rid of this signature to .from(). Understandably,\n// flow didn't used to support a subclass hiding a superclass member, so this\n// used to check out as ok, even though it is not correct.\nbuffer = Buffer.from(\n  [0x62, 0x75, 0x66, 0x66, 0x65, 0x72],\n  (a: number) => a + 1,\n  {}\n); // error\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/buffer/buffer.js",
    "content": "/* @flow */\n\nlet bool: boolean = false;\nlet buffer: Buffer = new Buffer(0);\nlet num: number = 0;\nlet maybeNum: ?number;\n\n// Uint8Array properties. All of these should type check ok.\nbuffer.length;\nbuffer.buffer;\nbuffer.byteOffset;\nbuffer.byteLength;\nbuffer[1];\n\n// A few Uint8Array instance methods. All of these should type check ok.\nbuffer.copyWithin(0, 0);\nbuffer.copyWithin(0, 0, 0);\n\nconst it1: Iterator<[number, number]> = buffer.entries();\n\nbool = buffer.every((element: number) => false);\nbool = buffer.every((element: number) => false, buffer);\n\nbuffer = buffer.fill(1);\nbuffer = buffer.fill(1, 0, 0);\nbuffer = buffer.fill(\"a\");\nbuffer = buffer.fill(\"a\", 0, 0);\nbuffer = buffer.fill(\"a\", 0, 0, \"utf8\");\nbuffer = buffer.fill(\"a\", \"utf8\");\n\nmaybeNum = buffer.find((element: number, index: number, array:Uint8Array) => false);\nmaybeNum = buffer.find((element: number, index: number, array:Uint8Array) => false, buffer);\n\nnum = buffer.findIndex((element: number, index: number, array:Uint8Array) => false);\nnum = buffer.findIndex((element: number, index: number, array:Uint8Array) => false, buffer);\n\nbuffer.forEach((value: number) => console.log(value), buffer);\nbuffer.forEach((value: number, index:number, array:Uint8Array) => console.log(value), buffer);\n\nbool = buffer.includes(3);\nbool = buffer.includes(3, 4);\n\nnum = buffer.indexOf(3);\nnum = buffer.indexOf(3, 4);\n\n// static methods\nbuffer = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);\nconst typedArray = new Uint8Array([0x34]);\nbuffer = Buffer.from(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\nbuffer = Buffer.from(new Buffer(0));\nbuffer = Buffer.from(\"foo\", \"utf8\");\n\n// This call to from() used to type check ok, but should not. Buffer\n// extends Uint8Array but gets rid of this signature to .from(). Understandably,\n// flow didn't used to support a subclass hiding a superclass member, so this\n// used to check out as ok, even though it is not correct.\nbuffer = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72], (a:number) => a + 1, {}); // error\n"
  },
  {
    "path": "tests/flow/node_tests/buffer/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/child_process/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`exec.js 1`] = `\n/* @flow */\n\nvar exec = require('child_process').exec;\n\n// callback only.\nexec('ls', function(error, stdout, stderr) {\n  console.info(stdout);\n});\n\n// options only.\nexec('ls', {timeout: 250});\n\n// options + callback.\nexec('ls', {maxBuffer: 100}, function(error, stdout, stderr) {\n  console.info(stdout);\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar exec = require(\"child_process\").exec;\n\n// callback only.\nexec(\"ls\", function(error, stdout, stderr) {\n  console.info(stdout);\n});\n\n// options only.\nexec(\"ls\", { timeout: 250 });\n\n// options + callback.\nexec(\"ls\", { maxBuffer: 100 }, function(error, stdout, stderr) {\n  console.info(stdout);\n});\n\n`;\n\nexports[`execFile.js 1`] = `\n/* @flow */\n\nvar execFile = require('child_process').execFile;\n\n// args only.\nexecFile('ls', ['-lh']);\n\n// callback only.\nexecFile('ls', function(error, stdout, stderr) {\n  console.info(stdout);\n});\n\n// options only.\nexecFile('wc', {timeout: 250});\n\n// args + callback.\nexecFile('ls', ['-l'], function(error, stdout, stderr) {\n  console.info(stdout);\n});\n\n// args + options.\nexecFile('ls', ['-l'], {timeout: 250});\n\n// Put it all together.\nexecFile('ls', ['-l'], {timeout: 250}, function(error, stdout, stderr) {\n  console.info(stdout);\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar execFile = require(\"child_process\").execFile;\n\n// args only.\nexecFile(\"ls\", [\"-lh\"]);\n\n// callback only.\nexecFile(\"ls\", function(error, stdout, stderr) {\n  console.info(stdout);\n});\n\n// options only.\nexecFile(\"wc\", { timeout: 250 });\n\n// args + callback.\nexecFile(\"ls\", [\"-l\"], function(error, stdout, stderr) {\n  console.info(stdout);\n});\n\n// args + options.\nexecFile(\"ls\", [\"-l\"], { timeout: 250 });\n\n// Put it all together.\nexecFile(\"ls\", [\"-l\"], { timeout: 250 }, function(error, stdout, stderr) {\n  console.info(stdout);\n});\n\n`;\n\nexports[`execSync.js 1`] = `\n/* @flow */\n\nvar execSync = require('child_process').execSync;\n\n(execSync('ls'): Buffer); // returns Buffer\n(execSync('ls', {encoding: 'buffer'}): Buffer); // returns Buffer\n(execSync('ls', {encoding: 'utf8'}): string); // returns string\n(execSync('ls', {timeout: '250'})); // error, no signatures match\n(execSync('ls', {stdio: 'inherit'})); // error, no signatures match\n(execSync('ls', {stdio: ['inherit']})); // error, no signatures match\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar execSync = require(\"child_process\").execSync;\n\n(execSync(\"ls\"): Buffer); // returns Buffer\n(execSync(\"ls\", { encoding: \"buffer\" }): Buffer); // returns Buffer\n(execSync(\"ls\", { encoding: \"utf8\" }): string); // returns string\nexecSync(\"ls\", { timeout: \"250\" }); // error, no signatures match\nexecSync(\"ls\", { stdio: \"inherit\" }); // error, no signatures match\nexecSync(\"ls\", { stdio: [\"inherit\"] }); // error, no signatures match\n\n`;\n\nexports[`spawn.js 1`] = `\n/* @flow */\n\nvar child_process = require('child_process');\n\nvar ls = child_process.spawn('ls');\nvar wc = child_process.spawn('wc', ['-l']);\n\n// args + options.\nchild_process.spawn('echo', ['-n', '\"Testing...\"'], {env: {TEST: 'foo'}});\n\n// options only.\nchild_process.spawn('echo', {env: {FOO: 2}});\n\nls.stdout.on('data', function(data) {\n  wc.stdin.write(data);\n});\n\nls.stderr.on('data', function(data) {\n  console.warn(data);\n});\n\nls.on('close', function(code) {\n  if (code !== 0) {\n    console.warn('\\`ls\\` exited with code %s', code);\n  }\n  wc.stdin.end();\n});\n\nwc.stdout.pipe(process.stdout);\nwc.stderr.pipe(process.stderr);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar child_process = require(\"child_process\");\n\nvar ls = child_process.spawn(\"ls\");\nvar wc = child_process.spawn(\"wc\", [\"-l\"]);\n\n// args + options.\nchild_process.spawn(\"echo\", [\"-n\", '\"Testing...\"'], { env: { TEST: \"foo\" } });\n\n// options only.\nchild_process.spawn(\"echo\", { env: { FOO: 2 } });\n\nls.stdout.on(\"data\", function(data) {\n  wc.stdin.write(data);\n});\n\nls.stderr.on(\"data\", function(data) {\n  console.warn(data);\n});\n\nls.on(\"close\", function(code) {\n  if (code !== 0) {\n    console.warn(\"\\`ls\\` exited with code %s\", code);\n  }\n  wc.stdin.end();\n});\n\nwc.stdout.pipe(process.stdout);\nwc.stderr.pipe(process.stderr);\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/child_process/exec.js",
    "content": "/* @flow */\n\nvar exec = require('child_process').exec;\n\n// callback only.\nexec('ls', function(error, stdout, stderr) {\n  console.info(stdout);\n});\n\n// options only.\nexec('ls', {timeout: 250});\n\n// options + callback.\nexec('ls', {maxBuffer: 100}, function(error, stdout, stderr) {\n  console.info(stdout);\n});\n"
  },
  {
    "path": "tests/flow/node_tests/child_process/execFile.js",
    "content": "/* @flow */\n\nvar execFile = require('child_process').execFile;\n\n// args only.\nexecFile('ls', ['-lh']);\n\n// callback only.\nexecFile('ls', function(error, stdout, stderr) {\n  console.info(stdout);\n});\n\n// options only.\nexecFile('wc', {timeout: 250});\n\n// args + callback.\nexecFile('ls', ['-l'], function(error, stdout, stderr) {\n  console.info(stdout);\n});\n\n// args + options.\nexecFile('ls', ['-l'], {timeout: 250});\n\n// Put it all together.\nexecFile('ls', ['-l'], {timeout: 250}, function(error, stdout, stderr) {\n  console.info(stdout);\n});\n"
  },
  {
    "path": "tests/flow/node_tests/child_process/execSync.js",
    "content": "/* @flow */\n\nvar execSync = require('child_process').execSync;\n\n(execSync('ls'): Buffer); // returns Buffer\n(execSync('ls', {encoding: 'buffer'}): Buffer); // returns Buffer\n(execSync('ls', {encoding: 'utf8'}): string); // returns string\n(execSync('ls', {timeout: '250'})); // error, no signatures match\n(execSync('ls', {stdio: 'inherit'})); // error, no signatures match\n(execSync('ls', {stdio: ['inherit']})); // error, no signatures match\n"
  },
  {
    "path": "tests/flow/node_tests/child_process/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/child_process/spawn.js",
    "content": "/* @flow */\n\nvar child_process = require('child_process');\n\nvar ls = child_process.spawn('ls');\nvar wc = child_process.spawn('wc', ['-l']);\n\n// args + options.\nchild_process.spawn('echo', ['-n', '\"Testing...\"'], {env: {TEST: 'foo'}});\n\n// options only.\nchild_process.spawn('echo', {env: {FOO: 2}});\n\nls.stdout.on('data', function(data) {\n  wc.stdin.write(data);\n});\n\nls.stderr.on('data', function(data) {\n  console.warn(data);\n});\n\nls.on('close', function(code) {\n  if (code !== 0) {\n    console.warn('`ls` exited with code %s', code);\n  }\n  wc.stdin.end();\n});\n\nwc.stdout.pipe(process.stdout);\nwc.stderr.pipe(process.stderr);\n"
  },
  {
    "path": "tests/flow/node_tests/crypto/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`crypto.js 1`] = `\n/* @flow */\n\nconst crypto = require('crypto');\n\nlet tests = [\n  // Hmac is a duplex stream\n  function() {\n    const hmac = crypto.createHmac('sha256', 'a secret');\n\n    hmac.on('readable', () => {\n      (hmac.read(): ?(string | Buffer));\n      (hmac.read(): number); // 4 errors: null, void, string, Buffer\n    });\n\n    hmac.write('some data to hash');\n    hmac.write(123); // 2 errors: not a string or a Buffer\n    hmac.end();\n  },\n\n  // Hmac supports update and digest functions too\n  function(buf: Buffer) {\n    const hmac = crypto.createHmac('sha256', 'a secret');\n\n    hmac.update('some data to hash');\n    hmac.update('foo', 'utf8');\n    hmac.update('foo', 'bogus'); // 1 error\n    hmac.update(buf);\n    hmac.update(buf, 'utf8'); // 1 error: no encoding when passing a buffer\n\n    // it's also chainable\n    (hmac.update('some data to hash').update(buf).digest(): Buffer);\n\n    (hmac.digest('hex'): string);\n    (hmac.digest(): Buffer);\n    (hmac.digest('hex'): void); // 1 error\n    (hmac.digest(): void); // 1 error\n  }\n]\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nconst crypto = require(\"crypto\");\n\nlet tests = [\n  // Hmac is a duplex stream\n  function() {\n    const hmac = crypto.createHmac(\"sha256\", \"a secret\");\n\n    hmac.on(\"readable\", () => {\n      (hmac.read(): ?(string | Buffer));\n      (hmac.read(): number); // 4 errors: null, void, string, Buffer\n    });\n\n    hmac.write(\"some data to hash\");\n    hmac.write(123); // 2 errors: not a string or a Buffer\n    hmac.end();\n  },\n\n  // Hmac supports update and digest functions too\n  function(buf: Buffer) {\n    const hmac = crypto.createHmac(\"sha256\", \"a secret\");\n\n    hmac.update(\"some data to hash\");\n    hmac.update(\"foo\", \"utf8\");\n    hmac.update(\"foo\", \"bogus\"); // 1 error\n    hmac.update(buf);\n    hmac.update(buf, \"utf8\"); // 1 error: no encoding when passing a buffer\n\n    // it's also chainable\n    (hmac.update(\"some data to hash\").update(buf).digest(): Buffer);\n\n    (hmac.digest(\"hex\"): string);\n    (hmac.digest(): Buffer);\n    (hmac.digest(\"hex\"): void); // 1 error\n    (hmac.digest(): void); // 1 error\n  }\n];\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/crypto/crypto.js",
    "content": "/* @flow */\n\nconst crypto = require('crypto');\n\nlet tests = [\n  // Hmac is a duplex stream\n  function() {\n    const hmac = crypto.createHmac('sha256', 'a secret');\n\n    hmac.on('readable', () => {\n      (hmac.read(): ?(string | Buffer));\n      (hmac.read(): number); // 4 errors: null, void, string, Buffer\n    });\n\n    hmac.write('some data to hash');\n    hmac.write(123); // 2 errors: not a string or a Buffer\n    hmac.end();\n  },\n\n  // Hmac supports update and digest functions too\n  function(buf: Buffer) {\n    const hmac = crypto.createHmac('sha256', 'a secret');\n\n    hmac.update('some data to hash');\n    hmac.update('foo', 'utf8');\n    hmac.update('foo', 'bogus'); // 1 error\n    hmac.update(buf);\n    hmac.update(buf, 'utf8'); // 1 error: no encoding when passing a buffer\n\n    // it's also chainable\n    (hmac.update('some data to hash').update(buf).digest(): Buffer);\n\n    (hmac.digest('hex'): string);\n    (hmac.digest(): Buffer);\n    (hmac.digest('hex'): void); // 1 error\n    (hmac.digest(): void); // 1 error\n  }\n]\n"
  },
  {
    "path": "tests/flow/node_tests/crypto/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/fs/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`fs.js 1`] = `\nvar fs = require(\"fs\");\n\n/* readFile */\n\nfs.readFile(\"file.exp\", (_, data) => {\n  (data : Buffer);\n});\n\nfs.readFile(\"file.exp\", \"blah\", (_, data) => {\n  (data : string);\n});\n\nfs.readFile(\"file.exp\", { encoding: \"blah\" }, (_, data) => {\n  (data : string);\n});\n\nfs.readFile(\"file.exp\", {}, (_, data) => {\n  (data : Buffer);\n});\n\n/* readFileSync */\n\n(fs.readFileSync(\"file.exp\") : Buffer);\n(fs.readFileSync(\"file.exp\") : string); // error\n\n(fs.readFileSync(\"file.exp\", \"blah\") : string);\n(fs.readFileSync(\"file.exp\", \"blah\") : Buffer); // error\n\n(fs.readFileSync(\"file.exp\", { encoding: \"blah\" }) : string);\n(fs.readFileSync(\"file.exp\", { encoding: \"blah\" }) : Buffer); // error\n\n(fs.readFileSync(\"file.exp\", {}) : Buffer);\n(fs.readFileSync(\"file.exp\", {}) : string); // error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar fs = require(\"fs\");\n\n/* readFile */\n\nfs.readFile(\"file.exp\", (_, data) => {\n  (data: Buffer);\n});\n\nfs.readFile(\"file.exp\", \"blah\", (_, data) => {\n  (data: string);\n});\n\nfs.readFile(\"file.exp\", { encoding: \"blah\" }, (_, data) => {\n  (data: string);\n});\n\nfs.readFile(\"file.exp\", {}, (_, data) => {\n  (data: Buffer);\n});\n\n/* readFileSync */\n\n(fs.readFileSync(\"file.exp\"): Buffer);\n(fs.readFileSync(\"file.exp\"): string); // error\n\n(fs.readFileSync(\"file.exp\", \"blah\"): string);\n(fs.readFileSync(\"file.exp\", \"blah\"): Buffer); // error\n\n(fs.readFileSync(\"file.exp\", { encoding: \"blah\" }): string);\n(fs.readFileSync(\"file.exp\", { encoding: \"blah\" }): Buffer); // error\n\n(fs.readFileSync(\"file.exp\", {}): Buffer);\n(fs.readFileSync(\"file.exp\", {}): string); // error\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/fs/fs.js",
    "content": "var fs = require(\"fs\");\n\n/* readFile */\n\nfs.readFile(\"file.exp\", (_, data) => {\n  (data : Buffer);\n});\n\nfs.readFile(\"file.exp\", \"blah\", (_, data) => {\n  (data : string);\n});\n\nfs.readFile(\"file.exp\", { encoding: \"blah\" }, (_, data) => {\n  (data : string);\n});\n\nfs.readFile(\"file.exp\", {}, (_, data) => {\n  (data : Buffer);\n});\n\n/* readFileSync */\n\n(fs.readFileSync(\"file.exp\") : Buffer);\n(fs.readFileSync(\"file.exp\") : string); // error\n\n(fs.readFileSync(\"file.exp\", \"blah\") : string);\n(fs.readFileSync(\"file.exp\", \"blah\") : Buffer); // error\n\n(fs.readFileSync(\"file.exp\", { encoding: \"blah\" }) : string);\n(fs.readFileSync(\"file.exp\", { encoding: \"blah\" }) : Buffer); // error\n\n(fs.readFileSync(\"file.exp\", {}) : Buffer);\n(fs.readFileSync(\"file.exp\", {}) : string); // error\n"
  },
  {
    "path": "tests/flow/node_tests/fs/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/json_file/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n// @flow\n\nlet data = require('./package/index.json');\n(data.foo: void); // error, should be object literal\n(data.foo.bar: void); // error, should be boolean\n(data.abc: boolean); // error, should be ?string\n\nlet data2 = require('./package');\n(data2.baz: void); // error, should be string\n\nlet data3 = require('./package2');\n(data3.foo: void); // error, should be number (not string! index.js wins)\n\nlet data4 = require('./json_array');\n(data4: Array<number>);\n(data4: void); // error, should be Array<number>\n\n(require('./json_string'): void); // error, should be string\n(require('./json_number'): void); // error, should be number\n(require('./json_true'): void); // error, should be true\n(require('./json_false'): void); // error, should be false\n(require('./json_null'): void); // error, should be null\n(require('./json_negative_number'): -1); // ok\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet data = require(\"./package/index.json\");\n(data.foo: void); // error, should be object literal\n(data.foo.bar: void); // error, should be boolean\n(data.abc: boolean); // error, should be ?string\n\nlet data2 = require(\"./package\");\n(data2.baz: void); // error, should be string\n\nlet data3 = require(\"./package2\");\n(data3.foo: void); // error, should be number (not string! index.js wins)\n\nlet data4 = require(\"./json_array\");\n(data4: Array<number>);\n(data4: void); // error, should be Array<number>\n\n(require(\"./json_string\"): void); // error, should be string\n(require(\"./json_number\"): void); // error, should be number\n(require(\"./json_true\"): void); // error, should be true\n(require(\"./json_false\"): void); // error, should be false\n(require(\"./json_null\"): void); // error, should be null\n(require(\"./json_negative_number\"): -1); // ok\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/json_file/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/json_file/package2/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`index.js 1`] = `\n// @flow\n\nmodule.exports = {\n  foo: 123\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nmodule.exports = {\n  foo: 123\n};\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/json_file/package2/index.js",
    "content": "// @flow\n\nmodule.exports = {\n  foo: 123\n};\n"
  },
  {
    "path": "tests/flow/node_tests/json_file/package2/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/json_file/test.js",
    "content": "// @flow\n\nlet data = require('./package/index.json');\n(data.foo: void); // error, should be object literal\n(data.foo.bar: void); // error, should be boolean\n(data.abc: boolean); // error, should be ?string\n\nlet data2 = require('./package');\n(data2.baz: void); // error, should be string\n\nlet data3 = require('./package2');\n(data3.foo: void); // error, should be number (not string! index.js wins)\n\nlet data4 = require('./json_array');\n(data4: Array<number>);\n(data4: void); // error, should be Array<number>\n\n(require('./json_string'): void); // error, should be string\n(require('./json_number'): void); // error, should be number\n(require('./json_true'): void); // error, should be true\n(require('./json_false'): void); // error, should be false\n(require('./json_null'): void); // error, should be null\n(require('./json_negative_number'): -1); // ok\n"
  },
  {
    "path": "tests/flow/node_tests/os/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`userInfo.js 1`] = `\n/* @flow */\n\nvar os = require('os');\n\nvar u1 = os.userInfo();\n(u1.username: string);\n(u1.username: Buffer); // error\n\nvar u2 = os.userInfo({encoding: 'utf8'});\n(u2.username: string);\n(u2.username: Buffer); // error\n\nvar u3 = os.userInfo({encoding: 'buffer'});\n(u3.username: string); // error\n(u3.username: Buffer);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar os = require(\"os\");\n\nvar u1 = os.userInfo();\n(u1.username: string);\n(u1.username: Buffer); // error\n\nvar u2 = os.userInfo({ encoding: \"utf8\" });\n(u2.username: string);\n(u2.username: Buffer); // error\n\nvar u3 = os.userInfo({ encoding: \"buffer\" });\n(u3.username: string); // error\n(u3.username: Buffer);\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/os/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/os/userInfo.js",
    "content": "/* @flow */\n\nvar os = require('os');\n\nvar u1 = os.userInfo();\n(u1.username: string);\n(u1.username: Buffer); // error\n\nvar u2 = os.userInfo({encoding: 'utf8'});\n(u2.username: string);\n(u2.username: Buffer); // error\n\nvar u3 = os.userInfo({encoding: 'buffer'});\n(u3.username: string); // error\n(u3.username: Buffer);\n"
  },
  {
    "path": "tests/flow/node_tests/package_file/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`bar_lib.js 1`] = `\nmodule.exports = \"bar_lib\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nmodule.exports = \"bar_lib\";\n\n`;\n\nexports[`foo.js 1`] = `\nvar x: string = require('./bar_lib'); // 'bar_lib' does not work!\nconsole.log(x);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x: string = require(\"./bar_lib\"); // 'bar_lib' does not work!\nconsole.log(x);\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/package_file/bar_lib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`bar.js 1`] = `\nmodule.exports = 0;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nmodule.exports = 0;\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/package_file/bar_lib/bar.js",
    "content": "module.exports = 0;\n"
  },
  {
    "path": "tests/flow/node_tests/package_file/bar_lib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/package_file/bar_lib.js",
    "content": "module.exports = \"bar_lib\";\n"
  },
  {
    "path": "tests/flow/node_tests/package_file/foo.js",
    "content": "var x: string = require('./bar_lib'); // 'bar_lib' does not work!\nconsole.log(x);\n"
  },
  {
    "path": "tests/flow/node_tests/package_file/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/package_file_node_modules/foo/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`foo.js 1`] = `\nvar x: string = require('bar_lib'); // 'bar_lib' does not work!\nconsole.log(x);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x: string = require(\"bar_lib\"); // 'bar_lib' does not work!\nconsole.log(x);\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/package_file_node_modules/foo/foo.js",
    "content": "var x: string = require('bar_lib'); // 'bar_lib' does not work!\nconsole.log(x);\n"
  },
  {
    "path": "tests/flow/node_tests/package_file_node_modules/foo/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/path_node_modules/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`foo.js 1`] = `\nvar x = require('bar_lib/src/lib/bar');\nconsole.log(x);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x = require(\"bar_lib/src/lib/bar\");\nconsole.log(x);\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/path_node_modules/foo.js",
    "content": "var x = require('bar_lib/src/lib/bar');\nconsole.log(x);\n"
  },
  {
    "path": "tests/flow/node_tests/path_node_modules/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/path_node_modules_with_short_main/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`foo.js 1`] = `\nvar x = require('bar_lib');\nconsole.log(x);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x = require(\"bar_lib\");\nconsole.log(x);\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/path_node_modules_with_short_main/foo.js",
    "content": "var x = require('bar_lib');\nconsole.log(x);\n"
  },
  {
    "path": "tests/flow/node_tests/path_node_modules_with_short_main/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/path_node_modules_without_main/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`foo.js 1`] = `\nvar x = require('bar_lib');\nconsole.log(x);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x = require(\"bar_lib\");\nconsole.log(x);\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/path_node_modules_without_main/foo.js",
    "content": "var x = require('bar_lib');\nconsole.log(x);\n"
  },
  {
    "path": "tests/flow/node_tests/path_node_modules_without_main/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/path_package/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`foo.js 1`] = `\nvar x = require('bar_lib/src/lib');\nconsole.log(x);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x = require(\"bar_lib/src/lib\");\nconsole.log(x);\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/path_package/foo.js",
    "content": "var x = require('bar_lib/src/lib');\nconsole.log(x);\n"
  },
  {
    "path": "tests/flow/node_tests/path_package/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/process/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`nextTick.js 1`] = `\n/* @flow */\n\nprocess.nextTick(() => {});\n\nprocess.nextTick(\n  (a: string, b: number, c: boolean) => {},\n  'z',\n  1,\n  true\n);\n\nprocess.nextTick(\n  (a: string, b: number, c: boolean) => {},\n  0, // Error: number ~> string\n  1,\n  null // Error: null ~> boolean\n);\n\nprocess.nextTick(\n  (a: string, b: number, c: boolean) => {},\n  'z',\n  'y', // Error: string ~> number\n  true\n);\n\nprocess.nextTick(\n  (a: string, b: number, c: boolean) => {} // Error: too few arguments\n);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nprocess.nextTick(() => {});\n\nprocess.nextTick((a: string, b: number, c: boolean) => {}, \"z\", 1, true);\n\nprocess.nextTick(\n  (a: string, b: number, c: boolean) => {},\n  0, // Error: number ~> string\n  1,\n  null // Error: null ~> boolean\n);\n\nprocess.nextTick(\n  (a: string, b: number, c: boolean) => {},\n  \"z\",\n  \"y\", // Error: string ~> number\n  true\n);\n\nprocess.nextTick(\n  (a: string, b: number, c: boolean) => {} // Error: too few arguments\n);\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/process/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/process/nextTick.js",
    "content": "/* @flow */\n\nprocess.nextTick(() => {});\n\nprocess.nextTick(\n  (a: string, b: number, c: boolean) => {},\n  'z',\n  1,\n  true\n);\n\nprocess.nextTick(\n  (a: string, b: number, c: boolean) => {},\n  0, // Error: number ~> string\n  1,\n  null // Error: null ~> boolean\n);\n\nprocess.nextTick(\n  (a: string, b: number, c: boolean) => {},\n  'z',\n  'y', // Error: string ~> number\n  true\n);\n\nprocess.nextTick(\n  (a: string, b: number, c: boolean) => {} // Error: too few arguments\n);\n"
  },
  {
    "path": "tests/flow/node_tests/stream/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`stream.js 1`] = `\n/* @flow */\n\nvar child_process = require('child_process');\nvar fs = require('fs');\nvar stream = require('stream');\nvar ls = child_process.spawn('ls');\n\nvar data = \"foo\";\n\nls.stdin.write(data);\nls.stdin.write(data, \"utf-8\");\nls.stdin.write(data, () => {});\nls.stdin.write(data, \"utf-8\", () => {});\n\nls.stdin.end();\nls.stdin.end(data);\nls.stdin.end(data, \"utf-8\");\nls.stdin.end(data, () => {});\nls.stdin.end(data, \"utf-8\", () => {});\n\nvar ws = fs.createWriteStream('/dev/null');\nls.stdout.pipe(ws).end();\n\nclass MyReadStream extends stream.Readable {}\nclass MyWriteStream extends stream.Writable {}\nclass MyDuplex extends stream.Duplex {}\nclass MyTransform extends stream.Duplex {}\n\nnew MyReadStream()\n  .pipe(new MyDuplex())\n  .pipe(new MyTransform())\n  .pipe(new MyWriteStream());\n\nnew MyReadStream()\n  .on('error', () => {})\n  .pipe(new MyDuplex())\n  .once('close', () => {});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar child_process = require(\"child_process\");\nvar fs = require(\"fs\");\nvar stream = require(\"stream\");\nvar ls = child_process.spawn(\"ls\");\n\nvar data = \"foo\";\n\nls.stdin.write(data);\nls.stdin.write(data, \"utf-8\");\nls.stdin.write(data, () => {});\nls.stdin.write(data, \"utf-8\", () => {});\n\nls.stdin.end();\nls.stdin.end(data);\nls.stdin.end(data, \"utf-8\");\nls.stdin.end(data, () => {});\nls.stdin.end(data, \"utf-8\", () => {});\n\nvar ws = fs.createWriteStream(\"/dev/null\");\nls.stdout.pipe(ws).end();\n\nclass MyReadStream extends stream.Readable {}\nclass MyWriteStream extends stream.Writable {}\nclass MyDuplex extends stream.Duplex {}\nclass MyTransform extends stream.Duplex {}\n\nnew MyReadStream()\n  .pipe(new MyDuplex())\n  .pipe(new MyTransform())\n  .pipe(new MyWriteStream());\n\nnew MyReadStream()\n  .on(\"error\", () => {})\n  .pipe(new MyDuplex())\n  .once(\"close\", () => {});\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/stream/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/stream/stream.js",
    "content": "/* @flow */\n\nvar child_process = require('child_process');\nvar fs = require('fs');\nvar stream = require('stream');\nvar ls = child_process.spawn('ls');\n\nvar data = \"foo\";\n\nls.stdin.write(data);\nls.stdin.write(data, \"utf-8\");\nls.stdin.write(data, () => {});\nls.stdin.write(data, \"utf-8\", () => {});\n\nls.stdin.end();\nls.stdin.end(data);\nls.stdin.end(data, \"utf-8\");\nls.stdin.end(data, () => {});\nls.stdin.end(data, \"utf-8\", () => {});\n\nvar ws = fs.createWriteStream('/dev/null');\nls.stdout.pipe(ws).end();\n\nclass MyReadStream extends stream.Readable {}\nclass MyWriteStream extends stream.Writable {}\nclass MyDuplex extends stream.Duplex {}\nclass MyTransform extends stream.Duplex {}\n\nnew MyReadStream()\n  .pipe(new MyDuplex())\n  .pipe(new MyTransform())\n  .pipe(new MyWriteStream());\n\nnew MyReadStream()\n  .on('error', () => {})\n  .pipe(new MyDuplex())\n  .once('close', () => {});\n"
  },
  {
    "path": "tests/flow/node_tests/timers/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`timers.js 1`] = `\n// @flow\n\nfunction setImmediateCallback(): number {\n  return 0;\n}\n\nsetImmediate(setImmediateCallback);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nfunction setImmediateCallback(): number {\n  return 0;\n}\n\nsetImmediate(setImmediateCallback);\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/timers/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/timers/timers.js",
    "content": "// @flow\n\nfunction setImmediateCallback(): number {\n  return 0;\n}\n\nsetImmediate(setImmediateCallback);\n"
  },
  {
    "path": "tests/flow/node_tests/url/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`url.js 1`] = `\nconst url = require('url');\nurl.format(url.parse('https://example.com/foo'));\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst url = require(\"url\");\nurl.format(url.parse(\"https://example.com/foo\"));\n\n`;\n"
  },
  {
    "path": "tests/flow/node_tests/url/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/node_tests/url/url.js",
    "content": "const url = require('url');\nurl.format(url.parse('https://example.com/foo'));\n"
  },
  {
    "path": "tests/flow/nullable/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`maybe.js 1`] = `\n// @flow\n\n// unwrapping nested maybes should work\n(('foo': ?(?string)): ?string); // ok\n((123: ?(?number)): ?string); // error (only num ~> string)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// unwrapping nested maybes should work\n((\"foo\": ??string): ?string); // ok\n((123: ??number): ?string); // error (only num ~> string)\n\n`;\n\nexports[`nullable.js 1`] = `\nfunction foo():string { return null; }\n\nfunction bar():?string { return null; }\n\nfunction qux(x:string) { }\n\nfunction corge(x:number) { }\n\nvar x = bar(); // x: ?string\nif (x != null) qux(x); // x: ?string | null\nif (x != null) corge(x); // x: ?string | null\n\nfunction grault() { x = null; }\nif (x != null) {\n  grault(); qux(x);\n}\n\nvar array_of_nullable: Array<?number> = [null, 3];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo(): string {\n  return null;\n}\n\nfunction bar(): ?string {\n  return null;\n}\n\nfunction qux(x: string) {}\n\nfunction corge(x: number) {}\n\nvar x = bar(); // x: ?string\nif (x != null) qux(x); // x: ?string | null\nif (x != null) corge(x); // x: ?string | null\n\nfunction grault() {\n  x = null;\n}\nif (x != null) {\n  grault();\n  qux(x);\n}\n\nvar array_of_nullable: Array<?number> = [null, 3];\n\n`;\n\nexports[`simple_nullable.js 1`] = `\nfunction foo(x:?string) {}\nfunction bar(x:?number) {}\nfoo('hmm');\nbar('hmm');\n\nfunction fn(data: ?{}) {}\nfn({some: 'literal'});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo(x: ?string) {}\nfunction bar(x: ?number) {}\nfoo(\"hmm\");\nbar(\"hmm\");\n\nfunction fn(data: ?{}) {}\nfn({ some: \"literal\" });\n\n`;\n"
  },
  {
    "path": "tests/flow/nullable/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/nullable/maybe.js",
    "content": "// @flow\n\n// unwrapping nested maybes should work\n(('foo': ?(?string)): ?string); // ok\n((123: ?(?number)): ?string); // error (only num ~> string)\n"
  },
  {
    "path": "tests/flow/nullable/nullable.js",
    "content": "function foo():string { return null; }\n\nfunction bar():?string { return null; }\n\nfunction qux(x:string) { }\n\nfunction corge(x:number) { }\n\nvar x = bar(); // x: ?string\nif (x != null) qux(x); // x: ?string | null\nif (x != null) corge(x); // x: ?string | null\n\nfunction grault() { x = null; }\nif (x != null) {\n  grault(); qux(x);\n}\n\nvar array_of_nullable: Array<?number> = [null, 3];\n"
  },
  {
    "path": "tests/flow/nullable/simple_nullable.js",
    "content": "function foo(x:?string) {}\nfunction bar(x:?number) {}\nfoo('hmm');\nbar('hmm');\n\nfunction fn(data: ?{}) {}\nfn({some: 'literal'});\n"
  },
  {
    "path": "tests/flow/number_constants/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`number_constants.js 1`] = `\nvar a: number = Number.MAX_SAFE_INTEGER;\nvar b: string = Number.MAX_SAFE_INTEGER;\nvar c: number = Number.MIN_SAFE_INTEGER;\nvar d: string = Number.MIN_SAFE_INTEGER;\nvar e: number = Number.MAX_VALUE;\nvar f: string = Number.MAX_VALUE;\nvar g: number = Number.MIN_VALUE;\nvar h: string = Number.MIN_VALUE;\nvar i: number = Number.NaN;\nvar j: string = Number.NaN;\nvar k: number = Number.EPSILON;\nvar l: string = Number.EPSILON;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar a: number = Number.MAX_SAFE_INTEGER;\nvar b: string = Number.MAX_SAFE_INTEGER;\nvar c: number = Number.MIN_SAFE_INTEGER;\nvar d: string = Number.MIN_SAFE_INTEGER;\nvar e: number = Number.MAX_VALUE;\nvar f: string = Number.MAX_VALUE;\nvar g: number = Number.MIN_VALUE;\nvar h: string = Number.MIN_VALUE;\nvar i: number = Number.NaN;\nvar j: string = Number.NaN;\nvar k: number = Number.EPSILON;\nvar l: string = Number.EPSILON;\n\n`;\n"
  },
  {
    "path": "tests/flow/number_constants/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/number_constants/number_constants.js",
    "content": "var a: number = Number.MAX_SAFE_INTEGER;\nvar b: string = Number.MAX_SAFE_INTEGER;\nvar c: number = Number.MIN_SAFE_INTEGER;\nvar d: string = Number.MIN_SAFE_INTEGER;\nvar e: number = Number.MAX_VALUE;\nvar f: string = Number.MAX_VALUE;\nvar g: number = Number.MIN_VALUE;\nvar h: string = Number.MIN_VALUE;\nvar i: number = Number.NaN;\nvar j: string = Number.NaN;\nvar k: number = Number.EPSILON;\nvar l: string = Number.EPSILON;\n"
  },
  {
    "path": "tests/flow/object-method/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`id.js 1`] = `\ndeclare function id<X>(_: X): X;\n\nmodule.exports = id;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare function id<X>(_: X): X;\n\nmodule.exports = id;\n\n`;\n\nexports[`subtype.js 1`] = `\ninterface Interface {\n  m(): void;\n}\nimport type { ObjectType } from './test';\n\nfunction subtypeCheck(x: Interface): ObjectType { return x; }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface Interface {\n  m(): void\n}\nimport type { ObjectType } from \"./test\";\n\nfunction subtypeCheck(x: Interface): ObjectType {\n  return x;\n}\n\n`;\n\nexports[`test.js 1`] = `\nconst id = require('./id');\n\nexport type ObjectType = {\n  +m: () => void,\n};\n\nfunction methodCaller(x: ObjectType) {\n  x.m();\n};\n\nmodule.exports = id(\n  methodCaller\n);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst id = require(\"./id\");\n\nexport type ObjectType = {\n  +m: () => void\n};\n\nfunction methodCaller(x: ObjectType) {\n  x.m();\n}\n\nmodule.exports = id(methodCaller);\n\n`;\n\nexports[`test2.js 1`] = `\n/* @flow */\n\nfunction f() {\n  return this.p;\n}\n\nvar a = {\n  p: 0,\n  f\n}\n\nvar b = {\n  f\n}\n\na.f(); // okey-dokie\nb.f(); // error, property \\`p\\` not found\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction f() {\n  return this.p;\n}\n\nvar a = {\n  p: 0,\n  f\n};\n\nvar b = {\n  f\n};\n\na.f(); // okey-dokie\nb.f(); // error, property \\`p\\` not found\n\n`;\n\nexports[`test3.js 1`] = `\n/* @flow */\n\nfunction foo() {\n  this.m();\n}\n\nfunction bar(f: () => void) {\n  f(); // passing global object as \\`this\\`\n  ({ f }).f(); // passing container object as \\`this\\`\n}\n\nbar(foo); // error, since \\`this\\` is used non-trivially in \\`foo\\`\n\nfunction qux(o: { f: () => void }) {\n  o.f(); // passing o as \\`this\\`\n}\n\nqux({ f: foo });  // error, since \\`this\\` is used non-trivially in \\`foo\\`\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction foo() {\n  this.m();\n}\n\nfunction bar(f: () => void) {\n  f(); // passing global object as \\`this\\`\n  ({ f }.f()); // passing container object as \\`this\\`\n}\n\nbar(foo); // error, since \\`this\\` is used non-trivially in \\`foo\\`\n\nfunction qux(o: { f: () => void }) {\n  o.f(); // passing o as \\`this\\`\n}\n\nqux({ f: foo }); // error, since \\`this\\` is used non-trivially in \\`foo\\`\n\n`;\n"
  },
  {
    "path": "tests/flow/object-method/id.js",
    "content": "declare function id<X>(_: X): X;\n\nmodule.exports = id;\n"
  },
  {
    "path": "tests/flow/object-method/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow/object-method/subtype.js",
    "content": "interface Interface {\n  m(): void;\n}\nimport type { ObjectType } from './test';\n\nfunction subtypeCheck(x: Interface): ObjectType { return x; }\n"
  },
  {
    "path": "tests/flow/object-method/test.js",
    "content": "const id = require('./id');\n\nexport type ObjectType = {\n  +m: () => void,\n};\n\nfunction methodCaller(x: ObjectType) {\n  x.m();\n};\n\nmodule.exports = id(\n  methodCaller\n);\n"
  },
  {
    "path": "tests/flow/object-method/test2.js",
    "content": "/* @flow */\n\nfunction f() {\n  return this.p;\n}\n\nvar a = {\n  p: 0,\n  f\n}\n\nvar b = {\n  f\n}\n\na.f(); // okey-dokie\nb.f(); // error, property `p` not found\n"
  },
  {
    "path": "tests/flow/object-method/test3.js",
    "content": "/* @flow */\n\nfunction foo() {\n  this.m();\n}\n\nfunction bar(f: () => void) {\n  f(); // passing global object as `this`\n  ({ f }).f(); // passing container object as `this`\n}\n\nbar(foo); // error, since `this` is used non-trivially in `foo`\n\nfunction qux(o: { f: () => void }) {\n  o.f(); // passing o as `this`\n}\n\nqux({ f: foo });  // error, since `this` is used non-trivially in `foo`\n"
  },
  {
    "path": "tests/flow/object_annot/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nfunction foo(x: Array<Object>): Array<Object> {\n    return x.sort((a, b) => a.foo - b.foo);\n}\n\n// Make sure Object works with Object.keys()\nfunction bar(x: Object): Array<string> {\n  return Object.keys(x);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo(x: Array<Object>): Array<Object> {\n  return x.sort((a, b) => a.foo - b.foo);\n}\n\n// Make sure Object works with Object.keys()\nfunction bar(x: Object): Array<string> {\n  return Object.keys(x);\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/object_annot/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/object_annot/test.js",
    "content": "function foo(x: Array<Object>): Array<Object> {\n    return x.sort((a, b) => a.foo - b.foo);\n}\n\n// Make sure Object works with Object.keys()\nfunction bar(x: Object): Array<string> {\n  return Object.keys(x);\n}\n"
  },
  {
    "path": "tests/flow/object_api/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`a.js 1`] = `\n/* @flow */\n\nmodule.exports = { a() {} };~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nmodule.exports = { a() {} };\n\n`;\n\nexports[`b.js 1`] = `\n/* @flow */\n\nvar a = require('./a');\nvar b = Object.assign({ bar() {}, ...{} }, a);\nb.a(); // works here\nmodule.exports = b;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar a = require(\"./a\");\nvar b = Object.assign({ bar() {}, ...{} }, a);\nb.a(); // works here\nmodule.exports = b;\n\n`;\n\nexports[`c.js 1`] = `\n/* @flow */\n\nvar c = require('./b');\nc.a();\nc.foo();~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar c = require(\"./b\");\nc.a();\nc.foo();\n\n`;\n\nexports[`object_assign.js 1`] = `\n/* @flow */\n\nvar export_ = Object.assign({}, {\n    foo: function(param) { return param; }\n});\n\nvar decl_export_: { foo: any; bar: any } = Object.assign({}, export_);\n\nlet anyObj: Object = {};\nObject.assign(anyObj, anyObj); // makes sure this terminates\n\nmodule.exports = export_;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar export_ = Object.assign(\n  {},\n  {\n    foo: function(param) {\n      return param;\n    }\n  }\n);\n\nvar decl_export_: { foo: any, bar: any } = Object.assign({}, export_);\n\nlet anyObj: Object = {};\nObject.assign(anyObj, anyObj); // makes sure this terminates\n\nmodule.exports = export_;\n\n`;\n\nexports[`object_create.js 1`] = `\n/* @flow */\n\nclass C { foo: string; }\n\n// OK, \\`instanceof C\\` would be true\n(Object.create(C.prototype): C);\n\n// OK, \\`instanceof C\\` would be true\n(Object.create(new C): C);\n\n// error, object literals don't structurally match instances\n({ foo: \"foo\" }: C);\n\n// error, object types don't structurally match instances\ntype O = { foo: string; }\ndeclare var o: O;\n(o: C);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nclass C {\n  foo: string;\n}\n\n// OK, \\`instanceof C\\` would be true\n(Object.create(C.prototype): C);\n\n// OK, \\`instanceof C\\` would be true\n(Object.create(new C()): C);\n\n// error, object literals don't structurally match instances\n({ foo: \"foo\" }: C);\n\n// error, object types don't structurally match instances\ntype O = { foo: string };\ndeclare var o: O;\n(o: C);\n\n`;\n\nexports[`object_getprototypeof.js 1`] = `\n// @flow\n\nclass Foo {}\nclass Bar extends Foo {}\n\nlet tests = [\n  function() {\n    const x = new Bar();\n    (Object.getPrototypeOf(x): Foo);\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nclass Foo {}\nclass Bar extends Foo {}\n\nlet tests = [\n  function() {\n    const x = new Bar();\n    (Object.getPrototypeOf(x): Foo);\n  }\n];\n\n`;\n\nexports[`object_keys.js 1`] = `\n/* @flow */\n\nvar sealed = {one: 'one', two: 'two'};\n(Object.keys(sealed): Array<'one'|'two'>);\n(Object.keys(sealed): void); // error, Array<string>\n\nvar unsealed = {};\nObject.keys(unsealed).forEach(k => {\n  (k : number) // error: string ~> number\n});\n\nvar dict: { [k: number]: string } = {};\nObject.keys(dict).forEach(k => {\n  (k : number) // error: string ~> number\n});\n\nvar any: Object = {};\n(Object.keys(any): Array<number>); // error, Array<string>\n\nclass Foo {\n  prop: string;\n  foo() {}\n}\n// constructor and foo not enumerable\n(Object.keys(new Foo()): Array<'error'>); // error: prop ~> error\n\nclass Bar extends Foo {\n  bar_prop: string;\n  bar() {}\n}\n// only own enumerable props\n(Object.keys(new Bar()): Array<'error'>); // error: bar_prop ~> error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar sealed = { one: \"one\", two: \"two\" };\n(Object.keys(sealed): Array<\"one\" | \"two\">);\n(Object.keys(sealed): void); // error, Array<string>\n\nvar unsealed = {};\nObject.keys(unsealed).forEach(k => {\n  (k: number); // error: string ~> number\n});\n\nvar dict: { [k: number]: string } = {};\nObject.keys(dict).forEach(k => {\n  (k: number); // error: string ~> number\n});\n\nvar any: Object = {};\n(Object.keys(any): Array<number>); // error, Array<string>\n\nclass Foo {\n  prop: string;\n  foo() {}\n}\n// constructor and foo not enumerable\n(Object.keys(new Foo()): Array<\"error\">); // error: prop ~> error\n\nclass Bar extends Foo {\n  bar_prop: string;\n  bar() {}\n}\n// only own enumerable props\n(Object.keys(new Bar()): Array<\"error\">); // error: bar_prop ~> error\n\n`;\n\nexports[`object_missing.js 1`] = `\n// @flow\n\nlet tests = [\n  function() {\n    Object.doesNotExist();\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  function() {\n    Object.doesNotExist();\n  }\n];\n\n`;\n\nexports[`object_prototype.js 1`] = `\n/* @flow */\n\nfunction takesABool(x: boolean) {}\nfunction takesAString(x: string) {}\nfunction takesANumber(x: number) {}\nfunction takesAnObject(x: Object) {}\n\nclass Foo {}\n\nvar a = { foo: 'bar' };\nvar b = { foo: 'bar', ...{}};\nvar c = { foo: 'bar', toString: function(): number { return 123; }};\nvar d : { [key: string]: string } = { foo: 'bar' };\nvar x = new Date();\nvar y = new Foo();\n\n//\n// toString\n//\n\n// call\ntakesAString(a.toString());\nd.toString(); // ok, even though dict specifies strings, this is a function\n\n// get\nvar aToString : () => string = a.toString;\nvar aToString2 = a.toString;\ntakesAString(aToString2());\n\n// set\nb.toString = function(): string { return 'foo'; };\nc.toString = function(): number { return 123; };\n\n// override\nvar cToString : () => number = c.toString;\n\n// ... on a built-in instance\nvar xToString : number = x.toString; // error\nvar xToString2 : () => number = x.toString; // error\ntakesAString(x.toString());\n\n// ... on an instance\nvar yToString : number = y.toString; // error\ntakesAString(y.toString());\n\n// ... on a primitive\n(123).toString();\n(123).toString;\n(123).toString = function() {}; // error\n(123).toString(2);\n(123).toString('foo'); // error\n(123).toString(null); // error\n\n\n//\n// hasOwnProperty\n//\n\n// call\ntakesABool(a.hasOwnProperty('foo'));\n\n// get\nvar aHasOwnProperty : (prop: string) => boolean = a.hasOwnProperty;\nvar aHasOwnProperty2 = a.hasOwnProperty;\ntakesABool(aHasOwnProperty2('bar'));\n\n// set\nb.hasOwnProperty = function() { return false; };\n\n// ... on a built-in instance\nvar xHasOwnProperty : number = x.hasOwnProperty; // error\nvar xHasOwnProperty2 : (prop: string) => number = x.hasOwnProperty; // error\ntakesABool(x.hasOwnProperty('foo'));\n\n// ... on an instance\nvar yHasOwnProperty : number = y.hasOwnProperty; // error\ntakesABool(y.hasOwnProperty('foo'));\n\n\n//\n// propertyIsEnumerable\n//\n\n// call\ntakesABool(a.propertyIsEnumerable('foo'));\n\n// get\nvar aPropertyIsEnumerable : (prop: string) => boolean = a.propertyIsEnumerable;\nvar aPropertyIsEnumerable2 = a.propertyIsEnumerable;\ntakesABool(aPropertyIsEnumerable2('bar'));\n\n// set\nb.propertyIsEnumerable = function() { return false; };\n\n// ... on a built-in instance\nvar xPropertyIsEnumerable : number = x.propertyIsEnumerable; // error\nvar xPropertyIsEnumerable2 : (prop: string) => number =\n  x.propertyIsEnumerable; // error\ntakesABool(x.propertyIsEnumerable('foo'));\n\n// ... on an instance\nvar yPropertyIsEnumerable : number = y.propertyIsEnumerable; // error\ntakesABool(y.propertyIsEnumerable('foo'));\n\n\n//\n// valueOf\n//\n\n// call\ntakesAnObject(a.valueOf());\n\n// get\nvar aValueOf : () => Object = a.valueOf;\nvar aValueOf2 = a.valueOf;\ntakesAnObject(aValueOf2());\n\n// set\nb.valueOf = function() { return {}; };\n\n// ... on a built-in instance\nvar xValueOf : number = x.valueOf; // error\ntakesANumber(x.valueOf());\n\n// ... on an instance\nvar yValueOf : number = y.valueOf; // error\ntakesAnObject(y.valueOf());\n\n// ... on a literal\nvar strValueOf : string = (\"foo\").valueOf();\nvar numValueOf : number = (123).valueOf();\nvar boolValueOf : boolean = (true).valueOf();\n\n//\n// toLocaleString\n//\n\n// call\ntakesAString(a.toLocaleString());\n\n// get\nvar aToLocaleString : () => string = a.toLocaleString;\nvar aToLocaleString2 = a.toLocaleString;\ntakesAString(aToLocaleString2());\n\n// set\nb.toLocaleString = function() { return 'derp'; };\n\n// ... on a built-in instance\nvar xToLocaleString : number = x.toLocaleString; // error\nvar xToLocaleString2 : () => number = x.toLocaleString; // error\ntakesAString(x.toLocaleString());\n\n// ... on an instance\nvar yToLocaleString : number = y.toLocaleString; // error\ntakesAString(y.toLocaleString());\n\n\n//\n// constructor\n//\n\nvar k : Object = a.constructor;\n(123).constructor;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction takesABool(x: boolean) {}\nfunction takesAString(x: string) {}\nfunction takesANumber(x: number) {}\nfunction takesAnObject(x: Object) {}\n\nclass Foo {}\n\nvar a = { foo: \"bar\" };\nvar b = { foo: \"bar\", ...{} };\nvar c = {\n  foo: \"bar\",\n  toString: function(): number {\n    return 123;\n  }\n};\nvar d: { [key: string]: string } = { foo: \"bar\" };\nvar x = new Date();\nvar y = new Foo();\n\n//\n// toString\n//\n\n// call\ntakesAString(a.toString());\nd.toString(); // ok, even though dict specifies strings, this is a function\n\n// get\nvar aToString: () => string = a.toString;\nvar aToString2 = a.toString;\ntakesAString(aToString2());\n\n// set\nb.toString = function(): string {\n  return \"foo\";\n};\nc.toString = function(): number {\n  return 123;\n};\n\n// override\nvar cToString: () => number = c.toString;\n\n// ... on a built-in instance\nvar xToString: number = x.toString; // error\nvar xToString2: () => number = x.toString; // error\ntakesAString(x.toString());\n\n// ... on an instance\nvar yToString: number = y.toString; // error\ntakesAString(y.toString());\n\n// ... on a primitive\n(123).toString();\n(123).toString;\n(123).toString = function() {}; // error\n(123).toString(2);\n(123).toString(\"foo\"); // error\n(123).toString(null); // error\n\n//\n// hasOwnProperty\n//\n\n// call\ntakesABool(a.hasOwnProperty(\"foo\"));\n\n// get\nvar aHasOwnProperty: (prop: string) => boolean = a.hasOwnProperty;\nvar aHasOwnProperty2 = a.hasOwnProperty;\ntakesABool(aHasOwnProperty2(\"bar\"));\n\n// set\nb.hasOwnProperty = function() {\n  return false;\n};\n\n// ... on a built-in instance\nvar xHasOwnProperty: number = x.hasOwnProperty; // error\nvar xHasOwnProperty2: (prop: string) => number = x.hasOwnProperty; // error\ntakesABool(x.hasOwnProperty(\"foo\"));\n\n// ... on an instance\nvar yHasOwnProperty: number = y.hasOwnProperty; // error\ntakesABool(y.hasOwnProperty(\"foo\"));\n\n//\n// propertyIsEnumerable\n//\n\n// call\ntakesABool(a.propertyIsEnumerable(\"foo\"));\n\n// get\nvar aPropertyIsEnumerable: (prop: string) => boolean = a.propertyIsEnumerable;\nvar aPropertyIsEnumerable2 = a.propertyIsEnumerable;\ntakesABool(aPropertyIsEnumerable2(\"bar\"));\n\n// set\nb.propertyIsEnumerable = function() {\n  return false;\n};\n\n// ... on a built-in instance\nvar xPropertyIsEnumerable: number = x.propertyIsEnumerable; // error\nvar xPropertyIsEnumerable2: (prop: string) => number = x.propertyIsEnumerable; // error\ntakesABool(x.propertyIsEnumerable(\"foo\"));\n\n// ... on an instance\nvar yPropertyIsEnumerable: number = y.propertyIsEnumerable; // error\ntakesABool(y.propertyIsEnumerable(\"foo\"));\n\n//\n// valueOf\n//\n\n// call\ntakesAnObject(a.valueOf());\n\n// get\nvar aValueOf: () => Object = a.valueOf;\nvar aValueOf2 = a.valueOf;\ntakesAnObject(aValueOf2());\n\n// set\nb.valueOf = function() {\n  return {};\n};\n\n// ... on a built-in instance\nvar xValueOf: number = x.valueOf; // error\ntakesANumber(x.valueOf());\n\n// ... on an instance\nvar yValueOf: number = y.valueOf; // error\ntakesAnObject(y.valueOf());\n\n// ... on a literal\nvar strValueOf: string = \"foo\".valueOf();\nvar numValueOf: number = (123).valueOf();\nvar boolValueOf: boolean = true.valueOf();\n\n//\n// toLocaleString\n//\n\n// call\ntakesAString(a.toLocaleString());\n\n// get\nvar aToLocaleString: () => string = a.toLocaleString;\nvar aToLocaleString2 = a.toLocaleString;\ntakesAString(aToLocaleString2());\n\n// set\nb.toLocaleString = function() {\n  return \"derp\";\n};\n\n// ... on a built-in instance\nvar xToLocaleString: number = x.toLocaleString; // error\nvar xToLocaleString2: () => number = x.toLocaleString; // error\ntakesAString(x.toLocaleString());\n\n// ... on an instance\nvar yToLocaleString: number = y.toLocaleString; // error\ntakesAString(y.toLocaleString());\n\n//\n// constructor\n//\n\nvar k: Object = a.constructor;\n(123).constructor;\n\n`;\n"
  },
  {
    "path": "tests/flow/object_api/a.js",
    "content": "/* @flow */\n\nmodule.exports = { a() {} };"
  },
  {
    "path": "tests/flow/object_api/b.js",
    "content": "/* @flow */\n\nvar a = require('./a');\nvar b = Object.assign({ bar() {}, ...{} }, a);\nb.a(); // works here\nmodule.exports = b;\n"
  },
  {
    "path": "tests/flow/object_api/c.js",
    "content": "/* @flow */\n\nvar c = require('./b');\nc.a();\nc.foo();"
  },
  {
    "path": "tests/flow/object_api/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/object_api/object_assign.js",
    "content": "/* @flow */\n\nvar export_ = Object.assign({}, {\n    foo: function(param) { return param; }\n});\n\nvar decl_export_: { foo: any; bar: any } = Object.assign({}, export_);\n\nlet anyObj: Object = {};\nObject.assign(anyObj, anyObj); // makes sure this terminates\n\nmodule.exports = export_;\n"
  },
  {
    "path": "tests/flow/object_api/object_create.js",
    "content": "/* @flow */\n\nclass C { foo: string; }\n\n// OK, `instanceof C` would be true\n(Object.create(C.prototype): C);\n\n// OK, `instanceof C` would be true\n(Object.create(new C): C);\n\n// error, object literals don't structurally match instances\n({ foo: \"foo\" }: C);\n\n// error, object types don't structurally match instances\ntype O = { foo: string; }\ndeclare var o: O;\n(o: C);\n"
  },
  {
    "path": "tests/flow/object_api/object_getprototypeof.js",
    "content": "// @flow\n\nclass Foo {}\nclass Bar extends Foo {}\n\nlet tests = [\n  function() {\n    const x = new Bar();\n    (Object.getPrototypeOf(x): Foo);\n  },\n];\n"
  },
  {
    "path": "tests/flow/object_api/object_keys.js",
    "content": "/* @flow */\n\nvar sealed = {one: 'one', two: 'two'};\n(Object.keys(sealed): Array<'one'|'two'>);\n(Object.keys(sealed): void); // error, Array<string>\n\nvar unsealed = {};\nObject.keys(unsealed).forEach(k => {\n  (k : number) // error: string ~> number\n});\n\nvar dict: { [k: number]: string } = {};\nObject.keys(dict).forEach(k => {\n  (k : number) // error: string ~> number\n});\n\nvar any: Object = {};\n(Object.keys(any): Array<number>); // error, Array<string>\n\nclass Foo {\n  prop: string;\n  foo() {}\n}\n// constructor and foo not enumerable\n(Object.keys(new Foo()): Array<'error'>); // error: prop ~> error\n\nclass Bar extends Foo {\n  bar_prop: string;\n  bar() {}\n}\n// only own enumerable props\n(Object.keys(new Bar()): Array<'error'>); // error: bar_prop ~> error\n"
  },
  {
    "path": "tests/flow/object_api/object_missing.js",
    "content": "// @flow\n\nlet tests = [\n  function() {\n    Object.doesNotExist();\n  },\n];\n"
  },
  {
    "path": "tests/flow/object_api/object_prototype.js",
    "content": "/* @flow */\n\nfunction takesABool(x: boolean) {}\nfunction takesAString(x: string) {}\nfunction takesANumber(x: number) {}\nfunction takesAnObject(x: Object) {}\n\nclass Foo {}\n\nvar a = { foo: 'bar' };\nvar b = { foo: 'bar', ...{}};\nvar c = { foo: 'bar', toString: function(): number { return 123; }};\nvar d : { [key: string]: string } = { foo: 'bar' };\nvar x = new Date();\nvar y = new Foo();\n\n//\n// toString\n//\n\n// call\ntakesAString(a.toString());\nd.toString(); // ok, even though dict specifies strings, this is a function\n\n// get\nvar aToString : () => string = a.toString;\nvar aToString2 = a.toString;\ntakesAString(aToString2());\n\n// set\nb.toString = function(): string { return 'foo'; };\nc.toString = function(): number { return 123; };\n\n// override\nvar cToString : () => number = c.toString;\n\n// ... on a built-in instance\nvar xToString : number = x.toString; // error\nvar xToString2 : () => number = x.toString; // error\ntakesAString(x.toString());\n\n// ... on an instance\nvar yToString : number = y.toString; // error\ntakesAString(y.toString());\n\n// ... on a primitive\n(123).toString();\n(123).toString;\n(123).toString = function() {}; // error\n(123).toString(2);\n(123).toString('foo'); // error\n(123).toString(null); // error\n\n\n//\n// hasOwnProperty\n//\n\n// call\ntakesABool(a.hasOwnProperty('foo'));\n\n// get\nvar aHasOwnProperty : (prop: string) => boolean = a.hasOwnProperty;\nvar aHasOwnProperty2 = a.hasOwnProperty;\ntakesABool(aHasOwnProperty2('bar'));\n\n// set\nb.hasOwnProperty = function() { return false; };\n\n// ... on a built-in instance\nvar xHasOwnProperty : number = x.hasOwnProperty; // error\nvar xHasOwnProperty2 : (prop: string) => number = x.hasOwnProperty; // error\ntakesABool(x.hasOwnProperty('foo'));\n\n// ... on an instance\nvar yHasOwnProperty : number = y.hasOwnProperty; // error\ntakesABool(y.hasOwnProperty('foo'));\n\n\n//\n// propertyIsEnumerable\n//\n\n// call\ntakesABool(a.propertyIsEnumerable('foo'));\n\n// get\nvar aPropertyIsEnumerable : (prop: string) => boolean = a.propertyIsEnumerable;\nvar aPropertyIsEnumerable2 = a.propertyIsEnumerable;\ntakesABool(aPropertyIsEnumerable2('bar'));\n\n// set\nb.propertyIsEnumerable = function() { return false; };\n\n// ... on a built-in instance\nvar xPropertyIsEnumerable : number = x.propertyIsEnumerable; // error\nvar xPropertyIsEnumerable2 : (prop: string) => number =\n  x.propertyIsEnumerable; // error\ntakesABool(x.propertyIsEnumerable('foo'));\n\n// ... on an instance\nvar yPropertyIsEnumerable : number = y.propertyIsEnumerable; // error\ntakesABool(y.propertyIsEnumerable('foo'));\n\n\n//\n// valueOf\n//\n\n// call\ntakesAnObject(a.valueOf());\n\n// get\nvar aValueOf : () => Object = a.valueOf;\nvar aValueOf2 = a.valueOf;\ntakesAnObject(aValueOf2());\n\n// set\nb.valueOf = function() { return {}; };\n\n// ... on a built-in instance\nvar xValueOf : number = x.valueOf; // error\ntakesANumber(x.valueOf());\n\n// ... on an instance\nvar yValueOf : number = y.valueOf; // error\ntakesAnObject(y.valueOf());\n\n// ... on a literal\nvar strValueOf : string = (\"foo\").valueOf();\nvar numValueOf : number = (123).valueOf();\nvar boolValueOf : boolean = (true).valueOf();\n\n//\n// toLocaleString\n//\n\n// call\ntakesAString(a.toLocaleString());\n\n// get\nvar aToLocaleString : () => string = a.toLocaleString;\nvar aToLocaleString2 = a.toLocaleString;\ntakesAString(aToLocaleString2());\n\n// set\nb.toLocaleString = function() { return 'derp'; };\n\n// ... on a built-in instance\nvar xToLocaleString : number = x.toLocaleString; // error\nvar xToLocaleString2 : () => number = x.toLocaleString; // error\ntakesAString(x.toLocaleString());\n\n// ... on an instance\nvar yToLocaleString : number = y.toLocaleString; // error\ntakesAString(y.toLocaleString());\n\n\n//\n// constructor\n//\n\nvar k : Object = a.constructor;\n(123).constructor;\n"
  },
  {
    "path": "tests/flow/object_assign/A.js",
    "content": "/**\n * @flow\n */\n\nvar EventEmitter = require('events').EventEmitter;\n\n// This pattern seems to cause the trouble.\nvar Bad = Object.assign({}, EventEmitter.prototype, {\n  foo: function(): string { return 'hi'; }\n});\n\n// Calling Bad.foo() in the same file doesn't error\nvar bad: number = Bad.foo();\n\n// Doesn't repro if I extend the class myself\nclass MyEventEmitter extends events$EventEmitter {}\nvar Good = Object.assign({}, MyEventEmitter.prototype, {\n  foo: function(): string { return 'hi'; }\n});\n// Calling Good.foo() in the same file doesn't error\nvar good: number = Good.foo();\n\nmodule.exports = {\n  Bad: Bad,\n  Good: Good,\n};\n"
  },
  {
    "path": "tests/flow/object_assign/B.js",
    "content": "/**\n * @flow\n */\n\nvar A = require('./A.js');\n\nvar good: number = A.Good.foo();\n\nvar f = A.Bad.foo; // Property access is fine\nvar bad_: number = f(); // Calling the function is fine\n\nvar bad: number = A.Bad.foo(); // Method call is not fine\n/*\nB.js|12 col 1 error|  call of method foo\n|| Property not found in\nA.js|8 col 23 error|  object literal\n*/\n"
  },
  {
    "path": "tests/flow/object_assign/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\n/**\n * @flow\n */\n\nvar EventEmitter = require('events').EventEmitter;\n\n// This pattern seems to cause the trouble.\nvar Bad = Object.assign({}, EventEmitter.prototype, {\n  foo: function(): string { return 'hi'; }\n});\n\n// Calling Bad.foo() in the same file doesn't error\nvar bad: number = Bad.foo();\n\n// Doesn't repro if I extend the class myself\nclass MyEventEmitter extends events$EventEmitter {}\nvar Good = Object.assign({}, MyEventEmitter.prototype, {\n  foo: function(): string { return 'hi'; }\n});\n// Calling Good.foo() in the same file doesn't error\nvar good: number = Good.foo();\n\nmodule.exports = {\n  Bad: Bad,\n  Good: Good,\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nvar EventEmitter = require(\"events\").EventEmitter;\n\n// This pattern seems to cause the trouble.\nvar Bad = Object.assign({}, EventEmitter.prototype, {\n  foo: function(): string {\n    return \"hi\";\n  }\n});\n\n// Calling Bad.foo() in the same file doesn't error\nvar bad: number = Bad.foo();\n\n// Doesn't repro if I extend the class myself\nclass MyEventEmitter extends events$EventEmitter {}\nvar Good = Object.assign({}, MyEventEmitter.prototype, {\n  foo: function(): string {\n    return \"hi\";\n  }\n});\n// Calling Good.foo() in the same file doesn't error\nvar good: number = Good.foo();\n\nmodule.exports = {\n  Bad: Bad,\n  Good: Good\n};\n\n`;\n\nexports[`B.js 1`] = `\n/**\n * @flow\n */\n\nvar A = require('./A.js');\n\nvar good: number = A.Good.foo();\n\nvar f = A.Bad.foo; // Property access is fine\nvar bad_: number = f(); // Calling the function is fine\n\nvar bad: number = A.Bad.foo(); // Method call is not fine\n/*\nB.js|12 col 1 error|  call of method foo\n|| Property not found in\nA.js|8 col 23 error|  object literal\n*/\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nvar A = require(\"./A.js\");\n\nvar good: number = A.Good.foo();\n\nvar f = A.Bad.foo; // Property access is fine\nvar bad_: number = f(); // Calling the function is fine\n\nvar bad: number = A.Bad.foo(); // Method call is not fine\n/*\nB.js|12 col 1 error|  call of method foo\n|| Property not found in\nA.js|8 col 23 error|  object literal\n*/\n\n`;\n\nexports[`apply.js 1`] = `\n// @flow\n\n(Object.assign.apply(null, [{}, {a: 1}, {b: 'foo'}]): {a: number, b: string});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n(Object.assign.apply(null, [{}, { a: 1 }, { b: \"foo\" }]): {\n  a: number,\n  b: string\n});\n\n`;\n\nexports[`non_objects.js 1`] = `\n/* @flow */\n\nObject.assign(\"123\", {a: \"foo\"});\nObject.assign(123, {a: \"foo\"});\nObject.assign({a: \"foo\"}, 123);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nObject.assign(\"123\", { a: \"foo\" });\nObject.assign(123, { a: \"foo\" });\nObject.assign({ a: \"foo\" }, 123);\n\n`;\n\nexports[`spread.js 1`] = `\n// @flow\n\ndeclare var arrOfObjs: Array<{ foo: string }>;\ndeclare var roArrOfObjs: $ReadOnlyArray<{foo: string}>;\ndeclare var tup: [{foo: string}, {bar: number}];\n\n(Object.assign({}, ...arrOfObjs): { foo: number}); // Error: string ~> number\n(Object.assign({}, ...roArrOfObjs): { foo: number}); // Error: string ~> number\n(Object.assign({}, ...tup): { foo: string, bar: boolean}); // Error: number ~> boolean\n\n(Object.assign(\n  {},\n  ...[{a: 1}, {b: 'foo'}],\n  ...[{c: true}],\n): {a: number, b: true, c: boolean}); // Error: 'foo' => true\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ndeclare var arrOfObjs: Array<{ foo: string }>;\ndeclare var roArrOfObjs: $ReadOnlyArray<{ foo: string }>;\ndeclare var tup: [{ foo: string }, { bar: number }];\n\n(Object.assign({}, ...arrOfObjs): { foo: number }); // Error: string ~> number\n(Object.assign({}, ...roArrOfObjs): { foo: number }); // Error: string ~> number\n(Object.assign({}, ...tup): { foo: string, bar: boolean }); // Error: number ~> boolean\n\n(Object.assign({}, ...[{ a: 1 }, { b: \"foo\" }], ...[{ c: true }]): {\n  a: number,\n  b: true,\n  c: boolean\n}); // Error: 'foo' => true\n\n`;\n\nexports[`undefined.js 1`] = `\n/* @flow */\n\nvar React = require('react');\n\ntype DefaultProps = {\n  foo: number,\n}\n\ntype Props = {\n  foo: number,\n}\n\nclass MyReactThing extends React.Component {\n  props: Props;\n  static defaultProps: DefaultProps;\n  getFoo(): number { return this.props.foo; }\n}\n\n<MyReactThing />; // works\n<MyReactThing foo={undefined} />; // also works\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar React = require(\"react\");\n\ntype DefaultProps = {\n  foo: number\n};\n\ntype Props = {\n  foo: number\n};\n\nclass MyReactThing extends React.Component {\n  props: Props;\n  static defaultProps: DefaultProps;\n  getFoo(): number {\n    return this.props.foo;\n  }\n}\n\n<MyReactThing />; // works\n<MyReactThing foo={undefined} />; // also works\n\n`;\n"
  },
  {
    "path": "tests/flow/object_assign/apply.js",
    "content": "// @flow\n\n(Object.assign.apply(null, [{}, {a: 1}, {b: 'foo'}]): {a: number, b: string});\n"
  },
  {
    "path": "tests/flow/object_assign/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/object_assign/non_objects.js",
    "content": "/* @flow */\n\nObject.assign(\"123\", {a: \"foo\"});\nObject.assign(123, {a: \"foo\"});\nObject.assign({a: \"foo\"}, 123);\n"
  },
  {
    "path": "tests/flow/object_assign/spread.js",
    "content": "// @flow\n\ndeclare var arrOfObjs: Array<{ foo: string }>;\ndeclare var roArrOfObjs: $ReadOnlyArray<{foo: string}>;\ndeclare var tup: [{foo: string}, {bar: number}];\n\n(Object.assign({}, ...arrOfObjs): { foo: number}); // Error: string ~> number\n(Object.assign({}, ...roArrOfObjs): { foo: number}); // Error: string ~> number\n(Object.assign({}, ...tup): { foo: string, bar: boolean}); // Error: number ~> boolean\n\n(Object.assign(\n  {},\n  ...[{a: 1}, {b: 'foo'}],\n  ...[{c: true}],\n): {a: number, b: true, c: boolean}); // Error: 'foo' => true\n"
  },
  {
    "path": "tests/flow/object_assign/undefined.js",
    "content": "/* @flow */\n\nvar React = require('react');\n\ntype DefaultProps = {\n  foo: number,\n}\n\ntype Props = {\n  foo: number,\n}\n\nclass MyReactThing extends React.Component {\n  props: Props;\n  static defaultProps: DefaultProps;\n  getFoo(): number { return this.props.foo; }\n}\n\n<MyReactThing />; // works\n<MyReactThing foo={undefined} />; // also works\n"
  },
  {
    "path": "tests/flow/object_freeze/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`object_freeze.js 1`] = `\n/* @flow */\n\nvar foo = Object.freeze({bar: '12345'});\nfoo.bar = '23456'; // error\n\nObject.assign(foo, {bar: '12345'}); // error\n\nvar baz = {baz: 12345};\nvar bliffl = Object.freeze({bar: '12345', ...baz});\nbliffl.bar = '23456'; // error\nbliffl.baz = 3456; // error\nbliffl.corge; // error\nbliffl.constructor = baz; // error\nbliffl.toString = function() {}; // error\n\nbaz.baz = 0;\n\nvar x : number = Object.freeze(123);\n\nvar xx : { x: number } = Object.freeze({ x: \"error\" })\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar foo = Object.freeze({ bar: \"12345\" });\nfoo.bar = \"23456\"; // error\n\nObject.assign(foo, { bar: \"12345\" }); // error\n\nvar baz = { baz: 12345 };\nvar bliffl = Object.freeze({ bar: \"12345\", ...baz });\nbliffl.bar = \"23456\"; // error\nbliffl.baz = 3456; // error\nbliffl.corge; // error\nbliffl.constructor = baz; // error\nbliffl.toString = function() {}; // error\n\nbaz.baz = 0;\n\nvar x: number = Object.freeze(123);\n\nvar xx: { x: number } = Object.freeze({ x: \"error\" });\n\n`;\n"
  },
  {
    "path": "tests/flow/object_freeze/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/object_freeze/object_freeze.js",
    "content": "/* @flow */\n\nvar foo = Object.freeze({bar: '12345'});\nfoo.bar = '23456'; // error\n\nObject.assign(foo, {bar: '12345'}); // error\n\nvar baz = {baz: 12345};\nvar bliffl = Object.freeze({bar: '12345', ...baz});\nbliffl.bar = '23456'; // error\nbliffl.baz = 3456; // error\nbliffl.corge; // error\nbliffl.constructor = baz; // error\nbliffl.toString = function() {}; // error\n\nbaz.baz = 0;\n\nvar x : number = Object.freeze(123);\n\nvar xx : { x: number } = Object.freeze({ x: \"error\" })\n"
  },
  {
    "path": "tests/flow/object_is/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`object_is.js 1`] = `\nObject.is(1, 1);\nObject.is(1, 2);\nObject.is(1, {});\nObject.is(1, NaN);\nObject.is(0, 0);\nObject.is(0, -0);\nObject.is(NaN, NaN);\nObject.is({}, {});\n\nvar emptyObject = {};\nvar emptyArray = [];\nObject.is(emptyObject, emptyObject);\nObject.is(emptyArray, emptyArray);\nObject.is(emptyObject, emptyArray);\n\nvar squared = x => x * x;\nObject.is(squared, squared);\n\nvar a: boolean = Object.is('a', 'a');\nvar b: string = Object.is('a', 'a');\nvar c: boolean = Object.is('a');\nvar d: boolean = Object.is('a', 'b', 'c'); // Error - 'c' is unused\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nObject.is(1, 1);\nObject.is(1, 2);\nObject.is(1, {});\nObject.is(1, NaN);\nObject.is(0, 0);\nObject.is(0, -0);\nObject.is(NaN, NaN);\nObject.is({}, {});\n\nvar emptyObject = {};\nvar emptyArray = [];\nObject.is(emptyObject, emptyObject);\nObject.is(emptyArray, emptyArray);\nObject.is(emptyObject, emptyArray);\n\nvar squared = x => x * x;\nObject.is(squared, squared);\n\nvar a: boolean = Object.is(\"a\", \"a\");\nvar b: string = Object.is(\"a\", \"a\");\nvar c: boolean = Object.is(\"a\");\nvar d: boolean = Object.is(\"a\", \"b\", \"c\"); // Error - 'c' is unused\n\n`;\n"
  },
  {
    "path": "tests/flow/object_is/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/object_is/object_is.js",
    "content": "Object.is(1, 1);\nObject.is(1, 2);\nObject.is(1, {});\nObject.is(1, NaN);\nObject.is(0, 0);\nObject.is(0, -0);\nObject.is(NaN, NaN);\nObject.is({}, {});\n\nvar emptyObject = {};\nvar emptyArray = [];\nObject.is(emptyObject, emptyObject);\nObject.is(emptyArray, emptyArray);\nObject.is(emptyObject, emptyArray);\n\nvar squared = x => x * x;\nObject.is(squared, squared);\n\nvar a: boolean = Object.is('a', 'a');\nvar b: string = Object.is('a', 'a');\nvar c: boolean = Object.is('a');\nvar d: boolean = Object.is('a', 'b', 'c'); // Error - 'c' is unused\n"
  },
  {
    "path": "tests/flow/objects/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`compatibility.js 1`] = `\nlet tests = [\n  function(x: { x: { foo: string } }, y: { x: { bar: number } }) {\n    x = y; // 2 errors: \\`foo\\` not found in y.x; \\`bar\\` not found in x.x\n  },\n\n  function(x: { foo: string }, y: { foo: number }) {\n    x = y; // 2 errors: string !~> number; number !~> string\n  },\n\n  function(x: { x: { foo: string } }, y: { x: { foo: number } }) {\n    x = y; // 2 errors: string !~> number; number !~> string\n  },\n\n  function(x: { +foo: string }, y: { +foo: number }) {\n    x = y; // 1 error: number !~> string\n  },\n\n  function(x: { x: { +foo: string } }, y: { x: { +foo: number } }) {\n    x = y; // 2 errors: string !~> number; number !~> string\n  },\n\n  function(x: { -foo: string }, y: { -foo: number }) {\n    x = y; // 1 error: string !~> number\n  },\n\n  function(x: { x: { -foo: string } }, y: { x: { -foo: number } }) {\n    x = y; // 2 errors: string !~> number; number !~> string\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nlet tests = [\n  function(x: { x: { foo: string } }, y: { x: { bar: number } }) {\n    x = y; // 2 errors: \\`foo\\` not found in y.x; \\`bar\\` not found in x.x\n  },\n\n  function(x: { foo: string }, y: { foo: number }) {\n    x = y; // 2 errors: string !~> number; number !~> string\n  },\n\n  function(x: { x: { foo: string } }, y: { x: { foo: number } }) {\n    x = y; // 2 errors: string !~> number; number !~> string\n  },\n\n  function(x: { +foo: string }, y: { +foo: number }) {\n    x = y; // 1 error: number !~> string\n  },\n\n  function(x: { x: { +foo: string } }, y: { x: { +foo: number } }) {\n    x = y; // 2 errors: string !~> number; number !~> string\n  },\n\n  function(x: { -foo: string }, y: { -foo: number }) {\n    x = y; // 1 error: string !~> number\n  },\n\n  function(x: { x: { -foo: string } }, y: { x: { -foo: number } }) {\n    x = y; // 2 errors: string !~> number; number !~> string\n  }\n];\n\n`;\n\nexports[`conversion.js 1`] = `\n/* @flow */\n\n(Object({foo: 'bar'}): {foo: string});\n(Object(\"123\"): String);\n(Object(123): Number);\n(Object(true): Boolean);\n(Object(null): {});\n(Object(undefined): {});\n(Object(void(0)): {});\n(Object(undefined): Number); // error\n\nvar x = Object(null);\nx.foo = \"bar\";\n\nvar y = Object(\"123\");\n(y.charAt(0): string);\n\nvar z = Object(123); // error (next line makes this not match any signatures)\n(z.charAt(0): string);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n(Object({ foo: \"bar\" }): { foo: string });\n(Object(\"123\"): String);\n(Object(123): Number);\n(Object(true): Boolean);\n(Object(null): {});\n(Object(undefined): {});\n(Object(void 0): {});\n(Object(undefined): Number); // error\n\nvar x = Object(null);\nx.foo = \"bar\";\n\nvar y = Object(\"123\");\n(y.charAt(0): string);\n\nvar z = Object(123); // error (next line makes this not match any signatures)\n(z.charAt(0): string);\n\n`;\n\nexports[`objects.js 1`] = `\n/* @flow */\n\nvar x : {'123': string, bar: string} = {'123': 'val', bar: 'bar'};\n(x.foo : string);     // error, key doesn't exist\n(x['foo'] : string);  // error, key doesn't exist\n(x[123] : boolean);   // TODO: use the number's value to error here\n(x.bar: boolean);     // error, string !~> boolean\n(x['123'] : boolean); // error, string !~> boolean\nx['123'] = false;     // error, boolean !~> string\nx[123] = false;       // TODO: use the number's value to error here\nx['foo'+'bar'] = 'derp'; // ok since we can't tell\n(x[\\`foo\\`]: string);   // error, key doesn't exist\n\nvar y : {foo: string} = {foo: 'bar'};\ny['foo'] = 123; // error, number !~> string\ny['bar'] = 'abc'; // error, property not found\n\n(y['hasOwnProperty']: string); // error, prototype method is not a string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar x: { \"123\": string, bar: string } = { \"123\": \"val\", bar: \"bar\" };\n(x.foo: string); // error, key doesn't exist\n(x[\"foo\"]: string); // error, key doesn't exist\n(x[123]: boolean); // TODO: use the number's value to error here\n(x.bar: boolean); // error, string !~> boolean\n(x[\"123\"]: boolean); // error, string !~> boolean\nx[\"123\"] = false; // error, boolean !~> string\nx[123] = false; // TODO: use the number's value to error here\nx[\"foo\" + \"bar\"] = \"derp\"; // ok since we can't tell\n(x[\\`foo\\`]: string); // error, key doesn't exist\n\nvar y: { foo: string } = { foo: \"bar\" };\ny[\"foo\"] = 123; // error, number !~> string\ny[\"bar\"] = \"abc\"; // error, property not found\n\n(y[\"hasOwnProperty\"]: string); // error, prototype method is not a string\n\n`;\n\nexports[`unaliased_assign.js 1`] = `\n/**\n * test handling of unaliased value assignment.\n *\n * An unaliased object rvalue may be assigned to a supertype lvalue,\n * because later widening mutations on the rvalue can't break assumptions\n * made by other lvalues.\n *\n * However, upon assignment the rvalue must take on the type of the\n * lvalue, to avoid both false positives and false negatives\n * (unsoundness), as shown below.\n *\n * @flow\n */\n\nvar glob: { x: string } = { x: \"hey\" };\n\nfunction assign_then_alias() {\n  var obj: { x: string | number };\n  obj = { x: \"hey\" };\n  glob = obj;    // error: subsequent assignment might make glob.x a number\n}\n\nfunction assign_then_widen() {\n  var obj: { x: string | number };\n  obj = { x: \"hey\" };\n  obj.x = 10;  // ok, by lvalue's given type\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * test handling of unaliased value assignment.\n *\n * An unaliased object rvalue may be assigned to a supertype lvalue,\n * because later widening mutations on the rvalue can't break assumptions\n * made by other lvalues.\n *\n * However, upon assignment the rvalue must take on the type of the\n * lvalue, to avoid both false positives and false negatives\n * (unsoundness), as shown below.\n *\n * @flow\n */\n\nvar glob: { x: string } = { x: \"hey\" };\n\nfunction assign_then_alias() {\n  var obj: { x: string | number };\n  obj = { x: \"hey\" };\n  glob = obj; // error: subsequent assignment might make glob.x a number\n}\n\nfunction assign_then_widen() {\n  var obj: { x: string | number };\n  obj = { x: \"hey\" };\n  obj.x = 10; // ok, by lvalue's given type\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/objects/compatibility.js",
    "content": "let tests = [\n  function(x: { x: { foo: string } }, y: { x: { bar: number } }) {\n    x = y; // 2 errors: `foo` not found in y.x; `bar` not found in x.x\n  },\n\n  function(x: { foo: string }, y: { foo: number }) {\n    x = y; // 2 errors: string !~> number; number !~> string\n  },\n\n  function(x: { x: { foo: string } }, y: { x: { foo: number } }) {\n    x = y; // 2 errors: string !~> number; number !~> string\n  },\n\n  function(x: { +foo: string }, y: { +foo: number }) {\n    x = y; // 1 error: number !~> string\n  },\n\n  function(x: { x: { +foo: string } }, y: { x: { +foo: number } }) {\n    x = y; // 2 errors: string !~> number; number !~> string\n  },\n\n  function(x: { -foo: string }, y: { -foo: number }) {\n    x = y; // 1 error: string !~> number\n  },\n\n  function(x: { x: { -foo: string } }, y: { x: { -foo: number } }) {\n    x = y; // 2 errors: string !~> number; number !~> string\n  },\n];\n"
  },
  {
    "path": "tests/flow/objects/conversion.js",
    "content": "/* @flow */\n\n(Object({foo: 'bar'}): {foo: string});\n(Object(\"123\"): String);\n(Object(123): Number);\n(Object(true): Boolean);\n(Object(null): {});\n(Object(undefined): {});\n(Object(void(0)): {});\n(Object(undefined): Number); // error\n\nvar x = Object(null);\nx.foo = \"bar\";\n\nvar y = Object(\"123\");\n(y.charAt(0): string);\n\nvar z = Object(123); // error (next line makes this not match any signatures)\n(z.charAt(0): string);\n"
  },
  {
    "path": "tests/flow/objects/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/objects/objects.js",
    "content": "/* @flow */\n\nvar x : {'123': string, bar: string} = {'123': 'val', bar: 'bar'};\n(x.foo : string);     // error, key doesn't exist\n(x['foo'] : string);  // error, key doesn't exist\n(x[123] : boolean);   // TODO: use the number's value to error here\n(x.bar: boolean);     // error, string !~> boolean\n(x['123'] : boolean); // error, string !~> boolean\nx['123'] = false;     // error, boolean !~> string\nx[123] = false;       // TODO: use the number's value to error here\nx['foo'+'bar'] = 'derp'; // ok since we can't tell\n(x[`foo`]: string);   // error, key doesn't exist\n\nvar y : {foo: string} = {foo: 'bar'};\ny['foo'] = 123; // error, number !~> string\ny['bar'] = 'abc'; // error, property not found\n\n(y['hasOwnProperty']: string); // error, prototype method is not a string\n"
  },
  {
    "path": "tests/flow/objects/unaliased_assign.js",
    "content": "/**\n * test handling of unaliased value assignment.\n *\n * An unaliased object rvalue may be assigned to a supertype lvalue,\n * because later widening mutations on the rvalue can't break assumptions\n * made by other lvalues.\n *\n * However, upon assignment the rvalue must take on the type of the\n * lvalue, to avoid both false positives and false negatives\n * (unsoundness), as shown below.\n *\n * @flow\n */\n\nvar glob: { x: string } = { x: \"hey\" };\n\nfunction assign_then_alias() {\n  var obj: { x: string | number };\n  obj = { x: \"hey\" };\n  glob = obj;    // error: subsequent assignment might make glob.x a number\n}\n\nfunction assign_then_widen() {\n  var obj: { x: string | number };\n  obj = { x: \"hey\" };\n  obj.x = 10;  // ok, by lvalue's given type\n}\n"
  },
  {
    "path": "tests/flow/objmap/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`objmap.js 1`] = `\ndeclare function promiseAllByKey<O>(o: O): Promise<$ObjMap<O,typeof $await>>;\ndeclare function keyMirror<O>(o: O): $ObjMapi<O, <K>(k:K) => K>;\n\nvar o = keyMirror({\n  FOO: null,\n  BAR: null,\n});\n\n(o.FOO : 'FOO'); // ok\n(o.FOO : 'BAR'); // error, 'FOO' incompatible with 'BAR'\n\npromiseAllByKey({\n  foo: Promise.resolve(0),\n  bar: 'bar',\n}).then(o => {\n  (o.foo: string); // error, number ~> string\n  (o.bar: 'bar'); // ok\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare function promiseAllByKey<O>(o: O): Promise<$ObjMap<O, typeof $await>>;\ndeclare function keyMirror<O>(o: O): $ObjMapi<O, <K>(k: K) => K>;\n\nvar o = keyMirror({\n  FOO: null,\n  BAR: null\n});\n\n(o.FOO: \"FOO\"); // ok\n(o.FOO: \"BAR\"); // error, 'FOO' incompatible with 'BAR'\n\npromiseAllByKey({\n  foo: Promise.resolve(0),\n  bar: \"bar\"\n}).then(o => {\n  (o.foo: string); // error, number ~> string\n  (o.bar: \"bar\"); // ok\n});\n\n`;\n"
  },
  {
    "path": "tests/flow/objmap/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/objmap/objmap.js",
    "content": "declare function promiseAllByKey<O>(o: O): Promise<$ObjMap<O,typeof $await>>;\ndeclare function keyMirror<O>(o: O): $ObjMapi<O, <K>(k:K) => K>;\n\nvar o = keyMirror({\n  FOO: null,\n  BAR: null,\n});\n\n(o.FOO : 'FOO'); // ok\n(o.FOO : 'BAR'); // error, 'FOO' incompatible with 'BAR'\n\npromiseAllByKey({\n  foo: Promise.resolve(0),\n  bar: 'bar',\n}).then(o => {\n  (o.foo: string); // error, number ~> string\n  (o.bar: 'bar'); // ok\n});\n"
  },
  {
    "path": "tests/flow/optional/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`client_optional.js 1`] = `\nvar qux = require('./optional');\n\nqux(0);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar qux = require(\"./optional\");\n\nqux(0);\n\n`;\n\nexports[`default.js 1`] = `\nfunction f<T>(foo, bar = foo): [T, T] {\n  return [foo, bar];\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction f<T>(foo, bar = foo): [T, T] {\n  return [foo, bar];\n}\n\n`;\n\nexports[`generic.js 1`] = `\nfunction x<T>(x: T = 0) {}\n\nclass C {\n  x<T>(x: T = 0) {}\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction x<T>(x: T = 0) {}\n\nclass C {\n  x<T>(x: T = 0) {}\n}\n\n`;\n\nexports[`loop.js 1`] = `\n/* Regression test. Improper handling of OptionalT repositioning can cause\n * reasons to grow \"optional x\" -> \"optional optional x\" -> \"optional optional\n * optional x\", which thwarts reason-based caches that prevent nontermination.\n */\nfunction f<T:*>(x:T,y?:T) { x = y }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* Regression test. Improper handling of OptionalT repositioning can cause\n * reasons to grow \"optional x\" -> \"optional optional x\" -> \"optional optional\n * optional x\", which thwarts reason-based caches that prevent nontermination.\n */\nfunction f<T: *>(x: T, y?: T) {\n  x = y;\n}\n\n`;\n\nexports[`maybe.js 1`] = `\nfunction foo(x?: string): ?string {\n    return x;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo(x?: string): ?string {\n  return x;\n}\n\n`;\n\nexports[`nullable.js 1`] = `\n/* @flow */\n\nfunction optionalNullable1(x: {y?: ?number}) {\n  if (x.y !== null && x.y !== undefined) {\n    x.y++;\n  }\n}\n\nfunction optionalNullable2(x: {y?: ?number}) {\n  if (x.y !== undefined && x.y !== null) {\n    x.y++;\n  }\n}\n\nfunction optionalNullable3(x: {y?: ?number}) {\n  if (!(x.y !== null && x.y !== undefined)) {\n    x.y++; // should error\n  }\n}\n\nfunction optionalNullable4(x: {y?: ?number}) {\n  if (!(x.y !== undefined && x.y !== null)) {\n    x.y++; // should error\n  }\n}\n\nfunction optionalNullable5(x: {y?: ?number}) {\n  if (x.y === null || x.y === undefined) {\n    x.y++; // should error\n  }\n}\n\nfunction optionalNullable6(x: {y?: ?number}) {\n  if (x.y === undefined || x.y === null) {\n    x.y++; // should error\n  }\n}\n\nfunction optionalNullable7(x: {y?: ?number}) {\n  if (!(x.y === null || x.y === undefined)) {\n    x.y++;\n  }\n}\n\nfunction optionalNullable8(x: {y?: ?number}) {\n  if (!(x.y === undefined || x.y === null)) {\n    x.y++;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction optionalNullable1(x: { y?: ?number }) {\n  if (x.y !== null && x.y !== undefined) {\n    x.y++;\n  }\n}\n\nfunction optionalNullable2(x: { y?: ?number }) {\n  if (x.y !== undefined && x.y !== null) {\n    x.y++;\n  }\n}\n\nfunction optionalNullable3(x: { y?: ?number }) {\n  if (!(x.y !== null && x.y !== undefined)) {\n    x.y++; // should error\n  }\n}\n\nfunction optionalNullable4(x: { y?: ?number }) {\n  if (!(x.y !== undefined && x.y !== null)) {\n    x.y++; // should error\n  }\n}\n\nfunction optionalNullable5(x: { y?: ?number }) {\n  if (x.y === null || x.y === undefined) {\n    x.y++; // should error\n  }\n}\n\nfunction optionalNullable6(x: { y?: ?number }) {\n  if (x.y === undefined || x.y === null) {\n    x.y++; // should error\n  }\n}\n\nfunction optionalNullable7(x: { y?: ?number }) {\n  if (!(x.y === null || x.y === undefined)) {\n    x.y++;\n  }\n}\n\nfunction optionalNullable8(x: { y?: ?number }) {\n  if (!(x.y === undefined || x.y === null)) {\n    x.y++;\n  }\n}\n\n`;\n\nexports[`optional.js 1`] = `\nfunction bar(x?,y?) { x * 0; }\nbar(0);\n\nvar foo:(x?:number)=>void = bar;\nfoo();\n\nfunction qux(x=\"hello\",...y):string { foo(x); return y[0]; }\n\nqux(0,0); // Error, number ~> string\nqux(0,...[42, \"\"]); // Error, number ~> string\nqux(0,...[\"\",42]); // No error\n\nmodule.exports = qux;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction bar(x?, y?) {\n  x * 0;\n}\nbar(0);\n\nvar foo: (x?: number) => void = bar;\nfoo();\n\nfunction qux(x = \"hello\", ...y): string {\n  foo(x);\n  return y[0];\n}\n\nqux(0, 0); // Error, number ~> string\nqux(0, ...[42, \"\"]); // Error, number ~> string\nqux(0, ...[\"\", 42]); // No error\n\nmodule.exports = qux;\n\n`;\n\nexports[`optional_param.js 1`] = `\n/* @flow */\nfunction foo(x?: string): string {\n    if (x == null) { return 'foo'; }\n    return x;\n}\n\nfunction bar(obj: {x?: string}): string {\n    if (obj.x == null) { return 'foo'; }\n    return obj.x;\n}\n\nfunction baz(bar?) {\n    if (!bar) { return 1; }\n    return bar.duck\n}\n\nfunction testOptionalNullable(x?: ?string): string {\n    if (x == null) { return 'foo'; }\n    return x;\n}\n\nfunction testOptionalNullableDefault(x?: ?string = \"hi\"): string {\n    if (x == null) { return 'foo'; }\n    return x;\n}\n\nfunction testOptionalNullableProperty(obj: {x?: ?string}): string {\n    if (obj.x == null) { return 'foo'; }\n    return obj.x;\n}\n\nfunction testOptionalNullableFlowingToNullable(x?: ?string): ?string {\n  var f = function(y: ?string) {};\n  f(x);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nfunction foo(x?: string): string {\n  if (x == null) {\n    return \"foo\";\n  }\n  return x;\n}\n\nfunction bar(obj: { x?: string }): string {\n  if (obj.x == null) {\n    return \"foo\";\n  }\n  return obj.x;\n}\n\nfunction baz(bar?) {\n  if (!bar) {\n    return 1;\n  }\n  return bar.duck;\n}\n\nfunction testOptionalNullable(x?: ?string): string {\n  if (x == null) {\n    return \"foo\";\n  }\n  return x;\n}\n\nfunction testOptionalNullableDefault(x?: ?string = \"hi\"): string {\n  if (x == null) {\n    return \"foo\";\n  }\n  return x;\n}\n\nfunction testOptionalNullableProperty(obj: { x?: ?string }): string {\n  if (obj.x == null) {\n    return \"foo\";\n  }\n  return obj.x;\n}\n\nfunction testOptionalNullableFlowingToNullable(x?: ?string): ?string {\n  var f = function(y: ?string) {};\n  f(x);\n}\n\n`;\n\nexports[`optional_param2.js 1`] = `\ndeclare class I<V> {\n    map<M>(\n        mapper: (value?: V) => M\n    ): I<M>;\n}\nvar i:I<number> = new I();\nvar j:I<number> = i.map(id => id);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class I<V> {\n  map<M>(mapper: (value?: V) => M): I<M>\n}\nvar i: I<number> = new I();\nvar j: I<number> = i.map(id => id);\n\n`;\n\nexports[`optional_param3.js 1`] = `\nfunction foo(x?: number) {}\nfoo(undefined); // ok\n\nfunction bar(x = \"bar\"): string {\n  return x;\n}\nbar(undefined); // ok\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo(x?: number) {}\nfoo(undefined); // ok\n\nfunction bar(x = \"bar\"): string {\n  return x;\n}\nbar(undefined); // ok\n\n`;\n\nexports[`optional_param4.js 1`] = `\n/* @flow */\n\nfunction foo(x?: number, ...y: Array<string>): [?number, Array<string>] {\n  return [x, y];\n}\n\nfoo(); // OK\nfoo(123), // OK\nfoo(123, 'hello'); // OK\n\n\nfoo(true); // ERROR boolean ~> number\nfoo(123, true); // ERROR boolean ~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction foo(x?: number, ...y: Array<string>): [?number, Array<string>] {\n  return [x, y];\n}\n\nfoo(); // OK\nfoo(123), // OK\n  foo(123, \"hello\"); // OK\n\nfoo(true); // ERROR boolean ~> number\nfoo(123, true); // ERROR boolean ~> string\n\n`;\n\nexports[`undefined.js 1`] = `\nvar x;\n\nfunction foo(bar? = undefined) {\n    x = bar;\n}\n\nfunction bar() {\n    return x.duck;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x;\n\nfunction foo(bar? = undefined) {\n  x = bar;\n}\n\nfunction bar() {\n  return x.duck;\n}\n\n`;\n\nexports[`undefined2.js 1`] = `\nvar x;\n\nfunction foo(bar?) {\n    x = bar;\n}\n\nfunction bar() {\n    return x.duck;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x;\n\nfunction foo(bar?) {\n  x = bar;\n}\n\nfunction bar() {\n  return x.duck;\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/optional/client_optional.js",
    "content": "var qux = require('./optional');\n\nqux(0);\n"
  },
  {
    "path": "tests/flow/optional/default.js",
    "content": "function f<T>(foo, bar = foo): [T, T] {\n  return [foo, bar];\n}\n"
  },
  {
    "path": "tests/flow/optional/generic.js",
    "content": "function x<T>(x: T = 0) {}\n\nclass C {\n  x<T>(x: T = 0) {}\n}\n"
  },
  {
    "path": "tests/flow/optional/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/optional/loop.js",
    "content": "/* Regression test. Improper handling of OptionalT repositioning can cause\n * reasons to grow \"optional x\" -> \"optional optional x\" -> \"optional optional\n * optional x\", which thwarts reason-based caches that prevent nontermination.\n */\nfunction f<T:*>(x:T,y?:T) { x = y }\n"
  },
  {
    "path": "tests/flow/optional/maybe.js",
    "content": "function foo(x?: string): ?string {\n    return x;\n}\n"
  },
  {
    "path": "tests/flow/optional/nullable.js",
    "content": "/* @flow */\n\nfunction optionalNullable1(x: {y?: ?number}) {\n  if (x.y !== null && x.y !== undefined) {\n    x.y++;\n  }\n}\n\nfunction optionalNullable2(x: {y?: ?number}) {\n  if (x.y !== undefined && x.y !== null) {\n    x.y++;\n  }\n}\n\nfunction optionalNullable3(x: {y?: ?number}) {\n  if (!(x.y !== null && x.y !== undefined)) {\n    x.y++; // should error\n  }\n}\n\nfunction optionalNullable4(x: {y?: ?number}) {\n  if (!(x.y !== undefined && x.y !== null)) {\n    x.y++; // should error\n  }\n}\n\nfunction optionalNullable5(x: {y?: ?number}) {\n  if (x.y === null || x.y === undefined) {\n    x.y++; // should error\n  }\n}\n\nfunction optionalNullable6(x: {y?: ?number}) {\n  if (x.y === undefined || x.y === null) {\n    x.y++; // should error\n  }\n}\n\nfunction optionalNullable7(x: {y?: ?number}) {\n  if (!(x.y === null || x.y === undefined)) {\n    x.y++;\n  }\n}\n\nfunction optionalNullable8(x: {y?: ?number}) {\n  if (!(x.y === undefined || x.y === null)) {\n    x.y++;\n  }\n}\n"
  },
  {
    "path": "tests/flow/optional/optional.js",
    "content": "function bar(x?,y?) { x * 0; }\nbar(0);\n\nvar foo:(x?:number)=>void = bar;\nfoo();\n\nfunction qux(x=\"hello\",...y):string { foo(x); return y[0]; }\n\nqux(0,0); // Error, number ~> string\nqux(0,...[42, \"\"]); // Error, number ~> string\nqux(0,...[\"\",42]); // No error\n\nmodule.exports = qux;\n"
  },
  {
    "path": "tests/flow/optional/optional_param.js",
    "content": "/* @flow */\nfunction foo(x?: string): string {\n    if (x == null) { return 'foo'; }\n    return x;\n}\n\nfunction bar(obj: {x?: string}): string {\n    if (obj.x == null) { return 'foo'; }\n    return obj.x;\n}\n\nfunction baz(bar?) {\n    if (!bar) { return 1; }\n    return bar.duck\n}\n\nfunction testOptionalNullable(x?: ?string): string {\n    if (x == null) { return 'foo'; }\n    return x;\n}\n\nfunction testOptionalNullableDefault(x?: ?string = \"hi\"): string {\n    if (x == null) { return 'foo'; }\n    return x;\n}\n\nfunction testOptionalNullableProperty(obj: {x?: ?string}): string {\n    if (obj.x == null) { return 'foo'; }\n    return obj.x;\n}\n\nfunction testOptionalNullableFlowingToNullable(x?: ?string): ?string {\n  var f = function(y: ?string) {};\n  f(x);\n}\n"
  },
  {
    "path": "tests/flow/optional/optional_param2.js",
    "content": "declare class I<V> {\n    map<M>(\n        mapper: (value?: V) => M\n    ): I<M>;\n}\nvar i:I<number> = new I();\nvar j:I<number> = i.map(id => id);\n"
  },
  {
    "path": "tests/flow/optional/optional_param3.js",
    "content": "function foo(x?: number) {}\nfoo(undefined); // ok\n\nfunction bar(x = \"bar\"): string {\n  return x;\n}\nbar(undefined); // ok\n"
  },
  {
    "path": "tests/flow/optional/optional_param4.js",
    "content": "/* @flow */\n\nfunction foo(x?: number, ...y: Array<string>): [?number, Array<string>] {\n  return [x, y];\n}\n\nfoo(); // OK\nfoo(123), // OK\nfoo(123, 'hello'); // OK\n\n\nfoo(true); // ERROR boolean ~> number\nfoo(123, true); // ERROR boolean ~> string\n"
  },
  {
    "path": "tests/flow/optional/undefined.js",
    "content": "var x;\n\nfunction foo(bar? = undefined) {\n    x = bar;\n}\n\nfunction bar() {\n    return x.duck;\n}\n"
  },
  {
    "path": "tests/flow/optional/undefined2.js",
    "content": "var x;\n\nfunction foo(bar?) {\n    x = bar;\n}\n\nfunction bar() {\n    return x.duck;\n}\n"
  },
  {
    "path": "tests/flow/optional_props/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nvar x: { } = { foo: 0 };\nvar y: { foo?: string } = x; // OK in TypeScript, not OK in Flow\n\nvar z: string = y.foo || \"\";\n\nvar o = { };\ny = o; // OK; we know that narrowing could not have happened\no.foo = 0; // future widening is constrained\n\nfunction bar(config: { foo?: number }) {}\nbar({});\nbar({foo: \"\"});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x: {} = { foo: 0 };\nvar y: { foo?: string } = x; // OK in TypeScript, not OK in Flow\n\nvar z: string = y.foo || \"\";\n\nvar o = {};\ny = o; // OK; we know that narrowing could not have happened\no.foo = 0; // future widening is constrained\n\nfunction bar(config: { foo?: number }) {}\nbar({});\nbar({ foo: \"\" });\n\n`;\n\nexports[`test2.js 1`] = `\nvar a: { foo?: string } = {};\na.foo = undefined; // This is not an error\na.foo = null; // But this is an error\n\nvar b: { foo?: ?string } = {};\nb.foo = undefined; // This is fine\nb.foo = null; // Also fine\n\nvar c: { foo?: string } = { foo: undefined }; // This is not an error\nvar d: { foo?: string } = { foo: null }; // But this is an error\n\nvar e: { foo?: ?string } = { foo: undefined }; // This is fine\nvar f: { foo?: ?string } = { foo: null }; // Also fine\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar a: { foo?: string } = {};\na.foo = undefined; // This is not an error\na.foo = null; // But this is an error\n\nvar b: { foo?: ?string } = {};\nb.foo = undefined; // This is fine\nb.foo = null; // Also fine\n\nvar c: { foo?: string } = { foo: undefined }; // This is not an error\nvar d: { foo?: string } = { foo: null }; // But this is an error\n\nvar e: { foo?: ?string } = { foo: undefined }; // This is fine\nvar f: { foo?: ?string } = { foo: null }; // Also fine\n\n`;\n\nexports[`test3.js 1`] = `\n// @flow\n\n/*\n   object literals are sealed. this is simply a heuristic\n   decision: most of the time, the rule gives the 'right'\n   errors.\n\n   an exception is when a literal is used as an initializer\n   for an lvalue whose type specifies optional properties\n   missing from the literal, as below.\n\n   the problem becomes visible when a property assignment\n   is then used to (legitimately) extend the object with an\n   optional property - the variable's specific (path-\n   dependent) type has become that of the literal which.\n   without adjustment, will reject the property addition.\n\n   the solution in cases where a sealed object type (as from\n   an object literal) flows to an object type with optional\n   properties, is to have the sealed type acquire the optional\n   properties.\n */\n\n// x has optional property b.\n// (note that the initializer here does not play into\n// the problem, it's just a placeholder. initializers\n// do not narrow the types of annotated variables as do\n// subsequent assignments.)\n//\nvar x: { a: number, b?: number } = { a: 0 };\n\n// now assign an object literal lacking property b.\n// the literal's type is sealed and has only a at creation.\n// but it then flows, specific ~> general, to x's annotation\n// type. at that point, it acquires b as an optional property.\n//\nx = { a: 0 };\n\n// ...which allows this assignment to take place.\nx.b = 1;\n\n// T7810506\nclass A {\n    x: { a: number, b?: string };\n    foo() {\n        // Something similar should happen here, but doesn't: the problem is\n        // made explicit by adding generics (see test3_failure.js introduced by\n        // D2747512). There is a race between writing b on the object literal\n        // type and adding b as an optional property to it, since in general we\n        // cannot guarantee that the flow from the object literal to the\n        // annotation will be processed before the flow involving the\n        // access. Here we lose the race and get an error on the write.\n        this.x = { a: 123 };\n        this.x.b = 'hello';\n    }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n/*\n   object literals are sealed. this is simply a heuristic\n   decision: most of the time, the rule gives the 'right'\n   errors.\n\n   an exception is when a literal is used as an initializer\n   for an lvalue whose type specifies optional properties\n   missing from the literal, as below.\n\n   the problem becomes visible when a property assignment\n   is then used to (legitimately) extend the object with an\n   optional property - the variable's specific (path-\n   dependent) type has become that of the literal which.\n   without adjustment, will reject the property addition.\n\n   the solution in cases where a sealed object type (as from\n   an object literal) flows to an object type with optional\n   properties, is to have the sealed type acquire the optional\n   properties.\n */\n\n// x has optional property b.\n// (note that the initializer here does not play into\n// the problem, it's just a placeholder. initializers\n// do not narrow the types of annotated variables as do\n// subsequent assignments.)\n//\nvar x: { a: number, b?: number } = { a: 0 };\n\n// now assign an object literal lacking property b.\n// the literal's type is sealed and has only a at creation.\n// but it then flows, specific ~> general, to x's annotation\n// type. at that point, it acquires b as an optional property.\n//\nx = { a: 0 };\n\n// ...which allows this assignment to take place.\nx.b = 1;\n\n// T7810506\nclass A {\n  x: { a: number, b?: string };\n  foo() {\n    // Something similar should happen here, but doesn't: the problem is\n    // made explicit by adding generics (see test3_failure.js introduced by\n    // D2747512). There is a race between writing b on the object literal\n    // type and adding b as an optional property to it, since in general we\n    // cannot guarantee that the flow from the object literal to the\n    // annotation will be processed before the flow involving the\n    // access. Here we lose the race and get an error on the write.\n    this.x = { a: 123 };\n    this.x.b = \"hello\";\n  }\n}\n\n`;\n\nexports[`test3_exact_annot.js 1`] = `\n/* The logic that allows ({}: {p?:T}), described in test3.js, should _not_ also\n   fire for exact annotations. */\n\nconst a: {| a: number |} = { a: 1 };\nconst b: { a: number, b?: number } = a; // error: property \\`b\\` not found\nb.b = 0; // because subsequent writes would widen the exact object\n(a.b: number); // error: property \\`b\\` not found\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* The logic that allows ({}: {p?:T}), described in test3.js, should _not_ also\n   fire for exact annotations. */\n\nconst a: {| a: number |} = { a: 1 };\nconst b: { a: number, b?: number } = a; // error: property \\`b\\` not found\nb.b = 0; // because subsequent writes would widen the exact object\n(a.b: number); // error: property \\`b\\` not found\n\n`;\n\nexports[`test3_failure.js 1`] = `\n// generalization of failure in test3.js\n\nclass A<O: {x: { a: number, b?: string}}> {\n  o: O;\n  foo() {\n    this.o.x = { a: 123 };\n    this.o.x.b = 'hello'; // this is a spurious error (see test3.js for details)\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// generalization of failure in test3.js\n\nclass A<O: { x: { a: number, b?: string } }> {\n  o: O;\n  foo() {\n    this.o.x = { a: 123 };\n    this.o.x.b = \"hello\"; // this is a spurious error (see test3.js for details)\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/optional_props/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/optional_props/test.js",
    "content": "var x: { } = { foo: 0 };\nvar y: { foo?: string } = x; // OK in TypeScript, not OK in Flow\n\nvar z: string = y.foo || \"\";\n\nvar o = { };\ny = o; // OK; we know that narrowing could not have happened\no.foo = 0; // future widening is constrained\n\nfunction bar(config: { foo?: number }) {}\nbar({});\nbar({foo: \"\"});\n"
  },
  {
    "path": "tests/flow/optional_props/test2.js",
    "content": "var a: { foo?: string } = {};\na.foo = undefined; // This is not an error\na.foo = null; // But this is an error\n\nvar b: { foo?: ?string } = {};\nb.foo = undefined; // This is fine\nb.foo = null; // Also fine\n\nvar c: { foo?: string } = { foo: undefined }; // This is not an error\nvar d: { foo?: string } = { foo: null }; // But this is an error\n\nvar e: { foo?: ?string } = { foo: undefined }; // This is fine\nvar f: { foo?: ?string } = { foo: null }; // Also fine\n"
  },
  {
    "path": "tests/flow/optional_props/test3.js",
    "content": "// @flow\n\n/*\n   object literals are sealed. this is simply a heuristic\n   decision: most of the time, the rule gives the 'right'\n   errors.\n\n   an exception is when a literal is used as an initializer\n   for an lvalue whose type specifies optional properties\n   missing from the literal, as below.\n\n   the problem becomes visible when a property assignment\n   is then used to (legitimately) extend the object with an\n   optional property - the variable's specific (path-\n   dependent) type has become that of the literal which.\n   without adjustment, will reject the property addition.\n\n   the solution in cases where a sealed object type (as from\n   an object literal) flows to an object type with optional\n   properties, is to have the sealed type acquire the optional\n   properties.\n */\n\n// x has optional property b.\n// (note that the initializer here does not play into\n// the problem, it's just a placeholder. initializers\n// do not narrow the types of annotated variables as do\n// subsequent assignments.)\n//\nvar x: { a: number, b?: number } = { a: 0 };\n\n// now assign an object literal lacking property b.\n// the literal's type is sealed and has only a at creation.\n// but it then flows, specific ~> general, to x's annotation\n// type. at that point, it acquires b as an optional property.\n//\nx = { a: 0 };\n\n// ...which allows this assignment to take place.\nx.b = 1;\n\n// T7810506\nclass A {\n    x: { a: number, b?: string };\n    foo() {\n        // Something similar should happen here, but doesn't: the problem is\n        // made explicit by adding generics (see test3_failure.js introduced by\n        // D2747512). There is a race between writing b on the object literal\n        // type and adding b as an optional property to it, since in general we\n        // cannot guarantee that the flow from the object literal to the\n        // annotation will be processed before the flow involving the\n        // access. Here we lose the race and get an error on the write.\n        this.x = { a: 123 };\n        this.x.b = 'hello';\n    }\n}\n"
  },
  {
    "path": "tests/flow/optional_props/test3_exact_annot.js",
    "content": "/* The logic that allows ({}: {p?:T}), described in test3.js, should _not_ also\n   fire for exact annotations. */\n\nconst a: {| a: number |} = { a: 1 };\nconst b: { a: number, b?: number } = a; // error: property `b` not found\nb.b = 0; // because subsequent writes would widen the exact object\n(a.b: number); // error: property `b` not found\n"
  },
  {
    "path": "tests/flow/optional_props/test3_failure.js",
    "content": "// generalization of failure in test3.js\n\nclass A<O: {x: { a: number, b?: string}}> {\n  o: O;\n  foo() {\n    this.o.x = { a: 123 };\n    this.o.x.b = 'hello'; // this is a spurious error (see test3.js for details)\n  }\n}\n"
  },
  {
    "path": "tests/flow/overload/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`overload.js 1`] = `\n/**\n * tests of overload selection\n *\n * @flow\n */\n\nvar x1: number = \"\".match(0)[0];\nvar x2: number = \"\".match(/pattern/)[0];\nvar x3: string = \"\".replace(/pattern/,\"...\");\nvar x4: number = \"\".split(/pattern/)[0];\n\ndeclare class C {\n    foo(x:number): number;\n    foo(x:string): string;\n\n    bar(x: { a: number }): number;\n    bar(x: { a: string }): string;\n}\n\nvar a = new C();\n\na.foo(0); // ok\na.foo(\"hey\"); // ok\na.foo(true); // error, function cannot be called on intersection type\n\na.bar({ a: 0 }); // ok\na.bar({ a: \"hey\" }); // ok\na.bar({ a: true }); // error, function cannot be called on intersection type\n\ndeclare var x: { a: boolean; } & { b: string };\n\na.bar(x); // error with nested intersection info (outer for bar, inner for x)\n\n/********** tests **************\ninterface Dummy<T> {\n    dumb(foo: (x:number) => number):number;\n    dumb(foo: (x:string) => string):string;\n\n    dumber<U>(bar: (x:T) => Array<U>):U;\n    dumber<U>(bar: (x:T) => U):Array<U>;\n}\n\nfunction foo(x:string):string { return x; }\nvar y:number = new Dummy().dumb(foo);\n\nfunction bar1(x:number):Array<string> { return []; }\nvar z1:number = new Dummy().dumber(bar1);\n\nfunction bar2(x:number):string { return \"...\"; }\nvar z2:Array<string> = new Dummy().dumber(bar2);\n*/\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * tests of overload selection\n *\n * @flow\n */\n\nvar x1: number = \"\".match(0)[0];\nvar x2: number = \"\".match(/pattern/)[0];\nvar x3: string = \"\".replace(/pattern/, \"...\");\nvar x4: number = \"\".split(/pattern/)[0];\n\ndeclare class C {\n  foo(x: number): number,\n  foo(x: string): string,\n\n  bar(x: { a: number }): number,\n  bar(x: { a: string }): string\n}\n\nvar a = new C();\n\na.foo(0); // ok\na.foo(\"hey\"); // ok\na.foo(true); // error, function cannot be called on intersection type\n\na.bar({ a: 0 }); // ok\na.bar({ a: \"hey\" }); // ok\na.bar({ a: true }); // error, function cannot be called on intersection type\n\ndeclare var x: { a: boolean } & { b: string };\n\na.bar(x); // error with nested intersection info (outer for bar, inner for x)\n\n/********** tests **************\ninterface Dummy<T> {\n    dumb(foo: (x:number) => number):number;\n    dumb(foo: (x:string) => string):string;\n\n    dumber<U>(bar: (x:T) => Array<U>):U;\n    dumber<U>(bar: (x:T) => U):Array<U>;\n}\n\nfunction foo(x:string):string { return x; }\nvar y:number = new Dummy().dumb(foo);\n\nfunction bar1(x:number):Array<string> { return []; }\nvar z1:number = new Dummy().dumber(bar1);\n\nfunction bar2(x:number):string { return \"...\"; }\nvar z2:Array<string> = new Dummy().dumber(bar2);\n*/\n\n`;\n\nexports[`test.js 1`] = `\nfunction foo() {\n  var output = new FakeUint8Array();\n  output.set(new FakeUint8Array(), 0); // matches one of the overloads of set\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo() {\n  var output = new FakeUint8Array();\n  output.set(new FakeUint8Array(), 0); // matches one of the overloads of set\n}\n\n`;\n\nexports[`test2.js 1`] = `\ndeclare class Foo {\n  bar(x: 'hmm'): number;\n  bar(x: string): string;\n}\nvar foo = new Foo;\n(foo.bar('hmm'): number); // OK\n(foo.bar('hmmm'): number); // error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class Foo {\n  bar(x: \"hmm\"): number,\n  bar(x: string): string\n}\nvar foo = new Foo();\n(foo.bar(\"hmm\"): number); // OK\n(foo.bar(\"hmmm\"): number); // error\n\n`;\n\nexports[`test3.js 1`] = `\n// passing a union-like thing into an overload is ok\n// if overload handles each branch of union-like thing\n\n// unions\ndeclare function f(x: string): void;\ndeclare function f(x: number): void;\ndeclare var x_f: string | number;\nf(x_f); // ok\n\n// maybe\ndeclare function g(x: null): void;\ndeclare function g(x: void): void;\ndeclare function g(x: string): void;\ndeclare var x_g: ?string;\ng(x_g); // ok\n\n// optional\ndeclare function h(x: void): void;\ndeclare function h(x: string): void;\ndeclare var x_h: {p?: string};\nh(x_h.p); // ok\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// passing a union-like thing into an overload is ok\n// if overload handles each branch of union-like thing\n\n// unions\ndeclare function f(x: string): void;\ndeclare function f(x: number): void;\ndeclare var x_f: string | number;\nf(x_f); // ok\n\n// maybe\ndeclare function g(x: null): void;\ndeclare function g(x: void): void;\ndeclare function g(x: string): void;\ndeclare var x_g: ?string;\ng(x_g); // ok\n\n// optional\ndeclare function h(x: void): void;\ndeclare function h(x: string): void;\ndeclare var x_h: { p?: string };\nh(x_h.p); // ok\n\n`;\n\nexports[`union.js 1`] = `\nfunction foo<U> (x: $Either<Array<U>,U>): Array<U> { return []; }\n\nvar x1:number = foo(0)[0];\nvar x2:string = foo([\"\"])[0];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo<U>(x: $Either<Array<U>, U>): Array<U> {\n  return [];\n}\n\nvar x1: number = foo(0)[0];\nvar x2: string = foo([\"\"])[0];\n\n`;\n"
  },
  {
    "path": "tests/flow/overload/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/overload/lib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`lib.js 1`] = `\ndeclare class FakeUint8Array {\n  set(index: number, value: number): void;\n  set(array: FakeUint8Array | Array<number>, offset?: number): void;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class FakeUint8Array {\n  set(index: number, value: number): void,\n  set(array: FakeUint8Array | Array<number>, offset?: number): void\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/overload/lib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/overload/lib/lib.js",
    "content": "declare class FakeUint8Array {\n  set(index: number, value: number): void;\n  set(array: FakeUint8Array | Array<number>, offset?: number): void;\n}\n"
  },
  {
    "path": "tests/flow/overload/overload.js",
    "content": "/**\n * tests of overload selection\n *\n * @flow\n */\n\nvar x1: number = \"\".match(0)[0];\nvar x2: number = \"\".match(/pattern/)[0];\nvar x3: string = \"\".replace(/pattern/,\"...\");\nvar x4: number = \"\".split(/pattern/)[0];\n\ndeclare class C {\n    foo(x:number): number;\n    foo(x:string): string;\n\n    bar(x: { a: number }): number;\n    bar(x: { a: string }): string;\n}\n\nvar a = new C();\n\na.foo(0); // ok\na.foo(\"hey\"); // ok\na.foo(true); // error, function cannot be called on intersection type\n\na.bar({ a: 0 }); // ok\na.bar({ a: \"hey\" }); // ok\na.bar({ a: true }); // error, function cannot be called on intersection type\n\ndeclare var x: { a: boolean; } & { b: string };\n\na.bar(x); // error with nested intersection info (outer for bar, inner for x)\n\n/********** tests **************\ninterface Dummy<T> {\n    dumb(foo: (x:number) => number):number;\n    dumb(foo: (x:string) => string):string;\n\n    dumber<U>(bar: (x:T) => Array<U>):U;\n    dumber<U>(bar: (x:T) => U):Array<U>;\n}\n\nfunction foo(x:string):string { return x; }\nvar y:number = new Dummy().dumb(foo);\n\nfunction bar1(x:number):Array<string> { return []; }\nvar z1:number = new Dummy().dumber(bar1);\n\nfunction bar2(x:number):string { return \"...\"; }\nvar z2:Array<string> = new Dummy().dumber(bar2);\n*/\n"
  },
  {
    "path": "tests/flow/overload/test.js",
    "content": "function foo() {\n  var output = new FakeUint8Array();\n  output.set(new FakeUint8Array(), 0); // matches one of the overloads of set\n}\n"
  },
  {
    "path": "tests/flow/overload/test2.js",
    "content": "declare class Foo {\n  bar(x: 'hmm'): number;\n  bar(x: string): string;\n}\nvar foo = new Foo;\n(foo.bar('hmm'): number); // OK\n(foo.bar('hmmm'): number); // error\n"
  },
  {
    "path": "tests/flow/overload/test3.js",
    "content": "// passing a union-like thing into an overload is ok\n// if overload handles each branch of union-like thing\n\n// unions\ndeclare function f(x: string): void;\ndeclare function f(x: number): void;\ndeclare var x_f: string | number;\nf(x_f); // ok\n\n// maybe\ndeclare function g(x: null): void;\ndeclare function g(x: void): void;\ndeclare function g(x: string): void;\ndeclare var x_g: ?string;\ng(x_g); // ok\n\n// optional\ndeclare function h(x: void): void;\ndeclare function h(x: string): void;\ndeclare var x_h: {p?: string};\nh(x_h.p); // ok\n"
  },
  {
    "path": "tests/flow/overload/union.js",
    "content": "function foo<U> (x: $Either<Array<U>,U>): Array<U> { return []; }\n\nvar x1:number = foo(0)[0];\nvar x2:string = foo([\"\"])[0];\n"
  },
  {
    "path": "tests/flow/parse/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`no_parse_error.js 1`] = `\n/*\n@flow\n*/\n\nvar x = 'Test';\nvar y = 5 / x;\n\nvar z: {\n    type: number,\n    y: string\n} = {type: 1, y: 'hey'};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/*\n@flow\n*/\n\nvar x = \"Test\";\nvar y = 5 / x;\n\nvar z: {\n  type: number,\n  y: string\n} = { type: 1, y: \"hey\" };\n\n`;\n"
  },
  {
    "path": "tests/flow/parse/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/parse/no_parse_error.js",
    "content": "/*\n@flow\n*/\n\nvar x = 'Test';\nvar y = 5 / x;\n\nvar z: {\n    type: number,\n    y: string\n} = {type: 1, y: 'hey'};\n"
  },
  {
    "path": "tests/flow/parse_error_haste/Client.js",
    "content": "/**\n * Client imports some but not all modules,\n * triggering/suppressing parse errors.\n * @flow\n */\n\n// non-flow files should not show parse errors\nvar A = require(\"Foo\");          // non-Flow file @providesModule Foo\nvar B = require(\"./NoProvides\"); // non-Flow file\n\nvar C = require(\"./ParseError\"); // Flow file\n"
  },
  {
    "path": "tests/flow/parse_error_haste/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Client.js 1`] = `\n/**\n * Client imports some but not all modules,\n * triggering/suppressing parse errors.\n * @flow\n */\n\n// non-flow files should not show parse errors\nvar A = require(\"Foo\");          // non-Flow file @providesModule Foo\nvar B = require(\"./NoProvides\"); // non-Flow file\n\nvar C = require(\"./ParseError\"); // Flow file\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * Client imports some but not all modules,\n * triggering/suppressing parse errors.\n * @flow\n */\n\n// non-flow files should not show parse errors\nvar A = require(\"Foo\"); // non-Flow file @providesModule Foo\nvar B = require(\"./NoProvides\"); // non-Flow file\n\nvar C = require(\"./ParseError\"); // Flow file\n\n`;\n"
  },
  {
    "path": "tests/flow/parse_error_haste/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/parse_error_node/Client.js",
    "content": "/**\n * Client imports some but not all modules,\n * triggering/suppressing parse errors.\n * @flow\n */\n\n// non-flow files should not give parse errors\nvar A = require(\"./Imported\");          // non-Flow file @providesModule Foo\n\nvar B = require(\"./ParseError\");        // Flow file\n"
  },
  {
    "path": "tests/flow/parse_error_node/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Client.js 1`] = `\n/**\n * Client imports some but not all modules,\n * triggering/suppressing parse errors.\n * @flow\n */\n\n// non-flow files should not give parse errors\nvar A = require(\"./Imported\");          // non-Flow file @providesModule Foo\n\nvar B = require(\"./ParseError\");        // Flow file\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * Client imports some but not all modules,\n * triggering/suppressing parse errors.\n * @flow\n */\n\n// non-flow files should not give parse errors\nvar A = require(\"./Imported\"); // non-Flow file @providesModule Foo\n\nvar B = require(\"./ParseError\"); // Flow file\n\n`;\n"
  },
  {
    "path": "tests/flow/parse_error_node/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/path/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`while.js 1`] = `\nvar x = 1;\nwhile(typeof x == \"number\" || typeof x == \"string\") {\n    x = x + 1;\n    if (true) x = \"\";\n}\nvar z:number = x;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x = 1;\nwhile (typeof x == \"number\" || typeof x == \"string\") {\n  x = x + 1;\n  if (true) x = \"\";\n}\nvar z: number = x;\n\n`;\n"
  },
  {
    "path": "tests/flow/path/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/path/while.js",
    "content": "var x = 1;\nwhile(typeof x == \"number\" || typeof x == \"string\") {\n    x = x + 1;\n    if (true) x = \"\";\n}\nvar z:number = x;\n"
  },
  {
    "path": "tests/flow/plsummit/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`arrays.js 1`] = `\nfunction foo(x) { return [x, x > 0, \"number \" + x]; }\n\nvar [n, b, s] = foo(42);\nn * s.length;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo(x) {\n  return [x, x > 0, \"number \" + x];\n}\n\nvar [n, b, s] = foo(42);\nn * s.length;\n\n`;\n\nexports[`export_class.js 1`] = `\nclass C {\n    x: number;\n    constructor(x: number) { this.x = x; }\n}\n\nmodule.exports = C;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {\n  x: number;\n  constructor(x: number) {\n    this.x = x;\n  }\n}\n\nmodule.exports = C;\n\n`;\n\nexports[`generics.js 1`] = `\n/* @flow */\n\nvar r: number = 0;\nfunction foo<X>(x: X): X { r = x; return x; }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar r: number = 0;\nfunction foo<X>(x: X): X {\n  r = x;\n  return x;\n}\n\n`;\n\nexports[`import_class.js 1`] = `\nvar C = require('./export_class');\n\nvar c = new C(\"\");\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar C = require(\"./export_class\");\n\nvar c = new C(\"\");\n\n`;\n\nexports[`locals.js 1`] = `\n/* @flow */\n\nfunction foo() {\n    var x = 0;\n    var y = x;\n}\n\nfunction bar(x: ?string): number {\n    if (x == null) x = \"\";\n    return x.length;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction foo() {\n  var x = 0;\n  var y = x;\n}\n\nfunction bar(x: ?string): number {\n  if (x == null) x = \"\";\n  return x.length;\n}\n\n`;\n\nexports[`objects.js 1`] = `\nfunction C() { this.x = 0; }\nC.prototype.foo = function() { return this.x; }\n\nvar c = new C();\nvar x: string = c.foo();\n\nfunction foo() { return this.y; }\nfunction bar() { return this.foo(); }\nvar o = { y: \"\", foo: foo, bar: bar };\nvar o2 = { y: 0, foo: foo, bar: bar };\n\no.bar();\nvar y: number = o2.bar();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction C() {\n  this.x = 0;\n}\nC.prototype.foo = function() {\n  return this.x;\n};\n\nvar c = new C();\nvar x: string = c.foo();\n\nfunction foo() {\n  return this.y;\n}\nfunction bar() {\n  return this.foo();\n}\nvar o = { y: \"\", foo: foo, bar: bar };\nvar o2 = { y: 0, foo: foo, bar: bar };\n\no.bar();\nvar y: number = o2.bar();\n\n`;\n"
  },
  {
    "path": "tests/flow/plsummit/arrays.js",
    "content": "function foo(x) { return [x, x > 0, \"number \" + x]; }\n\nvar [n, b, s] = foo(42);\nn * s.length;\n"
  },
  {
    "path": "tests/flow/plsummit/export_class.js",
    "content": "class C {\n    x: number;\n    constructor(x: number) { this.x = x; }\n}\n\nmodule.exports = C;\n"
  },
  {
    "path": "tests/flow/plsummit/generics.js",
    "content": "/* @flow */\n\nvar r: number = 0;\nfunction foo<X>(x: X): X { r = x; return x; }\n"
  },
  {
    "path": "tests/flow/plsummit/import_class.js",
    "content": "var C = require('./export_class');\n\nvar c = new C(\"\");\n"
  },
  {
    "path": "tests/flow/plsummit/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/plsummit/locals.js",
    "content": "/* @flow */\n\nfunction foo() {\n    var x = 0;\n    var y = x;\n}\n\nfunction bar(x: ?string): number {\n    if (x == null) x = \"\";\n    return x.length;\n}\n"
  },
  {
    "path": "tests/flow/plsummit/objects.js",
    "content": "function C() { this.x = 0; }\nC.prototype.foo = function() { return this.x; }\n\nvar c = new C();\nvar x: string = c.foo();\n\nfunction foo() { return this.y; }\nfunction bar() { return this.foo(); }\nvar o = { y: \"\", foo: foo, bar: bar };\nvar o2 = { y: 0, foo: foo, bar: bar };\n\no.bar();\nvar y: number = o2.bar();\n"
  },
  {
    "path": "tests/flow/poly/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`annot.js 1`] = `\nclass A<X> { }\nnew A; // OK, implicitly inferred type args\nclass B extends A { } // OK, same as above\n\nfunction foo(b): A<any> { // ok but unsafe, caller may assume any type arg\n  return b ? (new A: A<number>): (new A: A<string>);\n}\n\nfunction bar(): A<*> { // error, * can't be {} and {x: string} at the same time\n  return (new A: A<{}>) || (new A: A<{x: string}>);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A<X> {}\nnew A(); // OK, implicitly inferred type args\nclass B extends A {} // OK, same as above\n\nfunction foo(b): A<any> {\n  // ok but unsafe, caller may assume any type arg\n  return b ? (new A(): A<number>) : (new A(): A<string>);\n}\n\nfunction bar(): A<*> {\n  // error, * can't be {} and {x: string} at the same time\n  return (new A(): A<{}>) || (new A(): A<{ x: string }>);\n}\n\n`;\n\nexports[`implicit_bounded_instantiation.js 1`] = `\n// @flow\n\nclass Base {}\nclass Middle extends Base {}\nclass Child extends Middle {}\n\nclass C<T: Middle> {\n  meth(a: T): T {\n    return a;\n  }\n}\n\n// T is implicitly (bounded by) Middle in constructor call if not provided.\n// Explicit type arg is required in annotation - here a wildcard captures it.\nvar a: C<*> = new C();\n\na.meth(new Middle());\na.meth(new Child());\na.meth(42); // Error: number ~> Middle\na.meth(new Base()); // Error: Base ~> Middle\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nclass Base {}\nclass Middle extends Base {}\nclass Child extends Middle {}\n\nclass C<T: Middle> {\n  meth(a: T): T {\n    return a;\n  }\n}\n\n// T is implicitly (bounded by) Middle in constructor call if not provided.\n// Explicit type arg is required in annotation - here a wildcard captures it.\nvar a: C<*> = new C();\n\na.meth(new Middle());\na.meth(new Child());\na.meth(42); // Error: number ~> Middle\na.meth(new Base()); // Error: Base ~> Middle\n\n`;\n\nexports[`issue-1029.js 1`] = `\n// @flow\n\n// naive unification causes combinatorial explosion here,\n// effectively hangs\n\ndeclare type Box<T> = {\n  map1<U>(f: (x: T) => U): Box<U>;\n  map2<U>(f: (x: T) => U): Box<U>;\n  map3<U>(f: (x: T) => U): Box<U>;\n  map4<U>(f: (x: T) => U): Box<U>;\n  map5<U>(f: (x: T) => U): Box<U>;\n}\n\ndeclare var bool: Box<boolean>;\n\ndeclare function unbox<A>(box: Box<A>): A\n\nunbox(bool);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// naive unification causes combinatorial explosion here,\n// effectively hangs\n\ndeclare type Box<T> = {\n  map1<U>(f: (x: T) => U): Box<U>,\n  map2<U>(f: (x: T) => U): Box<U>,\n  map3<U>(f: (x: T) => U): Box<U>,\n  map4<U>(f: (x: T) => U): Box<U>,\n  map5<U>(f: (x: T) => U): Box<U>\n};\n\ndeclare var bool: Box<boolean>;\n\ndeclare function unbox<A>(box: Box<A>): A;\n\nunbox(bool);\n\n`;\n\nexports[`poly.js 1`] = `\nclass Foo<T> {\n    x:T;\n    constructor(x:T) { this.x = x; }\n}\n\nfunction bar<S>(foo:Foo<S>,y:S):Foo<S> { return new Foo(y); }\n\nvar P = {\n    bar: bar\n}\n\ndeclare var Q: {\n    bar<S>(foo:Foo<S>,y:S):Foo<S>;\n}\n\nvar foo = new Foo(0);\nvar x:string = foo.x;\nvar z:Foo<number> = Q.bar(foo,\"\");\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass Foo<T> {\n  x: T;\n  constructor(x: T) {\n    this.x = x;\n  }\n}\n\nfunction bar<S>(foo: Foo<S>, y: S): Foo<S> {\n  return new Foo(y);\n}\n\nvar P = {\n  bar: bar\n};\n\ndeclare var Q: {\n  bar<S>(foo: Foo<S>, y: S): Foo<S>\n};\n\nvar foo = new Foo(0);\nvar x: string = foo.x;\nvar z: Foo<number> = Q.bar(foo, \"\");\n\n`;\n\nexports[`test.js 1`] = `\nclass C {\n  foo<X>(x: X): X { return x; }\n  foo_<X: number>(x: X): number { return x; }\n  bar<X>(x: X): X { return x; }\n  qux(x: number): number { return x; }\n}\nclass D extends C {\n  foo(x: number): number { return x; } // error (specialization, see below)\n  foo_(x: number): number { return x; } // OK, but only because the overridden foo accepts no more than number and returns exactly number\n  bar<X>(x: X): X { return x; } // OK\n  qux<X>(x: X): X { return x; } // OK (generalization)\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {\n  foo<X>(x: X): X {\n    return x;\n  }\n  foo_<X: number>(x: X): number {\n    return x;\n  }\n  bar<X>(x: X): X {\n    return x;\n  }\n  qux(x: number): number {\n    return x;\n  }\n}\nclass D extends C {\n  foo(x: number): number {\n    return x;\n  } // error (specialization, see below)\n  foo_(x: number): number {\n    return x;\n  } // OK, but only because the overridden foo accepts no more than number and returns exactly number\n  bar<X>(x: X): X {\n    return x;\n  } // OK\n  qux<X>(x: X): X {\n    return x;\n  } // OK (generalization)\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/poly/annot.js",
    "content": "class A<X> { }\nnew A; // OK, implicitly inferred type args\nclass B extends A { } // OK, same as above\n\nfunction foo(b): A<any> { // ok but unsafe, caller may assume any type arg\n  return b ? (new A: A<number>): (new A: A<string>);\n}\n\nfunction bar(): A<*> { // error, * can't be {} and {x: string} at the same time\n  return (new A: A<{}>) || (new A: A<{x: string}>);\n}\n"
  },
  {
    "path": "tests/flow/poly/implicit_bounded_instantiation.js",
    "content": "// @flow\n\nclass Base {}\nclass Middle extends Base {}\nclass Child extends Middle {}\n\nclass C<T: Middle> {\n  meth(a: T): T {\n    return a;\n  }\n}\n\n// T is implicitly (bounded by) Middle in constructor call if not provided.\n// Explicit type arg is required in annotation - here a wildcard captures it.\nvar a: C<*> = new C();\n\na.meth(new Middle());\na.meth(new Child());\na.meth(42); // Error: number ~> Middle\na.meth(new Base()); // Error: Base ~> Middle\n"
  },
  {
    "path": "tests/flow/poly/issue-1029.js",
    "content": "// @flow\n\n// naive unification causes combinatorial explosion here,\n// effectively hangs\n\ndeclare type Box<T> = {\n  map1<U>(f: (x: T) => U): Box<U>;\n  map2<U>(f: (x: T) => U): Box<U>;\n  map3<U>(f: (x: T) => U): Box<U>;\n  map4<U>(f: (x: T) => U): Box<U>;\n  map5<U>(f: (x: T) => U): Box<U>;\n}\n\ndeclare var bool: Box<boolean>;\n\ndeclare function unbox<A>(box: Box<A>): A\n\nunbox(bool);\n"
  },
  {
    "path": "tests/flow/poly/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/poly/poly.js",
    "content": "class Foo<T> {\n    x:T;\n    constructor(x:T) { this.x = x; }\n}\n\nfunction bar<S>(foo:Foo<S>,y:S):Foo<S> { return new Foo(y); }\n\nvar P = {\n    bar: bar\n}\n\ndeclare var Q: {\n    bar<S>(foo:Foo<S>,y:S):Foo<S>;\n}\n\nvar foo = new Foo(0);\nvar x:string = foo.x;\nvar z:Foo<number> = Q.bar(foo,\"\");\n"
  },
  {
    "path": "tests/flow/poly/test.js",
    "content": "class C {\n  foo<X>(x: X): X { return x; }\n  foo_<X: number>(x: X): number { return x; }\n  bar<X>(x: X): X { return x; }\n  qux(x: number): number { return x; }\n}\nclass D extends C {\n  foo(x: number): number { return x; } // error (specialization, see below)\n  foo_(x: number): number { return x; } // OK, but only because the overridden foo accepts no more than number and returns exactly number\n  bar<X>(x: X): X { return x; } // OK\n  qux<X>(x: X): X { return x; } // OK (generalization)\n}\n"
  },
  {
    "path": "tests/flow/poly_class_export/A.js",
    "content": "// @flow\n\nclass A<T> {\n  x: T\n}\n\nmodule.exports = A;\n"
  },
  {
    "path": "tests/flow/poly_class_export/B.js",
    "content": "// @flow\n\nlet A = require('./A');\n\nclass B extends A<string> {\n  constructor() {\n    super();\n  }\n}\n\nmodule.exports = new B();\n"
  },
  {
    "path": "tests/flow/poly_class_export/C.js",
    "content": "// @flow\n\n// This test exports a function whose return type is the class's `this` type.\n// It should be inferred (no annotation required).\n\nclass Foo {\n  foo(): this {\n    return this;\n  }\n}\n\nexport function f(x: Foo) {\n  return x.foo();\n}\n"
  },
  {
    "path": "tests/flow/poly_class_export/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\n// @flow\n\nclass A<T> {\n  x: T\n}\n\nmodule.exports = A;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nclass A<T> {\n  x: T;\n}\n\nmodule.exports = A;\n\n`;\n\nexports[`B.js 1`] = `\n// @flow\n\nlet A = require('./A');\n\nclass B extends A<string> {\n  constructor() {\n    super();\n  }\n}\n\nmodule.exports = new B();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet A = require(\"./A\");\n\nclass B extends A<string> {\n  constructor() {\n    super();\n  }\n}\n\nmodule.exports = new B();\n\n`;\n\nexports[`C.js 1`] = `\n// @flow\n\n// This test exports a function whose return type is the class's \\`this\\` type.\n// It should be inferred (no annotation required).\n\nclass Foo {\n  foo(): this {\n    return this;\n  }\n}\n\nexport function f(x: Foo) {\n  return x.foo();\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// This test exports a function whose return type is the class's \\`this\\` type.\n// It should be inferred (no annotation required).\n\nclass Foo {\n  foo(): this {\n    return this;\n  }\n}\n\nexport function f(x: Foo) {\n  return x.foo();\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/poly_class_export/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/poly_overload/decls/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`typescript-deferred.js 1`] = `\ninterface Some<X> {}\ninterface Other<X> { x: X; }\ninterface None<Y> {}\ninterface Nada<Y> { y: Y }\ninterface A<X> {\n  foo<Y>(s: Some<X>, e: None<Y>): A<Y>;\n  foo<Y>(s: Some<X>, e: Nada<Y>): A<Y>;\n  foo<Y>(s: Other<X>, e: None<Y>): A<Y>;\n  foo<Y>(s: Other<X>, e: Nada<Y>): A<Y>;\n}\ninterface B<X> extends A<X> {\n  foo<Y>(s: Some<X>, e: None<Y>): B<Y>;\n  foo<Y>(s: Some<X>, e: Nada<Y>): B<Y>;\n  foo<Y>(s: Other<X>, e: None<Y>): B<Y>;\n  foo<Y>(s: Other<X>, e: Nada<Y>): B<Y>;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface Some<X> {}\ninterface Other<X> { x: X }\ninterface None<Y> {}\ninterface Nada<Y> { y: Y }\ninterface A<X> {\n  foo<Y>(s: Some<X>, e: None<Y>): A<Y>,\n  foo<Y>(s: Some<X>, e: Nada<Y>): A<Y>,\n  foo<Y>(s: Other<X>, e: None<Y>): A<Y>,\n  foo<Y>(s: Other<X>, e: Nada<Y>): A<Y>\n}\ninterface B<X> extends A<X> {\n  foo<Y>(s: Some<X>, e: None<Y>): B<Y>,\n  foo<Y>(s: Some<X>, e: Nada<Y>): B<Y>,\n  foo<Y>(s: Other<X>, e: None<Y>): B<Y>,\n  foo<Y>(s: Other<X>, e: Nada<Y>): B<Y>\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/poly_overload/decls/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/poly_overload/decls/typescript-deferred.js",
    "content": "interface Some<X> {}\ninterface Other<X> { x: X; }\ninterface None<Y> {}\ninterface Nada<Y> { y: Y }\ninterface A<X> {\n  foo<Y>(s: Some<X>, e: None<Y>): A<Y>;\n  foo<Y>(s: Some<X>, e: Nada<Y>): A<Y>;\n  foo<Y>(s: Other<X>, e: None<Y>): A<Y>;\n  foo<Y>(s: Other<X>, e: Nada<Y>): A<Y>;\n}\ninterface B<X> extends A<X> {\n  foo<Y>(s: Some<X>, e: None<Y>): B<Y>;\n  foo<Y>(s: Some<X>, e: Nada<Y>): B<Y>;\n  foo<Y>(s: Other<X>, e: None<Y>): B<Y>;\n  foo<Y>(s: Other<X>, e: Nada<Y>): B<Y>;\n}\n"
  },
  {
    "path": "tests/flow/predicates-abstract/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`filter.js 1`] = `\n// @flow\n\n// Filter the contents of an array\n\ndeclare function my_filter<T, P: $Pred<1>>(v: Array<T>, cb: P): Array<$Refine<T,P,1>>;\n\ndeclare var arr: Array<mixed>;\nconst barr = my_filter(arr, is_string);\n(barr: Array<string>);\n\nfunction is_string(x): %checks {\n  return typeof x === \"string\";\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// Filter the contents of an array\n\ndeclare function my_filter<T, P: $Pred<1>>(\n  v: Array<T>,\n  cb: P\n): Array<$Refine<T, P, 1>>;\n\ndeclare var arr: Array<mixed>;\nconst barr = my_filter(arr, is_string);\n(barr: Array<string>);\n\nfunction is_string(x): %checks {\n  return typeof x === \"string\";\n}\n\n`;\n\nexports[`filter-union.js 1`] = `\n// @flow\n\n// Filter the contents of an array\n\n\ndeclare function my_filter<T, P: $Pred<1>>(v: Array<T>, cb: P): Array<$Refine<T,P,1>>;\n\ntype A = { kind: 'A', u: number }\ntype B = { kind: 'B', v: string }\ntype C = { kind: 'C', y: boolean }\ntype D = { kind: 'D', x: boolean }\ntype E = { kind: 'E', y: boolean }\n\ndeclare var ab: Array<A|B|C>;\n\n(my_filter(ab, (x): %checks => x.kind === 'A'): Array<A>);    // OK\n(my_filter(ab, (x): %checks => x.kind !== 'A'): Array<B|C>);  // OK\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// Filter the contents of an array\n\ndeclare function my_filter<T, P: $Pred<1>>(\n  v: Array<T>,\n  cb: P\n): Array<$Refine<T, P, 1>>;\n\ntype A = { kind: \"A\", u: number };\ntype B = { kind: \"B\", v: string };\ntype C = { kind: \"C\", y: boolean };\ntype D = { kind: \"D\", x: boolean };\ntype E = { kind: \"E\", y: boolean };\n\ndeclare var ab: Array<A | B | C>;\n\n(my_filter(ab, (x): %checks => x.kind === \"A\"): Array<A>); // OK\n(my_filter(ab, (x): %checks => x.kind !== \"A\"): Array<B | C>); // OK\n\n`;\n\nexports[`refine.js 1`] = `\n// @flow\n\n/*\n  $Pred<N> is an \"abstract predicate type\", i.e. denotes a (function) type that\n  refines N variables. So if \\`cb\\` is a function, then it should be refining\n  exactly N argument. It is abstract in that we do not need to specify:\n  (a) which variables are going to be refined (just the number), or (b) what\n  exactly the refinement (predicate) is going to be.\n\n  $Refine<T,P,k> is a refinement type, that refines type T with the k-th\n  argument that gets refined by an abstract preficate type P.\n*/\ndeclare function refine<T, P: $Pred<1>>(v: T, cb: P): $Refine<T,P,1>;\n// function refine(v, cb)\n// { if (cb(v)) { return v; } else { throw new Error(); } }\n\n/*\n  Use case\n*/\ndeclare var a: mixed;\nvar b = refine(a, is_string);\n(b: string);\n\ndeclare function refine_fst<T, P: $Pred<2>>(v: T, w: T, cb: P): $Refine<T,P,1>;\n// function refine_fst(v, w, cb)\n// { if (cb(v, w)) { return v; } else { throw new Error(); } }\n\ndeclare var c: mixed;\ndeclare var d: mixed;\n\nvar e = refine2(c, d, is_string_and_number);\n(e: string);\n\n\ndeclare function refine2<T, P: $Pred<2>>(v: T, w: T, cb: P): $Refine<T,P,1>;\n\n// function refine_fst(v, w, cb)\n// { if (cb(v, w)) { return w; } else { throw new Error(); } }\n\nfunction is_string(x): boolean %checks {\n  return typeof x === \"string\";\n}\n\nfunction is_string_and_number(x, y): %checks {\n  return typeof x === \"string\" && typeof y === \"number\";\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n/*\n  $Pred<N> is an \"abstract predicate type\", i.e. denotes a (function) type that\n  refines N variables. So if \\`cb\\` is a function, then it should be refining\n  exactly N argument. It is abstract in that we do not need to specify:\n  (a) which variables are going to be refined (just the number), or (b) what\n  exactly the refinement (predicate) is going to be.\n\n  $Refine<T,P,k> is a refinement type, that refines type T with the k-th\n  argument that gets refined by an abstract preficate type P.\n*/\ndeclare function refine<T, P: $Pred<1>>(v: T, cb: P): $Refine<T, P, 1>;\n// function refine(v, cb)\n// { if (cb(v)) { return v; } else { throw new Error(); } }\n\n/*\n  Use case\n*/\ndeclare var a: mixed;\nvar b = refine(a, is_string);\n(b: string);\n\ndeclare function refine_fst<T, P: $Pred<2>>(\n  v: T,\n  w: T,\n  cb: P\n): $Refine<T, P, 1>;\n// function refine_fst(v, w, cb)\n// { if (cb(v, w)) { return v; } else { throw new Error(); } }\n\ndeclare var c: mixed;\ndeclare var d: mixed;\n\nvar e = refine2(c, d, is_string_and_number);\n(e: string);\n\ndeclare function refine2<T, P: $Pred<2>>(v: T, w: T, cb: P): $Refine<T, P, 1>;\n\n// function refine_fst(v, w, cb)\n// { if (cb(v, w)) { return w; } else { throw new Error(); } }\n\nfunction is_string(x): boolean %checks {\n  return typeof x === \"string\";\n}\n\nfunction is_string_and_number(x, y): %checks {\n  return typeof x === \"string\" && typeof y === \"number\";\n}\n\n`;\n\nexports[`sanity-filter.js 1`] = `\n// @flow\n\ndeclare function my_filter<T, P: $Pred<1>>(v: Array<T>, cb: P): Array<$Refine<T,P,1>>;\n\n// Sanity check A: filtering the wrong type\ndeclare var a: Array<mixed>;\nconst b = my_filter(a, is_string);\n(b: Array<number>);\n\n\n// Sanity check B: Passing non-predicate function to filter\ndeclare var c: Array<mixed>;\nconst d = my_filter(c, is_string_regular);\n(d: Array<string>);\n\nfunction is_string(x): boolean %checks {\n  return typeof x === \"string\";\n}\n\nfunction is_string_regular(x): boolean {\n  return typeof x === \"string\";\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ndeclare function my_filter<T, P: $Pred<1>>(\n  v: Array<T>,\n  cb: P\n): Array<$Refine<T, P, 1>>;\n\n// Sanity check A: filtering the wrong type\ndeclare var a: Array<mixed>;\nconst b = my_filter(a, is_string);\n(b: Array<number>);\n\n// Sanity check B: Passing non-predicate function to filter\ndeclare var c: Array<mixed>;\nconst d = my_filter(c, is_string_regular);\n(d: Array<string>);\n\nfunction is_string(x): boolean %checks {\n  return typeof x === \"string\";\n}\n\nfunction is_string_regular(x): boolean {\n  return typeof x === \"string\";\n}\n\n`;\n\nexports[`sanity-filter-union.js 1`] = `\n// @flow\n\n// Filter the contents of an array\n\n\ndeclare function my_filter<T, P: $Pred<1>>(v: Array<T>, cb: P): Array<$Refine<T,P,1>>;\n\ntype A = { kind: 'A', u: number }\ntype B = { kind: 'B', v: string }\ntype C = { kind: 'C', y: boolean }\ntype D = { kind: 'D', x: boolean }\ntype E = { kind: 'E', y: boolean }\n\ndeclare var ab: Array<A|B|C>;\n\n(my_filter(ab, (x): %checks => x.kind === 'A'): Array<B>);    // ERROR\n(my_filter(ab, (x): %checks => x.kind !== 'A'): Array<A|C>);  // ERROR\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// Filter the contents of an array\n\ndeclare function my_filter<T, P: $Pred<1>>(\n  v: Array<T>,\n  cb: P\n): Array<$Refine<T, P, 1>>;\n\ntype A = { kind: \"A\", u: number };\ntype B = { kind: \"B\", v: string };\ntype C = { kind: \"C\", y: boolean };\ntype D = { kind: \"D\", x: boolean };\ntype E = { kind: \"E\", y: boolean };\n\ndeclare var ab: Array<A | B | C>;\n\n(my_filter(ab, (x): %checks => x.kind === \"A\"): Array<B>); // ERROR\n(my_filter(ab, (x): %checks => x.kind !== \"A\"): Array<A | C>); // ERROR\n\n`;\n\nexports[`sanity-refine.js 1`] = `\n// @flow\n\n// Sanity check A: the refinment position index is outside of the allowed range\ndeclare function refine<T, P: $Pred<1>>(v: T, cb: P): $Refine<T,P,2>;\n\ndeclare var a: mixed;\nvar b = refine(a, is_string);   // ERROR: index out of bounds\n(b: string);\n\n\n// Sanity check B: refine2 expects a function that accepts 3 arguments but\n// it is called with a function that takes 2\ndeclare var c: mixed;\ndeclare var d: mixed;\ndeclare var e: mixed;\n\ndeclare function refine3<T, P: $Pred<3>>(u: T, v: T, w: T, cb: P): $Refine<T,P,1>;\n\nvar e = refine3(c, d, e, is_string_and_number);\n(e: string);\n\nfunction is_string_and_number(x, y): %checks {\n  return typeof x === \"string\" && typeof y === \"number\";\n}\n\n\n// Sanity check C: expecting a predicate function but passed a non-predicate one\nvar e = refine(a, is_string_regular);   // ERROR: is_string_regular is not a\n                                        // predicate function\n(e: number);\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction is_string(x): %checks {\n  return typeof x === \"string\";\n}\n\nfunction is_string_regular(x)  {\n  return typeof x === \"string\";\n}\n\nfunction is_string_and_number(x, y): %checks {\n  return typeof x === \"string\" && typeof y === \"number\";\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// Sanity check A: the refinment position index is outside of the allowed range\ndeclare function refine<T, P: $Pred<1>>(v: T, cb: P): $Refine<T, P, 2>;\n\ndeclare var a: mixed;\nvar b = refine(a, is_string); // ERROR: index out of bounds\n(b: string);\n\n// Sanity check B: refine2 expects a function that accepts 3 arguments but\n// it is called with a function that takes 2\ndeclare var c: mixed;\ndeclare var d: mixed;\ndeclare var e: mixed;\n\ndeclare function refine3<T, P: $Pred<3>>(\n  u: T,\n  v: T,\n  w: T,\n  cb: P\n): $Refine<T, P, 1>;\n\nvar e = refine3(c, d, e, is_string_and_number);\n(e: string);\n\nfunction is_string_and_number(x, y): %checks {\n  return typeof x === \"string\" && typeof y === \"number\";\n}\n\n// Sanity check C: expecting a predicate function but passed a non-predicate one\nvar e = refine(a, is_string_regular); // ERROR: is_string_regular is not a\n// predicate function\n(e: number);\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction is_string(x): %checks {\n  return typeof x === \"string\";\n}\n\nfunction is_string_regular(x) {\n  return typeof x === \"string\";\n}\n\nfunction is_string_and_number(x, y): %checks {\n  return typeof x === \"string\" && typeof y === \"number\";\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/predicates-abstract/filter-union.js",
    "content": "// @flow\n\n// Filter the contents of an array\n\n\ndeclare function my_filter<T, P: $Pred<1>>(v: Array<T>, cb: P): Array<$Refine<T,P,1>>;\n\ntype A = { kind: 'A', u: number }\ntype B = { kind: 'B', v: string }\ntype C = { kind: 'C', y: boolean }\ntype D = { kind: 'D', x: boolean }\ntype E = { kind: 'E', y: boolean }\n\ndeclare var ab: Array<A|B|C>;\n\n(my_filter(ab, (x): %checks => x.kind === 'A'): Array<A>);    // OK\n(my_filter(ab, (x): %checks => x.kind !== 'A'): Array<B|C>);  // OK\n"
  },
  {
    "path": "tests/flow/predicates-abstract/filter.js",
    "content": "// @flow\n\n// Filter the contents of an array\n\ndeclare function my_filter<T, P: $Pred<1>>(v: Array<T>, cb: P): Array<$Refine<T,P,1>>;\n\ndeclare var arr: Array<mixed>;\nconst barr = my_filter(arr, is_string);\n(barr: Array<string>);\n\nfunction is_string(x): %checks {\n  return typeof x === \"string\";\n}\n"
  },
  {
    "path": "tests/flow/predicates-abstract/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow/predicates-abstract/refine.js",
    "content": "// @flow\n\n/*\n  $Pred<N> is an \"abstract predicate type\", i.e. denotes a (function) type that\n  refines N variables. So if `cb` is a function, then it should be refining\n  exactly N argument. It is abstract in that we do not need to specify:\n  (a) which variables are going to be refined (just the number), or (b) what\n  exactly the refinement (predicate) is going to be.\n\n  $Refine<T,P,k> is a refinement type, that refines type T with the k-th\n  argument that gets refined by an abstract preficate type P.\n*/\ndeclare function refine<T, P: $Pred<1>>(v: T, cb: P): $Refine<T,P,1>;\n// function refine(v, cb)\n// { if (cb(v)) { return v; } else { throw new Error(); } }\n\n/*\n  Use case\n*/\ndeclare var a: mixed;\nvar b = refine(a, is_string);\n(b: string);\n\ndeclare function refine_fst<T, P: $Pred<2>>(v: T, w: T, cb: P): $Refine<T,P,1>;\n// function refine_fst(v, w, cb)\n// { if (cb(v, w)) { return v; } else { throw new Error(); } }\n\ndeclare var c: mixed;\ndeclare var d: mixed;\n\nvar e = refine2(c, d, is_string_and_number);\n(e: string);\n\n\ndeclare function refine2<T, P: $Pred<2>>(v: T, w: T, cb: P): $Refine<T,P,1>;\n\n// function refine_fst(v, w, cb)\n// { if (cb(v, w)) { return w; } else { throw new Error(); } }\n\nfunction is_string(x): boolean %checks {\n  return typeof x === \"string\";\n}\n\nfunction is_string_and_number(x, y): %checks {\n  return typeof x === \"string\" && typeof y === \"number\";\n}\n"
  },
  {
    "path": "tests/flow/predicates-abstract/sanity-filter-union.js",
    "content": "// @flow\n\n// Filter the contents of an array\n\n\ndeclare function my_filter<T, P: $Pred<1>>(v: Array<T>, cb: P): Array<$Refine<T,P,1>>;\n\ntype A = { kind: 'A', u: number }\ntype B = { kind: 'B', v: string }\ntype C = { kind: 'C', y: boolean }\ntype D = { kind: 'D', x: boolean }\ntype E = { kind: 'E', y: boolean }\n\ndeclare var ab: Array<A|B|C>;\n\n(my_filter(ab, (x): %checks => x.kind === 'A'): Array<B>);    // ERROR\n(my_filter(ab, (x): %checks => x.kind !== 'A'): Array<A|C>);  // ERROR\n"
  },
  {
    "path": "tests/flow/predicates-abstract/sanity-filter.js",
    "content": "// @flow\n\ndeclare function my_filter<T, P: $Pred<1>>(v: Array<T>, cb: P): Array<$Refine<T,P,1>>;\n\n// Sanity check A: filtering the wrong type\ndeclare var a: Array<mixed>;\nconst b = my_filter(a, is_string);\n(b: Array<number>);\n\n\n// Sanity check B: Passing non-predicate function to filter\ndeclare var c: Array<mixed>;\nconst d = my_filter(c, is_string_regular);\n(d: Array<string>);\n\nfunction is_string(x): boolean %checks {\n  return typeof x === \"string\";\n}\n\nfunction is_string_regular(x): boolean {\n  return typeof x === \"string\";\n}\n"
  },
  {
    "path": "tests/flow/predicates-abstract/sanity-refine.js",
    "content": "// @flow\n\n// Sanity check A: the refinment position index is outside of the allowed range\ndeclare function refine<T, P: $Pred<1>>(v: T, cb: P): $Refine<T,P,2>;\n\ndeclare var a: mixed;\nvar b = refine(a, is_string);   // ERROR: index out of bounds\n(b: string);\n\n\n// Sanity check B: refine2 expects a function that accepts 3 arguments but\n// it is called with a function that takes 2\ndeclare var c: mixed;\ndeclare var d: mixed;\ndeclare var e: mixed;\n\ndeclare function refine3<T, P: $Pred<3>>(u: T, v: T, w: T, cb: P): $Refine<T,P,1>;\n\nvar e = refine3(c, d, e, is_string_and_number);\n(e: string);\n\nfunction is_string_and_number(x, y): %checks {\n  return typeof x === \"string\" && typeof y === \"number\";\n}\n\n\n// Sanity check C: expecting a predicate function but passed a non-predicate one\nvar e = refine(a, is_string_regular);   // ERROR: is_string_regular is not a\n                                        // predicate function\n(e: number);\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction is_string(x): %checks {\n  return typeof x === \"string\";\n}\n\nfunction is_string_regular(x)  {\n  return typeof x === \"string\";\n}\n\nfunction is_string_and_number(x, y): %checks {\n  return typeof x === \"string\" && typeof y === \"number\";\n}\n"
  },
  {
    "path": "tests/flow/predicates-declared/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`function-bind.js 1`] = `\n// @flow\n\n// Sanity checks:\n//  - use of bind in a position of a function predicate.\n//    (This case should fall through, as method calls\n//    are currently not supported.) The original behavior\n//    (including \\`havoc\\`) should be retained.\n\nclass C {\n  m() {\n    return true;\n  }\n  a: 1;\n\n  n() {\n    if(this.m.bind(this)) {\n      this.a;\n    }\n  }\n}\n\ndeclare var m: Function;\nconst o = { a: 1 };\n\nif (m.bind(o)) {\n  o.a;\n}\n\n\nclass D {\n  m: Function;\n\n  n() {\n    if(this.m({})) { }\n  }\n}\n\ndeclare var m: Function;\nconst x = \"\";\nif (m.bind(this)(x)) { }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// Sanity checks:\n//  - use of bind in a position of a function predicate.\n//    (This case should fall through, as method calls\n//    are currently not supported.) The original behavior\n//    (including \\`havoc\\`) should be retained.\n\nclass C {\n  m() {\n    return true;\n  }\n  a: 1;\n\n  n() {\n    if (this.m.bind(this)) {\n      this.a;\n    }\n  }\n}\n\ndeclare var m: Function;\nconst o = { a: 1 };\n\nif (m.bind(o)) {\n  o.a;\n}\n\nclass D {\n  m: Function;\n\n  n() {\n    if (this.m({})) {\n    }\n  }\n}\n\ndeclare var m: Function;\nconst x = \"\";\nif (m.bind(this)(x)) {\n}\n\n`;\n\nexports[`function-union.js 1`] = `\n// @flow\n\ndeclare function f1(x: mixed): boolean %checks(typeof x === \"string\");\ndeclare function f2(x: mixed): boolean %checks(Array.isArray(x));\n\ndeclare var cond: boolean;\n\n// Feature check:\nfunction foo(x: number | string | Array<string>): number {\n\n  var f = (cond) ? f1 : f2;\n\n  if (f(x)) {\n    return x.length;\n  } else {\n    return 1;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ndeclare function f1(x: mixed): boolean %checks(typeof x === \"string\");\ndeclare function f2(x: mixed): boolean %checks(Array.isArray(x));\n\ndeclare var cond: boolean;\n\n// Feature check:\nfunction foo(x: number | string | Array<string>): number {\n  var f = cond ? f1 : f2;\n\n  if (f(x)) {\n    return x.length;\n  } else {\n    return 1;\n  }\n}\n\n`;\n\nexports[`is-string-decl.js 1`] = `\n// @flow\n\ndeclare function is_string(x: mixed): boolean %checks(typeof x === \"string\");\ndeclare function is_number(x: mixed): boolean %checks(typeof x === \"number\");\n\n// Feature check:\nfunction foo(x: string | Array<string>): string {\n  if (is_string(x)) {\n    // The use of \\`is_string\\` as a conditional check\n    // should guarantee the narrowing of the type of \\`x\\`\n    // to string.\n    return x;\n  } else {\n    // Accordingly the negation of the above check\n    // guarantees that \\`x\\` here is an Array<string>\n    return x.join();\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ndeclare function is_string(x: mixed): boolean %checks(typeof x === \"string\");\ndeclare function is_number(x: mixed): boolean %checks(typeof x === \"number\");\n\n// Feature check:\nfunction foo(x: string | Array<string>): string {\n  if (is_string(x)) {\n    // The use of \\`is_string\\` as a conditional check\n    // should guarantee the narrowing of the type of \\`x\\`\n    // to string.\n    return x;\n  } else {\n    // Accordingly the negation of the above check\n    // guarantees that \\`x\\` here is an Array<string>\n    return x.join();\n  }\n}\n\n`;\n\nexports[`logical-or.js 1`] = `\n// @flow\n\n// Sanity check:\n// - conditional functions do not affect behavior of conditional\n//   expressions (e.g. \\`||\\`)\n\ndeclare function r(x: string): number;\nvar s = 'a';\nvar n = r(s) || 1;\n(n: number);\n\nvar x = \"\";\nif (x = r(s) || 1) {\n  (x: number);\n}\n\ndeclare var dollars: mixed;\n\nfunction foo(x: mixed) { return 1; }\n(foo(dollars) || 0);\n\n(Number(dollars) || 0);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// Sanity check:\n// - conditional functions do not affect behavior of conditional\n//   expressions (e.g. \\`||\\`)\n\ndeclare function r(x: string): number;\nvar s = \"a\";\nvar n = r(s) || 1;\n(n: number);\n\nvar x = \"\";\nif ((x = r(s) || 1)) {\n  (x: number);\n}\n\ndeclare var dollars: mixed;\n\nfunction foo(x: mixed) {\n  return 1;\n}\nfoo(dollars) || 0;\n\nNumber(dollars) || 0;\n\n`;\n\nexports[`object-invariant.js 1`] = `\n// @flow\n\n// Sanity check:\n// - preserving \\`havoc\\` semantics\n\ntype Meeting = {\n  organizer: ?Invitee,\n  es: Array<Invitee>\n}\n\ntype Invitee = {\n  fbid: number\n}\n\nfunction f(_this: { m: ?Meeting }): string {\n  if (!_this.m) {\n    return \"0\";\n  }\n\n  if (_this.m.es.some((a) => a.fbid === 0)) {\n\n  }\n  return \"3\";\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// Sanity check:\n// - preserving \\`havoc\\` semantics\n\ntype Meeting = {\n  organizer: ?Invitee,\n  es: Array<Invitee>\n};\n\ntype Invitee = {\n  fbid: number\n};\n\nfunction f(_this: { m: ?Meeting }): string {\n  if (!_this.m) {\n    return \"0\";\n  }\n\n  if (_this.m.es.some(a => a.fbid === 0)) {\n  }\n  return \"3\";\n}\n\n`;\n\nexports[`orig-string-tag-check.js 1`] = `\n// @flow\n\n// The original first-order case\n\nfunction foo(x: string | Array<string>): string {\n  if (typeof x === \"string\") {\n    return x; // [ERROR] x: Array<string> doesn't match return type\n  }\n  else {\n    return x.join(); // [ERROR] x: string doesn't have .join method\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// The original first-order case\n\nfunction foo(x: string | Array<string>): string {\n  if (typeof x === \"string\") {\n    return x; // [ERROR] x: Array<string> doesn't match return type\n  } else {\n    return x.join(); // [ERROR] x: string doesn't have .join method\n  }\n}\n\n`;\n\nexports[`sanity-fall-through.js 1`] = `\n// @flow\n\n// Sanity check:\n// - we should still be getting an error at the second return statement\n\ndeclare function pred<T>(x: T): boolean;\n\nfunction foo(s: Array<string>): string {\n  if (pred(s)) {\n    return \"1\";\n  }\n  return 1;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// Sanity check:\n// - we should still be getting an error at the second return statement\n\ndeclare function pred<T>(x: T): boolean;\n\nfunction foo(s: Array<string>): string {\n  if (pred(s)) {\n    return \"1\";\n  }\n  return 1;\n}\n\n`;\n\nexports[`sanity-invalid-calls.js 1`] = `\n// @flow\n\n// Sanity check:\n// - invalid calls at predicate positions\n\ndeclare function pred<T>(x: T): boolean;\n\nfunction foo(s: Array<string>): string {\n\n  if ((1)(s)) {\n    return \"1\";\n  }\n\n  if ((pred + 1)(\"s\")) {\n    return \"1\";\n  }\n\n  return \"1\"\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// Sanity check:\n// - invalid calls at predicate positions\n\ndeclare function pred<T>(x: T): boolean;\n\nfunction foo(s: Array<string>): string {\n  if (1(s)) {\n    return \"1\";\n  }\n\n  if ((pred + 1)(\"s\")) {\n    return \"1\";\n  }\n\n  return \"1\";\n}\n\n`;\n\nexports[`sanity-is-string-bug.js 1`] = `\n// @flow\n\ndeclare function is_string(x: mixed): boolean %checks(typeof x === \"string\");\ndeclare function is_number(x: mixed): boolean %checks(typeof x === \"number\");\n\n// Sanity check:\n// - Erroneous logic\n\nfunction bar(x: string | Array<string>): string {\n  if (is_number(x)) {\n    return x;\n  } else {\n    return x.join();    // error: both string and Array<string> can flow to x\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ndeclare function is_string(x: mixed): boolean %checks(typeof x === \"string\");\ndeclare function is_number(x: mixed): boolean %checks(typeof x === \"number\");\n\n// Sanity check:\n// - Erroneous logic\n\nfunction bar(x: string | Array<string>): string {\n  if (is_number(x)) {\n    return x;\n  } else {\n    return x.join(); // error: both string and Array<string> can flow to x\n  }\n}\n\n`;\n\nexports[`sanity-parameter-mismatch.js 1`] = `\n// @flow\n\n// Sanity check: make sure the parameters are checked as usual\n\ndeclare function foo(\n  input: mixed,\n  types: string | Array<string>\n): boolean %checks(typeof input === \"string\" || Array.isArray(input));\n\nfoo(3, 3);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// Sanity check: make sure the parameters are checked as usual\n\ndeclare function foo(\n  input: mixed,\n  types: string | Array<string>\n): boolean %checks(typeof input === \"string\" || Array.isArray(input));\n\nfoo(3, 3);\n\n`;\n\nexports[`sanity-pred-with-body.js 1`] = `\n// @flow\n\n// Sanity check:\n// - predicate functions cannot have bodies (can only be declarations)\n\nfunction pred(x: mixed): boolean %checks(typeof x === \"string\") { // error: cannot use pred type here\n  return typeof x === \"string\";\n}\n\nfunction foo(x: string | Array<string>): string {\n  if (pred(x)) {\n    return x;\n  }\n  return \"1\"\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// Sanity check:\n// - predicate functions cannot have bodies (can only be declarations)\n\nfunction pred(x: mixed): boolean %checks(typeof x === \"string\") {\n  // error: cannot use pred type here\n  return typeof x === \"string\";\n}\n\nfunction foo(x: string | Array<string>): string {\n  if (pred(x)) {\n    return x;\n  }\n  return \"1\";\n}\n\n`;\n\nexports[`sanity-return-type.js 1`] = `\n// @flow\n\ndeclare function f2(x: mixed): string %checks(Array.isArray(x));\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ndeclare function f2(x: mixed): string %checks(Array.isArray(x));\n\n`;\n"
  },
  {
    "path": "tests/flow/predicates-declared/function-bind.js",
    "content": "// @flow\n\n// Sanity checks:\n//  - use of bind in a position of a function predicate.\n//    (This case should fall through, as method calls\n//    are currently not supported.) The original behavior\n//    (including `havoc`) should be retained.\n\nclass C {\n  m() {\n    return true;\n  }\n  a: 1;\n\n  n() {\n    if(this.m.bind(this)) {\n      this.a;\n    }\n  }\n}\n\ndeclare var m: Function;\nconst o = { a: 1 };\n\nif (m.bind(o)) {\n  o.a;\n}\n\n\nclass D {\n  m: Function;\n\n  n() {\n    if(this.m({})) { }\n  }\n}\n\ndeclare var m: Function;\nconst x = \"\";\nif (m.bind(this)(x)) { }\n"
  },
  {
    "path": "tests/flow/predicates-declared/function-union.js",
    "content": "// @flow\n\ndeclare function f1(x: mixed): boolean %checks(typeof x === \"string\");\ndeclare function f2(x: mixed): boolean %checks(Array.isArray(x));\n\ndeclare var cond: boolean;\n\n// Feature check:\nfunction foo(x: number | string | Array<string>): number {\n\n  var f = (cond) ? f1 : f2;\n\n  if (f(x)) {\n    return x.length;\n  } else {\n    return 1;\n  }\n}\n"
  },
  {
    "path": "tests/flow/predicates-declared/is-string-decl.js",
    "content": "// @flow\n\ndeclare function is_string(x: mixed): boolean %checks(typeof x === \"string\");\ndeclare function is_number(x: mixed): boolean %checks(typeof x === \"number\");\n\n// Feature check:\nfunction foo(x: string | Array<string>): string {\n  if (is_string(x)) {\n    // The use of `is_string` as a conditional check\n    // should guarantee the narrowing of the type of `x`\n    // to string.\n    return x;\n  } else {\n    // Accordingly the negation of the above check\n    // guarantees that `x` here is an Array<string>\n    return x.join();\n  }\n}\n"
  },
  {
    "path": "tests/flow/predicates-declared/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow/predicates-declared/logical-or.js",
    "content": "// @flow\n\n// Sanity check:\n// - conditional functions do not affect behavior of conditional\n//   expressions (e.g. `||`)\n\ndeclare function r(x: string): number;\nvar s = 'a';\nvar n = r(s) || 1;\n(n: number);\n\nvar x = \"\";\nif (x = r(s) || 1) {\n  (x: number);\n}\n\ndeclare var dollars: mixed;\n\nfunction foo(x: mixed) { return 1; }\n(foo(dollars) || 0);\n\n(Number(dollars) || 0);\n"
  },
  {
    "path": "tests/flow/predicates-declared/object-invariant.js",
    "content": "// @flow\n\n// Sanity check:\n// - preserving `havoc` semantics\n\ntype Meeting = {\n  organizer: ?Invitee,\n  es: Array<Invitee>\n}\n\ntype Invitee = {\n  fbid: number\n}\n\nfunction f(_this: { m: ?Meeting }): string {\n  if (!_this.m) {\n    return \"0\";\n  }\n\n  if (_this.m.es.some((a) => a.fbid === 0)) {\n\n  }\n  return \"3\";\n}\n"
  },
  {
    "path": "tests/flow/predicates-declared/orig-string-tag-check.js",
    "content": "// @flow\n\n// The original first-order case\n\nfunction foo(x: string | Array<string>): string {\n  if (typeof x === \"string\") {\n    return x; // [ERROR] x: Array<string> doesn't match return type\n  }\n  else {\n    return x.join(); // [ERROR] x: string doesn't have .join method\n  }\n}\n"
  },
  {
    "path": "tests/flow/predicates-declared/sanity-fall-through.js",
    "content": "// @flow\n\n// Sanity check:\n// - we should still be getting an error at the second return statement\n\ndeclare function pred<T>(x: T): boolean;\n\nfunction foo(s: Array<string>): string {\n  if (pred(s)) {\n    return \"1\";\n  }\n  return 1;\n}\n"
  },
  {
    "path": "tests/flow/predicates-declared/sanity-invalid-calls.js",
    "content": "// @flow\n\n// Sanity check:\n// - invalid calls at predicate positions\n\ndeclare function pred<T>(x: T): boolean;\n\nfunction foo(s: Array<string>): string {\n\n  if ((1)(s)) {\n    return \"1\";\n  }\n\n  if ((pred + 1)(\"s\")) {\n    return \"1\";\n  }\n\n  return \"1\"\n}\n"
  },
  {
    "path": "tests/flow/predicates-declared/sanity-is-string-bug.js",
    "content": "// @flow\n\ndeclare function is_string(x: mixed): boolean %checks(typeof x === \"string\");\ndeclare function is_number(x: mixed): boolean %checks(typeof x === \"number\");\n\n// Sanity check:\n// - Erroneous logic\n\nfunction bar(x: string | Array<string>): string {\n  if (is_number(x)) {\n    return x;\n  } else {\n    return x.join();    // error: both string and Array<string> can flow to x\n  }\n}\n"
  },
  {
    "path": "tests/flow/predicates-declared/sanity-parameter-mismatch.js",
    "content": "// @flow\n\n// Sanity check: make sure the parameters are checked as usual\n\ndeclare function foo(\n  input: mixed,\n  types: string | Array<string>\n): boolean %checks(typeof input === \"string\" || Array.isArray(input));\n\nfoo(3, 3);\n"
  },
  {
    "path": "tests/flow/predicates-declared/sanity-pred-with-body.js",
    "content": "// @flow\n\n// Sanity check:\n// - predicate functions cannot have bodies (can only be declarations)\n\nfunction pred(x: mixed): boolean %checks(typeof x === \"string\") { // error: cannot use pred type here\n  return typeof x === \"string\";\n}\n\nfunction foo(x: string | Array<string>): string {\n  if (pred(x)) {\n    return x;\n  }\n  return \"1\"\n}\n"
  },
  {
    "path": "tests/flow/predicates-declared/sanity-return-type.js",
    "content": "// @flow\n\ndeclare function f2(x: mixed): string %checks(Array.isArray(x));\n"
  },
  {
    "path": "tests/flow/predicates-inferred/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`sanity.js 1`] = `\n// @flow\n\n// Sanity check: shouldn't be allowed to declare a predicate AND use \\`chekcs\\`\n\nfunction check(y): %checks(typeof y === \"string\") {\n  return typeof y === \"number\";\n}\n\ndeclare var y: number | boolean;\n\nif (check(y)) {\n  (y: number);\n}\n\n// Sanity: disallowed body\nfunction indirect_is_number(y): %checks {\n  var y = 1;\n  return typeof y === \"number\";\n}\n\nfunction bak(z: string | number): number {\n  if (indirect_is_number(z)) {\n    return z;\n  } else {\n    return z.length;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// Sanity check: shouldn't be allowed to declare a predicate AND use \\`chekcs\\`\n\nfunction check(y): %checks(typeof y === \"string\") {\n  return typeof y === \"number\";\n}\n\ndeclare var y: number | boolean;\n\nif (check(y)) {\n  (y: number);\n}\n\n// Sanity: disallowed body\nfunction indirect_is_number(y): %checks {\n  var y = 1;\n  return typeof y === \"number\";\n}\n\nfunction bak(z: string | number): number {\n  if (indirect_is_number(z)) {\n    return z;\n  } else {\n    return z.length;\n  }\n}\n\n`;\n\nexports[`sanity-multi-params.js 1`] = `\n// @flow\n\n// Feature: multi params\nfunction multi_param(w,x,y,z): %checks {\n  return typeof z === \"string\";\n}\n\nfunction foo(x: string | Array<string>): string {\n  if (multi_param(\"1\", \"2\", x, \"3\")) {\n    return x;\n  } else {\n    return x.join();\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// Feature: multi params\nfunction multi_param(w, x, y, z): %checks {\n  return typeof z === \"string\";\n}\n\nfunction foo(x: string | Array<string>): string {\n  if (multi_param(\"1\", \"2\", x, \"3\")) {\n    return x;\n  } else {\n    return x.join();\n  }\n}\n\n`;\n\nexports[`sanity-ordering.js 1`] = `\n// @flow\n\ndeclare var key: string;\ndeclare var obj: { page: ?Object; };\n\nif (dotAccess(obj)) {\n  (obj.page: Object);\n}\n\nfunction dotAccess(head, create) {\n  const path = 'path.location';\n  const stack = path.split('.');\n  do {\n    const key = stack.shift();\n    head = head[key] || create && (head[key] = {});\n  } while (stack.length && head);\n  return head;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ndeclare var key: string;\ndeclare var obj: { page: ?Object };\n\nif (dotAccess(obj)) {\n  (obj.page: Object);\n}\n\nfunction dotAccess(head, create) {\n  const path = \"path.location\";\n  const stack = path.split(\".\");\n  do {\n    const key = stack.shift();\n    head = head[key] || (create && (head[key] = {}));\n  } while (stack.length && head);\n  return head;\n}\n\n`;\n\nexports[`sanity-unbound-var.js 1`] = `\n// @flow\n\ndeclare var y: mixed;\n\n// Sanity check: this should fail, because the preficate function\n// checks \\`y\\` instead of \\`x\\`.\nfunction err(x): %checks {\n  return typeof y === \"string\";\n}\n\nfunction foo(x: string | Array<string>): string {\n  if (err(x)) {\n    return x;\n  } else {\n    return x.join();\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ndeclare var y: mixed;\n\n// Sanity check: this should fail, because the preficate function\n// checks \\`y\\` instead of \\`x\\`.\nfunction err(x): %checks {\n  return typeof y === \"string\";\n}\n\nfunction foo(x: string | Array<string>): string {\n  if (err(x)) {\n    return x;\n  } else {\n    return x.join();\n  }\n}\n\n`;\n\nexports[`simple-predicate-func.js 1`] = `\n// @flow\n\nfunction is_string(y): %checks {\n  return typeof y === \"string\";\n}\n\nfunction is_bool(y): %checks {\n  return typeof y === \"boolean\";\n}\n\nfunction is_number(y): %checks {\n  return typeof y === \"number\";\n}\n\n// Feature check:\nfunction foo(x: string | Array<string>): string {\n  if (is_string(x)) {\n    // The use of \\`is_string\\` as a conditional check\n    // should guarantee the narrowing of the type of \\`x\\`\n    // to string.\n    return x;\n  } else {\n    // Accordingly the negation of the above check\n    // guarantees that \\`x\\` here is an Array<string>\n    return x.join();\n  }\n}\n\n// Same as above but refining an offset\nfunction bar(z: { f: string | Array<string>}): string {\n  if (is_string(z.f)) {\n    return z.f;\n  } else {\n    return z.f.join();\n  }\n}\n\nfunction is_number_or_bool(y): %checks {\n  return is_number(y) || is_bool(y);\n}\n\nfunction baz(z: string | number): number {\n  if (is_number_or_bool(z)) {\n    return z;\n  } else {\n    return z.length;\n  }\n}\n\n// Feature: multi params\nfunction multi_param(w,x,y,z): %checks {\n  return typeof z === \"string\";\n}\n\nfunction foo(x: string | Array<string>): string {\n  if (multi_param(\"1\", \"2\", \"3\", x)) {\n    return x;\n  } else {\n    return x.join();\n  }\n}\n\nfunction foo(a, b) {\n  if (two_strings(a, b)) {\n    from_two_strings(a, b);\n  }\n}\n\nfunction two_strings(x,y): %checks {\n  return is_string(x) && is_string(y) ;\n}\n\ndeclare function from_two_strings(x: string, y: string): void;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nfunction is_string(y): %checks {\n  return typeof y === \"string\";\n}\n\nfunction is_bool(y): %checks {\n  return typeof y === \"boolean\";\n}\n\nfunction is_number(y): %checks {\n  return typeof y === \"number\";\n}\n\n// Feature check:\nfunction foo(x: string | Array<string>): string {\n  if (is_string(x)) {\n    // The use of \\`is_string\\` as a conditional check\n    // should guarantee the narrowing of the type of \\`x\\`\n    // to string.\n    return x;\n  } else {\n    // Accordingly the negation of the above check\n    // guarantees that \\`x\\` here is an Array<string>\n    return x.join();\n  }\n}\n\n// Same as above but refining an offset\nfunction bar(z: { f: string | Array<string> }): string {\n  if (is_string(z.f)) {\n    return z.f;\n  } else {\n    return z.f.join();\n  }\n}\n\nfunction is_number_or_bool(y): %checks {\n  return is_number(y) || is_bool(y);\n}\n\nfunction baz(z: string | number): number {\n  if (is_number_or_bool(z)) {\n    return z;\n  } else {\n    return z.length;\n  }\n}\n\n// Feature: multi params\nfunction multi_param(w, x, y, z): %checks {\n  return typeof z === \"string\";\n}\n\nfunction foo(x: string | Array<string>): string {\n  if (multi_param(\"1\", \"2\", \"3\", x)) {\n    return x;\n  } else {\n    return x.join();\n  }\n}\n\nfunction foo(a, b) {\n  if (two_strings(a, b)) {\n    from_two_strings(a, b);\n  }\n}\n\nfunction two_strings(x, y): %checks {\n  return is_string(x) && is_string(y);\n}\n\ndeclare function from_two_strings(x: string, y: string): void;\n\n`;\n\nexports[`simple-predicate-func-post.js 1`] = `\n// @flow\n\n// Feature check:\n// The predicate function is defined after the conditional check\n\nfunction foo(x: string | Array<string>): string {\n  if (is_string(x)) {\n    // The use of \\`is_string\\` as a conditional check\n    // should guarantee the narrowing of the type of \\`x\\`\n    // to string.\n    return x;\n  } else {\n    // Accordingly the negation of the above check\n    // guarantees that \\`x\\` here is an Array<string>\n    return x.join();\n  }\n}\n\nfunction is_string(x): %checks {\n  return typeof x === \"string\";\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// Feature check:\n// The predicate function is defined after the conditional check\n\nfunction foo(x: string | Array<string>): string {\n  if (is_string(x)) {\n    // The use of \\`is_string\\` as a conditional check\n    // should guarantee the narrowing of the type of \\`x\\`\n    // to string.\n    return x;\n  } else {\n    // Accordingly the negation of the above check\n    // guarantees that \\`x\\` here is an Array<string>\n    return x.join();\n  }\n}\n\nfunction is_string(x): %checks {\n  return typeof x === \"string\";\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/predicates-inferred/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow/predicates-inferred/sanity-multi-params.js",
    "content": "// @flow\n\n// Feature: multi params\nfunction multi_param(w,x,y,z): %checks {\n  return typeof z === \"string\";\n}\n\nfunction foo(x: string | Array<string>): string {\n  if (multi_param(\"1\", \"2\", x, \"3\")) {\n    return x;\n  } else {\n    return x.join();\n  }\n}\n"
  },
  {
    "path": "tests/flow/predicates-inferred/sanity-ordering.js",
    "content": "// @flow\n\ndeclare var key: string;\ndeclare var obj: { page: ?Object; };\n\nif (dotAccess(obj)) {\n  (obj.page: Object);\n}\n\nfunction dotAccess(head, create) {\n  const path = 'path.location';\n  const stack = path.split('.');\n  do {\n    const key = stack.shift();\n    head = head[key] || create && (head[key] = {});\n  } while (stack.length && head);\n  return head;\n}\n"
  },
  {
    "path": "tests/flow/predicates-inferred/sanity-unbound-var.js",
    "content": "// @flow\n\ndeclare var y: mixed;\n\n// Sanity check: this should fail, because the preficate function\n// checks `y` instead of `x`.\nfunction err(x): %checks {\n  return typeof y === \"string\";\n}\n\nfunction foo(x: string | Array<string>): string {\n  if (err(x)) {\n    return x;\n  } else {\n    return x.join();\n  }\n}\n"
  },
  {
    "path": "tests/flow/predicates-inferred/sanity.js",
    "content": "// @flow\n\n// Sanity check: shouldn't be allowed to declare a predicate AND use `chekcs`\n\nfunction check(y): %checks(typeof y === \"string\") {\n  return typeof y === \"number\";\n}\n\ndeclare var y: number | boolean;\n\nif (check(y)) {\n  (y: number);\n}\n\n// Sanity: disallowed body\nfunction indirect_is_number(y): %checks {\n  var y = 1;\n  return typeof y === \"number\";\n}\n\nfunction bak(z: string | number): number {\n  if (indirect_is_number(z)) {\n    return z;\n  } else {\n    return z.length;\n  }\n}\n"
  },
  {
    "path": "tests/flow/predicates-inferred/simple-predicate-func-post.js",
    "content": "// @flow\n\n// Feature check:\n// The predicate function is defined after the conditional check\n\nfunction foo(x: string | Array<string>): string {\n  if (is_string(x)) {\n    // The use of `is_string` as a conditional check\n    // should guarantee the narrowing of the type of `x`\n    // to string.\n    return x;\n  } else {\n    // Accordingly the negation of the above check\n    // guarantees that `x` here is an Array<string>\n    return x.join();\n  }\n}\n\nfunction is_string(x): %checks {\n  return typeof x === \"string\";\n}\n"
  },
  {
    "path": "tests/flow/predicates-inferred/simple-predicate-func.js",
    "content": "// @flow\n\nfunction is_string(y): %checks {\n  return typeof y === \"string\";\n}\n\nfunction is_bool(y): %checks {\n  return typeof y === \"boolean\";\n}\n\nfunction is_number(y): %checks {\n  return typeof y === \"number\";\n}\n\n// Feature check:\nfunction foo(x: string | Array<string>): string {\n  if (is_string(x)) {\n    // The use of `is_string` as a conditional check\n    // should guarantee the narrowing of the type of `x`\n    // to string.\n    return x;\n  } else {\n    // Accordingly the negation of the above check\n    // guarantees that `x` here is an Array<string>\n    return x.join();\n  }\n}\n\n// Same as above but refining an offset\nfunction bar(z: { f: string | Array<string>}): string {\n  if (is_string(z.f)) {\n    return z.f;\n  } else {\n    return z.f.join();\n  }\n}\n\nfunction is_number_or_bool(y): %checks {\n  return is_number(y) || is_bool(y);\n}\n\nfunction baz(z: string | number): number {\n  if (is_number_or_bool(z)) {\n    return z;\n  } else {\n    return z.length;\n  }\n}\n\n// Feature: multi params\nfunction multi_param(w,x,y,z): %checks {\n  return typeof z === \"string\";\n}\n\nfunction foo(x: string | Array<string>): string {\n  if (multi_param(\"1\", \"2\", \"3\", x)) {\n    return x;\n  } else {\n    return x.join();\n  }\n}\n\nfunction foo(a, b) {\n  if (two_strings(a, b)) {\n    from_two_strings(a, b);\n  }\n}\n\nfunction two_strings(x,y): %checks {\n  return is_string(x) && is_string(y) ;\n}\n\ndeclare function from_two_strings(x: string, y: string): void;\n"
  },
  {
    "path": "tests/flow/predicates-parsing/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`fail-0.js 1`] = `\n// @flow\n\n// Error: 'declare', 'checks' but missing predicate\n\ndeclare function f2(x: mixed): boolean %checks;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// Error: 'declare', 'checks' but missing predicate\n\ndeclare function f2(x: mixed): boolean %checks;\n\n`;\n\nexports[`fail-1.js 1`] = `\n// @flow\n\n// Error: no return statement\n\nfunction f6(x: mixed): %checks (x !== null) {  }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// Error: no return statement\n\nfunction f6(x: mixed): %checks(x !== null) {}\n\n`;\n\nexports[`fail-2.js 1`] = `\n// @flow\n\nvar a2 = (x: mixed): %checks (x !== null) => {        // Error: body form\n  var x = 1; return x;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nvar a2 = (x: mixed): %checks(x !== null) => {\n  // Error: body form\n  var x = 1;\n  return x;\n};\n\n`;\n\nexports[`fail-3.js 1`] = `\n// @flow\n\n// Cannot declare predicate with a function body is present.\n\nfunction f5(x: mixed): %checks (x !== null) { return x !== null }\n\nvar a2 = (x: mixed): %checks (x !== null) => x !== null;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// Cannot declare predicate with a function body is present.\n\nfunction f5(x: mixed): %checks(x !== null) {\n  return x !== null;\n}\n\nvar a2 = (x: mixed): %checks(x !== null) => x !== null;\n\n`;\n\nexports[`pass.js 1`] = `\n// @flow\n\ndeclare function f1(x: mixed): boolean;\n\ndeclare function f3(x: mixed): boolean %checks (x !== null);\n\ndeclare function f4(x: mixed): boolean %checks (x !== null);\n\nfunction f7(x: mixed):  %checks { return x !== null }\n\nvar a0 = (x: mixed) => x !== null;\n\nvar a1 = (x: mixed): %checks => x !== null;\n\n(x): %checks => x !== null;\n\nconst insert_a_really_big_predicated_arrow_function_name_here = (x)\n  : %checks => x !== null;\n\ndeclare var x;\n(x)\nchecks => 123;\n\ntype checks = any;\n\ndeclare function f(x: mixed): checks\n(typeof x === null);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ndeclare function f1(x: mixed): boolean;\n\ndeclare function f3(x: mixed): boolean %checks(x !== null);\n\ndeclare function f4(x: mixed): boolean %checks(x !== null);\n\nfunction f7(x: mixed): %checks {\n  return x !== null;\n}\n\nvar a0 = (x: mixed) => x !== null;\n\nvar a1 = (x: mixed): %checks => x !== null;\n\n(x): %checks => x !== null;\n\nconst insert_a_really_big_predicated_arrow_function_name_here = (x): %checks =>\n  x !== null;\n\ndeclare var x;\nx;\nchecks => 123;\n\ntype checks = any;\n\ndeclare function f(x: mixed): checks;\ntypeof x === null;\n\n`;\n"
  },
  {
    "path": "tests/flow/predicates-parsing/fail-0.js",
    "content": "// @flow\n\n// Error: 'declare', 'checks' but missing predicate\n\ndeclare function f2(x: mixed): boolean %checks;\n"
  },
  {
    "path": "tests/flow/predicates-parsing/fail-1.js",
    "content": "// @flow\n\n// Error: no return statement\n\nfunction f6(x: mixed): %checks (x !== null) {  }\n"
  },
  {
    "path": "tests/flow/predicates-parsing/fail-2.js",
    "content": "// @flow\n\nvar a2 = (x: mixed): %checks (x !== null) => {        // Error: body form\n  var x = 1; return x;\n}\n"
  },
  {
    "path": "tests/flow/predicates-parsing/fail-3.js",
    "content": "// @flow\n\n// Cannot declare predicate with a function body is present.\n\nfunction f5(x: mixed): %checks (x !== null) { return x !== null }\n\nvar a2 = (x: mixed): %checks (x !== null) => x !== null;\n"
  },
  {
    "path": "tests/flow/predicates-parsing/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow/predicates-parsing/pass.js",
    "content": "// @flow\n\ndeclare function f1(x: mixed): boolean;\n\ndeclare function f3(x: mixed): boolean %checks (x !== null);\n\ndeclare function f4(x: mixed): boolean %checks (x !== null);\n\nfunction f7(x: mixed):  %checks { return x !== null }\n\nvar a0 = (x: mixed) => x !== null;\n\nvar a1 = (x: mixed): %checks => x !== null;\n\n(x): %checks => x !== null;\n\nconst insert_a_really_big_predicated_arrow_function_name_here = (x)\n  : %checks => x !== null;\n\ndeclare var x;\n(x)\nchecks => 123;\n\ntype checks = any;\n\ndeclare function f(x: mixed): checks\n(typeof x === null);\n"
  },
  {
    "path": "tests/flow/private/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`private.js 1`] = `\nclass A {\n  x: number;\n  _x: string;\n  __x: number;\n  constructor() { this.x = 0; this._x = \"\"; this.__x = 0; }\n}\n\nclass B extends A {\n  foo() {\n    var x: number = this.x;\n    var _x: string = this._x;\n    var __x: number = this.__x;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {\n  x: number;\n  _x: string;\n  __x: number;\n  constructor() {\n    this.x = 0;\n    this._x = \"\";\n    this.__x = 0;\n  }\n}\n\nclass B extends A {\n  foo() {\n    var x: number = this.x;\n    var _x: string = this._x;\n    var __x: number = this.__x;\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/private/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/private/private.js",
    "content": "class A {\n  x: number;\n  _x: string;\n  __x: number;\n  constructor() { this.x = 0; this._x = \"\"; this.__x = 0; }\n}\n\nclass B extends A {\n  foo() {\n    var x: number = this.x;\n    var _x: string = this._x;\n    var __x: number = this.__x;\n  }\n}\n"
  },
  {
    "path": "tests/flow/promises/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`all.js 1`] = `\n// @flow\n\ndeclare var pstr: Promise<string>;\ndeclare var pnum: Promise<number>;\n\nPromise.all([\n  pstr,\n  pnum,\n  true, // non-Promise values passed through\n]).then((xs) => {\n  // tuple information is preserved\n  let [a,b,c] = xs;\n  (a: number);  // Error: string ~> number\n  (b: boolean); // Error: number ~> boolean\n  (c: string);  // Error: boolean ~> string\n\n  // array element type is (string | number | boolean)\n  xs.forEach(x => {\n    (x: void);  // Errors: string ~> void, number ~> void, boolean ~> void\n  });\n});\n\n// First argument is required\nPromise.all(); // Error: expected array instead of undefined (too few arguments)\n\n// Mis-typed arg\nPromise.all(0); // Error: expected array instead of number\n\n// Promise.all is a function\n(Promise.all : Function);\n\n// Promise.all supports iterables\nfunction test(val: Iterable<Promise<number>>) {\n  const r: Promise<Array<number>> = Promise.all(val);\n}\n\nfunction tes2(val: Map<string, Promise<number>>) {\n  const r: Promise<Array<number>> = Promise.all(val.values());\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ndeclare var pstr: Promise<string>;\ndeclare var pnum: Promise<number>;\n\nPromise.all([\n  pstr,\n  pnum,\n  true // non-Promise values passed through\n]).then(xs => {\n  // tuple information is preserved\n  let [a, b, c] = xs;\n  (a: number); // Error: string ~> number\n  (b: boolean); // Error: number ~> boolean\n  (c: string); // Error: boolean ~> string\n\n  // array element type is (string | number | boolean)\n  xs.forEach(x => {\n    (x: void); // Errors: string ~> void, number ~> void, boolean ~> void\n  });\n});\n\n// First argument is required\nPromise.all(); // Error: expected array instead of undefined (too few arguments)\n\n// Mis-typed arg\nPromise.all(0); // Error: expected array instead of number\n\n// Promise.all is a function\n(Promise.all: Function);\n\n// Promise.all supports iterables\nfunction test(val: Iterable<Promise<number>>) {\n  const r: Promise<Array<number>> = Promise.all(val);\n}\n\nfunction tes2(val: Map<string, Promise<number>>) {\n  const r: Promise<Array<number>> = Promise.all(val.values());\n}\n\n`;\n\nexports[`covariance.js 1`] = `\n/* @flow */\n\nasync function testAll() {\n  /* This is a test case from https://github.com/facebook/flow/issues/1143\n   * which was previously an error due to Array's invariance and an improper\n   * definition of Promise.all */\n    const x: Array<Promise<?string>> = [];\n    const y: Promise<Array<?string>> = Promise.all(x);\n    const z: Array<?string> = await y;\n}\n\nasync function testRace() {\n    const x: Array<Promise<?string>> = [];\n    const y: Promise<?string> = Promise.race(x);\n    const z: ?string = await y;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nasync function testAll() {\n  /* This is a test case from https://github.com/facebook/flow/issues/1143\n   * which was previously an error due to Array's invariance and an improper\n   * definition of Promise.all */\n  const x: Array<Promise<?string>> = [];\n  const y: Promise<Array<?string>> = Promise.all(x);\n  const z: Array<?string> = await y;\n}\n\nasync function testRace() {\n  const x: Array<Promise<?string>> = [];\n  const y: Promise<?string> = Promise.race(x);\n  const z: ?string = await y;\n}\n\n`;\n\nexports[`promise.js 1`] = `\n/**\n * @flow\n */\n\n//////////////////////////////////////////////////\n// == Promise constructor resolve() function == //\n//////////////////////////////////////////////////\n\n// Promise constructor resolve(T) -> then(T)\nnew Promise(function(resolve, reject) {\n  resolve(0);\n}).then(function(num) {\n  var a: number = num;\n\n  // TODO: The error message that results from this is almost useless\n  var b: string = num; // Error: number ~> string\n});\n\n// Promise constructor with arrow function resolve(T) -> then(T)\nnew Promise((resolve, reject) => resolve(0))\n  .then(function(num) {\n    var a: number = num;\n\n    // TODO: The error message that results from this is almost useless\n    var b: string = num; // Error: number ~> string\n  });\n\n// Promise constructor resolve(Promise<T>) -> then(T)\nnew Promise(function(resolve, reject) {\n  resolve(new Promise(function(resolve, reject) {\n    resolve(0);\n  }));\n}).then(function(num) {\n  var a: number = num;\n  var b: string = num; // Error: number ~> string\n});\n\n// Promise constructor resolve(Promise<Promise<T>>) -> then(T)\nnew Promise(function(resolve, reject) {\n  resolve(new Promise(function(resolve, reject) {\n    resolve(new Promise(function(resolve, reject) {\n      resolve(0);\n    }));\n  }));\n}).then(function(num) {\n  var a: number = num;\n  var b: string = num; // Error: number ~> string\n});\n\n// Promise constructor resolve(T); resolve(U); -> then(T|U)\nnew Promise(function(resolve, reject) {\n  if (Math.random()) {\n    resolve(42);\n  } else {\n    resolve('str');\n  }\n}).then(function(numOrStr) {\n  if (typeof numOrStr === 'string') {\n    var a: string = numOrStr;\n  } else {\n    var b: number = numOrStr;\n  }\n  var c: string = numOrStr; // Error: number|string -> string\n});\n\n/////////////////////////////////////////////////\n// == Promise constructor reject() function == //\n/////////////////////////////////////////////////\n\n// TODO: Promise constructor reject(T) -> catch(T)\nnew Promise(function(resolve, reject) {\n  reject(0);\n}).catch(function(num) {\n  var a: number = num;\n\n  // TODO\n  var b: string = num; // Error: number ~> string\n});\n\n// TODO: Promise constructor reject(Promise<T>) ~> catch(Promise<T>)\nnew Promise(function(resolve, reject) {\n  reject(new Promise(function(resolve, reject) {\n    reject(0);\n  }));\n}).catch(function(num) {\n  var a: Promise<number> = num;\n\n  // TODO\n  var b: number = num; // Error: Promise<Number> ~> number\n});\n\n// TODO: Promise constructor reject(T); reject(U); -> then(T|U)\nnew Promise(function(resolve, reject) {\n  if (Math.random()) {\n    reject(42);\n  } else {\n    reject('str');\n  }\n}).catch(function(numOrStr) {\n  if (typeof numOrStr === 'string') {\n    var a: string = numOrStr;\n  } else {\n    var b: number = numOrStr;\n  }\n\n  // TODO\n  var c: string = numOrStr; // Error: number|string -> string\n});\n\n/////////////////////////////\n// == Promise.resolve() == //\n/////////////////////////////\n\n// Promise.resolve(T) -> then(T)\nPromise.resolve(0).then(function(num) {\n  var a: number = num;\n  var b: string = num; // Error: number ~> string\n});\n\n// Promise.resolve(Promise<T>) -> then(T)\nPromise.resolve(Promise.resolve(0)).then(function(num) {\n  var a: number = num;\n  var b: string = num; // Error: number ~> string\n});\n\n// Promise.resolve(Promise<Promise<T>>) -> then(T)\nPromise.resolve(Promise.resolve(Promise.resolve(0))).then(function(num) {\n  var a: number = num;\n  var b: string = num; // Error: number ~> string\n});\n\n////////////////////////////\n// == Promise.reject() == //\n////////////////////////////\n\n// TODO: Promise.reject(T) -> catch(T)\nPromise.reject(0).catch(function(num) {\n  var a: number = num;\n\n  // TODO\n  var b: string = num; // Error: number ~> string\n});\n\n// TODO: Promise.reject(Promise<T>) -> catch(Promise<T>)\nPromise.reject(Promise.resolve(0)).then(function(num) {\n  var a: Promise<number> = num;\n\n  // TODO\n  var b: number = num; // Error: Promise<number> ~> number\n});\n\n//////////////////////////////////\n// == Promise.prototype.then == //\n//////////////////////////////////\n\n// resolvedPromise.then():T -> then(T)\nPromise.resolve(0)\n  .then(function(num) { return 'asdf'; })\n  .then(function(str) {\n    var a: string = str;\n    var b: number = str; // Error: string ~> number\n  });\n\n// resolvedPromise.then():Promise<T> -> then(T)\nPromise.resolve(0)\n  .then(function(num) { return Promise.resolve('asdf'); })\n  .then(function(str) {\n    var a: string = str;\n    var b: number = str; // Error: string ~> number\n  });\n\n// resolvedPromise.then():Promise<Promise<T>> -> then(T)\nPromise.resolve(0)\n  .then(function(num) { return Promise.resolve(Promise.resolve('asdf')); })\n  .then(function(str) {\n    var a: string = str;\n    var b: number = str; // Error: string ~> number\n  });\n\n// TODO: resolvedPromise.then(<throw(T)>) -> catch(T)\nPromise.resolve(0)\n  .then(function(num) {\n    throw 'str';\n  })\n  .catch(function(str) {\n    var a: string = str;\n\n    // TODO\n    var b: number = str; // Error: string ~> number\n  });\n\n///////////////////////////////////\n// == Promise.prototype.catch == //\n///////////////////////////////////\n\n// rejectedPromise.catch():U -> then(U)\nPromise.reject(0)\n  .catch(function(num) { return 'asdf'; })\n  .then(function(str) {\n    var a: string = str;\n    var b: number = str; // Error: string ~> number\n  });\n\n// rejectedPromise.catch():Promise<U> -> then(U)\nPromise.reject(0)\n  .catch(function(num) { return Promise.resolve('asdf'); })\n  .then(function(str) {\n    var a: string = str;\n    var b: number = str; // Error: string ~> number\n  });\n\n// rejectedPromise.catch():Promise<Promise<U>> -> then(U)\nPromise.reject(0)\n  .catch(function(num) { return Promise.resolve(Promise.resolve('asdf')); })\n  .then(function(str) {\n    var a: string = str;\n    var b: number = str; // Error: string ~> number\n  });\n\n// resolvedPromise<T> -> catch() -> then():?T\nPromise.resolve(0)\n  .catch(function(err) {})\n  .then(function(num) {\n    var a: ?number = num;\n    var b: string = num; // Error: string ~> number\n  });\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\n//////////////////////////////////////////////////\n// == Promise constructor resolve() function == //\n//////////////////////////////////////////////////\n\n// Promise constructor resolve(T) -> then(T)\nnew Promise(function(resolve, reject) {\n  resolve(0);\n}).then(function(num) {\n  var a: number = num;\n\n  // TODO: The error message that results from this is almost useless\n  var b: string = num; // Error: number ~> string\n});\n\n// Promise constructor with arrow function resolve(T) -> then(T)\nnew Promise((resolve, reject) => resolve(0)).then(function(num) {\n  var a: number = num;\n\n  // TODO: The error message that results from this is almost useless\n  var b: string = num; // Error: number ~> string\n});\n\n// Promise constructor resolve(Promise<T>) -> then(T)\nnew Promise(function(resolve, reject) {\n  resolve(\n    new Promise(function(resolve, reject) {\n      resolve(0);\n    })\n  );\n}).then(function(num) {\n  var a: number = num;\n  var b: string = num; // Error: number ~> string\n});\n\n// Promise constructor resolve(Promise<Promise<T>>) -> then(T)\nnew Promise(function(resolve, reject) {\n  resolve(\n    new Promise(function(resolve, reject) {\n      resolve(\n        new Promise(function(resolve, reject) {\n          resolve(0);\n        })\n      );\n    })\n  );\n}).then(function(num) {\n  var a: number = num;\n  var b: string = num; // Error: number ~> string\n});\n\n// Promise constructor resolve(T); resolve(U); -> then(T|U)\nnew Promise(function(resolve, reject) {\n  if (Math.random()) {\n    resolve(42);\n  } else {\n    resolve(\"str\");\n  }\n}).then(function(numOrStr) {\n  if (typeof numOrStr === \"string\") {\n    var a: string = numOrStr;\n  } else {\n    var b: number = numOrStr;\n  }\n  var c: string = numOrStr; // Error: number|string -> string\n});\n\n/////////////////////////////////////////////////\n// == Promise constructor reject() function == //\n/////////////////////////////////////////////////\n\n// TODO: Promise constructor reject(T) -> catch(T)\nnew Promise(function(resolve, reject) {\n  reject(0);\n}).catch(function(num) {\n  var a: number = num;\n\n  // TODO\n  var b: string = num; // Error: number ~> string\n});\n\n// TODO: Promise constructor reject(Promise<T>) ~> catch(Promise<T>)\nnew Promise(function(resolve, reject) {\n  reject(\n    new Promise(function(resolve, reject) {\n      reject(0);\n    })\n  );\n}).catch(function(num) {\n  var a: Promise<number> = num;\n\n  // TODO\n  var b: number = num; // Error: Promise<Number> ~> number\n});\n\n// TODO: Promise constructor reject(T); reject(U); -> then(T|U)\nnew Promise(function(resolve, reject) {\n  if (Math.random()) {\n    reject(42);\n  } else {\n    reject(\"str\");\n  }\n}).catch(function(numOrStr) {\n  if (typeof numOrStr === \"string\") {\n    var a: string = numOrStr;\n  } else {\n    var b: number = numOrStr;\n  }\n\n  // TODO\n  var c: string = numOrStr; // Error: number|string -> string\n});\n\n/////////////////////////////\n// == Promise.resolve() == //\n/////////////////////////////\n\n// Promise.resolve(T) -> then(T)\nPromise.resolve(0).then(function(num) {\n  var a: number = num;\n  var b: string = num; // Error: number ~> string\n});\n\n// Promise.resolve(Promise<T>) -> then(T)\nPromise.resolve(Promise.resolve(0)).then(function(num) {\n  var a: number = num;\n  var b: string = num; // Error: number ~> string\n});\n\n// Promise.resolve(Promise<Promise<T>>) -> then(T)\nPromise.resolve(Promise.resolve(Promise.resolve(0))).then(function(num) {\n  var a: number = num;\n  var b: string = num; // Error: number ~> string\n});\n\n////////////////////////////\n// == Promise.reject() == //\n////////////////////////////\n\n// TODO: Promise.reject(T) -> catch(T)\nPromise.reject(0).catch(function(num) {\n  var a: number = num;\n\n  // TODO\n  var b: string = num; // Error: number ~> string\n});\n\n// TODO: Promise.reject(Promise<T>) -> catch(Promise<T>)\nPromise.reject(Promise.resolve(0)).then(function(num) {\n  var a: Promise<number> = num;\n\n  // TODO\n  var b: number = num; // Error: Promise<number> ~> number\n});\n\n//////////////////////////////////\n// == Promise.prototype.then == //\n//////////////////////////////////\n\n// resolvedPromise.then():T -> then(T)\nPromise.resolve(0)\n  .then(function(num) {\n    return \"asdf\";\n  })\n  .then(function(str) {\n    var a: string = str;\n    var b: number = str; // Error: string ~> number\n  });\n\n// resolvedPromise.then():Promise<T> -> then(T)\nPromise.resolve(0)\n  .then(function(num) {\n    return Promise.resolve(\"asdf\");\n  })\n  .then(function(str) {\n    var a: string = str;\n    var b: number = str; // Error: string ~> number\n  });\n\n// resolvedPromise.then():Promise<Promise<T>> -> then(T)\nPromise.resolve(0)\n  .then(function(num) {\n    return Promise.resolve(Promise.resolve(\"asdf\"));\n  })\n  .then(function(str) {\n    var a: string = str;\n    var b: number = str; // Error: string ~> number\n  });\n\n// TODO: resolvedPromise.then(<throw(T)>) -> catch(T)\nPromise.resolve(0)\n  .then(function(num) {\n    throw \"str\";\n  })\n  .catch(function(str) {\n    var a: string = str;\n\n    // TODO\n    var b: number = str; // Error: string ~> number\n  });\n\n///////////////////////////////////\n// == Promise.prototype.catch == //\n///////////////////////////////////\n\n// rejectedPromise.catch():U -> then(U)\nPromise.reject(0)\n  .catch(function(num) {\n    return \"asdf\";\n  })\n  .then(function(str) {\n    var a: string = str;\n    var b: number = str; // Error: string ~> number\n  });\n\n// rejectedPromise.catch():Promise<U> -> then(U)\nPromise.reject(0)\n  .catch(function(num) {\n    return Promise.resolve(\"asdf\");\n  })\n  .then(function(str) {\n    var a: string = str;\n    var b: number = str; // Error: string ~> number\n  });\n\n// rejectedPromise.catch():Promise<Promise<U>> -> then(U)\nPromise.reject(0)\n  .catch(function(num) {\n    return Promise.resolve(Promise.resolve(\"asdf\"));\n  })\n  .then(function(str) {\n    var a: string = str;\n    var b: number = str; // Error: string ~> number\n  });\n\n// resolvedPromise<T> -> catch() -> then():?T\nPromise.resolve(0).catch(function(err) {}).then(function(num) {\n  var a: ?number = num;\n  var b: string = num; // Error: string ~> number\n});\n\n`;\n\nexports[`resolve_global.js 1`] = `\n/**\n * test Promise name resolution\n * @flow\n */\n\n/**\n * 1. introduce shadowing bindings for important names\n */\nclass Promise {}\n\n/**\n * 2. implicit refs to Promise during desugaring should be unaffected\n */\nasync function foo(x: boolean) {\n  if (x) {\n    return {bar: 'baz'};\n  } else {\n    return null;\n  }\n}\n\nasync function run() {\n  console.log(await foo(true));\n  console.log(await foo(false));\n}\n\nrun();\n\n/**\n * 3. but explicit name refs from code and annos resolve\n * using the usual rules\n */\n// error: \\`Promise\\` in return expr is the local binding\nasync function bar() {\n  return Promise.resolve(0);\n}\n\n// error: return type anno is a ref to the local binding\nasync function baz(): Promise<number> {\n  return 0;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * test Promise name resolution\n * @flow\n */\n\n/**\n * 1. introduce shadowing bindings for important names\n */\nclass Promise {}\n\n/**\n * 2. implicit refs to Promise during desugaring should be unaffected\n */\nasync function foo(x: boolean) {\n  if (x) {\n    return { bar: \"baz\" };\n  } else {\n    return null;\n  }\n}\n\nasync function run() {\n  console.log(await foo(true));\n  console.log(await foo(false));\n}\n\nrun();\n\n/**\n * 3. but explicit name refs from code and annos resolve\n * using the usual rules\n */\n// error: \\`Promise\\` in return expr is the local binding\nasync function bar() {\n  return Promise.resolve(0);\n}\n\n// error: return type anno is a ref to the local binding\nasync function baz(): Promise<number> {\n  return 0;\n}\n\n`;\n\nexports[`resolve_void.js 1`] = `\n// @flow\n\n(Promise.resolve(): Promise<number>); // error\n\n(Promise.resolve(undefined): Promise<number>); // error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n(Promise.resolve(): Promise<number>); // error\n\n(Promise.resolve(undefined): Promise<number>); // error\n\n`;\n"
  },
  {
    "path": "tests/flow/promises/all.js",
    "content": "// @flow\n\ndeclare var pstr: Promise<string>;\ndeclare var pnum: Promise<number>;\n\nPromise.all([\n  pstr,\n  pnum,\n  true, // non-Promise values passed through\n]).then((xs) => {\n  // tuple information is preserved\n  let [a,b,c] = xs;\n  (a: number);  // Error: string ~> number\n  (b: boolean); // Error: number ~> boolean\n  (c: string);  // Error: boolean ~> string\n\n  // array element type is (string | number | boolean)\n  xs.forEach(x => {\n    (x: void);  // Errors: string ~> void, number ~> void, boolean ~> void\n  });\n});\n\n// First argument is required\nPromise.all(); // Error: expected array instead of undefined (too few arguments)\n\n// Mis-typed arg\nPromise.all(0); // Error: expected array instead of number\n\n// Promise.all is a function\n(Promise.all : Function);\n\n// Promise.all supports iterables\nfunction test(val: Iterable<Promise<number>>) {\n  const r: Promise<Array<number>> = Promise.all(val);\n}\n\nfunction tes2(val: Map<string, Promise<number>>) {\n  const r: Promise<Array<number>> = Promise.all(val.values());\n}\n"
  },
  {
    "path": "tests/flow/promises/covariance.js",
    "content": "/* @flow */\n\nasync function testAll() {\n  /* This is a test case from https://github.com/facebook/flow/issues/1143\n   * which was previously an error due to Array's invariance and an improper\n   * definition of Promise.all */\n    const x: Array<Promise<?string>> = [];\n    const y: Promise<Array<?string>> = Promise.all(x);\n    const z: Array<?string> = await y;\n}\n\nasync function testRace() {\n    const x: Array<Promise<?string>> = [];\n    const y: Promise<?string> = Promise.race(x);\n    const z: ?string = await y;\n}\n"
  },
  {
    "path": "tests/flow/promises/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/promises/promise.js",
    "content": "/**\n * @flow\n */\n\n//////////////////////////////////////////////////\n// == Promise constructor resolve() function == //\n//////////////////////////////////////////////////\n\n// Promise constructor resolve(T) -> then(T)\nnew Promise(function(resolve, reject) {\n  resolve(0);\n}).then(function(num) {\n  var a: number = num;\n\n  // TODO: The error message that results from this is almost useless\n  var b: string = num; // Error: number ~> string\n});\n\n// Promise constructor with arrow function resolve(T) -> then(T)\nnew Promise((resolve, reject) => resolve(0))\n  .then(function(num) {\n    var a: number = num;\n\n    // TODO: The error message that results from this is almost useless\n    var b: string = num; // Error: number ~> string\n  });\n\n// Promise constructor resolve(Promise<T>) -> then(T)\nnew Promise(function(resolve, reject) {\n  resolve(new Promise(function(resolve, reject) {\n    resolve(0);\n  }));\n}).then(function(num) {\n  var a: number = num;\n  var b: string = num; // Error: number ~> string\n});\n\n// Promise constructor resolve(Promise<Promise<T>>) -> then(T)\nnew Promise(function(resolve, reject) {\n  resolve(new Promise(function(resolve, reject) {\n    resolve(new Promise(function(resolve, reject) {\n      resolve(0);\n    }));\n  }));\n}).then(function(num) {\n  var a: number = num;\n  var b: string = num; // Error: number ~> string\n});\n\n// Promise constructor resolve(T); resolve(U); -> then(T|U)\nnew Promise(function(resolve, reject) {\n  if (Math.random()) {\n    resolve(42);\n  } else {\n    resolve('str');\n  }\n}).then(function(numOrStr) {\n  if (typeof numOrStr === 'string') {\n    var a: string = numOrStr;\n  } else {\n    var b: number = numOrStr;\n  }\n  var c: string = numOrStr; // Error: number|string -> string\n});\n\n/////////////////////////////////////////////////\n// == Promise constructor reject() function == //\n/////////////////////////////////////////////////\n\n// TODO: Promise constructor reject(T) -> catch(T)\nnew Promise(function(resolve, reject) {\n  reject(0);\n}).catch(function(num) {\n  var a: number = num;\n\n  // TODO\n  var b: string = num; // Error: number ~> string\n});\n\n// TODO: Promise constructor reject(Promise<T>) ~> catch(Promise<T>)\nnew Promise(function(resolve, reject) {\n  reject(new Promise(function(resolve, reject) {\n    reject(0);\n  }));\n}).catch(function(num) {\n  var a: Promise<number> = num;\n\n  // TODO\n  var b: number = num; // Error: Promise<Number> ~> number\n});\n\n// TODO: Promise constructor reject(T); reject(U); -> then(T|U)\nnew Promise(function(resolve, reject) {\n  if (Math.random()) {\n    reject(42);\n  } else {\n    reject('str');\n  }\n}).catch(function(numOrStr) {\n  if (typeof numOrStr === 'string') {\n    var a: string = numOrStr;\n  } else {\n    var b: number = numOrStr;\n  }\n\n  // TODO\n  var c: string = numOrStr; // Error: number|string -> string\n});\n\n/////////////////////////////\n// == Promise.resolve() == //\n/////////////////////////////\n\n// Promise.resolve(T) -> then(T)\nPromise.resolve(0).then(function(num) {\n  var a: number = num;\n  var b: string = num; // Error: number ~> string\n});\n\n// Promise.resolve(Promise<T>) -> then(T)\nPromise.resolve(Promise.resolve(0)).then(function(num) {\n  var a: number = num;\n  var b: string = num; // Error: number ~> string\n});\n\n// Promise.resolve(Promise<Promise<T>>) -> then(T)\nPromise.resolve(Promise.resolve(Promise.resolve(0))).then(function(num) {\n  var a: number = num;\n  var b: string = num; // Error: number ~> string\n});\n\n////////////////////////////\n// == Promise.reject() == //\n////////////////////////////\n\n// TODO: Promise.reject(T) -> catch(T)\nPromise.reject(0).catch(function(num) {\n  var a: number = num;\n\n  // TODO\n  var b: string = num; // Error: number ~> string\n});\n\n// TODO: Promise.reject(Promise<T>) -> catch(Promise<T>)\nPromise.reject(Promise.resolve(0)).then(function(num) {\n  var a: Promise<number> = num;\n\n  // TODO\n  var b: number = num; // Error: Promise<number> ~> number\n});\n\n//////////////////////////////////\n// == Promise.prototype.then == //\n//////////////////////////////////\n\n// resolvedPromise.then():T -> then(T)\nPromise.resolve(0)\n  .then(function(num) { return 'asdf'; })\n  .then(function(str) {\n    var a: string = str;\n    var b: number = str; // Error: string ~> number\n  });\n\n// resolvedPromise.then():Promise<T> -> then(T)\nPromise.resolve(0)\n  .then(function(num) { return Promise.resolve('asdf'); })\n  .then(function(str) {\n    var a: string = str;\n    var b: number = str; // Error: string ~> number\n  });\n\n// resolvedPromise.then():Promise<Promise<T>> -> then(T)\nPromise.resolve(0)\n  .then(function(num) { return Promise.resolve(Promise.resolve('asdf')); })\n  .then(function(str) {\n    var a: string = str;\n    var b: number = str; // Error: string ~> number\n  });\n\n// TODO: resolvedPromise.then(<throw(T)>) -> catch(T)\nPromise.resolve(0)\n  .then(function(num) {\n    throw 'str';\n  })\n  .catch(function(str) {\n    var a: string = str;\n\n    // TODO\n    var b: number = str; // Error: string ~> number\n  });\n\n///////////////////////////////////\n// == Promise.prototype.catch == //\n///////////////////////////////////\n\n// rejectedPromise.catch():U -> then(U)\nPromise.reject(0)\n  .catch(function(num) { return 'asdf'; })\n  .then(function(str) {\n    var a: string = str;\n    var b: number = str; // Error: string ~> number\n  });\n\n// rejectedPromise.catch():Promise<U> -> then(U)\nPromise.reject(0)\n  .catch(function(num) { return Promise.resolve('asdf'); })\n  .then(function(str) {\n    var a: string = str;\n    var b: number = str; // Error: string ~> number\n  });\n\n// rejectedPromise.catch():Promise<Promise<U>> -> then(U)\nPromise.reject(0)\n  .catch(function(num) { return Promise.resolve(Promise.resolve('asdf')); })\n  .then(function(str) {\n    var a: string = str;\n    var b: number = str; // Error: string ~> number\n  });\n\n// resolvedPromise<T> -> catch() -> then():?T\nPromise.resolve(0)\n  .catch(function(err) {})\n  .then(function(num) {\n    var a: ?number = num;\n    var b: string = num; // Error: string ~> number\n  });\n"
  },
  {
    "path": "tests/flow/promises/resolve_global.js",
    "content": "/**\n * test Promise name resolution\n * @flow\n */\n\n/**\n * 1. introduce shadowing bindings for important names\n */\nclass Promise {}\n\n/**\n * 2. implicit refs to Promise during desugaring should be unaffected\n */\nasync function foo(x: boolean) {\n  if (x) {\n    return {bar: 'baz'};\n  } else {\n    return null;\n  }\n}\n\nasync function run() {\n  console.log(await foo(true));\n  console.log(await foo(false));\n}\n\nrun();\n\n/**\n * 3. but explicit name refs from code and annos resolve\n * using the usual rules\n */\n// error: `Promise` in return expr is the local binding\nasync function bar() {\n  return Promise.resolve(0);\n}\n\n// error: return type anno is a ref to the local binding\nasync function baz(): Promise<number> {\n  return 0;\n}\n"
  },
  {
    "path": "tests/flow/promises/resolve_void.js",
    "content": "// @flow\n\n(Promise.resolve(): Promise<number>); // error\n\n(Promise.resolve(undefined): Promise<number>); // error\n"
  },
  {
    "path": "tests/flow/pure_component/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nvar React = require('react');\n\nclass C extends React.PureComponent {\n  props: { x: number };\n}\n(<C />); // error (\\`x\\` is a required prop)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar React = require(\"react\");\n\nclass C extends React.PureComponent {\n  props: { x: number };\n}\n<C />; // error (\\`x\\` is a required prop)\n\n`;\n"
  },
  {
    "path": "tests/flow/pure_component/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/pure_component/test.js",
    "content": "var React = require('react');\n\nclass C extends React.PureComponent {\n  props: { x: number };\n}\n(<C />); // error (`x` is a required prop)\n"
  },
  {
    "path": "tests/flow/qualified/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`qualified.js 1`] = `\nclass C { }\nvar M = { C: C };\n\nvar x:M.C = 0;\n\ntype foo = {bar: number};\n\ndeclare var of_type_foo: foo;\ntype bar = typeof of_type_foo.bar;\n\nvar a: bar = 42;\nvar b: bar = 'asdf'; // Error: string ~> number\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {}\nvar M = { C: C };\n\nvar x: M.C = 0;\n\ntype foo = { bar: number };\n\ndeclare var of_type_foo: foo;\ntype bar = typeof of_type_foo.bar;\n\nvar a: bar = 42;\nvar b: bar = \"asdf\"; // Error: string ~> number\n\n`;\n"
  },
  {
    "path": "tests/flow/qualified/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/qualified/qualified.js",
    "content": "class C { }\nvar M = { C: C };\n\nvar x:M.C = 0;\n\ntype foo = {bar: number};\n\ndeclare var of_type_foo: foo;\ntype bar = typeof of_type_foo.bar;\n\nvar a: bar = 42;\nvar b: bar = 'asdf'; // Error: string ~> number\n"
  },
  {
    "path": "tests/flow/react/ArityError.react.js",
    "content": "/**\n * @providesModule ArityError.react\n */\nvar React = require('react');\nvar AudienceInsightsContainer = React.createClass({\n  renderComponent(AudienceInsights: ReactClass<*>) {\n    return <AudienceInsights />;\n  },\n});\n\nmodule.exports = AudienceInsightsContainer;\n"
  },
  {
    "path": "tests/flow/react/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`ArityError.react.js 1`] = `\n/**\n * @providesModule ArityError.react\n */\nvar React = require('react');\nvar AudienceInsightsContainer = React.createClass({\n  renderComponent(AudienceInsights: ReactClass<*>) {\n    return <AudienceInsights />;\n  },\n});\n\nmodule.exports = AudienceInsightsContainer;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule ArityError.react\n */\nvar React = require(\"react\");\nvar AudienceInsightsContainer = React.createClass({\n  renderComponent(AudienceInsights: ReactClass<*>) {\n    return <AudienceInsights />;\n  }\n});\n\nmodule.exports = AudienceInsightsContainer;\n\n`;\n\nexports[`create_class.js 1`] = `\nimport React from \"react\";\n\nconst A = React.createClass({\n  mixins: [{ propTypes: { foo: React.PropTypes.string.isRequired } }],\n  propTypes: { bar: React.PropTypes.number.isRequired },\n  m() {\n    (this.props.foo: empty); // error: string ~> empty\n    (this.props.bar: empty); // error: number ~> empty\n  }\n});\n\nconst B = React.createClass({\n  p: \"\",\n  m() {\n    this.p = 0; // error: number ~> string\n  },\n  mm() {\n    this.m.apply(null); // OK: this.m is autobound, so \\`this.p\\` will always be found\n  }\n});\n\nconst C = React.createClass({\n  getInitialState(): Object {\n    return { foo: 0 };\n  },\n  m() {\n    this.state.foo; // OK: state is unknown\n  }\n});\n\nconst D = React.createClass({\n  mixins: [{\n    getInitialState(): Object {\n      return { foo: 0 };\n    },\n  }],\n  getInitialState() {\n    return { bar: 0 };\n  },\n  m() {\n    this.state.foo; // OK: state is unknown (due to unknown mixin)\n  }\n});\n\nconst E = React.createClass({\n  foo: 0,\n  m() {\n    (this.foo: string); // error: number ~> string\n  },\n  mm() {\n    var props: { m(): void } = { m: this.m };\n    props.m(); // OK: this.m is autobound, so \\`this.foo\\` will always be found\n  }\n});\n\nconst F = React.createClass({\n  getInitialState(): { [string]: mixed } {\n    return { foo: 0 };\n  },\n  m() {\n    this.state.foo;\n    this.state.bar;\n  },\n});\n\nconst G = React.createClass({\n  mixins: [],\n  autobind: true,\n  statics: {},\n  m() {\n    (this.mixins: mixed); // error: property \\`mixins\\` not found\n    (this.autobind: mixed); // error: property \\`autobind\\` not found\n    (this.statics: mixed); // error: property \\`statics\\` not found\n  },\n});\n\nconst H = React.createClass({\n  statics: { q: 0 },\n  getDefaultProps() {\n    (this.q: empty); // error: number ~> empty\n    return {};\n  },\n});\n\nconst I = React.createClass({\n  propTypes: ({}: {[string]: any}),\n  m() {\n    (this.props.foo: empty); // OK\n  }\n});\n\nconst J = React.createClass({\n  mixins: [{\n    getInitialState() {\n      return this.constructor.calculateState();\n    },\n  }],\n  statics: {\n    calculateState() {\n      return { foo: 0 };\n    },\n  },\n  m() {\n    (this.state.foo: empty); // number ~> empty\n  },\n});\n\nconst K = React.createClass({\n  propTypes: {\n    foo: React.PropTypes.string.isRequired,\n  },\n  getInitialState() {\n    this.mm(); // cause error in mm below\n    return this.props;\n  },\n  m() {\n    (this.props.foo: empty); // string ~> empty\n    (this.state.foo: empty); // string ~> empty\n  },\n  mm() {\n    this.state.foo; // error: property fo not found (called by getInitialState)\n  }\n});\n\nconst L = React.createClass({\n  propTypes: {\n    foo: React.PropTypes.string.isRequired,\n  },\n  getInitialState() {\n    return { bar: 0 };\n  },\n  componentWillMount() {\n    (this.props.foo: empty); // string ~> empty\n    return 0; // number ~> void\n  },\n  componentDidMount() {\n    (this.props.foo: empty); // string ~> empty\n    return 0; // number ~> void\n  },\n  componentWillReceiveProps(nextProps) {\n    (this.props.foo: empty); // string ~> empty\n    (nextProps.foo: empty); // string ~> empty\n    return 0; // number ~> void\n  },\n  shouldComponentUpdate(nextProps, nextState) {\n    (this.props.foo: empty); // string ~> empty\n    (this.state.bar: empty); // number ~> empty\n    (nextProps.foo: empty); // string ~> empty\n    (nextState.bar: empty); // number ~> empty\n    return 0; // number ~> bool\n  },\n  componentWillUpdate(nextProps, nextState) {\n    (this.props.foo: empty); // string ~> empty\n    (this.state.bar: empty); // number ~> empty\n    (nextProps.foo: empty); // string ~> empty\n    (nextState.bar: empty); // number ~> empty\n    return 0; // number ~> void\n  },\n  componentDidUpdate(nextProps, nextState) {\n    (this.props.foo: empty); // string ~> empty\n    (this.state.bar: empty); // number ~> empty\n    (nextProps.foo: empty); // string ~> empty\n    (nextState.bar: empty); // number ~> empty\n    return 0; // number ~> void\n  },\n  componentWillUnmount() {\n    (this.props.foo: empty); // string ~> empty\n    (this.state.bar: empty); // number ~> empty\n    return 0; // number ~> void\n  },\n});\n\nReact.createClass({}); // error: spec must be [x] exact and [ ] sealed\nReact.createClass(({}: {})); // error: spec must be [ ] exact and [x] sealed\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport React from \"react\";\n\nconst A = React.createClass({\n  mixins: [{ propTypes: { foo: React.PropTypes.string.isRequired } }],\n  propTypes: { bar: React.PropTypes.number.isRequired },\n  m() {\n    (this.props.foo: empty); // error: string ~> empty\n    (this.props.bar: empty); // error: number ~> empty\n  }\n});\n\nconst B = React.createClass({\n  p: \"\",\n  m() {\n    this.p = 0; // error: number ~> string\n  },\n  mm() {\n    this.m.apply(null); // OK: this.m is autobound, so \\`this.p\\` will always be found\n  }\n});\n\nconst C = React.createClass({\n  getInitialState(): Object {\n    return { foo: 0 };\n  },\n  m() {\n    this.state.foo; // OK: state is unknown\n  }\n});\n\nconst D = React.createClass({\n  mixins: [\n    {\n      getInitialState(): Object {\n        return { foo: 0 };\n      }\n    }\n  ],\n  getInitialState() {\n    return { bar: 0 };\n  },\n  m() {\n    this.state.foo; // OK: state is unknown (due to unknown mixin)\n  }\n});\n\nconst E = React.createClass({\n  foo: 0,\n  m() {\n    (this.foo: string); // error: number ~> string\n  },\n  mm() {\n    var props: { m(): void } = { m: this.m };\n    props.m(); // OK: this.m is autobound, so \\`this.foo\\` will always be found\n  }\n});\n\nconst F = React.createClass({\n  getInitialState(): { [string]: mixed } {\n    return { foo: 0 };\n  },\n  m() {\n    this.state.foo;\n    this.state.bar;\n  }\n});\n\nconst G = React.createClass({\n  mixins: [],\n  autobind: true,\n  statics: {},\n  m() {\n    (this.mixins: mixed); // error: property \\`mixins\\` not found\n    (this.autobind: mixed); // error: property \\`autobind\\` not found\n    (this.statics: mixed); // error: property \\`statics\\` not found\n  }\n});\n\nconst H = React.createClass({\n  statics: { q: 0 },\n  getDefaultProps() {\n    (this.q: empty); // error: number ~> empty\n    return {};\n  }\n});\n\nconst I = React.createClass({\n  propTypes: ({}: { [string]: any }),\n  m() {\n    (this.props.foo: empty); // OK\n  }\n});\n\nconst J = React.createClass({\n  mixins: [\n    {\n      getInitialState() {\n        return this.constructor.calculateState();\n      }\n    }\n  ],\n  statics: {\n    calculateState() {\n      return { foo: 0 };\n    }\n  },\n  m() {\n    (this.state.foo: empty); // number ~> empty\n  }\n});\n\nconst K = React.createClass({\n  propTypes: {\n    foo: React.PropTypes.string.isRequired\n  },\n  getInitialState() {\n    this.mm(); // cause error in mm below\n    return this.props;\n  },\n  m() {\n    (this.props.foo: empty); // string ~> empty\n    (this.state.foo: empty); // string ~> empty\n  },\n  mm() {\n    this.state.foo; // error: property fo not found (called by getInitialState)\n  }\n});\n\nconst L = React.createClass({\n  propTypes: {\n    foo: React.PropTypes.string.isRequired\n  },\n  getInitialState() {\n    return { bar: 0 };\n  },\n  componentWillMount() {\n    (this.props.foo: empty); // string ~> empty\n    return 0; // number ~> void\n  },\n  componentDidMount() {\n    (this.props.foo: empty); // string ~> empty\n    return 0; // number ~> void\n  },\n  componentWillReceiveProps(nextProps) {\n    (this.props.foo: empty); // string ~> empty\n    (nextProps.foo: empty); // string ~> empty\n    return 0; // number ~> void\n  },\n  shouldComponentUpdate(nextProps, nextState) {\n    (this.props.foo: empty); // string ~> empty\n    (this.state.bar: empty); // number ~> empty\n    (nextProps.foo: empty); // string ~> empty\n    (nextState.bar: empty); // number ~> empty\n    return 0; // number ~> bool\n  },\n  componentWillUpdate(nextProps, nextState) {\n    (this.props.foo: empty); // string ~> empty\n    (this.state.bar: empty); // number ~> empty\n    (nextProps.foo: empty); // string ~> empty\n    (nextState.bar: empty); // number ~> empty\n    return 0; // number ~> void\n  },\n  componentDidUpdate(nextProps, nextState) {\n    (this.props.foo: empty); // string ~> empty\n    (this.state.bar: empty); // number ~> empty\n    (nextProps.foo: empty); // string ~> empty\n    (nextState.bar: empty); // number ~> empty\n    return 0; // number ~> void\n  },\n  componentWillUnmount() {\n    (this.props.foo: empty); // string ~> empty\n    (this.state.bar: empty); // number ~> empty\n    return 0; // number ~> void\n  }\n});\n\nReact.createClass({}); // error: spec must be [x] exact and [ ] sealed\nReact.createClass(({}: {})); // error: spec must be [ ] exact and [x] sealed\n\n`;\n\nexports[`create_class_initial_state_sealed.js 1`] = `\nimport React from \"react\";\n\n// initial state = None\nReact.createClass({\n  f() {\n    this.setState({ q: 0 });\n  },\n  g() {\n    (this.state.q: empty); // number ~> empty\n  }\n});\n\n// initial state = Some (exact & sealed) [lit]\nReact.createClass({\n  getInitialState() {\n    return { p: 0 };\n  },\n  f() {\n    this.setState({ q: 0 });\n  },\n  g() {\n    (this.state.q: empty); // number ~> empty\n  }\n});\n\n// initial state = Some (exact & sealed) [annot]\nReact.createClass({\n  getInitialState(): {| p: number |} {\n    return { p: 0 };\n  },\n  f() {\n    this.setState({ q: 0 });\n  },\n  g() {\n    (this.state.q: empty); // number ~> empty\n  }\n});\n\n// initial state = Some (inexact & sealed) [annot]\nReact.createClass({\n  getInitialState(): { p: number } {\n    return { p: 0 };\n  },\n  f() {\n    this.setState({ q: 0 }); // property \\`q\\` not found\n  },\n  g() {\n    (this.state.q: empty); // property \\`q\\` not found\n  }\n});\n\n// mixins = (exact & sealed) + (exact & sealed)\nReact.createClass({\n  mixins: [{\n    getInitialState() {\n      return { foo: 0 };\n    },\n  }],\n  getInitialState() {\n    return { bar: 0 };\n  },\n  f() {\n    this.setState({ baz: 0 });\n  },\n  g() {\n    (this.state.baz: empty); // number ~> empty\n  }\n});\n\n// mixins = (exact & sealed) + (inexact & sealed)\nReact.createClass({\n  mixins: [{\n    getInitialState(): { foo: number } {\n      return { foo: 0 };\n    },\n  }],\n  getInitialState() {\n    return { bar: 0 };\n  },\n  f() {\n    this.setState({ baz: 0 }); // property \\`baz\\`  not found\n  },\n  g() {\n    (this.state.baz: empty); // property \\`baz\\` not found\n  }\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport React from \"react\";\n\n// initial state = None\nReact.createClass({\n  f() {\n    this.setState({ q: 0 });\n  },\n  g() {\n    (this.state.q: empty); // number ~> empty\n  }\n});\n\n// initial state = Some (exact & sealed) [lit]\nReact.createClass({\n  getInitialState() {\n    return { p: 0 };\n  },\n  f() {\n    this.setState({ q: 0 });\n  },\n  g() {\n    (this.state.q: empty); // number ~> empty\n  }\n});\n\n// initial state = Some (exact & sealed) [annot]\nReact.createClass({\n  getInitialState(): {| p: number |} {\n    return { p: 0 };\n  },\n  f() {\n    this.setState({ q: 0 });\n  },\n  g() {\n    (this.state.q: empty); // number ~> empty\n  }\n});\n\n// initial state = Some (inexact & sealed) [annot]\nReact.createClass({\n  getInitialState(): { p: number } {\n    return { p: 0 };\n  },\n  f() {\n    this.setState({ q: 0 }); // property \\`q\\` not found\n  },\n  g() {\n    (this.state.q: empty); // property \\`q\\` not found\n  }\n});\n\n// mixins = (exact & sealed) + (exact & sealed)\nReact.createClass({\n  mixins: [\n    {\n      getInitialState() {\n        return { foo: 0 };\n      }\n    }\n  ],\n  getInitialState() {\n    return { bar: 0 };\n  },\n  f() {\n    this.setState({ baz: 0 });\n  },\n  g() {\n    (this.state.baz: empty); // number ~> empty\n  }\n});\n\n// mixins = (exact & sealed) + (inexact & sealed)\nReact.createClass({\n  mixins: [\n    {\n      getInitialState(): { foo: number } {\n        return { foo: 0 };\n      }\n    }\n  ],\n  getInitialState() {\n    return { bar: 0 };\n  },\n  f() {\n    this.setState({ baz: 0 }); // property \\`baz\\`  not found\n  },\n  g() {\n    (this.state.baz: empty); // property \\`baz\\` not found\n  }\n});\n\n`;\n\nexports[`create_class_statics_sealed.js 1`] = `\nimport React from \"react\";\n\n// statics = None\nconst A = React.createClass({ p: 0 });\n(A.bar: empty); // number ~> empty (inflow below)\nA.bar = 0;\n\n// statics = Some (exact & sealed) [lit]\nconst B = React.createClass({\n  statics: { foo: 0 },\n});\n(B.foo: empty); // number ~> empty\n(B.bar: empty); // number ~> empty (inflow below)\nB.bar = 0;\n\n// statics = Some (exact & sealed) [annot]\nconst C = React.createClass({\n  statics: ({ foo: 0 }: {| foo: number |}),\n});\n(C.foo: empty); // number ~> empty\n(C.bar: empty); // number ~> empty (inflow below)\nC.bar = 0;\n\n// statics = Some (inexact & sealed) [annot]\nconst D = React.createClass({\n  statics: ({ foo: 0 }: { foo: number }),\n});\n(D.foo: empty); // number ~> empty\n(D.bar: empty); // property \\`bar\\` not found\nD.bar = 0; // property \\`bar\\` not found\n\n// mixins: (exact & sealed) + (exact & sealed)\nconst E = React.createClass({\n  mixins: [{\n    statics: { foo: 0 },\n  }],\n  statics: { bar: 0 },\n});\n(E.foo: empty); // number ~> empty\n(E.bar: empty); // number ~> empty\n(E.baz: empty); // number ~> empty (inflow below)\nE.baz = 0;\n\n// mixins: (exact & sealed) + (inexact & sealed)\nconst F = React.createClass({\n  mixins: [{\n    statics: ({ foo: 0 }: { foo: number }),\n  }],\n  statics: { bar: 0 },\n});\n(F.foo: empty); // number ~> empty\n(F.bar: empty); // number ~> empty\n(F.baz: empty); // number ~> empty (inflow below)\nF.baz = 0;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport React from \"react\";\n\n// statics = None\nconst A = React.createClass({ p: 0 });\n(A.bar: empty); // number ~> empty (inflow below)\nA.bar = 0;\n\n// statics = Some (exact & sealed) [lit]\nconst B = React.createClass({\n  statics: { foo: 0 }\n});\n(B.foo: empty); // number ~> empty\n(B.bar: empty); // number ~> empty (inflow below)\nB.bar = 0;\n\n// statics = Some (exact & sealed) [annot]\nconst C = React.createClass({\n  statics: ({ foo: 0 }: {| foo: number |})\n});\n(C.foo: empty); // number ~> empty\n(C.bar: empty); // number ~> empty (inflow below)\nC.bar = 0;\n\n// statics = Some (inexact & sealed) [annot]\nconst D = React.createClass({\n  statics: ({ foo: 0 }: { foo: number })\n});\n(D.foo: empty); // number ~> empty\n(D.bar: empty); // property \\`bar\\` not found\nD.bar = 0; // property \\`bar\\` not found\n\n// mixins: (exact & sealed) + (exact & sealed)\nconst E = React.createClass({\n  mixins: [\n    {\n      statics: { foo: 0 }\n    }\n  ],\n  statics: { bar: 0 }\n});\n(E.foo: empty); // number ~> empty\n(E.bar: empty); // number ~> empty\n(E.baz: empty); // number ~> empty (inflow below)\nE.baz = 0;\n\n// mixins: (exact & sealed) + (inexact & sealed)\nconst F = React.createClass({\n  mixins: [\n    {\n      statics: ({ foo: 0 }: { foo: number })\n    }\n  ],\n  statics: { bar: 0 }\n});\n(F.foo: empty); // number ~> empty\n(F.bar: empty); // number ~> empty\n(F.baz: empty); // number ~> empty (inflow below)\nF.baz = 0;\n\n`;\n\nexports[`createElement_string.js 1`] = `\n// @flow\nimport React from 'react';\n\nclass Bar extends React.Component {}\n\nclass Foo extends React.Component {\n  render() {\n    const Cmp = Math.random() < 0.5 ? 'div' : Bar;\n    return (<Cmp/>);\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nimport React from \"react\";\n\nclass Bar extends React.Component {}\n\nclass Foo extends React.Component {\n  render() {\n    const Cmp = Math.random() < 0.5 ? \"div\" : Bar;\n    return <Cmp />;\n  }\n}\n\n`;\n\nexports[`createElementRequiredProp_string.js 1`] = `\n// @flow\nimport React from 'react';\n\nclass Bar extends React.Component {\n  props: {\n    test: number,\n  };\n  render() {\n    return (\n      <div>\n        {this.props.test}\n      </div>\n    )\n  }\n}\n\nclass Foo extends React.Component {\n  render() {\n    const Cmp = Math.random() < 0.5 ? 'div' : Bar;\n    return (<Cmp/>);\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nimport React from \"react\";\n\nclass Bar extends React.Component {\n  props: {\n    test: number\n  };\n  render() {\n    return <div>{this.props.test}</div>;\n  }\n}\n\nclass Foo extends React.Component {\n  render() {\n    const Cmp = Math.random() < 0.5 ? \"div\" : Bar;\n    return <Cmp />;\n  }\n}\n\n`;\n\nexports[`import_react.js 1`] = `\n/* @flow */\n\nimport react from \"react\";\nimport {Component} from \"react\";\n\nvar a: Component<*,*,*> = new react.Component();\nvar b: number = new react.Component(); // Error: ReactComponent ~> number\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nimport react from \"react\";\nimport { Component } from \"react\";\n\nvar a: Component<*, *, *> = new react.Component();\nvar b: number = new react.Component(); // Error: ReactComponent ~> number\n\n`;\n\nexports[`jsx_spread.js 1`] = `\n/* @flow */\n\nvar React = require('react');\nvar Foo = React.createClass({\n  propTypes: {\n    bar: React.PropTypes.string.isRequired,\n  },\n});\n\nvar props = {bar: 42};\nvar blah = <Foo {...props} />; // error bar, number given string expected\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar React = require(\"react\");\nvar Foo = React.createClass({\n  propTypes: {\n    bar: React.PropTypes.string.isRequired\n  }\n});\n\nvar props = { bar: 42 };\nvar blah = <Foo {...props} />; // error bar, number given string expected\n\n`;\n\nexports[`proptype_any.js 1`] = `\nconst React = require(\"react\");\n\nvar AnyExample = React.createClass({\n  propTypes: {\n    foo: (0: any), // OK\n  },\n});\n\n(<AnyExample />); // OK\n(<AnyExample foo={(0: mixed)} />); // OK\n\nvar AnyFunExample = React.createClass({\n  propTypes: {\n    foo: (() => {}: Function), // OK\n  },\n});\n\n(<AnyFunExample />); // OK\n(<AnyFunExample foo={(0: mixed)} />); // OK\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst React = require(\"react\");\n\nvar AnyExample = React.createClass({\n  propTypes: {\n    foo: (0: any) // OK\n  }\n});\n\n<AnyExample />; // OK\n<AnyExample foo={(0: mixed)} />; // OK\n\nvar AnyFunExample = React.createClass({\n  propTypes: {\n    foo: (() => {}: Function) // OK\n  }\n});\n\n<AnyFunExample />; // OK\n<AnyFunExample foo={(0: mixed)} />; // OK\n\n`;\n\nexports[`proptype_arrayOf.js 1`] = `\n/* @flow */\n\nvar React = require('react');\nvar Example = React.createClass({\n  propTypes: {\n    arr: React.PropTypes.arrayOf(React.PropTypes.number).isRequired,\n  },\n});\n\nvar ok_empty = <Example arr={[]} />\nvar ok_numbers = <Example arr={[1, 2]} />\n\nvar fail_missing = <Example />\nvar fail_not_array = <Example arr={2} />\nvar fail_mistyped_elems = <Example arr={[1, \"foo\"]} />\n\n/* Since the \\`number\\` proptype argument is not required, React will actually\n   allow \\`null\\` and \\`undefined\\` elements in the \\`arr\\` prop, but Flow has\n   currently ignores the innter prop type's required flag. */\nvar todo_required = <Example arr={[null]} />\n\nvar OptionalExample = React.createClass({\n  propTypes: {\n    arr: React.PropTypes.arrayOf(React.PropTypes.number),\n  }\n});\n\n(<OptionalExample />); // OK\n(<OptionalExample arr={[0]} />); // OK\n(<OptionalExample arr={[\"\"]} />); // error: string ~> number\n\nvar AnyExample = React.createClass({\n  propTypes: {\n    arr: React.PropTypes.arrayOf((0:any)), // OK\n  },\n});\n\n(<AnyExample arr={0} />); // error: still needs to be an array\n(<AnyExample arr={[0]} />); // OK\n\nvar InvalidExample = React.createClass({\n  propTypes: {\n    arr: React.PropTypes.arrayOf(0), // error: number not a prop type\n  },\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar React = require(\"react\");\nvar Example = React.createClass({\n  propTypes: {\n    arr: React.PropTypes.arrayOf(React.PropTypes.number).isRequired\n  }\n});\n\nvar ok_empty = <Example arr={[]} />;\nvar ok_numbers = <Example arr={[1, 2]} />;\n\nvar fail_missing = <Example />;\nvar fail_not_array = <Example arr={2} />;\nvar fail_mistyped_elems = <Example arr={[1, \"foo\"]} />;\n\n/* Since the \\`number\\` proptype argument is not required, React will actually\n   allow \\`null\\` and \\`undefined\\` elements in the \\`arr\\` prop, but Flow has\n   currently ignores the innter prop type's required flag. */\nvar todo_required = <Example arr={[null]} />;\n\nvar OptionalExample = React.createClass({\n  propTypes: {\n    arr: React.PropTypes.arrayOf(React.PropTypes.number)\n  }\n});\n\n<OptionalExample />; // OK\n<OptionalExample arr={[0]} />; // OK\n<OptionalExample arr={[\"\"]} />; // error: string ~> number\n\nvar AnyExample = React.createClass({\n  propTypes: {\n    arr: React.PropTypes.arrayOf((0: any)) // OK\n  }\n});\n\n<AnyExample arr={0} />; // error: still needs to be an array\n<AnyExample arr={[0]} />; // OK\n\nvar InvalidExample = React.createClass({\n  propTypes: {\n    arr: React.PropTypes.arrayOf(0) // error: number not a prop type\n  }\n});\n\n`;\n\nexports[`proptype_custom_validator.js 1`] = `\nconst React = require(\"react\");\n\n// Custom validator must match \\`ReactPropsCheckType\\`\nvar Example = React.createClass({\n  propTypes: {\n    foo(props, propName, componentName, href) {\n      (props: empty); // ok: props is \\`any\\`\n      (propName: empty); // error: propName is a string\n      (componentName: empty); // error: componentName is a string\n      (href: empty); // error: href is an optional string\n      return (0: mixed); // error: should return ?Error\n    },\n  }\n});\n\n// Inferred prop type is optional \\`any\\`\n(<Example />);\n(<Example foo={(0: mixed)} />);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst React = require(\"react\");\n\n// Custom validator must match \\`ReactPropsCheckType\\`\nvar Example = React.createClass({\n  propTypes: {\n    foo(props, propName, componentName, href) {\n      (props: empty); // ok: props is \\`any\\`\n      (propName: empty); // error: propName is a string\n      (componentName: empty); // error: componentName is a string\n      (href: empty); // error: href is an optional string\n      return (0: mixed); // error: should return ?Error\n    }\n  }\n});\n\n// Inferred prop type is optional \\`any\\`\n<Example />;\n<Example foo={(0: mixed)} />;\n\n`;\n\nexports[`proptype_func.js 1`] = `\n/* @flow */\n\nvar React = require('react');\nvar Example = React.createClass({\n  propTypes: {\n    func: React.PropTypes.func.isRequired\n  },\n});\n\nvar ok_void = <Example func={() => {}} />;\nvar ok_args = <Example func={(x) => {}} />;\nvar ok_retval = <Example func={() => 1} />\n\nvar fail_mistyped = <Example func={2} />\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar React = require(\"react\");\nvar Example = React.createClass({\n  propTypes: {\n    func: React.PropTypes.func.isRequired\n  }\n});\n\nvar ok_void = <Example func={() => {}} />;\nvar ok_args = <Example func={x => {}} />;\nvar ok_retval = <Example func={() => 1} />;\n\nvar fail_mistyped = <Example func={2} />;\n\n`;\n\nexports[`proptype_incompatible.js 1`] = `\nconst React = require(\"react\");\n\nvar Example = React.createClass({\n  propTypes: {\n    foo: 0, // error: \\`0\\` is not a prop type\n  },\n});\n\n(<Example />); // OK: don't cascade errors\n(<Example foo={(0:mixed)} />); // OK: don't cascade errors\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst React = require(\"react\");\n\nvar Example = React.createClass({\n  propTypes: {\n    foo: 0 // error: \\`0\\` is not a prop type\n  }\n});\n\n<Example />; // OK: don't cascade errors\n<Example foo={(0: mixed)} />; // OK: don't cascade errors\n\n`;\n\nexports[`proptype_instanceOf.js 1`] = `\n/* @flow */\n\nclass A {}\nclass B extends A {}\nclass C extends B {}\n\nvar React = require('react');\nvar Example = React.createClass({\n  propTypes: {\n    x: React.PropTypes.instanceOf(B),\n  }\n});\n\n(<Example x={new A} />); // error: A ~> B\n(<Example x={new B} />); // OK\n(<Example x={new C} />); // OK (C ~> B)\n(<Example x=\"wrong\" />); // error: string ~> B\n\nclass Poly<T> {x:T}\nvar PolyExample = React.createClass({\n  propTypes: {\n    x: React.PropTypes.instanceOf(Poly).isRequired,\n  },\n  m() {\n    (this.props.x.x: empty); // OK, T instantiated to \\`any\\`\n  }\n});\n\n// Different instantiations don't interact\n(<PolyExample x={(new Poly(): Poly<string>)} />); // OK\n(<PolyExample x={(new Poly(): Poly<number>)} />); // OK\n\nclass PolyDefault<T=string> {x:T}\nvar PolyDefaultExample = React.createClass({\n  propTypes: {\n    x: React.PropTypes.instanceOf(PolyDefault).isRequired,\n  },\n  m() {\n    (this.props.x.x: empty); // OK, T instantiated to \\`any\\`\n  }\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nclass A {}\nclass B extends A {}\nclass C extends B {}\n\nvar React = require(\"react\");\nvar Example = React.createClass({\n  propTypes: {\n    x: React.PropTypes.instanceOf(B)\n  }\n});\n\n<Example x={new A()} />; // error: A ~> B\n<Example x={new B()} />; // OK\n<Example x={new C()} />; // OK (C ~> B)\n<Example x=\"wrong\" />; // error: string ~> B\n\nclass Poly<T> {\n  x: T;\n}\nvar PolyExample = React.createClass({\n  propTypes: {\n    x: React.PropTypes.instanceOf(Poly).isRequired\n  },\n  m() {\n    (this.props.x.x: empty); // OK, T instantiated to \\`any\\`\n  }\n});\n\n// Different instantiations don't interact\n<PolyExample x={(new Poly(): Poly<string>)} />; // OK\n<PolyExample x={(new Poly(): Poly<number>)} />; // OK\n\nclass PolyDefault<T = string> {\n  x: T;\n}\nvar PolyDefaultExample = React.createClass({\n  propTypes: {\n    x: React.PropTypes.instanceOf(PolyDefault).isRequired\n  },\n  m() {\n    (this.props.x.x: empty); // OK, T instantiated to \\`any\\`\n  }\n});\n\n`;\n\nexports[`proptype_missing.js 1`] = `\n/* @flow */\n\n/* If you create a react component with createClass() but don't specify the\n * propTypes, what should the type of props be?\n *\n * It used to be an empty object, but we didn't enforce that correctly, so\n * people could do whatever they wanted with this.props.\n *\n * As of 0.21.0 it started to be an error when people used this.props in a\n * strict equality situation. It was weird that this was only sometimes\n * enforced, so glevi changed this.props to be Object by default.\n *\n * We may change this back to the empty object at some point and fix the\n * situations where it didn't used to error\n */\nvar React = require('react');\nvar Foo = React.createClass({\n  getID(): string {\n    // So this would have been an error in 0.21.0 if we didn't make this.props\n    // Object\n    switch (this.props.name) {\n      case 'a': return 'Bob';\n      default: return 'Alice';\n    }\n  },\n\n  render() {\n    // But this never errored\n    return <div id={this.props.name} />;\n  }\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n/* If you create a react component with createClass() but don't specify the\n * propTypes, what should the type of props be?\n *\n * It used to be an empty object, but we didn't enforce that correctly, so\n * people could do whatever they wanted with this.props.\n *\n * As of 0.21.0 it started to be an error when people used this.props in a\n * strict equality situation. It was weird that this was only sometimes\n * enforced, so glevi changed this.props to be Object by default.\n *\n * We may change this back to the empty object at some point and fix the\n * situations where it didn't used to error\n */\nvar React = require(\"react\");\nvar Foo = React.createClass({\n  getID(): string {\n    // So this would have been an error in 0.21.0 if we didn't make this.props\n    // Object\n    switch (this.props.name) {\n      case \"a\":\n        return \"Bob\";\n      default:\n        return \"Alice\";\n    }\n  },\n\n  render() {\n    // But this never errored\n    return <div id={this.props.name} />;\n  }\n});\n\n`;\n\nexports[`proptype_object.js 1`] = `\n/* @flow */\n\nvar React = require('react');\nvar Example = React.createClass({\n  propTypes: {\n    object: React.PropTypes.object.isRequired\n  },\n});\n\nvar ok_empty = <Example object={{}} />;\nvar ok_props = <Example object={{foo: \"bar\"}} />;\n\nvar fail_mistyped = <Example object={2} />\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar React = require(\"react\");\nvar Example = React.createClass({\n  propTypes: {\n    object: React.PropTypes.object.isRequired\n  }\n});\n\nvar ok_empty = <Example object={{}} />;\nvar ok_props = <Example object={{ foo: \"bar\" }} />;\n\nvar fail_mistyped = <Example object={2} />;\n\n`;\n\nexports[`proptype_objectOf.js 1`] = `\n/* @flow */\n\nvar React = require('react');\nvar Example = React.createClass({\n  propTypes: {\n    obj: React.PropTypes.objectOf(React.PropTypes.number).isRequired\n  },\n});\n\nvar ok_empty = <Example obj={{}} />\nvar ok_numbers = <Example obj={{foo: 1, bar: 2}} />\n\nvar fail_missing = <Example />\nvar fail_not_object = <Example obj={2} />\nvar fail_mistyped_props = <Example obj={{foo: \"foo\"}} />\n\n/* Since the \\`number\\` proptype argument is not required, React will actually\n   allow \\`null\\` and \\`undefined\\` elements in the \\`obj\\` prop, but Flow has\n   currently ignores the innter prop type's required flag. */\nvar todo_required = <Example obj={{p:null}} />\n\nvar OptionalExample = React.createClass({\n  propTypes: {\n    obj: React.PropTypes.objectOf(React.PropTypes.number),\n  }\n});\n\n(<OptionalExample />); // OK\n(<OptionalExample obj={{p:0}} />); // OK\n(<OptionalExample obj={{p:\"\"}} />); // error: string ~> number\n\nvar AnyExample = React.createClass({\n  propTypes: {\n    obj: React.PropTypes.objectOf((0:any)), // OK\n  },\n});\n\n(<AnyExample obj={0} />); // error: still needs to be an object\n(<AnyExample obj={{p:0}} />); // OK\n\nvar InvalidExample = React.createClass({\n  propTypes: {\n    obj: React.PropTypes.objectOf(0), // error: number not a prop type\n  },\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar React = require(\"react\");\nvar Example = React.createClass({\n  propTypes: {\n    obj: React.PropTypes.objectOf(React.PropTypes.number).isRequired\n  }\n});\n\nvar ok_empty = <Example obj={{}} />;\nvar ok_numbers = <Example obj={{ foo: 1, bar: 2 }} />;\n\nvar fail_missing = <Example />;\nvar fail_not_object = <Example obj={2} />;\nvar fail_mistyped_props = <Example obj={{ foo: \"foo\" }} />;\n\n/* Since the \\`number\\` proptype argument is not required, React will actually\n   allow \\`null\\` and \\`undefined\\` elements in the \\`obj\\` prop, but Flow has\n   currently ignores the innter prop type's required flag. */\nvar todo_required = <Example obj={{ p: null }} />;\n\nvar OptionalExample = React.createClass({\n  propTypes: {\n    obj: React.PropTypes.objectOf(React.PropTypes.number)\n  }\n});\n\n<OptionalExample />; // OK\n<OptionalExample obj={{ p: 0 }} />; // OK\n<OptionalExample obj={{ p: \"\" }} />; // error: string ~> number\n\nvar AnyExample = React.createClass({\n  propTypes: {\n    obj: React.PropTypes.objectOf((0: any)) // OK\n  }\n});\n\n<AnyExample obj={0} />; // error: still needs to be an object\n<AnyExample obj={{ p: 0 }} />; // OK\n\nvar InvalidExample = React.createClass({\n  propTypes: {\n    obj: React.PropTypes.objectOf(0) // error: number not a prop type\n  }\n});\n\n`;\n\nexports[`proptype_oneOf.js 1`] = `\n/* @flow */\n\nvar React = require('react');\nvar Example = React.createClass({\n  propTypes: {\n    str: React.PropTypes.oneOf([\"foo\", \"bar\"]),\n    num: React.PropTypes.oneOf([0, 1, 2]),\n    bool: React.PropTypes.oneOf([true]),\n    mixed: React.PropTypes.oneOf([\"foo\", 0, true]),\n  },\n});\n\n(<Example str=\"foo\" />); // OK\n(<Example str=\"baz\" />); // error: 'baz' not in enum\n\n(<Example num={0} />); // OK\n(<Example num={3} />); // error: 3 not in enum\n\n(<Example bool={true} />); // OK\n(<Example bool={false} />); // error: false ~> true\n\n(<Example mixed={\"foo\"} />); // OK\n(<Example mixed={0} />); // OK\n(<Example mixed={\"baz\"} />); // error: 'baz' not in enum\n\nvar RequiredExample = React.createClass({\n  propTypes: {\n    p: React.PropTypes.oneOf([]).isRequired,\n  },\n});\n\n(<RequiredExample />); // error: \\`p\\` not found\n\nvar EmptyExample = React.createClass({\n  propTypes: {\n    nil: React.PropTypes.oneOf([]), // i.e., \\`empty\\`\n  },\n});\n\n(<EmptyExample nil={0} />); // number ~> empty\n\nvar AnyArrayExample = React.createClass({\n  propTypes: {\n    any: React.PropTypes.oneOf((0:any)),\n  },\n});\n\n(<AnyArrayExample any={0} />); // OK\n\nvar AnyElemExample = React.createClass({\n  propTypes: {\n    any: React.PropTypes.oneOf([\"foo\", (0:any)]),\n  },\n});\n\n(<AnyElemExample any={0} />); // OK\n\nvar DynamicArrayExample = React.createClass({\n  propTypes: {\n    dyn: React.PropTypes.oneOf(([]: Array<string>)),\n  },\n});\n\n(<DynamicArrayExample dyn={0} />); // OK\n\nvar DynamicElemExample = React.createClass({\n  propTypes: {\n    dyn: React.PropTypes.oneOf([\"foo\", (\"\": string)]),\n  },\n});\n\n(<DynamicElemExample dyn={0} />); // OK\n\nvar InvalidArrayExample = React.createClass({\n  propTypes: {\n    p: React.PropTypes.oneOf(0), // error: expected array, got 0\n  },\n});\n\n(<InvalidArrayExample p={0} />); // OK, don't cascade errors\n\nvar NonLiteralElemExample = React.createClass({\n  propTypes: {\n    p: React.PropTypes.oneOf([{}]), // OK: allow non-literals\n  },\n});\n(<NonLiteralElemExample p={0} />); // OK, result is unknown/any\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar React = require(\"react\");\nvar Example = React.createClass({\n  propTypes: {\n    str: React.PropTypes.oneOf([\"foo\", \"bar\"]),\n    num: React.PropTypes.oneOf([0, 1, 2]),\n    bool: React.PropTypes.oneOf([true]),\n    mixed: React.PropTypes.oneOf([\"foo\", 0, true])\n  }\n});\n\n<Example str=\"foo\" />; // OK\n<Example str=\"baz\" />; // error: 'baz' not in enum\n\n<Example num={0} />; // OK\n<Example num={3} />; // error: 3 not in enum\n\n<Example bool={true} />; // OK\n<Example bool={false} />; // error: false ~> true\n\n<Example mixed={\"foo\"} />; // OK\n<Example mixed={0} />; // OK\n<Example mixed={\"baz\"} />; // error: 'baz' not in enum\n\nvar RequiredExample = React.createClass({\n  propTypes: {\n    p: React.PropTypes.oneOf([]).isRequired\n  }\n});\n\n<RequiredExample />; // error: \\`p\\` not found\n\nvar EmptyExample = React.createClass({\n  propTypes: {\n    nil: React.PropTypes.oneOf([]) // i.e., \\`empty\\`\n  }\n});\n\n<EmptyExample nil={0} />; // number ~> empty\n\nvar AnyArrayExample = React.createClass({\n  propTypes: {\n    any: React.PropTypes.oneOf((0: any))\n  }\n});\n\n<AnyArrayExample any={0} />; // OK\n\nvar AnyElemExample = React.createClass({\n  propTypes: {\n    any: React.PropTypes.oneOf([\"foo\", (0: any)])\n  }\n});\n\n<AnyElemExample any={0} />; // OK\n\nvar DynamicArrayExample = React.createClass({\n  propTypes: {\n    dyn: React.PropTypes.oneOf(([]: Array<string>))\n  }\n});\n\n<DynamicArrayExample dyn={0} />; // OK\n\nvar DynamicElemExample = React.createClass({\n  propTypes: {\n    dyn: React.PropTypes.oneOf([\"foo\", (\"\": string)])\n  }\n});\n\n<DynamicElemExample dyn={0} />; // OK\n\nvar InvalidArrayExample = React.createClass({\n  propTypes: {\n    p: React.PropTypes.oneOf(0) // error: expected array, got 0\n  }\n});\n\n<InvalidArrayExample p={0} />; // OK, don't cascade errors\n\nvar NonLiteralElemExample = React.createClass({\n  propTypes: {\n    p: React.PropTypes.oneOf([{}]) // OK: allow non-literals\n  }\n});\n<NonLiteralElemExample p={0} />; // OK, result is unknown/any\n\n`;\n\nexports[`proptype_oneOfType.js 1`] = `\n/* @flow */\n\nvar React = require('react');\nvar Example = React.createClass({\n  propTypes: {\n    prop: React.PropTypes.oneOfType([\n      React.PropTypes.string,\n      React.PropTypes.number\n    ]).isRequired\n  },\n  render() {\n    if (typeof this.props.prop === \"string\") {\n      return <div>{this.props.prop}</div>\n    } else {\n      return <div>{this.props.prop.toFixed(2)}</div>\n    }\n  }\n});\n\nvar ok_number = <Example prop={42} />;\nvar ok_string = <Example prop=\"bar\" />;\n\nvar fail_missing = <Example />;\nvar fail_bool = <Example prop={true} />;\n\n/* Since the proptype arguments are not required, React will actually allow\n   \\`null\\` and \\`undefined\\` elements in the \\`prop\\` prop, but Flow has currently\n   ignores the innter prop types' required flags. */\nvar todo_required = <Example prop={null} />;\n\nvar OptionalExample = React.createClass({\n  propTypes: {\n    p: React.PropTypes.oneOfType([\n      React.PropTypes.string,\n    ]),\n  },\n});\n\n(<OptionalExample />); // OK\n(<OptionalExample p=\"\" />); // OK\n(<OptionalExample p={0} />); // error: number ~> string\n\nvar EmptyExample = React.createClass({\n  propTypes: {\n    nil: React.PropTypes.oneOfType([]), // i.e., \\`empty\\`\n  },\n});\n\n(<EmptyExample nil={0} />); // number ~> empty\n\nvar AnyArrayExample = React.createClass({\n  propTypes: {\n    any: React.PropTypes.oneOfType((0:any)),\n  },\n});\n\n(<AnyArrayExample any={0} />); // OK\n\nvar AnyElemExample = React.createClass({\n  propTypes: {\n    any: React.PropTypes.oneOfType([\n      React.PropTypes.string,\n      (0:any),\n    ]),\n  },\n});\n\n(<AnyElemExample any={0} />); // OK\n\nvar DynamicArrayExample = React.createClass({\n  propTypes: {\n    dyn: React.PropTypes.oneOfType(([]: Array<Function>)),\n  },\n});\n\n(<DynamicArrayExample dyn={0} />); // OK\n\nvar DynamicElemExample = React.createClass({\n  propTypes: {\n    dyn: React.PropTypes.oneOfType([\n      React.PropTypes.string,\n      (() => {}: Function),\n    ]),\n  },\n});\n\n(<DynamicElemExample dyn={0} />); // OK\n\nvar InvalidArrayExample = React.createClass({\n  propTypes: {\n    p: React.PropTypes.oneOfType(0), // error: expected array, got 0\n  },\n});\n\n(<InvalidArrayExample p={0} />); // OK, don't cascade errors\n\nvar InvalidElemExample = React.createClass({\n  propTypes: {\n    p: React.PropTypes.oneOfType([{}]), // error: expected prop type, got {}\n  },\n});\n\n(<InvalidElemExample p={0} />); // OK, don't cascade errors\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar React = require(\"react\");\nvar Example = React.createClass({\n  propTypes: {\n    prop: React.PropTypes.oneOfType([\n      React.PropTypes.string,\n      React.PropTypes.number\n    ]).isRequired\n  },\n  render() {\n    if (typeof this.props.prop === \"string\") {\n      return <div>{this.props.prop}</div>;\n    } else {\n      return <div>{this.props.prop.toFixed(2)}</div>;\n    }\n  }\n});\n\nvar ok_number = <Example prop={42} />;\nvar ok_string = <Example prop=\"bar\" />;\n\nvar fail_missing = <Example />;\nvar fail_bool = <Example prop={true} />;\n\n/* Since the proptype arguments are not required, React will actually allow\n   \\`null\\` and \\`undefined\\` elements in the \\`prop\\` prop, but Flow has currently\n   ignores the innter prop types' required flags. */\nvar todo_required = <Example prop={null} />;\n\nvar OptionalExample = React.createClass({\n  propTypes: {\n    p: React.PropTypes.oneOfType([React.PropTypes.string])\n  }\n});\n\n<OptionalExample />; // OK\n<OptionalExample p=\"\" />; // OK\n<OptionalExample p={0} />; // error: number ~> string\n\nvar EmptyExample = React.createClass({\n  propTypes: {\n    nil: React.PropTypes.oneOfType([]) // i.e., \\`empty\\`\n  }\n});\n\n<EmptyExample nil={0} />; // number ~> empty\n\nvar AnyArrayExample = React.createClass({\n  propTypes: {\n    any: React.PropTypes.oneOfType((0: any))\n  }\n});\n\n<AnyArrayExample any={0} />; // OK\n\nvar AnyElemExample = React.createClass({\n  propTypes: {\n    any: React.PropTypes.oneOfType([React.PropTypes.string, (0: any)])\n  }\n});\n\n<AnyElemExample any={0} />; // OK\n\nvar DynamicArrayExample = React.createClass({\n  propTypes: {\n    dyn: React.PropTypes.oneOfType(([]: Array<Function>))\n  }\n});\n\n<DynamicArrayExample dyn={0} />; // OK\n\nvar DynamicElemExample = React.createClass({\n  propTypes: {\n    dyn: React.PropTypes.oneOfType([\n      React.PropTypes.string,\n      (() => {}: Function)\n    ])\n  }\n});\n\n<DynamicElemExample dyn={0} />; // OK\n\nvar InvalidArrayExample = React.createClass({\n  propTypes: {\n    p: React.PropTypes.oneOfType(0) // error: expected array, got 0\n  }\n});\n\n<InvalidArrayExample p={0} />; // OK, don't cascade errors\n\nvar InvalidElemExample = React.createClass({\n  propTypes: {\n    p: React.PropTypes.oneOfType([{}]) // error: expected prop type, got {}\n  }\n});\n\n<InvalidElemExample p={0} />; // OK, don't cascade errors\n\n`;\n\nexports[`proptype_shape.js 1`] = `\n/* Shape should be a sealed, inexact object just like a type annotation. The\n * below component's \\`foo\\` property should be equivalent to \\`{ bar: string }\\`,\n * which would forbid reads/writes on an unknown \\`baz\\` property.\n *\n * If you see a single \"number incompatible with string\" error instead of two\n * separate \"property \\`baz\\` not found\" errors, this is broken and we are\n * treating the shape like an unsealed object and performing shadow read/writes.\n */\n\nimport React from \"react\";\n\nReact.createClass({\n  propTypes: {\n    foo: React.PropTypes.shape({\n      bar: React.PropTypes.string.isRequired,\n    }).isRequired,\n  },\n\n  f() {\n    (this.props.foo.baz: string);\n  },\n\n  g() {\n    this.props.foo.baz = 0;\n  }\n});\n\nReact.createClass({\n  propTypes: {\n    foo: React.PropTypes.shape(({}: {[string]: any})).isRequired,\n  },\n  f() {\n    (this.props.foo.bar: empty); // OK\n  },\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* Shape should be a sealed, inexact object just like a type annotation. The\n * below component's \\`foo\\` property should be equivalent to \\`{ bar: string }\\`,\n * which would forbid reads/writes on an unknown \\`baz\\` property.\n *\n * If you see a single \"number incompatible with string\" error instead of two\n * separate \"property \\`baz\\` not found\" errors, this is broken and we are\n * treating the shape like an unsealed object and performing shadow read/writes.\n */\n\nimport React from \"react\";\n\nReact.createClass({\n  propTypes: {\n    foo: React.PropTypes.shape({\n      bar: React.PropTypes.string.isRequired\n    }).isRequired\n  },\n\n  f() {\n    (this.props.foo.baz: string);\n  },\n\n  g() {\n    this.props.foo.baz = 0;\n  }\n});\n\nReact.createClass({\n  propTypes: {\n    foo: React.PropTypes.shape(({}: { [string]: any })).isRequired\n  },\n  f() {\n    (this.props.foo.bar: empty); // OK\n  }\n});\n\n`;\n\nexports[`proptypes_builtins.js 1`] = `\nimport React from \"react\";\n\ntype NoFun = mixed => empty;\n\n// error: mixed ~> ReactPropsCheckType\n// error: ReactPropsChainableTypeChecker ~> empty\n(React.PropTypes.arrayOf : NoFun);\n\n// OK: mixed ~> any\n// error: ReactPropsChainableTypeChecker ~> empty\n(React.PropTypes.instanceOf : NoFun);\n\n// error: mixed ~> ReactPropsCheckType\n// error: ReactPropsChainableTypeChecker ~> empty\n(React.PropTypes.objectOf : NoFun);\n\n// error: mixed ~> Array<any>\n// error: ReactPropsChainableTypeChecker ~> empty\n(React.PropTypes.oneOf : NoFun);\n\n// error: mixed ~> Array<ReactPropsCheckType>\n// error: ReactPropsChainableTypeChecker ~> empty\n(React.PropTypes.oneOfType : NoFun);\n\n// error: mixed ~> object type\n// error: ReactPropsChainableTypeChecker ~> empty\n(React.PropTypes.shape : NoFun);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport React from \"react\";\n\ntype NoFun = mixed => empty;\n\n// error: mixed ~> ReactPropsCheckType\n// error: ReactPropsChainableTypeChecker ~> empty\n(React.PropTypes.arrayOf: NoFun);\n\n// OK: mixed ~> any\n// error: ReactPropsChainableTypeChecker ~> empty\n(React.PropTypes.instanceOf: NoFun);\n\n// error: mixed ~> ReactPropsCheckType\n// error: ReactPropsChainableTypeChecker ~> empty\n(React.PropTypes.objectOf: NoFun);\n\n// error: mixed ~> Array<any>\n// error: ReactPropsChainableTypeChecker ~> empty\n(React.PropTypes.oneOf: NoFun);\n\n// error: mixed ~> Array<ReactPropsCheckType>\n// error: ReactPropsChainableTypeChecker ~> empty\n(React.PropTypes.oneOfType: NoFun);\n\n// error: mixed ~> object type\n// error: ReactPropsChainableTypeChecker ~> empty\n(React.PropTypes.shape: NoFun);\n\n`;\n\nexports[`proptypes_sealed.js 1`] = `\n/* propTypes should be a sealed, inexact object just like a type annotation. The\n * below component's propTypes should be equivalent to \\`{ bar: string }\\`, which\n * would forbid reads/writes on an unknown \\`baz\\` property.\n *\n * If you see a single \"number incompatible with string\" error instead of two\n * separate \"property \\`baz\\` not found\" errors, this is broken and we are\n * treating propTypes like an unsealed object and performing shadow read/writes.\n */\n\nimport React from \"react\";\n\nReact.createClass({\n  propTypes: {\n    foo: React.PropTypes.string.isRequired,\n  },\n\n  f() {\n    (this.props.baz: string);\n  },\n\n  g() {\n    this.props.baz = 0;\n  }\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* propTypes should be a sealed, inexact object just like a type annotation. The\n * below component's propTypes should be equivalent to \\`{ bar: string }\\`, which\n * would forbid reads/writes on an unknown \\`baz\\` property.\n *\n * If you see a single \"number incompatible with string\" error instead of two\n * separate \"property \\`baz\\` not found\" errors, this is broken and we are\n * treating propTypes like an unsealed object and performing shadow read/writes.\n */\n\nimport React from \"react\";\n\nReact.createClass({\n  propTypes: {\n    foo: React.PropTypes.string.isRequired\n  },\n\n  f() {\n    (this.props.baz: string);\n  },\n\n  g() {\n    this.props.baz = 0;\n  }\n});\n\n`;\n"
  },
  {
    "path": "tests/flow/react/createElementRequiredProp_string.js",
    "content": "// @flow\nimport React from 'react';\n\nclass Bar extends React.Component {\n  props: {\n    test: number,\n  };\n  render() {\n    return (\n      <div>\n        {this.props.test}\n      </div>\n    )\n  }\n}\n\nclass Foo extends React.Component {\n  render() {\n    const Cmp = Math.random() < 0.5 ? 'div' : Bar;\n    return (<Cmp/>);\n  }\n}\n"
  },
  {
    "path": "tests/flow/react/createElement_string.js",
    "content": "// @flow\nimport React from 'react';\n\nclass Bar extends React.Component {}\n\nclass Foo extends React.Component {\n  render() {\n    const Cmp = Math.random() < 0.5 ? 'div' : Bar;\n    return (<Cmp/>);\n  }\n}\n"
  },
  {
    "path": "tests/flow/react/create_class.js",
    "content": "import React from \"react\";\n\nconst A = React.createClass({\n  mixins: [{ propTypes: { foo: React.PropTypes.string.isRequired } }],\n  propTypes: { bar: React.PropTypes.number.isRequired },\n  m() {\n    (this.props.foo: empty); // error: string ~> empty\n    (this.props.bar: empty); // error: number ~> empty\n  }\n});\n\nconst B = React.createClass({\n  p: \"\",\n  m() {\n    this.p = 0; // error: number ~> string\n  },\n  mm() {\n    this.m.apply(null); // OK: this.m is autobound, so `this.p` will always be found\n  }\n});\n\nconst C = React.createClass({\n  getInitialState(): Object {\n    return { foo: 0 };\n  },\n  m() {\n    this.state.foo; // OK: state is unknown\n  }\n});\n\nconst D = React.createClass({\n  mixins: [{\n    getInitialState(): Object {\n      return { foo: 0 };\n    },\n  }],\n  getInitialState() {\n    return { bar: 0 };\n  },\n  m() {\n    this.state.foo; // OK: state is unknown (due to unknown mixin)\n  }\n});\n\nconst E = React.createClass({\n  foo: 0,\n  m() {\n    (this.foo: string); // error: number ~> string\n  },\n  mm() {\n    var props: { m(): void } = { m: this.m };\n    props.m(); // OK: this.m is autobound, so `this.foo` will always be found\n  }\n});\n\nconst F = React.createClass({\n  getInitialState(): { [string]: mixed } {\n    return { foo: 0 };\n  },\n  m() {\n    this.state.foo;\n    this.state.bar;\n  },\n});\n\nconst G = React.createClass({\n  mixins: [],\n  autobind: true,\n  statics: {},\n  m() {\n    (this.mixins: mixed); // error: property `mixins` not found\n    (this.autobind: mixed); // error: property `autobind` not found\n    (this.statics: mixed); // error: property `statics` not found\n  },\n});\n\nconst H = React.createClass({\n  statics: { q: 0 },\n  getDefaultProps() {\n    (this.q: empty); // error: number ~> empty\n    return {};\n  },\n});\n\nconst I = React.createClass({\n  propTypes: ({}: {[string]: any}),\n  m() {\n    (this.props.foo: empty); // OK\n  }\n});\n\nconst J = React.createClass({\n  mixins: [{\n    getInitialState() {\n      return this.constructor.calculateState();\n    },\n  }],\n  statics: {\n    calculateState() {\n      return { foo: 0 };\n    },\n  },\n  m() {\n    (this.state.foo: empty); // number ~> empty\n  },\n});\n\nconst K = React.createClass({\n  propTypes: {\n    foo: React.PropTypes.string.isRequired,\n  },\n  getInitialState() {\n    this.mm(); // cause error in mm below\n    return this.props;\n  },\n  m() {\n    (this.props.foo: empty); // string ~> empty\n    (this.state.foo: empty); // string ~> empty\n  },\n  mm() {\n    this.state.foo; // error: property fo not found (called by getInitialState)\n  }\n});\n\nconst L = React.createClass({\n  propTypes: {\n    foo: React.PropTypes.string.isRequired,\n  },\n  getInitialState() {\n    return { bar: 0 };\n  },\n  componentWillMount() {\n    (this.props.foo: empty); // string ~> empty\n    return 0; // number ~> void\n  },\n  componentDidMount() {\n    (this.props.foo: empty); // string ~> empty\n    return 0; // number ~> void\n  },\n  componentWillReceiveProps(nextProps) {\n    (this.props.foo: empty); // string ~> empty\n    (nextProps.foo: empty); // string ~> empty\n    return 0; // number ~> void\n  },\n  shouldComponentUpdate(nextProps, nextState) {\n    (this.props.foo: empty); // string ~> empty\n    (this.state.bar: empty); // number ~> empty\n    (nextProps.foo: empty); // string ~> empty\n    (nextState.bar: empty); // number ~> empty\n    return 0; // number ~> bool\n  },\n  componentWillUpdate(nextProps, nextState) {\n    (this.props.foo: empty); // string ~> empty\n    (this.state.bar: empty); // number ~> empty\n    (nextProps.foo: empty); // string ~> empty\n    (nextState.bar: empty); // number ~> empty\n    return 0; // number ~> void\n  },\n  componentDidUpdate(nextProps, nextState) {\n    (this.props.foo: empty); // string ~> empty\n    (this.state.bar: empty); // number ~> empty\n    (nextProps.foo: empty); // string ~> empty\n    (nextState.bar: empty); // number ~> empty\n    return 0; // number ~> void\n  },\n  componentWillUnmount() {\n    (this.props.foo: empty); // string ~> empty\n    (this.state.bar: empty); // number ~> empty\n    return 0; // number ~> void\n  },\n});\n\nReact.createClass({}); // error: spec must be [x] exact and [ ] sealed\nReact.createClass(({}: {})); // error: spec must be [ ] exact and [x] sealed\n"
  },
  {
    "path": "tests/flow/react/create_class_initial_state_sealed.js",
    "content": "import React from \"react\";\n\n// initial state = None\nReact.createClass({\n  f() {\n    this.setState({ q: 0 });\n  },\n  g() {\n    (this.state.q: empty); // number ~> empty\n  }\n});\n\n// initial state = Some (exact & sealed) [lit]\nReact.createClass({\n  getInitialState() {\n    return { p: 0 };\n  },\n  f() {\n    this.setState({ q: 0 });\n  },\n  g() {\n    (this.state.q: empty); // number ~> empty\n  }\n});\n\n// initial state = Some (exact & sealed) [annot]\nReact.createClass({\n  getInitialState(): {| p: number |} {\n    return { p: 0 };\n  },\n  f() {\n    this.setState({ q: 0 });\n  },\n  g() {\n    (this.state.q: empty); // number ~> empty\n  }\n});\n\n// initial state = Some (inexact & sealed) [annot]\nReact.createClass({\n  getInitialState(): { p: number } {\n    return { p: 0 };\n  },\n  f() {\n    this.setState({ q: 0 }); // property `q` not found\n  },\n  g() {\n    (this.state.q: empty); // property `q` not found\n  }\n});\n\n// mixins = (exact & sealed) + (exact & sealed)\nReact.createClass({\n  mixins: [{\n    getInitialState() {\n      return { foo: 0 };\n    },\n  }],\n  getInitialState() {\n    return { bar: 0 };\n  },\n  f() {\n    this.setState({ baz: 0 });\n  },\n  g() {\n    (this.state.baz: empty); // number ~> empty\n  }\n});\n\n// mixins = (exact & sealed) + (inexact & sealed)\nReact.createClass({\n  mixins: [{\n    getInitialState(): { foo: number } {\n      return { foo: 0 };\n    },\n  }],\n  getInitialState() {\n    return { bar: 0 };\n  },\n  f() {\n    this.setState({ baz: 0 }); // property `baz`  not found\n  },\n  g() {\n    (this.state.baz: empty); // property `baz` not found\n  }\n});\n"
  },
  {
    "path": "tests/flow/react/create_class_statics_sealed.js",
    "content": "import React from \"react\";\n\n// statics = None\nconst A = React.createClass({ p: 0 });\n(A.bar: empty); // number ~> empty (inflow below)\nA.bar = 0;\n\n// statics = Some (exact & sealed) [lit]\nconst B = React.createClass({\n  statics: { foo: 0 },\n});\n(B.foo: empty); // number ~> empty\n(B.bar: empty); // number ~> empty (inflow below)\nB.bar = 0;\n\n// statics = Some (exact & sealed) [annot]\nconst C = React.createClass({\n  statics: ({ foo: 0 }: {| foo: number |}),\n});\n(C.foo: empty); // number ~> empty\n(C.bar: empty); // number ~> empty (inflow below)\nC.bar = 0;\n\n// statics = Some (inexact & sealed) [annot]\nconst D = React.createClass({\n  statics: ({ foo: 0 }: { foo: number }),\n});\n(D.foo: empty); // number ~> empty\n(D.bar: empty); // property `bar` not found\nD.bar = 0; // property `bar` not found\n\n// mixins: (exact & sealed) + (exact & sealed)\nconst E = React.createClass({\n  mixins: [{\n    statics: { foo: 0 },\n  }],\n  statics: { bar: 0 },\n});\n(E.foo: empty); // number ~> empty\n(E.bar: empty); // number ~> empty\n(E.baz: empty); // number ~> empty (inflow below)\nE.baz = 0;\n\n// mixins: (exact & sealed) + (inexact & sealed)\nconst F = React.createClass({\n  mixins: [{\n    statics: ({ foo: 0 }: { foo: number }),\n  }],\n  statics: { bar: 0 },\n});\n(F.foo: empty); // number ~> empty\n(F.bar: empty); // number ~> empty\n(F.baz: empty); // number ~> empty (inflow below)\nF.baz = 0;\n"
  },
  {
    "path": "tests/flow/react/import_react.js",
    "content": "/* @flow */\n\nimport react from \"react\";\nimport {Component} from \"react\";\n\nvar a: Component<*,*,*> = new react.Component();\nvar b: number = new react.Component(); // Error: ReactComponent ~> number\n"
  },
  {
    "path": "tests/flow/react/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/react/jsx_spread.js",
    "content": "/* @flow */\n\nvar React = require('react');\nvar Foo = React.createClass({\n  propTypes: {\n    bar: React.PropTypes.string.isRequired,\n  },\n});\n\nvar props = {bar: 42};\nvar blah = <Foo {...props} />; // error bar, number given string expected\n"
  },
  {
    "path": "tests/flow/react/proptype_any.js",
    "content": "const React = require(\"react\");\n\nvar AnyExample = React.createClass({\n  propTypes: {\n    foo: (0: any), // OK\n  },\n});\n\n(<AnyExample />); // OK\n(<AnyExample foo={(0: mixed)} />); // OK\n\nvar AnyFunExample = React.createClass({\n  propTypes: {\n    foo: (() => {}: Function), // OK\n  },\n});\n\n(<AnyFunExample />); // OK\n(<AnyFunExample foo={(0: mixed)} />); // OK\n"
  },
  {
    "path": "tests/flow/react/proptype_arrayOf.js",
    "content": "/* @flow */\n\nvar React = require('react');\nvar Example = React.createClass({\n  propTypes: {\n    arr: React.PropTypes.arrayOf(React.PropTypes.number).isRequired,\n  },\n});\n\nvar ok_empty = <Example arr={[]} />\nvar ok_numbers = <Example arr={[1, 2]} />\n\nvar fail_missing = <Example />\nvar fail_not_array = <Example arr={2} />\nvar fail_mistyped_elems = <Example arr={[1, \"foo\"]} />\n\n/* Since the `number` proptype argument is not required, React will actually\n   allow `null` and `undefined` elements in the `arr` prop, but Flow has\n   currently ignores the innter prop type's required flag. */\nvar todo_required = <Example arr={[null]} />\n\nvar OptionalExample = React.createClass({\n  propTypes: {\n    arr: React.PropTypes.arrayOf(React.PropTypes.number),\n  }\n});\n\n(<OptionalExample />); // OK\n(<OptionalExample arr={[0]} />); // OK\n(<OptionalExample arr={[\"\"]} />); // error: string ~> number\n\nvar AnyExample = React.createClass({\n  propTypes: {\n    arr: React.PropTypes.arrayOf((0:any)), // OK\n  },\n});\n\n(<AnyExample arr={0} />); // error: still needs to be an array\n(<AnyExample arr={[0]} />); // OK\n\nvar InvalidExample = React.createClass({\n  propTypes: {\n    arr: React.PropTypes.arrayOf(0), // error: number not a prop type\n  },\n});\n"
  },
  {
    "path": "tests/flow/react/proptype_custom_validator.js",
    "content": "const React = require(\"react\");\n\n// Custom validator must match `ReactPropsCheckType`\nvar Example = React.createClass({\n  propTypes: {\n    foo(props, propName, componentName, href) {\n      (props: empty); // ok: props is `any`\n      (propName: empty); // error: propName is a string\n      (componentName: empty); // error: componentName is a string\n      (href: empty); // error: href is an optional string\n      return (0: mixed); // error: should return ?Error\n    },\n  }\n});\n\n// Inferred prop type is optional `any`\n(<Example />);\n(<Example foo={(0: mixed)} />);\n"
  },
  {
    "path": "tests/flow/react/proptype_func.js",
    "content": "/* @flow */\n\nvar React = require('react');\nvar Example = React.createClass({\n  propTypes: {\n    func: React.PropTypes.func.isRequired\n  },\n});\n\nvar ok_void = <Example func={() => {}} />;\nvar ok_args = <Example func={(x) => {}} />;\nvar ok_retval = <Example func={() => 1} />\n\nvar fail_mistyped = <Example func={2} />\n"
  },
  {
    "path": "tests/flow/react/proptype_incompatible.js",
    "content": "const React = require(\"react\");\n\nvar Example = React.createClass({\n  propTypes: {\n    foo: 0, // error: `0` is not a prop type\n  },\n});\n\n(<Example />); // OK: don't cascade errors\n(<Example foo={(0:mixed)} />); // OK: don't cascade errors\n"
  },
  {
    "path": "tests/flow/react/proptype_instanceOf.js",
    "content": "/* @flow */\n\nclass A {}\nclass B extends A {}\nclass C extends B {}\n\nvar React = require('react');\nvar Example = React.createClass({\n  propTypes: {\n    x: React.PropTypes.instanceOf(B),\n  }\n});\n\n(<Example x={new A} />); // error: A ~> B\n(<Example x={new B} />); // OK\n(<Example x={new C} />); // OK (C ~> B)\n(<Example x=\"wrong\" />); // error: string ~> B\n\nclass Poly<T> {x:T}\nvar PolyExample = React.createClass({\n  propTypes: {\n    x: React.PropTypes.instanceOf(Poly).isRequired,\n  },\n  m() {\n    (this.props.x.x: empty); // OK, T instantiated to `any`\n  }\n});\n\n// Different instantiations don't interact\n(<PolyExample x={(new Poly(): Poly<string>)} />); // OK\n(<PolyExample x={(new Poly(): Poly<number>)} />); // OK\n\nclass PolyDefault<T=string> {x:T}\nvar PolyDefaultExample = React.createClass({\n  propTypes: {\n    x: React.PropTypes.instanceOf(PolyDefault).isRequired,\n  },\n  m() {\n    (this.props.x.x: empty); // OK, T instantiated to `any`\n  }\n});\n"
  },
  {
    "path": "tests/flow/react/proptype_missing.js",
    "content": "/* @flow */\n\n/* If you create a react component with createClass() but don't specify the\n * propTypes, what should the type of props be?\n *\n * It used to be an empty object, but we didn't enforce that correctly, so\n * people could do whatever they wanted with this.props.\n *\n * As of 0.21.0 it started to be an error when people used this.props in a\n * strict equality situation. It was weird that this was only sometimes\n * enforced, so glevi changed this.props to be Object by default.\n *\n * We may change this back to the empty object at some point and fix the\n * situations where it didn't used to error\n */\nvar React = require('react');\nvar Foo = React.createClass({\n  getID(): string {\n    // So this would have been an error in 0.21.0 if we didn't make this.props\n    // Object\n    switch (this.props.name) {\n      case 'a': return 'Bob';\n      default: return 'Alice';\n    }\n  },\n\n  render() {\n    // But this never errored\n    return <div id={this.props.name} />;\n  }\n});\n"
  },
  {
    "path": "tests/flow/react/proptype_object.js",
    "content": "/* @flow */\n\nvar React = require('react');\nvar Example = React.createClass({\n  propTypes: {\n    object: React.PropTypes.object.isRequired\n  },\n});\n\nvar ok_empty = <Example object={{}} />;\nvar ok_props = <Example object={{foo: \"bar\"}} />;\n\nvar fail_mistyped = <Example object={2} />\n"
  },
  {
    "path": "tests/flow/react/proptype_objectOf.js",
    "content": "/* @flow */\n\nvar React = require('react');\nvar Example = React.createClass({\n  propTypes: {\n    obj: React.PropTypes.objectOf(React.PropTypes.number).isRequired\n  },\n});\n\nvar ok_empty = <Example obj={{}} />\nvar ok_numbers = <Example obj={{foo: 1, bar: 2}} />\n\nvar fail_missing = <Example />\nvar fail_not_object = <Example obj={2} />\nvar fail_mistyped_props = <Example obj={{foo: \"foo\"}} />\n\n/* Since the `number` proptype argument is not required, React will actually\n   allow `null` and `undefined` elements in the `obj` prop, but Flow has\n   currently ignores the innter prop type's required flag. */\nvar todo_required = <Example obj={{p:null}} />\n\nvar OptionalExample = React.createClass({\n  propTypes: {\n    obj: React.PropTypes.objectOf(React.PropTypes.number),\n  }\n});\n\n(<OptionalExample />); // OK\n(<OptionalExample obj={{p:0}} />); // OK\n(<OptionalExample obj={{p:\"\"}} />); // error: string ~> number\n\nvar AnyExample = React.createClass({\n  propTypes: {\n    obj: React.PropTypes.objectOf((0:any)), // OK\n  },\n});\n\n(<AnyExample obj={0} />); // error: still needs to be an object\n(<AnyExample obj={{p:0}} />); // OK\n\nvar InvalidExample = React.createClass({\n  propTypes: {\n    obj: React.PropTypes.objectOf(0), // error: number not a prop type\n  },\n});\n"
  },
  {
    "path": "tests/flow/react/proptype_oneOf.js",
    "content": "/* @flow */\n\nvar React = require('react');\nvar Example = React.createClass({\n  propTypes: {\n    str: React.PropTypes.oneOf([\"foo\", \"bar\"]),\n    num: React.PropTypes.oneOf([0, 1, 2]),\n    bool: React.PropTypes.oneOf([true]),\n    mixed: React.PropTypes.oneOf([\"foo\", 0, true]),\n  },\n});\n\n(<Example str=\"foo\" />); // OK\n(<Example str=\"baz\" />); // error: 'baz' not in enum\n\n(<Example num={0} />); // OK\n(<Example num={3} />); // error: 3 not in enum\n\n(<Example bool={true} />); // OK\n(<Example bool={false} />); // error: false ~> true\n\n(<Example mixed={\"foo\"} />); // OK\n(<Example mixed={0} />); // OK\n(<Example mixed={\"baz\"} />); // error: 'baz' not in enum\n\nvar RequiredExample = React.createClass({\n  propTypes: {\n    p: React.PropTypes.oneOf([]).isRequired,\n  },\n});\n\n(<RequiredExample />); // error: `p` not found\n\nvar EmptyExample = React.createClass({\n  propTypes: {\n    nil: React.PropTypes.oneOf([]), // i.e., `empty`\n  },\n});\n\n(<EmptyExample nil={0} />); // number ~> empty\n\nvar AnyArrayExample = React.createClass({\n  propTypes: {\n    any: React.PropTypes.oneOf((0:any)),\n  },\n});\n\n(<AnyArrayExample any={0} />); // OK\n\nvar AnyElemExample = React.createClass({\n  propTypes: {\n    any: React.PropTypes.oneOf([\"foo\", (0:any)]),\n  },\n});\n\n(<AnyElemExample any={0} />); // OK\n\nvar DynamicArrayExample = React.createClass({\n  propTypes: {\n    dyn: React.PropTypes.oneOf(([]: Array<string>)),\n  },\n});\n\n(<DynamicArrayExample dyn={0} />); // OK\n\nvar DynamicElemExample = React.createClass({\n  propTypes: {\n    dyn: React.PropTypes.oneOf([\"foo\", (\"\": string)]),\n  },\n});\n\n(<DynamicElemExample dyn={0} />); // OK\n\nvar InvalidArrayExample = React.createClass({\n  propTypes: {\n    p: React.PropTypes.oneOf(0), // error: expected array, got 0\n  },\n});\n\n(<InvalidArrayExample p={0} />); // OK, don't cascade errors\n\nvar NonLiteralElemExample = React.createClass({\n  propTypes: {\n    p: React.PropTypes.oneOf([{}]), // OK: allow non-literals\n  },\n});\n(<NonLiteralElemExample p={0} />); // OK, result is unknown/any\n"
  },
  {
    "path": "tests/flow/react/proptype_oneOfType.js",
    "content": "/* @flow */\n\nvar React = require('react');\nvar Example = React.createClass({\n  propTypes: {\n    prop: React.PropTypes.oneOfType([\n      React.PropTypes.string,\n      React.PropTypes.number\n    ]).isRequired\n  },\n  render() {\n    if (typeof this.props.prop === \"string\") {\n      return <div>{this.props.prop}</div>\n    } else {\n      return <div>{this.props.prop.toFixed(2)}</div>\n    }\n  }\n});\n\nvar ok_number = <Example prop={42} />;\nvar ok_string = <Example prop=\"bar\" />;\n\nvar fail_missing = <Example />;\nvar fail_bool = <Example prop={true} />;\n\n/* Since the proptype arguments are not required, React will actually allow\n   `null` and `undefined` elements in the `prop` prop, but Flow has currently\n   ignores the innter prop types' required flags. */\nvar todo_required = <Example prop={null} />;\n\nvar OptionalExample = React.createClass({\n  propTypes: {\n    p: React.PropTypes.oneOfType([\n      React.PropTypes.string,\n    ]),\n  },\n});\n\n(<OptionalExample />); // OK\n(<OptionalExample p=\"\" />); // OK\n(<OptionalExample p={0} />); // error: number ~> string\n\nvar EmptyExample = React.createClass({\n  propTypes: {\n    nil: React.PropTypes.oneOfType([]), // i.e., `empty`\n  },\n});\n\n(<EmptyExample nil={0} />); // number ~> empty\n\nvar AnyArrayExample = React.createClass({\n  propTypes: {\n    any: React.PropTypes.oneOfType((0:any)),\n  },\n});\n\n(<AnyArrayExample any={0} />); // OK\n\nvar AnyElemExample = React.createClass({\n  propTypes: {\n    any: React.PropTypes.oneOfType([\n      React.PropTypes.string,\n      (0:any),\n    ]),\n  },\n});\n\n(<AnyElemExample any={0} />); // OK\n\nvar DynamicArrayExample = React.createClass({\n  propTypes: {\n    dyn: React.PropTypes.oneOfType(([]: Array<Function>)),\n  },\n});\n\n(<DynamicArrayExample dyn={0} />); // OK\n\nvar DynamicElemExample = React.createClass({\n  propTypes: {\n    dyn: React.PropTypes.oneOfType([\n      React.PropTypes.string,\n      (() => {}: Function),\n    ]),\n  },\n});\n\n(<DynamicElemExample dyn={0} />); // OK\n\nvar InvalidArrayExample = React.createClass({\n  propTypes: {\n    p: React.PropTypes.oneOfType(0), // error: expected array, got 0\n  },\n});\n\n(<InvalidArrayExample p={0} />); // OK, don't cascade errors\n\nvar InvalidElemExample = React.createClass({\n  propTypes: {\n    p: React.PropTypes.oneOfType([{}]), // error: expected prop type, got {}\n  },\n});\n\n(<InvalidElemExample p={0} />); // OK, don't cascade errors\n"
  },
  {
    "path": "tests/flow/react/proptype_shape.js",
    "content": "/* Shape should be a sealed, inexact object just like a type annotation. The\n * below component's `foo` property should be equivalent to `{ bar: string }`,\n * which would forbid reads/writes on an unknown `baz` property.\n *\n * If you see a single \"number incompatible with string\" error instead of two\n * separate \"property `baz` not found\" errors, this is broken and we are\n * treating the shape like an unsealed object and performing shadow read/writes.\n */\n\nimport React from \"react\";\n\nReact.createClass({\n  propTypes: {\n    foo: React.PropTypes.shape({\n      bar: React.PropTypes.string.isRequired,\n    }).isRequired,\n  },\n\n  f() {\n    (this.props.foo.baz: string);\n  },\n\n  g() {\n    this.props.foo.baz = 0;\n  }\n});\n\nReact.createClass({\n  propTypes: {\n    foo: React.PropTypes.shape(({}: {[string]: any})).isRequired,\n  },\n  f() {\n    (this.props.foo.bar: empty); // OK\n  },\n});\n"
  },
  {
    "path": "tests/flow/react/proptypes_builtins.js",
    "content": "import React from \"react\";\n\ntype NoFun = mixed => empty;\n\n// error: mixed ~> ReactPropsCheckType\n// error: ReactPropsChainableTypeChecker ~> empty\n(React.PropTypes.arrayOf : NoFun);\n\n// OK: mixed ~> any\n// error: ReactPropsChainableTypeChecker ~> empty\n(React.PropTypes.instanceOf : NoFun);\n\n// error: mixed ~> ReactPropsCheckType\n// error: ReactPropsChainableTypeChecker ~> empty\n(React.PropTypes.objectOf : NoFun);\n\n// error: mixed ~> Array<any>\n// error: ReactPropsChainableTypeChecker ~> empty\n(React.PropTypes.oneOf : NoFun);\n\n// error: mixed ~> Array<ReactPropsCheckType>\n// error: ReactPropsChainableTypeChecker ~> empty\n(React.PropTypes.oneOfType : NoFun);\n\n// error: mixed ~> object type\n// error: ReactPropsChainableTypeChecker ~> empty\n(React.PropTypes.shape : NoFun);\n"
  },
  {
    "path": "tests/flow/react/proptypes_sealed.js",
    "content": "/* propTypes should be a sealed, inexact object just like a type annotation. The\n * below component's propTypes should be equivalent to `{ bar: string }`, which\n * would forbid reads/writes on an unknown `baz` property.\n *\n * If you see a single \"number incompatible with string\" error instead of two\n * separate \"property `baz` not found\" errors, this is broken and we are\n * treating propTypes like an unsealed object and performing shadow read/writes.\n */\n\nimport React from \"react\";\n\nReact.createClass({\n  propTypes: {\n    foo: React.PropTypes.string.isRequired,\n  },\n\n  f() {\n    (this.props.baz: string);\n  },\n\n  g() {\n    this.props.baz = 0;\n  }\n});\n"
  },
  {
    "path": "tests/flow/react_functional/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nimport React from \"react\";\n\nfunction F(props: { foo: string }) {}\n<F />; // error: missing \\`foo\\`\n<F foo={0} />; // error: number ~> string\n<F foo=\"\" />; // ok\n\n// props subtyping is property-wise covariant\nfunction G(props: { foo: string|numner }) {}\n<G foo=\"\" />; // ok\n\nvar Z = 0;\n<Z />; // error, expected React component\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport React from \"react\";\n\nfunction F(props: { foo: string }) {}\n<F />; // error: missing \\`foo\\`\n<F foo={0} />; // error: number ~> string\n<F foo=\"\" />; // ok\n\n// props subtyping is property-wise covariant\nfunction G(props: { foo: string | numner }) {}\n<G foo=\"\" />; // ok\n\nvar Z = 0;\n<Z />; // error, expected React component\n\n`;\n"
  },
  {
    "path": "tests/flow/react_functional/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/react_functional/test.js",
    "content": "import React from \"react\";\n\nfunction F(props: { foo: string }) {}\n<F />; // error: missing `foo`\n<F foo={0} />; // error: number ~> string\n<F foo=\"\" />; // ok\n\n// props subtyping is property-wise covariant\nfunction G(props: { foo: string|numner }) {}\n<G foo=\"\" />; // ok\n\nvar Z = 0;\n<Z />; // error, expected React component\n"
  },
  {
    "path": "tests/flow/react_modules/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`createclass-callsite.js 1`] = `\n/* @flow */\nvar React = require('react');\nvar Hello = require('./createclass-module');\n\nvar HelloLocal = React.createClass({\n  propTypes: {\n    name: React.PropTypes.string.isRequired,\n  },\n\n  render: function(): React.Element<*> {\n    return <div>{this.props.name}</div>;\n  }\n});\n\nvar Callsite = React.createClass({\n  render: function(): React.Element<*> {\n    return (\n      <div>\n        <Hello />\n        <HelloLocal />\n      </div>\n    );\n  }\n});\n\nmodule.exports = Callsite;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nvar React = require(\"react\");\nvar Hello = require(\"./createclass-module\");\n\nvar HelloLocal = React.createClass({\n  propTypes: {\n    name: React.PropTypes.string.isRequired\n  },\n\n  render: function(): React.Element<*> {\n    return <div>{this.props.name}</div>;\n  }\n});\n\nvar Callsite = React.createClass({\n  render: function(): React.Element<*> {\n    return (\n      <div>\n        <Hello />\n        <HelloLocal />\n      </div>\n    );\n  }\n});\n\nmodule.exports = Callsite;\n\n`;\n\nexports[`createclass-module.js 1`] = `\n/* @flow */\nvar React = require('react');\n\nvar Hello = React.createClass({\n  propTypes: {\n    name: React.PropTypes.string.isRequired,\n  },\n\n  render: function(): React.Element<*> {\n    return <div>{this.props.name}</div>;\n  }\n});\n\nmodule.exports = Hello;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nvar React = require(\"react\");\n\nvar Hello = React.createClass({\n  propTypes: {\n    name: React.PropTypes.string.isRequired\n  },\n\n  render: function(): React.Element<*> {\n    return <div>{this.props.name}</div>;\n  }\n});\n\nmodule.exports = Hello;\n\n`;\n\nexports[`es6class-proptypes-callsite.js 1`] = `\n/* @flow */\nimport React from 'react';\nimport Hello from './es6class-proptypes-module';\n\nclass HelloLocal extends React.Component<void, {name: string}, void> {\n  defaultProps = {};\n  propTypes = {\n    name: React.PropTypes.string.isRequired,\n  };\n  render(): React.Element<*> {\n    return <div>{this.props.name}</div>;\n  }\n}\n\nclass Callsite extends React.Component<void, {}, void> {\n  render(): React.Element<*> {\n    return (\n      <div>\n        <Hello />\n        <HelloLocal />\n      </div>\n    );\n  }\n}\n\nmodule.exports = Callsite;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nimport React from \"react\";\nimport Hello from \"./es6class-proptypes-module\";\n\nclass HelloLocal extends React.Component<void, { name: string }, void> {\n  defaultProps = {};\n  propTypes = {\n    name: React.PropTypes.string.isRequired\n  };\n  render(): React.Element<*> {\n    return <div>{this.props.name}</div>;\n  }\n}\n\nclass Callsite extends React.Component<void, {}, void> {\n  render(): React.Element<*> {\n    return (\n      <div>\n        <Hello />\n        <HelloLocal />\n      </div>\n    );\n  }\n}\n\nmodule.exports = Callsite;\n\n`;\n\nexports[`es6class-proptypes-module.js 1`] = `\n/* @flow */\nimport React from 'react';\n\nclass Hello extends React.Component<void, {name: string}, void> {\n  defaultProps = {};\n  propTypes = {\n    name: React.PropTypes.string.isRequired,\n  };\n\n  render(): React.Element<*> {\n    return <div>{this.props.name}</div>;\n  }\n}\n\nmodule.exports = Hello;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nimport React from \"react\";\n\nclass Hello extends React.Component<void, { name: string }, void> {\n  defaultProps = {};\n  propTypes = {\n    name: React.PropTypes.string.isRequired\n  };\n\n  render(): React.Element<*> {\n    return <div>{this.props.name}</div>;\n  }\n}\n\nmodule.exports = Hello;\n\n`;\n\nexports[`es6class-types-callsite.js 1`] = `\n/* @flow */\nimport React from 'react';\nimport Hello from './es6class-types-module';\n\ntype Props = {name: string};\n\nclass HelloLocal extends React.Component<void, Props, void> {\n  props: Props;\n\n  render(): React.Element<*> {\n    return <div>{this.props.name}</div>;\n  }\n}\n\nclass Callsite extends React.Component<void, Props, void> {\n  render(): React.Element<*> {\n    return (\n      <div>\n        <Hello />\n        <HelloLocal />\n      </div>\n    );\n  }\n}\n\nmodule.exports = Callsite;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nimport React from \"react\";\nimport Hello from \"./es6class-types-module\";\n\ntype Props = { name: string };\n\nclass HelloLocal extends React.Component<void, Props, void> {\n  props: Props;\n\n  render(): React.Element<*> {\n    return <div>{this.props.name}</div>;\n  }\n}\n\nclass Callsite extends React.Component<void, Props, void> {\n  render(): React.Element<*> {\n    return (\n      <div>\n        <Hello />\n        <HelloLocal />\n      </div>\n    );\n  }\n}\n\nmodule.exports = Callsite;\n\n`;\n\nexports[`es6class-types-module.js 1`] = `\n/* @flow */\nimport React from 'react';\n\ntype Props = {name: string};\n\nclass Hello extends React.Component<{}, Props, void>{\n  props: Props;\n  static defaultProps: {};\n\n  render(): React.Element<*> {\n    return <div>{this.props.name}</div>;\n  }\n}\n\nmodule.exports = Hello;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nimport React from \"react\";\n\ntype Props = { name: string };\n\nclass Hello extends React.Component<{}, Props, void> {\n  props: Props;\n  static defaultProps: {};\n\n  render(): React.Element<*> {\n    return <div>{this.props.name}</div>;\n  }\n}\n\nmodule.exports = Hello;\n\n`;\n"
  },
  {
    "path": "tests/flow/react_modules/createclass-callsite.js",
    "content": "/* @flow */\nvar React = require('react');\nvar Hello = require('./createclass-module');\n\nvar HelloLocal = React.createClass({\n  propTypes: {\n    name: React.PropTypes.string.isRequired,\n  },\n\n  render: function(): React.Element<*> {\n    return <div>{this.props.name}</div>;\n  }\n});\n\nvar Callsite = React.createClass({\n  render: function(): React.Element<*> {\n    return (\n      <div>\n        <Hello />\n        <HelloLocal />\n      </div>\n    );\n  }\n});\n\nmodule.exports = Callsite;\n"
  },
  {
    "path": "tests/flow/react_modules/createclass-module.js",
    "content": "/* @flow */\nvar React = require('react');\n\nvar Hello = React.createClass({\n  propTypes: {\n    name: React.PropTypes.string.isRequired,\n  },\n\n  render: function(): React.Element<*> {\n    return <div>{this.props.name}</div>;\n  }\n});\n\nmodule.exports = Hello;\n"
  },
  {
    "path": "tests/flow/react_modules/es6class-proptypes-callsite.js",
    "content": "/* @flow */\nimport React from 'react';\nimport Hello from './es6class-proptypes-module';\n\nclass HelloLocal extends React.Component<void, {name: string}, void> {\n  defaultProps = {};\n  propTypes = {\n    name: React.PropTypes.string.isRequired,\n  };\n  render(): React.Element<*> {\n    return <div>{this.props.name}</div>;\n  }\n}\n\nclass Callsite extends React.Component<void, {}, void> {\n  render(): React.Element<*> {\n    return (\n      <div>\n        <Hello />\n        <HelloLocal />\n      </div>\n    );\n  }\n}\n\nmodule.exports = Callsite;\n"
  },
  {
    "path": "tests/flow/react_modules/es6class-proptypes-module.js",
    "content": "/* @flow */\nimport React from 'react';\n\nclass Hello extends React.Component<void, {name: string}, void> {\n  defaultProps = {};\n  propTypes = {\n    name: React.PropTypes.string.isRequired,\n  };\n\n  render(): React.Element<*> {\n    return <div>{this.props.name}</div>;\n  }\n}\n\nmodule.exports = Hello;\n"
  },
  {
    "path": "tests/flow/react_modules/es6class-types-callsite.js",
    "content": "/* @flow */\nimport React from 'react';\nimport Hello from './es6class-types-module';\n\ntype Props = {name: string};\n\nclass HelloLocal extends React.Component<void, Props, void> {\n  props: Props;\n\n  render(): React.Element<*> {\n    return <div>{this.props.name}</div>;\n  }\n}\n\nclass Callsite extends React.Component<void, Props, void> {\n  render(): React.Element<*> {\n    return (\n      <div>\n        <Hello />\n        <HelloLocal />\n      </div>\n    );\n  }\n}\n\nmodule.exports = Callsite;\n"
  },
  {
    "path": "tests/flow/react_modules/es6class-types-module.js",
    "content": "/* @flow */\nimport React from 'react';\n\ntype Props = {name: string};\n\nclass Hello extends React.Component<{}, Props, void>{\n  props: Props;\n  static defaultProps: {};\n\n  render(): React.Element<*> {\n    return <div>{this.props.name}</div>;\n  }\n}\n\nmodule.exports = Hello;\n"
  },
  {
    "path": "tests/flow/react_modules/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/rec/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`issue-598.js 1`] = `\n/* @flow */\n\ntype F<A> = { foo<B>(x: A): F<B> }\ndeclare function foo(x: any): F<any>;\n({ foo }: F<any>);\n\nfunction bar(y: F<number>): F<string> { return y; }\nfunction bar1<X>(y: F<X>): F<any> { return y; }\nfunction bar2<X>(y: F<any>): F<X> { return y; }\n\ntype Functor<A> = {\n  map<B>(f: (val: A) => B): Functor<B>\n}\n\nfunction identity<A>(val: A): Functor<A> {\n  return {\n    map<B>(f: (_: typeof val) => B): Functor<B> { return identity(f(val)) }\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\ntype F<A> = { foo<B>(x: A): F<B> };\ndeclare function foo(x: any): F<any>;\n({ foo }: F<any>);\n\nfunction bar(y: F<number>): F<string> {\n  return y;\n}\nfunction bar1<X>(y: F<X>): F<any> {\n  return y;\n}\nfunction bar2<X>(y: F<any>): F<X> {\n  return y;\n}\n\ntype Functor<A> = {\n  map<B>(f: (val: A) => B): Functor<B>\n};\n\nfunction identity<A>(val: A): Functor<A> {\n  return {\n    map<B>(f: (_: typeof val) => B): Functor<B> {\n      return identity(f(val));\n    }\n  };\n}\n\n`;\n\nexports[`issue-1228.js 1`] = `\n/* @flow */\n\ntype Task <error, value>\n  = { chain<tagged>(next:(input:value) => Task<error, tagged>):\n          Task<error, tagged>\n    }\n\nfunction id(x: Task<any,any>): Task<any,any> { return x; }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\ntype Task<error, value> = {\n  chain<tagged>(\n    next: (input: value) => Task<error, tagged>\n  ): Task<error, tagged>\n};\n\nfunction id(x: Task<any, any>): Task<any, any> {\n  return x;\n}\n\n`;\n\nexports[`test.js 1`] = `\nclass P<X> { x: X; } // this is like Promise\n\ntype Pstar<X> = X | Pstar<P<X>>; // this is like Promise*\n\nvar p: P<number> = new P;\n(p.x: string); // error\n\nvar pstar: Pstar<number> = 0; // OK\n(pstar: number); // error, but limit potentially unbounded number of errors!\n                 // e.g., P<number> ~/~ number, P<P<number>> ~/~ number, ...\n\npstar = p; // OK\n(pstar.x: string); // error\n\npstar = (new P: P<P<number>>); // OK\n(pstar.x: string); // error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass P<X> {\n  x: X;\n} // this is like Promise\n\ntype Pstar<X> = X | Pstar<P<X>>; // this is like Promise*\n\nvar p: P<number> = new P();\n(p.x: string); // error\n\nvar pstar: Pstar<number> = 0; // OK\n(pstar: number); // error, but limit potentially unbounded number of errors!\n// e.g., P<number> ~/~ number, P<P<number>> ~/~ number, ...\n\npstar = p; // OK\n(pstar.x: string); // error\n\npstar = (new P(): P<P<number>>); // OK\n(pstar.x: string); // error\n\n`;\n\nexports[`test2.js 1`] = `\nvar a = []; // Array<X> ~> a\nfunction bar() {\n  a = a.concat([]); // terminate despite expanding types:\n  // a ~> .concat(Array<Y>)\n  // Array<X> ~> .concat(Array<Y>)\n  // Array<X|Y> ~> a\n  // Array<X|Y> ~> .concat(Array<Y>)\n  // Array<X|Y|Y> ~> a\n};\n\nclass A<X> {\n  x: A<A<X>>;\n}\nvar a_ = new A;\nfunction foo0() {\n  a_ = a_.x; // terminate despite expanding types\n}\n\ntype T<X> = { y: S<X> };\ntype S<X> = T<S<X>>;\nfunction foo1(b: S<*>) {\n  b = b.y; // terminate despite expanding types, OK\n  // S<*> = { y: S<S<*>> }\n  // Both S<S<*>> and S<*> expand to { y: { y: ... }}.\n}\n\nclass D<X> { }\nclass B<X> extends D<X> { }\nclass C<X> extends B<X> { }\n((new C: C<number>): D<string>) // error: number ~/~ string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar a = []; // Array<X> ~> a\nfunction bar() {\n  a = a.concat([]); // terminate despite expanding types:\n  // a ~> .concat(Array<Y>)\n  // Array<X> ~> .concat(Array<Y>)\n  // Array<X|Y> ~> a\n  // Array<X|Y> ~> .concat(Array<Y>)\n  // Array<X|Y|Y> ~> a\n}\n\nclass A<X> {\n  x: A<A<X>>;\n}\nvar a_ = new A();\nfunction foo0() {\n  a_ = a_.x; // terminate despite expanding types\n}\n\ntype T<X> = { y: S<X> };\ntype S<X> = T<S<X>>;\nfunction foo1(b: S<*>) {\n  b = b.y; // terminate despite expanding types, OK\n  // S<*> = { y: S<S<*>> }\n  // Both S<S<*>> and S<*> expand to { y: { y: ... }}.\n}\n\nclass D<X> {}\nclass B<X> extends D<X> {}\nclass C<X> extends B<X> {}\n((new C(): C<number>): D<string>); // error: number ~/~ string\n\n`;\n\nexports[`test3.js 1`] = `\ntype I<X> = () => I<I<X>>;\ntype J<X> = () => J<J<X>>;\n\nfunction foo(x: I<number>): J<number> {\n  return x; // terminate despite expanding types, OK\n  // I<number> and J<number> both expand to () => () => ...\n}\n\ntype Q<X> = { x: X; }\ntype P<X> = () => Q<P<X>>;\n\nfunction bar(x: P<number>): () => P<number> {\n  return x; // terminate despite expanding types, error\n  // P<number> = () => { x: P<number> }\n  // () => P<number> = () => () => { x: P<number> }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype I<X> = () => I<I<X>>;\ntype J<X> = () => J<J<X>>;\n\nfunction foo(x: I<number>): J<number> {\n  return x; // terminate despite expanding types, OK\n  // I<number> and J<number> both expand to () => () => ...\n}\n\ntype Q<X> = { x: X };\ntype P<X> = () => Q<P<X>>;\n\nfunction bar(x: P<number>): () => P<number> {\n  return x; // terminate despite expanding types, error\n  // P<number> = () => { x: P<number> }\n  // () => P<number> = () => () => { x: P<number> }\n}\n\n`;\n\nexports[`test4.js 1`] = `\ntype T = T // cycle in type alias should not cause non-termination\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype T = T; // cycle in type alias should not cause non-termination\n\n`;\n\nexports[`test5.js 1`] = `\n/* @flow */\n\ntype NestedArray<T> = Array<T | NestedArray<T>>;\n\nfunction flatten<T>(arrArg: NestedArray<T>) {\n  let arr = arrArg;\n  while (true) {\n    arr = Array.prototype.concat.apply([], arr);\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\ntype NestedArray<T> = Array<T | NestedArray<T>>;\n\nfunction flatten<T>(arrArg: NestedArray<T>) {\n  let arr = arrArg;\n  while (true) {\n    arr = Array.prototype.concat.apply([], arr);\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/rec/issue-1228.js",
    "content": "/* @flow */\n\ntype Task <error, value>\n  = { chain<tagged>(next:(input:value) => Task<error, tagged>):\n          Task<error, tagged>\n    }\n\nfunction id(x: Task<any,any>): Task<any,any> { return x; }\n"
  },
  {
    "path": "tests/flow/rec/issue-598.js",
    "content": "/* @flow */\n\ntype F<A> = { foo<B>(x: A): F<B> }\ndeclare function foo(x: any): F<any>;\n({ foo }: F<any>);\n\nfunction bar(y: F<number>): F<string> { return y; }\nfunction bar1<X>(y: F<X>): F<any> { return y; }\nfunction bar2<X>(y: F<any>): F<X> { return y; }\n\ntype Functor<A> = {\n  map<B>(f: (val: A) => B): Functor<B>\n}\n\nfunction identity<A>(val: A): Functor<A> {\n  return {\n    map<B>(f: (_: typeof val) => B): Functor<B> { return identity(f(val)) }\n  }\n}\n"
  },
  {
    "path": "tests/flow/rec/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/rec/test.js",
    "content": "class P<X> { x: X; } // this is like Promise\n\ntype Pstar<X> = X | Pstar<P<X>>; // this is like Promise*\n\nvar p: P<number> = new P;\n(p.x: string); // error\n\nvar pstar: Pstar<number> = 0; // OK\n(pstar: number); // error, but limit potentially unbounded number of errors!\n                 // e.g., P<number> ~/~ number, P<P<number>> ~/~ number, ...\n\npstar = p; // OK\n(pstar.x: string); // error\n\npstar = (new P: P<P<number>>); // OK\n(pstar.x: string); // error\n"
  },
  {
    "path": "tests/flow/rec/test2.js",
    "content": "var a = []; // Array<X> ~> a\nfunction bar() {\n  a = a.concat([]); // terminate despite expanding types:\n  // a ~> .concat(Array<Y>)\n  // Array<X> ~> .concat(Array<Y>)\n  // Array<X|Y> ~> a\n  // Array<X|Y> ~> .concat(Array<Y>)\n  // Array<X|Y|Y> ~> a\n};\n\nclass A<X> {\n  x: A<A<X>>;\n}\nvar a_ = new A;\nfunction foo0() {\n  a_ = a_.x; // terminate despite expanding types\n}\n\ntype T<X> = { y: S<X> };\ntype S<X> = T<S<X>>;\nfunction foo1(b: S<*>) {\n  b = b.y; // terminate despite expanding types, OK\n  // S<*> = { y: S<S<*>> }\n  // Both S<S<*>> and S<*> expand to { y: { y: ... }}.\n}\n\nclass D<X> { }\nclass B<X> extends D<X> { }\nclass C<X> extends B<X> { }\n((new C: C<number>): D<string>) // error: number ~/~ string\n"
  },
  {
    "path": "tests/flow/rec/test3.js",
    "content": "type I<X> = () => I<I<X>>;\ntype J<X> = () => J<J<X>>;\n\nfunction foo(x: I<number>): J<number> {\n  return x; // terminate despite expanding types, OK\n  // I<number> and J<number> both expand to () => () => ...\n}\n\ntype Q<X> = { x: X; }\ntype P<X> = () => Q<P<X>>;\n\nfunction bar(x: P<number>): () => P<number> {\n  return x; // terminate despite expanding types, error\n  // P<number> = () => { x: P<number> }\n  // () => P<number> = () => () => { x: P<number> }\n}\n"
  },
  {
    "path": "tests/flow/rec/test4.js",
    "content": "type T = T // cycle in type alias should not cause non-termination\n"
  },
  {
    "path": "tests/flow/rec/test5.js",
    "content": "/* @flow */\n\ntype NestedArray<T> = Array<T | NestedArray<T>>;\n\nfunction flatten<T>(arrArg: NestedArray<T>) {\n  let arr = arrArg;\n  while (true) {\n    arr = Array.prototype.concat.apply([], arr);\n  }\n}\n"
  },
  {
    "path": "tests/flow/recheck/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`a1.js 1`] = `\n// @flow\n\nfunction foo(x: number): string { return 5; }\n\nfoo(0);\n\nmodule.exports = foo;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nfunction foo(x: number): string {\n  return 5;\n}\n\nfoo(0);\n\nmodule.exports = foo;\n\n`;\n\nexports[`a2.js 1`] = `\n// @flow\n\nconst foo = require('./a1');\n\nmodule.exports = foo(\"\");\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nconst foo = require(\"./a1\");\n\nmodule.exports = foo(\"\");\n\n`;\n\nexports[`a3.js 1`] = `\n// @flow\n\nconst five = require('./a2');\n\n(five + five: string);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nconst five = require(\"./a2\");\n\n(five + five: string);\n\n`;\n\nexports[`b0.js 1`] = `\n// @flow\n\nclass C { x: C; }\nclass E { x: C; }\n\nmodule.exports = { C, E };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nclass C {\n  x: C;\n}\nclass E {\n  x: C;\n}\n\nmodule.exports = { C, E };\n\n`;\n\nexports[`b1.js 1`] = `\n// @flow\n\nimport { C, E } from \"./b0\";\nfunction foo() { return C; }\nfunction bar() { return E; }\nlet X = foo();\nclass F extends X { }\nclass D extends F { }\nmodule.exports = { C, D };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport { C, E } from \"./b0\";\nfunction foo() {\n  return C;\n}\nfunction bar() {\n  return E;\n}\nlet X = foo();\nclass F extends X {}\nclass D extends F {}\nmodule.exports = { C, D };\n\n`;\n\nexports[`b2.js 1`] = `\n// @flow\n\nmodule.exports = require(\"./b1\");\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nmodule.exports = require(\"./b1\");\n\n`;\n\nexports[`b3.js 1`] = `\n// @flow\n\nimport { C, D } from \"./b2\";\n\n(new D: C);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport { C, D } from \"./b2\";\n\n(new D(): C);\n\n`;\n\nexports[`c1.js 1`] = `\n// @flow\n\nexport function foo(props: { x: number }) { }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport function foo(props: { x: number }) {}\n\n`;\n\nexports[`c2.js 1`] = `\n// @flow\n\nimport { foo } from \"./c1\";\n\nexport function bar(props: { x: number }) {\n  foo({ x: 0 });\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport { foo } from \"./c1\";\n\nexport function bar(props: { x: number }) {\n  foo({ x: 0 });\n}\n\n`;\n\nexports[`c3.js 1`] = `\n// @flow\n\nimport { bar } from \"./c2\";\n\nbar({ x: 0 });\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport { bar } from \"./c2\";\n\nbar({ x: 0 });\n\n`;\n\nexports[`d1.js 1`] = `\n// @flow\n\nexport class A {}\nexport class B {}\nexport var x = new A;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport class A {}\nexport class B {}\nexport var x = new A();\n\n`;\n\nexports[`d2.js 1`] = `\n// @flow\n\nimport {A, x} from \"./d1\";\nexport var y: A = x;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport { A, x } from \"./d1\";\nexport var y: A = x;\n\n`;\n\nexports[`e1.js 1`] = `\n// @flow\n\nexport type Action =\n  | { type: 'FOO' }\n  | { type: 'BAR' }\n;\n\nexport const LIFE = 42;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport type Action = { type: \"FOO\" } | { type: \"BAR\" };\n\nexport const LIFE = 42;\n\n`;\n\nexports[`e2.js 1`] = `\n// @flow\n\nimport type { Action } from './e1';\n\nconst f = (): Action => {\n  return { type: 'FOO' };\n}\n\nimport { LIFE } from './e1';\n\n(LIFE: 42);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport type { Action } from \"./e1\";\n\nconst f = (): Action => {\n  return { type: \"FOO\" };\n};\n\nimport { LIFE } from \"./e1\";\n\n(LIFE: 42);\n\n`;\n\nexports[`f1.js 1`] = `\n// @flow\n\ntype T = { x: number };\ntype S = { x: string };\n\ndeclare var a: T;\ndeclare var b: S;\ndeclare var c: T;\n\nmodule.exports = { a, b, c };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ntype T = { x: number };\ntype S = { x: string };\n\ndeclare var a: T;\ndeclare var b: S;\ndeclare var c: T;\n\nmodule.exports = { a, b, c };\n\n`;\n\nexports[`f2.js 1`] = `\n// @flow\n\nvar { a, b, c } = require('./f1');\n(c: { x: number });\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nvar { a, b, c } = require(\"./f1\");\n(c: { x: number });\n\n`;\n\nexports[`g1.js 1`] = `\n// @flow\n\nexport class C { }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport class C {}\n\n`;\n\nexports[`g2.js 1`] = `\n// @flow\n\nimport { C } from './g1';\n\nclass D extends C { }\n\nmodule.exports = { D };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport { C } from \"./g1\";\n\nclass D extends C {}\n\nmodule.exports = { D };\n\n`;\n\nexports[`g3.js 1`] = `\n// @flow\n\nimport { C } from './g1';\nimport { D } from './g2';\n\n(new D: C)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport { C } from \"./g1\";\nimport { D } from \"./g2\";\n\n(new D(): C);\n\n`;\n\nexports[`h1.js 1`] = `\n// @flow\n\nexport type Foo = number;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport type Foo = number;\n\n`;\n\nexports[`h2.js 1`] = `\n// @flow\n\nimport type { Foo } from './h1';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport type { Foo } from \"./h1\";\n\n`;\n\nexports[`i1.js 1`] = `\n// @flow\n\nconst foo: { p: number } = { p: 0 };\n\nmodule.exports = foo;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nconst foo: { p: number } = { p: 0 };\n\nmodule.exports = foo;\n\n`;\n\nexports[`i2.js 1`] = `\n// @flow\n\nconst foo = require('./i1');\n\nfoo.p = 0;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nconst foo = require(\"./i1\");\n\nfoo.p = 0;\n\n`;\n\nexports[`j1.js 1`] = `\n// @flow\n\nconst foo: { [string]: number } = {};\n\nmodule.exports = foo;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nconst foo: { [string]: number } = {};\n\nmodule.exports = foo;\n\n`;\n\nexports[`j2.js 1`] = `\n// @flow\n\nconst foo = require('./j1');\n\nfoo.p = 0;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nconst foo = require(\"./j1\");\n\nfoo.p = 0;\n\n`;\n\nexports[`k.js 1`] = `\n/* @flow */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck/a1.js",
    "content": "// @flow\n\nfunction foo(x: number): string { return 5; }\n\nfoo(0);\n\nmodule.exports = foo;\n"
  },
  {
    "path": "tests/flow/recheck/a2.js",
    "content": "// @flow\n\nconst foo = require('./a1');\n\nmodule.exports = foo(\"\");\n"
  },
  {
    "path": "tests/flow/recheck/a3.js",
    "content": "// @flow\n\nconst five = require('./a2');\n\n(five + five: string);\n"
  },
  {
    "path": "tests/flow/recheck/b0.js",
    "content": "// @flow\n\nclass C { x: C; }\nclass E { x: C; }\n\nmodule.exports = { C, E };\n"
  },
  {
    "path": "tests/flow/recheck/b1.js",
    "content": "// @flow\n\nimport { C, E } from \"./b0\";\nfunction foo() { return C; }\nfunction bar() { return E; }\nlet X = foo();\nclass F extends X { }\nclass D extends F { }\nmodule.exports = { C, D };\n"
  },
  {
    "path": "tests/flow/recheck/b2.js",
    "content": "// @flow\n\nmodule.exports = require(\"./b1\");\n"
  },
  {
    "path": "tests/flow/recheck/b3.js",
    "content": "// @flow\n\nimport { C, D } from \"./b2\";\n\n(new D: C);\n"
  },
  {
    "path": "tests/flow/recheck/c1.js",
    "content": "// @flow\n\nexport function foo(props: { x: number }) { }\n"
  },
  {
    "path": "tests/flow/recheck/c2.js",
    "content": "// @flow\n\nimport { foo } from \"./c1\";\n\nexport function bar(props: { x: number }) {\n  foo({ x: 0 });\n}\n"
  },
  {
    "path": "tests/flow/recheck/c3.js",
    "content": "// @flow\n\nimport { bar } from \"./c2\";\n\nbar({ x: 0 });\n"
  },
  {
    "path": "tests/flow/recheck/d1.js",
    "content": "// @flow\n\nexport class A {}\nexport class B {}\nexport var x = new A;\n"
  },
  {
    "path": "tests/flow/recheck/d2.js",
    "content": "// @flow\n\nimport {A, x} from \"./d1\";\nexport var y: A = x;\n"
  },
  {
    "path": "tests/flow/recheck/e1.js",
    "content": "// @flow\n\nexport type Action =\n  | { type: 'FOO' }\n  | { type: 'BAR' }\n;\n\nexport const LIFE = 42;\n"
  },
  {
    "path": "tests/flow/recheck/e2.js",
    "content": "// @flow\n\nimport type { Action } from './e1';\n\nconst f = (): Action => {\n  return { type: 'FOO' };\n}\n\nimport { LIFE } from './e1';\n\n(LIFE: 42);\n"
  },
  {
    "path": "tests/flow/recheck/f1.js",
    "content": "// @flow\n\ntype T = { x: number };\ntype S = { x: string };\n\ndeclare var a: T;\ndeclare var b: S;\ndeclare var c: T;\n\nmodule.exports = { a, b, c };\n"
  },
  {
    "path": "tests/flow/recheck/f2.js",
    "content": "// @flow\n\nvar { a, b, c } = require('./f1');\n(c: { x: number });\n"
  },
  {
    "path": "tests/flow/recheck/g1.js",
    "content": "// @flow\n\nexport class C { }\n"
  },
  {
    "path": "tests/flow/recheck/g2.js",
    "content": "// @flow\n\nimport { C } from './g1';\n\nclass D extends C { }\n\nmodule.exports = { D };\n"
  },
  {
    "path": "tests/flow/recheck/g3.js",
    "content": "// @flow\n\nimport { C } from './g1';\nimport { D } from './g2';\n\n(new D: C)\n"
  },
  {
    "path": "tests/flow/recheck/h1.js",
    "content": "// @flow\n\nexport type Foo = number;\n"
  },
  {
    "path": "tests/flow/recheck/h2.js",
    "content": "// @flow\n\nimport type { Foo } from './h1';\n"
  },
  {
    "path": "tests/flow/recheck/i1.js",
    "content": "// @flow\n\nconst foo: { p: number } = { p: 0 };\n\nmodule.exports = foo;\n"
  },
  {
    "path": "tests/flow/recheck/i2.js",
    "content": "// @flow\n\nconst foo = require('./i1');\n\nfoo.p = 0;\n"
  },
  {
    "path": "tests/flow/recheck/j1.js",
    "content": "// @flow\n\nconst foo: { [string]: number } = {};\n\nmodule.exports = foo;\n"
  },
  {
    "path": "tests/flow/recheck/j2.js",
    "content": "// @flow\n\nconst foo = require('./j1');\n\nfoo.p = 0;\n"
  },
  {
    "path": "tests/flow/recheck/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck/k.js",
    "content": "/* @flow */\n"
  },
  {
    "path": "tests/flow/recheck/tmp1a/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`a1.js 1`] = `\n// @flow\n\nfunction foo(x: number): number { return 5; }\n\nfoo(0);\n\nmodule.exports = foo;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nfunction foo(x: number): number {\n  return 5;\n}\n\nfoo(0);\n\nmodule.exports = foo;\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck/tmp1a/a1.js",
    "content": "// @flow\n\nfunction foo(x: number): number { return 5; }\n\nfoo(0);\n\nmodule.exports = foo;\n"
  },
  {
    "path": "tests/flow/recheck/tmp1a/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck/tmp1b/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`b1.js 1`] = `\n// @flow\n\nimport { C, E } from \"./b0\";\nfunction foo() { return C; }\nfunction bar() { return E; }\nlet X = bar();\nclass F extends X { }\nclass D extends F { }\nmodule.exports = { C, D };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport { C, E } from \"./b0\";\nfunction foo() {\n  return C;\n}\nfunction bar() {\n  return E;\n}\nlet X = bar();\nclass F extends X {}\nclass D extends F {}\nmodule.exports = { C, D };\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck/tmp1b/b1.js",
    "content": "// @flow\n\nimport { C, E } from \"./b0\";\nfunction foo() { return C; }\nfunction bar() { return E; }\nlet X = bar();\nclass F extends X { }\nclass D extends F { }\nmodule.exports = { C, D };\n"
  },
  {
    "path": "tests/flow/recheck/tmp1b/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck/tmp1c/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`c2.js 1`] = `\n// @flow\n\nimport { foo } from \"./c1\";\n\nexport function bar(props: { y: number }) {\n  foo({ y: 0 });\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport { foo } from \"./c1\";\n\nexport function bar(props: { y: number }) {\n  foo({ y: 0 });\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck/tmp1c/c2.js",
    "content": "// @flow\n\nimport { foo } from \"./c1\";\n\nexport function bar(props: { y: number }) {\n  foo({ y: 0 });\n}\n"
  },
  {
    "path": "tests/flow/recheck/tmp1c/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck/tmp1d/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`d1.js 1`] = `\n// @flow\n\nexport class A {}\nexport class B {}\nexport var x = new B;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport class A {}\nexport class B {}\nexport var x = new B();\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck/tmp1d/d1.js",
    "content": "// @flow\n\nexport class A {}\nexport class B {}\nexport var x = new B;\n"
  },
  {
    "path": "tests/flow/recheck/tmp1d/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck/tmp1e/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`e2.js 1`] = `\n// @flow\n\nimport type { Action } from './e1';\n\nconst f = (): Action => {\n  return { type: 'QUX' };\n}\n\nimport { LIFE } from './e1';\n\n(LIFE: 42);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport type { Action } from \"./e1\";\n\nconst f = (): Action => {\n  return { type: \"QUX\" };\n};\n\nimport { LIFE } from \"./e1\";\n\n(LIFE: 42);\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck/tmp1e/e2.js",
    "content": "// @flow\n\nimport type { Action } from './e1';\n\nconst f = (): Action => {\n  return { type: 'QUX' };\n}\n\nimport { LIFE } from './e1';\n\n(LIFE: 42);\n"
  },
  {
    "path": "tests/flow/recheck/tmp1e/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck/tmp1f/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`f1.js 1`] = `\n// @flow\n\ntype T = { x: number };\ntype S = { x: string };\n\ndeclare var a: T;\ndeclare var b: S;\ndeclare var c: S;\n\nmodule.exports = { a, b, c };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ntype T = { x: number };\ntype S = { x: string };\n\ndeclare var a: T;\ndeclare var b: S;\ndeclare var c: S;\n\nmodule.exports = { a, b, c };\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck/tmp1f/f1.js",
    "content": "// @flow\n\ntype T = { x: number };\ntype S = { x: string };\n\ndeclare var a: T;\ndeclare var b: S;\ndeclare var c: S;\n\nmodule.exports = { a, b, c };\n"
  },
  {
    "path": "tests/flow/recheck/tmp1f/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck/tmp1g/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`g1.js 1`] = `\n// @flow\n\nexport class C { }\nexport var extra = null;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport class C {}\nexport var extra = null;\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck/tmp1g/g1.js",
    "content": "// @flow\n\nexport class C { }\nexport var extra = null;\n"
  },
  {
    "path": "tests/flow/recheck/tmp1g/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck/tmp1h/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`h1.js 1`] = `\n// @flow\n\nexport type Bar = number;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport type Bar = number;\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck/tmp1h/h1.js",
    "content": "// @flow\n\nexport type Bar = number;\n"
  },
  {
    "path": "tests/flow/recheck/tmp1h/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck/tmp1i/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`i1.js 1`] = `\n// @flow\n\nconst foo: { +p: number } = { p: 0 };\n\nmodule.exports = foo;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nconst foo: { +p: number } = { p: 0 };\n\nmodule.exports = foo;\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck/tmp1i/i1.js",
    "content": "// @flow\n\nconst foo: { +p: number } = { p: 0 };\n\nmodule.exports = foo;\n"
  },
  {
    "path": "tests/flow/recheck/tmp1i/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck/tmp1j/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`j1.js 1`] = `\n// @flow\n\nconst foo: { +[string]: number } = {};\n\nmodule.exports = foo;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nconst foo: { +[string]: number } = {};\n\nmodule.exports = foo;\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck/tmp1j/j1.js",
    "content": "// @flow\n\nconst foo: { +[string]: number } = {};\n\nmodule.exports = foo;\n"
  },
  {
    "path": "tests/flow/recheck/tmp1j/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck/tmp2a/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`a1.js 1`] = `\n// @flow\n\nfunction foo(x: number): number { return 5; }\n\nfoo(\"\");\n\nmodule.exports = foo;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nfunction foo(x: number): number {\n  return 5;\n}\n\nfoo(\"\");\n\nmodule.exports = foo;\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck/tmp2a/a1.js",
    "content": "// @flow\n\nfunction foo(x: number): number { return 5; }\n\nfoo(\"\");\n\nmodule.exports = foo;\n"
  },
  {
    "path": "tests/flow/recheck/tmp2a/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck/tmp2b/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`b0.js 1`] = `\n// @flow\n\nclass C { x: C; }\nclass E extends C { x: C; }\n\nmodule.exports = { C, E };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nclass C {\n  x: C;\n}\nclass E extends C {\n  x: C;\n}\n\nmodule.exports = { C, E };\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck/tmp2b/b0.js",
    "content": "// @flow\n\nclass C { x: C; }\nclass E extends C { x: C; }\n\nmodule.exports = { C, E };\n"
  },
  {
    "path": "tests/flow/recheck/tmp2b/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck/tmp2c/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`c1.js 1`] = `\n// @flow\n\nexport function foo(props: { y: number }) { }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport function foo(props: { y: number }) {}\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck/tmp2c/c1.js",
    "content": "// @flow\n\nexport function foo(props: { y: number }) { }\n"
  },
  {
    "path": "tests/flow/recheck/tmp2c/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck/tmp2e/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`e1.js 1`] = `\n// @flow\n\nexport type Action =\n  | { type: 'QUX' }\n  | { type: 'BAR' }\n;\n\nexport const LIFE = 42;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport type Action = { type: \"QUX\" } | { type: \"BAR\" };\n\nexport const LIFE = 42;\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck/tmp2e/e1.js",
    "content": "// @flow\n\nexport type Action =\n  | { type: 'QUX' }\n  | { type: 'BAR' }\n;\n\nexport const LIFE = 42;\n"
  },
  {
    "path": "tests/flow/recheck/tmp2e/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck/tmp2f/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`f1.js 1`] = `\n// @flow\n\ntype T = { x: number };\ntype S = { x: string };\n\ndeclare var a: T;\ndeclare var b: S;\ndeclare var c: T;\n\nmodule.exports = { a, b, c };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ntype T = { x: number };\ntype S = { x: string };\n\ndeclare var a: T;\ndeclare var b: S;\ndeclare var c: T;\n\nmodule.exports = { a, b, c };\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck/tmp2f/f1.js",
    "content": "// @flow\n\ntype T = { x: number };\ntype S = { x: string };\n\ndeclare var a: T;\ndeclare var b: S;\ndeclare var c: T;\n\nmodule.exports = { a, b, c };\n"
  },
  {
    "path": "tests/flow/recheck/tmp2f/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck/tmp3e/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`e1.js 1`] = `\n// @flow\n\nexport type Action =\n  | { type: 'QUX' }\n  | { type: 'BAR' }\n;\n\nexport const LIFE = 0;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport type Action = { type: \"QUX\" } | { type: \"BAR\" };\n\nexport const LIFE = 0;\n\n`;\n\nexports[`e2.js 1`] = `\n// @flow\n\nimport type { Action } from './e1';\n\nconst f = (): Action => {\n  return { type: 'QUX' };\n}\n\nimport { LIFE } from './e1';\n\n(LIFE: 0);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nimport type { Action } from \"./e1\";\n\nconst f = (): Action => {\n  return { type: \"QUX\" };\n};\n\nimport { LIFE } from \"./e1\";\n\n(LIFE: 0);\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck/tmp3e/e1.js",
    "content": "// @flow\n\nexport type Action =\n  | { type: 'QUX' }\n  | { type: 'BAR' }\n;\n\nexport const LIFE = 0;\n"
  },
  {
    "path": "tests/flow/recheck/tmp3e/e2.js",
    "content": "// @flow\n\nimport type { Action } from './e1';\n\nconst f = (): Action => {\n  return { type: 'QUX' };\n}\n\nimport { LIFE } from './e1';\n\n(LIFE: 0);\n"
  },
  {
    "path": "tests/flow/recheck/tmp3e/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck/tmp3f/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`f1.js 1`] = `\n// @flow\n\ntype T = { x: number };\ntype S = { x: string };\n\ndeclare var a: T;\ndeclare var b: S;\ndeclare var c: T;\n\nmodule.exports = { a, b, c: a };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ntype T = { x: number };\ntype S = { x: string };\n\ndeclare var a: T;\ndeclare var b: S;\ndeclare var c: T;\n\nmodule.exports = { a, b, c: a };\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck/tmp3f/f1.js",
    "content": "// @flow\n\ntype T = { x: number };\ntype S = { x: string };\n\ndeclare var a: T;\ndeclare var b: S;\ndeclare var c: T;\n\nmodule.exports = { a, b, c: a };\n"
  },
  {
    "path": "tests/flow/recheck/tmp3f/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck/tmp4f/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`f1.js 1`] = `\n// @flow\n\ntype T = { x: number };\ntype S = { x: string };\n\ndeclare var a: T;\ndeclare var b: S;\ndeclare var c: T;\n\nmodule.exports = { a, b, c: b };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ntype T = { x: number };\ntype S = { x: string };\n\ndeclare var a: T;\ndeclare var b: S;\ndeclare var c: T;\n\nmodule.exports = { a, b, c: b };\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck/tmp4f/f1.js",
    "content": "// @flow\n\ntype T = { x: number };\ntype S = { x: string };\n\ndeclare var a: T;\ndeclare var b: S;\ndeclare var c: T;\n\nmodule.exports = { a, b, c: b };\n"
  },
  {
    "path": "tests/flow/recheck/tmp4f/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck/tmpk/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`k.js 1`] = `\n/* @flow */\n\ndeclare var x: LibK;\n(x.p: string);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\ndeclare var x: LibK;\n(x.p: string);\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck/tmpk/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck/tmpk/k.js",
    "content": "/* @flow */\n\ndeclare var x: LibK;\n(x.p: string);\n"
  },
  {
    "path": "tests/flow/recheck/tmplibk/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`libk1.js 1`] = `\ntype LibK = {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype LibK = {};\n\n`;\n\nexports[`libk2.js 1`] = `\ntype LibK = {\n  p: string;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype LibK = {\n  p: string\n};\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck/tmplibk/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck/tmplibk/libk1.js",
    "content": "type LibK = {}\n"
  },
  {
    "path": "tests/flow/recheck/tmplibk/libk2.js",
    "content": "type LibK = {\n  p: string;\n}\n"
  },
  {
    "path": "tests/flow/recheck-haste/A1.js",
    "content": "/**\n * @providesModule A\n * @flow\n */\n"
  },
  {
    "path": "tests/flow/recheck-haste/A3.js",
    "content": "// @flow\n\nrequire('A');\n"
  },
  {
    "path": "tests/flow/recheck-haste/B1.js",
    "content": "/**\n * @flow\n */\n\nrequire('B2');\nrequire('B3');\n"
  },
  {
    "path": "tests/flow/recheck-haste/B3.js",
    "content": "/**\n * @providesModule B3\n * @flow\n */\n\nrequire('B2');\n"
  },
  {
    "path": "tests/flow/recheck-haste/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A1.js 1`] = `\n/**\n * @providesModule A\n * @flow\n */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule A\n * @flow\n */\n\n`;\n\nexports[`A3.js 1`] = `\n// @flow\n\nrequire('A');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nrequire(\"A\");\n\n`;\n\nexports[`B1.js 1`] = `\n/**\n * @flow\n */\n\nrequire('B2');\nrequire('B3');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nrequire(\"B2\");\nrequire(\"B3\");\n\n`;\n\nexports[`B3.js 1`] = `\n/**\n * @providesModule B3\n * @flow\n */\n\nrequire('B2');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule B3\n * @flow\n */\n\nrequire(\"B2\");\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck-haste/dir1B/B2.js",
    "content": "/**\n * @providesModule B2\n * @flow\n */\n\nrequire('B3');\n"
  },
  {
    "path": "tests/flow/recheck-haste/dir1B/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`B2.js 1`] = `\n/**\n * @providesModule B2\n * @flow\n */\n\nrequire('B3');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule B2\n * @flow\n */\n\nrequire(\"B3\");\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck-haste/dir1B/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck-haste/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck-haste/tmp1A/A2.js",
    "content": "/**\n * @providesModule B\n * @flow\n */\n"
  },
  {
    "path": "tests/flow/recheck-haste/tmp1A/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A2.js 1`] = `\n/**\n * @providesModule B\n * @flow\n */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule B\n * @flow\n */\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck-haste/tmp1A/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/recheck-haste/tmp2A/A3.js",
    "content": "// @flow\n\nrequire('B');\n"
  },
  {
    "path": "tests/flow/recheck-haste/tmp2A/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A3.js 1`] = `\n// @flow\n\nrequire('B');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nrequire(\"B\");\n\n`;\n"
  },
  {
    "path": "tests/flow/recheck-haste/tmp2A/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/record/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\ntype Key1 = 'foo' | 'bar'; // make an enum type with known key set\nvar o1: {[key: Key1]: number} = {\n  foo: 0,\n  bar: \"\", // error: string ~/~ number\n};\no1.foo; // OK\no1.qux; // error: qux not found\no1.toString(); // ok\n\ntype R = {foo: any, bar: any};\ntype Key2 = $Keys<R>; // another way to make an enum type, with unknown key set\nvar o2: {[key: Key2]: number} = { foo: 0 }; // OK to leave out bar\no2.bar; // OK to access bar\no2.qux; // error: qux not found\n\nclass C<X> {\n  x: $Subtype<{[key: $Keys<X>]: any}>; // object with larger key set than X's\n}\nclass D extends C<{foo: number, bar: string}> {\n  x: { foo: number, qux: boolean }; // error: qux not found\n}\n\ntype AnyKey = $Keys<Object>;\nvar o3: {[key: AnyKey]: number} = { foo: 0 };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype Key1 = \"foo\" | \"bar\"; // make an enum type with known key set\nvar o1: { [key: Key1]: number } = {\n  foo: 0,\n  bar: \"\" // error: string ~/~ number\n};\no1.foo; // OK\no1.qux; // error: qux not found\no1.toString(); // ok\n\ntype R = { foo: any, bar: any };\ntype Key2 = $Keys<R>; // another way to make an enum type, with unknown key set\nvar o2: { [key: Key2]: number } = { foo: 0 }; // OK to leave out bar\no2.bar; // OK to access bar\no2.qux; // error: qux not found\n\nclass C<X> {\n  x: $Subtype<{ [key: $Keys<X>]: any }>; // object with larger key set than X's\n}\nclass D extends C<{ foo: number, bar: string }> {\n  x: { foo: number, qux: boolean }; // error: qux not found\n}\n\ntype AnyKey = $Keys<Object>;\nvar o3: { [key: AnyKey]: number } = { foo: 0 };\n\n`;\n"
  },
  {
    "path": "tests/flow/record/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/record/test.js",
    "content": "type Key1 = 'foo' | 'bar'; // make an enum type with known key set\nvar o1: {[key: Key1]: number} = {\n  foo: 0,\n  bar: \"\", // error: string ~/~ number\n};\no1.foo; // OK\no1.qux; // error: qux not found\no1.toString(); // ok\n\ntype R = {foo: any, bar: any};\ntype Key2 = $Keys<R>; // another way to make an enum type, with unknown key set\nvar o2: {[key: Key2]: number} = { foo: 0 }; // OK to leave out bar\no2.bar; // OK to access bar\no2.qux; // error: qux not found\n\nclass C<X> {\n  x: $Subtype<{[key: $Keys<X>]: any}>; // object with larger key set than X's\n}\nclass D extends C<{foo: number, bar: string}> {\n  x: { foo: number, qux: boolean }; // error: qux not found\n}\n\ntype AnyKey = $Keys<Object>;\nvar o3: {[key: AnyKey]: number} = { foo: 0 };\n"
  },
  {
    "path": "tests/flow/refi/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`bound.js 1`] = `\n// refinements of bound vars (closed-over locals)\n// should have the same lifetimes as heap objects.\n\nvar x : ?string = \"xxx\";\n\nvar tests =\n[\n  function() {\n    var y : string = x;  // not ok\n  },\n\n  function() {\n    if (x != null) {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    if (x == null) {} else {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    if (x == null)\n      return;\n    var y : string = x;  // ok\n  },\n\n  function() {\n    if (!(x != null)) {} else {\n      var y : string = x;  // ok\n    }\n  },\n\n  /* TODO we actually allow this currently; fix\n  // requires further remedial work in Env\n  function() {\n    if (x != null) {\n      alert(\"\");\n      var y : string = x;  // not ok\n    }\n  },\n  */\n  function() {\n    if (x != null) {}\n    var y : string = x;  // not ok\n  },\n\n  function() {\n    if (x != null) {\n    } else {\n      var y : string = x;  // not ok\n    }\n  },\n\n  function() {\n    var y : string = x != null ? x : \"\"; // ok\n  },\n\n  function() {\n    var y : string = x || \"\"; // ok\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// refinements of bound vars (closed-over locals)\n// should have the same lifetimes as heap objects.\n\nvar x: ?string = \"xxx\";\n\nvar tests = [\n  function() {\n    var y: string = x; // not ok\n  },\n\n  function() {\n    if (x != null) {\n      var y: string = x; // ok\n    }\n  },\n\n  function() {\n    if (x == null) {\n    } else {\n      var y: string = x; // ok\n    }\n  },\n\n  function() {\n    if (x == null) return;\n    var y: string = x; // ok\n  },\n\n  function() {\n    if (!(x != null)) {\n    } else {\n      var y: string = x; // ok\n    }\n  },\n\n  /* TODO we actually allow this currently; fix\n  // requires further remedial work in Env\n  function() {\n    if (x != null) {\n      alert(\"\");\n      var y : string = x;  // not ok\n    }\n  },\n  */\n  function() {\n    if (x != null) {\n    }\n    var y: string = x; // not ok\n  },\n\n  function() {\n    if (x != null) {\n    } else {\n      var y: string = x; // not ok\n    }\n  },\n\n  function() {\n    var y: string = x != null ? x : \"\"; // ok\n  },\n\n  function() {\n    var y: string = x || \"\"; // ok\n  }\n];\n\n`;\n\nexports[`heap.js 1`] = `\nvar tests =\n[\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    var y : string = x.p;  // not ok\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p != null) {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p == null) {} else {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p == null)\n      return;\n    var y : string = x.p;  // ok\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (!(x.p != null)) {} else {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p != null) {\n      alert(\"\");\n      var y : string = x.p;  // not ok\n    }\n  },\n\n  function () {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p != null) {\n      x.p = null;\n      var y : string = x.p;  // not ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p != null) {}\n    var y : string = x.p;  // not ok\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p != null) {\n    } else {\n      var y : string = x.p;  // not ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    var y : string = x.p != null ? x.p : \"\"; // ok\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    var y : string = x.p || \"\"; // ok\n  },\n\n  function() {\n    var x : {p:string | string[]} = {p:[\"xxx\"]};\n    if (Array.isArray(x.p)) {\n      var y : string[] = x.p; // ok\n    } else {\n      var z : string = x.p; // ok\n    }\n  },\n\n  function() {\n    var x : {y: ?string} = {y: null};\n    if (!x.y) {\n      x.y = \"foo\";\n    }\n    (x.y: string);\n  },\n\n  function() {\n    var x : {y: ?string} = {y: null};\n    if (x.y) {\n    } else {\n      x.y = \"foo\";\n    }\n    (x.y: string);\n  },\n\n  function() {\n    var x : {y: ?string} = {y: null};\n    if (!x.y) {\n      x.y = 123; // error\n    }\n    (x.y: string); // error, this got widened to a number\n  },\n\n  function() {\n    var x : {y: ?string} = {y: null};\n    if (x.y) {\n      x.y = \"foo\";\n    } else {\n      x.y = \"bar\";\n    }\n    (x.y : string);\n  },\n\n  function() {\n    var x : {y: string | number | boolean} = {y: false};\n    if (typeof x.y == \"number\") {\n      x.y = \"foo\";\n    }\n    (x.y : string); // error, could also be boolean\n  },\n\n  function() {\n    var x : {y: string | number | boolean} = {y: false};\n    if (typeof x.y == \"number\") {\n      x.y = \"foo\";\n    } else if (typeof x.y == \"boolean\") {\n      x.y = \"bar\";\n    }\n    (x.y : boolean); // error, string\n  },\n\n  function() {\n    var x : {y: ?string} = {y: null};\n    if (!x.y) {\n      x.y = \"foo\";\n    }\n    if (x.y) {\n      x.y = null;\n    }\n    (x.y : string); // error\n  },\n\n  function() {\n    var x : {y: string | number | boolean} = {y: false};\n    if (typeof x.y == \"number\") {\n      x.y = \"foo\";\n    }\n    // now x.y can is string | boolean\n    if (typeof x.y == \"string\") {\n      x.y = false;\n    }\n    // now x.y is only boolean\n    (x.y : string); // error\n  },\n\n  function() {\n    var x : {y: string | number | boolean} = {y: false};\n    if (typeof x.y == \"number\") {\n      x.y = \"foo\";\n    }\n    // now x.y can is string | boolean\n    if (typeof x.y == \"string\") {\n      x.y = 123;\n    }\n    // now x.y is number | boolean\n    (x.y : string); // error\n  },\n\n  function() {\n    var x : {y: ?string} = {y: null};\n    var z : string = \"foo\";\n    if (x.y) {\n      x.y = z;\n    } else {\n      x.y = z;\n    }\n    (x.y : string);\n  },\n\n  function(x: string) {\n    if (x === 'a') {}\n    (x: 'b'); // error (but only once, string !~> 'b'; 'a' is irrelevant)\n  },\n\n  function(x: mixed) {\n    if (typeof x.bar === 'string') {} // error, so \\`x.bar\\` refinement is empty\n    (x: string & number);\n  },\n\n  // --- nested conditionals ---\n  // after a branch, the current scope may have changed. this causes the\n  // subsequent assignment to refine the new scope. these tests make sure that\n  // the scope that gets merged after the if statement is the correct\n  // post-condition scope, not the one that was saved at the beginning of the\n  // if statement.\n\n  function() {\n    let x: { foo: ?string } = { foo: null };\n    if (!x.foo) {\n      if (false) {}\n      x.foo = \"foo\";\n    }\n    (x.foo: string);\n  },\n\n  function() {\n    let x: { foo: ?string } = { foo: null };\n    if (!x.foo) {\n      while(false) {}\n      x.foo = \"foo\";\n    }\n    (x.foo: string);\n  },\n\n  function() {\n    let x: { foo: ?string } = { foo: null };\n    if (!x.foo) {\n      for (var i = 0; i < 0; i++) {}\n      x.foo = \"foo\";\n    }\n    (x.foo: string);\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p != null) {\n      var {p} = x; // TODO: annot checked against type of x\n      (p : string); // ok\n    }\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar tests = [\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    var y: string = x.p; // not ok\n  },\n\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    if (x.p != null) {\n      var y: string = x.p; // ok\n    }\n  },\n\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    if (x.p == null) {\n    } else {\n      var y: string = x.p; // ok\n    }\n  },\n\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    if (x.p == null) return;\n    var y: string = x.p; // ok\n  },\n\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    if (!(x.p != null)) {\n    } else {\n      var y: string = x.p; // ok\n    }\n  },\n\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    if (x.p != null) {\n      alert(\"\");\n      var y: string = x.p; // not ok\n    }\n  },\n\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    if (x.p != null) {\n      x.p = null;\n      var y: string = x.p; // not ok\n    }\n  },\n\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    if (x.p != null) {\n    }\n    var y: string = x.p; // not ok\n  },\n\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    if (x.p != null) {\n    } else {\n      var y: string = x.p; // not ok\n    }\n  },\n\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    var y: string = x.p != null ? x.p : \"\"; // ok\n  },\n\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    var y: string = x.p || \"\"; // ok\n  },\n\n  function() {\n    var x: { p: string | string[] } = { p: [\"xxx\"] };\n    if (Array.isArray(x.p)) {\n      var y: string[] = x.p; // ok\n    } else {\n      var z: string = x.p; // ok\n    }\n  },\n\n  function() {\n    var x: { y: ?string } = { y: null };\n    if (!x.y) {\n      x.y = \"foo\";\n    }\n    (x.y: string);\n  },\n\n  function() {\n    var x: { y: ?string } = { y: null };\n    if (x.y) {\n    } else {\n      x.y = \"foo\";\n    }\n    (x.y: string);\n  },\n\n  function() {\n    var x: { y: ?string } = { y: null };\n    if (!x.y) {\n      x.y = 123; // error\n    }\n    (x.y: string); // error, this got widened to a number\n  },\n\n  function() {\n    var x: { y: ?string } = { y: null };\n    if (x.y) {\n      x.y = \"foo\";\n    } else {\n      x.y = \"bar\";\n    }\n    (x.y: string);\n  },\n\n  function() {\n    var x: { y: string | number | boolean } = { y: false };\n    if (typeof x.y == \"number\") {\n      x.y = \"foo\";\n    }\n    (x.y: string); // error, could also be boolean\n  },\n\n  function() {\n    var x: { y: string | number | boolean } = { y: false };\n    if (typeof x.y == \"number\") {\n      x.y = \"foo\";\n    } else if (typeof x.y == \"boolean\") {\n      x.y = \"bar\";\n    }\n    (x.y: boolean); // error, string\n  },\n\n  function() {\n    var x: { y: ?string } = { y: null };\n    if (!x.y) {\n      x.y = \"foo\";\n    }\n    if (x.y) {\n      x.y = null;\n    }\n    (x.y: string); // error\n  },\n\n  function() {\n    var x: { y: string | number | boolean } = { y: false };\n    if (typeof x.y == \"number\") {\n      x.y = \"foo\";\n    }\n    // now x.y can is string | boolean\n    if (typeof x.y == \"string\") {\n      x.y = false;\n    }\n    // now x.y is only boolean\n    (x.y: string); // error\n  },\n\n  function() {\n    var x: { y: string | number | boolean } = { y: false };\n    if (typeof x.y == \"number\") {\n      x.y = \"foo\";\n    }\n    // now x.y can is string | boolean\n    if (typeof x.y == \"string\") {\n      x.y = 123;\n    }\n    // now x.y is number | boolean\n    (x.y: string); // error\n  },\n\n  function() {\n    var x: { y: ?string } = { y: null };\n    var z: string = \"foo\";\n    if (x.y) {\n      x.y = z;\n    } else {\n      x.y = z;\n    }\n    (x.y: string);\n  },\n\n  function(x: string) {\n    if (x === \"a\") {\n    }\n    (x: \"b\"); // error (but only once, string !~> 'b'; 'a' is irrelevant)\n  },\n\n  function(x: mixed) {\n    if (typeof x.bar === \"string\") {\n    } // error, so \\`x.bar\\` refinement is empty\n    (x: string & number);\n  },\n\n  // --- nested conditionals ---\n  // after a branch, the current scope may have changed. this causes the\n  // subsequent assignment to refine the new scope. these tests make sure that\n  // the scope that gets merged after the if statement is the correct\n  // post-condition scope, not the one that was saved at the beginning of the\n  // if statement.\n\n  function() {\n    let x: { foo: ?string } = { foo: null };\n    if (!x.foo) {\n      if (false) {\n      }\n      x.foo = \"foo\";\n    }\n    (x.foo: string);\n  },\n\n  function() {\n    let x: { foo: ?string } = { foo: null };\n    if (!x.foo) {\n      while (false) {}\n      x.foo = \"foo\";\n    }\n    (x.foo: string);\n  },\n\n  function() {\n    let x: { foo: ?string } = { foo: null };\n    if (!x.foo) {\n      for (var i = 0; i < 0; i++) {}\n      x.foo = \"foo\";\n    }\n    (x.foo: string);\n  },\n\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    if (x.p != null) {\n      var { p } = x; // TODO: annot checked against type of x\n      (p: string); // ok\n    }\n  }\n];\n\n`;\n\nexports[`lex.js 1`] = `\nfunction block_scope(x: string | number) {\n  {\n    let x;\n    x = \"\"; // doesn't refine outer x\n  }\n  (x : string); // error: number ~> string\n}\n\nfunction switch_scope(x: string | number) {\n  switch (x) {\n    default:\n      let x;\n      x = \"\"; // doesn't refine outer x\n  }\n  (x : string); // error: number ~> string\n}\n\nfunction try_scope(x: string | number) {\n  try {\n    let x;\n    x = \"\"; // doesn't refine outer x\n  } catch (e) {\n    x = \"\"; // refinement would only escape if both sides refined\n  }\n  (x : string); // error: number ~> string\n}\n\nfunction try_scope_catch(x: string | number) {\n  try {\n    x = \"\"; // refinement would only escape if both sides refined\n  } catch (e) {\n    let x;\n    x = \"\"; // doesn't refine outer x\n  }\n  (x : string); // error: number ~> string\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction block_scope(x: string | number) {\n  {\n    let x;\n    x = \"\"; // doesn't refine outer x\n  }\n  (x: string); // error: number ~> string\n}\n\nfunction switch_scope(x: string | number) {\n  switch (x) {\n    default:\n      let x;\n      x = \"\"; // doesn't refine outer x\n  }\n  (x: string); // error: number ~> string\n}\n\nfunction try_scope(x: string | number) {\n  try {\n    let x;\n    x = \"\"; // doesn't refine outer x\n  } catch (e) {\n    x = \"\"; // refinement would only escape if both sides refined\n  }\n  (x: string); // error: number ~> string\n}\n\nfunction try_scope_catch(x: string | number) {\n  try {\n    x = \"\"; // refinement would only escape if both sides refined\n  } catch (e) {\n    let x;\n    x = \"\"; // doesn't refine outer x\n  }\n  (x: string); // error: number ~> string\n}\n\n`;\n\nexports[`local.js 1`] = `\nvar paths =\n[\n  function() {\n    var x : ?string = \"xxx\";\n    var y : string = x;  // not ok\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    if (x != null) {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    if (x == null) {} else {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    if (x == null)\n      return;\n    var y : string = x;  // ok\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    if (!(x != null)) {} else {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    if (x != null) {\n      alert(\"\");\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    if (x != null) {}\n    var y : string = x;  // not ok\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    if (x != null) {\n    } else {\n      var y : string = x;  // not ok\n    }\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    var y : string = x != null ? x : \"\"; // ok\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    var y : string = x || \"\"; // ok\n  },\n\n  function() {\n    var x : string | string[] = [\"xxx\"];\n    if (Array.isArray(x)) {\n      var y : string[] = x; // ok\n    } else {\n      var z : string = x; // ok\n    }\n  },\n\n  function() {\n    var x : ?string = null;\n    if (!x) {\n      x = \"xxx\";\n    }\n    var y : string = x;\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar paths = [\n  function() {\n    var x: ?string = \"xxx\";\n    var y: string = x; // not ok\n  },\n\n  function() {\n    var x: ?string = \"xxx\";\n    if (x != null) {\n      var y: string = x; // ok\n    }\n  },\n\n  function() {\n    var x: ?string = \"xxx\";\n    if (x == null) {\n    } else {\n      var y: string = x; // ok\n    }\n  },\n\n  function() {\n    var x: ?string = \"xxx\";\n    if (x == null) return;\n    var y: string = x; // ok\n  },\n\n  function() {\n    var x: ?string = \"xxx\";\n    if (!(x != null)) {\n    } else {\n      var y: string = x; // ok\n    }\n  },\n\n  function() {\n    var x: ?string = \"xxx\";\n    if (x != null) {\n      alert(\"\");\n      var y: string = x; // ok\n    }\n  },\n\n  function() {\n    var x: ?string = \"xxx\";\n    if (x != null) {\n    }\n    var y: string = x; // not ok\n  },\n\n  function() {\n    var x: ?string = \"xxx\";\n    if (x != null) {\n    } else {\n      var y: string = x; // not ok\n    }\n  },\n\n  function() {\n    var x: ?string = \"xxx\";\n    var y: string = x != null ? x : \"\"; // ok\n  },\n\n  function() {\n    var x: ?string = \"xxx\";\n    var y: string = x || \"\"; // ok\n  },\n\n  function() {\n    var x: string | string[] = [\"xxx\"];\n    if (Array.isArray(x)) {\n      var y: string[] = x; // ok\n    } else {\n      var z: string = x; // ok\n    }\n  },\n\n  function() {\n    var x: ?string = null;\n    if (!x) {\n      x = \"xxx\";\n    }\n    var y: string = x;\n  }\n];\n\n`;\n\nexports[`null_tests.js 1`] = `\nvar null_tests =\n[\n  // expr != null\n  function() {\n    var x : ?string = \"xxx\";\n    if (x != null) {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    if (null != x) {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p != null) {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (x.p.q != null) {\n      var y : string = x.p.q;  // ok\n    }\n  },\n\n  // expr == null\n  function() {\n    var x : ?string = \"xxx\";\n    if (x == null) {} else {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p == null) {} else {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (x.p.q == null) {} else {\n      var y : string = x.p.q;  // ok\n    }\n  },\n\n  // expr !== null\n  function() {\n    var x : ?string = \"xxx\";\n    if (x !== null) {\n      var y : string | void = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p !== null) {\n      var y : string | void = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (x.p.q !== null) {\n      var y : string | void = x.p.q;  // ok\n    }\n  },\n\n  // expr === null\n  function() {\n    var x : ?string = \"xxx\";\n    if (x === null) {} else {\n      var y : string | void = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p === null) {} else {\n      var y : string | void = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (x.p.q === null) {} else {\n      var y : string | void = x.p.q;  // ok\n    }\n  },\n];\n\n// this.p op null\nclass C {\n  p: ?string;\n\n  ensure0(): string {\n    if (this.p != null)\n      return this.p;\n    else\n      return \"\";\n  }\n\n  ensure1(): string {\n    if (this.p == null)\n      return \"\";\n    return this.p;\n  }\n\n  ensure2(): string | void {\n    if (this.p !== null)\n      return this.p;\n    else\n      return \"\";\n  }\n\n  ensure3(): string | void {\n    if (this.p === null)\n      return \"\";\n    return this.p;\n  }\n}\n\n// super.p op null\nclass D extends C {\n\n  ensure100(): string {\n    if (super.p != null)\n      return super.p;\n    else\n      return \"\";\n  }\n\n  ensure101(): string {\n    if (super.p == null)\n      return \"\";\n    else\n      return super.p;\n  }\n\n  ensure103(): string {\n    if (super.p != null) {\n      alert(\"\");\n      return super.p;  // not ok\n    }\n    return \"\";\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar null_tests = [\n  // expr != null\n  function() {\n    var x: ?string = \"xxx\";\n    if (x != null) {\n      var y: string = x; // ok\n    }\n  },\n\n  function() {\n    var x: ?string = \"xxx\";\n    if (null != x) {\n      var y: string = x; // ok\n    }\n  },\n\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    if (x.p != null) {\n      var y: string = x.p; // ok\n    }\n  },\n\n  function() {\n    var x: { p: { q: ?string } } = { p: { q: \"xxx\" } };\n    if (x.p.q != null) {\n      var y: string = x.p.q; // ok\n    }\n  },\n\n  // expr == null\n  function() {\n    var x: ?string = \"xxx\";\n    if (x == null) {\n    } else {\n      var y: string = x; // ok\n    }\n  },\n\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    if (x.p == null) {\n    } else {\n      var y: string = x.p; // ok\n    }\n  },\n\n  function() {\n    var x: { p: { q: ?string } } = { p: { q: \"xxx\" } };\n    if (x.p.q == null) {\n    } else {\n      var y: string = x.p.q; // ok\n    }\n  },\n\n  // expr !== null\n  function() {\n    var x: ?string = \"xxx\";\n    if (x !== null) {\n      var y: string | void = x; // ok\n    }\n  },\n\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    if (x.p !== null) {\n      var y: string | void = x.p; // ok\n    }\n  },\n\n  function() {\n    var x: { p: { q: ?string } } = { p: { q: \"xxx\" } };\n    if (x.p.q !== null) {\n      var y: string | void = x.p.q; // ok\n    }\n  },\n\n  // expr === null\n  function() {\n    var x: ?string = \"xxx\";\n    if (x === null) {\n    } else {\n      var y: string | void = x; // ok\n    }\n  },\n\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    if (x.p === null) {\n    } else {\n      var y: string | void = x.p; // ok\n    }\n  },\n\n  function() {\n    var x: { p: { q: ?string } } = { p: { q: \"xxx\" } };\n    if (x.p.q === null) {\n    } else {\n      var y: string | void = x.p.q; // ok\n    }\n  }\n];\n\n// this.p op null\nclass C {\n  p: ?string;\n\n  ensure0(): string {\n    if (this.p != null) return this.p;\n    else return \"\";\n  }\n\n  ensure1(): string {\n    if (this.p == null) return \"\";\n    return this.p;\n  }\n\n  ensure2(): string | void {\n    if (this.p !== null) return this.p;\n    else return \"\";\n  }\n\n  ensure3(): string | void {\n    if (this.p === null) return \"\";\n    return this.p;\n  }\n}\n\n// super.p op null\nclass D extends C {\n  ensure100(): string {\n    if (super.p != null) return super.p;\n    else return \"\";\n  }\n\n  ensure101(): string {\n    if (super.p == null) return \"\";\n    else return super.p;\n  }\n\n  ensure103(): string {\n    if (super.p != null) {\n      alert(\"\");\n      return super.p; // not ok\n    }\n    return \"\";\n  }\n}\n\n`;\n\nexports[`switch.js 1`] = `\n// @flow\nfunction foo(a,b,c) {\n  switch (c) {\n  case a.x.y: // OK\n  case b.x.y: // OK\n    return;\n  default:\n    return;\n  }\n}\n\n// test refis out of switches that are exhaustive without default case\n\nfunction exhaustion1(x): number {\n  var foo;\n  switch (x) {\n  case 0: // falls through\n  case 1:\n    foo = 3;\n    break;\n  default:\n    throw new Error('Invalid state');\n  }\n  return foo; // no error\n}\n\nfunction exhaustion2(x, y): number {\n  var foo;\n  switch (x) {\n  case 0:\n    if (y) {\n      break;  // leaks uninitialized foo out of switch\n    }\n    /**\n     * TODO this shouldn't cause an error, because the path that\n     * runs it will always go on to assign a number to foo. But\n     * we'll need true isolation in env snapshots to model this.\n     * Currently tvars are always shared between clones - we'd\n     * have to rework envs pretty extensively to avoid it.\n     *\n    foo = \"\";\n     */\n  case 1:\n    foo = 3;\n    break;\n  default:\n    throw new Error('Invalid state');\n  }\n  return foo; // error, possibly uninitialized\n}\n\nfunction exhaustion3(x): number {\n  let foo = null;\n  switch (x) {\n  case 0: // falls through\n  case 1:\n    foo = 3;\n    break;\n  default:\n    throw new Error('Invalid state');\n  }\n  return foo; // no error\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nfunction foo(a, b, c) {\n  switch (c) {\n    case a.x.y: // OK\n    case b.x.y: // OK\n      return;\n    default:\n      return;\n  }\n}\n\n// test refis out of switches that are exhaustive without default case\n\nfunction exhaustion1(x): number {\n  var foo;\n  switch (x) {\n    case 0: // falls through\n    case 1:\n      foo = 3;\n      break;\n    default:\n      throw new Error(\"Invalid state\");\n  }\n  return foo; // no error\n}\n\nfunction exhaustion2(x, y): number {\n  var foo;\n  switch (x) {\n    case 0:\n      if (y) {\n        break; // leaks uninitialized foo out of switch\n      }\n    /**\n     * TODO this shouldn't cause an error, because the path that\n     * runs it will always go on to assign a number to foo. But\n     * we'll need true isolation in env snapshots to model this.\n     * Currently tvars are always shared between clones - we'd\n     * have to rework envs pretty extensively to avoid it.\n     *\n    foo = \"\";\n     */\n    case 1:\n      foo = 3;\n      break;\n    default:\n      throw new Error(\"Invalid state\");\n  }\n  return foo; // error, possibly uninitialized\n}\n\nfunction exhaustion3(x): number {\n  let foo = null;\n  switch (x) {\n    case 0: // falls through\n    case 1:\n      foo = 3;\n      break;\n    default:\n      throw new Error(\"Invalid state\");\n  }\n  return foo; // no error\n}\n\n`;\n\nexports[`typeof_tests.js 1`] = `\nvar null_tests =\n[\n  // typeof expr == typename\n  function() {\n    var x : ?string = \"xxx\";\n    if (typeof x == \"string\") {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    if (\"string\" == typeof x) {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (typeof x.p == \"string\") {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (typeof x.p.q == \"string\") {\n      var y : string = x.p.q;  // ok\n    }\n  },\n\n  // typeof expr != typename\n  function() {\n    var x : ?string = \"xxx\";\n    if (typeof x != \"string\") {} else {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (typeof x.p != \"string\") {} else {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (typeof x.p.q != \"string\") {} else {\n      var y : string = x.p.q;  // ok\n    }\n  },\n\n  // typeof expr === typename\n  function() {\n    var x : ?string = \"xxx\";\n    if (typeof x === \"string\") {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (typeof x.p === \"string\") {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (typeof x.p.q === \"string\") {\n      var y : string = x.p.q;  // ok\n    }\n  },\n\n  // typeof expr !== typename\n  function() {\n    var x : ?string = \"xxx\";\n    if (typeof x !== \"string\") {} else {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (typeof x.p !== \"string\") {} else {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (typeof x.p.q !== \"string\") {} else {\n      var y : string = x.p.q;  // ok\n    }\n  },\n];\n\n// typeof this.p op typename\nclass A {\n  p: ?string;\n\n  ensure0(): string {\n    if (typeof this.p == \"string\")\n      return this.p;\n    else\n      return \"\";\n  }\n\n  ensure1(): string {\n    if (typeof this.p != \"string\")\n      return \"\";\n    else\n     return this.p;\n  }\n\n  ensure2(): string | void {\n    if (typeof this.p === \"string\")\n      return this.p;\n    else\n      return \"\";\n  }\n\n  ensure3(): string | void {\n    if (typeof this.p !== \"string\")\n      return \"\";\n    else\n      return this.p;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar null_tests = [\n  // typeof expr == typename\n  function() {\n    var x: ?string = \"xxx\";\n    if (typeof x == \"string\") {\n      var y: string = x; // ok\n    }\n  },\n\n  function() {\n    var x: ?string = \"xxx\";\n    if (\"string\" == typeof x) {\n      var y: string = x; // ok\n    }\n  },\n\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    if (typeof x.p == \"string\") {\n      var y: string = x.p; // ok\n    }\n  },\n\n  function() {\n    var x: { p: { q: ?string } } = { p: { q: \"xxx\" } };\n    if (typeof x.p.q == \"string\") {\n      var y: string = x.p.q; // ok\n    }\n  },\n\n  // typeof expr != typename\n  function() {\n    var x: ?string = \"xxx\";\n    if (typeof x != \"string\") {\n    } else {\n      var y: string = x; // ok\n    }\n  },\n\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    if (typeof x.p != \"string\") {\n    } else {\n      var y: string = x.p; // ok\n    }\n  },\n\n  function() {\n    var x: { p: { q: ?string } } = { p: { q: \"xxx\" } };\n    if (typeof x.p.q != \"string\") {\n    } else {\n      var y: string = x.p.q; // ok\n    }\n  },\n\n  // typeof expr === typename\n  function() {\n    var x: ?string = \"xxx\";\n    if (typeof x === \"string\") {\n      var y: string = x; // ok\n    }\n  },\n\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    if (typeof x.p === \"string\") {\n      var y: string = x.p; // ok\n    }\n  },\n\n  function() {\n    var x: { p: { q: ?string } } = { p: { q: \"xxx\" } };\n    if (typeof x.p.q === \"string\") {\n      var y: string = x.p.q; // ok\n    }\n  },\n\n  // typeof expr !== typename\n  function() {\n    var x: ?string = \"xxx\";\n    if (typeof x !== \"string\") {\n    } else {\n      var y: string = x; // ok\n    }\n  },\n\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    if (typeof x.p !== \"string\") {\n    } else {\n      var y: string = x.p; // ok\n    }\n  },\n\n  function() {\n    var x: { p: { q: ?string } } = { p: { q: \"xxx\" } };\n    if (typeof x.p.q !== \"string\") {\n    } else {\n      var y: string = x.p.q; // ok\n    }\n  }\n];\n\n// typeof this.p op typename\nclass A {\n  p: ?string;\n\n  ensure0(): string {\n    if (typeof this.p == \"string\") return this.p;\n    else return \"\";\n  }\n\n  ensure1(): string {\n    if (typeof this.p != \"string\") return \"\";\n    else return this.p;\n  }\n\n  ensure2(): string | void {\n    if (typeof this.p === \"string\") return this.p;\n    else return \"\";\n  }\n\n  ensure3(): string | void {\n    if (typeof this.p !== \"string\") return \"\";\n    else return this.p;\n  }\n}\n\n`;\n\nexports[`undef_tests.js 1`] = `\nvar undef_tests =\n[\n  // NOTE: not (yet?) supporting non-strict eq test for undefined\n\n  // expr !== undefined\n  function() {\n    var x : ?string = \"xxx\";\n    if (x !== undefined && x !== null) {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    if (undefined !== x && x !== null) {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p !== undefined && x.p !== null) {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (x.p.q !== undefined && x.p.q !== null) {\n      var y : string = x.p.q;  // ok\n    }\n  },\n\n  // expr === undefined\n  function() {\n    var x : ?string = \"xxx\";\n    if (x === undefined || x === null) {} else {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p === undefined || x.p === null) {} else {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (x.p.q === undefined || x.p.q === null) {} else {\n      var y : string = x.p.q;  // ok\n    }\n  },\n];\n\n// this.p op undefined\nclass A {\n  p: ?string;\n\n  ensure0(): string {\n    if (this.p !== undefined && this.p !== null)\n      return this.p;\n    else\n      return \"\";\n  }\n\n  ensure1(): string {\n    if (this.p === undefined || this.p === null)\n      return \"\";\n    else\n      return this.p;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar undef_tests = [\n  // NOTE: not (yet?) supporting non-strict eq test for undefined\n\n  // expr !== undefined\n  function() {\n    var x: ?string = \"xxx\";\n    if (x !== undefined && x !== null) {\n      var y: string = x; // ok\n    }\n  },\n\n  function() {\n    var x: ?string = \"xxx\";\n    if (undefined !== x && x !== null) {\n      var y: string = x; // ok\n    }\n  },\n\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    if (x.p !== undefined && x.p !== null) {\n      var y: string = x.p; // ok\n    }\n  },\n\n  function() {\n    var x: { p: { q: ?string } } = { p: { q: \"xxx\" } };\n    if (x.p.q !== undefined && x.p.q !== null) {\n      var y: string = x.p.q; // ok\n    }\n  },\n\n  // expr === undefined\n  function() {\n    var x: ?string = \"xxx\";\n    if (x === undefined || x === null) {\n    } else {\n      var y: string = x; // ok\n    }\n  },\n\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    if (x.p === undefined || x.p === null) {\n    } else {\n      var y: string = x.p; // ok\n    }\n  },\n\n  function() {\n    var x: { p: { q: ?string } } = { p: { q: \"xxx\" } };\n    if (x.p.q === undefined || x.p.q === null) {\n    } else {\n      var y: string = x.p.q; // ok\n    }\n  }\n];\n\n// this.p op undefined\nclass A {\n  p: ?string;\n\n  ensure0(): string {\n    if (this.p !== undefined && this.p !== null) return this.p;\n    else return \"\";\n  }\n\n  ensure1(): string {\n    if (this.p === undefined || this.p === null) return \"\";\n    else return this.p;\n  }\n}\n\n`;\n\nexports[`void_tests.js 1`] = `\nvar void_tests =\n[\n  // NOTE: not (yet?) supporting non-strict eq test for undefined\n\n  // expr !== void(...)\n  function() {\n    var x : ?string = \"xxx\";\n    if (x !== void(0) && x !== null) {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    if (void(0) !== x && x !== null) {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p !== void(0) && x.p !== null) {\n      var y : string | void = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (x.p.q !== void(0) && x.p.q !== null) {\n      var y : string = x.p.q;  // ok\n    }\n  },\n\n  // expr === void(...)\n  function() {\n    var x : ?string = \"xxx\";\n    if (x === void(0) || x === null) {} else {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p === void(0) || x.p === null) {} else {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (x.p.q === void(0) || x.p.q === null) {} else {\n      var y : string = x.p.q;  // ok\n    }\n  },\n];\n\n// this.p op void(...)\nclass A {\n  p: ?string;\n\n  ensure0(): string {\n    if (this.p !== void(0) && this.p !== null)\n      return this.p;\n    else\n      return \"\";\n  }\n\n  ensure1(): string {\n    if (this.p === void(0) || this.p === null)\n      return \"\";\n    else\n      return this.p;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar void_tests = [\n  // NOTE: not (yet?) supporting non-strict eq test for undefined\n\n  // expr !== void(...)\n  function() {\n    var x: ?string = \"xxx\";\n    if (x !== void 0 && x !== null) {\n      var y: string = x; // ok\n    }\n  },\n\n  function() {\n    var x: ?string = \"xxx\";\n    if (void 0 !== x && x !== null) {\n      var y: string = x; // ok\n    }\n  },\n\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    if (x.p !== void 0 && x.p !== null) {\n      var y: string | void = x.p; // ok\n    }\n  },\n\n  function() {\n    var x: { p: { q: ?string } } = { p: { q: \"xxx\" } };\n    if (x.p.q !== void 0 && x.p.q !== null) {\n      var y: string = x.p.q; // ok\n    }\n  },\n\n  // expr === void(...)\n  function() {\n    var x: ?string = \"xxx\";\n    if (x === void 0 || x === null) {\n    } else {\n      var y: string = x; // ok\n    }\n  },\n\n  function() {\n    var x: { p: ?string } = { p: \"xxx\" };\n    if (x.p === void 0 || x.p === null) {\n    } else {\n      var y: string = x.p; // ok\n    }\n  },\n\n  function() {\n    var x: { p: { q: ?string } } = { p: { q: \"xxx\" } };\n    if (x.p.q === void 0 || x.p.q === null) {\n    } else {\n      var y: string = x.p.q; // ok\n    }\n  }\n];\n\n// this.p op void(...)\nclass A {\n  p: ?string;\n\n  ensure0(): string {\n    if (this.p !== void 0 && this.p !== null) return this.p;\n    else return \"\";\n  }\n\n  ensure1(): string {\n    if (this.p === void 0 || this.p === null) return \"\";\n    else return this.p;\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/refi/bound.js",
    "content": "// refinements of bound vars (closed-over locals)\n// should have the same lifetimes as heap objects.\n\nvar x : ?string = \"xxx\";\n\nvar tests =\n[\n  function() {\n    var y : string = x;  // not ok\n  },\n\n  function() {\n    if (x != null) {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    if (x == null) {} else {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    if (x == null)\n      return;\n    var y : string = x;  // ok\n  },\n\n  function() {\n    if (!(x != null)) {} else {\n      var y : string = x;  // ok\n    }\n  },\n\n  /* TODO we actually allow this currently; fix\n  // requires further remedial work in Env\n  function() {\n    if (x != null) {\n      alert(\"\");\n      var y : string = x;  // not ok\n    }\n  },\n  */\n  function() {\n    if (x != null) {}\n    var y : string = x;  // not ok\n  },\n\n  function() {\n    if (x != null) {\n    } else {\n      var y : string = x;  // not ok\n    }\n  },\n\n  function() {\n    var y : string = x != null ? x : \"\"; // ok\n  },\n\n  function() {\n    var y : string = x || \"\"; // ok\n  },\n];\n"
  },
  {
    "path": "tests/flow/refi/heap.js",
    "content": "var tests =\n[\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    var y : string = x.p;  // not ok\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p != null) {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p == null) {} else {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p == null)\n      return;\n    var y : string = x.p;  // ok\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (!(x.p != null)) {} else {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p != null) {\n      alert(\"\");\n      var y : string = x.p;  // not ok\n    }\n  },\n\n  function () {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p != null) {\n      x.p = null;\n      var y : string = x.p;  // not ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p != null) {}\n    var y : string = x.p;  // not ok\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p != null) {\n    } else {\n      var y : string = x.p;  // not ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    var y : string = x.p != null ? x.p : \"\"; // ok\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    var y : string = x.p || \"\"; // ok\n  },\n\n  function() {\n    var x : {p:string | string[]} = {p:[\"xxx\"]};\n    if (Array.isArray(x.p)) {\n      var y : string[] = x.p; // ok\n    } else {\n      var z : string = x.p; // ok\n    }\n  },\n\n  function() {\n    var x : {y: ?string} = {y: null};\n    if (!x.y) {\n      x.y = \"foo\";\n    }\n    (x.y: string);\n  },\n\n  function() {\n    var x : {y: ?string} = {y: null};\n    if (x.y) {\n    } else {\n      x.y = \"foo\";\n    }\n    (x.y: string);\n  },\n\n  function() {\n    var x : {y: ?string} = {y: null};\n    if (!x.y) {\n      x.y = 123; // error\n    }\n    (x.y: string); // error, this got widened to a number\n  },\n\n  function() {\n    var x : {y: ?string} = {y: null};\n    if (x.y) {\n      x.y = \"foo\";\n    } else {\n      x.y = \"bar\";\n    }\n    (x.y : string);\n  },\n\n  function() {\n    var x : {y: string | number | boolean} = {y: false};\n    if (typeof x.y == \"number\") {\n      x.y = \"foo\";\n    }\n    (x.y : string); // error, could also be boolean\n  },\n\n  function() {\n    var x : {y: string | number | boolean} = {y: false};\n    if (typeof x.y == \"number\") {\n      x.y = \"foo\";\n    } else if (typeof x.y == \"boolean\") {\n      x.y = \"bar\";\n    }\n    (x.y : boolean); // error, string\n  },\n\n  function() {\n    var x : {y: ?string} = {y: null};\n    if (!x.y) {\n      x.y = \"foo\";\n    }\n    if (x.y) {\n      x.y = null;\n    }\n    (x.y : string); // error\n  },\n\n  function() {\n    var x : {y: string | number | boolean} = {y: false};\n    if (typeof x.y == \"number\") {\n      x.y = \"foo\";\n    }\n    // now x.y can is string | boolean\n    if (typeof x.y == \"string\") {\n      x.y = false;\n    }\n    // now x.y is only boolean\n    (x.y : string); // error\n  },\n\n  function() {\n    var x : {y: string | number | boolean} = {y: false};\n    if (typeof x.y == \"number\") {\n      x.y = \"foo\";\n    }\n    // now x.y can is string | boolean\n    if (typeof x.y == \"string\") {\n      x.y = 123;\n    }\n    // now x.y is number | boolean\n    (x.y : string); // error\n  },\n\n  function() {\n    var x : {y: ?string} = {y: null};\n    var z : string = \"foo\";\n    if (x.y) {\n      x.y = z;\n    } else {\n      x.y = z;\n    }\n    (x.y : string);\n  },\n\n  function(x: string) {\n    if (x === 'a') {}\n    (x: 'b'); // error (but only once, string !~> 'b'; 'a' is irrelevant)\n  },\n\n  function(x: mixed) {\n    if (typeof x.bar === 'string') {} // error, so `x.bar` refinement is empty\n    (x: string & number);\n  },\n\n  // --- nested conditionals ---\n  // after a branch, the current scope may have changed. this causes the\n  // subsequent assignment to refine the new scope. these tests make sure that\n  // the scope that gets merged after the if statement is the correct\n  // post-condition scope, not the one that was saved at the beginning of the\n  // if statement.\n\n  function() {\n    let x: { foo: ?string } = { foo: null };\n    if (!x.foo) {\n      if (false) {}\n      x.foo = \"foo\";\n    }\n    (x.foo: string);\n  },\n\n  function() {\n    let x: { foo: ?string } = { foo: null };\n    if (!x.foo) {\n      while(false) {}\n      x.foo = \"foo\";\n    }\n    (x.foo: string);\n  },\n\n  function() {\n    let x: { foo: ?string } = { foo: null };\n    if (!x.foo) {\n      for (var i = 0; i < 0; i++) {}\n      x.foo = \"foo\";\n    }\n    (x.foo: string);\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p != null) {\n      var {p} = x; // TODO: annot checked against type of x\n      (p : string); // ok\n    }\n  },\n];\n"
  },
  {
    "path": "tests/flow/refi/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/refi/lex.js",
    "content": "function block_scope(x: string | number) {\n  {\n    let x;\n    x = \"\"; // doesn't refine outer x\n  }\n  (x : string); // error: number ~> string\n}\n\nfunction switch_scope(x: string | number) {\n  switch (x) {\n    default:\n      let x;\n      x = \"\"; // doesn't refine outer x\n  }\n  (x : string); // error: number ~> string\n}\n\nfunction try_scope(x: string | number) {\n  try {\n    let x;\n    x = \"\"; // doesn't refine outer x\n  } catch (e) {\n    x = \"\"; // refinement would only escape if both sides refined\n  }\n  (x : string); // error: number ~> string\n}\n\nfunction try_scope_catch(x: string | number) {\n  try {\n    x = \"\"; // refinement would only escape if both sides refined\n  } catch (e) {\n    let x;\n    x = \"\"; // doesn't refine outer x\n  }\n  (x : string); // error: number ~> string\n}\n"
  },
  {
    "path": "tests/flow/refi/local.js",
    "content": "var paths =\n[\n  function() {\n    var x : ?string = \"xxx\";\n    var y : string = x;  // not ok\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    if (x != null) {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    if (x == null) {} else {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    if (x == null)\n      return;\n    var y : string = x;  // ok\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    if (!(x != null)) {} else {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    if (x != null) {\n      alert(\"\");\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    if (x != null) {}\n    var y : string = x;  // not ok\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    if (x != null) {\n    } else {\n      var y : string = x;  // not ok\n    }\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    var y : string = x != null ? x : \"\"; // ok\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    var y : string = x || \"\"; // ok\n  },\n\n  function() {\n    var x : string | string[] = [\"xxx\"];\n    if (Array.isArray(x)) {\n      var y : string[] = x; // ok\n    } else {\n      var z : string = x; // ok\n    }\n  },\n\n  function() {\n    var x : ?string = null;\n    if (!x) {\n      x = \"xxx\";\n    }\n    var y : string = x;\n  },\n];\n"
  },
  {
    "path": "tests/flow/refi/null_tests.js",
    "content": "var null_tests =\n[\n  // expr != null\n  function() {\n    var x : ?string = \"xxx\";\n    if (x != null) {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    if (null != x) {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p != null) {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (x.p.q != null) {\n      var y : string = x.p.q;  // ok\n    }\n  },\n\n  // expr == null\n  function() {\n    var x : ?string = \"xxx\";\n    if (x == null) {} else {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p == null) {} else {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (x.p.q == null) {} else {\n      var y : string = x.p.q;  // ok\n    }\n  },\n\n  // expr !== null\n  function() {\n    var x : ?string = \"xxx\";\n    if (x !== null) {\n      var y : string | void = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p !== null) {\n      var y : string | void = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (x.p.q !== null) {\n      var y : string | void = x.p.q;  // ok\n    }\n  },\n\n  // expr === null\n  function() {\n    var x : ?string = \"xxx\";\n    if (x === null) {} else {\n      var y : string | void = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p === null) {} else {\n      var y : string | void = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (x.p.q === null) {} else {\n      var y : string | void = x.p.q;  // ok\n    }\n  },\n];\n\n// this.p op null\nclass C {\n  p: ?string;\n\n  ensure0(): string {\n    if (this.p != null)\n      return this.p;\n    else\n      return \"\";\n  }\n\n  ensure1(): string {\n    if (this.p == null)\n      return \"\";\n    return this.p;\n  }\n\n  ensure2(): string | void {\n    if (this.p !== null)\n      return this.p;\n    else\n      return \"\";\n  }\n\n  ensure3(): string | void {\n    if (this.p === null)\n      return \"\";\n    return this.p;\n  }\n}\n\n// super.p op null\nclass D extends C {\n\n  ensure100(): string {\n    if (super.p != null)\n      return super.p;\n    else\n      return \"\";\n  }\n\n  ensure101(): string {\n    if (super.p == null)\n      return \"\";\n    else\n      return super.p;\n  }\n\n  ensure103(): string {\n    if (super.p != null) {\n      alert(\"\");\n      return super.p;  // not ok\n    }\n    return \"\";\n  }\n}\n"
  },
  {
    "path": "tests/flow/refi/switch.js",
    "content": "// @flow\nfunction foo(a,b,c) {\n  switch (c) {\n  case a.x.y: // OK\n  case b.x.y: // OK\n    return;\n  default:\n    return;\n  }\n}\n\n// test refis out of switches that are exhaustive without default case\n\nfunction exhaustion1(x): number {\n  var foo;\n  switch (x) {\n  case 0: // falls through\n  case 1:\n    foo = 3;\n    break;\n  default:\n    throw new Error('Invalid state');\n  }\n  return foo; // no error\n}\n\nfunction exhaustion2(x, y): number {\n  var foo;\n  switch (x) {\n  case 0:\n    if (y) {\n      break;  // leaks uninitialized foo out of switch\n    }\n    /**\n     * TODO this shouldn't cause an error, because the path that\n     * runs it will always go on to assign a number to foo. But\n     * we'll need true isolation in env snapshots to model this.\n     * Currently tvars are always shared between clones - we'd\n     * have to rework envs pretty extensively to avoid it.\n     *\n    foo = \"\";\n     */\n  case 1:\n    foo = 3;\n    break;\n  default:\n    throw new Error('Invalid state');\n  }\n  return foo; // error, possibly uninitialized\n}\n\nfunction exhaustion3(x): number {\n  let foo = null;\n  switch (x) {\n  case 0: // falls through\n  case 1:\n    foo = 3;\n    break;\n  default:\n    throw new Error('Invalid state');\n  }\n  return foo; // no error\n}\n"
  },
  {
    "path": "tests/flow/refi/typeof_tests.js",
    "content": "var null_tests =\n[\n  // typeof expr == typename\n  function() {\n    var x : ?string = \"xxx\";\n    if (typeof x == \"string\") {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    if (\"string\" == typeof x) {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (typeof x.p == \"string\") {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (typeof x.p.q == \"string\") {\n      var y : string = x.p.q;  // ok\n    }\n  },\n\n  // typeof expr != typename\n  function() {\n    var x : ?string = \"xxx\";\n    if (typeof x != \"string\") {} else {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (typeof x.p != \"string\") {} else {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (typeof x.p.q != \"string\") {} else {\n      var y : string = x.p.q;  // ok\n    }\n  },\n\n  // typeof expr === typename\n  function() {\n    var x : ?string = \"xxx\";\n    if (typeof x === \"string\") {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (typeof x.p === \"string\") {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (typeof x.p.q === \"string\") {\n      var y : string = x.p.q;  // ok\n    }\n  },\n\n  // typeof expr !== typename\n  function() {\n    var x : ?string = \"xxx\";\n    if (typeof x !== \"string\") {} else {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (typeof x.p !== \"string\") {} else {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (typeof x.p.q !== \"string\") {} else {\n      var y : string = x.p.q;  // ok\n    }\n  },\n];\n\n// typeof this.p op typename\nclass A {\n  p: ?string;\n\n  ensure0(): string {\n    if (typeof this.p == \"string\")\n      return this.p;\n    else\n      return \"\";\n  }\n\n  ensure1(): string {\n    if (typeof this.p != \"string\")\n      return \"\";\n    else\n     return this.p;\n  }\n\n  ensure2(): string | void {\n    if (typeof this.p === \"string\")\n      return this.p;\n    else\n      return \"\";\n  }\n\n  ensure3(): string | void {\n    if (typeof this.p !== \"string\")\n      return \"\";\n    else\n      return this.p;\n  }\n}\n"
  },
  {
    "path": "tests/flow/refi/undef_tests.js",
    "content": "var undef_tests =\n[\n  // NOTE: not (yet?) supporting non-strict eq test for undefined\n\n  // expr !== undefined\n  function() {\n    var x : ?string = \"xxx\";\n    if (x !== undefined && x !== null) {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    if (undefined !== x && x !== null) {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p !== undefined && x.p !== null) {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (x.p.q !== undefined && x.p.q !== null) {\n      var y : string = x.p.q;  // ok\n    }\n  },\n\n  // expr === undefined\n  function() {\n    var x : ?string = \"xxx\";\n    if (x === undefined || x === null) {} else {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p === undefined || x.p === null) {} else {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (x.p.q === undefined || x.p.q === null) {} else {\n      var y : string = x.p.q;  // ok\n    }\n  },\n];\n\n// this.p op undefined\nclass A {\n  p: ?string;\n\n  ensure0(): string {\n    if (this.p !== undefined && this.p !== null)\n      return this.p;\n    else\n      return \"\";\n  }\n\n  ensure1(): string {\n    if (this.p === undefined || this.p === null)\n      return \"\";\n    else\n      return this.p;\n  }\n}\n"
  },
  {
    "path": "tests/flow/refi/void_tests.js",
    "content": "var void_tests =\n[\n  // NOTE: not (yet?) supporting non-strict eq test for undefined\n\n  // expr !== void(...)\n  function() {\n    var x : ?string = \"xxx\";\n    if (x !== void(0) && x !== null) {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : ?string = \"xxx\";\n    if (void(0) !== x && x !== null) {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p !== void(0) && x.p !== null) {\n      var y : string | void = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (x.p.q !== void(0) && x.p.q !== null) {\n      var y : string = x.p.q;  // ok\n    }\n  },\n\n  // expr === void(...)\n  function() {\n    var x : ?string = \"xxx\";\n    if (x === void(0) || x === null) {} else {\n      var y : string = x;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:?string} = {p:\"xxx\"};\n    if (x.p === void(0) || x.p === null) {} else {\n      var y : string = x.p;  // ok\n    }\n  },\n\n  function() {\n    var x : {p:{q:?string}} = {p:{q:\"xxx\"}};\n    if (x.p.q === void(0) || x.p.q === null) {} else {\n      var y : string = x.p.q;  // ok\n    }\n  },\n];\n\n// this.p op void(...)\nclass A {\n  p: ?string;\n\n  ensure0(): string {\n    if (this.p !== void(0) && this.p !== null)\n      return this.p;\n    else\n      return \"\";\n  }\n\n  ensure1(): string {\n    if (this.p === void(0) || this.p === null)\n      return \"\";\n    else\n      return this.p;\n  }\n}\n"
  },
  {
    "path": "tests/flow/refinements/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`assignment.js 1`] = `\n/* @flow */\n\nfunction foo(x : ?number) {\n  var y;\n  if (y = x) {\n    var z = y * 1000;\n  }\n}\n\ntype Bar = {\n  parent: ?Bar;\n  doStuff: () => void\n}\n\nfunction bar0(x : Bar) {\n  while (x = x.parent) { // can't assign x to ?Bar\n    x.doStuff();\n  }\n}\n\nfunction bar1(x : ?Bar) {\n  while (x = x.parent) { // x.parent might be null\n    x.doStuff();\n  }\n}\n\nfunction bar2(x : Bar) {\n  var y = x;\n  while (y = y.parent) {\n    y.doStuff();\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction foo(x: ?number) {\n  var y;\n  if ((y = x)) {\n    var z = y * 1000;\n  }\n}\n\ntype Bar = {\n  parent: ?Bar,\n  doStuff: () => void\n};\n\nfunction bar0(x: Bar) {\n  while ((x = x.parent)) {\n    // can't assign x to ?Bar\n    x.doStuff();\n  }\n}\n\nfunction bar1(x: ?Bar) {\n  while ((x = x.parent)) {\n    // x.parent might be null\n    x.doStuff();\n  }\n}\n\nfunction bar2(x: Bar) {\n  var y = x;\n  while ((y = y.parent)) {\n    y.doStuff();\n  }\n}\n\n`;\n\nexports[`ast_node.js 1`] = `\ntype Node1 = {\n  kind: 'Node1',\n  prop1?: string\n};\n\ntype Node2 = {\n  kind: 'Node2',\n  prop2?: string\n}\n\nexport type ASTNode = Node1 | Node2;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype Node1 = {\n  kind: \"Node1\",\n  prop1?: string\n};\n\ntype Node2 = {\n  kind: \"Node2\",\n  prop2?: string\n};\n\nexport type ASTNode = Node1 | Node2;\n\n`;\n\nexports[`bool.js 1`] = `\n/* @flow */\n\nfunction foo(x: ?bool) {\n  if (x === false) {\n    return;\n  }\n\n  if (x === true) {\n    return;\n  }\n\n  x[0]; // error on null and undefined\n}\n\nfunction bar(x: ?bool) {\n  if (x !== true) {\n    if (x !== false) {\n      x[0]; // error on null and undefined\n    }\n  }\n}\n\nfunction baz(x: ?bool) {\n  if (100 * false) {\n    return;\n  }\n  if (false * 100) {\n    return;\n  }\n}\n\nlet tests = [\n  function(x: { done: true, result: string } | { done: false }) {\n    if (x.done === true) {\n      return x.result;\n    }\n    return x.result; // error\n  },\n\n  function(x: { done: true, result: string } | { done: false }) {\n    if (true === x.done) {\n      return x.result;\n    }\n    return x.result; // error\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction foo(x: ?boolean) {\n  if (x === false) {\n    return;\n  }\n\n  if (x === true) {\n    return;\n  }\n\n  x[0]; // error on null and undefined\n}\n\nfunction bar(x: ?boolean) {\n  if (x !== true) {\n    if (x !== false) {\n      x[0]; // error on null and undefined\n    }\n  }\n}\n\nfunction baz(x: ?boolean) {\n  if (100 * false) {\n    return;\n  }\n  if (false * 100) {\n    return;\n  }\n}\n\nlet tests = [\n  function(x: { done: true, result: string } | { done: false }) {\n    if (x.done === true) {\n      return x.result;\n    }\n    return x.result; // error\n  },\n\n  function(x: { done: true, result: string } | { done: false }) {\n    if (true === x.done) {\n      return x.result;\n    }\n    return x.result; // error\n  }\n];\n\n`;\n\nexports[`computed_string_literal.js 1`] = `\n// @flow\n\ntype A = {\n  'b_c': ?string\n};\n\nfunction stuff(str: string) {}\n\nfunction testProperty(a: A) {\n  if (a.b_c) {\n    stuff(a.b_c)\n  }\n}\n\nfunction testLiteralProperty(a: A) {\n  if (a['b_c']) {\n    stuff(a['b_c'])\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ntype A = {\n  \"b_c\": ?string\n};\n\nfunction stuff(str: string) {}\n\nfunction testProperty(a: A) {\n  if (a.b_c) {\n    stuff(a.b_c);\n  }\n}\n\nfunction testLiteralProperty(a: A) {\n  if (a[\"b_c\"]) {\n    stuff(a[\"b_c\"]);\n  }\n}\n\n`;\n\nexports[`cond_prop.js 1`] = `\n/* @flow */\n\ntype Type = Name | ListType | NonNullType;\ntype Name = {kind: 'Name', value: string, type: void };\ntype ListType = {kind: 'ListType', type: Type};\ntype NonNullType = {kind: 'NonNullType', type: Name | ListType | BadType};\ntype BadType = {};\n\nfunction getTypeASTName(typeAST: Type): string {\n  if (!typeAST.type) throw new Error('Must be wrapping type'); // OK\n  return getTypeASTName(typeAST.type); // error, BadType not a subtype of Type\n}\n\nlet tests = [\n  function(x: { done: true, result: string } | { done: false }) {\n    if (x.done) {\n      return x.result;\n    }\n    return x.result; // error\n  },\n\n  function(x: { done: true, result: string } | { foo: string }) {\n    if (x.done) {\n      return x.result; // error, consider { foo: \"herp\", done: \"derp\" }\n    }\n    return x.result; // error\n  },\n\n  function() {\n    type T\n      = { foo: Object, bar: string }\n      | { baz: string, quux: string }\n\n    function testAlwaysTruthyProp(t: T) {\n      if (t.foo) {\n        (t.bar: string); // error, consider { baz: \"x\", quux: \"y\", foo: \"boom\" }\n      } else {\n        (t.quux: string); // ok. since foo is an object (always truthy), the\n                          // else case completely rules out the first branch of\n                          // the union.\n      }\n    }\n\n    function testSometimesTruthyProp(t: T) {\n      if (t.bar) {\n        (t.foo: Object); // error, consider { baz: \"x\", quux: \"y\", bar: \"boom\" }\n      } else {\n        (t.quux: string); // error, consider { foo: {}, bar: \"\" }\n      }\n    }\n  },\n]\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\ntype Type = Name | ListType | NonNullType;\ntype Name = { kind: \"Name\", value: string, type: void };\ntype ListType = { kind: \"ListType\", type: Type };\ntype NonNullType = { kind: \"NonNullType\", type: Name | ListType | BadType };\ntype BadType = {};\n\nfunction getTypeASTName(typeAST: Type): string {\n  if (!typeAST.type) throw new Error(\"Must be wrapping type\"); // OK\n  return getTypeASTName(typeAST.type); // error, BadType not a subtype of Type\n}\n\nlet tests = [\n  function(x: { done: true, result: string } | { done: false }) {\n    if (x.done) {\n      return x.result;\n    }\n    return x.result; // error\n  },\n\n  function(x: { done: true, result: string } | { foo: string }) {\n    if (x.done) {\n      return x.result; // error, consider { foo: \"herp\", done: \"derp\" }\n    }\n    return x.result; // error\n  },\n\n  function() {\n    type T = { foo: Object, bar: string } | { baz: string, quux: string };\n\n    function testAlwaysTruthyProp(t: T) {\n      if (t.foo) {\n        (t.bar: string); // error, consider { baz: \"x\", quux: \"y\", foo: \"boom\" }\n      } else {\n        (t.quux: string); // ok. since foo is an object (always truthy), the\n        // else case completely rules out the first branch of\n        // the union.\n      }\n    }\n\n    function testSometimesTruthyProp(t: T) {\n      if (t.bar) {\n        (t.foo: Object); // error, consider { baz: \"x\", quux: \"y\", bar: \"boom\" }\n      } else {\n        (t.quux: string); // error, consider { foo: {}, bar: \"\" }\n      }\n    }\n  }\n];\n\n`;\n\nexports[`constants.js 1`] = `\n/* @flow */\n\nexport const SUCCESS: 'SUCCESS' = 'SUCCESS';\nexport const ERROR: 'ERROR' = 'ERROR';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nexport const SUCCESS: \"SUCCESS\" = \"SUCCESS\";\nexport const ERROR: \"ERROR\" = \"ERROR\";\n\n`;\n\nexports[`eq.js 1`] = `\n/* @flow */\n\nlet tests = [\n  function(x: string, y: number) {\n    if (x == y) {} // error, string & number are not comparable (unsafe casting)\n    if (x === y) {} // no error, to match \\`let z = (x === y)\\` which is allowed\n  },\n\n  function(x: string) {\n    if (x == undefined) {} // ok\n    if (x == void 0) {} // ok\n  },\n\n  function(x: string) {\n    if (x == null) {} // ok\n  },\n\n  function(x: { y: 'foo' } | { y: 'bar' }) {\n    if (x.y == 123) {} // error\n    if (x.y === 123) {} // ok\n  },\n]\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nlet tests = [\n  function(x: string, y: number) {\n    if (x == y) {\n    } // error, string & number are not comparable (unsafe casting)\n    if (x === y) {\n    } // no error, to match \\`let z = (x === y)\\` which is allowed\n  },\n\n  function(x: string) {\n    if (x == undefined) {\n    } // ok\n    if (x == void 0) {\n    } // ok\n  },\n\n  function(x: string) {\n    if (x == null) {\n    } // ok\n  },\n\n  function(x: { y: \"foo\" } | { y: \"bar\" }) {\n    if (x.y == 123) {\n    } // error\n    if (x.y === 123) {\n    } // ok\n  }\n];\n\n`;\n\nexports[`exists.js 1`] = `\ndeclare class Foo {\n  foo: string;\n}\n\nfunction foo0(x: ?string): string {\n  return x && x || \"\";\n}\n\nfunction foo1(x: ?Foo): string {\n  return x && x.foo || \"\";\n}\n\nfunction foo2(x: ?Class<Foo>): string {\n  return x && new x().foo || \"\";\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class Foo {\n  foo: string\n}\n\nfunction foo0(x: ?string): string {\n  return (x && x) || \"\";\n}\n\nfunction foo1(x: ?Foo): string {\n  return (x && x.foo) || \"\";\n}\n\nfunction foo2(x: ?Class<Foo>): string {\n  return (x && new x().foo) || \"\";\n}\n\n`;\n\nexports[`func_call.js 1`] = `\n// @flow\n\nlet tests = [\n  function(x: { y?: string }, z: () => string) {\n    if (x.y) {\n      // make sure we visit the AST in the correct order. if we visit z() before\n      // x.y, then the function call will invalidate the refinement of x.y\n      // incorrectly.\n      x.y.indexOf(z()); // no error\n    }\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  function(x: { y?: string }, z: () => string) {\n    if (x.y) {\n      // make sure we visit the AST in the correct order. if we visit z() before\n      // x.y, then the function call will invalidate the refinement of x.y\n      // incorrectly.\n      x.y.indexOf(z()); // no error\n    }\n  }\n];\n\n`;\n\nexports[`hasOwnProperty.js 1`] = `\n/* @flow */\n\nfunction foo(x:{y?:() => void}) {\n  x.y(); // error: could be undefined\n  if (x.hasOwnProperty('y')) {\n    x.y(); // error: still could be undefined\n  }\n  if (x.hasOwnProperty('z')) {\n    x.z(); // error: unreachable, but we don't help you here\n  }\n}\n\nfunction bar(x:Object) {\n  x.y(); // treated as \\`any\\`, so allowed\n  if (x.hasOwnProperty('y')) {\n    x.y(); // still treated as \\`any\\`, so allowed\n  }\n  if (x.hasOwnProperty('z')) {\n    x.z(); // also treated as \\`any\\`, so allowed\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction foo(x: { y?: () => void }) {\n  x.y(); // error: could be undefined\n  if (x.hasOwnProperty(\"y\")) {\n    x.y(); // error: still could be undefined\n  }\n  if (x.hasOwnProperty(\"z\")) {\n    x.z(); // error: unreachable, but we don't help you here\n  }\n}\n\nfunction bar(x: Object) {\n  x.y(); // treated as \\`any\\`, so allowed\n  if (x.hasOwnProperty(\"y\")) {\n    x.y(); // still treated as \\`any\\`, so allowed\n  }\n  if (x.hasOwnProperty(\"z\")) {\n    x.z(); // also treated as \\`any\\`, so allowed\n  }\n}\n\n`;\n\nexports[`heap_defassign.js 1`] = `\n// @flow\n\ntype Obj = { p: number | string }\n\nfunction f () {}\n\nfunction def_assign_function_havoc(obj: Obj) {\n    obj.p = 10;                 // (obj.p : number)\n    f();                        // clears refi\n    var x: number = obj.p;      // error, obj.p : number | string\n}\n\nfunction def_assign_setprop_havoc(obj: Obj, obj2: Obj) {\n    obj.p = 10;                 // (obj.p : number)\n    obj2.p = 'hey';             // clears refi\n    var x: number = obj.p;      // error, obj.p : number | string\n}\n\nfunction def_assign_index_havoc(obj: Obj, obj2: Obj) {\n    obj.p = 10;                 // (obj.p : number)\n    obj2['p'] = 'hey';          // clears refi\n    var x: number = obj.p;      // error, obj.p : number | string\n}\n\nfunction def_assign_within_if(b: boolean, obj: Obj) {\n    if (b) {\n        obj.p = 10;             // (obj.p : number)\n        var x: number = obj.p   // ok by def assign\n    }\n    var y: number = obj.p;      // error, obj.p : number | string\n}\n\nfunction def_assign_within_while(b: boolean, obj: Obj) {\n    while (b) {\n        obj.p = 10;             // (obj.p : number)\n        var x: number = obj.p   // ok by def assign\n    }\n    var y: number = obj.p;      // error, obj.p : number | string\n}\n\nfunction def_assign_within_do(b: boolean, obj: Obj) {\n    do {\n        obj.p = 10;             // (obj.p : number)\n        var x: number = obj.p   // ok by def assign\n    } while (b);\n    var y: number = obj.p;      // no error, loop runs at least once\n}\n\nfunction def_assign_within_try(b: boolean, obj: Obj) {\n    obj.p = 10;                 // (obj.p : number)\n    try {\n        f();                    // clears refi and might throw\n        obj.p = 'hey';\n    } catch (e) {\n        f();                    // clears refi and might throw\n        obj.p = 'hey';\n    } finally {\n        // NOTE: the values understood to flow to obj.p at this point\n        // include the number 42 written downstream;\n        // so if we did y:string, we would get at least a spurious error\n        // (among other reasonable errors caused by values written upstream)\n        var y: number = obj.p;  // error, string ~/~ number\n        obj.p = 42;\n    }\n    var z:string = obj.p;       // error, number ~/~ string\n}\n\nfunction def_assign_within_for(b: boolean, obj: Obj) {\n    for (; b; ) {\n        obj.p = 10;             // (obj.p : number)\n        var x: number = obj.p   // ok by def assign\n    }\n    var z: number = obj.p;      // error, (number | string) ~/~ number\n}\n\n// --- name-sensitive havoc ---\n\ntype Obj2 = { q: number | string }\n\nfunction def_assign_setprop_nohavoc(obj: Obj, obj2: Obj2) {\n    obj.p = 10;                 // (obj.p : number)\n    obj2.q = 'hey';             // doesn't clear refi of .p\n    var x: number = obj.p;      // still ok\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ntype Obj = { p: number | string };\n\nfunction f() {}\n\nfunction def_assign_function_havoc(obj: Obj) {\n  obj.p = 10; // (obj.p : number)\n  f(); // clears refi\n  var x: number = obj.p; // error, obj.p : number | string\n}\n\nfunction def_assign_setprop_havoc(obj: Obj, obj2: Obj) {\n  obj.p = 10; // (obj.p : number)\n  obj2.p = \"hey\"; // clears refi\n  var x: number = obj.p; // error, obj.p : number | string\n}\n\nfunction def_assign_index_havoc(obj: Obj, obj2: Obj) {\n  obj.p = 10; // (obj.p : number)\n  obj2[\"p\"] = \"hey\"; // clears refi\n  var x: number = obj.p; // error, obj.p : number | string\n}\n\nfunction def_assign_within_if(b: boolean, obj: Obj) {\n  if (b) {\n    obj.p = 10; // (obj.p : number)\n    var x: number = obj.p; // ok by def assign\n  }\n  var y: number = obj.p; // error, obj.p : number | string\n}\n\nfunction def_assign_within_while(b: boolean, obj: Obj) {\n  while (b) {\n    obj.p = 10; // (obj.p : number)\n    var x: number = obj.p; // ok by def assign\n  }\n  var y: number = obj.p; // error, obj.p : number | string\n}\n\nfunction def_assign_within_do(b: boolean, obj: Obj) {\n  do {\n    obj.p = 10; // (obj.p : number)\n    var x: number = obj.p; // ok by def assign\n  } while (b);\n  var y: number = obj.p; // no error, loop runs at least once\n}\n\nfunction def_assign_within_try(b: boolean, obj: Obj) {\n  obj.p = 10; // (obj.p : number)\n  try {\n    f(); // clears refi and might throw\n    obj.p = \"hey\";\n  } catch (e) {\n    f(); // clears refi and might throw\n    obj.p = \"hey\";\n  } finally {\n    // NOTE: the values understood to flow to obj.p at this point\n    // include the number 42 written downstream;\n    // so if we did y:string, we would get at least a spurious error\n    // (among other reasonable errors caused by values written upstream)\n    var y: number = obj.p; // error, string ~/~ number\n    obj.p = 42;\n  }\n  var z: string = obj.p; // error, number ~/~ string\n}\n\nfunction def_assign_within_for(b: boolean, obj: Obj) {\n  for (; b; ) {\n    obj.p = 10; // (obj.p : number)\n    var x: number = obj.p; // ok by def assign\n  }\n  var z: number = obj.p; // error, (number | string) ~/~ number\n}\n\n// --- name-sensitive havoc ---\n\ntype Obj2 = { q: number | string };\n\nfunction def_assign_setprop_nohavoc(obj: Obj, obj2: Obj2) {\n  obj.p = 10; // (obj.p : number)\n  obj2.q = \"hey\"; // doesn't clear refi of .p\n  var x: number = obj.p; // still ok\n}\n\n`;\n\nexports[`lib.js 1`] = `\n/* @flow */\n\ndeclare var BAZ: {stuff?: (x: number) => void} | void;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\ndeclare var BAZ: { stuff?: (x: number) => void } | void;\n\n`;\n\nexports[`missing-property-cond.js 1`] = `\n// @flow\n\nfunction foo1(o: { x: number }) {\n  if (o.p1) { // OK, this is an idiomatic way of testing property existence\n    o.x;\n  }\n}\n\nfunction foo2(o: { x: number }) {\n  if (o.p2) { // OK\n    o.p2.x; // error, since o.p2's type is unknown (e.g., could be \\`number\\`)\n  }\n}\n\nfunction foo3(o: { x: number }) {\n  o.p3.x; // usual error outside conditional\n}\n\nfunction foo4(o: $Exact<{ x: number }>) {\n  if (o.p4) { // OK\n    o.p4.x; // currently OK, should be unreachable\n  } else {\n    o.p4.x; // error\n  }\n}\n\nfunction foo5() {\n  const o = { };\n  _foo5();\n  if (o.p) { o.p(); }\n  function _foo5() {\n    o.p = function() { }\n  }\n}\n\nfunction foo6(o: mixed) {\n  if (o.bar) {} // error, any lookup on mixed is unsafe\n}\n\nfunction foo7(o: mixed) {\n  if (typeof o.bar === 'string') {} // error\n  if (o && typeof o.bar === 'string') {} // ok\n  if (o != null && typeof o.bar === 'string') {} // ok\n  if (o !== null && o !== undefined && typeof o.bar === 'string') {} // ok\n}\n\nfunction foo8(o: { p: mixed }) {\n  if (o.p && o.p.q) {} // this is ok because o.p is truthy, so o.p.q is safe\n  if (o.p && o.p.q && o.p.q.r) {}\n}\n\ntype Foo9Expected = {\n  foo: string,\n}\n\nfunction foo9() {\n  const actual = {};\n  if (actual.foo === undefined) {\n    actual.foo = 'foo';\n  }\n  (actual: Foo9Expected);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nfunction foo1(o: { x: number }) {\n  if (o.p1) {\n    // OK, this is an idiomatic way of testing property existence\n    o.x;\n  }\n}\n\nfunction foo2(o: { x: number }) {\n  if (o.p2) {\n    // OK\n    o.p2.x; // error, since o.p2's type is unknown (e.g., could be \\`number\\`)\n  }\n}\n\nfunction foo3(o: { x: number }) {\n  o.p3.x; // usual error outside conditional\n}\n\nfunction foo4(o: $Exact<{ x: number }>) {\n  if (o.p4) {\n    // OK\n    o.p4.x; // currently OK, should be unreachable\n  } else {\n    o.p4.x; // error\n  }\n}\n\nfunction foo5() {\n  const o = {};\n  _foo5();\n  if (o.p) {\n    o.p();\n  }\n  function _foo5() {\n    o.p = function() {};\n  }\n}\n\nfunction foo6(o: mixed) {\n  if (o.bar) {\n  } // error, any lookup on mixed is unsafe\n}\n\nfunction foo7(o: mixed) {\n  if (typeof o.bar === \"string\") {\n  } // error\n  if (o && typeof o.bar === \"string\") {\n  } // ok\n  if (o != null && typeof o.bar === \"string\") {\n  } // ok\n  if (o !== null && o !== undefined && typeof o.bar === \"string\") {\n  } // ok\n}\n\nfunction foo8(o: { p: mixed }) {\n  if (o.p && o.p.q) {\n  } // this is ok because o.p is truthy, so o.p.q is safe\n  if (o.p && o.p.q && o.p.q.r) {\n  }\n}\n\ntype Foo9Expected = {\n  foo: string\n};\n\nfunction foo9() {\n  const actual = {};\n  if (actual.foo === undefined) {\n    actual.foo = \"foo\";\n  }\n  (actual: Foo9Expected);\n}\n\n`;\n\nexports[`mixed.js 1`] = `\n/* @flow */\n\nfunction takesNumber(x: number) {}\nfunction takesString(x: string) {}\n\nfunction num(x: mixed) {\n  if (typeof x === \"number\") {\n    takesString(x); // error\n    (!x: false); // error: we don't know the truthiness of x\n  }\n  if (typeof x === \"number\" && x) {\n    (!x: false); // ok\n  }\n  if (x && typeof x === \"number\") {\n    (!x: false); // ok\n  }\n}\n\nfunction str(x: mixed) {\n  if (typeof x === \"string\") {\n    takesNumber(x); // error\n    (!x: false); // error: we don't know the truthiness of x\n  }\n  if (typeof x === \"string\" && x) {\n    (!x: false); // ok\n  }\n  if (x && typeof x === \"string\") {\n    (!x: false); // ok\n  }\n}\n\nfunction bool(x: mixed) {\n  if (typeof x === \"boolean\") {\n    takesString(x); // error\n    (x: true); // error: we don't know the truthiness of x\n  }\n  if (typeof x === \"boolean\" && x) {\n    (x: true); // ok\n  }\n  if (x && typeof x === \"boolean\") {\n    (x: true); // ok\n  }\n}\n\nfunction fun(x: mixed) {\n  if (typeof x === \"function\") {\n    takesString(x); // error\n  }\n}\n\nfunction obj0(x: mixed) {\n  if (typeof x === \"object\") {\n    takesString(x); // error\n  }\n}\n\nfunction obj1(x: mixed) {\n  if (Array.isArray(x)) {\n    takesString(x); // error\n  }\n}\n\nfunction undef(x: mixed) {\n  if (typeof x === \"undefined\") {\n    takesString(x); // error\n  }\n}\n\nfunction null_(x: mixed) {\n  if (x === null) {\n    takesString(x); // error\n  }\n}\n\nfunction maybe(x: mixed) {\n  if (x == null) {\n    takesString(x); // error\n  }\n}\n\nfunction true_(x: mixed) {\n  if (x === true) {\n    takesString(x); // error\n  }\n}\n\nfunction false_(x: mixed) {\n  if (x === false) {\n    takesString(x); // error\n  }\n}\n\nfunction obj2(x: mixed) {\n  if (typeof x === \"object\") {\n    (x: { [key: string]: mixed } | null);\n    if (x !== null) {\n      (x['foo']: string); // error, mixed\n    }\n  }\n}\n\nfunction obj2(x: mixed) {\n  if (typeof x === \"object\" && x) {\n    (x: Object);\n  }\n  if (x && typeof x === \"object\") {\n    (x: Object);\n  }\n  if (x != null && typeof x === \"object\") {\n    (x: Object);\n  }\n  if (x !== null && typeof x === \"object\") {\n    (x: Object);\n  }\n}\n\nfunction arr0(x: mixed) {\n  if (Array.isArray(x)) {\n    takesString(x[0]); // error\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction takesNumber(x: number) {}\nfunction takesString(x: string) {}\n\nfunction num(x: mixed) {\n  if (typeof x === \"number\") {\n    takesString(x); // error\n    (!x: false); // error: we don't know the truthiness of x\n  }\n  if (typeof x === \"number\" && x) {\n    (!x: false); // ok\n  }\n  if (x && typeof x === \"number\") {\n    (!x: false); // ok\n  }\n}\n\nfunction str(x: mixed) {\n  if (typeof x === \"string\") {\n    takesNumber(x); // error\n    (!x: false); // error: we don't know the truthiness of x\n  }\n  if (typeof x === \"string\" && x) {\n    (!x: false); // ok\n  }\n  if (x && typeof x === \"string\") {\n    (!x: false); // ok\n  }\n}\n\nfunction bool(x: mixed) {\n  if (typeof x === \"boolean\") {\n    takesString(x); // error\n    (x: true); // error: we don't know the truthiness of x\n  }\n  if (typeof x === \"boolean\" && x) {\n    (x: true); // ok\n  }\n  if (x && typeof x === \"boolean\") {\n    (x: true); // ok\n  }\n}\n\nfunction fun(x: mixed) {\n  if (typeof x === \"function\") {\n    takesString(x); // error\n  }\n}\n\nfunction obj0(x: mixed) {\n  if (typeof x === \"object\") {\n    takesString(x); // error\n  }\n}\n\nfunction obj1(x: mixed) {\n  if (Array.isArray(x)) {\n    takesString(x); // error\n  }\n}\n\nfunction undef(x: mixed) {\n  if (typeof x === \"undefined\") {\n    takesString(x); // error\n  }\n}\n\nfunction null_(x: mixed) {\n  if (x === null) {\n    takesString(x); // error\n  }\n}\n\nfunction maybe(x: mixed) {\n  if (x == null) {\n    takesString(x); // error\n  }\n}\n\nfunction true_(x: mixed) {\n  if (x === true) {\n    takesString(x); // error\n  }\n}\n\nfunction false_(x: mixed) {\n  if (x === false) {\n    takesString(x); // error\n  }\n}\n\nfunction obj2(x: mixed) {\n  if (typeof x === \"object\") {\n    (x: { [key: string]: mixed } | null);\n    if (x !== null) {\n      (x[\"foo\"]: string); // error, mixed\n    }\n  }\n}\n\nfunction obj2(x: mixed) {\n  if (typeof x === \"object\" && x) {\n    (x: Object);\n  }\n  if (x && typeof x === \"object\") {\n    (x: Object);\n  }\n  if (x != null && typeof x === \"object\") {\n    (x: Object);\n  }\n  if (x !== null && typeof x === \"object\") {\n    (x: Object);\n  }\n}\n\nfunction arr0(x: mixed) {\n  if (Array.isArray(x)) {\n    takesString(x[0]); // error\n  }\n}\n\n`;\n\nexports[`node1.js 1`] = `\nmodule.exports = 'Node1';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nmodule.exports = \"Node1\";\n\n`;\n\nexports[`not.js 1`] = `\n/* @flow */\n\nfunction foo(x: ?bool) {\n  if (!x) {\n    x++; // should error for null, void and bool (false)\n  }\n}\n\nfunction bar(x: ?number) {\n  if (!x) {\n    x[0]; // should error for null, void and number (0)\n  }\n}\n\nfunction baz (x: ?number) {\n  if (x === null || x === undefined) {\n    return;\n  }\n\n  if (!x) {\n    x[0]; // should error for number (0)\n  }\n}\n\nclass TestClass {}\n\nlet tests = [\n  function() {\n    var y = true;\n    while (y) {\n      y = !y;\n    }\n  },\n  function(x: Function) {\n    (!x: false); // ok, functions are always truthy\n  },\n  function(x: Object) {\n    (!x: false); // ok, objects are always truthy\n  },\n  function(x: string) {\n    (!x: false); // error, strings are not always truthy\n  },\n  function(x: number) {\n    (!x: false); // error, numbers are not always truthy\n  },\n  function(x: boolean) {\n    (!x: false); // error, bools are not always truthy\n  },\n  function(x: TestClass) {\n    (!x: false); // ok, classes are always truthy\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction foo(x: ?boolean) {\n  if (!x) {\n    x++; // should error for null, void and bool (false)\n  }\n}\n\nfunction bar(x: ?number) {\n  if (!x) {\n    x[0]; // should error for null, void and number (0)\n  }\n}\n\nfunction baz(x: ?number) {\n  if (x === null || x === undefined) {\n    return;\n  }\n\n  if (!x) {\n    x[0]; // should error for number (0)\n  }\n}\n\nclass TestClass {}\n\nlet tests = [\n  function() {\n    var y = true;\n    while (y) {\n      y = !y;\n    }\n  },\n  function(x: Function) {\n    (!x: false); // ok, functions are always truthy\n  },\n  function(x: Object) {\n    (!x: false); // ok, objects are always truthy\n  },\n  function(x: string) {\n    (!x: false); // error, strings are not always truthy\n  },\n  function(x: number) {\n    (!x: false); // error, numbers are not always truthy\n  },\n  function(x: boolean) {\n    (!x: false); // error, bools are not always truthy\n  },\n  function(x: TestClass) {\n    (!x: false); // ok, classes are always truthy\n  }\n];\n\n`;\n\nexports[`null.js 1`] = `\n/* @flow */\n\nfunction null_bogus_comparison() {\n  if (100 * null) {\n    return;\n  }\n  if (null * 100) {\n    return;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction null_bogus_comparison() {\n  if (100 * null) {\n    return;\n  }\n  if (null * 100) {\n    return;\n  }\n}\n\n`;\n\nexports[`number.js 1`] = `\n// @flow\n\ntype Mode = 0 | 1 | 2;\n\nlet tests = [\n  function(x: number) {\n    if (x === 0) {\n      (x: void); // error\n    }\n    (x: 0); // error\n  },\n\n  function(x: number) {\n    if (x !== 0) {\n      (x: 0); // error\n    }\n    (x: void); // error\n  },\n\n  function(x: 1): 0 {\n    if (x === 0) {\n      return x; // unreachable, no error\n    }\n    return 0;\n  },\n\n  function(x: 0): number {\n    if (x === 1) {\n      return x;\n    }\n    return x;\n  },\n\n  function(x: 0) {\n    if (x !== 1) {\n      (x: 0);\n    }\n    (x: 0);\n  },\n\n  function(x: 0): number {\n    if (x === 0) {\n      return x;\n    }\n    return x;\n  },\n\n  function(x: 0 | 1) {\n    if (x === 0) {\n      (x: 0);\n      (x: void); // error\n    }\n    if (x === 1) {\n      (x: 1);\n      (x: void); // error\n    }\n  },\n\n  function(x: { foo: number }): 0 {\n    if (x.foo === 0) {\n      return x.foo;\n    }\n    return x.foo; // error\n  },\n\n  function(\n    x: { kind: 0, foo: number } | { kind: 1, bar: number }\n  ): number {\n    if (x.kind === 0) {\n      return x.foo;\n    } else {\n      return x.bar;\n    }\n  },\n\n  function(num: number, obj: { foo: number }) {\n    if (num === obj.bar) { // ok, typos allowed in conditionals\n    }\n  },\n\n  function(num: number, obj: {[key: string]: number}) {\n    if (num === obj.bar) { // ok\n    }\n  },\n\n  function(n: number): Mode {\n    if (n !== 0 && n !== 1 && n !== 2) {\n      throw new Error(\"Wrong number passed\");\n    }\n    return n;\n  },\n\n  function(s: number): ?Mode {\n    if (s === 0) {\n      return s;\n    } else if (s === 3) {\n      return s; // error\n    }\n  },\n\n  function(mode: Mode) {\n    switch (mode) {\n      case 0:\n        (mode: 0);\n        break;\n\n      case 1:\n      case 2:\n        (mode: 1 | 2);\n        break;\n    }\n  },\n\n  function(x: number): 0 {\n    if (x) {\n      return x; // error\n    } else {\n      return x; // no error, inferred to be 0\n    }\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ntype Mode = 0 | 1 | 2;\n\nlet tests = [\n  function(x: number) {\n    if (x === 0) {\n      (x: void); // error\n    }\n    (x: 0); // error\n  },\n\n  function(x: number) {\n    if (x !== 0) {\n      (x: 0); // error\n    }\n    (x: void); // error\n  },\n\n  function(x: 1): 0 {\n    if (x === 0) {\n      return x; // unreachable, no error\n    }\n    return 0;\n  },\n\n  function(x: 0): number {\n    if (x === 1) {\n      return x;\n    }\n    return x;\n  },\n\n  function(x: 0) {\n    if (x !== 1) {\n      (x: 0);\n    }\n    (x: 0);\n  },\n\n  function(x: 0): number {\n    if (x === 0) {\n      return x;\n    }\n    return x;\n  },\n\n  function(x: 0 | 1) {\n    if (x === 0) {\n      (x: 0);\n      (x: void); // error\n    }\n    if (x === 1) {\n      (x: 1);\n      (x: void); // error\n    }\n  },\n\n  function(x: { foo: number }): 0 {\n    if (x.foo === 0) {\n      return x.foo;\n    }\n    return x.foo; // error\n  },\n\n  function(x: { kind: 0, foo: number } | { kind: 1, bar: number }): number {\n    if (x.kind === 0) {\n      return x.foo;\n    } else {\n      return x.bar;\n    }\n  },\n\n  function(num: number, obj: { foo: number }) {\n    if (num === obj.bar) {\n      // ok, typos allowed in conditionals\n    }\n  },\n\n  function(num: number, obj: { [key: string]: number }) {\n    if (num === obj.bar) {\n      // ok\n    }\n  },\n\n  function(n: number): Mode {\n    if (n !== 0 && n !== 1 && n !== 2) {\n      throw new Error(\"Wrong number passed\");\n    }\n    return n;\n  },\n\n  function(s: number): ?Mode {\n    if (s === 0) {\n      return s;\n    } else if (s === 3) {\n      return s; // error\n    }\n  },\n\n  function(mode: Mode) {\n    switch (mode) {\n      case 0:\n        (mode: 0);\n        break;\n\n      case 1:\n      case 2:\n        (mode: 1 | 2);\n        break;\n    }\n  },\n\n  function(x: number): 0 {\n    if (x) {\n      return x; // error\n    } else {\n      return x; // no error, inferred to be 0\n    }\n  }\n];\n\n`;\n\nexports[`property.js 1`] = `\n/* @flow */\n\nfunction a(x: {[key: string]: ?string}, y: string): string {\n  if (x[y]) {\n    return x[y];\n  }\n  return \"\";\n}\n\nfunction b(x: {y: {[key: string]: ?string}}, z: string): string {\n  if (x.y[z]) {\n    return x.y[z];\n  }\n  return \"\";\n}\n\nfunction c(x: {[key: string]: ?string}, y: {z: string}): string {\n  if (x[y.z]) {\n    return x[y.z];\n  }\n  return \"\";\n}\n\nfunction d(x: {y: {[key: string]: ?string}}, a: {b: string}): string {\n  if (x.y[a.b]) {\n    return x.y[a.b];\n  }\n  return \"\";\n}\n\nfunction a_array(x: Array<?string>, y: number): string {\n  if (x[y]) {\n    return x[y];\n  }\n  return \"\";\n}\n\nfunction b_array(x: {y: Array<?string>}, z: number): string {\n  if (x.y[z]) {\n    return x.y[z];\n  }\n  return \"\";\n}\n\nfunction c_array(x: Array<?string>, y: {z: number}): string {\n  if (x[y.z]) {\n    return x[y.z];\n  }\n  return \"\";\n}\n\nfunction d_array(x: {y: Array<?string>}, a: {b: number}): string {\n  if (x.y[a.b]) {\n    return x.y[a.b];\n  }\n  return \"\";\n}\n\nfunction e_array(x: Array<?string>): string {\n  if (x[0]) {\n    return x[0];\n  }\n  return \"\";\n}\n\n// --- name-sensitive havoc ---\n\nfunction c2(x: {[key: string]: ?string}, y: {z: string}): string {\n  if (x[y.z]) {\n    y.z = \"HEY\";\n    return x[y.z];  // error\n  }\n  return \"\";\n}\n\nfunction c3(x: {[key: string]: ?string}, y: {z: string, a: string}): string {\n  if (x[y.z]) {\n    y.a = \"HEY\";\n    return x[y.z];  // ok\n  }\n  return \"\";\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction a(x: { [key: string]: ?string }, y: string): string {\n  if (x[y]) {\n    return x[y];\n  }\n  return \"\";\n}\n\nfunction b(x: { y: { [key: string]: ?string } }, z: string): string {\n  if (x.y[z]) {\n    return x.y[z];\n  }\n  return \"\";\n}\n\nfunction c(x: { [key: string]: ?string }, y: { z: string }): string {\n  if (x[y.z]) {\n    return x[y.z];\n  }\n  return \"\";\n}\n\nfunction d(x: { y: { [key: string]: ?string } }, a: { b: string }): string {\n  if (x.y[a.b]) {\n    return x.y[a.b];\n  }\n  return \"\";\n}\n\nfunction a_array(x: Array<?string>, y: number): string {\n  if (x[y]) {\n    return x[y];\n  }\n  return \"\";\n}\n\nfunction b_array(x: { y: Array<?string> }, z: number): string {\n  if (x.y[z]) {\n    return x.y[z];\n  }\n  return \"\";\n}\n\nfunction c_array(x: Array<?string>, y: { z: number }): string {\n  if (x[y.z]) {\n    return x[y.z];\n  }\n  return \"\";\n}\n\nfunction d_array(x: { y: Array<?string> }, a: { b: number }): string {\n  if (x.y[a.b]) {\n    return x.y[a.b];\n  }\n  return \"\";\n}\n\nfunction e_array(x: Array<?string>): string {\n  if (x[0]) {\n    return x[0];\n  }\n  return \"\";\n}\n\n// --- name-sensitive havoc ---\n\nfunction c2(x: { [key: string]: ?string }, y: { z: string }): string {\n  if (x[y.z]) {\n    y.z = \"HEY\";\n    return x[y.z]; // error\n  }\n  return \"\";\n}\n\nfunction c3(\n  x: { [key: string]: ?string },\n  y: { z: string, a: string }\n): string {\n  if (x[y.z]) {\n    y.a = \"HEY\";\n    return x[y.z]; // ok\n  }\n  return \"\";\n}\n\n`;\n\nexports[`refinements.js 1`] = `\nfunction foo(b) {\n    var x = b? 0 : null;\n    while (typeof x == \"string\" || typeof x == \"number\") {\n        var y:string = x;\n        x = false;\n    }\n    var z:string = x;\n}\n\nfunction bar(b) {\n    var x = b? 0 : null;\n    do {\n        var y:string = x;\n        x = false;\n    } while (x === null);\n    var z:string = x;\n}\n\nfunction maybe_throw() { }\nfunction qux() {\n    var x = 0;\n    try {\n        maybe_throw();\n        x = \"hello\";\n    } catch (e) {\n        maybe_throw();\n        x = \"hello\";\n    } finally {\n        // NOTE: the values understood to flow to x at this point\n        // include the number 42 written downstream;\n        // so if we did y:string, we would get at least a spurious error\n        // (among other reasonable errors caused by values written upstream)\n        var y:number = x;\n        x = 42;\n    }\n    var z:string = x;\n}\n\nfunction corge(b) {\n    for (var x = b? 0 : null;\n         typeof x == \"string\" || typeof x == \"number\";\n         x = false) {\n        var y:string = x;\n    }\n    var z:string = x;\n}\n\nfunction waldo() {\n    var o = {};\n    var x = false;\n    for (x in o) {\n        x = 0; // commenting this out would propagate x:string downstream\n    }\n    var z:number = x;\n}\n\n// regression test: bring a global into scope by testing it.\n// this has no refinement consequences and is error-free.\n// the way we currently cache global lookups causes uneven\n// distribution of the global's entries at path merge time,\n// so we need to recognize that it's legit rather than an\n// internal error.\n//\nfunction global_in_conditional0(x: number) {\n    // merge_env\n    if (x != 0) {\n        if (BAZ) {\n        }\n    }\n}\n\nfunction global_in_conditional2(x: number) {\n    // copy_env\n    for (var i = 0; i < 100; i++) {\n        if (BAZ) {\n        }\n    }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo(b) {\n  var x = b ? 0 : null;\n  while (typeof x == \"string\" || typeof x == \"number\") {\n    var y: string = x;\n    x = false;\n  }\n  var z: string = x;\n}\n\nfunction bar(b) {\n  var x = b ? 0 : null;\n  do {\n    var y: string = x;\n    x = false;\n  } while (x === null);\n  var z: string = x;\n}\n\nfunction maybe_throw() {}\nfunction qux() {\n  var x = 0;\n  try {\n    maybe_throw();\n    x = \"hello\";\n  } catch (e) {\n    maybe_throw();\n    x = \"hello\";\n  } finally {\n    // NOTE: the values understood to flow to x at this point\n    // include the number 42 written downstream;\n    // so if we did y:string, we would get at least a spurious error\n    // (among other reasonable errors caused by values written upstream)\n    var y: number = x;\n    x = 42;\n  }\n  var z: string = x;\n}\n\nfunction corge(b) {\n  for (\n    var x = b ? 0 : null;\n    typeof x == \"string\" || typeof x == \"number\";\n    x = false\n  ) {\n    var y: string = x;\n  }\n  var z: string = x;\n}\n\nfunction waldo() {\n  var o = {};\n  var x = false;\n  for (x in o) {\n    x = 0; // commenting this out would propagate x:string downstream\n  }\n  var z: number = x;\n}\n\n// regression test: bring a global into scope by testing it.\n// this has no refinement consequences and is error-free.\n// the way we currently cache global lookups causes uneven\n// distribution of the global's entries at path merge time,\n// so we need to recognize that it's legit rather than an\n// internal error.\n//\nfunction global_in_conditional0(x: number) {\n  // merge_env\n  if (x != 0) {\n    if (BAZ) {\n    }\n  }\n}\n\nfunction global_in_conditional2(x: number) {\n  // copy_env\n  for (var i = 0; i < 100; i++) {\n    if (BAZ) {\n    }\n  }\n}\n\n`;\n\nexports[`string.js 1`] = `\n// @flow\n\ntype Mode = \"a\" | \"b\" | \"c\";\n\nlet tests = [\n  function(x: string) {\n    if (x === 'foo') {\n      (x: void); // error\n    }\n    (x: 'foo'); // error\n  },\n\n  function(x: string) {\n    if (x !== 'foo') {\n      (x: 'foo'); // error\n    }\n    (x: void); // error\n  },\n\n  function(x: 'bar'): 'foo' {\n    if (x === 'foo') {\n      return x; // unreachable, no error\n    }\n    return 'foo';\n  },\n\n  function(x: 'foo'): string {\n    if (x === 'bar') {\n      return x;\n    }\n    return x;\n  },\n\n  function(x: 'foo') {\n    if (x !== 'bar') {\n      (x: 'foo');\n    }\n    (x: 'foo');\n  },\n\n  function(x: 'foo'): string {\n    if (x === 'foo') {\n      return x;\n    }\n    return x;\n  },\n\n  function(x: 'foo' | 'bar') {\n    if (x === 'foo') {\n      (x: 'foo');\n      (x: void); // error\n    }\n    if (x === 'bar') {\n      (x: 'bar');\n      (x: void); // error\n    }\n  },\n\n  function(x: { foo: string }): 'foo' {\n    if (x.foo === 'foo') {\n      return x.foo;\n    }\n    return x.foo; // error\n  },\n\n  function(\n    x: { kind: 'foo', foo: string } | { kind: 'bar', bar: string }\n  ): string {\n    if (x.kind === 'foo') {\n      return x.foo;\n    } else {\n      return x.bar;\n    }\n  },\n\n  function(str: string, obj: { foo: string }) {\n    if (str === obj.bar) { // ok, typos allowed in conditionals\n    }\n  },\n\n  function(str: string, obj: {[key: string]: string}) {\n    if (str === obj.bar) { // ok\n    }\n  },\n\n  function(str: string): Mode {\n    var ch = str[0];\n    if (ch !== \"a\" && ch !== \"b\" && ch !== \"c\") {\n      throw new Error(\"Wrong string passed\");\n    }\n    return ch;\n  },\n\n  function(s: string): ?Mode {\n    if (s === \"a\") {\n      return s;\n    } else if (s === \"d\") {\n      return s; // error\n    }\n  },\n\n  function(mode: Mode) {\n    switch (mode) {\n      case \"a\":\n        (mode: \"a\");\n        break;\n\n      case \"b\":\n      case \"c\":\n        (mode: \"b\" | \"c\");\n        break;\n    }\n  },\n\n  function(x: string): \"\" {\n    if (x) {\n      return x; // error\n    } else {\n      return x; // no error, inferred to be \"\"\n    }\n  },\n\n  // Simple template literals are ok\n  function(x: string): 'foo' {\n    if (x === \\`foo\\`) {\n      return x;\n    }\n    if (\\`foo\\` === x) {\n      return x;\n    }\n    return 'foo';\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ntype Mode = \"a\" | \"b\" | \"c\";\n\nlet tests = [\n  function(x: string) {\n    if (x === \"foo\") {\n      (x: void); // error\n    }\n    (x: \"foo\"); // error\n  },\n\n  function(x: string) {\n    if (x !== \"foo\") {\n      (x: \"foo\"); // error\n    }\n    (x: void); // error\n  },\n\n  function(x: \"bar\"): \"foo\" {\n    if (x === \"foo\") {\n      return x; // unreachable, no error\n    }\n    return \"foo\";\n  },\n\n  function(x: \"foo\"): string {\n    if (x === \"bar\") {\n      return x;\n    }\n    return x;\n  },\n\n  function(x: \"foo\") {\n    if (x !== \"bar\") {\n      (x: \"foo\");\n    }\n    (x: \"foo\");\n  },\n\n  function(x: \"foo\"): string {\n    if (x === \"foo\") {\n      return x;\n    }\n    return x;\n  },\n\n  function(x: \"foo\" | \"bar\") {\n    if (x === \"foo\") {\n      (x: \"foo\");\n      (x: void); // error\n    }\n    if (x === \"bar\") {\n      (x: \"bar\");\n      (x: void); // error\n    }\n  },\n\n  function(x: { foo: string }): \"foo\" {\n    if (x.foo === \"foo\") {\n      return x.foo;\n    }\n    return x.foo; // error\n  },\n\n  function(\n    x: { kind: \"foo\", foo: string } | { kind: \"bar\", bar: string }\n  ): string {\n    if (x.kind === \"foo\") {\n      return x.foo;\n    } else {\n      return x.bar;\n    }\n  },\n\n  function(str: string, obj: { foo: string }) {\n    if (str === obj.bar) {\n      // ok, typos allowed in conditionals\n    }\n  },\n\n  function(str: string, obj: { [key: string]: string }) {\n    if (str === obj.bar) {\n      // ok\n    }\n  },\n\n  function(str: string): Mode {\n    var ch = str[0];\n    if (ch !== \"a\" && ch !== \"b\" && ch !== \"c\") {\n      throw new Error(\"Wrong string passed\");\n    }\n    return ch;\n  },\n\n  function(s: string): ?Mode {\n    if (s === \"a\") {\n      return s;\n    } else if (s === \"d\") {\n      return s; // error\n    }\n  },\n\n  function(mode: Mode) {\n    switch (mode) {\n      case \"a\":\n        (mode: \"a\");\n        break;\n\n      case \"b\":\n      case \"c\":\n        (mode: \"b\" | \"c\");\n        break;\n    }\n  },\n\n  function(x: string): \"\" {\n    if (x) {\n      return x; // error\n    } else {\n      return x; // no error, inferred to be \"\"\n    }\n  },\n\n  // Simple template literals are ok\n  function(x: string): \"foo\" {\n    if (x === \\`foo\\`) {\n      return x;\n    }\n    if (\\`foo\\` === x) {\n      return x;\n    }\n    return \"foo\";\n  }\n];\n\n`;\n\nexports[`super_member.js 1`] = `\n/* @flow */\n\nclass A {\n  prop: string;\n  method(): string {\n    return \"A\";\n  }\n}\n\nclass B {\n  test(): string {\n    if (super.prop) { // super.prop doesn't exist\n      return super.prop; // error, unknown type passed to string expected\n    }\n    return \"B\";\n  }\n}\n\nclass C extends A {\n  test(): string {\n    if (super.prop) {\n      return super.prop; // OK\n    }\n    return \"C\";\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nclass A {\n  prop: string;\n  method(): string {\n    return \"A\";\n  }\n}\n\nclass B {\n  test(): string {\n    if (super.prop) {\n      // super.prop doesn't exist\n      return super.prop; // error, unknown type passed to string expected\n    }\n    return \"B\";\n  }\n}\n\nclass C extends A {\n  test(): string {\n    if (super.prop) {\n      return super.prop; // OK\n    }\n    return \"C\";\n  }\n}\n\n`;\n\nexports[`switch.js 1`] = `\n/* @flow */\n\nfunction foo(text: string | number): string {\n  switch (typeof text) {\n　　case 'string':\n　　　return text;\n    case 'number':\n      return text; // error, should return string\n　　default:\n　　　return 'wat';\n　}\n}\n\nfunction bar(text: string | number): string {\n  switch (typeof text) {\n    case 'string':\n      return text[0];\n  　default:\n      return (text++) + '';\n　}\n}\n\nfunction baz1(text: string | number): string {\n  switch (typeof text) {\n    case 'number':\n    case 'string':\n      return text[0]; // error, [0] on number\n  　default:\n      return 'wat';\n　}\n}\n\nfunction baz2(text: string | number): string {\n  switch (typeof text) {\n    case 'string':\n    case 'number':\n      return text[0]; // error, [0] on number\n  　default:\n      return 'wat';\n　}\n}\n\nfunction corge(text: string | number | Array<string>): string {\n  switch (typeof text) {\n    case 'object':\n      return text[0];\n    case 'string':\n    case 'number':\n      // using ++ since it isn't valid on arrays or strings.\n      // should only error for string since Array was filtered out.\n      return (text++) + '';\n  　default:\n      return 'wat';\n　}\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction foo(text: string | number): string {\n  switch (typeof text) {\n    case \"string\":\n      return text;\n    case \"number\":\n      return text; // error, should return string\n    default:\n      return \"wat\";\n  }\n}\n\nfunction bar(text: string | number): string {\n  switch (typeof text) {\n    case \"string\":\n      return text[0];\n    default:\n      return text++ + \"\";\n  }\n}\n\nfunction baz1(text: string | number): string {\n  switch (typeof text) {\n    case \"number\":\n    case \"string\":\n      return text[0]; // error, [0] on number\n    default:\n      return \"wat\";\n  }\n}\n\nfunction baz2(text: string | number): string {\n  switch (typeof text) {\n    case \"string\":\n    case \"number\":\n      return text[0]; // error, [0] on number\n    default:\n      return \"wat\";\n  }\n}\n\nfunction corge(text: string | number | Array<string>): string {\n  switch (typeof text) {\n    case \"object\":\n      return text[0];\n    case \"string\":\n    case \"number\":\n      // using ++ since it isn't valid on arrays or strings.\n      // should only error for string since Array was filtered out.\n      return text++ + \"\";\n    default:\n      return \"wat\";\n  }\n}\n\n`;\n\nexports[`tagged_union.js 1`] = `\n// example 1\n\ntype Type = Name | ListType;\ntype Name = {kind: 'Name', value: string};\ntype ListType = {kind: 'ListType', name: string};\n\nfunction getTypeASTName(typeAST: Type): string {\n  if (typeAST.kind === 'Name') {\n    return typeAST.value; // OK, since typeAST: Name\n  } else {\n    return typeAST.name; // OK, since typeAST: ListType\n  }\n}\n\n// example 2\nimport type {ASTNode} from './ast_node';\nvar Node = require('./node1'); // Node = \"Node1\"\nfunction foo(x: ASTNode) {\n  if (x.kind === Node) {\n    return x.prop1.charAt(0); // typeAST: Node1, but x.prop1 may be undefined\n  }\n  return null;\n}\n\n// example 3\ntype Apple = { kind: 'Fruit', taste: 'Bad' }\ntype Orange = { kind: 'Fruit', taste: 'Good' }\ntype Broccoli = { kind: 'Veg', taste: 'Bad', raw: 'No' }\ntype Carrot = { kind: 'Veg', taste: 'Good', raw: 'Maybe' }\n\ntype Breakfast = Apple | Orange | Broccoli | Carrot\n\nfunction bar(x: Breakfast) {\n  if (x.kind === 'Fruit') { (x.taste: 'Good'); } // error, Apple.taste = Bad\n  else (x.raw: 'No'); // error, Carrot.raw = Maybe\n}\n\nfunction qux(x: Breakfast) {\n  if (x.taste === 'Good') {\n    (x.raw: 'Yes' | 'No'); // 2 errors:\n                           // Orange.raw doesn't exist\n                           // Carrot.raw is neither Yes nor No\n  }\n}\n\n// example 4\nfunction list(n) {\n  if (n > 0) return { kind: \"cons\", next: list(n-1) };\n  return { kind: \"nil\" };\n}\nfunction length(l) {\n  switch (l.kind) {\n  case \"cons\": return 1 + length(l.next);\n  default: return 0;\n  }\n}\nfunction check(n) {\n  if (n >= 0) return (n === (length(list(n))));\n  return true;\n}\n\n\n// example 5\nvar EnumKind = { A: 1, B: 2, C: 3};\ntype A = { kind: 1, A: number };\ntype B = { kind: 2, B: number };\ntype C = { kind: 3, C: number };\nfunction kind(x: A | B | C): number {\n  switch (x.kind) {\n  case EnumKind.A: return x.A;\n  case EnumKind.B: return x.B;\n  default: return x.A; // error, x: C and property A not found in type C\n  }\n}\nkind({ kind: EnumKind.A, A: 1 });\n\n// example 6\ntype Citizen = { citizen: true };\ntype NonCitizen = { citizen: false, nationality: string }\nfunction nationality(x: Citizen | NonCitizen) {\n  if (x.citizen) return \"Shire\"\n  else return x.nationality;\n}\n\nlet tests = [\n  // non-existent props\n  function test7(x: A) {\n    if (x.kindTypo === 1) { // typos are allowed to be tested\n      (x.kindTypo: string); // typos can't be used, though\n    }\n  },\n\n  // nested objects\n  function test8(x: {foo: {bar: 1}}) {\n    if (x.foo.bar === 1) {}\n    if (x.fooTypo.bar === 1) {} // error, fooTypo doesn't exist\n  },\n\n  // invalid RHS\n  function(x: A) {\n    if (x.kind === (null).toString()) {} // error, method on null\n    if ({kind: 1}.kind === (null).toString()) {} // error, method on null\n  },\n\n  // non-objects on LHS\n  function(\n    x: Array<string>, y: string, z: number, q: boolean,\n    r: Object, s: Function, t: () => void\n  ) {\n    if (x.length === 0) {}\n    if (x.legnth === 0) { // typos are allowed to be tested\n      (x.legnth: number); // inside the block, it's a number\n      (x.legnth: string); // error: number literal 0 !~> string\n    }\n    if (y.length === 0) {}\n    if (y.legnth === 0) { // typos are allowed to be tested\n      (y.legnth: number); // inside the block, it's a number\n      (y.legnth: string); // error: number literal 0 !~> string\n    }\n    if (z.toString === 0) {}\n    if (z.toStirng === 0) { // typos are allowed to be tested\n      (z.toStirng: number); // inside the block, it's a number\n      (z.toStirng: string); // error: number literal 0 !~> string\n    }\n    if (q.valueOf === 0) {}\n    if (q.valeuOf === 0) { // typos are allowed to be tested\n      (q.valeuOf: number); // inside the block, it's a number\n      (q.valeuOf: string); // error: number literal 0 !~> string\n    }\n    if (r.toStirng === 0) { // typos are allowed to be tested\n      (r.toStirng: empty); // props on AnyObjT are \\`any\\`\n    }\n    if (s.call === 0) {}\n    if (s.calll === 0) { // typos are allowed to be tested\n      (t.calll: empty); // ok, props on functions are \\`any\\` :/\n    }\n    if (t.call === 0) {}\n    if (t.calll === 0) { // typos are allowed to be tested\n      (t.calll: empty); // ok, props on functions are \\`any\\` :/\n    }\n  },\n\n  // sentinel props become the RHS\n  function(x: { str: string, num: number, bool: boolean }) {\n    if (x.str === 'str') {\n      (x.str: 'not str'); // error: 'str' !~> 'not str'\n    }\n    if (x.num === 123) {\n      (x.num: 456); // error: 123 !~> 456\n    }\n    if (x.bool === true) {\n      (x.bool: false); // error: true !~> false\n    }\n    // even if it doesn't exist...\n    if (x.badStr === 'bad') {\n      (x.badStr: empty); // error: 'bad' !~> empty\n    }\n    if (x.badNum === 123) {\n      (x.badNum: empty); // error: 123 !~> empty\n    }\n    if (x.badBool === true) {\n      (x.badBool: empty); // error: true !~> empty\n    }\n  },\n\n  // type mismatch\n  function(x: { foo: 123, y: string } | { foo: 'foo', z: string }) {\n    if (x.foo === 123) {\n      (x.y: string);\n      x.z; // error\n    } else {\n      (x.z: string);\n      x.y; // error\n    }\n    if (x.foo === 'foo') {\n      (x.z: string);\n      x.y; // error\n    } else {\n      (x.y: string);\n      x.z; // error\n    }\n  },\n\n  // type mismatch, but one is not a literal\n  function(x: { foo: number, y: string } | { foo: 'foo', z: string }) {\n    if (x.foo === 123) {\n      (x.y: string); // ok, because 123 !== 'foo'\n      x.z; // error\n    } else {\n      x.y; // error: x.foo could be a string\n      x.z; // error: could still be either case (if foo was a different number)\n    }\n\n    if (x.foo === 'foo') {\n      (x.z: string);\n      x.y; // error\n    } else {\n      (x.y: string);\n      x.z; // error\n    }\n  },\n\n  // type mismatch, neither is a literal\n  function(x: { foo: number, y: string } | { foo: string, z: string }) {\n    if (x.foo === 123) {\n      (x.y: string); // ok, because 123 !== string\n      x.z; // error\n    } else {\n      x.y; // error: x.foo could be a string\n      x.z; // error: could still be either case (if foo was a different number)\n    }\n\n    if (x.foo === 'foo') {\n      (x.z: string);\n      x.y; // error\n    } else {\n      x.y; // error: x.foo could be a different string\n      x.z; // error: x.foo could be a number\n    }\n  },\n\n  // type mismatch, neither is a literal, test is not a literal either\n  function(\n    x: { foo: number, y: string } | { foo: string, z: string },\n    num: number\n  ) {\n    if (x.foo === num) {\n      x.y; // error: flow isn't smart enough to figure this out yet\n      x.z; // error\n    }\n  },\n\n  // null\n  function(x: { foo: null, y: string } | { foo: 'foo', z: string }) {\n    if (x.foo === null) {\n      (x.y: string);\n      x.z; // error\n    } else {\n      (x.z: string);\n      x.y; // error\n    }\n    if (x.foo === 'foo') {\n      (x.z: string);\n      x.y; // error\n    } else {\n      (x.y: string);\n      x.z; // error\n    }\n  },\n\n  // void\n  function(x: { foo: void, y: string } | { foo: 'foo', z: string }) {\n    if (x.foo === undefined) {\n      (x.y: string);\n      x.z; // error\n    } else {\n      (x.z: string);\n      x.y; // error\n    }\n    if (x.foo === 'foo') {\n      (x.z: string);\n      x.y; // error\n    } else {\n      (x.y: string);\n      x.z; // error\n    }\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// example 1\n\ntype Type = Name | ListType;\ntype Name = { kind: \"Name\", value: string };\ntype ListType = { kind: \"ListType\", name: string };\n\nfunction getTypeASTName(typeAST: Type): string {\n  if (typeAST.kind === \"Name\") {\n    return typeAST.value; // OK, since typeAST: Name\n  } else {\n    return typeAST.name; // OK, since typeAST: ListType\n  }\n}\n\n// example 2\nimport type { ASTNode } from \"./ast_node\";\nvar Node = require(\"./node1\"); // Node = \"Node1\"\nfunction foo(x: ASTNode) {\n  if (x.kind === Node) {\n    return x.prop1.charAt(0); // typeAST: Node1, but x.prop1 may be undefined\n  }\n  return null;\n}\n\n// example 3\ntype Apple = { kind: \"Fruit\", taste: \"Bad\" };\ntype Orange = { kind: \"Fruit\", taste: \"Good\" };\ntype Broccoli = { kind: \"Veg\", taste: \"Bad\", raw: \"No\" };\ntype Carrot = { kind: \"Veg\", taste: \"Good\", raw: \"Maybe\" };\n\ntype Breakfast = Apple | Orange | Broccoli | Carrot;\n\nfunction bar(x: Breakfast) {\n  if (x.kind === \"Fruit\") {\n    (x.taste: \"Good\");\n  } else (x.raw: \"No\"); // error, Apple.taste = Bad // error, Carrot.raw = Maybe\n}\n\nfunction qux(x: Breakfast) {\n  if (x.taste === \"Good\") {\n    (x.raw: \"Yes\" | \"No\"); // 2 errors:\n    // Orange.raw doesn't exist\n    // Carrot.raw is neither Yes nor No\n  }\n}\n\n// example 4\nfunction list(n) {\n  if (n > 0) return { kind: \"cons\", next: list(n - 1) };\n  return { kind: \"nil\" };\n}\nfunction length(l) {\n  switch (l.kind) {\n    case \"cons\":\n      return 1 + length(l.next);\n    default:\n      return 0;\n  }\n}\nfunction check(n) {\n  if (n >= 0) return n === length(list(n));\n  return true;\n}\n\n// example 5\nvar EnumKind = { A: 1, B: 2, C: 3 };\ntype A = { kind: 1, A: number };\ntype B = { kind: 2, B: number };\ntype C = { kind: 3, C: number };\nfunction kind(x: A | B | C): number {\n  switch (x.kind) {\n    case EnumKind.A:\n      return x.A;\n    case EnumKind.B:\n      return x.B;\n    default:\n      return x.A; // error, x: C and property A not found in type C\n  }\n}\nkind({ kind: EnumKind.A, A: 1 });\n\n// example 6\ntype Citizen = { citizen: true };\ntype NonCitizen = { citizen: false, nationality: string };\nfunction nationality(x: Citizen | NonCitizen) {\n  if (x.citizen) return \"Shire\";\n  else return x.nationality;\n}\n\nlet tests = [\n  // non-existent props\n  function test7(x: A) {\n    if (x.kindTypo === 1) {\n      // typos are allowed to be tested\n      (x.kindTypo: string); // typos can't be used, though\n    }\n  },\n\n  // nested objects\n  function test8(x: { foo: { bar: 1 } }) {\n    if (x.foo.bar === 1) {\n    }\n    if (x.fooTypo.bar === 1) {\n    } // error, fooTypo doesn't exist\n  },\n\n  // invalid RHS\n  function(x: A) {\n    if (x.kind === null.toString()) {\n    } // error, method on null\n    if ({ kind: 1 }.kind === null.toString()) {\n    } // error, method on null\n  },\n\n  // non-objects on LHS\n  function(\n    x: Array<string>,\n    y: string,\n    z: number,\n    q: boolean,\n    r: Object,\n    s: Function,\n    t: () => void\n  ) {\n    if (x.length === 0) {\n    }\n    if (x.legnth === 0) {\n      // typos are allowed to be tested\n      (x.legnth: number); // inside the block, it's a number\n      (x.legnth: string); // error: number literal 0 !~> string\n    }\n    if (y.length === 0) {\n    }\n    if (y.legnth === 0) {\n      // typos are allowed to be tested\n      (y.legnth: number); // inside the block, it's a number\n      (y.legnth: string); // error: number literal 0 !~> string\n    }\n    if (z.toString === 0) {\n    }\n    if (z.toStirng === 0) {\n      // typos are allowed to be tested\n      (z.toStirng: number); // inside the block, it's a number\n      (z.toStirng: string); // error: number literal 0 !~> string\n    }\n    if (q.valueOf === 0) {\n    }\n    if (q.valeuOf === 0) {\n      // typos are allowed to be tested\n      (q.valeuOf: number); // inside the block, it's a number\n      (q.valeuOf: string); // error: number literal 0 !~> string\n    }\n    if (r.toStirng === 0) {\n      // typos are allowed to be tested\n      (r.toStirng: empty); // props on AnyObjT are \\`any\\`\n    }\n    if (s.call === 0) {\n    }\n    if (s.calll === 0) {\n      // typos are allowed to be tested\n      (t.calll: empty); // ok, props on functions are \\`any\\` :/\n    }\n    if (t.call === 0) {\n    }\n    if (t.calll === 0) {\n      // typos are allowed to be tested\n      (t.calll: empty); // ok, props on functions are \\`any\\` :/\n    }\n  },\n\n  // sentinel props become the RHS\n  function(x: { str: string, num: number, bool: boolean }) {\n    if (x.str === \"str\") {\n      (x.str: \"not str\"); // error: 'str' !~> 'not str'\n    }\n    if (x.num === 123) {\n      (x.num: 456); // error: 123 !~> 456\n    }\n    if (x.bool === true) {\n      (x.bool: false); // error: true !~> false\n    }\n    // even if it doesn't exist...\n    if (x.badStr === \"bad\") {\n      (x.badStr: empty); // error: 'bad' !~> empty\n    }\n    if (x.badNum === 123) {\n      (x.badNum: empty); // error: 123 !~> empty\n    }\n    if (x.badBool === true) {\n      (x.badBool: empty); // error: true !~> empty\n    }\n  },\n\n  // type mismatch\n  function(x: { foo: 123, y: string } | { foo: \"foo\", z: string }) {\n    if (x.foo === 123) {\n      (x.y: string);\n      x.z; // error\n    } else {\n      (x.z: string);\n      x.y; // error\n    }\n    if (x.foo === \"foo\") {\n      (x.z: string);\n      x.y; // error\n    } else {\n      (x.y: string);\n      x.z; // error\n    }\n  },\n\n  // type mismatch, but one is not a literal\n  function(x: { foo: number, y: string } | { foo: \"foo\", z: string }) {\n    if (x.foo === 123) {\n      (x.y: string); // ok, because 123 !== 'foo'\n      x.z; // error\n    } else {\n      x.y; // error: x.foo could be a string\n      x.z; // error: could still be either case (if foo was a different number)\n    }\n\n    if (x.foo === \"foo\") {\n      (x.z: string);\n      x.y; // error\n    } else {\n      (x.y: string);\n      x.z; // error\n    }\n  },\n\n  // type mismatch, neither is a literal\n  function(x: { foo: number, y: string } | { foo: string, z: string }) {\n    if (x.foo === 123) {\n      (x.y: string); // ok, because 123 !== string\n      x.z; // error\n    } else {\n      x.y; // error: x.foo could be a string\n      x.z; // error: could still be either case (if foo was a different number)\n    }\n\n    if (x.foo === \"foo\") {\n      (x.z: string);\n      x.y; // error\n    } else {\n      x.y; // error: x.foo could be a different string\n      x.z; // error: x.foo could be a number\n    }\n  },\n\n  // type mismatch, neither is a literal, test is not a literal either\n  function(\n    x: { foo: number, y: string } | { foo: string, z: string },\n    num: number\n  ) {\n    if (x.foo === num) {\n      x.y; // error: flow isn't smart enough to figure this out yet\n      x.z; // error\n    }\n  },\n\n  // null\n  function(x: { foo: null, y: string } | { foo: \"foo\", z: string }) {\n    if (x.foo === null) {\n      (x.y: string);\n      x.z; // error\n    } else {\n      (x.z: string);\n      x.y; // error\n    }\n    if (x.foo === \"foo\") {\n      (x.z: string);\n      x.y; // error\n    } else {\n      (x.y: string);\n      x.z; // error\n    }\n  },\n\n  // void\n  function(x: { foo: void, y: string } | { foo: \"foo\", z: string }) {\n    if (x.foo === undefined) {\n      (x.y: string);\n      x.z; // error\n    } else {\n      (x.z: string);\n      x.y; // error\n    }\n    if (x.foo === \"foo\") {\n      (x.z: string);\n      x.y; // error\n    } else {\n      (x.y: string);\n      x.z; // error\n    }\n  }\n];\n\n`;\n\nexports[`tagged_union_import.js 1`] = `\n/* @flow */\n\nimport { SUCCESS, ERROR } from './constants'\n\ntype Success = {\n  type: typeof SUCCESS,\n  message: string\n}\n\ntype Error = {\n  type: typeof ERROR,\n  error: string\n}\n\nfunction handleStatus(status: Success | Error) {\n  switch(status.type) {\n    case SUCCESS:\n      console.log(\\`Successful: \\${status.message}\\`);\n      break;\n    default:\n      console.log(\\`Errored: \\${status.error}\\`);\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nimport { SUCCESS, ERROR } from \"./constants\";\n\ntype Success = {\n  type: typeof SUCCESS,\n  message: string\n};\n\ntype Error = {\n  type: typeof ERROR,\n  error: string\n};\n\nfunction handleStatus(status: Success | Error) {\n  switch (status.type) {\n    case SUCCESS:\n      console.log(\\`Successful: \\${status.message}\\`);\n      break;\n    default:\n      console.log(\\`Errored: \\${status.error}\\`);\n  }\n}\n\n`;\n\nexports[`typeof.js 1`] = `\n/* @flow */\n\nfunction foo(x: bool | number) {\n  if (typeof x === \"boolean\") {\n    x[0]; // error for boolean, not number\n  }\n}\n\nfunction bar(): number {\n  var x = null;\n  if (typeof x === \"object\") {\n    return x; // error, null\n  }\n  return 0;\n}\n\n/* refining globals */\nfunction fn0() {\n  if (typeof BAZ !== 'undefined' &&\n      typeof BAZ.stuff === 'function') {\n    BAZ.stuff(123);\n  }\n  BAZ.stuff(123); // error, refinement is gone\n}\nfunction fn1() {\n  BAZ.stuff; // error, could be undefined\n  if (typeof BAZ !== 'undefined' &&\n      typeof BAZ.stuff === 'function') {\n    BAZ.stuff(123); // ok\n    BAZ.stuff(123); // error, refinement is gone\n  }\n}\n\nfunction anyfun(x: number | Function): number {\n  if (typeof x === \"function\") {\n    return 0;\n  }\n  return x; // OK, x refined to \\`number\\`\n}\n\nfunction anyobj(x: number | Object): number {\n  if (typeof x === \"object\") {\n    return 0;\n  }\n  return x; // OK, x refined to \\`number\\`\n}\n\nfunction testInvalidValue(x: mixed) {\n  if (typeof x === \"foo\") { // error\n    return 0;\n  }\n}\n\nfunction testTemplateLiteral(x: string | number) {\n  if (typeof x === \\`string\\`) {\n    return x.length;\n  }\n}\n\nfunction testInvalidTemplateLiteral(x: string | number) {\n  if (typeof x === \\`foo\\`) { // error\n    return 0;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction foo(x: boolean | number) {\n  if (typeof x === \"boolean\") {\n    x[0]; // error for boolean, not number\n  }\n}\n\nfunction bar(): number {\n  var x = null;\n  if (typeof x === \"object\") {\n    return x; // error, null\n  }\n  return 0;\n}\n\n/* refining globals */\nfunction fn0() {\n  if (typeof BAZ !== \"undefined\" && typeof BAZ.stuff === \"function\") {\n    BAZ.stuff(123);\n  }\n  BAZ.stuff(123); // error, refinement is gone\n}\nfunction fn1() {\n  BAZ.stuff; // error, could be undefined\n  if (typeof BAZ !== \"undefined\" && typeof BAZ.stuff === \"function\") {\n    BAZ.stuff(123); // ok\n    BAZ.stuff(123); // error, refinement is gone\n  }\n}\n\nfunction anyfun(x: number | Function): number {\n  if (typeof x === \"function\") {\n    return 0;\n  }\n  return x; // OK, x refined to \\`number\\`\n}\n\nfunction anyobj(x: number | Object): number {\n  if (typeof x === \"object\") {\n    return 0;\n  }\n  return x; // OK, x refined to \\`number\\`\n}\n\nfunction testInvalidValue(x: mixed) {\n  if (typeof x === \"foo\") {\n    // error\n    return 0;\n  }\n}\n\nfunction testTemplateLiteral(x: string | number) {\n  if (typeof x === \\`string\\`) {\n    return x.length;\n  }\n}\n\nfunction testInvalidTemplateLiteral(x: string | number) {\n  if (typeof x === \\`foo\\`) {\n    // error\n    return 0;\n  }\n}\n\n`;\n\nexports[`undef.js 1`] = `\n/* @flow */\n\nfunction undef_var(x: ?number) {\n  if (x !== null && x !== undefined) {\n    var y = x * 1000;\n  }\n}\n\nfunction undef_var_rev(x: ?number) {\n  if (x === null || x === undefined) {\n  } else {\n    var y = x * 1000;\n  }\n}\n\nfunction undef_prop(x: { x: ?number }) {\n  if (x.x !== null && x.x !== undefined) {\n    var y = x.x * 1000;\n  }\n}\n\nfunction undef_prop_rev(x: { x: ?number }) {\n  if (x.x === null || x.x === undefined) {\n  } else {\n    var y = x.x * 1000;\n  }\n}\n\nfunction undef_var_fail(x: ?number) {\n  if (x !== undefined) {\n    var y = x * 1000;\n  }\n}\n\nfunction undef_var_fail_rev(x: ?number) {\n  if (x === undefined) {\n  } else {\n    var y = x * 1000;\n  }\n}\n\nfunction undef_prop_fail(x: { x: ?number }) {\n  if (x.x !== undefined) {\n    var y = x.x * 1000;\n  }\n}\n\nfunction undef_prop_fail_rev(x: { x: ?number }) {\n  if (x.x === undefined) {\n  } else {\n    var y = x.x * 1000;\n  }\n}\n\nfunction undef_unreachable(x: number) {\n  if (x === undefined) {\n    var y = x * 1000; // unreachable\n  }\n  if (x == undefined) {\n    var z = x * 1000; // unreachable\n  }\n}\n\nfunction undef_var_nonstrict(x: ?number, y: ?number) {\n  if (x != undefined) {\n    var a = x * 1000;\n  }\n  if (y == undefined){\n    var b = y * 1000; // error\n  }\n}\n\nfunction undef_bogus_comparison() {\n  if (100 * undefined) {\n    return;\n  }\n  if (undefined * 100) {\n    return;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction undef_var(x: ?number) {\n  if (x !== null && x !== undefined) {\n    var y = x * 1000;\n  }\n}\n\nfunction undef_var_rev(x: ?number) {\n  if (x === null || x === undefined) {\n  } else {\n    var y = x * 1000;\n  }\n}\n\nfunction undef_prop(x: { x: ?number }) {\n  if (x.x !== null && x.x !== undefined) {\n    var y = x.x * 1000;\n  }\n}\n\nfunction undef_prop_rev(x: { x: ?number }) {\n  if (x.x === null || x.x === undefined) {\n  } else {\n    var y = x.x * 1000;\n  }\n}\n\nfunction undef_var_fail(x: ?number) {\n  if (x !== undefined) {\n    var y = x * 1000;\n  }\n}\n\nfunction undef_var_fail_rev(x: ?number) {\n  if (x === undefined) {\n  } else {\n    var y = x * 1000;\n  }\n}\n\nfunction undef_prop_fail(x: { x: ?number }) {\n  if (x.x !== undefined) {\n    var y = x.x * 1000;\n  }\n}\n\nfunction undef_prop_fail_rev(x: { x: ?number }) {\n  if (x.x === undefined) {\n  } else {\n    var y = x.x * 1000;\n  }\n}\n\nfunction undef_unreachable(x: number) {\n  if (x === undefined) {\n    var y = x * 1000; // unreachable\n  }\n  if (x == undefined) {\n    var z = x * 1000; // unreachable\n  }\n}\n\nfunction undef_var_nonstrict(x: ?number, y: ?number) {\n  if (x != undefined) {\n    var a = x * 1000;\n  }\n  if (y == undefined) {\n    var b = y * 1000; // error\n  }\n}\n\nfunction undef_bogus_comparison() {\n  if (100 * undefined) {\n    return;\n  }\n  if (undefined * 100) {\n    return;\n  }\n}\n\n`;\n\nexports[`union.js 1`] = `\n/* @flow */\n\ntype thing = number | bool\n\nfunction foo(x: thing) {\n  if (x === true) {\n    x[0]; // error on boolean\n  }\n}\n\nfunction bar(x: thing) {\n  if (x !== true && x !== false) {\n    x[0]; // error on number\n  }\n}\n\nfunction baz(x: ?thing) {\n  if (x && x !== true) {\n    x[0]; // error on number\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\ntype thing = number | boolean;\n\nfunction foo(x: thing) {\n  if (x === true) {\n    x[0]; // error on boolean\n  }\n}\n\nfunction bar(x: thing) {\n  if (x !== true && x !== false) {\n    x[0]; // error on number\n  }\n}\n\nfunction baz(x: ?thing) {\n  if (x && x !== true) {\n    x[0]; // error on number\n  }\n}\n\n`;\n\nexports[`void.js 1`] = `\n/* @flow */\n\nfunction void_var(x: ?number) {\n  if (x !== null && x !== void(0)) {\n    var y = x * 1000;\n  }\n}\n\nfunction void_var_rev(x: ?number) {\n  if (x === null || x === void(0)) {\n  } else {\n    var y = x * 1000;\n  }\n}\n\nfunction void_pro(x: { x: ?number }) {\n  if (x.x !== null && x.x !== void(0)) {\n    var y = x.x * 1000;\n  }\n}\n\nfunction void_pro_rev(x: { x: ?number }) {\n  if (x.x === null || x.x === void(0)) {\n  } else {\n    var y = x.x * 1000;\n  }\n}\n\nfunction void_var_fail(x: ?number) {\n  if (x !== void(0)) {\n    var y = x * 1000;\n  }\n}\n\nfunction void_var_fail_rev(x: ?number) {\n  if (x === void(0)) {\n  } else {\n    var y = x * 1000;\n  }\n}\n\nfunction void_pro_fail(x: { x: ?number }) {\n  if (x.x !== void(0)) {\n    var y = x.x * 1000;\n  }\n}\n\nfunction void_pro_fail_rev(x: { x: ?number }) {\n  if (x.x === void(0)) {\n  } else {\n    var y = x.x * 1000;\n  }\n}\n\nfunction void_var_side_effect(x: ?number) {\n  if (x !== null && x !== void(x * 1000)) {\n    var y = x * 1000;\n  }\n}\n\nfunction void_var_side_effect_rev(x: ?number) {\n  if (x === null || x === void(x * 1000)) {\n  } else {\n    var y = x * 1000;\n  }\n}\n\nfunction void_prop_side_effect(x: { x: ?number }) {\n  if (x.x !== null && x.x !== void(x.x * 1000)) {\n    var y = x.x * 1000;\n  }\n}\n\nfunction void_prop_side_effect_rev(x: { x: ?number }) {\n  if (x.x === null || x.x === void(x.x * 1000)) {\n  } else {\n    var y = x.x * 1000;\n  }\n}\n\nfunction void_bogus_comparison() {\n  if (100 * void(0)) {\n    return;\n  }\n  if (void(0) * 100) {\n    return;\n  }\n}\n\nfunction void_redefined_undefined(x: ?number) {\n  var undefined = \"foo\";\n  if (x !== null && x !== void(0)) {\n    var y = x * 1000;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction void_var(x: ?number) {\n  if (x !== null && x !== void 0) {\n    var y = x * 1000;\n  }\n}\n\nfunction void_var_rev(x: ?number) {\n  if (x === null || x === void 0) {\n  } else {\n    var y = x * 1000;\n  }\n}\n\nfunction void_pro(x: { x: ?number }) {\n  if (x.x !== null && x.x !== void 0) {\n    var y = x.x * 1000;\n  }\n}\n\nfunction void_pro_rev(x: { x: ?number }) {\n  if (x.x === null || x.x === void 0) {\n  } else {\n    var y = x.x * 1000;\n  }\n}\n\nfunction void_var_fail(x: ?number) {\n  if (x !== void 0) {\n    var y = x * 1000;\n  }\n}\n\nfunction void_var_fail_rev(x: ?number) {\n  if (x === void 0) {\n  } else {\n    var y = x * 1000;\n  }\n}\n\nfunction void_pro_fail(x: { x: ?number }) {\n  if (x.x !== void 0) {\n    var y = x.x * 1000;\n  }\n}\n\nfunction void_pro_fail_rev(x: { x: ?number }) {\n  if (x.x === void 0) {\n  } else {\n    var y = x.x * 1000;\n  }\n}\n\nfunction void_var_side_effect(x: ?number) {\n  if (x !== null && x !== void (x * 1000)) {\n    var y = x * 1000;\n  }\n}\n\nfunction void_var_side_effect_rev(x: ?number) {\n  if (x === null || x === void (x * 1000)) {\n  } else {\n    var y = x * 1000;\n  }\n}\n\nfunction void_prop_side_effect(x: { x: ?number }) {\n  if (x.x !== null && x.x !== void (x.x * 1000)) {\n    var y = x.x * 1000;\n  }\n}\n\nfunction void_prop_side_effect_rev(x: { x: ?number }) {\n  if (x.x === null || x.x === void (x.x * 1000)) {\n  } else {\n    var y = x.x * 1000;\n  }\n}\n\nfunction void_bogus_comparison() {\n  if (100 * void 0) {\n    return;\n  }\n  if (void 0 * 100) {\n    return;\n  }\n}\n\nfunction void_redefined_undefined(x: ?number) {\n  var undefined = \"foo\";\n  if (x !== null && x !== void 0) {\n    var y = x * 1000;\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/refinements/assignment.js",
    "content": "/* @flow */\n\nfunction foo(x : ?number) {\n  var y;\n  if (y = x) {\n    var z = y * 1000;\n  }\n}\n\ntype Bar = {\n  parent: ?Bar;\n  doStuff: () => void\n}\n\nfunction bar0(x : Bar) {\n  while (x = x.parent) { // can't assign x to ?Bar\n    x.doStuff();\n  }\n}\n\nfunction bar1(x : ?Bar) {\n  while (x = x.parent) { // x.parent might be null\n    x.doStuff();\n  }\n}\n\nfunction bar2(x : Bar) {\n  var y = x;\n  while (y = y.parent) {\n    y.doStuff();\n  }\n}\n"
  },
  {
    "path": "tests/flow/refinements/ast_node.js",
    "content": "type Node1 = {\n  kind: 'Node1',\n  prop1?: string\n};\n\ntype Node2 = {\n  kind: 'Node2',\n  prop2?: string\n}\n\nexport type ASTNode = Node1 | Node2;\n"
  },
  {
    "path": "tests/flow/refinements/bool.js",
    "content": "/* @flow */\n\nfunction foo(x: ?bool) {\n  if (x === false) {\n    return;\n  }\n\n  if (x === true) {\n    return;\n  }\n\n  x[0]; // error on null and undefined\n}\n\nfunction bar(x: ?bool) {\n  if (x !== true) {\n    if (x !== false) {\n      x[0]; // error on null and undefined\n    }\n  }\n}\n\nfunction baz(x: ?bool) {\n  if (100 * false) {\n    return;\n  }\n  if (false * 100) {\n    return;\n  }\n}\n\nlet tests = [\n  function(x: { done: true, result: string } | { done: false }) {\n    if (x.done === true) {\n      return x.result;\n    }\n    return x.result; // error\n  },\n\n  function(x: { done: true, result: string } | { done: false }) {\n    if (true === x.done) {\n      return x.result;\n    }\n    return x.result; // error\n  },\n];\n"
  },
  {
    "path": "tests/flow/refinements/computed_string_literal.js",
    "content": "// @flow\n\ntype A = {\n  'b_c': ?string\n};\n\nfunction stuff(str: string) {}\n\nfunction testProperty(a: A) {\n  if (a.b_c) {\n    stuff(a.b_c)\n  }\n}\n\nfunction testLiteralProperty(a: A) {\n  if (a['b_c']) {\n    stuff(a['b_c'])\n  }\n}\n"
  },
  {
    "path": "tests/flow/refinements/cond_prop.js",
    "content": "/* @flow */\n\ntype Type = Name | ListType | NonNullType;\ntype Name = {kind: 'Name', value: string, type: void };\ntype ListType = {kind: 'ListType', type: Type};\ntype NonNullType = {kind: 'NonNullType', type: Name | ListType | BadType};\ntype BadType = {};\n\nfunction getTypeASTName(typeAST: Type): string {\n  if (!typeAST.type) throw new Error('Must be wrapping type'); // OK\n  return getTypeASTName(typeAST.type); // error, BadType not a subtype of Type\n}\n\nlet tests = [\n  function(x: { done: true, result: string } | { done: false }) {\n    if (x.done) {\n      return x.result;\n    }\n    return x.result; // error\n  },\n\n  function(x: { done: true, result: string } | { foo: string }) {\n    if (x.done) {\n      return x.result; // error, consider { foo: \"herp\", done: \"derp\" }\n    }\n    return x.result; // error\n  },\n\n  function() {\n    type T\n      = { foo: Object, bar: string }\n      | { baz: string, quux: string }\n\n    function testAlwaysTruthyProp(t: T) {\n      if (t.foo) {\n        (t.bar: string); // error, consider { baz: \"x\", quux: \"y\", foo: \"boom\" }\n      } else {\n        (t.quux: string); // ok. since foo is an object (always truthy), the\n                          // else case completely rules out the first branch of\n                          // the union.\n      }\n    }\n\n    function testSometimesTruthyProp(t: T) {\n      if (t.bar) {\n        (t.foo: Object); // error, consider { baz: \"x\", quux: \"y\", bar: \"boom\" }\n      } else {\n        (t.quux: string); // error, consider { foo: {}, bar: \"\" }\n      }\n    }\n  },\n]\n"
  },
  {
    "path": "tests/flow/refinements/constants.js",
    "content": "/* @flow */\n\nexport const SUCCESS: 'SUCCESS' = 'SUCCESS';\nexport const ERROR: 'ERROR' = 'ERROR';\n"
  },
  {
    "path": "tests/flow/refinements/eq.js",
    "content": "/* @flow */\n\nlet tests = [\n  function(x: string, y: number) {\n    if (x == y) {} // error, string & number are not comparable (unsafe casting)\n    if (x === y) {} // no error, to match `let z = (x === y)` which is allowed\n  },\n\n  function(x: string) {\n    if (x == undefined) {} // ok\n    if (x == void 0) {} // ok\n  },\n\n  function(x: string) {\n    if (x == null) {} // ok\n  },\n\n  function(x: { y: 'foo' } | { y: 'bar' }) {\n    if (x.y == 123) {} // error\n    if (x.y === 123) {} // ok\n  },\n]\n"
  },
  {
    "path": "tests/flow/refinements/exists.js",
    "content": "declare class Foo {\n  foo: string;\n}\n\nfunction foo0(x: ?string): string {\n  return x && x || \"\";\n}\n\nfunction foo1(x: ?Foo): string {\n  return x && x.foo || \"\";\n}\n\nfunction foo2(x: ?Class<Foo>): string {\n  return x && new x().foo || \"\";\n}\n"
  },
  {
    "path": "tests/flow/refinements/func_call.js",
    "content": "// @flow\n\nlet tests = [\n  function(x: { y?: string }, z: () => string) {\n    if (x.y) {\n      // make sure we visit the AST in the correct order. if we visit z() before\n      // x.y, then the function call will invalidate the refinement of x.y\n      // incorrectly.\n      x.y.indexOf(z()); // no error\n    }\n  },\n];\n"
  },
  {
    "path": "tests/flow/refinements/hasOwnProperty.js",
    "content": "/* @flow */\n\nfunction foo(x:{y?:() => void}) {\n  x.y(); // error: could be undefined\n  if (x.hasOwnProperty('y')) {\n    x.y(); // error: still could be undefined\n  }\n  if (x.hasOwnProperty('z')) {\n    x.z(); // error: unreachable, but we don't help you here\n  }\n}\n\nfunction bar(x:Object) {\n  x.y(); // treated as `any`, so allowed\n  if (x.hasOwnProperty('y')) {\n    x.y(); // still treated as `any`, so allowed\n  }\n  if (x.hasOwnProperty('z')) {\n    x.z(); // also treated as `any`, so allowed\n  }\n}\n"
  },
  {
    "path": "tests/flow/refinements/heap_defassign.js",
    "content": "// @flow\n\ntype Obj = { p: number | string }\n\nfunction f () {}\n\nfunction def_assign_function_havoc(obj: Obj) {\n    obj.p = 10;                 // (obj.p : number)\n    f();                        // clears refi\n    var x: number = obj.p;      // error, obj.p : number | string\n}\n\nfunction def_assign_setprop_havoc(obj: Obj, obj2: Obj) {\n    obj.p = 10;                 // (obj.p : number)\n    obj2.p = 'hey';             // clears refi\n    var x: number = obj.p;      // error, obj.p : number | string\n}\n\nfunction def_assign_index_havoc(obj: Obj, obj2: Obj) {\n    obj.p = 10;                 // (obj.p : number)\n    obj2['p'] = 'hey';          // clears refi\n    var x: number = obj.p;      // error, obj.p : number | string\n}\n\nfunction def_assign_within_if(b: boolean, obj: Obj) {\n    if (b) {\n        obj.p = 10;             // (obj.p : number)\n        var x: number = obj.p   // ok by def assign\n    }\n    var y: number = obj.p;      // error, obj.p : number | string\n}\n\nfunction def_assign_within_while(b: boolean, obj: Obj) {\n    while (b) {\n        obj.p = 10;             // (obj.p : number)\n        var x: number = obj.p   // ok by def assign\n    }\n    var y: number = obj.p;      // error, obj.p : number | string\n}\n\nfunction def_assign_within_do(b: boolean, obj: Obj) {\n    do {\n        obj.p = 10;             // (obj.p : number)\n        var x: number = obj.p   // ok by def assign\n    } while (b);\n    var y: number = obj.p;      // no error, loop runs at least once\n}\n\nfunction def_assign_within_try(b: boolean, obj: Obj) {\n    obj.p = 10;                 // (obj.p : number)\n    try {\n        f();                    // clears refi and might throw\n        obj.p = 'hey';\n    } catch (e) {\n        f();                    // clears refi and might throw\n        obj.p = 'hey';\n    } finally {\n        // NOTE: the values understood to flow to obj.p at this point\n        // include the number 42 written downstream;\n        // so if we did y:string, we would get at least a spurious error\n        // (among other reasonable errors caused by values written upstream)\n        var y: number = obj.p;  // error, string ~/~ number\n        obj.p = 42;\n    }\n    var z:string = obj.p;       // error, number ~/~ string\n}\n\nfunction def_assign_within_for(b: boolean, obj: Obj) {\n    for (; b; ) {\n        obj.p = 10;             // (obj.p : number)\n        var x: number = obj.p   // ok by def assign\n    }\n    var z: number = obj.p;      // error, (number | string) ~/~ number\n}\n\n// --- name-sensitive havoc ---\n\ntype Obj2 = { q: number | string }\n\nfunction def_assign_setprop_nohavoc(obj: Obj, obj2: Obj2) {\n    obj.p = 10;                 // (obj.p : number)\n    obj2.q = 'hey';             // doesn't clear refi of .p\n    var x: number = obj.p;      // still ok\n}\n"
  },
  {
    "path": "tests/flow/refinements/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow/refinements/lib.js",
    "content": "/* @flow */\n\ndeclare var BAZ: {stuff?: (x: number) => void} | void;\n"
  },
  {
    "path": "tests/flow/refinements/missing-property-cond.js",
    "content": "// @flow\n\nfunction foo1(o: { x: number }) {\n  if (o.p1) { // OK, this is an idiomatic way of testing property existence\n    o.x;\n  }\n}\n\nfunction foo2(o: { x: number }) {\n  if (o.p2) { // OK\n    o.p2.x; // error, since o.p2's type is unknown (e.g., could be `number`)\n  }\n}\n\nfunction foo3(o: { x: number }) {\n  o.p3.x; // usual error outside conditional\n}\n\nfunction foo4(o: $Exact<{ x: number }>) {\n  if (o.p4) { // OK\n    o.p4.x; // currently OK, should be unreachable\n  } else {\n    o.p4.x; // error\n  }\n}\n\nfunction foo5() {\n  const o = { };\n  _foo5();\n  if (o.p) { o.p(); }\n  function _foo5() {\n    o.p = function() { }\n  }\n}\n\nfunction foo6(o: mixed) {\n  if (o.bar) {} // error, any lookup on mixed is unsafe\n}\n\nfunction foo7(o: mixed) {\n  if (typeof o.bar === 'string') {} // error\n  if (o && typeof o.bar === 'string') {} // ok\n  if (o != null && typeof o.bar === 'string') {} // ok\n  if (o !== null && o !== undefined && typeof o.bar === 'string') {} // ok\n}\n\nfunction foo8(o: { p: mixed }) {\n  if (o.p && o.p.q) {} // this is ok because o.p is truthy, so o.p.q is safe\n  if (o.p && o.p.q && o.p.q.r) {}\n}\n\ntype Foo9Expected = {\n  foo: string,\n}\n\nfunction foo9() {\n  const actual = {};\n  if (actual.foo === undefined) {\n    actual.foo = 'foo';\n  }\n  (actual: Foo9Expected);\n}\n"
  },
  {
    "path": "tests/flow/refinements/mixed.js",
    "content": "/* @flow */\n\nfunction takesNumber(x: number) {}\nfunction takesString(x: string) {}\n\nfunction num(x: mixed) {\n  if (typeof x === \"number\") {\n    takesString(x); // error\n    (!x: false); // error: we don't know the truthiness of x\n  }\n  if (typeof x === \"number\" && x) {\n    (!x: false); // ok\n  }\n  if (x && typeof x === \"number\") {\n    (!x: false); // ok\n  }\n}\n\nfunction str(x: mixed) {\n  if (typeof x === \"string\") {\n    takesNumber(x); // error\n    (!x: false); // error: we don't know the truthiness of x\n  }\n  if (typeof x === \"string\" && x) {\n    (!x: false); // ok\n  }\n  if (x && typeof x === \"string\") {\n    (!x: false); // ok\n  }\n}\n\nfunction bool(x: mixed) {\n  if (typeof x === \"boolean\") {\n    takesString(x); // error\n    (x: true); // error: we don't know the truthiness of x\n  }\n  if (typeof x === \"boolean\" && x) {\n    (x: true); // ok\n  }\n  if (x && typeof x === \"boolean\") {\n    (x: true); // ok\n  }\n}\n\nfunction fun(x: mixed) {\n  if (typeof x === \"function\") {\n    takesString(x); // error\n  }\n}\n\nfunction obj0(x: mixed) {\n  if (typeof x === \"object\") {\n    takesString(x); // error\n  }\n}\n\nfunction obj1(x: mixed) {\n  if (Array.isArray(x)) {\n    takesString(x); // error\n  }\n}\n\nfunction undef(x: mixed) {\n  if (typeof x === \"undefined\") {\n    takesString(x); // error\n  }\n}\n\nfunction null_(x: mixed) {\n  if (x === null) {\n    takesString(x); // error\n  }\n}\n\nfunction maybe(x: mixed) {\n  if (x == null) {\n    takesString(x); // error\n  }\n}\n\nfunction true_(x: mixed) {\n  if (x === true) {\n    takesString(x); // error\n  }\n}\n\nfunction false_(x: mixed) {\n  if (x === false) {\n    takesString(x); // error\n  }\n}\n\nfunction obj2(x: mixed) {\n  if (typeof x === \"object\") {\n    (x: { [key: string]: mixed } | null);\n    if (x !== null) {\n      (x['foo']: string); // error, mixed\n    }\n  }\n}\n\nfunction obj2(x: mixed) {\n  if (typeof x === \"object\" && x) {\n    (x: Object);\n  }\n  if (x && typeof x === \"object\") {\n    (x: Object);\n  }\n  if (x != null && typeof x === \"object\") {\n    (x: Object);\n  }\n  if (x !== null && typeof x === \"object\") {\n    (x: Object);\n  }\n}\n\nfunction arr0(x: mixed) {\n  if (Array.isArray(x)) {\n    takesString(x[0]); // error\n  }\n}\n"
  },
  {
    "path": "tests/flow/refinements/node1.js",
    "content": "module.exports = 'Node1';\n"
  },
  {
    "path": "tests/flow/refinements/not.js",
    "content": "/* @flow */\n\nfunction foo(x: ?bool) {\n  if (!x) {\n    x++; // should error for null, void and bool (false)\n  }\n}\n\nfunction bar(x: ?number) {\n  if (!x) {\n    x[0]; // should error for null, void and number (0)\n  }\n}\n\nfunction baz (x: ?number) {\n  if (x === null || x === undefined) {\n    return;\n  }\n\n  if (!x) {\n    x[0]; // should error for number (0)\n  }\n}\n\nclass TestClass {}\n\nlet tests = [\n  function() {\n    var y = true;\n    while (y) {\n      y = !y;\n    }\n  },\n  function(x: Function) {\n    (!x: false); // ok, functions are always truthy\n  },\n  function(x: Object) {\n    (!x: false); // ok, objects are always truthy\n  },\n  function(x: string) {\n    (!x: false); // error, strings are not always truthy\n  },\n  function(x: number) {\n    (!x: false); // error, numbers are not always truthy\n  },\n  function(x: boolean) {\n    (!x: false); // error, bools are not always truthy\n  },\n  function(x: TestClass) {\n    (!x: false); // ok, classes are always truthy\n  },\n];\n"
  },
  {
    "path": "tests/flow/refinements/null.js",
    "content": "/* @flow */\n\nfunction null_bogus_comparison() {\n  if (100 * null) {\n    return;\n  }\n  if (null * 100) {\n    return;\n  }\n}\n"
  },
  {
    "path": "tests/flow/refinements/number.js",
    "content": "// @flow\n\ntype Mode = 0 | 1 | 2;\n\nlet tests = [\n  function(x: number) {\n    if (x === 0) {\n      (x: void); // error\n    }\n    (x: 0); // error\n  },\n\n  function(x: number) {\n    if (x !== 0) {\n      (x: 0); // error\n    }\n    (x: void); // error\n  },\n\n  function(x: 1): 0 {\n    if (x === 0) {\n      return x; // unreachable, no error\n    }\n    return 0;\n  },\n\n  function(x: 0): number {\n    if (x === 1) {\n      return x;\n    }\n    return x;\n  },\n\n  function(x: 0) {\n    if (x !== 1) {\n      (x: 0);\n    }\n    (x: 0);\n  },\n\n  function(x: 0): number {\n    if (x === 0) {\n      return x;\n    }\n    return x;\n  },\n\n  function(x: 0 | 1) {\n    if (x === 0) {\n      (x: 0);\n      (x: void); // error\n    }\n    if (x === 1) {\n      (x: 1);\n      (x: void); // error\n    }\n  },\n\n  function(x: { foo: number }): 0 {\n    if (x.foo === 0) {\n      return x.foo;\n    }\n    return x.foo; // error\n  },\n\n  function(\n    x: { kind: 0, foo: number } | { kind: 1, bar: number }\n  ): number {\n    if (x.kind === 0) {\n      return x.foo;\n    } else {\n      return x.bar;\n    }\n  },\n\n  function(num: number, obj: { foo: number }) {\n    if (num === obj.bar) { // ok, typos allowed in conditionals\n    }\n  },\n\n  function(num: number, obj: {[key: string]: number}) {\n    if (num === obj.bar) { // ok\n    }\n  },\n\n  function(n: number): Mode {\n    if (n !== 0 && n !== 1 && n !== 2) {\n      throw new Error(\"Wrong number passed\");\n    }\n    return n;\n  },\n\n  function(s: number): ?Mode {\n    if (s === 0) {\n      return s;\n    } else if (s === 3) {\n      return s; // error\n    }\n  },\n\n  function(mode: Mode) {\n    switch (mode) {\n      case 0:\n        (mode: 0);\n        break;\n\n      case 1:\n      case 2:\n        (mode: 1 | 2);\n        break;\n    }\n  },\n\n  function(x: number): 0 {\n    if (x) {\n      return x; // error\n    } else {\n      return x; // no error, inferred to be 0\n    }\n  },\n];\n"
  },
  {
    "path": "tests/flow/refinements/property.js",
    "content": "/* @flow */\n\nfunction a(x: {[key: string]: ?string}, y: string): string {\n  if (x[y]) {\n    return x[y];\n  }\n  return \"\";\n}\n\nfunction b(x: {y: {[key: string]: ?string}}, z: string): string {\n  if (x.y[z]) {\n    return x.y[z];\n  }\n  return \"\";\n}\n\nfunction c(x: {[key: string]: ?string}, y: {z: string}): string {\n  if (x[y.z]) {\n    return x[y.z];\n  }\n  return \"\";\n}\n\nfunction d(x: {y: {[key: string]: ?string}}, a: {b: string}): string {\n  if (x.y[a.b]) {\n    return x.y[a.b];\n  }\n  return \"\";\n}\n\nfunction a_array(x: Array<?string>, y: number): string {\n  if (x[y]) {\n    return x[y];\n  }\n  return \"\";\n}\n\nfunction b_array(x: {y: Array<?string>}, z: number): string {\n  if (x.y[z]) {\n    return x.y[z];\n  }\n  return \"\";\n}\n\nfunction c_array(x: Array<?string>, y: {z: number}): string {\n  if (x[y.z]) {\n    return x[y.z];\n  }\n  return \"\";\n}\n\nfunction d_array(x: {y: Array<?string>}, a: {b: number}): string {\n  if (x.y[a.b]) {\n    return x.y[a.b];\n  }\n  return \"\";\n}\n\nfunction e_array(x: Array<?string>): string {\n  if (x[0]) {\n    return x[0];\n  }\n  return \"\";\n}\n\n// --- name-sensitive havoc ---\n\nfunction c2(x: {[key: string]: ?string}, y: {z: string}): string {\n  if (x[y.z]) {\n    y.z = \"HEY\";\n    return x[y.z];  // error\n  }\n  return \"\";\n}\n\nfunction c3(x: {[key: string]: ?string}, y: {z: string, a: string}): string {\n  if (x[y.z]) {\n    y.a = \"HEY\";\n    return x[y.z];  // ok\n  }\n  return \"\";\n}\n"
  },
  {
    "path": "tests/flow/refinements/refinements.js",
    "content": "function foo(b) {\n    var x = b? 0 : null;\n    while (typeof x == \"string\" || typeof x == \"number\") {\n        var y:string = x;\n        x = false;\n    }\n    var z:string = x;\n}\n\nfunction bar(b) {\n    var x = b? 0 : null;\n    do {\n        var y:string = x;\n        x = false;\n    } while (x === null);\n    var z:string = x;\n}\n\nfunction maybe_throw() { }\nfunction qux() {\n    var x = 0;\n    try {\n        maybe_throw();\n        x = \"hello\";\n    } catch (e) {\n        maybe_throw();\n        x = \"hello\";\n    } finally {\n        // NOTE: the values understood to flow to x at this point\n        // include the number 42 written downstream;\n        // so if we did y:string, we would get at least a spurious error\n        // (among other reasonable errors caused by values written upstream)\n        var y:number = x;\n        x = 42;\n    }\n    var z:string = x;\n}\n\nfunction corge(b) {\n    for (var x = b? 0 : null;\n         typeof x == \"string\" || typeof x == \"number\";\n         x = false) {\n        var y:string = x;\n    }\n    var z:string = x;\n}\n\nfunction waldo() {\n    var o = {};\n    var x = false;\n    for (x in o) {\n        x = 0; // commenting this out would propagate x:string downstream\n    }\n    var z:number = x;\n}\n\n// regression test: bring a global into scope by testing it.\n// this has no refinement consequences and is error-free.\n// the way we currently cache global lookups causes uneven\n// distribution of the global's entries at path merge time,\n// so we need to recognize that it's legit rather than an\n// internal error.\n//\nfunction global_in_conditional0(x: number) {\n    // merge_env\n    if (x != 0) {\n        if (BAZ) {\n        }\n    }\n}\n\nfunction global_in_conditional2(x: number) {\n    // copy_env\n    for (var i = 0; i < 100; i++) {\n        if (BAZ) {\n        }\n    }\n}\n"
  },
  {
    "path": "tests/flow/refinements/string.js",
    "content": "// @flow\n\ntype Mode = \"a\" | \"b\" | \"c\";\n\nlet tests = [\n  function(x: string) {\n    if (x === 'foo') {\n      (x: void); // error\n    }\n    (x: 'foo'); // error\n  },\n\n  function(x: string) {\n    if (x !== 'foo') {\n      (x: 'foo'); // error\n    }\n    (x: void); // error\n  },\n\n  function(x: 'bar'): 'foo' {\n    if (x === 'foo') {\n      return x; // unreachable, no error\n    }\n    return 'foo';\n  },\n\n  function(x: 'foo'): string {\n    if (x === 'bar') {\n      return x;\n    }\n    return x;\n  },\n\n  function(x: 'foo') {\n    if (x !== 'bar') {\n      (x: 'foo');\n    }\n    (x: 'foo');\n  },\n\n  function(x: 'foo'): string {\n    if (x === 'foo') {\n      return x;\n    }\n    return x;\n  },\n\n  function(x: 'foo' | 'bar') {\n    if (x === 'foo') {\n      (x: 'foo');\n      (x: void); // error\n    }\n    if (x === 'bar') {\n      (x: 'bar');\n      (x: void); // error\n    }\n  },\n\n  function(x: { foo: string }): 'foo' {\n    if (x.foo === 'foo') {\n      return x.foo;\n    }\n    return x.foo; // error\n  },\n\n  function(\n    x: { kind: 'foo', foo: string } | { kind: 'bar', bar: string }\n  ): string {\n    if (x.kind === 'foo') {\n      return x.foo;\n    } else {\n      return x.bar;\n    }\n  },\n\n  function(str: string, obj: { foo: string }) {\n    if (str === obj.bar) { // ok, typos allowed in conditionals\n    }\n  },\n\n  function(str: string, obj: {[key: string]: string}) {\n    if (str === obj.bar) { // ok\n    }\n  },\n\n  function(str: string): Mode {\n    var ch = str[0];\n    if (ch !== \"a\" && ch !== \"b\" && ch !== \"c\") {\n      throw new Error(\"Wrong string passed\");\n    }\n    return ch;\n  },\n\n  function(s: string): ?Mode {\n    if (s === \"a\") {\n      return s;\n    } else if (s === \"d\") {\n      return s; // error\n    }\n  },\n\n  function(mode: Mode) {\n    switch (mode) {\n      case \"a\":\n        (mode: \"a\");\n        break;\n\n      case \"b\":\n      case \"c\":\n        (mode: \"b\" | \"c\");\n        break;\n    }\n  },\n\n  function(x: string): \"\" {\n    if (x) {\n      return x; // error\n    } else {\n      return x; // no error, inferred to be \"\"\n    }\n  },\n\n  // Simple template literals are ok\n  function(x: string): 'foo' {\n    if (x === `foo`) {\n      return x;\n    }\n    if (`foo` === x) {\n      return x;\n    }\n    return 'foo';\n  },\n];\n"
  },
  {
    "path": "tests/flow/refinements/super_member.js",
    "content": "/* @flow */\n\nclass A {\n  prop: string;\n  method(): string {\n    return \"A\";\n  }\n}\n\nclass B {\n  test(): string {\n    if (super.prop) { // super.prop doesn't exist\n      return super.prop; // error, unknown type passed to string expected\n    }\n    return \"B\";\n  }\n}\n\nclass C extends A {\n  test(): string {\n    if (super.prop) {\n      return super.prop; // OK\n    }\n    return \"C\";\n  }\n}\n"
  },
  {
    "path": "tests/flow/refinements/switch.js",
    "content": "/* @flow */\n\nfunction foo(text: string | number): string {\n  switch (typeof text) {\n　　case 'string':\n　　　return text;\n    case 'number':\n      return text; // error, should return string\n　　default:\n　　　return 'wat';\n　}\n}\n\nfunction bar(text: string | number): string {\n  switch (typeof text) {\n    case 'string':\n      return text[0];\n  　default:\n      return (text++) + '';\n　}\n}\n\nfunction baz1(text: string | number): string {\n  switch (typeof text) {\n    case 'number':\n    case 'string':\n      return text[0]; // error, [0] on number\n  　default:\n      return 'wat';\n　}\n}\n\nfunction baz2(text: string | number): string {\n  switch (typeof text) {\n    case 'string':\n    case 'number':\n      return text[0]; // error, [0] on number\n  　default:\n      return 'wat';\n　}\n}\n\nfunction corge(text: string | number | Array<string>): string {\n  switch (typeof text) {\n    case 'object':\n      return text[0];\n    case 'string':\n    case 'number':\n      // using ++ since it isn't valid on arrays or strings.\n      // should only error for string since Array was filtered out.\n      return (text++) + '';\n  　default:\n      return 'wat';\n　}\n}\n"
  },
  {
    "path": "tests/flow/refinements/tagged_union.js",
    "content": "// example 1\n\ntype Type = Name | ListType;\ntype Name = {kind: 'Name', value: string};\ntype ListType = {kind: 'ListType', name: string};\n\nfunction getTypeASTName(typeAST: Type): string {\n  if (typeAST.kind === 'Name') {\n    return typeAST.value; // OK, since typeAST: Name\n  } else {\n    return typeAST.name; // OK, since typeAST: ListType\n  }\n}\n\n// example 2\nimport type {ASTNode} from './ast_node';\nvar Node = require('./node1'); // Node = \"Node1\"\nfunction foo(x: ASTNode) {\n  if (x.kind === Node) {\n    return x.prop1.charAt(0); // typeAST: Node1, but x.prop1 may be undefined\n  }\n  return null;\n}\n\n// example 3\ntype Apple = { kind: 'Fruit', taste: 'Bad' }\ntype Orange = { kind: 'Fruit', taste: 'Good' }\ntype Broccoli = { kind: 'Veg', taste: 'Bad', raw: 'No' }\ntype Carrot = { kind: 'Veg', taste: 'Good', raw: 'Maybe' }\n\ntype Breakfast = Apple | Orange | Broccoli | Carrot\n\nfunction bar(x: Breakfast) {\n  if (x.kind === 'Fruit') { (x.taste: 'Good'); } // error, Apple.taste = Bad\n  else (x.raw: 'No'); // error, Carrot.raw = Maybe\n}\n\nfunction qux(x: Breakfast) {\n  if (x.taste === 'Good') {\n    (x.raw: 'Yes' | 'No'); // 2 errors:\n                           // Orange.raw doesn't exist\n                           // Carrot.raw is neither Yes nor No\n  }\n}\n\n// example 4\nfunction list(n) {\n  if (n > 0) return { kind: \"cons\", next: list(n-1) };\n  return { kind: \"nil\" };\n}\nfunction length(l) {\n  switch (l.kind) {\n  case \"cons\": return 1 + length(l.next);\n  default: return 0;\n  }\n}\nfunction check(n) {\n  if (n >= 0) return (n === (length(list(n))));\n  return true;\n}\n\n\n// example 5\nvar EnumKind = { A: 1, B: 2, C: 3};\ntype A = { kind: 1, A: number };\ntype B = { kind: 2, B: number };\ntype C = { kind: 3, C: number };\nfunction kind(x: A | B | C): number {\n  switch (x.kind) {\n  case EnumKind.A: return x.A;\n  case EnumKind.B: return x.B;\n  default: return x.A; // error, x: C and property A not found in type C\n  }\n}\nkind({ kind: EnumKind.A, A: 1 });\n\n// example 6\ntype Citizen = { citizen: true };\ntype NonCitizen = { citizen: false, nationality: string }\nfunction nationality(x: Citizen | NonCitizen) {\n  if (x.citizen) return \"Shire\"\n  else return x.nationality;\n}\n\nlet tests = [\n  // non-existent props\n  function test7(x: A) {\n    if (x.kindTypo === 1) { // typos are allowed to be tested\n      (x.kindTypo: string); // typos can't be used, though\n    }\n  },\n\n  // nested objects\n  function test8(x: {foo: {bar: 1}}) {\n    if (x.foo.bar === 1) {}\n    if (x.fooTypo.bar === 1) {} // error, fooTypo doesn't exist\n  },\n\n  // invalid RHS\n  function(x: A) {\n    if (x.kind === (null).toString()) {} // error, method on null\n    if ({kind: 1}.kind === (null).toString()) {} // error, method on null\n  },\n\n  // non-objects on LHS\n  function(\n    x: Array<string>, y: string, z: number, q: boolean,\n    r: Object, s: Function, t: () => void\n  ) {\n    if (x.length === 0) {}\n    if (x.legnth === 0) { // typos are allowed to be tested\n      (x.legnth: number); // inside the block, it's a number\n      (x.legnth: string); // error: number literal 0 !~> string\n    }\n    if (y.length === 0) {}\n    if (y.legnth === 0) { // typos are allowed to be tested\n      (y.legnth: number); // inside the block, it's a number\n      (y.legnth: string); // error: number literal 0 !~> string\n    }\n    if (z.toString === 0) {}\n    if (z.toStirng === 0) { // typos are allowed to be tested\n      (z.toStirng: number); // inside the block, it's a number\n      (z.toStirng: string); // error: number literal 0 !~> string\n    }\n    if (q.valueOf === 0) {}\n    if (q.valeuOf === 0) { // typos are allowed to be tested\n      (q.valeuOf: number); // inside the block, it's a number\n      (q.valeuOf: string); // error: number literal 0 !~> string\n    }\n    if (r.toStirng === 0) { // typos are allowed to be tested\n      (r.toStirng: empty); // props on AnyObjT are `any`\n    }\n    if (s.call === 0) {}\n    if (s.calll === 0) { // typos are allowed to be tested\n      (t.calll: empty); // ok, props on functions are `any` :/\n    }\n    if (t.call === 0) {}\n    if (t.calll === 0) { // typos are allowed to be tested\n      (t.calll: empty); // ok, props on functions are `any` :/\n    }\n  },\n\n  // sentinel props become the RHS\n  function(x: { str: string, num: number, bool: boolean }) {\n    if (x.str === 'str') {\n      (x.str: 'not str'); // error: 'str' !~> 'not str'\n    }\n    if (x.num === 123) {\n      (x.num: 456); // error: 123 !~> 456\n    }\n    if (x.bool === true) {\n      (x.bool: false); // error: true !~> false\n    }\n    // even if it doesn't exist...\n    if (x.badStr === 'bad') {\n      (x.badStr: empty); // error: 'bad' !~> empty\n    }\n    if (x.badNum === 123) {\n      (x.badNum: empty); // error: 123 !~> empty\n    }\n    if (x.badBool === true) {\n      (x.badBool: empty); // error: true !~> empty\n    }\n  },\n\n  // type mismatch\n  function(x: { foo: 123, y: string } | { foo: 'foo', z: string }) {\n    if (x.foo === 123) {\n      (x.y: string);\n      x.z; // error\n    } else {\n      (x.z: string);\n      x.y; // error\n    }\n    if (x.foo === 'foo') {\n      (x.z: string);\n      x.y; // error\n    } else {\n      (x.y: string);\n      x.z; // error\n    }\n  },\n\n  // type mismatch, but one is not a literal\n  function(x: { foo: number, y: string } | { foo: 'foo', z: string }) {\n    if (x.foo === 123) {\n      (x.y: string); // ok, because 123 !== 'foo'\n      x.z; // error\n    } else {\n      x.y; // error: x.foo could be a string\n      x.z; // error: could still be either case (if foo was a different number)\n    }\n\n    if (x.foo === 'foo') {\n      (x.z: string);\n      x.y; // error\n    } else {\n      (x.y: string);\n      x.z; // error\n    }\n  },\n\n  // type mismatch, neither is a literal\n  function(x: { foo: number, y: string } | { foo: string, z: string }) {\n    if (x.foo === 123) {\n      (x.y: string); // ok, because 123 !== string\n      x.z; // error\n    } else {\n      x.y; // error: x.foo could be a string\n      x.z; // error: could still be either case (if foo was a different number)\n    }\n\n    if (x.foo === 'foo') {\n      (x.z: string);\n      x.y; // error\n    } else {\n      x.y; // error: x.foo could be a different string\n      x.z; // error: x.foo could be a number\n    }\n  },\n\n  // type mismatch, neither is a literal, test is not a literal either\n  function(\n    x: { foo: number, y: string } | { foo: string, z: string },\n    num: number\n  ) {\n    if (x.foo === num) {\n      x.y; // error: flow isn't smart enough to figure this out yet\n      x.z; // error\n    }\n  },\n\n  // null\n  function(x: { foo: null, y: string } | { foo: 'foo', z: string }) {\n    if (x.foo === null) {\n      (x.y: string);\n      x.z; // error\n    } else {\n      (x.z: string);\n      x.y; // error\n    }\n    if (x.foo === 'foo') {\n      (x.z: string);\n      x.y; // error\n    } else {\n      (x.y: string);\n      x.z; // error\n    }\n  },\n\n  // void\n  function(x: { foo: void, y: string } | { foo: 'foo', z: string }) {\n    if (x.foo === undefined) {\n      (x.y: string);\n      x.z; // error\n    } else {\n      (x.z: string);\n      x.y; // error\n    }\n    if (x.foo === 'foo') {\n      (x.z: string);\n      x.y; // error\n    } else {\n      (x.y: string);\n      x.z; // error\n    }\n  },\n];\n"
  },
  {
    "path": "tests/flow/refinements/tagged_union_import.js",
    "content": "/* @flow */\n\nimport { SUCCESS, ERROR } from './constants'\n\ntype Success = {\n  type: typeof SUCCESS,\n  message: string\n}\n\ntype Error = {\n  type: typeof ERROR,\n  error: string\n}\n\nfunction handleStatus(status: Success | Error) {\n  switch(status.type) {\n    case SUCCESS:\n      console.log(`Successful: ${status.message}`);\n      break;\n    default:\n      console.log(`Errored: ${status.error}`);\n  }\n}\n"
  },
  {
    "path": "tests/flow/refinements/typeof.js",
    "content": "/* @flow */\n\nfunction foo(x: bool | number) {\n  if (typeof x === \"boolean\") {\n    x[0]; // error for boolean, not number\n  }\n}\n\nfunction bar(): number {\n  var x = null;\n  if (typeof x === \"object\") {\n    return x; // error, null\n  }\n  return 0;\n}\n\n/* refining globals */\nfunction fn0() {\n  if (typeof BAZ !== 'undefined' &&\n      typeof BAZ.stuff === 'function') {\n    BAZ.stuff(123);\n  }\n  BAZ.stuff(123); // error, refinement is gone\n}\nfunction fn1() {\n  BAZ.stuff; // error, could be undefined\n  if (typeof BAZ !== 'undefined' &&\n      typeof BAZ.stuff === 'function') {\n    BAZ.stuff(123); // ok\n    BAZ.stuff(123); // error, refinement is gone\n  }\n}\n\nfunction anyfun(x: number | Function): number {\n  if (typeof x === \"function\") {\n    return 0;\n  }\n  return x; // OK, x refined to `number`\n}\n\nfunction anyobj(x: number | Object): number {\n  if (typeof x === \"object\") {\n    return 0;\n  }\n  return x; // OK, x refined to `number`\n}\n\nfunction testInvalidValue(x: mixed) {\n  if (typeof x === \"foo\") { // error\n    return 0;\n  }\n}\n\nfunction testTemplateLiteral(x: string | number) {\n  if (typeof x === `string`) {\n    return x.length;\n  }\n}\n\nfunction testInvalidTemplateLiteral(x: string | number) {\n  if (typeof x === `foo`) { // error\n    return 0;\n  }\n}\n"
  },
  {
    "path": "tests/flow/refinements/undef.js",
    "content": "/* @flow */\n\nfunction undef_var(x: ?number) {\n  if (x !== null && x !== undefined) {\n    var y = x * 1000;\n  }\n}\n\nfunction undef_var_rev(x: ?number) {\n  if (x === null || x === undefined) {\n  } else {\n    var y = x * 1000;\n  }\n}\n\nfunction undef_prop(x: { x: ?number }) {\n  if (x.x !== null && x.x !== undefined) {\n    var y = x.x * 1000;\n  }\n}\n\nfunction undef_prop_rev(x: { x: ?number }) {\n  if (x.x === null || x.x === undefined) {\n  } else {\n    var y = x.x * 1000;\n  }\n}\n\nfunction undef_var_fail(x: ?number) {\n  if (x !== undefined) {\n    var y = x * 1000;\n  }\n}\n\nfunction undef_var_fail_rev(x: ?number) {\n  if (x === undefined) {\n  } else {\n    var y = x * 1000;\n  }\n}\n\nfunction undef_prop_fail(x: { x: ?number }) {\n  if (x.x !== undefined) {\n    var y = x.x * 1000;\n  }\n}\n\nfunction undef_prop_fail_rev(x: { x: ?number }) {\n  if (x.x === undefined) {\n  } else {\n    var y = x.x * 1000;\n  }\n}\n\nfunction undef_unreachable(x: number) {\n  if (x === undefined) {\n    var y = x * 1000; // unreachable\n  }\n  if (x == undefined) {\n    var z = x * 1000; // unreachable\n  }\n}\n\nfunction undef_var_nonstrict(x: ?number, y: ?number) {\n  if (x != undefined) {\n    var a = x * 1000;\n  }\n  if (y == undefined){\n    var b = y * 1000; // error\n  }\n}\n\nfunction undef_bogus_comparison() {\n  if (100 * undefined) {\n    return;\n  }\n  if (undefined * 100) {\n    return;\n  }\n}\n"
  },
  {
    "path": "tests/flow/refinements/union.js",
    "content": "/* @flow */\n\ntype thing = number | bool\n\nfunction foo(x: thing) {\n  if (x === true) {\n    x[0]; // error on boolean\n  }\n}\n\nfunction bar(x: thing) {\n  if (x !== true && x !== false) {\n    x[0]; // error on number\n  }\n}\n\nfunction baz(x: ?thing) {\n  if (x && x !== true) {\n    x[0]; // error on number\n  }\n}\n"
  },
  {
    "path": "tests/flow/refinements/void.js",
    "content": "/* @flow */\n\nfunction void_var(x: ?number) {\n  if (x !== null && x !== void(0)) {\n    var y = x * 1000;\n  }\n}\n\nfunction void_var_rev(x: ?number) {\n  if (x === null || x === void(0)) {\n  } else {\n    var y = x * 1000;\n  }\n}\n\nfunction void_pro(x: { x: ?number }) {\n  if (x.x !== null && x.x !== void(0)) {\n    var y = x.x * 1000;\n  }\n}\n\nfunction void_pro_rev(x: { x: ?number }) {\n  if (x.x === null || x.x === void(0)) {\n  } else {\n    var y = x.x * 1000;\n  }\n}\n\nfunction void_var_fail(x: ?number) {\n  if (x !== void(0)) {\n    var y = x * 1000;\n  }\n}\n\nfunction void_var_fail_rev(x: ?number) {\n  if (x === void(0)) {\n  } else {\n    var y = x * 1000;\n  }\n}\n\nfunction void_pro_fail(x: { x: ?number }) {\n  if (x.x !== void(0)) {\n    var y = x.x * 1000;\n  }\n}\n\nfunction void_pro_fail_rev(x: { x: ?number }) {\n  if (x.x === void(0)) {\n  } else {\n    var y = x.x * 1000;\n  }\n}\n\nfunction void_var_side_effect(x: ?number) {\n  if (x !== null && x !== void(x * 1000)) {\n    var y = x * 1000;\n  }\n}\n\nfunction void_var_side_effect_rev(x: ?number) {\n  if (x === null || x === void(x * 1000)) {\n  } else {\n    var y = x * 1000;\n  }\n}\n\nfunction void_prop_side_effect(x: { x: ?number }) {\n  if (x.x !== null && x.x !== void(x.x * 1000)) {\n    var y = x.x * 1000;\n  }\n}\n\nfunction void_prop_side_effect_rev(x: { x: ?number }) {\n  if (x.x === null || x.x === void(x.x * 1000)) {\n  } else {\n    var y = x.x * 1000;\n  }\n}\n\nfunction void_bogus_comparison() {\n  if (100 * void(0)) {\n    return;\n  }\n  if (void(0) * 100) {\n    return;\n  }\n}\n\nfunction void_redefined_undefined(x: ?number) {\n  var undefined = \"foo\";\n  if (x !== null && x !== void(0)) {\n    var y = x * 1000;\n  }\n}\n"
  },
  {
    "path": "tests/flow/reflection/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`type.js 1`] = `\ndeclare var a: number;\nvar b: typeof a = \"...\";\nvar c: typeof a = \"...\";\n\ntype T = number;\nvar x:T = \"...\";\n\n// what about recursive unions?\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare var a: number;\nvar b: typeof a = \"...\";\nvar c: typeof a = \"...\";\n\ntype T = number;\nvar x: T = \"...\";\n\n// what about recursive unions?\n\n`;\n"
  },
  {
    "path": "tests/flow/reflection/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/reflection/type.js",
    "content": "declare var a: number;\nvar b: typeof a = \"...\";\nvar c: typeof a = \"...\";\n\ntype T = number;\nvar x:T = \"...\";\n\n// what about recursive unions?\n"
  },
  {
    "path": "tests/flow/regexp/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`regexp.js 1`] = `\nvar patt=/Hello/g\nvar match:number = patt.test(\"Hello world!\");\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar patt = /Hello/g;\nvar match: number = patt.test(\"Hello world!\");\n\n`;\n"
  },
  {
    "path": "tests/flow/regexp/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/regexp/regexp.js",
    "content": "var patt=/Hello/g\nvar match:number = patt.test(\"Hello world!\");\n"
  },
  {
    "path": "tests/flow/replace/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nvar a = 0;\n\nfunction foo(x) { }\n\nfoo(\"\");\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar a = 0;\n\nfunction foo(x) {}\n\nfoo(\"\");\n\n`;\n"
  },
  {
    "path": "tests/flow/replace/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/replace/test.js",
    "content": "var a = 0;\n\nfunction foo(x) { }\n\nfoo(\"\");\n"
  },
  {
    "path": "tests/flow/require/B.js",
    "content": "/* @flow */\n\nexports.numberValue = 42;\n"
  },
  {
    "path": "tests/flow/require/C.js",
    "content": "/* @flow */\n"
  },
  {
    "path": "tests/flow/require/E.js",
    "content": "/* @flow */\n\n// Local `exports` var is just a ref to module.exports, so mutating the original\n// value will affect the exports object but re-binding it makes it useless and\n// does not affect the exports value.\nmodule.exports = {\n  numberValue: 42\n};\n\nexports = {stringValue: ''};\n"
  },
  {
    "path": "tests/flow/require/ProvidesModuleA.js",
    "content": "/**\n * @providesModule A\n * @flow\n */\n\nexports.numberValue = 42;\n"
  },
  {
    "path": "tests/flow/require/ProvidesModuleD.js",
    "content": "/**\n * @providesModule D\n * @flow\n */\n"
  },
  {
    "path": "tests/flow/require/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`B.js 1`] = `\n/* @flow */\n\nexports.numberValue = 42;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nexports.numberValue = 42;\n\n`;\n\nexports[`C.js 1`] = `\n/* @flow */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n`;\n\nexports[`E.js 1`] = `\n/* @flow */\n\n// Local \\`exports\\` var is just a ref to module.exports, so mutating the original\n// value will affect the exports object but re-binding it makes it useless and\n// does not affect the exports value.\nmodule.exports = {\n  numberValue: 42\n};\n\nexports = {stringValue: ''};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n// Local \\`exports\\` var is just a ref to module.exports, so mutating the original\n// value will affect the exports object but re-binding it makes it useless and\n// does not affect the exports value.\nmodule.exports = {\n  numberValue: 42\n};\n\nexports = { stringValue: \"\" };\n\n`;\n\nexports[`ProvidesModuleA.js 1`] = `\n/**\n * @providesModule A\n * @flow\n */\n\nexports.numberValue = 42;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule A\n * @flow\n */\n\nexports.numberValue = 42;\n\n`;\n\nexports[`ProvidesModuleD.js 1`] = `\n/**\n * @providesModule D\n * @flow\n */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule D\n * @flow\n */\n\n`;\n\nexports[`not_builtin_require.js 1`] = `\n// @flow\n\nfunction require(x: string) {}\nrequire(\"not a module name\");\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nfunction require(x: string) {}\nrequire(\"not a module name\");\n\n`;\n\nexports[`not_builtin_require2.js 1`] = `\n// @flow\n\ntype require = number;\nvar a: require = 42;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ntype require = number;\nvar a: require = 42;\n\n`;\n\nexports[`require.js 1`] = `\n/* @flow */\n\nfunction takesANumber(num: number): void {}\nfunction takesAString(str: string): void {}\n\n// @providesModule\nvar A = require(\"A\");\ntakesANumber(A.numberValue);\ntakesAString(A.numberValue);\n\n// File path\nvar B = require(\"./B\");\ntakesANumber(B.numberValue);\ntakesAString(B.numberValue);\n\n// C.js exists, but not as a providesModule\nrequire(\"C\");\n\n// @providesModule D exists, but not as a filename\nrequire(\"./D\");\n\n// E exports an object with a numVal property\nvar E = require('./E');\nvar e_1: number = E.numberValue;\nE.stringValue; // Error: The E exports obj has no 'stringValue' property\n\n// We require that the param passed to require() be a string literal to support\n// guaranteed static extraction\nvar a = './E';\nrequire(a); // Error: Param must be string literal\nrequire(\\`./E\\`); // template literals are ok...\nrequire(\\`\\${'./E'}\\`); // error: but only if they have no expressions\n\n// require.call is allowed but circumverts Flow's static analysis\nrequire.call(null, \"DoesNotExist\");\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction takesANumber(num: number): void {}\nfunction takesAString(str: string): void {}\n\n// @providesModule\nvar A = require(\"A\");\ntakesANumber(A.numberValue);\ntakesAString(A.numberValue);\n\n// File path\nvar B = require(\"./B\");\ntakesANumber(B.numberValue);\ntakesAString(B.numberValue);\n\n// C.js exists, but not as a providesModule\nrequire(\"C\");\n\n// @providesModule D exists, but not as a filename\nrequire(\"./D\");\n\n// E exports an object with a numVal property\nvar E = require(\"./E\");\nvar e_1: number = E.numberValue;\nE.stringValue; // Error: The E exports obj has no 'stringValue' property\n\n// We require that the param passed to require() be a string literal to support\n// guaranteed static extraction\nvar a = \"./E\";\nrequire(a); // Error: Param must be string literal\nrequire(\\`./E\\`); // template literals are ok...\nrequire(\\`\\${\"./E\"}\\`); // error: but only if they have no expressions\n\n// require.call is allowed but circumverts Flow's static analysis\nrequire.call(null, \"DoesNotExist\");\n\n`;\n"
  },
  {
    "path": "tests/flow/require/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/require/not_builtin_require.js",
    "content": "// @flow\n\nfunction require(x: string) {}\nrequire(\"not a module name\");\n"
  },
  {
    "path": "tests/flow/require/not_builtin_require2.js",
    "content": "// @flow\n\ntype require = number;\nvar a: require = 42;\n"
  },
  {
    "path": "tests/flow/require/require.js",
    "content": "/* @flow */\n\nfunction takesANumber(num: number): void {}\nfunction takesAString(str: string): void {}\n\n// @providesModule\nvar A = require(\"A\");\ntakesANumber(A.numberValue);\ntakesAString(A.numberValue);\n\n// File path\nvar B = require(\"./B\");\ntakesANumber(B.numberValue);\ntakesAString(B.numberValue);\n\n// C.js exists, but not as a providesModule\nrequire(\"C\");\n\n// @providesModule D exists, but not as a filename\nrequire(\"./D\");\n\n// E exports an object with a numVal property\nvar E = require('./E');\nvar e_1: number = E.numberValue;\nE.stringValue; // Error: The E exports obj has no 'stringValue' property\n\n// We require that the param passed to require() be a string literal to support\n// guaranteed static extraction\nvar a = './E';\nrequire(a); // Error: Param must be string literal\nrequire(`./E`); // template literals are ok...\nrequire(`${'./E'}`); // error: but only if they have no expressions\n\n// require.call is allowed but circumverts Flow's static analysis\nrequire.call(null, \"DoesNotExist\");\n"
  },
  {
    "path": "tests/flow/requireLazy/A.js",
    "content": "/**\n * @providesModule A\n * @flow\n */\n\nmodule.exports = {\n  numberValueA: 1,\n  stringValueA: \"someString\"\n};\n"
  },
  {
    "path": "tests/flow/requireLazy/B.js",
    "content": "/**\n * @providesModule B\n * @flow\n */\n\nmodule.exports = {\n  numberValueB: 1,\n  stringValueB: \"someString\"\n};\n"
  },
  {
    "path": "tests/flow/requireLazy/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\n/**\n * @providesModule A\n * @flow\n */\n\nmodule.exports = {\n  numberValueA: 1,\n  stringValueA: \"someString\"\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule A\n * @flow\n */\n\nmodule.exports = {\n  numberValueA: 1,\n  stringValueA: \"someString\"\n};\n\n`;\n\nexports[`B.js 1`] = `\n/**\n * @providesModule B\n * @flow\n */\n\nmodule.exports = {\n  numberValueB: 1,\n  stringValueB: \"someString\"\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule B\n * @flow\n */\n\nmodule.exports = {\n  numberValueB: 1,\n  stringValueB: \"someString\"\n};\n\n`;\n\nexports[`requireLazy.js 1`] = `\n/**\n * @flow\n */\n\nrequireLazy(['A', 'B'], function(A, B) {\n  var num1: number = A.numberValueA;\n  var str1: string = A.stringValueA;\n  var num2: number = A.stringValueA; // Error: string ~> number\n  var str2: string = A.numberValueA; // Error: number ~> string\n\n  var num3: number = B.numberValueB;\n  var str3: string = B.stringValueB;\n  var num4: number = B.stringValueB; // Error: string ~> number\n  var str4: string = B.numberValueB; // Error: number ~> string\n});\n\nvar notA: Object = A;\nvar notB: Object = B;\n\nrequireLazy(); // Error: No args\nrequireLazy([nope], function() {}); // Error: Non-stringliteral args\nrequireLazy(['A']); // Error: No calback expression\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nrequireLazy([\"A\", \"B\"], function(A, B) {\n  var num1: number = A.numberValueA;\n  var str1: string = A.stringValueA;\n  var num2: number = A.stringValueA; // Error: string ~> number\n  var str2: string = A.numberValueA; // Error: number ~> string\n\n  var num3: number = B.numberValueB;\n  var str3: string = B.stringValueB;\n  var num4: number = B.stringValueB; // Error: string ~> number\n  var str4: string = B.numberValueB; // Error: number ~> string\n});\n\nvar notA: Object = A;\nvar notB: Object = B;\n\nrequireLazy(); // Error: No args\nrequireLazy([nope], function() {}); // Error: Non-stringliteral args\nrequireLazy([\"A\"]); // Error: No calback expression\n\n`;\n"
  },
  {
    "path": "tests/flow/requireLazy/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/requireLazy/requireLazy.js",
    "content": "/**\n * @flow\n */\n\nrequireLazy(['A', 'B'], function(A, B) {\n  var num1: number = A.numberValueA;\n  var str1: string = A.stringValueA;\n  var num2: number = A.stringValueA; // Error: string ~> number\n  var str2: string = A.numberValueA; // Error: number ~> string\n\n  var num3: number = B.numberValueB;\n  var str3: string = B.stringValueB;\n  var num4: number = B.stringValueB; // Error: string ~> number\n  var str4: string = B.numberValueB; // Error: number ~> string\n});\n\nvar notA: Object = A;\nvar notB: Object = B;\n\nrequireLazy(); // Error: No args\nrequireLazy([nope], function() {}); // Error: Non-stringliteral args\nrequireLazy(['A']); // Error: No calback expression\n"
  },
  {
    "path": "tests/flow/return/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`function_return.js 1`] = `\nclass C {\n    foo() { }\n    bar() { return; }\n    fn(x:number) { return x; }\n}\n\nfunction f(x): number {\n  if (x > 1) {\n    return 42;\n  }\n}\n\nfunction g(x): ?number {\n  if (x > 1) {\n    return 42;\n  }\n}\n\nfunction h(x): number {\n  if (x > 1) {\n    return 42;\n  }\n  return;\n}\n\nfunction i(x): ?number {\n  if (x > 1) {\n    return 42;\n  }\n  return;\n}\n\nmodule.exports = C;\n\n//function fn(x:number) { return x; }\n//module.exports = fn;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {\n  foo() {}\n  bar() {\n    return;\n  }\n  fn(x: number) {\n    return x;\n  }\n}\n\nfunction f(x): number {\n  if (x > 1) {\n    return 42;\n  }\n}\n\nfunction g(x): ?number {\n  if (x > 1) {\n    return 42;\n  }\n}\n\nfunction h(x): number {\n  if (x > 1) {\n    return 42;\n  }\n  return;\n}\n\nfunction i(x): ?number {\n  if (x > 1) {\n    return 42;\n  }\n  return;\n}\n\nmodule.exports = C;\n\n//function fn(x:number) { return x; }\n//module.exports = fn;\n\n`;\n\nexports[`void.js 1`] = `\n/* This is a regression test. At one point we incorrectly inferred the return\n   type of functions that have an explicit \\`undefined\\` to be only \\`undefined\\` --\n   ignoring other possible exits. */\nfunction f(b) {\n  if (b) {\n    return undefined;\n  } else {\n    return \"nope\";\n  }\n}\n\n(f(true): void); // error: string ~> void\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* This is a regression test. At one point we incorrectly inferred the return\n   type of functions that have an explicit \\`undefined\\` to be only \\`undefined\\` --\n   ignoring other possible exits. */\nfunction f(b) {\n  if (b) {\n    return undefined;\n  } else {\n    return \"nope\";\n  }\n}\n\n(f(true): void); // error: string ~> void\n\n`;\n"
  },
  {
    "path": "tests/flow/return/function_return.js",
    "content": "class C {\n    foo() { }\n    bar() { return; }\n    fn(x:number) { return x; }\n}\n\nfunction f(x): number {\n  if (x > 1) {\n    return 42;\n  }\n}\n\nfunction g(x): ?number {\n  if (x > 1) {\n    return 42;\n  }\n}\n\nfunction h(x): number {\n  if (x > 1) {\n    return 42;\n  }\n  return;\n}\n\nfunction i(x): ?number {\n  if (x > 1) {\n    return 42;\n  }\n  return;\n}\n\nmodule.exports = C;\n\n//function fn(x:number) { return x; }\n//module.exports = fn;\n"
  },
  {
    "path": "tests/flow/return/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/return/void.js",
    "content": "/* This is a regression test. At one point we incorrectly inferred the return\n   type of functions that have an explicit `undefined` to be only `undefined` --\n   ignoring other possible exits. */\nfunction f(b) {\n  if (b) {\n    return undefined;\n  } else {\n    return \"nope\";\n  }\n}\n\n(f(true): void); // error: string ~> void\n"
  },
  {
    "path": "tests/flow/return_new/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nfunction Foo() { return {}; }\nvar foo: number = new Foo(); // error (returns object literal above)\n\nfunction Bar() { return 0; }\nvar bar: number = new Bar(); // error (returns new object)\n\nfunction Qux() { }\nvar qux: number = new Qux(); // error (returns new object)\n\nclass A { }\nfunction B() { return new A(); }\nvar a: A = new B(); // OK (returns new A)\n\n// type applications should be applied before deciding if object-like\ntype C<T> = { x: T };\nfunction makeC<T>(x: T): C<T> { return {x}; }\n(new makeC('x'): C<string>); // normally you wouldn't use \\`new\\`, but you can\n\n// unions should be split before deciding if object-like\nfunction makeUnion(): number | {x: string} {\n  return {x: 'x'};\n}\n(new makeUnion(): {x: string}); // error: \\`number\\` returns {}, missing prop x\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction Foo() {\n  return {};\n}\nvar foo: number = new Foo(); // error (returns object literal above)\n\nfunction Bar() {\n  return 0;\n}\nvar bar: number = new Bar(); // error (returns new object)\n\nfunction Qux() {}\nvar qux: number = new Qux(); // error (returns new object)\n\nclass A {}\nfunction B() {\n  return new A();\n}\nvar a: A = new B(); // OK (returns new A)\n\n// type applications should be applied before deciding if object-like\ntype C<T> = { x: T };\nfunction makeC<T>(x: T): C<T> {\n  return { x };\n}\n(new makeC(\"x\"): C<string>); // normally you wouldn't use \\`new\\`, but you can\n\n// unions should be split before deciding if object-like\nfunction makeUnion(): number | { x: string } {\n  return { x: \"x\" };\n}\n(new makeUnion(): { x: string }); // error: \\`number\\` returns {}, missing prop x\n\n`;\n\nexports[`test2.js 1`] = `\ndeclare class D {\n  constructor(): { x: number }; // OK\n  y: any;\n}\n\nvar d = new D();\nd.x = \"\"; // error, string ~/~ number (but property x is found)\n\n(new D: D); // error, new D is an object, D not in proto chain\n\nmodule.exports = D;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class D {\n  constructor(): { x: number }, // OK\n  y: any\n}\n\nvar d = new D();\nd.x = \"\"; // error, string ~/~ number (but property x is found)\n\n(new D(): D); // error, new D is an object, D not in proto chain\n\nmodule.exports = D;\n\n`;\n"
  },
  {
    "path": "tests/flow/return_new/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/return_new/test.js",
    "content": "function Foo() { return {}; }\nvar foo: number = new Foo(); // error (returns object literal above)\n\nfunction Bar() { return 0; }\nvar bar: number = new Bar(); // error (returns new object)\n\nfunction Qux() { }\nvar qux: number = new Qux(); // error (returns new object)\n\nclass A { }\nfunction B() { return new A(); }\nvar a: A = new B(); // OK (returns new A)\n\n// type applications should be applied before deciding if object-like\ntype C<T> = { x: T };\nfunction makeC<T>(x: T): C<T> { return {x}; }\n(new makeC('x'): C<string>); // normally you wouldn't use `new`, but you can\n\n// unions should be split before deciding if object-like\nfunction makeUnion(): number | {x: string} {\n  return {x: 'x'};\n}\n(new makeUnion(): {x: string}); // error: `number` returns {}, missing prop x\n"
  },
  {
    "path": "tests/flow/return_new/test2.js",
    "content": "declare class D {\n  constructor(): { x: number }; // OK\n  y: any;\n}\n\nvar d = new D();\nd.x = \"\"; // error, string ~/~ number (but property x is found)\n\n(new D: D); // error, new D is an object, D not in proto chain\n\nmodule.exports = D;\n"
  },
  {
    "path": "tests/flow/seal/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`imp.js 1`] = `\n/* @flow */\n\nvar imp = require('./obj_annot');\nimp({ name: \"imp\" });\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar imp = require(\"./obj_annot\");\nimp({ name: \"imp\" });\n\n`;\n\nexports[`obj_annot.js 1`] = `\n/* @flow */\n\nfunction foo(param: { name: string; }): number {\n    return param.id;\n}\n\nfoo({ name: \"test\" });\n\nmodule.exports = foo;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction foo(param: { name: string }): number {\n  return param.id;\n}\n\nfoo({ name: \"test\" });\n\nmodule.exports = foo;\n\n`;\n"
  },
  {
    "path": "tests/flow/seal/imp.js",
    "content": "/* @flow */\n\nvar imp = require('./obj_annot');\nimp({ name: \"imp\" });\n"
  },
  {
    "path": "tests/flow/seal/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/seal/obj_annot.js",
    "content": "/* @flow */\n\nfunction foo(param: { name: string; }): number {\n    return param.id;\n}\n\nfoo({ name: \"test\" });\n\nmodule.exports = foo;\n"
  },
  {
    "path": "tests/flow/sealed/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`function.js 1`] = `\n/* @flow */\n\nfunction Bar(x: number) {\n  this.x = x;\n}\nBar.prototype.getX = function() { return this.x; }\nBar.prototype.getY = function(): string { return this.y; }\n\nmodule.exports = Bar;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction Bar(x: number) {\n  this.x = x;\n}\nBar.prototype.getX = function() {\n  return this.x;\n};\nBar.prototype.getY = function(): string {\n  return this.y;\n};\n\nmodule.exports = Bar;\n\n`;\n\nexports[`proto.js 1`] = `\nfunction Foo() { }\nvar o = new Foo();\nvar x:number = o.x;\n\nFoo.prototype.m = function() { return this.x; }\n\nvar y:number = o.m();\no.x = \"...\";\n\nFoo.prototype = { m: function() { return false; } }\n\nvar export_o: { x:any; } = o; // awkward type cast\n\nmodule.exports = export_o;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction Foo() {}\nvar o = new Foo();\nvar x: number = o.x;\n\nFoo.prototype.m = function() {\n  return this.x;\n};\n\nvar y: number = o.m();\no.x = \"...\";\n\nFoo.prototype = {\n  m: function() {\n    return false;\n  }\n};\n\nvar export_o: { x: any } = o; // awkward type cast\n\nmodule.exports = export_o;\n\n`;\n\nexports[`sealed.js 1`] = `\nvar o = require('./proto');\n\no.z = 0;\nvar x:string = o.x;\n\nvar Bar = require('./function');\nvar a = new Bar(234);\na.x = 123;\na.y = 'abc'; // error, needs to be declared in Bar's constructor\n(a.getX(): number);\n(a.getY(): string);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar o = require(\"./proto\");\n\no.z = 0;\nvar x: string = o.x;\n\nvar Bar = require(\"./function\");\nvar a = new Bar(234);\na.x = 123;\na.y = \"abc\"; // error, needs to be declared in Bar's constructor\n(a.getX(): number);\n(a.getY(): string);\n\n`;\n"
  },
  {
    "path": "tests/flow/sealed/function.js",
    "content": "/* @flow */\n\nfunction Bar(x: number) {\n  this.x = x;\n}\nBar.prototype.getX = function() { return this.x; }\nBar.prototype.getY = function(): string { return this.y; }\n\nmodule.exports = Bar;\n"
  },
  {
    "path": "tests/flow/sealed/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/sealed/proto.js",
    "content": "function Foo() { }\nvar o = new Foo();\nvar x:number = o.x;\n\nFoo.prototype.m = function() { return this.x; }\n\nvar y:number = o.m();\no.x = \"...\";\n\nFoo.prototype = { m: function() { return false; } }\n\nvar export_o: { x:any; } = o; // awkward type cast\n\nmodule.exports = export_o;\n"
  },
  {
    "path": "tests/flow/sealed/sealed.js",
    "content": "var o = require('./proto');\n\no.z = 0;\nvar x:string = o.x;\n\nvar Bar = require('./function');\nvar a = new Bar(234);\na.x = 123;\na.y = 'abc'; // error, needs to be declared in Bar's constructor\n(a.getX(): number);\n(a.getY(): string);\n"
  },
  {
    "path": "tests/flow/sealed_objects/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nvar o1 = { x: 0 };\nvar s1: string = o1.y; // error\n\nvar o2: { x: number; y?: string; } = { x: 0 };\nvar s2: string = o2.y || \"\"; // ok\n\nvar o3: { x: number; y?: string; } = ({ x: 0, y: 0 }: { x: number; });\nvar s3: string = o3.y || \"\"; // error\n\nvar o4: { x: number; y?: string; } = ({ x: 0 }: { x: number; [_:any]:any});\nvar s4: string = o4.y || \"\"; // ok\n\nvar o5 = { x: 0, ...{} };\nvar s5: string = o5.y; // ok (spreads make object types extensible)\n\nvar o6: { x: number; [_:any]:any } = { x: 0 };\nvar s6: string = o6.y; // ok  (indexers make object types extensible)\n\nvar o7: { x: number; y?: string; } = ({ x: 0, y: 0 }: { x: number; [_:any]:number}); // error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar o1 = { x: 0 };\nvar s1: string = o1.y; // error\n\nvar o2: { x: number, y?: string } = { x: 0 };\nvar s2: string = o2.y || \"\"; // ok\n\nvar o3: { x: number, y?: string } = ({ x: 0, y: 0 }: { x: number });\nvar s3: string = o3.y || \"\"; // error\n\nvar o4: { x: number, y?: string } = ({ x: 0 }: { x: number, [_: any]: any });\nvar s4: string = o4.y || \"\"; // ok\n\nvar o5 = { x: 0, ...{} };\nvar s5: string = o5.y; // ok (spreads make object types extensible)\n\nvar o6: { x: number, [_: any]: any } = { x: 0 };\nvar s6: string = o6.y; // ok  (indexers make object types extensible)\n\nvar o7: { x: number, y?: string } = ({ x: 0, y: 0 }: {\n  x: number,\n  [_: any]: number\n}); // error\n\n`;\n"
  },
  {
    "path": "tests/flow/sealed_objects/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/sealed_objects/test.js",
    "content": "var o1 = { x: 0 };\nvar s1: string = o1.y; // error\n\nvar o2: { x: number; y?: string; } = { x: 0 };\nvar s2: string = o2.y || \"\"; // ok\n\nvar o3: { x: number; y?: string; } = ({ x: 0, y: 0 }: { x: number; });\nvar s3: string = o3.y || \"\"; // error\n\nvar o4: { x: number; y?: string; } = ({ x: 0 }: { x: number; [_:any]:any});\nvar s4: string = o4.y || \"\"; // ok\n\nvar o5 = { x: 0, ...{} };\nvar s5: string = o5.y; // ok (spreads make object types extensible)\n\nvar o6: { x: number; [_:any]:any } = { x: 0 };\nvar s6: string = o6.y; // ok  (indexers make object types extensible)\n\nvar o7: { x: number; y?: string; } = ({ x: 0, y: 0 }: { x: number; [_:any]:number}); // error\n"
  },
  {
    "path": "tests/flow/shape/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`shadow.js 1`] = `\nvar o = {};\n(o.p: string);\n(o: $Shape<{p:string}>);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar o = {};\n(o.p: string);\n(o: $Shape<{ p: string }>);\n\n`;\n\nexports[`test.js 1`] = `\ntype Foo = {\n  field: number,\n}\n\nvar x: {field?: number} = {};\nvar y: $Shape<Foo> = x;\n(y.field: number)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype Foo = {\n  field: number\n};\n\nvar x: { field?: number } = {};\nvar y: $Shape<Foo> = x;\n(y.field: number);\n\n`;\n"
  },
  {
    "path": "tests/flow/shape/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/shape/shadow.js",
    "content": "var o = {};\n(o.p: string);\n(o: $Shape<{p:string}>);\n"
  },
  {
    "path": "tests/flow/shape/test.js",
    "content": "type Foo = {\n  field: number,\n}\n\nvar x: {field?: number} = {};\nvar y: $Shape<Foo> = x;\n(y.field: number)\n"
  },
  {
    "path": "tests/flow/simple_arrays/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`array.js 1`] = `\n/* @flow */\nvar a = [];\nfor (var i = 0; i < 10; ++i) {\n    if (i % 2 == 0) { a[i] = 0; }\n    else { a[i] = ''; };\n}\n\n// \\`i\\` never gets a lower bound, so the array access is stalled until the\n// function is called.\nfunction foo(i): string { return a[i]; }\n\n// here, because we call \\`bar\\`, we the array access constraint is discharged and\n// we realize a type error.\nfunction bar(i): string { return a[i]; }\nbar(0);\n\n// annotations suffice to unblock the access constraint as well, so only\n// uncalled internal functions will not find a type error, which is acceptable\n// behavior as such functions are dead code.\nfunction baz(i:number): string { return a[i]; }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nvar a = [];\nfor (var i = 0; i < 10; ++i) {\n  if (i % 2 == 0) {\n    a[i] = 0;\n  } else {\n    a[i] = \"\";\n  }\n}\n\n// \\`i\\` never gets a lower bound, so the array access is stalled until the\n// function is called.\nfunction foo(i): string {\n  return a[i];\n}\n\n// here, because we call \\`bar\\`, we the array access constraint is discharged and\n// we realize a type error.\nfunction bar(i): string {\n  return a[i];\n}\nbar(0);\n\n// annotations suffice to unblock the access constraint as well, so only\n// uncalled internal functions will not find a type error, which is acceptable\n// behavior as such functions are dead code.\nfunction baz(i: number): string {\n  return a[i];\n}\n\n`;\n\nexports[`array2.js 1`] = `\n/* @flow */\nvar a = [];\nfor (var i = 0; i < 10; ++i) {\n    if (i % 2 == 0) { a[i] = 0; }\n    else { a[i] = ''; };\n}\n\nfunction foo(i: number): string { return a[i]; }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nvar a = [];\nfor (var i = 0; i < 10; ++i) {\n  if (i % 2 == 0) {\n    a[i] = 0;\n  } else {\n    a[i] = \"\";\n  }\n}\n\nfunction foo(i: number): string {\n  return a[i];\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/simple_arrays/array.js",
    "content": "/* @flow */\nvar a = [];\nfor (var i = 0; i < 10; ++i) {\n    if (i % 2 == 0) { a[i] = 0; }\n    else { a[i] = ''; };\n}\n\n// `i` never gets a lower bound, so the array access is stalled until the\n// function is called.\nfunction foo(i): string { return a[i]; }\n\n// here, because we call `bar`, we the array access constraint is discharged and\n// we realize a type error.\nfunction bar(i): string { return a[i]; }\nbar(0);\n\n// annotations suffice to unblock the access constraint as well, so only\n// uncalled internal functions will not find a type error, which is acceptable\n// behavior as such functions are dead code.\nfunction baz(i:number): string { return a[i]; }\n"
  },
  {
    "path": "tests/flow/simple_arrays/array2.js",
    "content": "/* @flow */\nvar a = [];\nfor (var i = 0; i < 10; ++i) {\n    if (i % 2 == 0) { a[i] = 0; }\n    else { a[i] = ''; };\n}\n\nfunction foo(i: number): string { return a[i]; }\n"
  },
  {
    "path": "tests/flow/simple_arrays/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/singleton/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`boolean.js 1`] = `\n/* @flow */\n\nfunction veryOptimistic(isThisAwesome: true): boolean {\n  return isThisAwesome;\n}\n\nvar x : boolean = veryOptimistic(true);\nvar y : boolean = veryOptimistic(false); // error\n\nfunction veryPessimistic(isThisAwesome: true): boolean {\n  return !isThisAwesome; // test bool conversion\n}\n\nvar x : boolean = veryPessimistic(true);\nvar y : boolean = veryPessimistic(false); // error\n\ntype MyOwnBooleanLOL = true | false\n\nfunction bar(x: MyOwnBooleanLOL): false {\n  if (x) {\n    return x;\n  } else {\n    return !x;\n  }\n}\n\nbar(true);\nbar(false);\nbar(1); // error\n\nfunction alwaysFalsy(x: boolean): false {\n  if (x) {\n    return !x;\n  } else {\n    return x;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction veryOptimistic(isThisAwesome: true): boolean {\n  return isThisAwesome;\n}\n\nvar x: boolean = veryOptimistic(true);\nvar y: boolean = veryOptimistic(false); // error\n\nfunction veryPessimistic(isThisAwesome: true): boolean {\n  return !isThisAwesome; // test bool conversion\n}\n\nvar x: boolean = veryPessimistic(true);\nvar y: boolean = veryPessimistic(false); // error\n\ntype MyOwnBooleanLOL = true | false;\n\nfunction bar(x: MyOwnBooleanLOL): false {\n  if (x) {\n    return x;\n  } else {\n    return !x;\n  }\n}\n\nbar(true);\nbar(false);\nbar(1); // error\n\nfunction alwaysFalsy(x: boolean): false {\n  if (x) {\n    return !x;\n  } else {\n    return x;\n  }\n}\n\n`;\n\nexports[`number.js 1`] = `\n/* @flow */\n\nfunction highlander(howMany: 1): number {\n  return howMany; // there can be only one!\n}\n\nhighlander(1);\nhighlander(2); // error\n\n\ntype Foo = 1 | 2\n\nfunction bar(num: Foo): number {\n  return num + 1;\n}\n\nbar(1);\nbar(2);\nbar(3); // error\n\ntype ComparatorResult = -1 | 0 | 1\nfunction sort(fn: (x: any, y: any) => ComparatorResult) {}\nsort((x, y) => -1);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction highlander(howMany: 1): number {\n  return howMany; // there can be only one!\n}\n\nhighlander(1);\nhighlander(2); // error\n\ntype Foo = 1 | 2;\n\nfunction bar(num: Foo): number {\n  return num + 1;\n}\n\nbar(1);\nbar(2);\nbar(3); // error\n\ntype ComparatorResult = -1 | 0 | 1;\nfunction sort(fn: (x: any, y: any) => ComparatorResult) {}\nsort((x, y) => -1);\n\n`;\n\nexports[`string.js 1`] = `\n/* @flow */\n\ntype NoSpaces = \"foobar\"\n(\"foobar\": NoSpaces);\n\ntype HasSpaces = \"foo bar\"\n(\"foo bar\": HasSpaces);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\ntype NoSpaces = \"foobar\";\n(\"foobar\": NoSpaces);\n\ntype HasSpaces = \"foo bar\";\n(\"foo bar\": HasSpaces);\n\n`;\n"
  },
  {
    "path": "tests/flow/singleton/boolean.js",
    "content": "/* @flow */\n\nfunction veryOptimistic(isThisAwesome: true): boolean {\n  return isThisAwesome;\n}\n\nvar x : boolean = veryOptimistic(true);\nvar y : boolean = veryOptimistic(false); // error\n\nfunction veryPessimistic(isThisAwesome: true): boolean {\n  return !isThisAwesome; // test bool conversion\n}\n\nvar x : boolean = veryPessimistic(true);\nvar y : boolean = veryPessimistic(false); // error\n\ntype MyOwnBooleanLOL = true | false\n\nfunction bar(x: MyOwnBooleanLOL): false {\n  if (x) {\n    return x;\n  } else {\n    return !x;\n  }\n}\n\nbar(true);\nbar(false);\nbar(1); // error\n\nfunction alwaysFalsy(x: boolean): false {\n  if (x) {\n    return !x;\n  } else {\n    return x;\n  }\n}\n"
  },
  {
    "path": "tests/flow/singleton/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/singleton/number.js",
    "content": "/* @flow */\n\nfunction highlander(howMany: 1): number {\n  return howMany; // there can be only one!\n}\n\nhighlander(1);\nhighlander(2); // error\n\n\ntype Foo = 1 | 2\n\nfunction bar(num: Foo): number {\n  return num + 1;\n}\n\nbar(1);\nbar(2);\nbar(3); // error\n\ntype ComparatorResult = -1 | 0 | 1\nfunction sort(fn: (x: any, y: any) => ComparatorResult) {}\nsort((x, y) => -1);\n"
  },
  {
    "path": "tests/flow/singleton/string.js",
    "content": "/* @flow */\n\ntype NoSpaces = \"foobar\"\n(\"foobar\": NoSpaces);\n\ntype HasSpaces = \"foo bar\"\n(\"foo bar\": HasSpaces);\n"
  },
  {
    "path": "tests/flow/spread/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nfunction parseTimestamp(timestamp: string): number {\n    return 0;\n}\n\nfunction parseCounter(line: string): number {\n    return 0;\n}\n\nfunction parseGroup(lines: Array<string>): {\n    counter: number;\n    begin: number;\n    end: number;\n    text: string;\n} {\n    var counter = parseCounter(lines[0]);\n    var timeframe = parseTimeframe(lines[1]);\n    return {\n        counter,\n        ...timeframe,\n        text: lines[2]\n    };\n}\n\nfunction parseTimeframe(line: string): { begin: number; end: number } {\n    var timestamps = line.split('-->');\n    return {\n        begin: parseTimestamp(timestamps[0].trim()),\n        end: parseTimestamp(timestamps[1].trim())\n    };\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction parseTimestamp(timestamp: string): number {\n  return 0;\n}\n\nfunction parseCounter(line: string): number {\n  return 0;\n}\n\nfunction parseGroup(\n  lines: Array<string>\n): {\n  counter: number,\n  begin: number,\n  end: number,\n  text: string\n} {\n  var counter = parseCounter(lines[0]);\n  var timeframe = parseTimeframe(lines[1]);\n  return {\n    counter,\n    ...timeframe,\n    text: lines[2]\n  };\n}\n\nfunction parseTimeframe(line: string): { begin: number, end: number } {\n  var timestamps = line.split(\"-->\");\n  return {\n    begin: parseTimestamp(timestamps[0].trim()),\n    end: parseTimestamp(timestamps[1].trim())\n  };\n}\n\n`;\n\nexports[`test2.js 1`] = `\n/**\n * @flow\n */\n\nfunction foo(o) {\n    bar({...o});\n}\nfunction bar(_: {foo:number}) { }\nfoo({foo: 42});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nfunction foo(o) {\n  bar({ ...o });\n}\nfunction bar(_: { foo: number }) {}\nfoo({ foo: 42 });\n\n`;\n\nexports[`test3.js 1`] = `\nvar p = { y: \"\" };\nvar q = { z: \"\" };\nvar o = {\n  x: 5,\n  ...p,\n  ...q,\n};\nvar y: number = o.y;\nvar z: number = o.z;\n\n// test conflicting keys (they get unioned)\nvar r = { y: 123 };\nvar s = {\n  ...p,\n  ...r,\n};\nvar t: boolean = s.y; // error, string or number\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar p = { y: \"\" };\nvar q = { z: \"\" };\nvar o = {\n  x: 5,\n  ...p,\n  ...q\n};\nvar y: number = o.y;\nvar z: number = o.z;\n\n// test conflicting keys (they get unioned)\nvar r = { y: 123 };\nvar s = {\n  ...p,\n  ...r\n};\nvar t: boolean = s.y; // error, string or number\n\n`;\n\nexports[`test4.js 1`] = `\n/* @flow */\nfunction test(...nums: Array<number>) {}\n\ntest(0, ...[1, 2, 3]);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nfunction test(...nums: Array<number>) {}\n\ntest(0, ...[1, 2, 3]);\n\n`;\n\nexports[`test5.js 1`] = `\n/* @flow */\n\ndeclare function map<Tv, TNext>(\n  obj: {[key: string]: Tv},\n  iterator:((obj: Tv) => TNext),\n): Array<TNext>;\n\n/**\n * Tests overriding a property via a spread, where the value is a tvar. the\n * type of the prop from the object that is being overridden (\\`x.kind\\` in the\n * case below) should //not// feed back into the tvar (\\`value\\`), since the\n * result is a new object.\n */\nfunction test(\n  x: {kind: ?string},\n  kinds: {[key: string]: string}\n): Array<{kind: ?string}> {\n  return map(kinds, (value) => {\n    (value: string); // OK\n    return {\n      ...x,\n      kind: value,\n    };\n  });\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\ndeclare function map<Tv, TNext>(\n  obj: { [key: string]: Tv },\n  iterator: (obj: Tv) => TNext\n): Array<TNext>;\n\n/**\n * Tests overriding a property via a spread, where the value is a tvar. the\n * type of the prop from the object that is being overridden (\\`x.kind\\` in the\n * case below) should //not// feed back into the tvar (\\`value\\`), since the\n * result is a new object.\n */\nfunction test(\n  x: { kind: ?string },\n  kinds: { [key: string]: string }\n): Array<{ kind: ?string }> {\n  return map(kinds, value => {\n    (value: string); // OK\n    return {\n      ...x,\n      kind: value\n    };\n  });\n}\n\n`;\n\nexports[`test6.js 1`] = `\nvar o = {\n  foo: 'bar'\n};\no = {...o};\n(o: {foo: string});\n\nvar p = {\n  foo: 'bar'\n};\n(p: {foo: string; abc: string}); // error, p doesn't have \\`abc\\` yet\np = {...p, abc: 'def'};\n(p: {foo: string; abc: string});\n\nvar q = {\n  foo: 'bar'\n};\nfor (var i = 0; i < 10; i++) {\n  q = {...q};\n}\n(q: {foo: string});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar o = {\n  foo: \"bar\"\n};\no = { ...o };\n(o: { foo: string });\n\nvar p = {\n  foo: \"bar\"\n};\n(p: { foo: string, abc: string }); // error, p doesn't have \\`abc\\` yet\np = { ...p, abc: \"def\" };\n(p: { foo: string, abc: string });\n\nvar q = {\n  foo: \"bar\"\n};\nfor (var i = 0; i < 10; i++) {\n  q = { ...q };\n}\n(q: { foo: string });\n\n`;\n\nexports[`test7.js 1`] = `\n// @flow\n\nlet tests = [\n  function(x: Object) {\n    ({...x}: Object);\n    ({...x}: void); // error, Object\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  function(x: Object) {\n    ({ ...x }: Object);\n    ({ ...x }: void); // error, Object\n  }\n];\n\n`;\n"
  },
  {
    "path": "tests/flow/spread/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/spread/test.js",
    "content": "function parseTimestamp(timestamp: string): number {\n    return 0;\n}\n\nfunction parseCounter(line: string): number {\n    return 0;\n}\n\nfunction parseGroup(lines: Array<string>): {\n    counter: number;\n    begin: number;\n    end: number;\n    text: string;\n} {\n    var counter = parseCounter(lines[0]);\n    var timeframe = parseTimeframe(lines[1]);\n    return {\n        counter,\n        ...timeframe,\n        text: lines[2]\n    };\n}\n\nfunction parseTimeframe(line: string): { begin: number; end: number } {\n    var timestamps = line.split('-->');\n    return {\n        begin: parseTimestamp(timestamps[0].trim()),\n        end: parseTimestamp(timestamps[1].trim())\n    };\n}\n"
  },
  {
    "path": "tests/flow/spread/test2.js",
    "content": "/**\n * @flow\n */\n\nfunction foo(o) {\n    bar({...o});\n}\nfunction bar(_: {foo:number}) { }\nfoo({foo: 42});\n"
  },
  {
    "path": "tests/flow/spread/test3.js",
    "content": "var p = { y: \"\" };\nvar q = { z: \"\" };\nvar o = {\n  x: 5,\n  ...p,\n  ...q,\n};\nvar y: number = o.y;\nvar z: number = o.z;\n\n// test conflicting keys (they get unioned)\nvar r = { y: 123 };\nvar s = {\n  ...p,\n  ...r,\n};\nvar t: boolean = s.y; // error, string or number\n"
  },
  {
    "path": "tests/flow/spread/test4.js",
    "content": "/* @flow */\nfunction test(...nums: Array<number>) {}\n\ntest(0, ...[1, 2, 3]);\n"
  },
  {
    "path": "tests/flow/spread/test5.js",
    "content": "/* @flow */\n\ndeclare function map<Tv, TNext>(\n  obj: {[key: string]: Tv},\n  iterator:((obj: Tv) => TNext),\n): Array<TNext>;\n\n/**\n * Tests overriding a property via a spread, where the value is a tvar. the\n * type of the prop from the object that is being overridden (`x.kind` in the\n * case below) should //not// feed back into the tvar (`value`), since the\n * result is a new object.\n */\nfunction test(\n  x: {kind: ?string},\n  kinds: {[key: string]: string}\n): Array<{kind: ?string}> {\n  return map(kinds, (value) => {\n    (value: string); // OK\n    return {\n      ...x,\n      kind: value,\n    };\n  });\n}\n"
  },
  {
    "path": "tests/flow/spread/test6.js",
    "content": "var o = {\n  foo: 'bar'\n};\no = {...o};\n(o: {foo: string});\n\nvar p = {\n  foo: 'bar'\n};\n(p: {foo: string; abc: string}); // error, p doesn't have `abc` yet\np = {...p, abc: 'def'};\n(p: {foo: string; abc: string});\n\nvar q = {\n  foo: 'bar'\n};\nfor (var i = 0; i < 10; i++) {\n  q = {...q};\n}\n(q: {foo: string});\n"
  },
  {
    "path": "tests/flow/spread/test7.js",
    "content": "// @flow\n\nlet tests = [\n  function(x: Object) {\n    ({...x}: Object);\n    ({...x}: void); // error, Object\n  },\n];\n"
  },
  {
    "path": "tests/flow/static_overload/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nvar x: number = StaticOverload.foo(0);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x: number = StaticOverload.foo(0);\n\n`;\n"
  },
  {
    "path": "tests/flow/static_overload/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/static_overload/lib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`lib.js 1`] = `\ndeclare class StaticOverload {\n  static foo(x: number): number;\n  static foo(x: string): string;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class StaticOverload {\n  static foo(x: number): number,\n  static foo(x: string): string\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/static_overload/lib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/static_overload/lib/lib.js",
    "content": "declare class StaticOverload {\n  static foo(x: number): number;\n  static foo(x: string): string;\n}\n"
  },
  {
    "path": "tests/flow/static_overload/test.js",
    "content": "var x: number = StaticOverload.foo(0);\n"
  },
  {
    "path": "tests/flow/statics/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`class_statics.js 1`] = `\nclass C {\n  static f(x:number) { }\n  static x:string;\n}\n\nC.g = function(x:string) { C.f(x); };\nC.g(0);\n\nvar x:number = C.x;\nC.x = 0;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {\n  static f(x: number) {}\n  static x: string;\n}\n\nC.g = function(x: string) {\n  C.f(x);\n};\nC.g(0);\n\nvar x: number = C.x;\nC.x = 0;\n\n`;\n\nexports[`funstatics.js 1`] = `\nfunction C() { }\nC.prototype.f = function() { return C.g(0); }\nC.g = function(x) { return x; };\n\nvar x:string = new C().f();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction C() {}\nC.prototype.f = function() {\n  return C.g(0);\n};\nC.g = function(x) {\n  return x;\n};\n\nvar x: string = new C().f();\n\n`;\n"
  },
  {
    "path": "tests/flow/statics/class_statics.js",
    "content": "class C {\n  static f(x:number) { }\n  static x:string;\n}\n\nC.g = function(x:string) { C.f(x); };\nC.g(0);\n\nvar x:number = C.x;\nC.x = 0;"
  },
  {
    "path": "tests/flow/statics/funstatics.js",
    "content": "function C() { }\nC.prototype.f = function() { return C.g(0); }\nC.g = function(x) { return x; };\n\nvar x:string = new C().f();\n"
  },
  {
    "path": "tests/flow/statics/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/strict/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`annot.js 1`] = `\nvar A = require('./unknown_class');\n\nclass B extends A {\n  foo(x:A):A { return x; }\n  bar(x) { }\n  qux<X,Y>(x:X,y:Y):X { return x;}\n}\n\nmodule.exports = B;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar A = require(\"./unknown_class\");\n\nclass B extends A {\n  foo(x: A): A {\n    return x;\n  }\n  bar(x) {}\n  qux<X, Y>(x: X, y: Y): X {\n    return x;\n  }\n}\n\nmodule.exports = B;\n\n`;\n\nexports[`fun.js 1`] = `\n/**\n * @flow\n */\n\n// progressively annotate:\n\n//function f(x) { return x; }\nfunction f(x:number) { return x; }\n//function f(x:number):string { return x; }\n\nvar x:string = f(0);\n\nmodule.exports = f;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\n// progressively annotate:\n\n//function f(x) { return x; }\nfunction f(x: number) {\n  return x;\n}\n//function f(x:number):string { return x; }\n\nvar x: string = f(0);\n\nmodule.exports = f;\n\n`;\n\nexports[`obj.js 1`] = `\n/**\n * @flow\n */\n\n// progressively annotate:\n\nvar o = { x: 0 }\n//var o: {x: number;} = { x: 0 }\n\nvar x:string = o.x;\n\nmodule.exports = o;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\n// progressively annotate:\n\nvar o = { x: 0 };\n//var o: {x: number;} = { x: 0 }\n\nvar x: string = o.x;\n\nmodule.exports = o;\n\n`;\n"
  },
  {
    "path": "tests/flow/strict/annot.js",
    "content": "var A = require('./unknown_class');\n\nclass B extends A {\n  foo(x:A):A { return x; }\n  bar(x) { }\n  qux<X,Y>(x:X,y:Y):X { return x;}\n}\n\nmodule.exports = B;\n"
  },
  {
    "path": "tests/flow/strict/fun.js",
    "content": "/**\n * @flow\n */\n\n// progressively annotate:\n\n//function f(x) { return x; }\nfunction f(x:number) { return x; }\n//function f(x:number):string { return x; }\n\nvar x:string = f(0);\n\nmodule.exports = f;\n"
  },
  {
    "path": "tests/flow/strict/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/strict/obj.js",
    "content": "/**\n * @flow\n */\n\n// progressively annotate:\n\nvar o = { x: 0 }\n//var o: {x: number;} = { x: 0 }\n\nvar x:string = o.x;\n\nmodule.exports = o;\n"
  },
  {
    "path": "tests/flow/strict_requires/A.js",
    "content": "/* @flow */\nmodule.exports = 0;\n"
  },
  {
    "path": "tests/flow/strict_requires/B.js",
    "content": "/* @flow */\nmodule.exports = { foo: \"\" }\n"
  },
  {
    "path": "tests/flow/strict_requires/C.js",
    "content": "/* @flow */\nvar o = {\n    A: require('./A'),\n    ...require('./B'),\n};\nmodule.exports = o;\n"
  },
  {
    "path": "tests/flow/strict_requires/D.js",
    "content": "/* @flow */\nvar C = require('./C');\nvar x: number = C.foo;\nvar y: string = C.A;\nC.A = false;\n"
  },
  {
    "path": "tests/flow/strict_requires/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\n/* @flow */\nmodule.exports = 0;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nmodule.exports = 0;\n\n`;\n\nexports[`B.js 1`] = `\n/* @flow */\nmodule.exports = { foo: \"\" }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nmodule.exports = { foo: \"\" };\n\n`;\n\nexports[`C.js 1`] = `\n/* @flow */\nvar o = {\n    A: require('./A'),\n    ...require('./B'),\n};\nmodule.exports = o;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nvar o = {\n  A: require(\"./A\"),\n  ...require(\"./B\")\n};\nmodule.exports = o;\n\n`;\n\nexports[`D.js 1`] = `\n/* @flow */\nvar C = require('./C');\nvar x: number = C.foo;\nvar y: string = C.A;\nC.A = false;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nvar C = require(\"./C\");\nvar x: number = C.foo;\nvar y: string = C.A;\nC.A = false;\n\n`;\n"
  },
  {
    "path": "tests/flow/strict_requires/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/structural_subtyping/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`builtin.js 1`] = `\n/**\n * @flow\n */\n\ninterface IHasLength {\n  length: number;\n}\n\nvar lengthTest1: IHasLength = [];\nvar lengthTest2: IHasLength = 'hello';\nvar lengthTest3: IHasLength = 123; // number doesn't have length\nvar lengthTest4: IHasLength = true; // bool doesn't have length\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\ninterface IHasLength {\n  length: number\n}\n\nvar lengthTest1: IHasLength = [];\nvar lengthTest2: IHasLength = \"hello\";\nvar lengthTest3: IHasLength = 123; // number doesn't have length\nvar lengthTest4: IHasLength = true; // bool doesn't have length\n\n`;\n\nexports[`class.js 1`] = `\n/**\n * @flow\n */\n\nclass ClassWithXString {\n  x: string;\n}\n\ninterface IHasXString {\n  x: string;\n}\n\ninterface IHasXNumber {\n  x: number;\n}\n\ninterface IHasYString {\n  y: string;\n}\n\nvar testInstance1: IHasXString = new ClassWithXString();\nvar testInstance2: IHasXNumber = new ClassWithXString(); // Error wrong type\nvar testInstance3: IHasYString = new ClassWithXString(); // Error missing prop\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nclass ClassWithXString {\n  x: string;\n}\n\ninterface IHasXString {\n  x: string\n}\n\ninterface IHasXNumber {\n  x: number\n}\n\ninterface IHasYString {\n  y: string\n}\n\nvar testInstance1: IHasXString = new ClassWithXString();\nvar testInstance2: IHasXNumber = new ClassWithXString(); // Error wrong type\nvar testInstance3: IHasYString = new ClassWithXString(); // Error missing prop\n\n`;\n\nexports[`obj.js 1`] = `\n/**\n * @flow\n */\n\ninterface IHasXString {\n  x: string;\n}\n\nvar propTest1: IHasXString = { x: 'hello' };\nvar propTest2: IHasXString = { x: 123 }; // Error string != number\nvar propTest3: IHasXString = {}; // Property not found\nvar propTest4: IHasXString = ({}: Object);\n\nfunction propTest5(y: {[key: string]: string}) {\n  (y: IHasXString); // OK\n}\n\nfunction propTest6(y: {[key: string]: number}) {\n  (y: IHasXString); // error: string != number\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\ninterface IHasXString {\n  x: string\n}\n\nvar propTest1: IHasXString = { x: \"hello\" };\nvar propTest2: IHasXString = { x: 123 }; // Error string != number\nvar propTest3: IHasXString = {}; // Property not found\nvar propTest4: IHasXString = ({}: Object);\n\nfunction propTest5(y: { [key: string]: string }) {\n  (y: IHasXString); // OK\n}\n\nfunction propTest6(y: { [key: string]: number }) {\n  (y: IHasXString); // error: string != number\n}\n\n`;\n\nexports[`optional.js 1`] = `\n/* @flow */\n\ninterface HasOptional {\n  a: string,\n  b?: number,\n};\n\nvar test1: HasOptional = { a: \"hello\" }\n\nvar test2: HasOptional = {}; // Error: missing property a\n\nvar test3: HasOptional = { a: \"hello\", b: true }; // Error: boolean ~> number\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\ninterface HasOptional {\n  a: string,\n  b?: number\n}\n\nvar test1: HasOptional = { a: \"hello\" };\n\nvar test2: HasOptional = {}; // Error: missing property a\n\nvar test3: HasOptional = { a: \"hello\", b: true }; // Error: boolean ~> number\n\n`;\n"
  },
  {
    "path": "tests/flow/structural_subtyping/builtin.js",
    "content": "/**\n * @flow\n */\n\ninterface IHasLength {\n  length: number;\n}\n\nvar lengthTest1: IHasLength = [];\nvar lengthTest2: IHasLength = 'hello';\nvar lengthTest3: IHasLength = 123; // number doesn't have length\nvar lengthTest4: IHasLength = true; // bool doesn't have length\n"
  },
  {
    "path": "tests/flow/structural_subtyping/class.js",
    "content": "/**\n * @flow\n */\n\nclass ClassWithXString {\n  x: string;\n}\n\ninterface IHasXString {\n  x: string;\n}\n\ninterface IHasXNumber {\n  x: number;\n}\n\ninterface IHasYString {\n  y: string;\n}\n\nvar testInstance1: IHasXString = new ClassWithXString();\nvar testInstance2: IHasXNumber = new ClassWithXString(); // Error wrong type\nvar testInstance3: IHasYString = new ClassWithXString(); // Error missing prop\n"
  },
  {
    "path": "tests/flow/structural_subtyping/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/structural_subtyping/obj.js",
    "content": "/**\n * @flow\n */\n\ninterface IHasXString {\n  x: string;\n}\n\nvar propTest1: IHasXString = { x: 'hello' };\nvar propTest2: IHasXString = { x: 123 }; // Error string != number\nvar propTest3: IHasXString = {}; // Property not found\nvar propTest4: IHasXString = ({}: Object);\n\nfunction propTest5(y: {[key: string]: string}) {\n  (y: IHasXString); // OK\n}\n\nfunction propTest6(y: {[key: string]: number}) {\n  (y: IHasXString); // error: string != number\n}\n"
  },
  {
    "path": "tests/flow/structural_subtyping/optional.js",
    "content": "/* @flow */\n\ninterface HasOptional {\n  a: string,\n  b?: number,\n};\n\nvar test1: HasOptional = { a: \"hello\" }\n\nvar test2: HasOptional = {}; // Error: missing property a\n\nvar test3: HasOptional = { a: \"hello\", b: true }; // Error: boolean ~> number\n"
  },
  {
    "path": "tests/flow/suggest/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`lib.js 1`] = `\n/* @flow */\n\nfunction bar(w: number): number { return w; }\n\nmodule.exports = bar;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction bar(w: number): number {\n  return w;\n}\n\nmodule.exports = bar;\n\n`;\n\nexports[`suggest.js 1`] = `\n/* @flow */\n\nvar bar = require('./lib');\n\nfunction foo(z: number) { return bar(z); }\n\nvar array = [\"foo\", \"bar\"];\narray;\n\nmodule.exports = {foo:foo};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar bar = require(\"./lib\");\n\nfunction foo(z: number) {\n  return bar(z);\n}\n\nvar array = [\"foo\", \"bar\"];\narray;\n\nmodule.exports = { foo: foo };\n\n`;\n"
  },
  {
    "path": "tests/flow/suggest/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/suggest/lib.js",
    "content": "/* @flow */\n\nfunction bar(w: number): number { return w; }\n\nmodule.exports = bar;\n"
  },
  {
    "path": "tests/flow/suggest/suggest.js",
    "content": "/* @flow */\n\nvar bar = require('./lib');\n\nfunction foo(z: number) { return bar(z); }\n\nvar array = [\"foo\", \"bar\"];\narray;\n\nmodule.exports = {foo:foo};\n"
  },
  {
    "path": "tests/flow/super/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`constructor.js 1`] = `\nclass A { x: number; }\n\nclass B {\n  x: number;\n  constructor() {\n    this.x; // OK\n  }\n}\n\nclass C extends A { }\n\nclass D extends A {\n  y: number;\n  constructor() {\n    this.y; // error (no super call)\n    this.x; // error (no super call)\n  }\n}\n\nclass E extends A {\n  y: number;\n  constructor() {\n    super();\n    this.y; // OK\n    this.x; // OK\n  }\n}\n\nfunction leak(f) {\n  f.y; // error\n  f.x; // error\n}\nclass F extends A {\n  y: number;\n  constructor() {\n    leak(this); // error (no super call yet)\n    super();\n    this.y;\n    this.x;\n  }\n}\n\nclass G extends A {\n  constructor(b) {\n    super.x; // error (no super call)\n  }\n}\n\nclass H extends A {\n  y: number;\n  constructor() {\n    if (Math.random() < 0.5)\n      super();\n    else\n      super();\n    this.y; // OK\n    this.x; // OK\n  }\n}\n\nclass I_ {\n  constructor(leaked_this) {\n    leaked_this.foo()\n  }\n  foo() { }\n}\nclass I extends I_ {\n  constructor() {\n    super(this); // error (no super call yet)\n  }\n}\n\nclass J__ { }\nclass J_ extends J__ {\n  constructor(closure_leaking_this) {\n    closure_leaking_this();\n    super();\n  }\n  foo() { }\n}\nclass J extends J_ {\n  constructor() {\n    super(() => this.foo()); // error (no super call yet)\n    // The reason for this error is that super constructor could call the\n    // closure and therefore access this before calling its own super\n    // constructor (as shown above). The only safe thing to do in the super\n    // constructor is to save the closure so that it can be called later, after\n    // initialization is done (as shown below).\n  }\n}\n\nclass K_ {\n  closure_leaking_this: () => void;\n  constructor(closure_leaking_this) {\n    this.closure_leaking_this = closure_leaking_this;\n  }\n  foo() { }\n}\nclass K extends K_ {\n  constructor() {\n    super(() => { if (_this) _this.foo() }); // OK\n    var _this = this;\n    this.closure_leaking_this();\n  }\n}\n\n// even though super() calls the parent's constructor(), it does not do the same\n// conversion on non-objects. so \\`new L_()\\` returns an instance of \\`L_\\` because\n// the constructor returns false (a non-object), but \\`super()\\` returns false,\n// which then similarly causes \\`new L()\\` to return an instance of \\`L\\`.\nclass L_ {\n  constructor() {\n    return false;\n  }\n}\nclass L extends L_ {\n  constructor() {\n    let x: boolean = super();\n    return x;\n  }\n}\n(new L_(): L_);\n(new L(): L);\n\n// similarly, the converse is true: if the parent's constructor returns an\n// object, then the child does too.\nclass M_ {\n  constructor() {\n    return {foo: 'foo'};\n  }\n}\nclass M extends M_ {\n  constructor() {\n    return super();\n  }\n}\n(new M_(): {foo: string});\n(new M(): {foo: string});\n\n// however! super() calls the parent constructor with the subclass as its \\`this\\`\n// value (essentially \\`super.constructor.call(this)\\`).\nclass N_ {\n  constructor(): this {\n    let x = this;\n    return x;\n  }\n}\nclass N extends N_ {\n  constructor() {\n    return super();\n  }\n}\n(new N_(): N_);\n(new N(): N);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {\n  x: number;\n}\n\nclass B {\n  x: number;\n  constructor() {\n    this.x; // OK\n  }\n}\n\nclass C extends A {}\n\nclass D extends A {\n  y: number;\n  constructor() {\n    this.y; // error (no super call)\n    this.x; // error (no super call)\n  }\n}\n\nclass E extends A {\n  y: number;\n  constructor() {\n    super();\n    this.y; // OK\n    this.x; // OK\n  }\n}\n\nfunction leak(f) {\n  f.y; // error\n  f.x; // error\n}\nclass F extends A {\n  y: number;\n  constructor() {\n    leak(this); // error (no super call yet)\n    super();\n    this.y;\n    this.x;\n  }\n}\n\nclass G extends A {\n  constructor(b) {\n    super.x; // error (no super call)\n  }\n}\n\nclass H extends A {\n  y: number;\n  constructor() {\n    if (Math.random() < 0.5) super();\n    else super();\n    this.y; // OK\n    this.x; // OK\n  }\n}\n\nclass I_ {\n  constructor(leaked_this) {\n    leaked_this.foo();\n  }\n  foo() {}\n}\nclass I extends I_ {\n  constructor() {\n    super(this); // error (no super call yet)\n  }\n}\n\nclass J__ {}\nclass J_ extends J__ {\n  constructor(closure_leaking_this) {\n    closure_leaking_this();\n    super();\n  }\n  foo() {}\n}\nclass J extends J_ {\n  constructor() {\n    super(() => this.foo()); // error (no super call yet)\n    // The reason for this error is that super constructor could call the\n    // closure and therefore access this before calling its own super\n    // constructor (as shown above). The only safe thing to do in the super\n    // constructor is to save the closure so that it can be called later, after\n    // initialization is done (as shown below).\n  }\n}\n\nclass K_ {\n  closure_leaking_this: () => void;\n  constructor(closure_leaking_this) {\n    this.closure_leaking_this = closure_leaking_this;\n  }\n  foo() {}\n}\nclass K extends K_ {\n  constructor() {\n    super(() => {\n      if (_this) _this.foo();\n    }); // OK\n    var _this = this;\n    this.closure_leaking_this();\n  }\n}\n\n// even though super() calls the parent's constructor(), it does not do the same\n// conversion on non-objects. so \\`new L_()\\` returns an instance of \\`L_\\` because\n// the constructor returns false (a non-object), but \\`super()\\` returns false,\n// which then similarly causes \\`new L()\\` to return an instance of \\`L\\`.\nclass L_ {\n  constructor() {\n    return false;\n  }\n}\nclass L extends L_ {\n  constructor() {\n    let x: boolean = super();\n    return x;\n  }\n}\n(new L_(): L_);\n(new L(): L);\n\n// similarly, the converse is true: if the parent's constructor returns an\n// object, then the child does too.\nclass M_ {\n  constructor() {\n    return { foo: \"foo\" };\n  }\n}\nclass M extends M_ {\n  constructor() {\n    return super();\n  }\n}\n(new M_(): { foo: string });\n(new M(): { foo: string });\n\n// however! super() calls the parent constructor with the subclass as its \\`this\\`\n// value (essentially \\`super.constructor.call(this)\\`).\nclass N_ {\n  constructor(): this {\n    let x = this;\n    return x;\n  }\n}\nclass N extends N_ {\n  constructor() {\n    return super();\n  }\n}\n(new N_(): N_);\n(new N(): N);\n\n`;\n\nexports[`import.js 1`] = `\nclass D {\n  foo(): number { return 0; }\n}\nmodule.exports = D;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass D {\n  foo(): number {\n    return 0;\n  }\n}\nmodule.exports = D;\n\n`;\n\nexports[`super.js 1`] = `\n\nclass A {\n  constructor(x:number) { }\n  static staticMethod(x:string): string { return x; }\n  f(x:string) { }\n}\n\nclass B extends A {\n  constructor(x:string,y:number) {\n    super(x);\n  }\n\n  static anotherStatic() {\n    (super.staticMethod('foo'): number); // error, string !~> number\n    (super.doesntExist()); // error, A doesn't have a doesntExist method\n  }\n\n  g() {\n    super.f(0);\n    return super.g;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {\n  constructor(x: number) {}\n  static staticMethod(x: string): string {\n    return x;\n  }\n  f(x: string) {}\n}\n\nclass B extends A {\n  constructor(x: string, y: number) {\n    super(x);\n  }\n\n  static anotherStatic() {\n    (super.staticMethod(\"foo\"): number); // error, string !~> number\n    super.doesntExist(); // error, A doesn't have a doesntExist method\n  }\n\n  g() {\n    super.f(0);\n    return super.g;\n  }\n}\n\n`;\n\nexports[`test.js 1`] = `\nvar D = require('./import');\nclass C extends D {\n  constructor() { return super(); }\n  foo() { return super.foo(); }\n}\nmodule.exports = C;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar D = require(\"./import\");\nclass C extends D {\n  constructor() {\n    return super();\n  }\n  foo() {\n    return super.foo();\n  }\n}\nmodule.exports = C;\n\n`;\n"
  },
  {
    "path": "tests/flow/super/constructor.js",
    "content": "class A { x: number; }\n\nclass B {\n  x: number;\n  constructor() {\n    this.x; // OK\n  }\n}\n\nclass C extends A { }\n\nclass D extends A {\n  y: number;\n  constructor() {\n    this.y; // error (no super call)\n    this.x; // error (no super call)\n  }\n}\n\nclass E extends A {\n  y: number;\n  constructor() {\n    super();\n    this.y; // OK\n    this.x; // OK\n  }\n}\n\nfunction leak(f) {\n  f.y; // error\n  f.x; // error\n}\nclass F extends A {\n  y: number;\n  constructor() {\n    leak(this); // error (no super call yet)\n    super();\n    this.y;\n    this.x;\n  }\n}\n\nclass G extends A {\n  constructor(b) {\n    super.x; // error (no super call)\n  }\n}\n\nclass H extends A {\n  y: number;\n  constructor() {\n    if (Math.random() < 0.5)\n      super();\n    else\n      super();\n    this.y; // OK\n    this.x; // OK\n  }\n}\n\nclass I_ {\n  constructor(leaked_this) {\n    leaked_this.foo()\n  }\n  foo() { }\n}\nclass I extends I_ {\n  constructor() {\n    super(this); // error (no super call yet)\n  }\n}\n\nclass J__ { }\nclass J_ extends J__ {\n  constructor(closure_leaking_this) {\n    closure_leaking_this();\n    super();\n  }\n  foo() { }\n}\nclass J extends J_ {\n  constructor() {\n    super(() => this.foo()); // error (no super call yet)\n    // The reason for this error is that super constructor could call the\n    // closure and therefore access this before calling its own super\n    // constructor (as shown above). The only safe thing to do in the super\n    // constructor is to save the closure so that it can be called later, after\n    // initialization is done (as shown below).\n  }\n}\n\nclass K_ {\n  closure_leaking_this: () => void;\n  constructor(closure_leaking_this) {\n    this.closure_leaking_this = closure_leaking_this;\n  }\n  foo() { }\n}\nclass K extends K_ {\n  constructor() {\n    super(() => { if (_this) _this.foo() }); // OK\n    var _this = this;\n    this.closure_leaking_this();\n  }\n}\n\n// even though super() calls the parent's constructor(), it does not do the same\n// conversion on non-objects. so `new L_()` returns an instance of `L_` because\n// the constructor returns false (a non-object), but `super()` returns false,\n// which then similarly causes `new L()` to return an instance of `L`.\nclass L_ {\n  constructor() {\n    return false;\n  }\n}\nclass L extends L_ {\n  constructor() {\n    let x: boolean = super();\n    return x;\n  }\n}\n(new L_(): L_);\n(new L(): L);\n\n// similarly, the converse is true: if the parent's constructor returns an\n// object, then the child does too.\nclass M_ {\n  constructor() {\n    return {foo: 'foo'};\n  }\n}\nclass M extends M_ {\n  constructor() {\n    return super();\n  }\n}\n(new M_(): {foo: string});\n(new M(): {foo: string});\n\n// however! super() calls the parent constructor with the subclass as its `this`\n// value (essentially `super.constructor.call(this)`).\nclass N_ {\n  constructor(): this {\n    let x = this;\n    return x;\n  }\n}\nclass N extends N_ {\n  constructor() {\n    return super();\n  }\n}\n(new N_(): N_);\n(new N(): N);\n"
  },
  {
    "path": "tests/flow/super/import.js",
    "content": "class D {\n  foo(): number { return 0; }\n}\nmodule.exports = D;\n"
  },
  {
    "path": "tests/flow/super/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/super/super.js",
    "content": "\nclass A {\n  constructor(x:number) { }\n  static staticMethod(x:string): string { return x; }\n  f(x:string) { }\n}\n\nclass B extends A {\n  constructor(x:string,y:number) {\n    super(x);\n  }\n\n  static anotherStatic() {\n    (super.staticMethod('foo'): number); // error, string !~> number\n    (super.doesntExist()); // error, A doesn't have a doesntExist method\n  }\n\n  g() {\n    super.f(0);\n    return super.g;\n  }\n}\n"
  },
  {
    "path": "tests/flow/super/test.js",
    "content": "var D = require('./import');\nclass C extends D {\n  constructor() { return super(); }\n  foo() { return super.foo(); }\n}\nmodule.exports = C;\n"
  },
  {
    "path": "tests/flow/suppress/A.js",
    "content": "// $FlowFixMe\nvar test1: string = 123; // This error should be suppressed\n\n// $FlowIssue\nvar test2: string = 123; // This error should be suppressed\n\nfunction getNum() {\n  return 123;\n}\n\n// $FlowFixMe This was the second loc in the error\nvar test3: string = getNum(); // This error should be suppressed\n\n// $FlowFixMe Error unused suppression\n\nvar test4: string = 123; // This error is NOT suppressed\n\n                         // $FlowFixMe Indentation shouldn't matter\nvar test5: string = 123; // This error should be suppressed\n\n/*\n * $FlowNewLine\n */\nvar test6: string = 123;\n"
  },
  {
    "path": "tests/flow/suppress/B.js",
    "content": "// $FlowFixMe\nvar test1: string = library_num;\n"
  },
  {
    "path": "tests/flow/suppress/C.js",
    "content": "function takesAString(x: string): void {}\n\nfunction runTest(y: number): void {\n  takesAString(\n    /* $FlowFixMe - suppressing the error op location should also work */\n    y,\n  );\n}\n"
  },
  {
    "path": "tests/flow/suppress/D.js",
    "content": "declare var x: {\n  x: { foo: string }\n};\ndeclare var y: {\n  // $FlowFixMe - this location is only mentioned in the extra section\n  x: { bar: number }\n};\nx = y;\n"
  },
  {
    "path": "tests/flow/suppress/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\n// $FlowFixMe\nvar test1: string = 123; // This error should be suppressed\n\n// $FlowIssue\nvar test2: string = 123; // This error should be suppressed\n\nfunction getNum() {\n  return 123;\n}\n\n// $FlowFixMe This was the second loc in the error\nvar test3: string = getNum(); // This error should be suppressed\n\n// $FlowFixMe Error unused suppression\n\nvar test4: string = 123; // This error is NOT suppressed\n\n                         // $FlowFixMe Indentation shouldn't matter\nvar test5: string = 123; // This error should be suppressed\n\n/*\n * $FlowNewLine\n */\nvar test6: string = 123;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// $FlowFixMe\nvar test1: string = 123; // This error should be suppressed\n\n// $FlowIssue\nvar test2: string = 123; // This error should be suppressed\n\nfunction getNum() {\n  return 123;\n}\n\n// $FlowFixMe This was the second loc in the error\nvar test3: string = getNum(); // This error should be suppressed\n\n// $FlowFixMe Error unused suppression\n\nvar test4: string = 123; // This error is NOT suppressed\n\n// $FlowFixMe Indentation shouldn't matter\nvar test5: string = 123; // This error should be suppressed\n\n/*\n * $FlowNewLine\n */\nvar test6: string = 123;\n\n`;\n\nexports[`B.js 1`] = `\n// $FlowFixMe\nvar test1: string = library_num;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// $FlowFixMe\nvar test1: string = library_num;\n\n`;\n\nexports[`C.js 1`] = `\nfunction takesAString(x: string): void {}\n\nfunction runTest(y: number): void {\n  takesAString(\n    /* $FlowFixMe - suppressing the error op location should also work */\n    y,\n  );\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction takesAString(x: string): void {}\n\nfunction runTest(y: number): void {\n  takesAString(\n    /* $FlowFixMe - suppressing the error op location should also work */\n    y\n  );\n}\n\n`;\n\nexports[`D.js 1`] = `\ndeclare var x: {\n  x: { foo: string }\n};\ndeclare var y: {\n  // $FlowFixMe - this location is only mentioned in the extra section\n  x: { bar: number }\n};\nx = y;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare var x: {\n  x: { foo: string }\n};\ndeclare var y: {\n  // $FlowFixMe - this location is only mentioned in the extra section\n  x: { bar: number }\n};\nx = y;\n\n`;\n\nexports[`lib.js 1`] = `\ndeclare var library_num: number;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare var library_num: number;\n\n`;\n"
  },
  {
    "path": "tests/flow/suppress/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/suppress/lib.js",
    "content": "declare var library_num: number;\n"
  },
  {
    "path": "tests/flow/suppress_incremental/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n// @flow\n\n(123: number); // no errors\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n(123: number); // no errors\n\n`;\n"
  },
  {
    "path": "tests/flow/suppress_incremental/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/suppress_incremental/test.js",
    "content": "// @flow\n\n(123: number); // no errors\n"
  },
  {
    "path": "tests/flow/suppress_traces/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`traces.js 1`] = `\n/*\n * The location marked with the FlowFixMe does not show up in the original\n * error but shows up in the flow check --traces 10 result. This test makes\n * sure that we don't suppress the error due to a location that only shows up\n * when --traces is turned on.\n */\n\n// $FlowFixMe - Error unused suppression\nfunction bar(): number { return 5; }\n\nfunction foo(x: string) {\n  return bar();\n}\n\nvar a: string = foo('hi'); // error number ~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/*\n * The location marked with the FlowFixMe does not show up in the original\n * error but shows up in the flow check --traces 10 result. This test makes\n * sure that we don't suppress the error due to a location that only shows up\n * when --traces is turned on.\n */\n\n// $FlowFixMe - Error unused suppression\nfunction bar(): number {\n  return 5;\n}\n\nfunction foo(x: string) {\n  return bar();\n}\n\nvar a: string = foo(\"hi\"); // error number ~> string\n\n`;\n"
  },
  {
    "path": "tests/flow/suppress_traces/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/suppress_traces/traces.js",
    "content": "/*\n * The location marked with the FlowFixMe does not show up in the original\n * error but shows up in the flow check --traces 10 result. This test makes\n * sure that we don't suppress the error due to a location that only shows up\n * when --traces is turned on.\n */\n\n// $FlowFixMe - Error unused suppression\nfunction bar(): number { return 5; }\n\nfunction foo(x: string) {\n  return bar();\n}\n\nvar a: string = foo('hi'); // error number ~> string\n"
  },
  {
    "path": "tests/flow/switch/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`more_switch.js 1`] = `\n/* @flow */\n\nfunction foo(x): number {\n    switch (x) {\n      case 0:\n      case 1: return 1;\n      default: throw new Error('hi');\n    }\n}\n\nfunction bar(x) {\n    switch (x) {\n      case 0: break;\n      default: return;\n    }\n    1;\n}\n\nfunction baz(x): number {\n  switch (x) {\n    case 0: break;\n    case 1: return 1;\n    default: throw new Error('hi');\n  }\n  return 2;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction foo(x): number {\n  switch (x) {\n    case 0:\n    case 1:\n      return 1;\n    default:\n      throw new Error(\"hi\");\n  }\n}\n\nfunction bar(x) {\n  switch (x) {\n    case 0:\n      break;\n    default:\n      return;\n  }\n  1;\n}\n\nfunction baz(x): number {\n  switch (x) {\n    case 0:\n      break;\n    case 1:\n      return 1;\n    default:\n      throw new Error(\"hi\");\n  }\n  return 2;\n}\n\n`;\n\nexports[`switch.js 1`] = `\n/**\n * @flow\n */\nfunction foo(\n): number {\n    switch ('foo') {\n    case 'foo':\n        return 1;\n    }\n    return 2;\n}\n\nfunction bar() {\n    switch ('bar') {\n    case 'bar':\n        break;\n    default:\n        break;\n    }\n}\n\nfunction qux(b) {\n    var x = b? 0: \"\";\n    switch('qux') {\n    case '':\n        x = 0;\n    case 'qux':\n        x = x*x;\n    }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\nfunction foo(): number {\n  switch (\"foo\") {\n    case \"foo\":\n      return 1;\n  }\n  return 2;\n}\n\nfunction bar() {\n  switch (\"bar\") {\n    case \"bar\":\n      break;\n    default:\n      break;\n  }\n}\n\nfunction qux(b) {\n  var x = b ? 0 : \"\";\n  switch (\"qux\") {\n    case \"\":\n      x = 0;\n    case \"qux\":\n      x = x * x;\n  }\n}\n\n`;\n\nexports[`switch_default_fallthrough.js 1`] = `\n/**\n * @flow\n */\nfunction foo(x : mixed): string {\n    var a = \"\";\n    var b = \"\";\n\n    switch (x) {\n      case \"foo\":\n        a = 0;\n      default:\n        b = 0;\n    }\n\n    // a is now string | number\n    (a : string); // error, string | number ~/> string\n    (a : number); // error, string | number ~/> number\n\n    // b is now number\n    (b : number); // ok\n    return b; // error, number ~/> string\n}\n\nfunction baz(x: mixed): number {\n    var a = \"\";\n    var b = \"\";\n\n    switch (x) {\n      case \"baz\":\n        a = 0;\n        break;\n      case \"bar\":\n        a = \"\";\n      default:\n        b = 0;\n    }\n\n    // a is now string | number\n    (a : string); // error, string | number ~/> string\n    (a : number); // error, string | number ~/> number\n\n    // b is now string | number\n    (b : string); // error, string | number ~/> string\n    (b : number); // error, string | number ~/> number\n\n    return a+b; // error, string ~/> number\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\nfunction foo(x: mixed): string {\n  var a = \"\";\n  var b = \"\";\n\n  switch (x) {\n    case \"foo\":\n      a = 0;\n    default:\n      b = 0;\n  }\n\n  // a is now string | number\n  (a: string); // error, string | number ~/> string\n  (a: number); // error, string | number ~/> number\n\n  // b is now number\n  (b: number); // ok\n  return b; // error, number ~/> string\n}\n\nfunction baz(x: mixed): number {\n  var a = \"\";\n  var b = \"\";\n\n  switch (x) {\n    case \"baz\":\n      a = 0;\n      break;\n    case \"bar\":\n      a = \"\";\n    default:\n      b = 0;\n  }\n\n  // a is now string | number\n  (a: string); // error, string | number ~/> string\n  (a: number); // error, string | number ~/> number\n\n  // b is now string | number\n  (b: string); // error, string | number ~/> string\n  (b: number); // error, string | number ~/> number\n\n  return a + b; // error, string ~/> number\n}\n\n`;\n\nexports[`trailing_cases.js 1`] = `\n/**\n * trailing cases are allowed - spot checks that we handle them as usual\n * @flow\n */\nfunction f1(i) {\n  var x;\n\n  switch (i) {\n  case 0:\n    x = 0;\n    break;\n  case 1:\n    x = 1;\n    break;\n  default:\n    x = -1;\n    break;\n  case 2:\n    x = \"2\";\n    break;\n  }\n\n  var y:number = x; // error, number | string ~/> number\n}\n\nfunction f2(i) {\n  var x;\n\n  switch (i) {\n  case 0:\n  case 1:\n  default:\n    x = 1;\n    break;\n  case 2:\n    // does not fall through default\n  }\n\n  var y:number = x; // error, number | uninitialized ~/> number\n}\n\nfunction f3(i) {\n  var x;\n\n  switch (i) {\n  case 0:\n  case 1:\n  default:\n    // falls through to subsequent cases\n  case 2:\n    x = 1;\n  }\n\n  var y:number = x; // no error\n}\n\nfunction foo(x): number {\n    switch (x) {\n      case 0:\n      default: throw new Error('hi');\n      case 1: return 1;\n    }\n}\n\nfunction bar(x) {\n    switch (x) {\n      default: return;\n      case 0: break;\n    }\n    1;\n}\n\nfunction baz(x): number {\n  switch (x) {\n    case 0: break;\n    default: throw new Error('hi');\n    case 1: return 1;\n  }\n  return 2;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * trailing cases are allowed - spot checks that we handle them as usual\n * @flow\n */\nfunction f1(i) {\n  var x;\n\n  switch (i) {\n    case 0:\n      x = 0;\n      break;\n    case 1:\n      x = 1;\n      break;\n    default:\n      x = -1;\n      break;\n    case 2:\n      x = \"2\";\n      break;\n  }\n\n  var y: number = x; // error, number | string ~/> number\n}\n\nfunction f2(i) {\n  var x;\n\n  switch (i) {\n    case 0:\n    case 1:\n    default:\n      x = 1;\n      break;\n    case 2:\n    // does not fall through default\n  }\n\n  var y: number = x; // error, number | uninitialized ~/> number\n}\n\nfunction f3(i) {\n  var x;\n\n  switch (i) {\n    case 0:\n    case 1:\n    default:\n    // falls through to subsequent cases\n    case 2:\n      x = 1;\n  }\n\n  var y: number = x; // no error\n}\n\nfunction foo(x): number {\n  switch (x) {\n    case 0:\n    default:\n      throw new Error(\"hi\");\n    case 1:\n      return 1;\n  }\n}\n\nfunction bar(x) {\n  switch (x) {\n    default:\n      return;\n    case 0:\n      break;\n  }\n  1;\n}\n\nfunction baz(x): number {\n  switch (x) {\n    case 0:\n      break;\n    default:\n      throw new Error(\"hi\");\n    case 1:\n      return 1;\n  }\n  return 2;\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/switch/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/switch/more_switch.js",
    "content": "/* @flow */\n\nfunction foo(x): number {\n    switch (x) {\n      case 0:\n      case 1: return 1;\n      default: throw new Error('hi');\n    }\n}\n\nfunction bar(x) {\n    switch (x) {\n      case 0: break;\n      default: return;\n    }\n    1;\n}\n\nfunction baz(x): number {\n  switch (x) {\n    case 0: break;\n    case 1: return 1;\n    default: throw new Error('hi');\n  }\n  return 2;\n}\n"
  },
  {
    "path": "tests/flow/switch/switch.js",
    "content": "/**\n * @flow\n */\nfunction foo(\n): number {\n    switch ('foo') {\n    case 'foo':\n        return 1;\n    }\n    return 2;\n}\n\nfunction bar() {\n    switch ('bar') {\n    case 'bar':\n        break;\n    default:\n        break;\n    }\n}\n\nfunction qux(b) {\n    var x = b? 0: \"\";\n    switch('qux') {\n    case '':\n        x = 0;\n    case 'qux':\n        x = x*x;\n    }\n}\n"
  },
  {
    "path": "tests/flow/switch/switch_default_fallthrough.js",
    "content": "/**\n * @flow\n */\nfunction foo(x : mixed): string {\n    var a = \"\";\n    var b = \"\";\n\n    switch (x) {\n      case \"foo\":\n        a = 0;\n      default:\n        b = 0;\n    }\n\n    // a is now string | number\n    (a : string); // error, string | number ~/> string\n    (a : number); // error, string | number ~/> number\n\n    // b is now number\n    (b : number); // ok\n    return b; // error, number ~/> string\n}\n\nfunction baz(x: mixed): number {\n    var a = \"\";\n    var b = \"\";\n\n    switch (x) {\n      case \"baz\":\n        a = 0;\n        break;\n      case \"bar\":\n        a = \"\";\n      default:\n        b = 0;\n    }\n\n    // a is now string | number\n    (a : string); // error, string | number ~/> string\n    (a : number); // error, string | number ~/> number\n\n    // b is now string | number\n    (b : string); // error, string | number ~/> string\n    (b : number); // error, string | number ~/> number\n\n    return a+b; // error, string ~/> number\n}\n"
  },
  {
    "path": "tests/flow/switch/trailing_cases.js",
    "content": "/**\n * trailing cases are allowed - spot checks that we handle them as usual\n * @flow\n */\nfunction f1(i) {\n  var x;\n\n  switch (i) {\n  case 0:\n    x = 0;\n    break;\n  case 1:\n    x = 1;\n    break;\n  default:\n    x = -1;\n    break;\n  case 2:\n    x = \"2\";\n    break;\n  }\n\n  var y:number = x; // error, number | string ~/> number\n}\n\nfunction f2(i) {\n  var x;\n\n  switch (i) {\n  case 0:\n  case 1:\n  default:\n    x = 1;\n    break;\n  case 2:\n    // does not fall through default\n  }\n\n  var y:number = x; // error, number | uninitialized ~/> number\n}\n\nfunction f3(i) {\n  var x;\n\n  switch (i) {\n  case 0:\n  case 1:\n  default:\n    // falls through to subsequent cases\n  case 2:\n    x = 1;\n  }\n\n  var y:number = x; // no error\n}\n\nfunction foo(x): number {\n    switch (x) {\n      case 0:\n      default: throw new Error('hi');\n      case 1: return 1;\n    }\n}\n\nfunction bar(x) {\n    switch (x) {\n      default: return;\n      case 0: break;\n    }\n    1;\n}\n\nfunction baz(x): number {\n  switch (x) {\n    case 0: break;\n    default: throw new Error('hi');\n    case 1: return 1;\n  }\n  return 2;\n}\n"
  },
  {
    "path": "tests/flow/symbol/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`symbol.js 1`] = `\nvar FOO = Symbol();\nvar BAR = Symbol('bar');\n\nvar WAT = Symbol('foo', 'bar'); // Error - unused argument\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar FOO = Symbol();\nvar BAR = Symbol(\"bar\");\n\nvar WAT = Symbol(\"foo\", \"bar\"); // Error - unused argument\n\n`;\n"
  },
  {
    "path": "tests/flow/symbol/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/symbol/symbol.js",
    "content": "var FOO = Symbol();\nvar BAR = Symbol('bar');\n\nvar WAT = Symbol('foo', 'bar'); // Error - unused argument\n"
  },
  {
    "path": "tests/flow/symlink/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`bar.js 1`] = `\nexport type Foo = { x: number; }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport type Foo = { x: number };\n\n`;\n\nexports[`foo.js 1`] = `\nexport type Foo = { x: number; }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport type Foo = { x: number };\n\n`;\n\nexports[`qux.js 1`] = `\nimport type { Foo } from './bar.js';\n({ x: \"\" }: Foo);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport type { Foo } from \"./bar.js\";\n({ x: \"\" }: Foo);\n\n`;\n"
  },
  {
    "path": "tests/flow/symlink/bar.js",
    "content": "export type Foo = { x: number; }\n"
  },
  {
    "path": "tests/flow/symlink/foo.js",
    "content": "export type Foo = { x: number; }\n"
  },
  {
    "path": "tests/flow/symlink/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/symlink/qux.js",
    "content": "import type { Foo } from './bar.js';\n({ x: \"\" }: Foo);\n"
  },
  {
    "path": "tests/flow/tagged-unions/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`classes.js 1`] = `\n// @flow\n\nclass Foo {\n  type: 'foo';\n  foo: string;\n}\n\nclass Bar {\n  type: 'bar';\n  bar: string;\n}\n\ntype Foobar = Foo | Bar;\n\nfunction foobar(x: Foobar): string {\n  if (x.type === 'foo') {\n    return foo(x);\n  } else if (x.type === 'bar') {\n    return bar(x);\n  } else {\n    return 'unknown';\n  }\n}\n\nfunction foo(x: Foo): string {\n  return x.foo;\n}\n\nfunction bar(x: Bar): string {\n  return x.bar;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nclass Foo {\n  type: \"foo\";\n  foo: string;\n}\n\nclass Bar {\n  type: \"bar\";\n  bar: string;\n}\n\ntype Foobar = Foo | Bar;\n\nfunction foobar(x: Foobar): string {\n  if (x.type === \"foo\") {\n    return foo(x);\n  } else if (x.type === \"bar\") {\n    return bar(x);\n  } else {\n    return \"unknown\";\n  }\n}\n\nfunction foo(x: Foo): string {\n  return x.foo;\n}\n\nfunction bar(x: Bar): string {\n  return x.bar;\n}\n\n`;\n\nexports[`interfaces-neg.js 1`] = `\n/* @flow */\n\ndeclare interface IDataBase {\n  id: string,\n  name: string,\n}\n\ndeclare interface IUserData extends IDataBase {\n  kind: \"user\",\n}\n\ndeclare interface ISystemData extends IDataBase {\n  kind: \"system\",\n}\n\ndeclare type IData = IUserData | ISystemData;\n\nconst data: IData = {\n  id: \"\",\n  name: \"\",\n  kind: \"system\",\n}\n\nif (data.kind === \"user\") {\n  (data: ISystemData);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\ndeclare interface IDataBase {\n  id: string,\n  name: string\n}\n\ndeclare interface IUserData extends IDataBase {\n  kind: \"user\"\n}\n\ndeclare interface ISystemData extends IDataBase {\n  kind: \"system\"\n}\n\ndeclare type IData = IUserData | ISystemData;\n\nconst data: IData = {\n  id: \"\",\n  name: \"\",\n  kind: \"system\"\n};\n\nif (data.kind === \"user\") {\n  (data: ISystemData);\n}\n\n`;\n\nexports[`interfaces-pos.js 1`] = `\n/* @flow */\n\ndeclare interface IDataBase {\n  id: string,\n  name: string,\n}\n\ndeclare interface IUserData extends IDataBase {\n  kind: \"user\",\n}\n\ndeclare interface ISystemData extends IDataBase {\n  kind: \"system\",\n}\n\ndeclare type IData = IUserData | ISystemData;\n\nconst data: IData = {\n  id: \"\",\n  name: \"\",\n  kind: \"system\",\n}\n\nif (data.kind === \"system\") {\n  (data: ISystemData);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\ndeclare interface IDataBase {\n  id: string,\n  name: string\n}\n\ndeclare interface IUserData extends IDataBase {\n  kind: \"user\"\n}\n\ndeclare interface ISystemData extends IDataBase {\n  kind: \"system\"\n}\n\ndeclare type IData = IUserData | ISystemData;\n\nconst data: IData = {\n  id: \"\",\n  name: \"\",\n  kind: \"system\"\n};\n\nif (data.kind === \"system\") {\n  (data: ISystemData);\n}\n\n`;\n\nexports[`type-decls-neg.js 1`] = `\n/* @flow */\n\ntype DataBase = {\n  id: string,\n  name: string,\n};\n\ntype UserData = {\n  id: string,\n  name: string,\n  kind: \"user\",\n}\n\ntype SystemData = {\n  id: string,\n  name: string,\n  kind: \"system\",\n}\n\ndeclare type Data = UserData | SystemData;\n\nconst data: Data = {\n  id: \"\",\n  name: \"\",\n  kind: \"system\",\n}\n\nif (data.kind === \"user\") {\n  (data: SystemData);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\ntype DataBase = {\n  id: string,\n  name: string\n};\n\ntype UserData = {\n  id: string,\n  name: string,\n  kind: \"user\"\n};\n\ntype SystemData = {\n  id: string,\n  name: string,\n  kind: \"system\"\n};\n\ndeclare type Data = UserData | SystemData;\n\nconst data: Data = {\n  id: \"\",\n  name: \"\",\n  kind: \"system\"\n};\n\nif (data.kind === \"user\") {\n  (data: SystemData);\n}\n\n`;\n\nexports[`type-decls-pos.js 1`] = `\n/* @flow */\n\ntype DataBase = {\n  id: string,\n  name: string,\n};\n\ntype UserData = {\n  id: string,\n  name: string,\n  kind: \"user\",\n}\n\ntype SystemData = {\n  id: string,\n  name: string,\n  kind: \"system\",\n}\n\ndeclare type Data = UserData | SystemData;\n\nconst data: Data = {\n  id: \"\",\n  name: \"\",\n  kind: \"system\",\n}\n\nif (data.kind === \"system\") {\n  (data: SystemData);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\ntype DataBase = {\n  id: string,\n  name: string\n};\n\ntype UserData = {\n  id: string,\n  name: string,\n  kind: \"user\"\n};\n\ntype SystemData = {\n  id: string,\n  name: string,\n  kind: \"system\"\n};\n\ndeclare type Data = UserData | SystemData;\n\nconst data: Data = {\n  id: \"\",\n  name: \"\",\n  kind: \"system\"\n};\n\nif (data.kind === \"system\") {\n  (data: SystemData);\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/tagged-unions/classes.js",
    "content": "// @flow\n\nclass Foo {\n  type: 'foo';\n  foo: string;\n}\n\nclass Bar {\n  type: 'bar';\n  bar: string;\n}\n\ntype Foobar = Foo | Bar;\n\nfunction foobar(x: Foobar): string {\n  if (x.type === 'foo') {\n    return foo(x);\n  } else if (x.type === 'bar') {\n    return bar(x);\n  } else {\n    return 'unknown';\n  }\n}\n\nfunction foo(x: Foo): string {\n  return x.foo;\n}\n\nfunction bar(x: Bar): string {\n  return x.bar;\n}\n"
  },
  {
    "path": "tests/flow/tagged-unions/interfaces-neg.js",
    "content": "/* @flow */\n\ndeclare interface IDataBase {\n  id: string,\n  name: string,\n}\n\ndeclare interface IUserData extends IDataBase {\n  kind: \"user\",\n}\n\ndeclare interface ISystemData extends IDataBase {\n  kind: \"system\",\n}\n\ndeclare type IData = IUserData | ISystemData;\n\nconst data: IData = {\n  id: \"\",\n  name: \"\",\n  kind: \"system\",\n}\n\nif (data.kind === \"user\") {\n  (data: ISystemData);\n}\n"
  },
  {
    "path": "tests/flow/tagged-unions/interfaces-pos.js",
    "content": "/* @flow */\n\ndeclare interface IDataBase {\n  id: string,\n  name: string,\n}\n\ndeclare interface IUserData extends IDataBase {\n  kind: \"user\",\n}\n\ndeclare interface ISystemData extends IDataBase {\n  kind: \"system\",\n}\n\ndeclare type IData = IUserData | ISystemData;\n\nconst data: IData = {\n  id: \"\",\n  name: \"\",\n  kind: \"system\",\n}\n\nif (data.kind === \"system\") {\n  (data: ISystemData);\n}\n"
  },
  {
    "path": "tests/flow/tagged-unions/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/tagged-unions/type-decls-neg.js",
    "content": "/* @flow */\n\ntype DataBase = {\n  id: string,\n  name: string,\n};\n\ntype UserData = {\n  id: string,\n  name: string,\n  kind: \"user\",\n}\n\ntype SystemData = {\n  id: string,\n  name: string,\n  kind: \"system\",\n}\n\ndeclare type Data = UserData | SystemData;\n\nconst data: Data = {\n  id: \"\",\n  name: \"\",\n  kind: \"system\",\n}\n\nif (data.kind === \"user\") {\n  (data: SystemData);\n}\n"
  },
  {
    "path": "tests/flow/tagged-unions/type-decls-pos.js",
    "content": "/* @flow */\n\ntype DataBase = {\n  id: string,\n  name: string,\n};\n\ntype UserData = {\n  id: string,\n  name: string,\n  kind: \"user\",\n}\n\ntype SystemData = {\n  id: string,\n  name: string,\n  kind: \"system\",\n}\n\ndeclare type Data = UserData | SystemData;\n\nconst data: Data = {\n  id: \"\",\n  name: \"\",\n  kind: \"system\",\n}\n\nif (data.kind === \"system\") {\n  (data: SystemData);\n}\n"
  },
  {
    "path": "tests/flow/taint/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`adder.js 1`] = `\n// @flow\n\nfunction f(x : $Tainted<number>, y : $Tainted<number>) {\n  var z : $Tainted<number> = x + y;\n}\nfunction f1(x : $Tainted<number>, y : number) {\n  var z : $Tainted<number> = x + y;\n}\nfunction f2(x : number, y : $Tainted<number>) {\n  var z : $Tainted<number> = x + y;\n}\n// This should cause an error.\nfunction f3(x : $Tainted<number>, y : number) {\n  var z : number = x + y;\n}\n// This should cause an error.\nfunction f4(x : number, y : $Tainted<number>) {\n  var z : number = x + y;\n}\n// This should cause an error.\nfunction f5(x : number, y : $Tainted<number>) {\n  var z : string = x + y;\n}\n// This should cause an error.\nfunction f6(x : string, y : $Tainted<number>) {\n  var z : string = x + y;\n}\n// This should cause an error.\nfunction f7(x : $Tainted<string>, y : $Tainted<number>) {\n  var z : string = x + y;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nfunction f(x: $Tainted<number>, y: $Tainted<number>) {\n  var z: $Tainted<number> = x + y;\n}\nfunction f1(x: $Tainted<number>, y: number) {\n  var z: $Tainted<number> = x + y;\n}\nfunction f2(x: number, y: $Tainted<number>) {\n  var z: $Tainted<number> = x + y;\n}\n// This should cause an error.\nfunction f3(x: $Tainted<number>, y: number) {\n  var z: number = x + y;\n}\n// This should cause an error.\nfunction f4(x: number, y: $Tainted<number>) {\n  var z: number = x + y;\n}\n// This should cause an error.\nfunction f5(x: number, y: $Tainted<number>) {\n  var z: string = x + y;\n}\n// This should cause an error.\nfunction f6(x: string, y: $Tainted<number>) {\n  var z: string = x + y;\n}\n// This should cause an error.\nfunction f7(x: $Tainted<string>, y: $Tainted<number>) {\n  var z: string = x + y;\n}\n\n`;\n\nexports[`any_object.js 1`] = `\n// @flow\n\nlet tests = [\n  // setting a property\n  function(x: $Tainted<string>, y: string) {\n    let obj: Object = {};\n    obj.foo = x; // error, taint ~> any\n    obj[y] = x; // error, taint ~> any\n  },\n\n  // getting a property\n  function() {\n    let obj: Object = { foo: 'foo' };\n    (obj.foo: $Tainted<string>); // ok\n  },\n\n  // calling a method\n  function(x: $Tainted<string>) {\n    let obj: Object = {};\n    obj.foo(x); // error, taint ~> any\n\n    let foo = obj.foo;\n    foo(x); // error, taint ~> any\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  // setting a property\n  function(x: $Tainted<string>, y: string) {\n    let obj: Object = {};\n    obj.foo = x; // error, taint ~> any\n    obj[y] = x; // error, taint ~> any\n  },\n\n  // getting a property\n  function() {\n    let obj: Object = { foo: \"foo\" };\n    (obj.foo: $Tainted<string>); // ok\n  },\n\n  // calling a method\n  function(x: $Tainted<string>) {\n    let obj: Object = {};\n    obj.foo(x); // error, taint ~> any\n\n    let foo = obj.foo;\n    foo(x); // error, taint ~> any\n  }\n];\n\n`;\n\nexports[`call-object-property.js 1`] = `\n// @flow\n\nfunction foo(x : $Tainted<string>, o : Object) {\n  // Error\n  o.f(x);\n}\nfunction foo1(x : $Tainted<string>, o : {f : (y : $Tainted<string>) => void}) {\n  o.f(x);\n}\nfunction foo2(o1 : Object, o2 : {t : $Tainted<string>}) {\n  o1.f(o2.t);\n}\nfunction foo3<T>(x : $Tainted<T>, o : {f : (y : $Tainted<T>) => void}) {\n  o.f(x);\n}\nfunction f_foo1(x : $Tainted<string>, f : Function) {\n  // Error\n  f(x);\n}\nfunction f_foo2(f1 : Function, o : {t : $Tainted<string>}) {\n  f1(o.t);\n}\nfunction f_foo3(f1 : Function, o1 : Object, o2 : {t : $Tainted<string>}) {\n  (f1(o1))(o2.t);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nfunction foo(x: $Tainted<string>, o: Object) {\n  // Error\n  o.f(x);\n}\nfunction foo1(x: $Tainted<string>, o: { f: (y: $Tainted<string>) => void }) {\n  o.f(x);\n}\nfunction foo2(o1: Object, o2: { t: $Tainted<string> }) {\n  o1.f(o2.t);\n}\nfunction foo3<T>(x: $Tainted<T>, o: { f: (y: $Tainted<T>) => void }) {\n  o.f(x);\n}\nfunction f_foo1(x: $Tainted<string>, f: Function) {\n  // Error\n  f(x);\n}\nfunction f_foo2(f1: Function, o: { t: $Tainted<string> }) {\n  f1(o.t);\n}\nfunction f_foo3(f1: Function, o1: Object, o2: { t: $Tainted<string> }) {\n  f1(o1)(o2.t);\n}\n\n`;\n\nexports[`comparator.js 1`] = `\n// @flow\n// Should cause an error.\nfunction f(x : $Tainted<string>, y : $Tainted<number>) {\n  var z : $Tainted<bool> = x < y;\n}\n// Should cause an error.\nfunction f1(x : string, y : $Tainted<number>) {\n  var z : $Tainted<bool> = x < y;\n}\n// Should cause an error.\nfunction f2(x : $Tainted<string>, y : number) {\n  var z : $Tainted<bool> = x < y;\n}\n// Note: We allow removing Taint when two tainted\n// values are compared.\nfunction f3(x : $Tainted<string>, y : string) {\n  var z : bool = x < y;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n// Should cause an error.\nfunction f(x: $Tainted<string>, y: $Tainted<number>) {\n  var z: $Tainted<boolean> = x < y;\n}\n// Should cause an error.\nfunction f1(x: string, y: $Tainted<number>) {\n  var z: $Tainted<boolean> = x < y;\n}\n// Should cause an error.\nfunction f2(x: $Tainted<string>, y: number) {\n  var z: $Tainted<boolean> = x < y;\n}\n// Note: We allow removing Taint when two tainted\n// values are compared.\nfunction f3(x: $Tainted<string>, y: string) {\n  var z: boolean = x < y;\n}\n\n`;\n\nexports[`function.js 1`] = `\n// @flow\n\nlet tests = [\n  // flows any to each param\n  function(x: any, y: $Tainted<string>) {\n    x(y); // error, taint ~> any\n  },\n\n  // calling \\`any\\` returns \\`any\\`\n  function(x: any, y: $Tainted<string>) {\n    let z = x();\n    z(y);\n  }\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  // flows any to each param\n  function(x: any, y: $Tainted<string>) {\n    x(y); // error, taint ~> any\n  },\n\n  // calling \\`any\\` returns \\`any\\`\n  function(x: any, y: $Tainted<string>) {\n    let z = x();\n    z(y);\n  }\n];\n\n`;\n\nexports[`globals.js 1`] = `\n// @flow\n\nclass A {\n  f(x : $Tainted<FakeLocation>) {\n    fakeDocument.location = x; // error\n    doStuff(x); // ok\n  }\n  f1(x : $Tainted<FakeLocation>) {\n    // TODO(rcastano): should cause an error.\n    window.fakeLocation = x;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nclass A {\n  f(x: $Tainted<FakeLocation>) {\n    fakeDocument.location = x; // error\n    doStuff(x); // ok\n  }\n  f1(x: $Tainted<FakeLocation>) {\n    // TODO(rcastano): should cause an error.\n    window.fakeLocation = x;\n  }\n}\n\n`;\n\nexports[`lib.js 1`] = `\ndeclare class FakeLocation {\n  assign(url: string): void;\n}\n\ndeclare class FakeDocument {\n  location: FakeLocation;\n}\n\ndeclare function doStuff(x: $Tainted<any>): void;\n\ndeclare var fakeDocument: FakeDocument;\ndeclare var fakeLocation: FakeLocation;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class FakeLocation {\n  assign(url: string): void\n}\n\ndeclare class FakeDocument {\n  location: FakeLocation\n}\n\ndeclare function doStuff(x: $Tainted<any>): void;\n\ndeclare var fakeDocument: FakeDocument;\ndeclare var fakeLocation: FakeLocation;\n\n`;\n\nexports[`taint1.js 1`] = `\n/*\n *\n * @flow\n */\nclass A {\n  f(tainted : $Tainted<string>) {\n    // This shouldn't give a warning (both are tainted)\n    var also_tainted : $Tainted<string> = tainted;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/*\n *\n * @flow\n */\nclass A {\n  f(tainted: $Tainted<string>) {\n    // This shouldn't give a warning (both are tainted)\n    var also_tainted: $Tainted<string> = tainted;\n  }\n}\n\n`;\n\nexports[`taint2.js 1`] = `\n/*\n *\n * @flow\n */\nclass A {\n  f(tainted : $Tainted<string>) {\n    // This *should* give a warning.\n    fakeDocument.location.assign(tainted);\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/*\n *\n * @flow\n */\nclass A {\n  f(tainted: $Tainted<string>) {\n    // This *should* give a warning.\n    fakeDocument.location.assign(tainted);\n  }\n}\n\n`;\n\nexports[`taint3.js 1`] = `\n/*\n *\n * @flow\n */\nclass A {\n  f(tainted : $Tainted<string>) {\n    // The Tainted annotation should still flow.\n    var safe = tainted;\n    // This should give a warning.\n    var loc : string = safe;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/*\n *\n * @flow\n */\nclass A {\n  f(tainted: $Tainted<string>) {\n    // The Tainted annotation should still flow.\n    var safe = tainted;\n    // This should give a warning.\n    var loc: string = safe;\n  }\n}\n\n`;\n\nexports[`taint4.js 1`] = `\n/*\n *\n * @flow\n */\n\nvar safe : string = \"safe\";\n// This should be allowed.\nvar tainted : $Tainted<string> = safe\n\nfunction f(x : $Tainted<any>) {\n  // Should cause error.\n  var y : any = x;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/*\n *\n * @flow\n */\n\nvar safe: string = \"safe\";\n// This should be allowed.\nvar tainted: $Tainted<string> = safe;\n\nfunction f(x: $Tainted<any>) {\n  // Should cause error.\n  var y: any = x;\n}\n\n`;\n\nexports[`use-types.js 1`] = `\n/*\n * @flow\n */\n\n// Should cause an error.\nfunction foo (x : $Tainted<number>) {\n  var should_fail : number = x * 42;\n}\n// Should cause an error.\nfunction foo1 (x : $Tainted<{f: number}>) {\n  var ok : number = x.f;\n}\n// Should cause an error.\nfunction foo2 (o : {f (y:number):number}, t: $Tainted<number>) {\n  return o.f(t);\n}\n\nfunction foo3 (x : $Tainted<{f: number}>) {\n  var also_tainted : $Tainted<number> = x.f;\n}\n// Should cause an error.\nfunction foo4 (a : $Tainted<Array<string>>) {\n  var trusted : string = a[0];\n}\n// Type error.\nfunction foo5 (a : $Tainted<Array<string>>) {\n  var trusted_number : number = a[0];\n}\n\nfunction foo6 (a : $Tainted<Array<string>>) {\n  var trusted : $Tainted<string> = a[0];\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/*\n * @flow\n */\n\n// Should cause an error.\nfunction foo(x: $Tainted<number>) {\n  var should_fail: number = x * 42;\n}\n// Should cause an error.\nfunction foo1(x: $Tainted<{ f: number }>) {\n  var ok: number = x.f;\n}\n// Should cause an error.\nfunction foo2(o: { f(y: number): number }, t: $Tainted<number>) {\n  return o.f(t);\n}\n\nfunction foo3(x: $Tainted<{ f: number }>) {\n  var also_tainted: $Tainted<number> = x.f;\n}\n// Should cause an error.\nfunction foo4(a: $Tainted<Array<string>>) {\n  var trusted: string = a[0];\n}\n// Type error.\nfunction foo5(a: $Tainted<Array<string>>) {\n  var trusted_number: number = a[0];\n}\n\nfunction foo6(a: $Tainted<Array<string>>) {\n  var trusted: $Tainted<string> = a[0];\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/taint/adder.js",
    "content": "// @flow\n\nfunction f(x : $Tainted<number>, y : $Tainted<number>) {\n  var z : $Tainted<number> = x + y;\n}\nfunction f1(x : $Tainted<number>, y : number) {\n  var z : $Tainted<number> = x + y;\n}\nfunction f2(x : number, y : $Tainted<number>) {\n  var z : $Tainted<number> = x + y;\n}\n// This should cause an error.\nfunction f3(x : $Tainted<number>, y : number) {\n  var z : number = x + y;\n}\n// This should cause an error.\nfunction f4(x : number, y : $Tainted<number>) {\n  var z : number = x + y;\n}\n// This should cause an error.\nfunction f5(x : number, y : $Tainted<number>) {\n  var z : string = x + y;\n}\n// This should cause an error.\nfunction f6(x : string, y : $Tainted<number>) {\n  var z : string = x + y;\n}\n// This should cause an error.\nfunction f7(x : $Tainted<string>, y : $Tainted<number>) {\n  var z : string = x + y;\n}\n"
  },
  {
    "path": "tests/flow/taint/any_object.js",
    "content": "// @flow\n\nlet tests = [\n  // setting a property\n  function(x: $Tainted<string>, y: string) {\n    let obj: Object = {};\n    obj.foo = x; // error, taint ~> any\n    obj[y] = x; // error, taint ~> any\n  },\n\n  // getting a property\n  function() {\n    let obj: Object = { foo: 'foo' };\n    (obj.foo: $Tainted<string>); // ok\n  },\n\n  // calling a method\n  function(x: $Tainted<string>) {\n    let obj: Object = {};\n    obj.foo(x); // error, taint ~> any\n\n    let foo = obj.foo;\n    foo(x); // error, taint ~> any\n  },\n];\n"
  },
  {
    "path": "tests/flow/taint/call-object-property.js",
    "content": "// @flow\n\nfunction foo(x : $Tainted<string>, o : Object) {\n  // Error\n  o.f(x);\n}\nfunction foo1(x : $Tainted<string>, o : {f : (y : $Tainted<string>) => void}) {\n  o.f(x);\n}\nfunction foo2(o1 : Object, o2 : {t : $Tainted<string>}) {\n  o1.f(o2.t);\n}\nfunction foo3<T>(x : $Tainted<T>, o : {f : (y : $Tainted<T>) => void}) {\n  o.f(x);\n}\nfunction f_foo1(x : $Tainted<string>, f : Function) {\n  // Error\n  f(x);\n}\nfunction f_foo2(f1 : Function, o : {t : $Tainted<string>}) {\n  f1(o.t);\n}\nfunction f_foo3(f1 : Function, o1 : Object, o2 : {t : $Tainted<string>}) {\n  (f1(o1))(o2.t);\n}\n"
  },
  {
    "path": "tests/flow/taint/comparator.js",
    "content": "// @flow\n// Should cause an error.\nfunction f(x : $Tainted<string>, y : $Tainted<number>) {\n  var z : $Tainted<bool> = x < y;\n}\n// Should cause an error.\nfunction f1(x : string, y : $Tainted<number>) {\n  var z : $Tainted<bool> = x < y;\n}\n// Should cause an error.\nfunction f2(x : $Tainted<string>, y : number) {\n  var z : $Tainted<bool> = x < y;\n}\n// Note: We allow removing Taint when two tainted\n// values are compared.\nfunction f3(x : $Tainted<string>, y : string) {\n  var z : bool = x < y;\n}\n"
  },
  {
    "path": "tests/flow/taint/function.js",
    "content": "// @flow\n\nlet tests = [\n  // flows any to each param\n  function(x: any, y: $Tainted<string>) {\n    x(y); // error, taint ~> any\n  },\n\n  // calling `any` returns `any`\n  function(x: any, y: $Tainted<string>) {\n    let z = x();\n    z(y);\n  }\n];\n"
  },
  {
    "path": "tests/flow/taint/globals.js",
    "content": "// @flow\n\nclass A {\n  f(x : $Tainted<FakeLocation>) {\n    fakeDocument.location = x; // error\n    doStuff(x); // ok\n  }\n  f1(x : $Tainted<FakeLocation>) {\n    // TODO(rcastano): should cause an error.\n    window.fakeLocation = x;\n  }\n}\n"
  },
  {
    "path": "tests/flow/taint/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/taint/lib.js",
    "content": "declare class FakeLocation {\n  assign(url: string): void;\n}\n\ndeclare class FakeDocument {\n  location: FakeLocation;\n}\n\ndeclare function doStuff(x: $Tainted<any>): void;\n\ndeclare var fakeDocument: FakeDocument;\ndeclare var fakeLocation: FakeLocation;\n"
  },
  {
    "path": "tests/flow/taint/taint1.js",
    "content": "/*\n *\n * @flow\n */\nclass A {\n  f(tainted : $Tainted<string>) {\n    // This shouldn't give a warning (both are tainted)\n    var also_tainted : $Tainted<string> = tainted;\n  }\n}\n"
  },
  {
    "path": "tests/flow/taint/taint2.js",
    "content": "/*\n *\n * @flow\n */\nclass A {\n  f(tainted : $Tainted<string>) {\n    // This *should* give a warning.\n    fakeDocument.location.assign(tainted);\n  }\n}\n"
  },
  {
    "path": "tests/flow/taint/taint3.js",
    "content": "/*\n *\n * @flow\n */\nclass A {\n  f(tainted : $Tainted<string>) {\n    // The Tainted annotation should still flow.\n    var safe = tainted;\n    // This should give a warning.\n    var loc : string = safe;\n  }\n}\n"
  },
  {
    "path": "tests/flow/taint/taint4.js",
    "content": "/*\n *\n * @flow\n */\n\nvar safe : string = \"safe\";\n// This should be allowed.\nvar tainted : $Tainted<string> = safe\n\nfunction f(x : $Tainted<any>) {\n  // Should cause error.\n  var y : any = x;\n}\n"
  },
  {
    "path": "tests/flow/taint/use-types.js",
    "content": "/*\n * @flow\n */\n\n// Should cause an error.\nfunction foo (x : $Tainted<number>) {\n  var should_fail : number = x * 42;\n}\n// Should cause an error.\nfunction foo1 (x : $Tainted<{f: number}>) {\n  var ok : number = x.f;\n}\n// Should cause an error.\nfunction foo2 (o : {f (y:number):number}, t: $Tainted<number>) {\n  return o.f(t);\n}\n\nfunction foo3 (x : $Tainted<{f: number}>) {\n  var also_tainted : $Tainted<number> = x.f;\n}\n// Should cause an error.\nfunction foo4 (a : $Tainted<Array<string>>) {\n  var trusted : string = a[0];\n}\n// Type error.\nfunction foo5 (a : $Tainted<Array<string>>) {\n  var trusted_number : number = a[0];\n}\n\nfunction foo6 (a : $Tainted<Array<string>>) {\n  var trusted : $Tainted<string> = a[0];\n}\n"
  },
  {
    "path": "tests/flow/template/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`template.js 1`] = `\n/* @flow */\n\n(\\`foo\\`: string); // ok\n(\\`bar\\`: 'bar'); // ok\n(\\`baz\\`: number); // error\n\n\\`foo \\${123} bar\\`; // ok, number can be appended to string\n\\`foo \\${{bar: 123}} baz\\`; // error, object can't be appended\n\nlet tests = [\n  function(x: string) {\n    \\`foo \\${x}\\`; // ok\n    \\`\\${x} bar\\`; // ok\n    \\`foo \\${'bar'} \\${x}\\`; // ok\n  },\n  function(x: number) {\n    \\`foo \\${x}\\`; // ok\n    \\`\\${x} bar\\`; // ok\n    \\`foo \\${'bar'} \\${x}\\`; // ok\n  },\n  function(x: boolean) {\n    \\`foo \\${x}\\`; // error\n    \\`\\${x} bar\\`; // error\n    \\`foo \\${'bar'} \\${x}\\`; // error\n  },\n  function(x: mixed) {\n    \\`foo \\${x}\\`; // error\n    \\`\\${x} bar\\`; // error\n    \\`foo \\${'bar'} \\${x}\\`; // error\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n(\\`foo\\`: string); // ok\n(\\`bar\\`: \"bar\"); // ok\n(\\`baz\\`: number); // error\n\n\\`foo \\${123} bar\\`; // ok, number can be appended to string\n\\`foo \\${{ bar: 123 }} baz\\`; // error, object can't be appended\n\nlet tests = [\n  function(x: string) {\n    \\`foo \\${x}\\`; // ok\n    \\`\\${x} bar\\`; // ok\n    \\`foo \\${\"bar\"} \\${x}\\`; // ok\n  },\n  function(x: number) {\n    \\`foo \\${x}\\`; // ok\n    \\`\\${x} bar\\`; // ok\n    \\`foo \\${\"bar\"} \\${x}\\`; // ok\n  },\n  function(x: boolean) {\n    \\`foo \\${x}\\`; // error\n    \\`\\${x} bar\\`; // error\n    \\`foo \\${\"bar\"} \\${x}\\`; // error\n  },\n  function(x: mixed) {\n    \\`foo \\${x}\\`; // error\n    \\`\\${x} bar\\`; // error\n    \\`foo \\${\"bar\"} \\${x}\\`; // error\n  }\n];\n\n`;\n"
  },
  {
    "path": "tests/flow/template/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/template/template.js",
    "content": "/* @flow */\n\n(`foo`: string); // ok\n(`bar`: 'bar'); // ok\n(`baz`: number); // error\n\n`foo ${123} bar`; // ok, number can be appended to string\n`foo ${{bar: 123}} baz`; // error, object can't be appended\n\nlet tests = [\n  function(x: string) {\n    `foo ${x}`; // ok\n    `${x} bar`; // ok\n    `foo ${'bar'} ${x}`; // ok\n  },\n  function(x: number) {\n    `foo ${x}`; // ok\n    `${x} bar`; // ok\n    `foo ${'bar'} ${x}`; // ok\n  },\n  function(x: boolean) {\n    `foo ${x}`; // error\n    `${x} bar`; // error\n    `foo ${'bar'} ${x}`; // error\n  },\n  function(x: mixed) {\n    `foo ${x}`; // error\n    `${x} bar`; // error\n    `foo ${'bar'} ${x}`; // error\n  },\n];\n"
  },
  {
    "path": "tests/flow/this/This.js",
    "content": "/* @providesModule This */\n\nfunction F() { this.x = 0; }\nF.prototype.m = function() { this.y = 0; }\n\nfunction foo(p:string) { }\n\nvar o1 = new F(); // sets o1.x to 0\no1.x = \"\";\nfoo(o1.x); // ok by definite assignment\n\nvar o2 = new F();\no1.y = 0;\no2.y = \"\";\nfoo(o2.y); // setting o1.y to 0 has no effect on o2.y\n\nvar o3 = new F();\no3.m(); // sets o3.y to 0\no3.y = \"\";\nfoo(o3.y); // ok by definite assignment\nfoo(o2.y); // setting o3.y to 0 has no effect on o2.y\n\n/*\n * this bindings:\n */\n\n/* standard functions may rebind this */\nfunction f1() : number {\n  return this.x\n}\n\nvar f1_1 = f1.bind({x: 0})();            // ok\nvar f1_2 : string = f1.bind({x: 0})();   // error, number -> string\nvar f1_3 = f1.bind({x: \"\"})();           // error, string -> number\n// TODO make this error blame the call site, rather than the function body\nvar f1_4 = f1();                         // error, (global object).x\n\n/* arrow functions bind this at point of definition */\n/* top level arrow functions bind this to global object */\nvar a1 = () => {\n  return this.x\n}\n\nvar ax = a1();                          // error, (this:mixed).x\n\n/* nested arrows bind enclosing this (which may itself rebind) */\nfunction f2() : number {\n    var a2 = () => { return this.x };\n    return a2()\n}\n\nvar f2_1 = f2.bind({x: 0})();            // ok\nvar f2_2 : string = f2.bind({x: 0})();   // error, number -> string\nvar f2_3 = f2.bind({x: \"\"})();           // error, string -> number\n// TODO make this error blame the call site, rather than the function body\nvar f2_4 = f2();                         // error, (global object).x\n\n(this: void);\n\nmodule.exports = true;\n"
  },
  {
    "path": "tests/flow/this/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`This.js 1`] = `\n/* @providesModule This */\n\nfunction F() { this.x = 0; }\nF.prototype.m = function() { this.y = 0; }\n\nfunction foo(p:string) { }\n\nvar o1 = new F(); // sets o1.x to 0\no1.x = \"\";\nfoo(o1.x); // ok by definite assignment\n\nvar o2 = new F();\no1.y = 0;\no2.y = \"\";\nfoo(o2.y); // setting o1.y to 0 has no effect on o2.y\n\nvar o3 = new F();\no3.m(); // sets o3.y to 0\no3.y = \"\";\nfoo(o3.y); // ok by definite assignment\nfoo(o2.y); // setting o3.y to 0 has no effect on o2.y\n\n/*\n * this bindings:\n */\n\n/* standard functions may rebind this */\nfunction f1() : number {\n  return this.x\n}\n\nvar f1_1 = f1.bind({x: 0})();            // ok\nvar f1_2 : string = f1.bind({x: 0})();   // error, number -> string\nvar f1_3 = f1.bind({x: \"\"})();           // error, string -> number\n// TODO make this error blame the call site, rather than the function body\nvar f1_4 = f1();                         // error, (global object).x\n\n/* arrow functions bind this at point of definition */\n/* top level arrow functions bind this to global object */\nvar a1 = () => {\n  return this.x\n}\n\nvar ax = a1();                          // error, (this:mixed).x\n\n/* nested arrows bind enclosing this (which may itself rebind) */\nfunction f2() : number {\n    var a2 = () => { return this.x };\n    return a2()\n}\n\nvar f2_1 = f2.bind({x: 0})();            // ok\nvar f2_2 : string = f2.bind({x: 0})();   // error, number -> string\nvar f2_3 = f2.bind({x: \"\"})();           // error, string -> number\n// TODO make this error blame the call site, rather than the function body\nvar f2_4 = f2();                         // error, (global object).x\n\n(this: void);\n\nmodule.exports = true;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule This */\n\nfunction F() {\n  this.x = 0;\n}\nF.prototype.m = function() {\n  this.y = 0;\n};\n\nfunction foo(p: string) {}\n\nvar o1 = new F(); // sets o1.x to 0\no1.x = \"\";\nfoo(o1.x); // ok by definite assignment\n\nvar o2 = new F();\no1.y = 0;\no2.y = \"\";\nfoo(o2.y); // setting o1.y to 0 has no effect on o2.y\n\nvar o3 = new F();\no3.m(); // sets o3.y to 0\no3.y = \"\";\nfoo(o3.y); // ok by definite assignment\nfoo(o2.y); // setting o3.y to 0 has no effect on o2.y\n\n/*\n * this bindings:\n */\n\n/* standard functions may rebind this */\nfunction f1(): number {\n  return this.x;\n}\n\nvar f1_1 = f1.bind({ x: 0 })(); // ok\nvar f1_2: string = f1.bind({ x: 0 })(); // error, number -> string\nvar f1_3 = f1.bind({ x: \"\" })(); // error, string -> number\n// TODO make this error blame the call site, rather than the function body\nvar f1_4 = f1(); // error, (global object).x\n\n/* arrow functions bind this at point of definition */\n/* top level arrow functions bind this to global object */\nvar a1 = () => {\n  return this.x;\n};\n\nvar ax = a1(); // error, (this:mixed).x\n\n/* nested arrows bind enclosing this (which may itself rebind) */\nfunction f2(): number {\n  var a2 = () => {\n    return this.x;\n  };\n  return a2();\n}\n\nvar f2_1 = f2.bind({ x: 0 })(); // ok\nvar f2_2: string = f2.bind({ x: 0 })(); // error, number -> string\nvar f2_3 = f2.bind({ x: \"\" })(); // error, string -> number\n// TODO make this error blame the call site, rather than the function body\nvar f2_4 = f2(); // error, (global object).x\n\n(this: void);\n\nmodule.exports = true;\n\n`;\n\nexports[`arrows.js 1`] = `\nclass C {\n  foo() {\n    return () => { return this.bar(); }; // OK, since this: C\n  }\n  bar() { return this; } // return type is C\n}\nvar c = new C;\nvar f = c.foo();\nvar i = f(); // OK\n(i: C); // OK\n\nclass D extends C { }\nvar d = new D;\nvar g = d.foo();\nvar j = g(); // OK\n(j: D); // error, since return type of bar is C, not the type of \\`this\\`\n\nclass E {\n  foo(x: number) { }\n}\nclass F extends E {\n  foo() { // OK to override with generalization\n    (() => {\n      super.foo(\"\"); // find super method, error due to incorrect arg\n    })();\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {\n  foo() {\n    return () => {\n      return this.bar();\n    }; // OK, since this: C\n  }\n  bar() {\n    return this;\n  } // return type is C\n}\nvar c = new C();\nvar f = c.foo();\nvar i = f(); // OK\n(i: C); // OK\n\nclass D extends C {}\nvar d = new D();\nvar g = d.foo();\nvar j = g(); // OK\n(j: D); // error, since return type of bar is C, not the type of \\`this\\`\n\nclass E {\n  foo(x: number) {}\n}\nclass F extends E {\n  foo() {\n    // OK to override with generalization\n    (() => {\n      super.foo(\"\"); // find super method, error due to incorrect arg\n    })();\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/this/arrows.js",
    "content": "class C {\n  foo() {\n    return () => { return this.bar(); }; // OK, since this: C\n  }\n  bar() { return this; } // return type is C\n}\nvar c = new C;\nvar f = c.foo();\nvar i = f(); // OK\n(i: C); // OK\n\nclass D extends C { }\nvar d = new D;\nvar g = d.foo();\nvar j = g(); // OK\n(j: D); // error, since return type of bar is C, not the type of `this`\n\nclass E {\n  foo(x: number) { }\n}\nclass F extends E {\n  foo() { // OK to override with generalization\n    (() => {\n      super.foo(\"\"); // find super method, error due to incorrect arg\n    })();\n  }\n}\n"
  },
  {
    "path": "tests/flow/this/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/this_ctor/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nclass A {\n  n: number;\n  constructor(n: number) {\n    this.n = n;\n  }\n  clone(): A {\n    return new this.constructor(this.n);\n  }\n  badClone(): number {\n    return new this.constructor(this.n); // Error A ~> number\n  }\n}\n\nvar a1 = new A(1);\nvar a2: A = new a1.constructor(2);\nvar a3: A = a2.clone();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {\n  n: number;\n  constructor(n: number) {\n    this.n = n;\n  }\n  clone(): A {\n    return new this.constructor(this.n);\n  }\n  badClone(): number {\n    return new this.constructor(this.n); // Error A ~> number\n  }\n}\n\nvar a1 = new A(1);\nvar a2: A = new a1.constructor(2);\nvar a3: A = a2.clone();\n\n`;\n"
  },
  {
    "path": "tests/flow/this_ctor/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/this_ctor/test.js",
    "content": "class A {\n  n: number;\n  constructor(n: number) {\n    this.n = n;\n  }\n  clone(): A {\n    return new this.constructor(this.n);\n  }\n  badClone(): number {\n    return new this.constructor(this.n); // Error A ~> number\n  }\n}\n\nvar a1 = new A(1);\nvar a2: A = new a1.constructor(2);\nvar a3: A = a2.clone();\n"
  },
  {
    "path": "tests/flow/this_type/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`class_expr.js 1`] = `\n/* @flow */\n// issue #1191\n\nconst Thing = class Thing {\n  zark() {\n    this.x = 123; // error: property not found (must be declared)\n  }\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n// issue #1191\n\nconst Thing = class Thing {\n  zark() {\n    this.x = 123; // error: property not found (must be declared)\n  }\n};\n\n`;\n\nexports[`contra.js 1`] = `\n// Counterexample with contravariant this type\n\nclass C {\n  next: this; // error (see below for exploit): \\`this\\` should only appear in\n              // covariant positions\n}\n\nclass D extends C { }\n\nvar d = new D();\n(d: C).next = new C;\n(d.next: D); // sneaky\n\nclass A {\n  foo<X: this>(that: X) { } // error: can't hide contravariance using a bound\n}\n\nclass B extends A {\n  foo<Y: this>(that: Y) { } // error (see above, catches hidden override)\n}\n\n// covariance checks on this type in invariant positions\n\nclass Invariant {\n  out_object(): { _: this } { return { _: this }; }\n  in_object(_: { _: this }) { }\n  inout_object: { _: this };\n\n  out_array(): Array<this> { return [this]; }\n  in_array(_: Array<this>) { }\n  inout_array: Array<this>;\n}\n\n// covariance checks on this type as type args\n\nclass Misc {\n  // Set<X> has invariant X\n  out_set(): Set<this> { return new Set().add(this); }\n  in_set(_: Set<this>) { }\n  inout_set: Set<this>;\n\n  // Promise<X> has covariant X\n  async out_promise(): Promise<this> { return this; }\n  in_promise(_: Promise<this>) { }\n  inout_promise: Promise<this>;\n\n  // Generator<X,Y,Z> has covariant X, covariant Y, contravariant Z\n  *out_generator(): Generator<this,this,this> {\n    yield this;\n    return this;\n  }\n  in_generator(_: Generator<this,this,this>) { }\n  inout_generator: Generator<this,this,this>;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Counterexample with contravariant this type\n\nclass C {\n  next: this; // error (see below for exploit): \\`this\\` should only appear in\n  // covariant positions\n}\n\nclass D extends C {}\n\nvar d = new D();\n(d: C).next = new C();\n(d.next: D); // sneaky\n\nclass A {\n  foo<X: this>(that: X) {} // error: can't hide contravariance using a bound\n}\n\nclass B extends A {\n  foo<Y: this>(that: Y) {} // error (see above, catches hidden override)\n}\n\n// covariance checks on this type in invariant positions\n\nclass Invariant {\n  out_object(): { _: this } {\n    return { _: this };\n  }\n  in_object(_: { _: this }) {}\n  inout_object: { _: this };\n\n  out_array(): Array<this> {\n    return [this];\n  }\n  in_array(_: Array<this>) {}\n  inout_array: Array<this>;\n}\n\n// covariance checks on this type as type args\n\nclass Misc {\n  // Set<X> has invariant X\n  out_set(): Set<this> {\n    return new Set().add(this);\n  }\n  in_set(_: Set<this>) {}\n  inout_set: Set<this>;\n\n  // Promise<X> has covariant X\n  async out_promise(): Promise<this> {\n    return this;\n  }\n  in_promise(_: Promise<this>) {}\n  inout_promise: Promise<this>;\n\n  // Generator<X,Y,Z> has covariant X, covariant Y, contravariant Z\n  *out_generator(): Generator<this, this, this> {\n    yield this;\n    return this;\n  }\n  in_generator(_: Generator<this, this, this>) {}\n  inout_generator: Generator<this, this, this>;\n}\n\n`;\n\nexports[`export.js 1`] = `\nexport class A1 {\n  foo(): this { return this; }\n  bar(): this { return this; }\n}\n\nexport class A2<X> {\n  foo(): this { return this; }\n  bar(): this { return this; }\n  qux(x: X): X { return x; }\n}\n\nexport class A3<X> extends A2<X> {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport class A1 {\n  foo(): this {\n    return this;\n  }\n  bar(): this {\n    return this;\n  }\n}\n\nexport class A2<X> {\n  foo(): this {\n    return this;\n  }\n  bar(): this {\n    return this;\n  }\n  qux(x: X): X {\n    return x;\n  }\n}\n\nexport class A3<X> extends A2<X> {}\n\n`;\n\nexports[`generics.js 1`] = `\nclass Generic<X> {\n  clone(): Generic<X> { return this; }\n}\n\nclass Implicit<X> { arg: X; val: X; }\nclass ImplicitNumber extends Implicit { arg: number; }\n\n(new ImplicitNumber().val: string) // error: number ~> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass Generic<X> {\n  clone(): Generic<X> {\n    return this;\n  }\n}\n\nclass Implicit<X> {\n  arg: X;\n  val: X;\n}\nclass ImplicitNumber extends Implicit {\n  arg: number;\n}\n\n(new ImplicitNumber().val: string); // error: number ~> string\n\n`;\n\nexports[`import.js 1`] = `\n// Check that imports are handled properly with this types\n\nimport { A1 } from './export';\nimport type { A2 } from './export';\nimport { A3 } from './export';\n\nclass B1 extends A1 {\n  foo(): B1 { return new B1(); } // error\n}\n\n(new B1().bar(): B1); // OK\n\nclass B3<X> extends A3<X> {\n  foo(): B3<X> { return new B3(); } // error\n}\n\n(new B3().bar(): B3<*>); // OK\n(new B3().qux(0): string); // error\n\n(new B3().bar(): A2<*>); // OK\n((new B3().bar(): B3<string>): A2<number>); // error\n((new B3(): A2<number>).qux(0): string); // error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Check that imports are handled properly with this types\n\nimport { A1 } from \"./export\";\nimport type { A2 } from \"./export\";\nimport { A3 } from \"./export\";\n\nclass B1 extends A1 {\n  foo(): B1 {\n    return new B1();\n  } // error\n}\n\n(new B1().bar(): B1); // OK\n\nclass B3<X> extends A3<X> {\n  foo(): B3<X> {\n    return new B3();\n  } // error\n}\n\n(new B3().bar(): B3<*>); // OK\n(new B3().qux(0): string); // error\n\n(new B3().bar(): A2<*>); // OK\n((new B3().bar(): B3<string>): A2<number>); // error\n((new B3(): A2<number>).qux(0): string); // error\n\n`;\n\nexports[`interface.js 1`] = `\ninterface I { xs: Array<this>; }\ninterface J { f(): J; }\nclass C {\n  xs: Array<C>;\n  f(): C { return this; }\n}\nfunction foo(c: C): I { return c; }\nfunction bar(c: C): J { return c; }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface I { xs: Array<this> }\ninterface J { f(): J }\nclass C {\n  xs: Array<C>;\n  f(): C {\n    return this;\n  }\n}\nfunction foo(c: C): I {\n  return c;\n}\nfunction bar(c: C): J {\n  return c;\n}\n\n`;\n\nexports[`lib_client.js 1`] = `\n(new DoublyLinkedList().prev(): DoublyLinkedList);\n(new DoublyLinkedList().next(): DoublyLinkedList)\n\nvar MiniImmutable = require(\"mini-immutable\");\nclass C {\n  map: MiniImmutable.OrderedMap<number,string>;\n  update() {\n    this.map = this.map.set(0,\"\");\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n(new DoublyLinkedList().prev(): DoublyLinkedList);\n(new DoublyLinkedList().next(): DoublyLinkedList);\n\nvar MiniImmutable = require(\"mini-immutable\");\nclass C {\n  map: MiniImmutable.OrderedMap<number, string>;\n  update() {\n    this.map = this.map.set(0, \"\");\n  }\n}\n\n`;\n\nexports[`self.js 1`] = `\nclass A {\n  foo() { return this; } // return of foo is not annotated to get around\n                         // substituting this below\n  bar(): this { return new A().foo(); } // same as returning : A, so error\n  qux(): this { return this.bar(); } // OK (don't cascade errors)\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {\n  foo() {\n    return this;\n  } // return of foo is not annotated to get around\n  // substituting this below\n  bar(): this {\n    return new A().foo();\n  } // same as returning : A, so error\n  qux(): this {\n    return this.bar();\n  } // OK (don't cascade errors)\n}\n\n`;\n\nexports[`statics.js 1`] = `\n// supporting \\`this\\` type in statics\n\nclass A {\n  static make(): this { // factory method, whose return type \\`this\\` (still)\n                        // describes instances of A or subclasses of A: the\n                        // meaning of the \\`this\\` type is not changed simply by\n                        // switching into a static context\n    return new this; // but in a static context, the value \\`this\\` is bound to\n                     // the class, instead of instances of the class\n  }\n}\nclass B extends A { } // inherits statics method too, with \\`this\\` bound to the class\n\n(A.make(): A); // OK\n(B.make(): B); // OK\n(B.make(): A); // OK\n(A.make(): B); // error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// supporting \\`this\\` type in statics\n\nclass A {\n  static make(): this {\n    // factory method, whose return type \\`this\\` (still)\n    // describes instances of A or subclasses of A: the\n    // meaning of the \\`this\\` type is not changed simply by\n    // switching into a static context\n    return new this(); // but in a static context, the value \\`this\\` is bound to\n    // the class, instead of instances of the class\n  }\n}\nclass B extends A {} // inherits statics method too, with \\`this\\` bound to the class\n\n(A.make(): A); // OK\n(B.make(): B); // OK\n(B.make(): A); // OK\n(A.make(): B); // error\n\n`;\n\nexports[`test.js 1`] = `\n// Examples without \\`this\\` types (compare with examples below)\n\nclass Base {\n  foo() { return this; }\n  qux() { return new Base; }\n\n  bar() { return this; }\n  bar_caller() { return this.bar(); }\n}\n\nclass Inherit extends Base { }\n\nclass Override extends Base {\n  foo() { return this; } // OK\n  qux() { return this; } // OK, too\n\n  bar() { return new Override; } // OK (cf. error below)\n}\n\nclass InheritOverride extends Override { }\n\n(new Inherit().foo(): Base);\n(new Inherit().foo(): Inherit); // error (cf. OK below)\n((new Inherit(): Base).foo(): Base);\n(new Override().foo(): Base);\n(new Override().foo(): Override); // OK\n((new Override(): Base).foo(): Base);\n\n(new InheritOverride().bar_caller(): InheritOverride); // error\n                                                       // blame flips below\n\n// Examples with \\`this\\` types (compare with examples above)\n\nclass Base2 {\n  foo(): this { return this; }\n  qux(): Base2 { return new Base2; }\n\n  bar(): this { return this; }\n  bar_caller(): this { return this.bar(); }\n\n  corge(that: this) { }\n  grault(that: Base2) { }\n}\n\nclass Inherit2 extends Base2 { }\n\nclass Override2 extends Base2 {\n  foo(): this { return this; } // OK\n  qux(): this { return this; } // OK, too\n\n  bar(): Override2 { return new Override2; } // error (cf. OK above)\n                                             // see exploit below\n\n  corge(that: this) { } // error\n                        // see exploit below\n  grault(that: this) { } // error, too\n}\n\nclass InheritOverride2 extends Override2 { }\n\n(new Inherit2().foo(): Base2);\n(new Inherit2().foo(): Inherit2); // OK (cf. error above)\n((new Inherit2(): Base2).foo(): Base2);\n(new Override2().foo(): Base2);\n(new Override2().foo(): Override2); // OK\n((new Override2(): Base2).foo(): Base2);\n\n(new InheritOverride2().bar_caller(): InheritOverride2); // exploits error above\n\n(new Override2(): Base2).corge(new Base2()); // exploits error above\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Examples without \\`this\\` types (compare with examples below)\n\nclass Base {\n  foo() {\n    return this;\n  }\n  qux() {\n    return new Base();\n  }\n\n  bar() {\n    return this;\n  }\n  bar_caller() {\n    return this.bar();\n  }\n}\n\nclass Inherit extends Base {}\n\nclass Override extends Base {\n  foo() {\n    return this;\n  } // OK\n  qux() {\n    return this;\n  } // OK, too\n\n  bar() {\n    return new Override();\n  } // OK (cf. error below)\n}\n\nclass InheritOverride extends Override {}\n\n(new Inherit().foo(): Base);\n(new Inherit().foo(): Inherit); // error (cf. OK below)\n((new Inherit(): Base).foo(): Base);\n(new Override().foo(): Base);\n(new Override().foo(): Override); // OK\n((new Override(): Base).foo(): Base);\n\n(new InheritOverride().bar_caller(): InheritOverride); // error\n// blame flips below\n\n// Examples with \\`this\\` types (compare with examples above)\n\nclass Base2 {\n  foo(): this {\n    return this;\n  }\n  qux(): Base2 {\n    return new Base2();\n  }\n\n  bar(): this {\n    return this;\n  }\n  bar_caller(): this {\n    return this.bar();\n  }\n\n  corge(that: this) {}\n  grault(that: Base2) {}\n}\n\nclass Inherit2 extends Base2 {}\n\nclass Override2 extends Base2 {\n  foo(): this {\n    return this;\n  } // OK\n  qux(): this {\n    return this;\n  } // OK, too\n\n  bar(): Override2 {\n    return new Override2();\n  } // error (cf. OK above)\n  // see exploit below\n\n  corge(that: this) {} // error\n  // see exploit below\n  grault(that: this) {} // error, too\n}\n\nclass InheritOverride2 extends Override2 {}\n\n(new Inherit2().foo(): Base2);\n(new Inherit2().foo(): Inherit2); // OK (cf. error above)\n((new Inherit2(): Base2).foo(): Base2);\n(new Override2().foo(): Base2);\n(new Override2().foo(): Override2); // OK\n((new Override2(): Base2).foo(): Base2);\n\n(new InheritOverride2().bar_caller(): InheritOverride2); // exploits error above\n\n(new Override2(): Base2).corge(new Base2()); // exploits error above\n\n`;\n"
  },
  {
    "path": "tests/flow/this_type/class_expr.js",
    "content": "/* @flow */\n// issue #1191\n\nconst Thing = class Thing {\n  zark() {\n    this.x = 123; // error: property not found (must be declared)\n  }\n};\n"
  },
  {
    "path": "tests/flow/this_type/contra.js",
    "content": "// Counterexample with contravariant this type\n\nclass C {\n  next: this; // error (see below for exploit): `this` should only appear in\n              // covariant positions\n}\n\nclass D extends C { }\n\nvar d = new D();\n(d: C).next = new C;\n(d.next: D); // sneaky\n\nclass A {\n  foo<X: this>(that: X) { } // error: can't hide contravariance using a bound\n}\n\nclass B extends A {\n  foo<Y: this>(that: Y) { } // error (see above, catches hidden override)\n}\n\n// covariance checks on this type in invariant positions\n\nclass Invariant {\n  out_object(): { _: this } { return { _: this }; }\n  in_object(_: { _: this }) { }\n  inout_object: { _: this };\n\n  out_array(): Array<this> { return [this]; }\n  in_array(_: Array<this>) { }\n  inout_array: Array<this>;\n}\n\n// covariance checks on this type as type args\n\nclass Misc {\n  // Set<X> has invariant X\n  out_set(): Set<this> { return new Set().add(this); }\n  in_set(_: Set<this>) { }\n  inout_set: Set<this>;\n\n  // Promise<X> has covariant X\n  async out_promise(): Promise<this> { return this; }\n  in_promise(_: Promise<this>) { }\n  inout_promise: Promise<this>;\n\n  // Generator<X,Y,Z> has covariant X, covariant Y, contravariant Z\n  *out_generator(): Generator<this,this,this> {\n    yield this;\n    return this;\n  }\n  in_generator(_: Generator<this,this,this>) { }\n  inout_generator: Generator<this,this,this>;\n}\n"
  },
  {
    "path": "tests/flow/this_type/export.js",
    "content": "export class A1 {\n  foo(): this { return this; }\n  bar(): this { return this; }\n}\n\nexport class A2<X> {\n  foo(): this { return this; }\n  bar(): this { return this; }\n  qux(x: X): X { return x; }\n}\n\nexport class A3<X> extends A2<X> {}\n"
  },
  {
    "path": "tests/flow/this_type/generics.js",
    "content": "class Generic<X> {\n  clone(): Generic<X> { return this; }\n}\n\nclass Implicit<X> { arg: X; val: X; }\nclass ImplicitNumber extends Implicit { arg: number; }\n\n(new ImplicitNumber().val: string) // error: number ~> string\n"
  },
  {
    "path": "tests/flow/this_type/import.js",
    "content": "// Check that imports are handled properly with this types\n\nimport { A1 } from './export';\nimport type { A2 } from './export';\nimport { A3 } from './export';\n\nclass B1 extends A1 {\n  foo(): B1 { return new B1(); } // error\n}\n\n(new B1().bar(): B1); // OK\n\nclass B3<X> extends A3<X> {\n  foo(): B3<X> { return new B3(); } // error\n}\n\n(new B3().bar(): B3<*>); // OK\n(new B3().qux(0): string); // error\n\n(new B3().bar(): A2<*>); // OK\n((new B3().bar(): B3<string>): A2<number>); // error\n((new B3(): A2<number>).qux(0): string); // error\n"
  },
  {
    "path": "tests/flow/this_type/interface.js",
    "content": "interface I { xs: Array<this>; }\ninterface J { f(): J; }\nclass C {\n  xs: Array<C>;\n  f(): C { return this; }\n}\nfunction foo(c: C): I { return c; }\nfunction bar(c: C): J { return c; }\n"
  },
  {
    "path": "tests/flow/this_type/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/this_type/lib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`decl.js 1`] = `\n// The following declare classes use \\`this\\` types effectively to avoid type\n// errors in ../lib_client.js. If support for \\`this\\` types in declare classes\n// is disabled for perf reasons, these will produce warnings.\n\ndeclare class LinkedList {\n  next(): this;\n}\ndeclare class DoublyLinkedList extends LinkedList {\n  prev(): this;\n}\n\ndeclare module \"mini-immutable\" {\n  declare class Map<K,V> {\n    set(key: K, value: V): this; // more precise than Map<K,V> (see below)\n  }\n  declare class OrderedMap<K,V> extends Map<K,V> {\n    // inherits set method returning OrderedMap<K,V> instead of Map<K,V>\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// The following declare classes use \\`this\\` types effectively to avoid type\n// errors in ../lib_client.js. If support for \\`this\\` types in declare classes\n// is disabled for perf reasons, these will produce warnings.\n\ndeclare class LinkedList {\n  next(): this\n}\ndeclare class DoublyLinkedList extends LinkedList {\n  prev(): this\n}\n\ndeclare module \"mini-immutable\" {\n  declare class Map<K, V> {\n    set(key: K, value: V): this // more precise than Map<K,V> (see below)\n  }\n  declare class OrderedMap<K, V> extends Map<K, V> {\n    // inherits set method returning OrderedMap<K,V> instead of Map<K,V>\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/this_type/lib/decl.js",
    "content": "// The following declare classes use `this` types effectively to avoid type\n// errors in ../lib_client.js. If support for `this` types in declare classes\n// is disabled for perf reasons, these will produce warnings.\n\ndeclare class LinkedList {\n  next(): this;\n}\ndeclare class DoublyLinkedList extends LinkedList {\n  prev(): this;\n}\n\ndeclare module \"mini-immutable\" {\n  declare class Map<K,V> {\n    set(key: K, value: V): this; // more precise than Map<K,V> (see below)\n  }\n  declare class OrderedMap<K,V> extends Map<K,V> {\n    // inherits set method returning OrderedMap<K,V> instead of Map<K,V>\n  }\n}\n"
  },
  {
    "path": "tests/flow/this_type/lib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/this_type/lib_client.js",
    "content": "(new DoublyLinkedList().prev(): DoublyLinkedList);\n(new DoublyLinkedList().next(): DoublyLinkedList)\n\nvar MiniImmutable = require(\"mini-immutable\");\nclass C {\n  map: MiniImmutable.OrderedMap<number,string>;\n  update() {\n    this.map = this.map.set(0,\"\");\n  }\n}\n"
  },
  {
    "path": "tests/flow/this_type/self.js",
    "content": "class A {\n  foo() { return this; } // return of foo is not annotated to get around\n                         // substituting this below\n  bar(): this { return new A().foo(); } // same as returning : A, so error\n  qux(): this { return this.bar(); } // OK (don't cascade errors)\n}\n"
  },
  {
    "path": "tests/flow/this_type/statics.js",
    "content": "// supporting `this` type in statics\n\nclass A {\n  static make(): this { // factory method, whose return type `this` (still)\n                        // describes instances of A or subclasses of A: the\n                        // meaning of the `this` type is not changed simply by\n                        // switching into a static context\n    return new this; // but in a static context, the value `this` is bound to\n                     // the class, instead of instances of the class\n  }\n}\nclass B extends A { } // inherits statics method too, with `this` bound to the class\n\n(A.make(): A); // OK\n(B.make(): B); // OK\n(B.make(): A); // OK\n(A.make(): B); // error\n"
  },
  {
    "path": "tests/flow/this_type/test.js",
    "content": "// Examples without `this` types (compare with examples below)\n\nclass Base {\n  foo() { return this; }\n  qux() { return new Base; }\n\n  bar() { return this; }\n  bar_caller() { return this.bar(); }\n}\n\nclass Inherit extends Base { }\n\nclass Override extends Base {\n  foo() { return this; } // OK\n  qux() { return this; } // OK, too\n\n  bar() { return new Override; } // OK (cf. error below)\n}\n\nclass InheritOverride extends Override { }\n\n(new Inherit().foo(): Base);\n(new Inherit().foo(): Inherit); // error (cf. OK below)\n((new Inherit(): Base).foo(): Base);\n(new Override().foo(): Base);\n(new Override().foo(): Override); // OK\n((new Override(): Base).foo(): Base);\n\n(new InheritOverride().bar_caller(): InheritOverride); // error\n                                                       // blame flips below\n\n// Examples with `this` types (compare with examples above)\n\nclass Base2 {\n  foo(): this { return this; }\n  qux(): Base2 { return new Base2; }\n\n  bar(): this { return this; }\n  bar_caller(): this { return this.bar(); }\n\n  corge(that: this) { }\n  grault(that: Base2) { }\n}\n\nclass Inherit2 extends Base2 { }\n\nclass Override2 extends Base2 {\n  foo(): this { return this; } // OK\n  qux(): this { return this; } // OK, too\n\n  bar(): Override2 { return new Override2; } // error (cf. OK above)\n                                             // see exploit below\n\n  corge(that: this) { } // error\n                        // see exploit below\n  grault(that: this) { } // error, too\n}\n\nclass InheritOverride2 extends Override2 { }\n\n(new Inherit2().foo(): Base2);\n(new Inherit2().foo(): Inherit2); // OK (cf. error above)\n((new Inherit2(): Base2).foo(): Base2);\n(new Override2().foo(): Base2);\n(new Override2().foo(): Override2); // OK\n((new Override2(): Base2).foo(): Base2);\n\n(new InheritOverride2().bar_caller(): InheritOverride2); // exploits error above\n\n(new Override2(): Base2).corge(new Base2()); // exploits error above\n"
  },
  {
    "path": "tests/flow/throw/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n/**\n * @flow\n */\n\nfunction f(): number {\n    throw new Error(); // OK to not return\n}\n\nfunction g(a: ?string) {\n    if (a == null) {\n        throw new Error();\n    }\n    return a*1; // a is not null\n}\n\nfunction h(x: number): string {\n  if (x) {\n    return 'foo';\n  } else {\n    throw new Error();\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nfunction f(): number {\n  throw new Error(); // OK to not return\n}\n\nfunction g(a: ?string) {\n  if (a == null) {\n    throw new Error();\n  }\n  return a * 1; // a is not null\n}\n\nfunction h(x: number): string {\n  if (x) {\n    return \"foo\";\n  } else {\n    throw new Error();\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/throw/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/throw/test.js",
    "content": "/**\n * @flow\n */\n\nfunction f(): number {\n    throw new Error(); // OK to not return\n}\n\nfunction g(a: ?string) {\n    if (a == null) {\n        throw new Error();\n    }\n    return a*1; // a is not null\n}\n\nfunction h(x: number): string {\n  if (x) {\n    return 'foo';\n  } else {\n    throw new Error();\n  }\n}\n"
  },
  {
    "path": "tests/flow/traces/Traces.js",
    "content": "// arg/param type mismatch on arg 0\nfunction g0(y:string) { }\nfunction f0(x) { g0(x) }\nf0(0);\n\n// ...on arg n\nfunction g1(a:string, b:string) { }\nfunction f1(x, y) { g1(x, y) }\nf1(\"hey\", 0);\n\n// h/o call with function expr\nfunction g2(ylam: (s:string) => number) { }\nfunction f2(xlam) { g2(xlam) }\nf2(function(x) { return x * x });\n\n// h/o call with function def\nfunction g3(ylam: (s:string) => number) { }\nfunction f3(xlam) { g3(xlam) }\nfunction double(n) { return n * 2 }\nf3(double);\n"
  },
  {
    "path": "tests/flow/traces/Traces2.js",
    "content": "// @flow\n\nvar React = require('react');\n\nvar A = React.createClass({\n  propTypes: { foo: React.PropTypes.string.isRequired }\n});\n\nvar B = React.createClass({\n  propTypes: { bar: React.PropTypes.string.isRequired }\n});\n\nfunction f(b): React.Element<*> {\n  if (b) {\n    return <A foo=\"hey\"/>;\n  } else {\n    return <B bar=\"hey\"/>;\n  }\n}\n"
  },
  {
    "path": "tests/flow/traces/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Traces.js 1`] = `\n// arg/param type mismatch on arg 0\nfunction g0(y:string) { }\nfunction f0(x) { g0(x) }\nf0(0);\n\n// ...on arg n\nfunction g1(a:string, b:string) { }\nfunction f1(x, y) { g1(x, y) }\nf1(\"hey\", 0);\n\n// h/o call with function expr\nfunction g2(ylam: (s:string) => number) { }\nfunction f2(xlam) { g2(xlam) }\nf2(function(x) { return x * x });\n\n// h/o call with function def\nfunction g3(ylam: (s:string) => number) { }\nfunction f3(xlam) { g3(xlam) }\nfunction double(n) { return n * 2 }\nf3(double);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// arg/param type mismatch on arg 0\nfunction g0(y: string) {}\nfunction f0(x) {\n  g0(x);\n}\nf0(0);\n\n// ...on arg n\nfunction g1(a: string, b: string) {}\nfunction f1(x, y) {\n  g1(x, y);\n}\nf1(\"hey\", 0);\n\n// h/o call with function expr\nfunction g2(ylam: (s: string) => number) {}\nfunction f2(xlam) {\n  g2(xlam);\n}\nf2(function(x) {\n  return x * x;\n});\n\n// h/o call with function def\nfunction g3(ylam: (s: string) => number) {}\nfunction f3(xlam) {\n  g3(xlam);\n}\nfunction double(n) {\n  return n * 2;\n}\nf3(double);\n\n`;\n\nexports[`Traces2.js 1`] = `\n// @flow\n\nvar React = require('react');\n\nvar A = React.createClass({\n  propTypes: { foo: React.PropTypes.string.isRequired }\n});\n\nvar B = React.createClass({\n  propTypes: { bar: React.PropTypes.string.isRequired }\n});\n\nfunction f(b): React.Element<*> {\n  if (b) {\n    return <A foo=\"hey\"/>;\n  } else {\n    return <B bar=\"hey\"/>;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nvar React = require(\"react\");\n\nvar A = React.createClass({\n  propTypes: { foo: React.PropTypes.string.isRequired }\n});\n\nvar B = React.createClass({\n  propTypes: { bar: React.PropTypes.string.isRequired }\n});\n\nfunction f(b): React.Element<*> {\n  if (b) {\n    return <A foo=\"hey\" />;\n  } else {\n    return <B bar=\"hey\" />;\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/traces/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/traits/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\ndeclare class Foo extends Qux<string> mixins Bar<number> {\n  // KeyedCollection <: Collection\n  // ...KeyedIterable\n}\ndeclare class Bar<T> extends Baz<T> {\n  // KeyedIterable <: Iterable\n  y: T\n}\ndeclare class Qux<T> extends Baz<T> {\n  // Collection <: Iterable\n  y: T, z: T\n}\ndeclare class Baz<T> {\n  // Iterable\n  x: T\n}\n\n((new Foo).x: number); // error: Qux wins\n((new Foo).y: string); // error: Bar wins\n((new Foo).z: number); // error: Qux wins\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class Foo extends Qux<string> {\n  // KeyedCollection <: Collection\n  // ...KeyedIterable\n}\ndeclare class Bar<T> extends Baz<T> {\n  // KeyedIterable <: Iterable\n  y: T\n}\ndeclare class Qux<T> extends Baz<T> {\n  // Collection <: Iterable\n  y: T,\n  z: T\n}\ndeclare class Baz<T> {\n  // Iterable\n  x: T\n}\n\n(new Foo().x: number); // error: Qux wins\n(new Foo().y: string); // error: Bar wins\n(new Foo().z: number); // error: Qux wins\n\n`;\n\nexports[`test2.js 1`] = `\ndeclare interface I { }\ndeclare class C mixins I { }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare interface I {}\ndeclare class C {}\n\n`;\n"
  },
  {
    "path": "tests/flow/traits/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/traits/test.js",
    "content": "declare class Foo extends Qux<string> mixins Bar<number> {\n  // KeyedCollection <: Collection\n  // ...KeyedIterable\n}\ndeclare class Bar<T> extends Baz<T> {\n  // KeyedIterable <: Iterable\n  y: T\n}\ndeclare class Qux<T> extends Baz<T> {\n  // Collection <: Iterable\n  y: T, z: T\n}\ndeclare class Baz<T> {\n  // Iterable\n  x: T\n}\n\n((new Foo).x: number); // error: Qux wins\n((new Foo).y: string); // error: Bar wins\n((new Foo).z: number); // error: Qux wins\n"
  },
  {
    "path": "tests/flow/traits/test2.js",
    "content": "declare interface I { }\ndeclare class C mixins I { }\n"
  },
  {
    "path": "tests/flow/try/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`abnormals.js 1`] = `\n/* @flow */\n\n/* This test documents an issue we used to have with merging the environment of\n * the try block and the catch block. The error variable, when inspected and in\n * the presence of an abnormal, would sometimes kind of leak. It would hit an\n * abnormal. It was weird.\n */\nfunction foo() {\n  try {\n  } catch(error) {\n    if (error.foo === 4) {\n      throw error;\n    }\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\n/* This test documents an issue we used to have with merging the environment of\n * the try block and the catch block. The error variable, when inspected and in\n * the presence of an abnormal, would sometimes kind of leak. It would hit an\n * abnormal. It was weird.\n */\nfunction foo() {\n  try {\n  } catch (error) {\n    if (error.foo === 4) {\n      throw error;\n    }\n  }\n}\n\n`;\n\nexports[`init.js 1`] = `\n/***\n * test initialization tracking of hoisted stuff\n * @flow\n */\n\n// for illustrative purposes only - Flow considers a throw possible\n// anywhere within a block\nfunction might_throw() {}\n\n// local use of annotated var within try is ok\nfunction f() {\n  try {\n    var x:number = 0;\n    var y:number = x;\n  } catch (e) {\n  }\n}\n\n// and within catch\nfunction f() {\n  try {\n  } catch (e) {\n    var x:number = 0;\n    var y:number = x;\n  }\n}\n\n// but not across try/catch\nfunction f() {\n  try {\n    might_throw();\n    var x:number = 0;\n  } catch (e) {\n    var y:number = x; // error\n  }\n}\n\n// or try/finally\nfunction f() {\n  try {\n    might_throw();\n    var x:number = 0;\n  } finally {\n    var y:number = x; // error\n  }\n}\n\n// or catch/finally\nfunction f() {\n  try {\n  } catch (e) {\n    var x:number = 0;\n  } finally {\n    var y:number = x; // error\n  }\n}\n\n// or try/catch/finally if init doesn't dominate\nfunction f() {\n  try {\n    var x:number = 0;\n  } catch (e) {\n    might_throw();\n    var x:number = 0;\n  } finally {\n    var y:number = x; // error\n  }\n}\n\n// post-use ok because init dominates here\nfunction f() {\n  try {\n    var x:number = 0;\n  } catch (e) {\n    might_throw();  // ...but if so, suffix is not reached\n    var x:number = 0;\n  }\n  var y:number = x;\n}\n\n// and here\nfunction f() {\n  try {\n  } catch (e) {\n  } finally {\n    might_throw();  // ...but if so, suffix is not reached\n    var x:number = 0;\n  }\n  var y:number = x;\n}\n\n// and here\nfunction f() {\n  try {\n    var x:number;\n  } catch (e) {\n  } finally {\n    might_throw();  // ...but if so, suffix is not reached\n    x = 0;\n  }\n  var y:number = x;\n}\n\n// and here, thank you JS for the wonder that is hoisting\nfunction f() {\n  try {\n  } catch (e) {\n    var x:number;\n  } finally {\n    might_throw();  // ...but if so, suffix is not reached\n    x = 0;\n  }\n  var y:number = x;\n}\n\n// error if used prior to init\nfunction f() {\n  var y:number = x; // error\n  try {\n    var x:number = 0;\n  } catch (e) {\n  }\n}\n\n// another non-dominated post\nfunction f() {\n  try {\n    var x:number = 0;\n  } catch (e) {\n  }\n  var y:number = x; // error\n}\n\n// ditto\nfunction f() {\n  try {\n  } catch (e) {\n    var x:number = 0;\n  }\n  var y:number = x; // error\n}\n\n// ditto\nfunction f(b) {\n  try {\n    var x:number;\n    if (b) {\n      throw new Error();\n    }\n    x = 0;\n  } catch (e) {\n  }\n  var y:number = x; // error\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/***\n * test initialization tracking of hoisted stuff\n * @flow\n */\n\n// for illustrative purposes only - Flow considers a throw possible\n// anywhere within a block\nfunction might_throw() {}\n\n// local use of annotated var within try is ok\nfunction f() {\n  try {\n    var x: number = 0;\n    var y: number = x;\n  } catch (e) {}\n}\n\n// and within catch\nfunction f() {\n  try {\n  } catch (e) {\n    var x: number = 0;\n    var y: number = x;\n  }\n}\n\n// but not across try/catch\nfunction f() {\n  try {\n    might_throw();\n    var x: number = 0;\n  } catch (e) {\n    var y: number = x; // error\n  }\n}\n\n// or try/finally\nfunction f() {\n  try {\n    might_throw();\n    var x: number = 0;\n  } finally {\n    var y: number = x; // error\n  }\n}\n\n// or catch/finally\nfunction f() {\n  try {\n  } catch (e) {\n    var x: number = 0;\n  } finally {\n    var y: number = x; // error\n  }\n}\n\n// or try/catch/finally if init doesn't dominate\nfunction f() {\n  try {\n    var x: number = 0;\n  } catch (e) {\n    might_throw();\n    var x: number = 0;\n  } finally {\n    var y: number = x; // error\n  }\n}\n\n// post-use ok because init dominates here\nfunction f() {\n  try {\n    var x: number = 0;\n  } catch (e) {\n    might_throw(); // ...but if so, suffix is not reached\n    var x: number = 0;\n  }\n  var y: number = x;\n}\n\n// and here\nfunction f() {\n  try {\n  } catch (e) {\n  } finally {\n    might_throw(); // ...but if so, suffix is not reached\n    var x: number = 0;\n  }\n  var y: number = x;\n}\n\n// and here\nfunction f() {\n  try {\n    var x: number;\n  } catch (e) {\n  } finally {\n    might_throw(); // ...but if so, suffix is not reached\n    x = 0;\n  }\n  var y: number = x;\n}\n\n// and here, thank you JS for the wonder that is hoisting\nfunction f() {\n  try {\n  } catch (e) {\n    var x: number;\n  } finally {\n    might_throw(); // ...but if so, suffix is not reached\n    x = 0;\n  }\n  var y: number = x;\n}\n\n// error if used prior to init\nfunction f() {\n  var y: number = x; // error\n  try {\n    var x: number = 0;\n  } catch (e) {}\n}\n\n// another non-dominated post\nfunction f() {\n  try {\n    var x: number = 0;\n  } catch (e) {}\n  var y: number = x; // error\n}\n\n// ditto\nfunction f() {\n  try {\n  } catch (e) {\n    var x: number = 0;\n  }\n  var y: number = x; // error\n}\n\n// ditto\nfunction f(b) {\n  try {\n    var x: number;\n    if (b) {\n      throw new Error();\n    }\n    x = 0;\n  } catch (e) {}\n  var y: number = x; // error\n}\n\n`;\n\nexports[`return.js 1`] = `\n/**\n * @flow\n */\n\nfunction foo(x: ?number): string {\n    try {\n    } catch (e) {\n        return 'bar';\n    }\n    console.log();\n    return 'foo';\n}\n\nfunction bar(): string {\n  try {\n    return 'foo';\n  } catch (e) {\n    return 'bar';\n  }\n}\n\nfunction baz(): string {\n  try {\n    throw new Error(\"foo\");\n  } catch (e) {\n    return \"foo\";\n  }\n  return \"bar\"; // unreachable\n}\n\nfunction qux(): string {\n  try {\n    throw new Error(\"foo\");\n  } catch (e) {\n  }\n  console.log();\n  return 'bar';\n}\n\nfunction quux(): string {\n  try {\n    return qux();\n  } catch (e) {\n  }\n  return 'bar';\n}\n\nfunction bliffl(): string {\n  try {\n    throw new Error(\"foo\");\n  } catch (e) {\n    return \"foo\";\n  } finally {\n    return \"bar\";\n  }\n}\n\nfunction corge(): string {\n  try {\n    return 'foo';\n  } catch (e) {\n    throw new Error('bar');\n  }\n  bar(); // unreachable\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nfunction foo(x: ?number): string {\n  try {\n  } catch (e) {\n    return \"bar\";\n  }\n  console.log();\n  return \"foo\";\n}\n\nfunction bar(): string {\n  try {\n    return \"foo\";\n  } catch (e) {\n    return \"bar\";\n  }\n}\n\nfunction baz(): string {\n  try {\n    throw new Error(\"foo\");\n  } catch (e) {\n    return \"foo\";\n  }\n  return \"bar\"; // unreachable\n}\n\nfunction qux(): string {\n  try {\n    throw new Error(\"foo\");\n  } catch (e) {}\n  console.log();\n  return \"bar\";\n}\n\nfunction quux(): string {\n  try {\n    return qux();\n  } catch (e) {}\n  return \"bar\";\n}\n\nfunction bliffl(): string {\n  try {\n    throw new Error(\"foo\");\n  } catch (e) {\n    return \"foo\";\n  } finally {\n    return \"bar\";\n  }\n}\n\nfunction corge(): string {\n  try {\n    return \"foo\";\n  } catch (e) {\n    throw new Error(\"bar\");\n  }\n  bar(); // unreachable\n}\n\n`;\n\nexports[`test.js 1`] = `\n/***\n * test env state tracking thru try/catch/finally\n * @flow\n */\n\nfunction foo() {\n    var x = 0;\n    var y;\n    try {\n        x = \"\";\n    } catch(e) {\n        x = false;\n        throw -1;\n    } finally {\n        y = {};\n    }\n    // here via [try; finally] only.\n    x(); // string ~/> function call (no num or bool error)\n    y(); // object ~/> function call (no uninitialized error)\n}\n\nfunction bar(response) {\n    var payload;\n    try {\n        payload = JSON.parse(response);\n    } catch (e) {\n        throw new Error('...');\n    }\n    // here via [try] only.\n    if (payload.error) {    // ok\n        // ...\n    }\n}\n\nfunction qux() {\n    var x = 5;\n    try {\n        throw -1;\n    } finally {\n    }\n    x(); // unreachable\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/***\n * test env state tracking thru try/catch/finally\n * @flow\n */\n\nfunction foo() {\n  var x = 0;\n  var y;\n  try {\n    x = \"\";\n  } catch (e) {\n    x = false;\n    throw -1;\n  } finally {\n    y = {};\n  }\n  // here via [try; finally] only.\n  x(); // string ~/> function call (no num or bool error)\n  y(); // object ~/> function call (no uninitialized error)\n}\n\nfunction bar(response) {\n  var payload;\n  try {\n    payload = JSON.parse(response);\n  } catch (e) {\n    throw new Error(\"...\");\n  }\n  // here via [try] only.\n  if (payload.error) {\n    // ok\n    // ...\n  }\n}\n\nfunction qux() {\n  var x = 5;\n  try {\n    throw -1;\n  } finally {\n  }\n  x(); // unreachable\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/try/abnormals.js",
    "content": "/* @flow */\n\n/* This test documents an issue we used to have with merging the environment of\n * the try block and the catch block. The error variable, when inspected and in\n * the presence of an abnormal, would sometimes kind of leak. It would hit an\n * abnormal. It was weird.\n */\nfunction foo() {\n  try {\n  } catch(error) {\n    if (error.foo === 4) {\n      throw error;\n    }\n  }\n}\n"
  },
  {
    "path": "tests/flow/try/init.js",
    "content": "/***\n * test initialization tracking of hoisted stuff\n * @flow\n */\n\n// for illustrative purposes only - Flow considers a throw possible\n// anywhere within a block\nfunction might_throw() {}\n\n// local use of annotated var within try is ok\nfunction f() {\n  try {\n    var x:number = 0;\n    var y:number = x;\n  } catch (e) {\n  }\n}\n\n// and within catch\nfunction f() {\n  try {\n  } catch (e) {\n    var x:number = 0;\n    var y:number = x;\n  }\n}\n\n// but not across try/catch\nfunction f() {\n  try {\n    might_throw();\n    var x:number = 0;\n  } catch (e) {\n    var y:number = x; // error\n  }\n}\n\n// or try/finally\nfunction f() {\n  try {\n    might_throw();\n    var x:number = 0;\n  } finally {\n    var y:number = x; // error\n  }\n}\n\n// or catch/finally\nfunction f() {\n  try {\n  } catch (e) {\n    var x:number = 0;\n  } finally {\n    var y:number = x; // error\n  }\n}\n\n// or try/catch/finally if init doesn't dominate\nfunction f() {\n  try {\n    var x:number = 0;\n  } catch (e) {\n    might_throw();\n    var x:number = 0;\n  } finally {\n    var y:number = x; // error\n  }\n}\n\n// post-use ok because init dominates here\nfunction f() {\n  try {\n    var x:number = 0;\n  } catch (e) {\n    might_throw();  // ...but if so, suffix is not reached\n    var x:number = 0;\n  }\n  var y:number = x;\n}\n\n// and here\nfunction f() {\n  try {\n  } catch (e) {\n  } finally {\n    might_throw();  // ...but if so, suffix is not reached\n    var x:number = 0;\n  }\n  var y:number = x;\n}\n\n// and here\nfunction f() {\n  try {\n    var x:number;\n  } catch (e) {\n  } finally {\n    might_throw();  // ...but if so, suffix is not reached\n    x = 0;\n  }\n  var y:number = x;\n}\n\n// and here, thank you JS for the wonder that is hoisting\nfunction f() {\n  try {\n  } catch (e) {\n    var x:number;\n  } finally {\n    might_throw();  // ...but if so, suffix is not reached\n    x = 0;\n  }\n  var y:number = x;\n}\n\n// error if used prior to init\nfunction f() {\n  var y:number = x; // error\n  try {\n    var x:number = 0;\n  } catch (e) {\n  }\n}\n\n// another non-dominated post\nfunction f() {\n  try {\n    var x:number = 0;\n  } catch (e) {\n  }\n  var y:number = x; // error\n}\n\n// ditto\nfunction f() {\n  try {\n  } catch (e) {\n    var x:number = 0;\n  }\n  var y:number = x; // error\n}\n\n// ditto\nfunction f(b) {\n  try {\n    var x:number;\n    if (b) {\n      throw new Error();\n    }\n    x = 0;\n  } catch (e) {\n  }\n  var y:number = x; // error\n}\n"
  },
  {
    "path": "tests/flow/try/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/try/return.js",
    "content": "/**\n * @flow\n */\n\nfunction foo(x: ?number): string {\n    try {\n    } catch (e) {\n        return 'bar';\n    }\n    console.log();\n    return 'foo';\n}\n\nfunction bar(): string {\n  try {\n    return 'foo';\n  } catch (e) {\n    return 'bar';\n  }\n}\n\nfunction baz(): string {\n  try {\n    throw new Error(\"foo\");\n  } catch (e) {\n    return \"foo\";\n  }\n  return \"bar\"; // unreachable\n}\n\nfunction qux(): string {\n  try {\n    throw new Error(\"foo\");\n  } catch (e) {\n  }\n  console.log();\n  return 'bar';\n}\n\nfunction quux(): string {\n  try {\n    return qux();\n  } catch (e) {\n  }\n  return 'bar';\n}\n\nfunction bliffl(): string {\n  try {\n    throw new Error(\"foo\");\n  } catch (e) {\n    return \"foo\";\n  } finally {\n    return \"bar\";\n  }\n}\n\nfunction corge(): string {\n  try {\n    return 'foo';\n  } catch (e) {\n    throw new Error('bar');\n  }\n  bar(); // unreachable\n}\n"
  },
  {
    "path": "tests/flow/try/test.js",
    "content": "/***\n * test env state tracking thru try/catch/finally\n * @flow\n */\n\nfunction foo() {\n    var x = 0;\n    var y;\n    try {\n        x = \"\";\n    } catch(e) {\n        x = false;\n        throw -1;\n    } finally {\n        y = {};\n    }\n    // here via [try; finally] only.\n    x(); // string ~/> function call (no num or bool error)\n    y(); // object ~/> function call (no uninitialized error)\n}\n\nfunction bar(response) {\n    var payload;\n    try {\n        payload = JSON.parse(response);\n    } catch (e) {\n        throw new Error('...');\n    }\n    // here via [try] only.\n    if (payload.error) {    // ok\n        // ...\n    }\n}\n\nfunction qux() {\n    var x = 5;\n    try {\n        throw -1;\n    } finally {\n    }\n    x(); // unreachable\n}\n"
  },
  {
    "path": "tests/flow/tuples/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`array.js 1`] = `\n// @flow\n\nfunction foo(x: Array<number>): [number, ?number] {\n  return x; // Error, can't enforce arity when flowing array to tuple\n}\n\nfunction foo(x: Array<number>): [number, ?number] {\n  return [x[0], x[1]]; // OK. This is unsound, but at least arity is enforced\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nfunction foo(x: Array<number>): [number, ?number] {\n  return x; // Error, can't enforce arity when flowing array to tuple\n}\n\nfunction foo(x: Array<number>): [number, ?number] {\n  return [x[0], x[1]]; // OK. This is unsound, but at least arity is enforced\n}\n\n`;\n\nexports[`optional.js 1`] = `\n// @flow\n\n([0, undefined]: [number, ?string]); // Ok, correct arity\n([0]: [number, ?string]); // Error, arity is enforced\n\n([]: [?number, string]); // error, since second element is not marked optional\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n([0, undefined]: [number, ?string]); // Ok, correct arity\n([0]: [number, ?string]); // Error, arity is enforced\n\n([]: [?number, string]); // error, since second element is not marked optional\n\n`;\n\nexports[`too-few.js 1`] = `\n/* @flow */\n\nfunction foo(a: [Object, Object]) {}\n\nfoo([ {} ]); // error, too few elements in array passed to a tuple\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction foo(a: [Object, Object]) {}\n\nfoo([{}]); // error, too few elements in array passed to a tuple\n\n`;\n\nexports[`tuples.js 1`] = `\nvar a: [] = [];\nvar b: [] = [123]; // Error - arity mismatch\nvar c: [number] = []; // nope\nvar d: [number, string] = [123,'duck'];\nvar e: [number, string,] = [123,'duck'];\nvar f: [number, string] = [123, 456];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar a: [] = [];\nvar b: [] = [123]; // Error - arity mismatch\nvar c: [number] = []; // nope\nvar d: [number, string] = [123, \"duck\"];\nvar e: [number, string] = [123, \"duck\"];\nvar f: [number, string] = [123, 456];\n\n`;\n"
  },
  {
    "path": "tests/flow/tuples/array.js",
    "content": "// @flow\n\nfunction foo(x: Array<number>): [number, ?number] {\n  return x; // Error, can't enforce arity when flowing array to tuple\n}\n\nfunction foo(x: Array<number>): [number, ?number] {\n  return [x[0], x[1]]; // OK. This is unsound, but at least arity is enforced\n}\n"
  },
  {
    "path": "tests/flow/tuples/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/tuples/optional.js",
    "content": "// @flow\n\n([0, undefined]: [number, ?string]); // Ok, correct arity\n([0]: [number, ?string]); // Error, arity is enforced\n\n([]: [?number, string]); // error, since second element is not marked optional\n"
  },
  {
    "path": "tests/flow/tuples/too-few.js",
    "content": "/* @flow */\n\nfunction foo(a: [Object, Object]) {}\n\nfoo([ {} ]); // error, too few elements in array passed to a tuple\n"
  },
  {
    "path": "tests/flow/tuples/tuples.js",
    "content": "var a: [] = [];\nvar b: [] = [123]; // Error - arity mismatch\nvar c: [number] = []; // nope\nvar d: [number, string] = [123,'duck'];\nvar e: [number, string,] = [123,'duck'];\nvar f: [number, string] = [123, 456];\n"
  },
  {
    "path": "tests/flow/type-at-pos/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`destructuring.js 1`] = `\n// @flow\n\nlet [x, y] = [1, 2];\n\n/**\n * Test what happens when the destructuring is unevaluated. In this case,\n * \\`this\\` in a function is unbound, so we never actually find out the type of\n * \\`this.returnsATuple()\\` is; thus, we never evaluate \\`b\\` and so type-at-pos\n * returns EmptyT.\n */\nexport const X = {\n  returnsATuple: function(): [number, number] {\n    return [1, 2];\n  },\n\n  test: function() {\n    let [a, b] = this.returnsATuple();\n  }\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet [x, y] = [1, 2];\n\n/**\n * Test what happens when the destructuring is unevaluated. In this case,\n * \\`this\\` in a function is unbound, so we never actually find out the type of\n * \\`this.returnsATuple()\\` is; thus, we never evaluate \\`b\\` and so type-at-pos\n * returns EmptyT.\n */\nexport const X = {\n  returnsATuple: function(): [number, number] {\n    return [1, 2];\n  },\n\n  test: function() {\n    let [a, b] = this.returnsATuple();\n  }\n};\n\n`;\n\nexports[`function_expressions.js 1`] = `\n// @flow\n\n// TODO: type-at-pos between the ()'s should be () => void\n// class X {\n//   foo(): void {}\n// }\n\nconst a = {\n  bar(): void {}\n};\n\nconst b = {\n  bar: function (): void {}\n};\n\nconst c = {\n  m<T>(x: T): T { return x; }\n};\n\nconst d = {\n  m: function<T>(x: T): T { return x; }\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// TODO: type-at-pos between the ()'s should be () => void\n// class X {\n//   foo(): void {}\n// }\n\nconst a = {\n  bar(): void {}\n};\n\nconst b = {\n  bar: function(): void {}\n};\n\nconst c = {\n  m<T>(x: T): T {\n    return x;\n  }\n};\n\nconst d = {\n  m: function<T>(x: T): T {\n    return x;\n  }\n};\n\n`;\n\nexports[`generics.js 1`] = `\n// @flow\n\nclass C<X> { }\nvar cn: C<number> = new C;\ncn;\n\nfunction foo() { return C; }\nvar D = foo();\nvar dn: D<number> = new C;\ndn;\n\ntype E<X> = C<X>;\nvar en: E<number> = new C;\nen;\n\ntype F<X> = C<void>;\nvar fn: F<number> = new C;\nfn;\n\ntype O<X> = { x: X };\nvar on: O<number> = { x: 0 };\non;\n\ntype Mono = C<void>;\nvar mn: Mono<number> = new C; // error: application of non-poly type\nmn;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nclass C<X> {}\nvar cn: C<number> = new C();\ncn;\n\nfunction foo() {\n  return C;\n}\nvar D = foo();\nvar dn: D<number> = new C();\ndn;\n\ntype E<X> = C<X>;\nvar en: E<number> = new C();\nen;\n\ntype F<X> = C<void>;\nvar fn: F<number> = new C();\nfn;\n\ntype O<X> = { x: X };\nvar on: O<number> = { x: 0 };\non;\n\ntype Mono = C<void>;\nvar mn: Mono<number> = new C(); // error: application of non-poly type\nmn;\n\n`;\n\nexports[`import.js 1`] = `\n// @flow\nvar num = 42;\nfunction bar() { }\nbar();\nmodule.exports = num;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nvar num = 42;\nfunction bar() {}\nbar();\nmodule.exports = num;\n\n`;\n\nexports[`object_special_cases.js 1`] = `\n/* @flow */\n\nlet tests = [\n  function() {\n    let x = {};\n    Object.defineProperty(x, 'foo', { value: '' });\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nlet tests = [\n  function() {\n    let x = {};\n    Object.defineProperty(x, \"foo\", { value: \"\" });\n  }\n];\n\n`;\n\nexports[`optional.js 1`] = `\n// @flow\n\nfunction foo(x?: string) {\n  return x;\n}\n\nfoo();\n\nfunction bar(obj: { x?: string }) {\n  return obj.x;\n}\n\nfunction qux(x?) {\n  return x;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nfunction foo(x?: string) {\n  return x;\n}\n\nfoo();\n\nfunction bar(obj: { x?: string }) {\n  return obj.x;\n}\n\nfunction qux(x?) {\n  return x;\n}\n\n`;\n\nexports[`predicates.js 1`] = `\n/* @flow */\n\nlet x = 0;\nif (x == null) {}\nif (x == undefined) {}\nif (Array.isArray(x)) {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nlet x = 0;\nif (x == null) {\n}\nif (x == undefined) {\n}\nif (Array.isArray(x)) {\n}\n\n`;\n\nexports[`react.js 1`] = `\nimport React from \"react\";\nReact.createElement;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport React from \"react\";\nReact.createElement;\n\n`;\n\nexports[`templates.js 1`] = `\n/* @flow */\n\\`foo bar\\`;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\\`foo bar\\`;\n\n`;\n\nexports[`test.js 1`] = `\n// @flow\nvar str = require('./import');\nfunction foo() { }\nfoo();\nstr\n\ntype Point = [number, string];\nconst x:Point = [1, \"foo\"];\ntype MyStr = \"cool\";\nconst y:MyStr = \"cool\";\ntype MyBool = true;\nconst z:MyBool = true;\ntype MyNum = 42;\nconst w:MyNum = 42;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\nvar str = require(\"./import\");\nfunction foo() {}\nfoo();\nstr;\n\ntype Point = [number, string];\nconst x: Point = [1, \"foo\"];\ntype MyStr = \"cool\";\nconst y: MyStr = \"cool\";\ntype MyBool = true;\nconst z: MyBool = true;\ntype MyNum = 42;\nconst w: MyNum = 42;\n\n`;\n\nexports[`trycatch.js 1`] = `\n// @flow\n\ntry {\n  throw \"foo\";\n} catch (e) {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ntry {\n  throw \"foo\";\n} catch (e) {}\n\n`;\n"
  },
  {
    "path": "tests/flow/type-at-pos/destructuring.js",
    "content": "// @flow\n\nlet [x, y] = [1, 2];\n\n/**\n * Test what happens when the destructuring is unevaluated. In this case,\n * `this` in a function is unbound, so we never actually find out the type of\n * `this.returnsATuple()` is; thus, we never evaluate `b` and so type-at-pos\n * returns EmptyT.\n */\nexport const X = {\n  returnsATuple: function(): [number, number] {\n    return [1, 2];\n  },\n\n  test: function() {\n    let [a, b] = this.returnsATuple();\n  }\n};\n"
  },
  {
    "path": "tests/flow/type-at-pos/function_expressions.js",
    "content": "// @flow\n\n// TODO: type-at-pos between the ()'s should be () => void\n// class X {\n//   foo(): void {}\n// }\n\nconst a = {\n  bar(): void {}\n};\n\nconst b = {\n  bar: function (): void {}\n};\n\nconst c = {\n  m<T>(x: T): T { return x; }\n};\n\nconst d = {\n  m: function<T>(x: T): T { return x; }\n};\n"
  },
  {
    "path": "tests/flow/type-at-pos/generics.js",
    "content": "// @flow\n\nclass C<X> { }\nvar cn: C<number> = new C;\ncn;\n\nfunction foo() { return C; }\nvar D = foo();\nvar dn: D<number> = new C;\ndn;\n\ntype E<X> = C<X>;\nvar en: E<number> = new C;\nen;\n\ntype F<X> = C<void>;\nvar fn: F<number> = new C;\nfn;\n\ntype O<X> = { x: X };\nvar on: O<number> = { x: 0 };\non;\n\ntype Mono = C<void>;\nvar mn: Mono<number> = new C; // error: application of non-poly type\nmn;\n"
  },
  {
    "path": "tests/flow/type-at-pos/import.js",
    "content": "// @flow\nvar num = 42;\nfunction bar() { }\nbar();\nmodule.exports = num;\n"
  },
  {
    "path": "tests/flow/type-at-pos/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/type-at-pos/object_special_cases.js",
    "content": "/* @flow */\n\nlet tests = [\n  function() {\n    let x = {};\n    Object.defineProperty(x, 'foo', { value: '' });\n  },\n];\n"
  },
  {
    "path": "tests/flow/type-at-pos/optional.js",
    "content": "// @flow\n\nfunction foo(x?: string) {\n  return x;\n}\n\nfoo();\n\nfunction bar(obj: { x?: string }) {\n  return obj.x;\n}\n\nfunction qux(x?) {\n  return x;\n}\n"
  },
  {
    "path": "tests/flow/type-at-pos/predicates.js",
    "content": "/* @flow */\n\nlet x = 0;\nif (x == null) {}\nif (x == undefined) {}\nif (Array.isArray(x)) {}\n"
  },
  {
    "path": "tests/flow/type-at-pos/react.js",
    "content": "import React from \"react\";\nReact.createElement;\n"
  },
  {
    "path": "tests/flow/type-at-pos/templates.js",
    "content": "/* @flow */\n`foo bar`;\n"
  },
  {
    "path": "tests/flow/type-at-pos/test.js",
    "content": "// @flow\nvar str = require('./import');\nfunction foo() { }\nfoo();\nstr\n\ntype Point = [number, string];\nconst x:Point = [1, \"foo\"];\ntype MyStr = \"cool\";\nconst y:MyStr = \"cool\";\ntype MyBool = true;\nconst z:MyBool = true;\ntype MyNum = 42;\nconst w:MyNum = 42;\n"
  },
  {
    "path": "tests/flow/type-at-pos/trycatch.js",
    "content": "// @flow\n\ntry {\n  throw \"foo\";\n} catch (e) {}\n"
  },
  {
    "path": "tests/flow/type-destructors/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`non_maybe_type.js 1`] = `\n// @flow\n\nfunction foo(x: ?string): $NonMaybeType<?string> {\n  if (x != null) { return x; }\n  else return 0; // this should be an error\n}\n\n//(foo(): string); // should not be necessary to expose the error above\n\n(0: $NonMaybeType<null>); // error\n(0: $NonMaybeType<?number>); // ok\n(0: $NonMaybeType<number | null>); // ok\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nfunction foo(x: ?string): $NonMaybeType<?string> {\n  if (x != null) {\n    return x;\n  } else return 0; // this should be an error\n}\n\n//(foo(): string); // should not be necessary to expose the error above\n\n(0: $NonMaybeType<null>); // error\n(0: $NonMaybeType<?number>); // ok\n(0: $NonMaybeType<number | null>); // ok\n\n`;\n\nexports[`property_type.js 1`] = `\ntype Malformed = $PropertyType<any, number>;\n\ntype Obj = { x: string };\ntype Obj_Prop_x = $PropertyType<Obj, 'x'>;\n\n(42: Obj_Prop_x);\n\nfunction foo(o: Obj): $PropertyType<Obj, 'x'> {\n  if (false) return o.x;\n  else return 0;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype Malformed = $PropertyType<any, number>;\n\ntype Obj = { x: string };\ntype Obj_Prop_x = $PropertyType<Obj, \"x\">;\n\n(42: Obj_Prop_x);\n\nfunction foo(o: Obj): $PropertyType<Obj, \"x\"> {\n  if (false) return o.x;\n  else return 0;\n}\n\n`;\n\nexports[`union.js 1`] = `\nvar x0: $NonMaybeType<number|string> = 0; // ok, number ~> number|string\nvar x1: $NonMaybeType<number|string> = true; // err, boolean ~> number|string\nvar x2: $PropertyType<{p:number}|{p:string},'p'> = 0; // ok, number ~> number|string\nvar x3: $PropertyType<{p:number}|{p:string},'p'> = true; // err, boolean ~> number|string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x0: $NonMaybeType<number | string> = 0; // ok, number ~> number|string\nvar x1: $NonMaybeType<number | string> = true; // err, boolean ~> number|string\nvar x2: $PropertyType<{ p: number } | { p: string }, \"p\"> = 0; // ok, number ~> number|string\nvar x3: $PropertyType<{ p: number } | { p: string }, \"p\"> = true; // err, boolean ~> number|string\n\n`;\n"
  },
  {
    "path": "tests/flow/type-destructors/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/type-destructors/non_maybe_type.js",
    "content": "// @flow\n\nfunction foo(x: ?string): $NonMaybeType<?string> {\n  if (x != null) { return x; }\n  else return 0; // this should be an error\n}\n\n//(foo(): string); // should not be necessary to expose the error above\n\n(0: $NonMaybeType<null>); // error\n(0: $NonMaybeType<?number>); // ok\n(0: $NonMaybeType<number | null>); // ok\n"
  },
  {
    "path": "tests/flow/type-destructors/property_type.js",
    "content": "type Malformed = $PropertyType<any, number>;\n\ntype Obj = { x: string };\ntype Obj_Prop_x = $PropertyType<Obj, 'x'>;\n\n(42: Obj_Prop_x);\n\nfunction foo(o: Obj): $PropertyType<Obj, 'x'> {\n  if (false) return o.x;\n  else return 0;\n}\n"
  },
  {
    "path": "tests/flow/type-destructors/union.js",
    "content": "var x0: $NonMaybeType<number|string> = 0; // ok, number ~> number|string\nvar x1: $NonMaybeType<number|string> = true; // err, boolean ~> number|string\nvar x2: $PropertyType<{p:number}|{p:string},'p'> = 0; // ok, number ~> number|string\nvar x3: $PropertyType<{p:number}|{p:string},'p'> = true; // err, boolean ~> number|string\n"
  },
  {
    "path": "tests/flow/type-printer/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`printBinaryExpression.js 1`] = `\n'use babel';\n/* @flow */\n\n/*\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the license found in the LICENSE file in\n * the root directory of this source tree.\n */\n\nimport type {BinaryExpression} from './types';\n\nfunction printBinaryExpression(\n  node: BinaryExpression,\n) {\n  console.log(node);\n}\n\nmodule.exports = printBinaryExpression;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\"use babel\";\n/* @flow */\n\n/*\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the license found in the LICENSE file in\n * the root directory of this source tree.\n */\n\nimport type { BinaryExpression } from \"./types\";\n\nfunction printBinaryExpression(node: BinaryExpression) {\n  console.log(node);\n}\n\nmodule.exports = printBinaryExpression;\n\n`;\n\nexports[`types.js 1`] = `\n/**\n * @flow\n */\n\n'use strict';\n\n/*\n * Flow types for the Babylon AST.\n */\n\n// Abstract types. Something must extend these.\n\nexport type Comment = {\n  type: 'CommentLine';\n  _CommentLine: void;\n  value: string;\n  end: number;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n} | {\n  type: 'CommentBlock';\n  _CommentBlock: void;\n  value: string;\n  end: number;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n};\n\nexport type Declaration = {\n  type: 'ClassBody';\n  _ClassBody: void;\n  body: Array<Node>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ClassDeclaration';\n  _ClassDeclaration: void;\n  body: ClassBody;\n  id: ?Identifier;\n  superClass: ?Expression;\n  decorators: any;\n  superTypeParameters: any;\n  typeParameters: any;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'FunctionDeclaration';\n  _FunctionDeclaration: void;\n  body: BlockStatement;\n  id: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n  async: boolean;\n  defaults: Array<?Expression>;\n  expression: boolean;\n  generator: boolean;\n  params: Array<Pattern>;\n  rest: ?Identifier;\n  returnType: ?TypeAnnotation;\n  typeParameters: ?TypeParameterDeclaration;\n} | {\n  type: 'MethodDefinition';\n  _MethodDefinition: void;\n  computed: boolean;\n  key: Node;\n  kind: 'constructor' | 'method' | 'get' | 'set';\n  static: boolean;\n  value: FunctionExpression;\n  decorators: ?Array<Decorator>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'VariableDeclaration';\n  _VariableDeclaration: void;\n  declarations: Array<VariableDeclarator>;\n  kind: 'var' | 'let' | 'const';\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ClassProperty';\n  _ClassProperty: void;\n  computed: boolean;\n  key: Node;\n  static: boolean;\n  typeAnnotation: ?TypeAnnotation;\n  value: ?Expression;\n  decorators: Array<Decorator>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type Expression = {\n  type: 'ArrayExpression';\n  _ArrayExpression: void;\n  elements: Array<?Node>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'AssignmentExpression';\n  _AssignmentExpression: void;\n  left: Pattern;\n  operator: AssignmentOperator;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'AwaitExpression';\n  _AwaitExpression: void;\n  all: boolean;\n  argument: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'BinaryExpression';\n  _BinaryExpression: void;\n  left: Expression;\n  operator: BinaryOperator;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'BindExpression';\n  _BindExpression: void;\n  callee: Node;\n  object: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'CallExpression';\n  _CallExpression: void;\n  arguments: Array<Node>;\n  callee: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ClassExpression';\n  _ClassExpression: void;\n  body: ClassBody;\n  id: ?Identifier;\n  superClass: ?Expression;\n  decorators: any;\n  superTypeParameters: any;\n  typeParameters: any;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ComprehensionExpression';\n  _ComprehensionExpression: void;\n  body: Expression;\n  blocks: Array<ComprehensionBlock>;\n  filter: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ConditionalExpression';\n  _ConditionalExpression: void;\n  alternate: Expression;\n  consequent: Expression;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DoExpression';\n  _DoExpression: void;\n  body: Statement;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'FunctionExpression';\n  _FunctionExpression: void;\n  body: BlockStatement;\n  id: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n  async: boolean;\n  defaults: Array<?Expression>;\n  expression: boolean;\n  generator: boolean;\n  params: Array<Pattern>;\n  rest: ?Identifier;\n  returnType: ?TypeAnnotation;\n  typeParameters: ?TypeParameterDeclaration;\n} | {\n  type: 'Identifier';\n  _Identifier: void;\n  name: string;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'Literal';\n  _Literal: void;\n  raw: string;\n  regex: ?{pattern: string, flags: string};\n  value: ?(string | boolean | number | RegExp);\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'LogicalExpression';\n  _LogicalExpression: void;\n  left: Expression;\n  operator: LogicalOperator;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'MemberExpression';\n  _MemberExpression: void;\n  computed: boolean;\n  object: Expression;\n  property: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'NewExpression';\n  _NewExpression: void;\n  arguments: Array<Node>;\n  callee: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ObjectExpression';\n  _ObjectExpression: void;\n  properties: Array<Node>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'SequenceExpression';\n  _SequenceExpression: void;\n  expression: Array<Expression>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TaggedTemplateExpression';\n  _TaggedTemplateExpression: void;\n  quasi: TemplateLiteral;\n  tag: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TemplateLiteral';\n  _TemplateLiteral: void;\n  expressions: Array<Expression>;\n  quasis: Array<TemplateElement>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ThisExpression';\n  _ThisExpression: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'UnaryExpression';\n  _UnaryExpression: void;\n  argument: Expression;\n  operator: UnaryOperator;\n  prefix: true;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'UpdateExpression';\n  _UpdateExpression: void;\n  argument: Expression;\n  operator: UpdateOperator;\n  prefix: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'YieldExpression';\n  _YieldExpression: void;\n  argument: ?Expression;\n  delegate: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TypeCastExpression';\n  _TypeCastExpression: void;\n  expression: Expression;\n  typeAnnotation: TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXElement';\n  _JSXElement: void;\n  children: Array<Node>;\n  closingElement: ?JSXClosingElement;\n  openingElement: JSXOpeningElement;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXEmptyExpression';\n  _JSXEmptyExpression: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXExpressionContainer';\n  _JSXExpressionContainer: void;\n  expression: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXMemberExpression';\n  _JSXMemberExpression: void;\n  computed: boolean;\n  object: Node;\n  property: JSXIdentifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type Function = {\n  type: 'ArrowFunctionExpression';\n  _ArrowFunctionExpression: void;\n  body: Node;\n  id: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n  async: boolean;\n  defaults: Array<?Expression>;\n  expression: boolean;\n  generator: boolean;\n  params: Array<Pattern>;\n  rest: ?Identifier;\n  returnType: ?TypeAnnotation;\n  typeParameters: ?TypeParameterDeclaration;\n} | {\n  type: 'FunctionDeclaration';\n  _FunctionDeclaration: void;\n  body: BlockStatement;\n  id: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n  async: boolean;\n  defaults: Array<?Expression>;\n  expression: boolean;\n  generator: boolean;\n  params: Array<Pattern>;\n  rest: ?Identifier;\n  returnType: ?TypeAnnotation;\n  typeParameters: ?TypeParameterDeclaration;\n} | {\n  type: 'FunctionExpression';\n  _FunctionExpression: void;\n  body: BlockStatement;\n  id: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n  async: boolean;\n  defaults: Array<?Expression>;\n  expression: boolean;\n  generator: boolean;\n  params: Array<Pattern>;\n  rest: ?Identifier;\n  returnType: ?TypeAnnotation;\n  typeParameters: ?TypeParameterDeclaration;\n};\n\nexport type Node = {\n  type: 'ArrayExpression';\n  _ArrayExpression: void;\n  elements: Array<?Node>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ArrayPattern';\n  _ArrayPattern: void;\n  elements: Array<?Node>;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ArrowFunctionExpression';\n  _ArrowFunctionExpression: void;\n  body: Node;\n  id: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n  async: boolean;\n  defaults: Array<?Expression>;\n  expression: boolean;\n  generator: boolean;\n  params: Array<Pattern>;\n  rest: ?Identifier;\n  returnType: ?TypeAnnotation;\n  typeParameters: ?TypeParameterDeclaration;\n} | {\n  type: 'AssignmentExpression';\n  _AssignmentExpression: void;\n  left: Pattern;\n  operator: AssignmentOperator;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'AssignmentPattern';\n  _AssignmentPattern: void;\n  left: Pattern;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'AwaitExpression';\n  _AwaitExpression: void;\n  all: boolean;\n  argument: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'BinaryExpression';\n  _BinaryExpression: void;\n  left: Expression;\n  operator: BinaryOperator;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'BindExpression';\n  _BindExpression: void;\n  callee: Node;\n  object: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'BlockStatement';\n  _BlockStatement: void;\n  body: Array<Statement>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'BreakStatement';\n  _BreakStatement: void;\n  label: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'CallExpression';\n  _CallExpression: void;\n  arguments: Array<Node>;\n  callee: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'CatchClause';\n  _CatchClause: void;\n  body: BlockStatement;\n  param: Pattern;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ClassBody';\n  _ClassBody: void;\n  body: Array<Node>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ClassDeclaration';\n  _ClassDeclaration: void;\n  body: ClassBody;\n  id: ?Identifier;\n  superClass: ?Expression;\n  decorators: any;\n  superTypeParameters: any;\n  typeParameters: any;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ClassExpression';\n  _ClassExpression: void;\n  body: ClassBody;\n  id: ?Identifier;\n  superClass: ?Expression;\n  decorators: any;\n  superTypeParameters: any;\n  typeParameters: any;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ComprehensionBlock';\n  _ComprehensionBlock: void;\n  each: boolean;\n  left: Pattern;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ComprehensionExpression';\n  _ComprehensionExpression: void;\n  body: Expression;\n  blocks: Array<ComprehensionBlock>;\n  filter: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ConditionalExpression';\n  _ConditionalExpression: void;\n  alternate: Expression;\n  consequent: Expression;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ContinueStatement';\n  _ContinueStatement: void;\n  label: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'Decorator';\n  _Decorator: void;\n  expression: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DebuggerStatement';\n  _DebuggerStatement: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DoWhileStatement';\n  _DoWhileStatement: void;\n  body: Statement;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DoExpression';\n  _DoExpression: void;\n  body: Statement;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'EmptyStatement';\n  _EmptyStatement: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ExpressionStatement';\n  _ExpressionStatement: void;\n  expression: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'File';\n  _File: void;\n  program: Program;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ForInStatement';\n  _ForInStatement: void;\n  body: Statement;\n  left: Node;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ForOfStatement';\n  _ForOfStatement: void;\n  body: Statement;\n  left: Node;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ForStatement';\n  _ForStatement: void;\n  init: ?Node;\n  test: ?Expression;\n  update: ?Expression;\n  body: Statement;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'FunctionDeclaration';\n  _FunctionDeclaration: void;\n  body: BlockStatement;\n  id: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n  async: boolean;\n  defaults: Array<?Expression>;\n  expression: boolean;\n  generator: boolean;\n  params: Array<Pattern>;\n  rest: ?Identifier;\n  returnType: ?TypeAnnotation;\n  typeParameters: ?TypeParameterDeclaration;\n} | {\n  type: 'FunctionExpression';\n  _FunctionExpression: void;\n  body: BlockStatement;\n  id: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n  async: boolean;\n  defaults: Array<?Expression>;\n  expression: boolean;\n  generator: boolean;\n  params: Array<Pattern>;\n  rest: ?Identifier;\n  returnType: ?TypeAnnotation;\n  typeParameters: ?TypeParameterDeclaration;\n} | {\n  type: 'Identifier';\n  _Identifier: void;\n  name: string;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'IfStatement';\n  _IfStatement: void;\n  alternate: ?Statement;\n  consequent: Statement;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ImportDefaultSpecifier';\n  _ImportDefaultSpecifier: void;\n  local: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ImportNamespaceSpecifier';\n  _ImportNamespaceSpecifier: void;\n  local: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ImportDeclaration';\n  _ImportDeclaration: void;\n  specifiers: Array<Node>;\n  source: Literal;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ImportSpecifier';\n  _ImportSpecifier: void;\n  imported: Node;\n  local: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'LabeledStatement';\n  _LabeledStatement: void;\n  body: Statement;\n  label: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'Literal';\n  _Literal: void;\n  raw: string;\n  regex: ?{pattern: string, flags: string};\n  value: ?(string | boolean | number | RegExp);\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'LogicalExpression';\n  _LogicalExpression: void;\n  left: Expression;\n  operator: LogicalOperator;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'MemberExpression';\n  _MemberExpression: void;\n  computed: boolean;\n  object: Expression;\n  property: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'MetaProperty';\n  _MetaProperty: void;\n  meta: Node;\n  property: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'MethodDefinition';\n  _MethodDefinition: void;\n  computed: boolean;\n  key: Node;\n  kind: 'constructor' | 'method' | 'get' | 'set';\n  static: boolean;\n  value: FunctionExpression;\n  decorators: ?Array<Decorator>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'NewExpression';\n  _NewExpression: void;\n  arguments: Array<Node>;\n  callee: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'Noop';\n  _Noop: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ObjectExpression';\n  _ObjectExpression: void;\n  properties: Array<Node>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ObjectPattern';\n  _ObjectPattern: void;\n  properties: Array<Node>;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'Program';\n  _Program: void;\n  body: Array<Statement>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'Property';\n  _Property: void;\n  computed: boolean;\n  key: Node;\n  kind: 'init' | 'get' | 'set';\n  method: boolean;\n  shorthand: boolean;\n  value: Node;\n  decorators: ?Array<Decorator>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'RestElement';\n  _RestElement: void;\n  argument: Pattern;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ReturnStatement';\n  _ReturnStatement: void;\n  argument: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'SequenceExpression';\n  _SequenceExpression: void;\n  expression: Array<Expression>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'SpreadElement';\n  _SpreadElement: void;\n  argument: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'SpreadProperty';\n  _SpreadProperty: void;\n  argument: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'Super';\n  _Super: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'SwitchCase';\n  _SwitchCase: void;\n  consequent: Array<Statement>;\n  test: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'SwitchStatement';\n  _SwitchStatement: void;\n  cases: Array<SwitchCase>;\n  discriminant: Expression;\n  lexical: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TaggedTemplateExpression';\n  _TaggedTemplateExpression: void;\n  quasi: TemplateLiteral;\n  tag: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TemplateElement';\n  _TemplateElement: void;\n  tail: boolean;\n  value: {cooked: string, raw: string};\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TemplateLiteral';\n  _TemplateLiteral: void;\n  expressions: Array<Expression>;\n  quasis: Array<TemplateElement>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ThisExpression';\n  _ThisExpression: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ThrowStatement';\n  _ThrowStatement: void;\n  argument: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TryStatement';\n  _TryStatement: void;\n  block: BlockStatement;\n  finalizer: ?BlockStatement;\n  guardedHandlers: Array<CatchClause>;\n  handler: ?CatchClause;\n  handlers: ?Array<CatchClause>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'UnaryExpression';\n  _UnaryExpression: void;\n  argument: Expression;\n  operator: UnaryOperator;\n  prefix: true;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'UpdateExpression';\n  _UpdateExpression: void;\n  argument: Expression;\n  operator: UpdateOperator;\n  prefix: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'VariableDeclaration';\n  _VariableDeclaration: void;\n  declarations: Array<VariableDeclarator>;\n  kind: 'var' | 'let' | 'const';\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'VariableDeclarator';\n  _VariableDeclarator: void;\n  id: Pattern;\n  init: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'WhileStatement';\n  _WhileStatement: void;\n  body: Statement;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'WithStatement';\n  _WithStatement: void;\n  body: Statement;\n  object: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'YieldExpression';\n  _YieldExpression: void;\n  argument: ?Expression;\n  delegate: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ExportAllDeclaration';\n  _ExportAllDeclaration: void;\n  exported: Node;\n  source: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ExportDefaultDeclaration';\n  _ExportDefaultDeclaration: void;\n  declaration: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ExportNamedDeclaration';\n  _ExportNamedDeclaration: void;\n  declaration: Node;\n  source: Literal;\n  specifiers: Array<Node>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ExportDefaultSpecifier';\n  _ExportDefaultSpecifier: void;\n  exported: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ExportNamespaceSpecifier';\n  _ExportNamespaceSpecifier: void;\n  exported: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ExportSpecifier';\n  _ExportSpecifier: void;\n  local: Node;\n  exported: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'AnyTypeAnnotation';\n  _AnyTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ArrayTypeAnnotation';\n  _ArrayTypeAnnotation: void;\n  elementType: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'BooleanLiteralTypeAnnotation';\n  _BooleanLiteralTypeAnnotation: void;\n  raw: string;\n  value: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'BooleanTypeAnnotation';\n  _BooleanTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ClassImplements';\n  _ClassImplements: void;\n  id: Identifier;\n  typeParameters: ?TypeParameterInstantiation;\n  superClass: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ClassProperty';\n  _ClassProperty: void;\n  computed: boolean;\n  key: Node;\n  static: boolean;\n  typeAnnotation: ?TypeAnnotation;\n  value: ?Expression;\n  decorators: Array<Decorator>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DeclareClass';\n  _DeclareClass: void;\n  body: ObjectTypeAnnotation;\n  extends: Array<InterfaceExtends>;\n  id: Identifier;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DeclareFunction';\n  _DeclareFunction: void;\n  id: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DeclareModule';\n  _DeclareModule: void;\n  body: BlockStatement;\n  id: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DeclareVariable';\n  _DeclareVariable: void;\n  id: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'FunctionTypeAnnotation';\n  _FunctionTypeAnnotation: void;\n  params: Array<FunctionTypeParam>;\n  rest: ?FunctionTypeParam;\n  returnType: Type;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'FunctionTypeParam';\n  _FunctionTypeParam: void;\n  name: Identifier;\n  optional: boolean;\n  typeAnnotation: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'GenericTypeAnnotation';\n  _GenericTypeAnnotation: void;\n  id: Node;\n  typeParameters: ?TypeParameterInstantiation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'InterfaceExtends';\n  _InterfaceExtends: void;\n  id: Identifier;\n  typeParameters: ?TypeParameterInstantiation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'InterfaceDeclaration';\n  _InterfaceDeclaration: void;\n  body: ObjectTypeAnnotation;\n  extends: Array<InterfaceExtends>;\n  id: Identifier;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'IntersectionTypeAnnotation';\n  _IntersectionTypeAnnotation: void;\n  types: Array<Type>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'MixedTypeAnnotation';\n  _MixedTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'NullableTypeAnnotation';\n  _NullableTypeAnnotation: void;\n  typeAnnotation: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'NumberLiteralTypeAnnotation';\n  _NumberLiteralTypeAnnotation: void;\n  raw: string;\n  value: number;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'NumberTypeAnnotation';\n  _NumberTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'StringLiteralTypeAnnotation';\n  _StringLiteralTypeAnnotation: void;\n  raw: string;\n  value: string;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'StringTypeAnnotation';\n  _StringTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TupleTypeAnnotation';\n  _TupleTypeAnnotation: void;\n  types: Array<Type>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TypeofTypeAnnotation';\n  _TypeofTypeAnnotation: void;\n  argument: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TypeAlias';\n  _TypeAlias: void;\n  id: Identifier;\n  right: Type;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TypeAnnotation';\n  _TypeAnnotation: void;\n  typeAnnotation: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TypeCastExpression';\n  _TypeCastExpression: void;\n  expression: Expression;\n  typeAnnotation: TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TypeParameterDeclaration';\n  _TypeParameterDeclaration: void;\n  params: Array<Identifier>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TypeParameterInstantiation';\n  _TypeParameterInstantiation: void;\n  params: Array<Type>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ObjectTypeAnnotation';\n  _ObjectTypeAnnotation: void;\n  callProperties: Array<ObjectTypeCallProperty>;\n  indexers: Array<ObjectTypeIndexer>;\n  properties: Array<ObjectTypeProperty>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ObjectTypeCallProperty';\n  _ObjectTypeCallProperty: void;\n  static: boolean;\n  value: FunctionTypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ObjectTypeIndexer';\n  _ObjectTypeIndexer: void;\n  id: Identifier;\n  key: Type;\n  value: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ObjectTypeProperty';\n  _ObjectTypeProperty: void;\n  key: Node;\n  optional: boolean;\n  value: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'QualifiedTypeIdentifier';\n  _QualifiedTypeIdentifier: void;\n  id: Identifier;\n  qualification: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'UnionTypeAnnotation';\n  _UnionTypeAnnotation: void;\n  types: Array<Type>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'VoidTypeAnnotation';\n  _VoidTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXAttribute';\n  _JSXAttribute: void;\n  name: Node;\n  value: ?Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXClosingElement';\n  _JSXClosingElement: void;\n  name: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXElement';\n  _JSXElement: void;\n  children: Array<Node>;\n  closingElement: ?JSXClosingElement;\n  openingElement: JSXOpeningElement;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXEmptyExpression';\n  _JSXEmptyExpression: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXExpressionContainer';\n  _JSXExpressionContainer: void;\n  expression: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXIdentifier';\n  _JSXIdentifier: void;\n  name: string;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXMemberExpression';\n  _JSXMemberExpression: void;\n  computed: boolean;\n  object: Node;\n  property: JSXIdentifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXNamespacedName';\n  _JSXNamespacedName: void;\n  name: JSXIdentifier;\n  namespace: JSXIdentifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXOpeningElement';\n  _JSXOpeningElement: void;\n  attributes: Array<Node>;\n  name: Array<Node>;\n  selfClosing: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXSpreadAttribute';\n  _JSXSpreadAttribute: void;\n  argument: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type Pattern = {\n  type: 'ArrayPattern';\n  _ArrayPattern: void;\n  elements: Array<?Node>;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'AssignmentPattern';\n  _AssignmentPattern: void;\n  left: Pattern;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'Identifier';\n  _Identifier: void;\n  name: string;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ObjectPattern';\n  _ObjectPattern: void;\n  properties: Array<Node>;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'RestElement';\n  _RestElement: void;\n  argument: Pattern;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type Statement = {\n  type: 'BlockStatement';\n  _BlockStatement: void;\n  body: Array<Statement>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'BreakStatement';\n  _BreakStatement: void;\n  label: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ContinueStatement';\n  _ContinueStatement: void;\n  label: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DoWhileStatement';\n  _DoWhileStatement: void;\n  body: Statement;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'EmptyStatement';\n  _EmptyStatement: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ExpressionStatement';\n  _ExpressionStatement: void;\n  expression: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ForInStatement';\n  _ForInStatement: void;\n  body: Statement;\n  left: Node;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ForOfStatement';\n  _ForOfStatement: void;\n  body: Statement;\n  left: Node;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ForStatement';\n  _ForStatement: void;\n  init: ?Node;\n  test: ?Expression;\n  update: ?Expression;\n  body: Statement;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'IfStatement';\n  _IfStatement: void;\n  alternate: ?Statement;\n  consequent: Statement;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'LabeledStatement';\n  _LabeledStatement: void;\n  body: Statement;\n  label: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ReturnStatement';\n  _ReturnStatement: void;\n  argument: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'SwitchStatement';\n  _SwitchStatement: void;\n  cases: Array<SwitchCase>;\n  discriminant: Expression;\n  lexical: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ThrowStatement';\n  _ThrowStatement: void;\n  argument: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TryStatement';\n  _TryStatement: void;\n  block: BlockStatement;\n  finalizer: ?BlockStatement;\n  guardedHandlers: Array<CatchClause>;\n  handler: ?CatchClause;\n  handlers: ?Array<CatchClause>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'WhileStatement';\n  _WhileStatement: void;\n  body: Statement;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'WithStatement';\n  _WithStatement: void;\n  body: Statement;\n  object: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DeclareClass';\n  _DeclareClass: void;\n  body: ObjectTypeAnnotation;\n  extends: Array<InterfaceExtends>;\n  id: Identifier;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DeclareFunction';\n  _DeclareFunction: void;\n  id: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DeclareModule';\n  _DeclareModule: void;\n  body: BlockStatement;\n  id: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DeclareVariable';\n  _DeclareVariable: void;\n  id: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'InterfaceDeclaration';\n  _InterfaceDeclaration: void;\n  body: ObjectTypeAnnotation;\n  extends: Array<InterfaceExtends>;\n  id: Identifier;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TypeAlias';\n  _TypeAlias: void;\n  id: Identifier;\n  right: Type;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type Type = {\n  type: 'AnyTypeAnnotation';\n  _AnyTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ArrayTypeAnnotation';\n  _ArrayTypeAnnotation: void;\n  elementType: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'BooleanLiteralTypeAnnotation';\n  _BooleanLiteralTypeAnnotation: void;\n  raw: string;\n  value: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'BooleanTypeAnnotation';\n  _BooleanTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'FunctionTypeAnnotation';\n  _FunctionTypeAnnotation: void;\n  params: Array<FunctionTypeParam>;\n  rest: ?FunctionTypeParam;\n  returnType: Type;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'GenericTypeAnnotation';\n  _GenericTypeAnnotation: void;\n  id: Node;\n  typeParameters: ?TypeParameterInstantiation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'IntersectionTypeAnnotation';\n  _IntersectionTypeAnnotation: void;\n  types: Array<Type>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'MixedTypeAnnotation';\n  _MixedTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'NullableTypeAnnotation';\n  _NullableTypeAnnotation: void;\n  typeAnnotation: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'NumberLiteralTypeAnnotation';\n  _NumberLiteralTypeAnnotation: void;\n  raw: string;\n  value: number;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'NumberTypeAnnotation';\n  _NumberTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'StringLiteralTypeAnnotation';\n  _StringLiteralTypeAnnotation: void;\n  raw: string;\n  value: string;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'StringTypeAnnotation';\n  _StringTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TupleTypeAnnotation';\n  _TupleTypeAnnotation: void;\n  types: Array<Type>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ObjectTypeAnnotation';\n  _ObjectTypeAnnotation: void;\n  callProperties: Array<ObjectTypeCallProperty>;\n  indexers: Array<ObjectTypeIndexer>;\n  properties: Array<ObjectTypeProperty>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'UnionTypeAnnotation';\n  _UnionTypeAnnotation: void;\n  types: Array<Type>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'VoidTypeAnnotation';\n  _VoidTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// Concrete Types. Nothing can extend these.\n\nexport type CommentLine = {\n  type: 'CommentLine';\n  _CommentLine: void;\n  value: string;\n  end: number;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n};\n\nexport type CommentBlock = {\n  type: 'CommentBlock';\n  _CommentBlock: void;\n  value: string;\n  end: number;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n};\n\n// Babel concrete types.\n\nexport type ArrayExpression = {\n  type: 'ArrayExpression';\n  _ArrayExpression: void;\n  elements: Array<?Node>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ArrayPattern = {\n  type: 'ArrayPattern';\n  _ArrayPattern: void;\n  elements: Array<?Node>;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ArrowFunctionExpression = {\n  type: 'ArrowFunctionExpression';\n  _ArrowFunctionExpression: void;\n  body: Node;\n  id: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n  async: boolean;\n  defaults: Array<?Expression>;\n  expression: boolean;\n  generator: boolean;\n  params: Array<Pattern>;\n  rest: ?Identifier;\n  returnType: ?TypeAnnotation;\n  typeParameters: ?TypeParameterDeclaration;\n};\n\ntype AssignmentOperator =\n  '=' |\n  '+=' |\n  '-=' |\n  '*=' |\n  '/=' |\n  '%=' |\n  '<<=' |\n  '>>=' |\n  '>>>=' |\n  '|=' |\n  '^=' |\n  '&=';\n\nexport type AssignmentExpression = {\n  type: 'AssignmentExpression';\n  _AssignmentExpression: void;\n  left: Pattern;\n  operator: AssignmentOperator;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type AssignmentPattern = {\n  type: 'AssignmentPattern';\n  _AssignmentPattern: void;\n  left: Pattern;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type AwaitExpression = {\n  type: 'AwaitExpression';\n  _AwaitExpression: void;\n  all: boolean;\n  argument: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\ntype BinaryOperator =\n  '==' |\n  '!=' |\n  '===' |\n  '!==' |\n  '<' |\n  '<=' |\n  '>' |\n  '>=' |\n  '<<' |\n  '>>' |\n  '>>>' |\n  '+' |\n  '-' |\n  '*' |\n  '/' |\n  '%' |\n  '&' |\n  '|' |\n  '^' |\n  'in' |\n  'instanceof' |\n  '..';\n\nexport type BinaryExpression = {\n  type: 'BinaryExpression';\n  _BinaryExpression: void;\n  left: Expression;\n  operator: BinaryOperator;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: What is this?\nexport type BindExpression = {\n  type: 'BindExpression';\n  _BindExpression: void;\n  callee: Node;\n  object: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type BlockStatement = {\n  type: 'BlockStatement';\n  _BlockStatement: void;\n  body: Array<Statement>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type BreakStatement = {\n  type: 'BreakStatement';\n  _BreakStatement: void;\n  label: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type CallExpression = {\n  type: 'CallExpression';\n  _CallExpression: void;\n  arguments: Array<Node>;\n  callee: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type CatchClause = {\n  type: 'CatchClause';\n  _CatchClause: void;\n  body: BlockStatement;\n  param: Pattern;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ClassBody = {\n  type: 'ClassBody';\n  _ClassBody: void;\n  body: Array<Node>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ClassDeclaration = {\n  type: 'ClassDeclaration';\n  _ClassDeclaration: void;\n  body: ClassBody;\n  id: ?Identifier;\n  superClass: ?Expression;\n  decorators: any;\n  superTypeParameters: any;\n  typeParameters: any;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ClassExpression = {\n  type: 'ClassExpression';\n  _ClassExpression: void;\n  body: ClassBody;\n  id: ?Identifier;\n  superClass: ?Expression;\n  decorators: any;\n  superTypeParameters: any;\n  typeParameters: any;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ComprehensionBlock = {\n  type: 'ComprehensionBlock';\n  _ComprehensionBlock: void;\n  each: boolean;\n  left: Pattern;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ComprehensionExpression = {\n  type: 'ComprehensionExpression';\n  _ComprehensionExpression: void;\n  body: Expression;\n  blocks: Array<ComprehensionBlock>;\n  filter: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ConditionalExpression = {\n  type: 'ConditionalExpression';\n  _ConditionalExpression: void;\n  alternate: Expression;\n  consequent: Expression;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ContinueStatement = {\n  type: 'ContinueStatement';\n  _ContinueStatement: void;\n  label: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type Decorator = {\n  type: 'Decorator';\n  _Decorator: void;\n  expression: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type DebuggerStatement = {\n  type: 'DebuggerStatement';\n  _DebuggerStatement: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type DoWhileStatement = {\n  type: 'DoWhileStatement';\n  _DoWhileStatement: void;\n  body: Statement;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type DoExpression = {\n  type: 'DoExpression';\n  _DoExpression: void;\n  body: Statement;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type EmptyStatement = {\n  type: 'EmptyStatement';\n  _EmptyStatement: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ExpressionStatement = {\n  type: 'ExpressionStatement';\n  _ExpressionStatement: void;\n  expression: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type File = {\n  type: 'File';\n  _File: void;\n  program: Program;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ForInStatement = {\n  type: 'ForInStatement';\n  _ForInStatement: void;\n  body: Statement;\n  left: Node;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type ForOfStatement = {\n  type: 'ForOfStatement';\n  _ForOfStatement: void;\n  body: Statement;\n  left: Node;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ForStatement = {\n  type: 'ForStatement';\n  _ForStatement: void;\n  init: ?Node;\n  test: ?Expression;\n  update: ?Expression;\n  body: Statement;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type FunctionDeclaration = {\n  type: 'FunctionDeclaration';\n  _FunctionDeclaration: void;\n  body: BlockStatement;\n  id: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n  async: boolean;\n  defaults: Array<?Expression>;\n  expression: boolean;\n  generator: boolean;\n  params: Array<Pattern>;\n  rest: ?Identifier;\n  returnType: ?TypeAnnotation;\n  typeParameters: ?TypeParameterDeclaration;\n};\n\nexport type FunctionExpression = {\n  type: 'FunctionExpression';\n  _FunctionExpression: void;\n  body: BlockStatement;\n  id: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n  async: boolean;\n  defaults: Array<?Expression>;\n  expression: boolean;\n  generator: boolean;\n  params: Array<Pattern>;\n  rest: ?Identifier;\n  returnType: ?TypeAnnotation;\n  typeParameters: ?TypeParameterDeclaration;\n};\n\nexport type Identifier = {\n  type: 'Identifier';\n  _Identifier: void;\n  name: string;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type IfStatement = {\n  type: 'IfStatement';\n  _IfStatement: void;\n  alternate: ?Statement;\n  consequent: Statement;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type ImportDefaultSpecifier = {\n  type: 'ImportDefaultSpecifier';\n  _ImportDefaultSpecifier: void;\n  local: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type ImportNamespaceSpecifier = {\n  type: 'ImportNamespaceSpecifier';\n  _ImportNamespaceSpecifier: void;\n  local: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type ImportDeclaration = {\n  type: 'ImportDeclaration';\n  _ImportDeclaration: void;\n  specifiers: Array<Node>;\n  source: Literal;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type ImportSpecifier = {\n  type: 'ImportSpecifier';\n  _ImportSpecifier: void;\n  imported: Node;\n  local: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type LabeledStatement = {\n  type: 'LabeledStatement';\n  _LabeledStatement: void;\n  body: Statement;\n  label: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type Literal = {\n  type: 'Literal';\n  _Literal: void;\n  raw: string;\n  regex: ?{pattern: string, flags: string};\n  value: ?(string | boolean | number | RegExp);\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\ntype LogicalOperator = '||' | '&&';\n\nexport type LogicalExpression = {\n  type: 'LogicalExpression';\n  _LogicalExpression: void;\n  left: Expression;\n  operator: LogicalOperator;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type MemberExpression = {\n  type: 'MemberExpression';\n  _MemberExpression: void;\n  computed: boolean;\n  object: Expression;\n  property: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type MetaProperty = {\n  type: 'MetaProperty';\n  _MetaProperty: void;\n  meta: Node;\n  property: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type MethodDefinition = {\n  type: 'MethodDefinition';\n  _MethodDefinition: void;\n  computed: boolean;\n  key: Node;\n  kind: 'constructor' | 'method' | 'get' | 'set';\n  static: boolean;\n  value: FunctionExpression;\n  decorators: ?Array<Decorator>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type NewExpression = {\n  type: 'NewExpression';\n  _NewExpression: void;\n  arguments: Array<Node>;\n  callee: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type Noop = {\n  type: 'Noop';\n  _Noop: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ObjectExpression = {\n  type: 'ObjectExpression';\n  _ObjectExpression: void;\n  properties: Array<Node>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ObjectPattern = {\n  type: 'ObjectPattern';\n  _ObjectPattern: void;\n  properties: Array<Node>;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type Program = {\n  type: 'Program';\n  _Program: void;\n  body: Array<Statement>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type Property = {\n  type: 'Property';\n  _Property: void;\n  computed: boolean;\n  key: Node;\n  kind: 'init' | 'get' | 'set';\n  method: boolean;\n  shorthand: boolean;\n  value: Node;\n  decorators: ?Array<Decorator>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type RestElement = {\n  type: 'RestElement';\n  _RestElement: void;\n  argument: Pattern;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ReturnStatement = {\n  type: 'ReturnStatement';\n  _ReturnStatement: void;\n  argument: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type SequenceExpression = {\n  type: 'SequenceExpression';\n  _SequenceExpression: void;\n  expression: Array<Expression>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type SpreadElement = {\n  type: 'SpreadElement';\n  _SpreadElement: void;\n  argument: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type SpreadProperty = {\n  type: 'SpreadProperty';\n  _SpreadProperty: void;\n  argument: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type Super = {\n  type: 'Super';\n  _Super: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type SwitchCase = {\n  type: 'SwitchCase';\n  _SwitchCase: void;\n  consequent: Array<Statement>;\n  test: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type SwitchStatement = {\n  type: 'SwitchStatement';\n  _SwitchStatement: void;\n  cases: Array<SwitchCase>;\n  discriminant: Expression;\n  lexical: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type TaggedTemplateExpression = {\n  type: 'TaggedTemplateExpression';\n  _TaggedTemplateExpression: void;\n  quasi: TemplateLiteral;\n  tag: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type TemplateElement = {\n  type: 'TemplateElement';\n  _TemplateElement: void;\n  tail: boolean;\n  value: {cooked: string, raw: string};\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type TemplateLiteral = {\n  type: 'TemplateLiteral';\n  _TemplateLiteral: void;\n  expressions: Array<Expression>;\n  quasis: Array<TemplateElement>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ThisExpression = {\n  type: 'ThisExpression';\n  _ThisExpression: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ThrowStatement = {\n  type: 'ThrowStatement';\n  _ThrowStatement: void;\n  argument: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type TryStatement = {\n  type: 'TryStatement';\n  _TryStatement: void;\n  block: BlockStatement;\n  finalizer: ?BlockStatement;\n  guardedHandlers: Array<CatchClause>;\n  handler: ?CatchClause;\n  handlers: ?Array<CatchClause>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\ntype UnaryOperator = '-' | '+' | '!' | '~' | 'typeof' | 'void' | 'delete';\n\nexport type UnaryExpression = {\n  type: 'UnaryExpression';\n  _UnaryExpression: void;\n  argument: Expression;\n  operator: UnaryOperator;\n  prefix: true;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\ntype UpdateOperator = '++' | '--';\n\nexport type UpdateExpression = {\n  type: 'UpdateExpression';\n  _UpdateExpression: void;\n  argument: Expression;\n  operator: UpdateOperator;\n  prefix: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type VariableDeclaration = {\n  type: 'VariableDeclaration';\n  _VariableDeclaration: void;\n  declarations: Array<VariableDeclarator>;\n  kind: 'var' | 'let' | 'const';\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type VariableDeclarator = {\n  type: 'VariableDeclarator';\n  _VariableDeclarator: void;\n  id: Pattern;\n  init: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type WhileStatement = {\n  type: 'WhileStatement';\n  _WhileStatement: void;\n  body: Statement;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type WithStatement = {\n  type: 'WithStatement';\n  _WithStatement: void;\n  body: Statement;\n  object: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type YieldExpression = {\n  type: 'YieldExpression';\n  _YieldExpression: void;\n  argument: ?Expression;\n  delegate: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type ExportAllDeclaration = {\n  type: 'ExportAllDeclaration';\n  _ExportAllDeclaration: void;\n  exported: Node;\n  source: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type ExportDefaultDeclaration = {\n  type: 'ExportDefaultDeclaration';\n  _ExportDefaultDeclaration: void;\n  declaration: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type ExportNamedDeclaration = {\n  type: 'ExportNamedDeclaration';\n  _ExportNamedDeclaration: void;\n  declaration: Node;\n  source: Literal;\n  specifiers: Array<Node>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type ExportDefaultSpecifier = {\n  type: 'ExportDefaultSpecifier';\n  _ExportDefaultSpecifier: void;\n  exported: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type ExportNamespaceSpecifier = {\n  type: 'ExportNamespaceSpecifier';\n  _ExportNamespaceSpecifier: void;\n  exported: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type ExportSpecifier = {\n  type: 'ExportSpecifier';\n  _ExportSpecifier: void;\n  local: Node;\n  exported: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type AnyTypeAnnotation = {\n  type: 'AnyTypeAnnotation';\n  _AnyTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ArrayTypeAnnotation = {\n  type: 'ArrayTypeAnnotation';\n  _ArrayTypeAnnotation: void;\n  elementType: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type BooleanLiteralTypeAnnotation = {\n  type: 'BooleanLiteralTypeAnnotation';\n  _BooleanLiteralTypeAnnotation: void;\n  raw: string;\n  value: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type BooleanTypeAnnotation = {\n  type: 'BooleanTypeAnnotation';\n  _BooleanTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ClassImplements = {\n  type: 'ClassImplements';\n  _ClassImplements: void;\n  id: Identifier;\n  typeParameters: ?TypeParameterInstantiation;\n  superClass: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ClassProperty = {\n  type: 'ClassProperty';\n  _ClassProperty: void;\n  computed: boolean;\n  key: Node;\n  static: boolean;\n  typeAnnotation: ?TypeAnnotation;\n  value: ?Expression;\n  decorators: Array<Decorator>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type DeclareClass = {\n  type: 'DeclareClass';\n  _DeclareClass: void;\n  body: ObjectTypeAnnotation;\n  extends: Array<InterfaceExtends>;\n  id: Identifier;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type DeclareFunction = {\n  type: 'DeclareFunction';\n  _DeclareFunction: void;\n  id: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type DeclareModule = {\n  type: 'DeclareModule';\n  _DeclareModule: void;\n  body: BlockStatement;\n  id: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type DeclareVariable = {\n  type: 'DeclareVariable';\n  _DeclareVariable: void;\n  id: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type FunctionTypeAnnotation = {\n  type: 'FunctionTypeAnnotation';\n  _FunctionTypeAnnotation: void;\n  params: Array<FunctionTypeParam>;\n  rest: ?FunctionTypeParam;\n  returnType: Type;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type FunctionTypeParam = {\n  type: 'FunctionTypeParam';\n  _FunctionTypeParam: void;\n  name: Identifier;\n  optional: boolean;\n  typeAnnotation: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type GenericTypeAnnotation = {\n  type: 'GenericTypeAnnotation';\n  _GenericTypeAnnotation: void;\n  id: Node;\n  typeParameters: ?TypeParameterInstantiation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type InterfaceExtends = {\n  type: 'InterfaceExtends';\n  _InterfaceExtends: void;\n  id: Identifier;\n  typeParameters: ?TypeParameterInstantiation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type InterfaceDeclaration = {\n  type: 'InterfaceDeclaration';\n  _InterfaceDeclaration: void;\n  body: ObjectTypeAnnotation;\n  extends: Array<InterfaceExtends>;\n  id: Identifier;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type IntersectionTypeAnnotation = {\n  type: 'IntersectionTypeAnnotation';\n  _IntersectionTypeAnnotation: void;\n  types: Array<Type>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type MixedTypeAnnotation = {\n  type: 'MixedTypeAnnotation';\n  _MixedTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type NullableTypeAnnotation = {\n  type: 'NullableTypeAnnotation';\n  _NullableTypeAnnotation: void;\n  typeAnnotation: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type NumberLiteralTypeAnnotation = {\n  type: 'NumberLiteralTypeAnnotation';\n  _NumberLiteralTypeAnnotation: void;\n  raw: string;\n  value: number;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type NumberTypeAnnotation = {\n  type: 'NumberTypeAnnotation';\n  _NumberTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type StringLiteralTypeAnnotation = {\n  type: 'StringLiteralTypeAnnotation';\n  _StringLiteralTypeAnnotation: void;\n  raw: string;\n  value: string;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type StringTypeAnnotation = {\n  type: 'StringTypeAnnotation';\n  _StringTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type TupleTypeAnnotation = {\n  type: 'TupleTypeAnnotation';\n  _TupleTypeAnnotation: void;\n  types: Array<Type>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type TypeofTypeAnnotation = {\n  type: 'TypeofTypeAnnotation';\n  _TypeofTypeAnnotation: void;\n  argument: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type TypeAlias = {\n  type: 'TypeAlias';\n  _TypeAlias: void;\n  id: Identifier;\n  right: Type;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type TypeAnnotation = {\n  type: 'TypeAnnotation';\n  _TypeAnnotation: void;\n  typeAnnotation: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type TypeCastExpression = {\n  type: 'TypeCastExpression';\n  _TypeCastExpression: void;\n  expression: Expression;\n  typeAnnotation: TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type TypeParameterDeclaration = {\n  type: 'TypeParameterDeclaration';\n  _TypeParameterDeclaration: void;\n  params: Array<Identifier>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type TypeParameterInstantiation = {\n  type: 'TypeParameterInstantiation';\n  _TypeParameterInstantiation: void;\n  params: Array<Type>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ObjectTypeAnnotation = {\n  type: 'ObjectTypeAnnotation';\n  _ObjectTypeAnnotation: void;\n  callProperties: Array<ObjectTypeCallProperty>;\n  indexers: Array<ObjectTypeIndexer>;\n  properties: Array<ObjectTypeProperty>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ObjectTypeCallProperty = {\n  type: 'ObjectTypeCallProperty';\n  _ObjectTypeCallProperty: void;\n  static: boolean;\n  value: FunctionTypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ObjectTypeIndexer = {\n  type: 'ObjectTypeIndexer';\n  _ObjectTypeIndexer: void;\n  id: Identifier;\n  key: Type;\n  value: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ObjectTypeProperty = {\n  type: 'ObjectTypeProperty';\n  _ObjectTypeProperty: void;\n  key: Node;\n  optional: boolean;\n  value: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type QualifiedTypeIdentifier = {\n  type: 'QualifiedTypeIdentifier';\n  _QualifiedTypeIdentifier: void;\n  id: Identifier;\n  qualification: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type UnionTypeAnnotation = {\n  type: 'UnionTypeAnnotation';\n  _UnionTypeAnnotation: void;\n  types: Array<Type>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type VoidTypeAnnotation = {\n  type: 'VoidTypeAnnotation';\n  _VoidTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type JSXAttribute = {\n  type: 'JSXAttribute';\n  _JSXAttribute: void;\n  name: Node;\n  value: ?Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type JSXClosingElement = {\n  type: 'JSXClosingElement';\n  _JSXClosingElement: void;\n  name: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type JSXElement = {\n  type: 'JSXElement';\n  _JSXElement: void;\n  children: Array<Node>;\n  closingElement: ?JSXClosingElement;\n  openingElement: JSXOpeningElement;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type JSXEmptyExpression = {\n  type: 'JSXEmptyExpression';\n  _JSXEmptyExpression: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type JSXExpressionContainer = {\n  type: 'JSXExpressionContainer';\n  _JSXExpressionContainer: void;\n  expression: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type JSXIdentifier = {\n  type: 'JSXIdentifier';\n  _JSXIdentifier: void;\n  name: string;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type JSXMemberExpression = {\n  type: 'JSXMemberExpression';\n  _JSXMemberExpression: void;\n  computed: boolean;\n  object: Node;\n  property: JSXIdentifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type JSXNamespacedName = {\n  type: 'JSXNamespacedName';\n  _JSXNamespacedName: void;\n  name: JSXIdentifier;\n  namespace: JSXIdentifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type JSXOpeningElement = {\n  type: 'JSXOpeningElement';\n  _JSXOpeningElement: void;\n  attributes: Array<Node>;\n  name: Array<Node>;\n  selfClosing: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type JSXSpreadAttribute = {\n  type: 'JSXSpreadAttribute';\n  _JSXSpreadAttribute: void;\n  argument: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\n\"use strict\";\n\n/*\n * Flow types for the Babylon AST.\n */\n\n// Abstract types. Something must extend these.\n\nexport type Comment =\n  | {\n      type: \"CommentLine\",\n      _CommentLine: void,\n      value: string,\n      end: number,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number\n    }\n  | {\n      type: \"CommentBlock\",\n      _CommentBlock: void,\n      value: string,\n      end: number,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number\n    };\n\nexport type Declaration =\n  | {\n      type: \"ClassBody\",\n      _ClassBody: void,\n      body: Array<Node>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ClassDeclaration\",\n      _ClassDeclaration: void,\n      body: ClassBody,\n      id: ?Identifier,\n      superClass: ?Expression,\n      decorators: any,\n      superTypeParameters: any,\n      typeParameters: any,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"FunctionDeclaration\",\n      _FunctionDeclaration: void,\n      body: BlockStatement,\n      id: Identifier,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>,\n      async: boolean,\n      defaults: Array<?Expression>,\n      expression: boolean,\n      generator: boolean,\n      params: Array<Pattern>,\n      rest: ?Identifier,\n      returnType: ?TypeAnnotation,\n      typeParameters: ?TypeParameterDeclaration\n    }\n  | {\n      type: \"MethodDefinition\",\n      _MethodDefinition: void,\n      computed: boolean,\n      key: Node,\n      kind: \"constructor\" | \"method\" | \"get\" | \"set\",\n      static: boolean,\n      value: FunctionExpression,\n      decorators: ?Array<Decorator>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"VariableDeclaration\",\n      _VariableDeclaration: void,\n      declarations: Array<VariableDeclarator>,\n      kind: \"var\" | \"let\" | \"const\",\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ClassProperty\",\n      _ClassProperty: void,\n      computed: boolean,\n      key: Node,\n      static: boolean,\n      typeAnnotation: ?TypeAnnotation,\n      value: ?Expression,\n      decorators: Array<Decorator>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    };\n\nexport type Expression =\n  | {\n      type: \"ArrayExpression\",\n      _ArrayExpression: void,\n      elements: Array<?Node>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"AssignmentExpression\",\n      _AssignmentExpression: void,\n      left: Pattern,\n      operator: AssignmentOperator,\n      right: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"AwaitExpression\",\n      _AwaitExpression: void,\n      all: boolean,\n      argument: ?Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"BinaryExpression\",\n      _BinaryExpression: void,\n      left: Expression,\n      operator: BinaryOperator,\n      right: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"BindExpression\",\n      _BindExpression: void,\n      callee: Node,\n      object: Node,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"CallExpression\",\n      _CallExpression: void,\n      arguments: Array<Node>,\n      callee: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ClassExpression\",\n      _ClassExpression: void,\n      body: ClassBody,\n      id: ?Identifier,\n      superClass: ?Expression,\n      decorators: any,\n      superTypeParameters: any,\n      typeParameters: any,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ComprehensionExpression\",\n      _ComprehensionExpression: void,\n      body: Expression,\n      blocks: Array<ComprehensionBlock>,\n      filter: ?Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ConditionalExpression\",\n      _ConditionalExpression: void,\n      alternate: Expression,\n      consequent: Expression,\n      test: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"DoExpression\",\n      _DoExpression: void,\n      body: Statement,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"FunctionExpression\",\n      _FunctionExpression: void,\n      body: BlockStatement,\n      id: ?Identifier,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>,\n      async: boolean,\n      defaults: Array<?Expression>,\n      expression: boolean,\n      generator: boolean,\n      params: Array<Pattern>,\n      rest: ?Identifier,\n      returnType: ?TypeAnnotation,\n      typeParameters: ?TypeParameterDeclaration\n    }\n  | {\n      type: \"Identifier\",\n      _Identifier: void,\n      name: string,\n      typeAnnotation: ?TypeAnnotation,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"Literal\",\n      _Literal: void,\n      raw: string,\n      regex: ?{ pattern: string, flags: string },\n      value: ?(string | boolean | number | RegExp),\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"LogicalExpression\",\n      _LogicalExpression: void,\n      left: Expression,\n      operator: LogicalOperator,\n      right: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"MemberExpression\",\n      _MemberExpression: void,\n      computed: boolean,\n      object: Expression,\n      property: Node,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"NewExpression\",\n      _NewExpression: void,\n      arguments: Array<Node>,\n      callee: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ObjectExpression\",\n      _ObjectExpression: void,\n      properties: Array<Node>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"SequenceExpression\",\n      _SequenceExpression: void,\n      expression: Array<Expression>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"TaggedTemplateExpression\",\n      _TaggedTemplateExpression: void,\n      quasi: TemplateLiteral,\n      tag: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"TemplateLiteral\",\n      _TemplateLiteral: void,\n      expressions: Array<Expression>,\n      quasis: Array<TemplateElement>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ThisExpression\",\n      _ThisExpression: void,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"UnaryExpression\",\n      _UnaryExpression: void,\n      argument: Expression,\n      operator: UnaryOperator,\n      prefix: true,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"UpdateExpression\",\n      _UpdateExpression: void,\n      argument: Expression,\n      operator: UpdateOperator,\n      prefix: boolean,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"YieldExpression\",\n      _YieldExpression: void,\n      argument: ?Expression,\n      delegate: boolean,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"TypeCastExpression\",\n      _TypeCastExpression: void,\n      expression: Expression,\n      typeAnnotation: TypeAnnotation,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"JSXElement\",\n      _JSXElement: void,\n      children: Array<Node>,\n      closingElement: ?JSXClosingElement,\n      openingElement: JSXOpeningElement,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"JSXEmptyExpression\",\n      _JSXEmptyExpression: void,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"JSXExpressionContainer\",\n      _JSXExpressionContainer: void,\n      expression: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"JSXMemberExpression\",\n      _JSXMemberExpression: void,\n      computed: boolean,\n      object: Node,\n      property: JSXIdentifier,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    };\n\nexport type Function =\n  | {\n      type: \"ArrowFunctionExpression\",\n      _ArrowFunctionExpression: void,\n      body: Node,\n      id: ?Identifier,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>,\n      async: boolean,\n      defaults: Array<?Expression>,\n      expression: boolean,\n      generator: boolean,\n      params: Array<Pattern>,\n      rest: ?Identifier,\n      returnType: ?TypeAnnotation,\n      typeParameters: ?TypeParameterDeclaration\n    }\n  | {\n      type: \"FunctionDeclaration\",\n      _FunctionDeclaration: void,\n      body: BlockStatement,\n      id: Identifier,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>,\n      async: boolean,\n      defaults: Array<?Expression>,\n      expression: boolean,\n      generator: boolean,\n      params: Array<Pattern>,\n      rest: ?Identifier,\n      returnType: ?TypeAnnotation,\n      typeParameters: ?TypeParameterDeclaration\n    }\n  | {\n      type: \"FunctionExpression\",\n      _FunctionExpression: void,\n      body: BlockStatement,\n      id: ?Identifier,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>,\n      async: boolean,\n      defaults: Array<?Expression>,\n      expression: boolean,\n      generator: boolean,\n      params: Array<Pattern>,\n      rest: ?Identifier,\n      returnType: ?TypeAnnotation,\n      typeParameters: ?TypeParameterDeclaration\n    };\n\nexport type Node =\n  | {\n      type: \"ArrayExpression\",\n      _ArrayExpression: void,\n      elements: Array<?Node>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ArrayPattern\",\n      _ArrayPattern: void,\n      elements: Array<?Node>,\n      typeAnnotation: ?TypeAnnotation,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ArrowFunctionExpression\",\n      _ArrowFunctionExpression: void,\n      body: Node,\n      id: ?Identifier,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>,\n      async: boolean,\n      defaults: Array<?Expression>,\n      expression: boolean,\n      generator: boolean,\n      params: Array<Pattern>,\n      rest: ?Identifier,\n      returnType: ?TypeAnnotation,\n      typeParameters: ?TypeParameterDeclaration\n    }\n  | {\n      type: \"AssignmentExpression\",\n      _AssignmentExpression: void,\n      left: Pattern,\n      operator: AssignmentOperator,\n      right: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"AssignmentPattern\",\n      _AssignmentPattern: void,\n      left: Pattern,\n      right: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"AwaitExpression\",\n      _AwaitExpression: void,\n      all: boolean,\n      argument: ?Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"BinaryExpression\",\n      _BinaryExpression: void,\n      left: Expression,\n      operator: BinaryOperator,\n      right: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"BindExpression\",\n      _BindExpression: void,\n      callee: Node,\n      object: Node,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"BlockStatement\",\n      _BlockStatement: void,\n      body: Array<Statement>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"BreakStatement\",\n      _BreakStatement: void,\n      label: ?Identifier,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"CallExpression\",\n      _CallExpression: void,\n      arguments: Array<Node>,\n      callee: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"CatchClause\",\n      _CatchClause: void,\n      body: BlockStatement,\n      param: Pattern,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ClassBody\",\n      _ClassBody: void,\n      body: Array<Node>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ClassDeclaration\",\n      _ClassDeclaration: void,\n      body: ClassBody,\n      id: ?Identifier,\n      superClass: ?Expression,\n      decorators: any,\n      superTypeParameters: any,\n      typeParameters: any,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ClassExpression\",\n      _ClassExpression: void,\n      body: ClassBody,\n      id: ?Identifier,\n      superClass: ?Expression,\n      decorators: any,\n      superTypeParameters: any,\n      typeParameters: any,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ComprehensionBlock\",\n      _ComprehensionBlock: void,\n      each: boolean,\n      left: Pattern,\n      right: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ComprehensionExpression\",\n      _ComprehensionExpression: void,\n      body: Expression,\n      blocks: Array<ComprehensionBlock>,\n      filter: ?Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ConditionalExpression\",\n      _ConditionalExpression: void,\n      alternate: Expression,\n      consequent: Expression,\n      test: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ContinueStatement\",\n      _ContinueStatement: void,\n      label: ?Identifier,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"Decorator\",\n      _Decorator: void,\n      expression: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"DebuggerStatement\",\n      _DebuggerStatement: void,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"DoWhileStatement\",\n      _DoWhileStatement: void,\n      body: Statement,\n      test: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"DoExpression\",\n      _DoExpression: void,\n      body: Statement,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"EmptyStatement\",\n      _EmptyStatement: void,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ExpressionStatement\",\n      _ExpressionStatement: void,\n      expression: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"File\",\n      _File: void,\n      program: Program,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ForInStatement\",\n      _ForInStatement: void,\n      body: Statement,\n      left: Node,\n      right: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ForOfStatement\",\n      _ForOfStatement: void,\n      body: Statement,\n      left: Node,\n      right: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ForStatement\",\n      _ForStatement: void,\n      init: ?Node,\n      test: ?Expression,\n      update: ?Expression,\n      body: Statement,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"FunctionDeclaration\",\n      _FunctionDeclaration: void,\n      body: BlockStatement,\n      id: Identifier,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>,\n      async: boolean,\n      defaults: Array<?Expression>,\n      expression: boolean,\n      generator: boolean,\n      params: Array<Pattern>,\n      rest: ?Identifier,\n      returnType: ?TypeAnnotation,\n      typeParameters: ?TypeParameterDeclaration\n    }\n  | {\n      type: \"FunctionExpression\",\n      _FunctionExpression: void,\n      body: BlockStatement,\n      id: ?Identifier,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>,\n      async: boolean,\n      defaults: Array<?Expression>,\n      expression: boolean,\n      generator: boolean,\n      params: Array<Pattern>,\n      rest: ?Identifier,\n      returnType: ?TypeAnnotation,\n      typeParameters: ?TypeParameterDeclaration\n    }\n  | {\n      type: \"Identifier\",\n      _Identifier: void,\n      name: string,\n      typeAnnotation: ?TypeAnnotation,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"IfStatement\",\n      _IfStatement: void,\n      alternate: ?Statement,\n      consequent: Statement,\n      test: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ImportDefaultSpecifier\",\n      _ImportDefaultSpecifier: void,\n      local: Node,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ImportNamespaceSpecifier\",\n      _ImportNamespaceSpecifier: void,\n      local: Node,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ImportDeclaration\",\n      _ImportDeclaration: void,\n      specifiers: Array<Node>,\n      source: Literal,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ImportSpecifier\",\n      _ImportSpecifier: void,\n      imported: Node,\n      local: Node,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"LabeledStatement\",\n      _LabeledStatement: void,\n      body: Statement,\n      label: Identifier,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"Literal\",\n      _Literal: void,\n      raw: string,\n      regex: ?{ pattern: string, flags: string },\n      value: ?(string | boolean | number | RegExp),\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"LogicalExpression\",\n      _LogicalExpression: void,\n      left: Expression,\n      operator: LogicalOperator,\n      right: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"MemberExpression\",\n      _MemberExpression: void,\n      computed: boolean,\n      object: Expression,\n      property: Node,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"MetaProperty\",\n      _MetaProperty: void,\n      meta: Node,\n      property: Node,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"MethodDefinition\",\n      _MethodDefinition: void,\n      computed: boolean,\n      key: Node,\n      kind: \"constructor\" | \"method\" | \"get\" | \"set\",\n      static: boolean,\n      value: FunctionExpression,\n      decorators: ?Array<Decorator>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"NewExpression\",\n      _NewExpression: void,\n      arguments: Array<Node>,\n      callee: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"Noop\",\n      _Noop: void,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ObjectExpression\",\n      _ObjectExpression: void,\n      properties: Array<Node>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ObjectPattern\",\n      _ObjectPattern: void,\n      properties: Array<Node>,\n      typeAnnotation: ?TypeAnnotation,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"Program\",\n      _Program: void,\n      body: Array<Statement>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"Property\",\n      _Property: void,\n      computed: boolean,\n      key: Node,\n      kind: \"init\" | \"get\" | \"set\",\n      method: boolean,\n      shorthand: boolean,\n      value: Node,\n      decorators: ?Array<Decorator>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"RestElement\",\n      _RestElement: void,\n      argument: Pattern,\n      typeAnnotation: ?TypeAnnotation,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ReturnStatement\",\n      _ReturnStatement: void,\n      argument: ?Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"SequenceExpression\",\n      _SequenceExpression: void,\n      expression: Array<Expression>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"SpreadElement\",\n      _SpreadElement: void,\n      argument: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"SpreadProperty\",\n      _SpreadProperty: void,\n      argument: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"Super\",\n      _Super: void,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"SwitchCase\",\n      _SwitchCase: void,\n      consequent: Array<Statement>,\n      test: ?Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"SwitchStatement\",\n      _SwitchStatement: void,\n      cases: Array<SwitchCase>,\n      discriminant: Expression,\n      lexical: boolean,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"TaggedTemplateExpression\",\n      _TaggedTemplateExpression: void,\n      quasi: TemplateLiteral,\n      tag: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"TemplateElement\",\n      _TemplateElement: void,\n      tail: boolean,\n      value: { cooked: string, raw: string },\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"TemplateLiteral\",\n      _TemplateLiteral: void,\n      expressions: Array<Expression>,\n      quasis: Array<TemplateElement>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ThisExpression\",\n      _ThisExpression: void,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ThrowStatement\",\n      _ThrowStatement: void,\n      argument: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"TryStatement\",\n      _TryStatement: void,\n      block: BlockStatement,\n      finalizer: ?BlockStatement,\n      guardedHandlers: Array<CatchClause>,\n      handler: ?CatchClause,\n      handlers: ?Array<CatchClause>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"UnaryExpression\",\n      _UnaryExpression: void,\n      argument: Expression,\n      operator: UnaryOperator,\n      prefix: true,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"UpdateExpression\",\n      _UpdateExpression: void,\n      argument: Expression,\n      operator: UpdateOperator,\n      prefix: boolean,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"VariableDeclaration\",\n      _VariableDeclaration: void,\n      declarations: Array<VariableDeclarator>,\n      kind: \"var\" | \"let\" | \"const\",\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"VariableDeclarator\",\n      _VariableDeclarator: void,\n      id: Pattern,\n      init: ?Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"WhileStatement\",\n      _WhileStatement: void,\n      body: Statement,\n      test: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"WithStatement\",\n      _WithStatement: void,\n      body: Statement,\n      object: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"YieldExpression\",\n      _YieldExpression: void,\n      argument: ?Expression,\n      delegate: boolean,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ExportAllDeclaration\",\n      _ExportAllDeclaration: void,\n      exported: Node,\n      source: Node,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ExportDefaultDeclaration\",\n      _ExportDefaultDeclaration: void,\n      declaration: Node,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ExportNamedDeclaration\",\n      _ExportNamedDeclaration: void,\n      declaration: Node,\n      source: Literal,\n      specifiers: Array<Node>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ExportDefaultSpecifier\",\n      _ExportDefaultSpecifier: void,\n      exported: Node,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ExportNamespaceSpecifier\",\n      _ExportNamespaceSpecifier: void,\n      exported: Node,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ExportSpecifier\",\n      _ExportSpecifier: void,\n      local: Node,\n      exported: Node,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"AnyTypeAnnotation\",\n      _AnyTypeAnnotation: void,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ArrayTypeAnnotation\",\n      _ArrayTypeAnnotation: void,\n      elementType: Type,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"BooleanLiteralTypeAnnotation\",\n      _BooleanLiteralTypeAnnotation: void,\n      raw: string,\n      value: boolean,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"BooleanTypeAnnotation\",\n      _BooleanTypeAnnotation: void,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ClassImplements\",\n      _ClassImplements: void,\n      id: Identifier,\n      typeParameters: ?TypeParameterInstantiation,\n      superClass: ?Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ClassProperty\",\n      _ClassProperty: void,\n      computed: boolean,\n      key: Node,\n      static: boolean,\n      typeAnnotation: ?TypeAnnotation,\n      value: ?Expression,\n      decorators: Array<Decorator>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"DeclareClass\",\n      _DeclareClass: void,\n      body: ObjectTypeAnnotation,\n      extends: Array<InterfaceExtends>,\n      id: Identifier,\n      typeParameters: ?TypeParameterDeclaration,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"DeclareFunction\",\n      _DeclareFunction: void,\n      id: Identifier,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"DeclareModule\",\n      _DeclareModule: void,\n      body: BlockStatement,\n      id: Node,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"DeclareVariable\",\n      _DeclareVariable: void,\n      id: Identifier,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"FunctionTypeAnnotation\",\n      _FunctionTypeAnnotation: void,\n      params: Array<FunctionTypeParam>,\n      rest: ?FunctionTypeParam,\n      returnType: Type,\n      typeParameters: ?TypeParameterDeclaration,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"FunctionTypeParam\",\n      _FunctionTypeParam: void,\n      name: Identifier,\n      optional: boolean,\n      typeAnnotation: Type,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"GenericTypeAnnotation\",\n      _GenericTypeAnnotation: void,\n      id: Node,\n      typeParameters: ?TypeParameterInstantiation,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"InterfaceExtends\",\n      _InterfaceExtends: void,\n      id: Identifier,\n      typeParameters: ?TypeParameterInstantiation,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"InterfaceDeclaration\",\n      _InterfaceDeclaration: void,\n      body: ObjectTypeAnnotation,\n      extends: Array<InterfaceExtends>,\n      id: Identifier,\n      typeParameters: ?TypeParameterDeclaration,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"IntersectionTypeAnnotation\",\n      _IntersectionTypeAnnotation: void,\n      types: Array<Type>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"MixedTypeAnnotation\",\n      _MixedTypeAnnotation: void,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"NullableTypeAnnotation\",\n      _NullableTypeAnnotation: void,\n      typeAnnotation: Type,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"NumberLiteralTypeAnnotation\",\n      _NumberLiteralTypeAnnotation: void,\n      raw: string,\n      value: number,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"NumberTypeAnnotation\",\n      _NumberTypeAnnotation: void,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"StringLiteralTypeAnnotation\",\n      _StringLiteralTypeAnnotation: void,\n      raw: string,\n      value: string,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"StringTypeAnnotation\",\n      _StringTypeAnnotation: void,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"TupleTypeAnnotation\",\n      _TupleTypeAnnotation: void,\n      types: Array<Type>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"TypeofTypeAnnotation\",\n      _TypeofTypeAnnotation: void,\n      argument: Type,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"TypeAlias\",\n      _TypeAlias: void,\n      id: Identifier,\n      right: Type,\n      typeParameters: ?TypeParameterDeclaration,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"TypeAnnotation\",\n      _TypeAnnotation: void,\n      typeAnnotation: Type,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"TypeCastExpression\",\n      _TypeCastExpression: void,\n      expression: Expression,\n      typeAnnotation: TypeAnnotation,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"TypeParameterDeclaration\",\n      _TypeParameterDeclaration: void,\n      params: Array<Identifier>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"TypeParameterInstantiation\",\n      _TypeParameterInstantiation: void,\n      params: Array<Type>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ObjectTypeAnnotation\",\n      _ObjectTypeAnnotation: void,\n      callProperties: Array<ObjectTypeCallProperty>,\n      indexers: Array<ObjectTypeIndexer>,\n      properties: Array<ObjectTypeProperty>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ObjectTypeCallProperty\",\n      _ObjectTypeCallProperty: void,\n      static: boolean,\n      value: FunctionTypeAnnotation,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ObjectTypeIndexer\",\n      _ObjectTypeIndexer: void,\n      id: Identifier,\n      key: Type,\n      value: Type,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ObjectTypeProperty\",\n      _ObjectTypeProperty: void,\n      key: Node,\n      optional: boolean,\n      value: Type,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"QualifiedTypeIdentifier\",\n      _QualifiedTypeIdentifier: void,\n      id: Identifier,\n      qualification: Node,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"UnionTypeAnnotation\",\n      _UnionTypeAnnotation: void,\n      types: Array<Type>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"VoidTypeAnnotation\",\n      _VoidTypeAnnotation: void,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"JSXAttribute\",\n      _JSXAttribute: void,\n      name: Node,\n      value: ?Node,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"JSXClosingElement\",\n      _JSXClosingElement: void,\n      name: Node,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"JSXElement\",\n      _JSXElement: void,\n      children: Array<Node>,\n      closingElement: ?JSXClosingElement,\n      openingElement: JSXOpeningElement,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"JSXEmptyExpression\",\n      _JSXEmptyExpression: void,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"JSXExpressionContainer\",\n      _JSXExpressionContainer: void,\n      expression: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"JSXIdentifier\",\n      _JSXIdentifier: void,\n      name: string,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"JSXMemberExpression\",\n      _JSXMemberExpression: void,\n      computed: boolean,\n      object: Node,\n      property: JSXIdentifier,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"JSXNamespacedName\",\n      _JSXNamespacedName: void,\n      name: JSXIdentifier,\n      namespace: JSXIdentifier,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"JSXOpeningElement\",\n      _JSXOpeningElement: void,\n      attributes: Array<Node>,\n      name: Array<Node>,\n      selfClosing: boolean,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"JSXSpreadAttribute\",\n      _JSXSpreadAttribute: void,\n      argument: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    };\n\nexport type Pattern =\n  | {\n      type: \"ArrayPattern\",\n      _ArrayPattern: void,\n      elements: Array<?Node>,\n      typeAnnotation: ?TypeAnnotation,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"AssignmentPattern\",\n      _AssignmentPattern: void,\n      left: Pattern,\n      right: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"Identifier\",\n      _Identifier: void,\n      name: string,\n      typeAnnotation: ?TypeAnnotation,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ObjectPattern\",\n      _ObjectPattern: void,\n      properties: Array<Node>,\n      typeAnnotation: ?TypeAnnotation,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"RestElement\",\n      _RestElement: void,\n      argument: Pattern,\n      typeAnnotation: ?TypeAnnotation,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    };\n\nexport type Statement =\n  | {\n      type: \"BlockStatement\",\n      _BlockStatement: void,\n      body: Array<Statement>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"BreakStatement\",\n      _BreakStatement: void,\n      label: ?Identifier,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ContinueStatement\",\n      _ContinueStatement: void,\n      label: ?Identifier,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"DoWhileStatement\",\n      _DoWhileStatement: void,\n      body: Statement,\n      test: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"EmptyStatement\",\n      _EmptyStatement: void,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ExpressionStatement\",\n      _ExpressionStatement: void,\n      expression: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ForInStatement\",\n      _ForInStatement: void,\n      body: Statement,\n      left: Node,\n      right: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ForOfStatement\",\n      _ForOfStatement: void,\n      body: Statement,\n      left: Node,\n      right: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ForStatement\",\n      _ForStatement: void,\n      init: ?Node,\n      test: ?Expression,\n      update: ?Expression,\n      body: Statement,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"IfStatement\",\n      _IfStatement: void,\n      alternate: ?Statement,\n      consequent: Statement,\n      test: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"LabeledStatement\",\n      _LabeledStatement: void,\n      body: Statement,\n      label: Identifier,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ReturnStatement\",\n      _ReturnStatement: void,\n      argument: ?Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"SwitchStatement\",\n      _SwitchStatement: void,\n      cases: Array<SwitchCase>,\n      discriminant: Expression,\n      lexical: boolean,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ThrowStatement\",\n      _ThrowStatement: void,\n      argument: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"TryStatement\",\n      _TryStatement: void,\n      block: BlockStatement,\n      finalizer: ?BlockStatement,\n      guardedHandlers: Array<CatchClause>,\n      handler: ?CatchClause,\n      handlers: ?Array<CatchClause>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"WhileStatement\",\n      _WhileStatement: void,\n      body: Statement,\n      test: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"WithStatement\",\n      _WithStatement: void,\n      body: Statement,\n      object: Expression,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"DeclareClass\",\n      _DeclareClass: void,\n      body: ObjectTypeAnnotation,\n      extends: Array<InterfaceExtends>,\n      id: Identifier,\n      typeParameters: ?TypeParameterDeclaration,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"DeclareFunction\",\n      _DeclareFunction: void,\n      id: Identifier,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"DeclareModule\",\n      _DeclareModule: void,\n      body: BlockStatement,\n      id: Node,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"DeclareVariable\",\n      _DeclareVariable: void,\n      id: Identifier,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"InterfaceDeclaration\",\n      _InterfaceDeclaration: void,\n      body: ObjectTypeAnnotation,\n      extends: Array<InterfaceExtends>,\n      id: Identifier,\n      typeParameters: ?TypeParameterDeclaration,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"TypeAlias\",\n      _TypeAlias: void,\n      id: Identifier,\n      right: Type,\n      typeParameters: ?TypeParameterDeclaration,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    };\n\nexport type Type =\n  | {\n      type: \"AnyTypeAnnotation\",\n      _AnyTypeAnnotation: void,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ArrayTypeAnnotation\",\n      _ArrayTypeAnnotation: void,\n      elementType: Type,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"BooleanLiteralTypeAnnotation\",\n      _BooleanLiteralTypeAnnotation: void,\n      raw: string,\n      value: boolean,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"BooleanTypeAnnotation\",\n      _BooleanTypeAnnotation: void,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"FunctionTypeAnnotation\",\n      _FunctionTypeAnnotation: void,\n      params: Array<FunctionTypeParam>,\n      rest: ?FunctionTypeParam,\n      returnType: Type,\n      typeParameters: ?TypeParameterDeclaration,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"GenericTypeAnnotation\",\n      _GenericTypeAnnotation: void,\n      id: Node,\n      typeParameters: ?TypeParameterInstantiation,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"IntersectionTypeAnnotation\",\n      _IntersectionTypeAnnotation: void,\n      types: Array<Type>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"MixedTypeAnnotation\",\n      _MixedTypeAnnotation: void,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"NullableTypeAnnotation\",\n      _NullableTypeAnnotation: void,\n      typeAnnotation: Type,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"NumberLiteralTypeAnnotation\",\n      _NumberLiteralTypeAnnotation: void,\n      raw: string,\n      value: number,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"NumberTypeAnnotation\",\n      _NumberTypeAnnotation: void,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"StringLiteralTypeAnnotation\",\n      _StringLiteralTypeAnnotation: void,\n      raw: string,\n      value: string,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"StringTypeAnnotation\",\n      _StringTypeAnnotation: void,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"TupleTypeAnnotation\",\n      _TupleTypeAnnotation: void,\n      types: Array<Type>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"ObjectTypeAnnotation\",\n      _ObjectTypeAnnotation: void,\n      callProperties: Array<ObjectTypeCallProperty>,\n      indexers: Array<ObjectTypeIndexer>,\n      properties: Array<ObjectTypeProperty>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"UnionTypeAnnotation\",\n      _UnionTypeAnnotation: void,\n      types: Array<Type>,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    }\n  | {\n      type: \"VoidTypeAnnotation\",\n      _VoidTypeAnnotation: void,\n      end: number,\n      innerComments: ?Array<Comment>,\n      leadingComments: ?Array<Comment>,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number,\n      trailingComments: ?Array<Comment>\n    };\n\n// Concrete Types. Nothing can extend these.\n\nexport type CommentLine = {\n  type: \"CommentLine\",\n  _CommentLine: void,\n  value: string,\n  end: number,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number\n};\n\nexport type CommentBlock = {\n  type: \"CommentBlock\",\n  _CommentBlock: void,\n  value: string,\n  end: number,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number\n};\n\n// Babel concrete types.\n\nexport type ArrayExpression = {\n  type: \"ArrayExpression\",\n  _ArrayExpression: void,\n  elements: Array<?Node>,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ArrayPattern = {\n  type: \"ArrayPattern\",\n  _ArrayPattern: void,\n  elements: Array<?Node>,\n  typeAnnotation: ?TypeAnnotation,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ArrowFunctionExpression = {\n  type: \"ArrowFunctionExpression\",\n  _ArrowFunctionExpression: void,\n  body: Node,\n  id: ?Identifier,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>,\n  async: boolean,\n  defaults: Array<?Expression>,\n  expression: boolean,\n  generator: boolean,\n  params: Array<Pattern>,\n  rest: ?Identifier,\n  returnType: ?TypeAnnotation,\n  typeParameters: ?TypeParameterDeclaration\n};\n\ntype AssignmentOperator =\n  | \"=\"\n  | \"+=\"\n  | \"-=\"\n  | \"*=\"\n  | \"/=\"\n  | \"%=\"\n  | \"<<=\"\n  | \">>=\"\n  | \">>>=\"\n  | \"|=\"\n  | \"^=\"\n  | \"&=\";\n\nexport type AssignmentExpression = {\n  type: \"AssignmentExpression\",\n  _AssignmentExpression: void,\n  left: Pattern,\n  operator: AssignmentOperator,\n  right: Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type AssignmentPattern = {\n  type: \"AssignmentPattern\",\n  _AssignmentPattern: void,\n  left: Pattern,\n  right: Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type AwaitExpression = {\n  type: \"AwaitExpression\",\n  _AwaitExpression: void,\n  all: boolean,\n  argument: ?Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\ntype BinaryOperator =\n  | \"==\"\n  | \"!=\"\n  | \"===\"\n  | \"!==\"\n  | \"<\"\n  | \"<=\"\n  | \">\"\n  | \">=\"\n  | \"<<\"\n  | \">>\"\n  | \">>>\"\n  | \"+\"\n  | \"-\"\n  | \"*\"\n  | \"/\"\n  | \"%\"\n  | \"&\"\n  | \"|\"\n  | \"^\"\n  | \"in\"\n  | \"instanceof\"\n  | \"..\";\n\nexport type BinaryExpression = {\n  type: \"BinaryExpression\",\n  _BinaryExpression: void,\n  left: Expression,\n  operator: BinaryOperator,\n  right: Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\n// TODO: What is this?\nexport type BindExpression = {\n  type: \"BindExpression\",\n  _BindExpression: void,\n  callee: Node,\n  object: Node,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type BlockStatement = {\n  type: \"BlockStatement\",\n  _BlockStatement: void,\n  body: Array<Statement>,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type BreakStatement = {\n  type: \"BreakStatement\",\n  _BreakStatement: void,\n  label: ?Identifier,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type CallExpression = {\n  type: \"CallExpression\",\n  _CallExpression: void,\n  arguments: Array<Node>,\n  callee: Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type CatchClause = {\n  type: \"CatchClause\",\n  _CatchClause: void,\n  body: BlockStatement,\n  param: Pattern,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ClassBody = {\n  type: \"ClassBody\",\n  _ClassBody: void,\n  body: Array<Node>,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ClassDeclaration = {\n  type: \"ClassDeclaration\",\n  _ClassDeclaration: void,\n  body: ClassBody,\n  id: ?Identifier,\n  superClass: ?Expression,\n  decorators: any,\n  superTypeParameters: any,\n  typeParameters: any,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ClassExpression = {\n  type: \"ClassExpression\",\n  _ClassExpression: void,\n  body: ClassBody,\n  id: ?Identifier,\n  superClass: ?Expression,\n  decorators: any,\n  superTypeParameters: any,\n  typeParameters: any,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ComprehensionBlock = {\n  type: \"ComprehensionBlock\",\n  _ComprehensionBlock: void,\n  each: boolean,\n  left: Pattern,\n  right: Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ComprehensionExpression = {\n  type: \"ComprehensionExpression\",\n  _ComprehensionExpression: void,\n  body: Expression,\n  blocks: Array<ComprehensionBlock>,\n  filter: ?Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ConditionalExpression = {\n  type: \"ConditionalExpression\",\n  _ConditionalExpression: void,\n  alternate: Expression,\n  consequent: Expression,\n  test: Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ContinueStatement = {\n  type: \"ContinueStatement\",\n  _ContinueStatement: void,\n  label: ?Identifier,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\n// TODO: Make this correct.\nexport type Decorator = {\n  type: \"Decorator\",\n  _Decorator: void,\n  expression: Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type DebuggerStatement = {\n  type: \"DebuggerStatement\",\n  _DebuggerStatement: void,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type DoWhileStatement = {\n  type: \"DoWhileStatement\",\n  _DoWhileStatement: void,\n  body: Statement,\n  test: Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\n// TODO: Make this correct.\nexport type DoExpression = {\n  type: \"DoExpression\",\n  _DoExpression: void,\n  body: Statement,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type EmptyStatement = {\n  type: \"EmptyStatement\",\n  _EmptyStatement: void,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ExpressionStatement = {\n  type: \"ExpressionStatement\",\n  _ExpressionStatement: void,\n  expression: Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type File = {\n  type: \"File\",\n  _File: void,\n  program: Program,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ForInStatement = {\n  type: \"ForInStatement\",\n  _ForInStatement: void,\n  body: Statement,\n  left: Node,\n  right: Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\n// TODO: Make this correct.\nexport type ForOfStatement = {\n  type: \"ForOfStatement\",\n  _ForOfStatement: void,\n  body: Statement,\n  left: Node,\n  right: Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ForStatement = {\n  type: \"ForStatement\",\n  _ForStatement: void,\n  init: ?Node,\n  test: ?Expression,\n  update: ?Expression,\n  body: Statement,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type FunctionDeclaration = {\n  type: \"FunctionDeclaration\",\n  _FunctionDeclaration: void,\n  body: BlockStatement,\n  id: Identifier,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>,\n  async: boolean,\n  defaults: Array<?Expression>,\n  expression: boolean,\n  generator: boolean,\n  params: Array<Pattern>,\n  rest: ?Identifier,\n  returnType: ?TypeAnnotation,\n  typeParameters: ?TypeParameterDeclaration\n};\n\nexport type FunctionExpression = {\n  type: \"FunctionExpression\",\n  _FunctionExpression: void,\n  body: BlockStatement,\n  id: ?Identifier,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>,\n  async: boolean,\n  defaults: Array<?Expression>,\n  expression: boolean,\n  generator: boolean,\n  params: Array<Pattern>,\n  rest: ?Identifier,\n  returnType: ?TypeAnnotation,\n  typeParameters: ?TypeParameterDeclaration\n};\n\nexport type Identifier = {\n  type: \"Identifier\",\n  _Identifier: void,\n  name: string,\n  typeAnnotation: ?TypeAnnotation,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type IfStatement = {\n  type: \"IfStatement\",\n  _IfStatement: void,\n  alternate: ?Statement,\n  consequent: Statement,\n  test: Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\n// TODO: Make this correct.\nexport type ImportDefaultSpecifier = {\n  type: \"ImportDefaultSpecifier\",\n  _ImportDefaultSpecifier: void,\n  local: Node,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\n// TODO: Make this correct.\nexport type ImportNamespaceSpecifier = {\n  type: \"ImportNamespaceSpecifier\",\n  _ImportNamespaceSpecifier: void,\n  local: Node,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\n// TODO: Make this correct.\nexport type ImportDeclaration = {\n  type: \"ImportDeclaration\",\n  _ImportDeclaration: void,\n  specifiers: Array<Node>,\n  source: Literal,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\n// TODO: Make this correct.\nexport type ImportSpecifier = {\n  type: \"ImportSpecifier\",\n  _ImportSpecifier: void,\n  imported: Node,\n  local: Node,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type LabeledStatement = {\n  type: \"LabeledStatement\",\n  _LabeledStatement: void,\n  body: Statement,\n  label: Identifier,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type Literal = {\n  type: \"Literal\",\n  _Literal: void,\n  raw: string,\n  regex: ?{ pattern: string, flags: string },\n  value: ?(string | boolean | number | RegExp),\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\ntype LogicalOperator = \"||\" | \"&&\";\n\nexport type LogicalExpression = {\n  type: \"LogicalExpression\",\n  _LogicalExpression: void,\n  left: Expression,\n  operator: LogicalOperator,\n  right: Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type MemberExpression = {\n  type: \"MemberExpression\",\n  _MemberExpression: void,\n  computed: boolean,\n  object: Expression,\n  property: Node,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\n// TODO: Make this correct.\nexport type MetaProperty = {\n  type: \"MetaProperty\",\n  _MetaProperty: void,\n  meta: Node,\n  property: Node,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type MethodDefinition = {\n  type: \"MethodDefinition\",\n  _MethodDefinition: void,\n  computed: boolean,\n  key: Node,\n  kind: \"constructor\" | \"method\" | \"get\" | \"set\",\n  static: boolean,\n  value: FunctionExpression,\n  decorators: ?Array<Decorator>,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type NewExpression = {\n  type: \"NewExpression\",\n  _NewExpression: void,\n  arguments: Array<Node>,\n  callee: Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type Noop = {\n  type: \"Noop\",\n  _Noop: void,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ObjectExpression = {\n  type: \"ObjectExpression\",\n  _ObjectExpression: void,\n  properties: Array<Node>,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ObjectPattern = {\n  type: \"ObjectPattern\",\n  _ObjectPattern: void,\n  properties: Array<Node>,\n  typeAnnotation: ?TypeAnnotation,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type Program = {\n  type: \"Program\",\n  _Program: void,\n  body: Array<Statement>,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type Property = {\n  type: \"Property\",\n  _Property: void,\n  computed: boolean,\n  key: Node,\n  kind: \"init\" | \"get\" | \"set\",\n  method: boolean,\n  shorthand: boolean,\n  value: Node,\n  decorators: ?Array<Decorator>,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type RestElement = {\n  type: \"RestElement\",\n  _RestElement: void,\n  argument: Pattern,\n  typeAnnotation: ?TypeAnnotation,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ReturnStatement = {\n  type: \"ReturnStatement\",\n  _ReturnStatement: void,\n  argument: ?Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type SequenceExpression = {\n  type: \"SequenceExpression\",\n  _SequenceExpression: void,\n  expression: Array<Expression>,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type SpreadElement = {\n  type: \"SpreadElement\",\n  _SpreadElement: void,\n  argument: Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type SpreadProperty = {\n  type: \"SpreadProperty\",\n  _SpreadProperty: void,\n  argument: Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type Super = {\n  type: \"Super\",\n  _Super: void,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type SwitchCase = {\n  type: \"SwitchCase\",\n  _SwitchCase: void,\n  consequent: Array<Statement>,\n  test: ?Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type SwitchStatement = {\n  type: \"SwitchStatement\",\n  _SwitchStatement: void,\n  cases: Array<SwitchCase>,\n  discriminant: Expression,\n  lexical: boolean,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type TaggedTemplateExpression = {\n  type: \"TaggedTemplateExpression\",\n  _TaggedTemplateExpression: void,\n  quasi: TemplateLiteral,\n  tag: Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type TemplateElement = {\n  type: \"TemplateElement\",\n  _TemplateElement: void,\n  tail: boolean,\n  value: { cooked: string, raw: string },\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type TemplateLiteral = {\n  type: \"TemplateLiteral\",\n  _TemplateLiteral: void,\n  expressions: Array<Expression>,\n  quasis: Array<TemplateElement>,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ThisExpression = {\n  type: \"ThisExpression\",\n  _ThisExpression: void,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ThrowStatement = {\n  type: \"ThrowStatement\",\n  _ThrowStatement: void,\n  argument: Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type TryStatement = {\n  type: \"TryStatement\",\n  _TryStatement: void,\n  block: BlockStatement,\n  finalizer: ?BlockStatement,\n  guardedHandlers: Array<CatchClause>,\n  handler: ?CatchClause,\n  handlers: ?Array<CatchClause>,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\ntype UnaryOperator = \"-\" | \"+\" | \"!\" | \"~\" | \"typeof\" | \"void\" | \"delete\";\n\nexport type UnaryExpression = {\n  type: \"UnaryExpression\",\n  _UnaryExpression: void,\n  argument: Expression,\n  operator: UnaryOperator,\n  prefix: true,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\ntype UpdateOperator = \"++\" | \"--\";\n\nexport type UpdateExpression = {\n  type: \"UpdateExpression\",\n  _UpdateExpression: void,\n  argument: Expression,\n  operator: UpdateOperator,\n  prefix: boolean,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type VariableDeclaration = {\n  type: \"VariableDeclaration\",\n  _VariableDeclaration: void,\n  declarations: Array<VariableDeclarator>,\n  kind: \"var\" | \"let\" | \"const\",\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type VariableDeclarator = {\n  type: \"VariableDeclarator\",\n  _VariableDeclarator: void,\n  id: Pattern,\n  init: ?Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type WhileStatement = {\n  type: \"WhileStatement\",\n  _WhileStatement: void,\n  body: Statement,\n  test: Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type WithStatement = {\n  type: \"WithStatement\",\n  _WithStatement: void,\n  body: Statement,\n  object: Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type YieldExpression = {\n  type: \"YieldExpression\",\n  _YieldExpression: void,\n  argument: ?Expression,\n  delegate: boolean,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\n// TODO: Make this correct.\nexport type ExportAllDeclaration = {\n  type: \"ExportAllDeclaration\",\n  _ExportAllDeclaration: void,\n  exported: Node,\n  source: Node,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\n// TODO: Make this correct.\nexport type ExportDefaultDeclaration = {\n  type: \"ExportDefaultDeclaration\",\n  _ExportDefaultDeclaration: void,\n  declaration: Node,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\n// TODO: Make this correct.\nexport type ExportNamedDeclaration = {\n  type: \"ExportNamedDeclaration\",\n  _ExportNamedDeclaration: void,\n  declaration: Node,\n  source: Literal,\n  specifiers: Array<Node>,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\n// TODO: Make this correct.\nexport type ExportDefaultSpecifier = {\n  type: \"ExportDefaultSpecifier\",\n  _ExportDefaultSpecifier: void,\n  exported: Node,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\n// TODO: Make this correct.\nexport type ExportNamespaceSpecifier = {\n  type: \"ExportNamespaceSpecifier\",\n  _ExportNamespaceSpecifier: void,\n  exported: Node,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\n// TODO: Make this correct.\nexport type ExportSpecifier = {\n  type: \"ExportSpecifier\",\n  _ExportSpecifier: void,\n  local: Node,\n  exported: Node,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type AnyTypeAnnotation = {\n  type: \"AnyTypeAnnotation\",\n  _AnyTypeAnnotation: void,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ArrayTypeAnnotation = {\n  type: \"ArrayTypeAnnotation\",\n  _ArrayTypeAnnotation: void,\n  elementType: Type,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type BooleanLiteralTypeAnnotation = {\n  type: \"BooleanLiteralTypeAnnotation\",\n  _BooleanLiteralTypeAnnotation: void,\n  raw: string,\n  value: boolean,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type BooleanTypeAnnotation = {\n  type: \"BooleanTypeAnnotation\",\n  _BooleanTypeAnnotation: void,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ClassImplements = {\n  type: \"ClassImplements\",\n  _ClassImplements: void,\n  id: Identifier,\n  typeParameters: ?TypeParameterInstantiation,\n  superClass: ?Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ClassProperty = {\n  type: \"ClassProperty\",\n  _ClassProperty: void,\n  computed: boolean,\n  key: Node,\n  static: boolean,\n  typeAnnotation: ?TypeAnnotation,\n  value: ?Expression,\n  decorators: Array<Decorator>,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type DeclareClass = {\n  type: \"DeclareClass\",\n  _DeclareClass: void,\n  body: ObjectTypeAnnotation,\n  extends: Array<InterfaceExtends>,\n  id: Identifier,\n  typeParameters: ?TypeParameterDeclaration,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\n// TODO: Make this correct.\nexport type DeclareFunction = {\n  type: \"DeclareFunction\",\n  _DeclareFunction: void,\n  id: Identifier,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type DeclareModule = {\n  type: \"DeclareModule\",\n  _DeclareModule: void,\n  body: BlockStatement,\n  id: Node,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\n// TODO: Make this correct.\nexport type DeclareVariable = {\n  type: \"DeclareVariable\",\n  _DeclareVariable: void,\n  id: Identifier,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type FunctionTypeAnnotation = {\n  type: \"FunctionTypeAnnotation\",\n  _FunctionTypeAnnotation: void,\n  params: Array<FunctionTypeParam>,\n  rest: ?FunctionTypeParam,\n  returnType: Type,\n  typeParameters: ?TypeParameterDeclaration,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type FunctionTypeParam = {\n  type: \"FunctionTypeParam\",\n  _FunctionTypeParam: void,\n  name: Identifier,\n  optional: boolean,\n  typeAnnotation: Type,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type GenericTypeAnnotation = {\n  type: \"GenericTypeAnnotation\",\n  _GenericTypeAnnotation: void,\n  id: Node,\n  typeParameters: ?TypeParameterInstantiation,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type InterfaceExtends = {\n  type: \"InterfaceExtends\",\n  _InterfaceExtends: void,\n  id: Identifier,\n  typeParameters: ?TypeParameterInstantiation,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type InterfaceDeclaration = {\n  type: \"InterfaceDeclaration\",\n  _InterfaceDeclaration: void,\n  body: ObjectTypeAnnotation,\n  extends: Array<InterfaceExtends>,\n  id: Identifier,\n  typeParameters: ?TypeParameterDeclaration,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type IntersectionTypeAnnotation = {\n  type: \"IntersectionTypeAnnotation\",\n  _IntersectionTypeAnnotation: void,\n  types: Array<Type>,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type MixedTypeAnnotation = {\n  type: \"MixedTypeAnnotation\",\n  _MixedTypeAnnotation: void,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type NullableTypeAnnotation = {\n  type: \"NullableTypeAnnotation\",\n  _NullableTypeAnnotation: void,\n  typeAnnotation: Type,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type NumberLiteralTypeAnnotation = {\n  type: \"NumberLiteralTypeAnnotation\",\n  _NumberLiteralTypeAnnotation: void,\n  raw: string,\n  value: number,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type NumberTypeAnnotation = {\n  type: \"NumberTypeAnnotation\",\n  _NumberTypeAnnotation: void,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type StringLiteralTypeAnnotation = {\n  type: \"StringLiteralTypeAnnotation\",\n  _StringLiteralTypeAnnotation: void,\n  raw: string,\n  value: string,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type StringTypeAnnotation = {\n  type: \"StringTypeAnnotation\",\n  _StringTypeAnnotation: void,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type TupleTypeAnnotation = {\n  type: \"TupleTypeAnnotation\",\n  _TupleTypeAnnotation: void,\n  types: Array<Type>,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type TypeofTypeAnnotation = {\n  type: \"TypeofTypeAnnotation\",\n  _TypeofTypeAnnotation: void,\n  argument: Type,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type TypeAlias = {\n  type: \"TypeAlias\",\n  _TypeAlias: void,\n  id: Identifier,\n  right: Type,\n  typeParameters: ?TypeParameterDeclaration,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type TypeAnnotation = {\n  type: \"TypeAnnotation\",\n  _TypeAnnotation: void,\n  typeAnnotation: Type,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type TypeCastExpression = {\n  type: \"TypeCastExpression\",\n  _TypeCastExpression: void,\n  expression: Expression,\n  typeAnnotation: TypeAnnotation,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type TypeParameterDeclaration = {\n  type: \"TypeParameterDeclaration\",\n  _TypeParameterDeclaration: void,\n  params: Array<Identifier>,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type TypeParameterInstantiation = {\n  type: \"TypeParameterInstantiation\",\n  _TypeParameterInstantiation: void,\n  params: Array<Type>,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ObjectTypeAnnotation = {\n  type: \"ObjectTypeAnnotation\",\n  _ObjectTypeAnnotation: void,\n  callProperties: Array<ObjectTypeCallProperty>,\n  indexers: Array<ObjectTypeIndexer>,\n  properties: Array<ObjectTypeProperty>,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ObjectTypeCallProperty = {\n  type: \"ObjectTypeCallProperty\",\n  _ObjectTypeCallProperty: void,\n  static: boolean,\n  value: FunctionTypeAnnotation,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ObjectTypeIndexer = {\n  type: \"ObjectTypeIndexer\",\n  _ObjectTypeIndexer: void,\n  id: Identifier,\n  key: Type,\n  value: Type,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type ObjectTypeProperty = {\n  type: \"ObjectTypeProperty\",\n  _ObjectTypeProperty: void,\n  key: Node,\n  optional: boolean,\n  value: Type,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type QualifiedTypeIdentifier = {\n  type: \"QualifiedTypeIdentifier\",\n  _QualifiedTypeIdentifier: void,\n  id: Identifier,\n  qualification: Node,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type UnionTypeAnnotation = {\n  type: \"UnionTypeAnnotation\",\n  _UnionTypeAnnotation: void,\n  types: Array<Type>,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type VoidTypeAnnotation = {\n  type: \"VoidTypeAnnotation\",\n  _VoidTypeAnnotation: void,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type JSXAttribute = {\n  type: \"JSXAttribute\",\n  _JSXAttribute: void,\n  name: Node,\n  value: ?Node,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type JSXClosingElement = {\n  type: \"JSXClosingElement\",\n  _JSXClosingElement: void,\n  name: Node,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type JSXElement = {\n  type: \"JSXElement\",\n  _JSXElement: void,\n  children: Array<Node>,\n  closingElement: ?JSXClosingElement,\n  openingElement: JSXOpeningElement,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type JSXEmptyExpression = {\n  type: \"JSXEmptyExpression\",\n  _JSXEmptyExpression: void,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type JSXExpressionContainer = {\n  type: \"JSXExpressionContainer\",\n  _JSXExpressionContainer: void,\n  expression: Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type JSXIdentifier = {\n  type: \"JSXIdentifier\",\n  _JSXIdentifier: void,\n  name: string,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type JSXMemberExpression = {\n  type: \"JSXMemberExpression\",\n  _JSXMemberExpression: void,\n  computed: boolean,\n  object: Node,\n  property: JSXIdentifier,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type JSXNamespacedName = {\n  type: \"JSXNamespacedName\",\n  _JSXNamespacedName: void,\n  name: JSXIdentifier,\n  namespace: JSXIdentifier,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type JSXOpeningElement = {\n  type: \"JSXOpeningElement\",\n  _JSXOpeningElement: void,\n  attributes: Array<Node>,\n  name: Array<Node>,\n  selfClosing: boolean,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\nexport type JSXSpreadAttribute = {\n  type: \"JSXSpreadAttribute\",\n  _JSXSpreadAttribute: void,\n  argument: Expression,\n  end: number,\n  innerComments: ?Array<Comment>,\n  leadingComments: ?Array<Comment>,\n  loc: {\n    end: { column: number, line: number },\n    start: { column: number, line: number }\n  },\n  start: number,\n  trailingComments: ?Array<Comment>\n};\n\n`;\n"
  },
  {
    "path": "tests/flow/type-printer/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/type-printer/printBinaryExpression.js",
    "content": "'use babel';\n/* @flow */\n\n/*\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the license found in the LICENSE file in\n * the root directory of this source tree.\n */\n\nimport type {BinaryExpression} from './types';\n\nfunction printBinaryExpression(\n  node: BinaryExpression,\n) {\n  console.log(node);\n}\n\nmodule.exports = printBinaryExpression;\n"
  },
  {
    "path": "tests/flow/type-printer/types.js",
    "content": "/**\n * @flow\n */\n\n'use strict';\n\n/*\n * Flow types for the Babylon AST.\n */\n\n// Abstract types. Something must extend these.\n\nexport type Comment = {\n  type: 'CommentLine';\n  _CommentLine: void;\n  value: string;\n  end: number;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n} | {\n  type: 'CommentBlock';\n  _CommentBlock: void;\n  value: string;\n  end: number;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n};\n\nexport type Declaration = {\n  type: 'ClassBody';\n  _ClassBody: void;\n  body: Array<Node>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ClassDeclaration';\n  _ClassDeclaration: void;\n  body: ClassBody;\n  id: ?Identifier;\n  superClass: ?Expression;\n  decorators: any;\n  superTypeParameters: any;\n  typeParameters: any;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'FunctionDeclaration';\n  _FunctionDeclaration: void;\n  body: BlockStatement;\n  id: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n  async: boolean;\n  defaults: Array<?Expression>;\n  expression: boolean;\n  generator: boolean;\n  params: Array<Pattern>;\n  rest: ?Identifier;\n  returnType: ?TypeAnnotation;\n  typeParameters: ?TypeParameterDeclaration;\n} | {\n  type: 'MethodDefinition';\n  _MethodDefinition: void;\n  computed: boolean;\n  key: Node;\n  kind: 'constructor' | 'method' | 'get' | 'set';\n  static: boolean;\n  value: FunctionExpression;\n  decorators: ?Array<Decorator>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'VariableDeclaration';\n  _VariableDeclaration: void;\n  declarations: Array<VariableDeclarator>;\n  kind: 'var' | 'let' | 'const';\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ClassProperty';\n  _ClassProperty: void;\n  computed: boolean;\n  key: Node;\n  static: boolean;\n  typeAnnotation: ?TypeAnnotation;\n  value: ?Expression;\n  decorators: Array<Decorator>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type Expression = {\n  type: 'ArrayExpression';\n  _ArrayExpression: void;\n  elements: Array<?Node>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'AssignmentExpression';\n  _AssignmentExpression: void;\n  left: Pattern;\n  operator: AssignmentOperator;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'AwaitExpression';\n  _AwaitExpression: void;\n  all: boolean;\n  argument: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'BinaryExpression';\n  _BinaryExpression: void;\n  left: Expression;\n  operator: BinaryOperator;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'BindExpression';\n  _BindExpression: void;\n  callee: Node;\n  object: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'CallExpression';\n  _CallExpression: void;\n  arguments: Array<Node>;\n  callee: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ClassExpression';\n  _ClassExpression: void;\n  body: ClassBody;\n  id: ?Identifier;\n  superClass: ?Expression;\n  decorators: any;\n  superTypeParameters: any;\n  typeParameters: any;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ComprehensionExpression';\n  _ComprehensionExpression: void;\n  body: Expression;\n  blocks: Array<ComprehensionBlock>;\n  filter: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ConditionalExpression';\n  _ConditionalExpression: void;\n  alternate: Expression;\n  consequent: Expression;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DoExpression';\n  _DoExpression: void;\n  body: Statement;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'FunctionExpression';\n  _FunctionExpression: void;\n  body: BlockStatement;\n  id: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n  async: boolean;\n  defaults: Array<?Expression>;\n  expression: boolean;\n  generator: boolean;\n  params: Array<Pattern>;\n  rest: ?Identifier;\n  returnType: ?TypeAnnotation;\n  typeParameters: ?TypeParameterDeclaration;\n} | {\n  type: 'Identifier';\n  _Identifier: void;\n  name: string;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'Literal';\n  _Literal: void;\n  raw: string;\n  regex: ?{pattern: string, flags: string};\n  value: ?(string | boolean | number | RegExp);\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'LogicalExpression';\n  _LogicalExpression: void;\n  left: Expression;\n  operator: LogicalOperator;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'MemberExpression';\n  _MemberExpression: void;\n  computed: boolean;\n  object: Expression;\n  property: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'NewExpression';\n  _NewExpression: void;\n  arguments: Array<Node>;\n  callee: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ObjectExpression';\n  _ObjectExpression: void;\n  properties: Array<Node>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'SequenceExpression';\n  _SequenceExpression: void;\n  expression: Array<Expression>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TaggedTemplateExpression';\n  _TaggedTemplateExpression: void;\n  quasi: TemplateLiteral;\n  tag: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TemplateLiteral';\n  _TemplateLiteral: void;\n  expressions: Array<Expression>;\n  quasis: Array<TemplateElement>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ThisExpression';\n  _ThisExpression: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'UnaryExpression';\n  _UnaryExpression: void;\n  argument: Expression;\n  operator: UnaryOperator;\n  prefix: true;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'UpdateExpression';\n  _UpdateExpression: void;\n  argument: Expression;\n  operator: UpdateOperator;\n  prefix: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'YieldExpression';\n  _YieldExpression: void;\n  argument: ?Expression;\n  delegate: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TypeCastExpression';\n  _TypeCastExpression: void;\n  expression: Expression;\n  typeAnnotation: TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXElement';\n  _JSXElement: void;\n  children: Array<Node>;\n  closingElement: ?JSXClosingElement;\n  openingElement: JSXOpeningElement;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXEmptyExpression';\n  _JSXEmptyExpression: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXExpressionContainer';\n  _JSXExpressionContainer: void;\n  expression: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXMemberExpression';\n  _JSXMemberExpression: void;\n  computed: boolean;\n  object: Node;\n  property: JSXIdentifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type Function = {\n  type: 'ArrowFunctionExpression';\n  _ArrowFunctionExpression: void;\n  body: Node;\n  id: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n  async: boolean;\n  defaults: Array<?Expression>;\n  expression: boolean;\n  generator: boolean;\n  params: Array<Pattern>;\n  rest: ?Identifier;\n  returnType: ?TypeAnnotation;\n  typeParameters: ?TypeParameterDeclaration;\n} | {\n  type: 'FunctionDeclaration';\n  _FunctionDeclaration: void;\n  body: BlockStatement;\n  id: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n  async: boolean;\n  defaults: Array<?Expression>;\n  expression: boolean;\n  generator: boolean;\n  params: Array<Pattern>;\n  rest: ?Identifier;\n  returnType: ?TypeAnnotation;\n  typeParameters: ?TypeParameterDeclaration;\n} | {\n  type: 'FunctionExpression';\n  _FunctionExpression: void;\n  body: BlockStatement;\n  id: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n  async: boolean;\n  defaults: Array<?Expression>;\n  expression: boolean;\n  generator: boolean;\n  params: Array<Pattern>;\n  rest: ?Identifier;\n  returnType: ?TypeAnnotation;\n  typeParameters: ?TypeParameterDeclaration;\n};\n\nexport type Node = {\n  type: 'ArrayExpression';\n  _ArrayExpression: void;\n  elements: Array<?Node>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ArrayPattern';\n  _ArrayPattern: void;\n  elements: Array<?Node>;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ArrowFunctionExpression';\n  _ArrowFunctionExpression: void;\n  body: Node;\n  id: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n  async: boolean;\n  defaults: Array<?Expression>;\n  expression: boolean;\n  generator: boolean;\n  params: Array<Pattern>;\n  rest: ?Identifier;\n  returnType: ?TypeAnnotation;\n  typeParameters: ?TypeParameterDeclaration;\n} | {\n  type: 'AssignmentExpression';\n  _AssignmentExpression: void;\n  left: Pattern;\n  operator: AssignmentOperator;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'AssignmentPattern';\n  _AssignmentPattern: void;\n  left: Pattern;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'AwaitExpression';\n  _AwaitExpression: void;\n  all: boolean;\n  argument: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'BinaryExpression';\n  _BinaryExpression: void;\n  left: Expression;\n  operator: BinaryOperator;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'BindExpression';\n  _BindExpression: void;\n  callee: Node;\n  object: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'BlockStatement';\n  _BlockStatement: void;\n  body: Array<Statement>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'BreakStatement';\n  _BreakStatement: void;\n  label: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'CallExpression';\n  _CallExpression: void;\n  arguments: Array<Node>;\n  callee: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'CatchClause';\n  _CatchClause: void;\n  body: BlockStatement;\n  param: Pattern;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ClassBody';\n  _ClassBody: void;\n  body: Array<Node>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ClassDeclaration';\n  _ClassDeclaration: void;\n  body: ClassBody;\n  id: ?Identifier;\n  superClass: ?Expression;\n  decorators: any;\n  superTypeParameters: any;\n  typeParameters: any;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ClassExpression';\n  _ClassExpression: void;\n  body: ClassBody;\n  id: ?Identifier;\n  superClass: ?Expression;\n  decorators: any;\n  superTypeParameters: any;\n  typeParameters: any;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ComprehensionBlock';\n  _ComprehensionBlock: void;\n  each: boolean;\n  left: Pattern;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ComprehensionExpression';\n  _ComprehensionExpression: void;\n  body: Expression;\n  blocks: Array<ComprehensionBlock>;\n  filter: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ConditionalExpression';\n  _ConditionalExpression: void;\n  alternate: Expression;\n  consequent: Expression;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ContinueStatement';\n  _ContinueStatement: void;\n  label: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'Decorator';\n  _Decorator: void;\n  expression: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DebuggerStatement';\n  _DebuggerStatement: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DoWhileStatement';\n  _DoWhileStatement: void;\n  body: Statement;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DoExpression';\n  _DoExpression: void;\n  body: Statement;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'EmptyStatement';\n  _EmptyStatement: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ExpressionStatement';\n  _ExpressionStatement: void;\n  expression: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'File';\n  _File: void;\n  program: Program;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ForInStatement';\n  _ForInStatement: void;\n  body: Statement;\n  left: Node;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ForOfStatement';\n  _ForOfStatement: void;\n  body: Statement;\n  left: Node;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ForStatement';\n  _ForStatement: void;\n  init: ?Node;\n  test: ?Expression;\n  update: ?Expression;\n  body: Statement;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'FunctionDeclaration';\n  _FunctionDeclaration: void;\n  body: BlockStatement;\n  id: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n  async: boolean;\n  defaults: Array<?Expression>;\n  expression: boolean;\n  generator: boolean;\n  params: Array<Pattern>;\n  rest: ?Identifier;\n  returnType: ?TypeAnnotation;\n  typeParameters: ?TypeParameterDeclaration;\n} | {\n  type: 'FunctionExpression';\n  _FunctionExpression: void;\n  body: BlockStatement;\n  id: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n  async: boolean;\n  defaults: Array<?Expression>;\n  expression: boolean;\n  generator: boolean;\n  params: Array<Pattern>;\n  rest: ?Identifier;\n  returnType: ?TypeAnnotation;\n  typeParameters: ?TypeParameterDeclaration;\n} | {\n  type: 'Identifier';\n  _Identifier: void;\n  name: string;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'IfStatement';\n  _IfStatement: void;\n  alternate: ?Statement;\n  consequent: Statement;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ImportDefaultSpecifier';\n  _ImportDefaultSpecifier: void;\n  local: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ImportNamespaceSpecifier';\n  _ImportNamespaceSpecifier: void;\n  local: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ImportDeclaration';\n  _ImportDeclaration: void;\n  specifiers: Array<Node>;\n  source: Literal;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ImportSpecifier';\n  _ImportSpecifier: void;\n  imported: Node;\n  local: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'LabeledStatement';\n  _LabeledStatement: void;\n  body: Statement;\n  label: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'Literal';\n  _Literal: void;\n  raw: string;\n  regex: ?{pattern: string, flags: string};\n  value: ?(string | boolean | number | RegExp);\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'LogicalExpression';\n  _LogicalExpression: void;\n  left: Expression;\n  operator: LogicalOperator;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'MemberExpression';\n  _MemberExpression: void;\n  computed: boolean;\n  object: Expression;\n  property: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'MetaProperty';\n  _MetaProperty: void;\n  meta: Node;\n  property: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'MethodDefinition';\n  _MethodDefinition: void;\n  computed: boolean;\n  key: Node;\n  kind: 'constructor' | 'method' | 'get' | 'set';\n  static: boolean;\n  value: FunctionExpression;\n  decorators: ?Array<Decorator>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'NewExpression';\n  _NewExpression: void;\n  arguments: Array<Node>;\n  callee: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'Noop';\n  _Noop: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ObjectExpression';\n  _ObjectExpression: void;\n  properties: Array<Node>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ObjectPattern';\n  _ObjectPattern: void;\n  properties: Array<Node>;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'Program';\n  _Program: void;\n  body: Array<Statement>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'Property';\n  _Property: void;\n  computed: boolean;\n  key: Node;\n  kind: 'init' | 'get' | 'set';\n  method: boolean;\n  shorthand: boolean;\n  value: Node;\n  decorators: ?Array<Decorator>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'RestElement';\n  _RestElement: void;\n  argument: Pattern;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ReturnStatement';\n  _ReturnStatement: void;\n  argument: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'SequenceExpression';\n  _SequenceExpression: void;\n  expression: Array<Expression>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'SpreadElement';\n  _SpreadElement: void;\n  argument: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'SpreadProperty';\n  _SpreadProperty: void;\n  argument: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'Super';\n  _Super: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'SwitchCase';\n  _SwitchCase: void;\n  consequent: Array<Statement>;\n  test: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'SwitchStatement';\n  _SwitchStatement: void;\n  cases: Array<SwitchCase>;\n  discriminant: Expression;\n  lexical: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TaggedTemplateExpression';\n  _TaggedTemplateExpression: void;\n  quasi: TemplateLiteral;\n  tag: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TemplateElement';\n  _TemplateElement: void;\n  tail: boolean;\n  value: {cooked: string, raw: string};\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TemplateLiteral';\n  _TemplateLiteral: void;\n  expressions: Array<Expression>;\n  quasis: Array<TemplateElement>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ThisExpression';\n  _ThisExpression: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ThrowStatement';\n  _ThrowStatement: void;\n  argument: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TryStatement';\n  _TryStatement: void;\n  block: BlockStatement;\n  finalizer: ?BlockStatement;\n  guardedHandlers: Array<CatchClause>;\n  handler: ?CatchClause;\n  handlers: ?Array<CatchClause>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'UnaryExpression';\n  _UnaryExpression: void;\n  argument: Expression;\n  operator: UnaryOperator;\n  prefix: true;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'UpdateExpression';\n  _UpdateExpression: void;\n  argument: Expression;\n  operator: UpdateOperator;\n  prefix: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'VariableDeclaration';\n  _VariableDeclaration: void;\n  declarations: Array<VariableDeclarator>;\n  kind: 'var' | 'let' | 'const';\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'VariableDeclarator';\n  _VariableDeclarator: void;\n  id: Pattern;\n  init: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'WhileStatement';\n  _WhileStatement: void;\n  body: Statement;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'WithStatement';\n  _WithStatement: void;\n  body: Statement;\n  object: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'YieldExpression';\n  _YieldExpression: void;\n  argument: ?Expression;\n  delegate: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ExportAllDeclaration';\n  _ExportAllDeclaration: void;\n  exported: Node;\n  source: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ExportDefaultDeclaration';\n  _ExportDefaultDeclaration: void;\n  declaration: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ExportNamedDeclaration';\n  _ExportNamedDeclaration: void;\n  declaration: Node;\n  source: Literal;\n  specifiers: Array<Node>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ExportDefaultSpecifier';\n  _ExportDefaultSpecifier: void;\n  exported: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ExportNamespaceSpecifier';\n  _ExportNamespaceSpecifier: void;\n  exported: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ExportSpecifier';\n  _ExportSpecifier: void;\n  local: Node;\n  exported: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'AnyTypeAnnotation';\n  _AnyTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ArrayTypeAnnotation';\n  _ArrayTypeAnnotation: void;\n  elementType: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'BooleanLiteralTypeAnnotation';\n  _BooleanLiteralTypeAnnotation: void;\n  raw: string;\n  value: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'BooleanTypeAnnotation';\n  _BooleanTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ClassImplements';\n  _ClassImplements: void;\n  id: Identifier;\n  typeParameters: ?TypeParameterInstantiation;\n  superClass: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ClassProperty';\n  _ClassProperty: void;\n  computed: boolean;\n  key: Node;\n  static: boolean;\n  typeAnnotation: ?TypeAnnotation;\n  value: ?Expression;\n  decorators: Array<Decorator>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DeclareClass';\n  _DeclareClass: void;\n  body: ObjectTypeAnnotation;\n  extends: Array<InterfaceExtends>;\n  id: Identifier;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DeclareFunction';\n  _DeclareFunction: void;\n  id: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DeclareModule';\n  _DeclareModule: void;\n  body: BlockStatement;\n  id: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DeclareVariable';\n  _DeclareVariable: void;\n  id: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'FunctionTypeAnnotation';\n  _FunctionTypeAnnotation: void;\n  params: Array<FunctionTypeParam>;\n  rest: ?FunctionTypeParam;\n  returnType: Type;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'FunctionTypeParam';\n  _FunctionTypeParam: void;\n  name: Identifier;\n  optional: boolean;\n  typeAnnotation: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'GenericTypeAnnotation';\n  _GenericTypeAnnotation: void;\n  id: Node;\n  typeParameters: ?TypeParameterInstantiation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'InterfaceExtends';\n  _InterfaceExtends: void;\n  id: Identifier;\n  typeParameters: ?TypeParameterInstantiation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'InterfaceDeclaration';\n  _InterfaceDeclaration: void;\n  body: ObjectTypeAnnotation;\n  extends: Array<InterfaceExtends>;\n  id: Identifier;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'IntersectionTypeAnnotation';\n  _IntersectionTypeAnnotation: void;\n  types: Array<Type>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'MixedTypeAnnotation';\n  _MixedTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'NullableTypeAnnotation';\n  _NullableTypeAnnotation: void;\n  typeAnnotation: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'NumberLiteralTypeAnnotation';\n  _NumberLiteralTypeAnnotation: void;\n  raw: string;\n  value: number;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'NumberTypeAnnotation';\n  _NumberTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'StringLiteralTypeAnnotation';\n  _StringLiteralTypeAnnotation: void;\n  raw: string;\n  value: string;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'StringTypeAnnotation';\n  _StringTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TupleTypeAnnotation';\n  _TupleTypeAnnotation: void;\n  types: Array<Type>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TypeofTypeAnnotation';\n  _TypeofTypeAnnotation: void;\n  argument: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TypeAlias';\n  _TypeAlias: void;\n  id: Identifier;\n  right: Type;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TypeAnnotation';\n  _TypeAnnotation: void;\n  typeAnnotation: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TypeCastExpression';\n  _TypeCastExpression: void;\n  expression: Expression;\n  typeAnnotation: TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TypeParameterDeclaration';\n  _TypeParameterDeclaration: void;\n  params: Array<Identifier>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TypeParameterInstantiation';\n  _TypeParameterInstantiation: void;\n  params: Array<Type>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ObjectTypeAnnotation';\n  _ObjectTypeAnnotation: void;\n  callProperties: Array<ObjectTypeCallProperty>;\n  indexers: Array<ObjectTypeIndexer>;\n  properties: Array<ObjectTypeProperty>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ObjectTypeCallProperty';\n  _ObjectTypeCallProperty: void;\n  static: boolean;\n  value: FunctionTypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ObjectTypeIndexer';\n  _ObjectTypeIndexer: void;\n  id: Identifier;\n  key: Type;\n  value: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ObjectTypeProperty';\n  _ObjectTypeProperty: void;\n  key: Node;\n  optional: boolean;\n  value: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'QualifiedTypeIdentifier';\n  _QualifiedTypeIdentifier: void;\n  id: Identifier;\n  qualification: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'UnionTypeAnnotation';\n  _UnionTypeAnnotation: void;\n  types: Array<Type>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'VoidTypeAnnotation';\n  _VoidTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXAttribute';\n  _JSXAttribute: void;\n  name: Node;\n  value: ?Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXClosingElement';\n  _JSXClosingElement: void;\n  name: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXElement';\n  _JSXElement: void;\n  children: Array<Node>;\n  closingElement: ?JSXClosingElement;\n  openingElement: JSXOpeningElement;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXEmptyExpression';\n  _JSXEmptyExpression: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXExpressionContainer';\n  _JSXExpressionContainer: void;\n  expression: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXIdentifier';\n  _JSXIdentifier: void;\n  name: string;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXMemberExpression';\n  _JSXMemberExpression: void;\n  computed: boolean;\n  object: Node;\n  property: JSXIdentifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXNamespacedName';\n  _JSXNamespacedName: void;\n  name: JSXIdentifier;\n  namespace: JSXIdentifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXOpeningElement';\n  _JSXOpeningElement: void;\n  attributes: Array<Node>;\n  name: Array<Node>;\n  selfClosing: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'JSXSpreadAttribute';\n  _JSXSpreadAttribute: void;\n  argument: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type Pattern = {\n  type: 'ArrayPattern';\n  _ArrayPattern: void;\n  elements: Array<?Node>;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'AssignmentPattern';\n  _AssignmentPattern: void;\n  left: Pattern;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'Identifier';\n  _Identifier: void;\n  name: string;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ObjectPattern';\n  _ObjectPattern: void;\n  properties: Array<Node>;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'RestElement';\n  _RestElement: void;\n  argument: Pattern;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type Statement = {\n  type: 'BlockStatement';\n  _BlockStatement: void;\n  body: Array<Statement>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'BreakStatement';\n  _BreakStatement: void;\n  label: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ContinueStatement';\n  _ContinueStatement: void;\n  label: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DoWhileStatement';\n  _DoWhileStatement: void;\n  body: Statement;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'EmptyStatement';\n  _EmptyStatement: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ExpressionStatement';\n  _ExpressionStatement: void;\n  expression: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ForInStatement';\n  _ForInStatement: void;\n  body: Statement;\n  left: Node;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ForOfStatement';\n  _ForOfStatement: void;\n  body: Statement;\n  left: Node;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ForStatement';\n  _ForStatement: void;\n  init: ?Node;\n  test: ?Expression;\n  update: ?Expression;\n  body: Statement;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'IfStatement';\n  _IfStatement: void;\n  alternate: ?Statement;\n  consequent: Statement;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'LabeledStatement';\n  _LabeledStatement: void;\n  body: Statement;\n  label: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ReturnStatement';\n  _ReturnStatement: void;\n  argument: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'SwitchStatement';\n  _SwitchStatement: void;\n  cases: Array<SwitchCase>;\n  discriminant: Expression;\n  lexical: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ThrowStatement';\n  _ThrowStatement: void;\n  argument: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TryStatement';\n  _TryStatement: void;\n  block: BlockStatement;\n  finalizer: ?BlockStatement;\n  guardedHandlers: Array<CatchClause>;\n  handler: ?CatchClause;\n  handlers: ?Array<CatchClause>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'WhileStatement';\n  _WhileStatement: void;\n  body: Statement;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'WithStatement';\n  _WithStatement: void;\n  body: Statement;\n  object: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DeclareClass';\n  _DeclareClass: void;\n  body: ObjectTypeAnnotation;\n  extends: Array<InterfaceExtends>;\n  id: Identifier;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DeclareFunction';\n  _DeclareFunction: void;\n  id: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DeclareModule';\n  _DeclareModule: void;\n  body: BlockStatement;\n  id: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'DeclareVariable';\n  _DeclareVariable: void;\n  id: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'InterfaceDeclaration';\n  _InterfaceDeclaration: void;\n  body: ObjectTypeAnnotation;\n  extends: Array<InterfaceExtends>;\n  id: Identifier;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TypeAlias';\n  _TypeAlias: void;\n  id: Identifier;\n  right: Type;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type Type = {\n  type: 'AnyTypeAnnotation';\n  _AnyTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ArrayTypeAnnotation';\n  _ArrayTypeAnnotation: void;\n  elementType: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'BooleanLiteralTypeAnnotation';\n  _BooleanLiteralTypeAnnotation: void;\n  raw: string;\n  value: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'BooleanTypeAnnotation';\n  _BooleanTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'FunctionTypeAnnotation';\n  _FunctionTypeAnnotation: void;\n  params: Array<FunctionTypeParam>;\n  rest: ?FunctionTypeParam;\n  returnType: Type;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'GenericTypeAnnotation';\n  _GenericTypeAnnotation: void;\n  id: Node;\n  typeParameters: ?TypeParameterInstantiation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'IntersectionTypeAnnotation';\n  _IntersectionTypeAnnotation: void;\n  types: Array<Type>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'MixedTypeAnnotation';\n  _MixedTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'NullableTypeAnnotation';\n  _NullableTypeAnnotation: void;\n  typeAnnotation: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'NumberLiteralTypeAnnotation';\n  _NumberLiteralTypeAnnotation: void;\n  raw: string;\n  value: number;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'NumberTypeAnnotation';\n  _NumberTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'StringLiteralTypeAnnotation';\n  _StringLiteralTypeAnnotation: void;\n  raw: string;\n  value: string;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'StringTypeAnnotation';\n  _StringTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'TupleTypeAnnotation';\n  _TupleTypeAnnotation: void;\n  types: Array<Type>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'ObjectTypeAnnotation';\n  _ObjectTypeAnnotation: void;\n  callProperties: Array<ObjectTypeCallProperty>;\n  indexers: Array<ObjectTypeIndexer>;\n  properties: Array<ObjectTypeProperty>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'UnionTypeAnnotation';\n  _UnionTypeAnnotation: void;\n  types: Array<Type>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n} | {\n  type: 'VoidTypeAnnotation';\n  _VoidTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// Concrete Types. Nothing can extend these.\n\nexport type CommentLine = {\n  type: 'CommentLine';\n  _CommentLine: void;\n  value: string;\n  end: number;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n};\n\nexport type CommentBlock = {\n  type: 'CommentBlock';\n  _CommentBlock: void;\n  value: string;\n  end: number;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n};\n\n// Babel concrete types.\n\nexport type ArrayExpression = {\n  type: 'ArrayExpression';\n  _ArrayExpression: void;\n  elements: Array<?Node>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ArrayPattern = {\n  type: 'ArrayPattern';\n  _ArrayPattern: void;\n  elements: Array<?Node>;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ArrowFunctionExpression = {\n  type: 'ArrowFunctionExpression';\n  _ArrowFunctionExpression: void;\n  body: Node;\n  id: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n  async: boolean;\n  defaults: Array<?Expression>;\n  expression: boolean;\n  generator: boolean;\n  params: Array<Pattern>;\n  rest: ?Identifier;\n  returnType: ?TypeAnnotation;\n  typeParameters: ?TypeParameterDeclaration;\n};\n\ntype AssignmentOperator =\n  '=' |\n  '+=' |\n  '-=' |\n  '*=' |\n  '/=' |\n  '%=' |\n  '<<=' |\n  '>>=' |\n  '>>>=' |\n  '|=' |\n  '^=' |\n  '&=';\n\nexport type AssignmentExpression = {\n  type: 'AssignmentExpression';\n  _AssignmentExpression: void;\n  left: Pattern;\n  operator: AssignmentOperator;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type AssignmentPattern = {\n  type: 'AssignmentPattern';\n  _AssignmentPattern: void;\n  left: Pattern;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type AwaitExpression = {\n  type: 'AwaitExpression';\n  _AwaitExpression: void;\n  all: boolean;\n  argument: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\ntype BinaryOperator =\n  '==' |\n  '!=' |\n  '===' |\n  '!==' |\n  '<' |\n  '<=' |\n  '>' |\n  '>=' |\n  '<<' |\n  '>>' |\n  '>>>' |\n  '+' |\n  '-' |\n  '*' |\n  '/' |\n  '%' |\n  '&' |\n  '|' |\n  '^' |\n  'in' |\n  'instanceof' |\n  '..';\n\nexport type BinaryExpression = {\n  type: 'BinaryExpression';\n  _BinaryExpression: void;\n  left: Expression;\n  operator: BinaryOperator;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: What is this?\nexport type BindExpression = {\n  type: 'BindExpression';\n  _BindExpression: void;\n  callee: Node;\n  object: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type BlockStatement = {\n  type: 'BlockStatement';\n  _BlockStatement: void;\n  body: Array<Statement>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type BreakStatement = {\n  type: 'BreakStatement';\n  _BreakStatement: void;\n  label: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type CallExpression = {\n  type: 'CallExpression';\n  _CallExpression: void;\n  arguments: Array<Node>;\n  callee: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type CatchClause = {\n  type: 'CatchClause';\n  _CatchClause: void;\n  body: BlockStatement;\n  param: Pattern;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ClassBody = {\n  type: 'ClassBody';\n  _ClassBody: void;\n  body: Array<Node>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ClassDeclaration = {\n  type: 'ClassDeclaration';\n  _ClassDeclaration: void;\n  body: ClassBody;\n  id: ?Identifier;\n  superClass: ?Expression;\n  decorators: any;\n  superTypeParameters: any;\n  typeParameters: any;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ClassExpression = {\n  type: 'ClassExpression';\n  _ClassExpression: void;\n  body: ClassBody;\n  id: ?Identifier;\n  superClass: ?Expression;\n  decorators: any;\n  superTypeParameters: any;\n  typeParameters: any;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ComprehensionBlock = {\n  type: 'ComprehensionBlock';\n  _ComprehensionBlock: void;\n  each: boolean;\n  left: Pattern;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ComprehensionExpression = {\n  type: 'ComprehensionExpression';\n  _ComprehensionExpression: void;\n  body: Expression;\n  blocks: Array<ComprehensionBlock>;\n  filter: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ConditionalExpression = {\n  type: 'ConditionalExpression';\n  _ConditionalExpression: void;\n  alternate: Expression;\n  consequent: Expression;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ContinueStatement = {\n  type: 'ContinueStatement';\n  _ContinueStatement: void;\n  label: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type Decorator = {\n  type: 'Decorator';\n  _Decorator: void;\n  expression: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type DebuggerStatement = {\n  type: 'DebuggerStatement';\n  _DebuggerStatement: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type DoWhileStatement = {\n  type: 'DoWhileStatement';\n  _DoWhileStatement: void;\n  body: Statement;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type DoExpression = {\n  type: 'DoExpression';\n  _DoExpression: void;\n  body: Statement;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type EmptyStatement = {\n  type: 'EmptyStatement';\n  _EmptyStatement: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ExpressionStatement = {\n  type: 'ExpressionStatement';\n  _ExpressionStatement: void;\n  expression: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type File = {\n  type: 'File';\n  _File: void;\n  program: Program;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ForInStatement = {\n  type: 'ForInStatement';\n  _ForInStatement: void;\n  body: Statement;\n  left: Node;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type ForOfStatement = {\n  type: 'ForOfStatement';\n  _ForOfStatement: void;\n  body: Statement;\n  left: Node;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ForStatement = {\n  type: 'ForStatement';\n  _ForStatement: void;\n  init: ?Node;\n  test: ?Expression;\n  update: ?Expression;\n  body: Statement;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type FunctionDeclaration = {\n  type: 'FunctionDeclaration';\n  _FunctionDeclaration: void;\n  body: BlockStatement;\n  id: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n  async: boolean;\n  defaults: Array<?Expression>;\n  expression: boolean;\n  generator: boolean;\n  params: Array<Pattern>;\n  rest: ?Identifier;\n  returnType: ?TypeAnnotation;\n  typeParameters: ?TypeParameterDeclaration;\n};\n\nexport type FunctionExpression = {\n  type: 'FunctionExpression';\n  _FunctionExpression: void;\n  body: BlockStatement;\n  id: ?Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n  async: boolean;\n  defaults: Array<?Expression>;\n  expression: boolean;\n  generator: boolean;\n  params: Array<Pattern>;\n  rest: ?Identifier;\n  returnType: ?TypeAnnotation;\n  typeParameters: ?TypeParameterDeclaration;\n};\n\nexport type Identifier = {\n  type: 'Identifier';\n  _Identifier: void;\n  name: string;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type IfStatement = {\n  type: 'IfStatement';\n  _IfStatement: void;\n  alternate: ?Statement;\n  consequent: Statement;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type ImportDefaultSpecifier = {\n  type: 'ImportDefaultSpecifier';\n  _ImportDefaultSpecifier: void;\n  local: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type ImportNamespaceSpecifier = {\n  type: 'ImportNamespaceSpecifier';\n  _ImportNamespaceSpecifier: void;\n  local: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type ImportDeclaration = {\n  type: 'ImportDeclaration';\n  _ImportDeclaration: void;\n  specifiers: Array<Node>;\n  source: Literal;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type ImportSpecifier = {\n  type: 'ImportSpecifier';\n  _ImportSpecifier: void;\n  imported: Node;\n  local: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type LabeledStatement = {\n  type: 'LabeledStatement';\n  _LabeledStatement: void;\n  body: Statement;\n  label: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type Literal = {\n  type: 'Literal';\n  _Literal: void;\n  raw: string;\n  regex: ?{pattern: string, flags: string};\n  value: ?(string | boolean | number | RegExp);\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\ntype LogicalOperator = '||' | '&&';\n\nexport type LogicalExpression = {\n  type: 'LogicalExpression';\n  _LogicalExpression: void;\n  left: Expression;\n  operator: LogicalOperator;\n  right: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type MemberExpression = {\n  type: 'MemberExpression';\n  _MemberExpression: void;\n  computed: boolean;\n  object: Expression;\n  property: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type MetaProperty = {\n  type: 'MetaProperty';\n  _MetaProperty: void;\n  meta: Node;\n  property: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type MethodDefinition = {\n  type: 'MethodDefinition';\n  _MethodDefinition: void;\n  computed: boolean;\n  key: Node;\n  kind: 'constructor' | 'method' | 'get' | 'set';\n  static: boolean;\n  value: FunctionExpression;\n  decorators: ?Array<Decorator>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type NewExpression = {\n  type: 'NewExpression';\n  _NewExpression: void;\n  arguments: Array<Node>;\n  callee: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type Noop = {\n  type: 'Noop';\n  _Noop: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ObjectExpression = {\n  type: 'ObjectExpression';\n  _ObjectExpression: void;\n  properties: Array<Node>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ObjectPattern = {\n  type: 'ObjectPattern';\n  _ObjectPattern: void;\n  properties: Array<Node>;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type Program = {\n  type: 'Program';\n  _Program: void;\n  body: Array<Statement>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type Property = {\n  type: 'Property';\n  _Property: void;\n  computed: boolean;\n  key: Node;\n  kind: 'init' | 'get' | 'set';\n  method: boolean;\n  shorthand: boolean;\n  value: Node;\n  decorators: ?Array<Decorator>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type RestElement = {\n  type: 'RestElement';\n  _RestElement: void;\n  argument: Pattern;\n  typeAnnotation: ?TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ReturnStatement = {\n  type: 'ReturnStatement';\n  _ReturnStatement: void;\n  argument: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type SequenceExpression = {\n  type: 'SequenceExpression';\n  _SequenceExpression: void;\n  expression: Array<Expression>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type SpreadElement = {\n  type: 'SpreadElement';\n  _SpreadElement: void;\n  argument: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type SpreadProperty = {\n  type: 'SpreadProperty';\n  _SpreadProperty: void;\n  argument: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type Super = {\n  type: 'Super';\n  _Super: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type SwitchCase = {\n  type: 'SwitchCase';\n  _SwitchCase: void;\n  consequent: Array<Statement>;\n  test: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type SwitchStatement = {\n  type: 'SwitchStatement';\n  _SwitchStatement: void;\n  cases: Array<SwitchCase>;\n  discriminant: Expression;\n  lexical: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type TaggedTemplateExpression = {\n  type: 'TaggedTemplateExpression';\n  _TaggedTemplateExpression: void;\n  quasi: TemplateLiteral;\n  tag: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type TemplateElement = {\n  type: 'TemplateElement';\n  _TemplateElement: void;\n  tail: boolean;\n  value: {cooked: string, raw: string};\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type TemplateLiteral = {\n  type: 'TemplateLiteral';\n  _TemplateLiteral: void;\n  expressions: Array<Expression>;\n  quasis: Array<TemplateElement>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ThisExpression = {\n  type: 'ThisExpression';\n  _ThisExpression: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ThrowStatement = {\n  type: 'ThrowStatement';\n  _ThrowStatement: void;\n  argument: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type TryStatement = {\n  type: 'TryStatement';\n  _TryStatement: void;\n  block: BlockStatement;\n  finalizer: ?BlockStatement;\n  guardedHandlers: Array<CatchClause>;\n  handler: ?CatchClause;\n  handlers: ?Array<CatchClause>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\ntype UnaryOperator = '-' | '+' | '!' | '~' | 'typeof' | 'void' | 'delete';\n\nexport type UnaryExpression = {\n  type: 'UnaryExpression';\n  _UnaryExpression: void;\n  argument: Expression;\n  operator: UnaryOperator;\n  prefix: true;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\ntype UpdateOperator = '++' | '--';\n\nexport type UpdateExpression = {\n  type: 'UpdateExpression';\n  _UpdateExpression: void;\n  argument: Expression;\n  operator: UpdateOperator;\n  prefix: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type VariableDeclaration = {\n  type: 'VariableDeclaration';\n  _VariableDeclaration: void;\n  declarations: Array<VariableDeclarator>;\n  kind: 'var' | 'let' | 'const';\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type VariableDeclarator = {\n  type: 'VariableDeclarator';\n  _VariableDeclarator: void;\n  id: Pattern;\n  init: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type WhileStatement = {\n  type: 'WhileStatement';\n  _WhileStatement: void;\n  body: Statement;\n  test: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type WithStatement = {\n  type: 'WithStatement';\n  _WithStatement: void;\n  body: Statement;\n  object: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type YieldExpression = {\n  type: 'YieldExpression';\n  _YieldExpression: void;\n  argument: ?Expression;\n  delegate: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type ExportAllDeclaration = {\n  type: 'ExportAllDeclaration';\n  _ExportAllDeclaration: void;\n  exported: Node;\n  source: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type ExportDefaultDeclaration = {\n  type: 'ExportDefaultDeclaration';\n  _ExportDefaultDeclaration: void;\n  declaration: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type ExportNamedDeclaration = {\n  type: 'ExportNamedDeclaration';\n  _ExportNamedDeclaration: void;\n  declaration: Node;\n  source: Literal;\n  specifiers: Array<Node>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type ExportDefaultSpecifier = {\n  type: 'ExportDefaultSpecifier';\n  _ExportDefaultSpecifier: void;\n  exported: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type ExportNamespaceSpecifier = {\n  type: 'ExportNamespaceSpecifier';\n  _ExportNamespaceSpecifier: void;\n  exported: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type ExportSpecifier = {\n  type: 'ExportSpecifier';\n  _ExportSpecifier: void;\n  local: Node;\n  exported: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type AnyTypeAnnotation = {\n  type: 'AnyTypeAnnotation';\n  _AnyTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ArrayTypeAnnotation = {\n  type: 'ArrayTypeAnnotation';\n  _ArrayTypeAnnotation: void;\n  elementType: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type BooleanLiteralTypeAnnotation = {\n  type: 'BooleanLiteralTypeAnnotation';\n  _BooleanLiteralTypeAnnotation: void;\n  raw: string;\n  value: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type BooleanTypeAnnotation = {\n  type: 'BooleanTypeAnnotation';\n  _BooleanTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ClassImplements = {\n  type: 'ClassImplements';\n  _ClassImplements: void;\n  id: Identifier;\n  typeParameters: ?TypeParameterInstantiation;\n  superClass: ?Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ClassProperty = {\n  type: 'ClassProperty';\n  _ClassProperty: void;\n  computed: boolean;\n  key: Node;\n  static: boolean;\n  typeAnnotation: ?TypeAnnotation;\n  value: ?Expression;\n  decorators: Array<Decorator>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type DeclareClass = {\n  type: 'DeclareClass';\n  _DeclareClass: void;\n  body: ObjectTypeAnnotation;\n  extends: Array<InterfaceExtends>;\n  id: Identifier;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type DeclareFunction = {\n  type: 'DeclareFunction';\n  _DeclareFunction: void;\n  id: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type DeclareModule = {\n  type: 'DeclareModule';\n  _DeclareModule: void;\n  body: BlockStatement;\n  id: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\n// TODO: Make this correct.\nexport type DeclareVariable = {\n  type: 'DeclareVariable';\n  _DeclareVariable: void;\n  id: Identifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type FunctionTypeAnnotation = {\n  type: 'FunctionTypeAnnotation';\n  _FunctionTypeAnnotation: void;\n  params: Array<FunctionTypeParam>;\n  rest: ?FunctionTypeParam;\n  returnType: Type;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type FunctionTypeParam = {\n  type: 'FunctionTypeParam';\n  _FunctionTypeParam: void;\n  name: Identifier;\n  optional: boolean;\n  typeAnnotation: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type GenericTypeAnnotation = {\n  type: 'GenericTypeAnnotation';\n  _GenericTypeAnnotation: void;\n  id: Node;\n  typeParameters: ?TypeParameterInstantiation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type InterfaceExtends = {\n  type: 'InterfaceExtends';\n  _InterfaceExtends: void;\n  id: Identifier;\n  typeParameters: ?TypeParameterInstantiation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type InterfaceDeclaration = {\n  type: 'InterfaceDeclaration';\n  _InterfaceDeclaration: void;\n  body: ObjectTypeAnnotation;\n  extends: Array<InterfaceExtends>;\n  id: Identifier;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type IntersectionTypeAnnotation = {\n  type: 'IntersectionTypeAnnotation';\n  _IntersectionTypeAnnotation: void;\n  types: Array<Type>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type MixedTypeAnnotation = {\n  type: 'MixedTypeAnnotation';\n  _MixedTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type NullableTypeAnnotation = {\n  type: 'NullableTypeAnnotation';\n  _NullableTypeAnnotation: void;\n  typeAnnotation: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type NumberLiteralTypeAnnotation = {\n  type: 'NumberLiteralTypeAnnotation';\n  _NumberLiteralTypeAnnotation: void;\n  raw: string;\n  value: number;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type NumberTypeAnnotation = {\n  type: 'NumberTypeAnnotation';\n  _NumberTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type StringLiteralTypeAnnotation = {\n  type: 'StringLiteralTypeAnnotation';\n  _StringLiteralTypeAnnotation: void;\n  raw: string;\n  value: string;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type StringTypeAnnotation = {\n  type: 'StringTypeAnnotation';\n  _StringTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type TupleTypeAnnotation = {\n  type: 'TupleTypeAnnotation';\n  _TupleTypeAnnotation: void;\n  types: Array<Type>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type TypeofTypeAnnotation = {\n  type: 'TypeofTypeAnnotation';\n  _TypeofTypeAnnotation: void;\n  argument: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type TypeAlias = {\n  type: 'TypeAlias';\n  _TypeAlias: void;\n  id: Identifier;\n  right: Type;\n  typeParameters: ?TypeParameterDeclaration;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type TypeAnnotation = {\n  type: 'TypeAnnotation';\n  _TypeAnnotation: void;\n  typeAnnotation: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type TypeCastExpression = {\n  type: 'TypeCastExpression';\n  _TypeCastExpression: void;\n  expression: Expression;\n  typeAnnotation: TypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type TypeParameterDeclaration = {\n  type: 'TypeParameterDeclaration';\n  _TypeParameterDeclaration: void;\n  params: Array<Identifier>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type TypeParameterInstantiation = {\n  type: 'TypeParameterInstantiation';\n  _TypeParameterInstantiation: void;\n  params: Array<Type>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ObjectTypeAnnotation = {\n  type: 'ObjectTypeAnnotation';\n  _ObjectTypeAnnotation: void;\n  callProperties: Array<ObjectTypeCallProperty>;\n  indexers: Array<ObjectTypeIndexer>;\n  properties: Array<ObjectTypeProperty>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ObjectTypeCallProperty = {\n  type: 'ObjectTypeCallProperty';\n  _ObjectTypeCallProperty: void;\n  static: boolean;\n  value: FunctionTypeAnnotation;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ObjectTypeIndexer = {\n  type: 'ObjectTypeIndexer';\n  _ObjectTypeIndexer: void;\n  id: Identifier;\n  key: Type;\n  value: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type ObjectTypeProperty = {\n  type: 'ObjectTypeProperty';\n  _ObjectTypeProperty: void;\n  key: Node;\n  optional: boolean;\n  value: Type;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type QualifiedTypeIdentifier = {\n  type: 'QualifiedTypeIdentifier';\n  _QualifiedTypeIdentifier: void;\n  id: Identifier;\n  qualification: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type UnionTypeAnnotation = {\n  type: 'UnionTypeAnnotation';\n  _UnionTypeAnnotation: void;\n  types: Array<Type>;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type VoidTypeAnnotation = {\n  type: 'VoidTypeAnnotation';\n  _VoidTypeAnnotation: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type JSXAttribute = {\n  type: 'JSXAttribute';\n  _JSXAttribute: void;\n  name: Node;\n  value: ?Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type JSXClosingElement = {\n  type: 'JSXClosingElement';\n  _JSXClosingElement: void;\n  name: Node;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type JSXElement = {\n  type: 'JSXElement';\n  _JSXElement: void;\n  children: Array<Node>;\n  closingElement: ?JSXClosingElement;\n  openingElement: JSXOpeningElement;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type JSXEmptyExpression = {\n  type: 'JSXEmptyExpression';\n  _JSXEmptyExpression: void;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type JSXExpressionContainer = {\n  type: 'JSXExpressionContainer';\n  _JSXExpressionContainer: void;\n  expression: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type JSXIdentifier = {\n  type: 'JSXIdentifier';\n  _JSXIdentifier: void;\n  name: string;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type JSXMemberExpression = {\n  type: 'JSXMemberExpression';\n  _JSXMemberExpression: void;\n  computed: boolean;\n  object: Node;\n  property: JSXIdentifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type JSXNamespacedName = {\n  type: 'JSXNamespacedName';\n  _JSXNamespacedName: void;\n  name: JSXIdentifier;\n  namespace: JSXIdentifier;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type JSXOpeningElement = {\n  type: 'JSXOpeningElement';\n  _JSXOpeningElement: void;\n  attributes: Array<Node>;\n  name: Array<Node>;\n  selfClosing: boolean;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n\nexport type JSXSpreadAttribute = {\n  type: 'JSXSpreadAttribute';\n  _JSXSpreadAttribute: void;\n  argument: Expression;\n  end: number;\n  innerComments: ?Array<Comment>;\n  leadingComments: ?Array<Comment>;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n  trailingComments: ?Array<Comment>;\n};\n"
  },
  {
    "path": "tests/flow/type_args_nonstrict/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n/**\n * Test nonstrict type param arity checking,\n * as enabled by\n *\n * [options]\n * experimental.strict_type_args=false\n *\n * in .flowconfig.\n *\n * @flow\n */\n\n// no arity error in type annotation using polymorphic class\n\nclass MyClass<T> {\n  x: T;\n  constructor(x: T) {\n    this.x = x;\n  }\n}\n\nvar c: MyClass = new MyClass(0); // no error\n\n// no arity error in type annotation using polymorphic class with defaulting\n\nclass MyClass2<T, U = string> {\n  x: T;\n  y: U;\n  constructor(x: T, y: U) {\n    this.x = x;\n    this.y = y;\n  }\n}\n\nvar c2: MyClass2 = new MyClass2(0, \"\"); // no error\n\n// no arity error in type annotation using polymorphic type alias\n\ntype MyObject<T> = {\n  x: T;\n}\n\nvar o: MyObject = { x: 0 }; // no error\n\n// arity error in type alias rhs\n\ntype MySubobject = { y: number } & MyObject; // no error\n\n// arity error in interface extends\n\ninterface MyInterface<T> {\n  x: T;\n}\n\ninterface MySubinterface extends MyInterface { // no error\n  y: number;\n}\n\n// no arity error in extends of polymorphic class\n\nclass MySubclass extends MyClass { // ok, type arg inferred\n  y: number;\n  constructor(y: number) {\n    super(y);\n  }\n}\n\n// no arity error in call of polymorphic function\n\nfunction singleton<T>(x: T):Array<T> { return [x]; }\n\nvar num_array:Array<number> = singleton(0); // ok, type arg inferred\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * Test nonstrict type param arity checking,\n * as enabled by\n *\n * [options]\n * experimental.strict_type_args=false\n *\n * in .flowconfig.\n *\n * @flow\n */\n\n// no arity error in type annotation using polymorphic class\n\nclass MyClass<T> {\n  x: T;\n  constructor(x: T) {\n    this.x = x;\n  }\n}\n\nvar c: MyClass = new MyClass(0); // no error\n\n// no arity error in type annotation using polymorphic class with defaulting\n\nclass MyClass2<T, U = string> {\n  x: T;\n  y: U;\n  constructor(x: T, y: U) {\n    this.x = x;\n    this.y = y;\n  }\n}\n\nvar c2: MyClass2 = new MyClass2(0, \"\"); // no error\n\n// no arity error in type annotation using polymorphic type alias\n\ntype MyObject<T> = {\n  x: T\n};\n\nvar o: MyObject = { x: 0 }; // no error\n\n// arity error in type alias rhs\n\ntype MySubobject = { y: number } & MyObject; // no error\n\n// arity error in interface extends\n\ninterface MyInterface<T> {\n  x: T\n}\n\ninterface MySubinterface extends MyInterface {\n  // no error\n  y: number\n}\n\n// no arity error in extends of polymorphic class\n\nclass MySubclass extends MyClass {\n  // ok, type arg inferred\n  y: number;\n  constructor(y: number) {\n    super(y);\n  }\n}\n\n// no arity error in call of polymorphic function\n\nfunction singleton<T>(x: T): Array<T> {\n  return [x];\n}\n\nvar num_array: Array<number> = singleton(0); // ok, type arg inferred\n\n`;\n"
  },
  {
    "path": "tests/flow/type_args_nonstrict/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/type_args_nonstrict/test.js",
    "content": "/**\n * Test nonstrict type param arity checking,\n * as enabled by\n *\n * [options]\n * experimental.strict_type_args=false\n *\n * in .flowconfig.\n *\n * @flow\n */\n\n// no arity error in type annotation using polymorphic class\n\nclass MyClass<T> {\n  x: T;\n  constructor(x: T) {\n    this.x = x;\n  }\n}\n\nvar c: MyClass = new MyClass(0); // no error\n\n// no arity error in type annotation using polymorphic class with defaulting\n\nclass MyClass2<T, U = string> {\n  x: T;\n  y: U;\n  constructor(x: T, y: U) {\n    this.x = x;\n    this.y = y;\n  }\n}\n\nvar c2: MyClass2 = new MyClass2(0, \"\"); // no error\n\n// no arity error in type annotation using polymorphic type alias\n\ntype MyObject<T> = {\n  x: T;\n}\n\nvar o: MyObject = { x: 0 }; // no error\n\n// arity error in type alias rhs\n\ntype MySubobject = { y: number } & MyObject; // no error\n\n// arity error in interface extends\n\ninterface MyInterface<T> {\n  x: T;\n}\n\ninterface MySubinterface extends MyInterface { // no error\n  y: number;\n}\n\n// no arity error in extends of polymorphic class\n\nclass MySubclass extends MyClass { // ok, type arg inferred\n  y: number;\n  constructor(y: number) {\n    super(y);\n  }\n}\n\n// no arity error in call of polymorphic function\n\nfunction singleton<T>(x: T):Array<T> { return [x]; }\n\nvar num_array:Array<number> = singleton(0); // ok, type arg inferred\n"
  },
  {
    "path": "tests/flow/type_args_strict/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n/**\n * Test strict type param arity checking.\n *\n * Full type argument lists are required in type expressions,\n * such as type annotations and interface extends clauses.\n * Type arguments are optional in value expressions, such as\n * class extends clauses and calls of polymorphic functions.\n *\n * @flow\n */\n\n// arity error in type annotation using polymorphic class\n\nclass MyClass<T> {\n  x: T;\n  constructor(x: T) {\n    this.x = x;\n  }\n}\n\nvar c: MyClass = new MyClass(0); // error, missing argument list (1)\n\n// arity error in type annotation using polymorphic class with defaulting\n\nclass MyClass2<T, U = string> {\n  x: T;\n  y: U;\n  constructor(x: T, y: U) {\n    this.x = x;\n    this.y = y;\n  }\n}\n\nvar c2: MyClass2 = new MyClass2(0, \"\"); // error, missing argument list (1-2)\n\n// arity error in type annotation using polymorphic type alias\n\ntype MyObject<T> = {\n  x: T;\n}\n\nvar o: MyObject = { x: 0 }; // error, missing argument list\n\n// arity error in type alias rhs\n\ntype MySubobject = { y: number } & MyObject; // error, missing argument list\n\n// arity error in interface extends\n\ninterface MyInterface<T> {\n  x: T;\n}\n\ninterface MySubinterface extends MyInterface { // error, missing argument list\n  y: number;\n}\n\n// *no* arity error in extends of polymorphic class\n\nclass MySubclass extends MyClass { // ok, type arg inferred\n  y: number;\n  constructor(y: number) {\n    super(y);\n  }\n}\n\n// *no* arity error in call of polymorphic function\n\nfunction singleton<T>(x: T):Array<T> { return [x]; }\n\nvar num_array:Array<number> = singleton(0); // ok, type arg inferred\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * Test strict type param arity checking.\n *\n * Full type argument lists are required in type expressions,\n * such as type annotations and interface extends clauses.\n * Type arguments are optional in value expressions, such as\n * class extends clauses and calls of polymorphic functions.\n *\n * @flow\n */\n\n// arity error in type annotation using polymorphic class\n\nclass MyClass<T> {\n  x: T;\n  constructor(x: T) {\n    this.x = x;\n  }\n}\n\nvar c: MyClass = new MyClass(0); // error, missing argument list (1)\n\n// arity error in type annotation using polymorphic class with defaulting\n\nclass MyClass2<T, U = string> {\n  x: T;\n  y: U;\n  constructor(x: T, y: U) {\n    this.x = x;\n    this.y = y;\n  }\n}\n\nvar c2: MyClass2 = new MyClass2(0, \"\"); // error, missing argument list (1-2)\n\n// arity error in type annotation using polymorphic type alias\n\ntype MyObject<T> = {\n  x: T\n};\n\nvar o: MyObject = { x: 0 }; // error, missing argument list\n\n// arity error in type alias rhs\n\ntype MySubobject = { y: number } & MyObject; // error, missing argument list\n\n// arity error in interface extends\n\ninterface MyInterface<T> {\n  x: T\n}\n\ninterface MySubinterface extends MyInterface {\n  // error, missing argument list\n  y: number\n}\n\n// *no* arity error in extends of polymorphic class\n\nclass MySubclass extends MyClass {\n  // ok, type arg inferred\n  y: number;\n  constructor(y: number) {\n    super(y);\n  }\n}\n\n// *no* arity error in call of polymorphic function\n\nfunction singleton<T>(x: T): Array<T> {\n  return [x];\n}\n\nvar num_array: Array<number> = singleton(0); // ok, type arg inferred\n\n`;\n"
  },
  {
    "path": "tests/flow/type_args_strict/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/type_args_strict/test.js",
    "content": "/**\n * Test strict type param arity checking.\n *\n * Full type argument lists are required in type expressions,\n * such as type annotations and interface extends clauses.\n * Type arguments are optional in value expressions, such as\n * class extends clauses and calls of polymorphic functions.\n *\n * @flow\n */\n\n// arity error in type annotation using polymorphic class\n\nclass MyClass<T> {\n  x: T;\n  constructor(x: T) {\n    this.x = x;\n  }\n}\n\nvar c: MyClass = new MyClass(0); // error, missing argument list (1)\n\n// arity error in type annotation using polymorphic class with defaulting\n\nclass MyClass2<T, U = string> {\n  x: T;\n  y: U;\n  constructor(x: T, y: U) {\n    this.x = x;\n    this.y = y;\n  }\n}\n\nvar c2: MyClass2 = new MyClass2(0, \"\"); // error, missing argument list (1-2)\n\n// arity error in type annotation using polymorphic type alias\n\ntype MyObject<T> = {\n  x: T;\n}\n\nvar o: MyObject = { x: 0 }; // error, missing argument list\n\n// arity error in type alias rhs\n\ntype MySubobject = { y: number } & MyObject; // error, missing argument list\n\n// arity error in interface extends\n\ninterface MyInterface<T> {\n  x: T;\n}\n\ninterface MySubinterface extends MyInterface { // error, missing argument list\n  y: number;\n}\n\n// *no* arity error in extends of polymorphic class\n\nclass MySubclass extends MyClass { // ok, type arg inferred\n  y: number;\n  constructor(y: number) {\n    super(y);\n  }\n}\n\n// *no* arity error in call of polymorphic function\n\nfunction singleton<T>(x: T):Array<T> { return [x]; }\n\nvar num_array:Array<number> = singleton(0); // ok, type arg inferred\n"
  },
  {
    "path": "tests/flow/type_only_vars/A.js",
    "content": "/**\n * @flow\n */\n\nclass Foo {\n}\n\nclass Bar {\n}\n\nmodule.exports = {\n  Foo: Foo,\n  Bar: Bar\n};\n"
  },
  {
    "path": "tests/flow/type_only_vars/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`A.js 1`] = `\n/**\n * @flow\n */\n\nclass Foo {\n}\n\nclass Bar {\n}\n\nmodule.exports = {\n  Foo: Foo,\n  Bar: Bar\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nclass Foo {}\n\nclass Bar {}\n\nmodule.exports = {\n  Foo: Foo,\n  Bar: Bar\n};\n\n`;\n\nexports[`bad_shadowing.js 1`] = `\n/**\n * @flow\n */\n\nimport typeof A from \"./A.js\";\nimport type {Foo, Bar as Baz} from \"./A.js\";\n\ntype duck = {\n  quack: () => string;\n}\n\n// These string types should confict with the imported types\nvar A: string = \"Hello\";\nvar Foo: string = \"Goodbye\";\nvar Baz: string = \"Go away please\";\n\n// This string type should conflict with the typedef\nvar duck: string = \"quack\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nimport typeof A from \"./A.js\";\nimport type { Foo, Bar as Baz } from \"./A.js\";\n\ntype duck = {\n  quack: () => string\n};\n\n// These string types should confict with the imported types\nvar A: string = \"Hello\";\nvar Foo: string = \"Goodbye\";\nvar Baz: string = \"Go away please\";\n\n// This string type should conflict with the typedef\nvar duck: string = \"quack\";\n\n`;\n\nexports[`good_shadowing.js 1`] = `\n/**\n * @flow\n */\n\nimport typeof A from \"./A.js\";\nimport type {Foo, Bar as Baz} from \"./A.js\";\n\nvar A = require('./A.js');\nvar Foo = A.Foo;\nvar Baz = A.Bar;\n\n// errors in prev block leave type bindings in place, so these are errors\nvar m = A;\nvar n = Foo;\nvar o = Baz;\n\n// errors from value positions only\nvar a: Foo = new Foo();\nvar b: Foo = new A.Foo();\n(new A.Bar(): Baz);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nimport typeof A from \"./A.js\";\nimport type { Foo, Bar as Baz } from \"./A.js\";\n\nvar A = require(\"./A.js\");\nvar Foo = A.Foo;\nvar Baz = A.Bar;\n\n// errors in prev block leave type bindings in place, so these are errors\nvar m = A;\nvar n = Foo;\nvar o = Baz;\n\n// errors from value positions only\nvar a: Foo = new Foo();\nvar b: Foo = new A.Foo();\n(new A.Bar(): Baz);\n\n`;\n\nexports[`import_type.js 1`] = `\n/**\n * @flow\n */\n\nimport typeof A from \"./A.js\";\nimport type {Foo, Bar as Baz} from \"./A.js\";\n\nvar actualA = require('./A.js');\n\n// You can't use it as an identifier\nvar m = A;\nvar n = Foo;\nvar o = Baz;\n\n// But using it in a type should still work\nvar a: Foo = new actualA.Foo();\n(new actualA.Bar(): Baz);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nimport typeof A from \"./A.js\";\nimport type { Foo, Bar as Baz } from \"./A.js\";\n\nvar actualA = require(\"./A.js\");\n\n// You can't use it as an identifier\nvar m = A;\nvar n = Foo;\nvar o = Baz;\n\n// But using it in a type should still work\nvar a: Foo = new actualA.Foo();\n(new actualA.Bar(): Baz);\n\n`;\n\nexports[`type_alias.js 1`] = `\n/**\n * @flow\n */\n\ntype Foo = number;\n\n// You can't use it as an identifier\nvar x = Foo;\n\n// But using it in a type should still work\nvar a: Foo = 123;\nvar b: Array<Foo> = [123];\ntype c = Foo;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\ntype Foo = number;\n\n// You can't use it as an identifier\nvar x = Foo;\n\n// But using it in a type should still work\nvar a: Foo = 123;\nvar b: Array<Foo> = [123];\ntype c = Foo;\n\n`;\n"
  },
  {
    "path": "tests/flow/type_only_vars/bad_shadowing.js",
    "content": "/**\n * @flow\n */\n\nimport typeof A from \"./A.js\";\nimport type {Foo, Bar as Baz} from \"./A.js\";\n\ntype duck = {\n  quack: () => string;\n}\n\n// These string types should confict with the imported types\nvar A: string = \"Hello\";\nvar Foo: string = \"Goodbye\";\nvar Baz: string = \"Go away please\";\n\n// This string type should conflict with the typedef\nvar duck: string = \"quack\";\n"
  },
  {
    "path": "tests/flow/type_only_vars/good_shadowing.js",
    "content": "/**\n * @flow\n */\n\nimport typeof A from \"./A.js\";\nimport type {Foo, Bar as Baz} from \"./A.js\";\n\nvar A = require('./A.js');\nvar Foo = A.Foo;\nvar Baz = A.Bar;\n\n// errors in prev block leave type bindings in place, so these are errors\nvar m = A;\nvar n = Foo;\nvar o = Baz;\n\n// errors from value positions only\nvar a: Foo = new Foo();\nvar b: Foo = new A.Foo();\n(new A.Bar(): Baz);\n"
  },
  {
    "path": "tests/flow/type_only_vars/import_type.js",
    "content": "/**\n * @flow\n */\n\nimport typeof A from \"./A.js\";\nimport type {Foo, Bar as Baz} from \"./A.js\";\n\nvar actualA = require('./A.js');\n\n// You can't use it as an identifier\nvar m = A;\nvar n = Foo;\nvar o = Baz;\n\n// But using it in a type should still work\nvar a: Foo = new actualA.Foo();\n(new actualA.Bar(): Baz);\n"
  },
  {
    "path": "tests/flow/type_only_vars/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/type_only_vars/type_alias.js",
    "content": "/**\n * @flow\n */\n\ntype Foo = number;\n\n// You can't use it as an identifier\nvar x = Foo;\n\n// But using it in a type should still work\nvar a: Foo = 123;\nvar b: Array<Foo> = [123];\ntype c = Foo;\n"
  },
  {
    "path": "tests/flow/type_param_defaults/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`classes.js 1`] = `\n/* @flow */\n\nclass A<T> {\n  p: T;\n  constructor(p: T) {\n    this.p = p;\n  }\n}\n\n// Test out simple defaults\nclass B<T = string> extends A<T> {}\n\nvar b_number: B<number> = new B(123);\nvar b_void: B<void> = new B();\nvar b_default: B<> = new B('hello');\n\nvar b_star: B<*> = new B(123);\n\n(b_number.p: boolean); // Error number ~> boolean\n(b_void.p: boolean); // Error void ~> boolean\n(b_default.p: boolean); // Error string ~> boolean\n\n(b_star.p: boolean); // Error number ~> boolean\n\nclass C<T: ?string = string> extends A<T> {}\n\nvar c_number: C<number> = new C(123); // Error number ~> ?string\nvar c_void: C<void> = new C();\nvar c_default: C<> = new C('hello');\nvar c_star: C<*> = new C('hello');\n\n(c_void.p: boolean); // Error void ~> boolean\n(c_default.p: boolean); // Error string ~> boolean\n(c_star.p: boolean); // Error string ~> boolean\n\nclass D<S, T = string> extends A<T> {}\nvar d_number: D<mixed, number> = new D(123);\nvar d_void: D<mixed, void> = new D();\nvar d_default: D<mixed> = new D('hello');\nvar d_too_few_args: D<> = new D('hello'); // Error too few tparams\nvar d_too_many: D<mixed, string, string> = new D('hello'); // Error too many tparams\nvar d_star: D<*> = new D(10); // error, number ~> string\n\n(d_number.p: boolean); // Error number ~> boolean\n(d_void.p: boolean); // Error void ~> boolean\n(d_default.p: boolean); // Error string ~> boolean\n(d_star.p: boolean); // Error number ~> boolean\n\nclass E<S: string, T: number = S> {} // Error: string ~> number\nclass F<S: string, T: S = number> {} // Error: number ~> string\n\nclass G<S: string, T = S> extends A<T> {}\n\nvar g_default: G<string> = new G('hello');\n\n(g_default.p: boolean); // Error string ~> boolean\n\nclass H<S = T, T = string> {} // Error - can't refer to T before it's defined\n\nclass I<T: ?string = *> extends A<T> {}\n\nvar i_number: I<number> = new I(123); // Error number ~> ?string\nvar i_void: I<void> = new I();\nvar i_default: I<> = new I('hello');\nvar i_star: I<*> = new I('hello');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nclass A<T> {\n  p: T;\n  constructor(p: T) {\n    this.p = p;\n  }\n}\n\n// Test out simple defaults\nclass B<T = string> extends A<T> {}\n\nvar b_number: B<number> = new B(123);\nvar b_void: B<void> = new B();\nvar b_default: B<> = new B(\"hello\");\n\nvar b_star: B<*> = new B(123);\n\n(b_number.p: boolean); // Error number ~> boolean\n(b_void.p: boolean); // Error void ~> boolean\n(b_default.p: boolean); // Error string ~> boolean\n\n(b_star.p: boolean); // Error number ~> boolean\n\nclass C<T: ?string = string> extends A<T> {}\n\nvar c_number: C<number> = new C(123); // Error number ~> ?string\nvar c_void: C<void> = new C();\nvar c_default: C<> = new C(\"hello\");\nvar c_star: C<*> = new C(\"hello\");\n\n(c_void.p: boolean); // Error void ~> boolean\n(c_default.p: boolean); // Error string ~> boolean\n(c_star.p: boolean); // Error string ~> boolean\n\nclass D<S, T = string> extends A<T> {}\nvar d_number: D<mixed, number> = new D(123);\nvar d_void: D<mixed, void> = new D();\nvar d_default: D<mixed> = new D(\"hello\");\nvar d_too_few_args: D<> = new D(\"hello\"); // Error too few tparams\nvar d_too_many: D<mixed, string, string> = new D(\"hello\"); // Error too many tparams\nvar d_star: D<*> = new D(10); // error, number ~> string\n\n(d_number.p: boolean); // Error number ~> boolean\n(d_void.p: boolean); // Error void ~> boolean\n(d_default.p: boolean); // Error string ~> boolean\n(d_star.p: boolean); // Error number ~> boolean\n\nclass E<S: string, T: number = S> {} // Error: string ~> number\nclass F<S: string, T: S = number> {} // Error: number ~> string\n\nclass G<S: string, T = S> extends A<T> {}\n\nvar g_default: G<string> = new G(\"hello\");\n\n(g_default.p: boolean); // Error string ~> boolean\n\nclass H<S = T, T = string> {} // Error - can't refer to T before it's defined\n\nclass I<T: ?string = *> extends A<T> {}\n\nvar i_number: I<number> = new I(123); // Error number ~> ?string\nvar i_void: I<void> = new I();\nvar i_default: I<> = new I(\"hello\");\nvar i_star: I<*> = new I(\"hello\");\n\n`;\n"
  },
  {
    "path": "tests/flow/type_param_defaults/classes.js",
    "content": "/* @flow */\n\nclass A<T> {\n  p: T;\n  constructor(p: T) {\n    this.p = p;\n  }\n}\n\n// Test out simple defaults\nclass B<T = string> extends A<T> {}\n\nvar b_number: B<number> = new B(123);\nvar b_void: B<void> = new B();\nvar b_default: B<> = new B('hello');\n\nvar b_star: B<*> = new B(123);\n\n(b_number.p: boolean); // Error number ~> boolean\n(b_void.p: boolean); // Error void ~> boolean\n(b_default.p: boolean); // Error string ~> boolean\n\n(b_star.p: boolean); // Error number ~> boolean\n\nclass C<T: ?string = string> extends A<T> {}\n\nvar c_number: C<number> = new C(123); // Error number ~> ?string\nvar c_void: C<void> = new C();\nvar c_default: C<> = new C('hello');\nvar c_star: C<*> = new C('hello');\n\n(c_void.p: boolean); // Error void ~> boolean\n(c_default.p: boolean); // Error string ~> boolean\n(c_star.p: boolean); // Error string ~> boolean\n\nclass D<S, T = string> extends A<T> {}\nvar d_number: D<mixed, number> = new D(123);\nvar d_void: D<mixed, void> = new D();\nvar d_default: D<mixed> = new D('hello');\nvar d_too_few_args: D<> = new D('hello'); // Error too few tparams\nvar d_too_many: D<mixed, string, string> = new D('hello'); // Error too many tparams\nvar d_star: D<*> = new D(10); // error, number ~> string\n\n(d_number.p: boolean); // Error number ~> boolean\n(d_void.p: boolean); // Error void ~> boolean\n(d_default.p: boolean); // Error string ~> boolean\n(d_star.p: boolean); // Error number ~> boolean\n\nclass E<S: string, T: number = S> {} // Error: string ~> number\nclass F<S: string, T: S = number> {} // Error: number ~> string\n\nclass G<S: string, T = S> extends A<T> {}\n\nvar g_default: G<string> = new G('hello');\n\n(g_default.p: boolean); // Error string ~> boolean\n\nclass H<S = T, T = string> {} // Error - can't refer to T before it's defined\n\nclass I<T: ?string = *> extends A<T> {}\n\nvar i_number: I<number> = new I(123); // Error number ~> ?string\nvar i_void: I<void> = new I();\nvar i_default: I<> = new I('hello');\nvar i_star: I<*> = new I('hello');\n"
  },
  {
    "path": "tests/flow/type_param_defaults/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/type_param_scope/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`class.js 1`] = `\nclass C<T> {\n  a<A>(x:T, a:A) {\n    this.b(x); // ok\n    this.b(a); // error: A ~> incompatible instance of T\n  }\n\n  b(x:T) {}\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C<T> {\n  a<A>(x: T, a: A) {\n    this.b(x); // ok\n    this.b(a); // error: A ~> incompatible instance of T\n  }\n\n  b(x: T) {}\n}\n\n`;\n\nexports[`default_params.js 1`] = `\nfunction f<T>(a:T) {\n  function g<U>(b:U, c:T = a) {\n    function h(d:U = b) {}\n    h(); // ok\n    h(b); // ok\n    h(c); // err, T ~> U\n  }\n  g(0); // ok\n  g(0,a); // ok\n  g(0,0); // error: number ~> T\n}\nf(0); // ok\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction f<T>(a: T) {\n  function g<U>(b: U, c: T = a) {\n    function h(d: U = b) {}\n    h(); // ok\n    h(b); // ok\n    h(c); // err, T ~> U\n  }\n  g(0); // ok\n  g(0, a); // ok\n  g(0, 0); // error: number ~> T\n}\nf(0); // ok\n\n`;\n\nexports[`method_shadow.js 1`] = `\n// Ensure method type params properly shadow outer type params. Subclass ensures\n// the generated insttype has the correct tvars. Should behave the same for\n// classes, interfaces, and declared classes.\n\nclass A<T> {\n  x:T;\n  constructor(x:T) { this.x = x }\n  m<T>(x:T):A<T> { return new A(x) }\n}\n\nclass B<T> extends A<T> {\n  m<T>(x:T):B<T> { return new B(x) }\n}\n\ninterface C<T> {\n  m<T>(x:T):C<T>;\n}\n\ninterface D<T> extends C<T> {\n  m<T>(x:T):D<T>;\n}\n\ndeclare class E<T> {\n  m<T>(x:T):E<T>;\n}\n\ndeclare class F<T> extends E<T> {\n  m<T>(x:T):F<T>;\n}\n\n\n// Bounds can refer to parent type params (until they are shadowed).\n\nclass G<T> {\n  x:T;\n  constructor(x:T) { this.x = x }\n  m<T:T>(x:T):G<T> { return new G(x) } // T-as-bound is G's T\n}\n\ndeclare var g: G<number|string>;\ng.m(0); // ok\ng.m(true); // err, bool ~> number|string\n(g.m(\"\"): G<number>); // err, string ~> number\n\n\n// Shadow bounds incompatible with parent\n\nclass H<T> {\n    x:T;\n    m<T>(x:T) {\n        this.x = x; // err, m's T != H's T\n    }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Ensure method type params properly shadow outer type params. Subclass ensures\n// the generated insttype has the correct tvars. Should behave the same for\n// classes, interfaces, and declared classes.\n\nclass A<T> {\n  x: T;\n  constructor(x: T) {\n    this.x = x;\n  }\n  m<T>(x: T): A<T> {\n    return new A(x);\n  }\n}\n\nclass B<T> extends A<T> {\n  m<T>(x: T): B<T> {\n    return new B(x);\n  }\n}\n\ninterface C<T> {\n  m<T>(x: T): C<T>\n}\n\ninterface D<T> extends C<T> {\n  m<T>(x: T): D<T>\n}\n\ndeclare class E<T> {\n  m<T>(x: T): E<T>\n}\n\ndeclare class F<T> extends E<T> {\n  m<T>(x: T): F<T>\n}\n\n// Bounds can refer to parent type params (until they are shadowed).\n\nclass G<T> {\n  x: T;\n  constructor(x: T) {\n    this.x = x;\n  }\n  m<T: T>(x: T): G<T> {\n    return new G(x);\n  } // T-as-bound is G's T\n}\n\ndeclare var g: G<number | string>;\ng.m(0); // ok\ng.m(true); // err, bool ~> number|string\n(g.m(\"\"): G<number>); // err, string ~> number\n\n// Shadow bounds incompatible with parent\n\nclass H<T> {\n  x: T;\n  m<T>(x: T) {\n    this.x = x; // err, m's T != H's T\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/type_param_scope/class.js",
    "content": "class C<T> {\n  a<A>(x:T, a:A) {\n    this.b(x); // ok\n    this.b(a); // error: A ~> incompatible instance of T\n  }\n\n  b(x:T) {}\n}\n"
  },
  {
    "path": "tests/flow/type_param_scope/default_params.js",
    "content": "function f<T>(a:T) {\n  function g<U>(b:U, c:T = a) {\n    function h(d:U = b) {}\n    h(); // ok\n    h(b); // ok\n    h(c); // err, T ~> U\n  }\n  g(0); // ok\n  g(0,a); // ok\n  g(0,0); // error: number ~> T\n}\nf(0); // ok\n"
  },
  {
    "path": "tests/flow/type_param_scope/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/type_param_scope/method_shadow.js",
    "content": "// Ensure method type params properly shadow outer type params. Subclass ensures\n// the generated insttype has the correct tvars. Should behave the same for\n// classes, interfaces, and declared classes.\n\nclass A<T> {\n  x:T;\n  constructor(x:T) { this.x = x }\n  m<T>(x:T):A<T> { return new A(x) }\n}\n\nclass B<T> extends A<T> {\n  m<T>(x:T):B<T> { return new B(x) }\n}\n\ninterface C<T> {\n  m<T>(x:T):C<T>;\n}\n\ninterface D<T> extends C<T> {\n  m<T>(x:T):D<T>;\n}\n\ndeclare class E<T> {\n  m<T>(x:T):E<T>;\n}\n\ndeclare class F<T> extends E<T> {\n  m<T>(x:T):F<T>;\n}\n\n\n// Bounds can refer to parent type params (until they are shadowed).\n\nclass G<T> {\n  x:T;\n  constructor(x:T) { this.x = x }\n  m<T:T>(x:T):G<T> { return new G(x) } // T-as-bound is G's T\n}\n\ndeclare var g: G<number|string>;\ng.m(0); // ok\ng.m(true); // err, bool ~> number|string\n(g.m(\"\"): G<number>); // err, string ~> number\n\n\n// Shadow bounds incompatible with parent\n\nclass H<T> {\n    x:T;\n    m<T>(x:T) {\n        this.x = x; // err, m's T != H's T\n    }\n}\n"
  },
  {
    "path": "tests/flow/type_param_variance/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`promise.js 1`] = `\n/**\n * At the moment, all type params are invariant with\n * the exception of the single param to the Promise class,\n * which is covariant.\n *\n * Explicit variance control via annotation is coming,\n * but not immediately. In the meantime, Promise's\n * participation in async/await makes certain kinds of\n * errors onerous (and nonobvious) without covariance.\n *\n * @flow\n */\n\nasync function foo(x: boolean): Promise<?{bar: string}> {\n  if (x) {\n    return {bar: 'baz'};  // OK, because of covariant type param\n  } else {\n    return null;\n  }\n}\n\nasync function run() {\n  console.log(await foo(true));\n  console.log(await foo(false));\n}\n\nrun()\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * At the moment, all type params are invariant with\n * the exception of the single param to the Promise class,\n * which is covariant.\n *\n * Explicit variance control via annotation is coming,\n * but not immediately. In the meantime, Promise's\n * participation in async/await makes certain kinds of\n * errors onerous (and nonobvious) without covariance.\n *\n * @flow\n */\n\nasync function foo(x: boolean): Promise<?{ bar: string }> {\n  if (x) {\n    return { bar: \"baz\" }; // OK, because of covariant type param\n  } else {\n    return null;\n  }\n}\n\nasync function run() {\n  console.log(await foo(true));\n  console.log(await foo(false));\n}\n\nrun();\n\n`;\n"
  },
  {
    "path": "tests/flow/type_param_variance/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/type_param_variance/promise.js",
    "content": "/**\n * At the moment, all type params are invariant with\n * the exception of the single param to the Promise class,\n * which is covariant.\n *\n * Explicit variance control via annotation is coming,\n * but not immediately. In the meantime, Promise's\n * participation in async/await makes certain kinds of\n * errors onerous (and nonobvious) without covariance.\n *\n * @flow\n */\n\nasync function foo(x: boolean): Promise<?{bar: string}> {\n  if (x) {\n    return {bar: 'baz'};  // OK, because of covariant type param\n  } else {\n    return null;\n  }\n}\n\nasync function run() {\n  console.log(await foo(true));\n  console.log(await foo(false));\n}\n\nrun()\n"
  },
  {
    "path": "tests/flow/type_param_variance2/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`promise.js 1`] = `\n/**\n * Here the definition of Promise<T> is routed to the class Promise\n * in the user-specified library libs/Promise.js\n *\n * In such situations we must desugar async/await primitives\n * to the shadowed library definition.\n *\n * @flow\n */\n\nasync function foo(x: boolean): Promise<?{bar: string}> {\n  if (x) {\n    return {bar: 'baz'};  // OK, because of covariant type param\n  } else {\n    return null;\n  }\n}\n\nasync function run() {\n  console.log(await foo(true));\n  console.log(await foo(false));\n}\n\nrun()\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * Here the definition of Promise<T> is routed to the class Promise\n * in the user-specified library libs/Promise.js\n *\n * In such situations we must desugar async/await primitives\n * to the shadowed library definition.\n *\n * @flow\n */\n\nasync function foo(x: boolean): Promise<?{ bar: string }> {\n  if (x) {\n    return { bar: \"baz\" }; // OK, because of covariant type param\n  } else {\n    return null;\n  }\n}\n\nasync function run() {\n  console.log(await foo(true));\n  console.log(await foo(false));\n}\n\nrun();\n\n`;\n"
  },
  {
    "path": "tests/flow/type_param_variance2/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/type_param_variance2/libs/Promise.js",
    "content": "// Copyright 2004-present Facebook. All Rights Reserved.\n\n// These annotations are copy/pasted from the built-in Flow definitions for\n// Native Promises (https://phabricator.fb.com/P19792689),\n// with www-specific additions added in.\n\n// Any definitions here will override similarly-named ones in\n// library files declared earlier, including default flow libs.\n\ndeclare class Promise<R> {\n  constructor(callback: (\n    resolve: (result?: Promise<R> | R) => void,\n    reject: (error?: any) => void\n  ) => void): void;\n\n  then<U>(\n    onFulfill?: ?(value: R) => Promise<U> | ?U,\n    onReject?: ?(error: any) => Promise<U> | ?U\n  ): Promise<U>;\n\n  done<U>(\n    onFulfill?: ?(value: R) => void,\n    onReject?: ?(error: any) => void\n  ): void;\n\n  catch<U>(\n    onReject?: (error: any) => ?Promise<U> | U\n  ): Promise<U>;\n\n  static resolve<T>(object?: Promise<T> | T): Promise<T>;\n  static reject<T>(error?: any): Promise<T>;\n\n  // Non-standard APIs\n  finally<U>(\n    onSettled?: ?(value: any) => Promise<U> | U\n  ): Promise<U>;\n\n  static cast<T>(object?: T): Promise<T>;\n  static all<T>(\n    promises: Array<?Promise<T> | T>,\n  ): Promise<Array<T>>;\n  static race<T>(promises: Array<Promise<T>>): Promise<T>;\n\n  static allObject<T: Object>(\n    promisesByKey: T\n  ): Promise<{[key: $Keys<T>]: any}>;\n}\n"
  },
  {
    "path": "tests/flow/type_param_variance2/libs/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Promise.js 1`] = `\n// Copyright 2004-present Facebook. All Rights Reserved.\n\n// These annotations are copy/pasted from the built-in Flow definitions for\n// Native Promises (https://phabricator.fb.com/P19792689),\n// with www-specific additions added in.\n\n// Any definitions here will override similarly-named ones in\n// library files declared earlier, including default flow libs.\n\ndeclare class Promise<R> {\n  constructor(callback: (\n    resolve: (result?: Promise<R> | R) => void,\n    reject: (error?: any) => void\n  ) => void): void;\n\n  then<U>(\n    onFulfill?: ?(value: R) => Promise<U> | ?U,\n    onReject?: ?(error: any) => Promise<U> | ?U\n  ): Promise<U>;\n\n  done<U>(\n    onFulfill?: ?(value: R) => void,\n    onReject?: ?(error: any) => void\n  ): void;\n\n  catch<U>(\n    onReject?: (error: any) => ?Promise<U> | U\n  ): Promise<U>;\n\n  static resolve<T>(object?: Promise<T> | T): Promise<T>;\n  static reject<T>(error?: any): Promise<T>;\n\n  // Non-standard APIs\n  finally<U>(\n    onSettled?: ?(value: any) => Promise<U> | U\n  ): Promise<U>;\n\n  static cast<T>(object?: T): Promise<T>;\n  static all<T>(\n    promises: Array<?Promise<T> | T>,\n  ): Promise<Array<T>>;\n  static race<T>(promises: Array<Promise<T>>): Promise<T>;\n\n  static allObject<T: Object>(\n    promisesByKey: T\n  ): Promise<{[key: $Keys<T>]: any}>;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Copyright 2004-present Facebook. All Rights Reserved.\n\n// These annotations are copy/pasted from the built-in Flow definitions for\n// Native Promises (https://phabricator.fb.com/P19792689),\n// with www-specific additions added in.\n\n// Any definitions here will override similarly-named ones in\n// library files declared earlier, including default flow libs.\n\ndeclare class Promise<R> {\n  constructor(\n    callback: (\n      resolve: (result?: Promise<R> | R) => void,\n      reject: (error?: any) => void\n    ) => void\n  ): void,\n\n  then<U>(\n    onFulfill?: ?(value: R) => Promise<U> | ?U,\n    onReject?: ?(error: any) => Promise<U> | ?U\n  ): Promise<U>,\n\n  done<U>(\n    onFulfill?: ?(value: R) => void,\n    onReject?: ?(error: any) => void\n  ): void,\n\n  catch<U>(onReject?: (error: any) => ?Promise<U> | U): Promise<U>,\n\n  static resolve<T>(object?: Promise<T> | T): Promise<T>,\n  static reject<T>(error?: any): Promise<T>,\n\n  // Non-standard APIs\n  finally<U>(onSettled?: ?(value: any) => Promise<U> | U): Promise<U>,\n\n  static cast<T>(object?: T): Promise<T>,\n  static all<T>(promises: Array<?Promise<T> | T>): Promise<Array<T>>,\n  static race<T>(promises: Array<Promise<T>>): Promise<T>,\n\n  static allObject<T: Object>(\n    promisesByKey: T\n  ): Promise<{ [key: $Keys<T>]: any }>\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/type_param_variance2/libs/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/type_param_variance2/promise.js",
    "content": "/**\n * Here the definition of Promise<T> is routed to the class Promise\n * in the user-specified library libs/Promise.js\n *\n * In such situations we must desugar async/await primitives\n * to the shadowed library definition.\n *\n * @flow\n */\n\nasync function foo(x: boolean): Promise<?{bar: string}> {\n  if (x) {\n    return {bar: 'baz'};  // OK, because of covariant type param\n  } else {\n    return null;\n  }\n}\n\nasync function run() {\n  console.log(await foo(true));\n  console.log(await foo(false));\n}\n\nrun()\n"
  },
  {
    "path": "tests/flow/typeapp_perf/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test1.js 1`] = `\n/* This test ensures that the code below does not take a long time to check. If\n * this test is taking a very long time to complete, there is a bug. */\n\nclass A {}\n\ntype B<T> = A & {\n  +a: () => B<T>;\n  +b: () => B<T>;\n  +c: () => B<T>;\n  +d: () => B<T>;\n  +e: () => B<T>;\n  +f: () => B<T>;\n  +g: () => B<T>;\n  +h: () => B<T>;\n  +i: () => B<T>;\n};\n\ndeclare var b: B<any>;\n\n(b: B<any>);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* This test ensures that the code below does not take a long time to check. If\n * this test is taking a very long time to complete, there is a bug. */\n\nclass A {}\n\ntype B<T> = A & {\n  +a: () => B<T>,\n  +b: () => B<T>,\n  +c: () => B<T>,\n  +d: () => B<T>,\n  +e: () => B<T>,\n  +f: () => B<T>,\n  +g: () => B<T>,\n  +h: () => B<T>,\n  +i: () => B<T>\n};\n\ndeclare var b: B<any>;\n\n(b: B<any>);\n\n`;\n\nexports[`test2.js 1`] = `\n/* This test ensures that the code below does not take a long time to check. If\n * this test is taking a very long time to complete, there is a bug. */\n\nclass A {}\n\ntype B<T> = A & {\n  +a: (x: B<T>) => void;\n  +b: (x: B<T>) => void;\n  +c: (x: B<T>) => void;\n  +d: (x: B<T>) => void;\n  +e: (x: B<T>) => void;\n  +f: (x: B<T>) => void;\n  +g: (x: B<T>) => void;\n  +h: (x: B<T>) => void;\n  +i: (x: B<T>) => void;\n};\n\ndeclare var b: B<any>;\n\n(b: B<any>);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* This test ensures that the code below does not take a long time to check. If\n * this test is taking a very long time to complete, there is a bug. */\n\nclass A {}\n\ntype B<T> = A & {\n  +a: (x: B<T>) => void,\n  +b: (x: B<T>) => void,\n  +c: (x: B<T>) => void,\n  +d: (x: B<T>) => void,\n  +e: (x: B<T>) => void,\n  +f: (x: B<T>) => void,\n  +g: (x: B<T>) => void,\n  +h: (x: B<T>) => void,\n  +i: (x: B<T>) => void\n};\n\ndeclare var b: B<any>;\n\n(b: B<any>);\n\n`;\n"
  },
  {
    "path": "tests/flow/typeapp_perf/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow/typeapp_perf/test1.js",
    "content": "/* This test ensures that the code below does not take a long time to check. If\n * this test is taking a very long time to complete, there is a bug. */\n\nclass A {}\n\ntype B<T> = A & {\n  +a: () => B<T>;\n  +b: () => B<T>;\n  +c: () => B<T>;\n  +d: () => B<T>;\n  +e: () => B<T>;\n  +f: () => B<T>;\n  +g: () => B<T>;\n  +h: () => B<T>;\n  +i: () => B<T>;\n};\n\ndeclare var b: B<any>;\n\n(b: B<any>);\n"
  },
  {
    "path": "tests/flow/typeapp_perf/test2.js",
    "content": "/* This test ensures that the code below does not take a long time to check. If\n * this test is taking a very long time to complete, there is a bug. */\n\nclass A {}\n\ntype B<T> = A & {\n  +a: (x: B<T>) => void;\n  +b: (x: B<T>) => void;\n  +c: (x: B<T>) => void;\n  +d: (x: B<T>) => void;\n  +e: (x: B<T>) => void;\n  +f: (x: B<T>) => void;\n  +g: (x: B<T>) => void;\n  +h: (x: B<T>) => void;\n  +i: (x: B<T>) => void;\n};\n\ndeclare var b: B<any>;\n\n(b: B<any>);\n"
  },
  {
    "path": "tests/flow/typecast/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`typecast.js 1`] = `\n/**\n * Copyright 2004-present Facebook. All Rights Reserved.\n */\nvar tests = [\n  () => {\n    // erroneous typcasts raise errors...\n    var n = (\"hey\" : number);\n    // ...but 'any' does dynamic downcasts, if you must\n    var x: number = (\"hey\": any);\n    var y = ((\"hey\": any): number);\n  },\n\n  () => {\n    // typecasts in sequences\n    // (parens always required around typecasts)\n    var s: string = ((0: number), (\"hey\": string));\n  },\n\n  () => {\n    // TODO pending array element inference issues\n    // control case:\n    // var a : Array<?number> = [0, 1, 2, 3, 4, 5, 6, 7, null];\n    // typecast case:\n    // var b = [(0 : ?number), 1, 2, 3, 4, 5, 6, 7, null];\n  }\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * Copyright 2004-present Facebook. All Rights Reserved.\n */\nvar tests = [\n  () => {\n    // erroneous typcasts raise errors...\n    var n = (\"hey\": number);\n    // ...but 'any' does dynamic downcasts, if you must\n    var x: number = (\"hey\": any);\n    var y = ((\"hey\": any): number);\n  },\n\n  () => {\n    // typecasts in sequences\n    // (parens always required around typecasts)\n    var s: string = ((0: number), (\"hey\": string));\n  },\n\n  () => {\n    // TODO pending array element inference issues\n    // control case:\n    // var a : Array<?number> = [0, 1, 2, 3, 4, 5, 6, 7, null];\n    // typecast case:\n    // var b = [(0 : ?number), 1, 2, 3, 4, 5, 6, 7, null];\n  }\n];\n\n`;\n"
  },
  {
    "path": "tests/flow/typecast/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/typecast/typecast.js",
    "content": "/**\n * Copyright 2004-present Facebook. All Rights Reserved.\n */\nvar tests = [\n  () => {\n    // erroneous typcasts raise errors...\n    var n = (\"hey\" : number);\n    // ...but 'any' does dynamic downcasts, if you must\n    var x: number = (\"hey\": any);\n    var y = ((\"hey\": any): number);\n  },\n\n  () => {\n    // typecasts in sequences\n    // (parens always required around typecasts)\n    var s: string = ((0: number), (\"hey\": string));\n  },\n\n  () => {\n    // TODO pending array element inference issues\n    // control case:\n    // var a : Array<?number> = [0, 1, 2, 3, 4, 5, 6, 7, null];\n    // typecast case:\n    // var b = [(0 : ?number), 1, 2, 3, 4, 5, 6, 7, null];\n  }\n];\n"
  },
  {
    "path": "tests/flow/typeof/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`typeof.js 1`] = `\n/**\n * @flow\n */\n\n//////////////////////////////////\n// == typeof <<class value>> == //\n//////////////////////////////////\n\n// MyClass1 is a runtime value, a constructor function\n//\nclass MyClass1 {\n  getNumber(): number { return 42; }\n}\n\n// a is an instance of MyClass1 - in runtime terms,\n// an object produced by the MyClass1 constructor\n// function.\n//\nvar a: MyClass1 = new MyClass1();\n\n// Following tests are errors which conflate the type\n// of the class value itself with the type of its\n// instances.\n\n// Aside: it's worth staring at the following (correct)\n// type annotations until they make sense:\n//\n//    MyClass1 : Class<MyClass1>\n//    (new MyClass1()) : MyClass1\n//\n// The first says that the MyClass1 value (constructor\n// function) has type Class<MyClass1> - the type of\n// functions which produce instances of MyClass1 when\n// called as a constructor.\n//\n// The second says that objects produced by the MyClass1\n// constructor function have type MyClass1 - the type of\n// instances of MyClass1.\n\n// Error: assign the actual MyClass1 value to a  variable\n// whose annotated type is of instances of MyClass1.\n//\nvar b: MyClass1 = MyClass1;\n\nclass MyClass2 {\n  getNumber1(): number { return 42; }\n}\n\n// The opposite error: assign an *instance* of MyClass2\n// to a variable whose annotated type is the type of\n// the class value (constructor function) MyClass2 itself.\n//\nvar c: typeof MyClass2 = new MyClass2();\n\n//////////////////////////////////////\n// == typeof <<non-class value>> == //\n//////////////////////////////////////\n\nvar numValue:number = 42;\nvar d: typeof numValue = 100;\nvar e: typeof numValue = 'asdf'; // Error: string ~> number\n\n/////////////////////////////////\n// == typeof <<type-alias>> == //\n/////////////////////////////////\n\ntype numberAlias = number;\n\n// This is an error because typeof takes a value, not\n// a type, as an argument. However, the current error\n// is suboptimal - just 'cannot resolve name'. TODO.\n//\nvar f: typeof numberAlias = 42; // Error: 'typeof <<type-alias>>' makes no sense...\n\n/**\n * Use of a non-class/non-function value in type annotation.\n * These provoke a specific error, not just the generic\n * \"type is incompatible\"\n */\n\n var Map = { \"A\": \"this is A\", \"B\": \"this is B\", \"C\": \"this is C\" };\n var keys: $Keys<Map> = \"A\";  // Error: ineligible value used in type anno\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\n//////////////////////////////////\n// == typeof <<class value>> == //\n//////////////////////////////////\n\n// MyClass1 is a runtime value, a constructor function\n//\nclass MyClass1 {\n  getNumber(): number {\n    return 42;\n  }\n}\n\n// a is an instance of MyClass1 - in runtime terms,\n// an object produced by the MyClass1 constructor\n// function.\n//\nvar a: MyClass1 = new MyClass1();\n\n// Following tests are errors which conflate the type\n// of the class value itself with the type of its\n// instances.\n\n// Aside: it's worth staring at the following (correct)\n// type annotations until they make sense:\n//\n//    MyClass1 : Class<MyClass1>\n//    (new MyClass1()) : MyClass1\n//\n// The first says that the MyClass1 value (constructor\n// function) has type Class<MyClass1> - the type of\n// functions which produce instances of MyClass1 when\n// called as a constructor.\n//\n// The second says that objects produced by the MyClass1\n// constructor function have type MyClass1 - the type of\n// instances of MyClass1.\n\n// Error: assign the actual MyClass1 value to a  variable\n// whose annotated type is of instances of MyClass1.\n//\nvar b: MyClass1 = MyClass1;\n\nclass MyClass2 {\n  getNumber1(): number {\n    return 42;\n  }\n}\n\n// The opposite error: assign an *instance* of MyClass2\n// to a variable whose annotated type is the type of\n// the class value (constructor function) MyClass2 itself.\n//\nvar c: typeof MyClass2 = new MyClass2();\n\n//////////////////////////////////////\n// == typeof <<non-class value>> == //\n//////////////////////////////////////\n\nvar numValue: number = 42;\nvar d: typeof numValue = 100;\nvar e: typeof numValue = \"asdf\"; // Error: string ~> number\n\n/////////////////////////////////\n// == typeof <<type-alias>> == //\n/////////////////////////////////\n\ntype numberAlias = number;\n\n// This is an error because typeof takes a value, not\n// a type, as an argument. However, the current error\n// is suboptimal - just 'cannot resolve name'. TODO.\n//\nvar f: typeof numberAlias = 42; // Error: 'typeof <<type-alias>>' makes no sense...\n\n/**\n * Use of a non-class/non-function value in type annotation.\n * These provoke a specific error, not just the generic\n * \"type is incompatible\"\n */\n\nvar Map = { A: \"this is A\", B: \"this is B\", C: \"this is C\" };\nvar keys: $Keys<Map> = \"A\"; // Error: ineligible value used in type anno\n\n`;\n"
  },
  {
    "path": "tests/flow/typeof/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/typeof/typeof.js",
    "content": "/**\n * @flow\n */\n\n//////////////////////////////////\n// == typeof <<class value>> == //\n//////////////////////////////////\n\n// MyClass1 is a runtime value, a constructor function\n//\nclass MyClass1 {\n  getNumber(): number { return 42; }\n}\n\n// a is an instance of MyClass1 - in runtime terms,\n// an object produced by the MyClass1 constructor\n// function.\n//\nvar a: MyClass1 = new MyClass1();\n\n// Following tests are errors which conflate the type\n// of the class value itself with the type of its\n// instances.\n\n// Aside: it's worth staring at the following (correct)\n// type annotations until they make sense:\n//\n//    MyClass1 : Class<MyClass1>\n//    (new MyClass1()) : MyClass1\n//\n// The first says that the MyClass1 value (constructor\n// function) has type Class<MyClass1> - the type of\n// functions which produce instances of MyClass1 when\n// called as a constructor.\n//\n// The second says that objects produced by the MyClass1\n// constructor function have type MyClass1 - the type of\n// instances of MyClass1.\n\n// Error: assign the actual MyClass1 value to a  variable\n// whose annotated type is of instances of MyClass1.\n//\nvar b: MyClass1 = MyClass1;\n\nclass MyClass2 {\n  getNumber1(): number { return 42; }\n}\n\n// The opposite error: assign an *instance* of MyClass2\n// to a variable whose annotated type is the type of\n// the class value (constructor function) MyClass2 itself.\n//\nvar c: typeof MyClass2 = new MyClass2();\n\n//////////////////////////////////////\n// == typeof <<non-class value>> == //\n//////////////////////////////////////\n\nvar numValue:number = 42;\nvar d: typeof numValue = 100;\nvar e: typeof numValue = 'asdf'; // Error: string ~> number\n\n/////////////////////////////////\n// == typeof <<type-alias>> == //\n/////////////////////////////////\n\ntype numberAlias = number;\n\n// This is an error because typeof takes a value, not\n// a type, as an argument. However, the current error\n// is suboptimal - just 'cannot resolve name'. TODO.\n//\nvar f: typeof numberAlias = 42; // Error: 'typeof <<type-alias>>' makes no sense...\n\n/**\n * Use of a non-class/non-function value in type annotation.\n * These provoke a specific error, not just the generic\n * \"type is incompatible\"\n */\n\n var Map = { \"A\": \"this is A\", \"B\": \"this is B\", \"C\": \"this is C\" };\n var keys: $Keys<Map> = \"A\";  // Error: ineligible value used in type anno\n"
  },
  {
    "path": "tests/flow/unary/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`unary.js 1`] = `\n/* @flow */\n\nfunction x0(y: string): number {\n  return +y; // ok, + exists solely for coercion\n}\n\nfunction x1(y: string): number {\n  return -y; // error, we don't allow coercion here\n}\n\nfunction x3(y: string) {\n  return ~y;  // error, we don't allow coercion here\n}\n\nfunction x4(y: string): boolean {\n  return !y; // ok, coercion is allowed\n}\n\n(-1: void); // error, number ~> void\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction x0(y: string): number {\n  return +y; // ok, + exists solely for coercion\n}\n\nfunction x1(y: string): number {\n  return -y; // error, we don't allow coercion here\n}\n\nfunction x3(y: string) {\n  return ~y; // error, we don't allow coercion here\n}\n\nfunction x4(y: string): boolean {\n  return !y; // ok, coercion is allowed\n}\n\n(-1: void); // error, number ~> void\n\n`;\n\nexports[`update.js 1`] = `\n// @flow\n\nlet tests = [\n  function(y: number) {\n    y++;\n    y--;\n    ++y;\n    --y;\n  },\n\n  function(y: string) {\n    y++; // error, we don't allow coercion here\n    (y: number); // ok, y is a number now\n    y++; // error, but you still can't write a number to a string\n  },\n\n  function(y: string) {\n    y--; // error, we don't allow coercion here\n  },\n\n  function(y: string) {\n    ++y; // error, we don't allow coercion here\n  },\n\n  function(y: string) {\n    --y; // error, we don't allow coercion here\n  },\n\n  function() {\n    const y = 123;\n    y++; // error, can't update const\n    y--; // error, can't update const\n  },\n\n  function(y: any) {\n    y++; // ok\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  function(y: number) {\n    y++;\n    y--;\n    ++y;\n    --y;\n  },\n\n  function(y: string) {\n    y++; // error, we don't allow coercion here\n    (y: number); // ok, y is a number now\n    y++; // error, but you still can't write a number to a string\n  },\n\n  function(y: string) {\n    y--; // error, we don't allow coercion here\n  },\n\n  function(y: string) {\n    ++y; // error, we don't allow coercion here\n  },\n\n  function(y: string) {\n    --y; // error, we don't allow coercion here\n  },\n\n  function() {\n    const y = 123;\n    y++; // error, can't update const\n    y--; // error, can't update const\n  },\n\n  function(y: any) {\n    y++; // ok\n  }\n];\n\n`;\n"
  },
  {
    "path": "tests/flow/unary/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/unary/unary.js",
    "content": "/* @flow */\n\nfunction x0(y: string): number {\n  return +y; // ok, + exists solely for coercion\n}\n\nfunction x1(y: string): number {\n  return -y; // error, we don't allow coercion here\n}\n\nfunction x3(y: string) {\n  return ~y;  // error, we don't allow coercion here\n}\n\nfunction x4(y: string): boolean {\n  return !y; // ok, coercion is allowed\n}\n\n(-1: void); // error, number ~> void\n"
  },
  {
    "path": "tests/flow/unary/update.js",
    "content": "// @flow\n\nlet tests = [\n  function(y: number) {\n    y++;\n    y--;\n    ++y;\n    --y;\n  },\n\n  function(y: string) {\n    y++; // error, we don't allow coercion here\n    (y: number); // ok, y is a number now\n    y++; // error, but you still can't write a number to a string\n  },\n\n  function(y: string) {\n    y--; // error, we don't allow coercion here\n  },\n\n  function(y: string) {\n    ++y; // error, we don't allow coercion here\n  },\n\n  function(y: string) {\n    --y; // error, we don't allow coercion here\n  },\n\n  function() {\n    const y = 123;\n    y++; // error, can't update const\n    y--; // error, can't update const\n  },\n\n  function(y: any) {\n    y++; // ok\n  },\n];\n"
  },
  {
    "path": "tests/flow/unchecked_haste_module_vs_lib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`buffer.js 1`] = `\n/**\n * @providesModule buffer\n *\n * Not in flow.\n * If this module is successfully imported/required, its\n * type will be Any, so arbitraty uses won't cause errors.\n * However, if a library module declaration is bound to\n * the same name as an unchecked module, it will be used\n * to satisfy imports/requires instead.\n */\n\nexport var INSPECT_MAX_BYTES = 0;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @providesModule buffer\n *\n * Not in flow.\n * If this module is successfully imported/required, its\n * type will be Any, so arbitraty uses won't cause errors.\n * However, if a library module declaration is bound to\n * the same name as an unchecked module, it will be used\n * to satisfy imports/requires instead.\n */\n\nexport var INSPECT_MAX_BYTES = 0;\n\n`;\n\nexports[`test.js 1`] = `\n/**\n * Copyright 2004-present Facebook. All Rights Reserved.\n * @flow\n */\n\n/* 'buffer' is the name of both an unchecked module in this directory,\n * and a module declared in library file node.js.\n * If the require below resolves to the unchecked module, the mistyping\n * that follows will cause no errors, but if we resolve to the library\n * instead, we'll get the desired error.\n */\nvar buffer = require(\"buffer\");\nvar x: string = buffer.INSPECT_MAX_BYTES; // error, number ~/> string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * Copyright 2004-present Facebook. All Rights Reserved.\n * @flow\n */\n\n/* 'buffer' is the name of both an unchecked module in this directory,\n * and a module declared in library file node.js.\n * If the require below resolves to the unchecked module, the mistyping\n * that follows will cause no errors, but if we resolve to the library\n * instead, we'll get the desired error.\n */\nvar buffer = require(\"buffer\");\nvar x: string = buffer.INSPECT_MAX_BYTES; // error, number ~/> string\n\n`;\n"
  },
  {
    "path": "tests/flow/unchecked_haste_module_vs_lib/buffer.js",
    "content": "/**\n * @providesModule buffer\n *\n * Not in flow.\n * If this module is successfully imported/required, its\n * type will be Any, so arbitraty uses won't cause errors.\n * However, if a library module declaration is bound to\n * the same name as an unchecked module, it will be used\n * to satisfy imports/requires instead.\n */\n\nexport var INSPECT_MAX_BYTES = 0;\n"
  },
  {
    "path": "tests/flow/unchecked_haste_module_vs_lib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/unchecked_haste_module_vs_lib/test.js",
    "content": "/**\n * Copyright 2004-present Facebook. All Rights Reserved.\n * @flow\n */\n\n/* 'buffer' is the name of both an unchecked module in this directory,\n * and a module declared in library file node.js.\n * If the require below resolves to the unchecked module, the mistyping\n * that follows will cause no errors, but if we resolve to the library\n * instead, we'll get the desired error.\n */\nvar buffer = require(\"buffer\");\nvar x: string = buffer.INSPECT_MAX_BYTES; // error, number ~/> string\n"
  },
  {
    "path": "tests/flow/unchecked_node_module_vs_lib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n/**\n * Test resolution precedence in node:\n * checked module > lib def > unchecked module\n *\n * @flow\n */\n\n// node_modules/buffer/index.js is unchecked,\n// so we shouldn't pick up its boolean redefinition of INSPECT_MAX_BYTES\n//\nvar buffer = require(\"buffer\");\nvar b: boolean = buffer.INSPECT_MAX_BYTES; // error, number ~/> boolean\n\n// node_modules/crypto/index.js is checked,\n// so we should pick up its boolean redefinition of DEFAULT_ENCODING\n//\nvar crypto = require(\"crypto\");\nvar b: boolean = crypto.DEFAULT_ENCODING; // no error, we've overridden\n\n// names that are explicit paths shouldn't fall back to lib defs\n//\nvar buffer2 = require(\"./buffer\");\nvar x2: string = buffer2.INSPECT_MAX_BYTES; // error, module not found\n\nvar buffer3 = require(\"./buffer.js\");\nvar x3: string = buffer3.INSPECT_MAX_BYTES; // error, module not found\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * Test resolution precedence in node:\n * checked module > lib def > unchecked module\n *\n * @flow\n */\n\n// node_modules/buffer/index.js is unchecked,\n// so we shouldn't pick up its boolean redefinition of INSPECT_MAX_BYTES\n//\nvar buffer = require(\"buffer\");\nvar b: boolean = buffer.INSPECT_MAX_BYTES; // error, number ~/> boolean\n\n// node_modules/crypto/index.js is checked,\n// so we should pick up its boolean redefinition of DEFAULT_ENCODING\n//\nvar crypto = require(\"crypto\");\nvar b: boolean = crypto.DEFAULT_ENCODING; // no error, we've overridden\n\n// names that are explicit paths shouldn't fall back to lib defs\n//\nvar buffer2 = require(\"./buffer\");\nvar x2: string = buffer2.INSPECT_MAX_BYTES; // error, module not found\n\nvar buffer3 = require(\"./buffer.js\");\nvar x3: string = buffer3.INSPECT_MAX_BYTES; // error, module not found\n\n`;\n"
  },
  {
    "path": "tests/flow/unchecked_node_module_vs_lib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/unchecked_node_module_vs_lib/test.js",
    "content": "/**\n * Test resolution precedence in node:\n * checked module > lib def > unchecked module\n *\n * @flow\n */\n\n// node_modules/buffer/index.js is unchecked,\n// so we shouldn't pick up its boolean redefinition of INSPECT_MAX_BYTES\n//\nvar buffer = require(\"buffer\");\nvar b: boolean = buffer.INSPECT_MAX_BYTES; // error, number ~/> boolean\n\n// node_modules/crypto/index.js is checked,\n// so we should pick up its boolean redefinition of DEFAULT_ENCODING\n//\nvar crypto = require(\"crypto\");\nvar b: boolean = crypto.DEFAULT_ENCODING; // no error, we've overridden\n\n// names that are explicit paths shouldn't fall back to lib defs\n//\nvar buffer2 = require(\"./buffer\");\nvar x2: string = buffer2.INSPECT_MAX_BYTES; // error, module not found\n\nvar buffer3 = require(\"./buffer.js\");\nvar x3: string = buffer3.INSPECT_MAX_BYTES; // error, module not found\n"
  },
  {
    "path": "tests/flow/undefined/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`issue-518.js 1`] = `\nfunction doSomethingAsync(): Promise<void> {\n  return new Promise((resolve, reject) => {\n    resolve(); // OK to leave out arg, same as resolve(undefined)\n\n    var anotherVoidPromise: Promise<void> = Promise.resolve();\n    resolve(anotherVoidPromise);\n  });\n}\n\n// simpler repro to show that too few args are fine when expecting void\nfunction foo(x: void) { }\nfoo();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction doSomethingAsync(): Promise<void> {\n  return new Promise((resolve, reject) => {\n    resolve(); // OK to leave out arg, same as resolve(undefined)\n\n    var anotherVoidPromise: Promise<void> = Promise.resolve();\n    resolve(anotherVoidPromise);\n  });\n}\n\n// simpler repro to show that too few args are fine when expecting void\nfunction foo(x: void) {}\nfoo();\n\n`;\n\nexports[`undefined.js 1`] = `\nfunction foo() {\n    var x;\n    x.foo();\n}\n\nfunction bar() {\n    var x:?{ bar():void; };\n    if (x) x.bar();\n}\n\nfunction qux(x?: number, y:string = \"\", z) { }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo() {\n  var x;\n  x.foo();\n}\n\nfunction bar() {\n  var x: ?{ bar(): void };\n  if (x) x.bar();\n}\n\nfunction qux(x?: number, y: string = \"\", z) {}\n\n`;\n\nexports[`undefined2.js 1`] = `\n// @flow\n\nlet tests = [\n  function(x: number) {\n    var id;\n    var name = id ? 'John' : undefined;\n    (name: boolean); // error, string or void\n\n    const bar = [\n      undefined,\n      'bar',\n    ];\n    (bar[x]: boolean); // error, string or void\n  },\n\n  function(x: number) {\n    var undefined = 'foo';\n    (undefined: string); // ok\n\n    var x;\n    if (x !== undefined) {\n      x[0]; // should error, could be void\n    }\n\n    const bar = [\n      undefined,\n      'bar',\n    ];\n    (bar[x]: boolean); // error, string only\n  },\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nlet tests = [\n  function(x: number) {\n    var id;\n    var name = id ? \"John\" : undefined;\n    (name: boolean); // error, string or void\n\n    const bar = [undefined, \"bar\"];\n    (bar[x]: boolean); // error, string or void\n  },\n\n  function(x: number) {\n    var undefined = \"foo\";\n    (undefined: string); // ok\n\n    var x;\n    if (x !== undefined) {\n      x[0]; // should error, could be void\n    }\n\n    const bar = [undefined, \"bar\"];\n    (bar[x]: boolean); // error, string only\n  }\n];\n\n`;\n"
  },
  {
    "path": "tests/flow/undefined/issue-518.js",
    "content": "function doSomethingAsync(): Promise<void> {\n  return new Promise((resolve, reject) => {\n    resolve(); // OK to leave out arg, same as resolve(undefined)\n\n    var anotherVoidPromise: Promise<void> = Promise.resolve();\n    resolve(anotherVoidPromise);\n  });\n}\n\n// simpler repro to show that too few args are fine when expecting void\nfunction foo(x: void) { }\nfoo();\n"
  },
  {
    "path": "tests/flow/undefined/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/undefined/undefined.js",
    "content": "function foo() {\n    var x;\n    x.foo();\n}\n\nfunction bar() {\n    var x:?{ bar():void; };\n    if (x) x.bar();\n}\n\nfunction qux(x?: number, y:string = \"\", z) { }\n"
  },
  {
    "path": "tests/flow/undefined/undefined2.js",
    "content": "// @flow\n\nlet tests = [\n  function(x: number) {\n    var id;\n    var name = id ? 'John' : undefined;\n    (name: boolean); // error, string or void\n\n    const bar = [\n      undefined,\n      'bar',\n    ];\n    (bar[x]: boolean); // error, string or void\n  },\n\n  function(x: number) {\n    var undefined = 'foo';\n    (undefined: string); // ok\n\n    var x;\n    if (x !== undefined) {\n      x[0]; // should error, could be void\n    }\n\n    const bar = [\n      undefined,\n      'bar',\n    ];\n    (bar[x]: boolean); // error, string only\n  },\n];\n"
  },
  {
    "path": "tests/flow/unicode/UnicodeUtils.js",
    "content": "/**\n * @flow\n */\n\n/**\n * @param {number} codeUnit   A Unicode code-unit, in range [0, 0x10FFFF]\n * @return {boolean}      Whether code-unit is in a surrogate (hi/low) range\n */\nfunction inSurrogateRange(codeUnit) {\n  return 0xD800 <= codeUnit && codeUnit <= 0xDFFF;\n}\n\n\n/**\n * Return the length of the original Unicode character at given position in the\n * String by looking into the UTF-16 code unit; that is equal to 1 for any\n * non-surrogate characters in BMP ([U+0000..U+D7FF] and [U+E000, U+FFFF]); and\n * returns 2 for the hi/low surrogates ([U+D800..U+DFFF]), which are in fact\n * representing non-BMP characters ([U+10000..U+10FFFF]).\n *\n * Examples:\n * - '\\u0020' => 1\n * - '\\u3020' => 1\n * - '\\uD835' => 2\n * - '\\uD835\\uDDEF' => 2\n * - '\\uDDEF' => 2\n *\n * @param {string} str  Non-empty string\n * @param {number} pos  Position in the string to look for one code unit\n * @return {number}      Number 1 or 2\n */\nfunction utf16Length(str, pos) {\n  return 1 + inSurrogateRange(str.charCodeAt(pos));\n}\n"
  },
  {
    "path": "tests/flow/unicode/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`UnicodeUtils.js 1`] = `\n/**\n * @flow\n */\n\n/**\n * @param {number} codeUnit   A Unicode code-unit, in range [0, 0x10FFFF]\n * @return {boolean}      Whether code-unit is in a surrogate (hi/low) range\n */\nfunction inSurrogateRange(codeUnit) {\n  return 0xD800 <= codeUnit && codeUnit <= 0xDFFF;\n}\n\n\n/**\n * Return the length of the original Unicode character at given position in the\n * String by looking into the UTF-16 code unit; that is equal to 1 for any\n * non-surrogate characters in BMP ([U+0000..U+D7FF] and [U+E000, U+FFFF]); and\n * returns 2 for the hi/low surrogates ([U+D800..U+DFFF]), which are in fact\n * representing non-BMP characters ([U+10000..U+10FFFF]).\n *\n * Examples:\n * - '\\\\u0020' => 1\n * - '\\\\u3020' => 1\n * - '\\\\uD835' => 2\n * - '\\\\uD835\\\\uDDEF' => 2\n * - '\\\\uDDEF' => 2\n *\n * @param {string} str  Non-empty string\n * @param {number} pos  Position in the string to look for one code unit\n * @return {number}      Number 1 or 2\n */\nfunction utf16Length(str, pos) {\n  return 1 + inSurrogateRange(str.charCodeAt(pos));\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\n/**\n * @param {number} codeUnit   A Unicode code-unit, in range [0, 0x10FFFF]\n * @return {boolean}      Whether code-unit is in a surrogate (hi/low) range\n */\nfunction inSurrogateRange(codeUnit) {\n  return 0xd800 <= codeUnit && codeUnit <= 0xdfff;\n}\n\n/**\n * Return the length of the original Unicode character at given position in the\n * String by looking into the UTF-16 code unit; that is equal to 1 for any\n * non-surrogate characters in BMP ([U+0000..U+D7FF] and [U+E000, U+FFFF]); and\n * returns 2 for the hi/low surrogates ([U+D800..U+DFFF]), which are in fact\n * representing non-BMP characters ([U+10000..U+10FFFF]).\n *\n * Examples:\n * - '\\\\u0020' => 1\n * - '\\\\u3020' => 1\n * - '\\\\uD835' => 2\n * - '\\\\uD835\\\\uDDEF' => 2\n * - '\\\\uDDEF' => 2\n *\n * @param {string} str  Non-empty string\n * @param {number} pos  Position in the string to look for one code unit\n * @return {number}      Number 1 or 2\n */\nfunction utf16Length(str, pos) {\n  return 1 + inSurrogateRange(str.charCodeAt(pos));\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/unicode/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/union/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`blowup.js 1`] = `\n// @flow\n\nexport type Select = {\n  expression: ArithmeticExpression;\n  alias: ?string;\n}\n\nexport class Query {\n  _select: Array<Select> = [];\n\n  select(expr: ArithmeticExpression): this {\n    this._select.push ({\n      expression: expr,\n      alias: '',\n    });\n    return this;\n  }\n}\n\nexport class BinaryExpression<T: ArithmeticExpression, U: ArithmeticExpression> {\n}\n\nexport type ArithmeticExpression = PlusOp | MinusOp | MulOp | DivOp | ModOp;\n\nexport class PlusOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression> {\n\n}\n\nexport class MinusOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression> {\n\n}\n\nexport class MulOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression> {\n\n}\n\nexport class DivOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression> {\n\n}\n\nexport class ModOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression> {\n\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\nexport type Select = {\n  expression: ArithmeticExpression,\n  alias: ?string\n};\n\nexport class Query {\n  _select: Array<Select> = [];\n\n  select(expr: ArithmeticExpression): this {\n    this._select.push({\n      expression: expr,\n      alias: \"\"\n    });\n    return this;\n  }\n}\n\nexport class BinaryExpression<\n  T: ArithmeticExpression,\n  U: ArithmeticExpression\n> {}\n\nexport type ArithmeticExpression = PlusOp | MinusOp | MulOp | DivOp | ModOp;\n\nexport class PlusOp extends BinaryExpression<\n  ArithmeticExpression,\n  ArithmeticExpression\n> {}\n\nexport class MinusOp extends BinaryExpression<\n  ArithmeticExpression,\n  ArithmeticExpression\n> {}\n\nexport class MulOp extends BinaryExpression<\n  ArithmeticExpression,\n  ArithmeticExpression\n> {}\n\nexport class DivOp extends BinaryExpression<\n  ArithmeticExpression,\n  ArithmeticExpression\n> {}\n\nexport class ModOp extends BinaryExpression<\n  ArithmeticExpression,\n  ArithmeticExpression\n> {}\n\n`;\n\nexports[`fields.js 1`] = `\nclass C {\n    x: ?number|string;\n    constructor() {\n        this.x = null;\n    }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {\n  x: ?number | string;\n  constructor() {\n    this.x = null;\n  }\n}\n\n`;\n\nexports[`fields2.js 1`] = `\nclass C { }\n\nclass D {\n    content: string|C;\n    copyContent(content: C): string|C {\n        this.content = content;\n        return this.content;\n    }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {}\n\nclass D {\n  content: string | C;\n  copyContent(content: C): string | C {\n    this.content = content;\n    return this.content;\n  }\n}\n\n`;\n\nexports[`issue-17.js 1`] = `\n/* @flow */\n\ntype T =\n    {type: \"a\"; a: number} |\n    {type: \"b\"; b: string};\n\nvar l: Array<T> = [\n    {type: \"a\", a: 1},\n    {type: \"a\", a: 2},\n    {type: \"a\", a: 3},\n    {type: \"a\", a: 4},\n    {type: \"b\", b: \"monkey\"},\n    {type: \"b\", b: \"gorilla\"},\n    {type: \"b\", b: \"giraffe\"},\n    {type: \"b\", b: \"penguin\"},\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\ntype T = { type: \"a\", a: number } | { type: \"b\", b: string };\n\nvar l: Array<T> = [\n  { type: \"a\", a: 1 },\n  { type: \"a\", a: 2 },\n  { type: \"a\", a: 3 },\n  { type: \"a\", a: 4 },\n  { type: \"b\", b: \"monkey\" },\n  { type: \"b\", b: \"gorilla\" },\n  { type: \"b\", b: \"giraffe\" },\n  { type: \"b\", b: \"penguin\" }\n];\n\n`;\n\nexports[`issue-198.js 1`] = `\nvar p = new Promise(function(resolve, reject) {\n    resolve(5);\n})\n    .then(function(num) {\n        return num.toFixed();\n    })\n    .then(function(str) {\n        // This should fail because str is string, not number\n        return str.toFixed();\n    });\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar p = new Promise(function(resolve, reject) {\n  resolve(5);\n})\n  .then(function(num) {\n    return num.toFixed();\n  })\n  .then(function(str) {\n    // This should fail because str is string, not number\n    return str.toFixed();\n  });\n\n`;\n\nexports[`issue-256.js 1`] = `\ndeclare class Myclass {\n    myfun(myarray: Array<Function | string>): any;\n}\ndeclare var myclass: Myclass;\n\nmyclass.myfun([\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", function (ar) {}])\nmyclass.myfun([\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", function (ar) {}])\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class Myclass {\n  myfun(myarray: Array<Function | string>): any\n}\ndeclare var myclass: Myclass;\n\nmyclass.myfun([\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", function(ar) {}]);\nmyclass.myfun([\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", function(ar) {}]);\n\n`;\n\nexports[`issue-323.js 1`] = `\nvar Foo = require(\"./issue-323-lib\");\nvar foo = new Foo();\nvar foostr: Foo | string = foo;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar Foo = require(\"./issue-323-lib\");\nvar foo = new Foo();\nvar foostr: Foo | string = foo;\n\n`;\n\nexports[`issue-323-lib.js 1`] = `\n/* @flow */\nclass Foo {}\nmodule.exports = Foo;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nclass Foo {}\nmodule.exports = Foo;\n\n`;\n\nexports[`issue-324.js 1`] = `\n/* @flow */\nclass Foo{};\nclass Bar{};\n\nvar foostr: Foo | string = new Foo();\nvar barstr: Bar | string = new Bar();\n\nfoostr = barstr;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nclass Foo {}\nclass Bar {}\n\nvar foostr: Foo | string = new Foo();\nvar barstr: Bar | string = new Bar();\n\nfoostr = barstr;\n\n`;\n\nexports[`issue-325.js 1`] = `\nclass Tag {\n    constructor() {\n        var a1: Array<Tag|string> = [];\n        var a2: Array<Tag|string> = a1;\n    }\n}\n\ntype Node = Tag_ | string;\nclass Tag_ {\n    constructor() {\n        var a1: Array<Node> = [new Tag_];\n        var a2: Array<Node> = a1;\n    }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass Tag {\n  constructor() {\n    var a1: Array<Tag | string> = [];\n    var a2: Array<Tag | string> = a1;\n  }\n}\n\ntype Node = Tag_ | string;\nclass Tag_ {\n  constructor() {\n    var a1: Array<Node> = [new Tag_()];\n    var a2: Array<Node> = a1;\n  }\n}\n\n`;\n\nexports[`issue-326.js 1`] = `\nvar numberAndStringArr:Array<number|string> = [1,2];\nvar stringArr:Array<string> = ['a','b'];\n\nvar result = numberAndStringArr.concat(stringArr);  // no error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar numberAndStringArr: Array<number | string> = [1, 2];\nvar stringArr: Array<string> = [\"a\", \"b\"];\n\nvar result = numberAndStringArr.concat(stringArr); // no error\n\n`;\n\nexports[`issue-582.js 1`] = `\n/***\n * nested unions\n * @flow\n */\n\n// inline\nvar nested1: ('foo' | 'bar') | 'baz' = 'baz';\n\n// through tvars\ntype FooBar = 'foo' | 'bar';\ntype Baz = 'baz';\ntype FooBarBaz = FooBar | Baz;\n\nvar nested2: FooBarBaz = 'baz';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/***\n * nested unions\n * @flow\n */\n\n// inline\nvar nested1: (\"foo\" | \"bar\") | \"baz\" = \"baz\";\n\n// through tvars\ntype FooBar = \"foo\" | \"bar\";\ntype Baz = \"baz\";\ntype FooBarBaz = FooBar | Baz;\n\nvar nested2: FooBarBaz = \"baz\";\n\n`;\n\nexports[`issue-963.js 1`] = `\n/***\n * unions with embedded intersections\n * @flow\n */\n\ntype t1 = {\n    p1 : number\n};\n\ntype t2 = {\n    p2: number\n}\n\ntype t3 = {\n    p3 : number\n}\n\ntype intersected = t1 & t2;\ntype union = intersected | t3;\ntype union2 = t3 | intersected;\n\nconst u1 : union = {\n    p3 : 3\n};\n\nconst u2 : union = {\n    p1 : 1,\n    p2 : 2\n};\n\nconst u3 : union2 = {\n    p1 : 1,\n    p2 : 2\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/***\n * unions with embedded intersections\n * @flow\n */\n\ntype t1 = {\n  p1: number\n};\n\ntype t2 = {\n  p2: number\n};\n\ntype t3 = {\n  p3: number\n};\n\ntype intersected = t1 & t2;\ntype union = intersected | t3;\ntype union2 = t3 | intersected;\n\nconst u1: union = {\n  p3: 3\n};\n\nconst u2: union = {\n  p1: 1,\n  p2: 2\n};\n\nconst u3: union2 = {\n  p1: 1,\n  p2: 2\n};\n\n`;\n\nexports[`test.js 1`] = `\nvar C = require('test-lib');\n\n// TODO: spurious error! (replacing C with number makes the error go away)\n// type Foo<X> = Array<C> | Array<?C>;\ntype Foo<X:?C> = Array<X>; // workaround\nvar x:Array<C> = [];\nvar y:Array<?C> = [];\nfunction foo<X>(x:Foo<X>) {}\nfoo(x);\nfoo(y);\n\n// TODO: spurious error! (replacing C with number makes the error go away)\n// type Bar = (() => C) | (() => string);\ntype Bar = () => (C | string); // workaround\n\nfunction f() { return \"\"; }\nfunction bar(x:Bar) { }\nbar(f);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar C = require(\"test-lib\");\n\n// TODO: spurious error! (replacing C with number makes the error go away)\n// type Foo<X> = Array<C> | Array<?C>;\ntype Foo<X: ?C> = Array<X>; // workaround\nvar x: Array<C> = [];\nvar y: Array<?C> = [];\nfunction foo<X>(x: Foo<X>) {}\nfoo(x);\nfoo(y);\n\n// TODO: spurious error! (replacing C with number makes the error go away)\n// type Bar = (() => C) | (() => string);\ntype Bar = () => C | string; // workaround\n\nfunction f() {\n  return \"\";\n}\nfunction bar(x: Bar) {}\nbar(f);\n\n`;\n\nexports[`test-lib.js 1`] = `\n/* @providesModule test-lib */\n\nclass C { }\nmodule.exports = C;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule test-lib */\n\nclass C {}\nmodule.exports = C;\n\n`;\n\nexports[`type-app.js 1`] = `\n/**\n * @flow\n */\n\nclass LocalClass<T> {}\n\nvar a: LocalClass<number> | number = 123;\n\n// Iterator is defined in a lib file, so the speculative algorithm for the\n// union type would incorrectly succeed for Iterator<number>. Only later during\n// the merge would we fine the error, but it would be too late. The diff that\n// introduces this test fixes this such that the speculative algorithm is\n// correctly delayed upon encountering a non-concrete TypeAppT\nvar b: Iterator<number> | number = 123;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nclass LocalClass<T> {}\n\nvar a: LocalClass<number> | number = 123;\n\n// Iterator is defined in a lib file, so the speculative algorithm for the\n// union type would incorrectly succeed for Iterator<number>. Only later during\n// the merge would we fine the error, but it would be too late. The diff that\n// introduces this test fixes this such that the speculative algorithm is\n// correctly delayed upon encountering a non-concrete TypeAppT\nvar b: Iterator<number> | number = 123;\n\n`;\n\nexports[`union.js 1`] = `\nfunction bar(x: Document | string): void { }\nbar(0);\n\nclass C { }\nclass D { }\nfunction CD(b) {\n  var E = b? C: D;\n  var c:C = new E(); // error, since E could be D, and D is not a subtype of C\n  function qux(e: E) { } // this annotation is an error: is it C, or is it D?\n  function qux2(e: C | D) { } // OK\n  qux2(new C);\n}\n\ndeclare class F {\n    foo(x: number):void;\n    foo(x: string):void;\n}\nfunction corge(b) {\n    var x = b ? \"\" : 0;\n    new F().foo(x);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction bar(x: Document | string): void {}\nbar(0);\n\nclass C {}\nclass D {}\nfunction CD(b) {\n  var E = b ? C : D;\n  var c: C = new E(); // error, since E could be D, and D is not a subtype of C\n  function qux(e: E) {} // this annotation is an error: is it C, or is it D?\n  function qux2(e: C | D) {} // OK\n  qux2(new C());\n}\n\ndeclare class F {\n  foo(x: number): void,\n  foo(x: string): void\n}\nfunction corge(b) {\n  var x = b ? \"\" : 0;\n  new F().foo(x);\n}\n\n`;\n\nexports[`yuge.js 1`] = `\n/**\n * great big union used as type annotation will be flowed into itself.\n * List.mem check avoids pathology, as long as singletons aren't converted.\n * This is a band-aid, though: see second case.\n * @flow\n */\n'use strict';\n\nclass SecurityCheckupTypedLogger {\n  _data: Data;\n\n  setError(value: ErrorCode) {\n    this._data['error'] = value;\n  }\n\n  // Bug: right now, any incompatible type coming into a huge\n  // union might blow the recursion limit.\n  // TODO real solution is to specialize union reps for obvious cases,\n  // e.g. (base type, list in decl order, set). Of course we could do\n  // something quick to get the union size off the Ocaml call stack,\n  // but not sure it's worth doing that before the real solution.\n  ohThatsNotSoGood() {\n    (\"\": ErrorCode);  // also, error pos omits this line completely\n  }\n}\n\ntype ErrorCode =\n0 |\n1 |\n2 |\n3 |\n4 |\n5 |\n6 |\n7 |\n8 |\n9 |\n10 |\n11 |\n12 |\n13 |\n14 |\n15 |\n16 |\n17 |\n18 |\n19 |\n20 |\n21 |\n22 |\n23 |\n24 |\n25 |\n26 |\n27 |\n28 |\n29 |\n30 |\n31 |\n32 |\n33 |\n34 |\n35 |\n36 |\n37 |\n38 |\n39 |\n40 |\n41 |\n42 |\n43 |\n44 |\n45 |\n46 |\n47 |\n48 |\n49 |\n50 |\n51 |\n52 |\n53 |\n54 |\n55 |\n56 |\n57 |\n58 |\n59 |\n60 |\n61 |\n62 |\n63 |\n64 |\n65 |\n66 |\n67 |\n68 |\n69 |\n70 |\n71 |\n72 |\n73 |\n74 |\n75 |\n76 |\n77 |\n78 |\n79 |\n80 |\n81 |\n82 |\n83 |\n84 |\n85 |\n86 |\n87 |\n88 |\n89 |\n90 |\n91 |\n92 |\n93 |\n94 |\n95 |\n96 |\n97 |\n98 |\n99 |\n100 |\n101 |\n102 |\n103 |\n104 |\n105 |\n106 |\n107 |\n108 |\n109 |\n110 |\n111 |\n112 |\n113 |\n114 |\n115 |\n116 |\n117 |\n118 |\n119 |\n120 |\n121 |\n122 |\n123 |\n124 |\n125 |\n126 |\n127 |\n128 |\n129 |\n130 |\n131 |\n132 |\n133 |\n134 |\n135 |\n136 |\n137 |\n138 |\n139 |\n140 |\n141 |\n142 |\n143 |\n144 |\n145 |\n146 |\n147 |\n148 |\n149 |\n150 |\n151 |\n152 |\n153 |\n154 |\n155 |\n156 |\n157 |\n158 |\n159 |\n160 |\n161 |\n162 |\n163 |\n164 |\n165 |\n166 |\n167 |\n168 |\n169 |\n170 |\n171 |\n172 |\n173 |\n174 |\n175 |\n176 |\n177 |\n178 |\n179 |\n180 |\n181 |\n182 |\n183 |\n184 |\n185 |\n186 |\n187 |\n188 |\n189 |\n190 |\n191 |\n192 |\n193 |\n194 |\n195 |\n196 |\n197 |\n198 |\n199 |\n200 |\n201 |\n202 |\n203 |\n204 |\n205 |\n206 |\n207 |\n208 |\n209 |\n210 |\n211 |\n212 |\n213 |\n214 |\n215 |\n216 |\n217 |\n218 |\n219 |\n220 |\n221 |\n222 |\n223 |\n224 |\n225 |\n226 |\n227 |\n228 |\n229 |\n230 |\n231 |\n232 |\n233 |\n234 |\n235 |\n236 |\n237 |\n238 |\n239 |\n240 |\n241 |\n242 |\n243 |\n244 |\n245 |\n246 |\n247 |\n248 |\n249 |\n250 |\n251 |\n252 |\n253 |\n254 |\n255 |\n256 |\n257 |\n258 |\n259 |\n260 |\n261 |\n262 |\n263 |\n264 |\n265 |\n266 |\n267 |\n268 |\n269 |\n270 |\n271 |\n272 |\n273 |\n274 |\n275 |\n276 |\n277 |\n278 |\n279 |\n280 |\n281 |\n282 |\n283 |\n284 |\n285 |\n286 |\n287 |\n288 |\n289 |\n290 |\n291 |\n292 |\n293 |\n294 |\n295 |\n296 |\n297 |\n298 |\n299 |\n300 |\n301 |\n302 |\n303 |\n304 |\n305 |\n306 |\n307 |\n308 |\n309 |\n310 |\n311 |\n312 |\n313 |\n314 |\n315 |\n316 |\n317 |\n318 |\n319 |\n320 |\n321 |\n322 |\n323 |\n324 |\n325 |\n326 |\n327 |\n328 |\n329 |\n330 |\n331 |\n332 |\n333 |\n334 |\n335 |\n336 |\n337 |\n338 |\n339 |\n340 |\n341 |\n342 |\n343 |\n344 |\n345 |\n346 |\n347 |\n348 |\n349 |\n350 |\n351 |\n352 |\n353 |\n354 |\n355 |\n356 |\n357 |\n358 |\n359 |\n360 |\n361 |\n362 |\n363 |\n364 |\n365 |\n366 |\n367 |\n368 |\n369 |\n370 |\n371 |\n372 |\n373 |\n374 |\n375 |\n376 |\n377 |\n378 |\n379 |\n380 |\n381 |\n382 |\n383 |\n384 |\n385 |\n386 |\n387 |\n388 |\n389 |\n390 |\n391 |\n392 |\n393 |\n394 |\n395 |\n396 |\n397 |\n398 |\n399 |\n400 |\n401 |\n402 |\n403 |\n404 |\n405 |\n406 |\n407 |\n408 |\n409 |\n410 |\n411 |\n412 |\n413 |\n414 |\n415 |\n416 |\n417 |\n418 |\n419 |\n420 |\n421 |\n422 |\n423 |\n424 |\n425 |\n426 |\n427 |\n428 |\n429 |\n430 |\n431 |\n432 |\n433 |\n434 |\n435 |\n436 |\n437 |\n438 |\n439 |\n440 |\n441 |\n442 |\n443 |\n444 |\n445 |\n446 |\n447 |\n448 |\n449 |\n450 |\n451 |\n452 |\n453 |\n454 |\n455 |\n456 |\n457 |\n458 |\n459 |\n460 |\n461 |\n462 |\n463 |\n464 |\n465 |\n466 |\n467 |\n468 |\n469 |\n470 |\n471 |\n472 |\n473 |\n474 |\n475 |\n476 |\n477 |\n478 |\n479 |\n480 |\n481 |\n482 |\n483 |\n484 |\n485 |\n486 |\n487 |\n488 |\n489 |\n490 |\n491 |\n492 |\n493 |\n494 |\n495 |\n496 |\n497 |\n498 |\n499 |\n500 |\n501 |\n502 |\n503 |\n504 |\n505 |\n506 |\n507 |\n508 |\n509 |\n510 |\n511 |\n512 |\n513 |\n514 |\n515 |\n516 |\n517 |\n518 |\n519 |\n520 |\n521 |\n522 |\n523 |\n524 |\n525 |\n526 |\n527 |\n528 |\n529 |\n530 |\n531 |\n532 |\n533 |\n534 |\n535 |\n536 |\n537 |\n538 |\n539 |\n540 |\n541 |\n542 |\n543 |\n544 |\n545 |\n546 |\n547 |\n548 |\n549 |\n550 |\n551 |\n552 |\n553 |\n554 |\n555 |\n556 |\n557 |\n558 |\n559 |\n560 |\n561 |\n562 |\n563 |\n564 |\n565 |\n566 |\n567 |\n568 |\n569 |\n570 |\n571 |\n572 |\n573 |\n574 |\n575 |\n576 |\n577 |\n578 |\n579 |\n580 |\n581 |\n582 |\n583 |\n584 |\n585 |\n586 |\n587 |\n588 |\n589 |\n590 |\n591 |\n592 |\n593 |\n594 |\n595 |\n596 |\n597 |\n598 |\n599 |\n600 |\n601 |\n602 |\n603 |\n604 |\n605 |\n606 |\n607 |\n608 |\n609 |\n610 |\n611 |\n612 |\n613 |\n614 |\n615 |\n616 |\n617 |\n618 |\n619 |\n620 |\n621 |\n622 |\n623 |\n624 |\n625 |\n626 |\n627 |\n628 |\n629 |\n630 |\n631 |\n632 |\n633 |\n634 |\n635 |\n636 |\n637 |\n638 |\n639 |\n640 |\n641 |\n642 |\n643 |\n644 |\n645 |\n646 |\n647 |\n648 |\n649 |\n650 |\n651 |\n652 |\n653 |\n654 |\n655 |\n656 |\n657 |\n658 |\n659 |\n660 |\n661 |\n662 |\n663 |\n664 |\n665 |\n666 |\n667 |\n668 |\n669 |\n670 |\n671 |\n672 |\n673 |\n674 |\n675 |\n676 |\n677 |\n678 |\n679 |\n680 |\n681 |\n682 |\n683 |\n684 |\n685 |\n686 |\n687 |\n688 |\n689 |\n690 |\n691 |\n692 |\n693 |\n694 |\n695 |\n696 |\n697 |\n698 |\n699 |\n700 |\n701 |\n702 |\n703 |\n704 |\n705 |\n706 |\n707 |\n708 |\n709 |\n710 |\n711 |\n712 |\n713 |\n714 |\n715 |\n716 |\n717 |\n718 |\n719 |\n720 |\n721 |\n722 |\n723 |\n724 |\n725 |\n726 |\n727 |\n728 |\n729 |\n730 |\n731 |\n732 |\n733 |\n734 |\n735 |\n736 |\n737 |\n738 |\n739 |\n740 |\n741 |\n742 |\n743 |\n744 |\n745 |\n746 |\n747 |\n748 |\n749 |\n750 |\n751 |\n752 |\n753 |\n754 |\n755 |\n756 |\n757 |\n758 |\n759 |\n760 |\n761 |\n762 |\n763 |\n764 |\n765 |\n766 |\n767 |\n768 |\n769 |\n770 |\n771 |\n772 |\n773 |\n774 |\n775 |\n776 |\n777 |\n778 |\n779 |\n780 |\n781 |\n782 |\n783 |\n784 |\n785 |\n786 |\n787 |\n788 |\n789 |\n790 |\n791 |\n792 |\n793 |\n794 |\n795 |\n796 |\n797 |\n798 |\n799 |\n800 |\n801 |\n802 |\n803 |\n804 |\n805 |\n806 |\n807 |\n808 |\n809 |\n810 |\n811 |\n812 |\n813 |\n814 |\n815 |\n816 |\n817 |\n818 |\n819 |\n820 |\n821 |\n822 |\n823 |\n824 |\n825 |\n826 |\n827 |\n828 |\n829 |\n830 |\n831 |\n832 |\n833 |\n834 |\n835 |\n836 |\n837 |\n838 |\n839 |\n840 |\n841 |\n842 |\n843 |\n844 |\n845 |\n846 |\n847 |\n848 |\n849 |\n850 |\n851 |\n852 |\n853 |\n854 |\n855 |\n856 |\n857 |\n858 |\n859 |\n860 |\n861 |\n862 |\n863 |\n864 |\n865 |\n866 |\n867 |\n868 |\n869 |\n870 |\n871 |\n872 |\n873 |\n874 |\n875 |\n876 |\n877 |\n878 |\n879 |\n880 |\n881 |\n882 |\n883 |\n884 |\n885 |\n886 |\n887 |\n888 |\n889 |\n890 |\n891 |\n892 |\n893 |\n894 |\n895 |\n896 |\n897 |\n898 |\n899 |\n900 |\n901 |\n902 |\n903 |\n904 |\n905 |\n906 |\n907 |\n908 |\n909 |\n910 |\n911 |\n912 |\n913 |\n914 |\n915 |\n916 |\n917 |\n918 |\n919 |\n920 |\n921 |\n922 |\n923 |\n924 |\n925 |\n926 |\n927 |\n928 |\n929 |\n930 |\n931 |\n932 |\n933 |\n934 |\n935 |\n936 |\n937 |\n938 |\n939 |\n940 |\n941 |\n942 |\n943 |\n944 |\n945 |\n946 |\n947 |\n948 |\n949 |\n950 |\n951 |\n952 |\n953 |\n954 |\n955 |\n956 |\n957 |\n958 |\n959 |\n960 |\n961 |\n962 |\n963 |\n964 |\n965 |\n966 |\n967 |\n968 |\n969 |\n970 |\n971 |\n972 |\n973 |\n974 |\n975 |\n976 |\n977 |\n978 |\n979 |\n980 |\n981 |\n982 |\n983 |\n984 |\n985 |\n986 |\n987 |\n988 |\n989 |\n990 |\n991 |\n992 |\n993 |\n994 |\n995 |\n996 |\n997 |\n998 |\n999 |\n1000 |\n1001 |\n1002 |\n1003 |\n1004 |\n1005 |\n1006 |\n1007 |\n1008 |\n1009 |\n1010 |\n1011 |\n1012 |\n1013 |\n1014 |\n1015 |\n1016 |\n1017 |\n1018 |\n1019 |\n1020 |\n1021 |\n1022 |\n1023 |\n1024 |\n1025 |\n1026 |\n1027 |\n1028 |\n1029 |\n1030 |\n1031 |\n1032 |\n1033 |\n1034 |\n1035 |\n1036 |\n1037 |\n1038 |\n1039 |\n1040 |\n1041 |\n1042 |\n1043 |\n1044 |\n1045 |\n1046 |\n1047 |\n1048 |\n1049 |\n1050 |\n1051 |\n1052 |\n1053 |\n1054 |\n1055 |\n1056 |\n1057 |\n1058 |\n1059 |\n1060 |\n1061 |\n1062 |\n1063 |\n1064 |\n1065 |\n1066 |\n1067 |\n1068 |\n1069 |\n1070 |\n1071 |\n1072 |\n1073 |\n1074 |\n1075 |\n1076 |\n1077 |\n1078 |\n1079 |\n1080 |\n1081 |\n1082 |\n1083 |\n1084 |\n1085 |\n1086 |\n1087 |\n1088 |\n1089 |\n1090 |\n1091 |\n1092 |\n1093 |\n1094 |\n1095 |\n1096 |\n1097 |\n1098 |\n1099 |\n1100 |\n1101 |\n1102 |\n1103 |\n1104 |\n1105 |\n1106 |\n1107 |\n1108 |\n1109 |\n1110 |\n1111 |\n1112 |\n1113 |\n1114 |\n1115 |\n1116 |\n1117 |\n1118 |\n1119 |\n1120 |\n1121 |\n1122 |\n1123 |\n1124 |\n1125 |\n1126 |\n1127 |\n1128 |\n1129 |\n1130 |\n1131 |\n1132 |\n1133 |\n1134 |\n1135 |\n1136 |\n1137 |\n1138 |\n1139 |\n1140 |\n1141 |\n1142 |\n1143 |\n1144 |\n1145 |\n1146 |\n1147 |\n1148 |\n1149 |\n1150 |\n1151 |\n1152 |\n1153 |\n1154 |\n1155 |\n1156 |\n1157 |\n1158 |\n1159 |\n1160 |\n1161 |\n1162 |\n1163 |\n1164 |\n1165 |\n1166 |\n1167 |\n1168 |\n1169 |\n1170 |\n1171 |\n1172 |\n1173 |\n1174 |\n1175 |\n1176 |\n1177 |\n1178 |\n1179 |\n1180 |\n1181 |\n1182 |\n1183 |\n1184 |\n1185 |\n1186 |\n1187 |\n1188 |\n1189 |\n1190 |\n1191 |\n1192 |\n1193 |\n1194 |\n1195 |\n1196 |\n1197 |\n1198 |\n1199 |\n1200 |\n1201 |\n1202 |\n1203 |\n1204 |\n1205 |\n1206 |\n1207 |\n1208 |\n1209 |\n1210 |\n1211 |\n1212 |\n1213 |\n1214 |\n1215 |\n1216 |\n1217 |\n1218 |\n1219 |\n1220 |\n1221 |\n1222 |\n1223 |\n1224 |\n1225 |\n1226 |\n1227 |\n1228 |\n1229 |\n1230 |\n1231 |\n1232 |\n1233 |\n1234 |\n1235 |\n1236 |\n1237 |\n1238 |\n1239 |\n1240 |\n1241 |\n1242 |\n1243 |\n1244 |\n1245 |\n1246 |\n1247 |\n1248 |\n1249 |\n1250 |\n1251 |\n1252 |\n1253 |\n1254 |\n1255 |\n1256 |\n1257 |\n1258 |\n1259 |\n1260 |\n1261 |\n1262 |\n1263 |\n1264 |\n1265 |\n1266 |\n1267 |\n1268 |\n1269 |\n1270 |\n1271 |\n1272 |\n1273 |\n1274 |\n1275 |\n1276 |\n1277 |\n1278 |\n1279 |\n1280 |\n1281 |\n1282 |\n1283 |\n1284 |\n1285 |\n1286 |\n1287 |\n1288 |\n1289 |\n1290 |\n1291 |\n1292 |\n1293 |\n1294 |\n1295 |\n1296 |\n1297 |\n1298 |\n1299 |\n1300 |\n1301 |\n1302 |\n1303 |\n1304 |\n1305 |\n1306 |\n1307 |\n1308 |\n1309 |\n1310 |\n1311 |\n1312 |\n1313 |\n1314 |\n1315 |\n1316 |\n1317 |\n1318 |\n1319 |\n1320 |\n1321 |\n1322 |\n1323 |\n1324 |\n1325 |\n1326 |\n1327 |\n1328 |\n1329 |\n1330 |\n1331 |\n1332 |\n1333 |\n1334 |\n1335 |\n1336 |\n1337 |\n1338 |\n1339 |\n1340 |\n1341 |\n1342 |\n1343 |\n1344 |\n1345 |\n1346 |\n1347 |\n1348 |\n1349 |\n1350 |\n1351 |\n1352 |\n1353 |\n1354 |\n1355 |\n1356 |\n1357 |\n1358 |\n1359 |\n1360 |\n1361 |\n1362 |\n1363 |\n1364 |\n1365 |\n1366 |\n1367 |\n1368 |\n1369 |\n1370 |\n1371 |\n1372 |\n1373 |\n1374 |\n1375 |\n1376 |\n1377 |\n1378 |\n1379 |\n1380 |\n1381 |\n1382 |\n1383 |\n1384 |\n1385 |\n1386 |\n1387 |\n1388 |\n1389 |\n1390 |\n1391 |\n1392 |\n1393 |\n1394 |\n1395 |\n1396 |\n1397 |\n1398 |\n1399 |\n1400 |\n1401 |\n1402 |\n1403 |\n1404 |\n1405 |\n1406 |\n1407 |\n1408 |\n1409 |\n1410 |\n1411 |\n1412 |\n1413 |\n1414 |\n1415 |\n1416 |\n1417 |\n1418 |\n1419 |\n1420 |\n1421 |\n1422 |\n1423 |\n1424 |\n1425 |\n1426 |\n1427 |\n1428 |\n1429 |\n1430 |\n1431 |\n1432 |\n1433 |\n1434 |\n1435 |\n1436 |\n1437 |\n1438 |\n1439 |\n1440 |\n1441 |\n1442 |\n1443 |\n1444 |\n1445 |\n1446 |\n1447 |\n1448 |\n1449 |\n1450 |\n1451 |\n1452 |\n1453 |\n1454 |\n1455 |\n1456 |\n1457 |\n1458 |\n1459 |\n1460 |\n1461 |\n1462 |\n1463 |\n1464 |\n1465 |\n1466 |\n1467 |\n1468 |\n1469 |\n1470 |\n1471 |\n1472 |\n1473 |\n1474 |\n1475 |\n1476 |\n1477 |\n1478 |\n1479 |\n1480 |\n1481 |\n1482 |\n1483 |\n1484 |\n1485 |\n1486 |\n1487 |\n1488 |\n1489 |\n1490 |\n1491 |\n1492 |\n1493 |\n1494 |\n1495 |\n1496 |\n1497 |\n1498 |\n1499 |\n1500 |\n1501 |\n1502 |\n1503 |\n1504 |\n1505 |\n1506 |\n1507 |\n1508 |\n1509 |\n1510 |\n1511 |\n1512 |\n1513 |\n1514 |\n1515 |\n1516 |\n1517 |\n1518 |\n1519 |\n1520 |\n1521 |\n1522 |\n1523 |\n1524 |\n1525 |\n1526 |\n1527 |\n1528 |\n1529 |\n1530 |\n1531 |\n1532 |\n1533 |\n1534 |\n1535 |\n1536 |\n1537 |\n1538 |\n1539 |\n1540 |\n1541 |\n1542 |\n1543 |\n1544 |\n1545 |\n1546 |\n1547 |\n1548 |\n1549 |\n1550 |\n1551 |\n1552 |\n1553 |\n1554 |\n1555 |\n1556 |\n1557 |\n1558 |\n1559 |\n1560 |\n1561 |\n1562 |\n1563 |\n1564 |\n1565 |\n1566 |\n1567 |\n1568 |\n1569 |\n1570 |\n1571 |\n1572 |\n1573 |\n1574 |\n1575 |\n1576 |\n1577 |\n1578 |\n1579 |\n1580 |\n1581 |\n1582 |\n1583 |\n1584 |\n1585 |\n1586 |\n1587 |\n1588 |\n1589 |\n1590 |\n1591 |\n1592 |\n1593 |\n1594 |\n1595 |\n1596 |\n1597 |\n1598 |\n1599 |\n1600 |\n1601 |\n1602 |\n1603 |\n1604 |\n1605 |\n1606 |\n1607 |\n1608 |\n1609 |\n1610 |\n1611 |\n1612 |\n1613 |\n1614 |\n1615 |\n1616 |\n1617 |\n1618 |\n1619 |\n1620 |\n1621 |\n1622 |\n1623 |\n1624 |\n1625 |\n1626 |\n1627 |\n1628 |\n1629 |\n1630 |\n1631 |\n1632 |\n1633 |\n1634 |\n1635 |\n1636 |\n1637 |\n1638 |\n1639 |\n1640 |\n1641 |\n1642 |\n1643 |\n1644 |\n1645 |\n1646 |\n1647 |\n1648 |\n1649 |\n1650 |\n1651 |\n1652 |\n1653 |\n1654 |\n1655 |\n1656 |\n1657 |\n1658 |\n1659 |\n1660 |\n1661 |\n1662 |\n1663 |\n1664 |\n1665 |\n1666 |\n1667 |\n1668 |\n1669 |\n1670 |\n1671 |\n1672 |\n1673 |\n1674 |\n1675 |\n1676 |\n1677 |\n1678 |\n1679 |\n1680 |\n1681 |\n1682 |\n1683 |\n1684 |\n1685 |\n1686 |\n1687 |\n1688 |\n1689 |\n1690 |\n1691 |\n1692 |\n1693 |\n1694 |\n1695 |\n1696 |\n1697 |\n1698 |\n1699 |\n1700 |\n1701 |\n1702 |\n1703 |\n1704 |\n1705 |\n1706 |\n1707 |\n1708 |\n1709 |\n1710 |\n1711 |\n1712 |\n1713 |\n1714 |\n1715 |\n1716 |\n1717 |\n1718 |\n1719 |\n1720 |\n1721 |\n1722 |\n1723 |\n1724 |\n1725 |\n1726 |\n1727 |\n1728 |\n1729 |\n1730 |\n1731 |\n1732 |\n1733 |\n1734 |\n1735 |\n1736 |\n1737 |\n1738 |\n1739 |\n1740 |\n1741 |\n1742 |\n1743 |\n1744 |\n1745 |\n1746 |\n1747 |\n1748 |\n1749 |\n1750 |\n1751 |\n1752 |\n1753 |\n1754 |\n1755 |\n1756 |\n1757 |\n1758 |\n1759 |\n1760 |\n1761 |\n1762 |\n1763 |\n1764 |\n1765 |\n1766 |\n1767 |\n1768 |\n1769 |\n1770 |\n1771 |\n1772 |\n1773 |\n1774 |\n1775 |\n1776 |\n1777 |\n1778 |\n1779 |\n1780 |\n1781 |\n1782 |\n1783 |\n1784 |\n1785 |\n1786 |\n1787 |\n1788 |\n1789 |\n1790 |\n1791 |\n1792 |\n1793 |\n1794 |\n1795 |\n1796 |\n1797 |\n1798 |\n1799 |\n1800 |\n1801 |\n1802 |\n1803 |\n1804 |\n1805 |\n1806 |\n1807 |\n1808 |\n1809 |\n1810 |\n1811 |\n1812 |\n1813 |\n1814 |\n1815 |\n1816 |\n1817 |\n1818 |\n1819 |\n1820 |\n1821 |\n1822 |\n1823 |\n1824 |\n1825 |\n1826 |\n1827 |\n1828 |\n1829 |\n1830 |\n1831 |\n1832 |\n1833 |\n1834 |\n1835 |\n1836 |\n1837 |\n1838 |\n1839 |\n1840 |\n1841 |\n1842 |\n1843 |\n1844 |\n1845 |\n1846 |\n1847 |\n1848 |\n1849 |\n1850 |\n1851 |\n1852 |\n1853 |\n1854 |\n1855 |\n1856 |\n1857 |\n1858 |\n1859 |\n1860 |\n1861 |\n1862 |\n1863 |\n1864 |\n1865 |\n1866 |\n1867 |\n1868 |\n1869 |\n1870 |\n1871 |\n1872 |\n1873 |\n1874 |\n1875 |\n1876 |\n1877 |\n1878 |\n1879 |\n1880 |\n1881 |\n1882 |\n1883 |\n1884 |\n1885 |\n1886 |\n1887 |\n1888 |\n1889 |\n1890 |\n1891 |\n1892 |\n1893 |\n1894 |\n1895 |\n1896 |\n1897 |\n1898 |\n1899 |\n1900 |\n1901 |\n1902 |\n1903 |\n1904 |\n1905 |\n1906 |\n1907 |\n1908 |\n1909 |\n1910 |\n1911 |\n1912 |\n1913 |\n1914 |\n1915 |\n1916 |\n1917 |\n1918 |\n1919 |\n1920 |\n1921 |\n1922 |\n1923 |\n1924 |\n1925 |\n1926 |\n1927 |\n1928 |\n1929 |\n1930 |\n1931 |\n1932 |\n1933 |\n1934 |\n1935 |\n1936 |\n1937 |\n1938 |\n1939 |\n1940 |\n1941 |\n1942 |\n1943 |\n1944 |\n1945 |\n1946 |\n1947 |\n1948 |\n1949 |\n1950 |\n1951 |\n1952 |\n1953 |\n1954 |\n1955 |\n1956 |\n1957 |\n1958 |\n1959 |\n1960 |\n1961 |\n1962 |\n1963 |\n1964 |\n1965 |\n1966 |\n1967 |\n1968 |\n1969 |\n1970 |\n1971 |\n1972 |\n1973 |\n1974 |\n1975 |\n1976 |\n1977 |\n1978 |\n1979 |\n1980 |\n1981 |\n1982 |\n1983 |\n1984 |\n1985 |\n1986 |\n1987 |\n1988 |\n1989 |\n1990 |\n1991 |\n1992 |\n1993 |\n1994 |\n1995 |\n1996 |\n1997 |\n1998 |\n1999 |\n2000 |\n2001 |\n2002 |\n2003 |\n2004 |\n2005 |\n2006 |\n2007 |\n2008 |\n2009 |\n2010 |\n2011 |\n2012 |\n2013 |\n2014 |\n2015 |\n2016 |\n2017 |\n2018 |\n2019 |\n2020 |\n2021 |\n2022 |\n2023 |\n2024 |\n2025 |\n2026 |\n2027 |\n2028 |\n2029 |\n2030 |\n2031 |\n2032 |\n2033 |\n2034 |\n2035 |\n2036 |\n2037 |\n2038 |\n2039 |\n2040 |\n2041 |\n2042 |\n2043 |\n2044 |\n2045 |\n2046 |\n2047 |\n2048 |\n2049 |\n2050 |\n2051 |\n2052 |\n2053 |\n2054 |\n2055 |\n2056 |\n2057 |\n2058 |\n2059 |\n2060 |\n2061 |\n2062 |\n2063 |\n2064 |\n2065 |\n2066 |\n2067 |\n2068 |\n2069 |\n2070 |\n2071 |\n2072 |\n2073 |\n2074 |\n2075 |\n2076 |\n2077 |\n2078 |\n2079 |\n2080 |\n2081 |\n2082 |\n2083 |\n2084 |\n2085 |\n2086 |\n2087 |\n2088 |\n2089 |\n2090 |\n2091 |\n2092 |\n2093 |\n2094 |\n2095 |\n2096 |\n2097 |\n2098 |\n2099 |\n2100 |\n2101 |\n2102 |\n2103 |\n2104 |\n2105 |\n2106 |\n2107 |\n2108 |\n2109 |\n2110 |\n2111 |\n2112 |\n2113 |\n2114 |\n2115 |\n2116 |\n2117 |\n2118 |\n2119 |\n2120 |\n2121 |\n2122 |\n2123 |\n2124 |\n2125 |\n2126 |\n2127 |\n2128 |\n2129 |\n2130 |\n2131 |\n2132 |\n2133 |\n2134 |\n2135 |\n2136 |\n2137 |\n2138 |\n2139 |\n2140 |\n2141 |\n2142 |\n2143 |\n2144 |\n2145 |\n2146 |\n2147 |\n2148 |\n2149 |\n2150 |\n2151 |\n2152 |\n2153 |\n2154 |\n2155 |\n2156 |\n2157 |\n2158 |\n2159 |\n2160 |\n2161 |\n2162 |\n2163 |\n2164 |\n2165 |\n2166 |\n2167 |\n2168 |\n2169 |\n2170 |\n2171 |\n2172 |\n2173 |\n2174 |\n2175 |\n2176 |\n2177 |\n2178 |\n2179 |\n2180 |\n2181 |\n2182 |\n2183 |\n2184 |\n2185 |\n2186 |\n2187 |\n2188 |\n2189 |\n2190 |\n2191 |\n2192 |\n2193 |\n2194 |\n2195 |\n2196 |\n2197 |\n2198 |\n2199 |\n2200 |\n2201 |\n2202 |\n2203 |\n2204 |\n2205 |\n2206 |\n2207 |\n2208 |\n2209 |\n2210 |\n2211 |\n2212 |\n2213 |\n2214 |\n2215 |\n2216 |\n2217 |\n2218 |\n2219 |\n2220 |\n2221 |\n2222 |\n2223 |\n2224 |\n2225 |\n2226 |\n2227 |\n2228 |\n2229 |\n2230 |\n2231 |\n2232 |\n2233 |\n2234 |\n2235 |\n2236 |\n2237 |\n2238 |\n2239 |\n2240 |\n2241 |\n2242 |\n2243 |\n2244 |\n2245 |\n2246 |\n2247 |\n2248 |\n2249 |\n2250 |\n2251 |\n2252 |\n2253 |\n2254 |\n2255 |\n2256 |\n2257 |\n2258 |\n2259 |\n2260 |\n2261 |\n2262 |\n2263 |\n2264 |\n2265 |\n2266 |\n2267 |\n2268 |\n2269 |\n2270 |\n2271 |\n2272 |\n2273 |\n2274 |\n2275 |\n2276 |\n2277 |\n2278 |\n2279 |\n2280 |\n2281 |\n2282 |\n2283 |\n2284 |\n2285 |\n2286 |\n2287 |\n2288 |\n2289 |\n2290 |\n2291 |\n2292 |\n2293 |\n2294 |\n2295 |\n2296 |\n2297 |\n2298 |\n2299 |\n2300 |\n2301 |\n2302 |\n2303 |\n2304 |\n2305 |\n2306 |\n2307 |\n2308 |\n2309 |\n2310 |\n2311 |\n2312 |\n2313 |\n2314 |\n2315 |\n2316 |\n2317 |\n2318 |\n2319 |\n2320 |\n2321 |\n2322 |\n2323 |\n2324 |\n2325 |\n2326 |\n2327 |\n2328 |\n2329 |\n2330 |\n2331 |\n2332 |\n2333 |\n2334 |\n2335 |\n2336 |\n2337 |\n2338 |\n2339 |\n2340 |\n2341 |\n2342 |\n2343 |\n2344 |\n2345 |\n2346 |\n2347 |\n2348 |\n2349 |\n2350 |\n2351 |\n2352 |\n2353 |\n2354 |\n2355 |\n2356 |\n2357 |\n2358 |\n2359 |\n2360 |\n2361 |\n2362 |\n2363 |\n2364 |\n2365 |\n2366 |\n2367 |\n2368 |\n2369 |\n2370 |\n2371 |\n2372 |\n2373 |\n2374 |\n2375 |\n2376 |\n2377 |\n2378 |\n2379 |\n2380 |\n2381 |\n2382 |\n2383 |\n2384 |\n2385 |\n2386 |\n2387 |\n2388 |\n2389 |\n2390 |\n2391 |\n2392 |\n2393 |\n2394 |\n2395 |\n2396 |\n2397 |\n2398 |\n2399 |\n2400 |\n2401 |\n2402 |\n2403 |\n2404 |\n2405 |\n2406 |\n2407 |\n2408 |\n2409 |\n2410 |\n2411 |\n2412 |\n2413 |\n2414 |\n2415 |\n2416 |\n2417 |\n2418 |\n2419 |\n2420 |\n2421 |\n2422 |\n2423 |\n2424 |\n2425 |\n2426 |\n2427 |\n2428 |\n2429 |\n2430 |\n2431 |\n2432 |\n2433 |\n2434 |\n2435 |\n2436 |\n2437 |\n2438 |\n2439 |\n2440 |\n2441 |\n2442 |\n2443 |\n2444 |\n2445 |\n2446 |\n2447 |\n2448 |\n2449 |\n2450 |\n2451 |\n2452 |\n2453 |\n2454 |\n2455 |\n2456 |\n2457 |\n2458 |\n2459 |\n2460 |\n2461 |\n2462 |\n2463 |\n2464 |\n2465 |\n2466 |\n2467 |\n2468 |\n2469 |\n2470 |\n2471 |\n2472 |\n2473 |\n2474 |\n2475 |\n2476 |\n2477 |\n2478 |\n2479 |\n2480 |\n2481 |\n2482 |\n2483 |\n2484 |\n2485 |\n2486 |\n2487 |\n2488 |\n2489 |\n2490 |\n2491 |\n2492 |\n2493 |\n2494 |\n2495 |\n2496 |\n2497 |\n2498 |\n2499 |\n2500 |\n2501 |\n2502 |\n2503 |\n2504 |\n2505 |\n2506 |\n2507 |\n2508 |\n2509 |\n2510 |\n2511 |\n2512 |\n2513 |\n2514 |\n2515 |\n2516 |\n2517 |\n2518 |\n2519 |\n2520 |\n2521 |\n2522 |\n2523 |\n2524 |\n2525 |\n2526 |\n2527 |\n2528 |\n2529 |\n2530 |\n2531 |\n2532 |\n2533 |\n2534 |\n2535 |\n2536 |\n2537 |\n2538 |\n2539 |\n2540 |\n2541 |\n2542 |\n2543 |\n2544 |\n2545 |\n2546 |\n2547 |\n2548 |\n2549 |\n2550 |\n2551 |\n2552 |\n2553 |\n2554 |\n2555 |\n2556 |\n2557 |\n2558 |\n2559 |\n2560 |\n2561 |\n2562 |\n2563 |\n2564 |\n2565 |\n2566 |\n2567 |\n2568 |\n2569 |\n2570 |\n2571 |\n2572 |\n2573 |\n2574 |\n2575 |\n2576 |\n2577 |\n2578 |\n2579 |\n2580 |\n2581 |\n2582 |\n2583 |\n2584 |\n2585 |\n2586 |\n2587 |\n2588 |\n2589 |\n2590 |\n2591 |\n2592 |\n2593 |\n2594 |\n2595 |\n2596 |\n2597 |\n2598 |\n2599 |\n2600 |\n2601 |\n2602 |\n2603 |\n2604 |\n2605 |\n2606 |\n2607 |\n2608 |\n2609 |\n2610 |\n2611 |\n2612 |\n2613 |\n2614 |\n2615 |\n2616 |\n2617 |\n2618 |\n2619 |\n2620 |\n2621 |\n2622 |\n2623 |\n2624 |\n2625 |\n2626 |\n2627 |\n2628 |\n2629 |\n2630 |\n2631 |\n2632 |\n2633 |\n2634 |\n2635 |\n2636 |\n2637 |\n2638 |\n2639 |\n2640 |\n2641 |\n2642 |\n2643 |\n2644 |\n2645 |\n2646 |\n2647 |\n2648 |\n2649 |\n2650 |\n2651 |\n2652 |\n2653 |\n2654 |\n2655 |\n2656 |\n2657 |\n2658 |\n2659 |\n2660 |\n2661 |\n2662 |\n2663 |\n2664 |\n2665 |\n2666 |\n2667 |\n2668 |\n2669 |\n2670 |\n2671 |\n2672 |\n2673 |\n2674 |\n2675 |\n2676 |\n2677 |\n2678 |\n2679 |\n2680 |\n2681 |\n2682 |\n2683 |\n2684 |\n2685 |\n2686 |\n2687 |\n2688 |\n2689 |\n2690 |\n2691 |\n2692 |\n2693 |\n2694 |\n2695 |\n2696 |\n2697 |\n2698 |\n2699 |\n2700 |\n2701 |\n2702 |\n2703 |\n2704 |\n2705 |\n2706 |\n2707 |\n2708 |\n2709 |\n2710 |\n2711 |\n2712 |\n2713 |\n2714 |\n2715 |\n2716 |\n2717 |\n2718 |\n2719 |\n2720 |\n2721 |\n2722 |\n2723 |\n2724 |\n2725 |\n2726 |\n2727 |\n2728 |\n2729 |\n2730 |\n2731 |\n2732 |\n2733 |\n2734 |\n2735 |\n2736 |\n2737 |\n2738 |\n2739 |\n2740 |\n2741 |\n2742 |\n2743 |\n2744 |\n2745 |\n2746 |\n2747 |\n2748 |\n2749 |\n2750 |\n2751 |\n2752 |\n2753 |\n2754 |\n2755 |\n2756 |\n2757 |\n2758 |\n2759 |\n2760 |\n2761 |\n2762 |\n2763 |\n2764 |\n2765 |\n2766 |\n2767 |\n2768 |\n2769 |\n2770 |\n2771 |\n2772 |\n2773 |\n2774 |\n2775 |\n2776 |\n2777 |\n2778 |\n2779 |\n2780 |\n2781 |\n2782 |\n2783 |\n2784 |\n2785 |\n2786 |\n2787 |\n2788 |\n2789 |\n2790 |\n2791 |\n2792 |\n2793 |\n2794 |\n2795 |\n2796 |\n2797 |\n2798 |\n2799 |\n2800 |\n2801 |\n2802 |\n2803 |\n2804 |\n2805 |\n2806 |\n2807 |\n2808 |\n2809 |\n2810 |\n2811 |\n2812 |\n2813 |\n2814 |\n2815 |\n2816 |\n2817 |\n2818 |\n2819 |\n2820 |\n2821 |\n2822 |\n2823 |\n2824 |\n2825 |\n2826 |\n2827 |\n2828 |\n2829 |\n2830 |\n2831 |\n2832 |\n2833 |\n2834 |\n2835 |\n2836 |\n2837 |\n2838 |\n2839 |\n2840 |\n2841 |\n2842 |\n2843 |\n2844 |\n2845 |\n2846 |\n2847 |\n2848 |\n2849 |\n2850 |\n2851 |\n2852 |\n2853 |\n2854 |\n2855 |\n2856 |\n2857 |\n2858 |\n2859 |\n2860 |\n2861 |\n2862 |\n2863 |\n2864 |\n2865 |\n2866 |\n2867 |\n2868 |\n2869 |\n2870 |\n2871 |\n2872 |\n2873 |\n2874 |\n2875 |\n2876 |\n2877 |\n2878 |\n2879 |\n2880 |\n2881 |\n2882 |\n2883 |\n2884 |\n2885 |\n2886 |\n2887 |\n2888 |\n2889 |\n2890 |\n2891 |\n2892 |\n2893 |\n2894 |\n2895 |\n2896 |\n2897 |\n2898 |\n2899 |\n2900 |\n2901 |\n2902 |\n2903 |\n2904 |\n2905 |\n2906 |\n2907 |\n2908 |\n2909 |\n2910 |\n2911 |\n2912 |\n2913 |\n2914 |\n2915 |\n2916 |\n2917 |\n2918 |\n2919 |\n2920 |\n2921 |\n2922 |\n2923 |\n2924 |\n2925 |\n2926 |\n2927 |\n2928 |\n2929 |\n2930 |\n2931 |\n2932 |\n2933 |\n2934 |\n2935 |\n2936 |\n2937 |\n2938 |\n2939 |\n2940 |\n2941 |\n2942 |\n2943 |\n2944 |\n2945 |\n2946 |\n2947 |\n2948 |\n2949 |\n2950 |\n2951 |\n2952 |\n2953 |\n2954 |\n2955 |\n2956 |\n2957 |\n2958 |\n2959 |\n2960 |\n2961 |\n2962 |\n2963 |\n2964 |\n2965 |\n2966 |\n2967 |\n2968 |\n2969 |\n2970 |\n2971 |\n2972 |\n2973 |\n2974 |\n2975 |\n2976 |\n2977 |\n2978 |\n2979 |\n2980 |\n2981 |\n2982 |\n2983 |\n2984 |\n2985 |\n2986 |\n2987 |\n2988 |\n2989 |\n2990 |\n2991 |\n2992 |\n2993 |\n2994 |\n2995 |\n2996 |\n2997 |\n2998 |\n2999 |\n3000 |\n3001 |\n3002 |\n3003 |\n3004 |\n3005 |\n3006 |\n3007 |\n3008 |\n3009 |\n3010 |\n3011 |\n3012 |\n3013 |\n3014 |\n3015 |\n3016 |\n3017 |\n3018 |\n3019 |\n3020 |\n3021 |\n3022 |\n3023 |\n3024 |\n3025 |\n3026 |\n3027 |\n3028 |\n3029 |\n3030 |\n3031 |\n3032 |\n3033 |\n3034 |\n3035 |\n3036 |\n3037 |\n3038 |\n3039 |\n3040 |\n3041 |\n3042 |\n3043 |\n3044 |\n3045 |\n3046 |\n3047 |\n3048 |\n3049 |\n3050 |\n3051 |\n3052 |\n3053 |\n3054 |\n3055 |\n3056 |\n3057 |\n3058 |\n3059 |\n3060 |\n3061 |\n3062 |\n3063 |\n3064 |\n3065 |\n3066 |\n3067 |\n3068 |\n3069 |\n3070 |\n3071 |\n3072 |\n3073 |\n3074 |\n3075 |\n3076 |\n3077 |\n3078 |\n3079 |\n3080 |\n3081 |\n3082 |\n3083 |\n3084 |\n3085 |\n3086 |\n3087 |\n3088 |\n3089 |\n3090 |\n3091 |\n3092 |\n3093 |\n3094 |\n3095 |\n3096 |\n3097 |\n3098 |\n3099 |\n3100 |\n3101 |\n3102 |\n3103 |\n3104 |\n3105 |\n3106 |\n3107 |\n3108 |\n3109 |\n3110 |\n3111 |\n3112 |\n3113 |\n3114 |\n3115 |\n3116 |\n3117 |\n3118 |\n3119 |\n3120 |\n3121 |\n3122 |\n3123 |\n3124 |\n3125 |\n3126 |\n3127 |\n3128 |\n3129 |\n3130 |\n3131 |\n3132 |\n3133 |\n3134 |\n3135 |\n3136 |\n3137 |\n3138 |\n3139 |\n3140 |\n3141 |\n3142 |\n3143 |\n3144 |\n3145 |\n3146 |\n3147 |\n3148 |\n3149 |\n3150 |\n3151 |\n3152 |\n3153 |\n3154 |\n3155 |\n3156 |\n3157 |\n3158 |\n3159 |\n3160 |\n3161 |\n3162 |\n3163 |\n3164 |\n3165 |\n3166 |\n3167 |\n3168 |\n3169 |\n3170 |\n3171 |\n3172 |\n3173 |\n3174 |\n3175 |\n3176 |\n3177 |\n3178 |\n3179 |\n3180 |\n3181 |\n3182 |\n3183 |\n3184 |\n3185 |\n3186 |\n3187 |\n3188 |\n3189 |\n3190 |\n3191 |\n3192 |\n3193 |\n3194 |\n3195 |\n3196 |\n3197 |\n3198 |\n3199 |\n3200 |\n3201 |\n3202 |\n3203 |\n3204 |\n3205 |\n3206 |\n3207 |\n3208 |\n3209 |\n3210 |\n3211 |\n3212 |\n3213 |\n3214 |\n3215 |\n3216 |\n3217 |\n3218 |\n3219 |\n3220 |\n3221 |\n3222 |\n3223 |\n3224 |\n3225 |\n3226 |\n3227 |\n3228 |\n3229 |\n3230 |\n3231 |\n3232 |\n3233 |\n3234 |\n3235 |\n3236 |\n3237 |\n3238 |\n3239 |\n3240 |\n3241 |\n3242 |\n3243 |\n3244 |\n3245 |\n3246 |\n3247 |\n3248 |\n3249 |\n3250 |\n3251 |\n3252 |\n3253 |\n3254 |\n3255 |\n3256 |\n3257 |\n3258 |\n3259 |\n3260 |\n3261 |\n3262 |\n3263 |\n3264 |\n3265 |\n3266 |\n3267 |\n3268 |\n3269 |\n3270 |\n3271 |\n3272 |\n3273 |\n3274 |\n3275 |\n3276 |\n3277 |\n3278 |\n3279 |\n3280 |\n3281 |\n3282 |\n3283 |\n3284 |\n3285 |\n3286 |\n3287 |\n3288 |\n3289 |\n3290 |\n3291 |\n3292 |\n3293 |\n3294 |\n3295 |\n3296 |\n3297 |\n3298 |\n3299 |\n3300 |\n3301 |\n3302 |\n3303 |\n3304 |\n3305 |\n3306 |\n3307 |\n3308 |\n3309 |\n3310 |\n3311 |\n3312 |\n3313 |\n3314 |\n3315 |\n3316 |\n3317 |\n3318 |\n3319 |\n3320 |\n3321 |\n3322 |\n3323 |\n3324 |\n3325 |\n3326 |\n3327 |\n3328 |\n3329 |\n3330 |\n3331 |\n3332 |\n3333 |\n3334 |\n3335 |\n3336 |\n3337 |\n3338 |\n3339 |\n3340 |\n3341 |\n3342 |\n3343 |\n3344 |\n3345 |\n3346 |\n3347 |\n3348 |\n3349 |\n3350 |\n3351 |\n3352 |\n3353 |\n3354 |\n3355 |\n3356 |\n3357 |\n3358 |\n3359 |\n3360 |\n3361 |\n3362 |\n3363 |\n3364 |\n3365 |\n3366 |\n3367 |\n3368 |\n3369 |\n3370 |\n3371 |\n3372 |\n3373 |\n3374 |\n3375 |\n3376 |\n3377 |\n3378 |\n3379 |\n3380 |\n3381 |\n3382 |\n3383 |\n3384 |\n3385 |\n3386 |\n3387 |\n3388 |\n3389 |\n3390 |\n3391 |\n3392 |\n3393 |\n3394 |\n3395 |\n3396 |\n3397 |\n3398 |\n3399 |\n3400 |\n3401 |\n3402 |\n3403 |\n3404 |\n3405 |\n3406 |\n3407 |\n3408 |\n3409 |\n3410 |\n3411 |\n3412 |\n3413 |\n3414 |\n3415 |\n3416 |\n3417 |\n3418 |\n3419 |\n3420 |\n3421 |\n3422 |\n3423 |\n3424 |\n3425 |\n3426 |\n3427 |\n3428 |\n3429 |\n3430 |\n3431 |\n3432 |\n3433 |\n3434 |\n3435 |\n3436 |\n3437 |\n3438 |\n3439 |\n3440 |\n3441 |\n3442 |\n3443 |\n3444 |\n3445 |\n3446 |\n3447 |\n3448 |\n3449 |\n3450 |\n3451 |\n3452 |\n3453 |\n3454 |\n3455 |\n3456 |\n3457 |\n3458 |\n3459 |\n3460 |\n3461 |\n3462 |\n3463 |\n3464 |\n3465 |\n3466 |\n3467 |\n3468 |\n3469 |\n3470 |\n3471 |\n3472 |\n3473 |\n3474 |\n3475 |\n3476 |\n3477 |\n3478 |\n3479 |\n3480 |\n3481 |\n3482 |\n3483 |\n3484 |\n3485 |\n3486 |\n3487 |\n3488 |\n3489 |\n3490 |\n3491 |\n3492 |\n3493 |\n3494 |\n3495 |\n3496 |\n3497 |\n3498 |\n3499 |\n3500 |\n3501 |\n3502 |\n3503 |\n3504 |\n3505 |\n3506 |\n3507 |\n3508 |\n3509 |\n3510 |\n3511 |\n3512 |\n3513 |\n3514 |\n3515 |\n3516 |\n3517 |\n3518 |\n3519 |\n3520 |\n3521 |\n3522 |\n3523 |\n3524 |\n3525 |\n3526 |\n3527 |\n3528 |\n3529 |\n3530 |\n3531 |\n3532 |\n3533 |\n3534 |\n3535 |\n3536 |\n3537 |\n3538 |\n3539 |\n3540 |\n3541 |\n3542 |\n3543 |\n3544 |\n3545 |\n3546 |\n3547 |\n3548 |\n3549 |\n3550 |\n3551 |\n3552 |\n3553 |\n3554 |\n3555 |\n3556 |\n3557 |\n3558 |\n3559 |\n3560 |\n3561 |\n3562 |\n3563 |\n3564 |\n3565 |\n3566 |\n3567 |\n3568 |\n3569 |\n3570 |\n3571 |\n3572 |\n3573 |\n3574 |\n3575 |\n3576 |\n3577 |\n3578 |\n3579 |\n3580 |\n3581 |\n3582 |\n3583 |\n3584 |\n3585 |\n3586 |\n3587 |\n3588 |\n3589 |\n3590 |\n3591 |\n3592 |\n3593 |\n3594 |\n3595 |\n3596 |\n3597 |\n3598 |\n3599 |\n3600 |\n3601 |\n3602 |\n3603 |\n3604 |\n3605 |\n3606 |\n3607 |\n3608 |\n3609 |\n3610 |\n3611 |\n3612 |\n3613 |\n3614 |\n3615 |\n3616 |\n3617 |\n3618 |\n3619 |\n3620 |\n3621 |\n3622 |\n3623 |\n3624 |\n3625 |\n3626 |\n3627 |\n3628 |\n3629 |\n3630 |\n3631 |\n3632 |\n3633 |\n3634 |\n3635 |\n3636 |\n3637 |\n3638 |\n3639 |\n3640 |\n3641 |\n3642 |\n3643 |\n3644 |\n3645 |\n3646 |\n3647 |\n3648 |\n3649 |\n3650 |\n3651 |\n3652 |\n3653 |\n3654 |\n3655 |\n3656 |\n3657 |\n3658 |\n3659 |\n3660 |\n3661 |\n3662 |\n3663 |\n3664 |\n3665 |\n3666 |\n3667 |\n3668 |\n3669 |\n3670 |\n3671 |\n3672 |\n3673 |\n3674 |\n3675 |\n3676 |\n3677 |\n3678 |\n3679 |\n3680 |\n3681 |\n3682 |\n3683 |\n3684 |\n3685 |\n3686 |\n3687 |\n3688 |\n3689 |\n3690 |\n3691 |\n3692 |\n3693 |\n3694 |\n3695 |\n3696 |\n3697 |\n3698 |\n3699 |\n3700 |\n3701 |\n3702 |\n3703 |\n3704 |\n3705 |\n3706 |\n3707 |\n3708 |\n3709 |\n3710 |\n3711 |\n3712 |\n3713 |\n3714 |\n3715 |\n3716 |\n3717 |\n3718 |\n3719 |\n3720 |\n3721 |\n3722 |\n3723 |\n3724 |\n3725 |\n3726 |\n3727 |\n3728 |\n3729 |\n3730 |\n3731 |\n3732 |\n3733 |\n3734 |\n3735 |\n3736 |\n3737 |\n3738 |\n3739 |\n3740 |\n3741 |\n3742 |\n3743 |\n3744 |\n3745 |\n3746 |\n3747 |\n3748 |\n3749 |\n3750 |\n3751 |\n3752 |\n3753 |\n3754 |\n3755 |\n3756 |\n3757 |\n3758 |\n3759 |\n3760 |\n3761 |\n3762 |\n3763 |\n3764 |\n3765 |\n3766 |\n3767 |\n3768 |\n3769 |\n3770 |\n3771 |\n3772 |\n3773 |\n3774 |\n3775 |\n3776 |\n3777 |\n3778 |\n3779 |\n3780 |\n3781 |\n3782 |\n3783 |\n3784 |\n3785 |\n3786 |\n3787 |\n3788 |\n3789 |\n3790 |\n3791 |\n3792 |\n3793 |\n3794 |\n3795 |\n3796 |\n3797 |\n3798 |\n3799 |\n3800 |\n3801 |\n3802 |\n3803 |\n3804 |\n3805 |\n3806 |\n3807 |\n3808 |\n3809 |\n3810 |\n3811 |\n3812 |\n3813 |\n3814 |\n3815 |\n3816 |\n3817 |\n3818 |\n3819 |\n3820 |\n3821 |\n3822 |\n3823 |\n3824 |\n3825 |\n3826 |\n3827 |\n3828 |\n3829 |\n3830 |\n3831 |\n3832 |\n3833 |\n3834 |\n3835 |\n3836 |\n3837 |\n3838 |\n3839 |\n3840 |\n3841 |\n3842 |\n3843 |\n3844 |\n3845 |\n3846 |\n3847 |\n3848 |\n3849 |\n3850 |\n3851 |\n3852 |\n3853 |\n3854 |\n3855 |\n3856 |\n3857 |\n3858 |\n3859 |\n3860 |\n3861 |\n3862 |\n3863 |\n3864 |\n3865 |\n3866 |\n3867 |\n3868 |\n3869 |\n3870 |\n3871 |\n3872 |\n3873 |\n3874 |\n3875 |\n3876 |\n3877 |\n3878 |\n3879 |\n3880 |\n3881 |\n3882 |\n3883 |\n3884 |\n3885 |\n3886 |\n3887 |\n3888 |\n3889 |\n3890 |\n3891 |\n3892 |\n3893 |\n3894 |\n3895 |\n3896 |\n3897 |\n3898 |\n3899 |\n3900 |\n3901 |\n3902 |\n3903 |\n3904 |\n3905 |\n3906 |\n3907 |\n3908 |\n3909 |\n3910 |\n3911 |\n3912 |\n3913 |\n3914 |\n3915 |\n3916 |\n3917 |\n3918 |\n3919 |\n3920 |\n3921 |\n3922 |\n3923 |\n3924 |\n3925 |\n3926 |\n3927 |\n3928 |\n3929 |\n3930 |\n3931 |\n3932 |\n3933 |\n3934 |\n3935 |\n3936 |\n3937 |\n3938 |\n3939 |\n3940 |\n3941 |\n3942 |\n3943 |\n3944 |\n3945 |\n3946 |\n3947 |\n3948 |\n3949 |\n3950 |\n3951 |\n3952 |\n3953 |\n3954 |\n3955 |\n3956 |\n3957 |\n3958 |\n3959 |\n3960 |\n3961 |\n3962 |\n3963 |\n3964 |\n3965 |\n3966 |\n3967 |\n3968 |\n3969 |\n3970 |\n3971 |\n3972 |\n3973 |\n3974 |\n3975 |\n3976 |\n3977 |\n3978 |\n3979 |\n3980 |\n3981 |\n3982 |\n3983 |\n3984 |\n3985 |\n3986 |\n3987 |\n3988 |\n3989 |\n3990 |\n3991 |\n3992 |\n3993 |\n3994 |\n3995 |\n3996 |\n3997 |\n3998 |\n3999 |\n4000 |\n4001 |\n4002 |\n4003 |\n4004 |\n4005 |\n4006 |\n4007 |\n4008 |\n4009 |\n4010 |\n4011 |\n4012 |\n4013 |\n4014 |\n4015 |\n4016 |\n4017 |\n4018 |\n4019 |\n4020 |\n4021 |\n4022 |\n4023 |\n4024 |\n4025 |\n4026 |\n4027 |\n4028 |\n4029 |\n4030 |\n4031 |\n4032 |\n4033 |\n4034 |\n4035 |\n4036 |\n4037 |\n4038 |\n4039 |\n4040 |\n4041 |\n4042 |\n4043 |\n4044 |\n4045 |\n4046 |\n4047 |\n4048 |\n4049 |\n4050 |\n4051 |\n4052 |\n4053 |\n4054 |\n4055 |\n4056 |\n4057 |\n4058 |\n4059 |\n4060 |\n4061 |\n4062 |\n4063 |\n4064 |\n4065 |\n4066 |\n4067 |\n4068 |\n4069 |\n4070 |\n4071 |\n4072 |\n4073 |\n4074 |\n4075 |\n4076 |\n4077 |\n4078 |\n4079 |\n4080 |\n4081 |\n4082 |\n4083 |\n4084 |\n4085 |\n4086 |\n4087 |\n4088 |\n4089 |\n4090 |\n4091 |\n4092 |\n4093 |\n4094 |\n4095 |\n4096 |\n4097 |\n4098 |\n4099 |\n4100 |\n4101 |\n4102 |\n4103 |\n4104 |\n4105 |\n4106 |\n4107 |\n4108 |\n4109 |\n4110 |\n4111 |\n4112 |\n4113 |\n4114 |\n4115 |\n4116 |\n4117 |\n4118 |\n4119 |\n4120 |\n4121 |\n4122 |\n4123 |\n4124 |\n4125 |\n4126 |\n4127 |\n4128 |\n4129 |\n4130 |\n4131 |\n4132 |\n4133 |\n4134 |\n4135 |\n4136 |\n4137 |\n4138 |\n4139 |\n4140 |\n4141 |\n4142 |\n4143 |\n4144 |\n4145 |\n4146 |\n4147 |\n4148 |\n4149 |\n4150 |\n4151 |\n4152 |\n4153 |\n4154 |\n4155 |\n4156 |\n4157 |\n4158 |\n4159 |\n4160 |\n4161 |\n4162 |\n4163 |\n4164 |\n4165 |\n4166 |\n4167 |\n4168 |\n4169 |\n4170 |\n4171 |\n4172 |\n4173 |\n4174 |\n4175 |\n4176 |\n4177 |\n4178 |\n4179 |\n4180 |\n4181 |\n4182 |\n4183 |\n4184 |\n4185 |\n4186 |\n4187 |\n4188 |\n4189 |\n4190 |\n4191 |\n4192 |\n4193 |\n4194 |\n4195 |\n4196 |\n4197 |\n4198 |\n4199 |\n4200 |\n4201 |\n4202 |\n4203 |\n4204 |\n4205 |\n4206 |\n4207 |\n4208 |\n4209 |\n4210 |\n4211 |\n4212 |\n4213 |\n4214 |\n4215 |\n4216 |\n4217 |\n4218 |\n4219 |\n4220 |\n4221 |\n4222 |\n4223 |\n4224 |\n4225 |\n4226 |\n4227 |\n4228 |\n4229 |\n4230 |\n4231 |\n4232 |\n4233 |\n4234 |\n4235 |\n4236 |\n4237 |\n4238 |\n4239 |\n4240 |\n4241 |\n4242 |\n4243 |\n4244 |\n4245 |\n4246 |\n4247 |\n4248 |\n4249 |\n4250 |\n4251 |\n4252 |\n4253 |\n4254 |\n4255 |\n4256 |\n4257 |\n4258 |\n4259 |\n4260 |\n4261 |\n4262 |\n4263 |\n4264 |\n4265 |\n4266 |\n4267 |\n4268 |\n4269 |\n4270 |\n4271 |\n4272 |\n4273 |\n4274 |\n4275 |\n4276 |\n4277 |\n4278 |\n4279 |\n4280 |\n4281 |\n4282 |\n4283 |\n4284 |\n4285 |\n4286 |\n4287 |\n4288 |\n4289 |\n4290 |\n4291 |\n4292 |\n4293 |\n4294 |\n4295 |\n4296 |\n4297 |\n4298 |\n4299 |\n4300 |\n4301 |\n4302 |\n4303 |\n4304 |\n4305 |\n4306 |\n4307 |\n4308 |\n4309 |\n4310 |\n4311 |\n4312 |\n4313 |\n4314 |\n4315 |\n4316 |\n4317 |\n4318 |\n4319 |\n4320 |\n4321 |\n4322 |\n4323 |\n4324 |\n4325 |\n4326 |\n4327 |\n4328 |\n4329 |\n4330 |\n4331 |\n4332 |\n4333 |\n4334 |\n4335 |\n4336 |\n4337 |\n4338 |\n4339 |\n4340 |\n4341 |\n4342 |\n4343 |\n4344 |\n4345 |\n4346 |\n4347 |\n4348 |\n4349 |\n4350 |\n4351 |\n4352 |\n4353 |\n4354 |\n4355 |\n4356 |\n4357 |\n4358 |\n4359 |\n4360 |\n4361 |\n4362 |\n4363 |\n4364 |\n4365 |\n4366 |\n4367 |\n4368 |\n4369 |\n4370 |\n4371 |\n4372 |\n4373 |\n4374 |\n4375 |\n4376 |\n4377 |\n4378 |\n4379 |\n4380 |\n4381 |\n4382 |\n4383 |\n4384 |\n4385 |\n4386 |\n4387 |\n4388 |\n4389 |\n4390 |\n4391 |\n4392 |\n4393 |\n4394 |\n4395 |\n4396 |\n4397 |\n4398 |\n4399 |\n4400 |\n4401 |\n4402 |\n4403 |\n4404 |\n4405 |\n4406 |\n4407 |\n4408 |\n4409 |\n4410 |\n4411 |\n4412 |\n4413 |\n4414 |\n4415 |\n4416 |\n4417 |\n4418 |\n4419 |\n4420 |\n4421 |\n4422 |\n4423 |\n4424 |\n4425 |\n4426 |\n4427 |\n4428 |\n4429 |\n4430 |\n4431 |\n4432 |\n4433 |\n4434 |\n4435 |\n4436 |\n4437 |\n4438 |\n4439 |\n4440 |\n4441 |\n4442 |\n4443 |\n4444 |\n4445 |\n4446 |\n4447 |\n4448 |\n4449 |\n4450 |\n4451 |\n4452 |\n4453 |\n4454 |\n4455 |\n4456 |\n4457 |\n4458 |\n4459 |\n4460 |\n4461 |\n4462 |\n4463 |\n4464 |\n4465 |\n4466 |\n4467 |\n4468 |\n4469 |\n4470 |\n4471 |\n4472 |\n4473 |\n4474 |\n4475 |\n4476 |\n4477 |\n4478 |\n4479 |\n4480 |\n4481 |\n4482 |\n4483 |\n4484 |\n4485 |\n4486 |\n4487 |\n4488 |\n4489 |\n4490 |\n4491 |\n4492 |\n4493 |\n4494 |\n4495 |\n4496 |\n4497 |\n4498 |\n4499 |\n4500 |\n4501 |\n4502 |\n4503 |\n4504 |\n4505 |\n4506 |\n4507 |\n4508 |\n4509 |\n4510 |\n4511 |\n4512 |\n4513 |\n4514 |\n4515 |\n4516 |\n4517 |\n4518 |\n4519 |\n4520 |\n4521 |\n4522 |\n4523 |\n4524 |\n4525 |\n4526 |\n4527 |\n4528 |\n4529 |\n4530 |\n4531 |\n4532 |\n4533 |\n4534 |\n4535 |\n4536 |\n4537 |\n4538 |\n4539 |\n4540 |\n4541 |\n4542 |\n4543 |\n4544 |\n4545 |\n4546 |\n4547 |\n4548 |\n4549 |\n4550 |\n4551 |\n4552 |\n4553 |\n4554 |\n4555 |\n4556 |\n4557 |\n4558 |\n4559 |\n4560 |\n4561 |\n4562 |\n4563 |\n4564 |\n4565 |\n4566 |\n4567 |\n4568 |\n4569 |\n4570 |\n4571 |\n4572 |\n4573 |\n4574 |\n4575 |\n4576 |\n4577 |\n4578 |\n4579 |\n4580 |\n4581 |\n4582 |\n4583 |\n4584 |\n4585 |\n4586 |\n4587 |\n4588 |\n4589 |\n4590 |\n4591 |\n4592 |\n4593 |\n4594 |\n4595 |\n4596 |\n4597 |\n4598 |\n4599 |\n4600 |\n4601 |\n4602 |\n4603 |\n4604 |\n4605 |\n4606 |\n4607 |\n4608 |\n4609 |\n4610 |\n4611 |\n4612 |\n4613 |\n4614 |\n4615 |\n4616 |\n4617 |\n4618 |\n4619 |\n4620 |\n4621 |\n4622 |\n4623 |\n4624 |\n4625 |\n4626 |\n4627 |\n4628 |\n4629 |\n4630 |\n4631 |\n4632 |\n4633 |\n4634 |\n4635 |\n4636 |\n4637 |\n4638 |\n4639 |\n4640 |\n4641 |\n4642 |\n4643 |\n4644 |\n4645 |\n4646 |\n4647 |\n4648 |\n4649 |\n4650 |\n4651 |\n4652 |\n4653 |\n4654 |\n4655 |\n4656 |\n4657 |\n4658 |\n4659 |\n4660 |\n4661 |\n4662 |\n4663 |\n4664 |\n4665 |\n4666 |\n4667 |\n4668 |\n4669 |\n4670 |\n4671 |\n4672 |\n4673 |\n4674 |\n4675 |\n4676 |\n4677 |\n4678 |\n4679 |\n4680 |\n4681 |\n4682 |\n4683 |\n4684 |\n4685 |\n4686 |\n4687 |\n4688 |\n4689 |\n4690 |\n4691 |\n4692 |\n4693 |\n4694 |\n4695 |\n4696 |\n4697 |\n4698 |\n4699 |\n4700 |\n4701 |\n4702 |\n4703 |\n4704 |\n4705 |\n4706 |\n4707 |\n4708 |\n4709 |\n4710 |\n4711 |\n4712 |\n4713 |\n4714 |\n4715 |\n4716 |\n4717 |\n4718 |\n4719 |\n4720 |\n4721 |\n4722 |\n4723 |\n4724 |\n4725 |\n4726 |\n4727 |\n4728 |\n4729 |\n4730 |\n4731 |\n4732 |\n4733 |\n4734 |\n4735 |\n4736 |\n4737 |\n4738 |\n4739 |\n4740 |\n4741 |\n4742 |\n4743 |\n4744 |\n4745 |\n4746 |\n4747 |\n4748 |\n4749 |\n4750 |\n4751 |\n4752 |\n4753 |\n4754 |\n4755 |\n4756 |\n4757 |\n4758 |\n4759 |\n4760 |\n4761 |\n4762 |\n4763 |\n4764 |\n4765 |\n4766 |\n4767 |\n4768 |\n4769 |\n4770 |\n4771 |\n4772 |\n4773 |\n4774 |\n4775 |\n4776 |\n4777 |\n4778 |\n4779 |\n4780 |\n4781 |\n4782 |\n4783 |\n4784 |\n4785 |\n4786 |\n4787 |\n4788 |\n4789 |\n4790 |\n4791 |\n4792 |\n4793 |\n4794 |\n4795 |\n4796 |\n4797 |\n4798 |\n4799 |\n4800 |\n4801 |\n4802 |\n4803 |\n4804 |\n4805 |\n4806 |\n4807 |\n4808 |\n4809 |\n4810 |\n4811 |\n4812 |\n4813 |\n4814 |\n4815 |\n4816 |\n4817 |\n4818 |\n4819 |\n4820 |\n4821 |\n4822 |\n4823 |\n4824 |\n4825 |\n4826 |\n4827 |\n4828 |\n4829 |\n4830 |\n4831 |\n4832 |\n4833 |\n4834 |\n4835 |\n4836 |\n4837 |\n4838 |\n4839 |\n4840 |\n4841 |\n4842 |\n4843 |\n4844 |\n4845 |\n4846 |\n4847 |\n4848 |\n4849 |\n4850 |\n4851 |\n4852 |\n4853 |\n4854 |\n4855 |\n4856 |\n4857 |\n4858 |\n4859 |\n4860 |\n4861 |\n4862 |\n4863 |\n4864 |\n4865 |\n4866 |\n4867 |\n4868 |\n4869 |\n4870 |\n4871 |\n4872 |\n4873 |\n4874 |\n4875 |\n4876 |\n4877 |\n4878 |\n4879 |\n4880 |\n4881 |\n4882 |\n4883 |\n4884 |\n4885 |\n4886 |\n4887 |\n4888 |\n4889 |\n4890 |\n4891 |\n4892 |\n4893 |\n4894 |\n4895 |\n4896 |\n4897 |\n4898 |\n4899 |\n4900 |\n4901 |\n4902 |\n4903 |\n4904 |\n4905 |\n4906 |\n4907 |\n4908 |\n4909 |\n4910 |\n4911 |\n4912 |\n4913 |\n4914 |\n4915 |\n4916 |\n4917 |\n4918 |\n4919 |\n4920 |\n4921 |\n4922 |\n4923 |\n4924 |\n4925 |\n4926 |\n4927 |\n4928 |\n4929 |\n4930 |\n4931 |\n4932 |\n4933 |\n4934 |\n4935 |\n4936 |\n4937 |\n4938 |\n4939 |\n4940 |\n4941 |\n4942 |\n4943 |\n4944 |\n4945 |\n4946 |\n4947 |\n4948 |\n4949 |\n4950 |\n4951 |\n4952 |\n4953 |\n4954 |\n4955 |\n4956 |\n4957 |\n4958 |\n4959 |\n4960 |\n4961 |\n4962 |\n4963 |\n4964 |\n4965 |\n4966 |\n4967 |\n4968 |\n4969 |\n4970 |\n4971 |\n4972 |\n4973 |\n4974 |\n4975 |\n4976 |\n4977 |\n4978 |\n4979 |\n4980 |\n4981 |\n4982 |\n4983 |\n4984 |\n4985 |\n4986 |\n4987 |\n4988 |\n4989 |\n4990 |\n4991 |\n4992 |\n4993 |\n4994 |\n4995 |\n4996 |\n4997 |\n4998 |\n4999;\n\ntype Data = {\n  error?: ErrorCode,\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * great big union used as type annotation will be flowed into itself.\n * List.mem check avoids pathology, as long as singletons aren't converted.\n * This is a band-aid, though: see second case.\n * @flow\n */\n\"use strict\";\n\nclass SecurityCheckupTypedLogger {\n  _data: Data;\n\n  setError(value: ErrorCode) {\n    this._data[\"error\"] = value;\n  }\n\n  // Bug: right now, any incompatible type coming into a huge\n  // union might blow the recursion limit.\n  // TODO real solution is to specialize union reps for obvious cases,\n  // e.g. (base type, list in decl order, set). Of course we could do\n  // something quick to get the union size off the Ocaml call stack,\n  // but not sure it's worth doing that before the real solution.\n  ohThatsNotSoGood() {\n    (\"\": ErrorCode); // also, error pos omits this line completely\n  }\n}\n\ntype ErrorCode =\n  | 0\n  | 1\n  | 2\n  | 3\n  | 4\n  | 5\n  | 6\n  | 7\n  | 8\n  | 9\n  | 10\n  | 11\n  | 12\n  | 13\n  | 14\n  | 15\n  | 16\n  | 17\n  | 18\n  | 19\n  | 20\n  | 21\n  | 22\n  | 23\n  | 24\n  | 25\n  | 26\n  | 27\n  | 28\n  | 29\n  | 30\n  | 31\n  | 32\n  | 33\n  | 34\n  | 35\n  | 36\n  | 37\n  | 38\n  | 39\n  | 40\n  | 41\n  | 42\n  | 43\n  | 44\n  | 45\n  | 46\n  | 47\n  | 48\n  | 49\n  | 50\n  | 51\n  | 52\n  | 53\n  | 54\n  | 55\n  | 56\n  | 57\n  | 58\n  | 59\n  | 60\n  | 61\n  | 62\n  | 63\n  | 64\n  | 65\n  | 66\n  | 67\n  | 68\n  | 69\n  | 70\n  | 71\n  | 72\n  | 73\n  | 74\n  | 75\n  | 76\n  | 77\n  | 78\n  | 79\n  | 80\n  | 81\n  | 82\n  | 83\n  | 84\n  | 85\n  | 86\n  | 87\n  | 88\n  | 89\n  | 90\n  | 91\n  | 92\n  | 93\n  | 94\n  | 95\n  | 96\n  | 97\n  | 98\n  | 99\n  | 100\n  | 101\n  | 102\n  | 103\n  | 104\n  | 105\n  | 106\n  | 107\n  | 108\n  | 109\n  | 110\n  | 111\n  | 112\n  | 113\n  | 114\n  | 115\n  | 116\n  | 117\n  | 118\n  | 119\n  | 120\n  | 121\n  | 122\n  | 123\n  | 124\n  | 125\n  | 126\n  | 127\n  | 128\n  | 129\n  | 130\n  | 131\n  | 132\n  | 133\n  | 134\n  | 135\n  | 136\n  | 137\n  | 138\n  | 139\n  | 140\n  | 141\n  | 142\n  | 143\n  | 144\n  | 145\n  | 146\n  | 147\n  | 148\n  | 149\n  | 150\n  | 151\n  | 152\n  | 153\n  | 154\n  | 155\n  | 156\n  | 157\n  | 158\n  | 159\n  | 160\n  | 161\n  | 162\n  | 163\n  | 164\n  | 165\n  | 166\n  | 167\n  | 168\n  | 169\n  | 170\n  | 171\n  | 172\n  | 173\n  | 174\n  | 175\n  | 176\n  | 177\n  | 178\n  | 179\n  | 180\n  | 181\n  | 182\n  | 183\n  | 184\n  | 185\n  | 186\n  | 187\n  | 188\n  | 189\n  | 190\n  | 191\n  | 192\n  | 193\n  | 194\n  | 195\n  | 196\n  | 197\n  | 198\n  | 199\n  | 200\n  | 201\n  | 202\n  | 203\n  | 204\n  | 205\n  | 206\n  | 207\n  | 208\n  | 209\n  | 210\n  | 211\n  | 212\n  | 213\n  | 214\n  | 215\n  | 216\n  | 217\n  | 218\n  | 219\n  | 220\n  | 221\n  | 222\n  | 223\n  | 224\n  | 225\n  | 226\n  | 227\n  | 228\n  | 229\n  | 230\n  | 231\n  | 232\n  | 233\n  | 234\n  | 235\n  | 236\n  | 237\n  | 238\n  | 239\n  | 240\n  | 241\n  | 242\n  | 243\n  | 244\n  | 245\n  | 246\n  | 247\n  | 248\n  | 249\n  | 250\n  | 251\n  | 252\n  | 253\n  | 254\n  | 255\n  | 256\n  | 257\n  | 258\n  | 259\n  | 260\n  | 261\n  | 262\n  | 263\n  | 264\n  | 265\n  | 266\n  | 267\n  | 268\n  | 269\n  | 270\n  | 271\n  | 272\n  | 273\n  | 274\n  | 275\n  | 276\n  | 277\n  | 278\n  | 279\n  | 280\n  | 281\n  | 282\n  | 283\n  | 284\n  | 285\n  | 286\n  | 287\n  | 288\n  | 289\n  | 290\n  | 291\n  | 292\n  | 293\n  | 294\n  | 295\n  | 296\n  | 297\n  | 298\n  | 299\n  | 300\n  | 301\n  | 302\n  | 303\n  | 304\n  | 305\n  | 306\n  | 307\n  | 308\n  | 309\n  | 310\n  | 311\n  | 312\n  | 313\n  | 314\n  | 315\n  | 316\n  | 317\n  | 318\n  | 319\n  | 320\n  | 321\n  | 322\n  | 323\n  | 324\n  | 325\n  | 326\n  | 327\n  | 328\n  | 329\n  | 330\n  | 331\n  | 332\n  | 333\n  | 334\n  | 335\n  | 336\n  | 337\n  | 338\n  | 339\n  | 340\n  | 341\n  | 342\n  | 343\n  | 344\n  | 345\n  | 346\n  | 347\n  | 348\n  | 349\n  | 350\n  | 351\n  | 352\n  | 353\n  | 354\n  | 355\n  | 356\n  | 357\n  | 358\n  | 359\n  | 360\n  | 361\n  | 362\n  | 363\n  | 364\n  | 365\n  | 366\n  | 367\n  | 368\n  | 369\n  | 370\n  | 371\n  | 372\n  | 373\n  | 374\n  | 375\n  | 376\n  | 377\n  | 378\n  | 379\n  | 380\n  | 381\n  | 382\n  | 383\n  | 384\n  | 385\n  | 386\n  | 387\n  | 388\n  | 389\n  | 390\n  | 391\n  | 392\n  | 393\n  | 394\n  | 395\n  | 396\n  | 397\n  | 398\n  | 399\n  | 400\n  | 401\n  | 402\n  | 403\n  | 404\n  | 405\n  | 406\n  | 407\n  | 408\n  | 409\n  | 410\n  | 411\n  | 412\n  | 413\n  | 414\n  | 415\n  | 416\n  | 417\n  | 418\n  | 419\n  | 420\n  | 421\n  | 422\n  | 423\n  | 424\n  | 425\n  | 426\n  | 427\n  | 428\n  | 429\n  | 430\n  | 431\n  | 432\n  | 433\n  | 434\n  | 435\n  | 436\n  | 437\n  | 438\n  | 439\n  | 440\n  | 441\n  | 442\n  | 443\n  | 444\n  | 445\n  | 446\n  | 447\n  | 448\n  | 449\n  | 450\n  | 451\n  | 452\n  | 453\n  | 454\n  | 455\n  | 456\n  | 457\n  | 458\n  | 459\n  | 460\n  | 461\n  | 462\n  | 463\n  | 464\n  | 465\n  | 466\n  | 467\n  | 468\n  | 469\n  | 470\n  | 471\n  | 472\n  | 473\n  | 474\n  | 475\n  | 476\n  | 477\n  | 478\n  | 479\n  | 480\n  | 481\n  | 482\n  | 483\n  | 484\n  | 485\n  | 486\n  | 487\n  | 488\n  | 489\n  | 490\n  | 491\n  | 492\n  | 493\n  | 494\n  | 495\n  | 496\n  | 497\n  | 498\n  | 499\n  | 500\n  | 501\n  | 502\n  | 503\n  | 504\n  | 505\n  | 506\n  | 507\n  | 508\n  | 509\n  | 510\n  | 511\n  | 512\n  | 513\n  | 514\n  | 515\n  | 516\n  | 517\n  | 518\n  | 519\n  | 520\n  | 521\n  | 522\n  | 523\n  | 524\n  | 525\n  | 526\n  | 527\n  | 528\n  | 529\n  | 530\n  | 531\n  | 532\n  | 533\n  | 534\n  | 535\n  | 536\n  | 537\n  | 538\n  | 539\n  | 540\n  | 541\n  | 542\n  | 543\n  | 544\n  | 545\n  | 546\n  | 547\n  | 548\n  | 549\n  | 550\n  | 551\n  | 552\n  | 553\n  | 554\n  | 555\n  | 556\n  | 557\n  | 558\n  | 559\n  | 560\n  | 561\n  | 562\n  | 563\n  | 564\n  | 565\n  | 566\n  | 567\n  | 568\n  | 569\n  | 570\n  | 571\n  | 572\n  | 573\n  | 574\n  | 575\n  | 576\n  | 577\n  | 578\n  | 579\n  | 580\n  | 581\n  | 582\n  | 583\n  | 584\n  | 585\n  | 586\n  | 587\n  | 588\n  | 589\n  | 590\n  | 591\n  | 592\n  | 593\n  | 594\n  | 595\n  | 596\n  | 597\n  | 598\n  | 599\n  | 600\n  | 601\n  | 602\n  | 603\n  | 604\n  | 605\n  | 606\n  | 607\n  | 608\n  | 609\n  | 610\n  | 611\n  | 612\n  | 613\n  | 614\n  | 615\n  | 616\n  | 617\n  | 618\n  | 619\n  | 620\n  | 621\n  | 622\n  | 623\n  | 624\n  | 625\n  | 626\n  | 627\n  | 628\n  | 629\n  | 630\n  | 631\n  | 632\n  | 633\n  | 634\n  | 635\n  | 636\n  | 637\n  | 638\n  | 639\n  | 640\n  | 641\n  | 642\n  | 643\n  | 644\n  | 645\n  | 646\n  | 647\n  | 648\n  | 649\n  | 650\n  | 651\n  | 652\n  | 653\n  | 654\n  | 655\n  | 656\n  | 657\n  | 658\n  | 659\n  | 660\n  | 661\n  | 662\n  | 663\n  | 664\n  | 665\n  | 666\n  | 667\n  | 668\n  | 669\n  | 670\n  | 671\n  | 672\n  | 673\n  | 674\n  | 675\n  | 676\n  | 677\n  | 678\n  | 679\n  | 680\n  | 681\n  | 682\n  | 683\n  | 684\n  | 685\n  | 686\n  | 687\n  | 688\n  | 689\n  | 690\n  | 691\n  | 692\n  | 693\n  | 694\n  | 695\n  | 696\n  | 697\n  | 698\n  | 699\n  | 700\n  | 701\n  | 702\n  | 703\n  | 704\n  | 705\n  | 706\n  | 707\n  | 708\n  | 709\n  | 710\n  | 711\n  | 712\n  | 713\n  | 714\n  | 715\n  | 716\n  | 717\n  | 718\n  | 719\n  | 720\n  | 721\n  | 722\n  | 723\n  | 724\n  | 725\n  | 726\n  | 727\n  | 728\n  | 729\n  | 730\n  | 731\n  | 732\n  | 733\n  | 734\n  | 735\n  | 736\n  | 737\n  | 738\n  | 739\n  | 740\n  | 741\n  | 742\n  | 743\n  | 744\n  | 745\n  | 746\n  | 747\n  | 748\n  | 749\n  | 750\n  | 751\n  | 752\n  | 753\n  | 754\n  | 755\n  | 756\n  | 757\n  | 758\n  | 759\n  | 760\n  | 761\n  | 762\n  | 763\n  | 764\n  | 765\n  | 766\n  | 767\n  | 768\n  | 769\n  | 770\n  | 771\n  | 772\n  | 773\n  | 774\n  | 775\n  | 776\n  | 777\n  | 778\n  | 779\n  | 780\n  | 781\n  | 782\n  | 783\n  | 784\n  | 785\n  | 786\n  | 787\n  | 788\n  | 789\n  | 790\n  | 791\n  | 792\n  | 793\n  | 794\n  | 795\n  | 796\n  | 797\n  | 798\n  | 799\n  | 800\n  | 801\n  | 802\n  | 803\n  | 804\n  | 805\n  | 806\n  | 807\n  | 808\n  | 809\n  | 810\n  | 811\n  | 812\n  | 813\n  | 814\n  | 815\n  | 816\n  | 817\n  | 818\n  | 819\n  | 820\n  | 821\n  | 822\n  | 823\n  | 824\n  | 825\n  | 826\n  | 827\n  | 828\n  | 829\n  | 830\n  | 831\n  | 832\n  | 833\n  | 834\n  | 835\n  | 836\n  | 837\n  | 838\n  | 839\n  | 840\n  | 841\n  | 842\n  | 843\n  | 844\n  | 845\n  | 846\n  | 847\n  | 848\n  | 849\n  | 850\n  | 851\n  | 852\n  | 853\n  | 854\n  | 855\n  | 856\n  | 857\n  | 858\n  | 859\n  | 860\n  | 861\n  | 862\n  | 863\n  | 864\n  | 865\n  | 866\n  | 867\n  | 868\n  | 869\n  | 870\n  | 871\n  | 872\n  | 873\n  | 874\n  | 875\n  | 876\n  | 877\n  | 878\n  | 879\n  | 880\n  | 881\n  | 882\n  | 883\n  | 884\n  | 885\n  | 886\n  | 887\n  | 888\n  | 889\n  | 890\n  | 891\n  | 892\n  | 893\n  | 894\n  | 895\n  | 896\n  | 897\n  | 898\n  | 899\n  | 900\n  | 901\n  | 902\n  | 903\n  | 904\n  | 905\n  | 906\n  | 907\n  | 908\n  | 909\n  | 910\n  | 911\n  | 912\n  | 913\n  | 914\n  | 915\n  | 916\n  | 917\n  | 918\n  | 919\n  | 920\n  | 921\n  | 922\n  | 923\n  | 924\n  | 925\n  | 926\n  | 927\n  | 928\n  | 929\n  | 930\n  | 931\n  | 932\n  | 933\n  | 934\n  | 935\n  | 936\n  | 937\n  | 938\n  | 939\n  | 940\n  | 941\n  | 942\n  | 943\n  | 944\n  | 945\n  | 946\n  | 947\n  | 948\n  | 949\n  | 950\n  | 951\n  | 952\n  | 953\n  | 954\n  | 955\n  | 956\n  | 957\n  | 958\n  | 959\n  | 960\n  | 961\n  | 962\n  | 963\n  | 964\n  | 965\n  | 966\n  | 967\n  | 968\n  | 969\n  | 970\n  | 971\n  | 972\n  | 973\n  | 974\n  | 975\n  | 976\n  | 977\n  | 978\n  | 979\n  | 980\n  | 981\n  | 982\n  | 983\n  | 984\n  | 985\n  | 986\n  | 987\n  | 988\n  | 989\n  | 990\n  | 991\n  | 992\n  | 993\n  | 994\n  | 995\n  | 996\n  | 997\n  | 998\n  | 999\n  | 1000\n  | 1001\n  | 1002\n  | 1003\n  | 1004\n  | 1005\n  | 1006\n  | 1007\n  | 1008\n  | 1009\n  | 1010\n  | 1011\n  | 1012\n  | 1013\n  | 1014\n  | 1015\n  | 1016\n  | 1017\n  | 1018\n  | 1019\n  | 1020\n  | 1021\n  | 1022\n  | 1023\n  | 1024\n  | 1025\n  | 1026\n  | 1027\n  | 1028\n  | 1029\n  | 1030\n  | 1031\n  | 1032\n  | 1033\n  | 1034\n  | 1035\n  | 1036\n  | 1037\n  | 1038\n  | 1039\n  | 1040\n  | 1041\n  | 1042\n  | 1043\n  | 1044\n  | 1045\n  | 1046\n  | 1047\n  | 1048\n  | 1049\n  | 1050\n  | 1051\n  | 1052\n  | 1053\n  | 1054\n  | 1055\n  | 1056\n  | 1057\n  | 1058\n  | 1059\n  | 1060\n  | 1061\n  | 1062\n  | 1063\n  | 1064\n  | 1065\n  | 1066\n  | 1067\n  | 1068\n  | 1069\n  | 1070\n  | 1071\n  | 1072\n  | 1073\n  | 1074\n  | 1075\n  | 1076\n  | 1077\n  | 1078\n  | 1079\n  | 1080\n  | 1081\n  | 1082\n  | 1083\n  | 1084\n  | 1085\n  | 1086\n  | 1087\n  | 1088\n  | 1089\n  | 1090\n  | 1091\n  | 1092\n  | 1093\n  | 1094\n  | 1095\n  | 1096\n  | 1097\n  | 1098\n  | 1099\n  | 1100\n  | 1101\n  | 1102\n  | 1103\n  | 1104\n  | 1105\n  | 1106\n  | 1107\n  | 1108\n  | 1109\n  | 1110\n  | 1111\n  | 1112\n  | 1113\n  | 1114\n  | 1115\n  | 1116\n  | 1117\n  | 1118\n  | 1119\n  | 1120\n  | 1121\n  | 1122\n  | 1123\n  | 1124\n  | 1125\n  | 1126\n  | 1127\n  | 1128\n  | 1129\n  | 1130\n  | 1131\n  | 1132\n  | 1133\n  | 1134\n  | 1135\n  | 1136\n  | 1137\n  | 1138\n  | 1139\n  | 1140\n  | 1141\n  | 1142\n  | 1143\n  | 1144\n  | 1145\n  | 1146\n  | 1147\n  | 1148\n  | 1149\n  | 1150\n  | 1151\n  | 1152\n  | 1153\n  | 1154\n  | 1155\n  | 1156\n  | 1157\n  | 1158\n  | 1159\n  | 1160\n  | 1161\n  | 1162\n  | 1163\n  | 1164\n  | 1165\n  | 1166\n  | 1167\n  | 1168\n  | 1169\n  | 1170\n  | 1171\n  | 1172\n  | 1173\n  | 1174\n  | 1175\n  | 1176\n  | 1177\n  | 1178\n  | 1179\n  | 1180\n  | 1181\n  | 1182\n  | 1183\n  | 1184\n  | 1185\n  | 1186\n  | 1187\n  | 1188\n  | 1189\n  | 1190\n  | 1191\n  | 1192\n  | 1193\n  | 1194\n  | 1195\n  | 1196\n  | 1197\n  | 1198\n  | 1199\n  | 1200\n  | 1201\n  | 1202\n  | 1203\n  | 1204\n  | 1205\n  | 1206\n  | 1207\n  | 1208\n  | 1209\n  | 1210\n  | 1211\n  | 1212\n  | 1213\n  | 1214\n  | 1215\n  | 1216\n  | 1217\n  | 1218\n  | 1219\n  | 1220\n  | 1221\n  | 1222\n  | 1223\n  | 1224\n  | 1225\n  | 1226\n  | 1227\n  | 1228\n  | 1229\n  | 1230\n  | 1231\n  | 1232\n  | 1233\n  | 1234\n  | 1235\n  | 1236\n  | 1237\n  | 1238\n  | 1239\n  | 1240\n  | 1241\n  | 1242\n  | 1243\n  | 1244\n  | 1245\n  | 1246\n  | 1247\n  | 1248\n  | 1249\n  | 1250\n  | 1251\n  | 1252\n  | 1253\n  | 1254\n  | 1255\n  | 1256\n  | 1257\n  | 1258\n  | 1259\n  | 1260\n  | 1261\n  | 1262\n  | 1263\n  | 1264\n  | 1265\n  | 1266\n  | 1267\n  | 1268\n  | 1269\n  | 1270\n  | 1271\n  | 1272\n  | 1273\n  | 1274\n  | 1275\n  | 1276\n  | 1277\n  | 1278\n  | 1279\n  | 1280\n  | 1281\n  | 1282\n  | 1283\n  | 1284\n  | 1285\n  | 1286\n  | 1287\n  | 1288\n  | 1289\n  | 1290\n  | 1291\n  | 1292\n  | 1293\n  | 1294\n  | 1295\n  | 1296\n  | 1297\n  | 1298\n  | 1299\n  | 1300\n  | 1301\n  | 1302\n  | 1303\n  | 1304\n  | 1305\n  | 1306\n  | 1307\n  | 1308\n  | 1309\n  | 1310\n  | 1311\n  | 1312\n  | 1313\n  | 1314\n  | 1315\n  | 1316\n  | 1317\n  | 1318\n  | 1319\n  | 1320\n  | 1321\n  | 1322\n  | 1323\n  | 1324\n  | 1325\n  | 1326\n  | 1327\n  | 1328\n  | 1329\n  | 1330\n  | 1331\n  | 1332\n  | 1333\n  | 1334\n  | 1335\n  | 1336\n  | 1337\n  | 1338\n  | 1339\n  | 1340\n  | 1341\n  | 1342\n  | 1343\n  | 1344\n  | 1345\n  | 1346\n  | 1347\n  | 1348\n  | 1349\n  | 1350\n  | 1351\n  | 1352\n  | 1353\n  | 1354\n  | 1355\n  | 1356\n  | 1357\n  | 1358\n  | 1359\n  | 1360\n  | 1361\n  | 1362\n  | 1363\n  | 1364\n  | 1365\n  | 1366\n  | 1367\n  | 1368\n  | 1369\n  | 1370\n  | 1371\n  | 1372\n  | 1373\n  | 1374\n  | 1375\n  | 1376\n  | 1377\n  | 1378\n  | 1379\n  | 1380\n  | 1381\n  | 1382\n  | 1383\n  | 1384\n  | 1385\n  | 1386\n  | 1387\n  | 1388\n  | 1389\n  | 1390\n  | 1391\n  | 1392\n  | 1393\n  | 1394\n  | 1395\n  | 1396\n  | 1397\n  | 1398\n  | 1399\n  | 1400\n  | 1401\n  | 1402\n  | 1403\n  | 1404\n  | 1405\n  | 1406\n  | 1407\n  | 1408\n  | 1409\n  | 1410\n  | 1411\n  | 1412\n  | 1413\n  | 1414\n  | 1415\n  | 1416\n  | 1417\n  | 1418\n  | 1419\n  | 1420\n  | 1421\n  | 1422\n  | 1423\n  | 1424\n  | 1425\n  | 1426\n  | 1427\n  | 1428\n  | 1429\n  | 1430\n  | 1431\n  | 1432\n  | 1433\n  | 1434\n  | 1435\n  | 1436\n  | 1437\n  | 1438\n  | 1439\n  | 1440\n  | 1441\n  | 1442\n  | 1443\n  | 1444\n  | 1445\n  | 1446\n  | 1447\n  | 1448\n  | 1449\n  | 1450\n  | 1451\n  | 1452\n  | 1453\n  | 1454\n  | 1455\n  | 1456\n  | 1457\n  | 1458\n  | 1459\n  | 1460\n  | 1461\n  | 1462\n  | 1463\n  | 1464\n  | 1465\n  | 1466\n  | 1467\n  | 1468\n  | 1469\n  | 1470\n  | 1471\n  | 1472\n  | 1473\n  | 1474\n  | 1475\n  | 1476\n  | 1477\n  | 1478\n  | 1479\n  | 1480\n  | 1481\n  | 1482\n  | 1483\n  | 1484\n  | 1485\n  | 1486\n  | 1487\n  | 1488\n  | 1489\n  | 1490\n  | 1491\n  | 1492\n  | 1493\n  | 1494\n  | 1495\n  | 1496\n  | 1497\n  | 1498\n  | 1499\n  | 1500\n  | 1501\n  | 1502\n  | 1503\n  | 1504\n  | 1505\n  | 1506\n  | 1507\n  | 1508\n  | 1509\n  | 1510\n  | 1511\n  | 1512\n  | 1513\n  | 1514\n  | 1515\n  | 1516\n  | 1517\n  | 1518\n  | 1519\n  | 1520\n  | 1521\n  | 1522\n  | 1523\n  | 1524\n  | 1525\n  | 1526\n  | 1527\n  | 1528\n  | 1529\n  | 1530\n  | 1531\n  | 1532\n  | 1533\n  | 1534\n  | 1535\n  | 1536\n  | 1537\n  | 1538\n  | 1539\n  | 1540\n  | 1541\n  | 1542\n  | 1543\n  | 1544\n  | 1545\n  | 1546\n  | 1547\n  | 1548\n  | 1549\n  | 1550\n  | 1551\n  | 1552\n  | 1553\n  | 1554\n  | 1555\n  | 1556\n  | 1557\n  | 1558\n  | 1559\n  | 1560\n  | 1561\n  | 1562\n  | 1563\n  | 1564\n  | 1565\n  | 1566\n  | 1567\n  | 1568\n  | 1569\n  | 1570\n  | 1571\n  | 1572\n  | 1573\n  | 1574\n  | 1575\n  | 1576\n  | 1577\n  | 1578\n  | 1579\n  | 1580\n  | 1581\n  | 1582\n  | 1583\n  | 1584\n  | 1585\n  | 1586\n  | 1587\n  | 1588\n  | 1589\n  | 1590\n  | 1591\n  | 1592\n  | 1593\n  | 1594\n  | 1595\n  | 1596\n  | 1597\n  | 1598\n  | 1599\n  | 1600\n  | 1601\n  | 1602\n  | 1603\n  | 1604\n  | 1605\n  | 1606\n  | 1607\n  | 1608\n  | 1609\n  | 1610\n  | 1611\n  | 1612\n  | 1613\n  | 1614\n  | 1615\n  | 1616\n  | 1617\n  | 1618\n  | 1619\n  | 1620\n  | 1621\n  | 1622\n  | 1623\n  | 1624\n  | 1625\n  | 1626\n  | 1627\n  | 1628\n  | 1629\n  | 1630\n  | 1631\n  | 1632\n  | 1633\n  | 1634\n  | 1635\n  | 1636\n  | 1637\n  | 1638\n  | 1639\n  | 1640\n  | 1641\n  | 1642\n  | 1643\n  | 1644\n  | 1645\n  | 1646\n  | 1647\n  | 1648\n  | 1649\n  | 1650\n  | 1651\n  | 1652\n  | 1653\n  | 1654\n  | 1655\n  | 1656\n  | 1657\n  | 1658\n  | 1659\n  | 1660\n  | 1661\n  | 1662\n  | 1663\n  | 1664\n  | 1665\n  | 1666\n  | 1667\n  | 1668\n  | 1669\n  | 1670\n  | 1671\n  | 1672\n  | 1673\n  | 1674\n  | 1675\n  | 1676\n  | 1677\n  | 1678\n  | 1679\n  | 1680\n  | 1681\n  | 1682\n  | 1683\n  | 1684\n  | 1685\n  | 1686\n  | 1687\n  | 1688\n  | 1689\n  | 1690\n  | 1691\n  | 1692\n  | 1693\n  | 1694\n  | 1695\n  | 1696\n  | 1697\n  | 1698\n  | 1699\n  | 1700\n  | 1701\n  | 1702\n  | 1703\n  | 1704\n  | 1705\n  | 1706\n  | 1707\n  | 1708\n  | 1709\n  | 1710\n  | 1711\n  | 1712\n  | 1713\n  | 1714\n  | 1715\n  | 1716\n  | 1717\n  | 1718\n  | 1719\n  | 1720\n  | 1721\n  | 1722\n  | 1723\n  | 1724\n  | 1725\n  | 1726\n  | 1727\n  | 1728\n  | 1729\n  | 1730\n  | 1731\n  | 1732\n  | 1733\n  | 1734\n  | 1735\n  | 1736\n  | 1737\n  | 1738\n  | 1739\n  | 1740\n  | 1741\n  | 1742\n  | 1743\n  | 1744\n  | 1745\n  | 1746\n  | 1747\n  | 1748\n  | 1749\n  | 1750\n  | 1751\n  | 1752\n  | 1753\n  | 1754\n  | 1755\n  | 1756\n  | 1757\n  | 1758\n  | 1759\n  | 1760\n  | 1761\n  | 1762\n  | 1763\n  | 1764\n  | 1765\n  | 1766\n  | 1767\n  | 1768\n  | 1769\n  | 1770\n  | 1771\n  | 1772\n  | 1773\n  | 1774\n  | 1775\n  | 1776\n  | 1777\n  | 1778\n  | 1779\n  | 1780\n  | 1781\n  | 1782\n  | 1783\n  | 1784\n  | 1785\n  | 1786\n  | 1787\n  | 1788\n  | 1789\n  | 1790\n  | 1791\n  | 1792\n  | 1793\n  | 1794\n  | 1795\n  | 1796\n  | 1797\n  | 1798\n  | 1799\n  | 1800\n  | 1801\n  | 1802\n  | 1803\n  | 1804\n  | 1805\n  | 1806\n  | 1807\n  | 1808\n  | 1809\n  | 1810\n  | 1811\n  | 1812\n  | 1813\n  | 1814\n  | 1815\n  | 1816\n  | 1817\n  | 1818\n  | 1819\n  | 1820\n  | 1821\n  | 1822\n  | 1823\n  | 1824\n  | 1825\n  | 1826\n  | 1827\n  | 1828\n  | 1829\n  | 1830\n  | 1831\n  | 1832\n  | 1833\n  | 1834\n  | 1835\n  | 1836\n  | 1837\n  | 1838\n  | 1839\n  | 1840\n  | 1841\n  | 1842\n  | 1843\n  | 1844\n  | 1845\n  | 1846\n  | 1847\n  | 1848\n  | 1849\n  | 1850\n  | 1851\n  | 1852\n  | 1853\n  | 1854\n  | 1855\n  | 1856\n  | 1857\n  | 1858\n  | 1859\n  | 1860\n  | 1861\n  | 1862\n  | 1863\n  | 1864\n  | 1865\n  | 1866\n  | 1867\n  | 1868\n  | 1869\n  | 1870\n  | 1871\n  | 1872\n  | 1873\n  | 1874\n  | 1875\n  | 1876\n  | 1877\n  | 1878\n  | 1879\n  | 1880\n  | 1881\n  | 1882\n  | 1883\n  | 1884\n  | 1885\n  | 1886\n  | 1887\n  | 1888\n  | 1889\n  | 1890\n  | 1891\n  | 1892\n  | 1893\n  | 1894\n  | 1895\n  | 1896\n  | 1897\n  | 1898\n  | 1899\n  | 1900\n  | 1901\n  | 1902\n  | 1903\n  | 1904\n  | 1905\n  | 1906\n  | 1907\n  | 1908\n  | 1909\n  | 1910\n  | 1911\n  | 1912\n  | 1913\n  | 1914\n  | 1915\n  | 1916\n  | 1917\n  | 1918\n  | 1919\n  | 1920\n  | 1921\n  | 1922\n  | 1923\n  | 1924\n  | 1925\n  | 1926\n  | 1927\n  | 1928\n  | 1929\n  | 1930\n  | 1931\n  | 1932\n  | 1933\n  | 1934\n  | 1935\n  | 1936\n  | 1937\n  | 1938\n  | 1939\n  | 1940\n  | 1941\n  | 1942\n  | 1943\n  | 1944\n  | 1945\n  | 1946\n  | 1947\n  | 1948\n  | 1949\n  | 1950\n  | 1951\n  | 1952\n  | 1953\n  | 1954\n  | 1955\n  | 1956\n  | 1957\n  | 1958\n  | 1959\n  | 1960\n  | 1961\n  | 1962\n  | 1963\n  | 1964\n  | 1965\n  | 1966\n  | 1967\n  | 1968\n  | 1969\n  | 1970\n  | 1971\n  | 1972\n  | 1973\n  | 1974\n  | 1975\n  | 1976\n  | 1977\n  | 1978\n  | 1979\n  | 1980\n  | 1981\n  | 1982\n  | 1983\n  | 1984\n  | 1985\n  | 1986\n  | 1987\n  | 1988\n  | 1989\n  | 1990\n  | 1991\n  | 1992\n  | 1993\n  | 1994\n  | 1995\n  | 1996\n  | 1997\n  | 1998\n  | 1999\n  | 2000\n  | 2001\n  | 2002\n  | 2003\n  | 2004\n  | 2005\n  | 2006\n  | 2007\n  | 2008\n  | 2009\n  | 2010\n  | 2011\n  | 2012\n  | 2013\n  | 2014\n  | 2015\n  | 2016\n  | 2017\n  | 2018\n  | 2019\n  | 2020\n  | 2021\n  | 2022\n  | 2023\n  | 2024\n  | 2025\n  | 2026\n  | 2027\n  | 2028\n  | 2029\n  | 2030\n  | 2031\n  | 2032\n  | 2033\n  | 2034\n  | 2035\n  | 2036\n  | 2037\n  | 2038\n  | 2039\n  | 2040\n  | 2041\n  | 2042\n  | 2043\n  | 2044\n  | 2045\n  | 2046\n  | 2047\n  | 2048\n  | 2049\n  | 2050\n  | 2051\n  | 2052\n  | 2053\n  | 2054\n  | 2055\n  | 2056\n  | 2057\n  | 2058\n  | 2059\n  | 2060\n  | 2061\n  | 2062\n  | 2063\n  | 2064\n  | 2065\n  | 2066\n  | 2067\n  | 2068\n  | 2069\n  | 2070\n  | 2071\n  | 2072\n  | 2073\n  | 2074\n  | 2075\n  | 2076\n  | 2077\n  | 2078\n  | 2079\n  | 2080\n  | 2081\n  | 2082\n  | 2083\n  | 2084\n  | 2085\n  | 2086\n  | 2087\n  | 2088\n  | 2089\n  | 2090\n  | 2091\n  | 2092\n  | 2093\n  | 2094\n  | 2095\n  | 2096\n  | 2097\n  | 2098\n  | 2099\n  | 2100\n  | 2101\n  | 2102\n  | 2103\n  | 2104\n  | 2105\n  | 2106\n  | 2107\n  | 2108\n  | 2109\n  | 2110\n  | 2111\n  | 2112\n  | 2113\n  | 2114\n  | 2115\n  | 2116\n  | 2117\n  | 2118\n  | 2119\n  | 2120\n  | 2121\n  | 2122\n  | 2123\n  | 2124\n  | 2125\n  | 2126\n  | 2127\n  | 2128\n  | 2129\n  | 2130\n  | 2131\n  | 2132\n  | 2133\n  | 2134\n  | 2135\n  | 2136\n  | 2137\n  | 2138\n  | 2139\n  | 2140\n  | 2141\n  | 2142\n  | 2143\n  | 2144\n  | 2145\n  | 2146\n  | 2147\n  | 2148\n  | 2149\n  | 2150\n  | 2151\n  | 2152\n  | 2153\n  | 2154\n  | 2155\n  | 2156\n  | 2157\n  | 2158\n  | 2159\n  | 2160\n  | 2161\n  | 2162\n  | 2163\n  | 2164\n  | 2165\n  | 2166\n  | 2167\n  | 2168\n  | 2169\n  | 2170\n  | 2171\n  | 2172\n  | 2173\n  | 2174\n  | 2175\n  | 2176\n  | 2177\n  | 2178\n  | 2179\n  | 2180\n  | 2181\n  | 2182\n  | 2183\n  | 2184\n  | 2185\n  | 2186\n  | 2187\n  | 2188\n  | 2189\n  | 2190\n  | 2191\n  | 2192\n  | 2193\n  | 2194\n  | 2195\n  | 2196\n  | 2197\n  | 2198\n  | 2199\n  | 2200\n  | 2201\n  | 2202\n  | 2203\n  | 2204\n  | 2205\n  | 2206\n  | 2207\n  | 2208\n  | 2209\n  | 2210\n  | 2211\n  | 2212\n  | 2213\n  | 2214\n  | 2215\n  | 2216\n  | 2217\n  | 2218\n  | 2219\n  | 2220\n  | 2221\n  | 2222\n  | 2223\n  | 2224\n  | 2225\n  | 2226\n  | 2227\n  | 2228\n  | 2229\n  | 2230\n  | 2231\n  | 2232\n  | 2233\n  | 2234\n  | 2235\n  | 2236\n  | 2237\n  | 2238\n  | 2239\n  | 2240\n  | 2241\n  | 2242\n  | 2243\n  | 2244\n  | 2245\n  | 2246\n  | 2247\n  | 2248\n  | 2249\n  | 2250\n  | 2251\n  | 2252\n  | 2253\n  | 2254\n  | 2255\n  | 2256\n  | 2257\n  | 2258\n  | 2259\n  | 2260\n  | 2261\n  | 2262\n  | 2263\n  | 2264\n  | 2265\n  | 2266\n  | 2267\n  | 2268\n  | 2269\n  | 2270\n  | 2271\n  | 2272\n  | 2273\n  | 2274\n  | 2275\n  | 2276\n  | 2277\n  | 2278\n  | 2279\n  | 2280\n  | 2281\n  | 2282\n  | 2283\n  | 2284\n  | 2285\n  | 2286\n  | 2287\n  | 2288\n  | 2289\n  | 2290\n  | 2291\n  | 2292\n  | 2293\n  | 2294\n  | 2295\n  | 2296\n  | 2297\n  | 2298\n  | 2299\n  | 2300\n  | 2301\n  | 2302\n  | 2303\n  | 2304\n  | 2305\n  | 2306\n  | 2307\n  | 2308\n  | 2309\n  | 2310\n  | 2311\n  | 2312\n  | 2313\n  | 2314\n  | 2315\n  | 2316\n  | 2317\n  | 2318\n  | 2319\n  | 2320\n  | 2321\n  | 2322\n  | 2323\n  | 2324\n  | 2325\n  | 2326\n  | 2327\n  | 2328\n  | 2329\n  | 2330\n  | 2331\n  | 2332\n  | 2333\n  | 2334\n  | 2335\n  | 2336\n  | 2337\n  | 2338\n  | 2339\n  | 2340\n  | 2341\n  | 2342\n  | 2343\n  | 2344\n  | 2345\n  | 2346\n  | 2347\n  | 2348\n  | 2349\n  | 2350\n  | 2351\n  | 2352\n  | 2353\n  | 2354\n  | 2355\n  | 2356\n  | 2357\n  | 2358\n  | 2359\n  | 2360\n  | 2361\n  | 2362\n  | 2363\n  | 2364\n  | 2365\n  | 2366\n  | 2367\n  | 2368\n  | 2369\n  | 2370\n  | 2371\n  | 2372\n  | 2373\n  | 2374\n  | 2375\n  | 2376\n  | 2377\n  | 2378\n  | 2379\n  | 2380\n  | 2381\n  | 2382\n  | 2383\n  | 2384\n  | 2385\n  | 2386\n  | 2387\n  | 2388\n  | 2389\n  | 2390\n  | 2391\n  | 2392\n  | 2393\n  | 2394\n  | 2395\n  | 2396\n  | 2397\n  | 2398\n  | 2399\n  | 2400\n  | 2401\n  | 2402\n  | 2403\n  | 2404\n  | 2405\n  | 2406\n  | 2407\n  | 2408\n  | 2409\n  | 2410\n  | 2411\n  | 2412\n  | 2413\n  | 2414\n  | 2415\n  | 2416\n  | 2417\n  | 2418\n  | 2419\n  | 2420\n  | 2421\n  | 2422\n  | 2423\n  | 2424\n  | 2425\n  | 2426\n  | 2427\n  | 2428\n  | 2429\n  | 2430\n  | 2431\n  | 2432\n  | 2433\n  | 2434\n  | 2435\n  | 2436\n  | 2437\n  | 2438\n  | 2439\n  | 2440\n  | 2441\n  | 2442\n  | 2443\n  | 2444\n  | 2445\n  | 2446\n  | 2447\n  | 2448\n  | 2449\n  | 2450\n  | 2451\n  | 2452\n  | 2453\n  | 2454\n  | 2455\n  | 2456\n  | 2457\n  | 2458\n  | 2459\n  | 2460\n  | 2461\n  | 2462\n  | 2463\n  | 2464\n  | 2465\n  | 2466\n  | 2467\n  | 2468\n  | 2469\n  | 2470\n  | 2471\n  | 2472\n  | 2473\n  | 2474\n  | 2475\n  | 2476\n  | 2477\n  | 2478\n  | 2479\n  | 2480\n  | 2481\n  | 2482\n  | 2483\n  | 2484\n  | 2485\n  | 2486\n  | 2487\n  | 2488\n  | 2489\n  | 2490\n  | 2491\n  | 2492\n  | 2493\n  | 2494\n  | 2495\n  | 2496\n  | 2497\n  | 2498\n  | 2499\n  | 2500\n  | 2501\n  | 2502\n  | 2503\n  | 2504\n  | 2505\n  | 2506\n  | 2507\n  | 2508\n  | 2509\n  | 2510\n  | 2511\n  | 2512\n  | 2513\n  | 2514\n  | 2515\n  | 2516\n  | 2517\n  | 2518\n  | 2519\n  | 2520\n  | 2521\n  | 2522\n  | 2523\n  | 2524\n  | 2525\n  | 2526\n  | 2527\n  | 2528\n  | 2529\n  | 2530\n  | 2531\n  | 2532\n  | 2533\n  | 2534\n  | 2535\n  | 2536\n  | 2537\n  | 2538\n  | 2539\n  | 2540\n  | 2541\n  | 2542\n  | 2543\n  | 2544\n  | 2545\n  | 2546\n  | 2547\n  | 2548\n  | 2549\n  | 2550\n  | 2551\n  | 2552\n  | 2553\n  | 2554\n  | 2555\n  | 2556\n  | 2557\n  | 2558\n  | 2559\n  | 2560\n  | 2561\n  | 2562\n  | 2563\n  | 2564\n  | 2565\n  | 2566\n  | 2567\n  | 2568\n  | 2569\n  | 2570\n  | 2571\n  | 2572\n  | 2573\n  | 2574\n  | 2575\n  | 2576\n  | 2577\n  | 2578\n  | 2579\n  | 2580\n  | 2581\n  | 2582\n  | 2583\n  | 2584\n  | 2585\n  | 2586\n  | 2587\n  | 2588\n  | 2589\n  | 2590\n  | 2591\n  | 2592\n  | 2593\n  | 2594\n  | 2595\n  | 2596\n  | 2597\n  | 2598\n  | 2599\n  | 2600\n  | 2601\n  | 2602\n  | 2603\n  | 2604\n  | 2605\n  | 2606\n  | 2607\n  | 2608\n  | 2609\n  | 2610\n  | 2611\n  | 2612\n  | 2613\n  | 2614\n  | 2615\n  | 2616\n  | 2617\n  | 2618\n  | 2619\n  | 2620\n  | 2621\n  | 2622\n  | 2623\n  | 2624\n  | 2625\n  | 2626\n  | 2627\n  | 2628\n  | 2629\n  | 2630\n  | 2631\n  | 2632\n  | 2633\n  | 2634\n  | 2635\n  | 2636\n  | 2637\n  | 2638\n  | 2639\n  | 2640\n  | 2641\n  | 2642\n  | 2643\n  | 2644\n  | 2645\n  | 2646\n  | 2647\n  | 2648\n  | 2649\n  | 2650\n  | 2651\n  | 2652\n  | 2653\n  | 2654\n  | 2655\n  | 2656\n  | 2657\n  | 2658\n  | 2659\n  | 2660\n  | 2661\n  | 2662\n  | 2663\n  | 2664\n  | 2665\n  | 2666\n  | 2667\n  | 2668\n  | 2669\n  | 2670\n  | 2671\n  | 2672\n  | 2673\n  | 2674\n  | 2675\n  | 2676\n  | 2677\n  | 2678\n  | 2679\n  | 2680\n  | 2681\n  | 2682\n  | 2683\n  | 2684\n  | 2685\n  | 2686\n  | 2687\n  | 2688\n  | 2689\n  | 2690\n  | 2691\n  | 2692\n  | 2693\n  | 2694\n  | 2695\n  | 2696\n  | 2697\n  | 2698\n  | 2699\n  | 2700\n  | 2701\n  | 2702\n  | 2703\n  | 2704\n  | 2705\n  | 2706\n  | 2707\n  | 2708\n  | 2709\n  | 2710\n  | 2711\n  | 2712\n  | 2713\n  | 2714\n  | 2715\n  | 2716\n  | 2717\n  | 2718\n  | 2719\n  | 2720\n  | 2721\n  | 2722\n  | 2723\n  | 2724\n  | 2725\n  | 2726\n  | 2727\n  | 2728\n  | 2729\n  | 2730\n  | 2731\n  | 2732\n  | 2733\n  | 2734\n  | 2735\n  | 2736\n  | 2737\n  | 2738\n  | 2739\n  | 2740\n  | 2741\n  | 2742\n  | 2743\n  | 2744\n  | 2745\n  | 2746\n  | 2747\n  | 2748\n  | 2749\n  | 2750\n  | 2751\n  | 2752\n  | 2753\n  | 2754\n  | 2755\n  | 2756\n  | 2757\n  | 2758\n  | 2759\n  | 2760\n  | 2761\n  | 2762\n  | 2763\n  | 2764\n  | 2765\n  | 2766\n  | 2767\n  | 2768\n  | 2769\n  | 2770\n  | 2771\n  | 2772\n  | 2773\n  | 2774\n  | 2775\n  | 2776\n  | 2777\n  | 2778\n  | 2779\n  | 2780\n  | 2781\n  | 2782\n  | 2783\n  | 2784\n  | 2785\n  | 2786\n  | 2787\n  | 2788\n  | 2789\n  | 2790\n  | 2791\n  | 2792\n  | 2793\n  | 2794\n  | 2795\n  | 2796\n  | 2797\n  | 2798\n  | 2799\n  | 2800\n  | 2801\n  | 2802\n  | 2803\n  | 2804\n  | 2805\n  | 2806\n  | 2807\n  | 2808\n  | 2809\n  | 2810\n  | 2811\n  | 2812\n  | 2813\n  | 2814\n  | 2815\n  | 2816\n  | 2817\n  | 2818\n  | 2819\n  | 2820\n  | 2821\n  | 2822\n  | 2823\n  | 2824\n  | 2825\n  | 2826\n  | 2827\n  | 2828\n  | 2829\n  | 2830\n  | 2831\n  | 2832\n  | 2833\n  | 2834\n  | 2835\n  | 2836\n  | 2837\n  | 2838\n  | 2839\n  | 2840\n  | 2841\n  | 2842\n  | 2843\n  | 2844\n  | 2845\n  | 2846\n  | 2847\n  | 2848\n  | 2849\n  | 2850\n  | 2851\n  | 2852\n  | 2853\n  | 2854\n  | 2855\n  | 2856\n  | 2857\n  | 2858\n  | 2859\n  | 2860\n  | 2861\n  | 2862\n  | 2863\n  | 2864\n  | 2865\n  | 2866\n  | 2867\n  | 2868\n  | 2869\n  | 2870\n  | 2871\n  | 2872\n  | 2873\n  | 2874\n  | 2875\n  | 2876\n  | 2877\n  | 2878\n  | 2879\n  | 2880\n  | 2881\n  | 2882\n  | 2883\n  | 2884\n  | 2885\n  | 2886\n  | 2887\n  | 2888\n  | 2889\n  | 2890\n  | 2891\n  | 2892\n  | 2893\n  | 2894\n  | 2895\n  | 2896\n  | 2897\n  | 2898\n  | 2899\n  | 2900\n  | 2901\n  | 2902\n  | 2903\n  | 2904\n  | 2905\n  | 2906\n  | 2907\n  | 2908\n  | 2909\n  | 2910\n  | 2911\n  | 2912\n  | 2913\n  | 2914\n  | 2915\n  | 2916\n  | 2917\n  | 2918\n  | 2919\n  | 2920\n  | 2921\n  | 2922\n  | 2923\n  | 2924\n  | 2925\n  | 2926\n  | 2927\n  | 2928\n  | 2929\n  | 2930\n  | 2931\n  | 2932\n  | 2933\n  | 2934\n  | 2935\n  | 2936\n  | 2937\n  | 2938\n  | 2939\n  | 2940\n  | 2941\n  | 2942\n  | 2943\n  | 2944\n  | 2945\n  | 2946\n  | 2947\n  | 2948\n  | 2949\n  | 2950\n  | 2951\n  | 2952\n  | 2953\n  | 2954\n  | 2955\n  | 2956\n  | 2957\n  | 2958\n  | 2959\n  | 2960\n  | 2961\n  | 2962\n  | 2963\n  | 2964\n  | 2965\n  | 2966\n  | 2967\n  | 2968\n  | 2969\n  | 2970\n  | 2971\n  | 2972\n  | 2973\n  | 2974\n  | 2975\n  | 2976\n  | 2977\n  | 2978\n  | 2979\n  | 2980\n  | 2981\n  | 2982\n  | 2983\n  | 2984\n  | 2985\n  | 2986\n  | 2987\n  | 2988\n  | 2989\n  | 2990\n  | 2991\n  | 2992\n  | 2993\n  | 2994\n  | 2995\n  | 2996\n  | 2997\n  | 2998\n  | 2999\n  | 3000\n  | 3001\n  | 3002\n  | 3003\n  | 3004\n  | 3005\n  | 3006\n  | 3007\n  | 3008\n  | 3009\n  | 3010\n  | 3011\n  | 3012\n  | 3013\n  | 3014\n  | 3015\n  | 3016\n  | 3017\n  | 3018\n  | 3019\n  | 3020\n  | 3021\n  | 3022\n  | 3023\n  | 3024\n  | 3025\n  | 3026\n  | 3027\n  | 3028\n  | 3029\n  | 3030\n  | 3031\n  | 3032\n  | 3033\n  | 3034\n  | 3035\n  | 3036\n  | 3037\n  | 3038\n  | 3039\n  | 3040\n  | 3041\n  | 3042\n  | 3043\n  | 3044\n  | 3045\n  | 3046\n  | 3047\n  | 3048\n  | 3049\n  | 3050\n  | 3051\n  | 3052\n  | 3053\n  | 3054\n  | 3055\n  | 3056\n  | 3057\n  | 3058\n  | 3059\n  | 3060\n  | 3061\n  | 3062\n  | 3063\n  | 3064\n  | 3065\n  | 3066\n  | 3067\n  | 3068\n  | 3069\n  | 3070\n  | 3071\n  | 3072\n  | 3073\n  | 3074\n  | 3075\n  | 3076\n  | 3077\n  | 3078\n  | 3079\n  | 3080\n  | 3081\n  | 3082\n  | 3083\n  | 3084\n  | 3085\n  | 3086\n  | 3087\n  | 3088\n  | 3089\n  | 3090\n  | 3091\n  | 3092\n  | 3093\n  | 3094\n  | 3095\n  | 3096\n  | 3097\n  | 3098\n  | 3099\n  | 3100\n  | 3101\n  | 3102\n  | 3103\n  | 3104\n  | 3105\n  | 3106\n  | 3107\n  | 3108\n  | 3109\n  | 3110\n  | 3111\n  | 3112\n  | 3113\n  | 3114\n  | 3115\n  | 3116\n  | 3117\n  | 3118\n  | 3119\n  | 3120\n  | 3121\n  | 3122\n  | 3123\n  | 3124\n  | 3125\n  | 3126\n  | 3127\n  | 3128\n  | 3129\n  | 3130\n  | 3131\n  | 3132\n  | 3133\n  | 3134\n  | 3135\n  | 3136\n  | 3137\n  | 3138\n  | 3139\n  | 3140\n  | 3141\n  | 3142\n  | 3143\n  | 3144\n  | 3145\n  | 3146\n  | 3147\n  | 3148\n  | 3149\n  | 3150\n  | 3151\n  | 3152\n  | 3153\n  | 3154\n  | 3155\n  | 3156\n  | 3157\n  | 3158\n  | 3159\n  | 3160\n  | 3161\n  | 3162\n  | 3163\n  | 3164\n  | 3165\n  | 3166\n  | 3167\n  | 3168\n  | 3169\n  | 3170\n  | 3171\n  | 3172\n  | 3173\n  | 3174\n  | 3175\n  | 3176\n  | 3177\n  | 3178\n  | 3179\n  | 3180\n  | 3181\n  | 3182\n  | 3183\n  | 3184\n  | 3185\n  | 3186\n  | 3187\n  | 3188\n  | 3189\n  | 3190\n  | 3191\n  | 3192\n  | 3193\n  | 3194\n  | 3195\n  | 3196\n  | 3197\n  | 3198\n  | 3199\n  | 3200\n  | 3201\n  | 3202\n  | 3203\n  | 3204\n  | 3205\n  | 3206\n  | 3207\n  | 3208\n  | 3209\n  | 3210\n  | 3211\n  | 3212\n  | 3213\n  | 3214\n  | 3215\n  | 3216\n  | 3217\n  | 3218\n  | 3219\n  | 3220\n  | 3221\n  | 3222\n  | 3223\n  | 3224\n  | 3225\n  | 3226\n  | 3227\n  | 3228\n  | 3229\n  | 3230\n  | 3231\n  | 3232\n  | 3233\n  | 3234\n  | 3235\n  | 3236\n  | 3237\n  | 3238\n  | 3239\n  | 3240\n  | 3241\n  | 3242\n  | 3243\n  | 3244\n  | 3245\n  | 3246\n  | 3247\n  | 3248\n  | 3249\n  | 3250\n  | 3251\n  | 3252\n  | 3253\n  | 3254\n  | 3255\n  | 3256\n  | 3257\n  | 3258\n  | 3259\n  | 3260\n  | 3261\n  | 3262\n  | 3263\n  | 3264\n  | 3265\n  | 3266\n  | 3267\n  | 3268\n  | 3269\n  | 3270\n  | 3271\n  | 3272\n  | 3273\n  | 3274\n  | 3275\n  | 3276\n  | 3277\n  | 3278\n  | 3279\n  | 3280\n  | 3281\n  | 3282\n  | 3283\n  | 3284\n  | 3285\n  | 3286\n  | 3287\n  | 3288\n  | 3289\n  | 3290\n  | 3291\n  | 3292\n  | 3293\n  | 3294\n  | 3295\n  | 3296\n  | 3297\n  | 3298\n  | 3299\n  | 3300\n  | 3301\n  | 3302\n  | 3303\n  | 3304\n  | 3305\n  | 3306\n  | 3307\n  | 3308\n  | 3309\n  | 3310\n  | 3311\n  | 3312\n  | 3313\n  | 3314\n  | 3315\n  | 3316\n  | 3317\n  | 3318\n  | 3319\n  | 3320\n  | 3321\n  | 3322\n  | 3323\n  | 3324\n  | 3325\n  | 3326\n  | 3327\n  | 3328\n  | 3329\n  | 3330\n  | 3331\n  | 3332\n  | 3333\n  | 3334\n  | 3335\n  | 3336\n  | 3337\n  | 3338\n  | 3339\n  | 3340\n  | 3341\n  | 3342\n  | 3343\n  | 3344\n  | 3345\n  | 3346\n  | 3347\n  | 3348\n  | 3349\n  | 3350\n  | 3351\n  | 3352\n  | 3353\n  | 3354\n  | 3355\n  | 3356\n  | 3357\n  | 3358\n  | 3359\n  | 3360\n  | 3361\n  | 3362\n  | 3363\n  | 3364\n  | 3365\n  | 3366\n  | 3367\n  | 3368\n  | 3369\n  | 3370\n  | 3371\n  | 3372\n  | 3373\n  | 3374\n  | 3375\n  | 3376\n  | 3377\n  | 3378\n  | 3379\n  | 3380\n  | 3381\n  | 3382\n  | 3383\n  | 3384\n  | 3385\n  | 3386\n  | 3387\n  | 3388\n  | 3389\n  | 3390\n  | 3391\n  | 3392\n  | 3393\n  | 3394\n  | 3395\n  | 3396\n  | 3397\n  | 3398\n  | 3399\n  | 3400\n  | 3401\n  | 3402\n  | 3403\n  | 3404\n  | 3405\n  | 3406\n  | 3407\n  | 3408\n  | 3409\n  | 3410\n  | 3411\n  | 3412\n  | 3413\n  | 3414\n  | 3415\n  | 3416\n  | 3417\n  | 3418\n  | 3419\n  | 3420\n  | 3421\n  | 3422\n  | 3423\n  | 3424\n  | 3425\n  | 3426\n  | 3427\n  | 3428\n  | 3429\n  | 3430\n  | 3431\n  | 3432\n  | 3433\n  | 3434\n  | 3435\n  | 3436\n  | 3437\n  | 3438\n  | 3439\n  | 3440\n  | 3441\n  | 3442\n  | 3443\n  | 3444\n  | 3445\n  | 3446\n  | 3447\n  | 3448\n  | 3449\n  | 3450\n  | 3451\n  | 3452\n  | 3453\n  | 3454\n  | 3455\n  | 3456\n  | 3457\n  | 3458\n  | 3459\n  | 3460\n  | 3461\n  | 3462\n  | 3463\n  | 3464\n  | 3465\n  | 3466\n  | 3467\n  | 3468\n  | 3469\n  | 3470\n  | 3471\n  | 3472\n  | 3473\n  | 3474\n  | 3475\n  | 3476\n  | 3477\n  | 3478\n  | 3479\n  | 3480\n  | 3481\n  | 3482\n  | 3483\n  | 3484\n  | 3485\n  | 3486\n  | 3487\n  | 3488\n  | 3489\n  | 3490\n  | 3491\n  | 3492\n  | 3493\n  | 3494\n  | 3495\n  | 3496\n  | 3497\n  | 3498\n  | 3499\n  | 3500\n  | 3501\n  | 3502\n  | 3503\n  | 3504\n  | 3505\n  | 3506\n  | 3507\n  | 3508\n  | 3509\n  | 3510\n  | 3511\n  | 3512\n  | 3513\n  | 3514\n  | 3515\n  | 3516\n  | 3517\n  | 3518\n  | 3519\n  | 3520\n  | 3521\n  | 3522\n  | 3523\n  | 3524\n  | 3525\n  | 3526\n  | 3527\n  | 3528\n  | 3529\n  | 3530\n  | 3531\n  | 3532\n  | 3533\n  | 3534\n  | 3535\n  | 3536\n  | 3537\n  | 3538\n  | 3539\n  | 3540\n  | 3541\n  | 3542\n  | 3543\n  | 3544\n  | 3545\n  | 3546\n  | 3547\n  | 3548\n  | 3549\n  | 3550\n  | 3551\n  | 3552\n  | 3553\n  | 3554\n  | 3555\n  | 3556\n  | 3557\n  | 3558\n  | 3559\n  | 3560\n  | 3561\n  | 3562\n  | 3563\n  | 3564\n  | 3565\n  | 3566\n  | 3567\n  | 3568\n  | 3569\n  | 3570\n  | 3571\n  | 3572\n  | 3573\n  | 3574\n  | 3575\n  | 3576\n  | 3577\n  | 3578\n  | 3579\n  | 3580\n  | 3581\n  | 3582\n  | 3583\n  | 3584\n  | 3585\n  | 3586\n  | 3587\n  | 3588\n  | 3589\n  | 3590\n  | 3591\n  | 3592\n  | 3593\n  | 3594\n  | 3595\n  | 3596\n  | 3597\n  | 3598\n  | 3599\n  | 3600\n  | 3601\n  | 3602\n  | 3603\n  | 3604\n  | 3605\n  | 3606\n  | 3607\n  | 3608\n  | 3609\n  | 3610\n  | 3611\n  | 3612\n  | 3613\n  | 3614\n  | 3615\n  | 3616\n  | 3617\n  | 3618\n  | 3619\n  | 3620\n  | 3621\n  | 3622\n  | 3623\n  | 3624\n  | 3625\n  | 3626\n  | 3627\n  | 3628\n  | 3629\n  | 3630\n  | 3631\n  | 3632\n  | 3633\n  | 3634\n  | 3635\n  | 3636\n  | 3637\n  | 3638\n  | 3639\n  | 3640\n  | 3641\n  | 3642\n  | 3643\n  | 3644\n  | 3645\n  | 3646\n  | 3647\n  | 3648\n  | 3649\n  | 3650\n  | 3651\n  | 3652\n  | 3653\n  | 3654\n  | 3655\n  | 3656\n  | 3657\n  | 3658\n  | 3659\n  | 3660\n  | 3661\n  | 3662\n  | 3663\n  | 3664\n  | 3665\n  | 3666\n  | 3667\n  | 3668\n  | 3669\n  | 3670\n  | 3671\n  | 3672\n  | 3673\n  | 3674\n  | 3675\n  | 3676\n  | 3677\n  | 3678\n  | 3679\n  | 3680\n  | 3681\n  | 3682\n  | 3683\n  | 3684\n  | 3685\n  | 3686\n  | 3687\n  | 3688\n  | 3689\n  | 3690\n  | 3691\n  | 3692\n  | 3693\n  | 3694\n  | 3695\n  | 3696\n  | 3697\n  | 3698\n  | 3699\n  | 3700\n  | 3701\n  | 3702\n  | 3703\n  | 3704\n  | 3705\n  | 3706\n  | 3707\n  | 3708\n  | 3709\n  | 3710\n  | 3711\n  | 3712\n  | 3713\n  | 3714\n  | 3715\n  | 3716\n  | 3717\n  | 3718\n  | 3719\n  | 3720\n  | 3721\n  | 3722\n  | 3723\n  | 3724\n  | 3725\n  | 3726\n  | 3727\n  | 3728\n  | 3729\n  | 3730\n  | 3731\n  | 3732\n  | 3733\n  | 3734\n  | 3735\n  | 3736\n  | 3737\n  | 3738\n  | 3739\n  | 3740\n  | 3741\n  | 3742\n  | 3743\n  | 3744\n  | 3745\n  | 3746\n  | 3747\n  | 3748\n  | 3749\n  | 3750\n  | 3751\n  | 3752\n  | 3753\n  | 3754\n  | 3755\n  | 3756\n  | 3757\n  | 3758\n  | 3759\n  | 3760\n  | 3761\n  | 3762\n  | 3763\n  | 3764\n  | 3765\n  | 3766\n  | 3767\n  | 3768\n  | 3769\n  | 3770\n  | 3771\n  | 3772\n  | 3773\n  | 3774\n  | 3775\n  | 3776\n  | 3777\n  | 3778\n  | 3779\n  | 3780\n  | 3781\n  | 3782\n  | 3783\n  | 3784\n  | 3785\n  | 3786\n  | 3787\n  | 3788\n  | 3789\n  | 3790\n  | 3791\n  | 3792\n  | 3793\n  | 3794\n  | 3795\n  | 3796\n  | 3797\n  | 3798\n  | 3799\n  | 3800\n  | 3801\n  | 3802\n  | 3803\n  | 3804\n  | 3805\n  | 3806\n  | 3807\n  | 3808\n  | 3809\n  | 3810\n  | 3811\n  | 3812\n  | 3813\n  | 3814\n  | 3815\n  | 3816\n  | 3817\n  | 3818\n  | 3819\n  | 3820\n  | 3821\n  | 3822\n  | 3823\n  | 3824\n  | 3825\n  | 3826\n  | 3827\n  | 3828\n  | 3829\n  | 3830\n  | 3831\n  | 3832\n  | 3833\n  | 3834\n  | 3835\n  | 3836\n  | 3837\n  | 3838\n  | 3839\n  | 3840\n  | 3841\n  | 3842\n  | 3843\n  | 3844\n  | 3845\n  | 3846\n  | 3847\n  | 3848\n  | 3849\n  | 3850\n  | 3851\n  | 3852\n  | 3853\n  | 3854\n  | 3855\n  | 3856\n  | 3857\n  | 3858\n  | 3859\n  | 3860\n  | 3861\n  | 3862\n  | 3863\n  | 3864\n  | 3865\n  | 3866\n  | 3867\n  | 3868\n  | 3869\n  | 3870\n  | 3871\n  | 3872\n  | 3873\n  | 3874\n  | 3875\n  | 3876\n  | 3877\n  | 3878\n  | 3879\n  | 3880\n  | 3881\n  | 3882\n  | 3883\n  | 3884\n  | 3885\n  | 3886\n  | 3887\n  | 3888\n  | 3889\n  | 3890\n  | 3891\n  | 3892\n  | 3893\n  | 3894\n  | 3895\n  | 3896\n  | 3897\n  | 3898\n  | 3899\n  | 3900\n  | 3901\n  | 3902\n  | 3903\n  | 3904\n  | 3905\n  | 3906\n  | 3907\n  | 3908\n  | 3909\n  | 3910\n  | 3911\n  | 3912\n  | 3913\n  | 3914\n  | 3915\n  | 3916\n  | 3917\n  | 3918\n  | 3919\n  | 3920\n  | 3921\n  | 3922\n  | 3923\n  | 3924\n  | 3925\n  | 3926\n  | 3927\n  | 3928\n  | 3929\n  | 3930\n  | 3931\n  | 3932\n  | 3933\n  | 3934\n  | 3935\n  | 3936\n  | 3937\n  | 3938\n  | 3939\n  | 3940\n  | 3941\n  | 3942\n  | 3943\n  | 3944\n  | 3945\n  | 3946\n  | 3947\n  | 3948\n  | 3949\n  | 3950\n  | 3951\n  | 3952\n  | 3953\n  | 3954\n  | 3955\n  | 3956\n  | 3957\n  | 3958\n  | 3959\n  | 3960\n  | 3961\n  | 3962\n  | 3963\n  | 3964\n  | 3965\n  | 3966\n  | 3967\n  | 3968\n  | 3969\n  | 3970\n  | 3971\n  | 3972\n  | 3973\n  | 3974\n  | 3975\n  | 3976\n  | 3977\n  | 3978\n  | 3979\n  | 3980\n  | 3981\n  | 3982\n  | 3983\n  | 3984\n  | 3985\n  | 3986\n  | 3987\n  | 3988\n  | 3989\n  | 3990\n  | 3991\n  | 3992\n  | 3993\n  | 3994\n  | 3995\n  | 3996\n  | 3997\n  | 3998\n  | 3999\n  | 4000\n  | 4001\n  | 4002\n  | 4003\n  | 4004\n  | 4005\n  | 4006\n  | 4007\n  | 4008\n  | 4009\n  | 4010\n  | 4011\n  | 4012\n  | 4013\n  | 4014\n  | 4015\n  | 4016\n  | 4017\n  | 4018\n  | 4019\n  | 4020\n  | 4021\n  | 4022\n  | 4023\n  | 4024\n  | 4025\n  | 4026\n  | 4027\n  | 4028\n  | 4029\n  | 4030\n  | 4031\n  | 4032\n  | 4033\n  | 4034\n  | 4035\n  | 4036\n  | 4037\n  | 4038\n  | 4039\n  | 4040\n  | 4041\n  | 4042\n  | 4043\n  | 4044\n  | 4045\n  | 4046\n  | 4047\n  | 4048\n  | 4049\n  | 4050\n  | 4051\n  | 4052\n  | 4053\n  | 4054\n  | 4055\n  | 4056\n  | 4057\n  | 4058\n  | 4059\n  | 4060\n  | 4061\n  | 4062\n  | 4063\n  | 4064\n  | 4065\n  | 4066\n  | 4067\n  | 4068\n  | 4069\n  | 4070\n  | 4071\n  | 4072\n  | 4073\n  | 4074\n  | 4075\n  | 4076\n  | 4077\n  | 4078\n  | 4079\n  | 4080\n  | 4081\n  | 4082\n  | 4083\n  | 4084\n  | 4085\n  | 4086\n  | 4087\n  | 4088\n  | 4089\n  | 4090\n  | 4091\n  | 4092\n  | 4093\n  | 4094\n  | 4095\n  | 4096\n  | 4097\n  | 4098\n  | 4099\n  | 4100\n  | 4101\n  | 4102\n  | 4103\n  | 4104\n  | 4105\n  | 4106\n  | 4107\n  | 4108\n  | 4109\n  | 4110\n  | 4111\n  | 4112\n  | 4113\n  | 4114\n  | 4115\n  | 4116\n  | 4117\n  | 4118\n  | 4119\n  | 4120\n  | 4121\n  | 4122\n  | 4123\n  | 4124\n  | 4125\n  | 4126\n  | 4127\n  | 4128\n  | 4129\n  | 4130\n  | 4131\n  | 4132\n  | 4133\n  | 4134\n  | 4135\n  | 4136\n  | 4137\n  | 4138\n  | 4139\n  | 4140\n  | 4141\n  | 4142\n  | 4143\n  | 4144\n  | 4145\n  | 4146\n  | 4147\n  | 4148\n  | 4149\n  | 4150\n  | 4151\n  | 4152\n  | 4153\n  | 4154\n  | 4155\n  | 4156\n  | 4157\n  | 4158\n  | 4159\n  | 4160\n  | 4161\n  | 4162\n  | 4163\n  | 4164\n  | 4165\n  | 4166\n  | 4167\n  | 4168\n  | 4169\n  | 4170\n  | 4171\n  | 4172\n  | 4173\n  | 4174\n  | 4175\n  | 4176\n  | 4177\n  | 4178\n  | 4179\n  | 4180\n  | 4181\n  | 4182\n  | 4183\n  | 4184\n  | 4185\n  | 4186\n  | 4187\n  | 4188\n  | 4189\n  | 4190\n  | 4191\n  | 4192\n  | 4193\n  | 4194\n  | 4195\n  | 4196\n  | 4197\n  | 4198\n  | 4199\n  | 4200\n  | 4201\n  | 4202\n  | 4203\n  | 4204\n  | 4205\n  | 4206\n  | 4207\n  | 4208\n  | 4209\n  | 4210\n  | 4211\n  | 4212\n  | 4213\n  | 4214\n  | 4215\n  | 4216\n  | 4217\n  | 4218\n  | 4219\n  | 4220\n  | 4221\n  | 4222\n  | 4223\n  | 4224\n  | 4225\n  | 4226\n  | 4227\n  | 4228\n  | 4229\n  | 4230\n  | 4231\n  | 4232\n  | 4233\n  | 4234\n  | 4235\n  | 4236\n  | 4237\n  | 4238\n  | 4239\n  | 4240\n  | 4241\n  | 4242\n  | 4243\n  | 4244\n  | 4245\n  | 4246\n  | 4247\n  | 4248\n  | 4249\n  | 4250\n  | 4251\n  | 4252\n  | 4253\n  | 4254\n  | 4255\n  | 4256\n  | 4257\n  | 4258\n  | 4259\n  | 4260\n  | 4261\n  | 4262\n  | 4263\n  | 4264\n  | 4265\n  | 4266\n  | 4267\n  | 4268\n  | 4269\n  | 4270\n  | 4271\n  | 4272\n  | 4273\n  | 4274\n  | 4275\n  | 4276\n  | 4277\n  | 4278\n  | 4279\n  | 4280\n  | 4281\n  | 4282\n  | 4283\n  | 4284\n  | 4285\n  | 4286\n  | 4287\n  | 4288\n  | 4289\n  | 4290\n  | 4291\n  | 4292\n  | 4293\n  | 4294\n  | 4295\n  | 4296\n  | 4297\n  | 4298\n  | 4299\n  | 4300\n  | 4301\n  | 4302\n  | 4303\n  | 4304\n  | 4305\n  | 4306\n  | 4307\n  | 4308\n  | 4309\n  | 4310\n  | 4311\n  | 4312\n  | 4313\n  | 4314\n  | 4315\n  | 4316\n  | 4317\n  | 4318\n  | 4319\n  | 4320\n  | 4321\n  | 4322\n  | 4323\n  | 4324\n  | 4325\n  | 4326\n  | 4327\n  | 4328\n  | 4329\n  | 4330\n  | 4331\n  | 4332\n  | 4333\n  | 4334\n  | 4335\n  | 4336\n  | 4337\n  | 4338\n  | 4339\n  | 4340\n  | 4341\n  | 4342\n  | 4343\n  | 4344\n  | 4345\n  | 4346\n  | 4347\n  | 4348\n  | 4349\n  | 4350\n  | 4351\n  | 4352\n  | 4353\n  | 4354\n  | 4355\n  | 4356\n  | 4357\n  | 4358\n  | 4359\n  | 4360\n  | 4361\n  | 4362\n  | 4363\n  | 4364\n  | 4365\n  | 4366\n  | 4367\n  | 4368\n  | 4369\n  | 4370\n  | 4371\n  | 4372\n  | 4373\n  | 4374\n  | 4375\n  | 4376\n  | 4377\n  | 4378\n  | 4379\n  | 4380\n  | 4381\n  | 4382\n  | 4383\n  | 4384\n  | 4385\n  | 4386\n  | 4387\n  | 4388\n  | 4389\n  | 4390\n  | 4391\n  | 4392\n  | 4393\n  | 4394\n  | 4395\n  | 4396\n  | 4397\n  | 4398\n  | 4399\n  | 4400\n  | 4401\n  | 4402\n  | 4403\n  | 4404\n  | 4405\n  | 4406\n  | 4407\n  | 4408\n  | 4409\n  | 4410\n  | 4411\n  | 4412\n  | 4413\n  | 4414\n  | 4415\n  | 4416\n  | 4417\n  | 4418\n  | 4419\n  | 4420\n  | 4421\n  | 4422\n  | 4423\n  | 4424\n  | 4425\n  | 4426\n  | 4427\n  | 4428\n  | 4429\n  | 4430\n  | 4431\n  | 4432\n  | 4433\n  | 4434\n  | 4435\n  | 4436\n  | 4437\n  | 4438\n  | 4439\n  | 4440\n  | 4441\n  | 4442\n  | 4443\n  | 4444\n  | 4445\n  | 4446\n  | 4447\n  | 4448\n  | 4449\n  | 4450\n  | 4451\n  | 4452\n  | 4453\n  | 4454\n  | 4455\n  | 4456\n  | 4457\n  | 4458\n  | 4459\n  | 4460\n  | 4461\n  | 4462\n  | 4463\n  | 4464\n  | 4465\n  | 4466\n  | 4467\n  | 4468\n  | 4469\n  | 4470\n  | 4471\n  | 4472\n  | 4473\n  | 4474\n  | 4475\n  | 4476\n  | 4477\n  | 4478\n  | 4479\n  | 4480\n  | 4481\n  | 4482\n  | 4483\n  | 4484\n  | 4485\n  | 4486\n  | 4487\n  | 4488\n  | 4489\n  | 4490\n  | 4491\n  | 4492\n  | 4493\n  | 4494\n  | 4495\n  | 4496\n  | 4497\n  | 4498\n  | 4499\n  | 4500\n  | 4501\n  | 4502\n  | 4503\n  | 4504\n  | 4505\n  | 4506\n  | 4507\n  | 4508\n  | 4509\n  | 4510\n  | 4511\n  | 4512\n  | 4513\n  | 4514\n  | 4515\n  | 4516\n  | 4517\n  | 4518\n  | 4519\n  | 4520\n  | 4521\n  | 4522\n  | 4523\n  | 4524\n  | 4525\n  | 4526\n  | 4527\n  | 4528\n  | 4529\n  | 4530\n  | 4531\n  | 4532\n  | 4533\n  | 4534\n  | 4535\n  | 4536\n  | 4537\n  | 4538\n  | 4539\n  | 4540\n  | 4541\n  | 4542\n  | 4543\n  | 4544\n  | 4545\n  | 4546\n  | 4547\n  | 4548\n  | 4549\n  | 4550\n  | 4551\n  | 4552\n  | 4553\n  | 4554\n  | 4555\n  | 4556\n  | 4557\n  | 4558\n  | 4559\n  | 4560\n  | 4561\n  | 4562\n  | 4563\n  | 4564\n  | 4565\n  | 4566\n  | 4567\n  | 4568\n  | 4569\n  | 4570\n  | 4571\n  | 4572\n  | 4573\n  | 4574\n  | 4575\n  | 4576\n  | 4577\n  | 4578\n  | 4579\n  | 4580\n  | 4581\n  | 4582\n  | 4583\n  | 4584\n  | 4585\n  | 4586\n  | 4587\n  | 4588\n  | 4589\n  | 4590\n  | 4591\n  | 4592\n  | 4593\n  | 4594\n  | 4595\n  | 4596\n  | 4597\n  | 4598\n  | 4599\n  | 4600\n  | 4601\n  | 4602\n  | 4603\n  | 4604\n  | 4605\n  | 4606\n  | 4607\n  | 4608\n  | 4609\n  | 4610\n  | 4611\n  | 4612\n  | 4613\n  | 4614\n  | 4615\n  | 4616\n  | 4617\n  | 4618\n  | 4619\n  | 4620\n  | 4621\n  | 4622\n  | 4623\n  | 4624\n  | 4625\n  | 4626\n  | 4627\n  | 4628\n  | 4629\n  | 4630\n  | 4631\n  | 4632\n  | 4633\n  | 4634\n  | 4635\n  | 4636\n  | 4637\n  | 4638\n  | 4639\n  | 4640\n  | 4641\n  | 4642\n  | 4643\n  | 4644\n  | 4645\n  | 4646\n  | 4647\n  | 4648\n  | 4649\n  | 4650\n  | 4651\n  | 4652\n  | 4653\n  | 4654\n  | 4655\n  | 4656\n  | 4657\n  | 4658\n  | 4659\n  | 4660\n  | 4661\n  | 4662\n  | 4663\n  | 4664\n  | 4665\n  | 4666\n  | 4667\n  | 4668\n  | 4669\n  | 4670\n  | 4671\n  | 4672\n  | 4673\n  | 4674\n  | 4675\n  | 4676\n  | 4677\n  | 4678\n  | 4679\n  | 4680\n  | 4681\n  | 4682\n  | 4683\n  | 4684\n  | 4685\n  | 4686\n  | 4687\n  | 4688\n  | 4689\n  | 4690\n  | 4691\n  | 4692\n  | 4693\n  | 4694\n  | 4695\n  | 4696\n  | 4697\n  | 4698\n  | 4699\n  | 4700\n  | 4701\n  | 4702\n  | 4703\n  | 4704\n  | 4705\n  | 4706\n  | 4707\n  | 4708\n  | 4709\n  | 4710\n  | 4711\n  | 4712\n  | 4713\n  | 4714\n  | 4715\n  | 4716\n  | 4717\n  | 4718\n  | 4719\n  | 4720\n  | 4721\n  | 4722\n  | 4723\n  | 4724\n  | 4725\n  | 4726\n  | 4727\n  | 4728\n  | 4729\n  | 4730\n  | 4731\n  | 4732\n  | 4733\n  | 4734\n  | 4735\n  | 4736\n  | 4737\n  | 4738\n  | 4739\n  | 4740\n  | 4741\n  | 4742\n  | 4743\n  | 4744\n  | 4745\n  | 4746\n  | 4747\n  | 4748\n  | 4749\n  | 4750\n  | 4751\n  | 4752\n  | 4753\n  | 4754\n  | 4755\n  | 4756\n  | 4757\n  | 4758\n  | 4759\n  | 4760\n  | 4761\n  | 4762\n  | 4763\n  | 4764\n  | 4765\n  | 4766\n  | 4767\n  | 4768\n  | 4769\n  | 4770\n  | 4771\n  | 4772\n  | 4773\n  | 4774\n  | 4775\n  | 4776\n  | 4777\n  | 4778\n  | 4779\n  | 4780\n  | 4781\n  | 4782\n  | 4783\n  | 4784\n  | 4785\n  | 4786\n  | 4787\n  | 4788\n  | 4789\n  | 4790\n  | 4791\n  | 4792\n  | 4793\n  | 4794\n  | 4795\n  | 4796\n  | 4797\n  | 4798\n  | 4799\n  | 4800\n  | 4801\n  | 4802\n  | 4803\n  | 4804\n  | 4805\n  | 4806\n  | 4807\n  | 4808\n  | 4809\n  | 4810\n  | 4811\n  | 4812\n  | 4813\n  | 4814\n  | 4815\n  | 4816\n  | 4817\n  | 4818\n  | 4819\n  | 4820\n  | 4821\n  | 4822\n  | 4823\n  | 4824\n  | 4825\n  | 4826\n  | 4827\n  | 4828\n  | 4829\n  | 4830\n  | 4831\n  | 4832\n  | 4833\n  | 4834\n  | 4835\n  | 4836\n  | 4837\n  | 4838\n  | 4839\n  | 4840\n  | 4841\n  | 4842\n  | 4843\n  | 4844\n  | 4845\n  | 4846\n  | 4847\n  | 4848\n  | 4849\n  | 4850\n  | 4851\n  | 4852\n  | 4853\n  | 4854\n  | 4855\n  | 4856\n  | 4857\n  | 4858\n  | 4859\n  | 4860\n  | 4861\n  | 4862\n  | 4863\n  | 4864\n  | 4865\n  | 4866\n  | 4867\n  | 4868\n  | 4869\n  | 4870\n  | 4871\n  | 4872\n  | 4873\n  | 4874\n  | 4875\n  | 4876\n  | 4877\n  | 4878\n  | 4879\n  | 4880\n  | 4881\n  | 4882\n  | 4883\n  | 4884\n  | 4885\n  | 4886\n  | 4887\n  | 4888\n  | 4889\n  | 4890\n  | 4891\n  | 4892\n  | 4893\n  | 4894\n  | 4895\n  | 4896\n  | 4897\n  | 4898\n  | 4899\n  | 4900\n  | 4901\n  | 4902\n  | 4903\n  | 4904\n  | 4905\n  | 4906\n  | 4907\n  | 4908\n  | 4909\n  | 4910\n  | 4911\n  | 4912\n  | 4913\n  | 4914\n  | 4915\n  | 4916\n  | 4917\n  | 4918\n  | 4919\n  | 4920\n  | 4921\n  | 4922\n  | 4923\n  | 4924\n  | 4925\n  | 4926\n  | 4927\n  | 4928\n  | 4929\n  | 4930\n  | 4931\n  | 4932\n  | 4933\n  | 4934\n  | 4935\n  | 4936\n  | 4937\n  | 4938\n  | 4939\n  | 4940\n  | 4941\n  | 4942\n  | 4943\n  | 4944\n  | 4945\n  | 4946\n  | 4947\n  | 4948\n  | 4949\n  | 4950\n  | 4951\n  | 4952\n  | 4953\n  | 4954\n  | 4955\n  | 4956\n  | 4957\n  | 4958\n  | 4959\n  | 4960\n  | 4961\n  | 4962\n  | 4963\n  | 4964\n  | 4965\n  | 4966\n  | 4967\n  | 4968\n  | 4969\n  | 4970\n  | 4971\n  | 4972\n  | 4973\n  | 4974\n  | 4975\n  | 4976\n  | 4977\n  | 4978\n  | 4979\n  | 4980\n  | 4981\n  | 4982\n  | 4983\n  | 4984\n  | 4985\n  | 4986\n  | 4987\n  | 4988\n  | 4989\n  | 4990\n  | 4991\n  | 4992\n  | 4993\n  | 4994\n  | 4995\n  | 4996\n  | 4997\n  | 4998\n  | 4999;\n\ntype Data = {\n  error?: ErrorCode\n};\n\n`;\n"
  },
  {
    "path": "tests/flow/union/blowup.js",
    "content": "// @flow\n\nexport type Select = {\n  expression: ArithmeticExpression;\n  alias: ?string;\n}\n\nexport class Query {\n  _select: Array<Select> = [];\n\n  select(expr: ArithmeticExpression): this {\n    this._select.push ({\n      expression: expr,\n      alias: '',\n    });\n    return this;\n  }\n}\n\nexport class BinaryExpression<T: ArithmeticExpression, U: ArithmeticExpression> {\n}\n\nexport type ArithmeticExpression = PlusOp | MinusOp | MulOp | DivOp | ModOp;\n\nexport class PlusOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression> {\n\n}\n\nexport class MinusOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression> {\n\n}\n\nexport class MulOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression> {\n\n}\n\nexport class DivOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression> {\n\n}\n\nexport class ModOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression> {\n\n}\n"
  },
  {
    "path": "tests/flow/union/fields.js",
    "content": "class C {\n    x: ?number|string;\n    constructor() {\n        this.x = null;\n    }\n}\n"
  },
  {
    "path": "tests/flow/union/fields2.js",
    "content": "class C { }\n\nclass D {\n    content: string|C;\n    copyContent(content: C): string|C {\n        this.content = content;\n        return this.content;\n    }\n}\n"
  },
  {
    "path": "tests/flow/union/issue-17.js",
    "content": "/* @flow */\n\ntype T =\n    {type: \"a\"; a: number} |\n    {type: \"b\"; b: string};\n\nvar l: Array<T> = [\n    {type: \"a\", a: 1},\n    {type: \"a\", a: 2},\n    {type: \"a\", a: 3},\n    {type: \"a\", a: 4},\n    {type: \"b\", b: \"monkey\"},\n    {type: \"b\", b: \"gorilla\"},\n    {type: \"b\", b: \"giraffe\"},\n    {type: \"b\", b: \"penguin\"},\n];\n"
  },
  {
    "path": "tests/flow/union/issue-198.js",
    "content": "var p = new Promise(function(resolve, reject) {\n    resolve(5);\n})\n    .then(function(num) {\n        return num.toFixed();\n    })\n    .then(function(str) {\n        // This should fail because str is string, not number\n        return str.toFixed();\n    });\n"
  },
  {
    "path": "tests/flow/union/issue-256.js",
    "content": "declare class Myclass {\n    myfun(myarray: Array<Function | string>): any;\n}\ndeclare var myclass: Myclass;\n\nmyclass.myfun([\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", function (ar) {}])\nmyclass.myfun([\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", function (ar) {}])\n"
  },
  {
    "path": "tests/flow/union/issue-323-lib.js",
    "content": "/* @flow */\nclass Foo {}\nmodule.exports = Foo;\n"
  },
  {
    "path": "tests/flow/union/issue-323.js",
    "content": "var Foo = require(\"./issue-323-lib\");\nvar foo = new Foo();\nvar foostr: Foo | string = foo;\n"
  },
  {
    "path": "tests/flow/union/issue-324.js",
    "content": "/* @flow */\nclass Foo{};\nclass Bar{};\n\nvar foostr: Foo | string = new Foo();\nvar barstr: Bar | string = new Bar();\n\nfoostr = barstr;\n"
  },
  {
    "path": "tests/flow/union/issue-325.js",
    "content": "class Tag {\n    constructor() {\n        var a1: Array<Tag|string> = [];\n        var a2: Array<Tag|string> = a1;\n    }\n}\n\ntype Node = Tag_ | string;\nclass Tag_ {\n    constructor() {\n        var a1: Array<Node> = [new Tag_];\n        var a2: Array<Node> = a1;\n    }\n}\n"
  },
  {
    "path": "tests/flow/union/issue-326.js",
    "content": "var numberAndStringArr:Array<number|string> = [1,2];\nvar stringArr:Array<string> = ['a','b'];\n\nvar result = numberAndStringArr.concat(stringArr);  // no error\n"
  },
  {
    "path": "tests/flow/union/issue-582.js",
    "content": "/***\n * nested unions\n * @flow\n */\n\n// inline\nvar nested1: ('foo' | 'bar') | 'baz' = 'baz';\n\n// through tvars\ntype FooBar = 'foo' | 'bar';\ntype Baz = 'baz';\ntype FooBarBaz = FooBar | Baz;\n\nvar nested2: FooBarBaz = 'baz';\n"
  },
  {
    "path": "tests/flow/union/issue-963.js",
    "content": "/***\n * unions with embedded intersections\n * @flow\n */\n\ntype t1 = {\n    p1 : number\n};\n\ntype t2 = {\n    p2: number\n}\n\ntype t3 = {\n    p3 : number\n}\n\ntype intersected = t1 & t2;\ntype union = intersected | t3;\ntype union2 = t3 | intersected;\n\nconst u1 : union = {\n    p3 : 3\n};\n\nconst u2 : union = {\n    p1 : 1,\n    p2 : 2\n};\n\nconst u3 : union2 = {\n    p1 : 1,\n    p2 : 2\n};\n"
  },
  {
    "path": "tests/flow/union/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/union/test-lib.js",
    "content": "/* @providesModule test-lib */\n\nclass C { }\nmodule.exports = C;\n"
  },
  {
    "path": "tests/flow/union/test.js",
    "content": "var C = require('test-lib');\n\n// TODO: spurious error! (replacing C with number makes the error go away)\n// type Foo<X> = Array<C> | Array<?C>;\ntype Foo<X:?C> = Array<X>; // workaround\nvar x:Array<C> = [];\nvar y:Array<?C> = [];\nfunction foo<X>(x:Foo<X>) {}\nfoo(x);\nfoo(y);\n\n// TODO: spurious error! (replacing C with number makes the error go away)\n// type Bar = (() => C) | (() => string);\ntype Bar = () => (C | string); // workaround\n\nfunction f() { return \"\"; }\nfunction bar(x:Bar) { }\nbar(f);\n"
  },
  {
    "path": "tests/flow/union/type-app.js",
    "content": "/**\n * @flow\n */\n\nclass LocalClass<T> {}\n\nvar a: LocalClass<number> | number = 123;\n\n// Iterator is defined in a lib file, so the speculative algorithm for the\n// union type would incorrectly succeed for Iterator<number>. Only later during\n// the merge would we fine the error, but it would be too late. The diff that\n// introduces this test fixes this such that the speculative algorithm is\n// correctly delayed upon encountering a non-concrete TypeAppT\nvar b: Iterator<number> | number = 123;\n"
  },
  {
    "path": "tests/flow/union/union.js",
    "content": "function bar(x: Document | string): void { }\nbar(0);\n\nclass C { }\nclass D { }\nfunction CD(b) {\n  var E = b? C: D;\n  var c:C = new E(); // error, since E could be D, and D is not a subtype of C\n  function qux(e: E) { } // this annotation is an error: is it C, or is it D?\n  function qux2(e: C | D) { } // OK\n  qux2(new C);\n}\n\ndeclare class F {\n    foo(x: number):void;\n    foo(x: string):void;\n}\nfunction corge(b) {\n    var x = b ? \"\" : 0;\n    new F().foo(x);\n}\n"
  },
  {
    "path": "tests/flow/union/yuge.js",
    "content": "/**\n * great big union used as type annotation will be flowed into itself.\n * List.mem check avoids pathology, as long as singletons aren't converted.\n * This is a band-aid, though: see second case.\n * @flow\n */\n'use strict';\n\nclass SecurityCheckupTypedLogger {\n  _data: Data;\n\n  setError(value: ErrorCode) {\n    this._data['error'] = value;\n  }\n\n  // Bug: right now, any incompatible type coming into a huge\n  // union might blow the recursion limit.\n  // TODO real solution is to specialize union reps for obvious cases,\n  // e.g. (base type, list in decl order, set). Of course we could do\n  // something quick to get the union size off the Ocaml call stack,\n  // but not sure it's worth doing that before the real solution.\n  ohThatsNotSoGood() {\n    (\"\": ErrorCode);  // also, error pos omits this line completely\n  }\n}\n\ntype ErrorCode =\n0 |\n1 |\n2 |\n3 |\n4 |\n5 |\n6 |\n7 |\n8 |\n9 |\n10 |\n11 |\n12 |\n13 |\n14 |\n15 |\n16 |\n17 |\n18 |\n19 |\n20 |\n21 |\n22 |\n23 |\n24 |\n25 |\n26 |\n27 |\n28 |\n29 |\n30 |\n31 |\n32 |\n33 |\n34 |\n35 |\n36 |\n37 |\n38 |\n39 |\n40 |\n41 |\n42 |\n43 |\n44 |\n45 |\n46 |\n47 |\n48 |\n49 |\n50 |\n51 |\n52 |\n53 |\n54 |\n55 |\n56 |\n57 |\n58 |\n59 |\n60 |\n61 |\n62 |\n63 |\n64 |\n65 |\n66 |\n67 |\n68 |\n69 |\n70 |\n71 |\n72 |\n73 |\n74 |\n75 |\n76 |\n77 |\n78 |\n79 |\n80 |\n81 |\n82 |\n83 |\n84 |\n85 |\n86 |\n87 |\n88 |\n89 |\n90 |\n91 |\n92 |\n93 |\n94 |\n95 |\n96 |\n97 |\n98 |\n99 |\n100 |\n101 |\n102 |\n103 |\n104 |\n105 |\n106 |\n107 |\n108 |\n109 |\n110 |\n111 |\n112 |\n113 |\n114 |\n115 |\n116 |\n117 |\n118 |\n119 |\n120 |\n121 |\n122 |\n123 |\n124 |\n125 |\n126 |\n127 |\n128 |\n129 |\n130 |\n131 |\n132 |\n133 |\n134 |\n135 |\n136 |\n137 |\n138 |\n139 |\n140 |\n141 |\n142 |\n143 |\n144 |\n145 |\n146 |\n147 |\n148 |\n149 |\n150 |\n151 |\n152 |\n153 |\n154 |\n155 |\n156 |\n157 |\n158 |\n159 |\n160 |\n161 |\n162 |\n163 |\n164 |\n165 |\n166 |\n167 |\n168 |\n169 |\n170 |\n171 |\n172 |\n173 |\n174 |\n175 |\n176 |\n177 |\n178 |\n179 |\n180 |\n181 |\n182 |\n183 |\n184 |\n185 |\n186 |\n187 |\n188 |\n189 |\n190 |\n191 |\n192 |\n193 |\n194 |\n195 |\n196 |\n197 |\n198 |\n199 |\n200 |\n201 |\n202 |\n203 |\n204 |\n205 |\n206 |\n207 |\n208 |\n209 |\n210 |\n211 |\n212 |\n213 |\n214 |\n215 |\n216 |\n217 |\n218 |\n219 |\n220 |\n221 |\n222 |\n223 |\n224 |\n225 |\n226 |\n227 |\n228 |\n229 |\n230 |\n231 |\n232 |\n233 |\n234 |\n235 |\n236 |\n237 |\n238 |\n239 |\n240 |\n241 |\n242 |\n243 |\n244 |\n245 |\n246 |\n247 |\n248 |\n249 |\n250 |\n251 |\n252 |\n253 |\n254 |\n255 |\n256 |\n257 |\n258 |\n259 |\n260 |\n261 |\n262 |\n263 |\n264 |\n265 |\n266 |\n267 |\n268 |\n269 |\n270 |\n271 |\n272 |\n273 |\n274 |\n275 |\n276 |\n277 |\n278 |\n279 |\n280 |\n281 |\n282 |\n283 |\n284 |\n285 |\n286 |\n287 |\n288 |\n289 |\n290 |\n291 |\n292 |\n293 |\n294 |\n295 |\n296 |\n297 |\n298 |\n299 |\n300 |\n301 |\n302 |\n303 |\n304 |\n305 |\n306 |\n307 |\n308 |\n309 |\n310 |\n311 |\n312 |\n313 |\n314 |\n315 |\n316 |\n317 |\n318 |\n319 |\n320 |\n321 |\n322 |\n323 |\n324 |\n325 |\n326 |\n327 |\n328 |\n329 |\n330 |\n331 |\n332 |\n333 |\n334 |\n335 |\n336 |\n337 |\n338 |\n339 |\n340 |\n341 |\n342 |\n343 |\n344 |\n345 |\n346 |\n347 |\n348 |\n349 |\n350 |\n351 |\n352 |\n353 |\n354 |\n355 |\n356 |\n357 |\n358 |\n359 |\n360 |\n361 |\n362 |\n363 |\n364 |\n365 |\n366 |\n367 |\n368 |\n369 |\n370 |\n371 |\n372 |\n373 |\n374 |\n375 |\n376 |\n377 |\n378 |\n379 |\n380 |\n381 |\n382 |\n383 |\n384 |\n385 |\n386 |\n387 |\n388 |\n389 |\n390 |\n391 |\n392 |\n393 |\n394 |\n395 |\n396 |\n397 |\n398 |\n399 |\n400 |\n401 |\n402 |\n403 |\n404 |\n405 |\n406 |\n407 |\n408 |\n409 |\n410 |\n411 |\n412 |\n413 |\n414 |\n415 |\n416 |\n417 |\n418 |\n419 |\n420 |\n421 |\n422 |\n423 |\n424 |\n425 |\n426 |\n427 |\n428 |\n429 |\n430 |\n431 |\n432 |\n433 |\n434 |\n435 |\n436 |\n437 |\n438 |\n439 |\n440 |\n441 |\n442 |\n443 |\n444 |\n445 |\n446 |\n447 |\n448 |\n449 |\n450 |\n451 |\n452 |\n453 |\n454 |\n455 |\n456 |\n457 |\n458 |\n459 |\n460 |\n461 |\n462 |\n463 |\n464 |\n465 |\n466 |\n467 |\n468 |\n469 |\n470 |\n471 |\n472 |\n473 |\n474 |\n475 |\n476 |\n477 |\n478 |\n479 |\n480 |\n481 |\n482 |\n483 |\n484 |\n485 |\n486 |\n487 |\n488 |\n489 |\n490 |\n491 |\n492 |\n493 |\n494 |\n495 |\n496 |\n497 |\n498 |\n499 |\n500 |\n501 |\n502 |\n503 |\n504 |\n505 |\n506 |\n507 |\n508 |\n509 |\n510 |\n511 |\n512 |\n513 |\n514 |\n515 |\n516 |\n517 |\n518 |\n519 |\n520 |\n521 |\n522 |\n523 |\n524 |\n525 |\n526 |\n527 |\n528 |\n529 |\n530 |\n531 |\n532 |\n533 |\n534 |\n535 |\n536 |\n537 |\n538 |\n539 |\n540 |\n541 |\n542 |\n543 |\n544 |\n545 |\n546 |\n547 |\n548 |\n549 |\n550 |\n551 |\n552 |\n553 |\n554 |\n555 |\n556 |\n557 |\n558 |\n559 |\n560 |\n561 |\n562 |\n563 |\n564 |\n565 |\n566 |\n567 |\n568 |\n569 |\n570 |\n571 |\n572 |\n573 |\n574 |\n575 |\n576 |\n577 |\n578 |\n579 |\n580 |\n581 |\n582 |\n583 |\n584 |\n585 |\n586 |\n587 |\n588 |\n589 |\n590 |\n591 |\n592 |\n593 |\n594 |\n595 |\n596 |\n597 |\n598 |\n599 |\n600 |\n601 |\n602 |\n603 |\n604 |\n605 |\n606 |\n607 |\n608 |\n609 |\n610 |\n611 |\n612 |\n613 |\n614 |\n615 |\n616 |\n617 |\n618 |\n619 |\n620 |\n621 |\n622 |\n623 |\n624 |\n625 |\n626 |\n627 |\n628 |\n629 |\n630 |\n631 |\n632 |\n633 |\n634 |\n635 |\n636 |\n637 |\n638 |\n639 |\n640 |\n641 |\n642 |\n643 |\n644 |\n645 |\n646 |\n647 |\n648 |\n649 |\n650 |\n651 |\n652 |\n653 |\n654 |\n655 |\n656 |\n657 |\n658 |\n659 |\n660 |\n661 |\n662 |\n663 |\n664 |\n665 |\n666 |\n667 |\n668 |\n669 |\n670 |\n671 |\n672 |\n673 |\n674 |\n675 |\n676 |\n677 |\n678 |\n679 |\n680 |\n681 |\n682 |\n683 |\n684 |\n685 |\n686 |\n687 |\n688 |\n689 |\n690 |\n691 |\n692 |\n693 |\n694 |\n695 |\n696 |\n697 |\n698 |\n699 |\n700 |\n701 |\n702 |\n703 |\n704 |\n705 |\n706 |\n707 |\n708 |\n709 |\n710 |\n711 |\n712 |\n713 |\n714 |\n715 |\n716 |\n717 |\n718 |\n719 |\n720 |\n721 |\n722 |\n723 |\n724 |\n725 |\n726 |\n727 |\n728 |\n729 |\n730 |\n731 |\n732 |\n733 |\n734 |\n735 |\n736 |\n737 |\n738 |\n739 |\n740 |\n741 |\n742 |\n743 |\n744 |\n745 |\n746 |\n747 |\n748 |\n749 |\n750 |\n751 |\n752 |\n753 |\n754 |\n755 |\n756 |\n757 |\n758 |\n759 |\n760 |\n761 |\n762 |\n763 |\n764 |\n765 |\n766 |\n767 |\n768 |\n769 |\n770 |\n771 |\n772 |\n773 |\n774 |\n775 |\n776 |\n777 |\n778 |\n779 |\n780 |\n781 |\n782 |\n783 |\n784 |\n785 |\n786 |\n787 |\n788 |\n789 |\n790 |\n791 |\n792 |\n793 |\n794 |\n795 |\n796 |\n797 |\n798 |\n799 |\n800 |\n801 |\n802 |\n803 |\n804 |\n805 |\n806 |\n807 |\n808 |\n809 |\n810 |\n811 |\n812 |\n813 |\n814 |\n815 |\n816 |\n817 |\n818 |\n819 |\n820 |\n821 |\n822 |\n823 |\n824 |\n825 |\n826 |\n827 |\n828 |\n829 |\n830 |\n831 |\n832 |\n833 |\n834 |\n835 |\n836 |\n837 |\n838 |\n839 |\n840 |\n841 |\n842 |\n843 |\n844 |\n845 |\n846 |\n847 |\n848 |\n849 |\n850 |\n851 |\n852 |\n853 |\n854 |\n855 |\n856 |\n857 |\n858 |\n859 |\n860 |\n861 |\n862 |\n863 |\n864 |\n865 |\n866 |\n867 |\n868 |\n869 |\n870 |\n871 |\n872 |\n873 |\n874 |\n875 |\n876 |\n877 |\n878 |\n879 |\n880 |\n881 |\n882 |\n883 |\n884 |\n885 |\n886 |\n887 |\n888 |\n889 |\n890 |\n891 |\n892 |\n893 |\n894 |\n895 |\n896 |\n897 |\n898 |\n899 |\n900 |\n901 |\n902 |\n903 |\n904 |\n905 |\n906 |\n907 |\n908 |\n909 |\n910 |\n911 |\n912 |\n913 |\n914 |\n915 |\n916 |\n917 |\n918 |\n919 |\n920 |\n921 |\n922 |\n923 |\n924 |\n925 |\n926 |\n927 |\n928 |\n929 |\n930 |\n931 |\n932 |\n933 |\n934 |\n935 |\n936 |\n937 |\n938 |\n939 |\n940 |\n941 |\n942 |\n943 |\n944 |\n945 |\n946 |\n947 |\n948 |\n949 |\n950 |\n951 |\n952 |\n953 |\n954 |\n955 |\n956 |\n957 |\n958 |\n959 |\n960 |\n961 |\n962 |\n963 |\n964 |\n965 |\n966 |\n967 |\n968 |\n969 |\n970 |\n971 |\n972 |\n973 |\n974 |\n975 |\n976 |\n977 |\n978 |\n979 |\n980 |\n981 |\n982 |\n983 |\n984 |\n985 |\n986 |\n987 |\n988 |\n989 |\n990 |\n991 |\n992 |\n993 |\n994 |\n995 |\n996 |\n997 |\n998 |\n999 |\n1000 |\n1001 |\n1002 |\n1003 |\n1004 |\n1005 |\n1006 |\n1007 |\n1008 |\n1009 |\n1010 |\n1011 |\n1012 |\n1013 |\n1014 |\n1015 |\n1016 |\n1017 |\n1018 |\n1019 |\n1020 |\n1021 |\n1022 |\n1023 |\n1024 |\n1025 |\n1026 |\n1027 |\n1028 |\n1029 |\n1030 |\n1031 |\n1032 |\n1033 |\n1034 |\n1035 |\n1036 |\n1037 |\n1038 |\n1039 |\n1040 |\n1041 |\n1042 |\n1043 |\n1044 |\n1045 |\n1046 |\n1047 |\n1048 |\n1049 |\n1050 |\n1051 |\n1052 |\n1053 |\n1054 |\n1055 |\n1056 |\n1057 |\n1058 |\n1059 |\n1060 |\n1061 |\n1062 |\n1063 |\n1064 |\n1065 |\n1066 |\n1067 |\n1068 |\n1069 |\n1070 |\n1071 |\n1072 |\n1073 |\n1074 |\n1075 |\n1076 |\n1077 |\n1078 |\n1079 |\n1080 |\n1081 |\n1082 |\n1083 |\n1084 |\n1085 |\n1086 |\n1087 |\n1088 |\n1089 |\n1090 |\n1091 |\n1092 |\n1093 |\n1094 |\n1095 |\n1096 |\n1097 |\n1098 |\n1099 |\n1100 |\n1101 |\n1102 |\n1103 |\n1104 |\n1105 |\n1106 |\n1107 |\n1108 |\n1109 |\n1110 |\n1111 |\n1112 |\n1113 |\n1114 |\n1115 |\n1116 |\n1117 |\n1118 |\n1119 |\n1120 |\n1121 |\n1122 |\n1123 |\n1124 |\n1125 |\n1126 |\n1127 |\n1128 |\n1129 |\n1130 |\n1131 |\n1132 |\n1133 |\n1134 |\n1135 |\n1136 |\n1137 |\n1138 |\n1139 |\n1140 |\n1141 |\n1142 |\n1143 |\n1144 |\n1145 |\n1146 |\n1147 |\n1148 |\n1149 |\n1150 |\n1151 |\n1152 |\n1153 |\n1154 |\n1155 |\n1156 |\n1157 |\n1158 |\n1159 |\n1160 |\n1161 |\n1162 |\n1163 |\n1164 |\n1165 |\n1166 |\n1167 |\n1168 |\n1169 |\n1170 |\n1171 |\n1172 |\n1173 |\n1174 |\n1175 |\n1176 |\n1177 |\n1178 |\n1179 |\n1180 |\n1181 |\n1182 |\n1183 |\n1184 |\n1185 |\n1186 |\n1187 |\n1188 |\n1189 |\n1190 |\n1191 |\n1192 |\n1193 |\n1194 |\n1195 |\n1196 |\n1197 |\n1198 |\n1199 |\n1200 |\n1201 |\n1202 |\n1203 |\n1204 |\n1205 |\n1206 |\n1207 |\n1208 |\n1209 |\n1210 |\n1211 |\n1212 |\n1213 |\n1214 |\n1215 |\n1216 |\n1217 |\n1218 |\n1219 |\n1220 |\n1221 |\n1222 |\n1223 |\n1224 |\n1225 |\n1226 |\n1227 |\n1228 |\n1229 |\n1230 |\n1231 |\n1232 |\n1233 |\n1234 |\n1235 |\n1236 |\n1237 |\n1238 |\n1239 |\n1240 |\n1241 |\n1242 |\n1243 |\n1244 |\n1245 |\n1246 |\n1247 |\n1248 |\n1249 |\n1250 |\n1251 |\n1252 |\n1253 |\n1254 |\n1255 |\n1256 |\n1257 |\n1258 |\n1259 |\n1260 |\n1261 |\n1262 |\n1263 |\n1264 |\n1265 |\n1266 |\n1267 |\n1268 |\n1269 |\n1270 |\n1271 |\n1272 |\n1273 |\n1274 |\n1275 |\n1276 |\n1277 |\n1278 |\n1279 |\n1280 |\n1281 |\n1282 |\n1283 |\n1284 |\n1285 |\n1286 |\n1287 |\n1288 |\n1289 |\n1290 |\n1291 |\n1292 |\n1293 |\n1294 |\n1295 |\n1296 |\n1297 |\n1298 |\n1299 |\n1300 |\n1301 |\n1302 |\n1303 |\n1304 |\n1305 |\n1306 |\n1307 |\n1308 |\n1309 |\n1310 |\n1311 |\n1312 |\n1313 |\n1314 |\n1315 |\n1316 |\n1317 |\n1318 |\n1319 |\n1320 |\n1321 |\n1322 |\n1323 |\n1324 |\n1325 |\n1326 |\n1327 |\n1328 |\n1329 |\n1330 |\n1331 |\n1332 |\n1333 |\n1334 |\n1335 |\n1336 |\n1337 |\n1338 |\n1339 |\n1340 |\n1341 |\n1342 |\n1343 |\n1344 |\n1345 |\n1346 |\n1347 |\n1348 |\n1349 |\n1350 |\n1351 |\n1352 |\n1353 |\n1354 |\n1355 |\n1356 |\n1357 |\n1358 |\n1359 |\n1360 |\n1361 |\n1362 |\n1363 |\n1364 |\n1365 |\n1366 |\n1367 |\n1368 |\n1369 |\n1370 |\n1371 |\n1372 |\n1373 |\n1374 |\n1375 |\n1376 |\n1377 |\n1378 |\n1379 |\n1380 |\n1381 |\n1382 |\n1383 |\n1384 |\n1385 |\n1386 |\n1387 |\n1388 |\n1389 |\n1390 |\n1391 |\n1392 |\n1393 |\n1394 |\n1395 |\n1396 |\n1397 |\n1398 |\n1399 |\n1400 |\n1401 |\n1402 |\n1403 |\n1404 |\n1405 |\n1406 |\n1407 |\n1408 |\n1409 |\n1410 |\n1411 |\n1412 |\n1413 |\n1414 |\n1415 |\n1416 |\n1417 |\n1418 |\n1419 |\n1420 |\n1421 |\n1422 |\n1423 |\n1424 |\n1425 |\n1426 |\n1427 |\n1428 |\n1429 |\n1430 |\n1431 |\n1432 |\n1433 |\n1434 |\n1435 |\n1436 |\n1437 |\n1438 |\n1439 |\n1440 |\n1441 |\n1442 |\n1443 |\n1444 |\n1445 |\n1446 |\n1447 |\n1448 |\n1449 |\n1450 |\n1451 |\n1452 |\n1453 |\n1454 |\n1455 |\n1456 |\n1457 |\n1458 |\n1459 |\n1460 |\n1461 |\n1462 |\n1463 |\n1464 |\n1465 |\n1466 |\n1467 |\n1468 |\n1469 |\n1470 |\n1471 |\n1472 |\n1473 |\n1474 |\n1475 |\n1476 |\n1477 |\n1478 |\n1479 |\n1480 |\n1481 |\n1482 |\n1483 |\n1484 |\n1485 |\n1486 |\n1487 |\n1488 |\n1489 |\n1490 |\n1491 |\n1492 |\n1493 |\n1494 |\n1495 |\n1496 |\n1497 |\n1498 |\n1499 |\n1500 |\n1501 |\n1502 |\n1503 |\n1504 |\n1505 |\n1506 |\n1507 |\n1508 |\n1509 |\n1510 |\n1511 |\n1512 |\n1513 |\n1514 |\n1515 |\n1516 |\n1517 |\n1518 |\n1519 |\n1520 |\n1521 |\n1522 |\n1523 |\n1524 |\n1525 |\n1526 |\n1527 |\n1528 |\n1529 |\n1530 |\n1531 |\n1532 |\n1533 |\n1534 |\n1535 |\n1536 |\n1537 |\n1538 |\n1539 |\n1540 |\n1541 |\n1542 |\n1543 |\n1544 |\n1545 |\n1546 |\n1547 |\n1548 |\n1549 |\n1550 |\n1551 |\n1552 |\n1553 |\n1554 |\n1555 |\n1556 |\n1557 |\n1558 |\n1559 |\n1560 |\n1561 |\n1562 |\n1563 |\n1564 |\n1565 |\n1566 |\n1567 |\n1568 |\n1569 |\n1570 |\n1571 |\n1572 |\n1573 |\n1574 |\n1575 |\n1576 |\n1577 |\n1578 |\n1579 |\n1580 |\n1581 |\n1582 |\n1583 |\n1584 |\n1585 |\n1586 |\n1587 |\n1588 |\n1589 |\n1590 |\n1591 |\n1592 |\n1593 |\n1594 |\n1595 |\n1596 |\n1597 |\n1598 |\n1599 |\n1600 |\n1601 |\n1602 |\n1603 |\n1604 |\n1605 |\n1606 |\n1607 |\n1608 |\n1609 |\n1610 |\n1611 |\n1612 |\n1613 |\n1614 |\n1615 |\n1616 |\n1617 |\n1618 |\n1619 |\n1620 |\n1621 |\n1622 |\n1623 |\n1624 |\n1625 |\n1626 |\n1627 |\n1628 |\n1629 |\n1630 |\n1631 |\n1632 |\n1633 |\n1634 |\n1635 |\n1636 |\n1637 |\n1638 |\n1639 |\n1640 |\n1641 |\n1642 |\n1643 |\n1644 |\n1645 |\n1646 |\n1647 |\n1648 |\n1649 |\n1650 |\n1651 |\n1652 |\n1653 |\n1654 |\n1655 |\n1656 |\n1657 |\n1658 |\n1659 |\n1660 |\n1661 |\n1662 |\n1663 |\n1664 |\n1665 |\n1666 |\n1667 |\n1668 |\n1669 |\n1670 |\n1671 |\n1672 |\n1673 |\n1674 |\n1675 |\n1676 |\n1677 |\n1678 |\n1679 |\n1680 |\n1681 |\n1682 |\n1683 |\n1684 |\n1685 |\n1686 |\n1687 |\n1688 |\n1689 |\n1690 |\n1691 |\n1692 |\n1693 |\n1694 |\n1695 |\n1696 |\n1697 |\n1698 |\n1699 |\n1700 |\n1701 |\n1702 |\n1703 |\n1704 |\n1705 |\n1706 |\n1707 |\n1708 |\n1709 |\n1710 |\n1711 |\n1712 |\n1713 |\n1714 |\n1715 |\n1716 |\n1717 |\n1718 |\n1719 |\n1720 |\n1721 |\n1722 |\n1723 |\n1724 |\n1725 |\n1726 |\n1727 |\n1728 |\n1729 |\n1730 |\n1731 |\n1732 |\n1733 |\n1734 |\n1735 |\n1736 |\n1737 |\n1738 |\n1739 |\n1740 |\n1741 |\n1742 |\n1743 |\n1744 |\n1745 |\n1746 |\n1747 |\n1748 |\n1749 |\n1750 |\n1751 |\n1752 |\n1753 |\n1754 |\n1755 |\n1756 |\n1757 |\n1758 |\n1759 |\n1760 |\n1761 |\n1762 |\n1763 |\n1764 |\n1765 |\n1766 |\n1767 |\n1768 |\n1769 |\n1770 |\n1771 |\n1772 |\n1773 |\n1774 |\n1775 |\n1776 |\n1777 |\n1778 |\n1779 |\n1780 |\n1781 |\n1782 |\n1783 |\n1784 |\n1785 |\n1786 |\n1787 |\n1788 |\n1789 |\n1790 |\n1791 |\n1792 |\n1793 |\n1794 |\n1795 |\n1796 |\n1797 |\n1798 |\n1799 |\n1800 |\n1801 |\n1802 |\n1803 |\n1804 |\n1805 |\n1806 |\n1807 |\n1808 |\n1809 |\n1810 |\n1811 |\n1812 |\n1813 |\n1814 |\n1815 |\n1816 |\n1817 |\n1818 |\n1819 |\n1820 |\n1821 |\n1822 |\n1823 |\n1824 |\n1825 |\n1826 |\n1827 |\n1828 |\n1829 |\n1830 |\n1831 |\n1832 |\n1833 |\n1834 |\n1835 |\n1836 |\n1837 |\n1838 |\n1839 |\n1840 |\n1841 |\n1842 |\n1843 |\n1844 |\n1845 |\n1846 |\n1847 |\n1848 |\n1849 |\n1850 |\n1851 |\n1852 |\n1853 |\n1854 |\n1855 |\n1856 |\n1857 |\n1858 |\n1859 |\n1860 |\n1861 |\n1862 |\n1863 |\n1864 |\n1865 |\n1866 |\n1867 |\n1868 |\n1869 |\n1870 |\n1871 |\n1872 |\n1873 |\n1874 |\n1875 |\n1876 |\n1877 |\n1878 |\n1879 |\n1880 |\n1881 |\n1882 |\n1883 |\n1884 |\n1885 |\n1886 |\n1887 |\n1888 |\n1889 |\n1890 |\n1891 |\n1892 |\n1893 |\n1894 |\n1895 |\n1896 |\n1897 |\n1898 |\n1899 |\n1900 |\n1901 |\n1902 |\n1903 |\n1904 |\n1905 |\n1906 |\n1907 |\n1908 |\n1909 |\n1910 |\n1911 |\n1912 |\n1913 |\n1914 |\n1915 |\n1916 |\n1917 |\n1918 |\n1919 |\n1920 |\n1921 |\n1922 |\n1923 |\n1924 |\n1925 |\n1926 |\n1927 |\n1928 |\n1929 |\n1930 |\n1931 |\n1932 |\n1933 |\n1934 |\n1935 |\n1936 |\n1937 |\n1938 |\n1939 |\n1940 |\n1941 |\n1942 |\n1943 |\n1944 |\n1945 |\n1946 |\n1947 |\n1948 |\n1949 |\n1950 |\n1951 |\n1952 |\n1953 |\n1954 |\n1955 |\n1956 |\n1957 |\n1958 |\n1959 |\n1960 |\n1961 |\n1962 |\n1963 |\n1964 |\n1965 |\n1966 |\n1967 |\n1968 |\n1969 |\n1970 |\n1971 |\n1972 |\n1973 |\n1974 |\n1975 |\n1976 |\n1977 |\n1978 |\n1979 |\n1980 |\n1981 |\n1982 |\n1983 |\n1984 |\n1985 |\n1986 |\n1987 |\n1988 |\n1989 |\n1990 |\n1991 |\n1992 |\n1993 |\n1994 |\n1995 |\n1996 |\n1997 |\n1998 |\n1999 |\n2000 |\n2001 |\n2002 |\n2003 |\n2004 |\n2005 |\n2006 |\n2007 |\n2008 |\n2009 |\n2010 |\n2011 |\n2012 |\n2013 |\n2014 |\n2015 |\n2016 |\n2017 |\n2018 |\n2019 |\n2020 |\n2021 |\n2022 |\n2023 |\n2024 |\n2025 |\n2026 |\n2027 |\n2028 |\n2029 |\n2030 |\n2031 |\n2032 |\n2033 |\n2034 |\n2035 |\n2036 |\n2037 |\n2038 |\n2039 |\n2040 |\n2041 |\n2042 |\n2043 |\n2044 |\n2045 |\n2046 |\n2047 |\n2048 |\n2049 |\n2050 |\n2051 |\n2052 |\n2053 |\n2054 |\n2055 |\n2056 |\n2057 |\n2058 |\n2059 |\n2060 |\n2061 |\n2062 |\n2063 |\n2064 |\n2065 |\n2066 |\n2067 |\n2068 |\n2069 |\n2070 |\n2071 |\n2072 |\n2073 |\n2074 |\n2075 |\n2076 |\n2077 |\n2078 |\n2079 |\n2080 |\n2081 |\n2082 |\n2083 |\n2084 |\n2085 |\n2086 |\n2087 |\n2088 |\n2089 |\n2090 |\n2091 |\n2092 |\n2093 |\n2094 |\n2095 |\n2096 |\n2097 |\n2098 |\n2099 |\n2100 |\n2101 |\n2102 |\n2103 |\n2104 |\n2105 |\n2106 |\n2107 |\n2108 |\n2109 |\n2110 |\n2111 |\n2112 |\n2113 |\n2114 |\n2115 |\n2116 |\n2117 |\n2118 |\n2119 |\n2120 |\n2121 |\n2122 |\n2123 |\n2124 |\n2125 |\n2126 |\n2127 |\n2128 |\n2129 |\n2130 |\n2131 |\n2132 |\n2133 |\n2134 |\n2135 |\n2136 |\n2137 |\n2138 |\n2139 |\n2140 |\n2141 |\n2142 |\n2143 |\n2144 |\n2145 |\n2146 |\n2147 |\n2148 |\n2149 |\n2150 |\n2151 |\n2152 |\n2153 |\n2154 |\n2155 |\n2156 |\n2157 |\n2158 |\n2159 |\n2160 |\n2161 |\n2162 |\n2163 |\n2164 |\n2165 |\n2166 |\n2167 |\n2168 |\n2169 |\n2170 |\n2171 |\n2172 |\n2173 |\n2174 |\n2175 |\n2176 |\n2177 |\n2178 |\n2179 |\n2180 |\n2181 |\n2182 |\n2183 |\n2184 |\n2185 |\n2186 |\n2187 |\n2188 |\n2189 |\n2190 |\n2191 |\n2192 |\n2193 |\n2194 |\n2195 |\n2196 |\n2197 |\n2198 |\n2199 |\n2200 |\n2201 |\n2202 |\n2203 |\n2204 |\n2205 |\n2206 |\n2207 |\n2208 |\n2209 |\n2210 |\n2211 |\n2212 |\n2213 |\n2214 |\n2215 |\n2216 |\n2217 |\n2218 |\n2219 |\n2220 |\n2221 |\n2222 |\n2223 |\n2224 |\n2225 |\n2226 |\n2227 |\n2228 |\n2229 |\n2230 |\n2231 |\n2232 |\n2233 |\n2234 |\n2235 |\n2236 |\n2237 |\n2238 |\n2239 |\n2240 |\n2241 |\n2242 |\n2243 |\n2244 |\n2245 |\n2246 |\n2247 |\n2248 |\n2249 |\n2250 |\n2251 |\n2252 |\n2253 |\n2254 |\n2255 |\n2256 |\n2257 |\n2258 |\n2259 |\n2260 |\n2261 |\n2262 |\n2263 |\n2264 |\n2265 |\n2266 |\n2267 |\n2268 |\n2269 |\n2270 |\n2271 |\n2272 |\n2273 |\n2274 |\n2275 |\n2276 |\n2277 |\n2278 |\n2279 |\n2280 |\n2281 |\n2282 |\n2283 |\n2284 |\n2285 |\n2286 |\n2287 |\n2288 |\n2289 |\n2290 |\n2291 |\n2292 |\n2293 |\n2294 |\n2295 |\n2296 |\n2297 |\n2298 |\n2299 |\n2300 |\n2301 |\n2302 |\n2303 |\n2304 |\n2305 |\n2306 |\n2307 |\n2308 |\n2309 |\n2310 |\n2311 |\n2312 |\n2313 |\n2314 |\n2315 |\n2316 |\n2317 |\n2318 |\n2319 |\n2320 |\n2321 |\n2322 |\n2323 |\n2324 |\n2325 |\n2326 |\n2327 |\n2328 |\n2329 |\n2330 |\n2331 |\n2332 |\n2333 |\n2334 |\n2335 |\n2336 |\n2337 |\n2338 |\n2339 |\n2340 |\n2341 |\n2342 |\n2343 |\n2344 |\n2345 |\n2346 |\n2347 |\n2348 |\n2349 |\n2350 |\n2351 |\n2352 |\n2353 |\n2354 |\n2355 |\n2356 |\n2357 |\n2358 |\n2359 |\n2360 |\n2361 |\n2362 |\n2363 |\n2364 |\n2365 |\n2366 |\n2367 |\n2368 |\n2369 |\n2370 |\n2371 |\n2372 |\n2373 |\n2374 |\n2375 |\n2376 |\n2377 |\n2378 |\n2379 |\n2380 |\n2381 |\n2382 |\n2383 |\n2384 |\n2385 |\n2386 |\n2387 |\n2388 |\n2389 |\n2390 |\n2391 |\n2392 |\n2393 |\n2394 |\n2395 |\n2396 |\n2397 |\n2398 |\n2399 |\n2400 |\n2401 |\n2402 |\n2403 |\n2404 |\n2405 |\n2406 |\n2407 |\n2408 |\n2409 |\n2410 |\n2411 |\n2412 |\n2413 |\n2414 |\n2415 |\n2416 |\n2417 |\n2418 |\n2419 |\n2420 |\n2421 |\n2422 |\n2423 |\n2424 |\n2425 |\n2426 |\n2427 |\n2428 |\n2429 |\n2430 |\n2431 |\n2432 |\n2433 |\n2434 |\n2435 |\n2436 |\n2437 |\n2438 |\n2439 |\n2440 |\n2441 |\n2442 |\n2443 |\n2444 |\n2445 |\n2446 |\n2447 |\n2448 |\n2449 |\n2450 |\n2451 |\n2452 |\n2453 |\n2454 |\n2455 |\n2456 |\n2457 |\n2458 |\n2459 |\n2460 |\n2461 |\n2462 |\n2463 |\n2464 |\n2465 |\n2466 |\n2467 |\n2468 |\n2469 |\n2470 |\n2471 |\n2472 |\n2473 |\n2474 |\n2475 |\n2476 |\n2477 |\n2478 |\n2479 |\n2480 |\n2481 |\n2482 |\n2483 |\n2484 |\n2485 |\n2486 |\n2487 |\n2488 |\n2489 |\n2490 |\n2491 |\n2492 |\n2493 |\n2494 |\n2495 |\n2496 |\n2497 |\n2498 |\n2499 |\n2500 |\n2501 |\n2502 |\n2503 |\n2504 |\n2505 |\n2506 |\n2507 |\n2508 |\n2509 |\n2510 |\n2511 |\n2512 |\n2513 |\n2514 |\n2515 |\n2516 |\n2517 |\n2518 |\n2519 |\n2520 |\n2521 |\n2522 |\n2523 |\n2524 |\n2525 |\n2526 |\n2527 |\n2528 |\n2529 |\n2530 |\n2531 |\n2532 |\n2533 |\n2534 |\n2535 |\n2536 |\n2537 |\n2538 |\n2539 |\n2540 |\n2541 |\n2542 |\n2543 |\n2544 |\n2545 |\n2546 |\n2547 |\n2548 |\n2549 |\n2550 |\n2551 |\n2552 |\n2553 |\n2554 |\n2555 |\n2556 |\n2557 |\n2558 |\n2559 |\n2560 |\n2561 |\n2562 |\n2563 |\n2564 |\n2565 |\n2566 |\n2567 |\n2568 |\n2569 |\n2570 |\n2571 |\n2572 |\n2573 |\n2574 |\n2575 |\n2576 |\n2577 |\n2578 |\n2579 |\n2580 |\n2581 |\n2582 |\n2583 |\n2584 |\n2585 |\n2586 |\n2587 |\n2588 |\n2589 |\n2590 |\n2591 |\n2592 |\n2593 |\n2594 |\n2595 |\n2596 |\n2597 |\n2598 |\n2599 |\n2600 |\n2601 |\n2602 |\n2603 |\n2604 |\n2605 |\n2606 |\n2607 |\n2608 |\n2609 |\n2610 |\n2611 |\n2612 |\n2613 |\n2614 |\n2615 |\n2616 |\n2617 |\n2618 |\n2619 |\n2620 |\n2621 |\n2622 |\n2623 |\n2624 |\n2625 |\n2626 |\n2627 |\n2628 |\n2629 |\n2630 |\n2631 |\n2632 |\n2633 |\n2634 |\n2635 |\n2636 |\n2637 |\n2638 |\n2639 |\n2640 |\n2641 |\n2642 |\n2643 |\n2644 |\n2645 |\n2646 |\n2647 |\n2648 |\n2649 |\n2650 |\n2651 |\n2652 |\n2653 |\n2654 |\n2655 |\n2656 |\n2657 |\n2658 |\n2659 |\n2660 |\n2661 |\n2662 |\n2663 |\n2664 |\n2665 |\n2666 |\n2667 |\n2668 |\n2669 |\n2670 |\n2671 |\n2672 |\n2673 |\n2674 |\n2675 |\n2676 |\n2677 |\n2678 |\n2679 |\n2680 |\n2681 |\n2682 |\n2683 |\n2684 |\n2685 |\n2686 |\n2687 |\n2688 |\n2689 |\n2690 |\n2691 |\n2692 |\n2693 |\n2694 |\n2695 |\n2696 |\n2697 |\n2698 |\n2699 |\n2700 |\n2701 |\n2702 |\n2703 |\n2704 |\n2705 |\n2706 |\n2707 |\n2708 |\n2709 |\n2710 |\n2711 |\n2712 |\n2713 |\n2714 |\n2715 |\n2716 |\n2717 |\n2718 |\n2719 |\n2720 |\n2721 |\n2722 |\n2723 |\n2724 |\n2725 |\n2726 |\n2727 |\n2728 |\n2729 |\n2730 |\n2731 |\n2732 |\n2733 |\n2734 |\n2735 |\n2736 |\n2737 |\n2738 |\n2739 |\n2740 |\n2741 |\n2742 |\n2743 |\n2744 |\n2745 |\n2746 |\n2747 |\n2748 |\n2749 |\n2750 |\n2751 |\n2752 |\n2753 |\n2754 |\n2755 |\n2756 |\n2757 |\n2758 |\n2759 |\n2760 |\n2761 |\n2762 |\n2763 |\n2764 |\n2765 |\n2766 |\n2767 |\n2768 |\n2769 |\n2770 |\n2771 |\n2772 |\n2773 |\n2774 |\n2775 |\n2776 |\n2777 |\n2778 |\n2779 |\n2780 |\n2781 |\n2782 |\n2783 |\n2784 |\n2785 |\n2786 |\n2787 |\n2788 |\n2789 |\n2790 |\n2791 |\n2792 |\n2793 |\n2794 |\n2795 |\n2796 |\n2797 |\n2798 |\n2799 |\n2800 |\n2801 |\n2802 |\n2803 |\n2804 |\n2805 |\n2806 |\n2807 |\n2808 |\n2809 |\n2810 |\n2811 |\n2812 |\n2813 |\n2814 |\n2815 |\n2816 |\n2817 |\n2818 |\n2819 |\n2820 |\n2821 |\n2822 |\n2823 |\n2824 |\n2825 |\n2826 |\n2827 |\n2828 |\n2829 |\n2830 |\n2831 |\n2832 |\n2833 |\n2834 |\n2835 |\n2836 |\n2837 |\n2838 |\n2839 |\n2840 |\n2841 |\n2842 |\n2843 |\n2844 |\n2845 |\n2846 |\n2847 |\n2848 |\n2849 |\n2850 |\n2851 |\n2852 |\n2853 |\n2854 |\n2855 |\n2856 |\n2857 |\n2858 |\n2859 |\n2860 |\n2861 |\n2862 |\n2863 |\n2864 |\n2865 |\n2866 |\n2867 |\n2868 |\n2869 |\n2870 |\n2871 |\n2872 |\n2873 |\n2874 |\n2875 |\n2876 |\n2877 |\n2878 |\n2879 |\n2880 |\n2881 |\n2882 |\n2883 |\n2884 |\n2885 |\n2886 |\n2887 |\n2888 |\n2889 |\n2890 |\n2891 |\n2892 |\n2893 |\n2894 |\n2895 |\n2896 |\n2897 |\n2898 |\n2899 |\n2900 |\n2901 |\n2902 |\n2903 |\n2904 |\n2905 |\n2906 |\n2907 |\n2908 |\n2909 |\n2910 |\n2911 |\n2912 |\n2913 |\n2914 |\n2915 |\n2916 |\n2917 |\n2918 |\n2919 |\n2920 |\n2921 |\n2922 |\n2923 |\n2924 |\n2925 |\n2926 |\n2927 |\n2928 |\n2929 |\n2930 |\n2931 |\n2932 |\n2933 |\n2934 |\n2935 |\n2936 |\n2937 |\n2938 |\n2939 |\n2940 |\n2941 |\n2942 |\n2943 |\n2944 |\n2945 |\n2946 |\n2947 |\n2948 |\n2949 |\n2950 |\n2951 |\n2952 |\n2953 |\n2954 |\n2955 |\n2956 |\n2957 |\n2958 |\n2959 |\n2960 |\n2961 |\n2962 |\n2963 |\n2964 |\n2965 |\n2966 |\n2967 |\n2968 |\n2969 |\n2970 |\n2971 |\n2972 |\n2973 |\n2974 |\n2975 |\n2976 |\n2977 |\n2978 |\n2979 |\n2980 |\n2981 |\n2982 |\n2983 |\n2984 |\n2985 |\n2986 |\n2987 |\n2988 |\n2989 |\n2990 |\n2991 |\n2992 |\n2993 |\n2994 |\n2995 |\n2996 |\n2997 |\n2998 |\n2999 |\n3000 |\n3001 |\n3002 |\n3003 |\n3004 |\n3005 |\n3006 |\n3007 |\n3008 |\n3009 |\n3010 |\n3011 |\n3012 |\n3013 |\n3014 |\n3015 |\n3016 |\n3017 |\n3018 |\n3019 |\n3020 |\n3021 |\n3022 |\n3023 |\n3024 |\n3025 |\n3026 |\n3027 |\n3028 |\n3029 |\n3030 |\n3031 |\n3032 |\n3033 |\n3034 |\n3035 |\n3036 |\n3037 |\n3038 |\n3039 |\n3040 |\n3041 |\n3042 |\n3043 |\n3044 |\n3045 |\n3046 |\n3047 |\n3048 |\n3049 |\n3050 |\n3051 |\n3052 |\n3053 |\n3054 |\n3055 |\n3056 |\n3057 |\n3058 |\n3059 |\n3060 |\n3061 |\n3062 |\n3063 |\n3064 |\n3065 |\n3066 |\n3067 |\n3068 |\n3069 |\n3070 |\n3071 |\n3072 |\n3073 |\n3074 |\n3075 |\n3076 |\n3077 |\n3078 |\n3079 |\n3080 |\n3081 |\n3082 |\n3083 |\n3084 |\n3085 |\n3086 |\n3087 |\n3088 |\n3089 |\n3090 |\n3091 |\n3092 |\n3093 |\n3094 |\n3095 |\n3096 |\n3097 |\n3098 |\n3099 |\n3100 |\n3101 |\n3102 |\n3103 |\n3104 |\n3105 |\n3106 |\n3107 |\n3108 |\n3109 |\n3110 |\n3111 |\n3112 |\n3113 |\n3114 |\n3115 |\n3116 |\n3117 |\n3118 |\n3119 |\n3120 |\n3121 |\n3122 |\n3123 |\n3124 |\n3125 |\n3126 |\n3127 |\n3128 |\n3129 |\n3130 |\n3131 |\n3132 |\n3133 |\n3134 |\n3135 |\n3136 |\n3137 |\n3138 |\n3139 |\n3140 |\n3141 |\n3142 |\n3143 |\n3144 |\n3145 |\n3146 |\n3147 |\n3148 |\n3149 |\n3150 |\n3151 |\n3152 |\n3153 |\n3154 |\n3155 |\n3156 |\n3157 |\n3158 |\n3159 |\n3160 |\n3161 |\n3162 |\n3163 |\n3164 |\n3165 |\n3166 |\n3167 |\n3168 |\n3169 |\n3170 |\n3171 |\n3172 |\n3173 |\n3174 |\n3175 |\n3176 |\n3177 |\n3178 |\n3179 |\n3180 |\n3181 |\n3182 |\n3183 |\n3184 |\n3185 |\n3186 |\n3187 |\n3188 |\n3189 |\n3190 |\n3191 |\n3192 |\n3193 |\n3194 |\n3195 |\n3196 |\n3197 |\n3198 |\n3199 |\n3200 |\n3201 |\n3202 |\n3203 |\n3204 |\n3205 |\n3206 |\n3207 |\n3208 |\n3209 |\n3210 |\n3211 |\n3212 |\n3213 |\n3214 |\n3215 |\n3216 |\n3217 |\n3218 |\n3219 |\n3220 |\n3221 |\n3222 |\n3223 |\n3224 |\n3225 |\n3226 |\n3227 |\n3228 |\n3229 |\n3230 |\n3231 |\n3232 |\n3233 |\n3234 |\n3235 |\n3236 |\n3237 |\n3238 |\n3239 |\n3240 |\n3241 |\n3242 |\n3243 |\n3244 |\n3245 |\n3246 |\n3247 |\n3248 |\n3249 |\n3250 |\n3251 |\n3252 |\n3253 |\n3254 |\n3255 |\n3256 |\n3257 |\n3258 |\n3259 |\n3260 |\n3261 |\n3262 |\n3263 |\n3264 |\n3265 |\n3266 |\n3267 |\n3268 |\n3269 |\n3270 |\n3271 |\n3272 |\n3273 |\n3274 |\n3275 |\n3276 |\n3277 |\n3278 |\n3279 |\n3280 |\n3281 |\n3282 |\n3283 |\n3284 |\n3285 |\n3286 |\n3287 |\n3288 |\n3289 |\n3290 |\n3291 |\n3292 |\n3293 |\n3294 |\n3295 |\n3296 |\n3297 |\n3298 |\n3299 |\n3300 |\n3301 |\n3302 |\n3303 |\n3304 |\n3305 |\n3306 |\n3307 |\n3308 |\n3309 |\n3310 |\n3311 |\n3312 |\n3313 |\n3314 |\n3315 |\n3316 |\n3317 |\n3318 |\n3319 |\n3320 |\n3321 |\n3322 |\n3323 |\n3324 |\n3325 |\n3326 |\n3327 |\n3328 |\n3329 |\n3330 |\n3331 |\n3332 |\n3333 |\n3334 |\n3335 |\n3336 |\n3337 |\n3338 |\n3339 |\n3340 |\n3341 |\n3342 |\n3343 |\n3344 |\n3345 |\n3346 |\n3347 |\n3348 |\n3349 |\n3350 |\n3351 |\n3352 |\n3353 |\n3354 |\n3355 |\n3356 |\n3357 |\n3358 |\n3359 |\n3360 |\n3361 |\n3362 |\n3363 |\n3364 |\n3365 |\n3366 |\n3367 |\n3368 |\n3369 |\n3370 |\n3371 |\n3372 |\n3373 |\n3374 |\n3375 |\n3376 |\n3377 |\n3378 |\n3379 |\n3380 |\n3381 |\n3382 |\n3383 |\n3384 |\n3385 |\n3386 |\n3387 |\n3388 |\n3389 |\n3390 |\n3391 |\n3392 |\n3393 |\n3394 |\n3395 |\n3396 |\n3397 |\n3398 |\n3399 |\n3400 |\n3401 |\n3402 |\n3403 |\n3404 |\n3405 |\n3406 |\n3407 |\n3408 |\n3409 |\n3410 |\n3411 |\n3412 |\n3413 |\n3414 |\n3415 |\n3416 |\n3417 |\n3418 |\n3419 |\n3420 |\n3421 |\n3422 |\n3423 |\n3424 |\n3425 |\n3426 |\n3427 |\n3428 |\n3429 |\n3430 |\n3431 |\n3432 |\n3433 |\n3434 |\n3435 |\n3436 |\n3437 |\n3438 |\n3439 |\n3440 |\n3441 |\n3442 |\n3443 |\n3444 |\n3445 |\n3446 |\n3447 |\n3448 |\n3449 |\n3450 |\n3451 |\n3452 |\n3453 |\n3454 |\n3455 |\n3456 |\n3457 |\n3458 |\n3459 |\n3460 |\n3461 |\n3462 |\n3463 |\n3464 |\n3465 |\n3466 |\n3467 |\n3468 |\n3469 |\n3470 |\n3471 |\n3472 |\n3473 |\n3474 |\n3475 |\n3476 |\n3477 |\n3478 |\n3479 |\n3480 |\n3481 |\n3482 |\n3483 |\n3484 |\n3485 |\n3486 |\n3487 |\n3488 |\n3489 |\n3490 |\n3491 |\n3492 |\n3493 |\n3494 |\n3495 |\n3496 |\n3497 |\n3498 |\n3499 |\n3500 |\n3501 |\n3502 |\n3503 |\n3504 |\n3505 |\n3506 |\n3507 |\n3508 |\n3509 |\n3510 |\n3511 |\n3512 |\n3513 |\n3514 |\n3515 |\n3516 |\n3517 |\n3518 |\n3519 |\n3520 |\n3521 |\n3522 |\n3523 |\n3524 |\n3525 |\n3526 |\n3527 |\n3528 |\n3529 |\n3530 |\n3531 |\n3532 |\n3533 |\n3534 |\n3535 |\n3536 |\n3537 |\n3538 |\n3539 |\n3540 |\n3541 |\n3542 |\n3543 |\n3544 |\n3545 |\n3546 |\n3547 |\n3548 |\n3549 |\n3550 |\n3551 |\n3552 |\n3553 |\n3554 |\n3555 |\n3556 |\n3557 |\n3558 |\n3559 |\n3560 |\n3561 |\n3562 |\n3563 |\n3564 |\n3565 |\n3566 |\n3567 |\n3568 |\n3569 |\n3570 |\n3571 |\n3572 |\n3573 |\n3574 |\n3575 |\n3576 |\n3577 |\n3578 |\n3579 |\n3580 |\n3581 |\n3582 |\n3583 |\n3584 |\n3585 |\n3586 |\n3587 |\n3588 |\n3589 |\n3590 |\n3591 |\n3592 |\n3593 |\n3594 |\n3595 |\n3596 |\n3597 |\n3598 |\n3599 |\n3600 |\n3601 |\n3602 |\n3603 |\n3604 |\n3605 |\n3606 |\n3607 |\n3608 |\n3609 |\n3610 |\n3611 |\n3612 |\n3613 |\n3614 |\n3615 |\n3616 |\n3617 |\n3618 |\n3619 |\n3620 |\n3621 |\n3622 |\n3623 |\n3624 |\n3625 |\n3626 |\n3627 |\n3628 |\n3629 |\n3630 |\n3631 |\n3632 |\n3633 |\n3634 |\n3635 |\n3636 |\n3637 |\n3638 |\n3639 |\n3640 |\n3641 |\n3642 |\n3643 |\n3644 |\n3645 |\n3646 |\n3647 |\n3648 |\n3649 |\n3650 |\n3651 |\n3652 |\n3653 |\n3654 |\n3655 |\n3656 |\n3657 |\n3658 |\n3659 |\n3660 |\n3661 |\n3662 |\n3663 |\n3664 |\n3665 |\n3666 |\n3667 |\n3668 |\n3669 |\n3670 |\n3671 |\n3672 |\n3673 |\n3674 |\n3675 |\n3676 |\n3677 |\n3678 |\n3679 |\n3680 |\n3681 |\n3682 |\n3683 |\n3684 |\n3685 |\n3686 |\n3687 |\n3688 |\n3689 |\n3690 |\n3691 |\n3692 |\n3693 |\n3694 |\n3695 |\n3696 |\n3697 |\n3698 |\n3699 |\n3700 |\n3701 |\n3702 |\n3703 |\n3704 |\n3705 |\n3706 |\n3707 |\n3708 |\n3709 |\n3710 |\n3711 |\n3712 |\n3713 |\n3714 |\n3715 |\n3716 |\n3717 |\n3718 |\n3719 |\n3720 |\n3721 |\n3722 |\n3723 |\n3724 |\n3725 |\n3726 |\n3727 |\n3728 |\n3729 |\n3730 |\n3731 |\n3732 |\n3733 |\n3734 |\n3735 |\n3736 |\n3737 |\n3738 |\n3739 |\n3740 |\n3741 |\n3742 |\n3743 |\n3744 |\n3745 |\n3746 |\n3747 |\n3748 |\n3749 |\n3750 |\n3751 |\n3752 |\n3753 |\n3754 |\n3755 |\n3756 |\n3757 |\n3758 |\n3759 |\n3760 |\n3761 |\n3762 |\n3763 |\n3764 |\n3765 |\n3766 |\n3767 |\n3768 |\n3769 |\n3770 |\n3771 |\n3772 |\n3773 |\n3774 |\n3775 |\n3776 |\n3777 |\n3778 |\n3779 |\n3780 |\n3781 |\n3782 |\n3783 |\n3784 |\n3785 |\n3786 |\n3787 |\n3788 |\n3789 |\n3790 |\n3791 |\n3792 |\n3793 |\n3794 |\n3795 |\n3796 |\n3797 |\n3798 |\n3799 |\n3800 |\n3801 |\n3802 |\n3803 |\n3804 |\n3805 |\n3806 |\n3807 |\n3808 |\n3809 |\n3810 |\n3811 |\n3812 |\n3813 |\n3814 |\n3815 |\n3816 |\n3817 |\n3818 |\n3819 |\n3820 |\n3821 |\n3822 |\n3823 |\n3824 |\n3825 |\n3826 |\n3827 |\n3828 |\n3829 |\n3830 |\n3831 |\n3832 |\n3833 |\n3834 |\n3835 |\n3836 |\n3837 |\n3838 |\n3839 |\n3840 |\n3841 |\n3842 |\n3843 |\n3844 |\n3845 |\n3846 |\n3847 |\n3848 |\n3849 |\n3850 |\n3851 |\n3852 |\n3853 |\n3854 |\n3855 |\n3856 |\n3857 |\n3858 |\n3859 |\n3860 |\n3861 |\n3862 |\n3863 |\n3864 |\n3865 |\n3866 |\n3867 |\n3868 |\n3869 |\n3870 |\n3871 |\n3872 |\n3873 |\n3874 |\n3875 |\n3876 |\n3877 |\n3878 |\n3879 |\n3880 |\n3881 |\n3882 |\n3883 |\n3884 |\n3885 |\n3886 |\n3887 |\n3888 |\n3889 |\n3890 |\n3891 |\n3892 |\n3893 |\n3894 |\n3895 |\n3896 |\n3897 |\n3898 |\n3899 |\n3900 |\n3901 |\n3902 |\n3903 |\n3904 |\n3905 |\n3906 |\n3907 |\n3908 |\n3909 |\n3910 |\n3911 |\n3912 |\n3913 |\n3914 |\n3915 |\n3916 |\n3917 |\n3918 |\n3919 |\n3920 |\n3921 |\n3922 |\n3923 |\n3924 |\n3925 |\n3926 |\n3927 |\n3928 |\n3929 |\n3930 |\n3931 |\n3932 |\n3933 |\n3934 |\n3935 |\n3936 |\n3937 |\n3938 |\n3939 |\n3940 |\n3941 |\n3942 |\n3943 |\n3944 |\n3945 |\n3946 |\n3947 |\n3948 |\n3949 |\n3950 |\n3951 |\n3952 |\n3953 |\n3954 |\n3955 |\n3956 |\n3957 |\n3958 |\n3959 |\n3960 |\n3961 |\n3962 |\n3963 |\n3964 |\n3965 |\n3966 |\n3967 |\n3968 |\n3969 |\n3970 |\n3971 |\n3972 |\n3973 |\n3974 |\n3975 |\n3976 |\n3977 |\n3978 |\n3979 |\n3980 |\n3981 |\n3982 |\n3983 |\n3984 |\n3985 |\n3986 |\n3987 |\n3988 |\n3989 |\n3990 |\n3991 |\n3992 |\n3993 |\n3994 |\n3995 |\n3996 |\n3997 |\n3998 |\n3999 |\n4000 |\n4001 |\n4002 |\n4003 |\n4004 |\n4005 |\n4006 |\n4007 |\n4008 |\n4009 |\n4010 |\n4011 |\n4012 |\n4013 |\n4014 |\n4015 |\n4016 |\n4017 |\n4018 |\n4019 |\n4020 |\n4021 |\n4022 |\n4023 |\n4024 |\n4025 |\n4026 |\n4027 |\n4028 |\n4029 |\n4030 |\n4031 |\n4032 |\n4033 |\n4034 |\n4035 |\n4036 |\n4037 |\n4038 |\n4039 |\n4040 |\n4041 |\n4042 |\n4043 |\n4044 |\n4045 |\n4046 |\n4047 |\n4048 |\n4049 |\n4050 |\n4051 |\n4052 |\n4053 |\n4054 |\n4055 |\n4056 |\n4057 |\n4058 |\n4059 |\n4060 |\n4061 |\n4062 |\n4063 |\n4064 |\n4065 |\n4066 |\n4067 |\n4068 |\n4069 |\n4070 |\n4071 |\n4072 |\n4073 |\n4074 |\n4075 |\n4076 |\n4077 |\n4078 |\n4079 |\n4080 |\n4081 |\n4082 |\n4083 |\n4084 |\n4085 |\n4086 |\n4087 |\n4088 |\n4089 |\n4090 |\n4091 |\n4092 |\n4093 |\n4094 |\n4095 |\n4096 |\n4097 |\n4098 |\n4099 |\n4100 |\n4101 |\n4102 |\n4103 |\n4104 |\n4105 |\n4106 |\n4107 |\n4108 |\n4109 |\n4110 |\n4111 |\n4112 |\n4113 |\n4114 |\n4115 |\n4116 |\n4117 |\n4118 |\n4119 |\n4120 |\n4121 |\n4122 |\n4123 |\n4124 |\n4125 |\n4126 |\n4127 |\n4128 |\n4129 |\n4130 |\n4131 |\n4132 |\n4133 |\n4134 |\n4135 |\n4136 |\n4137 |\n4138 |\n4139 |\n4140 |\n4141 |\n4142 |\n4143 |\n4144 |\n4145 |\n4146 |\n4147 |\n4148 |\n4149 |\n4150 |\n4151 |\n4152 |\n4153 |\n4154 |\n4155 |\n4156 |\n4157 |\n4158 |\n4159 |\n4160 |\n4161 |\n4162 |\n4163 |\n4164 |\n4165 |\n4166 |\n4167 |\n4168 |\n4169 |\n4170 |\n4171 |\n4172 |\n4173 |\n4174 |\n4175 |\n4176 |\n4177 |\n4178 |\n4179 |\n4180 |\n4181 |\n4182 |\n4183 |\n4184 |\n4185 |\n4186 |\n4187 |\n4188 |\n4189 |\n4190 |\n4191 |\n4192 |\n4193 |\n4194 |\n4195 |\n4196 |\n4197 |\n4198 |\n4199 |\n4200 |\n4201 |\n4202 |\n4203 |\n4204 |\n4205 |\n4206 |\n4207 |\n4208 |\n4209 |\n4210 |\n4211 |\n4212 |\n4213 |\n4214 |\n4215 |\n4216 |\n4217 |\n4218 |\n4219 |\n4220 |\n4221 |\n4222 |\n4223 |\n4224 |\n4225 |\n4226 |\n4227 |\n4228 |\n4229 |\n4230 |\n4231 |\n4232 |\n4233 |\n4234 |\n4235 |\n4236 |\n4237 |\n4238 |\n4239 |\n4240 |\n4241 |\n4242 |\n4243 |\n4244 |\n4245 |\n4246 |\n4247 |\n4248 |\n4249 |\n4250 |\n4251 |\n4252 |\n4253 |\n4254 |\n4255 |\n4256 |\n4257 |\n4258 |\n4259 |\n4260 |\n4261 |\n4262 |\n4263 |\n4264 |\n4265 |\n4266 |\n4267 |\n4268 |\n4269 |\n4270 |\n4271 |\n4272 |\n4273 |\n4274 |\n4275 |\n4276 |\n4277 |\n4278 |\n4279 |\n4280 |\n4281 |\n4282 |\n4283 |\n4284 |\n4285 |\n4286 |\n4287 |\n4288 |\n4289 |\n4290 |\n4291 |\n4292 |\n4293 |\n4294 |\n4295 |\n4296 |\n4297 |\n4298 |\n4299 |\n4300 |\n4301 |\n4302 |\n4303 |\n4304 |\n4305 |\n4306 |\n4307 |\n4308 |\n4309 |\n4310 |\n4311 |\n4312 |\n4313 |\n4314 |\n4315 |\n4316 |\n4317 |\n4318 |\n4319 |\n4320 |\n4321 |\n4322 |\n4323 |\n4324 |\n4325 |\n4326 |\n4327 |\n4328 |\n4329 |\n4330 |\n4331 |\n4332 |\n4333 |\n4334 |\n4335 |\n4336 |\n4337 |\n4338 |\n4339 |\n4340 |\n4341 |\n4342 |\n4343 |\n4344 |\n4345 |\n4346 |\n4347 |\n4348 |\n4349 |\n4350 |\n4351 |\n4352 |\n4353 |\n4354 |\n4355 |\n4356 |\n4357 |\n4358 |\n4359 |\n4360 |\n4361 |\n4362 |\n4363 |\n4364 |\n4365 |\n4366 |\n4367 |\n4368 |\n4369 |\n4370 |\n4371 |\n4372 |\n4373 |\n4374 |\n4375 |\n4376 |\n4377 |\n4378 |\n4379 |\n4380 |\n4381 |\n4382 |\n4383 |\n4384 |\n4385 |\n4386 |\n4387 |\n4388 |\n4389 |\n4390 |\n4391 |\n4392 |\n4393 |\n4394 |\n4395 |\n4396 |\n4397 |\n4398 |\n4399 |\n4400 |\n4401 |\n4402 |\n4403 |\n4404 |\n4405 |\n4406 |\n4407 |\n4408 |\n4409 |\n4410 |\n4411 |\n4412 |\n4413 |\n4414 |\n4415 |\n4416 |\n4417 |\n4418 |\n4419 |\n4420 |\n4421 |\n4422 |\n4423 |\n4424 |\n4425 |\n4426 |\n4427 |\n4428 |\n4429 |\n4430 |\n4431 |\n4432 |\n4433 |\n4434 |\n4435 |\n4436 |\n4437 |\n4438 |\n4439 |\n4440 |\n4441 |\n4442 |\n4443 |\n4444 |\n4445 |\n4446 |\n4447 |\n4448 |\n4449 |\n4450 |\n4451 |\n4452 |\n4453 |\n4454 |\n4455 |\n4456 |\n4457 |\n4458 |\n4459 |\n4460 |\n4461 |\n4462 |\n4463 |\n4464 |\n4465 |\n4466 |\n4467 |\n4468 |\n4469 |\n4470 |\n4471 |\n4472 |\n4473 |\n4474 |\n4475 |\n4476 |\n4477 |\n4478 |\n4479 |\n4480 |\n4481 |\n4482 |\n4483 |\n4484 |\n4485 |\n4486 |\n4487 |\n4488 |\n4489 |\n4490 |\n4491 |\n4492 |\n4493 |\n4494 |\n4495 |\n4496 |\n4497 |\n4498 |\n4499 |\n4500 |\n4501 |\n4502 |\n4503 |\n4504 |\n4505 |\n4506 |\n4507 |\n4508 |\n4509 |\n4510 |\n4511 |\n4512 |\n4513 |\n4514 |\n4515 |\n4516 |\n4517 |\n4518 |\n4519 |\n4520 |\n4521 |\n4522 |\n4523 |\n4524 |\n4525 |\n4526 |\n4527 |\n4528 |\n4529 |\n4530 |\n4531 |\n4532 |\n4533 |\n4534 |\n4535 |\n4536 |\n4537 |\n4538 |\n4539 |\n4540 |\n4541 |\n4542 |\n4543 |\n4544 |\n4545 |\n4546 |\n4547 |\n4548 |\n4549 |\n4550 |\n4551 |\n4552 |\n4553 |\n4554 |\n4555 |\n4556 |\n4557 |\n4558 |\n4559 |\n4560 |\n4561 |\n4562 |\n4563 |\n4564 |\n4565 |\n4566 |\n4567 |\n4568 |\n4569 |\n4570 |\n4571 |\n4572 |\n4573 |\n4574 |\n4575 |\n4576 |\n4577 |\n4578 |\n4579 |\n4580 |\n4581 |\n4582 |\n4583 |\n4584 |\n4585 |\n4586 |\n4587 |\n4588 |\n4589 |\n4590 |\n4591 |\n4592 |\n4593 |\n4594 |\n4595 |\n4596 |\n4597 |\n4598 |\n4599 |\n4600 |\n4601 |\n4602 |\n4603 |\n4604 |\n4605 |\n4606 |\n4607 |\n4608 |\n4609 |\n4610 |\n4611 |\n4612 |\n4613 |\n4614 |\n4615 |\n4616 |\n4617 |\n4618 |\n4619 |\n4620 |\n4621 |\n4622 |\n4623 |\n4624 |\n4625 |\n4626 |\n4627 |\n4628 |\n4629 |\n4630 |\n4631 |\n4632 |\n4633 |\n4634 |\n4635 |\n4636 |\n4637 |\n4638 |\n4639 |\n4640 |\n4641 |\n4642 |\n4643 |\n4644 |\n4645 |\n4646 |\n4647 |\n4648 |\n4649 |\n4650 |\n4651 |\n4652 |\n4653 |\n4654 |\n4655 |\n4656 |\n4657 |\n4658 |\n4659 |\n4660 |\n4661 |\n4662 |\n4663 |\n4664 |\n4665 |\n4666 |\n4667 |\n4668 |\n4669 |\n4670 |\n4671 |\n4672 |\n4673 |\n4674 |\n4675 |\n4676 |\n4677 |\n4678 |\n4679 |\n4680 |\n4681 |\n4682 |\n4683 |\n4684 |\n4685 |\n4686 |\n4687 |\n4688 |\n4689 |\n4690 |\n4691 |\n4692 |\n4693 |\n4694 |\n4695 |\n4696 |\n4697 |\n4698 |\n4699 |\n4700 |\n4701 |\n4702 |\n4703 |\n4704 |\n4705 |\n4706 |\n4707 |\n4708 |\n4709 |\n4710 |\n4711 |\n4712 |\n4713 |\n4714 |\n4715 |\n4716 |\n4717 |\n4718 |\n4719 |\n4720 |\n4721 |\n4722 |\n4723 |\n4724 |\n4725 |\n4726 |\n4727 |\n4728 |\n4729 |\n4730 |\n4731 |\n4732 |\n4733 |\n4734 |\n4735 |\n4736 |\n4737 |\n4738 |\n4739 |\n4740 |\n4741 |\n4742 |\n4743 |\n4744 |\n4745 |\n4746 |\n4747 |\n4748 |\n4749 |\n4750 |\n4751 |\n4752 |\n4753 |\n4754 |\n4755 |\n4756 |\n4757 |\n4758 |\n4759 |\n4760 |\n4761 |\n4762 |\n4763 |\n4764 |\n4765 |\n4766 |\n4767 |\n4768 |\n4769 |\n4770 |\n4771 |\n4772 |\n4773 |\n4774 |\n4775 |\n4776 |\n4777 |\n4778 |\n4779 |\n4780 |\n4781 |\n4782 |\n4783 |\n4784 |\n4785 |\n4786 |\n4787 |\n4788 |\n4789 |\n4790 |\n4791 |\n4792 |\n4793 |\n4794 |\n4795 |\n4796 |\n4797 |\n4798 |\n4799 |\n4800 |\n4801 |\n4802 |\n4803 |\n4804 |\n4805 |\n4806 |\n4807 |\n4808 |\n4809 |\n4810 |\n4811 |\n4812 |\n4813 |\n4814 |\n4815 |\n4816 |\n4817 |\n4818 |\n4819 |\n4820 |\n4821 |\n4822 |\n4823 |\n4824 |\n4825 |\n4826 |\n4827 |\n4828 |\n4829 |\n4830 |\n4831 |\n4832 |\n4833 |\n4834 |\n4835 |\n4836 |\n4837 |\n4838 |\n4839 |\n4840 |\n4841 |\n4842 |\n4843 |\n4844 |\n4845 |\n4846 |\n4847 |\n4848 |\n4849 |\n4850 |\n4851 |\n4852 |\n4853 |\n4854 |\n4855 |\n4856 |\n4857 |\n4858 |\n4859 |\n4860 |\n4861 |\n4862 |\n4863 |\n4864 |\n4865 |\n4866 |\n4867 |\n4868 |\n4869 |\n4870 |\n4871 |\n4872 |\n4873 |\n4874 |\n4875 |\n4876 |\n4877 |\n4878 |\n4879 |\n4880 |\n4881 |\n4882 |\n4883 |\n4884 |\n4885 |\n4886 |\n4887 |\n4888 |\n4889 |\n4890 |\n4891 |\n4892 |\n4893 |\n4894 |\n4895 |\n4896 |\n4897 |\n4898 |\n4899 |\n4900 |\n4901 |\n4902 |\n4903 |\n4904 |\n4905 |\n4906 |\n4907 |\n4908 |\n4909 |\n4910 |\n4911 |\n4912 |\n4913 |\n4914 |\n4915 |\n4916 |\n4917 |\n4918 |\n4919 |\n4920 |\n4921 |\n4922 |\n4923 |\n4924 |\n4925 |\n4926 |\n4927 |\n4928 |\n4929 |\n4930 |\n4931 |\n4932 |\n4933 |\n4934 |\n4935 |\n4936 |\n4937 |\n4938 |\n4939 |\n4940 |\n4941 |\n4942 |\n4943 |\n4944 |\n4945 |\n4946 |\n4947 |\n4948 |\n4949 |\n4950 |\n4951 |\n4952 |\n4953 |\n4954 |\n4955 |\n4956 |\n4957 |\n4958 |\n4959 |\n4960 |\n4961 |\n4962 |\n4963 |\n4964 |\n4965 |\n4966 |\n4967 |\n4968 |\n4969 |\n4970 |\n4971 |\n4972 |\n4973 |\n4974 |\n4975 |\n4976 |\n4977 |\n4978 |\n4979 |\n4980 |\n4981 |\n4982 |\n4983 |\n4984 |\n4985 |\n4986 |\n4987 |\n4988 |\n4989 |\n4990 |\n4991 |\n4992 |\n4993 |\n4994 |\n4995 |\n4996 |\n4997 |\n4998 |\n4999;\n\ntype Data = {\n  error?: ErrorCode,\n};\n"
  },
  {
    "path": "tests/flow/union-intersection/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`gen_big_disjoint_union.js 1`] = `\n// perf test for big disjoint union with 1000 cases\ntype TAction =\n{\n  type: 'a1',\n  a1: number,\n} |\n{\n  type: 'a2',\n  a1: number,\n} |\n{\n  type: 'a3',\n  a1: number,\n} |\n{\n  type: 'a4',\n  a1: number,\n} |\n{\n  type: 'a5',\n  a1: number,\n} |\n{\n  type: 'a6',\n  a1: number,\n} |\n{\n  type: 'a7',\n  a1: number,\n} |\n{\n  type: 'a8',\n  a1: number,\n} |\n{\n  type: 'a9',\n  a1: number,\n} |\n{\n  type: 'a10',\n  a1: number,\n} |\n{\n  type: 'a11',\n  a2: number,\n} |\n{\n  type: 'a12',\n  a2: number,\n} |\n{\n  type: 'a13',\n  a2: number,\n} |\n{\n  type: 'a14',\n  a2: number,\n} |\n{\n  type: 'a15',\n  a2: number,\n} |\n{\n  type: 'a16',\n  a2: number,\n} |\n{\n  type: 'a17',\n  a2: number,\n} |\n{\n  type: 'a18',\n  a2: number,\n} |\n{\n  type: 'a19',\n  a2: number,\n} |\n{\n  type: 'a20',\n  a2: number,\n} |\n{\n  type: 'a21',\n  a3: number,\n} |\n{\n  type: 'a22',\n  a3: number,\n} |\n{\n  type: 'a23',\n  a3: number,\n} |\n{\n  type: 'a24',\n  a3: number,\n} |\n{\n  type: 'a25',\n  a3: number,\n} |\n{\n  type: 'a26',\n  a3: number,\n} |\n{\n  type: 'a27',\n  a3: number,\n} |\n{\n  type: 'a28',\n  a3: number,\n} |\n{\n  type: 'a29',\n  a3: number,\n} |\n{\n  type: 'a30',\n  a3: number,\n} |\n{\n  type: 'a31',\n  a4: number,\n} |\n{\n  type: 'a32',\n  a4: number,\n} |\n{\n  type: 'a33',\n  a4: number,\n} |\n{\n  type: 'a34',\n  a4: number,\n} |\n{\n  type: 'a35',\n  a4: number,\n} |\n{\n  type: 'a36',\n  a4: number,\n} |\n{\n  type: 'a37',\n  a4: number,\n} |\n{\n  type: 'a38',\n  a4: number,\n} |\n{\n  type: 'a39',\n  a4: number,\n} |\n{\n  type: 'a40',\n  a4: number,\n} |\n{\n  type: 'a41',\n  a5: number,\n} |\n{\n  type: 'a42',\n  a5: number,\n} |\n{\n  type: 'a43',\n  a5: number,\n} |\n{\n  type: 'a44',\n  a5: number,\n} |\n{\n  type: 'a45',\n  a5: number,\n} |\n{\n  type: 'a46',\n  a5: number,\n} |\n{\n  type: 'a47',\n  a5: number,\n} |\n{\n  type: 'a48',\n  a5: number,\n} |\n{\n  type: 'a49',\n  a5: number,\n} |\n{\n  type: 'a50',\n  a5: number,\n} |\n{\n  type: 'a51',\n  a6: number,\n} |\n{\n  type: 'a52',\n  a6: number,\n} |\n{\n  type: 'a53',\n  a6: number,\n} |\n{\n  type: 'a54',\n  a6: number,\n} |\n{\n  type: 'a55',\n  a6: number,\n} |\n{\n  type: 'a56',\n  a6: number,\n} |\n{\n  type: 'a57',\n  a6: number,\n} |\n{\n  type: 'a58',\n  a6: number,\n} |\n{\n  type: 'a59',\n  a6: number,\n} |\n{\n  type: 'a60',\n  a6: number,\n} |\n{\n  type: 'a61',\n  a7: number,\n} |\n{\n  type: 'a62',\n  a7: number,\n} |\n{\n  type: 'a63',\n  a7: number,\n} |\n{\n  type: 'a64',\n  a7: number,\n} |\n{\n  type: 'a65',\n  a7: number,\n} |\n{\n  type: 'a66',\n  a7: number,\n} |\n{\n  type: 'a67',\n  a7: number,\n} |\n{\n  type: 'a68',\n  a7: number,\n} |\n{\n  type: 'a69',\n  a7: number,\n} |\n{\n  type: 'a70',\n  a7: number,\n} |\n{\n  type: 'a71',\n  a8: number,\n} |\n{\n  type: 'a72',\n  a8: number,\n} |\n{\n  type: 'a73',\n  a8: number,\n} |\n{\n  type: 'a74',\n  a8: number,\n} |\n{\n  type: 'a75',\n  a8: number,\n} |\n{\n  type: 'a76',\n  a8: number,\n} |\n{\n  type: 'a77',\n  a8: number,\n} |\n{\n  type: 'a78',\n  a8: number,\n} |\n{\n  type: 'a79',\n  a8: number,\n} |\n{\n  type: 'a80',\n  a8: number,\n} |\n{\n  type: 'a81',\n  a9: number,\n} |\n{\n  type: 'a82',\n  a9: number,\n} |\n{\n  type: 'a83',\n  a9: number,\n} |\n{\n  type: 'a84',\n  a9: number,\n} |\n{\n  type: 'a85',\n  a9: number,\n} |\n{\n  type: 'a86',\n  a9: number,\n} |\n{\n  type: 'a87',\n  a9: number,\n} |\n{\n  type: 'a88',\n  a9: number,\n} |\n{\n  type: 'a89',\n  a9: number,\n} |\n{\n  type: 'a90',\n  a9: number,\n} |\n{\n  type: 'a91',\n  a10: number,\n} |\n{\n  type: 'a92',\n  a10: number,\n} |\n{\n  type: 'a93',\n  a10: number,\n} |\n{\n  type: 'a94',\n  a10: number,\n} |\n{\n  type: 'a95',\n  a10: number,\n} |\n{\n  type: 'a96',\n  a10: number,\n} |\n{\n  type: 'a97',\n  a10: number,\n} |\n{\n  type: 'a98',\n  a10: number,\n} |\n{\n  type: 'a99',\n  a10: number,\n} |\n{\n  type: 'a100',\n  a10: number,\n} |\n{\n  type: 'a101',\n  a11: number,\n} |\n{\n  type: 'a102',\n  a11: number,\n} |\n{\n  type: 'a103',\n  a11: number,\n} |\n{\n  type: 'a104',\n  a11: number,\n} |\n{\n  type: 'a105',\n  a11: number,\n} |\n{\n  type: 'a106',\n  a11: number,\n} |\n{\n  type: 'a107',\n  a11: number,\n} |\n{\n  type: 'a108',\n  a11: number,\n} |\n{\n  type: 'a109',\n  a11: number,\n} |\n{\n  type: 'a110',\n  a11: number,\n} |\n{\n  type: 'a111',\n  a12: number,\n} |\n{\n  type: 'a112',\n  a12: number,\n} |\n{\n  type: 'a113',\n  a12: number,\n} |\n{\n  type: 'a114',\n  a12: number,\n} |\n{\n  type: 'a115',\n  a12: number,\n} |\n{\n  type: 'a116',\n  a12: number,\n} |\n{\n  type: 'a117',\n  a12: number,\n} |\n{\n  type: 'a118',\n  a12: number,\n} |\n{\n  type: 'a119',\n  a12: number,\n} |\n{\n  type: 'a120',\n  a12: number,\n} |\n{\n  type: 'a121',\n  a13: number,\n} |\n{\n  type: 'a122',\n  a13: number,\n} |\n{\n  type: 'a123',\n  a13: number,\n} |\n{\n  type: 'a124',\n  a13: number,\n} |\n{\n  type: 'a125',\n  a13: number,\n} |\n{\n  type: 'a126',\n  a13: number,\n} |\n{\n  type: 'a127',\n  a13: number,\n} |\n{\n  type: 'a128',\n  a13: number,\n} |\n{\n  type: 'a129',\n  a13: number,\n} |\n{\n  type: 'a130',\n  a13: number,\n} |\n{\n  type: 'a131',\n  a14: number,\n} |\n{\n  type: 'a132',\n  a14: number,\n} |\n{\n  type: 'a133',\n  a14: number,\n} |\n{\n  type: 'a134',\n  a14: number,\n} |\n{\n  type: 'a135',\n  a14: number,\n} |\n{\n  type: 'a136',\n  a14: number,\n} |\n{\n  type: 'a137',\n  a14: number,\n} |\n{\n  type: 'a138',\n  a14: number,\n} |\n{\n  type: 'a139',\n  a14: number,\n} |\n{\n  type: 'a140',\n  a14: number,\n} |\n{\n  type: 'a141',\n  a15: number,\n} |\n{\n  type: 'a142',\n  a15: number,\n} |\n{\n  type: 'a143',\n  a15: number,\n} |\n{\n  type: 'a144',\n  a15: number,\n} |\n{\n  type: 'a145',\n  a15: number,\n} |\n{\n  type: 'a146',\n  a15: number,\n} |\n{\n  type: 'a147',\n  a15: number,\n} |\n{\n  type: 'a148',\n  a15: number,\n} |\n{\n  type: 'a149',\n  a15: number,\n} |\n{\n  type: 'a150',\n  a15: number,\n} |\n{\n  type: 'a151',\n  a16: number,\n} |\n{\n  type: 'a152',\n  a16: number,\n} |\n{\n  type: 'a153',\n  a16: number,\n} |\n{\n  type: 'a154',\n  a16: number,\n} |\n{\n  type: 'a155',\n  a16: number,\n} |\n{\n  type: 'a156',\n  a16: number,\n} |\n{\n  type: 'a157',\n  a16: number,\n} |\n{\n  type: 'a158',\n  a16: number,\n} |\n{\n  type: 'a159',\n  a16: number,\n} |\n{\n  type: 'a160',\n  a16: number,\n} |\n{\n  type: 'a161',\n  a17: number,\n} |\n{\n  type: 'a162',\n  a17: number,\n} |\n{\n  type: 'a163',\n  a17: number,\n} |\n{\n  type: 'a164',\n  a17: number,\n} |\n{\n  type: 'a165',\n  a17: number,\n} |\n{\n  type: 'a166',\n  a17: number,\n} |\n{\n  type: 'a167',\n  a17: number,\n} |\n{\n  type: 'a168',\n  a17: number,\n} |\n{\n  type: 'a169',\n  a17: number,\n} |\n{\n  type: 'a170',\n  a17: number,\n} |\n{\n  type: 'a171',\n  a18: number,\n} |\n{\n  type: 'a172',\n  a18: number,\n} |\n{\n  type: 'a173',\n  a18: number,\n} |\n{\n  type: 'a174',\n  a18: number,\n} |\n{\n  type: 'a175',\n  a18: number,\n} |\n{\n  type: 'a176',\n  a18: number,\n} |\n{\n  type: 'a177',\n  a18: number,\n} |\n{\n  type: 'a178',\n  a18: number,\n} |\n{\n  type: 'a179',\n  a18: number,\n} |\n{\n  type: 'a180',\n  a18: number,\n} |\n{\n  type: 'a181',\n  a19: number,\n} |\n{\n  type: 'a182',\n  a19: number,\n} |\n{\n  type: 'a183',\n  a19: number,\n} |\n{\n  type: 'a184',\n  a19: number,\n} |\n{\n  type: 'a185',\n  a19: number,\n} |\n{\n  type: 'a186',\n  a19: number,\n} |\n{\n  type: 'a187',\n  a19: number,\n} |\n{\n  type: 'a188',\n  a19: number,\n} |\n{\n  type: 'a189',\n  a19: number,\n} |\n{\n  type: 'a190',\n  a19: number,\n} |\n{\n  type: 'a191',\n  a20: number,\n} |\n{\n  type: 'a192',\n  a20: number,\n} |\n{\n  type: 'a193',\n  a20: number,\n} |\n{\n  type: 'a194',\n  a20: number,\n} |\n{\n  type: 'a195',\n  a20: number,\n} |\n{\n  type: 'a196',\n  a20: number,\n} |\n{\n  type: 'a197',\n  a20: number,\n} |\n{\n  type: 'a198',\n  a20: number,\n} |\n{\n  type: 'a199',\n  a20: number,\n} |\n{\n  type: 'a200',\n  a20: number,\n} |\n{\n  type: 'a201',\n  a21: number,\n} |\n{\n  type: 'a202',\n  a21: number,\n} |\n{\n  type: 'a203',\n  a21: number,\n} |\n{\n  type: 'a204',\n  a21: number,\n} |\n{\n  type: 'a205',\n  a21: number,\n} |\n{\n  type: 'a206',\n  a21: number,\n} |\n{\n  type: 'a207',\n  a21: number,\n} |\n{\n  type: 'a208',\n  a21: number,\n} |\n{\n  type: 'a209',\n  a21: number,\n} |\n{\n  type: 'a210',\n  a21: number,\n} |\n{\n  type: 'a211',\n  a22: number,\n} |\n{\n  type: 'a212',\n  a22: number,\n} |\n{\n  type: 'a213',\n  a22: number,\n} |\n{\n  type: 'a214',\n  a22: number,\n} |\n{\n  type: 'a215',\n  a22: number,\n} |\n{\n  type: 'a216',\n  a22: number,\n} |\n{\n  type: 'a217',\n  a22: number,\n} |\n{\n  type: 'a218',\n  a22: number,\n} |\n{\n  type: 'a219',\n  a22: number,\n} |\n{\n  type: 'a220',\n  a22: number,\n} |\n{\n  type: 'a221',\n  a23: number,\n} |\n{\n  type: 'a222',\n  a23: number,\n} |\n{\n  type: 'a223',\n  a23: number,\n} |\n{\n  type: 'a224',\n  a23: number,\n} |\n{\n  type: 'a225',\n  a23: number,\n} |\n{\n  type: 'a226',\n  a23: number,\n} |\n{\n  type: 'a227',\n  a23: number,\n} |\n{\n  type: 'a228',\n  a23: number,\n} |\n{\n  type: 'a229',\n  a23: number,\n} |\n{\n  type: 'a230',\n  a23: number,\n} |\n{\n  type: 'a231',\n  a24: number,\n} |\n{\n  type: 'a232',\n  a24: number,\n} |\n{\n  type: 'a233',\n  a24: number,\n} |\n{\n  type: 'a234',\n  a24: number,\n} |\n{\n  type: 'a235',\n  a24: number,\n} |\n{\n  type: 'a236',\n  a24: number,\n} |\n{\n  type: 'a237',\n  a24: number,\n} |\n{\n  type: 'a238',\n  a24: number,\n} |\n{\n  type: 'a239',\n  a24: number,\n} |\n{\n  type: 'a240',\n  a24: number,\n} |\n{\n  type: 'a241',\n  a25: number,\n} |\n{\n  type: 'a242',\n  a25: number,\n} |\n{\n  type: 'a243',\n  a25: number,\n} |\n{\n  type: 'a244',\n  a25: number,\n} |\n{\n  type: 'a245',\n  a25: number,\n} |\n{\n  type: 'a246',\n  a25: number,\n} |\n{\n  type: 'a247',\n  a25: number,\n} |\n{\n  type: 'a248',\n  a25: number,\n} |\n{\n  type: 'a249',\n  a25: number,\n} |\n{\n  type: 'a250',\n  a25: number,\n} |\n{\n  type: 'a251',\n  a26: number,\n} |\n{\n  type: 'a252',\n  a26: number,\n} |\n{\n  type: 'a253',\n  a26: number,\n} |\n{\n  type: 'a254',\n  a26: number,\n} |\n{\n  type: 'a255',\n  a26: number,\n} |\n{\n  type: 'a256',\n  a26: number,\n} |\n{\n  type: 'a257',\n  a26: number,\n} |\n{\n  type: 'a258',\n  a26: number,\n} |\n{\n  type: 'a259',\n  a26: number,\n} |\n{\n  type: 'a260',\n  a26: number,\n} |\n{\n  type: 'a261',\n  a27: number,\n} |\n{\n  type: 'a262',\n  a27: number,\n} |\n{\n  type: 'a263',\n  a27: number,\n} |\n{\n  type: 'a264',\n  a27: number,\n} |\n{\n  type: 'a265',\n  a27: number,\n} |\n{\n  type: 'a266',\n  a27: number,\n} |\n{\n  type: 'a267',\n  a27: number,\n} |\n{\n  type: 'a268',\n  a27: number,\n} |\n{\n  type: 'a269',\n  a27: number,\n} |\n{\n  type: 'a270',\n  a27: number,\n} |\n{\n  type: 'a271',\n  a28: number,\n} |\n{\n  type: 'a272',\n  a28: number,\n} |\n{\n  type: 'a273',\n  a28: number,\n} |\n{\n  type: 'a274',\n  a28: number,\n} |\n{\n  type: 'a275',\n  a28: number,\n} |\n{\n  type: 'a276',\n  a28: number,\n} |\n{\n  type: 'a277',\n  a28: number,\n} |\n{\n  type: 'a278',\n  a28: number,\n} |\n{\n  type: 'a279',\n  a28: number,\n} |\n{\n  type: 'a280',\n  a28: number,\n} |\n{\n  type: 'a281',\n  a29: number,\n} |\n{\n  type: 'a282',\n  a29: number,\n} |\n{\n  type: 'a283',\n  a29: number,\n} |\n{\n  type: 'a284',\n  a29: number,\n} |\n{\n  type: 'a285',\n  a29: number,\n} |\n{\n  type: 'a286',\n  a29: number,\n} |\n{\n  type: 'a287',\n  a29: number,\n} |\n{\n  type: 'a288',\n  a29: number,\n} |\n{\n  type: 'a289',\n  a29: number,\n} |\n{\n  type: 'a290',\n  a29: number,\n} |\n{\n  type: 'a291',\n  a30: number,\n} |\n{\n  type: 'a292',\n  a30: number,\n} |\n{\n  type: 'a293',\n  a30: number,\n} |\n{\n  type: 'a294',\n  a30: number,\n} |\n{\n  type: 'a295',\n  a30: number,\n} |\n{\n  type: 'a296',\n  a30: number,\n} |\n{\n  type: 'a297',\n  a30: number,\n} |\n{\n  type: 'a298',\n  a30: number,\n} |\n{\n  type: 'a299',\n  a30: number,\n} |\n{\n  type: 'a300',\n  a30: number,\n} |\n{\n  type: 'a301',\n  a31: number,\n} |\n{\n  type: 'a302',\n  a31: number,\n} |\n{\n  type: 'a303',\n  a31: number,\n} |\n{\n  type: 'a304',\n  a31: number,\n} |\n{\n  type: 'a305',\n  a31: number,\n} |\n{\n  type: 'a306',\n  a31: number,\n} |\n{\n  type: 'a307',\n  a31: number,\n} |\n{\n  type: 'a308',\n  a31: number,\n} |\n{\n  type: 'a309',\n  a31: number,\n} |\n{\n  type: 'a310',\n  a31: number,\n} |\n{\n  type: 'a311',\n  a32: number,\n} |\n{\n  type: 'a312',\n  a32: number,\n} |\n{\n  type: 'a313',\n  a32: number,\n} |\n{\n  type: 'a314',\n  a32: number,\n} |\n{\n  type: 'a315',\n  a32: number,\n} |\n{\n  type: 'a316',\n  a32: number,\n} |\n{\n  type: 'a317',\n  a32: number,\n} |\n{\n  type: 'a318',\n  a32: number,\n} |\n{\n  type: 'a319',\n  a32: number,\n} |\n{\n  type: 'a320',\n  a32: number,\n} |\n{\n  type: 'a321',\n  a33: number,\n} |\n{\n  type: 'a322',\n  a33: number,\n} |\n{\n  type: 'a323',\n  a33: number,\n} |\n{\n  type: 'a324',\n  a33: number,\n} |\n{\n  type: 'a325',\n  a33: number,\n} |\n{\n  type: 'a326',\n  a33: number,\n} |\n{\n  type: 'a327',\n  a33: number,\n} |\n{\n  type: 'a328',\n  a33: number,\n} |\n{\n  type: 'a329',\n  a33: number,\n} |\n{\n  type: 'a330',\n  a33: number,\n} |\n{\n  type: 'a331',\n  a34: number,\n} |\n{\n  type: 'a332',\n  a34: number,\n} |\n{\n  type: 'a333',\n  a34: number,\n} |\n{\n  type: 'a334',\n  a34: number,\n} |\n{\n  type: 'a335',\n  a34: number,\n} |\n{\n  type: 'a336',\n  a34: number,\n} |\n{\n  type: 'a337',\n  a34: number,\n} |\n{\n  type: 'a338',\n  a34: number,\n} |\n{\n  type: 'a339',\n  a34: number,\n} |\n{\n  type: 'a340',\n  a34: number,\n} |\n{\n  type: 'a341',\n  a35: number,\n} |\n{\n  type: 'a342',\n  a35: number,\n} |\n{\n  type: 'a343',\n  a35: number,\n} |\n{\n  type: 'a344',\n  a35: number,\n} |\n{\n  type: 'a345',\n  a35: number,\n} |\n{\n  type: 'a346',\n  a35: number,\n} |\n{\n  type: 'a347',\n  a35: number,\n} |\n{\n  type: 'a348',\n  a35: number,\n} |\n{\n  type: 'a349',\n  a35: number,\n} |\n{\n  type: 'a350',\n  a35: number,\n} |\n{\n  type: 'a351',\n  a36: number,\n} |\n{\n  type: 'a352',\n  a36: number,\n} |\n{\n  type: 'a353',\n  a36: number,\n} |\n{\n  type: 'a354',\n  a36: number,\n} |\n{\n  type: 'a355',\n  a36: number,\n} |\n{\n  type: 'a356',\n  a36: number,\n} |\n{\n  type: 'a357',\n  a36: number,\n} |\n{\n  type: 'a358',\n  a36: number,\n} |\n{\n  type: 'a359',\n  a36: number,\n} |\n{\n  type: 'a360',\n  a36: number,\n} |\n{\n  type: 'a361',\n  a37: number,\n} |\n{\n  type: 'a362',\n  a37: number,\n} |\n{\n  type: 'a363',\n  a37: number,\n} |\n{\n  type: 'a364',\n  a37: number,\n} |\n{\n  type: 'a365',\n  a37: number,\n} |\n{\n  type: 'a366',\n  a37: number,\n} |\n{\n  type: 'a367',\n  a37: number,\n} |\n{\n  type: 'a368',\n  a37: number,\n} |\n{\n  type: 'a369',\n  a37: number,\n} |\n{\n  type: 'a370',\n  a37: number,\n} |\n{\n  type: 'a371',\n  a38: number,\n} |\n{\n  type: 'a372',\n  a38: number,\n} |\n{\n  type: 'a373',\n  a38: number,\n} |\n{\n  type: 'a374',\n  a38: number,\n} |\n{\n  type: 'a375',\n  a38: number,\n} |\n{\n  type: 'a376',\n  a38: number,\n} |\n{\n  type: 'a377',\n  a38: number,\n} |\n{\n  type: 'a378',\n  a38: number,\n} |\n{\n  type: 'a379',\n  a38: number,\n} |\n{\n  type: 'a380',\n  a38: number,\n} |\n{\n  type: 'a381',\n  a39: number,\n} |\n{\n  type: 'a382',\n  a39: number,\n} |\n{\n  type: 'a383',\n  a39: number,\n} |\n{\n  type: 'a384',\n  a39: number,\n} |\n{\n  type: 'a385',\n  a39: number,\n} |\n{\n  type: 'a386',\n  a39: number,\n} |\n{\n  type: 'a387',\n  a39: number,\n} |\n{\n  type: 'a388',\n  a39: number,\n} |\n{\n  type: 'a389',\n  a39: number,\n} |\n{\n  type: 'a390',\n  a39: number,\n} |\n{\n  type: 'a391',\n  a40: number,\n} |\n{\n  type: 'a392',\n  a40: number,\n} |\n{\n  type: 'a393',\n  a40: number,\n} |\n{\n  type: 'a394',\n  a40: number,\n} |\n{\n  type: 'a395',\n  a40: number,\n} |\n{\n  type: 'a396',\n  a40: number,\n} |\n{\n  type: 'a397',\n  a40: number,\n} |\n{\n  type: 'a398',\n  a40: number,\n} |\n{\n  type: 'a399',\n  a40: number,\n} |\n{\n  type: 'a400',\n  a40: number,\n} |\n{\n  type: 'a401',\n  a41: number,\n} |\n{\n  type: 'a402',\n  a41: number,\n} |\n{\n  type: 'a403',\n  a41: number,\n} |\n{\n  type: 'a404',\n  a41: number,\n} |\n{\n  type: 'a405',\n  a41: number,\n} |\n{\n  type: 'a406',\n  a41: number,\n} |\n{\n  type: 'a407',\n  a41: number,\n} |\n{\n  type: 'a408',\n  a41: number,\n} |\n{\n  type: 'a409',\n  a41: number,\n} |\n{\n  type: 'a410',\n  a41: number,\n} |\n{\n  type: 'a411',\n  a42: number,\n} |\n{\n  type: 'a412',\n  a42: number,\n} |\n{\n  type: 'a413',\n  a42: number,\n} |\n{\n  type: 'a414',\n  a42: number,\n} |\n{\n  type: 'a415',\n  a42: number,\n} |\n{\n  type: 'a416',\n  a42: number,\n} |\n{\n  type: 'a417',\n  a42: number,\n} |\n{\n  type: 'a418',\n  a42: number,\n} |\n{\n  type: 'a419',\n  a42: number,\n} |\n{\n  type: 'a420',\n  a42: number,\n} |\n{\n  type: 'a421',\n  a43: number,\n} |\n{\n  type: 'a422',\n  a43: number,\n} |\n{\n  type: 'a423',\n  a43: number,\n} |\n{\n  type: 'a424',\n  a43: number,\n} |\n{\n  type: 'a425',\n  a43: number,\n} |\n{\n  type: 'a426',\n  a43: number,\n} |\n{\n  type: 'a427',\n  a43: number,\n} |\n{\n  type: 'a428',\n  a43: number,\n} |\n{\n  type: 'a429',\n  a43: number,\n} |\n{\n  type: 'a430',\n  a43: number,\n} |\n{\n  type: 'a431',\n  a44: number,\n} |\n{\n  type: 'a432',\n  a44: number,\n} |\n{\n  type: 'a433',\n  a44: number,\n} |\n{\n  type: 'a434',\n  a44: number,\n} |\n{\n  type: 'a435',\n  a44: number,\n} |\n{\n  type: 'a436',\n  a44: number,\n} |\n{\n  type: 'a437',\n  a44: number,\n} |\n{\n  type: 'a438',\n  a44: number,\n} |\n{\n  type: 'a439',\n  a44: number,\n} |\n{\n  type: 'a440',\n  a44: number,\n} |\n{\n  type: 'a441',\n  a45: number,\n} |\n{\n  type: 'a442',\n  a45: number,\n} |\n{\n  type: 'a443',\n  a45: number,\n} |\n{\n  type: 'a444',\n  a45: number,\n} |\n{\n  type: 'a445',\n  a45: number,\n} |\n{\n  type: 'a446',\n  a45: number,\n} |\n{\n  type: 'a447',\n  a45: number,\n} |\n{\n  type: 'a448',\n  a45: number,\n} |\n{\n  type: 'a449',\n  a45: number,\n} |\n{\n  type: 'a450',\n  a45: number,\n} |\n{\n  type: 'a451',\n  a46: number,\n} |\n{\n  type: 'a452',\n  a46: number,\n} |\n{\n  type: 'a453',\n  a46: number,\n} |\n{\n  type: 'a454',\n  a46: number,\n} |\n{\n  type: 'a455',\n  a46: number,\n} |\n{\n  type: 'a456',\n  a46: number,\n} |\n{\n  type: 'a457',\n  a46: number,\n} |\n{\n  type: 'a458',\n  a46: number,\n} |\n{\n  type: 'a459',\n  a46: number,\n} |\n{\n  type: 'a460',\n  a46: number,\n} |\n{\n  type: 'a461',\n  a47: number,\n} |\n{\n  type: 'a462',\n  a47: number,\n} |\n{\n  type: 'a463',\n  a47: number,\n} |\n{\n  type: 'a464',\n  a47: number,\n} |\n{\n  type: 'a465',\n  a47: number,\n} |\n{\n  type: 'a466',\n  a47: number,\n} |\n{\n  type: 'a467',\n  a47: number,\n} |\n{\n  type: 'a468',\n  a47: number,\n} |\n{\n  type: 'a469',\n  a47: number,\n} |\n{\n  type: 'a470',\n  a47: number,\n} |\n{\n  type: 'a471',\n  a48: number,\n} |\n{\n  type: 'a472',\n  a48: number,\n} |\n{\n  type: 'a473',\n  a48: number,\n} |\n{\n  type: 'a474',\n  a48: number,\n} |\n{\n  type: 'a475',\n  a48: number,\n} |\n{\n  type: 'a476',\n  a48: number,\n} |\n{\n  type: 'a477',\n  a48: number,\n} |\n{\n  type: 'a478',\n  a48: number,\n} |\n{\n  type: 'a479',\n  a48: number,\n} |\n{\n  type: 'a480',\n  a48: number,\n} |\n{\n  type: 'a481',\n  a49: number,\n} |\n{\n  type: 'a482',\n  a49: number,\n} |\n{\n  type: 'a483',\n  a49: number,\n} |\n{\n  type: 'a484',\n  a49: number,\n} |\n{\n  type: 'a485',\n  a49: number,\n} |\n{\n  type: 'a486',\n  a49: number,\n} |\n{\n  type: 'a487',\n  a49: number,\n} |\n{\n  type: 'a488',\n  a49: number,\n} |\n{\n  type: 'a489',\n  a49: number,\n} |\n{\n  type: 'a490',\n  a49: number,\n} |\n{\n  type: 'a491',\n  a50: number,\n} |\n{\n  type: 'a492',\n  a50: number,\n} |\n{\n  type: 'a493',\n  a50: number,\n} |\n{\n  type: 'a494',\n  a50: number,\n} |\n{\n  type: 'a495',\n  a50: number,\n} |\n{\n  type: 'a496',\n  a50: number,\n} |\n{\n  type: 'a497',\n  a50: number,\n} |\n{\n  type: 'a498',\n  a50: number,\n} |\n{\n  type: 'a499',\n  a50: number,\n} |\n{\n  type: 'a500',\n  a50: number,\n} |\n{\n  type: 'a501',\n  a51: number,\n} |\n{\n  type: 'a502',\n  a51: number,\n} |\n{\n  type: 'a503',\n  a51: number,\n} |\n{\n  type: 'a504',\n  a51: number,\n} |\n{\n  type: 'a505',\n  a51: number,\n} |\n{\n  type: 'a506',\n  a51: number,\n} |\n{\n  type: 'a507',\n  a51: number,\n} |\n{\n  type: 'a508',\n  a51: number,\n} |\n{\n  type: 'a509',\n  a51: number,\n} |\n{\n  type: 'a510',\n  a51: number,\n} |\n{\n  type: 'a511',\n  a52: number,\n} |\n{\n  type: 'a512',\n  a52: number,\n} |\n{\n  type: 'a513',\n  a52: number,\n} |\n{\n  type: 'a514',\n  a52: number,\n} |\n{\n  type: 'a515',\n  a52: number,\n} |\n{\n  type: 'a516',\n  a52: number,\n} |\n{\n  type: 'a517',\n  a52: number,\n} |\n{\n  type: 'a518',\n  a52: number,\n} |\n{\n  type: 'a519',\n  a52: number,\n} |\n{\n  type: 'a520',\n  a52: number,\n} |\n{\n  type: 'a521',\n  a53: number,\n} |\n{\n  type: 'a522',\n  a53: number,\n} |\n{\n  type: 'a523',\n  a53: number,\n} |\n{\n  type: 'a524',\n  a53: number,\n} |\n{\n  type: 'a525',\n  a53: number,\n} |\n{\n  type: 'a526',\n  a53: number,\n} |\n{\n  type: 'a527',\n  a53: number,\n} |\n{\n  type: 'a528',\n  a53: number,\n} |\n{\n  type: 'a529',\n  a53: number,\n} |\n{\n  type: 'a530',\n  a53: number,\n} |\n{\n  type: 'a531',\n  a54: number,\n} |\n{\n  type: 'a532',\n  a54: number,\n} |\n{\n  type: 'a533',\n  a54: number,\n} |\n{\n  type: 'a534',\n  a54: number,\n} |\n{\n  type: 'a535',\n  a54: number,\n} |\n{\n  type: 'a536',\n  a54: number,\n} |\n{\n  type: 'a537',\n  a54: number,\n} |\n{\n  type: 'a538',\n  a54: number,\n} |\n{\n  type: 'a539',\n  a54: number,\n} |\n{\n  type: 'a540',\n  a54: number,\n} |\n{\n  type: 'a541',\n  a55: number,\n} |\n{\n  type: 'a542',\n  a55: number,\n} |\n{\n  type: 'a543',\n  a55: number,\n} |\n{\n  type: 'a544',\n  a55: number,\n} |\n{\n  type: 'a545',\n  a55: number,\n} |\n{\n  type: 'a546',\n  a55: number,\n} |\n{\n  type: 'a547',\n  a55: number,\n} |\n{\n  type: 'a548',\n  a55: number,\n} |\n{\n  type: 'a549',\n  a55: number,\n} |\n{\n  type: 'a550',\n  a55: number,\n} |\n{\n  type: 'a551',\n  a56: number,\n} |\n{\n  type: 'a552',\n  a56: number,\n} |\n{\n  type: 'a553',\n  a56: number,\n} |\n{\n  type: 'a554',\n  a56: number,\n} |\n{\n  type: 'a555',\n  a56: number,\n} |\n{\n  type: 'a556',\n  a56: number,\n} |\n{\n  type: 'a557',\n  a56: number,\n} |\n{\n  type: 'a558',\n  a56: number,\n} |\n{\n  type: 'a559',\n  a56: number,\n} |\n{\n  type: 'a560',\n  a56: number,\n} |\n{\n  type: 'a561',\n  a57: number,\n} |\n{\n  type: 'a562',\n  a57: number,\n} |\n{\n  type: 'a563',\n  a57: number,\n} |\n{\n  type: 'a564',\n  a57: number,\n} |\n{\n  type: 'a565',\n  a57: number,\n} |\n{\n  type: 'a566',\n  a57: number,\n} |\n{\n  type: 'a567',\n  a57: number,\n} |\n{\n  type: 'a568',\n  a57: number,\n} |\n{\n  type: 'a569',\n  a57: number,\n} |\n{\n  type: 'a570',\n  a57: number,\n} |\n{\n  type: 'a571',\n  a58: number,\n} |\n{\n  type: 'a572',\n  a58: number,\n} |\n{\n  type: 'a573',\n  a58: number,\n} |\n{\n  type: 'a574',\n  a58: number,\n} |\n{\n  type: 'a575',\n  a58: number,\n} |\n{\n  type: 'a576',\n  a58: number,\n} |\n{\n  type: 'a577',\n  a58: number,\n} |\n{\n  type: 'a578',\n  a58: number,\n} |\n{\n  type: 'a579',\n  a58: number,\n} |\n{\n  type: 'a580',\n  a58: number,\n} |\n{\n  type: 'a581',\n  a59: number,\n} |\n{\n  type: 'a582',\n  a59: number,\n} |\n{\n  type: 'a583',\n  a59: number,\n} |\n{\n  type: 'a584',\n  a59: number,\n} |\n{\n  type: 'a585',\n  a59: number,\n} |\n{\n  type: 'a586',\n  a59: number,\n} |\n{\n  type: 'a587',\n  a59: number,\n} |\n{\n  type: 'a588',\n  a59: number,\n} |\n{\n  type: 'a589',\n  a59: number,\n} |\n{\n  type: 'a590',\n  a59: number,\n} |\n{\n  type: 'a591',\n  a60: number,\n} |\n{\n  type: 'a592',\n  a60: number,\n} |\n{\n  type: 'a593',\n  a60: number,\n} |\n{\n  type: 'a594',\n  a60: number,\n} |\n{\n  type: 'a595',\n  a60: number,\n} |\n{\n  type: 'a596',\n  a60: number,\n} |\n{\n  type: 'a597',\n  a60: number,\n} |\n{\n  type: 'a598',\n  a60: number,\n} |\n{\n  type: 'a599',\n  a60: number,\n} |\n{\n  type: 'a600',\n  a60: number,\n} |\n{\n  type: 'a601',\n  a61: number,\n} |\n{\n  type: 'a602',\n  a61: number,\n} |\n{\n  type: 'a603',\n  a61: number,\n} |\n{\n  type: 'a604',\n  a61: number,\n} |\n{\n  type: 'a605',\n  a61: number,\n} |\n{\n  type: 'a606',\n  a61: number,\n} |\n{\n  type: 'a607',\n  a61: number,\n} |\n{\n  type: 'a608',\n  a61: number,\n} |\n{\n  type: 'a609',\n  a61: number,\n} |\n{\n  type: 'a610',\n  a61: number,\n} |\n{\n  type: 'a611',\n  a62: number,\n} |\n{\n  type: 'a612',\n  a62: number,\n} |\n{\n  type: 'a613',\n  a62: number,\n} |\n{\n  type: 'a614',\n  a62: number,\n} |\n{\n  type: 'a615',\n  a62: number,\n} |\n{\n  type: 'a616',\n  a62: number,\n} |\n{\n  type: 'a617',\n  a62: number,\n} |\n{\n  type: 'a618',\n  a62: number,\n} |\n{\n  type: 'a619',\n  a62: number,\n} |\n{\n  type: 'a620',\n  a62: number,\n} |\n{\n  type: 'a621',\n  a63: number,\n} |\n{\n  type: 'a622',\n  a63: number,\n} |\n{\n  type: 'a623',\n  a63: number,\n} |\n{\n  type: 'a624',\n  a63: number,\n} |\n{\n  type: 'a625',\n  a63: number,\n} |\n{\n  type: 'a626',\n  a63: number,\n} |\n{\n  type: 'a627',\n  a63: number,\n} |\n{\n  type: 'a628',\n  a63: number,\n} |\n{\n  type: 'a629',\n  a63: number,\n} |\n{\n  type: 'a630',\n  a63: number,\n} |\n{\n  type: 'a631',\n  a64: number,\n} |\n{\n  type: 'a632',\n  a64: number,\n} |\n{\n  type: 'a633',\n  a64: number,\n} |\n{\n  type: 'a634',\n  a64: number,\n} |\n{\n  type: 'a635',\n  a64: number,\n} |\n{\n  type: 'a636',\n  a64: number,\n} |\n{\n  type: 'a637',\n  a64: number,\n} |\n{\n  type: 'a638',\n  a64: number,\n} |\n{\n  type: 'a639',\n  a64: number,\n} |\n{\n  type: 'a640',\n  a64: number,\n} |\n{\n  type: 'a641',\n  a65: number,\n} |\n{\n  type: 'a642',\n  a65: number,\n} |\n{\n  type: 'a643',\n  a65: number,\n} |\n{\n  type: 'a644',\n  a65: number,\n} |\n{\n  type: 'a645',\n  a65: number,\n} |\n{\n  type: 'a646',\n  a65: number,\n} |\n{\n  type: 'a647',\n  a65: number,\n} |\n{\n  type: 'a648',\n  a65: number,\n} |\n{\n  type: 'a649',\n  a65: number,\n} |\n{\n  type: 'a650',\n  a65: number,\n} |\n{\n  type: 'a651',\n  a66: number,\n} |\n{\n  type: 'a652',\n  a66: number,\n} |\n{\n  type: 'a653',\n  a66: number,\n} |\n{\n  type: 'a654',\n  a66: number,\n} |\n{\n  type: 'a655',\n  a66: number,\n} |\n{\n  type: 'a656',\n  a66: number,\n} |\n{\n  type: 'a657',\n  a66: number,\n} |\n{\n  type: 'a658',\n  a66: number,\n} |\n{\n  type: 'a659',\n  a66: number,\n} |\n{\n  type: 'a660',\n  a66: number,\n} |\n{\n  type: 'a661',\n  a67: number,\n} |\n{\n  type: 'a662',\n  a67: number,\n} |\n{\n  type: 'a663',\n  a67: number,\n} |\n{\n  type: 'a664',\n  a67: number,\n} |\n{\n  type: 'a665',\n  a67: number,\n} |\n{\n  type: 'a666',\n  a67: number,\n} |\n{\n  type: 'a667',\n  a67: number,\n} |\n{\n  type: 'a668',\n  a67: number,\n} |\n{\n  type: 'a669',\n  a67: number,\n} |\n{\n  type: 'a670',\n  a67: number,\n} |\n{\n  type: 'a671',\n  a68: number,\n} |\n{\n  type: 'a672',\n  a68: number,\n} |\n{\n  type: 'a673',\n  a68: number,\n} |\n{\n  type: 'a674',\n  a68: number,\n} |\n{\n  type: 'a675',\n  a68: number,\n} |\n{\n  type: 'a676',\n  a68: number,\n} |\n{\n  type: 'a677',\n  a68: number,\n} |\n{\n  type: 'a678',\n  a68: number,\n} |\n{\n  type: 'a679',\n  a68: number,\n} |\n{\n  type: 'a680',\n  a68: number,\n} |\n{\n  type: 'a681',\n  a69: number,\n} |\n{\n  type: 'a682',\n  a69: number,\n} |\n{\n  type: 'a683',\n  a69: number,\n} |\n{\n  type: 'a684',\n  a69: number,\n} |\n{\n  type: 'a685',\n  a69: number,\n} |\n{\n  type: 'a686',\n  a69: number,\n} |\n{\n  type: 'a687',\n  a69: number,\n} |\n{\n  type: 'a688',\n  a69: number,\n} |\n{\n  type: 'a689',\n  a69: number,\n} |\n{\n  type: 'a690',\n  a69: number,\n} |\n{\n  type: 'a691',\n  a70: number,\n} |\n{\n  type: 'a692',\n  a70: number,\n} |\n{\n  type: 'a693',\n  a70: number,\n} |\n{\n  type: 'a694',\n  a70: number,\n} |\n{\n  type: 'a695',\n  a70: number,\n} |\n{\n  type: 'a696',\n  a70: number,\n} |\n{\n  type: 'a697',\n  a70: number,\n} |\n{\n  type: 'a698',\n  a70: number,\n} |\n{\n  type: 'a699',\n  a70: number,\n} |\n{\n  type: 'a700',\n  a70: number,\n} |\n{\n  type: 'a701',\n  a71: number,\n} |\n{\n  type: 'a702',\n  a71: number,\n} |\n{\n  type: 'a703',\n  a71: number,\n} |\n{\n  type: 'a704',\n  a71: number,\n} |\n{\n  type: 'a705',\n  a71: number,\n} |\n{\n  type: 'a706',\n  a71: number,\n} |\n{\n  type: 'a707',\n  a71: number,\n} |\n{\n  type: 'a708',\n  a71: number,\n} |\n{\n  type: 'a709',\n  a71: number,\n} |\n{\n  type: 'a710',\n  a71: number,\n} |\n{\n  type: 'a711',\n  a72: number,\n} |\n{\n  type: 'a712',\n  a72: number,\n} |\n{\n  type: 'a713',\n  a72: number,\n} |\n{\n  type: 'a714',\n  a72: number,\n} |\n{\n  type: 'a715',\n  a72: number,\n} |\n{\n  type: 'a716',\n  a72: number,\n} |\n{\n  type: 'a717',\n  a72: number,\n} |\n{\n  type: 'a718',\n  a72: number,\n} |\n{\n  type: 'a719',\n  a72: number,\n} |\n{\n  type: 'a720',\n  a72: number,\n} |\n{\n  type: 'a721',\n  a73: number,\n} |\n{\n  type: 'a722',\n  a73: number,\n} |\n{\n  type: 'a723',\n  a73: number,\n} |\n{\n  type: 'a724',\n  a73: number,\n} |\n{\n  type: 'a725',\n  a73: number,\n} |\n{\n  type: 'a726',\n  a73: number,\n} |\n{\n  type: 'a727',\n  a73: number,\n} |\n{\n  type: 'a728',\n  a73: number,\n} |\n{\n  type: 'a729',\n  a73: number,\n} |\n{\n  type: 'a730',\n  a73: number,\n} |\n{\n  type: 'a731',\n  a74: number,\n} |\n{\n  type: 'a732',\n  a74: number,\n} |\n{\n  type: 'a733',\n  a74: number,\n} |\n{\n  type: 'a734',\n  a74: number,\n} |\n{\n  type: 'a735',\n  a74: number,\n} |\n{\n  type: 'a736',\n  a74: number,\n} |\n{\n  type: 'a737',\n  a74: number,\n} |\n{\n  type: 'a738',\n  a74: number,\n} |\n{\n  type: 'a739',\n  a74: number,\n} |\n{\n  type: 'a740',\n  a74: number,\n} |\n{\n  type: 'a741',\n  a75: number,\n} |\n{\n  type: 'a742',\n  a75: number,\n} |\n{\n  type: 'a743',\n  a75: number,\n} |\n{\n  type: 'a744',\n  a75: number,\n} |\n{\n  type: 'a745',\n  a75: number,\n} |\n{\n  type: 'a746',\n  a75: number,\n} |\n{\n  type: 'a747',\n  a75: number,\n} |\n{\n  type: 'a748',\n  a75: number,\n} |\n{\n  type: 'a749',\n  a75: number,\n} |\n{\n  type: 'a750',\n  a75: number,\n} |\n{\n  type: 'a751',\n  a76: number,\n} |\n{\n  type: 'a752',\n  a76: number,\n} |\n{\n  type: 'a753',\n  a76: number,\n} |\n{\n  type: 'a754',\n  a76: number,\n} |\n{\n  type: 'a755',\n  a76: number,\n} |\n{\n  type: 'a756',\n  a76: number,\n} |\n{\n  type: 'a757',\n  a76: number,\n} |\n{\n  type: 'a758',\n  a76: number,\n} |\n{\n  type: 'a759',\n  a76: number,\n} |\n{\n  type: 'a760',\n  a76: number,\n} |\n{\n  type: 'a761',\n  a77: number,\n} |\n{\n  type: 'a762',\n  a77: number,\n} |\n{\n  type: 'a763',\n  a77: number,\n} |\n{\n  type: 'a764',\n  a77: number,\n} |\n{\n  type: 'a765',\n  a77: number,\n} |\n{\n  type: 'a766',\n  a77: number,\n} |\n{\n  type: 'a767',\n  a77: number,\n} |\n{\n  type: 'a768',\n  a77: number,\n} |\n{\n  type: 'a769',\n  a77: number,\n} |\n{\n  type: 'a770',\n  a77: number,\n} |\n{\n  type: 'a771',\n  a78: number,\n} |\n{\n  type: 'a772',\n  a78: number,\n} |\n{\n  type: 'a773',\n  a78: number,\n} |\n{\n  type: 'a774',\n  a78: number,\n} |\n{\n  type: 'a775',\n  a78: number,\n} |\n{\n  type: 'a776',\n  a78: number,\n} |\n{\n  type: 'a777',\n  a78: number,\n} |\n{\n  type: 'a778',\n  a78: number,\n} |\n{\n  type: 'a779',\n  a78: number,\n} |\n{\n  type: 'a780',\n  a78: number,\n} |\n{\n  type: 'a781',\n  a79: number,\n} |\n{\n  type: 'a782',\n  a79: number,\n} |\n{\n  type: 'a783',\n  a79: number,\n} |\n{\n  type: 'a784',\n  a79: number,\n} |\n{\n  type: 'a785',\n  a79: number,\n} |\n{\n  type: 'a786',\n  a79: number,\n} |\n{\n  type: 'a787',\n  a79: number,\n} |\n{\n  type: 'a788',\n  a79: number,\n} |\n{\n  type: 'a789',\n  a79: number,\n} |\n{\n  type: 'a790',\n  a79: number,\n} |\n{\n  type: 'a791',\n  a80: number,\n} |\n{\n  type: 'a792',\n  a80: number,\n} |\n{\n  type: 'a793',\n  a80: number,\n} |\n{\n  type: 'a794',\n  a80: number,\n} |\n{\n  type: 'a795',\n  a80: number,\n} |\n{\n  type: 'a796',\n  a80: number,\n} |\n{\n  type: 'a797',\n  a80: number,\n} |\n{\n  type: 'a798',\n  a80: number,\n} |\n{\n  type: 'a799',\n  a80: number,\n} |\n{\n  type: 'a800',\n  a80: number,\n} |\n{\n  type: 'a801',\n  a81: number,\n} |\n{\n  type: 'a802',\n  a81: number,\n} |\n{\n  type: 'a803',\n  a81: number,\n} |\n{\n  type: 'a804',\n  a81: number,\n} |\n{\n  type: 'a805',\n  a81: number,\n} |\n{\n  type: 'a806',\n  a81: number,\n} |\n{\n  type: 'a807',\n  a81: number,\n} |\n{\n  type: 'a808',\n  a81: number,\n} |\n{\n  type: 'a809',\n  a81: number,\n} |\n{\n  type: 'a810',\n  a81: number,\n} |\n{\n  type: 'a811',\n  a82: number,\n} |\n{\n  type: 'a812',\n  a82: number,\n} |\n{\n  type: 'a813',\n  a82: number,\n} |\n{\n  type: 'a814',\n  a82: number,\n} |\n{\n  type: 'a815',\n  a82: number,\n} |\n{\n  type: 'a816',\n  a82: number,\n} |\n{\n  type: 'a817',\n  a82: number,\n} |\n{\n  type: 'a818',\n  a82: number,\n} |\n{\n  type: 'a819',\n  a82: number,\n} |\n{\n  type: 'a820',\n  a82: number,\n} |\n{\n  type: 'a821',\n  a83: number,\n} |\n{\n  type: 'a822',\n  a83: number,\n} |\n{\n  type: 'a823',\n  a83: number,\n} |\n{\n  type: 'a824',\n  a83: number,\n} |\n{\n  type: 'a825',\n  a83: number,\n} |\n{\n  type: 'a826',\n  a83: number,\n} |\n{\n  type: 'a827',\n  a83: number,\n} |\n{\n  type: 'a828',\n  a83: number,\n} |\n{\n  type: 'a829',\n  a83: number,\n} |\n{\n  type: 'a830',\n  a83: number,\n} |\n{\n  type: 'a831',\n  a84: number,\n} |\n{\n  type: 'a832',\n  a84: number,\n} |\n{\n  type: 'a833',\n  a84: number,\n} |\n{\n  type: 'a834',\n  a84: number,\n} |\n{\n  type: 'a835',\n  a84: number,\n} |\n{\n  type: 'a836',\n  a84: number,\n} |\n{\n  type: 'a837',\n  a84: number,\n} |\n{\n  type: 'a838',\n  a84: number,\n} |\n{\n  type: 'a839',\n  a84: number,\n} |\n{\n  type: 'a840',\n  a84: number,\n} |\n{\n  type: 'a841',\n  a85: number,\n} |\n{\n  type: 'a842',\n  a85: number,\n} |\n{\n  type: 'a843',\n  a85: number,\n} |\n{\n  type: 'a844',\n  a85: number,\n} |\n{\n  type: 'a845',\n  a85: number,\n} |\n{\n  type: 'a846',\n  a85: number,\n} |\n{\n  type: 'a847',\n  a85: number,\n} |\n{\n  type: 'a848',\n  a85: number,\n} |\n{\n  type: 'a849',\n  a85: number,\n} |\n{\n  type: 'a850',\n  a85: number,\n} |\n{\n  type: 'a851',\n  a86: number,\n} |\n{\n  type: 'a852',\n  a86: number,\n} |\n{\n  type: 'a853',\n  a86: number,\n} |\n{\n  type: 'a854',\n  a86: number,\n} |\n{\n  type: 'a855',\n  a86: number,\n} |\n{\n  type: 'a856',\n  a86: number,\n} |\n{\n  type: 'a857',\n  a86: number,\n} |\n{\n  type: 'a858',\n  a86: number,\n} |\n{\n  type: 'a859',\n  a86: number,\n} |\n{\n  type: 'a860',\n  a86: number,\n} |\n{\n  type: 'a861',\n  a87: number,\n} |\n{\n  type: 'a862',\n  a87: number,\n} |\n{\n  type: 'a863',\n  a87: number,\n} |\n{\n  type: 'a864',\n  a87: number,\n} |\n{\n  type: 'a865',\n  a87: number,\n} |\n{\n  type: 'a866',\n  a87: number,\n} |\n{\n  type: 'a867',\n  a87: number,\n} |\n{\n  type: 'a868',\n  a87: number,\n} |\n{\n  type: 'a869',\n  a87: number,\n} |\n{\n  type: 'a870',\n  a87: number,\n} |\n{\n  type: 'a871',\n  a88: number,\n} |\n{\n  type: 'a872',\n  a88: number,\n} |\n{\n  type: 'a873',\n  a88: number,\n} |\n{\n  type: 'a874',\n  a88: number,\n} |\n{\n  type: 'a875',\n  a88: number,\n} |\n{\n  type: 'a876',\n  a88: number,\n} |\n{\n  type: 'a877',\n  a88: number,\n} |\n{\n  type: 'a878',\n  a88: number,\n} |\n{\n  type: 'a879',\n  a88: number,\n} |\n{\n  type: 'a880',\n  a88: number,\n} |\n{\n  type: 'a881',\n  a89: number,\n} |\n{\n  type: 'a882',\n  a89: number,\n} |\n{\n  type: 'a883',\n  a89: number,\n} |\n{\n  type: 'a884',\n  a89: number,\n} |\n{\n  type: 'a885',\n  a89: number,\n} |\n{\n  type: 'a886',\n  a89: number,\n} |\n{\n  type: 'a887',\n  a89: number,\n} |\n{\n  type: 'a888',\n  a89: number,\n} |\n{\n  type: 'a889',\n  a89: number,\n} |\n{\n  type: 'a890',\n  a89: number,\n} |\n{\n  type: 'a891',\n  a90: number,\n} |\n{\n  type: 'a892',\n  a90: number,\n} |\n{\n  type: 'a893',\n  a90: number,\n} |\n{\n  type: 'a894',\n  a90: number,\n} |\n{\n  type: 'a895',\n  a90: number,\n} |\n{\n  type: 'a896',\n  a90: number,\n} |\n{\n  type: 'a897',\n  a90: number,\n} |\n{\n  type: 'a898',\n  a90: number,\n} |\n{\n  type: 'a899',\n  a90: number,\n} |\n{\n  type: 'a900',\n  a90: number,\n} |\n{\n  type: 'a901',\n  a91: number,\n} |\n{\n  type: 'a902',\n  a91: number,\n} |\n{\n  type: 'a903',\n  a91: number,\n} |\n{\n  type: 'a904',\n  a91: number,\n} |\n{\n  type: 'a905',\n  a91: number,\n} |\n{\n  type: 'a906',\n  a91: number,\n} |\n{\n  type: 'a907',\n  a91: number,\n} |\n{\n  type: 'a908',\n  a91: number,\n} |\n{\n  type: 'a909',\n  a91: number,\n} |\n{\n  type: 'a910',\n  a91: number,\n} |\n{\n  type: 'a911',\n  a92: number,\n} |\n{\n  type: 'a912',\n  a92: number,\n} |\n{\n  type: 'a913',\n  a92: number,\n} |\n{\n  type: 'a914',\n  a92: number,\n} |\n{\n  type: 'a915',\n  a92: number,\n} |\n{\n  type: 'a916',\n  a92: number,\n} |\n{\n  type: 'a917',\n  a92: number,\n} |\n{\n  type: 'a918',\n  a92: number,\n} |\n{\n  type: 'a919',\n  a92: number,\n} |\n{\n  type: 'a920',\n  a92: number,\n} |\n{\n  type: 'a921',\n  a93: number,\n} |\n{\n  type: 'a922',\n  a93: number,\n} |\n{\n  type: 'a923',\n  a93: number,\n} |\n{\n  type: 'a924',\n  a93: number,\n} |\n{\n  type: 'a925',\n  a93: number,\n} |\n{\n  type: 'a926',\n  a93: number,\n} |\n{\n  type: 'a927',\n  a93: number,\n} |\n{\n  type: 'a928',\n  a93: number,\n} |\n{\n  type: 'a929',\n  a93: number,\n} |\n{\n  type: 'a930',\n  a93: number,\n} |\n{\n  type: 'a931',\n  a94: number,\n} |\n{\n  type: 'a932',\n  a94: number,\n} |\n{\n  type: 'a933',\n  a94: number,\n} |\n{\n  type: 'a934',\n  a94: number,\n} |\n{\n  type: 'a935',\n  a94: number,\n} |\n{\n  type: 'a936',\n  a94: number,\n} |\n{\n  type: 'a937',\n  a94: number,\n} |\n{\n  type: 'a938',\n  a94: number,\n} |\n{\n  type: 'a939',\n  a94: number,\n} |\n{\n  type: 'a940',\n  a94: number,\n} |\n{\n  type: 'a941',\n  a95: number,\n} |\n{\n  type: 'a942',\n  a95: number,\n} |\n{\n  type: 'a943',\n  a95: number,\n} |\n{\n  type: 'a944',\n  a95: number,\n} |\n{\n  type: 'a945',\n  a95: number,\n} |\n{\n  type: 'a946',\n  a95: number,\n} |\n{\n  type: 'a947',\n  a95: number,\n} |\n{\n  type: 'a948',\n  a95: number,\n} |\n{\n  type: 'a949',\n  a95: number,\n} |\n{\n  type: 'a950',\n  a95: number,\n} |\n{\n  type: 'a951',\n  a96: number,\n} |\n{\n  type: 'a952',\n  a96: number,\n} |\n{\n  type: 'a953',\n  a96: number,\n} |\n{\n  type: 'a954',\n  a96: number,\n} |\n{\n  type: 'a955',\n  a96: number,\n} |\n{\n  type: 'a956',\n  a96: number,\n} |\n{\n  type: 'a957',\n  a96: number,\n} |\n{\n  type: 'a958',\n  a96: number,\n} |\n{\n  type: 'a959',\n  a96: number,\n} |\n{\n  type: 'a960',\n  a96: number,\n} |\n{\n  type: 'a961',\n  a97: number,\n} |\n{\n  type: 'a962',\n  a97: number,\n} |\n{\n  type: 'a963',\n  a97: number,\n} |\n{\n  type: 'a964',\n  a97: number,\n} |\n{\n  type: 'a965',\n  a97: number,\n} |\n{\n  type: 'a966',\n  a97: number,\n} |\n{\n  type: 'a967',\n  a97: number,\n} |\n{\n  type: 'a968',\n  a97: number,\n} |\n{\n  type: 'a969',\n  a97: number,\n} |\n{\n  type: 'a970',\n  a97: number,\n} |\n{\n  type: 'a971',\n  a98: number,\n} |\n{\n  type: 'a972',\n  a98: number,\n} |\n{\n  type: 'a973',\n  a98: number,\n} |\n{\n  type: 'a974',\n  a98: number,\n} |\n{\n  type: 'a975',\n  a98: number,\n} |\n{\n  type: 'a976',\n  a98: number,\n} |\n{\n  type: 'a977',\n  a98: number,\n} |\n{\n  type: 'a978',\n  a98: number,\n} |\n{\n  type: 'a979',\n  a98: number,\n} |\n{\n  type: 'a980',\n  a98: number,\n} |\n{\n  type: 'a981',\n  a99: number,\n} |\n{\n  type: 'a982',\n  a99: number,\n} |\n{\n  type: 'a983',\n  a99: number,\n} |\n{\n  type: 'a984',\n  a99: number,\n} |\n{\n  type: 'a985',\n  a99: number,\n} |\n{\n  type: 'a986',\n  a99: number,\n} |\n{\n  type: 'a987',\n  a99: number,\n} |\n{\n  type: 'a988',\n  a99: number,\n} |\n{\n  type: 'a989',\n  a99: number,\n} |\n{\n  type: 'a990',\n  a99: number,\n} |\n{\n  type: 'a991',\n  a100: number,\n} |\n{\n  type: 'a992',\n  a100: number,\n} |\n{\n  type: 'a993',\n  a100: number,\n} |\n{\n  type: 'a994',\n  a100: number,\n} |\n{\n  type: 'a995',\n  a100: number,\n} |\n{\n  type: 'a996',\n  a100: number,\n} |\n{\n  type: 'a997',\n  a100: number,\n} |\n{\n  type: 'a998',\n  a100: number,\n} |\n{\n  type: 'a999',\n  a100: number,\n} |\n{\n  type: 'a1000',\n  a100: number,\n};\nfunction foo(x: TAction): TAction { return x; }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// perf test for big disjoint union with 1000 cases\ntype TAction =\n  | {\n      type: \"a1\",\n      a1: number\n    }\n  | {\n      type: \"a2\",\n      a1: number\n    }\n  | {\n      type: \"a3\",\n      a1: number\n    }\n  | {\n      type: \"a4\",\n      a1: number\n    }\n  | {\n      type: \"a5\",\n      a1: number\n    }\n  | {\n      type: \"a6\",\n      a1: number\n    }\n  | {\n      type: \"a7\",\n      a1: number\n    }\n  | {\n      type: \"a8\",\n      a1: number\n    }\n  | {\n      type: \"a9\",\n      a1: number\n    }\n  | {\n      type: \"a10\",\n      a1: number\n    }\n  | {\n      type: \"a11\",\n      a2: number\n    }\n  | {\n      type: \"a12\",\n      a2: number\n    }\n  | {\n      type: \"a13\",\n      a2: number\n    }\n  | {\n      type: \"a14\",\n      a2: number\n    }\n  | {\n      type: \"a15\",\n      a2: number\n    }\n  | {\n      type: \"a16\",\n      a2: number\n    }\n  | {\n      type: \"a17\",\n      a2: number\n    }\n  | {\n      type: \"a18\",\n      a2: number\n    }\n  | {\n      type: \"a19\",\n      a2: number\n    }\n  | {\n      type: \"a20\",\n      a2: number\n    }\n  | {\n      type: \"a21\",\n      a3: number\n    }\n  | {\n      type: \"a22\",\n      a3: number\n    }\n  | {\n      type: \"a23\",\n      a3: number\n    }\n  | {\n      type: \"a24\",\n      a3: number\n    }\n  | {\n      type: \"a25\",\n      a3: number\n    }\n  | {\n      type: \"a26\",\n      a3: number\n    }\n  | {\n      type: \"a27\",\n      a3: number\n    }\n  | {\n      type: \"a28\",\n      a3: number\n    }\n  | {\n      type: \"a29\",\n      a3: number\n    }\n  | {\n      type: \"a30\",\n      a3: number\n    }\n  | {\n      type: \"a31\",\n      a4: number\n    }\n  | {\n      type: \"a32\",\n      a4: number\n    }\n  | {\n      type: \"a33\",\n      a4: number\n    }\n  | {\n      type: \"a34\",\n      a4: number\n    }\n  | {\n      type: \"a35\",\n      a4: number\n    }\n  | {\n      type: \"a36\",\n      a4: number\n    }\n  | {\n      type: \"a37\",\n      a4: number\n    }\n  | {\n      type: \"a38\",\n      a4: number\n    }\n  | {\n      type: \"a39\",\n      a4: number\n    }\n  | {\n      type: \"a40\",\n      a4: number\n    }\n  | {\n      type: \"a41\",\n      a5: number\n    }\n  | {\n      type: \"a42\",\n      a5: number\n    }\n  | {\n      type: \"a43\",\n      a5: number\n    }\n  | {\n      type: \"a44\",\n      a5: number\n    }\n  | {\n      type: \"a45\",\n      a5: number\n    }\n  | {\n      type: \"a46\",\n      a5: number\n    }\n  | {\n      type: \"a47\",\n      a5: number\n    }\n  | {\n      type: \"a48\",\n      a5: number\n    }\n  | {\n      type: \"a49\",\n      a5: number\n    }\n  | {\n      type: \"a50\",\n      a5: number\n    }\n  | {\n      type: \"a51\",\n      a6: number\n    }\n  | {\n      type: \"a52\",\n      a6: number\n    }\n  | {\n      type: \"a53\",\n      a6: number\n    }\n  | {\n      type: \"a54\",\n      a6: number\n    }\n  | {\n      type: \"a55\",\n      a6: number\n    }\n  | {\n      type: \"a56\",\n      a6: number\n    }\n  | {\n      type: \"a57\",\n      a6: number\n    }\n  | {\n      type: \"a58\",\n      a6: number\n    }\n  | {\n      type: \"a59\",\n      a6: number\n    }\n  | {\n      type: \"a60\",\n      a6: number\n    }\n  | {\n      type: \"a61\",\n      a7: number\n    }\n  | {\n      type: \"a62\",\n      a7: number\n    }\n  | {\n      type: \"a63\",\n      a7: number\n    }\n  | {\n      type: \"a64\",\n      a7: number\n    }\n  | {\n      type: \"a65\",\n      a7: number\n    }\n  | {\n      type: \"a66\",\n      a7: number\n    }\n  | {\n      type: \"a67\",\n      a7: number\n    }\n  | {\n      type: \"a68\",\n      a7: number\n    }\n  | {\n      type: \"a69\",\n      a7: number\n    }\n  | {\n      type: \"a70\",\n      a7: number\n    }\n  | {\n      type: \"a71\",\n      a8: number\n    }\n  | {\n      type: \"a72\",\n      a8: number\n    }\n  | {\n      type: \"a73\",\n      a8: number\n    }\n  | {\n      type: \"a74\",\n      a8: number\n    }\n  | {\n      type: \"a75\",\n      a8: number\n    }\n  | {\n      type: \"a76\",\n      a8: number\n    }\n  | {\n      type: \"a77\",\n      a8: number\n    }\n  | {\n      type: \"a78\",\n      a8: number\n    }\n  | {\n      type: \"a79\",\n      a8: number\n    }\n  | {\n      type: \"a80\",\n      a8: number\n    }\n  | {\n      type: \"a81\",\n      a9: number\n    }\n  | {\n      type: \"a82\",\n      a9: number\n    }\n  | {\n      type: \"a83\",\n      a9: number\n    }\n  | {\n      type: \"a84\",\n      a9: number\n    }\n  | {\n      type: \"a85\",\n      a9: number\n    }\n  | {\n      type: \"a86\",\n      a9: number\n    }\n  | {\n      type: \"a87\",\n      a9: number\n    }\n  | {\n      type: \"a88\",\n      a9: number\n    }\n  | {\n      type: \"a89\",\n      a9: number\n    }\n  | {\n      type: \"a90\",\n      a9: number\n    }\n  | {\n      type: \"a91\",\n      a10: number\n    }\n  | {\n      type: \"a92\",\n      a10: number\n    }\n  | {\n      type: \"a93\",\n      a10: number\n    }\n  | {\n      type: \"a94\",\n      a10: number\n    }\n  | {\n      type: \"a95\",\n      a10: number\n    }\n  | {\n      type: \"a96\",\n      a10: number\n    }\n  | {\n      type: \"a97\",\n      a10: number\n    }\n  | {\n      type: \"a98\",\n      a10: number\n    }\n  | {\n      type: \"a99\",\n      a10: number\n    }\n  | {\n      type: \"a100\",\n      a10: number\n    }\n  | {\n      type: \"a101\",\n      a11: number\n    }\n  | {\n      type: \"a102\",\n      a11: number\n    }\n  | {\n      type: \"a103\",\n      a11: number\n    }\n  | {\n      type: \"a104\",\n      a11: number\n    }\n  | {\n      type: \"a105\",\n      a11: number\n    }\n  | {\n      type: \"a106\",\n      a11: number\n    }\n  | {\n      type: \"a107\",\n      a11: number\n    }\n  | {\n      type: \"a108\",\n      a11: number\n    }\n  | {\n      type: \"a109\",\n      a11: number\n    }\n  | {\n      type: \"a110\",\n      a11: number\n    }\n  | {\n      type: \"a111\",\n      a12: number\n    }\n  | {\n      type: \"a112\",\n      a12: number\n    }\n  | {\n      type: \"a113\",\n      a12: number\n    }\n  | {\n      type: \"a114\",\n      a12: number\n    }\n  | {\n      type: \"a115\",\n      a12: number\n    }\n  | {\n      type: \"a116\",\n      a12: number\n    }\n  | {\n      type: \"a117\",\n      a12: number\n    }\n  | {\n      type: \"a118\",\n      a12: number\n    }\n  | {\n      type: \"a119\",\n      a12: number\n    }\n  | {\n      type: \"a120\",\n      a12: number\n    }\n  | {\n      type: \"a121\",\n      a13: number\n    }\n  | {\n      type: \"a122\",\n      a13: number\n    }\n  | {\n      type: \"a123\",\n      a13: number\n    }\n  | {\n      type: \"a124\",\n      a13: number\n    }\n  | {\n      type: \"a125\",\n      a13: number\n    }\n  | {\n      type: \"a126\",\n      a13: number\n    }\n  | {\n      type: \"a127\",\n      a13: number\n    }\n  | {\n      type: \"a128\",\n      a13: number\n    }\n  | {\n      type: \"a129\",\n      a13: number\n    }\n  | {\n      type: \"a130\",\n      a13: number\n    }\n  | {\n      type: \"a131\",\n      a14: number\n    }\n  | {\n      type: \"a132\",\n      a14: number\n    }\n  | {\n      type: \"a133\",\n      a14: number\n    }\n  | {\n      type: \"a134\",\n      a14: number\n    }\n  | {\n      type: \"a135\",\n      a14: number\n    }\n  | {\n      type: \"a136\",\n      a14: number\n    }\n  | {\n      type: \"a137\",\n      a14: number\n    }\n  | {\n      type: \"a138\",\n      a14: number\n    }\n  | {\n      type: \"a139\",\n      a14: number\n    }\n  | {\n      type: \"a140\",\n      a14: number\n    }\n  | {\n      type: \"a141\",\n      a15: number\n    }\n  | {\n      type: \"a142\",\n      a15: number\n    }\n  | {\n      type: \"a143\",\n      a15: number\n    }\n  | {\n      type: \"a144\",\n      a15: number\n    }\n  | {\n      type: \"a145\",\n      a15: number\n    }\n  | {\n      type: \"a146\",\n      a15: number\n    }\n  | {\n      type: \"a147\",\n      a15: number\n    }\n  | {\n      type: \"a148\",\n      a15: number\n    }\n  | {\n      type: \"a149\",\n      a15: number\n    }\n  | {\n      type: \"a150\",\n      a15: number\n    }\n  | {\n      type: \"a151\",\n      a16: number\n    }\n  | {\n      type: \"a152\",\n      a16: number\n    }\n  | {\n      type: \"a153\",\n      a16: number\n    }\n  | {\n      type: \"a154\",\n      a16: number\n    }\n  | {\n      type: \"a155\",\n      a16: number\n    }\n  | {\n      type: \"a156\",\n      a16: number\n    }\n  | {\n      type: \"a157\",\n      a16: number\n    }\n  | {\n      type: \"a158\",\n      a16: number\n    }\n  | {\n      type: \"a159\",\n      a16: number\n    }\n  | {\n      type: \"a160\",\n      a16: number\n    }\n  | {\n      type: \"a161\",\n      a17: number\n    }\n  | {\n      type: \"a162\",\n      a17: number\n    }\n  | {\n      type: \"a163\",\n      a17: number\n    }\n  | {\n      type: \"a164\",\n      a17: number\n    }\n  | {\n      type: \"a165\",\n      a17: number\n    }\n  | {\n      type: \"a166\",\n      a17: number\n    }\n  | {\n      type: \"a167\",\n      a17: number\n    }\n  | {\n      type: \"a168\",\n      a17: number\n    }\n  | {\n      type: \"a169\",\n      a17: number\n    }\n  | {\n      type: \"a170\",\n      a17: number\n    }\n  | {\n      type: \"a171\",\n      a18: number\n    }\n  | {\n      type: \"a172\",\n      a18: number\n    }\n  | {\n      type: \"a173\",\n      a18: number\n    }\n  | {\n      type: \"a174\",\n      a18: number\n    }\n  | {\n      type: \"a175\",\n      a18: number\n    }\n  | {\n      type: \"a176\",\n      a18: number\n    }\n  | {\n      type: \"a177\",\n      a18: number\n    }\n  | {\n      type: \"a178\",\n      a18: number\n    }\n  | {\n      type: \"a179\",\n      a18: number\n    }\n  | {\n      type: \"a180\",\n      a18: number\n    }\n  | {\n      type: \"a181\",\n      a19: number\n    }\n  | {\n      type: \"a182\",\n      a19: number\n    }\n  | {\n      type: \"a183\",\n      a19: number\n    }\n  | {\n      type: \"a184\",\n      a19: number\n    }\n  | {\n      type: \"a185\",\n      a19: number\n    }\n  | {\n      type: \"a186\",\n      a19: number\n    }\n  | {\n      type: \"a187\",\n      a19: number\n    }\n  | {\n      type: \"a188\",\n      a19: number\n    }\n  | {\n      type: \"a189\",\n      a19: number\n    }\n  | {\n      type: \"a190\",\n      a19: number\n    }\n  | {\n      type: \"a191\",\n      a20: number\n    }\n  | {\n      type: \"a192\",\n      a20: number\n    }\n  | {\n      type: \"a193\",\n      a20: number\n    }\n  | {\n      type: \"a194\",\n      a20: number\n    }\n  | {\n      type: \"a195\",\n      a20: number\n    }\n  | {\n      type: \"a196\",\n      a20: number\n    }\n  | {\n      type: \"a197\",\n      a20: number\n    }\n  | {\n      type: \"a198\",\n      a20: number\n    }\n  | {\n      type: \"a199\",\n      a20: number\n    }\n  | {\n      type: \"a200\",\n      a20: number\n    }\n  | {\n      type: \"a201\",\n      a21: number\n    }\n  | {\n      type: \"a202\",\n      a21: number\n    }\n  | {\n      type: \"a203\",\n      a21: number\n    }\n  | {\n      type: \"a204\",\n      a21: number\n    }\n  | {\n      type: \"a205\",\n      a21: number\n    }\n  | {\n      type: \"a206\",\n      a21: number\n    }\n  | {\n      type: \"a207\",\n      a21: number\n    }\n  | {\n      type: \"a208\",\n      a21: number\n    }\n  | {\n      type: \"a209\",\n      a21: number\n    }\n  | {\n      type: \"a210\",\n      a21: number\n    }\n  | {\n      type: \"a211\",\n      a22: number\n    }\n  | {\n      type: \"a212\",\n      a22: number\n    }\n  | {\n      type: \"a213\",\n      a22: number\n    }\n  | {\n      type: \"a214\",\n      a22: number\n    }\n  | {\n      type: \"a215\",\n      a22: number\n    }\n  | {\n      type: \"a216\",\n      a22: number\n    }\n  | {\n      type: \"a217\",\n      a22: number\n    }\n  | {\n      type: \"a218\",\n      a22: number\n    }\n  | {\n      type: \"a219\",\n      a22: number\n    }\n  | {\n      type: \"a220\",\n      a22: number\n    }\n  | {\n      type: \"a221\",\n      a23: number\n    }\n  | {\n      type: \"a222\",\n      a23: number\n    }\n  | {\n      type: \"a223\",\n      a23: number\n    }\n  | {\n      type: \"a224\",\n      a23: number\n    }\n  | {\n      type: \"a225\",\n      a23: number\n    }\n  | {\n      type: \"a226\",\n      a23: number\n    }\n  | {\n      type: \"a227\",\n      a23: number\n    }\n  | {\n      type: \"a228\",\n      a23: number\n    }\n  | {\n      type: \"a229\",\n      a23: number\n    }\n  | {\n      type: \"a230\",\n      a23: number\n    }\n  | {\n      type: \"a231\",\n      a24: number\n    }\n  | {\n      type: \"a232\",\n      a24: number\n    }\n  | {\n      type: \"a233\",\n      a24: number\n    }\n  | {\n      type: \"a234\",\n      a24: number\n    }\n  | {\n      type: \"a235\",\n      a24: number\n    }\n  | {\n      type: \"a236\",\n      a24: number\n    }\n  | {\n      type: \"a237\",\n      a24: number\n    }\n  | {\n      type: \"a238\",\n      a24: number\n    }\n  | {\n      type: \"a239\",\n      a24: number\n    }\n  | {\n      type: \"a240\",\n      a24: number\n    }\n  | {\n      type: \"a241\",\n      a25: number\n    }\n  | {\n      type: \"a242\",\n      a25: number\n    }\n  | {\n      type: \"a243\",\n      a25: number\n    }\n  | {\n      type: \"a244\",\n      a25: number\n    }\n  | {\n      type: \"a245\",\n      a25: number\n    }\n  | {\n      type: \"a246\",\n      a25: number\n    }\n  | {\n      type: \"a247\",\n      a25: number\n    }\n  | {\n      type: \"a248\",\n      a25: number\n    }\n  | {\n      type: \"a249\",\n      a25: number\n    }\n  | {\n      type: \"a250\",\n      a25: number\n    }\n  | {\n      type: \"a251\",\n      a26: number\n    }\n  | {\n      type: \"a252\",\n      a26: number\n    }\n  | {\n      type: \"a253\",\n      a26: number\n    }\n  | {\n      type: \"a254\",\n      a26: number\n    }\n  | {\n      type: \"a255\",\n      a26: number\n    }\n  | {\n      type: \"a256\",\n      a26: number\n    }\n  | {\n      type: \"a257\",\n      a26: number\n    }\n  | {\n      type: \"a258\",\n      a26: number\n    }\n  | {\n      type: \"a259\",\n      a26: number\n    }\n  | {\n      type: \"a260\",\n      a26: number\n    }\n  | {\n      type: \"a261\",\n      a27: number\n    }\n  | {\n      type: \"a262\",\n      a27: number\n    }\n  | {\n      type: \"a263\",\n      a27: number\n    }\n  | {\n      type: \"a264\",\n      a27: number\n    }\n  | {\n      type: \"a265\",\n      a27: number\n    }\n  | {\n      type: \"a266\",\n      a27: number\n    }\n  | {\n      type: \"a267\",\n      a27: number\n    }\n  | {\n      type: \"a268\",\n      a27: number\n    }\n  | {\n      type: \"a269\",\n      a27: number\n    }\n  | {\n      type: \"a270\",\n      a27: number\n    }\n  | {\n      type: \"a271\",\n      a28: number\n    }\n  | {\n      type: \"a272\",\n      a28: number\n    }\n  | {\n      type: \"a273\",\n      a28: number\n    }\n  | {\n      type: \"a274\",\n      a28: number\n    }\n  | {\n      type: \"a275\",\n      a28: number\n    }\n  | {\n      type: \"a276\",\n      a28: number\n    }\n  | {\n      type: \"a277\",\n      a28: number\n    }\n  | {\n      type: \"a278\",\n      a28: number\n    }\n  | {\n      type: \"a279\",\n      a28: number\n    }\n  | {\n      type: \"a280\",\n      a28: number\n    }\n  | {\n      type: \"a281\",\n      a29: number\n    }\n  | {\n      type: \"a282\",\n      a29: number\n    }\n  | {\n      type: \"a283\",\n      a29: number\n    }\n  | {\n      type: \"a284\",\n      a29: number\n    }\n  | {\n      type: \"a285\",\n      a29: number\n    }\n  | {\n      type: \"a286\",\n      a29: number\n    }\n  | {\n      type: \"a287\",\n      a29: number\n    }\n  | {\n      type: \"a288\",\n      a29: number\n    }\n  | {\n      type: \"a289\",\n      a29: number\n    }\n  | {\n      type: \"a290\",\n      a29: number\n    }\n  | {\n      type: \"a291\",\n      a30: number\n    }\n  | {\n      type: \"a292\",\n      a30: number\n    }\n  | {\n      type: \"a293\",\n      a30: number\n    }\n  | {\n      type: \"a294\",\n      a30: number\n    }\n  | {\n      type: \"a295\",\n      a30: number\n    }\n  | {\n      type: \"a296\",\n      a30: number\n    }\n  | {\n      type: \"a297\",\n      a30: number\n    }\n  | {\n      type: \"a298\",\n      a30: number\n    }\n  | {\n      type: \"a299\",\n      a30: number\n    }\n  | {\n      type: \"a300\",\n      a30: number\n    }\n  | {\n      type: \"a301\",\n      a31: number\n    }\n  | {\n      type: \"a302\",\n      a31: number\n    }\n  | {\n      type: \"a303\",\n      a31: number\n    }\n  | {\n      type: \"a304\",\n      a31: number\n    }\n  | {\n      type: \"a305\",\n      a31: number\n    }\n  | {\n      type: \"a306\",\n      a31: number\n    }\n  | {\n      type: \"a307\",\n      a31: number\n    }\n  | {\n      type: \"a308\",\n      a31: number\n    }\n  | {\n      type: \"a309\",\n      a31: number\n    }\n  | {\n      type: \"a310\",\n      a31: number\n    }\n  | {\n      type: \"a311\",\n      a32: number\n    }\n  | {\n      type: \"a312\",\n      a32: number\n    }\n  | {\n      type: \"a313\",\n      a32: number\n    }\n  | {\n      type: \"a314\",\n      a32: number\n    }\n  | {\n      type: \"a315\",\n      a32: number\n    }\n  | {\n      type: \"a316\",\n      a32: number\n    }\n  | {\n      type: \"a317\",\n      a32: number\n    }\n  | {\n      type: \"a318\",\n      a32: number\n    }\n  | {\n      type: \"a319\",\n      a32: number\n    }\n  | {\n      type: \"a320\",\n      a32: number\n    }\n  | {\n      type: \"a321\",\n      a33: number\n    }\n  | {\n      type: \"a322\",\n      a33: number\n    }\n  | {\n      type: \"a323\",\n      a33: number\n    }\n  | {\n      type: \"a324\",\n      a33: number\n    }\n  | {\n      type: \"a325\",\n      a33: number\n    }\n  | {\n      type: \"a326\",\n      a33: number\n    }\n  | {\n      type: \"a327\",\n      a33: number\n    }\n  | {\n      type: \"a328\",\n      a33: number\n    }\n  | {\n      type: \"a329\",\n      a33: number\n    }\n  | {\n      type: \"a330\",\n      a33: number\n    }\n  | {\n      type: \"a331\",\n      a34: number\n    }\n  | {\n      type: \"a332\",\n      a34: number\n    }\n  | {\n      type: \"a333\",\n      a34: number\n    }\n  | {\n      type: \"a334\",\n      a34: number\n    }\n  | {\n      type: \"a335\",\n      a34: number\n    }\n  | {\n      type: \"a336\",\n      a34: number\n    }\n  | {\n      type: \"a337\",\n      a34: number\n    }\n  | {\n      type: \"a338\",\n      a34: number\n    }\n  | {\n      type: \"a339\",\n      a34: number\n    }\n  | {\n      type: \"a340\",\n      a34: number\n    }\n  | {\n      type: \"a341\",\n      a35: number\n    }\n  | {\n      type: \"a342\",\n      a35: number\n    }\n  | {\n      type: \"a343\",\n      a35: number\n    }\n  | {\n      type: \"a344\",\n      a35: number\n    }\n  | {\n      type: \"a345\",\n      a35: number\n    }\n  | {\n      type: \"a346\",\n      a35: number\n    }\n  | {\n      type: \"a347\",\n      a35: number\n    }\n  | {\n      type: \"a348\",\n      a35: number\n    }\n  | {\n      type: \"a349\",\n      a35: number\n    }\n  | {\n      type: \"a350\",\n      a35: number\n    }\n  | {\n      type: \"a351\",\n      a36: number\n    }\n  | {\n      type: \"a352\",\n      a36: number\n    }\n  | {\n      type: \"a353\",\n      a36: number\n    }\n  | {\n      type: \"a354\",\n      a36: number\n    }\n  | {\n      type: \"a355\",\n      a36: number\n    }\n  | {\n      type: \"a356\",\n      a36: number\n    }\n  | {\n      type: \"a357\",\n      a36: number\n    }\n  | {\n      type: \"a358\",\n      a36: number\n    }\n  | {\n      type: \"a359\",\n      a36: number\n    }\n  | {\n      type: \"a360\",\n      a36: number\n    }\n  | {\n      type: \"a361\",\n      a37: number\n    }\n  | {\n      type: \"a362\",\n      a37: number\n    }\n  | {\n      type: \"a363\",\n      a37: number\n    }\n  | {\n      type: \"a364\",\n      a37: number\n    }\n  | {\n      type: \"a365\",\n      a37: number\n    }\n  | {\n      type: \"a366\",\n      a37: number\n    }\n  | {\n      type: \"a367\",\n      a37: number\n    }\n  | {\n      type: \"a368\",\n      a37: number\n    }\n  | {\n      type: \"a369\",\n      a37: number\n    }\n  | {\n      type: \"a370\",\n      a37: number\n    }\n  | {\n      type: \"a371\",\n      a38: number\n    }\n  | {\n      type: \"a372\",\n      a38: number\n    }\n  | {\n      type: \"a373\",\n      a38: number\n    }\n  | {\n      type: \"a374\",\n      a38: number\n    }\n  | {\n      type: \"a375\",\n      a38: number\n    }\n  | {\n      type: \"a376\",\n      a38: number\n    }\n  | {\n      type: \"a377\",\n      a38: number\n    }\n  | {\n      type: \"a378\",\n      a38: number\n    }\n  | {\n      type: \"a379\",\n      a38: number\n    }\n  | {\n      type: \"a380\",\n      a38: number\n    }\n  | {\n      type: \"a381\",\n      a39: number\n    }\n  | {\n      type: \"a382\",\n      a39: number\n    }\n  | {\n      type: \"a383\",\n      a39: number\n    }\n  | {\n      type: \"a384\",\n      a39: number\n    }\n  | {\n      type: \"a385\",\n      a39: number\n    }\n  | {\n      type: \"a386\",\n      a39: number\n    }\n  | {\n      type: \"a387\",\n      a39: number\n    }\n  | {\n      type: \"a388\",\n      a39: number\n    }\n  | {\n      type: \"a389\",\n      a39: number\n    }\n  | {\n      type: \"a390\",\n      a39: number\n    }\n  | {\n      type: \"a391\",\n      a40: number\n    }\n  | {\n      type: \"a392\",\n      a40: number\n    }\n  | {\n      type: \"a393\",\n      a40: number\n    }\n  | {\n      type: \"a394\",\n      a40: number\n    }\n  | {\n      type: \"a395\",\n      a40: number\n    }\n  | {\n      type: \"a396\",\n      a40: number\n    }\n  | {\n      type: \"a397\",\n      a40: number\n    }\n  | {\n      type: \"a398\",\n      a40: number\n    }\n  | {\n      type: \"a399\",\n      a40: number\n    }\n  | {\n      type: \"a400\",\n      a40: number\n    }\n  | {\n      type: \"a401\",\n      a41: number\n    }\n  | {\n      type: \"a402\",\n      a41: number\n    }\n  | {\n      type: \"a403\",\n      a41: number\n    }\n  | {\n      type: \"a404\",\n      a41: number\n    }\n  | {\n      type: \"a405\",\n      a41: number\n    }\n  | {\n      type: \"a406\",\n      a41: number\n    }\n  | {\n      type: \"a407\",\n      a41: number\n    }\n  | {\n      type: \"a408\",\n      a41: number\n    }\n  | {\n      type: \"a409\",\n      a41: number\n    }\n  | {\n      type: \"a410\",\n      a41: number\n    }\n  | {\n      type: \"a411\",\n      a42: number\n    }\n  | {\n      type: \"a412\",\n      a42: number\n    }\n  | {\n      type: \"a413\",\n      a42: number\n    }\n  | {\n      type: \"a414\",\n      a42: number\n    }\n  | {\n      type: \"a415\",\n      a42: number\n    }\n  | {\n      type: \"a416\",\n      a42: number\n    }\n  | {\n      type: \"a417\",\n      a42: number\n    }\n  | {\n      type: \"a418\",\n      a42: number\n    }\n  | {\n      type: \"a419\",\n      a42: number\n    }\n  | {\n      type: \"a420\",\n      a42: number\n    }\n  | {\n      type: \"a421\",\n      a43: number\n    }\n  | {\n      type: \"a422\",\n      a43: number\n    }\n  | {\n      type: \"a423\",\n      a43: number\n    }\n  | {\n      type: \"a424\",\n      a43: number\n    }\n  | {\n      type: \"a425\",\n      a43: number\n    }\n  | {\n      type: \"a426\",\n      a43: number\n    }\n  | {\n      type: \"a427\",\n      a43: number\n    }\n  | {\n      type: \"a428\",\n      a43: number\n    }\n  | {\n      type: \"a429\",\n      a43: number\n    }\n  | {\n      type: \"a430\",\n      a43: number\n    }\n  | {\n      type: \"a431\",\n      a44: number\n    }\n  | {\n      type: \"a432\",\n      a44: number\n    }\n  | {\n      type: \"a433\",\n      a44: number\n    }\n  | {\n      type: \"a434\",\n      a44: number\n    }\n  | {\n      type: \"a435\",\n      a44: number\n    }\n  | {\n      type: \"a436\",\n      a44: number\n    }\n  | {\n      type: \"a437\",\n      a44: number\n    }\n  | {\n      type: \"a438\",\n      a44: number\n    }\n  | {\n      type: \"a439\",\n      a44: number\n    }\n  | {\n      type: \"a440\",\n      a44: number\n    }\n  | {\n      type: \"a441\",\n      a45: number\n    }\n  | {\n      type: \"a442\",\n      a45: number\n    }\n  | {\n      type: \"a443\",\n      a45: number\n    }\n  | {\n      type: \"a444\",\n      a45: number\n    }\n  | {\n      type: \"a445\",\n      a45: number\n    }\n  | {\n      type: \"a446\",\n      a45: number\n    }\n  | {\n      type: \"a447\",\n      a45: number\n    }\n  | {\n      type: \"a448\",\n      a45: number\n    }\n  | {\n      type: \"a449\",\n      a45: number\n    }\n  | {\n      type: \"a450\",\n      a45: number\n    }\n  | {\n      type: \"a451\",\n      a46: number\n    }\n  | {\n      type: \"a452\",\n      a46: number\n    }\n  | {\n      type: \"a453\",\n      a46: number\n    }\n  | {\n      type: \"a454\",\n      a46: number\n    }\n  | {\n      type: \"a455\",\n      a46: number\n    }\n  | {\n      type: \"a456\",\n      a46: number\n    }\n  | {\n      type: \"a457\",\n      a46: number\n    }\n  | {\n      type: \"a458\",\n      a46: number\n    }\n  | {\n      type: \"a459\",\n      a46: number\n    }\n  | {\n      type: \"a460\",\n      a46: number\n    }\n  | {\n      type: \"a461\",\n      a47: number\n    }\n  | {\n      type: \"a462\",\n      a47: number\n    }\n  | {\n      type: \"a463\",\n      a47: number\n    }\n  | {\n      type: \"a464\",\n      a47: number\n    }\n  | {\n      type: \"a465\",\n      a47: number\n    }\n  | {\n      type: \"a466\",\n      a47: number\n    }\n  | {\n      type: \"a467\",\n      a47: number\n    }\n  | {\n      type: \"a468\",\n      a47: number\n    }\n  | {\n      type: \"a469\",\n      a47: number\n    }\n  | {\n      type: \"a470\",\n      a47: number\n    }\n  | {\n      type: \"a471\",\n      a48: number\n    }\n  | {\n      type: \"a472\",\n      a48: number\n    }\n  | {\n      type: \"a473\",\n      a48: number\n    }\n  | {\n      type: \"a474\",\n      a48: number\n    }\n  | {\n      type: \"a475\",\n      a48: number\n    }\n  | {\n      type: \"a476\",\n      a48: number\n    }\n  | {\n      type: \"a477\",\n      a48: number\n    }\n  | {\n      type: \"a478\",\n      a48: number\n    }\n  | {\n      type: \"a479\",\n      a48: number\n    }\n  | {\n      type: \"a480\",\n      a48: number\n    }\n  | {\n      type: \"a481\",\n      a49: number\n    }\n  | {\n      type: \"a482\",\n      a49: number\n    }\n  | {\n      type: \"a483\",\n      a49: number\n    }\n  | {\n      type: \"a484\",\n      a49: number\n    }\n  | {\n      type: \"a485\",\n      a49: number\n    }\n  | {\n      type: \"a486\",\n      a49: number\n    }\n  | {\n      type: \"a487\",\n      a49: number\n    }\n  | {\n      type: \"a488\",\n      a49: number\n    }\n  | {\n      type: \"a489\",\n      a49: number\n    }\n  | {\n      type: \"a490\",\n      a49: number\n    }\n  | {\n      type: \"a491\",\n      a50: number\n    }\n  | {\n      type: \"a492\",\n      a50: number\n    }\n  | {\n      type: \"a493\",\n      a50: number\n    }\n  | {\n      type: \"a494\",\n      a50: number\n    }\n  | {\n      type: \"a495\",\n      a50: number\n    }\n  | {\n      type: \"a496\",\n      a50: number\n    }\n  | {\n      type: \"a497\",\n      a50: number\n    }\n  | {\n      type: \"a498\",\n      a50: number\n    }\n  | {\n      type: \"a499\",\n      a50: number\n    }\n  | {\n      type: \"a500\",\n      a50: number\n    }\n  | {\n      type: \"a501\",\n      a51: number\n    }\n  | {\n      type: \"a502\",\n      a51: number\n    }\n  | {\n      type: \"a503\",\n      a51: number\n    }\n  | {\n      type: \"a504\",\n      a51: number\n    }\n  | {\n      type: \"a505\",\n      a51: number\n    }\n  | {\n      type: \"a506\",\n      a51: number\n    }\n  | {\n      type: \"a507\",\n      a51: number\n    }\n  | {\n      type: \"a508\",\n      a51: number\n    }\n  | {\n      type: \"a509\",\n      a51: number\n    }\n  | {\n      type: \"a510\",\n      a51: number\n    }\n  | {\n      type: \"a511\",\n      a52: number\n    }\n  | {\n      type: \"a512\",\n      a52: number\n    }\n  | {\n      type: \"a513\",\n      a52: number\n    }\n  | {\n      type: \"a514\",\n      a52: number\n    }\n  | {\n      type: \"a515\",\n      a52: number\n    }\n  | {\n      type: \"a516\",\n      a52: number\n    }\n  | {\n      type: \"a517\",\n      a52: number\n    }\n  | {\n      type: \"a518\",\n      a52: number\n    }\n  | {\n      type: \"a519\",\n      a52: number\n    }\n  | {\n      type: \"a520\",\n      a52: number\n    }\n  | {\n      type: \"a521\",\n      a53: number\n    }\n  | {\n      type: \"a522\",\n      a53: number\n    }\n  | {\n      type: \"a523\",\n      a53: number\n    }\n  | {\n      type: \"a524\",\n      a53: number\n    }\n  | {\n      type: \"a525\",\n      a53: number\n    }\n  | {\n      type: \"a526\",\n      a53: number\n    }\n  | {\n      type: \"a527\",\n      a53: number\n    }\n  | {\n      type: \"a528\",\n      a53: number\n    }\n  | {\n      type: \"a529\",\n      a53: number\n    }\n  | {\n      type: \"a530\",\n      a53: number\n    }\n  | {\n      type: \"a531\",\n      a54: number\n    }\n  | {\n      type: \"a532\",\n      a54: number\n    }\n  | {\n      type: \"a533\",\n      a54: number\n    }\n  | {\n      type: \"a534\",\n      a54: number\n    }\n  | {\n      type: \"a535\",\n      a54: number\n    }\n  | {\n      type: \"a536\",\n      a54: number\n    }\n  | {\n      type: \"a537\",\n      a54: number\n    }\n  | {\n      type: \"a538\",\n      a54: number\n    }\n  | {\n      type: \"a539\",\n      a54: number\n    }\n  | {\n      type: \"a540\",\n      a54: number\n    }\n  | {\n      type: \"a541\",\n      a55: number\n    }\n  | {\n      type: \"a542\",\n      a55: number\n    }\n  | {\n      type: \"a543\",\n      a55: number\n    }\n  | {\n      type: \"a544\",\n      a55: number\n    }\n  | {\n      type: \"a545\",\n      a55: number\n    }\n  | {\n      type: \"a546\",\n      a55: number\n    }\n  | {\n      type: \"a547\",\n      a55: number\n    }\n  | {\n      type: \"a548\",\n      a55: number\n    }\n  | {\n      type: \"a549\",\n      a55: number\n    }\n  | {\n      type: \"a550\",\n      a55: number\n    }\n  | {\n      type: \"a551\",\n      a56: number\n    }\n  | {\n      type: \"a552\",\n      a56: number\n    }\n  | {\n      type: \"a553\",\n      a56: number\n    }\n  | {\n      type: \"a554\",\n      a56: number\n    }\n  | {\n      type: \"a555\",\n      a56: number\n    }\n  | {\n      type: \"a556\",\n      a56: number\n    }\n  | {\n      type: \"a557\",\n      a56: number\n    }\n  | {\n      type: \"a558\",\n      a56: number\n    }\n  | {\n      type: \"a559\",\n      a56: number\n    }\n  | {\n      type: \"a560\",\n      a56: number\n    }\n  | {\n      type: \"a561\",\n      a57: number\n    }\n  | {\n      type: \"a562\",\n      a57: number\n    }\n  | {\n      type: \"a563\",\n      a57: number\n    }\n  | {\n      type: \"a564\",\n      a57: number\n    }\n  | {\n      type: \"a565\",\n      a57: number\n    }\n  | {\n      type: \"a566\",\n      a57: number\n    }\n  | {\n      type: \"a567\",\n      a57: number\n    }\n  | {\n      type: \"a568\",\n      a57: number\n    }\n  | {\n      type: \"a569\",\n      a57: number\n    }\n  | {\n      type: \"a570\",\n      a57: number\n    }\n  | {\n      type: \"a571\",\n      a58: number\n    }\n  | {\n      type: \"a572\",\n      a58: number\n    }\n  | {\n      type: \"a573\",\n      a58: number\n    }\n  | {\n      type: \"a574\",\n      a58: number\n    }\n  | {\n      type: \"a575\",\n      a58: number\n    }\n  | {\n      type: \"a576\",\n      a58: number\n    }\n  | {\n      type: \"a577\",\n      a58: number\n    }\n  | {\n      type: \"a578\",\n      a58: number\n    }\n  | {\n      type: \"a579\",\n      a58: number\n    }\n  | {\n      type: \"a580\",\n      a58: number\n    }\n  | {\n      type: \"a581\",\n      a59: number\n    }\n  | {\n      type: \"a582\",\n      a59: number\n    }\n  | {\n      type: \"a583\",\n      a59: number\n    }\n  | {\n      type: \"a584\",\n      a59: number\n    }\n  | {\n      type: \"a585\",\n      a59: number\n    }\n  | {\n      type: \"a586\",\n      a59: number\n    }\n  | {\n      type: \"a587\",\n      a59: number\n    }\n  | {\n      type: \"a588\",\n      a59: number\n    }\n  | {\n      type: \"a589\",\n      a59: number\n    }\n  | {\n      type: \"a590\",\n      a59: number\n    }\n  | {\n      type: \"a591\",\n      a60: number\n    }\n  | {\n      type: \"a592\",\n      a60: number\n    }\n  | {\n      type: \"a593\",\n      a60: number\n    }\n  | {\n      type: \"a594\",\n      a60: number\n    }\n  | {\n      type: \"a595\",\n      a60: number\n    }\n  | {\n      type: \"a596\",\n      a60: number\n    }\n  | {\n      type: \"a597\",\n      a60: number\n    }\n  | {\n      type: \"a598\",\n      a60: number\n    }\n  | {\n      type: \"a599\",\n      a60: number\n    }\n  | {\n      type: \"a600\",\n      a60: number\n    }\n  | {\n      type: \"a601\",\n      a61: number\n    }\n  | {\n      type: \"a602\",\n      a61: number\n    }\n  | {\n      type: \"a603\",\n      a61: number\n    }\n  | {\n      type: \"a604\",\n      a61: number\n    }\n  | {\n      type: \"a605\",\n      a61: number\n    }\n  | {\n      type: \"a606\",\n      a61: number\n    }\n  | {\n      type: \"a607\",\n      a61: number\n    }\n  | {\n      type: \"a608\",\n      a61: number\n    }\n  | {\n      type: \"a609\",\n      a61: number\n    }\n  | {\n      type: \"a610\",\n      a61: number\n    }\n  | {\n      type: \"a611\",\n      a62: number\n    }\n  | {\n      type: \"a612\",\n      a62: number\n    }\n  | {\n      type: \"a613\",\n      a62: number\n    }\n  | {\n      type: \"a614\",\n      a62: number\n    }\n  | {\n      type: \"a615\",\n      a62: number\n    }\n  | {\n      type: \"a616\",\n      a62: number\n    }\n  | {\n      type: \"a617\",\n      a62: number\n    }\n  | {\n      type: \"a618\",\n      a62: number\n    }\n  | {\n      type: \"a619\",\n      a62: number\n    }\n  | {\n      type: \"a620\",\n      a62: number\n    }\n  | {\n      type: \"a621\",\n      a63: number\n    }\n  | {\n      type: \"a622\",\n      a63: number\n    }\n  | {\n      type: \"a623\",\n      a63: number\n    }\n  | {\n      type: \"a624\",\n      a63: number\n    }\n  | {\n      type: \"a625\",\n      a63: number\n    }\n  | {\n      type: \"a626\",\n      a63: number\n    }\n  | {\n      type: \"a627\",\n      a63: number\n    }\n  | {\n      type: \"a628\",\n      a63: number\n    }\n  | {\n      type: \"a629\",\n      a63: number\n    }\n  | {\n      type: \"a630\",\n      a63: number\n    }\n  | {\n      type: \"a631\",\n      a64: number\n    }\n  | {\n      type: \"a632\",\n      a64: number\n    }\n  | {\n      type: \"a633\",\n      a64: number\n    }\n  | {\n      type: \"a634\",\n      a64: number\n    }\n  | {\n      type: \"a635\",\n      a64: number\n    }\n  | {\n      type: \"a636\",\n      a64: number\n    }\n  | {\n      type: \"a637\",\n      a64: number\n    }\n  | {\n      type: \"a638\",\n      a64: number\n    }\n  | {\n      type: \"a639\",\n      a64: number\n    }\n  | {\n      type: \"a640\",\n      a64: number\n    }\n  | {\n      type: \"a641\",\n      a65: number\n    }\n  | {\n      type: \"a642\",\n      a65: number\n    }\n  | {\n      type: \"a643\",\n      a65: number\n    }\n  | {\n      type: \"a644\",\n      a65: number\n    }\n  | {\n      type: \"a645\",\n      a65: number\n    }\n  | {\n      type: \"a646\",\n      a65: number\n    }\n  | {\n      type: \"a647\",\n      a65: number\n    }\n  | {\n      type: \"a648\",\n      a65: number\n    }\n  | {\n      type: \"a649\",\n      a65: number\n    }\n  | {\n      type: \"a650\",\n      a65: number\n    }\n  | {\n      type: \"a651\",\n      a66: number\n    }\n  | {\n      type: \"a652\",\n      a66: number\n    }\n  | {\n      type: \"a653\",\n      a66: number\n    }\n  | {\n      type: \"a654\",\n      a66: number\n    }\n  | {\n      type: \"a655\",\n      a66: number\n    }\n  | {\n      type: \"a656\",\n      a66: number\n    }\n  | {\n      type: \"a657\",\n      a66: number\n    }\n  | {\n      type: \"a658\",\n      a66: number\n    }\n  | {\n      type: \"a659\",\n      a66: number\n    }\n  | {\n      type: \"a660\",\n      a66: number\n    }\n  | {\n      type: \"a661\",\n      a67: number\n    }\n  | {\n      type: \"a662\",\n      a67: number\n    }\n  | {\n      type: \"a663\",\n      a67: number\n    }\n  | {\n      type: \"a664\",\n      a67: number\n    }\n  | {\n      type: \"a665\",\n      a67: number\n    }\n  | {\n      type: \"a666\",\n      a67: number\n    }\n  | {\n      type: \"a667\",\n      a67: number\n    }\n  | {\n      type: \"a668\",\n      a67: number\n    }\n  | {\n      type: \"a669\",\n      a67: number\n    }\n  | {\n      type: \"a670\",\n      a67: number\n    }\n  | {\n      type: \"a671\",\n      a68: number\n    }\n  | {\n      type: \"a672\",\n      a68: number\n    }\n  | {\n      type: \"a673\",\n      a68: number\n    }\n  | {\n      type: \"a674\",\n      a68: number\n    }\n  | {\n      type: \"a675\",\n      a68: number\n    }\n  | {\n      type: \"a676\",\n      a68: number\n    }\n  | {\n      type: \"a677\",\n      a68: number\n    }\n  | {\n      type: \"a678\",\n      a68: number\n    }\n  | {\n      type: \"a679\",\n      a68: number\n    }\n  | {\n      type: \"a680\",\n      a68: number\n    }\n  | {\n      type: \"a681\",\n      a69: number\n    }\n  | {\n      type: \"a682\",\n      a69: number\n    }\n  | {\n      type: \"a683\",\n      a69: number\n    }\n  | {\n      type: \"a684\",\n      a69: number\n    }\n  | {\n      type: \"a685\",\n      a69: number\n    }\n  | {\n      type: \"a686\",\n      a69: number\n    }\n  | {\n      type: \"a687\",\n      a69: number\n    }\n  | {\n      type: \"a688\",\n      a69: number\n    }\n  | {\n      type: \"a689\",\n      a69: number\n    }\n  | {\n      type: \"a690\",\n      a69: number\n    }\n  | {\n      type: \"a691\",\n      a70: number\n    }\n  | {\n      type: \"a692\",\n      a70: number\n    }\n  | {\n      type: \"a693\",\n      a70: number\n    }\n  | {\n      type: \"a694\",\n      a70: number\n    }\n  | {\n      type: \"a695\",\n      a70: number\n    }\n  | {\n      type: \"a696\",\n      a70: number\n    }\n  | {\n      type: \"a697\",\n      a70: number\n    }\n  | {\n      type: \"a698\",\n      a70: number\n    }\n  | {\n      type: \"a699\",\n      a70: number\n    }\n  | {\n      type: \"a700\",\n      a70: number\n    }\n  | {\n      type: \"a701\",\n      a71: number\n    }\n  | {\n      type: \"a702\",\n      a71: number\n    }\n  | {\n      type: \"a703\",\n      a71: number\n    }\n  | {\n      type: \"a704\",\n      a71: number\n    }\n  | {\n      type: \"a705\",\n      a71: number\n    }\n  | {\n      type: \"a706\",\n      a71: number\n    }\n  | {\n      type: \"a707\",\n      a71: number\n    }\n  | {\n      type: \"a708\",\n      a71: number\n    }\n  | {\n      type: \"a709\",\n      a71: number\n    }\n  | {\n      type: \"a710\",\n      a71: number\n    }\n  | {\n      type: \"a711\",\n      a72: number\n    }\n  | {\n      type: \"a712\",\n      a72: number\n    }\n  | {\n      type: \"a713\",\n      a72: number\n    }\n  | {\n      type: \"a714\",\n      a72: number\n    }\n  | {\n      type: \"a715\",\n      a72: number\n    }\n  | {\n      type: \"a716\",\n      a72: number\n    }\n  | {\n      type: \"a717\",\n      a72: number\n    }\n  | {\n      type: \"a718\",\n      a72: number\n    }\n  | {\n      type: \"a719\",\n      a72: number\n    }\n  | {\n      type: \"a720\",\n      a72: number\n    }\n  | {\n      type: \"a721\",\n      a73: number\n    }\n  | {\n      type: \"a722\",\n      a73: number\n    }\n  | {\n      type: \"a723\",\n      a73: number\n    }\n  | {\n      type: \"a724\",\n      a73: number\n    }\n  | {\n      type: \"a725\",\n      a73: number\n    }\n  | {\n      type: \"a726\",\n      a73: number\n    }\n  | {\n      type: \"a727\",\n      a73: number\n    }\n  | {\n      type: \"a728\",\n      a73: number\n    }\n  | {\n      type: \"a729\",\n      a73: number\n    }\n  | {\n      type: \"a730\",\n      a73: number\n    }\n  | {\n      type: \"a731\",\n      a74: number\n    }\n  | {\n      type: \"a732\",\n      a74: number\n    }\n  | {\n      type: \"a733\",\n      a74: number\n    }\n  | {\n      type: \"a734\",\n      a74: number\n    }\n  | {\n      type: \"a735\",\n      a74: number\n    }\n  | {\n      type: \"a736\",\n      a74: number\n    }\n  | {\n      type: \"a737\",\n      a74: number\n    }\n  | {\n      type: \"a738\",\n      a74: number\n    }\n  | {\n      type: \"a739\",\n      a74: number\n    }\n  | {\n      type: \"a740\",\n      a74: number\n    }\n  | {\n      type: \"a741\",\n      a75: number\n    }\n  | {\n      type: \"a742\",\n      a75: number\n    }\n  | {\n      type: \"a743\",\n      a75: number\n    }\n  | {\n      type: \"a744\",\n      a75: number\n    }\n  | {\n      type: \"a745\",\n      a75: number\n    }\n  | {\n      type: \"a746\",\n      a75: number\n    }\n  | {\n      type: \"a747\",\n      a75: number\n    }\n  | {\n      type: \"a748\",\n      a75: number\n    }\n  | {\n      type: \"a749\",\n      a75: number\n    }\n  | {\n      type: \"a750\",\n      a75: number\n    }\n  | {\n      type: \"a751\",\n      a76: number\n    }\n  | {\n      type: \"a752\",\n      a76: number\n    }\n  | {\n      type: \"a753\",\n      a76: number\n    }\n  | {\n      type: \"a754\",\n      a76: number\n    }\n  | {\n      type: \"a755\",\n      a76: number\n    }\n  | {\n      type: \"a756\",\n      a76: number\n    }\n  | {\n      type: \"a757\",\n      a76: number\n    }\n  | {\n      type: \"a758\",\n      a76: number\n    }\n  | {\n      type: \"a759\",\n      a76: number\n    }\n  | {\n      type: \"a760\",\n      a76: number\n    }\n  | {\n      type: \"a761\",\n      a77: number\n    }\n  | {\n      type: \"a762\",\n      a77: number\n    }\n  | {\n      type: \"a763\",\n      a77: number\n    }\n  | {\n      type: \"a764\",\n      a77: number\n    }\n  | {\n      type: \"a765\",\n      a77: number\n    }\n  | {\n      type: \"a766\",\n      a77: number\n    }\n  | {\n      type: \"a767\",\n      a77: number\n    }\n  | {\n      type: \"a768\",\n      a77: number\n    }\n  | {\n      type: \"a769\",\n      a77: number\n    }\n  | {\n      type: \"a770\",\n      a77: number\n    }\n  | {\n      type: \"a771\",\n      a78: number\n    }\n  | {\n      type: \"a772\",\n      a78: number\n    }\n  | {\n      type: \"a773\",\n      a78: number\n    }\n  | {\n      type: \"a774\",\n      a78: number\n    }\n  | {\n      type: \"a775\",\n      a78: number\n    }\n  | {\n      type: \"a776\",\n      a78: number\n    }\n  | {\n      type: \"a777\",\n      a78: number\n    }\n  | {\n      type: \"a778\",\n      a78: number\n    }\n  | {\n      type: \"a779\",\n      a78: number\n    }\n  | {\n      type: \"a780\",\n      a78: number\n    }\n  | {\n      type: \"a781\",\n      a79: number\n    }\n  | {\n      type: \"a782\",\n      a79: number\n    }\n  | {\n      type: \"a783\",\n      a79: number\n    }\n  | {\n      type: \"a784\",\n      a79: number\n    }\n  | {\n      type: \"a785\",\n      a79: number\n    }\n  | {\n      type: \"a786\",\n      a79: number\n    }\n  | {\n      type: \"a787\",\n      a79: number\n    }\n  | {\n      type: \"a788\",\n      a79: number\n    }\n  | {\n      type: \"a789\",\n      a79: number\n    }\n  | {\n      type: \"a790\",\n      a79: number\n    }\n  | {\n      type: \"a791\",\n      a80: number\n    }\n  | {\n      type: \"a792\",\n      a80: number\n    }\n  | {\n      type: \"a793\",\n      a80: number\n    }\n  | {\n      type: \"a794\",\n      a80: number\n    }\n  | {\n      type: \"a795\",\n      a80: number\n    }\n  | {\n      type: \"a796\",\n      a80: number\n    }\n  | {\n      type: \"a797\",\n      a80: number\n    }\n  | {\n      type: \"a798\",\n      a80: number\n    }\n  | {\n      type: \"a799\",\n      a80: number\n    }\n  | {\n      type: \"a800\",\n      a80: number\n    }\n  | {\n      type: \"a801\",\n      a81: number\n    }\n  | {\n      type: \"a802\",\n      a81: number\n    }\n  | {\n      type: \"a803\",\n      a81: number\n    }\n  | {\n      type: \"a804\",\n      a81: number\n    }\n  | {\n      type: \"a805\",\n      a81: number\n    }\n  | {\n      type: \"a806\",\n      a81: number\n    }\n  | {\n      type: \"a807\",\n      a81: number\n    }\n  | {\n      type: \"a808\",\n      a81: number\n    }\n  | {\n      type: \"a809\",\n      a81: number\n    }\n  | {\n      type: \"a810\",\n      a81: number\n    }\n  | {\n      type: \"a811\",\n      a82: number\n    }\n  | {\n      type: \"a812\",\n      a82: number\n    }\n  | {\n      type: \"a813\",\n      a82: number\n    }\n  | {\n      type: \"a814\",\n      a82: number\n    }\n  | {\n      type: \"a815\",\n      a82: number\n    }\n  | {\n      type: \"a816\",\n      a82: number\n    }\n  | {\n      type: \"a817\",\n      a82: number\n    }\n  | {\n      type: \"a818\",\n      a82: number\n    }\n  | {\n      type: \"a819\",\n      a82: number\n    }\n  | {\n      type: \"a820\",\n      a82: number\n    }\n  | {\n      type: \"a821\",\n      a83: number\n    }\n  | {\n      type: \"a822\",\n      a83: number\n    }\n  | {\n      type: \"a823\",\n      a83: number\n    }\n  | {\n      type: \"a824\",\n      a83: number\n    }\n  | {\n      type: \"a825\",\n      a83: number\n    }\n  | {\n      type: \"a826\",\n      a83: number\n    }\n  | {\n      type: \"a827\",\n      a83: number\n    }\n  | {\n      type: \"a828\",\n      a83: number\n    }\n  | {\n      type: \"a829\",\n      a83: number\n    }\n  | {\n      type: \"a830\",\n      a83: number\n    }\n  | {\n      type: \"a831\",\n      a84: number\n    }\n  | {\n      type: \"a832\",\n      a84: number\n    }\n  | {\n      type: \"a833\",\n      a84: number\n    }\n  | {\n      type: \"a834\",\n      a84: number\n    }\n  | {\n      type: \"a835\",\n      a84: number\n    }\n  | {\n      type: \"a836\",\n      a84: number\n    }\n  | {\n      type: \"a837\",\n      a84: number\n    }\n  | {\n      type: \"a838\",\n      a84: number\n    }\n  | {\n      type: \"a839\",\n      a84: number\n    }\n  | {\n      type: \"a840\",\n      a84: number\n    }\n  | {\n      type: \"a841\",\n      a85: number\n    }\n  | {\n      type: \"a842\",\n      a85: number\n    }\n  | {\n      type: \"a843\",\n      a85: number\n    }\n  | {\n      type: \"a844\",\n      a85: number\n    }\n  | {\n      type: \"a845\",\n      a85: number\n    }\n  | {\n      type: \"a846\",\n      a85: number\n    }\n  | {\n      type: \"a847\",\n      a85: number\n    }\n  | {\n      type: \"a848\",\n      a85: number\n    }\n  | {\n      type: \"a849\",\n      a85: number\n    }\n  | {\n      type: \"a850\",\n      a85: number\n    }\n  | {\n      type: \"a851\",\n      a86: number\n    }\n  | {\n      type: \"a852\",\n      a86: number\n    }\n  | {\n      type: \"a853\",\n      a86: number\n    }\n  | {\n      type: \"a854\",\n      a86: number\n    }\n  | {\n      type: \"a855\",\n      a86: number\n    }\n  | {\n      type: \"a856\",\n      a86: number\n    }\n  | {\n      type: \"a857\",\n      a86: number\n    }\n  | {\n      type: \"a858\",\n      a86: number\n    }\n  | {\n      type: \"a859\",\n      a86: number\n    }\n  | {\n      type: \"a860\",\n      a86: number\n    }\n  | {\n      type: \"a861\",\n      a87: number\n    }\n  | {\n      type: \"a862\",\n      a87: number\n    }\n  | {\n      type: \"a863\",\n      a87: number\n    }\n  | {\n      type: \"a864\",\n      a87: number\n    }\n  | {\n      type: \"a865\",\n      a87: number\n    }\n  | {\n      type: \"a866\",\n      a87: number\n    }\n  | {\n      type: \"a867\",\n      a87: number\n    }\n  | {\n      type: \"a868\",\n      a87: number\n    }\n  | {\n      type: \"a869\",\n      a87: number\n    }\n  | {\n      type: \"a870\",\n      a87: number\n    }\n  | {\n      type: \"a871\",\n      a88: number\n    }\n  | {\n      type: \"a872\",\n      a88: number\n    }\n  | {\n      type: \"a873\",\n      a88: number\n    }\n  | {\n      type: \"a874\",\n      a88: number\n    }\n  | {\n      type: \"a875\",\n      a88: number\n    }\n  | {\n      type: \"a876\",\n      a88: number\n    }\n  | {\n      type: \"a877\",\n      a88: number\n    }\n  | {\n      type: \"a878\",\n      a88: number\n    }\n  | {\n      type: \"a879\",\n      a88: number\n    }\n  | {\n      type: \"a880\",\n      a88: number\n    }\n  | {\n      type: \"a881\",\n      a89: number\n    }\n  | {\n      type: \"a882\",\n      a89: number\n    }\n  | {\n      type: \"a883\",\n      a89: number\n    }\n  | {\n      type: \"a884\",\n      a89: number\n    }\n  | {\n      type: \"a885\",\n      a89: number\n    }\n  | {\n      type: \"a886\",\n      a89: number\n    }\n  | {\n      type: \"a887\",\n      a89: number\n    }\n  | {\n      type: \"a888\",\n      a89: number\n    }\n  | {\n      type: \"a889\",\n      a89: number\n    }\n  | {\n      type: \"a890\",\n      a89: number\n    }\n  | {\n      type: \"a891\",\n      a90: number\n    }\n  | {\n      type: \"a892\",\n      a90: number\n    }\n  | {\n      type: \"a893\",\n      a90: number\n    }\n  | {\n      type: \"a894\",\n      a90: number\n    }\n  | {\n      type: \"a895\",\n      a90: number\n    }\n  | {\n      type: \"a896\",\n      a90: number\n    }\n  | {\n      type: \"a897\",\n      a90: number\n    }\n  | {\n      type: \"a898\",\n      a90: number\n    }\n  | {\n      type: \"a899\",\n      a90: number\n    }\n  | {\n      type: \"a900\",\n      a90: number\n    }\n  | {\n      type: \"a901\",\n      a91: number\n    }\n  | {\n      type: \"a902\",\n      a91: number\n    }\n  | {\n      type: \"a903\",\n      a91: number\n    }\n  | {\n      type: \"a904\",\n      a91: number\n    }\n  | {\n      type: \"a905\",\n      a91: number\n    }\n  | {\n      type: \"a906\",\n      a91: number\n    }\n  | {\n      type: \"a907\",\n      a91: number\n    }\n  | {\n      type: \"a908\",\n      a91: number\n    }\n  | {\n      type: \"a909\",\n      a91: number\n    }\n  | {\n      type: \"a910\",\n      a91: number\n    }\n  | {\n      type: \"a911\",\n      a92: number\n    }\n  | {\n      type: \"a912\",\n      a92: number\n    }\n  | {\n      type: \"a913\",\n      a92: number\n    }\n  | {\n      type: \"a914\",\n      a92: number\n    }\n  | {\n      type: \"a915\",\n      a92: number\n    }\n  | {\n      type: \"a916\",\n      a92: number\n    }\n  | {\n      type: \"a917\",\n      a92: number\n    }\n  | {\n      type: \"a918\",\n      a92: number\n    }\n  | {\n      type: \"a919\",\n      a92: number\n    }\n  | {\n      type: \"a920\",\n      a92: number\n    }\n  | {\n      type: \"a921\",\n      a93: number\n    }\n  | {\n      type: \"a922\",\n      a93: number\n    }\n  | {\n      type: \"a923\",\n      a93: number\n    }\n  | {\n      type: \"a924\",\n      a93: number\n    }\n  | {\n      type: \"a925\",\n      a93: number\n    }\n  | {\n      type: \"a926\",\n      a93: number\n    }\n  | {\n      type: \"a927\",\n      a93: number\n    }\n  | {\n      type: \"a928\",\n      a93: number\n    }\n  | {\n      type: \"a929\",\n      a93: number\n    }\n  | {\n      type: \"a930\",\n      a93: number\n    }\n  | {\n      type: \"a931\",\n      a94: number\n    }\n  | {\n      type: \"a932\",\n      a94: number\n    }\n  | {\n      type: \"a933\",\n      a94: number\n    }\n  | {\n      type: \"a934\",\n      a94: number\n    }\n  | {\n      type: \"a935\",\n      a94: number\n    }\n  | {\n      type: \"a936\",\n      a94: number\n    }\n  | {\n      type: \"a937\",\n      a94: number\n    }\n  | {\n      type: \"a938\",\n      a94: number\n    }\n  | {\n      type: \"a939\",\n      a94: number\n    }\n  | {\n      type: \"a940\",\n      a94: number\n    }\n  | {\n      type: \"a941\",\n      a95: number\n    }\n  | {\n      type: \"a942\",\n      a95: number\n    }\n  | {\n      type: \"a943\",\n      a95: number\n    }\n  | {\n      type: \"a944\",\n      a95: number\n    }\n  | {\n      type: \"a945\",\n      a95: number\n    }\n  | {\n      type: \"a946\",\n      a95: number\n    }\n  | {\n      type: \"a947\",\n      a95: number\n    }\n  | {\n      type: \"a948\",\n      a95: number\n    }\n  | {\n      type: \"a949\",\n      a95: number\n    }\n  | {\n      type: \"a950\",\n      a95: number\n    }\n  | {\n      type: \"a951\",\n      a96: number\n    }\n  | {\n      type: \"a952\",\n      a96: number\n    }\n  | {\n      type: \"a953\",\n      a96: number\n    }\n  | {\n      type: \"a954\",\n      a96: number\n    }\n  | {\n      type: \"a955\",\n      a96: number\n    }\n  | {\n      type: \"a956\",\n      a96: number\n    }\n  | {\n      type: \"a957\",\n      a96: number\n    }\n  | {\n      type: \"a958\",\n      a96: number\n    }\n  | {\n      type: \"a959\",\n      a96: number\n    }\n  | {\n      type: \"a960\",\n      a96: number\n    }\n  | {\n      type: \"a961\",\n      a97: number\n    }\n  | {\n      type: \"a962\",\n      a97: number\n    }\n  | {\n      type: \"a963\",\n      a97: number\n    }\n  | {\n      type: \"a964\",\n      a97: number\n    }\n  | {\n      type: \"a965\",\n      a97: number\n    }\n  | {\n      type: \"a966\",\n      a97: number\n    }\n  | {\n      type: \"a967\",\n      a97: number\n    }\n  | {\n      type: \"a968\",\n      a97: number\n    }\n  | {\n      type: \"a969\",\n      a97: number\n    }\n  | {\n      type: \"a970\",\n      a97: number\n    }\n  | {\n      type: \"a971\",\n      a98: number\n    }\n  | {\n      type: \"a972\",\n      a98: number\n    }\n  | {\n      type: \"a973\",\n      a98: number\n    }\n  | {\n      type: \"a974\",\n      a98: number\n    }\n  | {\n      type: \"a975\",\n      a98: number\n    }\n  | {\n      type: \"a976\",\n      a98: number\n    }\n  | {\n      type: \"a977\",\n      a98: number\n    }\n  | {\n      type: \"a978\",\n      a98: number\n    }\n  | {\n      type: \"a979\",\n      a98: number\n    }\n  | {\n      type: \"a980\",\n      a98: number\n    }\n  | {\n      type: \"a981\",\n      a99: number\n    }\n  | {\n      type: \"a982\",\n      a99: number\n    }\n  | {\n      type: \"a983\",\n      a99: number\n    }\n  | {\n      type: \"a984\",\n      a99: number\n    }\n  | {\n      type: \"a985\",\n      a99: number\n    }\n  | {\n      type: \"a986\",\n      a99: number\n    }\n  | {\n      type: \"a987\",\n      a99: number\n    }\n  | {\n      type: \"a988\",\n      a99: number\n    }\n  | {\n      type: \"a989\",\n      a99: number\n    }\n  | {\n      type: \"a990\",\n      a99: number\n    }\n  | {\n      type: \"a991\",\n      a100: number\n    }\n  | {\n      type: \"a992\",\n      a100: number\n    }\n  | {\n      type: \"a993\",\n      a100: number\n    }\n  | {\n      type: \"a994\",\n      a100: number\n    }\n  | {\n      type: \"a995\",\n      a100: number\n    }\n  | {\n      type: \"a996\",\n      a100: number\n    }\n  | {\n      type: \"a997\",\n      a100: number\n    }\n  | {\n      type: \"a998\",\n      a100: number\n    }\n  | {\n      type: \"a999\",\n      a100: number\n    }\n  | {\n      type: \"a1000\",\n      a100: number\n    };\nfunction foo(x: TAction): TAction {\n  return x;\n}\n\n`;\n\nexports[`test.js 1`] = `\ntype A = {a: number};\ntype B = {b: number};\ntype C = {c: number};\n\ntype T1 = (A | B) & C;\nfunction f1(x: T1): T1 { return x; }\n\ntype T2 = (A & B) | C;\nfunction f2(x: T2): T2 { return x; }\n\ntype T3 = (A & C) | (B & C);\nfunction f3(x: T3): T3 { return x; }\n\ntype T4 = (A | C) & (B | C);\nfunction f4(x: T4): T4 { return x; }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype A = { a: number };\ntype B = { b: number };\ntype C = { c: number };\n\ntype T1 = (A | B) & C;\nfunction f1(x: T1): T1 {\n  return x;\n}\n\ntype T2 = (A & B) | C;\nfunction f2(x: T2): T2 {\n  return x;\n}\n\ntype T3 = (A & C) | (B & C);\nfunction f3(x: T3): T3 {\n  return x;\n}\n\ntype T4 = (A | C) & (B | C);\nfunction f4(x: T4): T4 {\n  return x;\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/union-intersection/gen_big_disjoint_union.js",
    "content": "// perf test for big disjoint union with 1000 cases\ntype TAction =\n{\n  type: 'a1',\n  a1: number,\n} |\n{\n  type: 'a2',\n  a1: number,\n} |\n{\n  type: 'a3',\n  a1: number,\n} |\n{\n  type: 'a4',\n  a1: number,\n} |\n{\n  type: 'a5',\n  a1: number,\n} |\n{\n  type: 'a6',\n  a1: number,\n} |\n{\n  type: 'a7',\n  a1: number,\n} |\n{\n  type: 'a8',\n  a1: number,\n} |\n{\n  type: 'a9',\n  a1: number,\n} |\n{\n  type: 'a10',\n  a1: number,\n} |\n{\n  type: 'a11',\n  a2: number,\n} |\n{\n  type: 'a12',\n  a2: number,\n} |\n{\n  type: 'a13',\n  a2: number,\n} |\n{\n  type: 'a14',\n  a2: number,\n} |\n{\n  type: 'a15',\n  a2: number,\n} |\n{\n  type: 'a16',\n  a2: number,\n} |\n{\n  type: 'a17',\n  a2: number,\n} |\n{\n  type: 'a18',\n  a2: number,\n} |\n{\n  type: 'a19',\n  a2: number,\n} |\n{\n  type: 'a20',\n  a2: number,\n} |\n{\n  type: 'a21',\n  a3: number,\n} |\n{\n  type: 'a22',\n  a3: number,\n} |\n{\n  type: 'a23',\n  a3: number,\n} |\n{\n  type: 'a24',\n  a3: number,\n} |\n{\n  type: 'a25',\n  a3: number,\n} |\n{\n  type: 'a26',\n  a3: number,\n} |\n{\n  type: 'a27',\n  a3: number,\n} |\n{\n  type: 'a28',\n  a3: number,\n} |\n{\n  type: 'a29',\n  a3: number,\n} |\n{\n  type: 'a30',\n  a3: number,\n} |\n{\n  type: 'a31',\n  a4: number,\n} |\n{\n  type: 'a32',\n  a4: number,\n} |\n{\n  type: 'a33',\n  a4: number,\n} |\n{\n  type: 'a34',\n  a4: number,\n} |\n{\n  type: 'a35',\n  a4: number,\n} |\n{\n  type: 'a36',\n  a4: number,\n} |\n{\n  type: 'a37',\n  a4: number,\n} |\n{\n  type: 'a38',\n  a4: number,\n} |\n{\n  type: 'a39',\n  a4: number,\n} |\n{\n  type: 'a40',\n  a4: number,\n} |\n{\n  type: 'a41',\n  a5: number,\n} |\n{\n  type: 'a42',\n  a5: number,\n} |\n{\n  type: 'a43',\n  a5: number,\n} |\n{\n  type: 'a44',\n  a5: number,\n} |\n{\n  type: 'a45',\n  a5: number,\n} |\n{\n  type: 'a46',\n  a5: number,\n} |\n{\n  type: 'a47',\n  a5: number,\n} |\n{\n  type: 'a48',\n  a5: number,\n} |\n{\n  type: 'a49',\n  a5: number,\n} |\n{\n  type: 'a50',\n  a5: number,\n} |\n{\n  type: 'a51',\n  a6: number,\n} |\n{\n  type: 'a52',\n  a6: number,\n} |\n{\n  type: 'a53',\n  a6: number,\n} |\n{\n  type: 'a54',\n  a6: number,\n} |\n{\n  type: 'a55',\n  a6: number,\n} |\n{\n  type: 'a56',\n  a6: number,\n} |\n{\n  type: 'a57',\n  a6: number,\n} |\n{\n  type: 'a58',\n  a6: number,\n} |\n{\n  type: 'a59',\n  a6: number,\n} |\n{\n  type: 'a60',\n  a6: number,\n} |\n{\n  type: 'a61',\n  a7: number,\n} |\n{\n  type: 'a62',\n  a7: number,\n} |\n{\n  type: 'a63',\n  a7: number,\n} |\n{\n  type: 'a64',\n  a7: number,\n} |\n{\n  type: 'a65',\n  a7: number,\n} |\n{\n  type: 'a66',\n  a7: number,\n} |\n{\n  type: 'a67',\n  a7: number,\n} |\n{\n  type: 'a68',\n  a7: number,\n} |\n{\n  type: 'a69',\n  a7: number,\n} |\n{\n  type: 'a70',\n  a7: number,\n} |\n{\n  type: 'a71',\n  a8: number,\n} |\n{\n  type: 'a72',\n  a8: number,\n} |\n{\n  type: 'a73',\n  a8: number,\n} |\n{\n  type: 'a74',\n  a8: number,\n} |\n{\n  type: 'a75',\n  a8: number,\n} |\n{\n  type: 'a76',\n  a8: number,\n} |\n{\n  type: 'a77',\n  a8: number,\n} |\n{\n  type: 'a78',\n  a8: number,\n} |\n{\n  type: 'a79',\n  a8: number,\n} |\n{\n  type: 'a80',\n  a8: number,\n} |\n{\n  type: 'a81',\n  a9: number,\n} |\n{\n  type: 'a82',\n  a9: number,\n} |\n{\n  type: 'a83',\n  a9: number,\n} |\n{\n  type: 'a84',\n  a9: number,\n} |\n{\n  type: 'a85',\n  a9: number,\n} |\n{\n  type: 'a86',\n  a9: number,\n} |\n{\n  type: 'a87',\n  a9: number,\n} |\n{\n  type: 'a88',\n  a9: number,\n} |\n{\n  type: 'a89',\n  a9: number,\n} |\n{\n  type: 'a90',\n  a9: number,\n} |\n{\n  type: 'a91',\n  a10: number,\n} |\n{\n  type: 'a92',\n  a10: number,\n} |\n{\n  type: 'a93',\n  a10: number,\n} |\n{\n  type: 'a94',\n  a10: number,\n} |\n{\n  type: 'a95',\n  a10: number,\n} |\n{\n  type: 'a96',\n  a10: number,\n} |\n{\n  type: 'a97',\n  a10: number,\n} |\n{\n  type: 'a98',\n  a10: number,\n} |\n{\n  type: 'a99',\n  a10: number,\n} |\n{\n  type: 'a100',\n  a10: number,\n} |\n{\n  type: 'a101',\n  a11: number,\n} |\n{\n  type: 'a102',\n  a11: number,\n} |\n{\n  type: 'a103',\n  a11: number,\n} |\n{\n  type: 'a104',\n  a11: number,\n} |\n{\n  type: 'a105',\n  a11: number,\n} |\n{\n  type: 'a106',\n  a11: number,\n} |\n{\n  type: 'a107',\n  a11: number,\n} |\n{\n  type: 'a108',\n  a11: number,\n} |\n{\n  type: 'a109',\n  a11: number,\n} |\n{\n  type: 'a110',\n  a11: number,\n} |\n{\n  type: 'a111',\n  a12: number,\n} |\n{\n  type: 'a112',\n  a12: number,\n} |\n{\n  type: 'a113',\n  a12: number,\n} |\n{\n  type: 'a114',\n  a12: number,\n} |\n{\n  type: 'a115',\n  a12: number,\n} |\n{\n  type: 'a116',\n  a12: number,\n} |\n{\n  type: 'a117',\n  a12: number,\n} |\n{\n  type: 'a118',\n  a12: number,\n} |\n{\n  type: 'a119',\n  a12: number,\n} |\n{\n  type: 'a120',\n  a12: number,\n} |\n{\n  type: 'a121',\n  a13: number,\n} |\n{\n  type: 'a122',\n  a13: number,\n} |\n{\n  type: 'a123',\n  a13: number,\n} |\n{\n  type: 'a124',\n  a13: number,\n} |\n{\n  type: 'a125',\n  a13: number,\n} |\n{\n  type: 'a126',\n  a13: number,\n} |\n{\n  type: 'a127',\n  a13: number,\n} |\n{\n  type: 'a128',\n  a13: number,\n} |\n{\n  type: 'a129',\n  a13: number,\n} |\n{\n  type: 'a130',\n  a13: number,\n} |\n{\n  type: 'a131',\n  a14: number,\n} |\n{\n  type: 'a132',\n  a14: number,\n} |\n{\n  type: 'a133',\n  a14: number,\n} |\n{\n  type: 'a134',\n  a14: number,\n} |\n{\n  type: 'a135',\n  a14: number,\n} |\n{\n  type: 'a136',\n  a14: number,\n} |\n{\n  type: 'a137',\n  a14: number,\n} |\n{\n  type: 'a138',\n  a14: number,\n} |\n{\n  type: 'a139',\n  a14: number,\n} |\n{\n  type: 'a140',\n  a14: number,\n} |\n{\n  type: 'a141',\n  a15: number,\n} |\n{\n  type: 'a142',\n  a15: number,\n} |\n{\n  type: 'a143',\n  a15: number,\n} |\n{\n  type: 'a144',\n  a15: number,\n} |\n{\n  type: 'a145',\n  a15: number,\n} |\n{\n  type: 'a146',\n  a15: number,\n} |\n{\n  type: 'a147',\n  a15: number,\n} |\n{\n  type: 'a148',\n  a15: number,\n} |\n{\n  type: 'a149',\n  a15: number,\n} |\n{\n  type: 'a150',\n  a15: number,\n} |\n{\n  type: 'a151',\n  a16: number,\n} |\n{\n  type: 'a152',\n  a16: number,\n} |\n{\n  type: 'a153',\n  a16: number,\n} |\n{\n  type: 'a154',\n  a16: number,\n} |\n{\n  type: 'a155',\n  a16: number,\n} |\n{\n  type: 'a156',\n  a16: number,\n} |\n{\n  type: 'a157',\n  a16: number,\n} |\n{\n  type: 'a158',\n  a16: number,\n} |\n{\n  type: 'a159',\n  a16: number,\n} |\n{\n  type: 'a160',\n  a16: number,\n} |\n{\n  type: 'a161',\n  a17: number,\n} |\n{\n  type: 'a162',\n  a17: number,\n} |\n{\n  type: 'a163',\n  a17: number,\n} |\n{\n  type: 'a164',\n  a17: number,\n} |\n{\n  type: 'a165',\n  a17: number,\n} |\n{\n  type: 'a166',\n  a17: number,\n} |\n{\n  type: 'a167',\n  a17: number,\n} |\n{\n  type: 'a168',\n  a17: number,\n} |\n{\n  type: 'a169',\n  a17: number,\n} |\n{\n  type: 'a170',\n  a17: number,\n} |\n{\n  type: 'a171',\n  a18: number,\n} |\n{\n  type: 'a172',\n  a18: number,\n} |\n{\n  type: 'a173',\n  a18: number,\n} |\n{\n  type: 'a174',\n  a18: number,\n} |\n{\n  type: 'a175',\n  a18: number,\n} |\n{\n  type: 'a176',\n  a18: number,\n} |\n{\n  type: 'a177',\n  a18: number,\n} |\n{\n  type: 'a178',\n  a18: number,\n} |\n{\n  type: 'a179',\n  a18: number,\n} |\n{\n  type: 'a180',\n  a18: number,\n} |\n{\n  type: 'a181',\n  a19: number,\n} |\n{\n  type: 'a182',\n  a19: number,\n} |\n{\n  type: 'a183',\n  a19: number,\n} |\n{\n  type: 'a184',\n  a19: number,\n} |\n{\n  type: 'a185',\n  a19: number,\n} |\n{\n  type: 'a186',\n  a19: number,\n} |\n{\n  type: 'a187',\n  a19: number,\n} |\n{\n  type: 'a188',\n  a19: number,\n} |\n{\n  type: 'a189',\n  a19: number,\n} |\n{\n  type: 'a190',\n  a19: number,\n} |\n{\n  type: 'a191',\n  a20: number,\n} |\n{\n  type: 'a192',\n  a20: number,\n} |\n{\n  type: 'a193',\n  a20: number,\n} |\n{\n  type: 'a194',\n  a20: number,\n} |\n{\n  type: 'a195',\n  a20: number,\n} |\n{\n  type: 'a196',\n  a20: number,\n} |\n{\n  type: 'a197',\n  a20: number,\n} |\n{\n  type: 'a198',\n  a20: number,\n} |\n{\n  type: 'a199',\n  a20: number,\n} |\n{\n  type: 'a200',\n  a20: number,\n} |\n{\n  type: 'a201',\n  a21: number,\n} |\n{\n  type: 'a202',\n  a21: number,\n} |\n{\n  type: 'a203',\n  a21: number,\n} |\n{\n  type: 'a204',\n  a21: number,\n} |\n{\n  type: 'a205',\n  a21: number,\n} |\n{\n  type: 'a206',\n  a21: number,\n} |\n{\n  type: 'a207',\n  a21: number,\n} |\n{\n  type: 'a208',\n  a21: number,\n} |\n{\n  type: 'a209',\n  a21: number,\n} |\n{\n  type: 'a210',\n  a21: number,\n} |\n{\n  type: 'a211',\n  a22: number,\n} |\n{\n  type: 'a212',\n  a22: number,\n} |\n{\n  type: 'a213',\n  a22: number,\n} |\n{\n  type: 'a214',\n  a22: number,\n} |\n{\n  type: 'a215',\n  a22: number,\n} |\n{\n  type: 'a216',\n  a22: number,\n} |\n{\n  type: 'a217',\n  a22: number,\n} |\n{\n  type: 'a218',\n  a22: number,\n} |\n{\n  type: 'a219',\n  a22: number,\n} |\n{\n  type: 'a220',\n  a22: number,\n} |\n{\n  type: 'a221',\n  a23: number,\n} |\n{\n  type: 'a222',\n  a23: number,\n} |\n{\n  type: 'a223',\n  a23: number,\n} |\n{\n  type: 'a224',\n  a23: number,\n} |\n{\n  type: 'a225',\n  a23: number,\n} |\n{\n  type: 'a226',\n  a23: number,\n} |\n{\n  type: 'a227',\n  a23: number,\n} |\n{\n  type: 'a228',\n  a23: number,\n} |\n{\n  type: 'a229',\n  a23: number,\n} |\n{\n  type: 'a230',\n  a23: number,\n} |\n{\n  type: 'a231',\n  a24: number,\n} |\n{\n  type: 'a232',\n  a24: number,\n} |\n{\n  type: 'a233',\n  a24: number,\n} |\n{\n  type: 'a234',\n  a24: number,\n} |\n{\n  type: 'a235',\n  a24: number,\n} |\n{\n  type: 'a236',\n  a24: number,\n} |\n{\n  type: 'a237',\n  a24: number,\n} |\n{\n  type: 'a238',\n  a24: number,\n} |\n{\n  type: 'a239',\n  a24: number,\n} |\n{\n  type: 'a240',\n  a24: number,\n} |\n{\n  type: 'a241',\n  a25: number,\n} |\n{\n  type: 'a242',\n  a25: number,\n} |\n{\n  type: 'a243',\n  a25: number,\n} |\n{\n  type: 'a244',\n  a25: number,\n} |\n{\n  type: 'a245',\n  a25: number,\n} |\n{\n  type: 'a246',\n  a25: number,\n} |\n{\n  type: 'a247',\n  a25: number,\n} |\n{\n  type: 'a248',\n  a25: number,\n} |\n{\n  type: 'a249',\n  a25: number,\n} |\n{\n  type: 'a250',\n  a25: number,\n} |\n{\n  type: 'a251',\n  a26: number,\n} |\n{\n  type: 'a252',\n  a26: number,\n} |\n{\n  type: 'a253',\n  a26: number,\n} |\n{\n  type: 'a254',\n  a26: number,\n} |\n{\n  type: 'a255',\n  a26: number,\n} |\n{\n  type: 'a256',\n  a26: number,\n} |\n{\n  type: 'a257',\n  a26: number,\n} |\n{\n  type: 'a258',\n  a26: number,\n} |\n{\n  type: 'a259',\n  a26: number,\n} |\n{\n  type: 'a260',\n  a26: number,\n} |\n{\n  type: 'a261',\n  a27: number,\n} |\n{\n  type: 'a262',\n  a27: number,\n} |\n{\n  type: 'a263',\n  a27: number,\n} |\n{\n  type: 'a264',\n  a27: number,\n} |\n{\n  type: 'a265',\n  a27: number,\n} |\n{\n  type: 'a266',\n  a27: number,\n} |\n{\n  type: 'a267',\n  a27: number,\n} |\n{\n  type: 'a268',\n  a27: number,\n} |\n{\n  type: 'a269',\n  a27: number,\n} |\n{\n  type: 'a270',\n  a27: number,\n} |\n{\n  type: 'a271',\n  a28: number,\n} |\n{\n  type: 'a272',\n  a28: number,\n} |\n{\n  type: 'a273',\n  a28: number,\n} |\n{\n  type: 'a274',\n  a28: number,\n} |\n{\n  type: 'a275',\n  a28: number,\n} |\n{\n  type: 'a276',\n  a28: number,\n} |\n{\n  type: 'a277',\n  a28: number,\n} |\n{\n  type: 'a278',\n  a28: number,\n} |\n{\n  type: 'a279',\n  a28: number,\n} |\n{\n  type: 'a280',\n  a28: number,\n} |\n{\n  type: 'a281',\n  a29: number,\n} |\n{\n  type: 'a282',\n  a29: number,\n} |\n{\n  type: 'a283',\n  a29: number,\n} |\n{\n  type: 'a284',\n  a29: number,\n} |\n{\n  type: 'a285',\n  a29: number,\n} |\n{\n  type: 'a286',\n  a29: number,\n} |\n{\n  type: 'a287',\n  a29: number,\n} |\n{\n  type: 'a288',\n  a29: number,\n} |\n{\n  type: 'a289',\n  a29: number,\n} |\n{\n  type: 'a290',\n  a29: number,\n} |\n{\n  type: 'a291',\n  a30: number,\n} |\n{\n  type: 'a292',\n  a30: number,\n} |\n{\n  type: 'a293',\n  a30: number,\n} |\n{\n  type: 'a294',\n  a30: number,\n} |\n{\n  type: 'a295',\n  a30: number,\n} |\n{\n  type: 'a296',\n  a30: number,\n} |\n{\n  type: 'a297',\n  a30: number,\n} |\n{\n  type: 'a298',\n  a30: number,\n} |\n{\n  type: 'a299',\n  a30: number,\n} |\n{\n  type: 'a300',\n  a30: number,\n} |\n{\n  type: 'a301',\n  a31: number,\n} |\n{\n  type: 'a302',\n  a31: number,\n} |\n{\n  type: 'a303',\n  a31: number,\n} |\n{\n  type: 'a304',\n  a31: number,\n} |\n{\n  type: 'a305',\n  a31: number,\n} |\n{\n  type: 'a306',\n  a31: number,\n} |\n{\n  type: 'a307',\n  a31: number,\n} |\n{\n  type: 'a308',\n  a31: number,\n} |\n{\n  type: 'a309',\n  a31: number,\n} |\n{\n  type: 'a310',\n  a31: number,\n} |\n{\n  type: 'a311',\n  a32: number,\n} |\n{\n  type: 'a312',\n  a32: number,\n} |\n{\n  type: 'a313',\n  a32: number,\n} |\n{\n  type: 'a314',\n  a32: number,\n} |\n{\n  type: 'a315',\n  a32: number,\n} |\n{\n  type: 'a316',\n  a32: number,\n} |\n{\n  type: 'a317',\n  a32: number,\n} |\n{\n  type: 'a318',\n  a32: number,\n} |\n{\n  type: 'a319',\n  a32: number,\n} |\n{\n  type: 'a320',\n  a32: number,\n} |\n{\n  type: 'a321',\n  a33: number,\n} |\n{\n  type: 'a322',\n  a33: number,\n} |\n{\n  type: 'a323',\n  a33: number,\n} |\n{\n  type: 'a324',\n  a33: number,\n} |\n{\n  type: 'a325',\n  a33: number,\n} |\n{\n  type: 'a326',\n  a33: number,\n} |\n{\n  type: 'a327',\n  a33: number,\n} |\n{\n  type: 'a328',\n  a33: number,\n} |\n{\n  type: 'a329',\n  a33: number,\n} |\n{\n  type: 'a330',\n  a33: number,\n} |\n{\n  type: 'a331',\n  a34: number,\n} |\n{\n  type: 'a332',\n  a34: number,\n} |\n{\n  type: 'a333',\n  a34: number,\n} |\n{\n  type: 'a334',\n  a34: number,\n} |\n{\n  type: 'a335',\n  a34: number,\n} |\n{\n  type: 'a336',\n  a34: number,\n} |\n{\n  type: 'a337',\n  a34: number,\n} |\n{\n  type: 'a338',\n  a34: number,\n} |\n{\n  type: 'a339',\n  a34: number,\n} |\n{\n  type: 'a340',\n  a34: number,\n} |\n{\n  type: 'a341',\n  a35: number,\n} |\n{\n  type: 'a342',\n  a35: number,\n} |\n{\n  type: 'a343',\n  a35: number,\n} |\n{\n  type: 'a344',\n  a35: number,\n} |\n{\n  type: 'a345',\n  a35: number,\n} |\n{\n  type: 'a346',\n  a35: number,\n} |\n{\n  type: 'a347',\n  a35: number,\n} |\n{\n  type: 'a348',\n  a35: number,\n} |\n{\n  type: 'a349',\n  a35: number,\n} |\n{\n  type: 'a350',\n  a35: number,\n} |\n{\n  type: 'a351',\n  a36: number,\n} |\n{\n  type: 'a352',\n  a36: number,\n} |\n{\n  type: 'a353',\n  a36: number,\n} |\n{\n  type: 'a354',\n  a36: number,\n} |\n{\n  type: 'a355',\n  a36: number,\n} |\n{\n  type: 'a356',\n  a36: number,\n} |\n{\n  type: 'a357',\n  a36: number,\n} |\n{\n  type: 'a358',\n  a36: number,\n} |\n{\n  type: 'a359',\n  a36: number,\n} |\n{\n  type: 'a360',\n  a36: number,\n} |\n{\n  type: 'a361',\n  a37: number,\n} |\n{\n  type: 'a362',\n  a37: number,\n} |\n{\n  type: 'a363',\n  a37: number,\n} |\n{\n  type: 'a364',\n  a37: number,\n} |\n{\n  type: 'a365',\n  a37: number,\n} |\n{\n  type: 'a366',\n  a37: number,\n} |\n{\n  type: 'a367',\n  a37: number,\n} |\n{\n  type: 'a368',\n  a37: number,\n} |\n{\n  type: 'a369',\n  a37: number,\n} |\n{\n  type: 'a370',\n  a37: number,\n} |\n{\n  type: 'a371',\n  a38: number,\n} |\n{\n  type: 'a372',\n  a38: number,\n} |\n{\n  type: 'a373',\n  a38: number,\n} |\n{\n  type: 'a374',\n  a38: number,\n} |\n{\n  type: 'a375',\n  a38: number,\n} |\n{\n  type: 'a376',\n  a38: number,\n} |\n{\n  type: 'a377',\n  a38: number,\n} |\n{\n  type: 'a378',\n  a38: number,\n} |\n{\n  type: 'a379',\n  a38: number,\n} |\n{\n  type: 'a380',\n  a38: number,\n} |\n{\n  type: 'a381',\n  a39: number,\n} |\n{\n  type: 'a382',\n  a39: number,\n} |\n{\n  type: 'a383',\n  a39: number,\n} |\n{\n  type: 'a384',\n  a39: number,\n} |\n{\n  type: 'a385',\n  a39: number,\n} |\n{\n  type: 'a386',\n  a39: number,\n} |\n{\n  type: 'a387',\n  a39: number,\n} |\n{\n  type: 'a388',\n  a39: number,\n} |\n{\n  type: 'a389',\n  a39: number,\n} |\n{\n  type: 'a390',\n  a39: number,\n} |\n{\n  type: 'a391',\n  a40: number,\n} |\n{\n  type: 'a392',\n  a40: number,\n} |\n{\n  type: 'a393',\n  a40: number,\n} |\n{\n  type: 'a394',\n  a40: number,\n} |\n{\n  type: 'a395',\n  a40: number,\n} |\n{\n  type: 'a396',\n  a40: number,\n} |\n{\n  type: 'a397',\n  a40: number,\n} |\n{\n  type: 'a398',\n  a40: number,\n} |\n{\n  type: 'a399',\n  a40: number,\n} |\n{\n  type: 'a400',\n  a40: number,\n} |\n{\n  type: 'a401',\n  a41: number,\n} |\n{\n  type: 'a402',\n  a41: number,\n} |\n{\n  type: 'a403',\n  a41: number,\n} |\n{\n  type: 'a404',\n  a41: number,\n} |\n{\n  type: 'a405',\n  a41: number,\n} |\n{\n  type: 'a406',\n  a41: number,\n} |\n{\n  type: 'a407',\n  a41: number,\n} |\n{\n  type: 'a408',\n  a41: number,\n} |\n{\n  type: 'a409',\n  a41: number,\n} |\n{\n  type: 'a410',\n  a41: number,\n} |\n{\n  type: 'a411',\n  a42: number,\n} |\n{\n  type: 'a412',\n  a42: number,\n} |\n{\n  type: 'a413',\n  a42: number,\n} |\n{\n  type: 'a414',\n  a42: number,\n} |\n{\n  type: 'a415',\n  a42: number,\n} |\n{\n  type: 'a416',\n  a42: number,\n} |\n{\n  type: 'a417',\n  a42: number,\n} |\n{\n  type: 'a418',\n  a42: number,\n} |\n{\n  type: 'a419',\n  a42: number,\n} |\n{\n  type: 'a420',\n  a42: number,\n} |\n{\n  type: 'a421',\n  a43: number,\n} |\n{\n  type: 'a422',\n  a43: number,\n} |\n{\n  type: 'a423',\n  a43: number,\n} |\n{\n  type: 'a424',\n  a43: number,\n} |\n{\n  type: 'a425',\n  a43: number,\n} |\n{\n  type: 'a426',\n  a43: number,\n} |\n{\n  type: 'a427',\n  a43: number,\n} |\n{\n  type: 'a428',\n  a43: number,\n} |\n{\n  type: 'a429',\n  a43: number,\n} |\n{\n  type: 'a430',\n  a43: number,\n} |\n{\n  type: 'a431',\n  a44: number,\n} |\n{\n  type: 'a432',\n  a44: number,\n} |\n{\n  type: 'a433',\n  a44: number,\n} |\n{\n  type: 'a434',\n  a44: number,\n} |\n{\n  type: 'a435',\n  a44: number,\n} |\n{\n  type: 'a436',\n  a44: number,\n} |\n{\n  type: 'a437',\n  a44: number,\n} |\n{\n  type: 'a438',\n  a44: number,\n} |\n{\n  type: 'a439',\n  a44: number,\n} |\n{\n  type: 'a440',\n  a44: number,\n} |\n{\n  type: 'a441',\n  a45: number,\n} |\n{\n  type: 'a442',\n  a45: number,\n} |\n{\n  type: 'a443',\n  a45: number,\n} |\n{\n  type: 'a444',\n  a45: number,\n} |\n{\n  type: 'a445',\n  a45: number,\n} |\n{\n  type: 'a446',\n  a45: number,\n} |\n{\n  type: 'a447',\n  a45: number,\n} |\n{\n  type: 'a448',\n  a45: number,\n} |\n{\n  type: 'a449',\n  a45: number,\n} |\n{\n  type: 'a450',\n  a45: number,\n} |\n{\n  type: 'a451',\n  a46: number,\n} |\n{\n  type: 'a452',\n  a46: number,\n} |\n{\n  type: 'a453',\n  a46: number,\n} |\n{\n  type: 'a454',\n  a46: number,\n} |\n{\n  type: 'a455',\n  a46: number,\n} |\n{\n  type: 'a456',\n  a46: number,\n} |\n{\n  type: 'a457',\n  a46: number,\n} |\n{\n  type: 'a458',\n  a46: number,\n} |\n{\n  type: 'a459',\n  a46: number,\n} |\n{\n  type: 'a460',\n  a46: number,\n} |\n{\n  type: 'a461',\n  a47: number,\n} |\n{\n  type: 'a462',\n  a47: number,\n} |\n{\n  type: 'a463',\n  a47: number,\n} |\n{\n  type: 'a464',\n  a47: number,\n} |\n{\n  type: 'a465',\n  a47: number,\n} |\n{\n  type: 'a466',\n  a47: number,\n} |\n{\n  type: 'a467',\n  a47: number,\n} |\n{\n  type: 'a468',\n  a47: number,\n} |\n{\n  type: 'a469',\n  a47: number,\n} |\n{\n  type: 'a470',\n  a47: number,\n} |\n{\n  type: 'a471',\n  a48: number,\n} |\n{\n  type: 'a472',\n  a48: number,\n} |\n{\n  type: 'a473',\n  a48: number,\n} |\n{\n  type: 'a474',\n  a48: number,\n} |\n{\n  type: 'a475',\n  a48: number,\n} |\n{\n  type: 'a476',\n  a48: number,\n} |\n{\n  type: 'a477',\n  a48: number,\n} |\n{\n  type: 'a478',\n  a48: number,\n} |\n{\n  type: 'a479',\n  a48: number,\n} |\n{\n  type: 'a480',\n  a48: number,\n} |\n{\n  type: 'a481',\n  a49: number,\n} |\n{\n  type: 'a482',\n  a49: number,\n} |\n{\n  type: 'a483',\n  a49: number,\n} |\n{\n  type: 'a484',\n  a49: number,\n} |\n{\n  type: 'a485',\n  a49: number,\n} |\n{\n  type: 'a486',\n  a49: number,\n} |\n{\n  type: 'a487',\n  a49: number,\n} |\n{\n  type: 'a488',\n  a49: number,\n} |\n{\n  type: 'a489',\n  a49: number,\n} |\n{\n  type: 'a490',\n  a49: number,\n} |\n{\n  type: 'a491',\n  a50: number,\n} |\n{\n  type: 'a492',\n  a50: number,\n} |\n{\n  type: 'a493',\n  a50: number,\n} |\n{\n  type: 'a494',\n  a50: number,\n} |\n{\n  type: 'a495',\n  a50: number,\n} |\n{\n  type: 'a496',\n  a50: number,\n} |\n{\n  type: 'a497',\n  a50: number,\n} |\n{\n  type: 'a498',\n  a50: number,\n} |\n{\n  type: 'a499',\n  a50: number,\n} |\n{\n  type: 'a500',\n  a50: number,\n} |\n{\n  type: 'a501',\n  a51: number,\n} |\n{\n  type: 'a502',\n  a51: number,\n} |\n{\n  type: 'a503',\n  a51: number,\n} |\n{\n  type: 'a504',\n  a51: number,\n} |\n{\n  type: 'a505',\n  a51: number,\n} |\n{\n  type: 'a506',\n  a51: number,\n} |\n{\n  type: 'a507',\n  a51: number,\n} |\n{\n  type: 'a508',\n  a51: number,\n} |\n{\n  type: 'a509',\n  a51: number,\n} |\n{\n  type: 'a510',\n  a51: number,\n} |\n{\n  type: 'a511',\n  a52: number,\n} |\n{\n  type: 'a512',\n  a52: number,\n} |\n{\n  type: 'a513',\n  a52: number,\n} |\n{\n  type: 'a514',\n  a52: number,\n} |\n{\n  type: 'a515',\n  a52: number,\n} |\n{\n  type: 'a516',\n  a52: number,\n} |\n{\n  type: 'a517',\n  a52: number,\n} |\n{\n  type: 'a518',\n  a52: number,\n} |\n{\n  type: 'a519',\n  a52: number,\n} |\n{\n  type: 'a520',\n  a52: number,\n} |\n{\n  type: 'a521',\n  a53: number,\n} |\n{\n  type: 'a522',\n  a53: number,\n} |\n{\n  type: 'a523',\n  a53: number,\n} |\n{\n  type: 'a524',\n  a53: number,\n} |\n{\n  type: 'a525',\n  a53: number,\n} |\n{\n  type: 'a526',\n  a53: number,\n} |\n{\n  type: 'a527',\n  a53: number,\n} |\n{\n  type: 'a528',\n  a53: number,\n} |\n{\n  type: 'a529',\n  a53: number,\n} |\n{\n  type: 'a530',\n  a53: number,\n} |\n{\n  type: 'a531',\n  a54: number,\n} |\n{\n  type: 'a532',\n  a54: number,\n} |\n{\n  type: 'a533',\n  a54: number,\n} |\n{\n  type: 'a534',\n  a54: number,\n} |\n{\n  type: 'a535',\n  a54: number,\n} |\n{\n  type: 'a536',\n  a54: number,\n} |\n{\n  type: 'a537',\n  a54: number,\n} |\n{\n  type: 'a538',\n  a54: number,\n} |\n{\n  type: 'a539',\n  a54: number,\n} |\n{\n  type: 'a540',\n  a54: number,\n} |\n{\n  type: 'a541',\n  a55: number,\n} |\n{\n  type: 'a542',\n  a55: number,\n} |\n{\n  type: 'a543',\n  a55: number,\n} |\n{\n  type: 'a544',\n  a55: number,\n} |\n{\n  type: 'a545',\n  a55: number,\n} |\n{\n  type: 'a546',\n  a55: number,\n} |\n{\n  type: 'a547',\n  a55: number,\n} |\n{\n  type: 'a548',\n  a55: number,\n} |\n{\n  type: 'a549',\n  a55: number,\n} |\n{\n  type: 'a550',\n  a55: number,\n} |\n{\n  type: 'a551',\n  a56: number,\n} |\n{\n  type: 'a552',\n  a56: number,\n} |\n{\n  type: 'a553',\n  a56: number,\n} |\n{\n  type: 'a554',\n  a56: number,\n} |\n{\n  type: 'a555',\n  a56: number,\n} |\n{\n  type: 'a556',\n  a56: number,\n} |\n{\n  type: 'a557',\n  a56: number,\n} |\n{\n  type: 'a558',\n  a56: number,\n} |\n{\n  type: 'a559',\n  a56: number,\n} |\n{\n  type: 'a560',\n  a56: number,\n} |\n{\n  type: 'a561',\n  a57: number,\n} |\n{\n  type: 'a562',\n  a57: number,\n} |\n{\n  type: 'a563',\n  a57: number,\n} |\n{\n  type: 'a564',\n  a57: number,\n} |\n{\n  type: 'a565',\n  a57: number,\n} |\n{\n  type: 'a566',\n  a57: number,\n} |\n{\n  type: 'a567',\n  a57: number,\n} |\n{\n  type: 'a568',\n  a57: number,\n} |\n{\n  type: 'a569',\n  a57: number,\n} |\n{\n  type: 'a570',\n  a57: number,\n} |\n{\n  type: 'a571',\n  a58: number,\n} |\n{\n  type: 'a572',\n  a58: number,\n} |\n{\n  type: 'a573',\n  a58: number,\n} |\n{\n  type: 'a574',\n  a58: number,\n} |\n{\n  type: 'a575',\n  a58: number,\n} |\n{\n  type: 'a576',\n  a58: number,\n} |\n{\n  type: 'a577',\n  a58: number,\n} |\n{\n  type: 'a578',\n  a58: number,\n} |\n{\n  type: 'a579',\n  a58: number,\n} |\n{\n  type: 'a580',\n  a58: number,\n} |\n{\n  type: 'a581',\n  a59: number,\n} |\n{\n  type: 'a582',\n  a59: number,\n} |\n{\n  type: 'a583',\n  a59: number,\n} |\n{\n  type: 'a584',\n  a59: number,\n} |\n{\n  type: 'a585',\n  a59: number,\n} |\n{\n  type: 'a586',\n  a59: number,\n} |\n{\n  type: 'a587',\n  a59: number,\n} |\n{\n  type: 'a588',\n  a59: number,\n} |\n{\n  type: 'a589',\n  a59: number,\n} |\n{\n  type: 'a590',\n  a59: number,\n} |\n{\n  type: 'a591',\n  a60: number,\n} |\n{\n  type: 'a592',\n  a60: number,\n} |\n{\n  type: 'a593',\n  a60: number,\n} |\n{\n  type: 'a594',\n  a60: number,\n} |\n{\n  type: 'a595',\n  a60: number,\n} |\n{\n  type: 'a596',\n  a60: number,\n} |\n{\n  type: 'a597',\n  a60: number,\n} |\n{\n  type: 'a598',\n  a60: number,\n} |\n{\n  type: 'a599',\n  a60: number,\n} |\n{\n  type: 'a600',\n  a60: number,\n} |\n{\n  type: 'a601',\n  a61: number,\n} |\n{\n  type: 'a602',\n  a61: number,\n} |\n{\n  type: 'a603',\n  a61: number,\n} |\n{\n  type: 'a604',\n  a61: number,\n} |\n{\n  type: 'a605',\n  a61: number,\n} |\n{\n  type: 'a606',\n  a61: number,\n} |\n{\n  type: 'a607',\n  a61: number,\n} |\n{\n  type: 'a608',\n  a61: number,\n} |\n{\n  type: 'a609',\n  a61: number,\n} |\n{\n  type: 'a610',\n  a61: number,\n} |\n{\n  type: 'a611',\n  a62: number,\n} |\n{\n  type: 'a612',\n  a62: number,\n} |\n{\n  type: 'a613',\n  a62: number,\n} |\n{\n  type: 'a614',\n  a62: number,\n} |\n{\n  type: 'a615',\n  a62: number,\n} |\n{\n  type: 'a616',\n  a62: number,\n} |\n{\n  type: 'a617',\n  a62: number,\n} |\n{\n  type: 'a618',\n  a62: number,\n} |\n{\n  type: 'a619',\n  a62: number,\n} |\n{\n  type: 'a620',\n  a62: number,\n} |\n{\n  type: 'a621',\n  a63: number,\n} |\n{\n  type: 'a622',\n  a63: number,\n} |\n{\n  type: 'a623',\n  a63: number,\n} |\n{\n  type: 'a624',\n  a63: number,\n} |\n{\n  type: 'a625',\n  a63: number,\n} |\n{\n  type: 'a626',\n  a63: number,\n} |\n{\n  type: 'a627',\n  a63: number,\n} |\n{\n  type: 'a628',\n  a63: number,\n} |\n{\n  type: 'a629',\n  a63: number,\n} |\n{\n  type: 'a630',\n  a63: number,\n} |\n{\n  type: 'a631',\n  a64: number,\n} |\n{\n  type: 'a632',\n  a64: number,\n} |\n{\n  type: 'a633',\n  a64: number,\n} |\n{\n  type: 'a634',\n  a64: number,\n} |\n{\n  type: 'a635',\n  a64: number,\n} |\n{\n  type: 'a636',\n  a64: number,\n} |\n{\n  type: 'a637',\n  a64: number,\n} |\n{\n  type: 'a638',\n  a64: number,\n} |\n{\n  type: 'a639',\n  a64: number,\n} |\n{\n  type: 'a640',\n  a64: number,\n} |\n{\n  type: 'a641',\n  a65: number,\n} |\n{\n  type: 'a642',\n  a65: number,\n} |\n{\n  type: 'a643',\n  a65: number,\n} |\n{\n  type: 'a644',\n  a65: number,\n} |\n{\n  type: 'a645',\n  a65: number,\n} |\n{\n  type: 'a646',\n  a65: number,\n} |\n{\n  type: 'a647',\n  a65: number,\n} |\n{\n  type: 'a648',\n  a65: number,\n} |\n{\n  type: 'a649',\n  a65: number,\n} |\n{\n  type: 'a650',\n  a65: number,\n} |\n{\n  type: 'a651',\n  a66: number,\n} |\n{\n  type: 'a652',\n  a66: number,\n} |\n{\n  type: 'a653',\n  a66: number,\n} |\n{\n  type: 'a654',\n  a66: number,\n} |\n{\n  type: 'a655',\n  a66: number,\n} |\n{\n  type: 'a656',\n  a66: number,\n} |\n{\n  type: 'a657',\n  a66: number,\n} |\n{\n  type: 'a658',\n  a66: number,\n} |\n{\n  type: 'a659',\n  a66: number,\n} |\n{\n  type: 'a660',\n  a66: number,\n} |\n{\n  type: 'a661',\n  a67: number,\n} |\n{\n  type: 'a662',\n  a67: number,\n} |\n{\n  type: 'a663',\n  a67: number,\n} |\n{\n  type: 'a664',\n  a67: number,\n} |\n{\n  type: 'a665',\n  a67: number,\n} |\n{\n  type: 'a666',\n  a67: number,\n} |\n{\n  type: 'a667',\n  a67: number,\n} |\n{\n  type: 'a668',\n  a67: number,\n} |\n{\n  type: 'a669',\n  a67: number,\n} |\n{\n  type: 'a670',\n  a67: number,\n} |\n{\n  type: 'a671',\n  a68: number,\n} |\n{\n  type: 'a672',\n  a68: number,\n} |\n{\n  type: 'a673',\n  a68: number,\n} |\n{\n  type: 'a674',\n  a68: number,\n} |\n{\n  type: 'a675',\n  a68: number,\n} |\n{\n  type: 'a676',\n  a68: number,\n} |\n{\n  type: 'a677',\n  a68: number,\n} |\n{\n  type: 'a678',\n  a68: number,\n} |\n{\n  type: 'a679',\n  a68: number,\n} |\n{\n  type: 'a680',\n  a68: number,\n} |\n{\n  type: 'a681',\n  a69: number,\n} |\n{\n  type: 'a682',\n  a69: number,\n} |\n{\n  type: 'a683',\n  a69: number,\n} |\n{\n  type: 'a684',\n  a69: number,\n} |\n{\n  type: 'a685',\n  a69: number,\n} |\n{\n  type: 'a686',\n  a69: number,\n} |\n{\n  type: 'a687',\n  a69: number,\n} |\n{\n  type: 'a688',\n  a69: number,\n} |\n{\n  type: 'a689',\n  a69: number,\n} |\n{\n  type: 'a690',\n  a69: number,\n} |\n{\n  type: 'a691',\n  a70: number,\n} |\n{\n  type: 'a692',\n  a70: number,\n} |\n{\n  type: 'a693',\n  a70: number,\n} |\n{\n  type: 'a694',\n  a70: number,\n} |\n{\n  type: 'a695',\n  a70: number,\n} |\n{\n  type: 'a696',\n  a70: number,\n} |\n{\n  type: 'a697',\n  a70: number,\n} |\n{\n  type: 'a698',\n  a70: number,\n} |\n{\n  type: 'a699',\n  a70: number,\n} |\n{\n  type: 'a700',\n  a70: number,\n} |\n{\n  type: 'a701',\n  a71: number,\n} |\n{\n  type: 'a702',\n  a71: number,\n} |\n{\n  type: 'a703',\n  a71: number,\n} |\n{\n  type: 'a704',\n  a71: number,\n} |\n{\n  type: 'a705',\n  a71: number,\n} |\n{\n  type: 'a706',\n  a71: number,\n} |\n{\n  type: 'a707',\n  a71: number,\n} |\n{\n  type: 'a708',\n  a71: number,\n} |\n{\n  type: 'a709',\n  a71: number,\n} |\n{\n  type: 'a710',\n  a71: number,\n} |\n{\n  type: 'a711',\n  a72: number,\n} |\n{\n  type: 'a712',\n  a72: number,\n} |\n{\n  type: 'a713',\n  a72: number,\n} |\n{\n  type: 'a714',\n  a72: number,\n} |\n{\n  type: 'a715',\n  a72: number,\n} |\n{\n  type: 'a716',\n  a72: number,\n} |\n{\n  type: 'a717',\n  a72: number,\n} |\n{\n  type: 'a718',\n  a72: number,\n} |\n{\n  type: 'a719',\n  a72: number,\n} |\n{\n  type: 'a720',\n  a72: number,\n} |\n{\n  type: 'a721',\n  a73: number,\n} |\n{\n  type: 'a722',\n  a73: number,\n} |\n{\n  type: 'a723',\n  a73: number,\n} |\n{\n  type: 'a724',\n  a73: number,\n} |\n{\n  type: 'a725',\n  a73: number,\n} |\n{\n  type: 'a726',\n  a73: number,\n} |\n{\n  type: 'a727',\n  a73: number,\n} |\n{\n  type: 'a728',\n  a73: number,\n} |\n{\n  type: 'a729',\n  a73: number,\n} |\n{\n  type: 'a730',\n  a73: number,\n} |\n{\n  type: 'a731',\n  a74: number,\n} |\n{\n  type: 'a732',\n  a74: number,\n} |\n{\n  type: 'a733',\n  a74: number,\n} |\n{\n  type: 'a734',\n  a74: number,\n} |\n{\n  type: 'a735',\n  a74: number,\n} |\n{\n  type: 'a736',\n  a74: number,\n} |\n{\n  type: 'a737',\n  a74: number,\n} |\n{\n  type: 'a738',\n  a74: number,\n} |\n{\n  type: 'a739',\n  a74: number,\n} |\n{\n  type: 'a740',\n  a74: number,\n} |\n{\n  type: 'a741',\n  a75: number,\n} |\n{\n  type: 'a742',\n  a75: number,\n} |\n{\n  type: 'a743',\n  a75: number,\n} |\n{\n  type: 'a744',\n  a75: number,\n} |\n{\n  type: 'a745',\n  a75: number,\n} |\n{\n  type: 'a746',\n  a75: number,\n} |\n{\n  type: 'a747',\n  a75: number,\n} |\n{\n  type: 'a748',\n  a75: number,\n} |\n{\n  type: 'a749',\n  a75: number,\n} |\n{\n  type: 'a750',\n  a75: number,\n} |\n{\n  type: 'a751',\n  a76: number,\n} |\n{\n  type: 'a752',\n  a76: number,\n} |\n{\n  type: 'a753',\n  a76: number,\n} |\n{\n  type: 'a754',\n  a76: number,\n} |\n{\n  type: 'a755',\n  a76: number,\n} |\n{\n  type: 'a756',\n  a76: number,\n} |\n{\n  type: 'a757',\n  a76: number,\n} |\n{\n  type: 'a758',\n  a76: number,\n} |\n{\n  type: 'a759',\n  a76: number,\n} |\n{\n  type: 'a760',\n  a76: number,\n} |\n{\n  type: 'a761',\n  a77: number,\n} |\n{\n  type: 'a762',\n  a77: number,\n} |\n{\n  type: 'a763',\n  a77: number,\n} |\n{\n  type: 'a764',\n  a77: number,\n} |\n{\n  type: 'a765',\n  a77: number,\n} |\n{\n  type: 'a766',\n  a77: number,\n} |\n{\n  type: 'a767',\n  a77: number,\n} |\n{\n  type: 'a768',\n  a77: number,\n} |\n{\n  type: 'a769',\n  a77: number,\n} |\n{\n  type: 'a770',\n  a77: number,\n} |\n{\n  type: 'a771',\n  a78: number,\n} |\n{\n  type: 'a772',\n  a78: number,\n} |\n{\n  type: 'a773',\n  a78: number,\n} |\n{\n  type: 'a774',\n  a78: number,\n} |\n{\n  type: 'a775',\n  a78: number,\n} |\n{\n  type: 'a776',\n  a78: number,\n} |\n{\n  type: 'a777',\n  a78: number,\n} |\n{\n  type: 'a778',\n  a78: number,\n} |\n{\n  type: 'a779',\n  a78: number,\n} |\n{\n  type: 'a780',\n  a78: number,\n} |\n{\n  type: 'a781',\n  a79: number,\n} |\n{\n  type: 'a782',\n  a79: number,\n} |\n{\n  type: 'a783',\n  a79: number,\n} |\n{\n  type: 'a784',\n  a79: number,\n} |\n{\n  type: 'a785',\n  a79: number,\n} |\n{\n  type: 'a786',\n  a79: number,\n} |\n{\n  type: 'a787',\n  a79: number,\n} |\n{\n  type: 'a788',\n  a79: number,\n} |\n{\n  type: 'a789',\n  a79: number,\n} |\n{\n  type: 'a790',\n  a79: number,\n} |\n{\n  type: 'a791',\n  a80: number,\n} |\n{\n  type: 'a792',\n  a80: number,\n} |\n{\n  type: 'a793',\n  a80: number,\n} |\n{\n  type: 'a794',\n  a80: number,\n} |\n{\n  type: 'a795',\n  a80: number,\n} |\n{\n  type: 'a796',\n  a80: number,\n} |\n{\n  type: 'a797',\n  a80: number,\n} |\n{\n  type: 'a798',\n  a80: number,\n} |\n{\n  type: 'a799',\n  a80: number,\n} |\n{\n  type: 'a800',\n  a80: number,\n} |\n{\n  type: 'a801',\n  a81: number,\n} |\n{\n  type: 'a802',\n  a81: number,\n} |\n{\n  type: 'a803',\n  a81: number,\n} |\n{\n  type: 'a804',\n  a81: number,\n} |\n{\n  type: 'a805',\n  a81: number,\n} |\n{\n  type: 'a806',\n  a81: number,\n} |\n{\n  type: 'a807',\n  a81: number,\n} |\n{\n  type: 'a808',\n  a81: number,\n} |\n{\n  type: 'a809',\n  a81: number,\n} |\n{\n  type: 'a810',\n  a81: number,\n} |\n{\n  type: 'a811',\n  a82: number,\n} |\n{\n  type: 'a812',\n  a82: number,\n} |\n{\n  type: 'a813',\n  a82: number,\n} |\n{\n  type: 'a814',\n  a82: number,\n} |\n{\n  type: 'a815',\n  a82: number,\n} |\n{\n  type: 'a816',\n  a82: number,\n} |\n{\n  type: 'a817',\n  a82: number,\n} |\n{\n  type: 'a818',\n  a82: number,\n} |\n{\n  type: 'a819',\n  a82: number,\n} |\n{\n  type: 'a820',\n  a82: number,\n} |\n{\n  type: 'a821',\n  a83: number,\n} |\n{\n  type: 'a822',\n  a83: number,\n} |\n{\n  type: 'a823',\n  a83: number,\n} |\n{\n  type: 'a824',\n  a83: number,\n} |\n{\n  type: 'a825',\n  a83: number,\n} |\n{\n  type: 'a826',\n  a83: number,\n} |\n{\n  type: 'a827',\n  a83: number,\n} |\n{\n  type: 'a828',\n  a83: number,\n} |\n{\n  type: 'a829',\n  a83: number,\n} |\n{\n  type: 'a830',\n  a83: number,\n} |\n{\n  type: 'a831',\n  a84: number,\n} |\n{\n  type: 'a832',\n  a84: number,\n} |\n{\n  type: 'a833',\n  a84: number,\n} |\n{\n  type: 'a834',\n  a84: number,\n} |\n{\n  type: 'a835',\n  a84: number,\n} |\n{\n  type: 'a836',\n  a84: number,\n} |\n{\n  type: 'a837',\n  a84: number,\n} |\n{\n  type: 'a838',\n  a84: number,\n} |\n{\n  type: 'a839',\n  a84: number,\n} |\n{\n  type: 'a840',\n  a84: number,\n} |\n{\n  type: 'a841',\n  a85: number,\n} |\n{\n  type: 'a842',\n  a85: number,\n} |\n{\n  type: 'a843',\n  a85: number,\n} |\n{\n  type: 'a844',\n  a85: number,\n} |\n{\n  type: 'a845',\n  a85: number,\n} |\n{\n  type: 'a846',\n  a85: number,\n} |\n{\n  type: 'a847',\n  a85: number,\n} |\n{\n  type: 'a848',\n  a85: number,\n} |\n{\n  type: 'a849',\n  a85: number,\n} |\n{\n  type: 'a850',\n  a85: number,\n} |\n{\n  type: 'a851',\n  a86: number,\n} |\n{\n  type: 'a852',\n  a86: number,\n} |\n{\n  type: 'a853',\n  a86: number,\n} |\n{\n  type: 'a854',\n  a86: number,\n} |\n{\n  type: 'a855',\n  a86: number,\n} |\n{\n  type: 'a856',\n  a86: number,\n} |\n{\n  type: 'a857',\n  a86: number,\n} |\n{\n  type: 'a858',\n  a86: number,\n} |\n{\n  type: 'a859',\n  a86: number,\n} |\n{\n  type: 'a860',\n  a86: number,\n} |\n{\n  type: 'a861',\n  a87: number,\n} |\n{\n  type: 'a862',\n  a87: number,\n} |\n{\n  type: 'a863',\n  a87: number,\n} |\n{\n  type: 'a864',\n  a87: number,\n} |\n{\n  type: 'a865',\n  a87: number,\n} |\n{\n  type: 'a866',\n  a87: number,\n} |\n{\n  type: 'a867',\n  a87: number,\n} |\n{\n  type: 'a868',\n  a87: number,\n} |\n{\n  type: 'a869',\n  a87: number,\n} |\n{\n  type: 'a870',\n  a87: number,\n} |\n{\n  type: 'a871',\n  a88: number,\n} |\n{\n  type: 'a872',\n  a88: number,\n} |\n{\n  type: 'a873',\n  a88: number,\n} |\n{\n  type: 'a874',\n  a88: number,\n} |\n{\n  type: 'a875',\n  a88: number,\n} |\n{\n  type: 'a876',\n  a88: number,\n} |\n{\n  type: 'a877',\n  a88: number,\n} |\n{\n  type: 'a878',\n  a88: number,\n} |\n{\n  type: 'a879',\n  a88: number,\n} |\n{\n  type: 'a880',\n  a88: number,\n} |\n{\n  type: 'a881',\n  a89: number,\n} |\n{\n  type: 'a882',\n  a89: number,\n} |\n{\n  type: 'a883',\n  a89: number,\n} |\n{\n  type: 'a884',\n  a89: number,\n} |\n{\n  type: 'a885',\n  a89: number,\n} |\n{\n  type: 'a886',\n  a89: number,\n} |\n{\n  type: 'a887',\n  a89: number,\n} |\n{\n  type: 'a888',\n  a89: number,\n} |\n{\n  type: 'a889',\n  a89: number,\n} |\n{\n  type: 'a890',\n  a89: number,\n} |\n{\n  type: 'a891',\n  a90: number,\n} |\n{\n  type: 'a892',\n  a90: number,\n} |\n{\n  type: 'a893',\n  a90: number,\n} |\n{\n  type: 'a894',\n  a90: number,\n} |\n{\n  type: 'a895',\n  a90: number,\n} |\n{\n  type: 'a896',\n  a90: number,\n} |\n{\n  type: 'a897',\n  a90: number,\n} |\n{\n  type: 'a898',\n  a90: number,\n} |\n{\n  type: 'a899',\n  a90: number,\n} |\n{\n  type: 'a900',\n  a90: number,\n} |\n{\n  type: 'a901',\n  a91: number,\n} |\n{\n  type: 'a902',\n  a91: number,\n} |\n{\n  type: 'a903',\n  a91: number,\n} |\n{\n  type: 'a904',\n  a91: number,\n} |\n{\n  type: 'a905',\n  a91: number,\n} |\n{\n  type: 'a906',\n  a91: number,\n} |\n{\n  type: 'a907',\n  a91: number,\n} |\n{\n  type: 'a908',\n  a91: number,\n} |\n{\n  type: 'a909',\n  a91: number,\n} |\n{\n  type: 'a910',\n  a91: number,\n} |\n{\n  type: 'a911',\n  a92: number,\n} |\n{\n  type: 'a912',\n  a92: number,\n} |\n{\n  type: 'a913',\n  a92: number,\n} |\n{\n  type: 'a914',\n  a92: number,\n} |\n{\n  type: 'a915',\n  a92: number,\n} |\n{\n  type: 'a916',\n  a92: number,\n} |\n{\n  type: 'a917',\n  a92: number,\n} |\n{\n  type: 'a918',\n  a92: number,\n} |\n{\n  type: 'a919',\n  a92: number,\n} |\n{\n  type: 'a920',\n  a92: number,\n} |\n{\n  type: 'a921',\n  a93: number,\n} |\n{\n  type: 'a922',\n  a93: number,\n} |\n{\n  type: 'a923',\n  a93: number,\n} |\n{\n  type: 'a924',\n  a93: number,\n} |\n{\n  type: 'a925',\n  a93: number,\n} |\n{\n  type: 'a926',\n  a93: number,\n} |\n{\n  type: 'a927',\n  a93: number,\n} |\n{\n  type: 'a928',\n  a93: number,\n} |\n{\n  type: 'a929',\n  a93: number,\n} |\n{\n  type: 'a930',\n  a93: number,\n} |\n{\n  type: 'a931',\n  a94: number,\n} |\n{\n  type: 'a932',\n  a94: number,\n} |\n{\n  type: 'a933',\n  a94: number,\n} |\n{\n  type: 'a934',\n  a94: number,\n} |\n{\n  type: 'a935',\n  a94: number,\n} |\n{\n  type: 'a936',\n  a94: number,\n} |\n{\n  type: 'a937',\n  a94: number,\n} |\n{\n  type: 'a938',\n  a94: number,\n} |\n{\n  type: 'a939',\n  a94: number,\n} |\n{\n  type: 'a940',\n  a94: number,\n} |\n{\n  type: 'a941',\n  a95: number,\n} |\n{\n  type: 'a942',\n  a95: number,\n} |\n{\n  type: 'a943',\n  a95: number,\n} |\n{\n  type: 'a944',\n  a95: number,\n} |\n{\n  type: 'a945',\n  a95: number,\n} |\n{\n  type: 'a946',\n  a95: number,\n} |\n{\n  type: 'a947',\n  a95: number,\n} |\n{\n  type: 'a948',\n  a95: number,\n} |\n{\n  type: 'a949',\n  a95: number,\n} |\n{\n  type: 'a950',\n  a95: number,\n} |\n{\n  type: 'a951',\n  a96: number,\n} |\n{\n  type: 'a952',\n  a96: number,\n} |\n{\n  type: 'a953',\n  a96: number,\n} |\n{\n  type: 'a954',\n  a96: number,\n} |\n{\n  type: 'a955',\n  a96: number,\n} |\n{\n  type: 'a956',\n  a96: number,\n} |\n{\n  type: 'a957',\n  a96: number,\n} |\n{\n  type: 'a958',\n  a96: number,\n} |\n{\n  type: 'a959',\n  a96: number,\n} |\n{\n  type: 'a960',\n  a96: number,\n} |\n{\n  type: 'a961',\n  a97: number,\n} |\n{\n  type: 'a962',\n  a97: number,\n} |\n{\n  type: 'a963',\n  a97: number,\n} |\n{\n  type: 'a964',\n  a97: number,\n} |\n{\n  type: 'a965',\n  a97: number,\n} |\n{\n  type: 'a966',\n  a97: number,\n} |\n{\n  type: 'a967',\n  a97: number,\n} |\n{\n  type: 'a968',\n  a97: number,\n} |\n{\n  type: 'a969',\n  a97: number,\n} |\n{\n  type: 'a970',\n  a97: number,\n} |\n{\n  type: 'a971',\n  a98: number,\n} |\n{\n  type: 'a972',\n  a98: number,\n} |\n{\n  type: 'a973',\n  a98: number,\n} |\n{\n  type: 'a974',\n  a98: number,\n} |\n{\n  type: 'a975',\n  a98: number,\n} |\n{\n  type: 'a976',\n  a98: number,\n} |\n{\n  type: 'a977',\n  a98: number,\n} |\n{\n  type: 'a978',\n  a98: number,\n} |\n{\n  type: 'a979',\n  a98: number,\n} |\n{\n  type: 'a980',\n  a98: number,\n} |\n{\n  type: 'a981',\n  a99: number,\n} |\n{\n  type: 'a982',\n  a99: number,\n} |\n{\n  type: 'a983',\n  a99: number,\n} |\n{\n  type: 'a984',\n  a99: number,\n} |\n{\n  type: 'a985',\n  a99: number,\n} |\n{\n  type: 'a986',\n  a99: number,\n} |\n{\n  type: 'a987',\n  a99: number,\n} |\n{\n  type: 'a988',\n  a99: number,\n} |\n{\n  type: 'a989',\n  a99: number,\n} |\n{\n  type: 'a990',\n  a99: number,\n} |\n{\n  type: 'a991',\n  a100: number,\n} |\n{\n  type: 'a992',\n  a100: number,\n} |\n{\n  type: 'a993',\n  a100: number,\n} |\n{\n  type: 'a994',\n  a100: number,\n} |\n{\n  type: 'a995',\n  a100: number,\n} |\n{\n  type: 'a996',\n  a100: number,\n} |\n{\n  type: 'a997',\n  a100: number,\n} |\n{\n  type: 'a998',\n  a100: number,\n} |\n{\n  type: 'a999',\n  a100: number,\n} |\n{\n  type: 'a1000',\n  a100: number,\n};\nfunction foo(x: TAction): TAction { return x; }\n"
  },
  {
    "path": "tests/flow/union-intersection/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/union-intersection/test.js",
    "content": "type A = {a: number};\ntype B = {b: number};\ntype C = {c: number};\n\ntype T1 = (A | B) & C;\nfunction f1(x: T1): T1 { return x; }\n\ntype T2 = (A & B) | C;\nfunction f2(x: T2): T2 { return x; }\n\ntype T3 = (A & C) | (B & C);\nfunction f3(x: T3): T3 { return x; }\n\ntype T4 = (A | C) & (B | C);\nfunction f4(x: T4): T4 { return x; }\n"
  },
  {
    "path": "tests/flow/union_new/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`issue-815.js 1`] = `\n/* @flow */\ntype T = A|B;\nclass U {};\ndeclare var children: U;\n(children: T|U);\nclass A {};\nclass B {};\n\ntype VirtualElement = Thunk|VirtualNode;\ntype Child = VirtualElement;\ntype Children = Array<Child>;\n\n\nclass Thunk {}\nclass VirtualNode {\n  children: Child|Children;\n  constructor(type, children/*:Children*/) {\n    this.children = children.length === 1 ? children[0] :\n      children;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\ntype T = A | B;\nclass U {}\ndeclare var children: U;\n(children: T | U);\nclass A {}\nclass B {}\n\ntype VirtualElement = Thunk | VirtualNode;\ntype Child = VirtualElement;\ntype Children = Array<Child>;\n\nclass Thunk {}\nclass VirtualNode {\n  children: Child | Children;\n  constructor(type, children: Children) {\n    this.children = children.length === 1 ? children[0] : children;\n  }\n}\n\n`;\n\nexports[`issue-824.js 1`] = `\nimport { B, C } from \"./issue-824-helper\";\n\ntype K = B | C;\n\ntype I = {\n  which(): number;\n};\n\nexport default class A {\n  static foo(p: K): bool {\n    return false;\n  }\n  static bar(p: I & K): bool {\n    return this.foo(p);\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport { B, C } from \"./issue-824-helper\";\n\ntype K = B | C;\n\ntype I = {\n  which(): number\n};\n\nexport default class A {\n  static foo(p: K): boolean {\n    return false;\n  }\n  static bar(p: I & K): boolean {\n    return this.foo(p);\n  }\n}\n\n`;\n\nexports[`issue-824-helper.js 1`] = `\nimport A from \"./issue-824\";\n\nexport class B extends A {\n  which(): number {\n    return 1;\n  }\n}\nexport class C extends A {\n  which(): number {\n    return 2;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport A from \"./issue-824\";\n\nexport class B extends A {\n  which(): number {\n    return 1;\n  }\n}\nexport class C extends A {\n  which(): number {\n    return 2;\n  }\n}\n\n`;\n\nexports[`issue-1349.js 1`] = `\n/* @flow */\n\nvar bar: Array<{b: ?boolean, c: number} | {b: boolean}> = [\n  {b: true, c: 123},\n  {b: true}\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nvar bar: Array<{ b: ?boolean, c: number } | { b: boolean }> = [\n  { b: true, c: 123 },\n  { b: true }\n];\n\n`;\n\nexports[`issue-1371.js 1`] = `\nfunction create(a: any): { type: 'B', data: number } | { type: 'A', data: string }\n{\n  return {\n    type: 'A',\n    data: a\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction create(\n  a: any\n): { type: \"B\", data: number } | { type: \"A\", data: string } {\n  return {\n    type: \"A\",\n    data: a\n  };\n}\n\n`;\n\nexports[`issue-1455.js 1`] = `\n/* @flow */\nimport type {Foobar} from \"./issue-1455-helper\"\n\nfunction create(content: ?Foobar | String | Array<String>) {\n}\n\nfunction node(content: ?Foobar | String | Array<String>) {\n  create(content)\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\nimport type { Foobar } from \"./issue-1455-helper\";\n\nfunction create(content: ?Foobar | String | Array<String>) {}\n\nfunction node(content: ?Foobar | String | Array<String>) {\n  create(content);\n}\n\n`;\n\nexports[`issue-1455-helper.js 1`] = `\n/* @flow */\n\nexport class Foobar { }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nexport class Foobar {}\n\n`;\n\nexports[`issue-1462-i.js 1`] = `\ntype Common = {\n};\n\ntype A = Common & {\n  type: 'A',\n  foo: number\n};\n\ntype B = Common & {\n  type: 'B',\n  foo: Array<number>\n}\n\ntype MyType = A | B;\n\nfunction print(x: number) {\n  console.log(x);\n}\n\nfunction printAll(val: MyType) {\n  print(val.foo);  // <--- foo could be an array\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype Common = {};\n\ntype A = Common & {\n  type: \"A\",\n  foo: number\n};\n\ntype B = Common & {\n  type: \"B\",\n  foo: Array<number>\n};\n\ntype MyType = A | B;\n\nfunction print(x: number) {\n  console.log(x);\n}\n\nfunction printAll(val: MyType) {\n  print(val.foo); // <--- foo could be an array\n}\n\n`;\n\nexports[`issue-1462-ii.js 1`] = `\ntype Common = {\n};\n\ntype A = {\n  type: 'A',\n  foo: number\n} & Common;\n\ntype B = {\n  type: 'B',\n  foo: Array<number>\n} & Common;\n\ntype MyType = A | B;\n\n\nfunction print(x: number) {\n  console.log(x);\n}\n\nfunction printAll(val: MyType) {\n  if (val.type === 'A') {\n    print(val.foo);\n  } else {\n    val.foo.forEach(print);\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype Common = {};\n\ntype A = {\n  type: \"A\",\n  foo: number\n} & Common;\n\ntype B = {\n  type: \"B\",\n  foo: Array<number>\n} & Common;\n\ntype MyType = A | B;\n\nfunction print(x: number) {\n  console.log(x);\n}\n\nfunction printAll(val: MyType) {\n  if (val.type === \"A\") {\n    print(val.foo);\n  } else {\n    val.foo.forEach(print);\n  }\n}\n\n`;\n\nexports[`issue-1664.js 1`] = `\n/* @flow */\n\ntype DataBase = {\n  id: string,\n  name: string,\n};\n\ntype UserData = DataBase & {\n  kind: \"user\",\n};\n\ntype SystemData = DataBase & {\n  kind: \"system\",\n}\n\ntype Data = UserData | SystemData;\n\nconst data: Data = {\n  id: \"\",\n  name: \"\",\n  kind: \"system\",\n}\n\nif (data.kind === \"system\") {\n  (data: SystemData);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\ntype DataBase = {\n  id: string,\n  name: string\n};\n\ntype UserData = DataBase & {\n  kind: \"user\"\n};\n\ntype SystemData = DataBase & {\n  kind: \"system\"\n};\n\ntype Data = UserData | SystemData;\n\nconst data: Data = {\n  id: \"\",\n  name: \"\",\n  kind: \"system\"\n};\n\nif (data.kind === \"system\") {\n  (data: SystemData);\n}\n\n`;\n\nexports[`issue-1759.js 1`] = `\n// @flow\n\ntype X = ({a:true} & {b:string}) | ({a:false} & {c:string});\n//type X = {a:true, b:string} | {a:false, c:string}; // this works.\n\nfunction hello(x:X): string {\n  if (x.a === true) return x.b; else return x.c;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\ntype X = ({ a: true } & { b: string }) | ({ a: false } & { c: string });\n//type X = {a:true, b:string} | {a:false, c:string}; // this works.\n\nfunction hello(x: X): string {\n  if (x.a === true) return x.b;\n  else return x.c;\n}\n\n`;\n\nexports[`issue-2232.js 1`] = `\n/* @flow */\n\ndeclare type Entity<T> = {\n  id: T,\n  name: string\n}\n\ndeclare type StringEntity = Entity<string>\n\n\ndeclare type Foo = StringEntity & {\n  bars: Object,\n  kind: 1\n}\ndeclare type EmptyFoo = StringEntity &  {\n  bars: null,\n  kind: 2\n}\n\nfunction test(f: Foo| EmptyFoo) {\n  if (f.kind === 1) {\n    (f: Foo)\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\ndeclare type Entity<T> = {\n  id: T,\n  name: string\n};\n\ndeclare type StringEntity = Entity<string>;\n\ndeclare type Foo = StringEntity & {\n  bars: Object,\n  kind: 1\n};\ndeclare type EmptyFoo = StringEntity & {\n  bars: null,\n  kind: 2\n};\n\nfunction test(f: Foo | EmptyFoo) {\n  if (f.kind === 1) {\n    (f: Foo);\n  }\n}\n\n`;\n\nexports[`test1.js 1`] = `\n// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n//////////////////////////////\n// example with object types\n//////////////////////////////\n\nfunction obj(a: A1 | A2) {\n  return a.x;\n}\n\nconst obj_result = obj({ x: \"\" }); // currently an error! (expect it to be OK)\n\n// Type definitions used above are defined below, but in an order that\n// deliberately makes their full resolution as lazy as possible. The call above\n// blocks until A1 is partially resolved. Since the argument partially matches\n// A1, that branch is selected. Later, that branch errors, but other branches\n// have been lost by then.\n\ntype A1 = { x: B1 };\ntype A2 = { x: B2 };\n\ntype B1 = number;\ntype B2 = string;\n\n(obj_result: B1 | B2);\n\n///////////////////////////////////////\n// similar example with function types\n///////////////////////////////////////\n\nfunction fun(a: A3 | A4) {\n  return a();\n}\n\nconst fun_result = fun(() => \"\");\n\ntype A3 = () => B3;\ntype A4 = () => B4;\n\ntype B3 = number;\ntype B4 = string;\n\n(fun_result: B3 | B4);\n\n/////////////////////////////////////////////\n// similar example with class instance types\n/////////////////////////////////////////////\n\nfunction inst(a: A5 | A6) { }\n\nclass B5 { }\nclass B6 { }\ninst([new B6]);\n\ntype A5 = B5[];\ntype A6 = B6[];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n//////////////////////////////\n// example with object types\n//////////////////////////////\n\nfunction obj(a: A1 | A2) {\n  return a.x;\n}\n\nconst obj_result = obj({ x: \"\" }); // currently an error! (expect it to be OK)\n\n// Type definitions used above are defined below, but in an order that\n// deliberately makes their full resolution as lazy as possible. The call above\n// blocks until A1 is partially resolved. Since the argument partially matches\n// A1, that branch is selected. Later, that branch errors, but other branches\n// have been lost by then.\n\ntype A1 = { x: B1 };\ntype A2 = { x: B2 };\n\ntype B1 = number;\ntype B2 = string;\n\n(obj_result: B1 | B2);\n\n///////////////////////////////////////\n// similar example with function types\n///////////////////////////////////////\n\nfunction fun(a: A3 | A4) {\n  return a();\n}\n\nconst fun_result = fun(() => \"\");\n\ntype A3 = () => B3;\ntype A4 = () => B4;\n\ntype B3 = number;\ntype B4 = string;\n\n(fun_result: B3 | B4);\n\n/////////////////////////////////////////////\n// similar example with class instance types\n/////////////////////////////////////////////\n\nfunction inst(a: A5 | A6) {}\n\nclass B5 {}\nclass B6 {}\ninst([new B6()]);\n\ntype A5 = B5[];\ntype A6 = B6[];\n\n`;\n\nexports[`test2.js 1`] = `\n// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n//////////////////////////////\n// example with object types\n//////////////////////////////\n\nfunction obj(a: { x: number } | { x: string }) { }\n\nobj(({ x: \"\" }: A1));\n\ntype A1 = { x: B1 };\n\ntype B1 = string;\n\n///////////////////////////////////////\n// similar example with function types\n///////////////////////////////////////\n\nfunction fun(a: (() => number) | (() => string)) { }\n\nfun(((() => \"\"): A2));\n\ntype A2 = () => B2;\n\ntype B2 = string;\n\n/////////////////////////////////////////////////////\n// similar example with generic class instance types\n/////////////////////////////////////////////////////\n\nclass C<X> { }\n\nfunction inst(a: C<number> | C<string>) { }\n\ninst((new C: A3));\n\ntype A3 = C<B3>;\n\ntype B3 = string;\n\n/////////////////////////////////////////////\n// similar example with generic type aliases\n/////////////////////////////////////////////\n\nfunction alias(a: T<number> | T<string>) { }\nalias({ x: (x: V<B4>) => { } });\n\ntype T<X> = { x: U<X> }\ntype U<X> = (x: V<X>) => void;\ntype V<X> = X;\n\ntype B4 = string;\n\n// class statics\n\nfunction stat(a: { x: number } | { x: string }) { }\n\nclass D {\n  static x: B5;\n}\n\nstat(D);\n\ntype B5 = string;\n\n// tuples\n\nfunction tup(a: [number,boolean] | [string,boolean]) { }\n\ntup(([\"\",false]: A6));\n\ntype A6 = [B6,boolean];\ntype B6 = string;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n//////////////////////////////\n// example with object types\n//////////////////////////////\n\nfunction obj(a: { x: number } | { x: string }) {}\n\nobj(({ x: \"\" }: A1));\n\ntype A1 = { x: B1 };\n\ntype B1 = string;\n\n///////////////////////////////////////\n// similar example with function types\n///////////////////////////////////////\n\nfunction fun(a: (() => number) | (() => string)) {}\n\nfun((() => \"\": A2));\n\ntype A2 = () => B2;\n\ntype B2 = string;\n\n/////////////////////////////////////////////////////\n// similar example with generic class instance types\n/////////////////////////////////////////////////////\n\nclass C<X> {}\n\nfunction inst(a: C<number> | C<string>) {}\n\ninst((new C(): A3));\n\ntype A3 = C<B3>;\n\ntype B3 = string;\n\n/////////////////////////////////////////////\n// similar example with generic type aliases\n/////////////////////////////////////////////\n\nfunction alias(a: T<number> | T<string>) {}\nalias({ x: (x: V<B4>) => {} });\n\ntype T<X> = { x: U<X> };\ntype U<X> = (x: V<X>) => void;\ntype V<X> = X;\n\ntype B4 = string;\n\n// class statics\n\nfunction stat(a: { x: number } | { x: string }) {}\n\nclass D {\n  static x: B5;\n}\n\nstat(D);\n\ntype B5 = string;\n\n// tuples\n\nfunction tup(a: [number, boolean] | [string, boolean]) {}\n\ntup(([\"\", false]: A6));\n\ntype A6 = [B6, boolean];\ntype B6 = string;\n\n`;\n\nexports[`test3.js 1`] = `\n// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n///////////////////////////////\n// example with function types\n///////////////////////////////\n\nfunction fun(a: ((x: number) => void) | ((x: string) => void)) { }\n\nfun((((x) => {}): A1));\n\ntype A1 = (x: B1) => void;\n\ntype B1 = string;\n\n////////////////////////////\n// example with array types\n////////////////////////////\n\nfunction arr(a: number[] | string[]) { }\n\narr(([]: A2));\n\ntype A2 = B2[];\n\ntype B2 = string;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n///////////////////////////////\n// example with function types\n///////////////////////////////\n\nfunction fun(a: ((x: number) => void) | ((x: string) => void)) {}\n\nfun((x => {}: A1));\n\ntype A1 = (x: B1) => void;\n\ntype B1 = string;\n\n////////////////////////////\n// example with array types\n////////////////////////////\n\nfunction arr(a: number[] | string[]) {}\n\narr(([]: A2));\n\ntype A2 = B2[];\n\ntype B2 = string;\n\n`;\n\nexports[`test4.js 1`] = `\n// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n///////////////////////////////\n// example with function types\n///////////////////////////////\n\nfunction fun(a: ((x: number) => void) | ((x: string) => void)) { }\n\nconst a1 = ((x) => {}: A1);\nfun(a1);\n\nfunction fun_call(x: string) { a1(x); }\n\ntype A1 = (x: B1) => void;\n\ntype B1 = string;\n\n////////////////////////////\n// example with array types\n////////////////////////////\n\nfunction arr(a: number[] | string[]) { }\n\nconst a2 = ([]: A2);\narr(a2);\n\nfunction arr_set(x: string, i: number) { a2[i] = x; }\nfunction arr_get(i: number): string { return a2[i]; }\n\ntype A2 = B2[];\n\ntype B2 = string;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n///////////////////////////////\n// example with function types\n///////////////////////////////\n\nfunction fun(a: ((x: number) => void) | ((x: string) => void)) {}\n\nconst a1 = (x => {}: A1);\nfun(a1);\n\nfunction fun_call(x: string) {\n  a1(x);\n}\n\ntype A1 = (x: B1) => void;\n\ntype B1 = string;\n\n////////////////////////////\n// example with array types\n////////////////////////////\n\nfunction arr(a: number[] | string[]) {}\n\nconst a2 = ([]: A2);\narr(a2);\n\nfunction arr_set(x: string, i: number) {\n  a2[i] = x;\n}\nfunction arr_get(i: number): string {\n  return a2[i];\n}\n\ntype A2 = B2[];\n\ntype B2 = string;\n\n`;\n\nexports[`test5.js 1`] = `\n// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n///////////////////////////////\n// example with function types\n///////////////////////////////\n\nfunction fun(a: ((x: number) => number) | ((x: string) => string)) { }\n\nfunction a1(x) { return x; }\nfun(a1);\n\nfunction fun_call(x: string): string { return a1(x); }\n\n/////////////////////////////\n// example with array types\n/////////////////////////////\n\nfunction arr(a: number[] | string[]) { }\n\nvar a2 = [];\narr(a2);\n\nfunction arr_set(x: string, i: number) { a2[i] = x; }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n///////////////////////////////\n// example with function types\n///////////////////////////////\n\nfunction fun(a: ((x: number) => number) | ((x: string) => string)) {}\n\nfunction a1(x) {\n  return x;\n}\nfun(a1);\n\nfunction fun_call(x: string): string {\n  return a1(x);\n}\n\n/////////////////////////////\n// example with array types\n/////////////////////////////\n\nfunction arr(a: number[] | string[]) {}\n\nvar a2 = [];\narr(a2);\n\nfunction arr_set(x: string, i: number) {\n  a2[i] = x;\n}\n\n`;\n\nexports[`test6.js 1`] = `\n// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n//////////////////////////////////////////\n// example with generic class inheritance\n//////////////////////////////////////////\n\nfunction inst(a: E<B4>): C<number> | C<string> { return a; }\n\nconst mk_C = () => C;\nconst mk_D = () => D;\nconst mk_E = () => E;\n\ntype B4 = string;\n\nconst _D = mk_D();\nclass E<X> extends _D<X> { }\n\nconst _C = mk_C();\nclass D<X> extends _C<X> { }\n\nclass C<X> { }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n//////////////////////////////////////////\n// example with generic class inheritance\n//////////////////////////////////////////\n\nfunction inst(a: E<B4>): C<number> | C<string> {\n  return a;\n}\n\nconst mk_C = () => C;\nconst mk_D = () => D;\nconst mk_E = () => E;\n\ntype B4 = string;\n\nconst _D = mk_D();\nclass E<X> extends _D<X> {}\n\nconst _C = mk_C();\nclass D<X> extends _C<X> {}\n\nclass C<X> {}\n\n`;\n\nexports[`test7.js 1`] = `\n// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n////////////////////\n// recursive types\n////////////////////\n\nfunction rec(x: F1 | F2) { }\nrec({ x: 0 });\n\ntype F1 = G1;\ntype F2 = G2;\ntype G1 = { x: H1, y?: G1 };\ntype G2 = { x: H2, y?: G2 };\ntype H1 = string;\ntype H2 = number;\n\n///////////////////////////////\n// polymorphic recursive types\n///////////////////////////////\n\nfunction polyrec(x: PF<number> | PF<string>) { }\nrec({ x: 0 });\n\ntype PF<X> = PG<X>;\ntype PG<X> = { x: X, y?: PG<X> };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n////////////////////\n// recursive types\n////////////////////\n\nfunction rec(x: F1 | F2) {}\nrec({ x: 0 });\n\ntype F1 = G1;\ntype F2 = G2;\ntype G1 = { x: H1, y?: G1 };\ntype G2 = { x: H2, y?: G2 };\ntype H1 = string;\ntype H2 = number;\n\n///////////////////////////////\n// polymorphic recursive types\n///////////////////////////////\n\nfunction polyrec(x: PF<number> | PF<string>) {}\nrec({ x: 0 });\n\ntype PF<X> = PG<X>;\ntype PG<X> = { x: X, y?: PG<X> };\n\n`;\n\nexports[`test8.js 1`] = `\n// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n//////////////////////\n// nested union types\n//////////////////////\n\nfunction rec(x: F1 | F2) { }\nrec({ x: 0 });\n\ntype F1 = G1 | G1_;\ntype F2 = G2 | G2_;\ntype G1 = { x: H1 };\ntype G1_ = { x: H1_ };\ntype G2 = { x: H2 };\ntype G2_ = { x: H2_ };\ntype H1 = boolean;\ntype H1_ = string;\ntype H2 = boolean;\ntype H2_ = number;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n//////////////////////\n// nested union types\n//////////////////////\n\nfunction rec(x: F1 | F2) {}\nrec({ x: 0 });\n\ntype F1 = G1 | G1_;\ntype F2 = G2 | G2_;\ntype G1 = { x: H1 };\ntype G1_ = { x: H1_ };\ntype G2 = { x: H2 };\ntype G2_ = { x: H2_ };\ntype H1 = boolean;\ntype H1_ = string;\ntype H2 = boolean;\ntype H2_ = number;\n\n`;\n\nexports[`test9.js 1`] = `\n// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n////////////////\n// interference\n////////////////\n\nfunction square(x? = 0) {\n  return x * x;\n}\n\nfunction foo(f: ((_: ?number) => ?number) | (() => void)) { }\nfoo((x): number => square(x))\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n////////////////\n// interference\n////////////////\n\nfunction square(x? = 0) {\n  return x * x;\n}\n\nfunction foo(f: ((_: ?number) => ?number) | (() => void)) {}\nfoo((x): number => square(x));\n\n`;\n\nexports[`test10.js 1`] = `\n// @noflow\n\nfunction id<X>(x: X): X { return x; }\n\n/////////////////////////\n// primitive annotations\n/////////////////////////\n\nfunction check_prim(_: number | string) { }\n\n// ok\ncheck_prim(\"\");\n\n// ...even when they \"flow\" in\ncheck_prim(id(\"\"));\n\n//////////////////////////////\n// class instance annotations\n//////////////////////////////\n\nclass C { }\nclass D { }\nfunction check_inst(_: C | D) { }\n\n// ok\ncheck_inst(new D);\n\n// ...even when they \"flow\" in\ncheck_inst(id(new C));\n\n////////////////////////\n// function annotations\n////////////////////////\n\nfunction check_fun(_: ((_: number) => number) | ((_: string) => string)) { }\n\n// help!\ncheck_fun((x) => x);\n\n//////////////////////\n// object annotations\n//////////////////////\n\nfunction check_obj(_: { x: number } | { x: string }) { }\n\n// ok\ncheck_obj({ x: \"\" });\n\n// help!\ncheck_obj({ x: id(\"\") });\n\n/////////////////////\n// array annotations\n/////////////////////\n\nfunction check_arr(_: number[] | string[]) { }\n\n// help! (unlike objects, array literals' element types are always open)\ncheck_arr([\"\"]);\n\n// help!\ncheck_arr([id(\"\")]);\n\n//////////////////////////////////////\n// generic class instance annotations\n//////////////////////////////////////\n\nclass P<X> { }\nfunction check_poly_inst(_: P<number> | P<string>) { }\n\n// help!\ncheck_poly_inst(new P);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\nfunction id<X>(x: X): X {\n  return x;\n}\n\n/////////////////////////\n// primitive annotations\n/////////////////////////\n\nfunction check_prim(_: number | string) {}\n\n// ok\ncheck_prim(\"\");\n\n// ...even when they \"flow\" in\ncheck_prim(id(\"\"));\n\n//////////////////////////////\n// class instance annotations\n//////////////////////////////\n\nclass C {}\nclass D {}\nfunction check_inst(_: C | D) {}\n\n// ok\ncheck_inst(new D());\n\n// ...even when they \"flow\" in\ncheck_inst(id(new C()));\n\n////////////////////////\n// function annotations\n////////////////////////\n\nfunction check_fun(_: ((_: number) => number) | ((_: string) => string)) {}\n\n// help!\ncheck_fun(x => x);\n\n//////////////////////\n// object annotations\n//////////////////////\n\nfunction check_obj(_: { x: number } | { x: string }) {}\n\n// ok\ncheck_obj({ x: \"\" });\n\n// help!\ncheck_obj({ x: id(\"\") });\n\n/////////////////////\n// array annotations\n/////////////////////\n\nfunction check_arr(_: number[] | string[]) {}\n\n// help! (unlike objects, array literals' element types are always open)\ncheck_arr([\"\"]);\n\n// help!\ncheck_arr([id(\"\")]);\n\n//////////////////////////////////////\n// generic class instance annotations\n//////////////////////////////////////\n\nclass P<X> {}\nfunction check_poly_inst(_: P<number> | P<string>) {}\n\n// help!\ncheck_poly_inst(new P());\n\n`;\n\nexports[`test11.js 1`] = `\n// @noflow\n\n// disjoint unions\n\nfunction length(list: List) {\n  if (list.kind === \"cons\") return length(list.next) + 1;\n  else return 0;\n}\n\n\nlength({ kind: \"nil\" });\nlength({ kind: \"cons\" }); // missing \\`next\\`\nlength({ kind: \"cons\", next: { kind: \"nil\" } });\nlength({ kind: \"empty\" }); // \\`kind\\` not found\n\ntype List = Nil | Cons;\ntype Nil = { kind: \"nil\" };\ntype Cons = { kind: \"cons\", next: List };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n// disjoint unions\n\nfunction length(list: List) {\n  if (list.kind === \"cons\") return length(list.next) + 1;\n  else return 0;\n}\n\nlength({ kind: \"nil\" });\nlength({ kind: \"cons\" }); // missing \\`next\\`\nlength({ kind: \"cons\", next: { kind: \"nil\" } });\nlength({ kind: \"empty\" }); // \\`kind\\` not found\n\ntype List = Nil | Cons;\ntype Nil = { kind: \"nil\" };\ntype Cons = { kind: \"cons\", next: List };\n\n`;\n\nexports[`test12.js 1`] = `\n// @noflow\n\n// polymorphic recursive types\n\ntype F<X> = { f: F<X>, x: X }\ntype G = { x: number }\ntype H = { x: string }\n\nfunction rec(x: F<string>): G | H { return x; }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n// polymorphic recursive types\n\ntype F<X> = { f: F<X>, x: X };\ntype G = { x: number };\ntype H = { x: string };\n\nfunction rec(x: F<string>): G | H {\n  return x;\n}\n\n`;\n\nexports[`test13.js 1`] = `\n// @noflow\n\n/* ensure there are no unintended side effects when trying branches */\n\n({type: 'B', id: 'hi'}: {\n  type: 'A';\n  id: ?string;\n} | {\n  type: 'B';\n  id: string;\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n/* ensure there are no unintended side effects when trying branches */\n\n({ type: \"B\", id: \"hi\" }:\n  | {\n      type: \"A\",\n      id: ?string\n    }\n  | {\n      type: \"B\",\n      id: string\n    });\n\n`;\n\nexports[`test14.js 1`] = `\n// @noflow\n\n// annotations\n\ndeclare class C<X> {\n  get(): X;\n}\n\nfunction union(o: { x: string } | { x: number }) { }\n\nfunction foo(c: C<number>) {\n  union({ x: c.get() });\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n// annotations\n\ndeclare class C<X> {\n  get(): X\n}\n\nfunction union(o: { x: string } | { x: number }) {}\n\nfunction foo(c: C<number>) {\n  union({ x: c.get() });\n}\n\n`;\n\nexports[`test15.js 1`] = `\n// @noflow\n\n// functions as objects\n\nfunction foo<X>(target: EventTarget) {\n  target.addEventListener('click', (e) => {});\n}\n\ndeclare class EventTarget {\n  addEventListener(type: 'foo', listener: KeyboardEventHandler): void;\n  addEventListener(type: string, listener: EventHandler): void;\n}\n\ndeclare class Event { }\ndeclare class KeyboardEvent { }\n\ntype EventHandler = (event: Event) => mixed\ntype KeyboardEventHandler = (event: KeyboardEvent) => mixed\n\n// example where globals are not yet resolved\n\nfunction bar(x: (() => void) | { x: number }) { }\n\nbar(() => { });\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n// functions as objects\n\nfunction foo<X>(target: EventTarget) {\n  target.addEventListener(\"click\", e => {});\n}\n\ndeclare class EventTarget {\n  addEventListener(type: \"foo\", listener: KeyboardEventHandler): void,\n  addEventListener(type: string, listener: EventHandler): void\n}\n\ndeclare class Event {}\ndeclare class KeyboardEvent {}\n\ntype EventHandler = (event: Event) => mixed;\ntype KeyboardEventHandler = (event: KeyboardEvent) => mixed;\n\n// example where globals are not yet resolved\n\nfunction bar(x: (() => void) | { x: number }) {}\n\nbar(() => {});\n\n`;\n\nexports[`test16.js 1`] = `\n// @noflow\n\n// annotations\n\ntype T = number | (() => string);\ntype Foo = T | (() => bool);\n\ntype Bar = number | (() => string) | (() => bool);\n\nfunction foo(x: Foo) { }\nfoo(() => qux());\n\nfunction bar(x: Bar) { }\nbar(() => qux());\n\nvar x = false;\nfunction qux() { return x; }\nx = \"\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n// annotations\n\ntype T = number | (() => string);\ntype Foo = T | (() => boolean);\n\ntype Bar = number | (() => string) | (() => boolean);\n\nfunction foo(x: Foo) {}\nfoo(() => qux());\n\nfunction bar(x: Bar) {}\nbar(() => qux());\n\nvar x = false;\nfunction qux() {\n  return x;\n}\nx = \"\";\n\n`;\n\nexports[`test17.js 1`] = `\n// @noflow\n\n// Array#concat\n\n[].concat([]);\n\n([].concat([0,1])[1]: string)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n// Array#concat\n\n[].concat([]);\n\n([].concat([0, 1])[1]: string);\n\n`;\n\nexports[`test18.js 1`] = `\n// @noflow\n\n// method overloads\n\ndeclare class C {\n  m(x: number): void;\n  m(x: string): void;\n}\n\nfunction f() { return 0; }\n\nnew C().m(f());\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n// method overloads\n\ndeclare class C {\n  m(x: number): void,\n  m(x: string): void\n}\n\nfunction f() {\n  return 0;\n}\n\nnew C().m(f());\n\n`;\n\nexports[`test19.js 1`] = `\n// @noflow\n\n// constructor overloads\n\nfunction m<X>() {\n  return new D();\n}\n\ndeclare class D {\n  constructor(_: void): void;\n  constructor(_: null): void;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n// constructor overloads\n\nfunction m<X>() {\n  return new D();\n}\n\ndeclare class D {\n  constructor(_: void): void,\n  constructor(_: null): void\n}\n\n`;\n\nexports[`test20.js 1`] = `\n// @noflow\n\n// Array#reduce\n\n[0,1].reduce((x,y,i) => y);\n\n[\"a\", \"b\"].reduce(\n  (regex, representation, index) => {\n    return regex + (index ? '|' : '') + '(' + representation + ')';\n  },\n  '',\n);\n\n[\"\"].reduce((acc,str) => acc * str.length);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n// Array#reduce\n\n[0, 1].reduce((x, y, i) => y);\n\n[\"a\", \"b\"].reduce((regex, representation, index) => {\n  return regex + (index ? \"|\" : \"\") + \"(\" + representation + \")\";\n}, \"\");\n\n[\"\"].reduce((acc, str) => acc * str.length);\n\n`;\n\nexports[`test21.js 1`] = `\n// @noflow\n\n// annotations for disjoint unions\n\ntype T =\n  | { type: \"FOO\", x: number }\n  | { type: \"BAR\", x: string }\n\n({ type: (bar(): \"BAR\"), x: str() }: T);\n\n({ type: bar(), x: str() }: T);\n\n({ type: bar(), x: (str(): string) }: T);\n\nfunction bar() {\n  return \"BAR\";\n}\n\nfunction str() {\n  return \"hello\";\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n// annotations for disjoint unions\n\ntype T = { type: \"FOO\", x: number } | { type: \"BAR\", x: string };\n\n({ type: (bar(): \"BAR\"), x: str() }: T);\n\n({ type: bar(), x: str() }: T);\n\n({ type: bar(), x: (str(): string) }: T);\n\nfunction bar() {\n  return \"BAR\";\n}\n\nfunction str() {\n  return \"hello\";\n}\n\n`;\n\nexports[`test22.js 1`] = `\n// @noflow\n\n// refinement of disjoint unions\n\ntype Empty = { }\n\ntype Success = {\n  type: 'SUCCESS';\n  result: string;\n};\n\ntype Error = {\n  type: 'ERROR';\n} & Empty;\n\nexport type T = Success | Error;\n\nfunction foo(x: T) {\n  if (x.type === 'SUCCESS') return x.result;\n  else return x.result;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n// refinement of disjoint unions\n\ntype Empty = {};\n\ntype Success = {\n  type: \"SUCCESS\",\n  result: string\n};\n\ntype Error = {\n  type: \"ERROR\"\n} & Empty;\n\nexport type T = Success | Error;\n\nfunction foo(x: T) {\n  if (x.type === \"SUCCESS\") return x.result;\n  else return x.result;\n}\n\n`;\n\nexports[`test23.js 1`] = `\n// @noflow\n\n// nested intersections (see also lib/test23_lib.js)\n\ntype NestedObj = { } & { dummy: SomeLibClass };\n\ntype Obj = NestedObj & { x: string };\n\nfunction foo(obj: Obj) {\n  obj.x; // should be OK\n  obj.x; // should also be OK (the check above shouldn't affect anything)\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n// nested intersections (see also lib/test23_lib.js)\n\ntype NestedObj = {} & { dummy: SomeLibClass };\n\ntype Obj = NestedObj & { x: string };\n\nfunction foo(obj: Obj) {\n  obj.x; // should be OK\n  obj.x; // should also be OK (the check above shouldn't affect anything)\n}\n\n`;\n\nexports[`test24.js 1`] = `\n// @noflow\n\n// scaling test for full type resolution\n\ndeclare class C {\n  addListener(event: string, listener: Function): C;\n  emit(event: string, ...args:Array<any>): boolean;\n  listeners(event: string): Array<Function>;\n  listenerCount(event: string): number;\n  on(event: string, listener: Function): C;\n  once(event: string, listener: Function): C;\n  removeAllListeners(event?: string): C;\n  removeListener(event: string, listener: Function): C;\n  setMaxListeners(n: number): void;\n}\n\ndeclare class D extends C {\n  listen(port: number, hostname?: string, backlog?: number, callback?: Function): D;\n  listen(path: string, callback?: Function): D;\n  listen(handle: Object, callback?: Function): D;\n  close(callback?: Function): D;\n  address(): number;\n  connections: number;\n  maxConnections: number;\n  getConnections(callback: Function): void;\n  ref():  D;\n  unref():  D;\n}\n\n(0: D | number);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n// scaling test for full type resolution\n\ndeclare class C {\n  addListener(event: string, listener: Function): C,\n  emit(event: string, ...args: Array<any>): boolean,\n  listeners(event: string): Array<Function>,\n  listenerCount(event: string): number,\n  on(event: string, listener: Function): C,\n  once(event: string, listener: Function): C,\n  removeAllListeners(event?: string): C,\n  removeListener(event: string, listener: Function): C,\n  setMaxListeners(n: number): void\n}\n\ndeclare class D extends C {\n  listen(\n    port: number,\n    hostname?: string,\n    backlog?: number,\n    callback?: Function\n  ): D,\n  listen(path: string, callback?: Function): D,\n  listen(handle: Object, callback?: Function): D,\n  close(callback?: Function): D,\n  address(): number,\n  connections: number,\n  maxConnections: number,\n  getConnections(callback: Function): void,\n  ref(): D,\n  unref(): D\n}\n\n(0: D | number);\n\n`;\n\nexports[`test25.js 1`] = `\n// @noflow\n\n// termination test (see also lib/test25_lib.js)\n\nfunction foo(rows: Rows, set: Set<number>) {\n  return rows.reduce_rows(\n    (set, row) => row.reduce_row(\n      (set, i) => set.add(i),\n      set,\n    ),\n    set,\n  );\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n// termination test (see also lib/test25_lib.js)\n\nfunction foo(rows: Rows, set: Set<number>) {\n  return rows.reduce_rows(\n    (set, row) => row.reduce_row((set, i) => set.add(i), set),\n    set\n  );\n}\n\n`;\n\nexports[`test26.js 1`] = `\n// @noflow\n\ndeclare function foo(x: number): number;\ndeclare function foo(x: string): string;\n\ndeclare var x: number | string;\n\n(foo(x): number | string);\n\ntype T = number | string;\ndeclare var y: T;\n\n(foo(y): T);\n\ndeclare class Record {\n  set(x: 'foo', y: number): void;\n  set(x: 'bar', y: string): void;\n}\n\nnew Record().set('foo', \"42\");\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\ndeclare function foo(x: number): number;\ndeclare function foo(x: string): string;\n\ndeclare var x: number | string;\n\n(foo(x): number | string);\n\ntype T = number | string;\ndeclare var y: T;\n\n(foo(y): T);\n\ndeclare class Record {\n  set(x: \"foo\", y: number): void,\n  set(x: \"bar\", y: string): void\n}\n\nnew Record().set(\"foo\", \"42\");\n\n`;\n\nexports[`test27.js 1`] = `\n// @noflow\n\ntype X = ({a:true} & {b:string}) | ({a:false} & {c:string});\n//type X = {a:true, b:string} | {a:false, c:string}; // this works.\n\nfunction hello1(x:X): string {\n  if (x.a === true) return x.b; else return x.c;\n}\n\nfunction hello2(x:X): string {\n  if (x.a === false) return x.c; else return x.b;\n}\n\nfunction hello3(x:X): string {\n  if (x.a) { return x.b; } else { return x.c; }\n}\n\nfunction hello4(x:X): string {\n  if (!x.a) { return x.c; } else { return x.b; }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\ntype X = ({ a: true } & { b: string }) | ({ a: false } & { c: string });\n//type X = {a:true, b:string} | {a:false, c:string}; // this works.\n\nfunction hello1(x: X): string {\n  if (x.a === true) return x.b;\n  else return x.c;\n}\n\nfunction hello2(x: X): string {\n  if (x.a === false) return x.c;\n  else return x.b;\n}\n\nfunction hello3(x: X): string {\n  if (x.a) {\n    return x.b;\n  } else {\n    return x.c;\n  }\n}\n\nfunction hello4(x: X): string {\n  if (!x.a) {\n    return x.c;\n  } else {\n    return x.b;\n  }\n}\n\n`;\n\nexports[`test29.js 1`] = `\n// @noflow\n\n// Make sure caching doesn't cause a spurious successful match (e.g., when a\n// failed match is tried again). This may happen, e.g., when checking\n// polymorphic definitions, where the same code may be checked multiple times\n// with different instantiations.\n\ntype Row = { x: string };\n\ndeclare class D<T> {\n  reduce(\n    callbackfn: (previousValue: T, currentValue: T) => T,\n    initialValue: void\n  ): T;\n  reduce<U>(\n    callbackfn: (previousValue: U, currentValue: T) => U,\n    initialValue: U\n  ): U;\n}\n\nclass C {\n  foo(\n    rows: D<Row>,\n    minWidth: number,\n  ): number {\n    return rows.reduce(\n      (length, row) => 0,\n      minWidth,\n    );\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n// Make sure caching doesn't cause a spurious successful match (e.g., when a\n// failed match is tried again). This may happen, e.g., when checking\n// polymorphic definitions, where the same code may be checked multiple times\n// with different instantiations.\n\ntype Row = { x: string };\n\ndeclare class D<T> {\n  reduce(\n    callbackfn: (previousValue: T, currentValue: T) => T,\n    initialValue: void\n  ): T,\n  reduce<U>(\n    callbackfn: (previousValue: U, currentValue: T) => U,\n    initialValue: U\n  ): U\n}\n\nclass C {\n  foo(rows: D<Row>, minWidth: number): number {\n    return rows.reduce((length, row) => 0, minWidth);\n  }\n}\n\n`;\n\nexports[`test30.js 1`] = `\n// @noflow\n\nconst Constants = require('./test30-helper');\n\ntype ActionType =\n  | { type: 'foo', x: number }\n  | { type: 'bar', x: number }\n\n({ type: Constants.BAR, x: 0 }: ActionType);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\nconst Constants = require(\"./test30-helper\");\n\ntype ActionType = { type: \"foo\", x: number } | { type: \"bar\", x: number };\n\n({ type: Constants.BAR, x: 0 }: ActionType);\n\n`;\n\nexports[`test30-helper.js 1`] = `\n// @noflow\n\nmodule.exports = {\n  FOO: 'foo',\n  BAR: 'bar',\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\nmodule.exports = {\n  FOO: \"foo\",\n  BAR: \"bar\"\n};\n\n`;\n\nexports[`test31.js 1`] = `\n// @noflow\n\n// make sure tuples are type arguments (as used e.g. when viewing maps as\n// key/value iterables) work\n\ninterface SomeIterator<T> { }\n\ninterface SomeIterable<T> {\n  it(): SomeIterator<T>;\n}\n\ndeclare class SomeMap<K,V> {\n  it(): SomeIterator<[K,V]>;\n  set(k: K, v: V): void;\n}\n\ndeclare class ImmutableMap<K,V> { }\n\ndeclare function convert<K,V>(iter: SomeIterable<[K,V]>): ImmutableMap<K,V>;\n\nfunction foo(): ImmutableMap<string, boolean> {\n  const countersGlobalMap = new SomeMap();\n  countersGlobalMap.set(\"\", false);\n  return convert(countersGlobalMap);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @noflow\n\n// make sure tuples are type arguments (as used e.g. when viewing maps as\n// key/value iterables) work\n\ninterface SomeIterator<T> {}\n\ninterface SomeIterable<T> {\n  it(): SomeIterator<T>\n}\n\ndeclare class SomeMap<K, V> {\n  it(): SomeIterator<[K, V]>,\n  set(k: K, v: V): void\n}\n\ndeclare class ImmutableMap<K, V> {}\n\ndeclare function convert<K, V>(iter: SomeIterable<[K, V]>): ImmutableMap<K, V>;\n\nfunction foo(): ImmutableMap<string, boolean> {\n  const countersGlobalMap = new SomeMap();\n  countersGlobalMap.set(\"\", false);\n  return convert(countersGlobalMap);\n}\n\n`;\n\nexports[`test32.js 1`] = `\n// @flow\n\n// make sure that full resolution jobs don't cache improperly to signal success\n// when they have failed earlier\n\nfunction foo(value: Indirect<string> | number): Indirect<string> | number {\n  const castedValue: number = typeof value === 'number' ? value : 0;\n  return castedValue;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n// make sure that full resolution jobs don't cache improperly to signal success\n// when they have failed earlier\n\nfunction foo(value: Indirect<string> | number): Indirect<string> | number {\n  const castedValue: number = typeof value === \"number\" ? value : 0;\n  return castedValue;\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/union_new/issue-1349.js",
    "content": "/* @flow */\n\nvar bar: Array<{b: ?boolean, c: number} | {b: boolean}> = [\n  {b: true, c: 123},\n  {b: true}\n];\n"
  },
  {
    "path": "tests/flow/union_new/issue-1371.js",
    "content": "function create(a: any): { type: 'B', data: number } | { type: 'A', data: string }\n{\n  return {\n    type: 'A',\n    data: a\n  }\n}\n"
  },
  {
    "path": "tests/flow/union_new/issue-1455-helper.js",
    "content": "/* @flow */\n\nexport class Foobar { }\n"
  },
  {
    "path": "tests/flow/union_new/issue-1455.js",
    "content": "/* @flow */\nimport type {Foobar} from \"./issue-1455-helper\"\n\nfunction create(content: ?Foobar | String | Array<String>) {\n}\n\nfunction node(content: ?Foobar | String | Array<String>) {\n  create(content)\n}\n"
  },
  {
    "path": "tests/flow/union_new/issue-1462-i.js",
    "content": "type Common = {\n};\n\ntype A = Common & {\n  type: 'A',\n  foo: number\n};\n\ntype B = Common & {\n  type: 'B',\n  foo: Array<number>\n}\n\ntype MyType = A | B;\n\nfunction print(x: number) {\n  console.log(x);\n}\n\nfunction printAll(val: MyType) {\n  print(val.foo);  // <--- foo could be an array\n}\n"
  },
  {
    "path": "tests/flow/union_new/issue-1462-ii.js",
    "content": "type Common = {\n};\n\ntype A = {\n  type: 'A',\n  foo: number\n} & Common;\n\ntype B = {\n  type: 'B',\n  foo: Array<number>\n} & Common;\n\ntype MyType = A | B;\n\n\nfunction print(x: number) {\n  console.log(x);\n}\n\nfunction printAll(val: MyType) {\n  if (val.type === 'A') {\n    print(val.foo);\n  } else {\n    val.foo.forEach(print);\n  }\n}\n"
  },
  {
    "path": "tests/flow/union_new/issue-1664.js",
    "content": "/* @flow */\n\ntype DataBase = {\n  id: string,\n  name: string,\n};\n\ntype UserData = DataBase & {\n  kind: \"user\",\n};\n\ntype SystemData = DataBase & {\n  kind: \"system\",\n}\n\ntype Data = UserData | SystemData;\n\nconst data: Data = {\n  id: \"\",\n  name: \"\",\n  kind: \"system\",\n}\n\nif (data.kind === \"system\") {\n  (data: SystemData);\n}\n"
  },
  {
    "path": "tests/flow/union_new/issue-1759.js",
    "content": "// @flow\n\ntype X = ({a:true} & {b:string}) | ({a:false} & {c:string});\n//type X = {a:true, b:string} | {a:false, c:string}; // this works.\n\nfunction hello(x:X): string {\n  if (x.a === true) return x.b; else return x.c;\n}\n"
  },
  {
    "path": "tests/flow/union_new/issue-2232.js",
    "content": "/* @flow */\n\ndeclare type Entity<T> = {\n  id: T,\n  name: string\n}\n\ndeclare type StringEntity = Entity<string>\n\n\ndeclare type Foo = StringEntity & {\n  bars: Object,\n  kind: 1\n}\ndeclare type EmptyFoo = StringEntity &  {\n  bars: null,\n  kind: 2\n}\n\nfunction test(f: Foo| EmptyFoo) {\n  if (f.kind === 1) {\n    (f: Foo)\n  }\n}\n"
  },
  {
    "path": "tests/flow/union_new/issue-815.js",
    "content": "/* @flow */\ntype T = A|B;\nclass U {};\ndeclare var children: U;\n(children: T|U);\nclass A {};\nclass B {};\n\ntype VirtualElement = Thunk|VirtualNode;\ntype Child = VirtualElement;\ntype Children = Array<Child>;\n\n\nclass Thunk {}\nclass VirtualNode {\n  children: Child|Children;\n  constructor(type, children/*:Children*/) {\n    this.children = children.length === 1 ? children[0] :\n      children;\n  }\n}\n"
  },
  {
    "path": "tests/flow/union_new/issue-824-helper.js",
    "content": "import A from \"./issue-824\";\n\nexport class B extends A {\n  which(): number {\n    return 1;\n  }\n}\nexport class C extends A {\n  which(): number {\n    return 2;\n  }\n}\n"
  },
  {
    "path": "tests/flow/union_new/issue-824.js",
    "content": "import { B, C } from \"./issue-824-helper\";\n\ntype K = B | C;\n\ntype I = {\n  which(): number;\n};\n\nexport default class A {\n  static foo(p: K): bool {\n    return false;\n  }\n  static bar(p: I & K): bool {\n    return this.foo(p);\n  }\n}\n"
  },
  {
    "path": "tests/flow/union_new/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/union_new/lib/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test23_lib.js 1`] = `\ndeclare class SomeLibClass { }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class SomeLibClass {}\n\n`;\n\nexports[`test25_lib.js 1`] = `\ndeclare class Set<T> {\n    add(x: any): Set<T>;\n}\n\ndeclare class Row {\n    reduce_row(\n      callbackfn: (previousValue: number, currentValue: number) => number,\n      initialValue: void\n    ): number;\n    reduce_row<U>(\n      callbackfn: (previousValue: U, currentValue: number) => U,\n      initialValue: U\n    ): U;\n}\n\ndeclare class Rows {\n    reduce_rows<X>(\n      callbackfn: (previousValue: X, currentValue: Row) => X,\n      initialValue: X\n    ): X;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class Set<T> {\n  add(x: any): Set<T>\n}\n\ndeclare class Row {\n  reduce_row(\n    callbackfn: (previousValue: number, currentValue: number) => number,\n    initialValue: void\n  ): number,\n  reduce_row<U>(\n    callbackfn: (previousValue: U, currentValue: number) => U,\n    initialValue: U\n  ): U\n}\n\ndeclare class Rows {\n  reduce_rows<X>(\n    callbackfn: (previousValue: X, currentValue: Row) => X,\n    initialValue: X\n  ): X\n}\n\n`;\n\nexports[`test32_lib.js 1`] = `\ntype Indirect<T> = Array<T>;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype Indirect<T> = Array<T>;\n\n`;\n"
  },
  {
    "path": "tests/flow/union_new/lib/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/union_new/lib/test23_lib.js",
    "content": "declare class SomeLibClass { }\n"
  },
  {
    "path": "tests/flow/union_new/lib/test25_lib.js",
    "content": "declare class Set<T> {\n    add(x: any): Set<T>;\n}\n\ndeclare class Row {\n    reduce_row(\n      callbackfn: (previousValue: number, currentValue: number) => number,\n      initialValue: void\n    ): number;\n    reduce_row<U>(\n      callbackfn: (previousValue: U, currentValue: number) => U,\n      initialValue: U\n    ): U;\n}\n\ndeclare class Rows {\n    reduce_rows<X>(\n      callbackfn: (previousValue: X, currentValue: Row) => X,\n      initialValue: X\n    ): X;\n}\n"
  },
  {
    "path": "tests/flow/union_new/lib/test32_lib.js",
    "content": "type Indirect<T> = Array<T>;\n"
  },
  {
    "path": "tests/flow/union_new/test1.js",
    "content": "// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n//////////////////////////////\n// example with object types\n//////////////////////////////\n\nfunction obj(a: A1 | A2) {\n  return a.x;\n}\n\nconst obj_result = obj({ x: \"\" }); // currently an error! (expect it to be OK)\n\n// Type definitions used above are defined below, but in an order that\n// deliberately makes their full resolution as lazy as possible. The call above\n// blocks until A1 is partially resolved. Since the argument partially matches\n// A1, that branch is selected. Later, that branch errors, but other branches\n// have been lost by then.\n\ntype A1 = { x: B1 };\ntype A2 = { x: B2 };\n\ntype B1 = number;\ntype B2 = string;\n\n(obj_result: B1 | B2);\n\n///////////////////////////////////////\n// similar example with function types\n///////////////////////////////////////\n\nfunction fun(a: A3 | A4) {\n  return a();\n}\n\nconst fun_result = fun(() => \"\");\n\ntype A3 = () => B3;\ntype A4 = () => B4;\n\ntype B3 = number;\ntype B4 = string;\n\n(fun_result: B3 | B4);\n\n/////////////////////////////////////////////\n// similar example with class instance types\n/////////////////////////////////////////////\n\nfunction inst(a: A5 | A6) { }\n\nclass B5 { }\nclass B6 { }\ninst([new B6]);\n\ntype A5 = B5[];\ntype A6 = B6[];\n"
  },
  {
    "path": "tests/flow/union_new/test10.js",
    "content": "// @noflow\n\nfunction id<X>(x: X): X { return x; }\n\n/////////////////////////\n// primitive annotations\n/////////////////////////\n\nfunction check_prim(_: number | string) { }\n\n// ok\ncheck_prim(\"\");\n\n// ...even when they \"flow\" in\ncheck_prim(id(\"\"));\n\n//////////////////////////////\n// class instance annotations\n//////////////////////////////\n\nclass C { }\nclass D { }\nfunction check_inst(_: C | D) { }\n\n// ok\ncheck_inst(new D);\n\n// ...even when they \"flow\" in\ncheck_inst(id(new C));\n\n////////////////////////\n// function annotations\n////////////////////////\n\nfunction check_fun(_: ((_: number) => number) | ((_: string) => string)) { }\n\n// help!\ncheck_fun((x) => x);\n\n//////////////////////\n// object annotations\n//////////////////////\n\nfunction check_obj(_: { x: number } | { x: string }) { }\n\n// ok\ncheck_obj({ x: \"\" });\n\n// help!\ncheck_obj({ x: id(\"\") });\n\n/////////////////////\n// array annotations\n/////////////////////\n\nfunction check_arr(_: number[] | string[]) { }\n\n// help! (unlike objects, array literals' element types are always open)\ncheck_arr([\"\"]);\n\n// help!\ncheck_arr([id(\"\")]);\n\n//////////////////////////////////////\n// generic class instance annotations\n//////////////////////////////////////\n\nclass P<X> { }\nfunction check_poly_inst(_: P<number> | P<string>) { }\n\n// help!\ncheck_poly_inst(new P);\n"
  },
  {
    "path": "tests/flow/union_new/test11.js",
    "content": "// @noflow\n\n// disjoint unions\n\nfunction length(list: List) {\n  if (list.kind === \"cons\") return length(list.next) + 1;\n  else return 0;\n}\n\n\nlength({ kind: \"nil\" });\nlength({ kind: \"cons\" }); // missing `next`\nlength({ kind: \"cons\", next: { kind: \"nil\" } });\nlength({ kind: \"empty\" }); // `kind` not found\n\ntype List = Nil | Cons;\ntype Nil = { kind: \"nil\" };\ntype Cons = { kind: \"cons\", next: List };\n"
  },
  {
    "path": "tests/flow/union_new/test12.js",
    "content": "// @noflow\n\n// polymorphic recursive types\n\ntype F<X> = { f: F<X>, x: X }\ntype G = { x: number }\ntype H = { x: string }\n\nfunction rec(x: F<string>): G | H { return x; }\n"
  },
  {
    "path": "tests/flow/union_new/test13.js",
    "content": "// @noflow\n\n/* ensure there are no unintended side effects when trying branches */\n\n({type: 'B', id: 'hi'}: {\n  type: 'A';\n  id: ?string;\n} | {\n  type: 'B';\n  id: string;\n});\n"
  },
  {
    "path": "tests/flow/union_new/test14.js",
    "content": "// @noflow\n\n// annotations\n\ndeclare class C<X> {\n  get(): X;\n}\n\nfunction union(o: { x: string } | { x: number }) { }\n\nfunction foo(c: C<number>) {\n  union({ x: c.get() });\n}\n"
  },
  {
    "path": "tests/flow/union_new/test15.js",
    "content": "// @noflow\n\n// functions as objects\n\nfunction foo<X>(target: EventTarget) {\n  target.addEventListener('click', (e) => {});\n}\n\ndeclare class EventTarget {\n  addEventListener(type: 'foo', listener: KeyboardEventHandler): void;\n  addEventListener(type: string, listener: EventHandler): void;\n}\n\ndeclare class Event { }\ndeclare class KeyboardEvent { }\n\ntype EventHandler = (event: Event) => mixed\ntype KeyboardEventHandler = (event: KeyboardEvent) => mixed\n\n// example where globals are not yet resolved\n\nfunction bar(x: (() => void) | { x: number }) { }\n\nbar(() => { });\n"
  },
  {
    "path": "tests/flow/union_new/test16.js",
    "content": "// @noflow\n\n// annotations\n\ntype T = number | (() => string);\ntype Foo = T | (() => bool);\n\ntype Bar = number | (() => string) | (() => bool);\n\nfunction foo(x: Foo) { }\nfoo(() => qux());\n\nfunction bar(x: Bar) { }\nbar(() => qux());\n\nvar x = false;\nfunction qux() { return x; }\nx = \"\";\n"
  },
  {
    "path": "tests/flow/union_new/test17.js",
    "content": "// @noflow\n\n// Array#concat\n\n[].concat([]);\n\n([].concat([0,1])[1]: string)\n"
  },
  {
    "path": "tests/flow/union_new/test18.js",
    "content": "// @noflow\n\n// method overloads\n\ndeclare class C {\n  m(x: number): void;\n  m(x: string): void;\n}\n\nfunction f() { return 0; }\n\nnew C().m(f());\n"
  },
  {
    "path": "tests/flow/union_new/test19.js",
    "content": "// @noflow\n\n// constructor overloads\n\nfunction m<X>() {\n  return new D();\n}\n\ndeclare class D {\n  constructor(_: void): void;\n  constructor(_: null): void;\n}\n"
  },
  {
    "path": "tests/flow/union_new/test2.js",
    "content": "// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n//////////////////////////////\n// example with object types\n//////////////////////////////\n\nfunction obj(a: { x: number } | { x: string }) { }\n\nobj(({ x: \"\" }: A1));\n\ntype A1 = { x: B1 };\n\ntype B1 = string;\n\n///////////////////////////////////////\n// similar example with function types\n///////////////////////////////////////\n\nfunction fun(a: (() => number) | (() => string)) { }\n\nfun(((() => \"\"): A2));\n\ntype A2 = () => B2;\n\ntype B2 = string;\n\n/////////////////////////////////////////////////////\n// similar example with generic class instance types\n/////////////////////////////////////////////////////\n\nclass C<X> { }\n\nfunction inst(a: C<number> | C<string>) { }\n\ninst((new C: A3));\n\ntype A3 = C<B3>;\n\ntype B3 = string;\n\n/////////////////////////////////////////////\n// similar example with generic type aliases\n/////////////////////////////////////////////\n\nfunction alias(a: T<number> | T<string>) { }\nalias({ x: (x: V<B4>) => { } });\n\ntype T<X> = { x: U<X> }\ntype U<X> = (x: V<X>) => void;\ntype V<X> = X;\n\ntype B4 = string;\n\n// class statics\n\nfunction stat(a: { x: number } | { x: string }) { }\n\nclass D {\n  static x: B5;\n}\n\nstat(D);\n\ntype B5 = string;\n\n// tuples\n\nfunction tup(a: [number,boolean] | [string,boolean]) { }\n\ntup(([\"\",false]: A6));\n\ntype A6 = [B6,boolean];\ntype B6 = string;\n"
  },
  {
    "path": "tests/flow/union_new/test20.js",
    "content": "// @noflow\n\n// Array#reduce\n\n[0,1].reduce((x,y,i) => y);\n\n[\"a\", \"b\"].reduce(\n  (regex, representation, index) => {\n    return regex + (index ? '|' : '') + '(' + representation + ')';\n  },\n  '',\n);\n\n[\"\"].reduce((acc,str) => acc * str.length);\n"
  },
  {
    "path": "tests/flow/union_new/test21.js",
    "content": "// @noflow\n\n// annotations for disjoint unions\n\ntype T =\n  | { type: \"FOO\", x: number }\n  | { type: \"BAR\", x: string }\n\n({ type: (bar(): \"BAR\"), x: str() }: T);\n\n({ type: bar(), x: str() }: T);\n\n({ type: bar(), x: (str(): string) }: T);\n\nfunction bar() {\n  return \"BAR\";\n}\n\nfunction str() {\n  return \"hello\";\n}\n"
  },
  {
    "path": "tests/flow/union_new/test22.js",
    "content": "// @noflow\n\n// refinement of disjoint unions\n\ntype Empty = { }\n\ntype Success = {\n  type: 'SUCCESS';\n  result: string;\n};\n\ntype Error = {\n  type: 'ERROR';\n} & Empty;\n\nexport type T = Success | Error;\n\nfunction foo(x: T) {\n  if (x.type === 'SUCCESS') return x.result;\n  else return x.result;\n}\n"
  },
  {
    "path": "tests/flow/union_new/test23.js",
    "content": "// @noflow\n\n// nested intersections (see also lib/test23_lib.js)\n\ntype NestedObj = { } & { dummy: SomeLibClass };\n\ntype Obj = NestedObj & { x: string };\n\nfunction foo(obj: Obj) {\n  obj.x; // should be OK\n  obj.x; // should also be OK (the check above shouldn't affect anything)\n}\n"
  },
  {
    "path": "tests/flow/union_new/test24.js",
    "content": "// @noflow\n\n// scaling test for full type resolution\n\ndeclare class C {\n  addListener(event: string, listener: Function): C;\n  emit(event: string, ...args:Array<any>): boolean;\n  listeners(event: string): Array<Function>;\n  listenerCount(event: string): number;\n  on(event: string, listener: Function): C;\n  once(event: string, listener: Function): C;\n  removeAllListeners(event?: string): C;\n  removeListener(event: string, listener: Function): C;\n  setMaxListeners(n: number): void;\n}\n\ndeclare class D extends C {\n  listen(port: number, hostname?: string, backlog?: number, callback?: Function): D;\n  listen(path: string, callback?: Function): D;\n  listen(handle: Object, callback?: Function): D;\n  close(callback?: Function): D;\n  address(): number;\n  connections: number;\n  maxConnections: number;\n  getConnections(callback: Function): void;\n  ref():  D;\n  unref():  D;\n}\n\n(0: D | number);\n"
  },
  {
    "path": "tests/flow/union_new/test25.js",
    "content": "// @noflow\n\n// termination test (see also lib/test25_lib.js)\n\nfunction foo(rows: Rows, set: Set<number>) {\n  return rows.reduce_rows(\n    (set, row) => row.reduce_row(\n      (set, i) => set.add(i),\n      set,\n    ),\n    set,\n  );\n}\n"
  },
  {
    "path": "tests/flow/union_new/test26.js",
    "content": "// @noflow\n\ndeclare function foo(x: number): number;\ndeclare function foo(x: string): string;\n\ndeclare var x: number | string;\n\n(foo(x): number | string);\n\ntype T = number | string;\ndeclare var y: T;\n\n(foo(y): T);\n\ndeclare class Record {\n  set(x: 'foo', y: number): void;\n  set(x: 'bar', y: string): void;\n}\n\nnew Record().set('foo', \"42\");\n"
  },
  {
    "path": "tests/flow/union_new/test27.js",
    "content": "// @noflow\n\ntype X = ({a:true} & {b:string}) | ({a:false} & {c:string});\n//type X = {a:true, b:string} | {a:false, c:string}; // this works.\n\nfunction hello1(x:X): string {\n  if (x.a === true) return x.b; else return x.c;\n}\n\nfunction hello2(x:X): string {\n  if (x.a === false) return x.c; else return x.b;\n}\n\nfunction hello3(x:X): string {\n  if (x.a) { return x.b; } else { return x.c; }\n}\n\nfunction hello4(x:X): string {\n  if (!x.a) { return x.c; } else { return x.b; }\n}\n"
  },
  {
    "path": "tests/flow/union_new/test29.js",
    "content": "// @noflow\n\n// Make sure caching doesn't cause a spurious successful match (e.g., when a\n// failed match is tried again). This may happen, e.g., when checking\n// polymorphic definitions, where the same code may be checked multiple times\n// with different instantiations.\n\ntype Row = { x: string };\n\ndeclare class D<T> {\n  reduce(\n    callbackfn: (previousValue: T, currentValue: T) => T,\n    initialValue: void\n  ): T;\n  reduce<U>(\n    callbackfn: (previousValue: U, currentValue: T) => U,\n    initialValue: U\n  ): U;\n}\n\nclass C {\n  foo(\n    rows: D<Row>,\n    minWidth: number,\n  ): number {\n    return rows.reduce(\n      (length, row) => 0,\n      minWidth,\n    );\n  }\n}\n"
  },
  {
    "path": "tests/flow/union_new/test3.js",
    "content": "// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n///////////////////////////////\n// example with function types\n///////////////////////////////\n\nfunction fun(a: ((x: number) => void) | ((x: string) => void)) { }\n\nfun((((x) => {}): A1));\n\ntype A1 = (x: B1) => void;\n\ntype B1 = string;\n\n////////////////////////////\n// example with array types\n////////////////////////////\n\nfunction arr(a: number[] | string[]) { }\n\narr(([]: A2));\n\ntype A2 = B2[];\n\ntype B2 = string;\n"
  },
  {
    "path": "tests/flow/union_new/test30-helper.js",
    "content": "// @noflow\n\nmodule.exports = {\n  FOO: 'foo',\n  BAR: 'bar',\n}\n"
  },
  {
    "path": "tests/flow/union_new/test30.js",
    "content": "// @noflow\n\nconst Constants = require('./test30-helper');\n\ntype ActionType =\n  | { type: 'foo', x: number }\n  | { type: 'bar', x: number }\n\n({ type: Constants.BAR, x: 0 }: ActionType);\n"
  },
  {
    "path": "tests/flow/union_new/test31.js",
    "content": "// @noflow\n\n// make sure tuples are type arguments (as used e.g. when viewing maps as\n// key/value iterables) work\n\ninterface SomeIterator<T> { }\n\ninterface SomeIterable<T> {\n  it(): SomeIterator<T>;\n}\n\ndeclare class SomeMap<K,V> {\n  it(): SomeIterator<[K,V]>;\n  set(k: K, v: V): void;\n}\n\ndeclare class ImmutableMap<K,V> { }\n\ndeclare function convert<K,V>(iter: SomeIterable<[K,V]>): ImmutableMap<K,V>;\n\nfunction foo(): ImmutableMap<string, boolean> {\n  const countersGlobalMap = new SomeMap();\n  countersGlobalMap.set(\"\", false);\n  return convert(countersGlobalMap);\n}\n"
  },
  {
    "path": "tests/flow/union_new/test32.js",
    "content": "// @flow\n\n// make sure that full resolution jobs don't cache improperly to signal success\n// when they have failed earlier\n\nfunction foo(value: Indirect<string> | number): Indirect<string> | number {\n  const castedValue: number = typeof value === 'number' ? value : 0;\n  return castedValue;\n}\n"
  },
  {
    "path": "tests/flow/union_new/test4.js",
    "content": "// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n///////////////////////////////\n// example with function types\n///////////////////////////////\n\nfunction fun(a: ((x: number) => void) | ((x: string) => void)) { }\n\nconst a1 = ((x) => {}: A1);\nfun(a1);\n\nfunction fun_call(x: string) { a1(x); }\n\ntype A1 = (x: B1) => void;\n\ntype B1 = string;\n\n////////////////////////////\n// example with array types\n////////////////////////////\n\nfunction arr(a: number[] | string[]) { }\n\nconst a2 = ([]: A2);\narr(a2);\n\nfunction arr_set(x: string, i: number) { a2[i] = x; }\nfunction arr_get(i: number): string { return a2[i]; }\n\ntype A2 = B2[];\n\ntype B2 = string;\n"
  },
  {
    "path": "tests/flow/union_new/test5.js",
    "content": "// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n///////////////////////////////\n// example with function types\n///////////////////////////////\n\nfunction fun(a: ((x: number) => number) | ((x: string) => string)) { }\n\nfunction a1(x) { return x; }\nfun(a1);\n\nfunction fun_call(x: string): string { return a1(x); }\n\n/////////////////////////////\n// example with array types\n/////////////////////////////\n\nfunction arr(a: number[] | string[]) { }\n\nvar a2 = [];\narr(a2);\n\nfunction arr_set(x: string, i: number) { a2[i] = x; }\n"
  },
  {
    "path": "tests/flow/union_new/test6.js",
    "content": "// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n//////////////////////////////////////////\n// example with generic class inheritance\n//////////////////////////////////////////\n\nfunction inst(a: E<B4>): C<number> | C<string> { return a; }\n\nconst mk_C = () => C;\nconst mk_D = () => D;\nconst mk_E = () => E;\n\ntype B4 = string;\n\nconst _D = mk_D();\nclass E<X> extends _D<X> { }\n\nconst _C = mk_C();\nclass D<X> extends _C<X> { }\n\nclass C<X> { }\n"
  },
  {
    "path": "tests/flow/union_new/test7.js",
    "content": "// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n////////////////////\n// recursive types\n////////////////////\n\nfunction rec(x: F1 | F2) { }\nrec({ x: 0 });\n\ntype F1 = G1;\ntype F2 = G2;\ntype G1 = { x: H1, y?: G1 };\ntype G2 = { x: H2, y?: G2 };\ntype H1 = string;\ntype H2 = number;\n\n///////////////////////////////\n// polymorphic recursive types\n///////////////////////////////\n\nfunction polyrec(x: PF<number> | PF<string>) { }\nrec({ x: 0 });\n\ntype PF<X> = PG<X>;\ntype PG<X> = { x: X, y?: PG<X> };\n"
  },
  {
    "path": "tests/flow/union_new/test8.js",
    "content": "// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n//////////////////////\n// nested union types\n//////////////////////\n\nfunction rec(x: F1 | F2) { }\nrec({ x: 0 });\n\ntype F1 = G1 | G1_;\ntype F2 = G2 | G2_;\ntype G1 = { x: H1 };\ntype G1_ = { x: H1_ };\ntype G2 = { x: H2 };\ntype G2_ = { x: H2_ };\ntype H1 = boolean;\ntype H1_ = string;\ntype H2 = boolean;\ntype H2_ = number;\n"
  },
  {
    "path": "tests/flow/union_new/test9.js",
    "content": "// @noflow\n\n/**\n * Test that shows how the implementation of union types is broken\n */\n\n////////////////\n// interference\n////////////////\n\nfunction square(x? = 0) {\n  return x * x;\n}\n\nfunction foo(f: ((_: ?number) => ?number) | (() => void)) { }\nfoo((x): number => square(x))\n"
  },
  {
    "path": "tests/flow/unreachable/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`typecheck.js 1`] = `\n/* @flow */\n\nfunction test1(): string {\n  return bar();\n\n  function bar() {\n    return 0;\n  }\n}\n\n// regression test for analysis after abnormal control flow:\n// consts must not become bot (EmptyT).\n\nfunction test2() {\n  const n = 0;\n\n  return;\n\n  function f() {\n    var x: typeof n = 0;  // no error, n is still number\n    var y: string = n;    // error, n is number (EmptyT would work)\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction test1(): string {\n  return bar();\n\n  function bar() {\n    return 0;\n  }\n}\n\n// regression test for analysis after abnormal control flow:\n// consts must not become bot (EmptyT).\n\nfunction test2() {\n  const n = 0;\n\n  return;\n\n  function f() {\n    var x: typeof n = 0; // no error, n is still number\n    var y: string = n; // error, n is number (EmptyT would work)\n  }\n}\n\n`;\n\nexports[`unreachable.js 1`] = `\n/* @flow */\n\nfunction foo(x, y) {\n  \"use strict\";\n  return bar(x) + baz(y);\n\n  // function declaration is hoisted, should not generate warning\n  function bar (ecks) {\n    return x + ecks;\n  }\n\n  // assignment is not hoisted, should generate warning\n  var baz = function (why) {\n    return y + why;\n  };\n\n  // variable declaration is hoisted, should not generate warning\n  var x, y, z;\n\n  // assignments are not hoisted, should generate 2 warnings\n  var t,\n      u = 5,\n      v,\n      w = 7;\n}\n\nfoo(1, 2);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction foo(x, y) {\n  \"use strict\";\n  return bar(x) + baz(y);\n\n  // function declaration is hoisted, should not generate warning\n  function bar(ecks) {\n    return x + ecks;\n  }\n\n  // assignment is not hoisted, should generate warning\n  var baz = function(why) {\n    return y + why;\n  };\n\n  // variable declaration is hoisted, should not generate warning\n  var x, y, z;\n\n  // assignments are not hoisted, should generate 2 warnings\n  var t,\n    u = 5,\n    v,\n    w = 7;\n}\n\nfoo(1, 2);\n\n`;\n"
  },
  {
    "path": "tests/flow/unreachable/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/unreachable/typecheck.js",
    "content": "/* @flow */\n\nfunction test1(): string {\n  return bar();\n\n  function bar() {\n    return 0;\n  }\n}\n\n// regression test for analysis after abnormal control flow:\n// consts must not become bot (EmptyT).\n\nfunction test2() {\n  const n = 0;\n\n  return;\n\n  function f() {\n    var x: typeof n = 0;  // no error, n is still number\n    var y: string = n;    // error, n is number (EmptyT would work)\n  }\n}\n"
  },
  {
    "path": "tests/flow/unreachable/unreachable.js",
    "content": "/* @flow */\n\nfunction foo(x, y) {\n  \"use strict\";\n  return bar(x) + baz(y);\n\n  // function declaration is hoisted, should not generate warning\n  function bar (ecks) {\n    return x + ecks;\n  }\n\n  // assignment is not hoisted, should generate warning\n  var baz = function (why) {\n    return y + why;\n  };\n\n  // variable declaration is hoisted, should not generate warning\n  var x, y, z;\n\n  // assignments are not hoisted, should generate 2 warnings\n  var t,\n      u = 5,\n      v,\n      w = 7;\n}\n\nfoo(1, 2);\n"
  },
  {
    "path": "tests/flow/unused_function_args/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nfunction foo() {}\nconst args = [3, 4];\n\nfoo(1, 2); // 2 errors\nfoo(\n  1, // error\n  2, // error\n);\nfoo(...args); // 2 errors\n\nfoo.call(null, 1, 2); // 2 errors\nfoo.call(null, ...args); // 2 errors\nfoo.call(null, 1, 2, ...args); // 4 errors\n\nfoo.apply(null, [1, 2]); // 2 errors\nfoo.apply(null, args); // 2 errors\n\nfoo.bind(null, 1, 2); // 2 errors\nfoo.bind(null, ...args); // 2 errors\nfoo.bind(null, 1, 2, ...args); // 4 errors\n\nnew foo(1, 2); // 2 errors\nnew foo(...args); // 2 errors\nnew foo(1, 2, ...args); // 4 errors\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo() {}\nconst args = [3, 4];\n\nfoo(1, 2); // 2 errors\nfoo(\n  1, // error\n  2 // error\n);\nfoo(...args); // 2 errors\n\nfoo.call(null, 1, 2); // 2 errors\nfoo.call(null, ...args); // 2 errors\nfoo.call(null, 1, 2, ...args); // 4 errors\n\nfoo.apply(null, [1, 2]); // 2 errors\nfoo.apply(null, args); // 2 errors\n\nfoo.bind(null, 1, 2); // 2 errors\nfoo.bind(null, ...args); // 2 errors\nfoo.bind(null, 1, 2, ...args); // 4 errors\n\nnew foo(1, 2); // 2 errors\nnew foo(...args); // 2 errors\nnew foo(1, 2, ...args); // 4 errors\n\n`;\n"
  },
  {
    "path": "tests/flow/unused_function_args/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/unused_function_args/test.js",
    "content": "function foo() {}\nconst args = [3, 4];\n\nfoo(1, 2); // 2 errors\nfoo(\n  1, // error\n  2, // error\n);\nfoo(...args); // 2 errors\n\nfoo.call(null, 1, 2); // 2 errors\nfoo.call(null, ...args); // 2 errors\nfoo.call(null, 1, 2, ...args); // 4 errors\n\nfoo.apply(null, [1, 2]); // 2 errors\nfoo.apply(null, args); // 2 errors\n\nfoo.bind(null, 1, 2); // 2 errors\nfoo.bind(null, ...args); // 2 errors\nfoo.bind(null, 1, 2, ...args); // 4 errors\n\nnew foo(1, 2); // 2 errors\nnew foo(...args); // 2 errors\nnew foo(1, 2, ...args); // 4 errors\n"
  },
  {
    "path": "tests/flow/value/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`value.js 1`] = `\nvar o = {};\no[\"x\"] = 4;\nvar y:string = o[\"x\"];\n\nvar table: { [_: string]: number } = {};\ntable[\"x\"] = \"hello\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar o = {};\no[\"x\"] = 4;\nvar y: string = o[\"x\"];\n\nvar table: { [_: string]: number } = {};\ntable[\"x\"] = \"hello\";\n\n`;\n"
  },
  {
    "path": "tests/flow/value/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/value/value.js",
    "content": "var o = {};\no[\"x\"] = 4;\nvar y:string = o[\"x\"];\n\nvar table: { [_: string]: number } = {};\ntable[\"x\"] = \"hello\";\n"
  },
  {
    "path": "tests/flow/vim_emacs_errors/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n// @flow\n\n(123: string);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @flow\n\n(123: string);\n\n`;\n"
  },
  {
    "path": "tests/flow/vim_emacs_errors/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/vim_emacs_errors/test.js",
    "content": "// @flow\n\n(123: string);\n"
  },
  {
    "path": "tests/flow/weakmode/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`should_fail_without_weak.js 1`] = `\n/* @flow */\n// This should fail without weak mode, because of the glaring type error.\n\nfunction returns_a_string() {\n  return \"Hello\";\n}\n\nfunction expects_an_int() {\n  return returns_a_string() * 10;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n// This should fail without weak mode, because of the glaring type error.\n\nfunction returns_a_string() {\n  return \"Hello\";\n}\n\nfunction expects_an_int() {\n  return returns_a_string() * 10;\n}\n\n`;\n\nexports[`should_pass_with_weak.js 1`] = `\n/* @flow weak */\n// This should fail without weak mode, because of the glaring type error.\n\nfunction returns_a_string() {\n  return \"Hello\";\n}\n\nfunction expects_an_int() {\n  return returns_a_string() * 10;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow weak */\n// This should fail without weak mode, because of the glaring type error.\n\nfunction returns_a_string() {\n  return \"Hello\";\n}\n\nfunction expects_an_int() {\n  return returns_a_string() * 10;\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/weakmode/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/weakmode/should_fail_without_weak.js",
    "content": "/* @flow */\n// This should fail without weak mode, because of the glaring type error.\n\nfunction returns_a_string() {\n  return \"Hello\";\n}\n\nfunction expects_an_int() {\n  return returns_a_string() * 10;\n}\n"
  },
  {
    "path": "tests/flow/weakmode/should_pass_with_weak.js",
    "content": "/* @flow weak */\n// This should fail without weak mode, because of the glaring type error.\n\nfunction returns_a_string() {\n  return \"Hello\";\n}\n\nfunction expects_an_int() {\n  return returns_a_string() * 10;\n}\n"
  },
  {
    "path": "tests/flow/while/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`abnormal.js 1`] = `\n/* @flow */\n\nfunction foo(x: boolean) {\n  var ii = 10;\n  while (ii-- >= 0) {\n    if (x) {\n      continue;\n    }\n    return;\n  }\n  //console.log('this is still reachable');\n}\n\nfunction bar(x: boolean) {\n  var ii = 0;\n  while (ii > 0) {\n    return;\n  }\n  //console.log('this is still reachable');\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @flow */\n\nfunction foo(x: boolean) {\n  var ii = 10;\n  while (ii-- >= 0) {\n    if (x) {\n      continue;\n    }\n    return;\n  }\n  //console.log('this is still reachable');\n}\n\nfunction bar(x: boolean) {\n  var ii = 0;\n  while (ii > 0) {\n    return;\n  }\n  //console.log('this is still reachable');\n}\n\n`;\n\nexports[`test.js 1`] = `\nclass C {\n    m() { return new C; }\n}\nfunction blah() {}\nvar node: ?C = new C;\nwhile (node) {\n    var parent = node.m();\n    var cloneable: C = node;\n    blah();\n    node = parent.m();\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {\n  m() {\n    return new C();\n  }\n}\nfunction blah() {}\nvar node: ?C = new C();\nwhile (node) {\n  var parent = node.m();\n  var cloneable: C = node;\n  blah();\n  node = parent.m();\n}\n\n`;\n"
  },
  {
    "path": "tests/flow/while/abnormal.js",
    "content": "/* @flow */\n\nfunction foo(x: boolean) {\n  var ii = 10;\n  while (ii-- >= 0) {\n    if (x) {\n      continue;\n    }\n    return;\n  }\n  //console.log('this is still reachable');\n}\n\nfunction bar(x: boolean) {\n  var ii = 0;\n  while (ii > 0) {\n    return;\n  }\n  //console.log('this is still reachable');\n}\n"
  },
  {
    "path": "tests/flow/while/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/while/test.js",
    "content": "class C {\n    m() { return new C; }\n}\nfunction blah() {}\nvar node: ?C = new C;\nwhile (node) {\n    var parent = node.m();\n    var cloneable: C = node;\n    blah();\n    node = parent.m();\n}\n"
  },
  {
    "path": "tests/flow/window/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`window1.js 1`] = `\n/*\n@providesModule Window1\n*/\nmodule.exports = window.history;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/*\n@providesModule Window1\n*/\nmodule.exports = window.history;\n\n`;\n\nexports[`window2.js 1`] = `\n/* @providesModule Window2 */\n\nmodule.exports = window.parent;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* @providesModule Window2 */\n\nmodule.exports = window.parent;\n\n`;\n"
  },
  {
    "path": "tests/flow/window/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow/window/window1.js",
    "content": "/*\n@providesModule Window1\n*/\nmodule.exports = window.history;\n"
  },
  {
    "path": "tests/flow/window/window2.js",
    "content": "/* @providesModule Window2 */\n\nmodule.exports = window.parent;\n"
  },
  {
    "path": "tests/flow/x/XControllerURIBuilder.js",
    "content": "/**\n * @generated SignedSource<<13ca42bbc7fe91f15057861e18a77d88>>\n *\n * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n * !! This file is a check-in of a static_upstream project!      !!\n * !!                                                            !!\n * !! You should not modify this file directly. Instead:         !!\n * !! 1) Use `fjs use-upstream` to temporarily replace this with !!\n * !!    the latest version from upstream.                       !!\n * !! 2) Make your changes, test them, etc.                      !!\n * !! 3) Use `fjs push-upstream` to copy your changes back to    !!\n * !!    static_upstream.                                        !!\n * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n *\n * @providesModule XControllerURIBuilder\n * @typechecks\n */\n\n// ...\nclass XControllerURIBuilder {\n\n  // ...\n  getURI() {\n    // ...\n    var tokenRegex = new RegExp(/^\\{(\\?)?(.+?)\\}$/);\n    // ...\n  }\n}\n\nmodule.exports = XControllerURIBuilder;\n"
  },
  {
    "path": "tests/flow/x/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`XControllerURIBuilder.js 1`] = `\n/**\n * @generated SignedSource<<13ca42bbc7fe91f15057861e18a77d88>>\n *\n * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n * !! This file is a check-in of a static_upstream project!      !!\n * !!                                                            !!\n * !! You should not modify this file directly. Instead:         !!\n * !! 1) Use \\`fjs use-upstream\\` to temporarily replace this with !!\n * !!    the latest version from upstream.                       !!\n * !! 2) Make your changes, test them, etc.                      !!\n * !! 3) Use \\`fjs push-upstream\\` to copy your changes back to    !!\n * !!    static_upstream.                                        !!\n * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n *\n * @providesModule XControllerURIBuilder\n * @typechecks\n */\n\n// ...\nclass XControllerURIBuilder {\n\n  // ...\n  getURI() {\n    // ...\n    var tokenRegex = new RegExp(/^\\\\{(\\\\?)?(.+?)\\\\}$/);\n    // ...\n  }\n}\n\nmodule.exports = XControllerURIBuilder;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @generated SignedSource<<13ca42bbc7fe91f15057861e18a77d88>>\n *\n * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n * !! This file is a check-in of a static_upstream project!      !!\n * !!                                                            !!\n * !! You should not modify this file directly. Instead:         !!\n * !! 1) Use \\`fjs use-upstream\\` to temporarily replace this with !!\n * !!    the latest version from upstream.                       !!\n * !! 2) Make your changes, test them, etc.                      !!\n * !! 3) Use \\`fjs push-upstream\\` to copy your changes back to    !!\n * !!    static_upstream.                                        !!\n * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n *\n * @providesModule XControllerURIBuilder\n * @typechecks\n */\n\n// ...\nclass XControllerURIBuilder {\n  // ...\n  getURI() {\n    // ...\n    var tokenRegex = new RegExp(/^\\\\{(\\\\?)?(.+?)\\\\}$/);\n    // ...\n  }\n}\n\nmodule.exports = XControllerURIBuilder;\n\n`;\n"
  },
  {
    "path": "tests/flow/x/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow_array_comments/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nexport type FileMetaData = [\n  /* id */ string,\n  /* mtime */ number,\n  /* visited */ 0|1,\n  /* dependencies */ Array<string>,\n];\n\nexport type ModuleMetaData = [Path, /* type */ number];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport type FileMetaData = [\n  /* id */ string,\n  /* mtime */ number,\n  /* visited */ 0 | 1,\n  /* dependencies */ Array<string>\n];\n\nexport type ModuleMetaData = [Path, /* type */ number];\n\n`;\n"
  },
  {
    "path": "tests/flow_array_comments/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow_array_comments/test.js",
    "content": "export type FileMetaData = [\n  /* id */ string,\n  /* mtime */ number,\n  /* visited */ 0|1,\n  /* dependencies */ Array<string>,\n];\n\nexport type ModuleMetaData = [Path, /* type */ number];\n"
  },
  {
    "path": "tests/flow_array_union/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nlet arr: (number|string)[] = [];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nlet arr: (number | string)[] = [];\n\n`;\n"
  },
  {
    "path": "tests/flow_array_union/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow_array_union/test.js",
    "content": "let arr: (number|string)[] = [];\n"
  },
  {
    "path": "tests/flow_class_field/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`override.js 1`] = `\nclass Foo {\n  constructor: () => this;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass Foo {\n  constructor: () => this;\n}\n\n`;\n"
  },
  {
    "path": "tests/flow_class_field/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow_class_field/override.js",
    "content": "class Foo {\n  constructor: () => this;\n}\n"
  },
  {
    "path": "tests/flow_comments/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`arrow.js 1`] = `\n// Error\nconst beep = (data/*: Object*/) => {}\n\n// OK\nconst beep = (data/*: Object*/, secondData/*: Object*/) => {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Error\nconst beep = (data: Object) => {};\n\n// OK\nconst beep = (data: Object, secondData: Object) => {};\n\n`;\n\nexports[`arrow.js 2`] = `\n// Error\nconst beep = (data/*: Object*/) => {}\n\n// OK\nconst beep = (data/*: Object*/, secondData/*: Object*/) => {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Error\nconst beep = (data /*: Object*/) => {};\n\n// OK\nconst beep = (data /*: Object*/, secondData /*: Object*/) => {};\n\n`;\n\nexports[`object_type_annotation.js 1`] = `\ntype Props = // (DispatchProps & StateProps); WHY DON'T YOU WORK FLOW!!!!!!!!!\n{\n  isPlaying: boolean,\n};\n\ntype Props = { // (DispatchProps & StateProps); WHY DON'T YOU WORK FLOW!!!!!!!!!\n  isPlaying: boolean\n};\n\ntype Props = {\n  // (DispatchProps & StateProps); WHY DON'T YOU WORK FLOW!!!!!!!!!\n  isPlaying: boolean\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// (DispatchProps & StateProps); WHY DON'T YOU WORK FLOW!!!!!!!!!\ntype Props = {\n  isPlaying: boolean\n};\n\ntype Props = {\n  // (DispatchProps & StateProps); WHY DON'T YOU WORK FLOW!!!!!!!!!\n  isPlaying: boolean\n};\n\ntype Props = {\n  // (DispatchProps & StateProps); WHY DON'T YOU WORK FLOW!!!!!!!!!\n  isPlaying: boolean\n};\n\n`;\n\nexports[`object_type_annotation.js 2`] = `\ntype Props = // (DispatchProps & StateProps); WHY DON'T YOU WORK FLOW!!!!!!!!!\n{\n  isPlaying: boolean,\n};\n\ntype Props = { // (DispatchProps & StateProps); WHY DON'T YOU WORK FLOW!!!!!!!!!\n  isPlaying: boolean\n};\n\ntype Props = {\n  // (DispatchProps & StateProps); WHY DON'T YOU WORK FLOW!!!!!!!!!\n  isPlaying: boolean\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// (DispatchProps & StateProps); WHY DON'T YOU WORK FLOW!!!!!!!!!\ntype Props = {\n  isPlaying: boolean\n};\n\ntype Props = {\n  // (DispatchProps & StateProps); WHY DON'T YOU WORK FLOW!!!!!!!!!\n  isPlaying: boolean\n};\n\ntype Props = {\n  // (DispatchProps & StateProps); WHY DON'T YOU WORK FLOW!!!!!!!!!\n  isPlaying: boolean\n};\n\n`;\n"
  },
  {
    "path": "tests/flow_comments/arrow.js",
    "content": "// Error\nconst beep = (data/*: Object*/) => {}\n\n// OK\nconst beep = (data/*: Object*/, secondData/*: Object*/) => {}\n"
  },
  {
    "path": "tests/flow_comments/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n// FIXME arrow.js flow != babylon output\nrun_spec(__dirname, { parser: \"babylon\" });\n"
  },
  {
    "path": "tests/flow_comments/object_type_annotation.js",
    "content": "type Props = // (DispatchProps & StateProps); WHY DON'T YOU WORK FLOW!!!!!!!!!\n{\n  isPlaying: boolean,\n};\n\ntype Props = { // (DispatchProps & StateProps); WHY DON'T YOU WORK FLOW!!!!!!!!!\n  isPlaying: boolean\n};\n\ntype Props = {\n  // (DispatchProps & StateProps); WHY DON'T YOU WORK FLOW!!!!!!!!!\n  isPlaying: boolean\n};\n"
  },
  {
    "path": "tests/flow_function_parentheses/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`single.js 1`] = `\nconst selectorByPath:\n  Path\n => SomethingSelector<\n  SomethingUEditorContextType,\n  SomethingUEditorContextType,\n  SomethingBulkValue<string>\n> = memoizeWithArgs(/* ... */)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst selectorByPath: Path => SomethingSelector<\n  SomethingUEditorContextType,\n  SomethingUEditorContextType,\n  SomethingBulkValue<string>\n> = memoizeWithArgs(/* ... */);\n\n`;\n\nexports[`single.js 2`] = `\nconst selectorByPath:\n  Path\n => SomethingSelector<\n  SomethingUEditorContextType,\n  SomethingUEditorContextType,\n  SomethingBulkValue<string>\n> = memoizeWithArgs(/* ... */)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst selectorByPath: Path => SomethingSelector<\n  SomethingUEditorContextType,\n  SomethingUEditorContextType,\n  SomethingBulkValue<string>,\n> = memoizeWithArgs(/* ... */);\n\n`;\n\nexports[`test.js 1`] = `\ntype Banana = {\n  eat: string => boolean,\n};\n\ntype Hex = {n: 0x01};\n\ntype T = { method: (a) => void };\n\ntype T = { method(a): void };\n\ndeclare class X { method(a): void }\n\ndeclare function f(a): void;\n\nvar f: (a) => void;\n\ninterface F { m(string): number }\n\ninterface F { m: (string) => number }\n\nfunction f(o: { f: (string) => void }) {}\n\nfunction f(o: { f(string): void }) {}\n\ntype f = (...arg) => void;\n\ntype f = (/* comment */ arg) => void;\n\ntype f = (arg /* comment */) => void;\n\ntype f = (?arg) => void;\n\nclass X {\n  constructor(\n    ideConnectionFactory: child_process$ChildProcess => FlowIDEConnection =\n        defaultIDEConnectionFactory,\n  ) {\n  }\n}\n\ninterface F {\n  ideConnectionFactoryLongLongLong: (child_process$ChildProcess) => FlowIDEConnection\n}\n\ntype ExtractType = <A>(B<C>) => D\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype Banana = {\n  eat: string => boolean\n};\n\ntype Hex = { n: 0x01 };\n\ntype T = { method: a => void };\n\ntype T = { method(a): void };\n\ndeclare class X { method(a): void }\n\ndeclare function f(a): void;\n\nvar f: a => void;\n\ninterface F { m(string): number }\n\ninterface F { m: string => number }\n\nfunction f(o: { f: string => void }) {}\n\nfunction f(o: { f(string): void }) {}\n\ntype f = (...arg) => void;\n\ntype f = /* comment */ arg => void;\n\ntype f = arg /* comment */ => void;\n\ntype f = (?arg) => void;\n\nclass X {\n  constructor(\n    ideConnectionFactory: child_process$ChildProcess => FlowIDEConnection = defaultIDEConnectionFactory\n  ) {}\n}\n\ninterface F {\n  ideConnectionFactoryLongLongLong: child_process$ChildProcess => FlowIDEConnection\n}\n\ntype ExtractType = <A>(B<C>) => D;\n\n`;\n\nexports[`test.js 2`] = `\ntype Banana = {\n  eat: string => boolean,\n};\n\ntype Hex = {n: 0x01};\n\ntype T = { method: (a) => void };\n\ntype T = { method(a): void };\n\ndeclare class X { method(a): void }\n\ndeclare function f(a): void;\n\nvar f: (a) => void;\n\ninterface F { m(string): number }\n\ninterface F { m: (string) => number }\n\nfunction f(o: { f: (string) => void }) {}\n\nfunction f(o: { f(string): void }) {}\n\ntype f = (...arg) => void;\n\ntype f = (/* comment */ arg) => void;\n\ntype f = (arg /* comment */) => void;\n\ntype f = (?arg) => void;\n\nclass X {\n  constructor(\n    ideConnectionFactory: child_process$ChildProcess => FlowIDEConnection =\n        defaultIDEConnectionFactory,\n  ) {\n  }\n}\n\ninterface F {\n  ideConnectionFactoryLongLongLong: (child_process$ChildProcess) => FlowIDEConnection\n}\n\ntype ExtractType = <A>(B<C>) => D\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype Banana = {\n  eat: string => boolean,\n};\n\ntype Hex = { n: 0x01 };\n\ntype T = { method: a => void };\n\ntype T = { method(a): void };\n\ndeclare class X { method(a): void }\n\ndeclare function f(a): void;\n\nvar f: a => void;\n\ninterface F { m(string): number }\n\ninterface F { m: string => number }\n\nfunction f(o: { f: string => void }) {}\n\nfunction f(o: { f(string): void }) {}\n\ntype f = (...arg) => void;\n\ntype f = /* comment */ arg => void;\n\ntype f = arg /* comment */ => void;\n\ntype f = (?arg) => void;\n\nclass X {\n  constructor(\n    ideConnectionFactory: child_process$ChildProcess => FlowIDEConnection = defaultIDEConnectionFactory,\n  ) {}\n}\n\ninterface F {\n  ideConnectionFactoryLongLongLong: child_process$ChildProcess => FlowIDEConnection,\n}\n\ntype ExtractType = <A>(B<C>) => D;\n\n`;\n"
  },
  {
    "path": "tests/flow_function_parentheses/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\nrun_spec(__dirname, { trailingComma: \"all\" }, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow_function_parentheses/single.js",
    "content": "const selectorByPath:\n  Path\n => SomethingSelector<\n  SomethingUEditorContextType,\n  SomethingUEditorContextType,\n  SomethingBulkValue<string>\n> = memoizeWithArgs(/* ... */)\n"
  },
  {
    "path": "tests/flow_function_parentheses/test.js",
    "content": "type Banana = {\n  eat: string => boolean,\n};\n\ntype Hex = {n: 0x01};\n\ntype T = { method: (a) => void };\n\ntype T = { method(a): void };\n\ndeclare class X { method(a): void }\n\ndeclare function f(a): void;\n\nvar f: (a) => void;\n\ninterface F { m(string): number }\n\ninterface F { m: (string) => number }\n\nfunction f(o: { f: (string) => void }) {}\n\nfunction f(o: { f(string): void }) {}\n\ntype f = (...arg) => void;\n\ntype f = (/* comment */ arg) => void;\n\ntype f = (arg /* comment */) => void;\n\ntype f = (?arg) => void;\n\nclass X {\n  constructor(\n    ideConnectionFactory: child_process$ChildProcess => FlowIDEConnection =\n        defaultIDEConnectionFactory,\n  ) {\n  }\n}\n\ninterface F {\n  ideConnectionFactoryLongLongLong: (child_process$ChildProcess) => FlowIDEConnection\n}\n\ntype ExtractType = <A>(B<C>) => D\n"
  },
  {
    "path": "tests/flow_generic/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`break.js 1`] = `\nvar X = {\n  perform: function<    \n     A, B, C, D, E, F, G,     \n     T: (a: A, b: B, c: C, d: D, e: E, f: F) => G // eslint-disable-line space-before-function-paren\n   >(     \n     method: T, scope: any,     \n     a: A, b: B, c: C, d: D, e: E, f: F,    \n   ): G {\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar X = {\n  perform: function<\n    A,\n    B,\n    C,\n    D,\n    E,\n    F,\n    G,\n    T: (a: A, b: B, c: C, d: D, e: E, f: F) => G // eslint-disable-line space-before-function-paren\n  >(method: T, scope: any, a: A, b: B, c: C, d: D, e: E, f: F): G {}\n};\n\n`;\n\nexports[`break.js 2`] = `\nvar X = {\n  perform: function<    \n     A, B, C, D, E, F, G,     \n     T: (a: A, b: B, c: C, d: D, e: E, f: F) => G // eslint-disable-line space-before-function-paren\n   >(     \n     method: T, scope: any,     \n     a: A, b: B, c: C, d: D, e: E, f: F,    \n   ): G {\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar X = {\n  perform: function<\n    A,\n    B,\n    C,\n    D,\n    E,\n    F,\n    G,\n    T: (a: A, b: B, c: C, d: D, e: E, f: F) => G, // eslint-disable-line space-before-function-paren\n  >(method: T, scope: any, a: A, b: B, c: C, d: D, e: E, f: F): G {},\n};\n\n`;\n\nexports[`generic.js 1`] = `\nconst identity = <T>(t: T): T => t;\nconst a = 1;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst identity = <T>(t: T): T => t;\nconst a = 1;\n\n`;\n\nexports[`generic.js 2`] = `\nconst identity = <T>(t: T): T => t;\nconst a = 1;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst identity = <T>(t: T): T => t;\nconst a = 1;\n\n`;\n\nexports[`nullable.js 1`] = `\nfunction formatEntireFile(\n  fileVersion: FileVersion,\n  range: atom$Range,\n): Promise<?{\n  newCursor?: number,\n  formatted: string,\n}> {}\n\nfunction foo(): Promise<?boolean> {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction formatEntireFile(\n  fileVersion: FileVersion,\n  range: atom$Range\n): Promise<?{\n  newCursor?: number,\n  formatted: string\n}> {}\n\nfunction foo(): Promise<?boolean> {}\n\n`;\n\nexports[`nullable.js 2`] = `\nfunction formatEntireFile(\n  fileVersion: FileVersion,\n  range: atom$Range,\n): Promise<?{\n  newCursor?: number,\n  formatted: string,\n}> {}\n\nfunction foo(): Promise<?boolean> {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction formatEntireFile(\n  fileVersion: FileVersion,\n  range: atom$Range,\n): Promise<?{\n  newCursor?: number,\n  formatted: string,\n}> {}\n\nfunction foo(): Promise<?boolean> {}\n\n`;\n\nexports[`trailing.js 1`] = `\ntype State = {\n  errors: Immutable.Map<\n    Ahohohhohohohohohohohohohohooh,\n    Fbt | Immutable.Map<ErrorIndex, Fbt>\n  >,\n  shouldValidate: boolean,\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype State = {\n  errors: Immutable.Map<\n    Ahohohhohohohohohohohohohohooh,\n    Fbt | Immutable.Map<ErrorIndex, Fbt>\n  >,\n  shouldValidate: boolean\n};\n\n`;\n\nexports[`trailing.js 2`] = `\ntype State = {\n  errors: Immutable.Map<\n    Ahohohhohohohohohohohohohohooh,\n    Fbt | Immutable.Map<ErrorIndex, Fbt>\n  >,\n  shouldValidate: boolean,\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype State = {\n  errors: Immutable.Map<\n    Ahohohhohohohohohohohohohohooh,\n    Fbt | Immutable.Map<ErrorIndex, Fbt>,\n  >,\n  shouldValidate: boolean,\n};\n\n`;\n\nexports[`type.js 1`] = `\ntype F = <T>(T) => T;\ntype G = (<A, B>(A) => B);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype F = <T>(T) => T;\ntype G = <A, B>(A) => B;\n\n`;\n\nexports[`type.js 2`] = `\ntype F = <T>(T) => T;\ntype G = (<A, B>(A) => B);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype F = <T>(T) => T;\ntype G = <A, B>(A) => B;\n\n`;\n\nexports[`union.js 1`] = `\ntype Foo = Promise<\n  { ok: true, bar: string, baz: SomeOtherLongType } | \n  { ok: false, bar: SomeOtherLongType }\n>;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype Foo = Promise<\n  | { ok: true, bar: string, baz: SomeOtherLongType }\n  | { ok: false, bar: SomeOtherLongType }\n>;\n\n`;\n\nexports[`union.js 2`] = `\ntype Foo = Promise<\n  { ok: true, bar: string, baz: SomeOtherLongType } | \n  { ok: false, bar: SomeOtherLongType }\n>;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype Foo = Promise<\n  | { ok: true, bar: string, baz: SomeOtherLongType }\n  | { ok: false, bar: SomeOtherLongType },\n>;\n\n`;\n"
  },
  {
    "path": "tests/flow_generic/break.js",
    "content": "var X = {\n  perform: function<    \n     A, B, C, D, E, F, G,     \n     T: (a: A, b: B, c: C, d: D, e: E, f: F) => G // eslint-disable-line space-before-function-paren\n   >(     \n     method: T, scope: any,     \n     a: A, b: B, c: C, d: D, e: E, f: F,    \n   ): G {\n  }\n}\n"
  },
  {
    "path": "tests/flow_generic/generic.js",
    "content": "const identity = <T>(t: T): T => t;\nconst a = 1;\n"
  },
  {
    "path": "tests/flow_generic/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\nrun_spec(__dirname, { trailingComma: \"all\" }, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow_generic/nullable.js",
    "content": "function formatEntireFile(\n  fileVersion: FileVersion,\n  range: atom$Range,\n): Promise<?{\n  newCursor?: number,\n  formatted: string,\n}> {}\n\nfunction foo(): Promise<?boolean> {}\n"
  },
  {
    "path": "tests/flow_generic/trailing.js",
    "content": "type State = {\n  errors: Immutable.Map<\n    Ahohohhohohohohohohohohohohooh,\n    Fbt | Immutable.Map<ErrorIndex, Fbt>\n  >,\n  shouldValidate: boolean,\n};\n"
  },
  {
    "path": "tests/flow_generic/type.js",
    "content": "type F = <T>(T) => T;\ntype G = (<A, B>(A) => B);\n"
  },
  {
    "path": "tests/flow_generic/union.js",
    "content": "type Foo = Promise<\n  { ok: true, bar: string, baz: SomeOtherLongType } | \n  { ok: false, bar: SomeOtherLongType }\n>;\n"
  },
  {
    "path": "tests/flow_import_type_specifier/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n/**\n * @flow\n */\n\nimport { Foo, type Baz } from \"../module\";\nimport type {} from 'foo';\n\nimport type {somethingSuperLongsomethingSuperLong} from 'somethingSuperLongsomethingSuperLongsomethingSuperLong'\nimport type {a, somethingSuperLongsomethingSuperLong} from 'somethingSuperLongsomethingSuperLongsomethingSuperLong'\n\nimport transformRouterContext, { type TransformedContextRouter } from '../../helpers/transformRouterContext';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * @flow\n */\n\nimport { Foo, type Baz } from \"../module\";\nimport type {} from \"foo\";\n\nimport type { somethingSuperLongsomethingSuperLong } from \"somethingSuperLongsomethingSuperLongsomethingSuperLong\";\nimport type {\n  a,\n  somethingSuperLongsomethingSuperLong\n} from \"somethingSuperLongsomethingSuperLongsomethingSuperLong\";\n\nimport transformRouterContext, {\n  type TransformedContextRouter\n} from \"../../helpers/transformRouterContext\";\n\n`;\n"
  },
  {
    "path": "tests/flow_import_type_specifier/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow_import_type_specifier/test.js",
    "content": "/**\n * @flow\n */\n\nimport { Foo, type Baz } from \"../module\";\nimport type {} from 'foo';\n\nimport type {somethingSuperLongsomethingSuperLong} from 'somethingSuperLongsomethingSuperLongsomethingSuperLong'\nimport type {a, somethingSuperLongsomethingSuperLong} from 'somethingSuperLongsomethingSuperLongsomethingSuperLong'\n\nimport transformRouterContext, { type TransformedContextRouter } from '../../helpers/transformRouterContext';\n"
  },
  {
    "path": "tests/flow_jsx/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`return_type.js 1`] = `\nconst fail = (): X => <x />;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst fail = (): X => <x />;\n\n`;\n"
  },
  {
    "path": "tests/flow_jsx/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow_jsx/return_type.js",
    "content": "const fail = (): X => <x />;\n"
  },
  {
    "path": "tests/flow_method/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`comment.js 1`] = `\ntype Foo = {\n  method(\n    arg: number, // I belong with baz\n    qux: string\n  ) : void\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype Foo = {\n  method(\n    arg: number, // I belong with baz\n    qux: string\n  ): void\n};\n\n`;\n\nexports[`method.js 1`] = `\ntype T = { method: () => void };\ntype T = { method(): void };\ndeclare class X { method(): void }\ndeclare function f(): void;\nvar f: () => void;\n\ndeclare class X {\n  static deserialize(): mixed,\n  static deserialize: () => mixed,\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype T = { method: () => void };\ntype T = { method(): void };\ndeclare class X { method(): void }\ndeclare function f(): void;\nvar f: () => void;\n\ndeclare class X {\n  static deserialize(): mixed,\n  static deserialize: () => mixed\n}\n\n`;\n"
  },
  {
    "path": "tests/flow_method/comment.js",
    "content": "type Foo = {\n  method(\n    arg: number, // I belong with baz\n    qux: string\n  ) : void\n}\n"
  },
  {
    "path": "tests/flow_method/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow_method/method.js",
    "content": "type T = { method: () => void };\ntype T = { method(): void };\ndeclare class X { method(): void }\ndeclare function f(): void;\nvar f: () => void;\n\ndeclare class X {\n  static deserialize(): mixed,\n  static deserialize: () => mixed,\n}\n"
  },
  {
    "path": "tests/flow_object_comment/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`flow_object_comment.js 1`] = `\nexport default (\n  {\n    foo,\n    bar\n  }: {\n    // comment\n    foo?: Object,\n    // comment 2\n    bar?: Object,\n  },\n) => {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default ({\n  foo,\n  bar\n}: {\n  // comment\n  foo?: Object,\n  // comment 2\n  bar?: Object\n}) => {};\n\n`;\n"
  },
  {
    "path": "tests/flow_object_comment/flow_object_comment.js",
    "content": "export default (\n  {\n    foo,\n    bar\n  }: {\n    // comment\n    foo?: Object,\n    // comment 2\n    bar?: Object,\n  },\n) => {}\n"
  },
  {
    "path": "tests/flow_object_comment/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow_object_order/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`order.js 1`] = `\ntype Foo = {\n  // a\n  alpha: 'hello',\n\n  // b\n  [key: string]: void,\n  // c\n\n  beta: 10,\n\n  // d\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype Foo = {\n  // a\n  alpha: \"hello\",\n\n  // b\n  [key: string]: void,\n  // c\n\n  beta: 10\n\n  // d\n};\n\n`;\n\nexports[`order.js 2`] = `\ntype Foo = {\n  // a\n  alpha: 'hello',\n\n  // b\n  [key: string]: void,\n  // c\n\n  beta: 10,\n\n  // d\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype Foo = {\n  // a\n  alpha: \"hello\",\n\n  // b\n  [key: string]: void,\n  // c\n\n  beta: 10,\n\n  // d\n};\n\n`;\n"
  },
  {
    "path": "tests/flow_object_order/jsfmt.spec.js",
    "content": "run_spec(__dirname);\nrun_spec(__dirname, { trailingComma: \"all\" });\n"
  },
  {
    "path": "tests/flow_object_order/order.js",
    "content": "type Foo = {\n  // a\n  alpha: 'hello',\n\n  // b\n  [key: string]: void,\n  // c\n\n  beta: 10,\n\n  // d\n}\n"
  },
  {
    "path": "tests/flow_return_arrow/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`issue-1249.js 1`] = `\ntype Bar = ( number | string ) => number;\ntype X = (?(number, number) => number) => void;\ntype X = ?((number, number) => number) => void;\ntype X = ?(number, number) => number => void;\ntype X = 1234 => void;\ntype X = 'abc' => void;\ntype X = true => void;\ntype X = false => void;\ntype X = boolean => void;\ntype X = number => void;\ntype X = void => void;\ntype X = null => void;\ntype X = any => void;\ntype X = empty => void;\ntype X = mixed => void;\ntype X = string => void;\ntype X = abc => void;\ntype X = a | b => void;\ntype X = (a | b) => void;\ntype X = a & b => void;\ntype X = (a & b) => void;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype Bar = (number | string) => number;\ntype X = (?(number, number) => number) => void;\ntype X = ?((number, number) => number) => void;\ntype X = ?(number, number) => number => void;\ntype X = (1234) => void;\ntype X = (\"abc\") => void;\ntype X = true => void;\ntype X = false => void;\ntype X = boolean => void;\ntype X = number => void;\ntype X = void => void;\ntype X = null => void;\ntype X = any => void;\ntype X = empty => void;\ntype X = mixed => void;\ntype X = string => void;\ntype X = abc => void;\ntype X = a | (b => void);\ntype X = (a | b) => void;\ntype X = a & (b => void);\ntype X = (a & b) => void;\n\n`;\n\nexports[`parens.js 1`] = `\nconst f = (): (string => string) => {};\nconst f = (): (a | string => string) => {};\nconst f = (): (a & string => string) => {};\nfunction f(): string => string {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst f = (): (string => string) => {};\nconst f = (): a | (string => string) => {};\nconst f = (): a & (string => string) => {};\nfunction f(): string => string {}\n\n`;\n"
  },
  {
    "path": "tests/flow_return_arrow/issue-1249.js",
    "content": "type Bar = ( number | string ) => number;\ntype X = (?(number, number) => number) => void;\ntype X = ?((number, number) => number) => void;\ntype X = ?(number, number) => number => void;\ntype X = 1234 => void;\ntype X = 'abc' => void;\ntype X = true => void;\ntype X = false => void;\ntype X = boolean => void;\ntype X = number => void;\ntype X = void => void;\ntype X = null => void;\ntype X = any => void;\ntype X = empty => void;\ntype X = mixed => void;\ntype X = string => void;\ntype X = abc => void;\ntype X = a | b => void;\ntype X = (a | b) => void;\ntype X = a & b => void;\ntype X = (a & b) => void;\n"
  },
  {
    "path": "tests/flow_return_arrow/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/flow_return_arrow/parens.js",
    "content": "const f = (): (string => string) => {};\nconst f = (): (a | string => string) => {};\nconst f = (): (a & string => string) => {};\nfunction f(): string => string {}\n"
  },
  {
    "path": "tests/flow_type_declarations/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`declare_type.js 1`] = `\ndeclare type A = string;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare type A = string;\n\n`;\n\nexports[`long.js 1`] = `\nexport type AdamPlacementValidationSingleErrorKey =\n  'SOME_FANCY_TARGETS.GLOBAL_TARGET';\n\nexport type SomeReallyLongLongLongLongLongLongLongLongLongLongLongLongLongLongKey = true;\n\nexport type SomeOtherLongLongLongLongLongLongLongLongLongLongLongLongLongLongKey = null;\n\ntype SomeOtherLongLongLongLongLongLongLongLongLongLongLongLongLongLongKey = SomeReallyLongLongLongLongLongLongIdentifier;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport type AdamPlacementValidationSingleErrorKey =\n  \"SOME_FANCY_TARGETS.GLOBAL_TARGET\";\n\nexport type SomeReallyLongLongLongLongLongLongLongLongLongLongLongLongLongLongKey = true;\n\nexport type SomeOtherLongLongLongLongLongLongLongLongLongLongLongLongLongLongKey = null;\n\ntype SomeOtherLongLongLongLongLongLongLongLongLongLongLongLongLongLongKey = SomeReallyLongLongLongLongLongLongIdentifier;\n\n`;\n"
  },
  {
    "path": "tests/flow_type_declarations/declare_type.js",
    "content": "declare type A = string;\n"
  },
  {
    "path": "tests/flow_type_declarations/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow_type_declarations/long.js",
    "content": "export type AdamPlacementValidationSingleErrorKey =\n  'SOME_FANCY_TARGETS.GLOBAL_TARGET';\n\nexport type SomeReallyLongLongLongLongLongLongLongLongLongLongLongLongLongLongKey = true;\n\nexport type SomeOtherLongLongLongLongLongLongLongLongLongLongLongLongLongLongKey = null;\n\ntype SomeOtherLongLongLongLongLongLongLongLongLongLongLongLongLongLongKey = SomeReallyLongLongLongLongLongLongIdentifier;\n"
  },
  {
    "path": "tests/flow_type_spread/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`comments.js 1`] = `\ntype X = {...Y/**/};\ntype X = {/**/...Y};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype X = { ...Y /**/ };\ntype X = { /**/ ...Y };\n\n`;\n"
  },
  {
    "path": "tests/flow_type_spread/comments.js",
    "content": "type X = {...Y/**/};\ntype X = {/**/...Y};\n"
  },
  {
    "path": "tests/flow_type_spread/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow_union/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`union.js 1`] = `\ninterface RelayProps {\n  articles: Array<{\n    __id: string,\n  } | null> | null | void | 1,\n}\n\ninterface RelayProps {\n  articles: Array<{\n    __id: string,\n  } | null> | null | void,\n}\n\nexport function aPrettyLongFunction(aRatherLongParamName: string | null): string {}\n\nexport function aPrettyLongFunctionA(aRatherLongParameterName: {} | null): string[] {}\nexport function aPrettyLongFunctionB(aRatherLongParameterName: Function | null): string[] {}\nexport interface MyInterface {}\nexport function aPrettyLongFunctionC(aRatherLongParameterName: MyInterface | null): string[] {}\nexport type MyType = MyInterface\nexport function aPrettyLongFunctionD(aRatherLongParameterName: MyType | null): string[] {}\n\nexport function aShortFn(aShortParmName: MyType | null): string[] {}\n\nexport function aPrettyLongFunctionE(aRatherLongParameterName: Array<{\n  __id: string,\n} | null> | null | void): string[] {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface RelayProps {\n  articles:\n    | Array<{\n        __id: string\n      } | null>\n    | null\n    | void\n    | 1\n}\n\ninterface RelayProps {\n  articles: Array<{\n    __id: string\n  } | null> | null | void\n}\n\nexport function aPrettyLongFunction(\n  aRatherLongParamName: string | null\n): string {}\n\nexport function aPrettyLongFunctionA(\n  aRatherLongParameterName: {} | null\n): string[] {}\nexport function aPrettyLongFunctionB(\n  aRatherLongParameterName: Function | null\n): string[] {}\nexport interface MyInterface {}\nexport function aPrettyLongFunctionC(\n  aRatherLongParameterName: MyInterface | null\n): string[] {}\nexport type MyType = MyInterface;\nexport function aPrettyLongFunctionD(\n  aRatherLongParameterName: MyType | null\n): string[] {}\n\nexport function aShortFn(aShortParmName: MyType | null): string[] {}\n\nexport function aPrettyLongFunctionE(\n  aRatherLongParameterName: Array<{\n    __id: string\n  } | null> | null | void\n): string[] {}\n\n`;\n"
  },
  {
    "path": "tests/flow_union/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow_union/union.js",
    "content": "interface RelayProps {\n  articles: Array<{\n    __id: string,\n  } | null> | null | void | 1,\n}\n\ninterface RelayProps {\n  articles: Array<{\n    __id: string,\n  } | null> | null | void,\n}\n\nexport function aPrettyLongFunction(aRatherLongParamName: string | null): string {}\n\nexport function aPrettyLongFunctionA(aRatherLongParameterName: {} | null): string[] {}\nexport function aPrettyLongFunctionB(aRatherLongParameterName: Function | null): string[] {}\nexport interface MyInterface {}\nexport function aPrettyLongFunctionC(aRatherLongParameterName: MyInterface | null): string[] {}\nexport type MyType = MyInterface\nexport function aPrettyLongFunctionD(aRatherLongParameterName: MyType | null): string[] {}\n\nexport function aShortFn(aShortParmName: MyType | null): string[] {}\n\nexport function aPrettyLongFunctionE(aRatherLongParameterName: Array<{\n  __id: string,\n} | null> | null | void): string[] {}\n"
  },
  {
    "path": "tests/flow_variance/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`variance.js 1`] = `\nclass Route {\n  static +param: T;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass Route {\n  static +param: T;\n}\n\n`;\n"
  },
  {
    "path": "tests/flow_variance/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/flow_variance/variance.js",
    "content": "class Route {\n  static +param: T;\n}\n"
  },
  {
    "path": "tests/for/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`comment.js 1`] = `\nfor (x\n/*a*/\nin //b\ny) //c\n;\n\nfor (x in /*a*/ //b\ny); //c\n\nfor (x /*a*/ in y); //b //c\n\nfor (x\n//a\nin y);\n\nfor(x in\n//a\ny);\n\nfor (x\n/*a*/\nof //b\ny) //c\n;\n\nfor (x of /*a*/ //b\ny); //c\n\nfor (x /*a*/ of y); //b //c\n\nfor (x\n//a\nof y);\n\nfor(x of\n//a\ny);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/*a*/\nfor (x in y); //b //c\n\nfor (x /*a*/ in y); //b //c\n\nfor (x /*a*/ in y); //b //c\n\n//a\nfor (x in y);\n\n//a\nfor (x in y);\n\n/*a*/\nfor (x of y); //b //c\n\nfor (x /*a*/ of y); //b //c\n\nfor (x /*a*/ of y); //b //c\n\n//a\nfor (x of y);\n\n//a\nfor (x of y);\n\n`;\n\nexports[`for.js 1`] = `\nfor (;;) {}\nfor (var i = 0; i < 10; ++i) {}\n\nfor (;;) 0;\nfor (var i = 0; i < 10; ++i) 0;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfor (;;) {}\nfor (var i = 0; i < 10; ++i) {}\n\nfor (;;) 0;\nfor (var i = 0; i < 10; ++i) 0;\n\n`;\n\nexports[`in.js 1`] = `\nfor ((x in a);;) {}\nfor (a=(a in b);;) {}\nfor (let a = (b in c); ; );\nfor (a && (b in c); ; );\nfor (a => (b in c); ; );\nfunction* g() {\n  for (yield (a in b); ; );\n}\nasync function f() {\n  for (await (a in b); ; );\n}\nfor (a in b) 0;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfor ((x in a); ; ) {}\nfor (a = (a in b); ; ) {}\nfor (let a = (b in c); ; );\nfor (a && (b in c); ; );\nfor (a => (b in c); ; );\nfunction* g() {\n  for (yield (a in b); ; );\n}\nasync function f() {\n  for (await (a in b); ; );\n}\nfor (a in b) 0;\n\n`;\n\nexports[`var.js 1`] = `\nfor (a in b) var c = {}; [];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfor (a in b) var c = {};\n[];\n\n`;\n"
  },
  {
    "path": "tests/for/comment.js",
    "content": "for (x\n/*a*/\nin //b\ny) //c\n;\n\nfor (x in /*a*/ //b\ny); //c\n\nfor (x /*a*/ in y); //b //c\n\nfor (x\n//a\nin y);\n\nfor(x in\n//a\ny);\n\nfor (x\n/*a*/\nof //b\ny) //c\n;\n\nfor (x of /*a*/ //b\ny); //c\n\nfor (x /*a*/ of y); //b //c\n\nfor (x\n//a\nof y);\n\nfor(x of\n//a\ny);\n"
  },
  {
    "path": "tests/for/for.js",
    "content": "for (;;) {}\nfor (var i = 0; i < 10; ++i) {}\n\nfor (;;) 0;\nfor (var i = 0; i < 10; ++i) 0;\n"
  },
  {
    "path": "tests/for/in.js",
    "content": "for ((x in a);;) {}\nfor (a=(a in b);;) {}\nfor (let a = (b in c); ; );\nfor (a && (b in c); ; );\nfor (a => (b in c); ; );\nfunction* g() {\n  for (yield (a in b); ; );\n}\nasync function f() {\n  for (await (a in b); ; );\n}\nfor (a in b) 0;\n"
  },
  {
    "path": "tests/for/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/for/var.js",
    "content": "for (a in b) var c = {}; [];\n"
  },
  {
    "path": "tests/function/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`function_expression.js 1`] = `\n(function() {}).length\ntypeof (function() {});\nexport default (function() {})();\n(function() {})()\\`\\`;\n(function() {})\\`\\`;\nnew (function() {});\n(function() {});\na = function f() {} || b;\n(function() {} && a);\na + function() {};\nnew function() {};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n(function() {}.length);\ntypeof function() {};\nexport default (function() {})();\n(function() {})()\\`\\`;\n(function() {})\\`\\`;\nnew function() {}();\n(function() {});\na = function f() {} || b;\n(function() {} && a);\na + function() {};\nnew function() {}();\n\n`;\n\nexports[`function_expression.js 2`] = `\n(function() {}).length\ntypeof (function() {});\nexport default (function() {})();\n(function() {})()\\`\\`;\n(function() {})\\`\\`;\nnew (function() {});\n(function() {});\na = function f() {} || b;\n(function() {} && a);\na + function() {};\nnew function() {};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n(function(){}.length);\ntypeof function(){};\nexport default (function(){})();\n(function(){})()\\`\\`;\n(function(){})\\`\\`;\nnew function(){}();\n(function(){});\na = function f(){} || b;\n(function(){} && a);\na + function(){};\nnew function(){}();\n\n`;\n\nexports[`single_expand.js 1`] = `\nfunction onDidInsertSuggestion({\n  editor,\n  triggerPosition,\n  re\n}): Promise<void> {\n}\n\nclass X {\n  async onDidInsertSuggestion({editor, triggerPosition, suggestion}): Promise<\n    void\n  > {\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction onDidInsertSuggestion({\n  editor,\n  triggerPosition,\n  re\n}): Promise<void> {}\n\nclass X {\n  async onDidInsertSuggestion({\n    editor,\n    triggerPosition,\n    suggestion\n  }): Promise<void> {}\n}\n\n`;\n\nexports[`single_expand.js 2`] = `\nfunction onDidInsertSuggestion({\n  editor,\n  triggerPosition,\n  re\n}): Promise<void> {\n}\n\nclass X {\n  async onDidInsertSuggestion({editor, triggerPosition, suggestion}): Promise<\n    void\n  > {\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction onDidInsertSuggestion({ editor, triggerPosition, re }): Promise<void>{}\n\nclass X {\n  async onDidInsertSuggestion({\n    editor,\n    triggerPosition,\n    suggestion\n  }): Promise<void> {}\n}\n\n`;\n"
  },
  {
    "path": "tests/function/function_expression.js",
    "content": "(function() {}).length\ntypeof (function() {});\nexport default (function() {})();\n(function() {})()``;\n(function() {})``;\nnew (function() {});\n(function() {});\na = function f() {} || b;\n(function() {} && a);\na + function() {};\nnew function() {};\n"
  },
  {
    "path": "tests/function/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\nrun_spec(__dirname, { noSpaceEmptyFn: true }, [\"typescript\"]);\n"
  },
  {
    "path": "tests/function/single_expand.js",
    "content": "function onDidInsertSuggestion({\n  editor,\n  triggerPosition,\n  re\n}): Promise<void> {\n}\n\nclass X {\n  async onDidInsertSuggestion({editor, triggerPosition, suggestion}): Promise<\n    void\n  > {\n  }\n}\n"
  },
  {
    "path": "tests/function_single_destructuring/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nfunction StatelessFunctionalComponent({\n  isActive,\n  onFiltersUpdated,\n  onSelect,\n  onSubmitAndDeselect,\n  onCancel,\n  searchFilters,\n  title,\n  items,\n}) {\n  return <div />\n}\n\nfunction StatelessFunctionalComponent({\n  isActive,\n  onFiltersUpdated,\n  onSelect,\n  onSubmitAndDeselect,\n  onCancel,\n  searchFilters,\n  title,\n  items,\n}: MyType | null | void) {\n  return <div />\n}\n\nconst StatelessFunctionalComponent = ({\n  isActive,\n  onFiltersUpdated,\n  onSelect,\n  onSubmitAndDeselect,\n  onCancel,\n  searchFilters,\n  title,\n  items,\n}: {\n  isActive: number,\n  onFiltersUpdated: number,\n  onSelect: number,\n  onSubmitAndDeselect: number,\n  onCancel: number,\n  searchFilters: number,\n  title: number,\n  items: number,\n}) => {\n  return <div />\n};\n\nclass C {\n  StatelessFunctionalComponent({\n    isActive,\n    onFiltersUpdated,\n    onSelect,\n    onSubmitAndDeselect,\n    onCancel,\n    searchFilters,\n    title,\n    items,\n  }) {\n    return <div />\n  }\n}\n\ntype T = ({\n  isActive: number,\n  onFiltersUpdated: number,\n  onSelect: number,\n  onSubmitAndDeselect: number,\n  onCancel: number,\n  searchFilters: number,\n  title: number,\n  items: number,\n}) => void;\n\nconst X = (props: {\n  a: boolean,\n}) =>\n  <A />;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction StatelessFunctionalComponent({\n  isActive,\n  onFiltersUpdated,\n  onSelect,\n  onSubmitAndDeselect,\n  onCancel,\n  searchFilters,\n  title,\n  items\n}) {\n  return <div />;\n}\n\nfunction StatelessFunctionalComponent({\n  isActive,\n  onFiltersUpdated,\n  onSelect,\n  onSubmitAndDeselect,\n  onCancel,\n  searchFilters,\n  title,\n  items\n}: MyType | null | void) {\n  return <div />;\n}\n\nconst StatelessFunctionalComponent = ({\n  isActive,\n  onFiltersUpdated,\n  onSelect,\n  onSubmitAndDeselect,\n  onCancel,\n  searchFilters,\n  title,\n  items\n}: {\n  isActive: number,\n  onFiltersUpdated: number,\n  onSelect: number,\n  onSubmitAndDeselect: number,\n  onCancel: number,\n  searchFilters: number,\n  title: number,\n  items: number\n}) => {\n  return <div />;\n};\n\nclass C {\n  StatelessFunctionalComponent({\n    isActive,\n    onFiltersUpdated,\n    onSelect,\n    onSubmitAndDeselect,\n    onCancel,\n    searchFilters,\n    title,\n    items\n  }) {\n    return <div />;\n  }\n}\n\ntype T = ({\n  isActive: number,\n  onFiltersUpdated: number,\n  onSelect: number,\n  onSubmitAndDeselect: number,\n  onCancel: number,\n  searchFilters: number,\n  title: number,\n  items: number\n}) => void;\n\nconst X = (props: { a: boolean }) => <A />;\n\n`;\n"
  },
  {
    "path": "tests/function_single_destructuring/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/function_single_destructuring/test.js",
    "content": "function StatelessFunctionalComponent({\n  isActive,\n  onFiltersUpdated,\n  onSelect,\n  onSubmitAndDeselect,\n  onCancel,\n  searchFilters,\n  title,\n  items,\n}) {\n  return <div />\n}\n\nfunction StatelessFunctionalComponent({\n  isActive,\n  onFiltersUpdated,\n  onSelect,\n  onSubmitAndDeselect,\n  onCancel,\n  searchFilters,\n  title,\n  items,\n}: MyType | null | void) {\n  return <div />\n}\n\nconst StatelessFunctionalComponent = ({\n  isActive,\n  onFiltersUpdated,\n  onSelect,\n  onSubmitAndDeselect,\n  onCancel,\n  searchFilters,\n  title,\n  items,\n}: {\n  isActive: number,\n  onFiltersUpdated: number,\n  onSelect: number,\n  onSubmitAndDeselect: number,\n  onCancel: number,\n  searchFilters: number,\n  title: number,\n  items: number,\n}) => {\n  return <div />\n};\n\nclass C {\n  StatelessFunctionalComponent({\n    isActive,\n    onFiltersUpdated,\n    onSelect,\n    onSubmitAndDeselect,\n    onCancel,\n    searchFilters,\n    title,\n    items,\n  }) {\n    return <div />\n  }\n}\n\ntype T = ({\n  isActive: number,\n  onFiltersUpdated: number,\n  onSelect: number,\n  onSubmitAndDeselect: number,\n  onCancel: number,\n  searchFilters: number,\n  title: number,\n  items: number,\n}) => void;\n\nconst X = (props: {\n  a: boolean,\n}) =>\n  <A />;\n"
  },
  {
    "path": "tests/graphql_arguments/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`hello.graphql 1`] = `\n{\n  short(var: $var, int: 5, float: 5.6, bool: true, string: \"hello world!\")\n  long(var: $thisIsAReallyLongVariableNameRight, int: 52342342342, float: 5.6, bool: true, string: \"hello world this is a very long string!\")\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n{\n  short(var: $var, int: 5, float: 5.6, bool: true, string: \"hello world!\")\n  long(\n    var: $thisIsAReallyLongVariableNameRight\n    int: 52342342342\n    float: 5.6\n    bool: true\n    string: \"hello world this is a very long string!\"\n  )\n}\n\n`;\n"
  },
  {
    "path": "tests/graphql_arguments/hello.graphql",
    "content": "{\n  short(var: $var, int: 5, float: 5.6, bool: true, string: \"hello world!\")\n  long(var: $thisIsAReallyLongVariableNameRight, int: 52342342342, float: 5.6, bool: true, string: \"hello world this is a very long string!\")\n}\n"
  },
  {
    "path": "tests/graphql_arguments/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"graphql\" });\n"
  },
  {
    "path": "tests/graphql_bracket_spacing/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`bracket_spacing.graphql 1`] = `\nfragment Visit on HighlightedVisit\n  @argumentDefinitions(\n    count: {type: \"Int\", defaultValue: 20}\n  ) {\n  name\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfragment Visit on HighlightedVisit\n  @argumentDefinitions(count: { type: \"Int\", defaultValue: 20 }) {\n  name\n}\n\n`;\n\nexports[`bracket_spacing.graphql 2`] = `\nfragment Visit on HighlightedVisit\n  @argumentDefinitions(\n    count: {type: \"Int\", defaultValue: 20}\n  ) {\n  name\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfragment Visit on HighlightedVisit\n  @argumentDefinitions(count: {type: \"Int\", defaultValue: 20}) {\n  name\n}\n\n`;\n"
  },
  {
    "path": "tests/graphql_bracket_spacing/bracket_spacing.graphql",
    "content": "fragment Visit on HighlightedVisit\n  @argumentDefinitions(\n    count: {type: \"Int\", defaultValue: 20}\n  ) {\n  name\n}\n"
  },
  {
    "path": "tests/graphql_bracket_spacing/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"graphql\" });\nrun_spec(__dirname, { parser: \"graphql\", bracesSpacing: false });\n"
  },
  {
    "path": "tests/graphql_comments/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`argument_comment.graphql 1`] = `\n\nquery (\n  $string: String, # Some variable comment\n  $bool: Boolean # Some comment\n ) {\n   someField\n }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nquery(\n  $string: String # Some variable comment\n  $bool: Boolean # Some comment\n) {\n  someField\n}\n\n`;\n\nexports[`fields.graphql 1`] = `\nquery { \n  someField # Trailing comment\n}\n\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nquery {\n  someField # Trailing comment\n}\n\n`;\n\nexports[`tokens.graphql 1`] = `\n# import \"./claimsFragment.gql\"\n\nquery claimsByBookingReferenceAndLastName($bookingReference: String!, $lastName: String!) {\n  claimsByBookingReferenceAndLastName(bookingReference: $bookingReference, lastName: $lastName) {\n    ... claim\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n# import \"./claimsFragment.gql\"\n\nquery claimsByBookingReferenceAndLastName(\n  $bookingReference: String!\n  $lastName: String!\n) {\n  claimsByBookingReferenceAndLastName(\n    bookingReference: $bookingReference\n    lastName: $lastName\n  ) {\n    ...claim\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/graphql_comments/argument_comment.graphql",
    "content": "\nquery (\n  $string: String, # Some variable comment\n  $bool: Boolean # Some comment\n ) {\n   someField\n }\n"
  },
  {
    "path": "tests/graphql_comments/fields.graphql",
    "content": "query { \n  someField # Trailing comment\n}\n\n\n"
  },
  {
    "path": "tests/graphql_comments/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"graphql\" });\n"
  },
  {
    "path": "tests/graphql_comments/tokens.graphql",
    "content": "# import \"./claimsFragment.gql\"\n\nquery claimsByBookingReferenceAndLastName($bookingReference: String!, $lastName: String!) {\n  claimsByBookingReferenceAndLastName(bookingReference: $bookingReference, lastName: $lastName) {\n    ... claim\n  }\n}\n"
  },
  {
    "path": "tests/graphql_definitions/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`fields.graphql 1`] = `\nquery MyFirstQuery {\n  hello\n}\n\nmutation\nMyFirstMutation {\n  world\n}\n\nsubscription, ThisIsASub, {\n  excellent\n}\n\n, query, ThisIsASub, {\n  excellent\n}\n\nquery {\n  noName\n}\n\n{\n  noOperationType\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nquery MyFirstQuery {\n  hello\n}\n\nmutation MyFirstMutation {\n  world\n}\n\nsubscription ThisIsASub {\n  excellent\n}\n\nquery ThisIsASub {\n  excellent\n}\n\nquery {\n  noName\n}\n\n{\n  noOperationType\n}\n\n`;\n"
  },
  {
    "path": "tests/graphql_definitions/fields.graphql",
    "content": "query MyFirstQuery {\n  hello\n}\n\nmutation\nMyFirstMutation {\n  world\n}\n\nsubscription, ThisIsASub, {\n  excellent\n}\n\n, query, ThisIsASub, {\n  excellent\n}\n\nquery {\n  noName\n}\n\n{\n  noOperationType\n}\n"
  },
  {
    "path": "tests/graphql_definitions/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"graphql\" });\n"
  },
  {
    "path": "tests/graphql_directive_decl/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`directive_decl.graphql 1`] = `\ndirective @a on FIELD1\ndirective @a(as: String) on FIELD1\ndirective @a(as: String = 1) on FIELD1\ndirective @a(as: String, b: Int!) on FIELD1\ndirective @a(as: String! = 1 @deprecated) on FIELD1\ndirective @a(as: String! = 1 @deprecated) on FIELD1 | FIELD2\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndirective @a on FIELD1\n\ndirective @a(as: String) on FIELD1\n\ndirective @a(as: String = 1) on FIELD1\n\ndirective @a(as: String, b: Int!) on FIELD1\n\ndirective @a(as: String! = 1 @deprecated) on FIELD1\n\ndirective @a(as: String! = 1 @deprecated) on FIELD1 | FIELD2\n\n`;\n"
  },
  {
    "path": "tests/graphql_directive_decl/directive_decl.graphql",
    "content": "directive @a on FIELD1\ndirective @a(as: String) on FIELD1\ndirective @a(as: String = 1) on FIELD1\ndirective @a(as: String, b: Int!) on FIELD1\ndirective @a(as: String! = 1 @deprecated) on FIELD1\ndirective @a(as: String! = 1 @deprecated) on FIELD1 | FIELD2\n"
  },
  {
    "path": "tests/graphql_directive_decl/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"graphql\" });\n"
  },
  {
    "path": "tests/graphql_directives/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`directives.graphql 1`] = `\nquery MyQuery @directive(\n  arg: 5\n) {\n  field\n  @skip(if: true) @nope\n  otherField\n  ...fragmentSpread, @include(if: [\"this isn't even a boolean\", \"wow, that's really odd\",,,,,])\n}\n\nfragment YouCanHaveDirectivesHereToo on SomeType @yesReally(what: \"yes\") {\n  fields\n  ... on AType @what(sup: \"yo\") @otherDirective { goodbye}\n  ... @notEvenATypeHere(args: [1, 2, 3]) {\n    hello\n  }\n\n  thisFieldHasALotOfDirectives @thisIsthefirst @thisIsTheSecond @thisIsTheThird @thisIstheFourthWillBeTooLongForSure (and: \"it has arguments as well\")\n}\n\nquery QueryWVars($x: String) @directive { hey }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nquery MyQuery @directive(arg: 5) {\n  field @skip(if: true) @nope\n  otherField\n  ...fragmentSpread\n    @include(if: [\"this isn't even a boolean\", \"wow, that's really odd\"])\n}\n\nfragment YouCanHaveDirectivesHereToo on SomeType @yesReally(what: \"yes\") {\n  fields\n  ... on AType @what(sup: \"yo\") @otherDirective {\n    goodbye\n  }\n  ... @notEvenATypeHere(args: [1, 2, 3]) {\n    hello\n  }\n  thisFieldHasALotOfDirectives\n    @thisIsthefirst\n    @thisIsTheSecond\n    @thisIsTheThird\n    @thisIstheFourthWillBeTooLongForSure(and: \"it has arguments as well\")\n}\n\nquery QueryWVars($x: String) @directive {\n  hey\n}\n\n`;\n"
  },
  {
    "path": "tests/graphql_directives/directives.graphql",
    "content": "query MyQuery @directive(\n  arg: 5\n) {\n  field\n  @skip(if: true) @nope\n  otherField\n  ...fragmentSpread, @include(if: [\"this isn't even a boolean\", \"wow, that's really odd\",,,,,])\n}\n\nfragment YouCanHaveDirectivesHereToo on SomeType @yesReally(what: \"yes\") {\n  fields\n  ... on AType @what(sup: \"yo\") @otherDirective { goodbye}\n  ... @notEvenATypeHere(args: [1, 2, 3]) {\n    hello\n  }\n\n  thisFieldHasALotOfDirectives @thisIsthefirst @thisIsTheSecond @thisIsTheThird @thisIstheFourthWillBeTooLongForSure (and: \"it has arguments as well\")\n}\n\nquery QueryWVars($x: String) @directive { hey }\n"
  },
  {
    "path": "tests/graphql_directives/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"graphql\" });\n"
  },
  {
    "path": "tests/graphql_enum/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`enum.graphql 1`] = `\nenum State {\n  PENDING\n  VISIBLE\n  ARCHIVED\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nenum State {\n  PENDING\n  VISIBLE\n  ARCHIVED\n}\n\n`;\n"
  },
  {
    "path": "tests/graphql_enum/enum.graphql",
    "content": "enum State {\n  PENDING\n  VISIBLE\n  ARCHIVED\n}\n"
  },
  {
    "path": "tests/graphql_enum/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"graphql\" });\n"
  },
  {
    "path": "tests/graphql_fields/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`fields.graphql 1`] = `\n{\n  posts {, title, votes, author {,   firstName,   posts {, author { firstName } }\n    }}\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n{\n  posts {\n    title\n    votes\n    author {\n      firstName\n      posts {\n        author {\n          firstName\n        }\n      }\n    }\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/graphql_fields/fields.graphql",
    "content": "{\n  posts {, title, votes, author {,   firstName,   posts {, author { firstName } }\n    }}\n}\n"
  },
  {
    "path": "tests/graphql_fields/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"graphql\" });\n"
  },
  {
    "path": "tests/graphql_fragments/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`fragments.graphql 1`] = `\n{\n  field\n  ...   XYZ\n  ... on TheType {\n    ...AFragment\n    ...          {\n      noTypeCondition\n    }\n  }\n}\n\nfragment XYZ on ABC {\n  field\n  ...AFragment\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n{\n  field\n  ...XYZ\n  ... on TheType {\n    ...AFragment\n    ... {\n      noTypeCondition\n    }\n  }\n}\n\nfragment XYZ on ABC {\n  field\n  ...AFragment\n}\n\n`;\n"
  },
  {
    "path": "tests/graphql_fragments/fragments.graphql",
    "content": "{\n  field\n  ...   XYZ\n  ... on TheType {\n    ...AFragment\n    ...          {\n      noTypeCondition\n    }\n  }\n}\n\nfragment XYZ on ABC {\n  field\n  ...AFragment\n}\n"
  },
  {
    "path": "tests/graphql_fragments/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"graphql\" });\n"
  },
  {
    "path": "tests/graphql_hello/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`hello.graphql 1`] = `\n{\n  project(name: \"GraphQL\") {\n    tagline\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n{\n  project(name: \"GraphQL\") {\n    tagline\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/graphql_hello/hello.graphql",
    "content": "{\n  project(name: \"GraphQL\") {\n    tagline\n  }\n}\n"
  },
  {
    "path": "tests/graphql_hello/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"graphql\" });\n"
  },
  {
    "path": "tests/graphql_interface/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`interface.graphql 1`] = `\ninterface Actor {\n  id: ID\n  name: String\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface Actor {\n  id: ID\n  name: String\n}\n\n`;\n"
  },
  {
    "path": "tests/graphql_interface/interface.graphql",
    "content": "interface Actor {\n  id: ID\n  name: String\n}\n"
  },
  {
    "path": "tests/graphql_interface/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"graphql\" });\n"
  },
  {
    "path": "tests/graphql_kitchen_sink/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`kitchen_sink.graphql 1`] = `\nquery queryName($foo: ComplexType, $site: Site = MOBILE) {\n  whoever123is: node(id: [123, 456]) {\n    id ,\n    ... on User @defer {\n      field2 {\n        id ,\n        alias: field1(first:10, after:$foo,) @include(if: $foo) {\n          id,\n          ...frag\n        }\n      }\n    }\n    ... @skip(unless: $foo) {\n      id\n    }\n    ... {\n      id\n    }\n  }\n}\n\nmutation likeStory {\n  like(story: 123) @defer {\n    story {\n      id\n    }\n  }\n}\n\nsubscription StoryLikeSubscription($input: StoryLikeSubscribeInput) {\n  storyLikeSubscribe(input: $input) {\n    story {\n      likers {\n        count\n      }\n      likeSentence {\n        text\n      }\n    }\n  }\n}\n\nfragment frag on Friend {\n  foo(size: $size, bar: $b, obj: {key: \"value\"})\n}\n\n{\n  unnamed(truthy: true, falsey: false, nullish: null),\n  query\n}\n\nquery {\n  field\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nquery queryName($foo: ComplexType, $site: Site = MOBILE) {\n  whoever123is: node(id: [123, 456]) {\n    id\n    ... on User @defer {\n      field2 {\n        id\n        alias: field1(first: 10, after: $foo) @include(if: $foo) {\n          id\n          ...frag\n        }\n      }\n    }\n    ... @skip(unless: $foo) {\n      id\n    }\n    ... {\n      id\n    }\n  }\n}\n\nmutation likeStory {\n  like(story: 123) @defer {\n    story {\n      id\n    }\n  }\n}\n\nsubscription StoryLikeSubscription($input: StoryLikeSubscribeInput) {\n  storyLikeSubscribe(input: $input) {\n    story {\n      likers {\n        count\n      }\n      likeSentence {\n        text\n      }\n    }\n  }\n}\n\nfragment frag on Friend {\n  foo(size: $size, bar: $b, obj: { key: \"value\" })\n}\n\n{\n  unnamed(truthy: true, falsey: false, nullish: null)\n  query\n}\n\nquery {\n  field\n}\n\n`;\n"
  },
  {
    "path": "tests/graphql_kitchen_sink/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"graphql\" });\n"
  },
  {
    "path": "tests/graphql_kitchen_sink/kitchen_sink.graphql",
    "content": "query queryName($foo: ComplexType, $site: Site = MOBILE) {\n  whoever123is: node(id: [123, 456]) {\n    id ,\n    ... on User @defer {\n      field2 {\n        id ,\n        alias: field1(first:10, after:$foo,) @include(if: $foo) {\n          id,\n          ...frag\n        }\n      }\n    }\n    ... @skip(unless: $foo) {\n      id\n    }\n    ... {\n      id\n    }\n  }\n}\n\nmutation likeStory {\n  like(story: 123) @defer {\n    story {\n      id\n    }\n  }\n}\n\nsubscription StoryLikeSubscription($input: StoryLikeSubscribeInput) {\n  storyLikeSubscribe(input: $input) {\n    story {\n      likers {\n        count\n      }\n      likeSentence {\n        text\n      }\n    }\n  }\n}\n\nfragment frag on Friend {\n  foo(size: $size, bar: $b, obj: {key: \"value\"})\n}\n\n{\n  unnamed(truthy: true, falsey: false, nullish: null),\n  query\n}\n\nquery {\n  field\n}\n"
  },
  {
    "path": "tests/graphql_lists/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`lists.graphql 1`] = `\n{\n  shortWithList(list: [1, 2, 3])\n  longWithList(list: [\"hello world this is a very long string!\",\"hello world this is a very long string!\", \"hello world this is a very long string!\"])\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n{\n  shortWithList(list: [1, 2, 3])\n  longWithList(\n    list: [\n      \"hello world this is a very long string!\"\n      \"hello world this is a very long string!\"\n      \"hello world this is a very long string!\"\n    ]\n  )\n}\n\n`;\n"
  },
  {
    "path": "tests/graphql_lists/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"graphql\" });\n"
  },
  {
    "path": "tests/graphql_lists/lists.graphql",
    "content": "{\n  shortWithList(list: [1, 2, 3])\n  longWithList(list: [\"hello world this is a very long string!\",\"hello world this is a very long string!\", \"hello world this is a very long string!\"])\n}\n"
  },
  {
    "path": "tests/graphql_object_type_def/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`arguments.graphql 1`] = `\ntype Video {\n  playable_url(quality: String, preferred: String): Url\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype Video {\n  playable_url(quality: String, preferred: String): Url\n}\n\n`;\n\nexports[`directives.graphql 1`] = `\ntype PokemonType {\n  pokemon_type: String @mock(value: \"Electric\")\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype PokemonType {\n  pokemon_type: String @mock(value: \"Electric\")\n}\n\n`;\n\nexports[`extend.graphql 1`] = `\nextend type Feedback {\n  custom_int: Int\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nextend type Feedback {\n  custom_int: Int\n}\n\n`;\n\nexports[`implements.graphql 1`] = `\ntype VRMConversation implements Node, Entity @foo {\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype VRMConversation implements Node, Entity @foo {\n}\n\n`;\n\nexports[`input.graphql 1`] = `\ninput Params {\n  app_id: ID!\n  key_hash: String!\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninput Params {\n  app_id: ID!\n  key_hash: String!\n}\n\n`;\n\nexports[`object_type_def.graphql 1`] = `\ntype FeedHomeStories {\n  debug_info: String\n  query_title: String\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype FeedHomeStories {\n  debug_info: String\n  query_title: String\n}\n\n`;\n"
  },
  {
    "path": "tests/graphql_object_type_def/arguments.graphql",
    "content": "type Video {\n  playable_url(quality: String, preferred: String): Url\n}\n"
  },
  {
    "path": "tests/graphql_object_type_def/directives.graphql",
    "content": "type PokemonType {\n  pokemon_type: String @mock(value: \"Electric\")\n}\n"
  },
  {
    "path": "tests/graphql_object_type_def/extend.graphql",
    "content": "extend type Feedback {\n  custom_int: Int\n}\n"
  },
  {
    "path": "tests/graphql_object_type_def/implements.graphql",
    "content": "type VRMConversation implements Node, Entity @foo {\n}\n"
  },
  {
    "path": "tests/graphql_object_type_def/input.graphql",
    "content": "input Params {\n  app_id: ID!\n  key_hash: String!\n}\n"
  },
  {
    "path": "tests/graphql_object_type_def/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"graphql\" });\n"
  },
  {
    "path": "tests/graphql_object_type_def/object_type_def.graphql",
    "content": "type FeedHomeStories {\n  debug_info: String\n  query_title: String\n}\n"
  },
  {
    "path": "tests/graphql_objects/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`objects.graphql 1`] = `\n{\n  shortWithObj(obj: { hello: \"world\", x: 5 })\n  multilineObj(obj: {\n    hello: \"world\",\n    x: 5\n  })\n  longWithObj(obj: { ,,longString: \"hello world this is a very long string!\", list: [1, 2, 3, 4, 5, 6, 7] })\n  emptyObj(arg: {})\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n{\n  shortWithObj(obj: { hello: \"world\", x: 5 })\n  multilineObj(obj: { hello: \"world\", x: 5 })\n  longWithObj(\n    obj: {\n      longString: \"hello world this is a very long string!\"\n      list: [1, 2, 3, 4, 5, 6, 7]\n    }\n  )\n  emptyObj(arg: {})\n}\n\n`;\n"
  },
  {
    "path": "tests/graphql_objects/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"graphql\" });\n"
  },
  {
    "path": "tests/graphql_objects/objects.graphql",
    "content": "{\n  shortWithObj(obj: { hello: \"world\", x: 5 })\n  multilineObj(obj: {\n    hello: \"world\",\n    x: 5\n  })\n  longWithObj(obj: { ,,longString: \"hello world this is a very long string!\", list: [1, 2, 3, 4, 5, 6, 7] })\n  emptyObj(arg: {})\n}\n"
  },
  {
    "path": "tests/graphql_scalar/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`scalar.graphql 1`] = `\nscalar Color @deprecated\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nscalar Color @deprecated\n\n`;\n"
  },
  {
    "path": "tests/graphql_scalar/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"graphql\" });\n"
  },
  {
    "path": "tests/graphql_scalar/scalar.graphql",
    "content": "scalar Color @deprecated\n"
  },
  {
    "path": "tests/graphql_schema/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`schema.graphql 1`] = `\nschema {\n  query: Root\n  mutation: Mutation\n  subscription: Subscription\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nschema {\n  query: Root\n  mutation: Mutation\n  subscription: Subscription\n}\n\n`;\n"
  },
  {
    "path": "tests/graphql_schema/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"graphql\" });\n"
  },
  {
    "path": "tests/graphql_schema/schema.graphql",
    "content": "schema {\n  query: Root\n  mutation: Mutation\n  subscription: Subscription\n}\n"
  },
  {
    "path": "tests/graphql_trailing_comma/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`trailing.graphql 1`] = `\nquery Query(\n  $pageID: ID!\n  $scale: Float\n  $PROJECT_UNIT_PROFILE_PICTURE_SIZE: Int\n  $PROJECT_UNIT_CARD_SIZE: Int\n) @argumentDefinitions(\n    count: {type: \"Int\", defaultValue: 20, someSuperSuperSuperSuperLongType: 301}\n    test: [{type: \"Int\", defaultValue: 20, someSuperSuperSuperSuperLongType: 301}]\n  ) {\n  cover_photo {\n    image(\n      width: $PROJECT_UNIT_CARD_SIZE,\n      height: $PROJECT_UNIT_CARD_SIZE,\n      sizing: \"cover-fill\",\n      scale: $scale,\n    ) {\n      uri\n    }\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nquery Query(\n  $pageID: ID!\n  $scale: Float\n  $PROJECT_UNIT_PROFILE_PICTURE_SIZE: Int\n  $PROJECT_UNIT_CARD_SIZE: Int\n)\n  @argumentDefinitions(\n    count: {\n      type: \"Int\"\n      defaultValue: 20\n      someSuperSuperSuperSuperLongType: 301\n    }\n    test: [\n      { type: \"Int\", defaultValue: 20, someSuperSuperSuperSuperLongType: 301 }\n    ]\n  ) {\n  cover_photo {\n    image(\n      width: $PROJECT_UNIT_CARD_SIZE\n      height: $PROJECT_UNIT_CARD_SIZE\n      sizing: \"cover-fill\"\n      scale: $scale\n    ) {\n      uri\n    }\n  }\n}\n\n`;\n\nexports[`trailing.graphql 2`] = `\nquery Query(\n  $pageID: ID!\n  $scale: Float\n  $PROJECT_UNIT_PROFILE_PICTURE_SIZE: Int\n  $PROJECT_UNIT_CARD_SIZE: Int\n) @argumentDefinitions(\n    count: {type: \"Int\", defaultValue: 20, someSuperSuperSuperSuperLongType: 301}\n    test: [{type: \"Int\", defaultValue: 20, someSuperSuperSuperSuperLongType: 301}]\n  ) {\n  cover_photo {\n    image(\n      width: $PROJECT_UNIT_CARD_SIZE,\n      height: $PROJECT_UNIT_CARD_SIZE,\n      sizing: \"cover-fill\",\n      scale: $scale,\n    ) {\n      uri\n    }\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nquery Query(\n  $pageID: ID!\n  $scale: Float\n  $PROJECT_UNIT_PROFILE_PICTURE_SIZE: Int\n  $PROJECT_UNIT_CARD_SIZE: Int\n)\n  @argumentDefinitions(\n    count: {\n      type: \"Int\"\n      defaultValue: 20\n      someSuperSuperSuperSuperLongType: 301\n    }\n    test: [\n      { type: \"Int\", defaultValue: 20, someSuperSuperSuperSuperLongType: 301 }\n    ]\n  ) {\n  cover_photo {\n    image(\n      width: $PROJECT_UNIT_CARD_SIZE\n      height: $PROJECT_UNIT_CARD_SIZE\n      sizing: \"cover-fill\"\n      scale: $scale\n    ) {\n      uri\n    }\n  }\n}\n\n`;\n\nexports[`trailing.graphql 3`] = `\nquery Query(\n  $pageID: ID!\n  $scale: Float\n  $PROJECT_UNIT_PROFILE_PICTURE_SIZE: Int\n  $PROJECT_UNIT_CARD_SIZE: Int\n) @argumentDefinitions(\n    count: {type: \"Int\", defaultValue: 20, someSuperSuperSuperSuperLongType: 301}\n    test: [{type: \"Int\", defaultValue: 20, someSuperSuperSuperSuperLongType: 301}]\n  ) {\n  cover_photo {\n    image(\n      width: $PROJECT_UNIT_CARD_SIZE,\n      height: $PROJECT_UNIT_CARD_SIZE,\n      sizing: \"cover-fill\",\n      scale: $scale,\n    ) {\n      uri\n    }\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nquery Query(\n  $pageID: ID!\n  $scale: Float\n  $PROJECT_UNIT_PROFILE_PICTURE_SIZE: Int\n  $PROJECT_UNIT_CARD_SIZE: Int\n)\n  @argumentDefinitions(\n    count: {\n      type: \"Int\"\n      defaultValue: 20\n      someSuperSuperSuperSuperLongType: 301\n    }\n    test: [\n      { type: \"Int\", defaultValue: 20, someSuperSuperSuperSuperLongType: 301 }\n    ]\n  ) {\n  cover_photo {\n    image(\n      width: $PROJECT_UNIT_CARD_SIZE\n      height: $PROJECT_UNIT_CARD_SIZE\n      sizing: \"cover-fill\"\n      scale: $scale\n    ) {\n      uri\n    }\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/graphql_trailing_comma/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"graphql\" });\nrun_spec(__dirname, { parser: \"graphql\", trailingComma: \"all\" });\nrun_spec(__dirname, { parser: \"graphql\", trailingComma: \"es5\" });\n"
  },
  {
    "path": "tests/graphql_trailing_comma/trailing.graphql",
    "content": "query Query(\n  $pageID: ID!\n  $scale: Float\n  $PROJECT_UNIT_PROFILE_PICTURE_SIZE: Int\n  $PROJECT_UNIT_CARD_SIZE: Int\n) @argumentDefinitions(\n    count: {type: \"Int\", defaultValue: 20, someSuperSuperSuperSuperLongType: 301}\n    test: [{type: \"Int\", defaultValue: 20, someSuperSuperSuperSuperLongType: 301}]\n  ) {\n  cover_photo {\n    image(\n      width: $PROJECT_UNIT_CARD_SIZE,\n      height: $PROJECT_UNIT_CARD_SIZE,\n      sizing: \"cover-fill\",\n      scale: $scale,\n    ) {\n      uri\n    }\n  }\n}\n"
  },
  {
    "path": "tests/graphql_union_types/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`union_types.graphql 1`] = `\nunion myUnion = ATypeName | ASecondTypeName\n\nunion tooLongNameeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee = A | B\n\nunion mySecondUnion = ATypeName | ASecondTypeName | AThirdTypeName\n\nunion myThirdUnion = AVeryVeryVeryLongNamedTypeName | ASecondVeryVeryVeryLongedNameTypeName \n\nunion longUnion = A | B | C | D | E | F | G | H | I | J | K | L |  A | B | C | D | E | F | G | H | I | J | K | L\n\n# comment\n# comment2\nunion union = B | C | D~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nunion myUnion = ATypeName | ASecondTypeName\n\nunion tooLongNameeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee =\n    A\n  | B\n\nunion mySecondUnion = ATypeName | ASecondTypeName | AThirdTypeName\n\nunion myThirdUnion =\n    AVeryVeryVeryLongNamedTypeName\n  | ASecondVeryVeryVeryLongedNameTypeName\n\nunion longUnion =\n    A\n  | B\n  | C\n  | D\n  | E\n  | F\n  | G\n  | H\n  | I\n  | J\n  | K\n  | L\n  | A\n  | B\n  | C\n  | D\n  | E\n  | F\n  | G\n  | H\n  | I\n  | J\n  | K\n  | L\n\n# comment\n# comment2\nunion union = B | C | D\n\n`;\n"
  },
  {
    "path": "tests/graphql_union_types/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"graphql\" });\n"
  },
  {
    "path": "tests/graphql_union_types/union_types.graphql",
    "content": "union myUnion = ATypeName | ASecondTypeName\n\nunion tooLongNameeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee = A | B\n\nunion mySecondUnion = ATypeName | ASecondTypeName | AThirdTypeName\n\nunion myThirdUnion = AVeryVeryVeryLongNamedTypeName | ASecondVeryVeryVeryLongedNameTypeName \n\nunion longUnion = A | B | C | D | E | F | G | H | I | J | K | L |  A | B | C | D | E | F | G | H | I | J | K | L\n\n# comment\n# comment2\nunion union = B | C | D"
  },
  {
    "path": "tests/graphql_variable_definitions/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`variable_definitions.graphql 1`] = `\nquery short($foo:ComplexType, $site   : Site =         MOBILE,     $nonNull: Int!) {\n  hello\n}\n\nquery long($foo: ComplexType, $site: Float = 124241.12312,\n$bar: String = \"Long string here\", $arg: String = \"Hello world!\",,,,,\n$nonNull: String!) {\n  hello\n}\n\nquery lists($foo: [Int  ], $bar:    [Int!], $arg: [ Int! ]!) {\n  ok\n}\n\nquery listslong($foo: [String  ], $bar:    [String!], $arg: [ Int! ]!, $veryLongName: [ Int! ]) {\n  ok\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nquery short($foo: ComplexType, $site: Site = MOBILE, $nonNull: Int!) {\n  hello\n}\n\nquery long(\n  $foo: ComplexType\n  $site: Float = 124241.12312\n  $bar: String = \"Long string here\"\n  $arg: String = \"Hello world!\"\n  $nonNull: String!\n) {\n  hello\n}\n\nquery lists($foo: [Int], $bar: [Int!], $arg: [Int!]!) {\n  ok\n}\n\nquery listslong(\n  $foo: [String]\n  $bar: [String!]\n  $arg: [Int!]!\n  $veryLongName: [Int!]\n) {\n  ok\n}\n\n`;\n"
  },
  {
    "path": "tests/graphql_variable_definitions/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"graphql\" });\n"
  },
  {
    "path": "tests/graphql_variable_definitions/variable_definitions.graphql",
    "content": "query short($foo:ComplexType, $site   : Site =         MOBILE,     $nonNull: Int!) {\n  hello\n}\n\nquery long($foo: ComplexType, $site: Float = 124241.12312,\n$bar: String = \"Long string here\", $arg: String = \"Hello world!\",,,,,\n$nonNull: String!) {\n  hello\n}\n\nquery lists($foo: [Int  ], $bar:    [Int!], $arg: [ Int! ]!) {\n  ok\n}\n\nquery listslong($foo: [String  ], $bar:    [String!], $arg: [ Int! ]!, $veryLongName: [ Int! ]) {\n  ok\n}\n"
  },
  {
    "path": "tests/html_basics/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`hello-world.html 1`] = `\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n    <title>Document</title>\n</head>\n<body>\n    <!-- A comment -->\n    <h1>Hello World</h1>\n</body>\n</html>\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n<!DOCTYPE html>\n\n\n<html lang=\"en\">\n\n\n<head>\n  <meta charset=\"UTF-8\">\n\n  <meta name=\"viewport\"\n    content=\"width=device-width, initial-scale=1.0\">\n\n  <meta http-equiv=\"X-UA-Compatible\"\n    content=\"ie=edge\">\n\n  <title>Document</title>\n</head>\n\n<body>\n  <!-- A comment -->\n  <h1>Hello World</h1>\n</body>\n</html>\n`;\n\nexports[`html-fragment.html 1`] = `\n<a href=\"#\">Link</a>\n\n<textarea>\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n<a href=\"#\">Link</a>\n<textarea />\n\n`;\n"
  },
  {
    "path": "tests/html_basics/hello-world.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n    <title>Document</title>\n</head>\n<body>\n    <!-- A comment -->\n    <h1>Hello World</h1>\n</body>\n</html>\n\n"
  },
  {
    "path": "tests/html_basics/html-fragment.html",
    "content": "<a href=\"#\">Link</a>\n\n<textarea>\n"
  },
  {
    "path": "tests/html_basics/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"parse5\" });\n"
  },
  {
    "path": "tests/if/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`curly_braces.js 1`] = `\nif(1){go();}else if(2){go();}else{go();}\nif(1)\n{\ngo();\n}\nelse if(2)\n{\ngo();\n}\nelse\n{\ngo();\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nif (1) {\n  go();\n} else if (2) {\n  go();\n} else {\n  go();\n}\nif (1) {\n  go();\n} else if (2) {\n  go();\n} else {\n  go();\n}\n\n`;\n\nexports[`curly_braces.js 2`] = `\nif(1){go();}else if(2){go();}else{go();}\nif(1)\n{\ngo();\n}\nelse if(2)\n{\ngo();\n}\nelse\n{\ngo();\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nif (1) {\n  go();\n}\nelse if (2) {\n  go();\n}\nelse {\n  go();\n}\nif (1) {\n  go();\n}\nelse if (2) {\n  go();\n}\nelse {\n  go();\n}\n\n`;\n\nexports[`else.js 1`] = `\n// Both functions below should be formatted exactly the same\n\nfunction f() {\n  if (position)\n    return {name: pair};\n  else\n    return {name: pair.substring(0, position), value: pair.substring(position + 1)};\n}\n\nfunction f() {\n  if (position)\n    return {name: pair};\n  else\n    return {\n      name: pair.substring(0, position),\n      value: pair.substring(position + 1)\n    };\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Both functions below should be formatted exactly the same\n\nfunction f() {\n  if (position) return { name: pair };\n  else\n    return {\n      name: pair.substring(0, position),\n      value: pair.substring(position + 1)\n    };\n}\n\nfunction f() {\n  if (position) return { name: pair };\n  else\n    return {\n      name: pair.substring(0, position),\n      value: pair.substring(position + 1)\n    };\n}\n\n`;\n\nexports[`else.js 2`] = `\n// Both functions below should be formatted exactly the same\n\nfunction f() {\n  if (position)\n    return {name: pair};\n  else\n    return {name: pair.substring(0, position), value: pair.substring(position + 1)};\n}\n\nfunction f() {\n  if (position)\n    return {name: pair};\n  else\n    return {\n      name: pair.substring(0, position),\n      value: pair.substring(position + 1)\n    };\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Both functions below should be formatted exactly the same\n\nfunction f() {\n  if (position) return { name: pair };\n  else\n    return {\n      name: pair.substring(0, position),\n      value: pair.substring(position + 1)\n    };\n}\n\nfunction f() {\n  if (position) return { name: pair };\n  else\n    return {\n      name: pair.substring(0, position),\n      value: pair.substring(position + 1)\n    };\n}\n\n`;\n\nexports[`if_comments.js 1`] = `\nasync function f() {\n  if (untrackedChoice === 0) /* Cancel */ {\n    return null;\n  } else if (untrackedChoice === 1) /* Add */ {\n    await repository.addAll(Array.from(untrackedChanges.keys()));\n    shouldAmend = true;\n  } else if (untrackedChoice === 2) /* Allow Untracked */ {\n    allowUntracked = true;\n  }\n}\n\nasync function f() {\n  if (untrackedChoice === 0)\n    /* Cancel */ {\n      return null;\n    }\n  else if (untrackedChoice === 1)\n    /* Add */ {\n      await repository.addAll(Array.from(untrackedChanges.keys()));\n      shouldAmend = true;\n    }\n  else if (untrackedChoice === 2)\n    /* Allow Untracked */ {\n      allowUntracked = true;\n    }\n}\n\nasync function f() {\n  if (untrackedChoice === 0) {\n    /* Cancel */ return null;\n  } else if (untrackedChoice === 1) {\n    /* Add */ await repository.addAll(Array.from(untrackedChanges.keys()));\n    shouldAmend = true;\n  } else if (untrackedChoice === 2) {\n    /* Allow Untracked */ allowUntracked = true;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nasync function f() {\n  if (untrackedChoice === 0) {\n    /* Cancel */ return null;\n  } else if (untrackedChoice === 1) {\n    /* Add */ await repository.addAll(Array.from(untrackedChanges.keys()));\n    shouldAmend = true;\n  } else if (untrackedChoice === 2) {\n    /* Allow Untracked */ allowUntracked = true;\n  }\n}\n\nasync function f() {\n  if (untrackedChoice === 0) {\n    /* Cancel */ return null;\n  } else if (untrackedChoice === 1) {\n    /* Add */ await repository.addAll(Array.from(untrackedChanges.keys()));\n    shouldAmend = true;\n  } else if (untrackedChoice === 2) {\n    /* Allow Untracked */ allowUntracked = true;\n  }\n}\n\nasync function f() {\n  if (untrackedChoice === 0) {\n    /* Cancel */ return null;\n  } else if (untrackedChoice === 1) {\n    /* Add */ await repository.addAll(Array.from(untrackedChanges.keys()));\n    shouldAmend = true;\n  } else if (untrackedChoice === 2) {\n    /* Allow Untracked */ allowUntracked = true;\n  }\n}\n\n`;\n\nexports[`if_comments.js 2`] = `\nasync function f() {\n  if (untrackedChoice === 0) /* Cancel */ {\n    return null;\n  } else if (untrackedChoice === 1) /* Add */ {\n    await repository.addAll(Array.from(untrackedChanges.keys()));\n    shouldAmend = true;\n  } else if (untrackedChoice === 2) /* Allow Untracked */ {\n    allowUntracked = true;\n  }\n}\n\nasync function f() {\n  if (untrackedChoice === 0)\n    /* Cancel */ {\n      return null;\n    }\n  else if (untrackedChoice === 1)\n    /* Add */ {\n      await repository.addAll(Array.from(untrackedChanges.keys()));\n      shouldAmend = true;\n    }\n  else if (untrackedChoice === 2)\n    /* Allow Untracked */ {\n      allowUntracked = true;\n    }\n}\n\nasync function f() {\n  if (untrackedChoice === 0) {\n    /* Cancel */ return null;\n  } else if (untrackedChoice === 1) {\n    /* Add */ await repository.addAll(Array.from(untrackedChanges.keys()));\n    shouldAmend = true;\n  } else if (untrackedChoice === 2) {\n    /* Allow Untracked */ allowUntracked = true;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nasync function f() {\n  if (untrackedChoice === 0) {\n    /* Cancel */ return null;\n  }\n  else if (untrackedChoice === 1) {\n    /* Add */ await repository.addAll(Array.from(untrackedChanges.keys()));\n    shouldAmend = true;\n  }\n  else if (untrackedChoice === 2) {\n    /* Allow Untracked */ allowUntracked = true;\n  }\n}\n\nasync function f() {\n  if (untrackedChoice === 0) {\n    /* Cancel */ return null;\n  }\n  else if (untrackedChoice === 1) {\n    /* Add */ await repository.addAll(Array.from(untrackedChanges.keys()));\n    shouldAmend = true;\n  }\n  else if (untrackedChoice === 2) {\n    /* Allow Untracked */ allowUntracked = true;\n  }\n}\n\nasync function f() {\n  if (untrackedChoice === 0) {\n    /* Cancel */ return null;\n  }\n  else if (untrackedChoice === 1) {\n    /* Add */ await repository.addAll(Array.from(untrackedChanges.keys()));\n    shouldAmend = true;\n  }\n  else if (untrackedChoice === 2) {\n    /* Allow Untracked */ allowUntracked = true;\n  }\n}\n\n`;\n\nexports[`trailing_comment.js 1`] = `\nif (code === 92 /* '\\\\' */) {}\nif (code === 92 /* '\\\\' */ /* '\\\\' */) {}\n\nif (code === 92) /* '\\\\' */ {}\nif (code === 92) { /* '\\\\' */ }\n\nif (\n  1\n  // Comment\n) {\n  a;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nif (code === 92 /* '\\\\' */) {\n}\nif (code === 92 /* '\\\\' */ /* '\\\\' */) {\n}\n\nif (code === 92) {\n  /* '\\\\' */\n}\nif (code === 92) {\n  /* '\\\\' */\n}\n\nif (\n  1\n  // Comment\n) {\n  a;\n}\n\n`;\n\nexports[`trailing_comment.js 2`] = `\nif (code === 92 /* '\\\\' */) {}\nif (code === 92 /* '\\\\' */ /* '\\\\' */) {}\n\nif (code === 92) /* '\\\\' */ {}\nif (code === 92) { /* '\\\\' */ }\n\nif (\n  1\n  // Comment\n) {\n  a;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nif (code === 92 /* '\\\\' */) {\n}\nif (code === 92 /* '\\\\' */ /* '\\\\' */) {\n}\n\nif (code === 92) {\n  /* '\\\\' */\n}\nif (code === 92) {\n  /* '\\\\' */\n}\n\nif (\n  1\n  // Comment\n) {\n  a;\n}\n\n`;\n"
  },
  {
    "path": "tests/if/curly_braces.js",
    "content": "if(1){go();}else if(2){go();}else{go();}\nif(1)\n{\ngo();\n}\nelse if(2)\n{\ngo();\n}\nelse\n{\ngo();\n}\n"
  },
  {
    "path": "tests/if/else.js",
    "content": "// Both functions below should be formatted exactly the same\n\nfunction f() {\n  if (position)\n    return {name: pair};\n  else\n    return {name: pair.substring(0, position), value: pair.substring(position + 1)};\n}\n\nfunction f() {\n  if (position)\n    return {name: pair};\n  else\n    return {\n      name: pair.substring(0, position),\n      value: pair.substring(position + 1)\n    };\n}\n"
  },
  {
    "path": "tests/if/if_comments.js",
    "content": "async function f() {\n  if (untrackedChoice === 0) /* Cancel */ {\n    return null;\n  } else if (untrackedChoice === 1) /* Add */ {\n    await repository.addAll(Array.from(untrackedChanges.keys()));\n    shouldAmend = true;\n  } else if (untrackedChoice === 2) /* Allow Untracked */ {\n    allowUntracked = true;\n  }\n}\n\nasync function f() {\n  if (untrackedChoice === 0)\n    /* Cancel */ {\n      return null;\n    }\n  else if (untrackedChoice === 1)\n    /* Add */ {\n      await repository.addAll(Array.from(untrackedChanges.keys()));\n      shouldAmend = true;\n    }\n  else if (untrackedChoice === 2)\n    /* Allow Untracked */ {\n      allowUntracked = true;\n    }\n}\n\nasync function f() {\n  if (untrackedChoice === 0) {\n    /* Cancel */ return null;\n  } else if (untrackedChoice === 1) {\n    /* Add */ await repository.addAll(Array.from(untrackedChanges.keys()));\n    shouldAmend = true;\n  } else if (untrackedChoice === 2) {\n    /* Allow Untracked */ allowUntracked = true;\n  }\n}\n"
  },
  {
    "path": "tests/if/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\nrun_spec(__dirname, { breakBeforeElse: true }, [\"typescript\"]);\n"
  },
  {
    "path": "tests/if/trailing_comment.js",
    "content": "if (code === 92 /* '\\' */) {}\nif (code === 92 /* '\\' */ /* '\\' */) {}\n\nif (code === 92) /* '\\' */ {}\nif (code === 92) { /* '\\' */ }\n\nif (\n  1\n  // Comment\n) {\n  a;\n}\n"
  },
  {
    "path": "tests/ignore/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`ignore.js 1`] = `\nfunction a() {\n  // prettier-ignore\n  var fnString =\n    '\"' + this.USE + ' ' + this.STRICT + '\";\\\\n' +\n    this.filterPrefix() +\n    'var fn=' + this.generateFunction('fn', 's,l,a,i') +\n    extra +\n    this.watchFns() +\n    'return fn;';\n\n  // prettier-ignore\n  const identity = Matrix.create(\n    1, 0, 0,\n    0, 1, 0,\n    0, 0, 0\n  );\n\n  // Let's make sure that this comment doesn't interfere\n\n  // prettier-ignore\n  const commentsWithPrettierIgnore =   {\n    \"ewww\":\n            \"gross-formatting\",\n  };\n\n  function giveMeSome() {\n    a(  a  ); // prettier-ignore\n    // shouldn't I return something?  :shrug:\n  }\n\n  // prettier-ignore\n  console.error(\n    'In order to use ' + prompt + ', you need to configure a ' +\n    'few environment variables to be able to commit to the ' +\n    'repository. Follow those steps to get you setup:\\\\n' +\n    '\\\\n' +\n    'Go to https://github.com/settings/tokens/new\\\\n' +\n    ' - Fill \"Token description\" with \"' + prompt + ' for ' +\n      repoSlug + '\"\\\\n' +\n    ' - Check \"public_repo\"\\\\n' +\n    ' - Press \"Generate Token\"\\\\n' +\n    '\\\\n' +\n    'In a different tab, go to https://travis-ci.org/' +\n      repoSlug + '/settings\\\\n' +\n    ' - Make sure \"Build only if .travis.yml is present\" is ON\\\\n' +\n    ' - Fill \"Name\" with \"GITHUB_USER\" and \"Value\" with the name of the ' +\n      'account you generated the token with. Press \"Add\"\\\\n' +\n    '\\\\n' +\n    'Once this is done, commit anything to the repository to restart ' +\n      'Travis and it should work :)'\n  );\n\n  // Incorrectly indented on purpose\n      function f</* prettier-ignore */ T    :    B>(\n        a : Array  <   number   > // prettier-ignore\n      ) {\n\n        call(\n          f(         1          )\n          // prettier-ignore\n        )\n      }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction a() {\n  // prettier-ignore\n  var fnString =\n    '\"' + this.USE + ' ' + this.STRICT + '\";\\\\n' +\n    this.filterPrefix() +\n    'var fn=' + this.generateFunction('fn', 's,l,a,i') +\n    extra +\n    this.watchFns() +\n    'return fn;';\n\n  // prettier-ignore\n  const identity = Matrix.create(\n    1, 0, 0,\n    0, 1, 0,\n    0, 0, 0\n  );\n\n  // Let's make sure that this comment doesn't interfere\n\n  // prettier-ignore\n  const commentsWithPrettierIgnore =   {\n    \"ewww\":\n            \"gross-formatting\",\n  };\n\n  function giveMeSome() {\n    a(  a  ); // prettier-ignore\n    // shouldn't I return something?  :shrug:\n  }\n\n  // prettier-ignore\n  console.error(\n    'In order to use ' + prompt + ', you need to configure a ' +\n    'few environment variables to be able to commit to the ' +\n    'repository. Follow those steps to get you setup:\\\\n' +\n    '\\\\n' +\n    'Go to https://github.com/settings/tokens/new\\\\n' +\n    ' - Fill \"Token description\" with \"' + prompt + ' for ' +\n      repoSlug + '\"\\\\n' +\n    ' - Check \"public_repo\"\\\\n' +\n    ' - Press \"Generate Token\"\\\\n' +\n    '\\\\n' +\n    'In a different tab, go to https://travis-ci.org/' +\n      repoSlug + '/settings\\\\n' +\n    ' - Make sure \"Build only if .travis.yml is present\" is ON\\\\n' +\n    ' - Fill \"Name\" with \"GITHUB_USER\" and \"Value\" with the name of the ' +\n      'account you generated the token with. Press \"Add\"\\\\n' +\n    '\\\\n' +\n    'Once this is done, commit anything to the repository to restart ' +\n      'Travis and it should work :)'\n  );\n\n  // Incorrectly indented on purpose\n  function f</* prettier-ignore */ T    :    B>(\n    a : Array  <   number   > // prettier-ignore\n  ) {\n    call(\n      f(         1          )\n      // prettier-ignore\n    );\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/ignore/ignore.js",
    "content": "function a() {\n  // prettier-ignore\n  var fnString =\n    '\"' + this.USE + ' ' + this.STRICT + '\";\\n' +\n    this.filterPrefix() +\n    'var fn=' + this.generateFunction('fn', 's,l,a,i') +\n    extra +\n    this.watchFns() +\n    'return fn;';\n\n  // prettier-ignore\n  const identity = Matrix.create(\n    1, 0, 0,\n    0, 1, 0,\n    0, 0, 0\n  );\n\n  // Let's make sure that this comment doesn't interfere\n\n  // prettier-ignore\n  const commentsWithPrettierIgnore =   {\n    \"ewww\":\n            \"gross-formatting\",\n  };\n\n  function giveMeSome() {\n    a(  a  ); // prettier-ignore\n    // shouldn't I return something?  :shrug:\n  }\n\n  // prettier-ignore\n  console.error(\n    'In order to use ' + prompt + ', you need to configure a ' +\n    'few environment variables to be able to commit to the ' +\n    'repository. Follow those steps to get you setup:\\n' +\n    '\\n' +\n    'Go to https://github.com/settings/tokens/new\\n' +\n    ' - Fill \"Token description\" with \"' + prompt + ' for ' +\n      repoSlug + '\"\\n' +\n    ' - Check \"public_repo\"\\n' +\n    ' - Press \"Generate Token\"\\n' +\n    '\\n' +\n    'In a different tab, go to https://travis-ci.org/' +\n      repoSlug + '/settings\\n' +\n    ' - Make sure \"Build only if .travis.yml is present\" is ON\\n' +\n    ' - Fill \"Name\" with \"GITHUB_USER\" and \"Value\" with the name of the ' +\n      'account you generated the token with. Press \"Add\"\\n' +\n    '\\n' +\n    'Once this is done, commit anything to the repository to restart ' +\n      'Travis and it should work :)'\n  );\n\n  // Incorrectly indented on purpose\n      function f</* prettier-ignore */ T    :    B>(\n        a : Array  <   number   > // prettier-ignore\n      ) {\n\n        call(\n          f(         1          )\n          // prettier-ignore\n        )\n      }\n}\n"
  },
  {
    "path": "tests/ignore/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/import/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`brackets.js 1`] = `\nimport {\n  runTaskForChanged,\n  description,\n  someOtherLabel,\n  thatMakes,\n  itGo,\n  multiLine,\n  andMore,\n  soWeCanGetItTo80Columns\n} from '.';\nimport {fitsIn, oneLine} from '.';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport {\n  runTaskForChanged,\n  description,\n  someOtherLabel,\n  thatMakes,\n  itGo,\n  multiLine,\n  andMore,\n  soWeCanGetItTo80Columns\n} from \".\";\nimport { fitsIn, oneLine } from \".\";\n\n`;\n\nexports[`brackets.js 2`] = `\nimport {\n  runTaskForChanged,\n  description,\n  someOtherLabel,\n  thatMakes,\n  itGo,\n  multiLine,\n  andMore,\n  soWeCanGetItTo80Columns\n} from '.';\nimport {fitsIn, oneLine} from '.';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport {\n  runTaskForChanged,\n  description,\n  someOtherLabel,\n  thatMakes,\n  itGo,\n  multiLine,\n  andMore,\n  soWeCanGetItTo80Columns\n} from \".\";\nimport {fitsIn, oneLine} from \".\";\n\n`;\n\nexports[`comments.js 1`] = `\nimport { a //comment1\n//comment2\n//comment3\nas b} from \"\";\n\nimport {\n  a as //comment1\n  //comment2\n  //comment3\n  b\n} from \"\";\n\nimport {\n  a as //comment2 //comment1\n  //comment3\n  b\n} from \"\";\n\nimport {\n  a as //comment3 //comment2 //comment1\n  b\n} from \"\";\n\nimport {\n  // comment 1\n  FN1, // comment 2\n  /* comment 3 */ FN2,\n  // FN3,\n  FN4 /* comment 4 */\n  // FN4,\n  // FN5\n} from \"./module\";\n\nimport {\n  ExecutionResult,\n  DocumentNode,\n  /* tslint:disable */\n  SelectionSetNode,\n  /* tslint:enable */\n} from 'graphql';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport {\n  //comment1\n  //comment2\n  //comment3\n  a as b\n} from \"\";\n\nimport {\n  //comment1\n  //comment2\n  //comment3\n  a as b\n} from \"\";\n\nimport {\n  //comment2 //comment1\n  //comment3\n  a as b\n} from \"\";\n\nimport {\n  //comment3 //comment2 //comment1\n  a as b\n} from \"\";\n\nimport {\n  // comment 1\n  FN1, // comment 2\n  /* comment 3 */ FN2,\n  // FN3,\n  FN4 /* comment 4 */\n  // FN4,\n  // FN5\n} from \"./module\";\n\nimport {\n  ExecutionResult,\n  DocumentNode,\n  /* tslint:disable */\n  SelectionSetNode\n  /* tslint:enable */\n} from \"graphql\";\n\n`;\n\nexports[`comments.js 2`] = `\nimport { a //comment1\n//comment2\n//comment3\nas b} from \"\";\n\nimport {\n  a as //comment1\n  //comment2\n  //comment3\n  b\n} from \"\";\n\nimport {\n  a as //comment2 //comment1\n  //comment3\n  b\n} from \"\";\n\nimport {\n  a as //comment3 //comment2 //comment1\n  b\n} from \"\";\n\nimport {\n  // comment 1\n  FN1, // comment 2\n  /* comment 3 */ FN2,\n  // FN3,\n  FN4 /* comment 4 */\n  // FN4,\n  // FN5\n} from \"./module\";\n\nimport {\n  ExecutionResult,\n  DocumentNode,\n  /* tslint:disable */\n  SelectionSetNode,\n  /* tslint:enable */\n} from 'graphql';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport {\n  //comment1\n  //comment2\n  //comment3\n  a as b\n} from \"\";\n\nimport {\n  //comment1\n  //comment2\n  //comment3\n  a as b\n} from \"\";\n\nimport {\n  //comment2 //comment1\n  //comment3\n  a as b\n} from \"\";\n\nimport {\n  //comment3 //comment2 //comment1\n  a as b\n} from \"\";\n\nimport {\n  // comment 1\n  FN1, // comment 2\n  /* comment 3 */ FN2,\n  // FN3,\n  FN4 /* comment 4 */\n  // FN4,\n  // FN5\n} from \"./module\";\n\nimport {\n  ExecutionResult,\n  DocumentNode,\n  /* tslint:disable */\n  SelectionSetNode\n  /* tslint:enable */\n} from \"graphql\";\n\n`;\n\nexports[`empty-import.js 1`] = `\nimport { } from '@types/googlemaps';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport {} from \"@types/googlemaps\";\n\n`;\n\nexports[`empty-import.js 2`] = `\nimport { } from '@types/googlemaps';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport {} from \"@types/googlemaps\";\n\n`;\n\nexports[`inline.js 1`] = `\nimport somethingSuperLongsomethingSuperLong from 'somethingSuperLongsomethingSuperLongsomethingSuperLong'\nimport {somethingSuperLongsomethingSuperLong} from 'somethingSuperLongsomethingSuperLongsomethingSuperLong'\nimport a, {somethingSuperLongsomethingSuperLong} from 'somethingSuperLongsomethingSuperLongsomethingSuperLong'\nimport {a, somethingSuperLongsomethingSuperLong} from 'somethingSuperLongsomethingSuperLongsomethingSuperLong'\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport somethingSuperLongsomethingSuperLong from \"somethingSuperLongsomethingSuperLongsomethingSuperLong\";\nimport { somethingSuperLongsomethingSuperLong } from \"somethingSuperLongsomethingSuperLongsomethingSuperLong\";\nimport a, {\n  somethingSuperLongsomethingSuperLong\n} from \"somethingSuperLongsomethingSuperLongsomethingSuperLong\";\nimport {\n  a,\n  somethingSuperLongsomethingSuperLong\n} from \"somethingSuperLongsomethingSuperLongsomethingSuperLong\";\n\n`;\n\nexports[`inline.js 2`] = `\nimport somethingSuperLongsomethingSuperLong from 'somethingSuperLongsomethingSuperLongsomethingSuperLong'\nimport {somethingSuperLongsomethingSuperLong} from 'somethingSuperLongsomethingSuperLongsomethingSuperLong'\nimport a, {somethingSuperLongsomethingSuperLong} from 'somethingSuperLongsomethingSuperLongsomethingSuperLong'\nimport {a, somethingSuperLongsomethingSuperLong} from 'somethingSuperLongsomethingSuperLongsomethingSuperLong'\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport somethingSuperLongsomethingSuperLong from \"somethingSuperLongsomethingSuperLongsomethingSuperLong\";\nimport {somethingSuperLongsomethingSuperLong} from \"somethingSuperLongsomethingSuperLongsomethingSuperLong\";\nimport a, {\n  somethingSuperLongsomethingSuperLong\n} from \"somethingSuperLongsomethingSuperLongsomethingSuperLong\";\nimport {\n  a,\n  somethingSuperLongsomethingSuperLong\n} from \"somethingSuperLongsomethingSuperLongsomethingSuperLong\";\n\n`;\n\nexports[`long-line.js 1`] = `\nimport someCoolUtilWithARatherLongName from '../../../../utils/someCoolUtilWithARatherLongName';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport someCoolUtilWithARatherLongName from \"../../../../utils/someCoolUtilWithARatherLongName\";\n\n`;\n\nexports[`long-line.js 2`] = `\nimport someCoolUtilWithARatherLongName from '../../../../utils/someCoolUtilWithARatherLongName';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport someCoolUtilWithARatherLongName from \"../../../../utils/someCoolUtilWithARatherLongName\";\n\n`;\n\nexports[`multiple_standalones.js 1`] = `\nimport a, * as b from 'a';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport a, * as b from \"a\";\n\n`;\n\nexports[`multiple_standalones.js 2`] = `\nimport a, * as b from 'a';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport a, * as b from \"a\";\n\n`;\n"
  },
  {
    "path": "tests/import/brackets.js",
    "content": "import {\n  runTaskForChanged,\n  description,\n  someOtherLabel,\n  thatMakes,\n  itGo,\n  multiLine,\n  andMore,\n  soWeCanGetItTo80Columns\n} from '.';\nimport {fitsIn, oneLine} from '.';\n"
  },
  {
    "path": "tests/import/comments.js",
    "content": "import { a //comment1\n//comment2\n//comment3\nas b} from \"\";\n\nimport {\n  a as //comment1\n  //comment2\n  //comment3\n  b\n} from \"\";\n\nimport {\n  a as //comment2 //comment1\n  //comment3\n  b\n} from \"\";\n\nimport {\n  a as //comment3 //comment2 //comment1\n  b\n} from \"\";\n\nimport {\n  // comment 1\n  FN1, // comment 2\n  /* comment 3 */ FN2,\n  // FN3,\n  FN4 /* comment 4 */\n  // FN4,\n  // FN5\n} from \"./module\";\n\nimport {\n  ExecutionResult,\n  DocumentNode,\n  /* tslint:disable */\n  SelectionSetNode,\n  /* tslint:enable */\n} from 'graphql';\n"
  },
  {
    "path": "tests/import/empty-import.js",
    "content": "import { } from '@types/googlemaps';\n"
  },
  {
    "path": "tests/import/inline.js",
    "content": "import somethingSuperLongsomethingSuperLong from 'somethingSuperLongsomethingSuperLongsomethingSuperLong'\nimport {somethingSuperLongsomethingSuperLong} from 'somethingSuperLongsomethingSuperLongsomethingSuperLong'\nimport a, {somethingSuperLongsomethingSuperLong} from 'somethingSuperLongsomethingSuperLongsomethingSuperLong'\nimport {a, somethingSuperLongsomethingSuperLong} from 'somethingSuperLongsomethingSuperLongsomethingSuperLong'\n"
  },
  {
    "path": "tests/import/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\nrun_spec(__dirname, { bracesSpacing: false }, [\"typescript\"]);\n"
  },
  {
    "path": "tests/import/long-line.js",
    "content": "import someCoolUtilWithARatherLongName from '../../../../utils/someCoolUtilWithARatherLongName';\n"
  },
  {
    "path": "tests/import/multiple_standalones.js",
    "content": "import a, * as b from 'a';\n"
  },
  {
    "path": "tests/import_meta/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`import_meta.js 1`] = `\nconst x = import.meta;\nconst url = import.meta.url;\nimport.meta;\nimport.meta.url;\nimport.meta.couldBeMutable = true;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst x = import.meta;\nconst url = import.meta.url;\nimport.meta;\nimport.meta.url;\nimport.meta.couldBeMutable = true;\n\n`;\n"
  },
  {
    "path": "tests/import_meta/import_meta.js",
    "content": "const x = import.meta;\nconst url = import.meta.url;\nimport.meta;\nimport.meta.url;\nimport.meta.couldBeMutable = true;\n"
  },
  {
    "path": "tests/import_meta/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"babylon\" });\n"
  },
  {
    "path": "tests/import_then/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`long.js 1`] = `\nimport(\n  'myreallylongdynamicallyloadedmodulenamemyreallylongdynamicallyloadedmodulename'\n);\n\nimport(\n  'myreallylongdynamicallyloadedmodulenamemyreallylongdynamicallyloadedmodulename'\n).then(exports => {\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport(\"myreallylongdynamicallyloadedmodulenamemyreallylongdynamicallyloadedmodulename\");\n\nimport(\"myreallylongdynamicallyloadedmodulenamemyreallylongdynamicallyloadedmodulename\").then(\n  exports => {}\n);\n\n`;\n\nexports[`then.js 1`] = `\nconst x = import('some-module').then(x => {\n  // ...\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst x = import(\"some-module\").then(x => {\n  // ...\n});\n\n`;\n"
  },
  {
    "path": "tests/import_then/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/import_then/long.js",
    "content": "import(\n  'myreallylongdynamicallyloadedmodulenamemyreallylongdynamicallyloadedmodulename'\n);\n\nimport(\n  'myreallylongdynamicallyloadedmodulenamemyreallylongdynamicallyloadedmodulename'\n).then(exports => {\n});\n"
  },
  {
    "path": "tests/import_then/then.js",
    "content": "const x = import('some-module').then(x => {\n  // ...\n});\n"
  },
  {
    "path": "tests/interface/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`break.js 1`] = `\nexport interface Environment1 extends GenericEnvironment<\n  SomeType,\n  AnotherType,\n  YetAnotherType,\n> {\n  m(): void;\n};\nexport class Environment2 extends GenericEnvironment<\n  SomeType,\n  AnotherType,\n  YetAnotherType,\n> {\n  m() {};\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport interface Environment1\n  extends GenericEnvironment<SomeType, AnotherType, YetAnotherType> {\n  m(): void\n}\nexport class Environment2 extends GenericEnvironment<\n  SomeType,\n  AnotherType,\n  YetAnotherType\n> {\n  m() {}\n}\n\n`;\n\nexports[`module.js 1`] = `\ndeclare module X {\n  declare interface Y { x: number; }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare module X {\n  declare interface Y { x: number }\n}\n\n`;\n"
  },
  {
    "path": "tests/interface/break.js",
    "content": "export interface Environment1 extends GenericEnvironment<\n  SomeType,\n  AnotherType,\n  YetAnotherType,\n> {\n  m(): void;\n};\nexport class Environment2 extends GenericEnvironment<\n  SomeType,\n  AnotherType,\n  YetAnotherType,\n> {\n  m() {};\n};\n"
  },
  {
    "path": "tests/interface/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/interface/module.js",
    "content": "declare module X {\n  declare interface Y { x: number; }\n}\n"
  },
  {
    "path": "tests/intersection/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`intersection.js 1`] = `\nexport type ReallyBigSocketServer = ReallyBigSocketServerInterface & ReallyBigSocketServerStatics;\n\ntype Props = {\n  focusedChildren?: React.Children,\n  onClick: () => void,\n  overlayChildren?: React.Children,\n  style?: Object,\n  thumbnail: ImageSource,\n} & FooterProps;\n\ntype DuplexStreamOptions = ReadableStreamOptions & {\n  allowHalfOpen?: boolean,\n  readableObjectMode?: boolean\n};\n\ntype DuplexStreamOptions = {\n  allowHalfOpen?: boolean,\n  readableObjectMode?: boolean\n} & {\n  allowHalfOpen?: boolean,\n  readableObjectMode?: boolean\n};\n\ntype DuplexStreamOptions = ReadableStreamOptions &\n  WritableStreamOptions & {\n    allowHalfOpen?: boolean,\n    readableObjectMode?: boolean\n  };\n\ntype DuplexStreamOptions = ReadableStreamOptions &\n  WritableStreamOptions & {\n    allowHalfOpen?: boolean,\n    readableObjectMode?: boolean\n  } & {\n    allowHalfOpen?: boolean,\n    readableObjectMode?: boolean\n  };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport type ReallyBigSocketServer = ReallyBigSocketServerInterface &\n  ReallyBigSocketServerStatics;\n\ntype Props = {\n  focusedChildren?: React.Children,\n  onClick: () => void,\n  overlayChildren?: React.Children,\n  style?: Object,\n  thumbnail: ImageSource\n} & FooterProps;\n\ntype DuplexStreamOptions = ReadableStreamOptions & {\n  allowHalfOpen?: boolean,\n  readableObjectMode?: boolean\n};\n\ntype DuplexStreamOptions = {\n  allowHalfOpen?: boolean,\n  readableObjectMode?: boolean\n} & {\n  allowHalfOpen?: boolean,\n  readableObjectMode?: boolean\n};\n\ntype DuplexStreamOptions = ReadableStreamOptions &\n  WritableStreamOptions & {\n    allowHalfOpen?: boolean,\n    readableObjectMode?: boolean\n  };\n\ntype DuplexStreamOptions = ReadableStreamOptions &\n  WritableStreamOptions & {\n    allowHalfOpen?: boolean,\n    readableObjectMode?: boolean\n  } & {\n    allowHalfOpen?: boolean,\n    readableObjectMode?: boolean\n  };\n\n`;\n"
  },
  {
    "path": "tests/intersection/intersection.js",
    "content": "export type ReallyBigSocketServer = ReallyBigSocketServerInterface & ReallyBigSocketServerStatics;\n\ntype Props = {\n  focusedChildren?: React.Children,\n  onClick: () => void,\n  overlayChildren?: React.Children,\n  style?: Object,\n  thumbnail: ImageSource,\n} & FooterProps;\n\ntype DuplexStreamOptions = ReadableStreamOptions & {\n  allowHalfOpen?: boolean,\n  readableObjectMode?: boolean\n};\n\ntype DuplexStreamOptions = {\n  allowHalfOpen?: boolean,\n  readableObjectMode?: boolean\n} & {\n  allowHalfOpen?: boolean,\n  readableObjectMode?: boolean\n};\n\ntype DuplexStreamOptions = ReadableStreamOptions &\n  WritableStreamOptions & {\n    allowHalfOpen?: boolean,\n    readableObjectMode?: boolean\n  };\n\ntype DuplexStreamOptions = ReadableStreamOptions &\n  WritableStreamOptions & {\n    allowHalfOpen?: boolean,\n    readableObjectMode?: boolean\n  } & {\n    allowHalfOpen?: boolean,\n    readableObjectMode?: boolean\n  };\n"
  },
  {
    "path": "tests/intersection/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/json/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`boolean.json 1`] = `\ntrue\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntrue\n\n`;\n\nexports[`boolean.json 2`] = `\ntrue\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntrue\n\n`;\n\nexports[`multi-line.json 1`] = `\n{\"key1\":[true,false,null],\"key2\":{\"key3\":[1,2,\"3\",\n1e10,1e-3]}}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n{\n  \"key1\": [true, false, null],\n  \"key2\": {\n    \"key3\": [1, 2, \"3\", 1e10, 1e-3]\n  }\n}\n\n`;\n\nexports[`multi-line.json 2`] = `\n{\"key1\":[true,false,null],\"key2\":{\"key3\":[1,2,\"3\",\n1e10,1e-3]}}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n{\n  \"key1\": [true, false, null],\n  \"key2\": {\n    \"key3\": [1, 2, \"3\", 1e10, 1e-3]\n  }\n}\n\n`;\n\nexports[`null.json 1`] = `\nnull\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nnull\n\n`;\n\nexports[`null.json 2`] = `\nnull\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nnull\n\n`;\n\nexports[`number.json 1`] = `\n0\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n0\n\n`;\n\nexports[`number.json 2`] = `\n0\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n0\n\n`;\n\nexports[`pass1.json 1`] = `\n[\n    \"JSON Test Pattern pass1\",\n    {\"object with 1 member\":[\"array with 1 element\"]},\n    {},\n    [],\n    -42,\n    true,\n    false,\n    null,\n    {\n        \"integer\": 1234567890,\n        \"real\": -9876.543210,\n        \"e\": 0.123456789e-12,\n        \"E\": 1.234567890E+34,\n        \"\":  23456789012E66,\n        \"zero\": 0,\n        \"one\": 1,\n        \"space\": \" \",\n        \"quote\": \"\\\\\"\",\n        \"backslash\": \"\\\\\\\\\",\n        \"controls\": \"\\\\b\\\\f\\\\n\\\\r\\\\t\",\n        \"slash\": \"/ & \\\\/\",\n        \"alpha\": \"abcdefghijklmnopqrstuvwyz\",\n        \"ALPHA\": \"ABCDEFGHIJKLMNOPQRSTUVWYZ\",\n        \"digit\": \"0123456789\",\n        \"0123456789\": \"digit\",\n        \"special\": \"\\`1~!@#$%^&*()_+-={':[,]}|;.</>?\",\n        \"hex\": \"\\\\u0123\\\\u4567\\\\u89AB\\\\uCDEF\\\\uabcd\\\\uef4A\",\n        \"true\": true,\n        \"false\": false,\n        \"null\": null,\n        \"array\":[  ],\n        \"object\":{  },\n        \"address\": \"50 St. James Street\",\n        \"url\": \"http://www.JSON.org/\",\n        \"comment\": \"// /* <!-- --\",\n        \"# -- --> */\": \" \",\n        \" s p a c e d \" :[1,2 , 3\n\n,\n\n4 , 5        ,          6           ,7        ],\"compact\":[1,2,3,4,5,6,7],\n        \"jsontext\": \"{\\\\\"object with 1 member\\\\\":[\\\\\"array with 1 element\\\\\"]}\",\n        \"quotes\": \"&#34; \\\\u0022 %22 0x22 034 &#x22;\",\n        \"\\\\/\\\\\\\\\\\\\"\\\\uCAFE\\\\uBABE\\\\uAB98\\\\uFCDE\\\\ubcda\\\\uef4A\\\\b\\\\f\\\\n\\\\r\\\\t\\`1~!@#$%^&*()_+-=[]{}|;:',./<>?\"\n: \"A key can be any string\"\n    },\n    0.5 ,98.6\n,\n99.44\n,\n\n1066,\n1e1,\n0.1e1,\n1e-1,\n1e00,2e+00,2e-00\n,\"rosebud\"]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n[\n  \"JSON Test Pattern pass1\",\n  { \"object with 1 member\": [\"array with 1 element\"] },\n  {},\n  [],\n  -42,\n  true,\n  false,\n  null,\n  {\n    \"integer\": 1234567890,\n    \"real\": -9876.54321,\n    \"e\": 0.123456789e-12,\n    \"E\": 1.23456789e34,\n    \"\": 23456789012e66,\n    \"zero\": 0,\n    \"one\": 1,\n    \"space\": \" \",\n    \"quote\": \"\\\\\"\",\n    \"backslash\": \"\\\\\\\\\",\n    \"controls\": \"\\\\b\\\\f\\\\n\\\\r\\\\t\",\n    \"slash\": \"/ & /\",\n    \"alpha\": \"abcdefghijklmnopqrstuvwyz\",\n    \"ALPHA\": \"ABCDEFGHIJKLMNOPQRSTUVWYZ\",\n    \"digit\": \"0123456789\",\n    \"0123456789\": \"digit\",\n    \"special\": \"\\`1~!@#$%^&*()_+-={':[,]}|;.</>?\",\n    \"hex\": \"\\\\u0123\\\\u4567\\\\u89AB\\\\uCDEF\\\\uabcd\\\\uef4A\",\n    \"true\": true,\n    \"false\": false,\n    \"null\": null,\n    \"array\": [],\n    \"object\": {},\n    \"address\": \"50 St. James Street\",\n    \"url\": \"http://www.JSON.org/\",\n    \"comment\": \"// /* <!-- --\",\n    \"# -- --> */\": \" \",\n    \" s p a c e d \": [1, 2, 3, 4, 5, 6, 7],\n    \"compact\": [1, 2, 3, 4, 5, 6, 7],\n    \"jsontext\": \"{\\\\\"object with 1 member\\\\\":[\\\\\"array with 1 element\\\\\"]}\",\n    \"quotes\": \"&#34; \\\\u0022 %22 0x22 034 &#x22;\",\n    \"\\\\/\\\\\\\\\\\\\"\\\\uCAFE\\\\uBABE\\\\uAB98\\\\uFCDE\\\\ubcda\\\\uef4A\\\\b\\\\f\\\\n\\\\r\\\\t\\`1~!@#$%^&*()_+-=[]{}|;:',./<>?\": \"A key can be any string\"\n  },\n  0.5,\n  98.6,\n  99.44,\n  1066,\n  1e1,\n  0.1e1,\n  1e-1,\n  1,\n  2,\n  2,\n  \"rosebud\"\n]\n\n`;\n\nexports[`pass1.json 2`] = `\n[\n    \"JSON Test Pattern pass1\",\n    {\"object with 1 member\":[\"array with 1 element\"]},\n    {},\n    [],\n    -42,\n    true,\n    false,\n    null,\n    {\n        \"integer\": 1234567890,\n        \"real\": -9876.543210,\n        \"e\": 0.123456789e-12,\n        \"E\": 1.234567890E+34,\n        \"\":  23456789012E66,\n        \"zero\": 0,\n        \"one\": 1,\n        \"space\": \" \",\n        \"quote\": \"\\\\\"\",\n        \"backslash\": \"\\\\\\\\\",\n        \"controls\": \"\\\\b\\\\f\\\\n\\\\r\\\\t\",\n        \"slash\": \"/ & \\\\/\",\n        \"alpha\": \"abcdefghijklmnopqrstuvwyz\",\n        \"ALPHA\": \"ABCDEFGHIJKLMNOPQRSTUVWYZ\",\n        \"digit\": \"0123456789\",\n        \"0123456789\": \"digit\",\n        \"special\": \"\\`1~!@#$%^&*()_+-={':[,]}|;.</>?\",\n        \"hex\": \"\\\\u0123\\\\u4567\\\\u89AB\\\\uCDEF\\\\uabcd\\\\uef4A\",\n        \"true\": true,\n        \"false\": false,\n        \"null\": null,\n        \"array\":[  ],\n        \"object\":{  },\n        \"address\": \"50 St. James Street\",\n        \"url\": \"http://www.JSON.org/\",\n        \"comment\": \"// /* <!-- --\",\n        \"# -- --> */\": \" \",\n        \" s p a c e d \" :[1,2 , 3\n\n,\n\n4 , 5        ,          6           ,7        ],\"compact\":[1,2,3,4,5,6,7],\n        \"jsontext\": \"{\\\\\"object with 1 member\\\\\":[\\\\\"array with 1 element\\\\\"]}\",\n        \"quotes\": \"&#34; \\\\u0022 %22 0x22 034 &#x22;\",\n        \"\\\\/\\\\\\\\\\\\\"\\\\uCAFE\\\\uBABE\\\\uAB98\\\\uFCDE\\\\ubcda\\\\uef4A\\\\b\\\\f\\\\n\\\\r\\\\t\\`1~!@#$%^&*()_+-=[]{}|;:',./<>?\"\n: \"A key can be any string\"\n    },\n    0.5 ,98.6\n,\n99.44\n,\n\n1066,\n1e1,\n0.1e1,\n1e-1,\n1e00,2e+00,2e-00\n,\"rosebud\"]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n[\n  \"JSON Test Pattern pass1\",\n  { \"object with 1 member\": [\"array with 1 element\"] },\n  {},\n  [],\n  -42,\n  true,\n  false,\n  null,\n  {\n    \"integer\": 1234567890,\n    \"real\": -9876.54321,\n    \"e\": 0.123456789e-12,\n    \"E\": 1.23456789e34,\n    \"\": 23456789012e66,\n    \"zero\": 0,\n    \"one\": 1,\n    \"space\": \" \",\n    \"quote\": \"\\\\\"\",\n    \"backslash\": \"\\\\\\\\\",\n    \"controls\": \"\\\\b\\\\f\\\\n\\\\r\\\\t\",\n    \"slash\": \"/ & /\",\n    \"alpha\": \"abcdefghijklmnopqrstuvwyz\",\n    \"ALPHA\": \"ABCDEFGHIJKLMNOPQRSTUVWYZ\",\n    \"digit\": \"0123456789\",\n    \"0123456789\": \"digit\",\n    \"special\": \"\\`1~!@#$%^&*()_+-={':[,]}|;.</>?\",\n    \"hex\": \"\\\\u0123\\\\u4567\\\\u89AB\\\\uCDEF\\\\uabcd\\\\uef4A\",\n    \"true\": true,\n    \"false\": false,\n    \"null\": null,\n    \"array\": [],\n    \"object\": {},\n    \"address\": \"50 St. James Street\",\n    \"url\": \"http://www.JSON.org/\",\n    \"comment\": \"// /* <!-- --\",\n    \"# -- --> */\": \" \",\n    \" s p a c e d \": [1, 2, 3, 4, 5, 6, 7],\n    \"compact\": [1, 2, 3, 4, 5, 6, 7],\n    \"jsontext\": \"{\\\\\"object with 1 member\\\\\":[\\\\\"array with 1 element\\\\\"]}\",\n    \"quotes\": \"&#34; \\\\u0022 %22 0x22 034 &#x22;\",\n    \"\\\\/\\\\\\\\\\\\\"\\\\uCAFE\\\\uBABE\\\\uAB98\\\\uFCDE\\\\ubcda\\\\uef4A\\\\b\\\\f\\\\n\\\\r\\\\t\\`1~!@#$%^&*()_+-=[]{}|;:',./<>?\": \"A key can be any string\"\n  },\n  0.5,\n  98.6,\n  99.44,\n  1066,\n  1e1,\n  0.1e1,\n  1e-1,\n  1,\n  2,\n  2,\n  \"rosebud\"\n]\n\n`;\n\nexports[`single-line.json 1`] = `\n{\"key1\":[true,false,null],\"key2\":{\"key3\":[1,2,\"3\",1e10,1e-3]}}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n{ \"key1\": [true, false, null], \"key2\": { \"key3\": [1, 2, \"3\", 1e10, 1e-3] } }\n\n`;\n\nexports[`single-line.json 2`] = `\n{\"key1\":[true,false,null],\"key2\":{\"key3\":[1,2,\"3\",1e10,1e-3]}}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n{ \"key1\": [true, false, null], \"key2\": { \"key3\": [1, 2, \"3\", 1e10, 1e-3] } }\n\n`;\n\nexports[`string.json 1`] = `\n\"string\"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\"string\"\n\n`;\n\nexports[`string.json 2`] = `\n\"string\"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\"string\"\n\n`;\n\nexports[`trailingComma.notjson 1`] = `\n{\n  \"k1\": \"v1\",\n  \"k2\": \"v2\",\n  \"k3\": \"v3\"\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n{\n  \"k1\": \"v1\",\n  \"k2\": \"v2\",\n  \"k3\": \"v3\"\n}\n\n`;\n\nexports[`trailingComma.notjson 2`] = `\n{\n  \"k1\": \"v1\",\n  \"k2\": \"v2\",\n  \"k3\": \"v3\"\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n{\n  \"k1\": \"v1\",\n  \"k2\": \"v2\",\n  \"k3\": \"v3\"\n}\n\n`;\n"
  },
  {
    "path": "tests/json/boolean.json",
    "content": "true\n"
  },
  {
    "path": "tests/json/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"json\" });\nrun_spec(__dirname, { parser: \"json\", trailingComma: \"all\" });\n"
  },
  {
    "path": "tests/json/multi-line.json",
    "content": "{\"key1\":[true,false,null],\"key2\":{\"key3\":[1,2,\"3\",\n1e10,1e-3]}}\n"
  },
  {
    "path": "tests/json/null.json",
    "content": "null\n"
  },
  {
    "path": "tests/json/number.json",
    "content": "0\n"
  },
  {
    "path": "tests/json/pass1.json",
    "content": "[\n    \"JSON Test Pattern pass1\",\n    {\"object with 1 member\":[\"array with 1 element\"]},\n    {},\n    [],\n    -42,\n    true,\n    false,\n    null,\n    {\n        \"integer\": 1234567890,\n        \"real\": -9876.543210,\n        \"e\": 0.123456789e-12,\n        \"E\": 1.234567890E+34,\n        \"\":  23456789012E66,\n        \"zero\": 0,\n        \"one\": 1,\n        \"space\": \" \",\n        \"quote\": \"\\\"\",\n        \"backslash\": \"\\\\\",\n        \"controls\": \"\\b\\f\\n\\r\\t\",\n        \"slash\": \"/ & \\/\",\n        \"alpha\": \"abcdefghijklmnopqrstuvwyz\",\n        \"ALPHA\": \"ABCDEFGHIJKLMNOPQRSTUVWYZ\",\n        \"digit\": \"0123456789\",\n        \"0123456789\": \"digit\",\n        \"special\": \"`1~!@#$%^&*()_+-={':[,]}|;.</>?\",\n        \"hex\": \"\\u0123\\u4567\\u89AB\\uCDEF\\uabcd\\uef4A\",\n        \"true\": true,\n        \"false\": false,\n        \"null\": null,\n        \"array\":[  ],\n        \"object\":{  },\n        \"address\": \"50 St. James Street\",\n        \"url\": \"http://www.JSON.org/\",\n        \"comment\": \"// /* <!-- --\",\n        \"# -- --> */\": \" \",\n        \" s p a c e d \" :[1,2 , 3\n\n,\n\n4 , 5        ,          6           ,7        ],\"compact\":[1,2,3,4,5,6,7],\n        \"jsontext\": \"{\\\"object with 1 member\\\":[\\\"array with 1 element\\\"]}\",\n        \"quotes\": \"&#34; \\u0022 %22 0x22 034 &#x22;\",\n        \"\\/\\\\\\\"\\uCAFE\\uBABE\\uAB98\\uFCDE\\ubcda\\uef4A\\b\\f\\n\\r\\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?\"\n: \"A key can be any string\"\n    },\n    0.5 ,98.6\n,\n99.44\n,\n\n1066,\n1e1,\n0.1e1,\n1e-1,\n1e00,2e+00,2e-00\n,\"rosebud\"]"
  },
  {
    "path": "tests/json/single-line.json",
    "content": "{\"key1\":[true,false,null],\"key2\":{\"key3\":[1,2,\"3\",1e10,1e-3]}}\n"
  },
  {
    "path": "tests/json/string.json",
    "content": "\"string\"\n"
  },
  {
    "path": "tests/json/trailingComma.notjson",
    "content": "{\n  \"k1\": \"v1\",\n  \"k2\": \"v2\",\n  \"k3\": \"v3\"\n}\n"
  },
  {
    "path": "tests/jsx/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`conditional-expression.js 1`] = `\n// There are two ways to print ConditionalExpressions: \"normal mode\" and\n// \"JSX mode\". This is normal mode (when breaking):\n//\n//   test\n//     ? consequent\n//     : alternate;\n//\n// And this is JSX mode (when breaking):\n//\n//   test ? (\n//     consequent\n//   ) : (\n//     alternate\n//   );\n//\n// When non-breaking, they look the same:\n//\n//  test ? consequent : alternate;\n//\n// We print a conditional expression in JSX mode if any of the following are\n// true:\n// * Its parent is a JSXExpressionContainer\n// * Its test, consequent, or alternate are JSXElements\n// * It is in a chain with other ConditionalExpressions, and the outermost\n//   one's parent is a JSXExpressionContainer\n// * It is in a chain with other ConditionalExpressions, and any of the\n//   tests, consequents, or alternates of any of the ConditionalExpressions in\n//   the chain are JSXElements.\n// Otherwise, we print in normal mode.\n\n// This ConditionalExpression does not meet any of the other criteria for\n// printing in JSX mode, so it prints in normal mode. The line does not break.\nnormalModeNonBreaking ? \"a\" : \"b\";\n\n// This ConditionalExpression does not meet any of the criteria to print in JSX\n// mode, so it prints in normal mode. Its consequent is very long, so it breaks\n// out to multiple lines.\nnormalModeBreaking\n  ? johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  : \"c\";\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. The line does not break, so it does not contain\n// parens.\n<div>\n  {a ? \"b\" : \"c\"}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. Because the consequent is long enough to break the\n// line, both its consequent and alternate break out and are wrapped in parens.\n<div>\n  {a ? (\n    johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  ) : (\n    \"c\"\n  )}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. The consequent is long enough to break the line, but\n// because the alternate is null, only the consequent is wrapped in parens.\n<div>\n  {a ? (\n    johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  ) : null}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. Because the alternate is long enough to break the\n// line, both its consequent and alternate break out and are wrapped in parens.\n<div>\n  {a ? (\n    \"b\"\n  ) : (\n    johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  )}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. The alternate is long enough to break the line, but\n// because the consequent is null, only the alternate is wrapped in parens.\n<div>\n  {a ? null : (\n    johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  )}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. Because the test is long enough to break the\n// line, both its consequent and alternate break out and are wrapped in parens.\n<div>\n  {johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa ? (\n    \"b\"\n  ) : (\n    \"c\"\n  )}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its test is a\n// JSXElement. It is non-breaking.\n// Note: I have never, ever seen someone use a JSXElement as the test in a\n// ConditionalExpression. But this test is included for completeness.\n<div /> ? jsxModeFromElementNonBreaking : \"a\";\n\n// This ConditionalExpression prints in JSX mode because its consequent is a\n// JSXElement. It is non-breaking.\njsxModeFromElementNonBreaking ? <div /> : \"a\";\n\n// This ConditionalExpression prints in JSX mode because its alternate is a\n// JSXElement. It is non-breaking.\njsxModeFromElementNonBreaking ? \"a\" : <div />;\n\n// This ConditionalExpression prints in JSX mode because its test is a\n// JSXElement. It is breaking.\n// Note: I have never, ever seen someone use a JSXElement as the test in a\n// ConditionalExpression. But this test is included for completeness.\n<div>\n  <span>thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo</span>\n</div>  ? (\n  \"jsx mode from element breaking\"\n) : (\n  \"a\"\n);\n\n// This ConditionalExpression prints in JSX mode because its consequent is a\n// JSXElement. It is breaking.\njsxModeFromElementBreaking ? (\n  <div>\n    <span>thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo</span>\n  </div>\n) : (\n  \"a\"\n);\n\n// This ConditionalExpression prints in JSX mode because its alternate is a\n// JSXElement. It is breaking.\njsxModeFromElementBreaking ? (\n  \"a\"\n) : (\n  <div>\n    <span>thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo</span>\n  </div>\n);\n\n// This chain of ConditionalExpressions prints in JSX mode because the parent of\n// the outermost ConditionalExpression is a JSXExpressionContainer. It is\n// non-breaking.\n<div>\n  {a ? \"a\" : b ? \"b\" : \"c\"}\n</div>;\n\n// This chain of ConditionalExpressions prints in JSX mode because the parent of\n// the outermost ConditionalExpression is a JSXExpressionContainer. It is\n// breaking.\n<div>\n  {a ? (\n    \"a\"\n  ) : b ? (\n    \"b\"\n  ) : (\n    thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo\n  )}\n</div>;\n\n// This chain of ConditionalExpressions prints in JSX mode because there is a\n// JSX element somewhere in the chain. It is non-breaking.\ncable ? \"satellite\" : public ? \"affairs\" : network ? <span id=\"c\" /> : \"dunno\";\n\n// This chain of ConditionalExpressions prints in JSX mode because there is a\n// JSX element somewhere in the chain (in this case, at the end). It is\n// breaking; notice the consequents and alternates in the entire chain get\n// wrapped in parens.\ncable ? (\n  \"satellite\"\n) : public ? (\n  \"affairs\"\n) : network ? (\n  <div>\n    <span>thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo</span>\n  </div>\n) : \"dunno\";\n\n// This chain of ConditionalExpressions prints in JSX mode because there is a\n// JSX element somewhere in the chain (in this case, at the beginning). It is\n// breaking; notice the consequents and alternates in the entire chain get\n// wrapped in parens.\ncable ? (\n  <div>\n    <span>thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo</span>\n  </div>\n) : sateline ? (\n  \"public\"\n) : affairs ? (\n  \"network\"\n) : \"dunno\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// There are two ways to print ConditionalExpressions: \"normal mode\" and\n// \"JSX mode\". This is normal mode (when breaking):\n//\n//   test\n//     ? consequent\n//     : alternate;\n//\n// And this is JSX mode (when breaking):\n//\n//   test ? (\n//     consequent\n//   ) : (\n//     alternate\n//   );\n//\n// When non-breaking, they look the same:\n//\n//  test ? consequent : alternate;\n//\n// We print a conditional expression in JSX mode if any of the following are\n// true:\n// * Its parent is a JSXExpressionContainer\n// * Its test, consequent, or alternate are JSXElements\n// * It is in a chain with other ConditionalExpressions, and the outermost\n//   one's parent is a JSXExpressionContainer\n// * It is in a chain with other ConditionalExpressions, and any of the\n//   tests, consequents, or alternates of any of the ConditionalExpressions in\n//   the chain are JSXElements.\n// Otherwise, we print in normal mode.\n\n// This ConditionalExpression does not meet any of the other criteria for\n// printing in JSX mode, so it prints in normal mode. The line does not break.\nnormalModeNonBreaking ? \"a\" : \"b\";\n\n// This ConditionalExpression does not meet any of the criteria to print in JSX\n// mode, so it prints in normal mode. Its consequent is very long, so it breaks\n// out to multiple lines.\nnormalModeBreaking\n  ? johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  : \"c\";\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. The line does not break, so it does not contain\n// parens.\n<div>{a ? \"b\" : \"c\"}</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. Because the consequent is long enough to break the\n// line, both its consequent and alternate break out and are wrapped in parens.\n<div>\n  {a ? (\n    johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  ) : (\n    \"c\"\n  )}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. The consequent is long enough to break the line, but\n// because the alternate is null, only the consequent is wrapped in parens.\n<div>\n  {a ? (\n    johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  ) : null}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. Because the alternate is long enough to break the\n// line, both its consequent and alternate break out and are wrapped in parens.\n<div>\n  {a ? (\n    \"b\"\n  ) : (\n    johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  )}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. The alternate is long enough to break the line, but\n// because the consequent is null, only the alternate is wrapped in parens.\n<div>\n  {a ? null : (\n    johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  )}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. Because the test is long enough to break the\n// line, both its consequent and alternate break out and are wrapped in parens.\n<div>\n  {johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa ? (\n    \"b\"\n  ) : (\n    \"c\"\n  )}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its test is a\n// JSXElement. It is non-breaking.\n// Note: I have never, ever seen someone use a JSXElement as the test in a\n// ConditionalExpression. But this test is included for completeness.\n<div /> ? jsxModeFromElementNonBreaking : \"a\";\n\n// This ConditionalExpression prints in JSX mode because its consequent is a\n// JSXElement. It is non-breaking.\njsxModeFromElementNonBreaking ? <div /> : \"a\";\n\n// This ConditionalExpression prints in JSX mode because its alternate is a\n// JSXElement. It is non-breaking.\njsxModeFromElementNonBreaking ? \"a\" : <div />;\n\n// This ConditionalExpression prints in JSX mode because its test is a\n// JSXElement. It is breaking.\n// Note: I have never, ever seen someone use a JSXElement as the test in a\n// ConditionalExpression. But this test is included for completeness.\n<div>\n  <span>\n    thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo\n  </span>\n</div> ? (\n  \"jsx mode from element breaking\"\n) : (\n  \"a\"\n);\n\n// This ConditionalExpression prints in JSX mode because its consequent is a\n// JSXElement. It is breaking.\njsxModeFromElementBreaking ? (\n  <div>\n    <span>\n      thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo\n    </span>\n  </div>\n) : (\n  \"a\"\n);\n\n// This ConditionalExpression prints in JSX mode because its alternate is a\n// JSXElement. It is breaking.\njsxModeFromElementBreaking ? (\n  \"a\"\n) : (\n  <div>\n    <span>\n      thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo\n    </span>\n  </div>\n);\n\n// This chain of ConditionalExpressions prints in JSX mode because the parent of\n// the outermost ConditionalExpression is a JSXExpressionContainer. It is\n// non-breaking.\n<div>{a ? \"a\" : b ? \"b\" : \"c\"}</div>;\n\n// This chain of ConditionalExpressions prints in JSX mode because the parent of\n// the outermost ConditionalExpression is a JSXExpressionContainer. It is\n// breaking.\n<div>\n  {a ? (\n    \"a\"\n  ) : b ? (\n    \"b\"\n  ) : (\n    thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo\n  )}\n</div>;\n\n// This chain of ConditionalExpressions prints in JSX mode because there is a\n// JSX element somewhere in the chain. It is non-breaking.\ncable ? \"satellite\" : public ? \"affairs\" : network ? <span id=\"c\" /> : \"dunno\";\n\n// This chain of ConditionalExpressions prints in JSX mode because there is a\n// JSX element somewhere in the chain (in this case, at the end). It is\n// breaking; notice the consequents and alternates in the entire chain get\n// wrapped in parens.\ncable ? (\n  \"satellite\"\n) : public ? (\n  \"affairs\"\n) : network ? (\n  <div>\n    <span>\n      thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo\n    </span>\n  </div>\n) : (\n  \"dunno\"\n);\n\n// This chain of ConditionalExpressions prints in JSX mode because there is a\n// JSX element somewhere in the chain (in this case, at the beginning). It is\n// breaking; notice the consequents and alternates in the entire chain get\n// wrapped in parens.\ncable ? (\n  <div>\n    <span>\n      thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo\n    </span>\n  </div>\n) : sateline ? (\n  \"public\"\n) : affairs ? (\n  \"network\"\n) : (\n  \"dunno\"\n);\n\n`;\n\nexports[`conditional-expression.js 2`] = `\n// There are two ways to print ConditionalExpressions: \"normal mode\" and\n// \"JSX mode\". This is normal mode (when breaking):\n//\n//   test\n//     ? consequent\n//     : alternate;\n//\n// And this is JSX mode (when breaking):\n//\n//   test ? (\n//     consequent\n//   ) : (\n//     alternate\n//   );\n//\n// When non-breaking, they look the same:\n//\n//  test ? consequent : alternate;\n//\n// We print a conditional expression in JSX mode if any of the following are\n// true:\n// * Its parent is a JSXExpressionContainer\n// * Its test, consequent, or alternate are JSXElements\n// * It is in a chain with other ConditionalExpressions, and the outermost\n//   one's parent is a JSXExpressionContainer\n// * It is in a chain with other ConditionalExpressions, and any of the\n//   tests, consequents, or alternates of any of the ConditionalExpressions in\n//   the chain are JSXElements.\n// Otherwise, we print in normal mode.\n\n// This ConditionalExpression does not meet any of the other criteria for\n// printing in JSX mode, so it prints in normal mode. The line does not break.\nnormalModeNonBreaking ? \"a\" : \"b\";\n\n// This ConditionalExpression does not meet any of the criteria to print in JSX\n// mode, so it prints in normal mode. Its consequent is very long, so it breaks\n// out to multiple lines.\nnormalModeBreaking\n  ? johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  : \"c\";\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. The line does not break, so it does not contain\n// parens.\n<div>\n  {a ? \"b\" : \"c\"}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. Because the consequent is long enough to break the\n// line, both its consequent and alternate break out and are wrapped in parens.\n<div>\n  {a ? (\n    johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  ) : (\n    \"c\"\n  )}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. The consequent is long enough to break the line, but\n// because the alternate is null, only the consequent is wrapped in parens.\n<div>\n  {a ? (\n    johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  ) : null}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. Because the alternate is long enough to break the\n// line, both its consequent and alternate break out and are wrapped in parens.\n<div>\n  {a ? (\n    \"b\"\n  ) : (\n    johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  )}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. The alternate is long enough to break the line, but\n// because the consequent is null, only the alternate is wrapped in parens.\n<div>\n  {a ? null : (\n    johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  )}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. Because the test is long enough to break the\n// line, both its consequent and alternate break out and are wrapped in parens.\n<div>\n  {johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa ? (\n    \"b\"\n  ) : (\n    \"c\"\n  )}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its test is a\n// JSXElement. It is non-breaking.\n// Note: I have never, ever seen someone use a JSXElement as the test in a\n// ConditionalExpression. But this test is included for completeness.\n<div /> ? jsxModeFromElementNonBreaking : \"a\";\n\n// This ConditionalExpression prints in JSX mode because its consequent is a\n// JSXElement. It is non-breaking.\njsxModeFromElementNonBreaking ? <div /> : \"a\";\n\n// This ConditionalExpression prints in JSX mode because its alternate is a\n// JSXElement. It is non-breaking.\njsxModeFromElementNonBreaking ? \"a\" : <div />;\n\n// This ConditionalExpression prints in JSX mode because its test is a\n// JSXElement. It is breaking.\n// Note: I have never, ever seen someone use a JSXElement as the test in a\n// ConditionalExpression. But this test is included for completeness.\n<div>\n  <span>thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo</span>\n</div>  ? (\n  \"jsx mode from element breaking\"\n) : (\n  \"a\"\n);\n\n// This ConditionalExpression prints in JSX mode because its consequent is a\n// JSXElement. It is breaking.\njsxModeFromElementBreaking ? (\n  <div>\n    <span>thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo</span>\n  </div>\n) : (\n  \"a\"\n);\n\n// This ConditionalExpression prints in JSX mode because its alternate is a\n// JSXElement. It is breaking.\njsxModeFromElementBreaking ? (\n  \"a\"\n) : (\n  <div>\n    <span>thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo</span>\n  </div>\n);\n\n// This chain of ConditionalExpressions prints in JSX mode because the parent of\n// the outermost ConditionalExpression is a JSXExpressionContainer. It is\n// non-breaking.\n<div>\n  {a ? \"a\" : b ? \"b\" : \"c\"}\n</div>;\n\n// This chain of ConditionalExpressions prints in JSX mode because the parent of\n// the outermost ConditionalExpression is a JSXExpressionContainer. It is\n// breaking.\n<div>\n  {a ? (\n    \"a\"\n  ) : b ? (\n    \"b\"\n  ) : (\n    thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo\n  )}\n</div>;\n\n// This chain of ConditionalExpressions prints in JSX mode because there is a\n// JSX element somewhere in the chain. It is non-breaking.\ncable ? \"satellite\" : public ? \"affairs\" : network ? <span id=\"c\" /> : \"dunno\";\n\n// This chain of ConditionalExpressions prints in JSX mode because there is a\n// JSX element somewhere in the chain (in this case, at the end). It is\n// breaking; notice the consequents and alternates in the entire chain get\n// wrapped in parens.\ncable ? (\n  \"satellite\"\n) : public ? (\n  \"affairs\"\n) : network ? (\n  <div>\n    <span>thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo</span>\n  </div>\n) : \"dunno\";\n\n// This chain of ConditionalExpressions prints in JSX mode because there is a\n// JSX element somewhere in the chain (in this case, at the beginning). It is\n// breaking; notice the consequents and alternates in the entire chain get\n// wrapped in parens.\ncable ? (\n  <div>\n    <span>thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo</span>\n  </div>\n) : sateline ? (\n  \"public\"\n) : affairs ? (\n  \"network\"\n) : \"dunno\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// There are two ways to print ConditionalExpressions: \"normal mode\" and\n// \"JSX mode\". This is normal mode (when breaking):\n//\n//   test\n//     ? consequent\n//     : alternate;\n//\n// And this is JSX mode (when breaking):\n//\n//   test ? (\n//     consequent\n//   ) : (\n//     alternate\n//   );\n//\n// When non-breaking, they look the same:\n//\n//  test ? consequent : alternate;\n//\n// We print a conditional expression in JSX mode if any of the following are\n// true:\n// * Its parent is a JSXExpressionContainer\n// * Its test, consequent, or alternate are JSXElements\n// * It is in a chain with other ConditionalExpressions, and the outermost\n//   one's parent is a JSXExpressionContainer\n// * It is in a chain with other ConditionalExpressions, and any of the\n//   tests, consequents, or alternates of any of the ConditionalExpressions in\n//   the chain are JSXElements.\n// Otherwise, we print in normal mode.\n\n// This ConditionalExpression does not meet any of the other criteria for\n// printing in JSX mode, so it prints in normal mode. The line does not break.\nnormalModeNonBreaking ? \"a\" : \"b\";\n\n// This ConditionalExpression does not meet any of the criteria to print in JSX\n// mode, so it prints in normal mode. Its consequent is very long, so it breaks\n// out to multiple lines.\nnormalModeBreaking\n  ? johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  : \"c\";\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. The line does not break, so it does not contain\n// parens.\n<div>{a ? \"b\" : \"c\"}</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. Because the consequent is long enough to break the\n// line, both its consequent and alternate break out and are wrapped in parens.\n<div>\n  {a ? (\n    johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  ) : (\n    \"c\"\n  )}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. The consequent is long enough to break the line, but\n// because the alternate is null, only the consequent is wrapped in parens.\n<div>\n  {a ? (\n    johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  ) : null}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. Because the alternate is long enough to break the\n// line, both its consequent and alternate break out and are wrapped in parens.\n<div>\n  {a ? (\n    \"b\"\n  ) : (\n    johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  )}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. The alternate is long enough to break the line, but\n// because the consequent is null, only the alternate is wrapped in parens.\n<div>\n  {a ? null : (\n    johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  )}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. Because the test is long enough to break the\n// line, both its consequent and alternate break out and are wrapped in parens.\n<div>\n  {johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa ? (\n    \"b\"\n  ) : (\n    \"c\"\n  )}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its test is a\n// JSXElement. It is non-breaking.\n// Note: I have never, ever seen someone use a JSXElement as the test in a\n// ConditionalExpression. But this test is included for completeness.\n<div /> ? jsxModeFromElementNonBreaking : \"a\";\n\n// This ConditionalExpression prints in JSX mode because its consequent is a\n// JSXElement. It is non-breaking.\njsxModeFromElementNonBreaking ? <div /> : \"a\";\n\n// This ConditionalExpression prints in JSX mode because its alternate is a\n// JSXElement. It is non-breaking.\njsxModeFromElementNonBreaking ? \"a\" : <div />;\n\n// This ConditionalExpression prints in JSX mode because its test is a\n// JSXElement. It is breaking.\n// Note: I have never, ever seen someone use a JSXElement as the test in a\n// ConditionalExpression. But this test is included for completeness.\n<div>\n  <span>\n    thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo\n  </span>\n</div> ? (\n  \"jsx mode from element breaking\"\n) : (\n  \"a\"\n);\n\n// This ConditionalExpression prints in JSX mode because its consequent is a\n// JSXElement. It is breaking.\njsxModeFromElementBreaking ? (\n  <div>\n    <span>\n      thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo\n    </span>\n  </div>\n) : (\n  \"a\"\n);\n\n// This ConditionalExpression prints in JSX mode because its alternate is a\n// JSXElement. It is breaking.\njsxModeFromElementBreaking ? (\n  \"a\"\n) : (\n  <div>\n    <span>\n      thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo\n    </span>\n  </div>\n);\n\n// This chain of ConditionalExpressions prints in JSX mode because the parent of\n// the outermost ConditionalExpression is a JSXExpressionContainer. It is\n// non-breaking.\n<div>{a ? \"a\" : b ? \"b\" : \"c\"}</div>;\n\n// This chain of ConditionalExpressions prints in JSX mode because the parent of\n// the outermost ConditionalExpression is a JSXExpressionContainer. It is\n// breaking.\n<div>\n  {a ? (\n    \"a\"\n  ) : b ? (\n    \"b\"\n  ) : (\n    thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo\n  )}\n</div>;\n\n// This chain of ConditionalExpressions prints in JSX mode because there is a\n// JSX element somewhere in the chain. It is non-breaking.\ncable ? \"satellite\" : public ? \"affairs\" : network ? <span id='c' /> : \"dunno\";\n\n// This chain of ConditionalExpressions prints in JSX mode because there is a\n// JSX element somewhere in the chain (in this case, at the end). It is\n// breaking; notice the consequents and alternates in the entire chain get\n// wrapped in parens.\ncable ? (\n  \"satellite\"\n) : public ? (\n  \"affairs\"\n) : network ? (\n  <div>\n    <span>\n      thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo\n    </span>\n  </div>\n) : (\n  \"dunno\"\n);\n\n// This chain of ConditionalExpressions prints in JSX mode because there is a\n// JSX element somewhere in the chain (in this case, at the beginning). It is\n// breaking; notice the consequents and alternates in the entire chain get\n// wrapped in parens.\ncable ? (\n  <div>\n    <span>\n      thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo\n    </span>\n  </div>\n) : sateline ? (\n  \"public\"\n) : affairs ? (\n  \"network\"\n) : (\n  \"dunno\"\n);\n\n`;\n\nexports[`expression.js 1`] = `\n<View\n  style={\n    {\n      someVeryLongStyle1: \"true\",\n      someVeryLongStyle2: \"true\",\n      someVeryLongStyle3: \"true\",\n      someVeryLongStyle4: \"true\"\n    }\n  }\n/>;\n\n<View\n  style={\n    [\n      {\n        someVeryLongStyle1: \"true\",\n        someVeryLongStyle2: \"true\",\n        someVeryLongStyle3: \"true\",\n        someVeryLongStyle4: \"true\"\n      }\n    ]\n  }\n/>;\n\n<Something>\n  {() => (\n    <SomethingElse>\n      <span />\n    </SomethingElse>\n  )}\n</Something>;\n\n<Something>\n  {items.map(item => (\n    <SomethingElse>\n      <span />\n    </SomethingElse>\n  ))}\n</Something>;\n\n<Something>\n  {function() {\n    return (\n      <SomethingElse>\n        <span />\n      </SomethingElse>\n    );\n  }}\n</Something>;\n\n<RadioListItem\n  key={option}\n  imageSource={this.props.veryBigItemImageSourceFunc &&\n    this.props.veryBigItemImageSourceFunc(option)}\n  imageSize={this.props.veryBigItemImageSize}\n  imageView={this.props.veryBigItemImageViewFunc &&\n    this.props.veryBigItemImageViewFunc(option)}\n  heading={this.props.displayTextFunc(option)}\n  value={option}\n/>;\n\n<ParentComponent prop={\n  <Child>\n    test\n  </Child>\n}/>;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<View\n  style={{\n    someVeryLongStyle1: \"true\",\n    someVeryLongStyle2: \"true\",\n    someVeryLongStyle3: \"true\",\n    someVeryLongStyle4: \"true\"\n  }}\n/>;\n\n<View\n  style={[\n    {\n      someVeryLongStyle1: \"true\",\n      someVeryLongStyle2: \"true\",\n      someVeryLongStyle3: \"true\",\n      someVeryLongStyle4: \"true\"\n    }\n  ]}\n/>;\n\n<Something>\n  {() => (\n    <SomethingElse>\n      <span />\n    </SomethingElse>\n  )}\n</Something>;\n\n<Something>\n  {items.map(item => (\n    <SomethingElse>\n      <span />\n    </SomethingElse>\n  ))}\n</Something>;\n\n<Something>\n  {function() {\n    return (\n      <SomethingElse>\n        <span />\n      </SomethingElse>\n    );\n  }}\n</Something>;\n\n<RadioListItem\n  key={option}\n  imageSource={\n    this.props.veryBigItemImageSourceFunc &&\n    this.props.veryBigItemImageSourceFunc(option)\n  }\n  imageSize={this.props.veryBigItemImageSize}\n  imageView={\n    this.props.veryBigItemImageViewFunc &&\n    this.props.veryBigItemImageViewFunc(option)\n  }\n  heading={this.props.displayTextFunc(option)}\n  value={option}\n/>;\n\n<ParentComponent prop={<Child>test</Child>} />;\n\n`;\n\nexports[`expression.js 2`] = `\n<View\n  style={\n    {\n      someVeryLongStyle1: \"true\",\n      someVeryLongStyle2: \"true\",\n      someVeryLongStyle3: \"true\",\n      someVeryLongStyle4: \"true\"\n    }\n  }\n/>;\n\n<View\n  style={\n    [\n      {\n        someVeryLongStyle1: \"true\",\n        someVeryLongStyle2: \"true\",\n        someVeryLongStyle3: \"true\",\n        someVeryLongStyle4: \"true\"\n      }\n    ]\n  }\n/>;\n\n<Something>\n  {() => (\n    <SomethingElse>\n      <span />\n    </SomethingElse>\n  )}\n</Something>;\n\n<Something>\n  {items.map(item => (\n    <SomethingElse>\n      <span />\n    </SomethingElse>\n  ))}\n</Something>;\n\n<Something>\n  {function() {\n    return (\n      <SomethingElse>\n        <span />\n      </SomethingElse>\n    );\n  }}\n</Something>;\n\n<RadioListItem\n  key={option}\n  imageSource={this.props.veryBigItemImageSourceFunc &&\n    this.props.veryBigItemImageSourceFunc(option)}\n  imageSize={this.props.veryBigItemImageSize}\n  imageView={this.props.veryBigItemImageViewFunc &&\n    this.props.veryBigItemImageViewFunc(option)}\n  heading={this.props.displayTextFunc(option)}\n  value={option}\n/>;\n\n<ParentComponent prop={\n  <Child>\n    test\n  </Child>\n}/>;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<View\n  style={{\n    someVeryLongStyle1: \"true\",\n    someVeryLongStyle2: \"true\",\n    someVeryLongStyle3: \"true\",\n    someVeryLongStyle4: \"true\"\n  }}\n/>;\n\n<View\n  style={[\n    {\n      someVeryLongStyle1: \"true\",\n      someVeryLongStyle2: \"true\",\n      someVeryLongStyle3: \"true\",\n      someVeryLongStyle4: \"true\"\n    }\n  ]}\n/>;\n\n<Something>\n  {() => (\n    <SomethingElse>\n      <span />\n    </SomethingElse>\n  )}\n</Something>;\n\n<Something>\n  {items.map(item => (\n    <SomethingElse>\n      <span />\n    </SomethingElse>\n  ))}\n</Something>;\n\n<Something>\n  {function() {\n    return (\n      <SomethingElse>\n        <span />\n      </SomethingElse>\n    );\n  }}\n</Something>;\n\n<RadioListItem\n  key={option}\n  imageSource={\n    this.props.veryBigItemImageSourceFunc &&\n    this.props.veryBigItemImageSourceFunc(option)\n  }\n  imageSize={this.props.veryBigItemImageSize}\n  imageView={\n    this.props.veryBigItemImageViewFunc &&\n    this.props.veryBigItemImageViewFunc(option)\n  }\n  heading={this.props.displayTextFunc(option)}\n  value={option}\n/>;\n\n<ParentComponent prop={<Child>test</Child>} />;\n\n`;\n\nexports[`flow_fix_me.js 1`] = `\nconst aDiv = (\n  /* $FlowFixMe */\n  <div className=\"foo\">\n    Foo bar\n  </div>\n);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst aDiv = (\n  /* $FlowFixMe */\n  <div className=\"foo\">Foo bar</div>\n);\n\n`;\n\nexports[`flow_fix_me.js 2`] = `\nconst aDiv = (\n  /* $FlowFixMe */\n  <div className=\"foo\">\n    Foo bar\n  </div>\n);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst aDiv = (\n  /* $FlowFixMe */\n  <div className='foo'>Foo bar</div>\n);\n\n`;\n\nexports[`html_escape.js 1`] = `\nexport default () => <a href=\"https://foo.bar?q1=foo&q2=bar\" />;\n\n() => <img src=\"https://bar.foo?param1=1&param2=2\" />;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default () => <a href=\"https://foo.bar?q1=foo&q2=bar\" />;\n\n() => <img src=\"https://bar.foo?param1=1&param2=2\" />;\n\n`;\n\nexports[`html_escape.js 2`] = `\nexport default () => <a href=\"https://foo.bar?q1=foo&q2=bar\" />;\n\n() => <img src=\"https://bar.foo?param1=1&param2=2\" />;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default () => <a href='https://foo.bar?q1=foo&q2=bar' />;\n\n() => <img src='https://bar.foo?param1=1&param2=2' />;\n\n`;\n\nexports[`hug.js 1`] = `\n<div>\n  {__DEV__\n    ? this.renderDevApp()\n    : <div>\n      {routes.map(route => (\n        <MatchAsync\n          key={\\`\\${route.to}-async\\`}\n          pattern={route.to}\n          exactly={route.to === \"/\"}\n          getComponent={routeES6Modules[route.value]}\n        />\n      ))}\n    </div>}\n</div>;\n\n<div>\n  {__DEV__ && <div>\n    {routes.map(route => (\n      <MatchAsync\n        key={\\`\\${route.to}-async\\`}\n        pattern={route.to}\n        exactly={route.to === \"/\"}\n        getComponent={routeES6Modules[route.value]}\n      />\n    ))}\n    </div>}\n</div>;\n\n<div>\n  {member.memberName.memberSomething +\n    (member.memberDef.memberSomething.signatures ? '()' : '')}\n</div>\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<div>\n  {__DEV__ ? (\n    this.renderDevApp()\n  ) : (\n    <div>\n      {routes.map(route => (\n        <MatchAsync\n          key={\\`\\${route.to}-async\\`}\n          pattern={route.to}\n          exactly={route.to === \"/\"}\n          getComponent={routeES6Modules[route.value]}\n        />\n      ))}\n    </div>\n  )}\n</div>;\n\n<div>\n  {__DEV__ && (\n    <div>\n      {routes.map(route => (\n        <MatchAsync\n          key={\\`\\${route.to}-async\\`}\n          pattern={route.to}\n          exactly={route.to === \"/\"}\n          getComponent={routeES6Modules[route.value]}\n        />\n      ))}\n    </div>\n  )}\n</div>;\n\n<div>\n  {member.memberName.memberSomething +\n    (member.memberDef.memberSomething.signatures ? \"()\" : \"\")}\n</div>;\n\n`;\n\nexports[`hug.js 2`] = `\n<div>\n  {__DEV__\n    ? this.renderDevApp()\n    : <div>\n      {routes.map(route => (\n        <MatchAsync\n          key={\\`\\${route.to}-async\\`}\n          pattern={route.to}\n          exactly={route.to === \"/\"}\n          getComponent={routeES6Modules[route.value]}\n        />\n      ))}\n    </div>}\n</div>;\n\n<div>\n  {__DEV__ && <div>\n    {routes.map(route => (\n      <MatchAsync\n        key={\\`\\${route.to}-async\\`}\n        pattern={route.to}\n        exactly={route.to === \"/\"}\n        getComponent={routeES6Modules[route.value]}\n      />\n    ))}\n    </div>}\n</div>;\n\n<div>\n  {member.memberName.memberSomething +\n    (member.memberDef.memberSomething.signatures ? '()' : '')}\n</div>\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<div>\n  {__DEV__ ? (\n    this.renderDevApp()\n  ) : (\n    <div>\n      {routes.map(route => (\n        <MatchAsync\n          key={\\`\\${route.to}-async\\`}\n          pattern={route.to}\n          exactly={route.to === \"/\"}\n          getComponent={routeES6Modules[route.value]}\n        />\n      ))}\n    </div>\n  )}\n</div>;\n\n<div>\n  {__DEV__ && (\n    <div>\n      {routes.map(route => (\n        <MatchAsync\n          key={\\`\\${route.to}-async\\`}\n          pattern={route.to}\n          exactly={route.to === \"/\"}\n          getComponent={routeES6Modules[route.value]}\n        />\n      ))}\n    </div>\n  )}\n</div>;\n\n<div>\n  {member.memberName.memberSomething +\n    (member.memberDef.memberSomething.signatures ? \"()\" : \"\")}\n</div>;\n\n`;\n\nexports[`logical-expression.js 1`] = `\n<div>\n  {a || \"b\"}\n</div>;\n\n<div>\n  {a && \"b\"}\n</div>;\n\n<div>\n  {a || <span></span>}\n</div>;\n\n<div>\n  {a && <span></span>}\n</div>;\n\n<div>\n  {a && <span>\n    <div>\n      <div></div>\n    </div>\n  </span>}\n</div>;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<div>{a || \"b\"}</div>;\n\n<div>{a && \"b\"}</div>;\n\n<div>{a || <span />}</div>;\n\n<div>{a && <span />}</div>;\n\n<div>\n  {a && (\n    <span>\n      <div>\n        <div />\n      </div>\n    </span>\n  )}\n</div>;\n\n`;\n\nexports[`logical-expression.js 2`] = `\n<div>\n  {a || \"b\"}\n</div>;\n\n<div>\n  {a && \"b\"}\n</div>;\n\n<div>\n  {a || <span></span>}\n</div>;\n\n<div>\n  {a && <span></span>}\n</div>;\n\n<div>\n  {a && <span>\n    <div>\n      <div></div>\n    </div>\n  </span>}\n</div>;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<div>{a || \"b\"}</div>;\n\n<div>{a && \"b\"}</div>;\n\n<div>{a || <span />}</div>;\n\n<div>{a && <span />}</div>;\n\n<div>\n  {a && (\n    <span>\n      <div>\n        <div />\n      </div>\n    </span>\n  )}\n</div>;\n\n`;\n\nexports[`object-property.js 1`] = `\nconst tabs = [\n  {\n    title: \"General Info\",\n    content: (\n      <GeneralForm\n        long-attribute=\"i-need-long-value-here\"\n        onSave={ onSave }\n        onCancel={ onCancel }\n        countries={ countries }\n      />\n    )\n  }\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst tabs = [\n  {\n    title: \"General Info\",\n    content: (\n      <GeneralForm\n        long-attribute=\"i-need-long-value-here\"\n        onSave={onSave}\n        onCancel={onCancel}\n        countries={countries}\n      />\n    )\n  }\n];\n\n`;\n\nexports[`object-property.js 2`] = `\nconst tabs = [\n  {\n    title: \"General Info\",\n    content: (\n      <GeneralForm\n        long-attribute=\"i-need-long-value-here\"\n        onSave={ onSave }\n        onCancel={ onCancel }\n        countries={ countries }\n      />\n    )\n  }\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst tabs = [\n  {\n    title: \"General Info\",\n    content: (\n      <GeneralForm\n        long-attribute='i-need-long-value-here'\n        onSave={onSave}\n        onCancel={onCancel}\n        countries={countries}\n      />\n    )\n  }\n];\n\n`;\n\nexports[`open-break.js 1`] = `\n<td\nonClick={() => {\n  a\n}}>{header}{showSort}</td>;\n\n<td\nonClick={() => {\n  a\n}}>{header}<showSort attr=\"long long long long long long long long long long long\"/></td>;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<td\n  onClick={() => {\n    a;\n  }}\n>\n  {header}\n  {showSort}\n</td>;\n\n<td\n  onClick={() => {\n    a;\n  }}\n>\n  {header}\n  <showSort attr=\"long long long long long long long long long long long\" />\n</td>;\n\n`;\n\nexports[`open-break.js 2`] = `\n<td\nonClick={() => {\n  a\n}}>{header}{showSort}</td>;\n\n<td\nonClick={() => {\n  a\n}}>{header}<showSort attr=\"long long long long long long long long long long long\"/></td>;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<td\n  onClick={() => {\n    a;\n  }}\n>\n  {header}\n  {showSort}\n</td>;\n\n<td\n  onClick={() => {\n    a;\n  }}\n>\n  {header}\n  <showSort attr='long long long long long long long long long long long' />\n</td>;\n\n`;\n\nexports[`parens.js 1`] = `\na = [\n  <path\n    key='0'\n    d='M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,'\n  />,\n  <path\n    key='1'\n    d='M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,'\n  />,\n];\n\n<div {...((foo || foo === null) ? {foo} : null)} />\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\na = [\n  <path\n    key=\"0\"\n    d=\"M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,\"\n  />,\n  <path\n    key=\"1\"\n    d=\"M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,\"\n  />\n];\n\n<div {...(foo || foo === null ? { foo } : null)} />;\n\n`;\n\nexports[`parens.js 2`] = `\na = [\n  <path\n    key='0'\n    d='M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,'\n  />,\n  <path\n    key='1'\n    d='M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,'\n  />,\n];\n\n<div {...((foo || foo === null) ? {foo} : null)} />\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\na = [\n  <path\n    key='0'\n    d='M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,'\n  />,\n  <path\n    key='1'\n    d='M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,'\n  />\n];\n\n<div {...(foo || foo === null ? { foo } : null)} />;\n\n`;\n\nexports[`quotes.js 1`] = `\n<div id=\"&quot;'<>&amp;quot;\" />;\n<div id='\"&#39;<>&amp;quot;' />;\n<div id={'\\\\'\"&quot;<>&amp;quot;'} />;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<div id=\"&quot;'<>&amp;quot;\" />;\n<div id=\"&quot;&#39;<>&amp;quot;\" />;\n<div id={\"'\\\\\"&quot;<>&amp;quot;\"} />;\n\n`;\n\nexports[`quotes.js 2`] = `\n<div id=\"&quot;'<>&amp;quot;\" />;\n<div id='\"&#39;<>&amp;quot;' />;\n<div id={'\\\\'\"&quot;<>&amp;quot;'} />;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<div id='&quot;&#39;<>&amp;quot;' />;\n<div id='\"&#39;<>&amp;quot;' />;\n<div id={\"'\\\\\"&quot;<>&amp;quot;\"} />;\n\n`;\n\nexports[`return-statement.js 1`] = `\nconst NonBreakingArrowExpression = () => <div />;\n\nconst BreakingArrowExpression = () => <div>\n  <div>\n    bla bla bla\n  </div>\n</div>;\n\nconst NonBreakingArrowExpressionWBody = () => {\n  return (\n    <div />\n  );\n};\n\nconst BreakingArrowExpressionWBody = () => {\n  return <div>\n    <div>\n      bla bla bla\n    </div>\n  </div>\n};\n\nconst NonBreakingFunction = function() {\n  return (\n    <div />\n  );\n};\n\nconst BreakingFunction = function() {\n  return <div>\n    <div>\n      bla bla bla\n    </div>\n  </div>\n};\n\nclass NonBreakingClass extends React.component {\n  render() {\n    return (\n      <div />\n    );\n  }\n}\n\nclass BreakingClass extends React.component {\n  render() {\n    return <div>\n      <div>\n        bla bla bla\n      </div>\n    </div>;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst NonBreakingArrowExpression = () => <div />;\n\nconst BreakingArrowExpression = () => (\n  <div>\n    <div>bla bla bla</div>\n  </div>\n);\n\nconst NonBreakingArrowExpressionWBody = () => {\n  return <div />;\n};\n\nconst BreakingArrowExpressionWBody = () => {\n  return (\n    <div>\n      <div>bla bla bla</div>\n    </div>\n  );\n};\n\nconst NonBreakingFunction = function() {\n  return <div />;\n};\n\nconst BreakingFunction = function() {\n  return (\n    <div>\n      <div>bla bla bla</div>\n    </div>\n  );\n};\n\nclass NonBreakingClass extends React.component {\n  render() {\n    return <div />;\n  }\n}\n\nclass BreakingClass extends React.component {\n  render() {\n    return (\n      <div>\n        <div>bla bla bla</div>\n      </div>\n    );\n  }\n}\n\n`;\n\nexports[`return-statement.js 2`] = `\nconst NonBreakingArrowExpression = () => <div />;\n\nconst BreakingArrowExpression = () => <div>\n  <div>\n    bla bla bla\n  </div>\n</div>;\n\nconst NonBreakingArrowExpressionWBody = () => {\n  return (\n    <div />\n  );\n};\n\nconst BreakingArrowExpressionWBody = () => {\n  return <div>\n    <div>\n      bla bla bla\n    </div>\n  </div>\n};\n\nconst NonBreakingFunction = function() {\n  return (\n    <div />\n  );\n};\n\nconst BreakingFunction = function() {\n  return <div>\n    <div>\n      bla bla bla\n    </div>\n  </div>\n};\n\nclass NonBreakingClass extends React.component {\n  render() {\n    return (\n      <div />\n    );\n  }\n}\n\nclass BreakingClass extends React.component {\n  render() {\n    return <div>\n      <div>\n        bla bla bla\n      </div>\n    </div>;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst NonBreakingArrowExpression = () => <div />;\n\nconst BreakingArrowExpression = () => (\n  <div>\n    <div>bla bla bla</div>\n  </div>\n);\n\nconst NonBreakingArrowExpressionWBody = () => {\n  return <div />;\n};\n\nconst BreakingArrowExpressionWBody = () => {\n  return (\n    <div>\n      <div>bla bla bla</div>\n    </div>\n  );\n};\n\nconst NonBreakingFunction = function() {\n  return <div />;\n};\n\nconst BreakingFunction = function() {\n  return (\n    <div>\n      <div>bla bla bla</div>\n    </div>\n  );\n};\n\nclass NonBreakingClass extends React.component {\n  render() {\n    return <div />;\n  }\n}\n\nclass BreakingClass extends React.component {\n  render() {\n    return (\n      <div>\n        <div>bla bla bla</div>\n      </div>\n    );\n  }\n}\n\n`;\n\nexports[`spacing.js 1`] = `\nconst Labels = {\n  label1: (\n    <fbt>\n      Label 1\n    </fbt>\n  ),\n\n  label2: (\n    <fbt>\n      Label 2\n    </fbt>\n  ),\n\n  label3: (\n    <fbt>\n      Label 3\n    </fbt>\n  ),\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst Labels = {\n  label1: <fbt>Label 1</fbt>,\n\n  label2: <fbt>Label 2</fbt>,\n\n  label3: <fbt>Label 3</fbt>\n};\n\n`;\n\nexports[`spacing.js 2`] = `\nconst Labels = {\n  label1: (\n    <fbt>\n      Label 1\n    </fbt>\n  ),\n\n  label2: (\n    <fbt>\n      Label 2\n    </fbt>\n  ),\n\n  label3: (\n    <fbt>\n      Label 3\n    </fbt>\n  ),\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst Labels = {\n  label1: <fbt>Label 1</fbt>,\n\n  label2: <fbt>Label 2</fbt>,\n\n  label3: <fbt>Label 3</fbt>\n};\n\n`;\n"
  },
  {
    "path": "tests/jsx/conditional-expression.js",
    "content": "// There are two ways to print ConditionalExpressions: \"normal mode\" and\n// \"JSX mode\". This is normal mode (when breaking):\n//\n//   test\n//     ? consequent\n//     : alternate;\n//\n// And this is JSX mode (when breaking):\n//\n//   test ? (\n//     consequent\n//   ) : (\n//     alternate\n//   );\n//\n// When non-breaking, they look the same:\n//\n//  test ? consequent : alternate;\n//\n// We print a conditional expression in JSX mode if any of the following are\n// true:\n// * Its parent is a JSXExpressionContainer\n// * Its test, consequent, or alternate are JSXElements\n// * It is in a chain with other ConditionalExpressions, and the outermost\n//   one's parent is a JSXExpressionContainer\n// * It is in a chain with other ConditionalExpressions, and any of the\n//   tests, consequents, or alternates of any of the ConditionalExpressions in\n//   the chain are JSXElements.\n// Otherwise, we print in normal mode.\n\n// This ConditionalExpression does not meet any of the other criteria for\n// printing in JSX mode, so it prints in normal mode. The line does not break.\nnormalModeNonBreaking ? \"a\" : \"b\";\n\n// This ConditionalExpression does not meet any of the criteria to print in JSX\n// mode, so it prints in normal mode. Its consequent is very long, so it breaks\n// out to multiple lines.\nnormalModeBreaking\n  ? johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  : \"c\";\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. The line does not break, so it does not contain\n// parens.\n<div>\n  {a ? \"b\" : \"c\"}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. Because the consequent is long enough to break the\n// line, both its consequent and alternate break out and are wrapped in parens.\n<div>\n  {a ? (\n    johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  ) : (\n    \"c\"\n  )}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. The consequent is long enough to break the line, but\n// because the alternate is null, only the consequent is wrapped in parens.\n<div>\n  {a ? (\n    johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  ) : null}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. Because the alternate is long enough to break the\n// line, both its consequent and alternate break out and are wrapped in parens.\n<div>\n  {a ? (\n    \"b\"\n  ) : (\n    johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  )}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. The alternate is long enough to break the line, but\n// because the consequent is null, only the alternate is wrapped in parens.\n<div>\n  {a ? null : (\n    johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa\n  )}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its parent is a\n// JSXExpressionContainer. Because the test is long enough to break the\n// line, both its consequent and alternate break out and are wrapped in parens.\n<div>\n  {johnJacobJingleHeimerSchmidtHisNameIsMyNameTooWheneverWeGoOutThePeopleAlwaysShoutThereGoesJohnJacobJingleHeimerSchmidtYaDaDaDaDaDaDa ? (\n    \"b\"\n  ) : (\n    \"c\"\n  )}\n</div>;\n\n// This ConditionalExpression prints in JSX mode because its test is a\n// JSXElement. It is non-breaking.\n// Note: I have never, ever seen someone use a JSXElement as the test in a\n// ConditionalExpression. But this test is included for completeness.\n<div /> ? jsxModeFromElementNonBreaking : \"a\";\n\n// This ConditionalExpression prints in JSX mode because its consequent is a\n// JSXElement. It is non-breaking.\njsxModeFromElementNonBreaking ? <div /> : \"a\";\n\n// This ConditionalExpression prints in JSX mode because its alternate is a\n// JSXElement. It is non-breaking.\njsxModeFromElementNonBreaking ? \"a\" : <div />;\n\n// This ConditionalExpression prints in JSX mode because its test is a\n// JSXElement. It is breaking.\n// Note: I have never, ever seen someone use a JSXElement as the test in a\n// ConditionalExpression. But this test is included for completeness.\n<div>\n  <span>thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo</span>\n</div>  ? (\n  \"jsx mode from element breaking\"\n) : (\n  \"a\"\n);\n\n// This ConditionalExpression prints in JSX mode because its consequent is a\n// JSXElement. It is breaking.\njsxModeFromElementBreaking ? (\n  <div>\n    <span>thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo</span>\n  </div>\n) : (\n  \"a\"\n);\n\n// This ConditionalExpression prints in JSX mode because its alternate is a\n// JSXElement. It is breaking.\njsxModeFromElementBreaking ? (\n  \"a\"\n) : (\n  <div>\n    <span>thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo</span>\n  </div>\n);\n\n// This chain of ConditionalExpressions prints in JSX mode because the parent of\n// the outermost ConditionalExpression is a JSXExpressionContainer. It is\n// non-breaking.\n<div>\n  {a ? \"a\" : b ? \"b\" : \"c\"}\n</div>;\n\n// This chain of ConditionalExpressions prints in JSX mode because the parent of\n// the outermost ConditionalExpression is a JSXExpressionContainer. It is\n// breaking.\n<div>\n  {a ? (\n    \"a\"\n  ) : b ? (\n    \"b\"\n  ) : (\n    thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo\n  )}\n</div>;\n\n// This chain of ConditionalExpressions prints in JSX mode because there is a\n// JSX element somewhere in the chain. It is non-breaking.\ncable ? \"satellite\" : public ? \"affairs\" : network ? <span id=\"c\" /> : \"dunno\";\n\n// This chain of ConditionalExpressions prints in JSX mode because there is a\n// JSX element somewhere in the chain (in this case, at the end). It is\n// breaking; notice the consequents and alternates in the entire chain get\n// wrapped in parens.\ncable ? (\n  \"satellite\"\n) : public ? (\n  \"affairs\"\n) : network ? (\n  <div>\n    <span>thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo</span>\n  </div>\n) : \"dunno\";\n\n// This chain of ConditionalExpressions prints in JSX mode because there is a\n// JSX element somewhere in the chain (in this case, at the beginning). It is\n// breaking; notice the consequents and alternates in the entire chain get\n// wrapped in parens.\ncable ? (\n  <div>\n    <span>thisIsASongAboutYourPoorSickPenguinHeHasAFeverAndHisToesAreBlueButIfISingToYourPoorSickPenguinHeWillFeelBetterInADayOrTwo</span>\n  </div>\n) : sateline ? (\n  \"public\"\n) : affairs ? (\n  \"network\"\n) : \"dunno\";\n"
  },
  {
    "path": "tests/jsx/expression.js",
    "content": "<View\n  style={\n    {\n      someVeryLongStyle1: \"true\",\n      someVeryLongStyle2: \"true\",\n      someVeryLongStyle3: \"true\",\n      someVeryLongStyle4: \"true\"\n    }\n  }\n/>;\n\n<View\n  style={\n    [\n      {\n        someVeryLongStyle1: \"true\",\n        someVeryLongStyle2: \"true\",\n        someVeryLongStyle3: \"true\",\n        someVeryLongStyle4: \"true\"\n      }\n    ]\n  }\n/>;\n\n<Something>\n  {() => (\n    <SomethingElse>\n      <span />\n    </SomethingElse>\n  )}\n</Something>;\n\n<Something>\n  {items.map(item => (\n    <SomethingElse>\n      <span />\n    </SomethingElse>\n  ))}\n</Something>;\n\n<Something>\n  {function() {\n    return (\n      <SomethingElse>\n        <span />\n      </SomethingElse>\n    );\n  }}\n</Something>;\n\n<RadioListItem\n  key={option}\n  imageSource={this.props.veryBigItemImageSourceFunc &&\n    this.props.veryBigItemImageSourceFunc(option)}\n  imageSize={this.props.veryBigItemImageSize}\n  imageView={this.props.veryBigItemImageViewFunc &&\n    this.props.veryBigItemImageViewFunc(option)}\n  heading={this.props.displayTextFunc(option)}\n  value={option}\n/>;\n\n<ParentComponent prop={\n  <Child>\n    test\n  </Child>\n}/>;\n"
  },
  {
    "path": "tests/jsx/flow_fix_me.js",
    "content": "const aDiv = (\n  /* $FlowFixMe */\n  <div className=\"foo\">\n    Foo bar\n  </div>\n);\n"
  },
  {
    "path": "tests/jsx/html_escape.js",
    "content": "export default () => <a href=\"https://foo.bar?q1=foo&q2=bar\" />;\n\n() => <img src=\"https://bar.foo?param1=1&param2=2\" />;\n"
  },
  {
    "path": "tests/jsx/hug.js",
    "content": "<div>\n  {__DEV__\n    ? this.renderDevApp()\n    : <div>\n      {routes.map(route => (\n        <MatchAsync\n          key={`${route.to}-async`}\n          pattern={route.to}\n          exactly={route.to === \"/\"}\n          getComponent={routeES6Modules[route.value]}\n        />\n      ))}\n    </div>}\n</div>;\n\n<div>\n  {__DEV__ && <div>\n    {routes.map(route => (\n      <MatchAsync\n        key={`${route.to}-async`}\n        pattern={route.to}\n        exactly={route.to === \"/\"}\n        getComponent={routeES6Modules[route.value]}\n      />\n    ))}\n    </div>}\n</div>;\n\n<div>\n  {member.memberName.memberSomething +\n    (member.memberDef.memberSomething.signatures ? '()' : '')}\n</div>\n"
  },
  {
    "path": "tests/jsx/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\", \"typescript\"]);\nrun_spec(__dirname, { jsxSingleQuote: true }, [\"babylon\", \"typescript\"]);\n"
  },
  {
    "path": "tests/jsx/logical-expression.js",
    "content": "<div>\n  {a || \"b\"}\n</div>;\n\n<div>\n  {a && \"b\"}\n</div>;\n\n<div>\n  {a || <span></span>}\n</div>;\n\n<div>\n  {a && <span></span>}\n</div>;\n\n<div>\n  {a && <span>\n    <div>\n      <div></div>\n    </div>\n  </span>}\n</div>;\n"
  },
  {
    "path": "tests/jsx/object-property.js",
    "content": "const tabs = [\n  {\n    title: \"General Info\",\n    content: (\n      <GeneralForm\n        long-attribute=\"i-need-long-value-here\"\n        onSave={ onSave }\n        onCancel={ onCancel }\n        countries={ countries }\n      />\n    )\n  }\n];\n"
  },
  {
    "path": "tests/jsx/open-break.js",
    "content": "<td\nonClick={() => {\n  a\n}}>{header}{showSort}</td>;\n\n<td\nonClick={() => {\n  a\n}}>{header}<showSort attr=\"long long long long long long long long long long long\"/></td>;\n"
  },
  {
    "path": "tests/jsx/parens.js",
    "content": "a = [\n  <path\n    key='0'\n    d='M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,'\n  />,\n  <path\n    key='1'\n    d='M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,M13.6,10.6l,4-2.8L9.5,'\n  />,\n];\n\n<div {...((foo || foo === null) ? {foo} : null)} />\n"
  },
  {
    "path": "tests/jsx/quotes.js",
    "content": "<div id=\"&quot;'<>&amp;quot;\" />;\n<div id='\"&#39;<>&amp;quot;' />;\n<div id={'\\'\"&quot;<>&amp;quot;'} />;\n"
  },
  {
    "path": "tests/jsx/return-statement.js",
    "content": "const NonBreakingArrowExpression = () => <div />;\n\nconst BreakingArrowExpression = () => <div>\n  <div>\n    bla bla bla\n  </div>\n</div>;\n\nconst NonBreakingArrowExpressionWBody = () => {\n  return (\n    <div />\n  );\n};\n\nconst BreakingArrowExpressionWBody = () => {\n  return <div>\n    <div>\n      bla bla bla\n    </div>\n  </div>\n};\n\nconst NonBreakingFunction = function() {\n  return (\n    <div />\n  );\n};\n\nconst BreakingFunction = function() {\n  return <div>\n    <div>\n      bla bla bla\n    </div>\n  </div>\n};\n\nclass NonBreakingClass extends React.component {\n  render() {\n    return (\n      <div />\n    );\n  }\n}\n\nclass BreakingClass extends React.component {\n  render() {\n    return <div>\n      <div>\n        bla bla bla\n      </div>\n    </div>;\n  }\n}\n"
  },
  {
    "path": "tests/jsx/spacing.js",
    "content": "const Labels = {\n  label1: (\n    <fbt>\n      Label 1\n    </fbt>\n  ),\n\n  label2: (\n    <fbt>\n      Label 2\n    </fbt>\n  ),\n\n  label3: (\n    <fbt>\n      Label 3\n    </fbt>\n  ),\n};\n"
  },
  {
    "path": "tests/jsx-multiline-assign/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nconst comp1 = (\n  <div style={styles} key=\"something\">\n    Keep the wrapping parens.\n  </div>\n);\n\nconst comp2 = <div style={styles} key=\"something\">\n  Create wrapping parens.\n</div>;\n\ncomp2A = <div style={styles} key=\"something\">\n  Create wrapping parens.\n</div>;\n\nconst comp3 = <div style={styles} key=\"something\">Bump to next line without parens</div>;\n\nconst comp4 = <div style={styles} key=\"something\">Create wrapping parens and indent <strong>all the things</strong>.</div>;\n\nconst comp5 = <div>Keep it on one line.</div>;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst comp1 = (\n  <div style={styles} key=\"something\">\n    Keep the wrapping parens.\n  </div>\n);\n\nconst comp2 = (\n  <div style={styles} key=\"something\">\n    Create wrapping parens.\n  </div>\n);\n\ncomp2A = (\n  <div style={styles} key=\"something\">\n    Create wrapping parens.\n  </div>\n);\n\nconst comp3 = (\n  <div style={styles} key=\"something\">\n    Bump to next line without parens\n  </div>\n);\n\nconst comp4 = (\n  <div style={styles} key=\"something\">\n    Create wrapping parens and indent <strong>all the things</strong>.\n  </div>\n);\n\nconst comp5 = <div>Keep it on one line.</div>;\n\n`;\n"
  },
  {
    "path": "tests/jsx-multiline-assign/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/jsx-multiline-assign/test.js",
    "content": "const comp1 = (\n  <div style={styles} key=\"something\">\n    Keep the wrapping parens.\n  </div>\n);\n\nconst comp2 = <div style={styles} key=\"something\">\n  Create wrapping parens.\n</div>;\n\ncomp2A = <div style={styles} key=\"something\">\n  Create wrapping parens.\n</div>;\n\nconst comp3 = <div style={styles} key=\"something\">Bump to next line without parens</div>;\n\nconst comp4 = <div style={styles} key=\"something\">Create wrapping parens and indent <strong>all the things</strong>.</div>;\n\nconst comp5 = <div>Keep it on one line.</div>;\n"
  },
  {
    "path": "tests/jsx-newlines/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nkeep = <p>\n  Welcome to the <strong>Universal React Starter-kyt</strong>.\n  This starter kyt should serve as the base for an advanced,\n  server-rendered React app.\n</p>\n\nnewlines_text =\n  <div>\n    hi\n    there\n    how\n\n    are you\n\n\n    are you fine today?\n  </div>\n\nnewlines_text_spaced =\n  <div>\n\n    space above\n\n    space below\n\n  </div>\n\nnewlines_elems_spaced =\n  <div>\n\n    <span>space above</span>\n\n    <span>space below</span>\n\n  </div>\n\nnewlines_mixed =\n  <div>\n    hi\n    <span>there</span>\n\n    how\n\n    are <strong>you</strong>\n\n\n    are you fine today?\n  </div>\n\nnewlines_elems =\n  <div>\n    <div>\n\n\n      <div></div>\n\n\n    </div>\n\n\n    hi\n\n\n    <div></div>\n\n\n    <span />\n\n\n    <Big />\n\n\n  </div>\n\nregression_extra_newline = (\n  <div>\n    <span\n      className=\"nuclide-console-new-messages-notification-icon icon icon-nuclicon-arrow-down\"\n    />\n    New Messages\n  </div>\n);\n\n\nregression_extra_newline_2 = (\n  <div>\n    (\n    <FormattedMessage\n      id=\"some-id\"\n      defaultMessage=\"some loooooooooooooooooooooooooooong default\"\n    />\n    )\n  </div>\n);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nkeep = (\n  <p>\n    Welcome to the <strong>Universal React Starter-kyt</strong>. This starter\n    kyt should serve as the base for an advanced, server-rendered React app.\n  </p>\n);\n\nnewlines_text = <div>hi there how are you are you fine today?</div>;\n\nnewlines_text_spaced = <div>space above space below</div>;\n\nnewlines_elems_spaced = (\n  <div>\n    <span>space above</span>\n\n    <span>space below</span>\n  </div>\n);\n\nnewlines_mixed = (\n  <div>\n    hi\n    <span>there</span>\n    how are <strong>you</strong>\n    are you fine today?\n  </div>\n);\n\nnewlines_elems = (\n  <div>\n    <div>\n      <div />\n    </div>\n    hi\n    <div />\n    <span />\n    <Big />\n  </div>\n);\n\nregression_extra_newline = (\n  <div>\n    <span className=\"nuclide-console-new-messages-notification-icon icon icon-nuclicon-arrow-down\" />\n    New Messages\n  </div>\n);\n\nregression_extra_newline_2 = (\n  <div>\n    (\n    <FormattedMessage\n      id=\"some-id\"\n      defaultMessage=\"some loooooooooooooooooooooooooooong default\"\n    />\n    )\n  </div>\n);\n\n`;\n\nexports[`windows.js 1`] = `\n<div>\nText\n</div>\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<div>Text</div>;\n\n`;\n"
  },
  {
    "path": "tests/jsx-newlines/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\", \"typescript\"]);\n"
  },
  {
    "path": "tests/jsx-newlines/test.js",
    "content": "keep = <p>\n  Welcome to the <strong>Universal React Starter-kyt</strong>.\n  This starter kyt should serve as the base for an advanced,\n  server-rendered React app.\n</p>\n\nnewlines_text =\n  <div>\n    hi\n    there\n    how\n\n    are you\n\n\n    are you fine today?\n  </div>\n\nnewlines_text_spaced =\n  <div>\n\n    space above\n\n    space below\n\n  </div>\n\nnewlines_elems_spaced =\n  <div>\n\n    <span>space above</span>\n\n    <span>space below</span>\n\n  </div>\n\nnewlines_mixed =\n  <div>\n    hi\n    <span>there</span>\n\n    how\n\n    are <strong>you</strong>\n\n\n    are you fine today?\n  </div>\n\nnewlines_elems =\n  <div>\n    <div>\n\n\n      <div></div>\n\n\n    </div>\n\n\n    hi\n\n\n    <div></div>\n\n\n    <span />\n\n\n    <Big />\n\n\n  </div>\n\nregression_extra_newline = (\n  <div>\n    <span\n      className=\"nuclide-console-new-messages-notification-icon icon icon-nuclicon-arrow-down\"\n    />\n    New Messages\n  </div>\n);\n\n\nregression_extra_newline_2 = (\n  <div>\n    (\n    <FormattedMessage\n      id=\"some-id\"\n      defaultMessage=\"some loooooooooooooooooooooooooooong default\"\n    />\n    )\n  </div>\n);\n"
  },
  {
    "path": "tests/jsx-newlines/windows.js",
    "content": "<div>\r\nText\r\n</div>\n"
  },
  {
    "path": "tests/jsx-significant-space/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`comments.js 1`] = `\n<div>\n  {\n    // TODO: don't harcode this space! not all locales use whitespace\n    // in the same way\n    ' '\n  }\n</div>\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<div>\n  {\n    // TODO: don't harcode this space! not all locales use whitespace\n    // in the same way\n    \" \"\n  }\n</div>;\n\n`;\n\nexports[`test.js 1`] = `\nafter =\n  <span>\n      foo <span>bar</span>\n  </span>\n\nbefore =\n  <span>\n    <span>bar</span> foo\n  </span>\n\nbefore_break1 =\n  <span>\n    <span barbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbar /> foo\n  </span>\n\nbefore_break2 =\n  <span>\n    <span barbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbar /> foo\n  </span>\n\nafter_break =\n  <span>\n    foo <span barbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbar />\n  </span>\n\nwithin =\n  <span>\n    foo <span> bar </span>\n  </span>\n\nbreak_components =\n  <div>\n    <Foo />\n    <Bar>\n      <p>foo<span>bar bar bar</span></p><h1><span><em>yep</em></span></h1>\n    </Bar>\n    <h2>nope</h2>\n  </div>\n\nvar x = <div>\n    hello <strong>hi</strong> <foo>sdkflsdfjk</foo>\n </div>;\n\nnest_plz =\n  <div>\n    <div>\n    <div></div>\n    </div>\n  </div>\n\nregression_not_transformed_1 =\n  <span> <Icon icon=\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" /></span>;\n\nregression_not_transformed_2 =\n  <span><Icon icon=\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" /> </span>;\n\nsimilar_1 =\n  <span> <Icon icon=\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" /></span>;\n\nsimilar_2 =\n  <span><Icon icon=\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" /> </span>;\n\nsimilar_3 =\n  <span><Icon icon=\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" /> <Icon icon=\"\" /></span>;\n\nnot_broken_end =\n  <div>\n    long text long text long text long text long text long text long text long text <link>url</link> long text long text\n  </div>\n\nnot_broken_begin =\n  <div>\n    <br /> long text long text long text long text long text long text long text long text<link>url</link> long text long text\n  </div>\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nafter = (\n  <span>\n    foo <span>bar</span>\n  </span>\n);\n\nbefore = (\n  <span>\n    <span>bar</span> foo\n  </span>\n);\n\nbefore_break1 = (\n  <span>\n    <span\n      barbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbar\n    />{\" \"}\n    foo\n  </span>\n);\n\nbefore_break2 = (\n  <span>\n    <span\n      barbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbar\n    />{\" \"}\n    foo\n  </span>\n);\n\nafter_break = (\n  <span>\n    foo{\" \"}\n    <span barbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbar />\n  </span>\n);\n\nwithin = (\n  <span>\n    foo <span> bar </span>\n  </span>\n);\n\nbreak_components = (\n  <div>\n    <Foo />\n    <Bar>\n      <p>\n        foo<span>bar bar bar</span>\n      </p>\n      <h1>\n        <span>\n          <em>yep</em>\n        </span>\n      </h1>\n    </Bar>\n    <h2>nope</h2>\n  </div>\n);\n\nvar x = (\n  <div>\n    hello <strong>hi</strong> <foo>sdkflsdfjk</foo>\n  </div>\n);\n\nnest_plz = (\n  <div>\n    <div>\n      <div />\n    </div>\n  </div>\n);\n\nregression_not_transformed_1 = (\n  <span>\n    {\" \"}\n    <Icon icon=\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" />\n  </span>\n);\n\nregression_not_transformed_2 = (\n  <span>\n    <Icon icon=\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" />{\" \"}\n  </span>\n);\n\nsimilar_1 = (\n  <span>\n    {\" \"}\n    <Icon icon=\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" />\n  </span>\n);\n\nsimilar_2 = (\n  <span>\n    <Icon icon=\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" />{\" \"}\n  </span>\n);\n\nsimilar_3 = (\n  <span>\n    <Icon icon=\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" /> <Icon icon=\"\" />\n  </span>\n);\n\nnot_broken_end = (\n  <div>\n    long text long text long text long text long text long text long text long\n    text <link>url</link> long text long text\n  </div>\n);\n\nnot_broken_begin = (\n  <div>\n    <br /> long text long text long text long text long text long text long text\n    long text<link>url</link> long text long text\n  </div>\n);\n\n`;\n"
  },
  {
    "path": "tests/jsx-significant-space/comments.js",
    "content": "<div>\n  {\n    // TODO: don't harcode this space! not all locales use whitespace\n    // in the same way\n    ' '\n  }\n</div>\n"
  },
  {
    "path": "tests/jsx-significant-space/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/jsx-significant-space/test.js",
    "content": "after =\n  <span>\n      foo <span>bar</span>\n  </span>\n\nbefore =\n  <span>\n    <span>bar</span> foo\n  </span>\n\nbefore_break1 =\n  <span>\n    <span barbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbar /> foo\n  </span>\n\nbefore_break2 =\n  <span>\n    <span barbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbar /> foo\n  </span>\n\nafter_break =\n  <span>\n    foo <span barbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbar />\n  </span>\n\nwithin =\n  <span>\n    foo <span> bar </span>\n  </span>\n\nbreak_components =\n  <div>\n    <Foo />\n    <Bar>\n      <p>foo<span>bar bar bar</span></p><h1><span><em>yep</em></span></h1>\n    </Bar>\n    <h2>nope</h2>\n  </div>\n\nvar x = <div>\n    hello <strong>hi</strong> <foo>sdkflsdfjk</foo>\n </div>;\n\nnest_plz =\n  <div>\n    <div>\n    <div></div>\n    </div>\n  </div>\n\nregression_not_transformed_1 =\n  <span> <Icon icon=\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" /></span>;\n\nregression_not_transformed_2 =\n  <span><Icon icon=\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" /> </span>;\n\nsimilar_1 =\n  <span> <Icon icon=\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" /></span>;\n\nsimilar_2 =\n  <span><Icon icon=\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" /> </span>;\n\nsimilar_3 =\n  <span><Icon icon=\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" /> <Icon icon=\"\" /></span>;\n\nnot_broken_end =\n  <div>\n    long text long text long text long text long text long text long text long text <link>url</link> long text long text\n  </div>\n\nnot_broken_begin =\n  <div>\n    <br /> long text long text long text long text long text long text long text long text<link>url</link> long text long text\n  </div>\n"
  },
  {
    "path": "tests/jsx-split-attrs/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nlong_closed =\n  <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\"/>\n\nlong_open =\n  <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\">\n    hello\n  </BaseForm>\n\nlong_open_long_children =\n  <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\">\n    <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\">\n      Hello world\n    </BaseForm>\n    <div><div><div><div><div><div>hey hiya how are ya</div></div></div></div></div></div>\n    <div><div><div><div attr=\"long\" attr2=\"also long\" attr3=\"gonna break\"></div></div></div></div>\n    <div><div><div>\n      <div attr=\"long\" attr2=\"also long\" attr3=\"gonna break\" attr4=\"hello please break me\" />\n    </div></div></div>\n    <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\"><BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\"></BaseForm>d</BaseForm>\n    <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\"><BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\"></BaseForm></BaseForm>\n  </BaseForm>\n\nshort_closed =\n  <BaseForm url=\"/auth/google\" method=\"GET\"/>\n\nshort_open =\n  <BaseForm url=\"/auth/google\" method=\"GET\">\n    hello\n  </BaseForm>\n\nmake_self_closing =\n  <div>\n    <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\">\n    </BaseForm>\n    <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\"></BaseForm>\n  </div>\n\nleave_opening =\n  <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\"> </BaseForm>\n\nlong_string =\n  <div className=\"i use bootstrap and just put loooaads of classnames in here all the time\">hello world</div>\n\nlong_string_with_extra_param =\n  <div className=\"i use bootstrap and just put loooaads of classnames in here all the time\" blah=\"3\">hello world</div>\n\nlong_obj =\n  <div style={{ i: 'dont', use: 'bootstrap', and: 'instead', use: 'massive', objects }}>hello world</div>\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nlong_closed = (\n  <BaseForm\n    url=\"/auth/google\"\n    method=\"GET\"\n    colour=\"blue\"\n    size=\"large\"\n    submitLabel=\"Sign in with Google\"\n  />\n);\n\nlong_open = (\n  <BaseForm\n    url=\"/auth/google\"\n    method=\"GET\"\n    colour=\"blue\"\n    size=\"large\"\n    submitLabel=\"Sign in with Google\"\n  >\n    hello\n  </BaseForm>\n);\n\nlong_open_long_children = (\n  <BaseForm\n    url=\"/auth/google\"\n    method=\"GET\"\n    colour=\"blue\"\n    size=\"large\"\n    submitLabel=\"Sign in with Google\"\n  >\n    <BaseForm\n      url=\"/auth/google\"\n      method=\"GET\"\n      colour=\"blue\"\n      size=\"large\"\n      submitLabel=\"Sign in with Google\"\n    >\n      Hello world\n    </BaseForm>\n    <div>\n      <div>\n        <div>\n          <div>\n            <div>\n              <div>hey hiya how are ya</div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n    <div>\n      <div>\n        <div>\n          <div attr=\"long\" attr2=\"also long\" attr3=\"gonna break\" />\n        </div>\n      </div>\n    </div>\n    <div>\n      <div>\n        <div>\n          <div\n            attr=\"long\"\n            attr2=\"also long\"\n            attr3=\"gonna break\"\n            attr4=\"hello please break me\"\n          />\n        </div>\n      </div>\n    </div>\n    <BaseForm\n      url=\"/auth/google\"\n      method=\"GET\"\n      colour=\"blue\"\n      size=\"large\"\n      submitLabel=\"Sign in with Google\"\n    >\n      <BaseForm\n        url=\"/auth/google\"\n        method=\"GET\"\n        colour=\"blue\"\n        size=\"large\"\n        submitLabel=\"Sign in with Google\"\n      />d\n    </BaseForm>\n    <BaseForm\n      url=\"/auth/google\"\n      method=\"GET\"\n      colour=\"blue\"\n      size=\"large\"\n      submitLabel=\"Sign in with Google\"\n    >\n      <BaseForm\n        url=\"/auth/google\"\n        method=\"GET\"\n        colour=\"blue\"\n        size=\"large\"\n        submitLabel=\"Sign in with Google\"\n      />\n    </BaseForm>\n  </BaseForm>\n);\n\nshort_closed = <BaseForm url=\"/auth/google\" method=\"GET\" />;\n\nshort_open = (\n  <BaseForm url=\"/auth/google\" method=\"GET\">\n    hello\n  </BaseForm>\n);\n\nmake_self_closing = (\n  <div>\n    <BaseForm\n      url=\"/auth/google\"\n      method=\"GET\"\n      colour=\"blue\"\n      size=\"large\"\n      submitLabel=\"Sign in with Google\"\n    />\n    <BaseForm\n      url=\"/auth/google\"\n      method=\"GET\"\n      colour=\"blue\"\n      size=\"large\"\n      submitLabel=\"Sign in with Google\"\n    />\n  </div>\n);\n\nleave_opening = (\n  <BaseForm\n    url=\"/auth/google\"\n    method=\"GET\"\n    colour=\"blue\"\n    size=\"large\"\n    submitLabel=\"Sign in with Google\"\n  >\n    {\" \"}\n  </BaseForm>\n);\n\nlong_string = (\n  <div className=\"i use bootstrap and just put loooaads of classnames in here all the time\">\n    hello world\n  </div>\n);\n\nlong_string_with_extra_param = (\n  <div\n    className=\"i use bootstrap and just put loooaads of classnames in here all the time\"\n    blah=\"3\"\n  >\n    hello world\n  </div>\n);\n\nlong_obj = (\n  <div\n    style={{\n      i: \"dont\",\n      use: \"bootstrap\",\n      and: \"instead\",\n      use: \"massive\",\n      objects\n    }}\n  >\n    hello world\n  </div>\n);\n\n`;\n"
  },
  {
    "path": "tests/jsx-split-attrs/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\", \"typescript\"]);\n"
  },
  {
    "path": "tests/jsx-split-attrs/test.js",
    "content": "long_closed =\n  <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\"/>\n\nlong_open =\n  <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\">\n    hello\n  </BaseForm>\n\nlong_open_long_children =\n  <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\">\n    <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\">\n      Hello world\n    </BaseForm>\n    <div><div><div><div><div><div>hey hiya how are ya</div></div></div></div></div></div>\n    <div><div><div><div attr=\"long\" attr2=\"also long\" attr3=\"gonna break\"></div></div></div></div>\n    <div><div><div>\n      <div attr=\"long\" attr2=\"also long\" attr3=\"gonna break\" attr4=\"hello please break me\" />\n    </div></div></div>\n    <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\"><BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\"></BaseForm>d</BaseForm>\n    <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\"><BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\"></BaseForm></BaseForm>\n  </BaseForm>\n\nshort_closed =\n  <BaseForm url=\"/auth/google\" method=\"GET\"/>\n\nshort_open =\n  <BaseForm url=\"/auth/google\" method=\"GET\">\n    hello\n  </BaseForm>\n\nmake_self_closing =\n  <div>\n    <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\">\n    </BaseForm>\n    <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\"></BaseForm>\n  </div>\n\nleave_opening =\n  <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\"> </BaseForm>\n\nlong_string =\n  <div className=\"i use bootstrap and just put loooaads of classnames in here all the time\">hello world</div>\n\nlong_string_with_extra_param =\n  <div className=\"i use bootstrap and just put loooaads of classnames in here all the time\" blah=\"3\">hello world</div>\n\nlong_obj =\n  <div style={{ i: 'dont', use: 'bootstrap', and: 'instead', use: 'massive', objects }}>hello world</div>\n"
  },
  {
    "path": "tests/jsx-stateless-arrow-fn/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\nconst render1 = ({ styles }) => (\n  <div style={styles} key=\"something\">\n    Keep the wrapping parens. Put each key on its own line.\n  </div>\n);\n\nconst render2 = ({ styles }) => <div style={styles} key=\"something\">\n  Create wrapping parens.\n</div>;\n\nconst render3 = ({ styles }) => <div style={styles} key=\"something\">Create wrapping parens.</div>;\n\nconst render4 = ({ styles }) => <div style={styles} key=\"something\">Create wrapping parens and indent <strong>all the things</strong>.</div>;\n\nconst render5 = ({ styles }) => <div>Keep it on one line.</div>;\n\nconst render6 = ({ styles }) => (\n  <div attr1=\"aaaaaaaaaaaaaaaaa\" attr2=\"bbbbbbbbbbb\" attr3=\"cccccccccccc\">\n    <div attr1=\"aaaaaaaaaaaaaaaaa\" attr2=\"bbbbbbbbbbb\" attr3=\"cccccccccccc\" attr4>ddd d dd d d dddd dddd <strong>hello</strong></div>\n    <div attr1=\"aaaaaaaaaaaaaaaaa\" attr2=\"bbbbbbbbbbb\" attr3=\"cccccccccccc\" attr4>ddd d dd d d dddd dddd <strong>hello</strong></div>\n    <div attr1=\"aaaaaaaaaaaaaaaaa\" attr2=\"bbbbbbbbbbb\" attr3=\"cccccccccccc\" attr4>\n      <div attr1=\"aaaaaaaaaaaaaaaaa\" attr2=\"bbbbbbbbbbb\" attr3=\"cccccccccccc\" attr4>ddd d dd d d dddd dddd <strong>hello</strong></div> <strong>hello</strong></div>\n  </div>\n)\n\nconst render7 = () =>\n  <div>\n    <span /><span>Dont break each elem onto its own line.</span> <span />\n    <div /> <div />\n  </div>\n\nconst render7A = () => (\n  <div>\n    <div /><div /><div />\n  </div>\n)\n\nconst render7B = () => (\n  <div>\n    <span> <span/> Dont break plz</span>\n    <span><span/>Dont break plz</span>\n    <span>Dont break plz<span/></span>\n  </div>\n)\n\nconst render8 = (props) => <div>{props.text}</div>\nconst render9 = (props) => <div>{props.looooooooooooooooooooooooooooooong_text}</div>\nconst render10 = (props) => <div>{props.even_looooooooooooooooooooooooooooooooooooooooooonger_contents}</div>\n\nconst notJSX = (aaaaaaaaaaaaaaaaa, bbbbbbbbbbb) => this.someLongCallWithParams(aaaaaa, bbbbbbb).anotherLongCallWithParams(cccccccccccc, dddddddddddddddddddddd)\n\nReact.render(\n  <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\" />\n  , document.querySelector('#react-root')\n)\n\n\nconst renderTernary = (props) =>\n  <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\">\n    {props.showTheThing ?\n      <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\">Hello world</BaseForm>\n      : \"hello \" + \"howdy! \"}\n    {props.showTheThing ?\n      <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\">Hello world</BaseForm>\n      :\n      null\n    }\n    {props.showTheThing ? null :\n      <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\">Hello world</BaseForm>\n    }\n    {props.showTheOtherThing ? <div>I am here</div> : <div attr=\"blah\" />}\n    {props.showTheOtherThing ? <div>I am here!!</div> : null}\n  </BaseForm>\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst render1 = ({ styles }) => (\n  <div style={styles} key=\"something\">\n    Keep the wrapping parens. Put each key on its own line.\n  </div>\n);\n\nconst render2 = ({ styles }) => (\n  <div style={styles} key=\"something\">\n    Create wrapping parens.\n  </div>\n);\n\nconst render3 = ({ styles }) => (\n  <div style={styles} key=\"something\">\n    Create wrapping parens.\n  </div>\n);\n\nconst render4 = ({ styles }) => (\n  <div style={styles} key=\"something\">\n    Create wrapping parens and indent <strong>all the things</strong>.\n  </div>\n);\n\nconst render5 = ({ styles }) => <div>Keep it on one line.</div>;\n\nconst render6 = ({ styles }) => (\n  <div attr1=\"aaaaaaaaaaaaaaaaa\" attr2=\"bbbbbbbbbbb\" attr3=\"cccccccccccc\">\n    <div\n      attr1=\"aaaaaaaaaaaaaaaaa\"\n      attr2=\"bbbbbbbbbbb\"\n      attr3=\"cccccccccccc\"\n      attr4\n    >\n      ddd d dd d d dddd dddd <strong>hello</strong>\n    </div>\n    <div\n      attr1=\"aaaaaaaaaaaaaaaaa\"\n      attr2=\"bbbbbbbbbbb\"\n      attr3=\"cccccccccccc\"\n      attr4\n    >\n      ddd d dd d d dddd dddd <strong>hello</strong>\n    </div>\n    <div\n      attr1=\"aaaaaaaaaaaaaaaaa\"\n      attr2=\"bbbbbbbbbbb\"\n      attr3=\"cccccccccccc\"\n      attr4\n    >\n      <div\n        attr1=\"aaaaaaaaaaaaaaaaa\"\n        attr2=\"bbbbbbbbbbb\"\n        attr3=\"cccccccccccc\"\n        attr4\n      >\n        ddd d dd d d dddd dddd <strong>hello</strong>\n      </div>{\" \"}\n      <strong>hello</strong>\n    </div>\n  </div>\n);\n\nconst render7 = () => (\n  <div>\n    <span />\n    <span>Dont break each elem onto its own line.</span> <span />\n    <div /> <div />\n  </div>\n);\n\nconst render7A = () => (\n  <div>\n    <div />\n    <div />\n    <div />\n  </div>\n);\n\nconst render7B = () => (\n  <div>\n    <span>\n      {\" \"}\n      <span /> Dont break plz\n    </span>\n    <span>\n      <span />Dont break plz\n    </span>\n    <span>\n      Dont break plz<span />\n    </span>\n  </div>\n);\n\nconst render8 = props => <div>{props.text}</div>;\nconst render9 = props => (\n  <div>{props.looooooooooooooooooooooooooooooong_text}</div>\n);\nconst render10 = props => (\n  <div>\n    {props.even_looooooooooooooooooooooooooooooooooooooooooonger_contents}\n  </div>\n);\n\nconst notJSX = (aaaaaaaaaaaaaaaaa, bbbbbbbbbbb) =>\n  this.someLongCallWithParams(aaaaaa, bbbbbbb).anotherLongCallWithParams(\n    cccccccccccc,\n    dddddddddddddddddddddd\n  );\n\nReact.render(\n  <BaseForm\n    url=\"/auth/google\"\n    method=\"GET\"\n    colour=\"blue\"\n    size=\"large\"\n    submitLabel=\"Sign in with Google\"\n  />,\n  document.querySelector(\"#react-root\")\n);\n\nconst renderTernary = props => (\n  <BaseForm\n    url=\"/auth/google\"\n    method=\"GET\"\n    colour=\"blue\"\n    size=\"large\"\n    submitLabel=\"Sign in with Google\"\n  >\n    {props.showTheThing ? (\n      <BaseForm\n        url=\"/auth/google\"\n        method=\"GET\"\n        colour=\"blue\"\n        size=\"large\"\n        submitLabel=\"Sign in with Google\"\n      >\n        Hello world\n      </BaseForm>\n    ) : (\n      \"hello \" + \"howdy! \"\n    )}\n    {props.showTheThing ? (\n      <BaseForm\n        url=\"/auth/google\"\n        method=\"GET\"\n        colour=\"blue\"\n        size=\"large\"\n        submitLabel=\"Sign in with Google\"\n      >\n        Hello world\n      </BaseForm>\n    ) : null}\n    {props.showTheThing ? null : (\n      <BaseForm\n        url=\"/auth/google\"\n        method=\"GET\"\n        colour=\"blue\"\n        size=\"large\"\n        submitLabel=\"Sign in with Google\"\n      >\n        Hello world\n      </BaseForm>\n    )}\n    {props.showTheOtherThing ? <div>I am here</div> : <div attr=\"blah\" />}\n    {props.showTheOtherThing ? <div>I am here!!</div> : null}\n  </BaseForm>\n);\n\n`;\n"
  },
  {
    "path": "tests/jsx-stateless-arrow-fn/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/jsx-stateless-arrow-fn/test.js",
    "content": "const render1 = ({ styles }) => (\n  <div style={styles} key=\"something\">\n    Keep the wrapping parens. Put each key on its own line.\n  </div>\n);\n\nconst render2 = ({ styles }) => <div style={styles} key=\"something\">\n  Create wrapping parens.\n</div>;\n\nconst render3 = ({ styles }) => <div style={styles} key=\"something\">Create wrapping parens.</div>;\n\nconst render4 = ({ styles }) => <div style={styles} key=\"something\">Create wrapping parens and indent <strong>all the things</strong>.</div>;\n\nconst render5 = ({ styles }) => <div>Keep it on one line.</div>;\n\nconst render6 = ({ styles }) => (\n  <div attr1=\"aaaaaaaaaaaaaaaaa\" attr2=\"bbbbbbbbbbb\" attr3=\"cccccccccccc\">\n    <div attr1=\"aaaaaaaaaaaaaaaaa\" attr2=\"bbbbbbbbbbb\" attr3=\"cccccccccccc\" attr4>ddd d dd d d dddd dddd <strong>hello</strong></div>\n    <div attr1=\"aaaaaaaaaaaaaaaaa\" attr2=\"bbbbbbbbbbb\" attr3=\"cccccccccccc\" attr4>ddd d dd d d dddd dddd <strong>hello</strong></div>\n    <div attr1=\"aaaaaaaaaaaaaaaaa\" attr2=\"bbbbbbbbbbb\" attr3=\"cccccccccccc\" attr4>\n      <div attr1=\"aaaaaaaaaaaaaaaaa\" attr2=\"bbbbbbbbbbb\" attr3=\"cccccccccccc\" attr4>ddd d dd d d dddd dddd <strong>hello</strong></div> <strong>hello</strong></div>\n  </div>\n)\n\nconst render7 = () =>\n  <div>\n    <span /><span>Dont break each elem onto its own line.</span> <span />\n    <div /> <div />\n  </div>\n\nconst render7A = () => (\n  <div>\n    <div /><div /><div />\n  </div>\n)\n\nconst render7B = () => (\n  <div>\n    <span> <span/> Dont break plz</span>\n    <span><span/>Dont break plz</span>\n    <span>Dont break plz<span/></span>\n  </div>\n)\n\nconst render8 = (props) => <div>{props.text}</div>\nconst render9 = (props) => <div>{props.looooooooooooooooooooooooooooooong_text}</div>\nconst render10 = (props) => <div>{props.even_looooooooooooooooooooooooooooooooooooooooooonger_contents}</div>\n\nconst notJSX = (aaaaaaaaaaaaaaaaa, bbbbbbbbbbb) => this.someLongCallWithParams(aaaaaa, bbbbbbb).anotherLongCallWithParams(cccccccccccc, dddddddddddddddddddddd)\n\nReact.render(\n  <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\" />\n  , document.querySelector('#react-root')\n)\n\n\nconst renderTernary = (props) =>\n  <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\">\n    {props.showTheThing ?\n      <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\">Hello world</BaseForm>\n      : \"hello \" + \"howdy! \"}\n    {props.showTheThing ?\n      <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\">Hello world</BaseForm>\n      :\n      null\n    }\n    {props.showTheThing ? null :\n      <BaseForm url=\"/auth/google\" method=\"GET\" colour=\"blue\" size=\"large\" submitLabel=\"Sign in with Google\">Hello world</BaseForm>\n    }\n    {props.showTheOtherThing ? <div>I am here</div> : <div attr=\"blah\" />}\n    {props.showTheOtherThing ? <div>I am here!!</div> : null}\n  </BaseForm>\n"
  },
  {
    "path": "tests/jsx-text-wrap/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n// Wrapping text\nx =\n  <div>\n    Some text that would need to wrap on to a new line in order to display correctly and nicely\n  </div>\n\n// Wrapping tags\nx =\n  <div>\n    <first>f</first> <first>f</first> <first>f</first> <first>f</first> <first>f</first> <first>f</first>\n  </div>\n\n// Wrapping tags\nx =\n  <div>\n    <first>f</first><first>f</first><first>f</first><first>f</first><first>f</first><first>f</first>\n  </div>\n\n// Wrapping tags\nx =\n  <div>\n    <a /><b /><c />\n    <first>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</first> <first>f</first>\n  </div>\n\n// Wrapping tags\nx =\n  <div>\n    <sadashdkjahsdkjhaskjdhaksjdhkashdkashdkasjhdkajshdkashdkashd /> <first>f</first>\n  </div>\n\nx =\n  <div>\n    before<div>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur at mollis lorem.</div>after\n  </div>\n\nx =\n  <div>\n    before{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}{stuff}{stuff}after{stuff}after\n  </div>\n\nx =\n  <div>\n    before {stuff} after {stuff} after {stuff} after {stuff} after {stuff} after {stuff}  {stuff}  {stuff} after {stuff} after\n  </div>\n\nx =\n  <div>\n    Please state your <b>name</b> and <b>occupation</b> for the board of <b>school</b> directors.\n  </div>\n\nfunction DiffOverview(props) {\n  const { source, target, since } = props;\n  return (\n    <div>\n      <div className=\"alert alert-info\">\n        <p>\n          This diff overview is computed against the current list of records in\n          this collection and the list it contained on <b>{humanDate(since)}</b>.\n        </p>\n        <p>\n          <b>Note:</b> <code>last_modified</code> and <code>schema</code> record metadata\n          are omitted for easier review.\n        </p>\n      </div>\n      <Diff source={source} target={target} />\n    </div>\n  );\n}\n\nx = <font size={-3}><i>Starting at minute {graphActivity.startTime}, running for {graphActivity.length} to minute {graphActivity.startTime + graphActivity.length}</i></font>\n\nx =\n  <div>\n    First second third\n    <div attr=\"a very long string attribute that will overflow because it is very long\">Something</div>\n  </div>\n\nx =\n  <div>\n    <div>\n      First\n    </div>\n    Second\n    <div>\n      Third\n    </div>\n  </div>\n\nx =\n  <div>\n    First <div>\n      Second\n    </div> Third\n  </div>\n\nleading_whitespace =\n  <div> First Second Third Fourth Fifth Sixth Seventh Eighth Ninth Tenth Eleventh Twelfth Thirteenth Fourteenth</div>\n\ntrailing_whitespace =\n  <div>First Second Third Fourth Fifth Sixth Seventh Eighth Ninth Tenth Eleventh Twelfth Thirteenth Fourteenth </div>\n\nno_leading_or_trailing_whitespace =\n  <div>First Second Third Fourth Fifth Sixth Seventh Eighth Ninth Tenth Eleventh Twelfth Thirteenth Fourteenth</div>\n\nfacebook_translation_leave_text_around_tag =\n  <div>\n    <span>\n      First\n    </span>,\n    (<span>\n      Second\n    </span>)\n  </div>\n\nthis_really_should_split_across_lines =\n  <div>\n    before{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after\n  </div>\n\nunstable_before =\n  <div className=\"yourScore\">\n    Your score: <span className=\"score\">{\\`\\${mini.crosstable.users[sessionUserId]} - \\${mini.crosstable.users[user.id]}\\`}</span>\n  </div>\n\nunstable_after_first_run = (\n  <div className=\"yourScore\">\n    Your score:{\" \"}\n    <span className=\"score\">{\\`\\${mini.crosstable.users[sessionUserId]} - \\${mini\n      .crosstable.users[user.id]}\\`}</span>\n  </div>\n);\n\nsolitary_whitespace =\n  <div first=\"first\" second=\"second\" third=\"third\" fourth=\"fourth\" fifth=\"fifth\" sixth=\"sixth\"> </div>\n\njsx_whitespace_on_newline =\n  <div>\n    <div>\n      First\n    </div> <div>\n      Second\n    </div> <div>\n      Third\n    </div>\n  </div>\n\njsx_around_multiline_element =\n  <div>Before <div>{\"Enough text to make this element wrap on to multiple lines when formatting\"}</div> After</div>\n\njsx_around_multiline_element_second_pass = (\n  <div>\n    Before{\" \"}\n    <div>\n      {\n        \"Enough text to make this element wrap on to multiple lines when formatting\"\n      }\n    </div>{\" \"}\n    After\n  </div>\n);\n\nconvert_space_expressions =\n  <div>{\" \"}</div>\n\nx =\n  <div>\n    <first />\n    <second />\n    <third />\n    <fourth />\n    <fifth />\n    <sixth />\n  </div>\n\nconst Abc = () => {\n  return (\n    <div>\n      Please state your\n      {\" \"}\n      <b>name</b>\n      {\" \"}\n      and\n      {\" \"}\n      <b>occupation</b>\n      {\" \"}\n      for the board of directors.\n    </div>\n  );\n};\n\nx = <div id=\"moo\">Some stuff here</div>\n\nheaders_and_paragraphs = (\n  <div>\n    <h2>First</h2>\n    <p>The first paragraph.</p>\n\n    <h2>Second</h2>\n    <p>The second paragraph.</p>\n  </div>\n);\n\nno_text_one_tag_per_line =\n  <div>\n    <first /><second />\n  </div>\n\nwith_text_fill_line =\n  <div>\n    Text <first /><second />\n  </div>\n\nline_after_br =\n  <div>\n    Text<br />\n    More text <br />\n    And more<br />\n  </div>\n\nline_after_br_2 = <div>A<br />B<br />C</div>\n\nbr_followed_by_whitespace = <div><br /> text</div>\n\ndont_preserve_blank_lines_when_jsx_contains_text =\n  <div>\n\n    <div>Zeroth</div>\n\n    <div>First</div>\n\n    Second\n\n  </div>\n\nmultiple_expressions =\n  <div>\n    {header}\n    {body}\n    {footer}\n  </div>\n\nsingle_expression_child_tags =\n  <div>\n    You currently have <strong>{dashboardStr}</strong> and <strong>{userStr}</strong>\n  </div>\n\nexpression_does_not_break =\n  <div>texty text text text text text text text text text text text {this.props.type} </div>\n\n// FIXME\nbr_triggers_expression_break =\n  <div><br />\n  text text text text text text text text text text text {this.props.type} </div>\n\njsx_whitespace_after_tag =\n  <div>\n    <span a=\"a\" b=\"b\">\n      {variable}\n    </span>\n    {\" \"}\n    ({variable})\n  </div>\n\nx =\n  <div>\n    ENDS IN <div>\n      text text text text text text text text text text text\n    </div>{\" \"}\n    HRS\n  </div>\n\nx =\n  <div>\n    <h2>Message</h2>\n    Hello, I'm a simple message.\n  </div>\n\nx =\n  <div>\n    Hello, I'm a simple message.\n    <h2>Message</h2>\n  </div>\n\nx =\n  <div>\n    <div>\n      <div>\n        <div>\n          <div>\n            Line {startRange.row + 1}:{startRange.column + 1} - {endRange.row + 1}:{endRange.column + 1}{caller}\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Wrapping text\nx = (\n  <div>\n    Some text that would need to wrap on to a new line in order to display\n    correctly and nicely\n  </div>\n);\n\n// Wrapping tags\nx = (\n  <div>\n    <first>f</first> <first>f</first> <first>f</first> <first>f</first>{\" \"}\n    <first>f</first> <first>f</first>\n  </div>\n);\n\n// Wrapping tags\nx = (\n  <div>\n    <first>f</first>\n    <first>f</first>\n    <first>f</first>\n    <first>f</first>\n    <first>f</first>\n    <first>f</first>\n  </div>\n);\n\n// Wrapping tags\nx = (\n  <div>\n    <a />\n    <b />\n    <c />\n    <first>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</first>{\" \"}\n    <first>f</first>\n  </div>\n);\n\n// Wrapping tags\nx = (\n  <div>\n    <sadashdkjahsdkjhaskjdhaksjdhkashdkashdkasjhdkajshdkashdkashd />{\" \"}\n    <first>f</first>\n  </div>\n);\n\nx = (\n  <div>\n    before<div>\n      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur at\n      mollis lorem.\n    </div>after\n  </div>\n);\n\nx = (\n  <div>\n    before{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}\n    {stuff}\n    {stuff}after{stuff}after\n  </div>\n);\n\nx = (\n  <div>\n    before {stuff} after {stuff} after {stuff} after {stuff} after {stuff} after{\" \"}\n    {stuff} {stuff} {stuff} after {stuff} after\n  </div>\n);\n\nx = (\n  <div>\n    Please state your <b>name</b> and <b>occupation</b> for the board of{\" \"}\n    <b>school</b> directors.\n  </div>\n);\n\nfunction DiffOverview(props) {\n  const { source, target, since } = props;\n  return (\n    <div>\n      <div className=\"alert alert-info\">\n        <p>\n          This diff overview is computed against the current list of records in\n          this collection and the list it contained on <b>{humanDate(since)}</b>.\n        </p>\n        <p>\n          <b>Note:</b> <code>last_modified</code> and <code>schema</code> record\n          metadata are omitted for easier review.\n        </p>\n      </div>\n      <Diff source={source} target={target} />\n    </div>\n  );\n}\n\nx = (\n  <font size={-3}>\n    <i>\n      Starting at minute {graphActivity.startTime}, running for{\" \"}\n      {graphActivity.length} to minute{\" \"}\n      {graphActivity.startTime + graphActivity.length}\n    </i>\n  </font>\n);\n\nx = (\n  <div>\n    First second third\n    <div attr=\"a very long string attribute that will overflow because it is very long\">\n      Something\n    </div>\n  </div>\n);\n\nx = (\n  <div>\n    <div>First</div>\n    Second\n    <div>Third</div>\n  </div>\n);\n\nx = (\n  <div>\n    First <div>Second</div> Third\n  </div>\n);\n\nleading_whitespace = (\n  <div>\n    {\" \"}\n    First Second Third Fourth Fifth Sixth Seventh Eighth Ninth Tenth Eleventh\n    Twelfth Thirteenth Fourteenth\n  </div>\n);\n\ntrailing_whitespace = (\n  <div>\n    First Second Third Fourth Fifth Sixth Seventh Eighth Ninth Tenth Eleventh\n    Twelfth Thirteenth Fourteenth{\" \"}\n  </div>\n);\n\nno_leading_or_trailing_whitespace = (\n  <div>\n    First Second Third Fourth Fifth Sixth Seventh Eighth Ninth Tenth Eleventh\n    Twelfth Thirteenth Fourteenth\n  </div>\n);\n\nfacebook_translation_leave_text_around_tag = (\n  <div>\n    <span>First</span>, (<span>Second</span>)\n  </div>\n);\n\nthis_really_should_split_across_lines = (\n  <div>\n    before{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after\n  </div>\n);\n\nunstable_before = (\n  <div className=\"yourScore\">\n    Your score:{\" \"}\n    <span className=\"score\">{\\`\\${mini.crosstable.users[sessionUserId]} - \\${mini\n      .crosstable.users[user.id]}\\`}</span>\n  </div>\n);\n\nunstable_after_first_run = (\n  <div className=\"yourScore\">\n    Your score:{\" \"}\n    <span className=\"score\">{\\`\\${mini.crosstable.users[sessionUserId]} - \\${mini\n      .crosstable.users[user.id]}\\`}</span>\n  </div>\n);\n\nsolitary_whitespace = (\n  <div\n    first=\"first\"\n    second=\"second\"\n    third=\"third\"\n    fourth=\"fourth\"\n    fifth=\"fifth\"\n    sixth=\"sixth\"\n  >\n    {\" \"}\n  </div>\n);\n\njsx_whitespace_on_newline = (\n  <div>\n    <div>First</div> <div>Second</div> <div>Third</div>\n  </div>\n);\n\njsx_around_multiline_element = (\n  <div>\n    Before{\" \"}\n    <div>\n      {\n        \"Enough text to make this element wrap on to multiple lines when formatting\"\n      }\n    </div>{\" \"}\n    After\n  </div>\n);\n\njsx_around_multiline_element_second_pass = (\n  <div>\n    Before{\" \"}\n    <div>\n      {\n        \"Enough text to make this element wrap on to multiple lines when formatting\"\n      }\n    </div>{\" \"}\n    After\n  </div>\n);\n\nconvert_space_expressions = <div> </div>;\n\nx = (\n  <div>\n    <first />\n    <second />\n    <third />\n    <fourth />\n    <fifth />\n    <sixth />\n  </div>\n);\n\nconst Abc = () => {\n  return (\n    <div>\n      Please state your <b>name</b> and <b>occupation</b> for the board of\n      directors.\n    </div>\n  );\n};\n\nx = <div id=\"moo\">Some stuff here</div>;\n\nheaders_and_paragraphs = (\n  <div>\n    <h2>First</h2>\n    <p>The first paragraph.</p>\n\n    <h2>Second</h2>\n    <p>The second paragraph.</p>\n  </div>\n);\n\nno_text_one_tag_per_line = (\n  <div>\n    <first />\n    <second />\n  </div>\n);\n\nwith_text_fill_line = (\n  <div>\n    Text <first />\n    <second />\n  </div>\n);\n\nline_after_br = (\n  <div>\n    Text<br />\n    More text <br />\n    And more<br />\n  </div>\n);\n\nline_after_br_2 = (\n  <div>\n    A<br />B<br />C\n  </div>\n);\n\nbr_followed_by_whitespace = (\n  <div>\n    <br /> text\n  </div>\n);\n\ndont_preserve_blank_lines_when_jsx_contains_text = (\n  <div>\n    <div>Zeroth</div>\n    <div>First</div>\n    Second\n  </div>\n);\n\nmultiple_expressions = (\n  <div>\n    {header}\n    {body}\n    {footer}\n  </div>\n);\n\nsingle_expression_child_tags = (\n  <div>\n    You currently have <strong>{dashboardStr}</strong> and{\" \"}\n    <strong>{userStr}</strong>\n  </div>\n);\n\nexpression_does_not_break = (\n  <div>\n    texty text text text text text text text text text text text{\" \"}\n    {this.props.type}{\" \"}\n  </div>\n);\n\n// FIXME\nbr_triggers_expression_break = (\n  <div>\n    <br />\n    text text text text text text text text text text text {\n      this.props.type\n    }{\" \"}\n  </div>\n);\n\njsx_whitespace_after_tag = (\n  <div>\n    <span a=\"a\" b=\"b\">\n      {variable}\n    </span>{\" \"}\n    ({variable})\n  </div>\n);\n\nx = (\n  <div>\n    ENDS IN <div>\n      text text text text text text text text text text text\n    </div>{\" \"}\n    HRS\n  </div>\n);\n\nx = (\n  <div>\n    <h2>Message</h2>\n    Hello, I'm a simple message.\n  </div>\n);\n\nx = (\n  <div>\n    Hello, I'm a simple message.\n    <h2>Message</h2>\n  </div>\n);\n\nx = (\n  <div>\n    <div>\n      <div>\n        <div>\n          <div>\n            Line {startRange.row + 1}:{startRange.column + 1} -{\" \"}\n            {endRange.row + 1}:{endRange.column + 1}\n            {caller}\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n);\n\n`;\n"
  },
  {
    "path": "tests/jsx-text-wrap/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/jsx-text-wrap/test.js",
    "content": "// Wrapping text\nx =\n  <div>\n    Some text that would need to wrap on to a new line in order to display correctly and nicely\n  </div>\n\n// Wrapping tags\nx =\n  <div>\n    <first>f</first> <first>f</first> <first>f</first> <first>f</first> <first>f</first> <first>f</first>\n  </div>\n\n// Wrapping tags\nx =\n  <div>\n    <first>f</first><first>f</first><first>f</first><first>f</first><first>f</first><first>f</first>\n  </div>\n\n// Wrapping tags\nx =\n  <div>\n    <a /><b /><c />\n    <first>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</first> <first>f</first>\n  </div>\n\n// Wrapping tags\nx =\n  <div>\n    <sadashdkjahsdkjhaskjdhaksjdhkashdkashdkasjhdkajshdkashdkashd /> <first>f</first>\n  </div>\n\nx =\n  <div>\n    before<div>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur at mollis lorem.</div>after\n  </div>\n\nx =\n  <div>\n    before{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}{stuff}{stuff}after{stuff}after\n  </div>\n\nx =\n  <div>\n    before {stuff} after {stuff} after {stuff} after {stuff} after {stuff} after {stuff}  {stuff}  {stuff} after {stuff} after\n  </div>\n\nx =\n  <div>\n    Please state your <b>name</b> and <b>occupation</b> for the board of <b>school</b> directors.\n  </div>\n\nfunction DiffOverview(props) {\n  const { source, target, since } = props;\n  return (\n    <div>\n      <div className=\"alert alert-info\">\n        <p>\n          This diff overview is computed against the current list of records in\n          this collection and the list it contained on <b>{humanDate(since)}</b>.\n        </p>\n        <p>\n          <b>Note:</b> <code>last_modified</code> and <code>schema</code> record metadata\n          are omitted for easier review.\n        </p>\n      </div>\n      <Diff source={source} target={target} />\n    </div>\n  );\n}\n\nx = <font size={-3}><i>Starting at minute {graphActivity.startTime}, running for {graphActivity.length} to minute {graphActivity.startTime + graphActivity.length}</i></font>\n\nx =\n  <div>\n    First second third\n    <div attr=\"a very long string attribute that will overflow because it is very long\">Something</div>\n  </div>\n\nx =\n  <div>\n    <div>\n      First\n    </div>\n    Second\n    <div>\n      Third\n    </div>\n  </div>\n\nx =\n  <div>\n    First <div>\n      Second\n    </div> Third\n  </div>\n\nleading_whitespace =\n  <div> First Second Third Fourth Fifth Sixth Seventh Eighth Ninth Tenth Eleventh Twelfth Thirteenth Fourteenth</div>\n\ntrailing_whitespace =\n  <div>First Second Third Fourth Fifth Sixth Seventh Eighth Ninth Tenth Eleventh Twelfth Thirteenth Fourteenth </div>\n\nno_leading_or_trailing_whitespace =\n  <div>First Second Third Fourth Fifth Sixth Seventh Eighth Ninth Tenth Eleventh Twelfth Thirteenth Fourteenth</div>\n\nfacebook_translation_leave_text_around_tag =\n  <div>\n    <span>\n      First\n    </span>,\n    (<span>\n      Second\n    </span>)\n  </div>\n\nthis_really_should_split_across_lines =\n  <div>\n    before{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after{stuff}after\n  </div>\n\nunstable_before =\n  <div className=\"yourScore\">\n    Your score: <span className=\"score\">{`${mini.crosstable.users[sessionUserId]} - ${mini.crosstable.users[user.id]}`}</span>\n  </div>\n\nunstable_after_first_run = (\n  <div className=\"yourScore\">\n    Your score:{\" \"}\n    <span className=\"score\">{`${mini.crosstable.users[sessionUserId]} - ${mini\n      .crosstable.users[user.id]}`}</span>\n  </div>\n);\n\nsolitary_whitespace =\n  <div first=\"first\" second=\"second\" third=\"third\" fourth=\"fourth\" fifth=\"fifth\" sixth=\"sixth\"> </div>\n\njsx_whitespace_on_newline =\n  <div>\n    <div>\n      First\n    </div> <div>\n      Second\n    </div> <div>\n      Third\n    </div>\n  </div>\n\njsx_around_multiline_element =\n  <div>Before <div>{\"Enough text to make this element wrap on to multiple lines when formatting\"}</div> After</div>\n\njsx_around_multiline_element_second_pass = (\n  <div>\n    Before{\" \"}\n    <div>\n      {\n        \"Enough text to make this element wrap on to multiple lines when formatting\"\n      }\n    </div>{\" \"}\n    After\n  </div>\n);\n\nconvert_space_expressions =\n  <div>{\" \"}</div>\n\nx =\n  <div>\n    <first />\n    <second />\n    <third />\n    <fourth />\n    <fifth />\n    <sixth />\n  </div>\n\nconst Abc = () => {\n  return (\n    <div>\n      Please state your\n      {\" \"}\n      <b>name</b>\n      {\" \"}\n      and\n      {\" \"}\n      <b>occupation</b>\n      {\" \"}\n      for the board of directors.\n    </div>\n  );\n};\n\nx = <div id=\"moo\">Some stuff here</div>\n\nheaders_and_paragraphs = (\n  <div>\n    <h2>First</h2>\n    <p>The first paragraph.</p>\n\n    <h2>Second</h2>\n    <p>The second paragraph.</p>\n  </div>\n);\n\nno_text_one_tag_per_line =\n  <div>\n    <first /><second />\n  </div>\n\nwith_text_fill_line =\n  <div>\n    Text <first /><second />\n  </div>\n\nline_after_br =\n  <div>\n    Text<br />\n    More text <br />\n    And more<br />\n  </div>\n\nline_after_br_2 = <div>A<br />B<br />C</div>\n\nbr_followed_by_whitespace = <div><br /> text</div>\n\ndont_preserve_blank_lines_when_jsx_contains_text =\n  <div>\n\n    <div>Zeroth</div>\n\n    <div>First</div>\n\n    Second\n\n  </div>\n\nmultiple_expressions =\n  <div>\n    {header}\n    {body}\n    {footer}\n  </div>\n\nsingle_expression_child_tags =\n  <div>\n    You currently have <strong>{dashboardStr}</strong> and <strong>{userStr}</strong>\n  </div>\n\nexpression_does_not_break =\n  <div>texty text text text text text text text text text text text {this.props.type} </div>\n\n// FIXME\nbr_triggers_expression_break =\n  <div><br />\n  text text text text text text text text text text text {this.props.type} </div>\n\njsx_whitespace_after_tag =\n  <div>\n    <span a=\"a\" b=\"b\">\n      {variable}\n    </span>\n    {\" \"}\n    ({variable})\n  </div>\n\nx =\n  <div>\n    ENDS IN <div>\n      text text text text text text text text text text text\n    </div>{\" \"}\n    HRS\n  </div>\n\nx =\n  <div>\n    <h2>Message</h2>\n    Hello, I'm a simple message.\n  </div>\n\nx =\n  <div>\n    Hello, I'm a simple message.\n    <h2>Message</h2>\n  </div>\n\nx =\n  <div>\n    <div>\n      <div>\n        <div>\n          <div>\n            Line {startRange.row + 1}:{startRange.column + 1} - {endRange.row + 1}:{endRange.column + 1}{caller}\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n\n"
  },
  {
    "path": "tests/jsx-whitespace/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n// Treated as whitespace in JSX\nspaces = <div>]   [</div>\ntabs = <div>]      [</div>\nslash_n = <div>]\n\n\n[</div>\nslash_r = <div>]\n\n\n[</div>\n\n\n// Not treated as whitespace in JSX\n// NOTE: Some of the space characters here won't show up in an editor,\n// but they are there!\nslash_f = <div>]\f\f\f[</div>\nslash_v = <div>]\u000b\u000b\u000b[</div>\nnon_breaking_spaces = <div>]   [</div>\nem_space = <div>]   [</div>\nhair_space = <div>]  [</div>\nzero_width_space = <div>]​​​[</div>\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Treated as whitespace in JSX\nspaces = <div>] [</div>;\ntabs = <div>] [</div>;\nslash_n = <div>] [</div>;\nslash_r = <div>] [</div>;\n\n// Not treated as whitespace in JSX\n// NOTE: Some of the space characters here won't show up in an editor,\n// but they are there!\nslash_f = <div>]\f\f\f[</div>;\nslash_v = <div>]\u000b\u000b\u000b[</div>;\nnon_breaking_spaces = <div>]   [</div>;\nem_space = <div>]   [</div>;\nhair_space = <div>]  [</div>;\nzero_width_space = <div>]​​​[</div>;\n\n`;\n"
  },
  {
    "path": "tests/jsx-whitespace/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/jsx-whitespace/test.js",
    "content": "// Treated as whitespace in JSX\nspaces = <div>]   [</div>\ntabs = <div>]      [</div>\nslash_n = <div>]\n\n\n[</div>\nslash_r = <div>]\n\n\n[</div>\n\n\n// Not treated as whitespace in JSX\n// NOTE: Some of the space characters here won't show up in an editor,\n// but they are there!\nslash_f = <div>]\f\f\f[</div>\nslash_v = <div>]\u000b\u000b\u000b[</div>\nnon_breaking_spaces = <div>]   [</div>\nem_space = <div>]   [</div>\nhair_space = <div>]  [</div>\nzero_width_space = <div>]​​​[</div>\n"
  },
  {
    "path": "tests/jsx_escape/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`escape.js 1`] = `\n<div>&lt;</div>\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<div>&lt;</div>;\n\n`;\n\nexports[`escape.js 2`] = `\n<div>&lt;</div>\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<div>&lt;</div>;\n\n`;\n\nexports[`nbsp.js 1`] = `\nmany_nbsp = <div>&nbsp; &nbsp; </div>\nsingle_nbsp = <div>&nbsp;</div>\nnbsp_with_newline =\n  <div>\n    &nbsp;\n  </div>\n\nmany_raw_nbsp = <div>   </div>\nmany_raw_spaces = <div>   </div>\n\n\namp = <span>foo &amp; bar</span>\nraw_amp = <span>foo & bar</span>\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nmany_nbsp = <div>&nbsp; &nbsp; </div>;\nsingle_nbsp = <div>&nbsp;</div>;\nnbsp_with_newline = <div>&nbsp;</div>;\n\nmany_raw_nbsp = <div>   </div>;\nmany_raw_spaces = <div> </div>;\n\namp = <span>foo &amp; bar</span>;\nraw_amp = <span>foo & bar</span>;\n\n`;\n\nexports[`nbsp.js 2`] = `\nmany_nbsp = <div>&nbsp; &nbsp; </div>\nsingle_nbsp = <div>&nbsp;</div>\nnbsp_with_newline =\n  <div>\n    &nbsp;\n  </div>\n\nmany_raw_nbsp = <div>   </div>\nmany_raw_spaces = <div>   </div>\n\n\namp = <span>foo &amp; bar</span>\nraw_amp = <span>foo & bar</span>\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nmany_nbsp = <div>&nbsp; &nbsp; </div>;\nsingle_nbsp = <div>&nbsp;</div>;\nnbsp_with_newline = <div>&nbsp;</div>;\n\nmany_raw_nbsp = <div>   </div>;\nmany_raw_spaces = <div> </div>;\n\namp = <span>foo &amp; bar</span>;\nraw_amp = <span>foo & bar</span>;\n\n`;\n"
  },
  {
    "path": "tests/jsx_escape/escape.js",
    "content": "<div>&lt;</div>\n"
  },
  {
    "path": "tests/jsx_escape/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n// FIXME nbsp.js flow != babylon output, waiting for: https://github.com/babel/babylon/pull/344\nrun_spec(__dirname, { parser: \"babylon\" });\n"
  },
  {
    "path": "tests/jsx_escape/nbsp.js",
    "content": "many_nbsp = <div>&nbsp; &nbsp; </div>\nsingle_nbsp = <div>&nbsp;</div>\nnbsp_with_newline =\n  <div>\n    &nbsp;\n  </div>\n\nmany_raw_nbsp = <div>   </div>\nmany_raw_spaces = <div>   </div>\n\n\namp = <span>foo &amp; bar</span>\nraw_amp = <span>foo & bar</span>\n"
  },
  {
    "path": "tests/jsx_ignore/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`jsx_ignore.js 1`] = `\n// this should remain as-is\n<div>\n {/* prettier-ignore */}\n <style jsx global>{ComponentStyles}</style>\n</div>;\n\n// this should remain as-is\n<div>\n {/* prettier-ignore */}\n <span     ugly  format=''   />\n</div>;\n\n// this should remain as-is\nf(\n  <Component>\n    {/*prettier-ignore*/}\n    <span     ugly  format=''   />\n  </Component>\n);\n\n// this be formatted\n<div>\n  {/* prettier-ignore */} foo\n  <Bar   excessive    spaces    />\n</div>;\n\n// this should remain as-is\n<div>\n{\n  /* prettier-ignore */\n  foo ( )\n}\n</div>;\n\n// this should remain as-is\n<div>\n{\n  /* prettier-ignore */\n  x     ?   <Y/> : <Z/>\n}\n</div>;\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// this should remain as-is\n<div>\n  {/* prettier-ignore */}\n  <style jsx global>{ComponentStyles}</style>\n</div>;\n\n// this should remain as-is\n<div>\n  {/* prettier-ignore */}\n  <span     ugly  format=''   />\n</div>;\n\n// this should remain as-is\nf(\n  <Component>\n    {/*prettier-ignore*/}\n    <span     ugly  format=''   />\n  </Component>\n);\n\n// this be formatted\n<div>\n  {/* prettier-ignore */} foo\n  <Bar excessive spaces />\n</div>;\n\n// this should remain as-is\n<div>\n  {/* prettier-ignore */\n  foo ( )}\n</div>;\n\n// this should remain as-is\n<div>\n  {/* prettier-ignore */\n  x     ?   <Y/> : <Z/>}\n</div>;\n\n`;\n"
  },
  {
    "path": "tests/jsx_ignore/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\", \"typescript\"]);\n"
  },
  {
    "path": "tests/jsx_ignore/jsx_ignore.js",
    "content": "// this should remain as-is\n<div>\n {/* prettier-ignore */}\n <style jsx global>{ComponentStyles}</style>\n</div>;\n\n// this should remain as-is\n<div>\n {/* prettier-ignore */}\n <span     ugly  format=''   />\n</div>;\n\n// this should remain as-is\nf(\n  <Component>\n    {/*prettier-ignore*/}\n    <span     ugly  format=''   />\n  </Component>\n);\n\n// this be formatted\n<div>\n  {/* prettier-ignore */} foo\n  <Bar   excessive    spaces    />\n</div>;\n\n// this should remain as-is\n<div>\n{\n  /* prettier-ignore */\n  foo ( )\n}\n</div>;\n\n// this should remain as-is\n<div>\n{\n  /* prettier-ignore */\n  x     ?   <Y/> : <Z/>\n}\n</div>;\n\n"
  },
  {
    "path": "tests/jsx_last_line/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`last_line.js 1`] = `\n<SomeHighlyConfiguredComponent\n  onEnter={this.onEnter}\n  onLeave={this.onLeave}\n  onChange={this.onChange}\n  initialValue={this.state.initialValue}\n  ignoreStuff={true}\n>\n  <div>and the children go here</div>\n  <div>and here too</div>\n</SomeHighlyConfiguredComponent>\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<SomeHighlyConfiguredComponent\n  onEnter={this.onEnter}\n  onLeave={this.onLeave}\n  onChange={this.onChange}\n  initialValue={this.state.initialValue}\n  ignoreStuff={true}>\n  <div>and the children go here</div>\n  <div>and here too</div>\n</SomeHighlyConfiguredComponent>;\n\n`;\n\nexports[`last_line.js 2`] = `\n<SomeHighlyConfiguredComponent\n  onEnter={this.onEnter}\n  onLeave={this.onLeave}\n  onChange={this.onChange}\n  initialValue={this.state.initialValue}\n  ignoreStuff={true}\n>\n  <div>and the children go here</div>\n  <div>and here too</div>\n</SomeHighlyConfiguredComponent>\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<SomeHighlyConfiguredComponent\n  onEnter={this.onEnter}\n  onLeave={this.onLeave}\n  onChange={this.onChange}\n  initialValue={this.state.initialValue}\n  ignoreStuff={true}\n>\n  <div>and the children go here</div>\n  <div>and here too</div>\n</SomeHighlyConfiguredComponent>;\n\n`;\n"
  },
  {
    "path": "tests/jsx_last_line/jsfmt.spec.js",
    "content": "run_spec(__dirname, { jsxBracketSameLine: true }, [\"typescript\"]);\nrun_spec(__dirname, { jsxBracketSameLine: false }, [\"typescript\"]);\n"
  },
  {
    "path": "tests/jsx_last_line/last_line.js",
    "content": "<SomeHighlyConfiguredComponent\n  onEnter={this.onEnter}\n  onLeave={this.onLeave}\n  onChange={this.onChange}\n  initialValue={this.state.initialValue}\n  ignoreStuff={true}\n>\n  <div>and the children go here</div>\n  <div>and here too</div>\n</SomeHighlyConfiguredComponent>\n"
  },
  {
    "path": "tests/jsx_namespace/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`jsx_namespaced_name.js 1`] = `\n<jsx:namespacedname />;\n\n<jsx:namespacedname>1</jsx:namespacedname>;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<jsx:namespacedname />;\n\n<jsx:namespacedname>1</jsx:namespacedname>;\n\n`;\n"
  },
  {
    "path": "tests/jsx_namespace/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/jsx_namespace/jsx_namespaced_name.js",
    "content": "<jsx:namespacedname />;\n\n<jsx:namespacedname>1</jsx:namespacedname>;\n"
  },
  {
    "path": "tests/jsx_template/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`styled-components.js 1`] = `\n<style jsx>{\\`\n  p {\n    color: red;\n  }\n\\`}</style>;\n\n<style jsx>{tpl\\`\n  p {\n    color: red;\n  }\n\\`}</style>;\n\n<style jsx>\n  {\\`p {\n     color: red;\n     }\n  \\`}\n</style>;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<style jsx>{\\`\n  p {\n    color: red;\n  }\n\\`}</style>;\n\n<style jsx>{tpl\\`\n  p {\n    color: red;\n  }\n\\`}</style>;\n\n<style jsx>\n  {\\`\n    p {\n      color: red;\n    }\n  \\`}\n</style>;\n\n`;\n"
  },
  {
    "path": "tests/jsx_template/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/jsx_template/styled-components.js",
    "content": "<style jsx>{`\n  p {\n    color: red;\n  }\n`}</style>;\n\n<style jsx>{tpl`\n  p {\n    color: red;\n  }\n`}</style>;\n\n<style jsx>\n  {`p {\n     color: red;\n     }\n  `}\n</style>;\n"
  },
  {
    "path": "tests/label/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`comment.js 1`] = `\n{\n  inf_leave: // goto emulation\n  for (;;) {}\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n{\n  // goto emulation\n  inf_leave: for (;;) {}\n}\n\n`;\n\nexports[`empty_label.js 1`] = `\na:;\nb\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\na:;\nb;\n\n`;\n"
  },
  {
    "path": "tests/label/comment.js",
    "content": "{\n  inf_leave: // goto emulation\n  for (;;) {}\n}\n"
  },
  {
    "path": "tests/label/empty_label.js",
    "content": "a:;\nb\n"
  },
  {
    "path": "tests/label/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/last_argument_expansion/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`arrow.js 1`] = `\nexport default function searchUsers(action$) {\n  return action$.ofType(ActionTypes.SEARCHED_USERS)\n    .map(action => action.payload.query)\n    .filter(q => !!q)\n    .switchMap(q =>\n      Observable.timer(800) // debounce\n        .takeUntil(action$.ofType(ActionTypes.CLEARED_SEARCH_RESULTS))\n        .mergeMap(() => Observable.merge(\n          Observable.of(replace(\\`?q=\\${q}\\`)),\n          ajax.getJSON(\\`https://api.github.com/search/users?q=\\${q}\\`)\n            .map(res => res.items)\n            .map(receiveUsers)\n        ))\n    );\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default function searchUsers(action$) {\n  return action$\n    .ofType(ActionTypes.SEARCHED_USERS)\n    .map(action => action.payload.query)\n    .filter(q => !!q)\n    .switchMap(q =>\n      Observable.timer(800) // debounce\n        .takeUntil(action$.ofType(ActionTypes.CLEARED_SEARCH_RESULTS))\n        .mergeMap(() =>\n          Observable.merge(\n            Observable.of(replace(\\`?q=\\${q}\\`)),\n            ajax\n              .getJSON(\\`https://api.github.com/search/users?q=\\${q}\\`)\n              .map(res => res.items)\n              .map(receiveUsers)\n          )\n        )\n    );\n}\n\n`;\n\nexports[`break.js 1`] = `\nexport default class AddAssetHtmlPlugin {\n  apply(compiler: WebpackCompilerType) {\n    compiler.plugin('compilation', (compilation: WebpackCompilationType) => {\n      compilation.plugin('html-webpack-plugin-before-html', (callback: Callback<any>) => {\n        addAllAssetsToCompilation(this.assets, compilation, htmlPluginData, callback);\n      });\n    });\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default class AddAssetHtmlPlugin {\n  apply(compiler: WebpackCompilerType) {\n    compiler.plugin(\"compilation\", (compilation: WebpackCompilationType) => {\n      compilation.plugin(\n        \"html-webpack-plugin-before-html\",\n        (callback: Callback<any>) => {\n          addAllAssetsToCompilation(\n            this.assets,\n            compilation,\n            htmlPluginData,\n            callback\n          );\n        }\n      );\n    });\n  }\n}\n\n`;\n\nexports[`break-parent.js 1`] = `\n({\n  processors: [\n    require(\"autoprefixer\", {\n      browsers: [\"> 1%\", \"last 2 versions\", \"ie >= 11\", \"Firefox ESR\"]\n    }),\n    require(\"postcss-url\")({\n      url: url =>\n        url.startsWith(\"/\") || /^[a-z]+:/.test(url) ? url : \\`/static/\\${url}\\`\n    })\n  ]\n});\n\ntrue\n  ? test({\n      a: 1\n    })\n  : <div\n      a={123412342314}\n      b={123412341234}\n      c={123412341234}\n      d={123412341234}\n      e={123412341234}\n      f={123412341234}\n      g={123412341234}\n    />;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n({\n  processors: [\n    require(\"autoprefixer\", {\n      browsers: [\"> 1%\", \"last 2 versions\", \"ie >= 11\", \"Firefox ESR\"]\n    }),\n    require(\"postcss-url\")({\n      url: url =>\n        url.startsWith(\"/\") || /^[a-z]+:/.test(url) ? url : \\`/static/\\${url}\\`\n    })\n  ]\n});\n\ntrue ? (\n  test({\n    a: 1\n  })\n) : (\n  <div\n    a={123412342314}\n    b={123412341234}\n    c={123412341234}\n    d={123412341234}\n    e={123412341234}\n    f={123412341234}\n    g={123412341234}\n  />\n);\n\n`;\n\nexports[`edge_case.js 1`] = `\nvar listener = DOM.listen(\n  introCard,\n  'click',\n  sigil,\n  (event: JavelinEvent): void =>\n    BanzaiLogger.log(\n      config,\n      {...logData, ...DataStore.get(event.getNode(sigil))},\n    ),\n);\n\na(\n  SomethingVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLong,\n  [\n    {\n      SomethingVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLong: 1\n    }\n  ]\n);\n\nexports.examples = [\n  {\n    render: withGraphQLQuery(\n      'node(1234567890){image{uri}}',\n      function(container, data) {\n        return (\n          <div>\n            <InlineBlock>\n              <img\n                src={data[1234567890].image.uri}\n                style={{position: 'absolute', top: '0', left: '0', zIndex:'-1'}}\n              />\n            </InlineBlock>\n          </div>\n        );\n      }\n    )\n  }\n];\n\nsomeReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReally.a([\n  [],\n  // comment\n  [],\n]);\n\n(function webpackUniversalModuleDefinition() {})(this, function(__WEBPACK_EXTERNAL_MODULE_85__, __WEBPACK_EXTERNAL_MODULE_115__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n/***/ }\n/******/ ])\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar listener = DOM.listen(\n  introCard,\n  \"click\",\n  sigil,\n  (event: JavelinEvent): void =>\n    BanzaiLogger.log(config, {\n      ...logData,\n      ...DataStore.get(event.getNode(sigil))\n    })\n);\n\na(\n  SomethingVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLong,\n  [\n    {\n      SomethingVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLong: 1\n    }\n  ]\n);\n\nexports.examples = [\n  {\n    render: withGraphQLQuery(\"node(1234567890){image{uri}}\", function(\n      container,\n      data\n    ) {\n      return (\n        <div>\n          <InlineBlock>\n            <img\n              src={data[1234567890].image.uri}\n              style={{\n                position: \"absolute\",\n                top: \"0\",\n                left: \"0\",\n                zIndex: \"-1\"\n              }}\n            />\n          </InlineBlock>\n        </div>\n      );\n    })\n  }\n];\n\nsomeReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReally.a(\n  [\n    [],\n    // comment\n    []\n  ]\n);\n\n(function webpackUniversalModuleDefinition() {})(this, function(\n  __WEBPACK_EXTERNAL_MODULE_85__,\n  __WEBPACK_EXTERNAL_MODULE_115__\n) {\n  return /******/ (function(modules) {\n    // webpackBootstrap\n    /******/\n  })(\n    /************************************************************************/\n    /******/ [\n      /* 0 */\n      /***/ function(module, exports, __webpack_require__) {\n        /***/\n      },\n      /* 1 */\n      /***/ function(module, exports, __webpack_require__) {\n        /***/\n      },\n      /* 2 */\n      /***/ function(module, exports, __webpack_require__) {\n        /***/\n      }\n      /******/\n    ]\n  );\n});\n\n`;\n\nexports[`jsx.js 1`] = `\nconst els = items.map(item => (\n  <div className=\"whatever\">\n    <span>{children}</span>\n  </div>\n));\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst els = items.map(item => (\n  <div className=\"whatever\">\n    <span>{children}</span>\n  </div>\n));\n\n`;\n\nexports[`object.js 1`] = `\nconst formatData = pipe(\n  zip,\n  map(([ ref, data ]) => ({\n    nodeId: ref.nodeId.toString(),\n    ...attributeFromDataValue(ref.attributeId, data)\n  })),\n  groupBy(prop('nodeId')),\n  map(mergeAll),\n  values\n);\n\nexport const setProp = y => ({\n  ...y,\n  a: 'very, very, very long very, very long text'\n});\n\nexport const log = y => {\n  console.log('very, very, very long very, very long text')\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst formatData = pipe(\n  zip,\n  map(([ref, data]) => ({\n    nodeId: ref.nodeId.toString(),\n    ...attributeFromDataValue(ref.attributeId, data)\n  })),\n  groupBy(prop(\"nodeId\")),\n  map(mergeAll),\n  values\n);\n\nexport const setProp = y => ({\n  ...y,\n  a: \"very, very, very long very, very long text\"\n});\n\nexport const log = y => {\n  console.log(\"very, very, very long very, very long text\");\n};\n\n`;\n\nexports[`overflow.js 1`] = `\nSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperLongCall((err, result) => {\n  // comment\n});\n\nfunc(one, two, three, four, five, six, seven, eig, is, this, too, long, no, []);\nfunc(one, two, three, four, five, six, seven, eig, is, this, too, long, yes, []);\nfunc(one, two, three, four, five, six, seven, eig, is, this, too, long, yes, [\n  // Comments\n]);\nfunc(five, six, seven, eig, is, this, too, long, yes, [\n  // Comments\n]);\n\nfunc(one, two, three, four, five, six, seven, eig, is, this, too, long, no, {});\nfunc(one, two, three, four, five, six, seven, eig, is, this, too, long, yes, {});\nfunc(one, two, three, four, five, six, seven, eig, is, this, too, long, yes, {\n  // Comments\n});\n\nfoo(\n  (\n    one,\n    two,\n    three,\n    four,\n    five,\n    six,\n    seven,\n    eight,\n    nine,\n    ten,\n    eleven,\n    twelve,\n    thirteen,\n    fourteen,\n  ) => {},\n);\n\nconst contentTypes = function(tile, singleSelection) {\n  return compute(\n    function contentTypesContentTypes(\n      tile,\n      searchString = '',\n      filteredContentTypes = [],\n      contentTypesArray = [],\n      selectedGroup,\n      singleSelection) {\n      selectedGroup = (tile.state && tile.state.group) || selectedGroup;\n    }\n  );\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperLongCall(\n  (err, result) => {\n    // comment\n  }\n);\n\nfunc(one, two, three, four, five, six, seven, eig, is, this, too, long, no, []);\nfunc(\n  one,\n  two,\n  three,\n  four,\n  five,\n  six,\n  seven,\n  eig,\n  is,\n  this,\n  too,\n  long,\n  yes,\n  []\n);\nfunc(\n  one,\n  two,\n  three,\n  four,\n  five,\n  six,\n  seven,\n  eig,\n  is,\n  this,\n  too,\n  long,\n  yes,\n  [\n    // Comments\n  ]\n);\nfunc(\n  five,\n  six,\n  seven,\n  eig,\n  is,\n  this,\n  too,\n  long,\n  yes,\n  [\n    // Comments\n  ]\n);\n\nfunc(one, two, three, four, five, six, seven, eig, is, this, too, long, no, {});\nfunc(\n  one,\n  two,\n  three,\n  four,\n  five,\n  six,\n  seven,\n  eig,\n  is,\n  this,\n  too,\n  long,\n  yes,\n  {}\n);\nfunc(\n  one,\n  two,\n  three,\n  four,\n  five,\n  six,\n  seven,\n  eig,\n  is,\n  this,\n  too,\n  long,\n  yes,\n  {\n    // Comments\n  }\n);\n\nfoo(\n  (\n    one,\n    two,\n    three,\n    four,\n    five,\n    six,\n    seven,\n    eight,\n    nine,\n    ten,\n    eleven,\n    twelve,\n    thirteen,\n    fourteen\n  ) => {}\n);\n\nconst contentTypes = function(tile, singleSelection) {\n  return compute(function contentTypesContentTypes(\n    tile,\n    searchString = \"\",\n    filteredContentTypes = [],\n    contentTypesArray = [],\n    selectedGroup,\n    singleSelection\n  ) {\n    selectedGroup = (tile.state && tile.state.group) || selectedGroup;\n  });\n};\n\n`;\n"
  },
  {
    "path": "tests/last_argument_expansion/arrow.js",
    "content": "export default function searchUsers(action$) {\n  return action$.ofType(ActionTypes.SEARCHED_USERS)\n    .map(action => action.payload.query)\n    .filter(q => !!q)\n    .switchMap(q =>\n      Observable.timer(800) // debounce\n        .takeUntil(action$.ofType(ActionTypes.CLEARED_SEARCH_RESULTS))\n        .mergeMap(() => Observable.merge(\n          Observable.of(replace(`?q=${q}`)),\n          ajax.getJSON(`https://api.github.com/search/users?q=${q}`)\n            .map(res => res.items)\n            .map(receiveUsers)\n        ))\n    );\n};\n"
  },
  {
    "path": "tests/last_argument_expansion/break-parent.js",
    "content": "({\n  processors: [\n    require(\"autoprefixer\", {\n      browsers: [\"> 1%\", \"last 2 versions\", \"ie >= 11\", \"Firefox ESR\"]\n    }),\n    require(\"postcss-url\")({\n      url: url =>\n        url.startsWith(\"/\") || /^[a-z]+:/.test(url) ? url : `/static/${url}`\n    })\n  ]\n});\n\ntrue\n  ? test({\n      a: 1\n    })\n  : <div\n      a={123412342314}\n      b={123412341234}\n      c={123412341234}\n      d={123412341234}\n      e={123412341234}\n      f={123412341234}\n      g={123412341234}\n    />;\n"
  },
  {
    "path": "tests/last_argument_expansion/break.js",
    "content": "export default class AddAssetHtmlPlugin {\n  apply(compiler: WebpackCompilerType) {\n    compiler.plugin('compilation', (compilation: WebpackCompilationType) => {\n      compilation.plugin('html-webpack-plugin-before-html', (callback: Callback<any>) => {\n        addAllAssetsToCompilation(this.assets, compilation, htmlPluginData, callback);\n      });\n    });\n  }\n}\n"
  },
  {
    "path": "tests/last_argument_expansion/edge_case.js",
    "content": "var listener = DOM.listen(\n  introCard,\n  'click',\n  sigil,\n  (event: JavelinEvent): void =>\n    BanzaiLogger.log(\n      config,\n      {...logData, ...DataStore.get(event.getNode(sigil))},\n    ),\n);\n\na(\n  SomethingVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLong,\n  [\n    {\n      SomethingVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLong: 1\n    }\n  ]\n);\n\nexports.examples = [\n  {\n    render: withGraphQLQuery(\n      'node(1234567890){image{uri}}',\n      function(container, data) {\n        return (\n          <div>\n            <InlineBlock>\n              <img\n                src={data[1234567890].image.uri}\n                style={{position: 'absolute', top: '0', left: '0', zIndex:'-1'}}\n              />\n            </InlineBlock>\n          </div>\n        );\n      }\n    )\n  }\n];\n\nsomeReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReally.a([\n  [],\n  // comment\n  [],\n]);\n\n(function webpackUniversalModuleDefinition() {})(this, function(__WEBPACK_EXTERNAL_MODULE_85__, __WEBPACK_EXTERNAL_MODULE_115__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n/***/ }\n/******/ ])\n});\n"
  },
  {
    "path": "tests/last_argument_expansion/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/last_argument_expansion/jsx.js",
    "content": "const els = items.map(item => (\n  <div className=\"whatever\">\n    <span>{children}</span>\n  </div>\n));\n"
  },
  {
    "path": "tests/last_argument_expansion/object.js",
    "content": "const formatData = pipe(\n  zip,\n  map(([ ref, data ]) => ({\n    nodeId: ref.nodeId.toString(),\n    ...attributeFromDataValue(ref.attributeId, data)\n  })),\n  groupBy(prop('nodeId')),\n  map(mergeAll),\n  values\n);\n\nexport const setProp = y => ({\n  ...y,\n  a: 'very, very, very long very, very long text'\n});\n\nexport const log = y => {\n  console.log('very, very, very long very, very long text')\n};\n"
  },
  {
    "path": "tests/last_argument_expansion/overflow.js",
    "content": "SuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperLongCall((err, result) => {\n  // comment\n});\n\nfunc(one, two, three, four, five, six, seven, eig, is, this, too, long, no, []);\nfunc(one, two, three, four, five, six, seven, eig, is, this, too, long, yes, []);\nfunc(one, two, three, four, five, six, seven, eig, is, this, too, long, yes, [\n  // Comments\n]);\nfunc(five, six, seven, eig, is, this, too, long, yes, [\n  // Comments\n]);\n\nfunc(one, two, three, four, five, six, seven, eig, is, this, too, long, no, {});\nfunc(one, two, three, four, five, six, seven, eig, is, this, too, long, yes, {});\nfunc(one, two, three, four, five, six, seven, eig, is, this, too, long, yes, {\n  // Comments\n});\n\nfoo(\n  (\n    one,\n    two,\n    three,\n    four,\n    five,\n    six,\n    seven,\n    eight,\n    nine,\n    ten,\n    eleven,\n    twelve,\n    thirteen,\n    fourteen,\n  ) => {},\n);\n\nconst contentTypes = function(tile, singleSelection) {\n  return compute(\n    function contentTypesContentTypes(\n      tile,\n      searchString = '',\n      filteredContentTypes = [],\n      contentTypesArray = [],\n      selectedGroup,\n      singleSelection) {\n      selectedGroup = (tile.state && tile.state.group) || selectedGroup;\n    }\n  );\n};\n"
  },
  {
    "path": "tests/line/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`windows.js 1`] = `\nconst vscode = require(\"vscode\");\nconst {getDir, getActiveFile, uint8arrayToString} = require(\"./utils\");\n\nlet outChannel;\nlet _commands;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst vscode = require(\"vscode\");\nconst { getDir, getActiveFile, uint8arrayToString } = require(\"./utils\");\n\nlet outChannel;\nlet _commands;\n\n`;\n"
  },
  {
    "path": "tests/line/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/line/windows.js",
    "content": "const vscode = require(\"vscode\");\r\nconst {getDir, getActiveFile, uint8arrayToString} = require(\"./utils\");\r\n\r\nlet outChannel;\r\nlet _commands;\r\n"
  },
  {
    "path": "tests/line_suffix_boundary/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`boundary.js 1`] = `\n\\`\\${\na +  // a\n  a\n}\n\n\\${a // comment\n}\n\n\\${b /* comment */}\n\n\\${/* comment */ c /* comment */}\n\n\\${// comment\nd //comment\n}\n\n\\${// $FlowFixMe found when converting React.createClass to ES6\nExampleStory.getFragment('story')}\n\\`;\n\n<div>\n{ExampleStory.getFragment('story') // $FlowFixMe found when converting React.createClass to ES6\n}\n</div>;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\\`\\${a + a // a\n}\n\n\\${a // comment\n}\n\n\\${b /* comment */}\n\n\\${/* comment */ c /* comment */}\n\n\\${// comment\nd //comment\n}\n\n\\${// $FlowFixMe found when converting React.createClass to ES6\nExampleStory.getFragment(\"story\")}\n\\`;\n\n<div>\n  {ExampleStory.getFragment(\"story\") // $FlowFixMe found when converting React.createClass to ES6\n  }\n</div>;\n\n`;\n"
  },
  {
    "path": "tests/line_suffix_boundary/boundary.js",
    "content": "`${\na +  // a\n  a\n}\n\n${a // comment\n}\n\n${b /* comment */}\n\n${/* comment */ c /* comment */}\n\n${// comment\nd //comment\n}\n\n${// $FlowFixMe found when converting React.createClass to ES6\nExampleStory.getFragment('story')}\n`;\n\n<div>\n{ExampleStory.getFragment('story') // $FlowFixMe found when converting React.createClass to ES6\n}\n</div>;\n"
  },
  {
    "path": "tests/line_suffix_boundary/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\", \"typescript\"]);\n"
  },
  {
    "path": "tests/literal/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`number.js 1`] = `\n// parentheses around numeric literal should be preserved\nfunction test5(): string {\n  return (100).toString();\n}\n\n0\n1\n\n0.1\n1.1\n\n.1\n1.\n\n0b1\n0B1\n0o1\n0O1\n0x1\n0X1\n\n0x123abcdef456ABCDEF\n0X123abcdef456ABCDEF\n0xdeadbeef;\n\n0b111000\n0b000111\n0B111000\n0B000111\n0o111000\n0o000111\n0O111000\n0O000111\n0x111000\n0x000111\n0X111000\n0X000111\n\n1e1\n1e+1\n1e-1\n1.e1\n.1e1\n1.1e1\n1.1e0010\n.1e+0010\n.1e-0010\n\n1E1\n1E+1\n1E-1\n1.E1\n.1E1\n1.1E1\n1.1E0010\n.1E+0010\n.1E-0010\n\n0.5e0\n0.5e00\n0.5e+0\n0.5e+00\n0.5e-0\n0.5e-00\n\n1\n1.00500\n1.0\n1.5\n1.50\n0\n0.00500\n0.0\n0.0000\n.0\n500600.001230045000\n1.00500e60\n1.0e60\n0.00500e60\n0.0e60\n0.0000e60\n.0e60\n0.e60\n0e60\n500600.001230045000e60\n10\n9700\n10e100\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// parentheses around numeric literal should be preserved\nfunction test5(): string {\n  return (100).toString();\n}\n\n0;\n1;\n\n0.1;\n1.1;\n\n0.1;\n1;\n\n0b1;\n0b1;\n0o1;\n0o1;\n0x1;\n0x1;\n\n0x123abcdef456abcdef;\n0x123abcdef456abcdef;\n0xdeadbeef;\n\n0b111000;\n0b000111;\n0b111000;\n0b000111;\n0o111000;\n0o000111;\n0o111000;\n0o000111;\n0x111000;\n0x000111;\n0x111000;\n0x000111;\n\n1e1;\n1e1;\n1e-1;\n1e1;\n0.1e1;\n1.1e1;\n1.1e10;\n0.1e10;\n0.1e-10;\n\n1e1;\n1e1;\n1e-1;\n1e1;\n0.1e1;\n1.1e1;\n1.1e10;\n0.1e10;\n0.1e-10;\n\n0.5;\n0.5;\n0.5;\n0.5;\n0.5;\n0.5;\n\n1;\n1.005;\n1.0;\n1.5;\n1.5;\n0;\n0.005;\n0.0;\n0.0;\n0.0;\n500600.001230045;\n1.005e60;\n1.0e60;\n0.005e60;\n0.0e60;\n0.0e60;\n0.0e60;\n0e60;\n0e60;\n500600.001230045e60;\n10;\n9700;\n10e100;\n\n`;\n"
  },
  {
    "path": "tests/literal/jsfmt.spec.js",
    "content": "// flow-parser@0.38.0 fails to parse `1.e1`, so use babylon here.\nrun_spec(__dirname, { parser: \"babylon\" }, [\"typescript\"]);\n"
  },
  {
    "path": "tests/literal/number.js",
    "content": "// parentheses around numeric literal should be preserved\nfunction test5(): string {\n  return (100).toString();\n}\n\n0\n1\n\n0.1\n1.1\n\n.1\n1.\n\n0b1\n0B1\n0o1\n0O1\n0x1\n0X1\n\n0x123abcdef456ABCDEF\n0X123abcdef456ABCDEF\n0xdeadbeef;\n\n0b111000\n0b000111\n0B111000\n0B000111\n0o111000\n0o000111\n0O111000\n0O000111\n0x111000\n0x000111\n0X111000\n0X000111\n\n1e1\n1e+1\n1e-1\n1.e1\n.1e1\n1.1e1\n1.1e0010\n.1e+0010\n.1e-0010\n\n1E1\n1E+1\n1E-1\n1.E1\n.1E1\n1.1E1\n1.1E0010\n.1E+0010\n.1E-0010\n\n0.5e0\n0.5e00\n0.5e+0\n0.5e+00\n0.5e-0\n0.5e-00\n\n1\n1.00500\n1.0\n1.5\n1.50\n0\n0.00500\n0.0\n0.0000\n.0\n500600.001230045000\n1.00500e60\n1.0e60\n0.00500e60\n0.0e60\n0.0000e60\n.0e60\n0.e60\n0e60\n500600.001230045000e60\n10\n9700\n10e100\n"
  },
  {
    "path": "tests/literal-numeric-separator/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n1_1\n1_1.1_1\n0o1_1\n0o0_11\n1.1_0_1e1\n1.1_0_1E1\n.1_1\n0x1_1\n0xa_1\n0xA_1\n0b01_1\n0b0_1_1\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n1_1;\n1_1.1_1;\n0o1_1;\n0o0_11;\n1.1_0_1e1;\n1.1_0_1e1;\n0.1_1;\n0x1_1;\n0xa_1;\n0xa_1;\n0b01_1;\n0b0_1_1;\n\n`;\n"
  },
  {
    "path": "tests/literal-numeric-separator/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"babylon\" });\n"
  },
  {
    "path": "tests/literal-numeric-separator/test.js",
    "content": "1_1\n1_1.1_1\n0o1_1\n0o0_11\n1.1_0_1e1\n1.1_0_1E1\n.1_1\n0x1_1\n0xa_1\n0xA_1\n0b01_1\n0b0_1_1\n"
  },
  {
    "path": "tests/member/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`expand.js 1`] = `\nconst veryVeryVeryVeryVeryVeryVeryLong = doc.expandedStates[doc.expandedStates.length - 1];\nconst small = doc.expandedStates[doc.expandedStates.length - 1];\n\nconst promises = [\n  promise.resolve().then(console.log).catch(err => {\n    console.log(err)\n    return null\n  }),\n  redis.fetch(),\n  other.fetch(),\n];\n\nconst promises = [\n  promise.resolve().veryLongFunctionCall().veryLongFunctionCall().then(console.log).catch(err => {\n    console.log(err)\n    return null\n  }),\n  redis.fetch(),\n  other.fetch(),\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst veryVeryVeryVeryVeryVeryVeryLong =\n  doc.expandedStates[doc.expandedStates.length - 1];\nconst small = doc.expandedStates[doc.expandedStates.length - 1];\n\nconst promises = [\n  promise.resolve().then(console.log).catch(err => {\n    console.log(err);\n    return null;\n  }),\n  redis.fetch(),\n  other.fetch()\n];\n\nconst promises = [\n  promise\n    .resolve()\n    .veryLongFunctionCall()\n    .veryLongFunctionCall()\n    .then(console.log)\n    .catch(err => {\n      console.log(err);\n      return null;\n    }),\n  redis.fetch(),\n  other.fetch()\n];\n\n`;\n"
  },
  {
    "path": "tests/member/expand.js",
    "content": "const veryVeryVeryVeryVeryVeryVeryLong = doc.expandedStates[doc.expandedStates.length - 1];\nconst small = doc.expandedStates[doc.expandedStates.length - 1];\n\nconst promises = [\n  promise.resolve().then(console.log).catch(err => {\n    console.log(err)\n    return null\n  }),\n  redis.fetch(),\n  other.fetch(),\n];\n\nconst promises = [\n  promise.resolve().veryLongFunctionCall().veryLongFunctionCall().then(console.log).catch(err => {\n    console.log(err)\n    return null\n  }),\n  redis.fetch(),\n  other.fetch(),\n];\n"
  },
  {
    "path": "tests/member/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/method-chain/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`bracket_0.js 1`] = `\nfunction a() {\n  function b() {\n\tqueryThenMutateDOM(\n      () => {\n        title = SomeThing.call(root, 'someLongStringThatPushesThisTextReallyFar')[0];\n      }\n    );\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction a() {\n  function b() {\n    queryThenMutateDOM(() => {\n      title = SomeThing.call(\n        root,\n        \"someLongStringThatPushesThisTextReallyFar\"\n      )[0];\n    });\n  }\n}\n\n`;\n\nexports[`break-last-call.js 1`] = `\nexport default store => {\n  return callApi(endpoint, schema).then(\n    response => next(actionWith({\n      response,\n      type: successType\n    })),\n    error => next(actionWith({\n      type: failureType,\n      error: error.message || 'Something bad happened'\n    }))\n  )\n}\n\nit('should group messages with same created time', () => {\n  expect(\n    groupMessages(messages).toJS(),\n  ).toEqual({\n    '11/01/2017 13:36': [\n      {message: 'test', messageType: 'SMS', status: 'Unknown', created: '11/01/2017 13:36'},\n      {message: 'test', messageType: 'Email', status: 'Unknown', created: '11/01/2017 13:36'},\n    ],\n    '09/01/2017 17:25': [\n      {message: 'te', messageType: 'SMS', status: 'Unknown', created: '09/01/2017 17:25'},\n      {message: 'te', messageType: 'Email', status: 'Unknown', created: '09/01/2017 17:25'},\n    ],\n    '11/01/2017 13:33': [\n      {message: 'test', messageType: 'SMS', status: 'Unknown', created: '11/01/2017 13:33'},\n      {message: 'test', messageType: 'Email', status: 'Unknown', created: '11/01/2017 13:33'},\n    ],\n    '11/01/2017 13:37': [\n      {message: 'test', messageType: 'SMS', status: 'Unknown', created: '11/01/2017 13:37'},\n      {message: 'test', messageType: 'Email', status: 'Unknown', created: '11/01/2017 13:37'},\n    ],\n  });\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default store => {\n  return callApi(endpoint, schema).then(\n    response =>\n      next(\n        actionWith({\n          response,\n          type: successType\n        })\n      ),\n    error =>\n      next(\n        actionWith({\n          type: failureType,\n          error: error.message || \"Something bad happened\"\n        })\n      )\n  );\n};\n\nit(\"should group messages with same created time\", () => {\n  expect(groupMessages(messages).toJS()).toEqual({\n    \"11/01/2017 13:36\": [\n      {\n        message: \"test\",\n        messageType: \"SMS\",\n        status: \"Unknown\",\n        created: \"11/01/2017 13:36\"\n      },\n      {\n        message: \"test\",\n        messageType: \"Email\",\n        status: \"Unknown\",\n        created: \"11/01/2017 13:36\"\n      }\n    ],\n    \"09/01/2017 17:25\": [\n      {\n        message: \"te\",\n        messageType: \"SMS\",\n        status: \"Unknown\",\n        created: \"09/01/2017 17:25\"\n      },\n      {\n        message: \"te\",\n        messageType: \"Email\",\n        status: \"Unknown\",\n        created: \"09/01/2017 17:25\"\n      }\n    ],\n    \"11/01/2017 13:33\": [\n      {\n        message: \"test\",\n        messageType: \"SMS\",\n        status: \"Unknown\",\n        created: \"11/01/2017 13:33\"\n      },\n      {\n        message: \"test\",\n        messageType: \"Email\",\n        status: \"Unknown\",\n        created: \"11/01/2017 13:33\"\n      }\n    ],\n    \"11/01/2017 13:37\": [\n      {\n        message: \"test\",\n        messageType: \"SMS\",\n        status: \"Unknown\",\n        created: \"11/01/2017 13:37\"\n      },\n      {\n        message: \"test\",\n        messageType: \"Email\",\n        status: \"Unknown\",\n        created: \"11/01/2017 13:37\"\n      }\n    ]\n  });\n});\n\n`;\n\nexports[`break-last-member.js 1`] = `\nSomeVeryLongUpperCaseConstant.someVeryLongCallExpression().some_very_long_member_expression\nweNeedToReachTheEightyCharacterLimitXXXXXXXXXXXXXXXXX.someNode\n  .childrenInAnArray[0];\nsuperSupersuperSupersuperSupersuperSupersuperSuperLong.exampleOfOrderOfGetterAndSetterReordered;\nsuperSupersuperSupersuperSupersuperSupersuperSuperLong.exampleOfOrderOfGetterAndSetterReordered[0];\n\nexpect(\n  findDOMNode(component.instance()).getElementsByClassName(styles.inner)[0].style.paddingRight\n).toBe('1000px');\n\nconst { course, conflicts = [], index, scheduleId, studentId, something } = a.this.props;\n\nconst { course, conflicts = [], index, scheduleId, studentId, something } = this.props;\n\nconst {\n  updated,\n  author: { identifier: ownerId },\n  location,\n  category: categories,\n} = rawAd.entry;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nSomeVeryLongUpperCaseConstant.someVeryLongCallExpression()\n  .some_very_long_member_expression;\nweNeedToReachTheEightyCharacterLimitXXXXXXXXXXXXXXXXX.someNode\n  .childrenInAnArray[0];\nsuperSupersuperSupersuperSupersuperSupersuperSuperLong.exampleOfOrderOfGetterAndSetterReordered;\nsuperSupersuperSupersuperSupersuperSupersuperSuperLong\n  .exampleOfOrderOfGetterAndSetterReordered[0];\n\nexpect(\n  findDOMNode(component.instance()).getElementsByClassName(styles.inner)[0]\n    .style.paddingRight\n).toBe(\"1000px\");\n\nconst {\n  course,\n  conflicts = [],\n  index,\n  scheduleId,\n  studentId,\n  something\n} = a.this.props;\n\nconst {\n  course,\n  conflicts = [],\n  index,\n  scheduleId,\n  studentId,\n  something\n} = this.props;\n\nconst {\n  updated,\n  author: { identifier: ownerId },\n  location,\n  category: categories\n} = rawAd.entry;\n\n`;\n\nexports[`comment.js 1`] = `\nfunction f() {\n  return observableFromSubscribeFunction()\n    // Debounce manually rather than using editor.onDidStopChanging so that the debounce time is\n    // configurable.\n    .debounceTime(debounceInterval);\n}\n\n_.a(a)\n  /* very very very very very very very long such that it is longer than 80 columns */\n  .a()\n\n_.a(\n  a\n)/* very very very very very very very long such that it is longer than 80 columns */\n.a();\n\n_.a(\n  a\n) /* very very very very very very very long such that it is longer than 80 columns */.a();\n\nSomething\n  // $FlowFixMe(>=0.41.0)\n  .getInstance(this.props.dao)\n  .getters()\n\n// Warm-up first\nmeasure()\n  .then(() => {\n    SomethingLong();\n  });\n\nmeasure() // Warm-up first\n  .then(() => {\n    SomethingLong();\n  });\n\nconst configModel = this.baseConfigurationService.getCache().consolidated\t\t// global/default values (do NOT modify)\n  .merge(this.cachedWorkspaceConfig);\n\nthis.doWriteConfiguration(target, value, options) // queue up writes to prevent race conditions\n  .then(() => null,\n  error => {\n    return options.donotNotifyError ? TPromise.wrapError(error) : this.onError(error, target, value);\n  });\n\nret = __DEV__ ?\n  // $FlowFixMe: this type differs according to the env\nvm.runInContext(source, ctx)\n: a\n\nthis.firebase.object(\\`/shops/\\${shopLocation.shop}\\`)\n  // keep distance info\n  .first((shop: ShopQueryResult, index: number, source: Observable<ShopQueryResult>): any => {\n      // add distance to result\n      const s = shop;\n      s.distance = shopLocation.distance;\n      return s;\n  });\n\nangular.module('AngularAppModule')\n  // Hello, I am comment.\n  .constant('API_URL', 'http://localhost:8080/api');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction f() {\n  return (\n    observableFromSubscribeFunction()\n      // Debounce manually rather than using editor.onDidStopChanging so that the debounce time is\n      // configurable.\n      .debounceTime(debounceInterval)\n  );\n}\n\n_.a(a)\n  /* very very very very very very very long such that it is longer than 80 columns */\n  .a();\n\n_.a(\n  a\n) /* very very very very very very very long such that it is longer than 80 columns */\n  .a();\n\n_.a(\n  a\n) /* very very very very very very very long such that it is longer than 80 columns */\n  .a();\n\nSomething\n  // $FlowFixMe(>=0.41.0)\n  .getInstance(this.props.dao)\n  .getters();\n\n// Warm-up first\nmeasure().then(() => {\n  SomethingLong();\n});\n\nmeasure() // Warm-up first\n  .then(() => {\n    SomethingLong();\n  });\n\nconst configModel = this.baseConfigurationService\n  .getCache()\n  .consolidated // global/default values (do NOT modify)\n  .merge(this.cachedWorkspaceConfig);\n\nthis.doWriteConfiguration(target, value, options) // queue up writes to prevent race conditions\n  .then(\n    () => null,\n    error => {\n      return options.donotNotifyError\n        ? TPromise.wrapError(error)\n        : this.onError(error, target, value);\n    }\n  );\n\nret = __DEV__\n  ? // $FlowFixMe: this type differs according to the env\n    vm.runInContext(source, ctx)\n  : a;\n\nthis.firebase\n  .object(\\`/shops/\\${shopLocation.shop}\\`)\n  // keep distance info\n  .first(\n    (\n      shop: ShopQueryResult,\n      index: number,\n      source: Observable<ShopQueryResult>\n    ): any => {\n      // add distance to result\n      const s = shop;\n      s.distance = shopLocation.distance;\n      return s;\n    }\n  );\n\nangular\n  .module(\"AngularAppModule\")\n  // Hello, I am comment.\n  .constant(\"API_URL\", \"http://localhost:8080/api\");\n\n`;\n\nexports[`computed.js 1`] = `\nnock(/test/)\n  .matchHeader('Accept', 'application/json')\n  [httpMethodNock(method)]('/foo')\n  .reply(200, {\n    foo: 'bar',\n  });\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nnock(/test/)\n  .matchHeader(\"Accept\", \"application/json\")\n  [httpMethodNock(method)](\"/foo\")\n  .reply(200, {\n    foo: \"bar\"\n  });\n\n`;\n\nexports[`first_long.js 1`] = `\nexport default function theFunction(action$, store) {\n  return action$.ofType(THE_ACTION).switchMap(action => Observable\n    .webSocket({\n      url: THE_URL,\n      more: stuff(),\n      evenMore: stuff({\n        value1: true,\n        value2: false,\n        value3: false\n      })\n    })\n    .filter(data => theFilter(data))\n    .map(({ theType, ...data }) => theMap(theType, data))\n    .retryWhen(errors => errors));\n}\n\nfunction f() {\n  return this._getWorker(workerOptions)({\n    filePath,\n    hasteImplModulePath: this._options.hasteImplModulePath,\n  }).then(\n    metadata => {\n      // \\`1\\` for truthy values instead of \\`true\\` to save cache space.\n      fileMetadata[H.VISITED] = 1;\n      const metadataId = metadata.id;\n      const metadataModule = metadata.module;\n      if (metadataId && metadataModule) {\n        fileMetadata[H.ID] = metadataId;\n        setModule(metadataId, metadataModule);\n      }\n      fileMetadata[H.DEPENDENCIES] = metadata.dependencies || [];\n    }\n  );\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport default function theFunction(action$, store) {\n  return action$.ofType(THE_ACTION).switchMap(action =>\n    Observable.webSocket({\n      url: THE_URL,\n      more: stuff(),\n      evenMore: stuff({\n        value1: true,\n        value2: false,\n        value3: false\n      })\n    })\n      .filter(data => theFilter(data))\n      .map(({ theType, ...data }) => theMap(theType, data))\n      .retryWhen(errors => errors)\n  );\n}\n\nfunction f() {\n  return this._getWorker(workerOptions)({\n    filePath,\n    hasteImplModulePath: this._options.hasteImplModulePath\n  }).then(metadata => {\n    // \\`1\\` for truthy values instead of \\`true\\` to save cache space.\n    fileMetadata[H.VISITED] = 1;\n    const metadataId = metadata.id;\n    const metadataModule = metadata.module;\n    if (metadataId && metadataModule) {\n      fileMetadata[H.ID] = metadataId;\n      setModule(metadataId, metadataModule);\n    }\n    fileMetadata[H.DEPENDENCIES] = metadata.dependencies || [];\n  });\n}\n\n`;\n\nexports[`inline_merge.js 1`] = `\nObject.keys(\n  availableLocales({\n    test: true\n  })\n)\n.forEach(locale => {\n  // ...\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nObject.keys(\n  availableLocales({\n    test: true\n  })\n).forEach(locale => {\n  // ...\n});\n\n`;\n\nexports[`logical.js 1`] = `\n(veryLongVeryLongVeryLong || e).map(tickets =>\n  TicketRecord.createFromSomeLongString());\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n(veryLongVeryLongVeryLong || e)\n  .map(tickets => TicketRecord.createFromSomeLongString());\n\n`;\n\nexports[`multiple-members.js 1`] = `\nif (testConfig.ENABLE_ONLINE_TESTS === \"true\") {\n  describe(\"POST /users/me/pet\", function() {\n    it(\"saves pet\", function() {\n      function assert(pet) {\n        expect(pet).to.have.property(\"OwnerAddress\").that.deep.equals({\n          AddressLine1: \"Alexanderstrasse\",\n          AddressLine2: \"\",\n          PostalCode: \"10999\",\n          Region: \"Berlin\",\n          City: \"Berlin\",\n          Country: \"DE\"\n        });\n      }\n    });\n  });\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nif (testConfig.ENABLE_ONLINE_TESTS === \"true\") {\n  describe(\"POST /users/me/pet\", function() {\n    it(\"saves pet\", function() {\n      function assert(pet) {\n        expect(pet).to.have.property(\"OwnerAddress\").that.deep.equals({\n          AddressLine1: \"Alexanderstrasse\",\n          AddressLine2: \"\",\n          PostalCode: \"10999\",\n          Region: \"Berlin\",\n          City: \"Berlin\",\n          Country: \"DE\"\n        });\n      }\n    });\n  });\n}\n\n`;\n\nexports[`square_0.js 1`] = `\nconst version = someLongString\n  .split('jest version =')\n  .pop()\n  .split(EOL)[0]\n  .trim();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst version = someLongString\n  .split(\"jest version =\")\n  .pop()\n  .split(EOL)[0]\n  .trim();\n\n`;\n\nexports[`test.js 1`] = `\nmethod().then(x => x)\n  [\"abc\"](x => x)\n  [abc](x => x);\n\n({}.a().b());\n({}).a().b();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nmethod().then(x => x)[\"abc\"](x => x)[abc](x => x);\n\n({}.a().b());\n({}.a().b());\n\n`;\n\nexports[`this.js 1`] = `\nconst sel = this.connections\n  .concat(this.activities.concat(this.operators))\n  .filter(x => x.selected);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst sel = this.connections\n  .concat(this.activities.concat(this.operators))\n  .filter(x => x.selected);\n\n`;\n"
  },
  {
    "path": "tests/method-chain/bracket_0.js",
    "content": "function a() {\n  function b() {\n\tqueryThenMutateDOM(\n      () => {\n        title = SomeThing.call(root, 'someLongStringThatPushesThisTextReallyFar')[0];\n      }\n    );\n  }\n}\n"
  },
  {
    "path": "tests/method-chain/break-last-call.js",
    "content": "export default store => {\n  return callApi(endpoint, schema).then(\n    response => next(actionWith({\n      response,\n      type: successType\n    })),\n    error => next(actionWith({\n      type: failureType,\n      error: error.message || 'Something bad happened'\n    }))\n  )\n}\n\nit('should group messages with same created time', () => {\n  expect(\n    groupMessages(messages).toJS(),\n  ).toEqual({\n    '11/01/2017 13:36': [\n      {message: 'test', messageType: 'SMS', status: 'Unknown', created: '11/01/2017 13:36'},\n      {message: 'test', messageType: 'Email', status: 'Unknown', created: '11/01/2017 13:36'},\n    ],\n    '09/01/2017 17:25': [\n      {message: 'te', messageType: 'SMS', status: 'Unknown', created: '09/01/2017 17:25'},\n      {message: 'te', messageType: 'Email', status: 'Unknown', created: '09/01/2017 17:25'},\n    ],\n    '11/01/2017 13:33': [\n      {message: 'test', messageType: 'SMS', status: 'Unknown', created: '11/01/2017 13:33'},\n      {message: 'test', messageType: 'Email', status: 'Unknown', created: '11/01/2017 13:33'},\n    ],\n    '11/01/2017 13:37': [\n      {message: 'test', messageType: 'SMS', status: 'Unknown', created: '11/01/2017 13:37'},\n      {message: 'test', messageType: 'Email', status: 'Unknown', created: '11/01/2017 13:37'},\n    ],\n  });\n});\n"
  },
  {
    "path": "tests/method-chain/break-last-member.js",
    "content": "SomeVeryLongUpperCaseConstant.someVeryLongCallExpression().some_very_long_member_expression\nweNeedToReachTheEightyCharacterLimitXXXXXXXXXXXXXXXXX.someNode\n  .childrenInAnArray[0];\nsuperSupersuperSupersuperSupersuperSupersuperSuperLong.exampleOfOrderOfGetterAndSetterReordered;\nsuperSupersuperSupersuperSupersuperSupersuperSuperLong.exampleOfOrderOfGetterAndSetterReordered[0];\n\nexpect(\n  findDOMNode(component.instance()).getElementsByClassName(styles.inner)[0].style.paddingRight\n).toBe('1000px');\n\nconst { course, conflicts = [], index, scheduleId, studentId, something } = a.this.props;\n\nconst { course, conflicts = [], index, scheduleId, studentId, something } = this.props;\n\nconst {\n  updated,\n  author: { identifier: ownerId },\n  location,\n  category: categories,\n} = rawAd.entry;\n"
  },
  {
    "path": "tests/method-chain/comment.js",
    "content": "function f() {\n  return observableFromSubscribeFunction()\n    // Debounce manually rather than using editor.onDidStopChanging so that the debounce time is\n    // configurable.\n    .debounceTime(debounceInterval);\n}\n\n_.a(a)\n  /* very very very very very very very long such that it is longer than 80 columns */\n  .a()\n\n_.a(\n  a\n)/* very very very very very very very long such that it is longer than 80 columns */\n.a();\n\n_.a(\n  a\n) /* very very very very very very very long such that it is longer than 80 columns */.a();\n\nSomething\n  // $FlowFixMe(>=0.41.0)\n  .getInstance(this.props.dao)\n  .getters()\n\n// Warm-up first\nmeasure()\n  .then(() => {\n    SomethingLong();\n  });\n\nmeasure() // Warm-up first\n  .then(() => {\n    SomethingLong();\n  });\n\nconst configModel = this.baseConfigurationService.getCache().consolidated\t\t// global/default values (do NOT modify)\n  .merge(this.cachedWorkspaceConfig);\n\nthis.doWriteConfiguration(target, value, options) // queue up writes to prevent race conditions\n  .then(() => null,\n  error => {\n    return options.donotNotifyError ? TPromise.wrapError(error) : this.onError(error, target, value);\n  });\n\nret = __DEV__ ?\n  // $FlowFixMe: this type differs according to the env\nvm.runInContext(source, ctx)\n: a\n\nthis.firebase.object(`/shops/${shopLocation.shop}`)\n  // keep distance info\n  .first((shop: ShopQueryResult, index: number, source: Observable<ShopQueryResult>): any => {\n      // add distance to result\n      const s = shop;\n      s.distance = shopLocation.distance;\n      return s;\n  });\n\nangular.module('AngularAppModule')\n  // Hello, I am comment.\n  .constant('API_URL', 'http://localhost:8080/api');\n"
  },
  {
    "path": "tests/method-chain/computed.js",
    "content": "nock(/test/)\n  .matchHeader('Accept', 'application/json')\n  [httpMethodNock(method)]('/foo')\n  .reply(200, {\n    foo: 'bar',\n  });\n"
  },
  {
    "path": "tests/method-chain/first_long.js",
    "content": "export default function theFunction(action$, store) {\n  return action$.ofType(THE_ACTION).switchMap(action => Observable\n    .webSocket({\n      url: THE_URL,\n      more: stuff(),\n      evenMore: stuff({\n        value1: true,\n        value2: false,\n        value3: false\n      })\n    })\n    .filter(data => theFilter(data))\n    .map(({ theType, ...data }) => theMap(theType, data))\n    .retryWhen(errors => errors));\n}\n\nfunction f() {\n  return this._getWorker(workerOptions)({\n    filePath,\n    hasteImplModulePath: this._options.hasteImplModulePath,\n  }).then(\n    metadata => {\n      // `1` for truthy values instead of `true` to save cache space.\n      fileMetadata[H.VISITED] = 1;\n      const metadataId = metadata.id;\n      const metadataModule = metadata.module;\n      if (metadataId && metadataModule) {\n        fileMetadata[H.ID] = metadataId;\n        setModule(metadataId, metadataModule);\n      }\n      fileMetadata[H.DEPENDENCIES] = metadata.dependencies || [];\n    }\n  );\n}\n"
  },
  {
    "path": "tests/method-chain/inline_merge.js",
    "content": "Object.keys(\n  availableLocales({\n    test: true\n  })\n)\n.forEach(locale => {\n  // ...\n});\n"
  },
  {
    "path": "tests/method-chain/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/method-chain/logical.js",
    "content": "(veryLongVeryLongVeryLong || e).map(tickets =>\n  TicketRecord.createFromSomeLongString());\n"
  },
  {
    "path": "tests/method-chain/multiple-members.js",
    "content": "if (testConfig.ENABLE_ONLINE_TESTS === \"true\") {\n  describe(\"POST /users/me/pet\", function() {\n    it(\"saves pet\", function() {\n      function assert(pet) {\n        expect(pet).to.have.property(\"OwnerAddress\").that.deep.equals({\n          AddressLine1: \"Alexanderstrasse\",\n          AddressLine2: \"\",\n          PostalCode: \"10999\",\n          Region: \"Berlin\",\n          City: \"Berlin\",\n          Country: \"DE\"\n        });\n      }\n    });\n  });\n}\n"
  },
  {
    "path": "tests/method-chain/square_0.js",
    "content": "const version = someLongString\n  .split('jest version =')\n  .pop()\n  .split(EOL)[0]\n  .trim();\n"
  },
  {
    "path": "tests/method-chain/test.js",
    "content": "method().then(x => x)\n  [\"abc\"](x => x)\n  [abc](x => x);\n\n({}.a().b());\n({}).a().b();\n"
  },
  {
    "path": "tests/method-chain/this.js",
    "content": "const sel = this.connections\n  .concat(this.activities.concat(this.operators))\n  .filter(x => x.selected);\n"
  },
  {
    "path": "tests/multiparser_comments/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`comments.js 1`] = `\ngraphql.experimental\\`\n  # required by createPaginationContainer\n  fragment MobileHomeDiffsSearchList_search on DifferentialRevisionSearch {\n    # required by createPaginationContainer\n    name\n  }\n\\`;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ngraphql.experimental\\`\n  # required by createPaginationContainer\n  fragment MobileHomeDiffsSearchList_search on DifferentialRevisionSearch {\n    # required by createPaginationContainer\n    name\n  }\n\\`;\n\n`;\n"
  },
  {
    "path": "tests/multiparser_comments/comments.js",
    "content": "graphql.experimental`\n  # required by createPaginationContainer\n  fragment MobileHomeDiffsSearchList_search on DifferentialRevisionSearch {\n    # required by createPaginationContainer\n    name\n  }\n`;\n"
  },
  {
    "path": "tests/multiparser_comments/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/multiparser_html_css/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`html-with-css-style.html 1`] = `\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <style>\n    blink{\n\n        display:  none ;}\n    </style>\n</head>\n<body></body>\n</html>\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n<!DOCTYPE html>\n\n\n<html lang=\"en\">\n\n\n<head>\n\n  <style>\n    blink {\n      display: none;\n    }\n  </style>\n</head>\n\n<body>\n</body>\n</html>\n`;\n"
  },
  {
    "path": "tests/multiparser_html_css/html-with-css-style.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <style>\n    blink{\n\n        display:  none ;}\n    </style>\n</head>\n<body></body>\n</html>\n\n"
  },
  {
    "path": "tests/multiparser_html_css/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"parse5\" });\n"
  },
  {
    "path": "tests/multiparser_html_js/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`html-with-js-script.html 1`] = `\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <script type=\"text/javascript\">\n    hello( 'world'\n    )\n    </script>\n</head>\n<body></body>\n</html>\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n<!DOCTYPE html>\n\n\n<html lang=\"en\">\n\n\n<head>\n\n  <script type=\"text/javascript\">\n    hello(\"world\");\n\n  </script>\n</head>\n\n<body>\n</body>\n</html>\n`;\n"
  },
  {
    "path": "tests/multiparser_html_js/html-with-js-script.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <script type=\"text/javascript\">\n    hello( 'world'\n    )\n    </script>\n</head>\n<body></body>\n</html>\n\n"
  },
  {
    "path": "tests/multiparser_html_js/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"parse5\" });\n"
  },
  {
    "path": "tests/multiparser_html_ts/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`html-with-ts-script.html 1`] = `\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <script lang=\"ts\">\n    type X = { [\n        K in keyof Y\n    ]: Partial < K >  } ;\n\n    class   Foo< T >{\n\n        constructor ( private foo: keyof Apple ){\n\n\n        }\n    }\n    </script>\n</head>\n<body></body>\n</html>\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n<!DOCTYPE html>\n\n\n<html lang=\"en\">\n\n\n<head>\n\n  <script lang=\"ts\">\n    type X = { [K in keyof Y]: Partial<K> };\n\n    class Foo<T> {\n      constructor(private foo: keyof Apple) {}\n    }\n\n  </script>\n</head>\n\n<body>\n</body>\n</html>\n`;\n"
  },
  {
    "path": "tests/multiparser_html_ts/html-with-ts-script.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <script lang=\"ts\">\n    type X = { [\n        K in keyof Y\n    ]: Partial < K >  } ;\n\n    class   Foo< T >{\n\n        constructor ( private foo: keyof Apple ){\n\n\n        }\n    }\n    </script>\n</head>\n<body></body>\n</html>\n\n"
  },
  {
    "path": "tests/multiparser_html_ts/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"parse5\" });\n"
  },
  {
    "path": "tests/multiparser_js_css/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`styled-components.js 1`] = `\nconst Button = styled.button\\`\n\t  color:   palevioletred ;\n\n\tfont-size : 1em   ;\n\\`;\n\nconst TomatoButton = Button.extend\\`\n\tcolor  : tomato  ;\n\nborder-color : tomato\n    ;\n\n\\`;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst Button = styled.button\\`\n  color: palevioletred;\n\n  font-size: 1em;\n\\`;\n\nconst TomatoButton = Button.extend\\`\n  color: tomato;\n\n  border-color: tomato;\n\\`;\n\n`;\n"
  },
  {
    "path": "tests/multiparser_js_css/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"babylon\" });\n"
  },
  {
    "path": "tests/multiparser_js_css/styled-components.js",
    "content": "const Button = styled.button`\n\t  color:   palevioletred ;\n\n\tfont-size : 1em   ;\n`;\n\nconst TomatoButton = Button.extend`\n\tcolor  : tomato  ;\n\nborder-color : tomato\n    ;\n\n`;\n"
  },
  {
    "path": "tests/multiparser_js_graphql/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`graphql-tag.js 1`] = `\nimport gql from \"graphql-tag\";\n\nconst query = gql\\`\n      {\n    user(   id :   5  )  {\n      firstName\n\n      lastName\n    }\n  }\n\\`;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport gql from \"graphql-tag\";\n\nconst query = gql\\`\n  {\n    user(id: 5) {\n      firstName\n      lastName\n    }\n  }\n\\`;\n\n`;\n\nexports[`react-relay.js 1`] = `\nconst { graphql } = require(\"react-relay\");\n\ngraphql\\`\n mutation     MarkReadNotificationMutation(\n    $input\n    : MarkReadNotificationData!\n  )\n{ markReadNotification(data: $input ) { notification {seenState} } }\n\\`;\n\ngraphql.experimental\\`\n mutation     MarkReadNotificationMutation(\n    $input\n    : MarkReadNotificationData!\n  )\n{ markReadNotification(data: $input ) { notification {seenState} } }\n\\`;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst { graphql } = require(\"react-relay\");\n\ngraphql\\`\n  mutation MarkReadNotificationMutation($input: MarkReadNotificationData!) {\n    markReadNotification(data: $input) {\n      notification {\n        seenState\n      }\n    }\n  }\n\\`;\n\ngraphql.experimental\\`\n  mutation MarkReadNotificationMutation($input: MarkReadNotificationData!) {\n    markReadNotification(data: $input) {\n      notification {\n        seenState\n      }\n    }\n  }\n\\`;\n\n`;\n"
  },
  {
    "path": "tests/multiparser_js_graphql/graphql-tag.js",
    "content": "import gql from \"graphql-tag\";\n\nconst query = gql`\n      {\n    user(   id :   5  )  {\n      firstName\n\n      lastName\n    }\n  }\n`;\n"
  },
  {
    "path": "tests/multiparser_js_graphql/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"babylon\" });\n"
  },
  {
    "path": "tests/multiparser_js_graphql/react-relay.js",
    "content": "const { graphql } = require(\"react-relay\");\n\ngraphql`\n mutation     MarkReadNotificationMutation(\n    $input\n    : MarkReadNotificationData!\n  )\n{ markReadNotification(data: $input ) { notification {seenState} } }\n`;\n\ngraphql.experimental`\n mutation     MarkReadNotificationMutation(\n    $input\n    : MarkReadNotificationData!\n  )\n{ markReadNotification(data: $input ) { notification {seenState} } }\n`;\n"
  },
  {
    "path": "tests/multiparser_text/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`text.js 1`] = `\na = {\n  viewer: graphql\\`\n    fragment x on Viewer {\n      y(named: [\n        \"projects_feedback_ids\" # PROJECTS_FEEDBACK_IDS\n      ]) {\n        name\n      }\n    }\n  \\`,\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\na = {\n  viewer: graphql\\`\n    fragment x on Viewer {\n      y(\n        named: [\n          \"projects_feedback_ids\" # PROJECTS_FEEDBACK_IDS\n        ]\n      ) {\n        name\n      }\n    }\n  \\`\n};\n\n`;\n"
  },
  {
    "path": "tests/multiparser_text/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/multiparser_text/text.js",
    "content": "a = {\n  viewer: graphql`\n    fragment x on Viewer {\n      y(named: [\n        \"projects_feedback_ids\" # PROJECTS_FEEDBACK_IDS\n      ]) {\n        name\n      }\n    }\n  `,\n}\n"
  },
  {
    "path": "tests/multiparser_vue/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`template-bind.vue 1`] = `\n<template>\n    <div v-bind:id=\" 'list-'   +  id \"></div>\n    <div v-bind:id=\"  rawId | formatId \"></div>\n    <div v-bind:id=\" ok ? 'YES' : 'NO' \"></div>\n    <button @click=\" foo ( arg, 'string' ) \"></button>\n</template>\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n\n<template>\n\n  <div v-bind:id=\"'list-' + id\" />\n\n  <div v-bind:id=\"rawId | formatId\" />\n\n  <div v-bind:id=\"ok ? 'YES' : 'NO'\" />\n\n  <button @click=\"foo(arg, 'string')\" />\n\n</template>\n`;\n\nexports[`template-class.vue 1`] = `\n<template>\n  <h2\n    class=\"title\"\n    :class=\"{ 'issue-realtime-pre-pulse': preAnimation,\n 'issue-realtime-trigger-pulse': pulseAnimation}\"\n    v-html=\"titleHtml\"\n  >\n  </h2>\n</template>\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n\n<template>\n\n\n  <h2 class=\"title\"\n    :class=\"{\n      'issue-realtime-pre-pulse': preAnimation,\n      'issue-realtime-trigger-pulse': pulseAnimation\n    }\"\n    v-html=\"titleHtml\">\n  </h2>\n</template>\n`;\n\nexports[`vue-component.vue 1`] = `\n<template >\n  <h1 >{{greeting}}     world</h1  >\n</template >\n\n<script>\nmodule  .  exports  =\n{data : function () {return {\n\tgreeting: \"Hello\"\n}}\n}\n</script>\n\n<style   scoped >\np { font-size : 2em ; text-align : center ; }\n\n  </style >\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n\n<template>\n\n  <h1>{{greeting}} world</h1>\n</template>\n\n<script>\n  module.exports = {\n    data: function() {\n      return {\n        greeting: \"Hello\"\n      };\n    }\n  };\n\n</script>\n\n<style scoped>\n  p {\n    font-size: 2em;\n    text-align: center;\n  }\n</style>\n`;\n"
  },
  {
    "path": "tests/multiparser_vue/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"parse5\" });\n"
  },
  {
    "path": "tests/multiparser_vue/template-bind.vue",
    "content": "<template>\n    <div v-bind:id=\" 'list-'   +  id \"></div>\n    <div v-bind:id=\"  rawId | formatId \"></div>\n    <div v-bind:id=\" ok ? 'YES' : 'NO' \"></div>\n    <button @click=\" foo ( arg, 'string' ) \"></button>\n</template>\n\n"
  },
  {
    "path": "tests/multiparser_vue/template-class.vue",
    "content": "<template>\n  <h2\n    class=\"title\"\n    :class=\"{ 'issue-realtime-pre-pulse': preAnimation,\n 'issue-realtime-trigger-pulse': pulseAnimation}\"\n    v-html=\"titleHtml\"\n  >\n  </h2>\n</template>\n"
  },
  {
    "path": "tests/multiparser_vue/vue-component.vue",
    "content": "<template >\n  <h1 >{{greeting}}     world</h1  >\n</template >\n\n<script>\nmodule  .  exports  =\n{data : function () {return {\n\tgreeting: \"Hello\"\n}}\n}\n</script>\n\n<style   scoped >\np { font-size : 2em ; text-align : center ; }\n\n  </style >\n"
  },
  {
    "path": "tests/new_expression/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`call.js 1`] = `\nnew (factory())()\nnew factory()()\n\nnew (factory())(factory())\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nnew (factory())();\nnew factory()();\n\nnew (factory())(factory());\n\n`;\n\nexports[`new_expression.js 1`] = `\nnew (memoize.Cache || MapCache)\nnew (typeof this == \"function\" ? this : Dict())\nnew (createObj()).prop(a());\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nnew (memoize.Cache || MapCache)();\nnew (typeof this == \"function\" ? this : Dict())();\nnew (createObj()).prop(a());\n\n`;\n"
  },
  {
    "path": "tests/new_expression/call.js",
    "content": "new (factory())()\nnew factory()()\n\nnew (factory())(factory())\n"
  },
  {
    "path": "tests/new_expression/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/new_expression/new_expression.js",
    "content": "new (memoize.Cache || MapCache)\nnew (typeof this == \"function\" ? this : Dict())\nnew (createObj()).prop(a());\n"
  },
  {
    "path": "tests/newline/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`backslash_2028.js 1`] = `\n1;/*a*///b /*c*/2\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n1; /*a*/ //b /*c*/2\n\n`;\n\nexports[`backslash_2029.js 1`] = `\n1;/*a*///b /*c*/2\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n1; /*a*/ //b /*c*/2\n\n`;\n"
  },
  {
    "path": "tests/newline/backslash_2028.js",
    "content": "1;/*a*///b /*c*/2\n"
  },
  {
    "path": "tests/newline/backslash_2029.js",
    "content": "1;/*a*///b /*c*/2\n"
  },
  {
    "path": "tests/newline/jsfmt.spec.js",
    "content": "run_spec(__dirname /*, null, [\"typescript\"]*/);\n"
  },
  {
    "path": "tests/no-semi/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`comments.js 1`] = `\nlet error = new Error(response.statusText);\n// comment\n(error: any).response = response\n\nx;\n\n/* comment */ (error: any).response = response\n\nx;\n\n(error: any).response = response; /* comment */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nlet error = new Error(response.statusText);\n// comment\n(error: any).response = response;\n\nx;\n\n/* comment */ (error: any).response = response;\n\nx;\n\n(error: any).response = response; /* comment */\n\n`;\n\nexports[`comments.js 2`] = `\nlet error = new Error(response.statusText);\n// comment\n(error: any).response = response\n\nx;\n\n/* comment */ (error: any).response = response\n\nx;\n\n(error: any).response = response; /* comment */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nlet error = new Error(response.statusText)\n// comment\n;(error: any).response = response\n\nx\n\n/* comment */ ;(error: any).response = response\n\nx\n\n;(error: any).response = response /* comment */\n\n`;\n\nexports[`comments.js 3`] = `\nlet error = new Error(response.statusText);\n// comment\n(error: any).response = response\n\nx;\n\n/* comment */ (error: any).response = response\n\nx;\n\n(error: any).response = response; /* comment */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nlet error = new Error(response.statusText)\n// comment\n;(error: any).response = response\n\nx\n\n/* comment */ ;(error: any).response = response\n\nx\n\n;(error: any).response = response /* comment */\n\n`;\n\nexports[`issue2006.js 1`] = `\nswitch (n) {\n  case 11:\n    var c = a.e;\n    (i.a += Ga(c.e)), F(i, c.i, 0);\n}\n\nvar c = a.e;\n(i.a += Ga(c.e)), F(i, c.i, 0);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nswitch (n) {\n  case 11:\n    var c = a.e;\n    (i.a += Ga(c.e)), F(i, c.i, 0);\n}\n\nvar c = a.e;\n(i.a += Ga(c.e)), F(i, c.i, 0);\n\n`;\n\nexports[`issue2006.js 2`] = `\nswitch (n) {\n  case 11:\n    var c = a.e;\n    (i.a += Ga(c.e)), F(i, c.i, 0);\n}\n\nvar c = a.e;\n(i.a += Ga(c.e)), F(i, c.i, 0);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nswitch (n) {\n  case 11:\n    var c = a.e\n    ;(i.a += Ga(c.e)), F(i, c.i, 0)\n}\n\nvar c = a.e\n;(i.a += Ga(c.e)), F(i, c.i, 0)\n\n`;\n\nexports[`issue2006.js 3`] = `\nswitch (n) {\n  case 11:\n    var c = a.e;\n    (i.a += Ga(c.e)), F(i, c.i, 0);\n}\n\nvar c = a.e;\n(i.a += Ga(c.e)), F(i, c.i, 0);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nswitch (n) {\n  case 11:\n    var c = a.e\n    ;(i.a += Ga(c.e)), F(i, c.i, 0)\n}\n\nvar c = a.e\n;(i.a += Ga(c.e)), F(i, c.i, 0)\n\n`;\n\nexports[`no-semi.js 1`] = `\n\n// with preexisting semi\n\nx; [1, 2, 3].forEach(fn)\nx; [a, b, ...c] = [1, 2]\nx; /r/i.test('r')\nx; +1\nx; - 1\nx; ('h' + 'i').repeat(10)\nx; (1, 2)\nx; (() => {})()\nx; ({ a: 1 }).entries()\nx; ({ a: 1 }).entries()\nx; <Hello />\nx; \\`string\\`\nx; (x, y) => x\n\n// doesn't have to be preceded by a semicolon\n\nclass X {} [1, 2, 3].forEach(fn)\n\n// TODO: upgrade parser\n// class A {\n//   async; // The semicolon is *not* necessary\n//   x(){}\n// }\n// class B {\n//   static; // The semicolon *is* necessary\n//   x(){}\n// }\n// class C {\n//   get; // The semicolon *is* necessary\n//   x(){}\n// }\n// class C {\n//   set; // The semicolon *is* necessary\n//   x(){}\n// }\n\n\n// don't semicolon if it doesn't start statement\n\nif (true) (() => {})()\n\nclass A {\n  a = 0;\n  [b](){}\n\n  c = 0;\n  *d(){}\n\n  e = 0;\n  [f] = 0\n\n  // none of the semicolons above this comment can be omitted.\n  // none of the semicolons below this comment are necessary.\n\n  q() {};\n  [h](){}\n\n  p() {};\n  *i(){}\n\n  a = 1;\n  get ['y']() {}\n\n  a = 1;\n  static ['y']() {}\n\n  a = 1;\n  set ['z'](z) {}\n\n  a = 1;\n  async ['a']() {}\n\n  a = 1;\n  async *g() {}\n\n  a = 0;\n  b = 1;\n}\n\n// being first/last shouldn't break things\nclass G {\n  x = 1\n}\nclass G {\n  x() {}\n}\nclass G {\n  *x() {}\n}\nclass G {\n  [x] = 1\n}\n\n// check indentation\n\nif (true) {\n  x; (() => {})()\n}\n\n// flow\n\n(x: void);\n(y: void)\n\n// check statement clauses\n\ndo break; while (false)\nif (true) do break; while (false)\n\nif (true) 1; else 2\nfor (;;) ;\nfor (x of y) ;\n\ndebugger\n\n// check that it doesn't break non-ASI\n\n1\n- 1\n\n1\n+ 1\n\n1\n/ 1\n\narr\n[0]\n\nfn\n(x)\n\n!1\n\n1\n< 1\n\ntag\n\\`string\\`\n\nx; x => x\n\nx; (a || b).c++\n\nx; ++(a || b).c\n\nwhile (false)\n  (function(){}())\n\naReallyLongLine012345678901234567890123456789012345678901234567890123456789 *\n  (b + c)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// with preexisting semi\n\nx;\n[1, 2, 3].forEach(fn);\nx;\n[a, b, ...c] = [1, 2];\nx;\n/r/i.test(\"r\");\nx;\n+1;\nx;\n-1;\nx;\n(\"h\" + \"i\").repeat(10);\nx;\n1, 2;\nx;\n(() => {})();\nx;\n({ a: 1 }.entries());\nx;\n({ a: 1 }.entries());\nx;\n<Hello />;\nx;\n\\`string\\`;\nx;\n(x, y) => x;\n\n// doesn't have to be preceded by a semicolon\n\nclass X {}\n[1, 2, 3].forEach(fn);\n\n// TODO: upgrade parser\n// class A {\n//   async; // The semicolon is *not* necessary\n//   x(){}\n// }\n// class B {\n//   static; // The semicolon *is* necessary\n//   x(){}\n// }\n// class C {\n//   get; // The semicolon *is* necessary\n//   x(){}\n// }\n// class C {\n//   set; // The semicolon *is* necessary\n//   x(){}\n// }\n\n// don't semicolon if it doesn't start statement\n\nif (true) (() => {})();\n\nclass A {\n  a = 0;\n  [b]() {}\n\n  c = 0;\n  *d() {}\n\n  e = 0;\n  [f] = 0;\n\n  // none of the semicolons above this comment can be omitted.\n  // none of the semicolons below this comment are necessary.\n\n  q() {}\n  [h]() {}\n\n  p() {}\n  *i() {}\n\n  a = 1;\n  get [\"y\"]() {}\n\n  a = 1;\n  static [\"y\"]() {}\n\n  a = 1;\n  set [\"z\"](z) {}\n\n  a = 1;\n  async [\"a\"]() {}\n\n  a = 1;\n  async *g() {}\n\n  a = 0;\n  b = 1;\n}\n\n// being first/last shouldn't break things\nclass G {\n  x = 1;\n}\nclass G {\n  x() {}\n}\nclass G {\n  *x() {}\n}\nclass G {\n  [x] = 1;\n}\n\n// check indentation\n\nif (true) {\n  x;\n  (() => {})();\n}\n\n// flow\n\n(x: void);\n(y: void);\n\n// check statement clauses\n\ndo break;\nwhile (false);\nif (true)\n  do break;\n  while (false);\n\nif (true) 1;\nelse 2;\nfor (;;);\nfor (x of y);\n\ndebugger;\n\n// check that it doesn't break non-ASI\n\n1 - 1;\n\n1 + 1;\n\n1 / 1;\n\narr[0];\n\nfn(x);\n\n!1;\n\n1 < 1;\n\ntag\\`string\\`;\n\nx;\nx => x;\n\nx;\n(a || b).c++;\n\nx;\n++(a || b).c;\n\nwhile (false) (function() {})();\n\naReallyLongLine012345678901234567890123456789012345678901234567890123456789 *\n  (b + c);\n\n`;\n\nexports[`no-semi.js 2`] = `\n\n// with preexisting semi\n\nx; [1, 2, 3].forEach(fn)\nx; [a, b, ...c] = [1, 2]\nx; /r/i.test('r')\nx; +1\nx; - 1\nx; ('h' + 'i').repeat(10)\nx; (1, 2)\nx; (() => {})()\nx; ({ a: 1 }).entries()\nx; ({ a: 1 }).entries()\nx; <Hello />\nx; \\`string\\`\nx; (x, y) => x\n\n// doesn't have to be preceded by a semicolon\n\nclass X {} [1, 2, 3].forEach(fn)\n\n// TODO: upgrade parser\n// class A {\n//   async; // The semicolon is *not* necessary\n//   x(){}\n// }\n// class B {\n//   static; // The semicolon *is* necessary\n//   x(){}\n// }\n// class C {\n//   get; // The semicolon *is* necessary\n//   x(){}\n// }\n// class C {\n//   set; // The semicolon *is* necessary\n//   x(){}\n// }\n\n\n// don't semicolon if it doesn't start statement\n\nif (true) (() => {})()\n\nclass A {\n  a = 0;\n  [b](){}\n\n  c = 0;\n  *d(){}\n\n  e = 0;\n  [f] = 0\n\n  // none of the semicolons above this comment can be omitted.\n  // none of the semicolons below this comment are necessary.\n\n  q() {};\n  [h](){}\n\n  p() {};\n  *i(){}\n\n  a = 1;\n  get ['y']() {}\n\n  a = 1;\n  static ['y']() {}\n\n  a = 1;\n  set ['z'](z) {}\n\n  a = 1;\n  async ['a']() {}\n\n  a = 1;\n  async *g() {}\n\n  a = 0;\n  b = 1;\n}\n\n// being first/last shouldn't break things\nclass G {\n  x = 1\n}\nclass G {\n  x() {}\n}\nclass G {\n  *x() {}\n}\nclass G {\n  [x] = 1\n}\n\n// check indentation\n\nif (true) {\n  x; (() => {})()\n}\n\n// flow\n\n(x: void);\n(y: void)\n\n// check statement clauses\n\ndo break; while (false)\nif (true) do break; while (false)\n\nif (true) 1; else 2\nfor (;;) ;\nfor (x of y) ;\n\ndebugger\n\n// check that it doesn't break non-ASI\n\n1\n- 1\n\n1\n+ 1\n\n1\n/ 1\n\narr\n[0]\n\nfn\n(x)\n\n!1\n\n1\n< 1\n\ntag\n\\`string\\`\n\nx; x => x\n\nx; (a || b).c++\n\nx; ++(a || b).c\n\nwhile (false)\n  (function(){}())\n\naReallyLongLine012345678901234567890123456789012345678901234567890123456789 *\n  (b + c)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// with preexisting semi\n\nx\n;[1, 2, 3].forEach(fn)\nx\n;[a, b, ...c] = [1, 2]\nx\n;/r/i.test(\"r\")\nx\n;+1\nx\n;-1\nx\n;(\"h\" + \"i\").repeat(10)\nx\n1, 2\nx\n;(() => {})()\nx\n;({ a: 1 }.entries())\nx\n;({ a: 1 }.entries())\nx\n;<Hello />\nx\n;\\`string\\`\nx\n;(x, y) => x\n\n// doesn't have to be preceded by a semicolon\n\nclass X {}\n;[1, 2, 3].forEach(fn)\n\n// TODO: upgrade parser\n// class A {\n//   async; // The semicolon is *not* necessary\n//   x(){}\n// }\n// class B {\n//   static; // The semicolon *is* necessary\n//   x(){}\n// }\n// class C {\n//   get; // The semicolon *is* necessary\n//   x(){}\n// }\n// class C {\n//   set; // The semicolon *is* necessary\n//   x(){}\n// }\n\n// don't semicolon if it doesn't start statement\n\nif (true) (() => {})()\n\nclass A {\n  a = 0;\n  [b]() {}\n\n  c = 0;\n  *d() {}\n\n  e = 0;\n  [f] = 0\n\n  // none of the semicolons above this comment can be omitted.\n  // none of the semicolons below this comment are necessary.\n\n  q() {}\n  [h]() {}\n\n  p() {}\n  *i() {}\n\n  a = 1\n  get [\"y\"]() {}\n\n  a = 1\n  static [\"y\"]() {}\n\n  a = 1\n  set [\"z\"](z) {}\n\n  a = 1\n  async [\"a\"]() {}\n\n  a = 1\n  async *g() {}\n\n  a = 0\n  b = 1\n}\n\n// being first/last shouldn't break things\nclass G {\n  x = 1\n}\nclass G {\n  x() {}\n}\nclass G {\n  *x() {}\n}\nclass G {\n  [x] = 1\n}\n\n// check indentation\n\nif (true) {\n  x\n  ;(() => {})()\n}\n\n// flow\n\n;(x: void)\n;(y: void)\n\n// check statement clauses\n\ndo break\nwhile (false)\nif (true)\n  do break\n  while (false)\n\nif (true) 1\nelse 2\nfor (;;);\nfor (x of y);\n\ndebugger\n\n// check that it doesn't break non-ASI\n\n1 - 1\n\n1 + 1\n\n1 / 1\n\narr[0]\n\nfn(x)\n\n!1\n\n1 < 1\n\ntag\\`string\\`\n\nx\nx => x\n\nx\n;(a || b).c++\n\nx\n++(a || b).c\n\nwhile (false) (function() {})()\n\naReallyLongLine012345678901234567890123456789012345678901234567890123456789 *\n  (b + c)\n\n`;\n\nexports[`no-semi.js 3`] = `\n\n// with preexisting semi\n\nx; [1, 2, 3].forEach(fn)\nx; [a, b, ...c] = [1, 2]\nx; /r/i.test('r')\nx; +1\nx; - 1\nx; ('h' + 'i').repeat(10)\nx; (1, 2)\nx; (() => {})()\nx; ({ a: 1 }).entries()\nx; ({ a: 1 }).entries()\nx; <Hello />\nx; \\`string\\`\nx; (x, y) => x\n\n// doesn't have to be preceded by a semicolon\n\nclass X {} [1, 2, 3].forEach(fn)\n\n// TODO: upgrade parser\n// class A {\n//   async; // The semicolon is *not* necessary\n//   x(){}\n// }\n// class B {\n//   static; // The semicolon *is* necessary\n//   x(){}\n// }\n// class C {\n//   get; // The semicolon *is* necessary\n//   x(){}\n// }\n// class C {\n//   set; // The semicolon *is* necessary\n//   x(){}\n// }\n\n\n// don't semicolon if it doesn't start statement\n\nif (true) (() => {})()\n\nclass A {\n  a = 0;\n  [b](){}\n\n  c = 0;\n  *d(){}\n\n  e = 0;\n  [f] = 0\n\n  // none of the semicolons above this comment can be omitted.\n  // none of the semicolons below this comment are necessary.\n\n  q() {};\n  [h](){}\n\n  p() {};\n  *i(){}\n\n  a = 1;\n  get ['y']() {}\n\n  a = 1;\n  static ['y']() {}\n\n  a = 1;\n  set ['z'](z) {}\n\n  a = 1;\n  async ['a']() {}\n\n  a = 1;\n  async *g() {}\n\n  a = 0;\n  b = 1;\n}\n\n// being first/last shouldn't break things\nclass G {\n  x = 1\n}\nclass G {\n  x() {}\n}\nclass G {\n  *x() {}\n}\nclass G {\n  [x] = 1\n}\n\n// check indentation\n\nif (true) {\n  x; (() => {})()\n}\n\n// flow\n\n(x: void);\n(y: void)\n\n// check statement clauses\n\ndo break; while (false)\nif (true) do break; while (false)\n\nif (true) 1; else 2\nfor (;;) ;\nfor (x of y) ;\n\ndebugger\n\n// check that it doesn't break non-ASI\n\n1\n- 1\n\n1\n+ 1\n\n1\n/ 1\n\narr\n[0]\n\nfn\n(x)\n\n!1\n\n1\n< 1\n\ntag\n\\`string\\`\n\nx; x => x\n\nx; (a || b).c++\n\nx; ++(a || b).c\n\nwhile (false)\n  (function(){}())\n\naReallyLongLine012345678901234567890123456789012345678901234567890123456789 *\n  (b + c)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// with preexisting semi\n\nx\n;[1, 2, 3].forEach(fn)\nx\n;[a, b, ...c] = [1, 2]\nx\n;/r/i.test(\"r\")\nx\n;+1\nx\n;-1\nx\n;(\"h\" + \"i\").repeat(10)\nx\n1, 2\nx\n;(() => {})()\nx\n;({ a: 1 }.entries())\nx\n;({ a: 1 }.entries())\nx\n;<Hello />\nx\n;\\`string\\`\nx\n;(x, y) => x\n\n// doesn't have to be preceded by a semicolon\n\nclass X {}\n;[1, 2, 3].forEach(fn)\n\n// TODO: upgrade parser\n// class A {\n//   async; // The semicolon is *not* necessary\n//   x(){}\n// }\n// class B {\n//   static; // The semicolon *is* necessary\n//   x(){}\n// }\n// class C {\n//   get; // The semicolon *is* necessary\n//   x(){}\n// }\n// class C {\n//   set; // The semicolon *is* necessary\n//   x(){}\n// }\n\n// don't semicolon if it doesn't start statement\n\nif (true) (() => {})()\n\nclass A {\n  a = 0;\n  [b]() {}\n\n  c = 0;\n  *d() {}\n\n  e = 0;\n  [f] = 0\n\n  // none of the semicolons above this comment can be omitted.\n  // none of the semicolons below this comment are necessary.\n\n  q() {}\n  [h]() {}\n\n  p() {}\n  *i() {}\n\n  a = 1\n  get [\"y\"]() {}\n\n  a = 1\n  static [\"y\"]() {}\n\n  a = 1\n  set [\"z\"](z) {}\n\n  a = 1\n  async [\"a\"]() {}\n\n  a = 1\n  async *g() {}\n\n  a = 0\n  b = 1\n}\n\n// being first/last shouldn't break things\nclass G {\n  x = 1\n}\nclass G {\n  x() {}\n}\nclass G {\n  *x() {}\n}\nclass G {\n  [x] = 1\n}\n\n// check indentation\n\nif (true) {\n  x\n  ;(() => {})()\n}\n\n// flow\n\n;(x: void)\n;(y: void)\n\n// check statement clauses\n\ndo break\nwhile (false)\nif (true)\n  do break\n  while (false)\n\nif (true) 1\nelse 2\nfor (;;);\nfor (x of y);\n\ndebugger\n\n// check that it doesn't break non-ASI\n\n1 - 1\n\n1 + 1\n\n1 / 1\n\narr[0]\n\nfn(x)\n\n!1\n\n1 < 1\n\ntag\\`string\\`\n\nx\nx => x\n\nx\n;(a || b).c++\n\nx\n++(a || b).c\n\nwhile (false) (function() {})()\n\naReallyLongLine012345678901234567890123456789012345678901234567890123456789 *\n  (b + c)\n\n`;\n"
  },
  {
    "path": "tests/no-semi/comments.js",
    "content": "let error = new Error(response.statusText);\n// comment\n(error: any).response = response\n\nx;\n\n/* comment */ (error: any).response = response\n\nx;\n\n(error: any).response = response; /* comment */\n"
  },
  {
    "path": "tests/no-semi/issue2006.js",
    "content": "switch (n) {\n  case 11:\n    var c = a.e;\n    (i.a += Ga(c.e)), F(i, c.i, 0);\n}\n\nvar c = a.e;\n(i.a += Ga(c.e)), F(i, c.i, 0);\n"
  },
  {
    "path": "tests/no-semi/jsfmt.spec.js",
    "content": "run_spec(__dirname);\nrun_spec(__dirname, { semi: false, parser: \"flow\" });\nrun_spec(__dirname, { semi: false, parser: \"babylon\" });\n"
  },
  {
    "path": "tests/no-semi/no-semi.js",
    "content": "\n// with preexisting semi\n\nx; [1, 2, 3].forEach(fn)\nx; [a, b, ...c] = [1, 2]\nx; /r/i.test('r')\nx; +1\nx; - 1\nx; ('h' + 'i').repeat(10)\nx; (1, 2)\nx; (() => {})()\nx; ({ a: 1 }).entries()\nx; ({ a: 1 }).entries()\nx; <Hello />\nx; `string`\nx; (x, y) => x\n\n// doesn't have to be preceded by a semicolon\n\nclass X {} [1, 2, 3].forEach(fn)\n\n// TODO: upgrade parser\n// class A {\n//   async; // The semicolon is *not* necessary\n//   x(){}\n// }\n// class B {\n//   static; // The semicolon *is* necessary\n//   x(){}\n// }\n// class C {\n//   get; // The semicolon *is* necessary\n//   x(){}\n// }\n// class C {\n//   set; // The semicolon *is* necessary\n//   x(){}\n// }\n\n\n// don't semicolon if it doesn't start statement\n\nif (true) (() => {})()\n\nclass A {\n  a = 0;\n  [b](){}\n\n  c = 0;\n  *d(){}\n\n  e = 0;\n  [f] = 0\n\n  // none of the semicolons above this comment can be omitted.\n  // none of the semicolons below this comment are necessary.\n\n  q() {};\n  [h](){}\n\n  p() {};\n  *i(){}\n\n  a = 1;\n  get ['y']() {}\n\n  a = 1;\n  static ['y']() {}\n\n  a = 1;\n  set ['z'](z) {}\n\n  a = 1;\n  async ['a']() {}\n\n  a = 1;\n  async *g() {}\n\n  a = 0;\n  b = 1;\n}\n\n// being first/last shouldn't break things\nclass G {\n  x = 1\n}\nclass G {\n  x() {}\n}\nclass G {\n  *x() {}\n}\nclass G {\n  [x] = 1\n}\n\n// check indentation\n\nif (true) {\n  x; (() => {})()\n}\n\n// flow\n\n(x: void);\n(y: void)\n\n// check statement clauses\n\ndo break; while (false)\nif (true) do break; while (false)\n\nif (true) 1; else 2\nfor (;;) ;\nfor (x of y) ;\n\ndebugger\n\n// check that it doesn't break non-ASI\n\n1\n- 1\n\n1\n+ 1\n\n1\n/ 1\n\narr\n[0]\n\nfn\n(x)\n\n!1\n\n1\n< 1\n\ntag\n`string`\n\nx; x => x\n\nx; (a || b).c++\n\nx; ++(a || b).c\n\nwhile (false)\n  (function(){}())\n\naReallyLongLine012345678901234567890123456789012345678901234567890123456789 *\n  (b + c)\n"
  },
  {
    "path": "tests/no-semi-babylon-extensions/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`no-semi.js 1`] = `\na\n;::b.c\n\nclass A {\n  a = b;\n  in\n  c\n\n  a = b;\n  instanceof(){}\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\na;\n::b.c;\n\nclass A {\n  a = b;\n  in;\n  c;\n\n  a = b;\n  instanceof() {}\n}\n\n`;\n\nexports[`no-semi.js 2`] = `\na\n;::b.c\n\nclass A {\n  a = b;\n  in\n  c\n\n  a = b;\n  instanceof(){}\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\na\n;::b.c\n\nclass A {\n  a = b;\n  in\n  c\n\n  a = b;\n  instanceof() {}\n}\n\n`;\n"
  },
  {
    "path": "tests/no-semi-babylon-extensions/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"babylon\" });\nrun_spec(__dirname, { semi: false, parser: \"babylon\" });\n"
  },
  {
    "path": "tests/no-semi-babylon-extensions/no-semi.js",
    "content": "a\n;::b.c\n\nclass A {\n  a = b;\n  in\n  c\n\n  a = b;\n  instanceof(){}\n}\n"
  },
  {
    "path": "tests/non-strict/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`argument-name-clash.js 1`] = `\nfunction f(a,a){return a}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction f(a, a) {\n  return a;\n}\n\n`;\n\nexports[`keywords.js 1`] = `\nvar package = require('../package');\n\n/**\n * My amazing comment\n */\nfunction myFunction() {\n\treturn 'StringGainz';\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar package = require(\"../package\");\n\n/**\n * My amazing comment\n */\nfunction myFunction() {\n  return \"StringGainz\";\n}\n\n`;\n\nexports[`octal-number.js 1`] = `\n0777\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n0777;\n\n`;\n"
  },
  {
    "path": "tests/non-strict/argument-name-clash.js",
    "content": "function f(a,a){return a}\n"
  },
  {
    "path": "tests/non-strict/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"babylon\" }, [\"typescript\"]);\n"
  },
  {
    "path": "tests/non-strict/keywords.js",
    "content": "var package = require('../package');\n\n/**\n * My amazing comment\n */\nfunction myFunction() {\n\treturn 'StringGainz';\n}\n"
  },
  {
    "path": "tests/non-strict/octal-number.js",
    "content": "0777\n"
  },
  {
    "path": "tests/object-prop-break-in/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`comment.js 1`] = `\nfunction foo() {\n  return {\n    // this comment causes the problem\n    bar: baz() + 1\n  };\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo() {\n  return {\n    // this comment causes the problem\n    bar: baz() + 1\n  };\n}\n\n`;\n\nexports[`comment.js 2`] = `\nfunction foo() {\n  return {\n    // this comment causes the problem\n    bar: baz() + 1\n  };\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo() {\n  return {\n    // this comment causes the problem\n    bar: baz() + 1\n  };\n}\n\n`;\n\nexports[`long-value.js 1`] = `\nconst x = {\n  \"ABC\": \"12345678901234567890123456789012345678901234567890123456789012345678901234567890\"\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst x = {\n  ABC:\n    \"12345678901234567890123456789012345678901234567890123456789012345678901234567890\"\n};\n\n`;\n\nexports[`long-value.js 2`] = `\nconst x = {\n  \"ABC\": \"12345678901234567890123456789012345678901234567890123456789012345678901234567890\"\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst x = {\n  ABC:\n    \"12345678901234567890123456789012345678901234567890123456789012345678901234567890\"\n};\n\n`;\n\nexports[`test.js 1`] = `\nconst a = classnames({\n  \"some-prop\": this.state.longLongLongLongLongLongLongLongLongTooLongProp\n});\n\nconst b = classnames({\n  \"some-prop\": this.state.longLongLongLongLongLongLongLongLongTooLongProp === true\n});\n\nconst c = classnames({\n  \"some-prop\": [ \"foo\", \"bar\", \"foo\", \"bar\", \"foo\", \"bar\", \"foo\", \"bar\", \"foo\" ]\n});\n\nconst d = classnames({\n  \"some-prop\": () => {}\n});\n\nconst e = classnames({\n  \"some-prop\": function bar() {}\n});\n\nconst f = classnames({\n  \"some-prop\": { foo: \"bar\", bar: \"foo\", foo: \"bar\", bar: \"foo\", foo: \"bar\" }\n});\n\nconst g = classnames({\n  \"some-prop\": longLongLongLongLongLongLongLongLongLongLongLongLongTooLongVar || 1337\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst a = classnames({\n  \"some-prop\": this.state.longLongLongLongLongLongLongLongLongTooLongProp\n});\n\nconst b = classnames({\n  \"some-prop\":\n    this.state.longLongLongLongLongLongLongLongLongTooLongProp === true\n});\n\nconst c = classnames({\n  \"some-prop\": [\"foo\", \"bar\", \"foo\", \"bar\", \"foo\", \"bar\", \"foo\", \"bar\", \"foo\"]\n});\n\nconst d = classnames({\n  \"some-prop\": () => {}\n});\n\nconst e = classnames({\n  \"some-prop\": function bar() {}\n});\n\nconst f = classnames({\n  \"some-prop\": { foo: \"bar\", bar: \"foo\", foo: \"bar\", bar: \"foo\", foo: \"bar\" }\n});\n\nconst g = classnames({\n  \"some-prop\":\n    longLongLongLongLongLongLongLongLongLongLongLongLongTooLongVar || 1337\n});\n\n`;\n\nexports[`test.js 2`] = `\nconst a = classnames({\n  \"some-prop\": this.state.longLongLongLongLongLongLongLongLongTooLongProp\n});\n\nconst b = classnames({\n  \"some-prop\": this.state.longLongLongLongLongLongLongLongLongTooLongProp === true\n});\n\nconst c = classnames({\n  \"some-prop\": [ \"foo\", \"bar\", \"foo\", \"bar\", \"foo\", \"bar\", \"foo\", \"bar\", \"foo\" ]\n});\n\nconst d = classnames({\n  \"some-prop\": () => {}\n});\n\nconst e = classnames({\n  \"some-prop\": function bar() {}\n});\n\nconst f = classnames({\n  \"some-prop\": { foo: \"bar\", bar: \"foo\", foo: \"bar\", bar: \"foo\", foo: \"bar\" }\n});\n\nconst g = classnames({\n  \"some-prop\": longLongLongLongLongLongLongLongLongLongLongLongLongTooLongVar || 1337\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst a = classnames({\n  \"some-prop\": this.state.longLongLongLongLongLongLongLongLongTooLongProp\n});\n\nconst b = classnames({\n  \"some-prop\":\n    this.state.longLongLongLongLongLongLongLongLongTooLongProp === true\n});\n\nconst c = classnames({\n  \"some-prop\": [\"foo\", \"bar\", \"foo\", \"bar\", \"foo\", \"bar\", \"foo\", \"bar\", \"foo\"]\n});\n\nconst d = classnames({\n  \"some-prop\": () => {}\n});\n\nconst e = classnames({\n  \"some-prop\": function bar() {}\n});\n\nconst f = classnames({\n  \"some-prop\": { foo: \"bar\", bar: \"foo\", foo: \"bar\", bar: \"foo\", foo: \"bar\" }\n});\n\nconst g = classnames({\n  \"some-prop\":\n    longLongLongLongLongLongLongLongLongLongLongLongLongTooLongVar || 1337\n});\n\n`;\n"
  },
  {
    "path": "tests/object-prop-break-in/comment.js",
    "content": "function foo() {\n  return {\n    // this comment causes the problem\n    bar: baz() + 1\n  };\n}\n"
  },
  {
    "path": "tests/object-prop-break-in/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\", \"typescript\"]);\nrun_spec(__dirname, { breakProperty: true }, [\"babylon\", \"typescript\"]);\n"
  },
  {
    "path": "tests/object-prop-break-in/long-value.js",
    "content": "const x = {\n  \"ABC\": \"12345678901234567890123456789012345678901234567890123456789012345678901234567890\"\n};\n"
  },
  {
    "path": "tests/object-prop-break-in/test.js",
    "content": "const a = classnames({\n  \"some-prop\": this.state.longLongLongLongLongLongLongLongLongTooLongProp\n});\n\nconst b = classnames({\n  \"some-prop\": this.state.longLongLongLongLongLongLongLongLongTooLongProp === true\n});\n\nconst c = classnames({\n  \"some-prop\": [ \"foo\", \"bar\", \"foo\", \"bar\", \"foo\", \"bar\", \"foo\", \"bar\", \"foo\" ]\n});\n\nconst d = classnames({\n  \"some-prop\": () => {}\n});\n\nconst e = classnames({\n  \"some-prop\": function bar() {}\n});\n\nconst f = classnames({\n  \"some-prop\": { foo: \"bar\", bar: \"foo\", foo: \"bar\", bar: \"foo\", foo: \"bar\" }\n});\n\nconst g = classnames({\n  \"some-prop\": longLongLongLongLongLongLongLongLongLongLongLongLongTooLongVar || 1337\n});\n"
  },
  {
    "path": "tests/object_colon_bug/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`bug.js 1`] = `\nconst foo = {\n  bar: props.bar ? props.bar : noop,\n  baz: props.baz\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst foo = {\n  bar: props.bar\n    ? props.bar\n    : noop,\n  baz: props.baz\n};\n\n`;\n"
  },
  {
    "path": "tests/object_colon_bug/bug.js",
    "content": "const foo = {\n  bar: props.bar ? props.bar : noop,\n  baz: props.baz\n}\n"
  },
  {
    "path": "tests/object_colon_bug/jsfmt.spec.js",
    "content": "run_spec(__dirname, { printWidth: 35 }, [\"typescript\"]);\n"
  },
  {
    "path": "tests/object_property_comment/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`after-key.js 1`] = `\nlet a = {\n   a /* comment */: () => 1\n};\n\nlet a = {\n   \"a\" /* comment */: () => 1\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nlet a = {\n  a /* comment */: () => 1\n};\n\nlet a = {\n  a /* comment */: () => 1\n};\n\n`;\n\nexports[`comment.js 1`] = `\no = {\n  name:\n    // Comment A\n    // Comment B\n    (({id: type}: any): CreativeConcept),\n};\n\no = {\n  name: // Comment A\n  // Comment B\n  (({ id: type }: any): CreativeConcept)\n};\n\no = {\n  name: // Comment B // Comment A\n  (({ id: type }: any): CreativeConcept)\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\no = {\n  name:\n    // Comment A\n    // Comment B\n    (({ id: type }: any): CreativeConcept)\n};\n\no = {\n  // Comment A\n  name:\n    // Comment B\n    (({ id: type }: any): CreativeConcept)\n};\n\no = {\n  // Comment B // Comment A\n  name: (({ id: type }: any): CreativeConcept)\n};\n\n`;\n"
  },
  {
    "path": "tests/object_property_comment/after-key.js",
    "content": "let a = {\n   a /* comment */: () => 1\n};\n\nlet a = {\n   \"a\" /* comment */: () => 1\n};\n"
  },
  {
    "path": "tests/object_property_comment/comment.js",
    "content": "o = {\n  name:\n    // Comment A\n    // Comment B\n    (({id: type}: any): CreativeConcept),\n};\n\no = {\n  name: // Comment A\n  // Comment B\n  (({ id: type }: any): CreativeConcept)\n};\n\no = {\n  name: // Comment B // Comment A\n  (({ id: type }: any): CreativeConcept)\n};\n"
  },
  {
    "path": "tests/object_property_comment/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/objects/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`expand.js 1`] = `\nconst Component1 = ({ props }) => (\n  <Text>Test</Text>\n);\n\nconst Component2 = ({\n  props\n}) => (\n  <Text>Test</Text>\n);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst Component1 = ({ props }) => <Text>Test</Text>;\n\nconst Component2 = ({ props }) => <Text>Test</Text>;\n\n`;\n\nexports[`expression.js 1`] = `\n() => ({}\\`\\`);\n({})\\`\\`;\na = () => ({}).x;\n({} && a, b);\n({}::b, 0);\n({}::b()\\`\\`[''].c++ && 0 ? 0 : 0, 0);\n({}(), 0);\n({} = 0);\n(({} = 0), 1);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n() => ({}\\`\\`);\n({}\\`\\`);\na = () => ({}.x);\n({} && a, b);\n({}::b, 0);\n({}::b()\\`\\`[\"\"].c++ && 0 ? 0 : 0, 0);\n({}(), 0);\n({} = 0);\n({} = 0), 1;\n\n`;\n\nexports[`method.js 1`] = `\na = { f() {} }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\na = { f() {} };\n\n`;\n\nexports[`range.js 1`] = `\ngroup(\n  concat([\n    \"(\",\n    indent(\n      options.tabWidth,\n      concat([line, join(concat([\",\", line]), printed)])\n    ),\n    options.trailingComma ? \",\" : \"\",\n    line,\n    \")\"\n  ]),\n  {shouldBreak: true}\n)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ngroup(\n  concat([\n    \"(\",\n    indent(\n      options.tabWidth,\n      concat([line, join(concat([\",\", line]), printed)])\n    ),\n    options.trailingComma ? \",\" : \"\",\n    line,\n    \")\"\n  ]),\n  { shouldBreak: true }\n);\n\n`;\n\nexports[`right_break.js 1`] = `\nconst blablah =\n  \"aldkfkladfskladklsfkladklfkaldfadfkdaf\" +\n  \"adlfasdklfkldsklfakldsfkladsfkadsfladsfa\" +\n  \"dflkadfkladsfklkadlfkladlfkadklfjadlfdfdaf\";\n\nconst k = {\n  blablah: \"aldkfkladfskladklsfkladklfkaldfadfkdaf\" +\n    \"adlfasdklfkldsklfakldsfkladsfkadsfladsfa\" +\n    \"dflkadfkladsfklkadlfkladlfkadklfjadlfdfdaf\"\n};\n\nsomethingThatsAReallyLongPropName =\n  this.props.cardType === AwesomizerCardEnum.SEEFIRST;\n\nconst o = {\n  somethingThatsAReallyLongPropName:\n    this.props.cardType === AwesomizerCardEnum.SEEFIRST,\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst blablah =\n  \"aldkfkladfskladklsfkladklfkaldfadfkdaf\" +\n  \"adlfasdklfkldsklfakldsfkladsfkadsfladsfa\" +\n  \"dflkadfkladsfklkadlfkladlfkadklfjadlfdfdaf\";\n\nconst k = {\n  blablah:\n    \"aldkfkladfskladklsfkladklfkaldfadfkdaf\" +\n    \"adlfasdklfkldsklfakldsfkladsfkadsfladsfa\" +\n    \"dflkadfkladsfklkadlfkladlfkadklfjadlfdfdaf\"\n};\n\nsomethingThatsAReallyLongPropName =\n  this.props.cardType === AwesomizerCardEnum.SEEFIRST;\n\nconst o = {\n  somethingThatsAReallyLongPropName:\n    this.props.cardType === AwesomizerCardEnum.SEEFIRST\n};\n\n`;\n"
  },
  {
    "path": "tests/objects/expand.js",
    "content": "const Component1 = ({ props }) => (\n  <Text>Test</Text>\n);\n\nconst Component2 = ({\n  props\n}) => (\n  <Text>Test</Text>\n);\n"
  },
  {
    "path": "tests/objects/expression.js",
    "content": "() => ({}``);\n({})``;\na = () => ({}).x;\n({} && a, b);\n({}::b, 0);\n({}::b()``[''].c++ && 0 ? 0 : 0, 0);\n({}(), 0);\n({} = 0);\n(({} = 0), 1);\n"
  },
  {
    "path": "tests/objects/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"babylon\" });\n"
  },
  {
    "path": "tests/objects/method.js",
    "content": "a = { f() {} }\n"
  },
  {
    "path": "tests/objects/range.js",
    "content": "group(\n  concat([\n    \"(\",\n    indent(\n      options.tabWidth,\n      concat([line, join(concat([\",\", line]), printed)])\n    ),\n    options.trailingComma ? \",\" : \"\",\n    line,\n    \")\"\n  ]),\n  {shouldBreak: true}\n)\n"
  },
  {
    "path": "tests/objects/right_break.js",
    "content": "const blablah =\n  \"aldkfkladfskladklsfkladklfkaldfadfkdaf\" +\n  \"adlfasdklfkldsklfakldsfkladsfkadsfladsfa\" +\n  \"dflkadfkladsfklkadlfkladlfkadklfjadlfdfdaf\";\n\nconst k = {\n  blablah: \"aldkfkladfskladklsfkladklfkaldfadfkdaf\" +\n    \"adlfasdklfkldsklfakldsfkladsfkadsfladsfa\" +\n    \"dflkadfkladsfklkadlfkladlfkadklfjadlfdfdaf\"\n};\n\nsomethingThatsAReallyLongPropName =\n  this.props.cardType === AwesomizerCardEnum.SEEFIRST;\n\nconst o = {\n  somethingThatsAReallyLongPropName:\n    this.props.cardType === AwesomizerCardEnum.SEEFIRST,\n};\n"
  },
  {
    "path": "tests/optional-type-name/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\ntype Foo = (any) => string\n\ntype Bar = { [string]: number }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype Foo = any => string;\n\ntype Bar = { [string]: number };\n\n`;\n"
  },
  {
    "path": "tests/optional-type-name/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/optional-type-name/test.js",
    "content": "type Foo = (any) => string\n\ntype Bar = { [string]: number }\n"
  },
  {
    "path": "tests/performance/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`nested.js 1`] = `\nsomeObject.someFunction().then(function() {\n  return someObject.someFunction().then(function() {\n    return someObject.someFunction().then(function() {\n      return someObject.someFunction().then(function() {\n        return someObject.someFunction().then(function() {\n          return someObject.someFunction().then(function() {\n            return someObject.someFunction().then(function() {\n              return someObject.someFunction().then(function() {\n                return someObject.someFunction().then(function() {\n                  return someObject.someFunction().then(function() {\n                    return someObject.someFunction().then(function() {\n                      return someObject.someFunction().then(function() {\n                        return someObject.someFunction().then(function() {\n                          return someObject.someFunction().then(function() {\n                            anotherFunction();\n                          });\n                        });\n                      });\n                    });\n                  });\n                });\n              });\n            });\n          });\n        });\n      });\n    });\n  });\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nsomeObject.someFunction().then(function() {\n  return someObject.someFunction().then(function() {\n    return someObject.someFunction().then(function() {\n      return someObject.someFunction().then(function() {\n        return someObject.someFunction().then(function() {\n          return someObject.someFunction().then(function() {\n            return someObject.someFunction().then(function() {\n              return someObject.someFunction().then(function() {\n                return someObject.someFunction().then(function() {\n                  return someObject.someFunction().then(function() {\n                    return someObject.someFunction().then(function() {\n                      return someObject.someFunction().then(function() {\n                        return someObject.someFunction().then(function() {\n                          return someObject.someFunction().then(function() {\n                            anotherFunction();\n                          });\n                        });\n                      });\n                    });\n                  });\n                });\n              });\n            });\n          });\n        });\n      });\n    });\n  });\n});\n\n`;\n\nexports[`nested-real.js 1`] = `\ntap.test(\"RecordImport.advance\", (t) => {\n    const checkStates = (batches, states) => {\n        t.equal(batches.length, states.length);\n        for (const batch of batches) {\n            t.equal(batch.state, states.shift());\n            t.ok(batch.getCurState().name(i18n));\n        }\n    };\n\n    const batch = init.getRecordBatch();\n    const dataFile = path.resolve(process.cwd(), \"testData\", \"default.json\");\n\n    const getBatches = (callback) => {\n        RecordImport.find({}, \"\", {}, (err, batches) => {\n            callback(null, batches.filter((batch) => (batch.state !== \"error\" &&\n                batch.state !== \"completed\")));\n        });\n    };\n\n    mockFS((callback) => {\n        batch.setResults([fs.createReadStream(dataFile)], (err) => {\n            t.error(err, \"Error should be empty.\");\n            t.equal(batch.results.length, 6, \"Check number of results\");\n            for (const result of batch.results) {\n                t.equal(result.result, \"unknown\");\n                t.ok(result.data);\n                t.equal(result.data.lang, \"en\");\n            }\n\n            getBatches((err, batches) => {\n                checkStates(batches, [\"started\"]);\n\n                RecordImport.advance((err) => {\n                    t.error(err, \"Error should be empty.\");\n\n                    getBatches((err, batches) => {\n                        checkStates(batches, [\"process.completed\"]);\n\n                        // Need to manually move to the next step\n                        batch.importRecords((err) => {\n                            t.error(err, \"Error should be empty.\");\n\n                            getBatches((err, batches) => {\n                                checkStates(batches, [\"import.completed\"]);\n\n                                RecordImport.advance((err) => {\n                                    t.error(err, \"Error should be empty.\");\n\n                                    getBatches((err, batches) => {\n                                        checkStates(batches,\n                                            [\"similarity.sync.completed\"]);\n\n                                        RecordImport.advance((err) => {\n                                            t.error(err,\n                                                \"Error should be empty.\");\n\n                                            t.ok(batch.getCurState()\n                                                .name(i18n));\n\n                                            getBatches((err, batches) => {\n                                                checkStates(batches, []);\n                                                t.end();\n                                                callback();\n                                            });\n                                        });\n\n                                        t.ok(batch.getCurState().name(i18n));\n                                    });\n                                });\n\n                                t.ok(batch.getCurState().name(i18n));\n                            });\n                        });\n\n                        t.ok(batch.getCurState().name(i18n));\n                    });\n                });\n\n                t.ok(batch.getCurState().name(i18n));\n            });\n        });\n    });\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntap.test(\"RecordImport.advance\", t => {\n  const checkStates = (batches, states) => {\n    t.equal(batches.length, states.length);\n    for (const batch of batches) {\n      t.equal(batch.state, states.shift());\n      t.ok(batch.getCurState().name(i18n));\n    }\n  };\n\n  const batch = init.getRecordBatch();\n  const dataFile = path.resolve(process.cwd(), \"testData\", \"default.json\");\n\n  const getBatches = callback => {\n    RecordImport.find({}, \"\", {}, (err, batches) => {\n      callback(\n        null,\n        batches.filter(\n          batch => batch.state !== \"error\" && batch.state !== \"completed\"\n        )\n      );\n    });\n  };\n\n  mockFS(callback => {\n    batch.setResults([fs.createReadStream(dataFile)], err => {\n      t.error(err, \"Error should be empty.\");\n      t.equal(batch.results.length, 6, \"Check number of results\");\n      for (const result of batch.results) {\n        t.equal(result.result, \"unknown\");\n        t.ok(result.data);\n        t.equal(result.data.lang, \"en\");\n      }\n\n      getBatches((err, batches) => {\n        checkStates(batches, [\"started\"]);\n\n        RecordImport.advance(err => {\n          t.error(err, \"Error should be empty.\");\n\n          getBatches((err, batches) => {\n            checkStates(batches, [\"process.completed\"]);\n\n            // Need to manually move to the next step\n            batch.importRecords(err => {\n              t.error(err, \"Error should be empty.\");\n\n              getBatches((err, batches) => {\n                checkStates(batches, [\"import.completed\"]);\n\n                RecordImport.advance(err => {\n                  t.error(err, \"Error should be empty.\");\n\n                  getBatches((err, batches) => {\n                    checkStates(batches, [\"similarity.sync.completed\"]);\n\n                    RecordImport.advance(err => {\n                      t.error(err, \"Error should be empty.\");\n\n                      t.ok(batch.getCurState().name(i18n));\n\n                      getBatches((err, batches) => {\n                        checkStates(batches, []);\n                        t.end();\n                        callback();\n                      });\n                    });\n\n                    t.ok(batch.getCurState().name(i18n));\n                  });\n                });\n\n                t.ok(batch.getCurState().name(i18n));\n              });\n            });\n\n            t.ok(batch.getCurState().name(i18n));\n          });\n        });\n\n        t.ok(batch.getCurState().name(i18n));\n      });\n    });\n  });\n});\n\n`;\n"
  },
  {
    "path": "tests/performance/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/performance/nested-real.js",
    "content": "tap.test(\"RecordImport.advance\", (t) => {\n    const checkStates = (batches, states) => {\n        t.equal(batches.length, states.length);\n        for (const batch of batches) {\n            t.equal(batch.state, states.shift());\n            t.ok(batch.getCurState().name(i18n));\n        }\n    };\n\n    const batch = init.getRecordBatch();\n    const dataFile = path.resolve(process.cwd(), \"testData\", \"default.json\");\n\n    const getBatches = (callback) => {\n        RecordImport.find({}, \"\", {}, (err, batches) => {\n            callback(null, batches.filter((batch) => (batch.state !== \"error\" &&\n                batch.state !== \"completed\")));\n        });\n    };\n\n    mockFS((callback) => {\n        batch.setResults([fs.createReadStream(dataFile)], (err) => {\n            t.error(err, \"Error should be empty.\");\n            t.equal(batch.results.length, 6, \"Check number of results\");\n            for (const result of batch.results) {\n                t.equal(result.result, \"unknown\");\n                t.ok(result.data);\n                t.equal(result.data.lang, \"en\");\n            }\n\n            getBatches((err, batches) => {\n                checkStates(batches, [\"started\"]);\n\n                RecordImport.advance((err) => {\n                    t.error(err, \"Error should be empty.\");\n\n                    getBatches((err, batches) => {\n                        checkStates(batches, [\"process.completed\"]);\n\n                        // Need to manually move to the next step\n                        batch.importRecords((err) => {\n                            t.error(err, \"Error should be empty.\");\n\n                            getBatches((err, batches) => {\n                                checkStates(batches, [\"import.completed\"]);\n\n                                RecordImport.advance((err) => {\n                                    t.error(err, \"Error should be empty.\");\n\n                                    getBatches((err, batches) => {\n                                        checkStates(batches,\n                                            [\"similarity.sync.completed\"]);\n\n                                        RecordImport.advance((err) => {\n                                            t.error(err,\n                                                \"Error should be empty.\");\n\n                                            t.ok(batch.getCurState()\n                                                .name(i18n));\n\n                                            getBatches((err, batches) => {\n                                                checkStates(batches, []);\n                                                t.end();\n                                                callback();\n                                            });\n                                        });\n\n                                        t.ok(batch.getCurState().name(i18n));\n                                    });\n                                });\n\n                                t.ok(batch.getCurState().name(i18n));\n                            });\n                        });\n\n                        t.ok(batch.getCurState().name(i18n));\n                    });\n                });\n\n                t.ok(batch.getCurState().name(i18n));\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "tests/performance/nested.js",
    "content": "someObject.someFunction().then(function() {\n  return someObject.someFunction().then(function() {\n    return someObject.someFunction().then(function() {\n      return someObject.someFunction().then(function() {\n        return someObject.someFunction().then(function() {\n          return someObject.someFunction().then(function() {\n            return someObject.someFunction().then(function() {\n              return someObject.someFunction().then(function() {\n                return someObject.someFunction().then(function() {\n                  return someObject.someFunction().then(function() {\n                    return someObject.someFunction().then(function() {\n                      return someObject.someFunction().then(function() {\n                        return someObject.someFunction().then(function() {\n                          return someObject.someFunction().then(function() {\n                            anotherFunction();\n                          });\n                        });\n                      });\n                    });\n                  });\n                });\n              });\n            });\n          });\n        });\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "tests/preserve_line/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`comments.js 1`] = `\nfunction a() {\n  const a = 5; // comment\n\n  return a;\n}\n\nfunction a() {\n  const a = 5; /* comment */\n\n  return a;\n}\n\nfunction a() {\n  const a = 5; /* comment */ /* comment */\n\n  return a;\n}\n\nfunction a() {\n  const a = 5; /* comment */ /* comment */ // comment\n  return a;\n}\n\nfunction a() {\n  const a = 5; /* comment */ /* comment */ // comment\n\n  return a;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction a() {\n  const a = 5; // comment\n\n  return a;\n}\n\nfunction a() {\n  const a = 5; /* comment */\n\n  return a;\n}\n\nfunction a() {\n  const a = 5; /* comment */ /* comment */\n\n  return a;\n}\n\nfunction a() {\n  const a = 5; /* comment */ /* comment */ // comment\n  return a;\n}\n\nfunction a() {\n  const a = 5; /* comment */ /* comment */ // comment\n\n  return a;\n}\n\n`;\n"
  },
  {
    "path": "tests/preserve_line/comments.js",
    "content": "function a() {\n  const a = 5; // comment\n\n  return a;\n}\n\nfunction a() {\n  const a = 5; /* comment */\n\n  return a;\n}\n\nfunction a() {\n  const a = 5; /* comment */ /* comment */\n\n  return a;\n}\n\nfunction a() {\n  const a = 5; /* comment */ /* comment */ // comment\n  return a;\n}\n\nfunction a() {\n  const a = 5; /* comment */ /* comment */ // comment\n\n  return a;\n}\n"
  },
  {
    "path": "tests/preserve_line/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/quotes/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`functions.js 1`] = `\nconst a = () => \"Foo bar\";\n\nfunction b(object, key) {\n  return object['key'];\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst a = () => \"Foo bar\";\n\nfunction b(object, key) {\n  return object[\"key\"];\n}\n\n`;\n\nexports[`functions.js 2`] = `\nconst a = () => \"Foo bar\";\n\nfunction b(object, key) {\n  return object['key'];\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst a = () => 'Foo bar';\n\nfunction b(object, key) {\n  return object['key'];\n}\n\n`;\n\nexports[`strings.js 1`] = `\n// Prevent strings from being parsed as directives\n// See https://github.com/prettier/prettier/pull/1560#issue-227225960\n0;\n\n// Every string will be changed to double quotes, unless we end up with fewer\n// escaped quotes by using single quotes. (Vice versa if the \"singleQuote\"\n// option is true).\n//\n// Note that even if a string already has the correct enclosing quotes, it is\n// still processed in order to remove unnecessarily escaped quotes within it,\n// for consistency.\n\n// Simple strings.\n\"abc\"\n'abc'\n\n// Escape.\n'\\\\0'\n\n// Emoji.\n'🐶'\n\n// Empty string.\n\"\"\n''\n\n// Single double quote.\n\"\\\\\"\"\n'\"'\n\n// Single single quote.\n\"'\"\n'\\\\''\n\n// Unnecessary escapes.\n\"\\\\'\"\n'\\\\\"'\n\"\\\\a\"\n'\\\\a'\n\"hol\\\\a\"\n'hol\\\\a'\n\"hol\\\\\\\\a (the a is not escaped)\"\n'hol\\\\\\\\a (the a is not escaped)'\n\"multiple \\\\a unnecessary \\\\a escapes\"\n'multiple \\\\a unnecessary \\\\a escapes'\n\"unnecessarily escaped character preceded by escaped backslash \\\\\\\\\\\\a\"\n'unnecessarily escaped character preceded by escaped backslash \\\\\\\\\\\\a'\n\"unescaped character preceded by two escaped backslashes       \\\\\\\\\\\\\\\\a\"\n'unescaped character preceded by two escaped backslashes       \\\\\\\\\\\\\\\\a'\n\"\\\\a\\\\a\" // consecutive unnecessarily escaped characters\n'\\\\a\\\\a' // consecutive unnecessarily escaped characters\n'escaped \\\\u2030 \\\\‰ (should not stay escaped)'\n\n// Meaningful escapes\n\"octal escapes \\\\0 \\\\1 \\\\2 \\\\3 \\\\4 \\\\5 \\\\6 \\\\7\"\n'octal escapes \\\\0 \\\\1 \\\\2 \\\\3 \\\\4 \\\\5 \\\\6 \\\\7'\n\"meaningfully escaped alphabetical characters \\\\n \\\\r \\\\v \\\\t \\\\b \\\\f \\\\u2713 \\\\x61\"\n'meaningfully escaped alphabetical characters \\\\n \\\\r \\\\v \\\\t \\\\b \\\\f \\\\u2713 \\\\x61'\n'escaped newline \\\\\n'\n'escaped carriage return \\\\\n'\n'escaped \\\\u2028 \\\\ '\n'escaped \\\\u2029 \\\\ '\n\n// One of each.\n\"\\\\\"'\"\n'\"\\\\''\n\n// One of each with unnecessary escapes.\n\"\\\\\"\\\\'\"\n'\\\\\"\\\\''\n\n// More double quotes than single quotes.\n\"\\\\\"'\\\\\"\"\n'\"\\\\'\"'\n\n// More single quotes than double quotes.\n\"\\\\\"''\"\n'\"\\\\'\\\\''\n\n// Two of each.\n\"\\\\\"\\\\\"''\"\n'\"\"\\\\'\\\\''\n\n// Single backslash.\n'\\\\\\\\'\n\"\\\\\\\\\"\n\n// Backslases.\n\"\\\\\"\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\" '\\\\'\\\\\\\\'\\\\\\\\\\\\'\\\\\\\\\\\\\\\\'\"\n'\\\\'\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\' \"\\\\\"\\\\\\\\\"\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\"'\n\n// Somewhat more real-word example.\n\"He's sayin': \\\\\"How's it goin'?\\\\\" Don't ask me why.\"\n'He\\\\'s sayin\\\\': \"How\\\\'s it goin\\\\'?\" Don\\\\'t ask me why.'\n\n// Somewhat more real-word example 2.\n\"var backslash = \\\\\"\\\\\\\\\\\\\", doubleQuote = '\\\\\"';\"\n'var backslash = \"\\\\\\\\\", doubleQuote = \\\\'\"\\\\';'\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Prevent strings from being parsed as directives\n// See https://github.com/prettier/prettier/pull/1560#issue-227225960\n0;\n\n// Every string will be changed to double quotes, unless we end up with fewer\n// escaped quotes by using single quotes. (Vice versa if the \"singleQuote\"\n// option is true).\n//\n// Note that even if a string already has the correct enclosing quotes, it is\n// still processed in order to remove unnecessarily escaped quotes within it,\n// for consistency.\n\n// Simple strings.\n(\"abc\");\n(\"abc\");\n\n// Escape.\n(\"\\\\0\");\n\n// Emoji.\n(\"🐶\");\n// Empty string.\n(\"\");\n(\"\");\n// Single double quote.\n('\"');\n('\"');\n// Single single quote.\n(\"'\");\n(\"'\");\n// Unnecessary escapes.\n(\"'\");\n('\"');\n(\"a\");\n(\"a\");\n(\"hola\");\n(\"hola\");\n(\"hol\\\\\\\\a (the a is not escaped)\");\n(\"hol\\\\\\\\a (the a is not escaped)\");\n(\"multiple a unnecessary a escapes\");\n(\"multiple a unnecessary a escapes\");\n(\"unnecessarily escaped character preceded by escaped backslash \\\\\\\\a\");\n(\"unnecessarily escaped character preceded by escaped backslash \\\\\\\\a\");\n(\"unescaped character preceded by two escaped backslashes       \\\\\\\\\\\\\\\\a\");\n(\"unescaped character preceded by two escaped backslashes       \\\\\\\\\\\\\\\\a\");\n(\"aa\"); // consecutive unnecessarily escaped characters\n(\"aa\"); // consecutive unnecessarily escaped characters\n(\"escaped \\\\u2030 ‰ (should not stay escaped)\");\n// Meaningful escapes\n(\"octal escapes \\\\0 \\\\1 \\\\2 \\\\3 \\\\4 \\\\5 \\\\6 \\\\7\");\n(\"octal escapes \\\\0 \\\\1 \\\\2 \\\\3 \\\\4 \\\\5 \\\\6 \\\\7\");\n(\"meaningfully escaped alphabetical characters \\\\n \\\\r \\\\v \\\\t \\\\b \\\\f \\\\u2713 \\\\x61\");\n(\"meaningfully escaped alphabetical characters \\\\n \\\\r \\\\v \\\\t \\\\b \\\\f \\\\u2713 \\\\x61\");\n(\"escaped newline \\\\\n\");\n(\"escaped carriage return \\\\\n\");\n(\"escaped \\\\u2028 \\\\ \");\n(\"escaped \\\\u2029 \\\\ \");\n// One of each.\n(\"\\\\\"'\");\n(\"\\\\\"'\");\n// One of each with unnecessary escapes.\n(\"\\\\\"'\");\n(\"\\\\\"'\");\n// More double quotes than single quotes.\n('\"\\\\'\"');\n('\"\\\\'\"');\n// More single quotes than double quotes.\n(\"\\\\\"''\");\n(\"\\\\\"''\");\n// Two of each.\n(\"\\\\\"\\\\\"''\");\n(\"\\\\\"\\\\\"''\");\n// Single backslash.\n(\"\\\\\\\\\");\n(\"\\\\\\\\\");\n// Backslases.\n(\"\\\\\"\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\" ''\\\\\\\\'\\\\\\\\'\\\\\\\\\\\\\\\\'\");\n('\\\\'\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\' \"\"\\\\\\\\\"\\\\\\\\\"\\\\\\\\\\\\\\\\\"');\n// Somewhat more real-word example.\n(\"He's sayin': \\\\\"How's it goin'?\\\\\" Don't ask me why.\");\n(\"He's sayin': \\\\\"How's it goin'?\\\\\" Don't ask me why.\");\n// Somewhat more real-word example 2.\n('var backslash = \"\\\\\\\\\", doubleQuote = \\\\'\"\\\\';');\n('var backslash = \"\\\\\\\\\", doubleQuote = \\\\'\"\\\\';');\n\n`;\n\nexports[`strings.js 2`] = `\n// Prevent strings from being parsed as directives\n// See https://github.com/prettier/prettier/pull/1560#issue-227225960\n0;\n\n// Every string will be changed to double quotes, unless we end up with fewer\n// escaped quotes by using single quotes. (Vice versa if the \"singleQuote\"\n// option is true).\n//\n// Note that even if a string already has the correct enclosing quotes, it is\n// still processed in order to remove unnecessarily escaped quotes within it,\n// for consistency.\n\n// Simple strings.\n\"abc\"\n'abc'\n\n// Escape.\n'\\\\0'\n\n// Emoji.\n'🐶'\n\n// Empty string.\n\"\"\n''\n\n// Single double quote.\n\"\\\\\"\"\n'\"'\n\n// Single single quote.\n\"'\"\n'\\\\''\n\n// Unnecessary escapes.\n\"\\\\'\"\n'\\\\\"'\n\"\\\\a\"\n'\\\\a'\n\"hol\\\\a\"\n'hol\\\\a'\n\"hol\\\\\\\\a (the a is not escaped)\"\n'hol\\\\\\\\a (the a is not escaped)'\n\"multiple \\\\a unnecessary \\\\a escapes\"\n'multiple \\\\a unnecessary \\\\a escapes'\n\"unnecessarily escaped character preceded by escaped backslash \\\\\\\\\\\\a\"\n'unnecessarily escaped character preceded by escaped backslash \\\\\\\\\\\\a'\n\"unescaped character preceded by two escaped backslashes       \\\\\\\\\\\\\\\\a\"\n'unescaped character preceded by two escaped backslashes       \\\\\\\\\\\\\\\\a'\n\"\\\\a\\\\a\" // consecutive unnecessarily escaped characters\n'\\\\a\\\\a' // consecutive unnecessarily escaped characters\n'escaped \\\\u2030 \\\\‰ (should not stay escaped)'\n\n// Meaningful escapes\n\"octal escapes \\\\0 \\\\1 \\\\2 \\\\3 \\\\4 \\\\5 \\\\6 \\\\7\"\n'octal escapes \\\\0 \\\\1 \\\\2 \\\\3 \\\\4 \\\\5 \\\\6 \\\\7'\n\"meaningfully escaped alphabetical characters \\\\n \\\\r \\\\v \\\\t \\\\b \\\\f \\\\u2713 \\\\x61\"\n'meaningfully escaped alphabetical characters \\\\n \\\\r \\\\v \\\\t \\\\b \\\\f \\\\u2713 \\\\x61'\n'escaped newline \\\\\n'\n'escaped carriage return \\\\\n'\n'escaped \\\\u2028 \\\\ '\n'escaped \\\\u2029 \\\\ '\n\n// One of each.\n\"\\\\\"'\"\n'\"\\\\''\n\n// One of each with unnecessary escapes.\n\"\\\\\"\\\\'\"\n'\\\\\"\\\\''\n\n// More double quotes than single quotes.\n\"\\\\\"'\\\\\"\"\n'\"\\\\'\"'\n\n// More single quotes than double quotes.\n\"\\\\\"''\"\n'\"\\\\'\\\\''\n\n// Two of each.\n\"\\\\\"\\\\\"''\"\n'\"\"\\\\'\\\\''\n\n// Single backslash.\n'\\\\\\\\'\n\"\\\\\\\\\"\n\n// Backslases.\n\"\\\\\"\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\" '\\\\'\\\\\\\\'\\\\\\\\\\\\'\\\\\\\\\\\\\\\\'\"\n'\\\\'\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\' \"\\\\\"\\\\\\\\\"\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\"'\n\n// Somewhat more real-word example.\n\"He's sayin': \\\\\"How's it goin'?\\\\\" Don't ask me why.\"\n'He\\\\'s sayin\\\\': \"How\\\\'s it goin\\\\'?\" Don\\\\'t ask me why.'\n\n// Somewhat more real-word example 2.\n\"var backslash = \\\\\"\\\\\\\\\\\\\", doubleQuote = '\\\\\"';\"\n'var backslash = \"\\\\\\\\\", doubleQuote = \\\\'\"\\\\';'\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Prevent strings from being parsed as directives\n// See https://github.com/prettier/prettier/pull/1560#issue-227225960\n0;\n\n// Every string will be changed to double quotes, unless we end up with fewer\n// escaped quotes by using single quotes. (Vice versa if the \"singleQuote\"\n// option is true).\n//\n// Note that even if a string already has the correct enclosing quotes, it is\n// still processed in order to remove unnecessarily escaped quotes within it,\n// for consistency.\n\n// Simple strings.\n('abc');\n('abc');\n\n// Escape.\n('\\\\0');\n\n// Emoji.\n('🐶');\n// Empty string.\n('');\n('');\n// Single double quote.\n('\"');\n('\"');\n// Single single quote.\n(\"'\");\n(\"'\");\n// Unnecessary escapes.\n(\"'\");\n('\"');\n('a');\n('a');\n('hola');\n('hola');\n('hol\\\\\\\\a (the a is not escaped)');\n('hol\\\\\\\\a (the a is not escaped)');\n('multiple a unnecessary a escapes');\n('multiple a unnecessary a escapes');\n('unnecessarily escaped character preceded by escaped backslash \\\\\\\\a');\n('unnecessarily escaped character preceded by escaped backslash \\\\\\\\a');\n('unescaped character preceded by two escaped backslashes       \\\\\\\\\\\\\\\\a');\n('unescaped character preceded by two escaped backslashes       \\\\\\\\\\\\\\\\a');\n('aa'); // consecutive unnecessarily escaped characters\n('aa'); // consecutive unnecessarily escaped characters\n('escaped \\\\u2030 ‰ (should not stay escaped)');\n// Meaningful escapes\n('octal escapes \\\\0 \\\\1 \\\\2 \\\\3 \\\\4 \\\\5 \\\\6 \\\\7');\n('octal escapes \\\\0 \\\\1 \\\\2 \\\\3 \\\\4 \\\\5 \\\\6 \\\\7');\n('meaningfully escaped alphabetical characters \\\\n \\\\r \\\\v \\\\t \\\\b \\\\f \\\\u2713 \\\\x61');\n('meaningfully escaped alphabetical characters \\\\n \\\\r \\\\v \\\\t \\\\b \\\\f \\\\u2713 \\\\x61');\n('escaped newline \\\\\n');\n('escaped carriage return \\\\\n');\n('escaped \\\\u2028 \\\\ ');\n('escaped \\\\u2029 \\\\ ');\n// One of each.\n('\"\\\\'');\n('\"\\\\'');\n// One of each with unnecessary escapes.\n('\"\\\\'');\n('\"\\\\'');\n// More double quotes than single quotes.\n('\"\\\\'\"');\n('\"\\\\'\"');\n// More single quotes than double quotes.\n(\"\\\\\"''\");\n(\"\\\\\"''\");\n// Two of each.\n('\"\"\\\\'\\\\'');\n('\"\"\\\\'\\\\'');\n// Single backslash.\n('\\\\\\\\');\n('\\\\\\\\');\n// Backslases.\n(\"\\\\\"\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\" ''\\\\\\\\'\\\\\\\\'\\\\\\\\\\\\\\\\'\");\n('\\\\'\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\' \"\"\\\\\\\\\"\\\\\\\\\"\\\\\\\\\\\\\\\\\"');\n// Somewhat more real-word example.\n(\"He's sayin': \\\\\"How's it goin'?\\\\\" Don't ask me why.\");\n(\"He's sayin': \\\\\"How's it goin'?\\\\\" Don't ask me why.\");\n// Somewhat more real-word example 2.\n('var backslash = \"\\\\\\\\\", doubleQuote = \\\\'\"\\\\';');\n('var backslash = \"\\\\\\\\\", doubleQuote = \\\\'\"\\\\';');\n\n`;\n"
  },
  {
    "path": "tests/quotes/functions.js",
    "content": "const a = () => \"Foo bar\";\n\nfunction b(object, key) {\n  return object['key'];\n}\n"
  },
  {
    "path": "tests/quotes/jsfmt.spec.js",
    "content": "run_spec(__dirname);\nrun_spec(__dirname, { singleQuote: true });\n"
  },
  {
    "path": "tests/quotes/strings.js",
    "content": "// Prevent strings from being parsed as directives\n// See https://github.com/prettier/prettier/pull/1560#issue-227225960\n0;\n\n// Every string will be changed to double quotes, unless we end up with fewer\n// escaped quotes by using single quotes. (Vice versa if the \"singleQuote\"\n// option is true).\n//\n// Note that even if a string already has the correct enclosing quotes, it is\n// still processed in order to remove unnecessarily escaped quotes within it,\n// for consistency.\n\n// Simple strings.\n\"abc\"\n'abc'\n\n// Escape.\n'\\0'\n\n// Emoji.\n'🐶'\n\n// Empty string.\n\"\"\n''\n\n// Single double quote.\n\"\\\"\"\n'\"'\n\n// Single single quote.\n\"'\"\n'\\''\n\n// Unnecessary escapes.\n\"\\'\"\n'\\\"'\n\"\\a\"\n'\\a'\n\"hol\\a\"\n'hol\\a'\n\"hol\\\\a (the a is not escaped)\"\n'hol\\\\a (the a is not escaped)'\n\"multiple \\a unnecessary \\a escapes\"\n'multiple \\a unnecessary \\a escapes'\n\"unnecessarily escaped character preceded by escaped backslash \\\\\\a\"\n'unnecessarily escaped character preceded by escaped backslash \\\\\\a'\n\"unescaped character preceded by two escaped backslashes       \\\\\\\\a\"\n'unescaped character preceded by two escaped backslashes       \\\\\\\\a'\n\"\\a\\a\" // consecutive unnecessarily escaped characters\n'\\a\\a' // consecutive unnecessarily escaped characters\n'escaped \\u2030 \\‰ (should not stay escaped)'\n\n// Meaningful escapes\n\"octal escapes \\0 \\1 \\2 \\3 \\4 \\5 \\6 \\7\"\n'octal escapes \\0 \\1 \\2 \\3 \\4 \\5 \\6 \\7'\n\"meaningfully escaped alphabetical characters \\n \\r \\v \\t \\b \\f \\u2713 \\x61\"\n'meaningfully escaped alphabetical characters \\n \\r \\v \\t \\b \\f \\u2713 \\x61'\n'escaped newline \\\n'\n'escaped carriage return \\\r\n'\n'escaped \\u2028 \\ '\n'escaped \\u2029 \\ '\n\n// One of each.\n\"\\\"'\"\n'\"\\''\n\n// One of each with unnecessary escapes.\n\"\\\"\\'\"\n'\\\"\\''\n\n// More double quotes than single quotes.\n\"\\\"'\\\"\"\n'\"\\'\"'\n\n// More single quotes than double quotes.\n\"\\\"''\"\n'\"\\'\\''\n\n// Two of each.\n\"\\\"\\\"''\"\n'\"\"\\'\\''\n\n// Single backslash.\n'\\\\'\n\"\\\\\"\n\n// Backslases.\n\"\\\"\\\\\\\"\\\\\\\\\\\" '\\'\\\\'\\\\\\'\\\\\\\\'\"\n'\\'\\\\\\'\\\\\\\\\\' \"\\\"\\\\\"\\\\\\\"\\\\\\\\\"'\n\n// Somewhat more real-word example.\n\"He's sayin': \\\"How's it goin'?\\\" Don't ask me why.\"\n'He\\'s sayin\\': \"How\\'s it goin\\'?\" Don\\'t ask me why.'\n\n// Somewhat more real-word example 2.\n\"var backslash = \\\"\\\\\\\", doubleQuote = '\\\"';\"\n'var backslash = \"\\\\\", doubleQuote = \\'\"\\';'\n"
  },
  {
    "path": "tests/range/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`class-declaration.js 1`] = `\n\n\nclass    a {\n  b(   ) {}\n}\n\nlet    x~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n\nclass a {\n  b() {}\n}\n\nlet    x\n`;\n\nexports[`different-levels.js 1`] = `\ncall(1,2,3)\ncall(1,2,3)\nfunction f() {\n  call(1,2,3)\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ncall(1,2,3)\ncall(1, 2, 3);\nfunction f() {\n  call(1, 2, 3);\n}\n\n`;\n\nexports[`function-declaration.js 1`] = `\nfunction ugly ( {a=1,     b     =   2     }      ) {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction ugly({ a = 1, b = 2 }) {}\n\n`;\n\nexports[`ignore-indentation.js 1`] = `\nfunction ugly ( {a=1,     b     =   2     }      ) {\n  function ugly ( {a=1,     b     =   2     }      ) {\n    function ugly ( {a=1,     b     =   2     }      ) {\n  \t  \t     \\`multiline template string\n              with too much indentation\\`\n    }\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction ugly ( {a=1,     b     =   2     }      ) {\n  function ugly ( {a=1,     b     =   2     }      ) {\n    function ugly ( {a=1,     b     =   2     }      ) {\n  \t  \t     \\`multiline template string\n              with too much indentation\\`;\n    }\n  }\n}\n\n`;\n\nexports[`module-export1.js 1`] = `\nimport  def , {named}  from    'x'\n\nexport *  from   'd'\n\nexport    const  x\n  =  42\n\nexport   default    42\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport  def , {named}  from    'x'\n\nexport * from \"d\";\n\nexport    const  x\n  =  42\n\nexport   default    42\n\n\n`;\n\nexports[`module-export2.js 1`] = `\nimport  def , {named}  from    'x'\n\nexport *  from   'd'\n\nexport    const  x\n  =  42\n\nexport   default    42\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport  def , {named}  from    'x'\n\nexport *  from   'd'\n\nexport const x = 42;\n\nexport   default    42\n\n\n`;\n\nexports[`module-export3.js 1`] = `\nimport  def , {named}  from    'x'\n\nexport *  from   'd'\n\nexport    const  x\n  =  42\n\nexport   default    42\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport  def , {named}  from    'x'\n\nexport *  from   'd'\n\nexport    const  x\n  =  42\n\nexport default 42;\n\n\n`;\n\nexports[`module-import.js 1`] = `\nimport  def , {named}  from    'x'\n\nexport *  from   'd'\n\nexport    const  x\n  =  42\n\nexport   default    42\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport def, { named } from \"x\";\n\nexport *  from   'd'\n\nexport    const  x\n  =  42\n\nexport   default    42\n\n\n`;\n\nexports[`multiple-statements.js 1`] = `\ncall(\n  1, 2,3\n);\n\ncall(\n  1, 2,3\n);\n\ncall(\n  1, 2,3\n);\n\ncall(\n  1, 2,3\n);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ncall(\n  1, 2,3\n);\n\ncall(1, 2, 3);\n\ncall(1, 2, 3);\n\ncall(\n  1, 2,3\n);\n\n`;\n\nexports[`multiple-statements2.js 1`] = `\ncall(\n  1, 2,3\n);\n\ncall(\n  1, 2,3\n);\n\ncall(\n  1, 2,3\n);\n\ncall(\n  1, 2,3\n);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ncall(\n  1, 2,3\n);\n\ncall(1, 2, 3);\n\ncall(1, 2, 3);\n\ncall(\n  1, 2,3\n);\n\n`;\n\nexports[`nested.js 1`] = `\ntry {\n  if (condition) {\n    body\n  }\n}\ncatch (err) {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntry {\n  if (condition) {\n    body;\n  }\n} catch (err) {}\n\n`;\n\nexports[`nested2.js 1`] = `\ntry {\n  if (condition) {\n    body\n  }\n}\ncatch (err) {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntry {\n  if (condition) {\n    body;\n  }\n}\ncatch (err) {}\n\n`;\n\nexports[`nested3.js 1`] = `\ntry {\n1;if (condition) {\n    body\n  }\n}\ncatch (err) {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntry {\n1;if (condition) {\n    body;\n  }\n}\ncatch (err) {}\n\n`;\n\nexports[`range.js 1`] = `\nfunction ugly ( {a=1,     b     =   2     }      ) {\n  function ugly ( {a=1,     b     =   2     }      ) {\n    function ugly ( {a=1,     b     =   2     }      ) {\n             \\`multiline template string\n              with too much indentation\\`\n    }\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction ugly ( {a=1,     b     =   2     }      ) {\n  function ugly ( {a=1,     b     =   2     }      ) {\n    function ugly ( {a=1,     b     =   2     }      ) {\n             \\`multiline template string\n              with too much indentation\\`;\n    }\n  }\n}\n\n`;\n\nexports[`range-end.js 1`] = `\n// Unchanged\ncall(\n  1, 2,3\n);\n\n\ncall(\n  1, 2,3\n);~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Unchanged\ncall(\n  1, 2,3\n);\n\n\ncall(1, 2, 3);\n`;\n\nexports[`range-start.js 1`] = `\ncall(\n  1, 2,3\n);\n\n\n// Unchanged\ncall(\n  1, 2,3\n);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ncall(1, 2, 3);\n\n\n// Unchanged\ncall(\n  1, 2,3\n);\n\n`;\n\nexports[`try-catch.js 1`] = `\ntry {}\ncatch (err) {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntry {\n} catch (err) {}\n\n`;\n\nexports[`whitespace.js 1`] = `\n \n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n \n\n`;\n"
  },
  {
    "path": "tests/range/class-declaration.js",
    "content": "\n\nclass   <<<PRETTIER_RANGE_START>>> a {\n  b(   ) {}<<<PRETTIER_RANGE_END>>>\n}\n\nlet    x"
  },
  {
    "path": "tests/range/different-levels.js",
    "content": "call(1,2,3)\ncall(1,<<<PRETTIER_RANGE_START>>>2,3)\nfunction f() {\n  call(1,<<<PRETTIER_RANGE_END>>>2,3)\n}\n"
  },
  {
    "path": "tests/range/function-declaration.js",
    "content": "function ugly ( <<<PRETTIER_RANGE_START>>>{a=1,     b     =   2     }<<<PRETTIER_RANGE_END>>>      ) {}\n"
  },
  {
    "path": "tests/range/ignore-indentation.js",
    "content": "function ugly ( {a=1,     b     =   2     }      ) {\n  function ugly ( {a=1,     b     =   2     }      ) {\n    function ugly ( {a=1,     b     =   2     }      ) {\n  \t  \t     `multiline template string\n              with <<<PRETTIER_RANGE_START>>>too<<<PRETTIER_RANGE_END>>> much indentation`\n    }\n  }\n}\n"
  },
  {
    "path": "tests/range/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/range/module-export1.js",
    "content": "import  def , {named}  from    'x'\n\nexport * <<<PRETTIER_RANGE_START>>> from   'd'<<<PRETTIER_RANGE_END>>>\n\nexport    const  x\n  =  42\n\nexport   default    42\n\n"
  },
  {
    "path": "tests/range/module-export2.js",
    "content": "import  def , {named}  from    'x'\n\nexport *  from   'd'\n<<<PRETTIER_RANGE_START>>>\nexport    const  x\n  <<<PRETTIER_RANGE_END>>>=  42\n\nexport   default    42\n\n"
  },
  {
    "path": "tests/range/module-export3.js",
    "content": "import  def , {named}  from    'x'\n\nexport *  from   'd'\n\nexport    const  x\n  =  42\n\nexport   default  <<<PRETTIER_RANGE_START>>>  42<<<PRETTIER_RANGE_END>>>\n\n"
  },
  {
    "path": "tests/range/module-import.js",
    "content": "import <<<PRETTIER_RANGE_START>>> def , {named} <<<PRETTIER_RANGE_END>>> from    'x'\n\nexport *  from   'd'\n\nexport    const  x\n  =  42\n\nexport   default    42\n\n"
  },
  {
    "path": "tests/range/multiple-statements.js",
    "content": "call(\n  1, 2,3\n);\n\ncall(\n  1, <<<PRETTIER_RANGE_START>>>2,3\n);\n\ncall(\n  1, <<<PRETTIER_RANGE_END>>>2,3\n);\n\ncall(\n  1, 2,3\n);\n"
  },
  {
    "path": "tests/range/multiple-statements2.js",
    "content": "call(\n  1, 2,3\n);\n<<<PRETTIER_RANGE_START>>>\ncall(\n  1, 2,3\n);\n\ncall(\n  1, 2,3\n);\n<<<PRETTIER_RANGE_END>>>\ncall(\n  1, 2,3\n);\n"
  },
  {
    "path": "tests/range/nested.js",
    "content": "<<<PRETTIER_RANGE_START>>>try {\n  if (condition) {\n    body\n  }<<<PRETTIER_RANGE_END>>>\n}\ncatch (err) {}\n"
  },
  {
    "path": "tests/range/nested2.js",
    "content": "try {\n  i<<<PRETTIER_RANGE_START>>>f (condition) {\n    body\n  }<<<PRETTIER_RANGE_END>>>\n}\ncatch (err) {}\n"
  },
  {
    "path": "tests/range/nested3.js",
    "content": "try {\n1;i<<<PRETTIER_RANGE_START>>>f (condition) {\n    body\n  }<<<PRETTIER_RANGE_END>>>\n}\ncatch (err) {}\n"
  },
  {
    "path": "tests/range/range-end.js",
    "content": "// Unchanged\ncall(\n  1, 2,3\n);\n\n<<<PRETTIER_RANGE_START>>>\ncall(\n  1, 2,3\n);<<<PRETTIER_RANGE_END>>>"
  },
  {
    "path": "tests/range/range-start.js",
    "content": "<<<PRETTIER_RANGE_START>>>call(\n  1, 2,3\n);\n<<<PRETTIER_RANGE_END>>>\n\n// Unchanged\ncall(\n  1, 2,3\n);\n"
  },
  {
    "path": "tests/range/range.js",
    "content": "function ugly ( {a=1,     b     =   2     }      ) {\n  function ugly ( {a=1,     b     =   2     }      ) {\n    function ugly ( {a=1,     b     =   2     }      ) {\n             `multiline template string\n              with <<<PRETTIER_RANGE_START>>>too<<<PRETTIER_RANGE_END>>> much indentation`\n    }\n  }\n}\n"
  },
  {
    "path": "tests/range/try-catch.js",
    "content": "try {}\n<<<PRETTIER_RANGE_START>>>c<<<PRETTIER_RANGE_END>>>atch (err) {}\n"
  },
  {
    "path": "tests/range/whitespace.js",
    "content": "<<<PRETTIER_RANGE_START>>> <<<PRETTIER_RANGE_END>>>\n"
  },
  {
    "path": "tests/range_css/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`issue2267.css 1`] = `\n.x{} \n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.x{} \n\n`;\n"
  },
  {
    "path": "tests/range_css/issue2267.css",
    "content": ".x{}<<<PRETTIER_RANGE_END>>> \n"
  },
  {
    "path": "tests/range_css/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/range_graphql/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`issue2296.graphql 1`] = `\n{NPC{life}}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n{\n  NPC {\n    life\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/range_graphql/issue2296.graphql",
    "content": "{NP<<<PRETTIER_RANGE_END>>>C{life}}\n"
  },
  {
    "path": "tests/range_graphql/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"graphql\" });\n"
  },
  {
    "path": "tests/range_json/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`identifier.json 1`] = `\n{\"a\":1, \"b\":2}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n{\"a\":1, \"b\":2}\n\n`;\n\nexports[`issue2297.json 1`] = `\n{\"a\":1, \"b\":2}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n{\"a\":1, \"b\":2}\n\n`;\n"
  },
  {
    "path": "tests/range_json/identifier.json",
    "content": "{<<<PRETTIER_RANGE_START>>>\"a\"<<<PRETTIER_RANGE_END>>>:1, \"b\":2}\n"
  },
  {
    "path": "tests/range_json/issue2297.json",
    "content": "{\"a\":<<<PRETTIER_RANGE_START>>>1<<<PRETTIER_RANGE_END>>>, \"b\":2}\n"
  },
  {
    "path": "tests/range_json/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"json\" });\n"
  },
  {
    "path": "tests/regex/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\n/[/]\\\\/\\\\u0aBc/mgi;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/[/]\\\\/\\\\u0aBc/gim;\n\n`;\n"
  },
  {
    "path": "tests/regex/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\", \"typescript\"]);\n"
  },
  {
    "path": "tests/regex/test.js",
    "content": "/[/]\\/\\u0aBc/mgi;\n"
  },
  {
    "path": "tests/require/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`require.js 1`] = `\nconst { one, two, thee, four, five, six, seven, eight, nine, ten } = require('./my-utils');\nconst { one, two, thee, four, five, six, seven, eight, nine, ten, eleven } = require('./my-utils');\n\nconst MyReallyExtrememlyLongModuleName = require('MyReallyExtrememlyLongModuleName');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst {\n  one,\n  two,\n  thee,\n  four,\n  five,\n  six,\n  seven,\n  eight,\n  nine,\n  ten\n} = require(\"./my-utils\");\nconst {\n  one,\n  two,\n  thee,\n  four,\n  five,\n  six,\n  seven,\n  eight,\n  nine,\n  ten,\n  eleven\n} = require(\"./my-utils\");\n\nconst MyReallyExtrememlyLongModuleName = require(\"MyReallyExtrememlyLongModuleName\");\n\n`;\n"
  },
  {
    "path": "tests/require/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/require/require.js",
    "content": "const { one, two, thee, four, five, six, seven, eight, nine, ten } = require('./my-utils');\nconst { one, two, thee, four, five, six, seven, eight, nine, ten, eleven } = require('./my-utils');\n\nconst MyReallyExtrememlyLongModuleName = require('MyReallyExtrememlyLongModuleName');\n"
  },
  {
    "path": "tests/rest/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`trailing-commas.js 1`] = `\ndeclare class C {\n  f(\n    superSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperLong,\n    ...args\n  ): void,\n}\n\nfunction f(\n  superSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperLong,\n  ...args\n) {}\n\ndeclare class C { f(...superSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperLong): void; }\n\n[superSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperLong,,];\n\n[veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLong, ...a] = [];\nvar {veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLong, ...a} = {};\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class C {\n  f(\n    superSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperLong,\n    ...args\n  ): void,\n}\n\nfunction f(\n  superSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperLong,\n  ...args\n) {}\n\ndeclare class C {\n  f(\n    ...superSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperLong\n  ): void,\n}\n\n[\n  superSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperLong,\n  ,\n];\n\n[\n  veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLong,\n  ...a\n] = [];\nvar {\n  veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLong,\n  ...a\n} = {};\n\n`;\n"
  },
  {
    "path": "tests/rest/jsfmt.spec.js",
    "content": "run_spec(__dirname, { trailingComma: \"all\" }, [\"babylon\"]);\n"
  },
  {
    "path": "tests/rest/trailing-commas.js",
    "content": "declare class C {\n  f(\n    superSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperLong,\n    ...args\n  ): void,\n}\n\nfunction f(\n  superSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperLong,\n  ...args\n) {}\n\ndeclare class C { f(...superSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperLong): void; }\n\n[superSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperSuperLong,,];\n\n[veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLong, ...a] = [];\nvar {veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLong, ...a} = {};\n\n"
  },
  {
    "path": "tests/return/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`binaryish.js 1`] = `\nfunction f() {\n  return (\n    property.isIdentifier() &&\n     FUNCTIONS[property.node.name] &&\n     (object.isIdentifier(JEST_GLOBAL) ||\n       (callee.isMemberExpression() && shouldHoistExpression(object))) &&\n    FUNCTIONS[property.node.name](expr.get('arguments'))\n  );\n\n  return (\n    chalk.bold(\n      'No tests found related to files changed since last commit.\\\\n',\n    ) +\n    chalk.dim(\n      patternInfo.watch ?\n        'Press \\`a\\` to run all tests, or run Jest with \\`--watchAll\\`.' :\n        'Run Jest without \\`-o\\` to run all tests.',\n    )\n  );\n\n  return !filePath.includes(coverageDirectory) &&\n    !filePath.endsWith(\\`.\\${SNAPSHOT_EXTENSION}\\`);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction f() {\n  return (\n    property.isIdentifier() &&\n    FUNCTIONS[property.node.name] &&\n    (object.isIdentifier(JEST_GLOBAL) ||\n      (callee.isMemberExpression() && shouldHoistExpression(object))) &&\n    FUNCTIONS[property.node.name](expr.get(\"arguments\"))\n  );\n\n  return (\n    chalk.bold(\"No tests found related to files changed since last commit.\\\\n\") +\n    chalk.dim(\n      patternInfo.watch\n        ? \"Press \\`a\\` to run all tests, or run Jest with \\`--watchAll\\`.\"\n        : \"Run Jest without \\`-o\\` to run all tests.\"\n    )\n  );\n\n  return (\n    !filePath.includes(coverageDirectory) &&\n    !filePath.endsWith(\\`.\\${SNAPSHOT_EXTENSION}\\`)\n  );\n}\n\n`;\n\nexports[`comment.js 1`] = `\nfunction f() {\n  return /* a */;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction f() {\n  return /* a */;\n}\n\n`;\n"
  },
  {
    "path": "tests/return/binaryish.js",
    "content": "function f() {\n  return (\n    property.isIdentifier() &&\n     FUNCTIONS[property.node.name] &&\n     (object.isIdentifier(JEST_GLOBAL) ||\n       (callee.isMemberExpression() && shouldHoistExpression(object))) &&\n    FUNCTIONS[property.node.name](expr.get('arguments'))\n  );\n\n  return (\n    chalk.bold(\n      'No tests found related to files changed since last commit.\\n',\n    ) +\n    chalk.dim(\n      patternInfo.watch ?\n        'Press `a` to run all tests, or run Jest with `--watchAll`.' :\n        'Run Jest without `-o` to run all tests.',\n    )\n  );\n\n  return !filePath.includes(coverageDirectory) &&\n    !filePath.endsWith(`.${SNAPSHOT_EXTENSION}`);\n}\n"
  },
  {
    "path": "tests/return/comment.js",
    "content": "function f() {\n  return /* a */;\n}\n"
  },
  {
    "path": "tests/return/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/return-outside-function/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`return-outside-function.js 1`] = `\nreturn someVeryLongStringA && someVeryLongStringB && someVeryLongStringC && someVeryLongStringD\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nreturn (\n  someVeryLongStringA &&\n  someVeryLongStringB &&\n  someVeryLongStringC &&\n  someVeryLongStringD\n);\n\n`;\n"
  },
  {
    "path": "tests/return-outside-function/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"babylon\" }, [\"typescript\"]);\n"
  },
  {
    "path": "tests/return-outside-function/return-outside-function.js",
    "content": "return someVeryLongStringA && someVeryLongStringB && someVeryLongStringC && someVeryLongStringD\n"
  },
  {
    "path": "tests/sequence_break/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`break.js 1`] = `\nconst f = (argument1, argument2, argument3) =>\n  (doSomethingWithArgument(argument1), doSomethingWithArgument(argument2),argument1);\n(function(){\n\treturn aLongIdentifierName, aLongIdentifierName, aLongIdentifierName, aLongIdentifierName;\n});\naLongIdentifierName, aLongIdentifierName, aLongIdentifierName, aLongIdentifierName;\na.then(() => (aLongIdentifierName, aLongIdentifierName, aLongIdentifierName, aLongIdentifierName));\nfor (aLongIdentifierName = 0, aLongIdentifierName = 0, aLongIdentifierName = 0, aLongIdentifierName = 0; test; update) {}\n(a = b ? c : function() { return 0; }),\n  (a = b ? c : function() { return 0; }),\n  (a = b ? c : function() { return 0; }),\n  (a = b ? c : function() { return 0; }),\n  (a = b ? c : function() { return 0; });\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst f = (argument1, argument2, argument3) => (\n  doSomethingWithArgument(argument1),\n  doSomethingWithArgument(argument2),\n  argument1\n);\n(function() {\n  return (\n    aLongIdentifierName,\n    aLongIdentifierName,\n    aLongIdentifierName,\n    aLongIdentifierName\n  );\n});\naLongIdentifierName,\n  aLongIdentifierName,\n  aLongIdentifierName,\n  aLongIdentifierName;\na.then(\n  () => (\n    aLongIdentifierName,\n    aLongIdentifierName,\n    aLongIdentifierName,\n    aLongIdentifierName\n  )\n);\nfor (\n  aLongIdentifierName = 0,\n    aLongIdentifierName = 0,\n    aLongIdentifierName = 0,\n    aLongIdentifierName = 0;\n  test;\n  update\n) {}\n(a = b\n  ? c\n  : function() {\n      return 0;\n    }),\n  (a = b\n    ? c\n    : function() {\n        return 0;\n      }),\n  (a = b\n    ? c\n    : function() {\n        return 0;\n      }),\n  (a = b\n    ? c\n    : function() {\n        return 0;\n      }),\n  (a = b\n    ? c\n    : function() {\n        return 0;\n      });\n\n`;\n"
  },
  {
    "path": "tests/sequence_break/break.js",
    "content": "const f = (argument1, argument2, argument3) =>\n  (doSomethingWithArgument(argument1), doSomethingWithArgument(argument2),argument1);\n(function(){\n\treturn aLongIdentifierName, aLongIdentifierName, aLongIdentifierName, aLongIdentifierName;\n});\naLongIdentifierName, aLongIdentifierName, aLongIdentifierName, aLongIdentifierName;\na.then(() => (aLongIdentifierName, aLongIdentifierName, aLongIdentifierName, aLongIdentifierName));\nfor (aLongIdentifierName = 0, aLongIdentifierName = 0, aLongIdentifierName = 0, aLongIdentifierName = 0; test; update) {}\n(a = b ? c : function() { return 0; }),\n  (a = b ? c : function() { return 0; }),\n  (a = b ? c : function() { return 0; }),\n  (a = b ? c : function() { return 0; }),\n  (a = b ? c : function() { return 0; });\n"
  },
  {
    "path": "tests/sequence_break/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/shebang/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`shebang.js 1`] = `\n#!/usr/bin/env node\nfunction a() {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n#!/usr/bin/env node\nfunction a() {}\n\n`;\n\nexports[`shebang-newline.js 1`] = `\n#!/usr/bin/env node\n\nfunction a() {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n#!/usr/bin/env node\n\nfunction a() {}\n\n`;\n"
  },
  {
    "path": "tests/shebang/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\", \"babylon\"]);\n"
  },
  {
    "path": "tests/shebang/shebang-newline.js",
    "content": "#!/usr/bin/env node\n\nfunction a() {}\n"
  },
  {
    "path": "tests/shebang/shebang.js",
    "content": "#!/usr/bin/env node\nfunction a() {}\n"
  },
  {
    "path": "tests/space-before-function-paren/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`eslint.js 1`] = `\n/*eslint space-before-function-paren: \"error\"*/\n/*eslint-env es6*/\n\nfunction foo() {\n    // ...\n}\n\nvar bar = function() {\n    // ...\n};\n\nvar bar = function foo() {\n    // ...\n};\n\nclass Foo {\n    constructor() {\n        // ...\n    }\n}\n\nvar foo = {\n    bar() {\n        // ...\n    }\n};\n\nvar foo = async() => 1\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/*eslint space-before-function-paren: \"error\"*/\n/*eslint-env es6*/\n\nfunction foo () {\n  // ...\n}\n\nvar bar = function () {\n  // ...\n};\n\nvar bar = function foo () {\n  // ...\n};\n\nclass Foo {\n  constructor () {\n    // ...\n  }\n}\n\nvar foo = {\n  bar () {\n    // ...\n  }\n};\n\nvar foo = async () => 1;\n\n`;\n"
  },
  {
    "path": "tests/space-before-function-paren/eslint.js",
    "content": "/*eslint space-before-function-paren: \"error\"*/\n/*eslint-env es6*/\n\nfunction foo() {\n    // ...\n}\n\nvar bar = function() {\n    // ...\n};\n\nvar bar = function foo() {\n    // ...\n};\n\nclass Foo {\n    constructor() {\n        // ...\n    }\n}\n\nvar foo = {\n    bar() {\n        // ...\n    }\n};\n\nvar foo = async() => 1\n"
  },
  {
    "path": "tests/space-before-function-paren/jsfmt.spec.js",
    "content": "run_spec(__dirname, { spaceBeforeFunctionParen: true }, [\n  \"babylon\",\n  \"typescript\"\n]);\n"
  },
  {
    "path": "tests/strings/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`strings.js 1`] = `\n[\n  \"abc\",\n  'abc',\n\n  '\\\\'',\n\n  '\"',\n  '\\\\\"',\n  '\\\\\\\\\"',\n\n  \"'\",\n  \"\\\\'\",\n  \"\\\\\\\\'\",\n\n  \"'\\\\\"\",\n  '\\\\'\"',\n\n  '\\\\\\\\',\n  \"\\\\\\\\\",\n\n  '\\\\0',\n  '🐶',\n\n  '\\\\uD801\\\\uDC28',\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n[\n  \"abc\",\n  \"abc\",\n\n  \"'\",\n\n  '\"',\n  '\"',\n  '\\\\\\\\\"',\n\n  \"'\",\n  \"'\",\n  \"\\\\\\\\'\",\n\n  \"'\\\\\"\",\n  \"'\\\\\"\",\n\n  \"\\\\\\\\\",\n  \"\\\\\\\\\",\n\n  \"\\\\0\",\n  \"🐶\",\n  \"\\\\uD801\\\\uDC28\"\n];\n\n`;\n\nexports[`strings.js 2`] = `\n[\n  \"abc\",\n  'abc',\n\n  '\\\\'',\n\n  '\"',\n  '\\\\\"',\n  '\\\\\\\\\"',\n\n  \"'\",\n  \"\\\\'\",\n  \"\\\\\\\\'\",\n\n  \"'\\\\\"\",\n  '\\\\'\"',\n\n  '\\\\\\\\',\n  \"\\\\\\\\\",\n\n  '\\\\0',\n  '🐶',\n\n  '\\\\uD801\\\\uDC28',\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n[\n  \"abc\",\n  \"abc\",\n\n  \"'\",\n\n  '\"',\n  '\"',\n  '\\\\\\\\\"',\n\n  \"'\",\n  \"'\",\n  \"\\\\\\\\'\",\n\n  \"'\\\\\"\",\n  \"'\\\\\"\",\n\n  \"\\\\\\\\\",\n  \"\\\\\\\\\",\n\n  \"\\\\0\",\n  \"🐶\",\n  \"\\\\uD801\\\\uDC28\",\n];\n\n`;\n\nexports[`template-literals.js 1`] = `\nfoo(\\`a long string \\${ 1 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 } with expr\\`);\n\nconst x = \\`a long string \\${ 1 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + ( function() {return 3 })() + 3 + 2 + 3 + 2 + 3 } with expr\\`;\n\nfoo(\\`a long string \\${ 1 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + ( function() {\n  const x = 5;\n\n  return x;\n })() + 3 + 2 + 3 + 2 + 3 } with expr\\`);\n\npipe.write(\n  \\`\\\\n  \\${chalk.dim(\\`\\\\u203A and \\${more} more \\${more} more \\${more} more \\${more}\\`)}\\`,\n);\n\n// https://github.com/prettier/prettier/issues/1662#issue-230406820\nconst content = \\`\nconst env = \\${ JSON.stringify({\n\tassetsRootUrl: env.assetsRootUrl,\n\tenv: env.env,\n\trole: \"client\",\n\tadsfafa: \"sdfsdff\",\n\tasdfasff: \"wefwefw\",\n  \tfefef: \"sf sdfs fdsfdsf s dfsfds\"\n}, null, \"\\\\t\") });\n\\`;\n\n// https://github.com/prettier/prettier/issues/821#issue-210557749\nf(\\`\\${{\n  a: 4,\n  b: 9,\n}}\\`);\n\n// https://github.com/prettier/prettier/issues/1183#issue-220863505\nconst makeBody = (store, assets, html) =>\n  \\`<!doctype html>\\${\n    ReactDOMServer.renderToStaticMarkup(\n      <Html\n        headScripts={compact([ assets.javascript.head ])}\n        headStyles={compact([ assets.styles.body, assets.styles.head ])}\n        bodyScripts={compact([ assets.javascript.body ])}\n        bodyStyles={[]}\n        stringScripts={[\n          \\`window.__INITIAL_STATE__ = \\${\n            JSON.stringify(store.getState(), null, 2)\n          };\\`,\n        ]}\n        content={[\n          { id: 'app-container', dangerouslySetInnerHTML: { __html: html } },\n        ]}\n      />\n    )\n  }\\`\n\n// https://github.com/prettier/prettier/issues/1626#issue-229655106\nconst Bar = styled.div\\`\n  color: \\${props => (props.highlight.length > 0 ? palette(['text', 'dark', 'tertiary'])(props) : palette(['text', 'dark', 'primary'])(props))} !important;\n\\`\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfoo(\n  \\`a long string \\${1 +\n    2 +\n    3 +\n    2 +\n    3 +\n    2 +\n    3 +\n    2 +\n    3 +\n    2 +\n    3 +\n    2 +\n    3 +\n    2 +\n    3 +\n    2 +\n    3} with expr\\`\n);\n\nconst x = \\`a long string \\${1 +\n  2 +\n  3 +\n  2 +\n  3 +\n  2 +\n  3 +\n  2 +\n  3 +\n  2 +\n  3 +\n  2 +\n  (function() {\n    return 3;\n  })() +\n  3 +\n  2 +\n  3 +\n  2 +\n  3} with expr\\`;\n\nfoo(\n  \\`a long string \\${1 +\n    2 +\n    3 +\n    2 +\n    3 +\n    2 +\n    3 +\n    2 +\n    3 +\n    2 +\n    3 +\n    2 +\n    (function() {\n      const x = 5;\n\n      return x;\n    })() +\n    3 +\n    2 +\n    3 +\n    2 +\n    3} with expr\\`\n);\n\npipe.write(\n  \\`\\\\n  \\${chalk.dim(\n    \\`\\\\u203A and \\${more} more \\${more} more \\${more} more \\${more}\\`\n  )}\\`\n);\n\n// https://github.com/prettier/prettier/issues/1662#issue-230406820\nconst content = \\`\nconst env = \\${JSON.stringify(\n  {\n    assetsRootUrl: env.assetsRootUrl,\n    env: env.env,\n    role: \"client\",\n    adsfafa: \"sdfsdff\",\n    asdfasff: \"wefwefw\",\n    fefef: \"sf sdfs fdsfdsf s dfsfds\"\n  },\n  null,\n  \"\\\\t\"\n)});\n\\`;\n\n// https://github.com/prettier/prettier/issues/821#issue-210557749\nf(\n  \\`\\${{\n    a: 4,\n    b: 9\n  }}\\`\n);\n\n// https://github.com/prettier/prettier/issues/1183#issue-220863505\nconst makeBody = (store, assets, html) =>\n  \\`<!doctype html>\\${ReactDOMServer.renderToStaticMarkup(\n    <Html\n      headScripts={compact([assets.javascript.head])}\n      headStyles={compact([assets.styles.body, assets.styles.head])}\n      bodyScripts={compact([assets.javascript.body])}\n      bodyStyles={[]}\n      stringScripts={[\n        \\`window.__INITIAL_STATE__ = \\${JSON.stringify(\n          store.getState(),\n          null,\n          2\n        )};\\`\n      ]}\n      content={[\n        { id: \"app-container\", dangerouslySetInnerHTML: { __html: html } }\n      ]}\n    />\n  )}\\`;\n\n// https://github.com/prettier/prettier/issues/1626#issue-229655106\nconst Bar = styled.div\\`\n  color: \\${props =>\n    props.highlight.length > 0\n      ? palette([\"text\", \"dark\", \"tertiary\"])(props)\n      : palette([\"text\", \"dark\", \"primary\"])(props)} !important;\n\\`;\n\n`;\n\nexports[`template-literals.js 2`] = `\nfoo(\\`a long string \\${ 1 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 } with expr\\`);\n\nconst x = \\`a long string \\${ 1 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + ( function() {return 3 })() + 3 + 2 + 3 + 2 + 3 } with expr\\`;\n\nfoo(\\`a long string \\${ 1 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + ( function() {\n  const x = 5;\n\n  return x;\n })() + 3 + 2 + 3 + 2 + 3 } with expr\\`);\n\npipe.write(\n  \\`\\\\n  \\${chalk.dim(\\`\\\\u203A and \\${more} more \\${more} more \\${more} more \\${more}\\`)}\\`,\n);\n\n// https://github.com/prettier/prettier/issues/1662#issue-230406820\nconst content = \\`\nconst env = \\${ JSON.stringify({\n\tassetsRootUrl: env.assetsRootUrl,\n\tenv: env.env,\n\trole: \"client\",\n\tadsfafa: \"sdfsdff\",\n\tasdfasff: \"wefwefw\",\n  \tfefef: \"sf sdfs fdsfdsf s dfsfds\"\n}, null, \"\\\\t\") });\n\\`;\n\n// https://github.com/prettier/prettier/issues/821#issue-210557749\nf(\\`\\${{\n  a: 4,\n  b: 9,\n}}\\`);\n\n// https://github.com/prettier/prettier/issues/1183#issue-220863505\nconst makeBody = (store, assets, html) =>\n  \\`<!doctype html>\\${\n    ReactDOMServer.renderToStaticMarkup(\n      <Html\n        headScripts={compact([ assets.javascript.head ])}\n        headStyles={compact([ assets.styles.body, assets.styles.head ])}\n        bodyScripts={compact([ assets.javascript.body ])}\n        bodyStyles={[]}\n        stringScripts={[\n          \\`window.__INITIAL_STATE__ = \\${\n            JSON.stringify(store.getState(), null, 2)\n          };\\`,\n        ]}\n        content={[\n          { id: 'app-container', dangerouslySetInnerHTML: { __html: html } },\n        ]}\n      />\n    )\n  }\\`\n\n// https://github.com/prettier/prettier/issues/1626#issue-229655106\nconst Bar = styled.div\\`\n  color: \\${props => (props.highlight.length > 0 ? palette(['text', 'dark', 'tertiary'])(props) : palette(['text', 'dark', 'primary'])(props))} !important;\n\\`\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfoo(\n  \\`a long string \\${1 +\n    2 +\n    3 +\n    2 +\n    3 +\n    2 +\n    3 +\n    2 +\n    3 +\n    2 +\n    3 +\n    2 +\n    3 +\n    2 +\n    3 +\n    2 +\n    3} with expr\\`,\n);\n\nconst x = \\`a long string \\${1 +\n  2 +\n  3 +\n  2 +\n  3 +\n  2 +\n  3 +\n  2 +\n  3 +\n  2 +\n  3 +\n  2 +\n  (function() {\n    return 3;\n  })() +\n  3 +\n  2 +\n  3 +\n  2 +\n  3} with expr\\`;\n\nfoo(\n  \\`a long string \\${1 +\n    2 +\n    3 +\n    2 +\n    3 +\n    2 +\n    3 +\n    2 +\n    3 +\n    2 +\n    3 +\n    2 +\n    (function() {\n      const x = 5;\n\n      return x;\n    })() +\n    3 +\n    2 +\n    3 +\n    2 +\n    3} with expr\\`,\n);\n\npipe.write(\n  \\`\\\\n  \\${chalk.dim(\n    \\`\\\\u203A and \\${more} more \\${more} more \\${more} more \\${more}\\`,\n  )}\\`,\n);\n\n// https://github.com/prettier/prettier/issues/1662#issue-230406820\nconst content = \\`\nconst env = \\${JSON.stringify(\n  {\n    assetsRootUrl: env.assetsRootUrl,\n    env: env.env,\n    role: \"client\",\n    adsfafa: \"sdfsdff\",\n    asdfasff: \"wefwefw\",\n    fefef: \"sf sdfs fdsfdsf s dfsfds\",\n  },\n  null,\n  \"\\\\t\",\n)});\n\\`;\n\n// https://github.com/prettier/prettier/issues/821#issue-210557749\nf(\n  \\`\\${{\n    a: 4,\n    b: 9,\n  }}\\`,\n);\n\n// https://github.com/prettier/prettier/issues/1183#issue-220863505\nconst makeBody = (store, assets, html) =>\n  \\`<!doctype html>\\${ReactDOMServer.renderToStaticMarkup(\n    <Html\n      headScripts={compact([assets.javascript.head])}\n      headStyles={compact([assets.styles.body, assets.styles.head])}\n      bodyScripts={compact([assets.javascript.body])}\n      bodyStyles={[]}\n      stringScripts={[\n        \\`window.__INITIAL_STATE__ = \\${JSON.stringify(\n          store.getState(),\n          null,\n          2,\n        )};\\`,\n      ]}\n      content={[\n        { id: \"app-container\", dangerouslySetInnerHTML: { __html: html } },\n      ]}\n    />,\n  )}\\`;\n\n// https://github.com/prettier/prettier/issues/1626#issue-229655106\nconst Bar = styled.div\\`\n  color: \\${props =>\n    props.highlight.length > 0\n      ? palette([\"text\", \"dark\", \"tertiary\"])(props)\n      : palette([\"text\", \"dark\", \"primary\"])(props)} !important;\n\\`;\n\n`;\n"
  },
  {
    "path": "tests/strings/jsfmt.spec.js",
    "content": "run_spec(__dirname);\nrun_spec(__dirname, { trailingComma: \"all\" });\n"
  },
  {
    "path": "tests/strings/strings.js",
    "content": "[\n  \"abc\",\n  'abc',\n\n  '\\'',\n\n  '\"',\n  '\\\"',\n  '\\\\\"',\n\n  \"'\",\n  \"\\'\",\n  \"\\\\'\",\n\n  \"'\\\"\",\n  '\\'\"',\n\n  '\\\\',\n  \"\\\\\",\n\n  '\\0',\n  '🐶',\n\n  '\\uD801\\uDC28',\n];\n"
  },
  {
    "path": "tests/strings/template-literals.js",
    "content": "foo(`a long string ${ 1 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 } with expr`);\n\nconst x = `a long string ${ 1 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + ( function() {return 3 })() + 3 + 2 + 3 + 2 + 3 } with expr`;\n\nfoo(`a long string ${ 1 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + 3 + 2 + ( function() {\n  const x = 5;\n\n  return x;\n })() + 3 + 2 + 3 + 2 + 3 } with expr`);\n\npipe.write(\n  `\\n  ${chalk.dim(`\\u203A and ${more} more ${more} more ${more} more ${more}`)}`,\n);\n\n// https://github.com/prettier/prettier/issues/1662#issue-230406820\nconst content = `\nconst env = ${ JSON.stringify({\n\tassetsRootUrl: env.assetsRootUrl,\n\tenv: env.env,\n\trole: \"client\",\n\tadsfafa: \"sdfsdff\",\n\tasdfasff: \"wefwefw\",\n  \tfefef: \"sf sdfs fdsfdsf s dfsfds\"\n}, null, \"\\t\") });\n`;\n\n// https://github.com/prettier/prettier/issues/821#issue-210557749\nf(`${{\n  a: 4,\n  b: 9,\n}}`);\n\n// https://github.com/prettier/prettier/issues/1183#issue-220863505\nconst makeBody = (store, assets, html) =>\n  `<!doctype html>${\n    ReactDOMServer.renderToStaticMarkup(\n      <Html\n        headScripts={compact([ assets.javascript.head ])}\n        headStyles={compact([ assets.styles.body, assets.styles.head ])}\n        bodyScripts={compact([ assets.javascript.body ])}\n        bodyStyles={[]}\n        stringScripts={[\n          `window.__INITIAL_STATE__ = ${\n            JSON.stringify(store.getState(), null, 2)\n          };`,\n        ]}\n        content={[\n          { id: 'app-container', dangerouslySetInnerHTML: { __html: html } },\n        ]}\n      />\n    )\n  }`\n\n// https://github.com/prettier/prettier/issues/1626#issue-229655106\nconst Bar = styled.div`\n  color: ${props => (props.highlight.length > 0 ? palette(['text', 'dark', 'tertiary'])(props) : palette(['text', 'dark', 'primary'])(props))} !important;\n`\n"
  },
  {
    "path": "tests/stylefmt/at-apply/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`at-apply.css 1`] = `\n.toolbar{@apply   --toolbar-theme   ;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.toolbar {\n  @apply --toolbar-theme;\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/at-apply/at-apply.css",
    "content": ".toolbar{@apply   --toolbar-theme   ;\n}\n"
  },
  {
    "path": "tests/stylefmt/at-apply/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/at-media/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`at-media.css 1`] = `\n@media   (    max-width:600px    )      {}\n@media   (   min-width:700px) and (     orientation:    landscape){}\n@media (min-width: 700px), handheld and (orientation: landscape) {}\n@media    not      all     and (   monochrome    ) {}\n@media (   not     all    )    and     (   monochrome        ) {}\n@media (  not (   screen     and   (  color  )  )   )  ,   print and   (  color ){}\n@media    screen   and (   device-aspect-ratio:     16/9   ),   screen    and (device-aspect-ratio:16/10  ) {}\n\n@media   (  -webkit-min-device-pixel-ratio:2),\n         (min--moz-device-pixel-ratio: 2        ),\n         (min-resolution:           2dppx),\n         (min-resolution: 192dpi     ){}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@media (max-width: 600px) {\n}\n@media (min-width: 700px) and (orientation: landscape) {\n}\n@media (min-width: 700px), handheld and (orientation: landscape) {\n}\n@media not all and (monochrome) {\n}\n@media (not all) and (monochrome) {\n}\n@media (not ( screen and ( color ) )), print and (color) {\n}\n@media screen and (device-aspect-ratio: 16/9),\n  screen and (device-aspect-ratio: 16/10) {\n}\n\n@media (-webkit-min-device-pixel-ratio: 2),\n  (min--moz-device-pixel-ratio: 2),\n  (min-resolution: 2dppx),\n  (min-resolution: 192dpi) {\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/at-media/at-media.css",
    "content": "@media   (    max-width:600px    )      {}\n@media   (   min-width:700px) and (     orientation:    landscape){}\n@media (min-width: 700px), handheld and (orientation: landscape) {}\n@media    not      all     and (   monochrome    ) {}\n@media (   not     all    )    and     (   monochrome        ) {}\n@media (  not (   screen     and   (  color  )  )   )  ,   print and   (  color ){}\n@media    screen   and (   device-aspect-ratio:     16/9   ),   screen    and (device-aspect-ratio:16/10  ) {}\n\n@media   (  -webkit-min-device-pixel-ratio:2),\n         (min--moz-device-pixel-ratio: 2        ),\n         (min-resolution:           2dppx),\n         (min-resolution: 192dpi     ){}\n"
  },
  {
    "path": "tests/stylefmt/at-media/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/attr-selector/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`attr-selector.css 1`] = `\n[  data-sizes~=\"m:0\" ]    {\n  color:pink;\n}\n\n[ class*=\"test\" ]{\n  color: silver}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n[  data-sizes~=\"m:0\" ] {\n  color: pink;\n}\n\n[ class*=\"test\" ] {\n  color: silver;\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/attr-selector/attr-selector.css",
    "content": "[  data-sizes~=\"m:0\" ]    {\n  color:pink;\n}\n\n[ class*=\"test\" ]{\n  color: silver}\n"
  },
  {
    "path": "tests/stylefmt/attr-selector/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/charset/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`charset.css 1`] = `\n@charset \"utf-8\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@charset \"utf-8\";\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/charset/charset.css",
    "content": "@charset \"utf-8\";\n"
  },
  {
    "path": "tests/stylefmt/charset/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/charset-2/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`charset-2.css 1`] = `\n@charset \"utf-8\" ;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@charset \"utf-8\";\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/charset-2/charset-2.css",
    "content": "@charset \"utf-8\" ;\n"
  },
  {
    "path": "tests/stylefmt/charset-2/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/color-hex-lowercase/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`color-hex-lowercase.css 1`] = `\n.foo{color:#ABCDEF}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.foo {\n  color: #abcdef;\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/color-hex-lowercase/color-hex-lowercase.css",
    "content": ".foo{color:#ABCDEF}\n"
  },
  {
    "path": "tests/stylefmt/color-hex-lowercase/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/comment/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`comment.css 1`] = `\n/**\n * comment\n */\n\n.class\n{\n  padding:10px; }\n/*comment*/\n\n\n.foo{color:red\n}\n\n\n/*\n  at rule\n */\n\n\n@media only screen {\n  /* inner at rule comment */\n  .foo { display: none; }\n\n  /*\n   * another comment\n   */\n   /* in a row */\n\n.bar {\n  color:yellow;\n}\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/**\n * comment\n */\n\n.class {\n  padding: 10px;\n}\n/*comment*/\n\n.foo {\n  color: red;\n}\n\n/*\n  at rule\n */\n\n@media only screen {\n  /* inner at rule comment */\n  .foo {\n    display: none;\n  }\n\n  /*\n   * another comment\n   */\n  /* in a row */\n\n  .bar {\n    color: yellow;\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/comment/comment.css",
    "content": "/**\n * comment\n */\n\n.class\n{\n  padding:10px; }\n/*comment*/\n\n\n.foo{color:red\n}\n\n\n/*\n  at rule\n */\n\n\n@media only screen {\n  /* inner at rule comment */\n  .foo { display: none; }\n\n  /*\n   * another comment\n   */\n   /* in a row */\n\n.bar {\n  color:yellow;\n}\n}\n"
  },
  {
    "path": "tests/stylefmt/comment/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/comment-in-rules/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`comment-in-rules.css 1`] = `\n.class\n{display: inline-block;\n/* comment */\nfloat: left;}\n\n#id {\n  font-size: 12px;\n\n  /* colors */\n\n  color: pink;\n  background: #fff;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.class {\n  display: inline-block;\n  /* comment */\n  float: left;\n}\n\n#id {\n  font-size: 12px;\n\n  /* colors */\n\n  color: pink;\n  background: #fff;\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/comment-in-rules/comment-in-rules.css",
    "content": ".class\n{display: inline-block;\n/* comment */\nfloat: left;}\n\n#id {\n  font-size: 12px;\n\n  /* colors */\n\n  color: pink;\n  background: #fff;\n}\n"
  },
  {
    "path": "tests/stylefmt/comment-in-rules/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/content/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`content.css 1`] = `\n  div {content: \"  test 1/2  \";   content:'  test   1+2';\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndiv {\n  content: \"  test 1/2  \";\n  content: '  test   1+2';\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/content/content.css",
    "content": "  div {content: \"  test 1/2  \";   content:'  test   1+2';\n}\n"
  },
  {
    "path": "tests/stylefmt/content/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/cssnext-example/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`cssnext-example.css 1`] = `\n/* custom properties */\n:root{--fontSize: 1rem;\n  --mainColor       :#12345678;\n--highlightColor:hwb(190, 35%, 20%);\n}\n\n/* custom media queries */\n@custom-media\n\n--viewport-medium(width<=50rem);\n\n/* some var() & calc() */\nbody{color:var(--mainColor);\n    font-size:var(--fontSize);\n line-height: calc(var(--fontSize) * 1.5);\npadding: calc((var(--fontSize) / 2) + 1px)}\n\n/* custom media query usage */\n@media (--viewport-medium) {\nbody {font-size: calc(var(--fontSize) * 1.2); }\n}\n/* custom selectors */\n@custom-selector :--heading h1,h2,h3,    h4,h5,h6;\n:--heading { margin-top:0 }\n\n/* colors stuff */\na{\ncolor:var(--highlightColor);\n    transition:color 1s;\n}\na:hover{color  :gray(255,50%) }\na:active{color : rebeccapurple }\na:any-link { color:color(var(--highlightColor) blackness(+20%)) }\n\n/* font stuff */\nh2 {font-variant-caps:small-caps;\n}table{font-variant-numeric: lining-nums;\n}\n/* filters */\n.blur{filter:blur(4px)}.sepia{\nfilter: sepia(.8);}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* custom properties */\n:root {\n  --fontSize: 1rem;\n  --mainColor: #12345678;\n  --highlightColor: hwb(190, 35%, 20%);\n}\n\n/* custom media queries */\n@custom-media --viewport-medium(width<=50rem);\n\n/* some var() & calc() */\nbody {\n  color: var(--mainColor);\n  font-size: var(--fontSize);\n  line-height: calc(var(--fontSize) * 1.5);\n  padding: calc((var(--fontSize) / 2) + 1px);\n}\n\n/* custom media query usage */\n@media (--viewport-medium) {\n  body {\n    font-size: calc(var(--fontSize) * 1.2);\n  }\n}\n/* custom selectors */\n@custom-selector :--heading h1, h2, h3, h4, h5, h6;\n:--heading {\n  margin-top: 0;\n}\n\n/* colors stuff */\na {\n  color: var(--highlightColor);\n  transition: color 1s;\n}\na:hover {\n  color: gray(255, 50%);\n}\na:active {\n  color: rebeccapurple;\n}\na:any-link {\n  color: color(var(--highlightColor) blackness(+20%));\n}\n\n/* font stuff */\nh2 {\n  font-variant-caps: small-caps;\n}\ntable {\n  font-variant-numeric: lining-nums;\n}\n/* filters */\n.blur {\n  filter: blur(4px);\n}\n.sepia {\n  filter: sepia(.8);\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/cssnext-example/cssnext-example.css",
    "content": "/* custom properties */\n:root{--fontSize: 1rem;\n  --mainColor       :#12345678;\n--highlightColor:hwb(190, 35%, 20%);\n}\n\n/* custom media queries */\n@custom-media\n\n--viewport-medium(width<=50rem);\n\n/* some var() & calc() */\nbody{color:var(--mainColor);\n    font-size:var(--fontSize);\n line-height: calc(var(--fontSize) * 1.5);\npadding: calc((var(--fontSize) / 2) + 1px)}\n\n/* custom media query usage */\n@media (--viewport-medium) {\nbody {font-size: calc(var(--fontSize) * 1.2); }\n}\n/* custom selectors */\n@custom-selector :--heading h1,h2,h3,    h4,h5,h6;\n:--heading { margin-top:0 }\n\n/* colors stuff */\na{\ncolor:var(--highlightColor);\n    transition:color 1s;\n}\na:hover{color  :gray(255,50%) }\na:active{color : rebeccapurple }\na:any-link { color:color(var(--highlightColor) blackness(+20%)) }\n\n/* font stuff */\nh2 {font-variant-caps:small-caps;\n}table{font-variant-numeric: lining-nums;\n}\n/* filters */\n.blur{filter:blur(4px)}.sepia{\nfilter: sepia(.8);}\n"
  },
  {
    "path": "tests/stylefmt/cssnext-example/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/custom-media-queries/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`custom-media-queries.css 1`] = `\n@custom-media     --small-viewport ( max-width:30em   )\n\n\n;\n\n@media (      --small-viewport    ){\n.rule{color:blue;}\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@custom-media --small-viewport (max-width: 30em);\n\n@media (--small-viewport) {\n  .rule {\n    color: blue;\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/custom-media-queries/custom-media-queries.css",
    "content": "@custom-media     --small-viewport ( max-width:30em   )\n\n\n;\n\n@media (      --small-viewport    ){\n.rule{color:blue;}\n}\n"
  },
  {
    "path": "tests/stylefmt/custom-media-queries/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/custom-properties/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`custom-properties.css 1`] = `\n:root{--mainColor:#123456}\na{color:var(        --mainColor     )     ; }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n:root {\n  --mainColor: #123456;\n}\na {\n  color: var(--mainColor);\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/custom-properties/custom-properties.css",
    "content": ":root{--mainColor:#123456}\na{color:var(        --mainColor     )     ; }\n"
  },
  {
    "path": "tests/stylefmt/custom-properties/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/custom-selectors/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`custom-selectors.css 1`] = `\n@custom-selector  :--button     button,.button;\n@custom-selector       :--enter     :hover,:focus      ;\n\n:--button {display: inline-block;\n}:--button:--enter{\n  text-decoration:underline;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@custom-selector :--button button, .button;\n@custom-selector :--enter :hover, :focus;\n\n:--button {\n  display: inline-block;\n}\n:--button:--enter {\n  text-decoration: underline;\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/custom-selectors/custom-selectors.css",
    "content": "@custom-selector  :--button     button,.button;\n@custom-selector       :--enter     :hover,:focus      ;\n\n:--button {display: inline-block;\n}:--button:--enter{\n  text-decoration:underline;\n}\n"
  },
  {
    "path": "tests/stylefmt/custom-selectors/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/data-url/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`data-url.css 1`] = `\ndiv {\n  background-image: url(data:image/png;base64,iVBORw0KGg);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndiv {\n  background-image: url(data:image/png;base64,iVBORw0KGg);\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/data-url/data-url.css",
    "content": "div {\n  background-image: url(data:image/png;base64,iVBORw0KGg);\n}\n"
  },
  {
    "path": "tests/stylefmt/data-url/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/font-face/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`font-face.css 1`] = `\n @font-face          {font-family:'HelveticaNeueW02-45Ligh';src:url(\"/fonts/pictos-web.eot\");src:local(\"☺\"),url(\"/fonts/pictos-web.woff\") format(\"woff\"),url(\"/fonts/pictos-web.ttf\") format(\"truetype\"),url(\"/fonts/pictos-web.svg#webfontIyfZbseF\") format(\"svg\");font-weight:normal;font-style:normal;}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@font-face {\n  font-family: 'HelveticaNeueW02-45Ligh';\n  src: url(\"/fonts/pictos-web.eot\");\n  src: local(\"☺\"), url(\"/fonts/pictos-web.woff\") format(\"woff\"),\n    url(\"/fonts/pictos-web.ttf\") format(\"truetype\"),\n    url(\"/fonts/pictos-web.svg#webfontIyfZbseF\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal;\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/font-face/font-face.css",
    "content": " @font-face          {font-family:'HelveticaNeueW02-45Ligh';src:url(\"/fonts/pictos-web.eot\");src:local(\"☺\"),url(\"/fonts/pictos-web.woff\") format(\"woff\"),url(\"/fonts/pictos-web.ttf\") format(\"truetype\"),url(\"/fonts/pictos-web.svg#webfontIyfZbseF\") format(\"svg\");font-weight:normal;font-style:normal;}\n"
  },
  {
    "path": "tests/stylefmt/font-face/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/font-shorthand/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`font-shorthand.css 1`] = `\n.class {\n  font: normal normal 24px/1 \"myfont\";font: normal normal normal 12px/20px myfont;\n  font:normal 300 0.875em/1.3  \"myfont\", sans-serif;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.class {\n  font: normal normal 24px/1 \"myfont\";\n  font: normal normal normal 12px/20px myfont;\n  font: normal 300 0.875em/1.3 \"myfont\", sans-serif;\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/font-shorthand/font-shorthand.css",
    "content": ".class {\n  font: normal normal 24px/1 \"myfont\";font: normal normal normal 12px/20px myfont;\n  font:normal 300 0.875em/1.3  \"myfont\", sans-serif;\n}\n"
  },
  {
    "path": "tests/stylefmt/font-shorthand/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/ie-hacks/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`ie-hacks.css 1`] = `\n* html p {font-size: 5em; }\n.class {\n*zoom: 1;_width: 200px;\n+color:red;\n*+color:red;\ncolor:red\\\\9;\ncolor:red\\\\0;\ncolor:red\\\\9\\\\0;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n* html p {\n  font-size: 5em;\n}\n.class {\n  *zoom: 1;\n  _width: 200px;\n  +color: red;\n  *+color: red;\n  color: red\\\\9;\n  color: red\\\\0;\n  color: red\\\\9\\\\0;\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/ie-hacks/ie-hacks.css",
    "content": "* html p {font-size: 5em; }\n.class {\n*zoom: 1;_width: 200px;\n+color:red;\n*+color:red;\ncolor:red\\9;\ncolor:red\\0;\ncolor:red\\9\\0;\n}\n"
  },
  {
    "path": "tests/stylefmt/ie-hacks/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/import/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`import.css 1`] = `\n        @import         \"./settings\"    ;\n\n\n@import      \"./components\" ;@import \"./themes\";\n.class{float: left;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@import \"./settings\";\n\n@import \"./components\";\n@import \"./themes\";\n.class {\n  float: left;\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/import/import.css",
    "content": "        @import         \"./settings\"    ;\n\n\n@import      \"./components\" ;@import \"./themes\";\n.class{float: left;\n}\n"
  },
  {
    "path": "tests/stylefmt/import/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/important/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`important.css 1`] = `\n.class {\n  color: red   !   important;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.class {\n  color: red !important;\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/important/important.css",
    "content": ".class {\n  color: red   !   important;\n}\n"
  },
  {
    "path": "tests/stylefmt/important/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/inline-comment/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`inline-comment.css 1`] = `\n\n  // inline comments\n\n\n\n    .class {color: red;}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// inline comments\n\n.class {\n  color: red;\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/inline-comment/inline-comment.css",
    "content": "\n  // inline comments\n\n\n\n    .class {color: red;}\n"
  },
  {
    "path": "tests/stylefmt/inline-comment/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/lowercase/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`lowercase.css 1`] = `\n@charset \"UTF-8\";\n\n$myVar: TRANSLATEX(0);\n$myVar2: RGB(255,255,255);\n$myVar3: MAROON;\n$myVar4: HSLA(120,100%,50%,0.3);\n$myVar5: RGBA(0,0,0,0.5);\n$myVar6: HSL(120,100%,50%);\n$myVar7: linear-gradient(to right, RGBA(0,0,0,0.5), RGB(255,255,255));\n\n.class-1 {\n  BACKGROUND: HSL(120, 100%, 50%);\n  BACKGROUND: linear-gradient(to right, $myVar2, RGB(255,255,255));\n  COLOR: RGB(0, 0, 0);\n  TRANSFORM: TRANSLATE(0,0) TRANSLATEX(0) TRANSLATEY(0) TRANSLATEZ(0) TRANSLATE3D(0,0,0) MATRIX(1,1,1,1);\n  TRANSFORM: TRANSLATE(0,0);\n  TRANSFORM: TRANSLATEX(0);\n  TRANSFORM: TRANSLATEY(0);\n  TRANSFORM: TRANSLATE3D(0,0,0);\n  TRANSFORM: MATRIX(1,1,1,1);\n  transform: translateY(0) $myVar;\n  animation: textAnimation 0.1s;\n  animation: tAnimation 0.1s;\n}\n\n.class-2 {\n  BACKGROUND-COLOR: INDIGO;\n  BACKGROUND: HSLA(120, 100%, 50%, 0.3);\n  COLOR: RGBA(0, 0, 0, 0.5);\n  TRANSFORM: ROTATE(1deg) ROTATEX(1deg) ROTATEY(1deg) ROTATEZ(1deg) ROTATE3D(0,0,1,1deg) SKEW(1deg) SKEWX(1deg) SKEWY(1deg) SCALE(1, 1) SCALEX(1) SCALEY(1);\n  TRANSFORM: ROTATE(1deg);\n  TRANSFORM: ROTATEX(1deg);\n  TRANSFORM: ROTATEY(1deg);\n  TRANSFORM: ROTATEZ(1deg);\n  TRANSFORM: ROTATE3D(0,0,1,1deg);\n  TRANSFORM: SKEW(1deg);\n  TRANSFORM: SKEWX(1deg);\n  TRANSFORM: SKEWY(1deg);\n  TRANSFORM: SCALE(1, 1);\n  TRANSFORM: SCALEX(1);\n  TRANSFORM: SCALEY(1);\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@charset \"UTF-8\";\n\n$myVar: TRANSLATEX(0);\n$myVar2: RGB(255, 255, 255);\n$myVar3: MAROON;\n$myVar4: HSLA(120, 100%, 50%, 0.3);\n$myVar5: RGBA(0, 0, 0, 0.5);\n$myVar6: HSL(120, 100%, 50%);\n$myVar7: linear-gradient(to right, RGBA(0, 0, 0, 0.5), RGB(255, 255, 255));\n\n.class-1 {\n  BACKGROUND: HSL(120, 100%, 50%);\n  BACKGROUND: linear-gradient(to right, $myVar2, RGB(255, 255, 255));\n  COLOR: RGB(0, 0, 0);\n  TRANSFORM: TRANSLATE(0, 0) TRANSLATEX(0) TRANSLATEY(0) TRANSLATEZ(0)\n    TRANSLATE3D(0, 0, 0) MATRIX(1, 1, 1, 1);\n  TRANSFORM: TRANSLATE(0, 0);\n  TRANSFORM: TRANSLATEX(0);\n  TRANSFORM: TRANSLATEY(0);\n  TRANSFORM: TRANSLATE3D(0, 0, 0);\n  TRANSFORM: MATRIX(1, 1, 1, 1);\n  transform: translateY(0) $myVar;\n  animation: textAnimation 0.1s;\n  animation: tAnimation 0.1s;\n}\n\n.class-2 {\n  BACKGROUND-COLOR: INDIGO;\n  BACKGROUND: HSLA(120, 100%, 50%, 0.3);\n  COLOR: RGBA(0, 0, 0, 0.5);\n  TRANSFORM: ROTATE(1deg) ROTATEX(1deg) ROTATEY(1deg) ROTATEZ(1deg)\n    ROTATE3D(0, 0, 1, 1deg) SKEW(1deg) SKEWX(1deg) SKEWY(1deg) SCALE(1, 1)\n    SCALEX(1) SCALEY(1);\n  TRANSFORM: ROTATE(1deg);\n  TRANSFORM: ROTATEX(1deg);\n  TRANSFORM: ROTATEY(1deg);\n  TRANSFORM: ROTATEZ(1deg);\n  TRANSFORM: ROTATE3D(0, 0, 1, 1deg);\n  TRANSFORM: SKEW(1deg);\n  TRANSFORM: SKEWX(1deg);\n  TRANSFORM: SKEWY(1deg);\n  TRANSFORM: SCALE(1, 1);\n  TRANSFORM: SCALEX(1);\n  TRANSFORM: SCALEY(1);\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/lowercase/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/lowercase/lowercase.css",
    "content": "@charset \"UTF-8\";\n\n$myVar: TRANSLATEX(0);\n$myVar2: RGB(255,255,255);\n$myVar3: MAROON;\n$myVar4: HSLA(120,100%,50%,0.3);\n$myVar5: RGBA(0,0,0,0.5);\n$myVar6: HSL(120,100%,50%);\n$myVar7: linear-gradient(to right, RGBA(0,0,0,0.5), RGB(255,255,255));\n\n.class-1 {\n  BACKGROUND: HSL(120, 100%, 50%);\n  BACKGROUND: linear-gradient(to right, $myVar2, RGB(255,255,255));\n  COLOR: RGB(0, 0, 0);\n  TRANSFORM: TRANSLATE(0,0) TRANSLATEX(0) TRANSLATEY(0) TRANSLATEZ(0) TRANSLATE3D(0,0,0) MATRIX(1,1,1,1);\n  TRANSFORM: TRANSLATE(0,0);\n  TRANSFORM: TRANSLATEX(0);\n  TRANSFORM: TRANSLATEY(0);\n  TRANSFORM: TRANSLATE3D(0,0,0);\n  TRANSFORM: MATRIX(1,1,1,1);\n  transform: translateY(0) $myVar;\n  animation: textAnimation 0.1s;\n  animation: tAnimation 0.1s;\n}\n\n.class-2 {\n  BACKGROUND-COLOR: INDIGO;\n  BACKGROUND: HSLA(120, 100%, 50%, 0.3);\n  COLOR: RGBA(0, 0, 0, 0.5);\n  TRANSFORM: ROTATE(1deg) ROTATEX(1deg) ROTATEY(1deg) ROTATEZ(1deg) ROTATE3D(0,0,1,1deg) SKEW(1deg) SKEWX(1deg) SKEWY(1deg) SCALE(1, 1) SCALEX(1) SCALEY(1);\n  TRANSFORM: ROTATE(1deg);\n  TRANSFORM: ROTATEX(1deg);\n  TRANSFORM: ROTATEY(1deg);\n  TRANSFORM: ROTATEZ(1deg);\n  TRANSFORM: ROTATE3D(0,0,1,1deg);\n  TRANSFORM: SKEW(1deg);\n  TRANSFORM: SKEWX(1deg);\n  TRANSFORM: SKEWY(1deg);\n  TRANSFORM: SCALE(1, 1);\n  TRANSFORM: SCALEX(1);\n  TRANSFORM: SCALEY(1);\n}\n"
  },
  {
    "path": "tests/stylefmt/media-indent/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`media-indent.css 1`] = `\n.foo {\n    @media(max-width:1000px)\n    {\n        display: none;\n          }\n        }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.foo {\n  @media (max-width: 1000px) {\n    display: none;\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/media-indent/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/media-indent/media-indent.css",
    "content": ".foo {\n    @media(max-width:1000px)\n    {\n        display: none;\n          }\n        }\n"
  },
  {
    "path": "tests/stylefmt/media-indent-with-import/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`media-indent-with-import.css 1`] = `\n@import \"foo\";@import \"bar\";\n.wrapper {\n@media (min-width: 1025px) {\nmax-width: 600px;\n}\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@import \"foo\";\n@import \"bar\";\n.wrapper {\n  @media (min-width: 1025px) {\n    max-width: 600px;\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/media-indent-with-import/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/media-indent-with-import/media-indent-with-import.css",
    "content": "@import \"foo\";@import \"bar\";\n.wrapper {\n@media (min-width: 1025px) {\nmax-width: 600px;\n}\n}\n"
  },
  {
    "path": "tests/stylefmt/media-queries-ranges/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`media-queries-ranges.css 1`] = `\n@media (width >= 500px) and (width <= 1200px) {\n  .rule {color:red;}\n}\n@custom-media --only-medium-screen (    width    >=500px     ) and (width<=    1200px    ) ;\n@media (       --only-medium-screen ){\n  .rule{color:blue;}}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@media (width >= 500px) and (width <= 1200px) {\n  .rule {\n    color: red;\n  }\n}\n@custom-media --only-medium-screen (width >=500px) and (width<= 1200px);\n@media (--only-medium-screen) {\n  .rule {\n    color: blue;\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/media-queries-ranges/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/media-queries-ranges/media-queries-ranges.css",
    "content": "@media (width >= 500px) and (width <= 1200px) {\n  .rule {color:red;}\n}\n@custom-media --only-medium-screen (    width    >=500px     ) and (width<=    1200px    ) ;\n@media (       --only-medium-screen ){\n  .rule{color:blue;}}\n"
  },
  {
    "path": "tests/stylefmt/nested/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`nested.css 1`] = `\n     .foo {font-size   :12px      ;\n\n\n  >.nested-1\n \n  {\npadding: 10px;   .nested-2-1{\n      color       :      red     ;\n    }\n           +      .nested-2-2      {\n  color:blue;  }}\n\n\n\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.foo {\n  font-size: 12px;\n\n  > .nested-1 {\n    padding: 10px;\n    .nested-2-1 {\n      color: red;\n    }\n    + .nested-2-2 {\n      color: blue;\n    }\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/nested/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/nested/nested.css",
    "content": "     .foo {font-size   :12px      ;\n\n\n  >.nested-1\n \n  {\npadding: 10px;   .nested-2-1{\n      color       :      red     ;\n    }\n           +      .nested-2-2      {\n  color:blue;  }}\n\n\n\n}\n"
  },
  {
    "path": "tests/stylefmt/nested-2/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`nested-2.css 1`] = `\n.btn {&:hover {\n    color: red;\n  }&:active {\ncolor:blue;}  &:nth-child(5n+1) {\n    color:blue;\n  }\n  &:nth-child(-n+3) { color: green;}\n> li > a {   color: red}  >li>li {\n  color: blue;\n  }\n> p + p {\n    color: green;\n  }\n  }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.btn {\n  &:hover {\n    color: red;\n  }\n  &:active {\n    color: blue;\n  }\n  &:nth-child(5n + 1) {\n    color: blue;\n  }\n  &:nth-child(-n + 3) {\n    color: green;\n  }\n  > li > a {\n    color: red;\n  }\n  > li > li {\n    color: blue;\n  }\n  > p + p {\n    color: green;\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/nested-2/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/nested-2/nested-2.css",
    "content": ".btn {&:hover {\n    color: red;\n  }&:active {\ncolor:blue;}  &:nth-child(5n+1) {\n    color:blue;\n  }\n  &:nth-child(-n+3) { color: green;}\n> li > a {   color: red}  >li>li {\n  color: blue;\n  }\n> p + p {\n    color: green;\n  }\n  }\n"
  },
  {
    "path": "tests/stylefmt/nested-atrule/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`nested-atrule.css 1`] = `\n@media (min-width: 992px){@media (max-width: 1200px) {\n.container\n\n{position: absolute\n    }}\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@media (min-width: 992px) {\n  @media (max-width: 1200px) {\n    .container {\n      position: absolute;\n    }\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/nested-atrule/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/nested-atrule/nested-atrule.css",
    "content": "@media (min-width: 992px){@media (max-width: 1200px) {\n.container\n\n{position: absolute\n    }}\n}\n"
  },
  {
    "path": "tests/stylefmt/nested-indention/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`nested-indention.css 1`] = `\n.y-photo-grid\n{\n    display: flex;\n    width: 100%;\n    margin: 0;\n    padding: 0;\n    flex-direction: column;\n    align-items: stretch;\n    justify-content: flex-start;\n\n    &__row\n    {\n        display: flex;\n        width: 100%;\n        margin: 0;\n        padding: 0;\n        flex-direction: row;\n        align-items: center;\n        justify-content: flex-start;\n    }\n\n    &__item\n    {\n        display: block;\n        margin: 0;\n        background: #eee;\n\n        &:first-child\n        {\n            margin-left: 0;\n        }\n    }\n\n    &__link\n    {\n        display: block;\n        height: 100%;\n        width: 100%;\n    }\n\n    &__image\n    {\n        width: 100%;\n        height: 100%;\n    }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.y-photo-grid {\n  display: flex;\n  width: 100%;\n  margin: 0;\n  padding: 0;\n  flex-direction: column;\n  align-items: stretch;\n  justify-content: flex-start;\n\n  &__row {\n    display: flex;\n    width: 100%;\n    margin: 0;\n    padding: 0;\n    flex-direction: row;\n    align-items: center;\n    justify-content: flex-start;\n  }\n\n  &__item {\n    display: block;\n    margin: 0;\n    background: #eee;\n\n    &:first-child {\n      margin-left: 0;\n    }\n  }\n\n  &__link {\n    display: block;\n    height: 100%;\n    width: 100%;\n  }\n\n  &__image {\n    width: 100%;\n    height: 100%;\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/nested-indention/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/nested-indention/nested-indention.css",
    "content": ".y-photo-grid\n{\n    display: flex;\n    width: 100%;\n    margin: 0;\n    padding: 0;\n    flex-direction: column;\n    align-items: stretch;\n    justify-content: flex-start;\n\n    &__row\n    {\n        display: flex;\n        width: 100%;\n        margin: 0;\n        padding: 0;\n        flex-direction: row;\n        align-items: center;\n        justify-content: flex-start;\n    }\n\n    &__item\n    {\n        display: block;\n        margin: 0;\n        background: #eee;\n\n        &:first-child\n        {\n            margin-left: 0;\n        }\n    }\n\n    &__link\n    {\n        display: block;\n        height: 100%;\n        width: 100%;\n    }\n\n    &__image\n    {\n        width: 100%;\n        height: 100%;\n    }\n}\n"
  },
  {
    "path": "tests/stylefmt/nested-indention-2/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`nested-indention-2.css 1`] = `\n.y-photo-grid{\n    display: flex;\n    width: 100%;\n    margin: 0;\n    padding: 0;\n    flex-direction: column;\n    align-items: stretch;\n    justify-content: flex-start;\n\n    &__row, &__item, &__link, &__image{\n        display: flex;\n        width: 100%;\n        margin: 0;\n        padding: 0;\n        flex-direction: row;\n        align-items: center;\n        justify-content: flex-start;\n    }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.y-photo-grid {\n  display: flex;\n  width: 100%;\n  margin: 0;\n  padding: 0;\n  flex-direction: column;\n  align-items: stretch;\n  justify-content: flex-start;\n\n  &__row,\n  &__item,\n  &__link,\n  &__image {\n    display: flex;\n    width: 100%;\n    margin: 0;\n    padding: 0;\n    flex-direction: row;\n    align-items: center;\n    justify-content: flex-start;\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/nested-indention-2/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/nested-indention-2/nested-indention-2.css",
    "content": ".y-photo-grid{\n    display: flex;\n    width: 100%;\n    margin: 0;\n    padding: 0;\n    flex-direction: column;\n    align-items: stretch;\n    justify-content: flex-start;\n\n    &__row, &__item, &__link, &__image{\n        display: flex;\n        width: 100%;\n        margin: 0;\n        padding: 0;\n        flex-direction: row;\n        align-items: center;\n        justify-content: flex-start;\n    }\n}\n"
  },
  {
    "path": "tests/stylefmt/nested-mixin/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`nested-mixin.css 1`] = `\n@mixin test() {\n  $values: blue red;\n  @each $val in $values {\n    color: $val;\n    @for $i from 2 through 10 {\n     background: $i;\n    }\n  }\n  @for $i from 2 through 10 {\n    color: $i;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@mixin test() {\n  $values: blue red;\n  @each $val in $values {\n    color: $val;\n    @for $i from 2 through 10 {\n      background: $i;\n    }\n  }\n  @for $i from 2 through 10 {\n    color: $i;\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/nested-mixin/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/nested-mixin/nested-mixin.css",
    "content": "@mixin test() {\n  $values: blue red;\n  @each $val in $values {\n    color: $val;\n    @for $i from 2 through 10 {\n     background: $i;\n    }\n  }\n  @for $i from 2 through 10 {\n    color: $i;\n  }\n}\n"
  },
  {
    "path": "tests/stylefmt/nested-mixin-2/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`nested-mixin-2.css 1`] = `\n@mixin test() {\n  $values: blue red;\n@each $val   in $values {\n  color  : $val;\n  @for $i   from  2   through    10 {\n   background: $i;\n  }\n}\n@for $i from   2 through 10 {\n  color: $i;\n}\n @while $k   >   0 {\n  color: $k;\n}\n\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@mixin test() {\n  $values: blue red;\n  @each $val in $values {\n    color: $val;\n    @for $i from 2 through 10 {\n      background: $i;\n    }\n  }\n  @for $i from 2 through 10 {\n    color: $i;\n  }\n  @while $k > 0 {\n    color: $k;\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/nested-mixin-2/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/nested-mixin-2/nested-mixin-2.css",
    "content": "@mixin test() {\n  $values: blue red;\n@each $val   in $values {\n  color  : $val;\n  @for $i   from  2   through    10 {\n   background: $i;\n  }\n}\n@for $i from   2 through 10 {\n  color: $i;\n}\n @while $k   >   0 {\n  color: $k;\n}\n\n}\n"
  },
  {
    "path": "tests/stylefmt/non-nested-combinator/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`non-nested-combinator.css 1`] = `\n.card-meta {\n  @include padding(null 1rem 1rem);background-color: $card-base-background-color;\n  color: $meta-font-color;\n  .card-content--with-image+&\n  {padding-top: 1rem;\n  }a {\n    color: inherit;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.card-meta {\n  @include padding(null 1rem 1rem);\n  background-color: $card-base-background-color;\n  color: $meta-font-color;\n  .card-content--with-image + & {\n    padding-top: 1rem;\n  }\n  a {\n    color: inherit;\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/non-nested-combinator/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/non-nested-combinator/non-nested-combinator.css",
    "content": ".card-meta {\n  @include padding(null 1rem 1rem);background-color: $card-base-background-color;\n  color: $meta-font-color;\n  .card-content--with-image+&\n  {padding-top: 1rem;\n  }a {\n    color: inherit;\n  }\n}\n"
  },
  {
    "path": "tests/stylefmt/pseudo-element/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`pseudo-element.css 1`] = `\na:after  { content:\"\" }\na::before  { content:\"\" }\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\na:after {\n  content: \"\";\n}\na::before {\n  content: \"\";\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/pseudo-element/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/pseudo-element/pseudo-element.css",
    "content": "a:after  { content:\"\" }\na::before  { content:\"\" }\n\n"
  },
  {
    "path": "tests/stylefmt/readme/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`readme.css 1`] = `\n// mixin for clearfix\n        @mixin      clearfix    ()      { &:before,\n  &:after {\n                content:\" \";\n    display              : table;  }\n\n  &:after        {clear: both;}\n   }.class\n{\n       padding:10px;@include        clearfix();}\n     .base {  color: red;  } // placeholder\n\n%base\n{\n\n\npadding: 12px\n}\n\n.foo{\n@extend      .base;}\n\n.bar\n      {     @extend            %base;\n\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// mixin for clearfix\n@mixin clearfix () {\n  &:before,\n  &:after {\n    content: \" \";\n    display: table;\n  }\n\n  &:after {\n    clear: both;\n  }\n}\n.class {\n  padding: 10px;\n  @include clearfix();\n}\n.base {\n  color: red;\n} // placeholder\n\n%base {\n  padding: 12px;\n}\n\n.foo {\n  @extend .base;\n}\n\n.bar {\n  @extend %base;\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/readme/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/readme/readme.css",
    "content": "// mixin for clearfix\n        @mixin      clearfix    ()      { &:before,\n  &:after {\n                content:\" \";\n    display              : table;  }\n\n  &:after        {clear: both;}\n   }.class\n{\n       padding:10px;@include        clearfix();}\n     .base {  color: red;  } // placeholder\n\n%base\n{\n\n\npadding: 12px\n}\n\n.foo{\n@extend      .base;}\n\n.bar\n      {     @extend            %base;\n\n}\n"
  },
  {
    "path": "tests/stylefmt/shorthand-with-sass-variables/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`shorthand-with-sass-variables.css 1`] = `\n.class{border:1px  solid       $color;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.class {\n  border: 1px solid $color;\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/shorthand-with-sass-variables/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/shorthand-with-sass-variables/shorthand-with-sass-variables.css",
    "content": ".class{border:1px  solid       $color;\n}\n"
  },
  {
    "path": "tests/stylefmt/values/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`values.css 1`] = `\n.class {\n  background:linear-gradient(to bottom right,white,hsla(0,0%,100%,.8));\n  border: 1px      solid rgba(0,0,0,.3);\n  font-family: Arial  ,  sans-serif;\n  color: rgba(0, 0, 0, 1);\n  margin: 0   20px  0 -24px;\n  background-position:20% -26px;\n  transform-style: preserve-3d;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.class {\n  background: linear-gradient(to bottom right, white, hsla(0, 0%, 100%, .8));\n  border: 1px solid rgba(0, 0, 0, .3);\n  font-family: Arial, sans-serif;\n  color: rgba(0, 0, 0, 1);\n  margin: 0 20px 0 -24px;\n  background-position: 20% -26px;\n  transform-style: preserve-3d;\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/values/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/values/values.css",
    "content": ".class {\n  background:linear-gradient(to bottom right,white,hsla(0,0%,100%,.8));\n  border: 1px      solid rgba(0,0,0,.3);\n  font-family: Arial  ,  sans-serif;\n  color: rgba(0, 0, 0, 1);\n  margin: 0   20px  0 -24px;\n  background-position:20% -26px;\n  transform-style: preserve-3d;\n}\n"
  },
  {
    "path": "tests/stylefmt/var-notation/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`var-notation.css 1`] = `\n.foo {margin:var(     --n-gutterSize) 0 var(   --gutterSize ) var( --n-gutterSize );\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.foo {\n  margin: var(--n-gutterSize) 0 var(--gutterSize) var(--n-gutterSize);\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/var-notation/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/var-notation/var-notation.css",
    "content": ".foo {margin:var(     --n-gutterSize) 0 var(   --gutterSize ) var( --n-gutterSize );\n}\n"
  },
  {
    "path": "tests/stylefmt/vendor-prefix/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`vendor-prefix.css 1`] = `\n.class\n{-webkit-box-sizing:border-box;box-sizing:border-box\n\n\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n.class {\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n}\n\n`;\n"
  },
  {
    "path": "tests/stylefmt/vendor-prefix/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/stylefmt/vendor-prefix/vendor-prefix.css",
    "content": ".class\n{-webkit-box-sizing:border-box;box-sizing:border-box\n\n\n}\n"
  },
  {
    "path": "tests/switch/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`comments.js 1`] = `\nswitch (true) {\n  case true:\n  // Good luck getting here\n\n  case false:\n}\n\nswitch (true) {\n  case true:\n\n  // Good luck getting here\n  case false:\n}\n\nswitch(x) {\n  case x: {\n  }\n\n  // other\n\n  case y: {\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nswitch (true) {\n  case true:\n  // Good luck getting here\n\n  case false:\n}\n\nswitch (true) {\n  case true:\n\n  // Good luck getting here\n  case false:\n}\n\nswitch (x) {\n  case x: {\n  }\n\n  // other\n\n  case y: {\n  }\n}\n\n`;\n\nexports[`empty_lines.js 1`] = `\nswitch (foo) {\n  case \"bar\":\n    doSomething();\n\n  case \"baz\":\n    doOtherThing();\n}\n\nswitch (foo) {\n\n  case \"bar\":\n    doSomething();\n\n  case \"baz\":\n    doOtherThing();\n}\n\nswitch (foo) {\n  case \"bar\":\n    doSomething();\n\n  case \"baz\":\n    doOtherThing();\n\n}\n\nswitch (foo) {\n  case \"bar\":\n    doSomething();\n\n\n\n  case \"baz\":\n    doOtherThing();\n}\n\nswitch (x) {\n  case y:\n    call();\n\n    break;\n\n  case z:\n    call();\n\n    break;\n}\n\nswitch (a) {\n  case b:\n    if (1) {};\n    c;\n}\n\nswitch (a) {\n  case x:\n  case y:\n    call();\n\n  case z:\n    call();\n}\n\nswitch (a) {\n  case x: case y:\n    call();\n\n  case z:\n    call();\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nswitch (foo) {\n  case \"bar\":\n    doSomething();\n\n  case \"baz\":\n    doOtherThing();\n}\n\nswitch (foo) {\n  case \"bar\":\n    doSomething();\n\n  case \"baz\":\n    doOtherThing();\n}\n\nswitch (foo) {\n  case \"bar\":\n    doSomething();\n\n  case \"baz\":\n    doOtherThing();\n}\n\nswitch (foo) {\n  case \"bar\":\n    doSomething();\n\n  case \"baz\":\n    doOtherThing();\n}\n\nswitch (x) {\n  case y:\n    call();\n\n    break;\n\n  case z:\n    call();\n\n    break;\n}\n\nswitch (a) {\n  case b:\n    if (1) {\n    }\n    c;\n}\n\nswitch (a) {\n  case x:\n  case y:\n    call();\n\n  case z:\n    call();\n}\n\nswitch (a) {\n  case x:\n  case y:\n    call();\n\n  case z:\n    call();\n}\n\n`;\n\nexports[`empty_statement.js 1`] = `\nswitch (error.code) {\n\tcase ConfigurationEditingErrorCode.ERROR_INVALID_CONFIGURATION: {\n\t\tnls.localize('errorInvalidConfiguration', \"Unable to write into settings. Correct errors/warnings in the file and try again.\");\n\t};\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nswitch (error.code) {\n  case ConfigurationEditingErrorCode.ERROR_INVALID_CONFIGURATION: {\n    nls.localize(\n      \"errorInvalidConfiguration\",\n      \"Unable to write into settings. Correct errors/warnings in the file and try again.\"\n    );\n  }\n}\n\n`;\n\nexports[`empty_switch.js 1`] = `\nswitch (1) { default:; }\nswitch (1) {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nswitch (1) {\n  default:\n}\nswitch (1) {\n}\n\n`;\n"
  },
  {
    "path": "tests/switch/comments.js",
    "content": "switch (true) {\n  case true:\n  // Good luck getting here\n\n  case false:\n}\n\nswitch (true) {\n  case true:\n\n  // Good luck getting here\n  case false:\n}\n\nswitch(x) {\n  case x: {\n  }\n\n  // other\n\n  case y: {\n  }\n}\n"
  },
  {
    "path": "tests/switch/empty_lines.js",
    "content": "switch (foo) {\n  case \"bar\":\n    doSomething();\n\n  case \"baz\":\n    doOtherThing();\n}\n\nswitch (foo) {\n\n  case \"bar\":\n    doSomething();\n\n  case \"baz\":\n    doOtherThing();\n}\n\nswitch (foo) {\n  case \"bar\":\n    doSomething();\n\n  case \"baz\":\n    doOtherThing();\n\n}\n\nswitch (foo) {\n  case \"bar\":\n    doSomething();\n\n\n\n  case \"baz\":\n    doOtherThing();\n}\n\nswitch (x) {\n  case y:\n    call();\n\n    break;\n\n  case z:\n    call();\n\n    break;\n}\n\nswitch (a) {\n  case b:\n    if (1) {};\n    c;\n}\n\nswitch (a) {\n  case x:\n  case y:\n    call();\n\n  case z:\n    call();\n}\n\nswitch (a) {\n  case x: case y:\n    call();\n\n  case z:\n    call();\n}\n"
  },
  {
    "path": "tests/switch/empty_statement.js",
    "content": "switch (error.code) {\n\tcase ConfigurationEditingErrorCode.ERROR_INVALID_CONFIGURATION: {\n\t\tnls.localize('errorInvalidConfiguration', \"Unable to write into settings. Correct errors/warnings in the file and try again.\");\n\t};\n}\n"
  },
  {
    "path": "tests/switch/empty_switch.js",
    "content": "switch (1) { default:; }\nswitch (1) {}\n"
  },
  {
    "path": "tests/switch/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/tabWith/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`class.js 1`] = `\nclass A {\n  method() {\n    var x = 1;\n    while(typeof x == \"number\" || typeof x == \"string\") {\n        x = x + 1;\n        if (true) x = \"\";\n    }\n    var z:number = x;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {\n  method() {\n    var x = 1;\n    while (typeof x == \"number\" || typeof x == \"string\") {\n      x = x + 1;\n      if (true) x = \"\";\n    }\n    var z: number = x;\n  }\n}\n\n`;\n\nexports[`class.js 2`] = `\nclass A {\n  method() {\n    var x = 1;\n    while(typeof x == \"number\" || typeof x == \"string\") {\n        x = x + 1;\n        if (true) x = \"\";\n    }\n    var z:number = x;\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {\n    method() {\n        var x = 1;\n        while (typeof x == \"number\" || typeof x == \"string\") {\n            x = x + 1;\n            if (true) x = \"\";\n        }\n        var z: number = x;\n    }\n}\n\n`;\n\nexports[`nested-functions.spec.js 1`] = `\nconst c = () => {};\n\nfunction a() {\n  return function b() {\n    return () => {\n      return function() {\n        return c;\n      }\n    }\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst c = () => {};\n\nfunction a() {\n  return function b() {\n    return () => {\n      return function() {\n        return c;\n      };\n    };\n  };\n}\n\n`;\n\nexports[`nested-functions.spec.js 2`] = `\nconst c = () => {};\n\nfunction a() {\n  return function b() {\n    return () => {\n      return function() {\n        return c;\n      }\n    }\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst c = () => {};\n\nfunction a() {\n    return function b() {\n        return () => {\n            return function() {\n                return c;\n            };\n        };\n    };\n}\n\n`;\n"
  },
  {
    "path": "tests/tabWith/class.js",
    "content": "class A {\n  method() {\n    var x = 1;\n    while(typeof x == \"number\" || typeof x == \"string\") {\n        x = x + 1;\n        if (true) x = \"\";\n    }\n    var z:number = x;\n  }\n}\n"
  },
  {
    "path": "tests/tabWith/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\nrun_spec(__dirname, { tabWidth: 4 }, [\"typescript\"]);\n"
  },
  {
    "path": "tests/tabWith/nested-functions.spec.js",
    "content": "const c = () => {};\n\nfunction a() {\n  return function b() {\n    return () => {\n      return function() {\n        return c;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "tests/template/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`arrow.js 1`] = `\n() => a\\`\n\ta\n\\`;\n\n() => \\`\n\ta\n\\`;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n() => a\\`\n\ta\n\\`;\n\n() => \\`\n\ta\n\\`;\n\n`;\n\nexports[`call.js 1`] = `\ninsertRule(\\`*, *:before, *:after {\n  box-sizing: inherit;\n}\\`);\n\ninsertRule\\`*, *:before, *:after {\n  box-sizing: inherit;\n}\\`;\n\nnew Error(formatErrorMessage\\`\n  This a really bad error.\n  Which has more than one line.\n\\`);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninsertRule(\\`*, *:before, *:after {\n  box-sizing: inherit;\n}\\`);\n\ninsertRule\\`*, *:before, *:after {\n  box-sizing: inherit;\n}\\`;\n\nnew Error(formatErrorMessage\\`\n  This a really bad error.\n  Which has more than one line.\n\\`);\n\n`;\n\nexports[`comment.js 1`] = `\n\\`\n(?:\\${escapeChar}[\\\\\\\\S\\\\\\\\s]|(?:(?!\\${// Using \\`XRegExp.union\\` safely rewrites backreferences in \\`left\\` and \\`right\\`.\n// Intentionally not passing \\`basicFlags\\` to \\`XRegExp.union\\` since any syntax\n// transformation resulting from those flags was already applied to \\`left\\` and\n// \\`right\\` when they were passed through the XRegExp constructor above.\nXRegExp.union([left, right], '', {conjunction: 'or'}).source})[^\\${escapeChar}])+)+\n\\`;\n\n\\`a\\${/* b */c/* d */}e\\${// f\ng\n// h\n}\\`;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\\`\n(?:\\${escapeChar}[\\\\\\\\S\\\\\\\\s]|(?:(?!\\${// Using \\`XRegExp.union\\` safely rewrites backreferences in \\`left\\` and \\`right\\`.\n// Intentionally not passing \\`basicFlags\\` to \\`XRegExp.union\\` since any syntax\n// transformation resulting from those flags was already applied to \\`left\\` and\n// \\`right\\` when they were passed through the XRegExp constructor above.\nXRegExp.union([left, right], \"\", { conjunction: \"or\" })\n  .source})[^\\${escapeChar}])+)+\n\\`;\n\n\\`a\\${/* b */ c /* d */}e\\${// f\ng\n// h\n}\\`;\n\n`;\n\nexports[`faulty-locations.js 1`] = `\nvar o = {\n  [\\`key\\`]: () => {\n    // Comment\n  }\n};\n\nvar x = {\n  y: () => Relay.QL\\`\n    query {\n      \\${foo},\n      field,\n    }\n  \\`\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar o = {\n  [\\`key\\`]: () => {\n    // Comment\n  }\n};\n\nvar x = {\n  y: () => Relay.QL\\`\n    query {\n      \\${foo},\n      field,\n    }\n  \\`\n};\n\n`;\n\nexports[`graphql.js 1`] = `\nmodule.exports = Relay.createContainer(\n  // ...\n  {\n    fragments: {\n      nodes: ({solution_type, time_frame}) => Relay.QL\\`\n        fragment on RelatedNode @relay(plural: true) {\n          __typename\n          \\${OptimalSolutionsSection\n            .getFragment(\n              'node',\n              {solution_type, time_frame},\n            )\n          }\n        }\n      \\`,\n    },\n  },\n);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nmodule.exports = Relay.createContainer(\n  // ...\n  {\n    fragments: {\n      nodes: ({ solution_type, time_frame }) => Relay.QL\\`\n        fragment on RelatedNode @relay(plural: true) {\n          __typename\n          \\${OptimalSolutionsSection.getFragment(\"node\", {\n            solution_type,\n            time_frame\n          })}\n        }\n      \\`\n    }\n  }\n);\n\n`;\n\nexports[`inline.js 1`] = `\nthis._pipe.write(\\`\\\\n\\\\n Pattern matches \\${total} \\${pluralizeTest}\\`);\nthis._pipe.write(\n  \\`\\\\n\\\\n Pattern matches \\${total} \\${pluralizeTest}\\`\n);\nthis._pipe\n  .write(\n    \\`\\\\n\\\\n Pattern matches \\${total} \\${pluralizeTest}\\`\n  );\n\nthis._pipe.write(\\`\\\\n\\\\n Pattern matches \\${total} \\${pluralizeTest} but that's long\\`);\n\nthis._pipe.write(\n  \\`\\\\n\\\\n Pattern matches \\${total} \\${pluralizeTest} but that's long\\`\n);\n\nthis._pipe.write(\\`\n  \\\\n\\\\n Pattern matches \\${total} \\${pluralizeTest} but that's long\n\\`);\n\n\n() => \\`\n  a\n\\`;\n\n() =>\n  \\`\n    a\n  \\`;\n\n(): {\n  someLong: boolean,\n  t: boolean\n} => \\`\n  a\n\\`;\n\n(): {\n  someLong: boolean,\n  t: boolean\n} =>\n  \\`\n    a\n  \\`;\n\n(\n  someLong: boolean,\n  t: boolean\n) => \\`\n    a\n  \\`;\n\n(\n  someLong: boolean,\n  t: boolean\n) =>\n  \\`\n    a\n  \\`;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nthis._pipe.write(\\`\\\\n\\\\n Pattern matches \\${total} \\${pluralizeTest}\\`);\nthis._pipe.write(\\`\\\\n\\\\n Pattern matches \\${total} \\${pluralizeTest}\\`);\nthis._pipe.write(\\`\\\\n\\\\n Pattern matches \\${total} \\${pluralizeTest}\\`);\n\nthis._pipe.write(\n  \\`\\\\n\\\\n Pattern matches \\${total} \\${pluralizeTest} but that's long\\`\n);\n\nthis._pipe.write(\n  \\`\\\\n\\\\n Pattern matches \\${total} \\${pluralizeTest} but that's long\\`\n);\n\nthis._pipe.write(\\`\n  \\\\n\\\\n Pattern matches \\${total} \\${pluralizeTest} but that's long\n\\`);\n\n() => \\`\n  a\n\\`;\n\n() =>\n  \\`\n    a\n  \\`;\n\n(): {\n  someLong: boolean,\n  t: boolean\n} => \\`\n  a\n\\`;\n\n(): {\n  someLong: boolean,\n  t: boolean\n} =>\n  \\`\n    a\n  \\`;\n\n(someLong: boolean, t: boolean) => \\`\n    a\n  \\`;\n\n(someLong: boolean, t: boolean) =>\n  \\`\n    a\n  \\`;\n\n`;\n\nexports[`parenthesis.js 1`] = `\n// \"ArrowFunctionExpression\"\n(() => {})\\`\\`;\n\n// \"AssignmentExpression\"\n(b = c)\\`\\`;\n\n// \"AwaitExpression\"\nasync function f() {\n  (await b)\\`\\`;\n}\n\n// \"BinaryExpression\"\n(b + c)\\`\\`;\n\n// \"CallExpression\"\nb()\\`\\`;\n\n// \"ClassExpression\"\n(class {})\\`\\`;\n\n// \"ConditionalExpression\"\n(b ? c : d)\\`\\`;\n\n// \"FunctionExpression\"\n(function() {})\\`\\`;\n\n// \"LogicalExpression\"\n(b || c)\\`\\`;\n\n// \"MemberExpression\"\nb.c\\`\\`;\n\n// \"NewExpression\"\n(new B())\\`\\`;\n\n// \"ObjectExpression\"\n({})\\`\\`;\n\n// \"SequenceExpression\"\n(b, c)\\`\\`;\n\n// \"TaggedTemplateExpression\"\n(\\`\\`)\\`\\`;\n\n// \"UnaryExpression\"\n(void b)\\`\\`;\n\n// \"UpdateExpression\"\n(++b)\\`\\`;\n\n// \"YieldExpression\"\nfunction* f() {\n  (yield 1)\\`\\`;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// \"ArrowFunctionExpression\"\n(() => {})\\`\\`;\n\n// \"AssignmentExpression\"\n(b = c)\\`\\`;\n\n// \"AwaitExpression\"\nasync function f() {\n  (await b)\\`\\`;\n}\n\n// \"BinaryExpression\"\n(b + c)\\`\\`;\n\n// \"CallExpression\"\nb()\\`\\`;\n\n// \"ClassExpression\"\n(class {}\\`\\`);\n\n// \"ConditionalExpression\"\n(b ? c : d)\\`\\`;\n\n// \"FunctionExpression\"\n(function() {})\\`\\`;\n\n// \"LogicalExpression\"\n(b || c)\\`\\`;\n\n// \"MemberExpression\"\nb.c\\`\\`;\n\n// \"NewExpression\"\nnew B()\\`\\`;\n\n// \"ObjectExpression\"\n({}\\`\\`);\n\n// \"SequenceExpression\"\n(b, c)\\`\\`;\n\n// \"TaggedTemplateExpression\"\n\\`\\`\\`\\`;\n\n// \"UnaryExpression\"\n(void b)\\`\\`;\n\n// \"UpdateExpression\"\n(++b)\\`\\`;\n\n// \"YieldExpression\"\nfunction* f() {\n  (yield 1)\\`\\`;\n}\n\n`;\n"
  },
  {
    "path": "tests/template/arrow.js",
    "content": "() => a`\n\ta\n`;\n\n() => `\n\ta\n`;\n"
  },
  {
    "path": "tests/template/call.js",
    "content": "insertRule(`*, *:before, *:after {\n  box-sizing: inherit;\n}`);\n\ninsertRule`*, *:before, *:after {\n  box-sizing: inherit;\n}`;\n\nnew Error(formatErrorMessage`\n  This a really bad error.\n  Which has more than one line.\n`);\n"
  },
  {
    "path": "tests/template/comment.js",
    "content": "`\n(?:${escapeChar}[\\\\S\\\\s]|(?:(?!${// Using `XRegExp.union` safely rewrites backreferences in `left` and `right`.\n// Intentionally not passing `basicFlags` to `XRegExp.union` since any syntax\n// transformation resulting from those flags was already applied to `left` and\n// `right` when they were passed through the XRegExp constructor above.\nXRegExp.union([left, right], '', {conjunction: 'or'}).source})[^${escapeChar}])+)+\n`;\n\n`a${/* b */c/* d */}e${// f\ng\n// h\n}`;\n"
  },
  {
    "path": "tests/template/faulty-locations.js",
    "content": "var o = {\n  [`key`]: () => {\n    // Comment\n  }\n};\n\nvar x = {\n  y: () => Relay.QL`\n    query {\n      ${foo},\n      field,\n    }\n  `\n};\n"
  },
  {
    "path": "tests/template/graphql.js",
    "content": "module.exports = Relay.createContainer(\n  // ...\n  {\n    fragments: {\n      nodes: ({solution_type, time_frame}) => Relay.QL`\n        fragment on RelatedNode @relay(plural: true) {\n          __typename\n          ${OptimalSolutionsSection\n            .getFragment(\n              'node',\n              {solution_type, time_frame},\n            )\n          }\n        }\n      `,\n    },\n  },\n);\n"
  },
  {
    "path": "tests/template/inline.js",
    "content": "this._pipe.write(`\\n\\n Pattern matches ${total} ${pluralizeTest}`);\nthis._pipe.write(\n  `\\n\\n Pattern matches ${total} ${pluralizeTest}`\n);\nthis._pipe\n  .write(\n    `\\n\\n Pattern matches ${total} ${pluralizeTest}`\n  );\n\nthis._pipe.write(`\\n\\n Pattern matches ${total} ${pluralizeTest} but that's long`);\n\nthis._pipe.write(\n  `\\n\\n Pattern matches ${total} ${pluralizeTest} but that's long`\n);\n\nthis._pipe.write(`\n  \\n\\n Pattern matches ${total} ${pluralizeTest} but that's long\n`);\n\n\n() => `\n  a\n`;\n\n() =>\n  `\n    a\n  `;\n\n(): {\n  someLong: boolean,\n  t: boolean\n} => `\n  a\n`;\n\n(): {\n  someLong: boolean,\n  t: boolean\n} =>\n  `\n    a\n  `;\n\n(\n  someLong: boolean,\n  t: boolean\n) => `\n    a\n  `;\n\n(\n  someLong: boolean,\n  t: boolean\n) =>\n  `\n    a\n  `;\n"
  },
  {
    "path": "tests/template/jsfmt.spec.js",
    "content": "run_spec(__dirname, null);\n"
  },
  {
    "path": "tests/template/parenthesis.js",
    "content": "// \"ArrowFunctionExpression\"\n(() => {})``;\n\n// \"AssignmentExpression\"\n(b = c)``;\n\n// \"AwaitExpression\"\nasync function f() {\n  (await b)``;\n}\n\n// \"BinaryExpression\"\n(b + c)``;\n\n// \"CallExpression\"\nb()``;\n\n// \"ClassExpression\"\n(class {})``;\n\n// \"ConditionalExpression\"\n(b ? c : d)``;\n\n// \"FunctionExpression\"\n(function() {})``;\n\n// \"LogicalExpression\"\n(b || c)``;\n\n// \"MemberExpression\"\nb.c``;\n\n// \"NewExpression\"\n(new B())``;\n\n// \"ObjectExpression\"\n({})``;\n\n// \"SequenceExpression\"\n(b, c)``;\n\n// \"TaggedTemplateExpression\"\n(``)``;\n\n// \"UnaryExpression\"\n(void b)``;\n\n// \"UpdateExpression\"\n(++b)``;\n\n// \"YieldExpression\"\nfunction* f() {\n  (yield 1)``;\n}\n"
  },
  {
    "path": "tests/template_align/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`indent.js 1`] = `\n\\`\nMixed tabs and spaces:\n\\${() => {a}}\n \t\\${() => {a}}\n  \t\\${() => {a}}\n   \t\\${() => {a}}\n    \t\\${() => {a}}\n     \t\\${() => {a}}\n      \t\\${() => {a}}\n       \t\\${() => {a}}\n        \t\\${() => {a}}\n\nTabs:\n\t\\${() => {a}}\n\t\t\\${() => {a}}\n\\`\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\\`\nMixed tabs and spaces:\n\\${() => {\n  a;\n}}\n \t\\${() => {\n    a;\n  }}\n  \t\\${() => {\n      a;\n    }}\n   \t\\${() => {\n      a;\n    }}\n    \t\\${() => {\n        a;\n      }}\n     \t\\${() => {\n        a;\n      }}\n      \t\\${() => {\n          a;\n        }}\n       \t\\${() => {\n          a;\n        }}\n        \t\\${() => {\n            a;\n          }}\n\nTabs:\n\t\\${() => {\n    a;\n  }}\n\t\t\\${() => {\n      a;\n    }}\n\\`;\n\n`;\n\nexports[`indent.js 2`] = `\n\\`\nMixed tabs and spaces:\n\\${() => {a}}\n \t\\${() => {a}}\n  \t\\${() => {a}}\n   \t\\${() => {a}}\n    \t\\${() => {a}}\n     \t\\${() => {a}}\n      \t\\${() => {a}}\n       \t\\${() => {a}}\n        \t\\${() => {a}}\n\nTabs:\n\t\\${() => {a}}\n\t\t\\${() => {a}}\n\\`\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\\`\nMixed tabs and spaces:\n\\${() => {\n\ta;\n}}\n \t\\${() => {\n\t\ta;\n\t}}\n  \t\\${() => {\n\t\ta;\n\t}}\n   \t\\${() => {\n\t\ta;\n\t}}\n    \t\\${() => {\n\t\ta;\n\t}}\n     \t\\${() => {\n\t\ta;\n\t}}\n      \t\\${() => {\n\t\ta;\n\t}}\n       \t\\${() => {\n\t\ta;\n\t}}\n        \t\\${() => {\n\t\t\ta;\n\t\t}}\n\nTabs:\n\t\\${() => {\n\t\ta;\n\t}}\n\t\t\\${() => {\n\t\t\ta;\n\t\t}}\n\\`;\n\n`;\n"
  },
  {
    "path": "tests/template_align/indent.js",
    "content": "`\nMixed tabs and spaces:\n${() => {a}}\n \t${() => {a}}\n  \t${() => {a}}\n   \t${() => {a}}\n    \t${() => {a}}\n     \t${() => {a}}\n      \t${() => {a}}\n       \t${() => {a}}\n        \t${() => {a}}\n\nTabs:\n\t${() => {a}}\n\t\t${() => {a}}\n`\n"
  },
  {
    "path": "tests/template_align/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\nrun_spec(__dirname, { useTabs: true, tabWidth: 8 }, [\"typescript\"]);\n"
  },
  {
    "path": "tests/template_literals/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`styled-components-with-expressions.js 1`] = `\nconst Button = styled.a\\`\n/* Comment */\n\tdisplay: \\${props=>props.display};\n\\`;\n\nstyled.div\\`\n\tdisplay: \\${props=>props.display};\n\tborder: \\${props=>props.border}px;\n\tmargin: 10px \\${props=>props.border}px ;\n\\`;\n\nconst EqualDivider = styled.div\\`\nmargin: 0.5rem;\n\t\tpadding: 1rem;\n\tbackground: papayawhip    ;\n\n\t> * {\n\tflex: 1;\n\n\t&:not(:first-child) {\n\t\t\t\\${props => props.vertical ? 'margin-top' : 'margin-left'}: 1rem;\n\t\t}\n\t}\n\\`;\n\nconst header = css\\`\n.top-bar {background:black;\nmargin: 0;\n    position: fixed;\n\ttop: 0;left:0;\n\twidth: 100%;\n    text-align: center     ;\n\tpadding: 15px  0  0  1em;\n\t\tz-index: 9999;\n}\n\n.top-bar .logo {\n  height: 30px;\n  margin: auto; \n    position: absolute;\n\tleft: 0;right: 0;\n}\n\\`;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst Button = styled.a\\`\n  /* Comment */\n  display: \\${props => props.display};\n\\`;\n\nstyled.div\\`\n  display: \\${props => props.display};\n  border: \\${props => props.border}px;\n  margin: 10px \\${props => props.border}px;\n\\`;\n\nconst EqualDivider = styled.div\\`\n  margin: 0.5rem;\n  padding: 1rem;\n  background: papayawhip;\n\n  > * {\n    flex: 1;\n\n    &:not(:first-child) {\n      \\${props => (props.vertical ? \"margin-top\" : \"margin-left\")}: 1rem;\n    }\n  }\n\\`;\n\nconst header = css\\`\n  .top-bar {\n    background: black;\n    margin: 0;\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100%;\n    text-align: center;\n    padding: 15px 0 0 1em;\n    z-index: 9999;\n  }\n\n  .top-bar .logo {\n    height: 30px;\n    margin: auto;\n    position: absolute;\n    left: 0;\n    right: 0;\n  }\n\\`;\n\n`;\n\nexports[`styled-jsx.js 1`] = `\n<style jsx>{\\`\n\t/* a comment */\n\tdiv :global(.react-select) {\n\t\tcolor: red; display: none\n\t}\n\\`}</style>;\n\n<div>\n<style jsx>{\\`\n\t/* a comment */\ndiv :global(.react-select) {\ncolor: red; display: none\n}\\`}</style>\n</div>;\n\n<div>\n<style jsx>{\\`div{color:red}\\`}</style>\n</div>;\n\n<div>\n<style jsx>{\\`This is invalid css. \n      Shouldn't fail.\n            Shouldn't be formatted.\\`}</style>\n</div>;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<style jsx>{\\`\n  /* a comment */\n  div :global(.react-select) {\n    color: red;\n    display: none;\n  }\n\\`}</style>;\n\n<div>\n  <style jsx>{\\`\n    /* a comment */\n    div :global(.react-select) {\n      color: red;\n      display: none;\n    }\n  \\`}</style>\n</div>;\n\n<div>\n  <style jsx>{\\`\n    div {\n      color: red;\n    }\n  \\`}</style>\n</div>;\n\n<div>\n  <style jsx>{\\`This is invalid css. \n      Shouldn't fail.\n            Shouldn't be formatted.\\`}</style>\n</div>;\n\n`;\n\nexports[`styled-jsx-with-expressions.js 1`] = `\n<style jsx>{\\`\n  div {\n  display: \\${expr};\n    color: \\${expr};\n    \\${expr};\n    \\${expr};\n    background: red;\n  animation: \\${expr} 10s ease-out;\n  }\n  @media (\\${expr}) {\n   div.\\${expr} {\n    color: red;\n   }\n  \\${expr} {\n    color: red;\n  }\n  }\n  @media (min-width: \\${expr}) {\n   div.\\${expr} {\n    color: red;\n   }\n  all\\${expr} {\n    color: red;\n  }\n  }\n  @font-face {\n    \\${expr}\n  }\n\\`}</style>;\n\n<style jsx>{\\`\n  div {\n  animation: linear \\${seconds}s ease-out;\n  }\n\\`}</style>;\n\n<style jsx>{\\`\n  div {\n  animation: 3s ease-in 1s \\${foo => foo.getIterations()} reverse both paused slidein;\n  }\n\\`}</style>;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<style jsx>{\\`\n  div {\n    display: \\${expr};\n    color: \\${expr};\n    \\${expr};\n    \\${expr};\n    background: red;\n    animation: \\${expr} 10s ease-out;\n  }\n  @media (\\${expr}) {\n    div.\\${expr} {\n      color: red;\n    }\n    \\${expr} {\n      color: red;\n    }\n  }\n  @media (min-width: \\${expr}) {\n    div.\\${expr} {\n      color: red;\n    }\n    all\\${expr} {\n      color: red;\n    }\n  }\n  @font-face {\n    \\${expr};\n  }\n\\`}</style>;\n\n<style jsx>{\\`\n  div {\n    animation: linear \\${seconds}s ease-out;\n  }\n\\`}</style>;\n\n<style jsx>{\\`\n  div {\n    animation: 3s ease-in 1s \\${foo => foo.getIterations()} reverse both paused\n      slidein;\n  }\n\\`}</style>;\n\n`;\n"
  },
  {
    "path": "tests/template_literals/jsfmt.spec.js",
    "content": "run_spec(__dirname, null);\n"
  },
  {
    "path": "tests/template_literals/styled-components-with-expressions.js",
    "content": "const Button = styled.a`\n/* Comment */\n\tdisplay: ${props=>props.display};\n`;\n\nstyled.div`\n\tdisplay: ${props=>props.display};\n\tborder: ${props=>props.border}px;\n\tmargin: 10px ${props=>props.border}px ;\n`;\n\nconst EqualDivider = styled.div`\nmargin: 0.5rem;\n\t\tpadding: 1rem;\n\tbackground: papayawhip    ;\n\n\t> * {\n\tflex: 1;\n\n\t&:not(:first-child) {\n\t\t\t${props => props.vertical ? 'margin-top' : 'margin-left'}: 1rem;\n\t\t}\n\t}\n`;\n\nconst header = css`\n.top-bar {background:black;\nmargin: 0;\n    position: fixed;\n\ttop: 0;left:0;\n\twidth: 100%;\n    text-align: center     ;\n\tpadding: 15px  0  0  1em;\n\t\tz-index: 9999;\n}\n\n.top-bar .logo {\n  height: 30px;\n  margin: auto; \n    position: absolute;\n\tleft: 0;right: 0;\n}\n`;\n"
  },
  {
    "path": "tests/template_literals/styled-jsx-with-expressions.js",
    "content": "<style jsx>{`\n  div {\n  display: ${expr};\n    color: ${expr};\n    ${expr};\n    ${expr};\n    background: red;\n  animation: ${expr} 10s ease-out;\n  }\n  @media (${expr}) {\n   div.${expr} {\n    color: red;\n   }\n  ${expr} {\n    color: red;\n  }\n  }\n  @media (min-width: ${expr}) {\n   div.${expr} {\n    color: red;\n   }\n  all${expr} {\n    color: red;\n  }\n  }\n  @font-face {\n    ${expr}\n  }\n`}</style>;\n\n<style jsx>{`\n  div {\n  animation: linear ${seconds}s ease-out;\n  }\n`}</style>;\n\n<style jsx>{`\n  div {\n  animation: 3s ease-in 1s ${foo => foo.getIterations()} reverse both paused slidein;\n  }\n`}</style>;\n"
  },
  {
    "path": "tests/template_literals/styled-jsx.js",
    "content": "<style jsx>{`\n\t/* a comment */\n\tdiv :global(.react-select) {\n\t\tcolor: red; display: none\n\t}\n`}</style>;\n\n<div>\n<style jsx>{`\n\t/* a comment */\ndiv :global(.react-select) {\ncolor: red; display: none\n}`}</style>\n</div>;\n\n<div>\n<style jsx>{`div{color:red}`}</style>\n</div>;\n\n<div>\n<style jsx>{`This is invalid css. \n      Shouldn't fail.\n            Shouldn't be formatted.`}</style>\n</div>;\n"
  },
  {
    "path": "tests/ternaries/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`binary.js 1`] = `\nconst funnelSnapshotCard = (report === MY_OVERVIEW &&\n  !ReportGK.xar_metrics_active_capitol_v2) ||\n  (report === COMPANY_OVERVIEW &&\n    !ReportGK.xar_metrics_active_capitol_v2_company_metrics)\n  ? <ReportMetricsFunnelSnapshotCard metrics={metrics} />\n  : null;\n\nroom = room.map((row, rowIndex) => (\n  row.map((col, colIndex) => (\n    (rowIndex === 0 || colIndex === 0 || rowIndex === height || colIndex === width) ? 1 : 0\n  ))\n))\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst funnelSnapshotCard =\n  (report === MY_OVERVIEW && !ReportGK.xar_metrics_active_capitol_v2) ||\n  (report === COMPANY_OVERVIEW &&\n    !ReportGK.xar_metrics_active_capitol_v2_company_metrics) ? (\n    <ReportMetricsFunnelSnapshotCard metrics={metrics} />\n  ) : null;\n\nroom = room.map((row, rowIndex) =>\n  row.map(\n    (col, colIndex) =>\n      rowIndex === 0 ||\n      colIndex === 0 ||\n      rowIndex === height ||\n      colIndex === width\n        ? 1\n        : 0\n  )\n);\n\n`;\n\nexports[`binary.js 2`] = `\nconst funnelSnapshotCard = (report === MY_OVERVIEW &&\n  !ReportGK.xar_metrics_active_capitol_v2) ||\n  (report === COMPANY_OVERVIEW &&\n    !ReportGK.xar_metrics_active_capitol_v2_company_metrics)\n  ? <ReportMetricsFunnelSnapshotCard metrics={metrics} />\n  : null;\n\nroom = room.map((row, rowIndex) => (\n  row.map((col, colIndex) => (\n    (rowIndex === 0 || colIndex === 0 || rowIndex === height || colIndex === width) ? 1 : 0\n  ))\n))\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst funnelSnapshotCard =\n    (report === MY_OVERVIEW && !ReportGK.xar_metrics_active_capitol_v2) ||\n    (report === COMPANY_OVERVIEW &&\n        !ReportGK.xar_metrics_active_capitol_v2_company_metrics) ? (\n        <ReportMetricsFunnelSnapshotCard metrics={metrics} />\n    ) : null;\n\nroom = room.map((row, rowIndex) =>\n    row.map(\n        (col, colIndex) =>\n            rowIndex === 0 ||\n            colIndex === 0 ||\n            rowIndex === height ||\n            colIndex === width\n                ? 1\n                : 0\n    )\n);\n\n`;\n\nexports[`binary.js 3`] = `\nconst funnelSnapshotCard = (report === MY_OVERVIEW &&\n  !ReportGK.xar_metrics_active_capitol_v2) ||\n  (report === COMPANY_OVERVIEW &&\n    !ReportGK.xar_metrics_active_capitol_v2_company_metrics)\n  ? <ReportMetricsFunnelSnapshotCard metrics={metrics} />\n  : null;\n\nroom = room.map((row, rowIndex) => (\n  row.map((col, colIndex) => (\n    (rowIndex === 0 || colIndex === 0 || rowIndex === height || colIndex === width) ? 1 : 0\n  ))\n))\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst funnelSnapshotCard =\n\n    (report === MY_OVERVIEW && !ReportGK.xar_metrics_active_capitol_v2) ||\n    (report === COMPANY_OVERVIEW &&\n      !ReportGK.xar_metrics_active_capitol_v2_company_metrics) ? <ReportMetricsFunnelSnapshotCard\n      metrics={metrics}\n    /> :\n    null;\n\nroom = room.map((row, rowIndex) =>\n  row.map(\n    (col, colIndex) =>\n\n        rowIndex === 0 ||\n        colIndex === 0 ||\n        rowIndex === height ||\n        colIndex === width ? 1 :\n        0\n  )\n);\n\n`;\n\nexports[`indent.js 1`] = `\naaaaaaaaaaaaaaa ? bbbbbbbbbbbbbbbbbb : ccccccccccccccc ? ddddddddddddddd : eeeeeeeeeeeeeee ? fffffffffffffff : gggggggggggggggg\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\naaaaaaaaaaaaaaa\n  ? bbbbbbbbbbbbbbbbbb\n  : ccccccccccccccc\n    ? ddddddddddddddd\n    : eeeeeeeeeeeeeee ? fffffffffffffff : gggggggggggggggg;\n\n`;\n\nexports[`indent.js 2`] = `\naaaaaaaaaaaaaaa ? bbbbbbbbbbbbbbbbbb : ccccccccccccccc ? ddddddddddddddd : eeeeeeeeeeeeeee ? fffffffffffffff : gggggggggggggggg\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\naaaaaaaaaaaaaaa\n    ? bbbbbbbbbbbbbbbbbb\n    : ccccccccccccccc\n      ? ddddddddddddddd\n      : eeeeeeeeeeeeeee ? fffffffffffffff : gggggggggggggggg;\n\n`;\n\nexports[`indent.js 3`] = `\naaaaaaaaaaaaaaa ? bbbbbbbbbbbbbbbbbb : ccccccccccccccc ? ddddddddddddddd : eeeeeeeeeeeeeee ? fffffffffffffff : gggggggggggggggg\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n  aaaaaaaaaaaaaaa ? bbbbbbbbbbbbbbbbbb :\n  ccccccccccccccc ? ddddddddddddddd :\n  eeeeeeeeeeeeeee ? fffffffffffffff :\n  gggggggggggggggg;\n\n`;\n\nexports[`nested.js 1`] = `\nconst value = condition1\n  ? value1\n  : condition2\n      ? value2\n      : condition3\n          ? value3\n          : value4;\n\nconst value =\n  condition1 ? value1 :\n  condition2 ? value2 :\n  condition3 ? value3 :\n  value4;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst value = condition1\n  ? value1\n  : condition2 ? value2 : condition3 ? value3 : value4;\n\nconst value = condition1\n  ? value1\n  : condition2 ? value2 : condition3 ? value3 : value4;\n\n`;\n\nexports[`nested.js 2`] = `\nconst value = condition1\n  ? value1\n  : condition2\n      ? value2\n      : condition3\n          ? value3\n          : value4;\n\nconst value =\n  condition1 ? value1 :\n  condition2 ? value2 :\n  condition3 ? value3 :\n  value4;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst value = condition1\n    ? value1\n    : condition2 ? value2 : condition3 ? value3 : value4;\n\nconst value = condition1\n    ? value1\n    : condition2 ? value2 : condition3 ? value3 : value4;\n\n`;\n\nexports[`nested.js 3`] = `\nconst value = condition1\n  ? value1\n  : condition2\n      ? value2\n      : condition3\n          ? value3\n          : value4;\n\nconst value =\n  condition1 ? value1 :\n  condition2 ? value2 :\n  condition3 ? value3 :\n  value4;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst value =\n  condition1 ? value1 :\n  condition2 ? value2 :\n  condition3 ? value3 :\n  value4;\n\nconst value =\n  condition1 ? value1 :\n  condition2 ? value2 :\n  condition3 ? value3 :\n  value4;\n\n`;\n\nexports[`parenthesis.js 1`] = `\ndebug ? this.state.isVisible ? \"partially visible\" : \"hidden\" : null;\ndebug ? this.state.isVisible && somethingComplex ? \"partially visible\" : \"hidden\" : null;\n\na => a ? () => {a} : () => {a}\na => a ? a : a\na => a ? aasdasdasdasdasdasdaaasdasdasdasdasdasdasdasdasdasdasdasdasdaaaaaa : a\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndebug ? (this.state.isVisible ? \"partially visible\" : \"hidden\") : null;\ndebug\n  ? this.state.isVisible && somethingComplex ? \"partially visible\" : \"hidden\"\n  : null;\n\na =>\n  a\n    ? () => {\n        a;\n      }\n    : () => {\n        a;\n      };\na => (a ? a : a);\na =>\n  a ? aasdasdasdasdasdasdaaasdasdasdasdasdasdasdasdasdasdasdasdasdaaaaaa : a;\n\n`;\n\nexports[`parenthesis.js 2`] = `\ndebug ? this.state.isVisible ? \"partially visible\" : \"hidden\" : null;\ndebug ? this.state.isVisible && somethingComplex ? \"partially visible\" : \"hidden\" : null;\n\na => a ? () => {a} : () => {a}\na => a ? a : a\na => a ? aasdasdasdasdasdasdaaasdasdasdasdasdasdasdasdasdasdasdasdasdaaaaaa : a\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndebug ? (this.state.isVisible ? \"partially visible\" : \"hidden\") : null;\ndebug\n    ? this.state.isVisible && somethingComplex ? \"partially visible\" : \"hidden\"\n    : null;\n\na =>\n    a\n        ? () => {\n              a;\n          }\n        : () => {\n              a;\n          };\na => (a ? a : a);\na =>\n    a ? aasdasdasdasdasdasdaaasdasdasdasdasdasdasdasdasdasdasdasdasdaaaaaa : a;\n\n`;\n\nexports[`parenthesis.js 3`] = `\ndebug ? this.state.isVisible ? \"partially visible\" : \"hidden\" : null;\ndebug ? this.state.isVisible && somethingComplex ? \"partially visible\" : \"hidden\" : null;\n\na => a ? () => {a} : () => {a}\na => a ? a : a\na => a ? aasdasdasdasdasdasdaaasdasdasdasdasdasdasdasdasdasdasdasdasdaaaaaa : a\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n  debug ? this.state.isVisible ? \"partially visible\" :\n  \"hidden\" :\n  null;\n\n  debug ? this.state.isVisible && somethingComplex ? \"partially visible\" :\n  \"hidden\" :\n  null;\n\na =>\n\n    a ? () => {\n      a;\n    } :\n    () => {\n      a;\n    };\na =>\n\n    a ? a :\n    a;\na =>\n\n    a ? aasdasdasdasdasdasdaaasdasdasdasdasdasdasdasdasdasdasdasdasdaaaaaa :\n    a;\n\n`;\n\nexports[`test.js 1`] = `\nconst obj0 = conditionIsTruthy ? shortThing : otherShortThing\n\nconst obj1 = conditionIsTruthy ? { some: 'long', object: 'with', lots: 'of', stuff } : shortThing\n\nconst obj2 = conditionIsTruthy ? shortThing : { some: 'long', object: 'with', lots: 'of', stuff }\n\nconst obj3 = conditionIsTruthy ? { some: 'eeeeeeeeeeeeven looooooooooooooooooooooooooooooonger', object: 'with', lots: 'of', stuff } : shortThing\n\nconst obj4 = conditionIsTruthy ? shortThing : { some: 'eeeeeeeeeeeeven looooooooooooooooooooooooooooooonger', object: 'with', lots: 'of', stuff }\n\nconst obj5 = conditionIsTruthy ? { some: 'long', object: 'with', lots: 'of', stuff } : { some: 'eeeeeeeeeeeeven looooooooooooooooooooooooooooooonger', object: 'with', lots: 'of', stuff }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst obj0 = conditionIsTruthy ? shortThing : otherShortThing;\n\nconst obj1 = conditionIsTruthy\n  ? { some: \"long\", object: \"with\", lots: \"of\", stuff }\n  : shortThing;\n\nconst obj2 = conditionIsTruthy\n  ? shortThing\n  : { some: \"long\", object: \"with\", lots: \"of\", stuff };\n\nconst obj3 = conditionIsTruthy\n  ? {\n      some: \"eeeeeeeeeeeeven looooooooooooooooooooooooooooooonger\",\n      object: \"with\",\n      lots: \"of\",\n      stuff\n    }\n  : shortThing;\n\nconst obj4 = conditionIsTruthy\n  ? shortThing\n  : {\n      some: \"eeeeeeeeeeeeven looooooooooooooooooooooooooooooonger\",\n      object: \"with\",\n      lots: \"of\",\n      stuff\n    };\n\nconst obj5 = conditionIsTruthy\n  ? { some: \"long\", object: \"with\", lots: \"of\", stuff }\n  : {\n      some: \"eeeeeeeeeeeeven looooooooooooooooooooooooooooooonger\",\n      object: \"with\",\n      lots: \"of\",\n      stuff\n    };\n\n`;\n\nexports[`test.js 2`] = `\nconst obj0 = conditionIsTruthy ? shortThing : otherShortThing\n\nconst obj1 = conditionIsTruthy ? { some: 'long', object: 'with', lots: 'of', stuff } : shortThing\n\nconst obj2 = conditionIsTruthy ? shortThing : { some: 'long', object: 'with', lots: 'of', stuff }\n\nconst obj3 = conditionIsTruthy ? { some: 'eeeeeeeeeeeeven looooooooooooooooooooooooooooooonger', object: 'with', lots: 'of', stuff } : shortThing\n\nconst obj4 = conditionIsTruthy ? shortThing : { some: 'eeeeeeeeeeeeven looooooooooooooooooooooooooooooonger', object: 'with', lots: 'of', stuff }\n\nconst obj5 = conditionIsTruthy ? { some: 'long', object: 'with', lots: 'of', stuff } : { some: 'eeeeeeeeeeeeven looooooooooooooooooooooooooooooonger', object: 'with', lots: 'of', stuff }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst obj0 = conditionIsTruthy ? shortThing : otherShortThing;\n\nconst obj1 = conditionIsTruthy\n    ? { some: \"long\", object: \"with\", lots: \"of\", stuff }\n    : shortThing;\n\nconst obj2 = conditionIsTruthy\n    ? shortThing\n    : { some: \"long\", object: \"with\", lots: \"of\", stuff };\n\nconst obj3 = conditionIsTruthy\n    ? {\n          some: \"eeeeeeeeeeeeven looooooooooooooooooooooooooooooonger\",\n          object: \"with\",\n          lots: \"of\",\n          stuff\n      }\n    : shortThing;\n\nconst obj4 = conditionIsTruthy\n    ? shortThing\n    : {\n          some: \"eeeeeeeeeeeeven looooooooooooooooooooooooooooooonger\",\n          object: \"with\",\n          lots: \"of\",\n          stuff\n      };\n\nconst obj5 = conditionIsTruthy\n    ? { some: \"long\", object: \"with\", lots: \"of\", stuff }\n    : {\n          some: \"eeeeeeeeeeeeven looooooooooooooooooooooooooooooonger\",\n          object: \"with\",\n          lots: \"of\",\n          stuff\n      };\n\n`;\n\nexports[`test.js 3`] = `\nconst obj0 = conditionIsTruthy ? shortThing : otherShortThing\n\nconst obj1 = conditionIsTruthy ? { some: 'long', object: 'with', lots: 'of', stuff } : shortThing\n\nconst obj2 = conditionIsTruthy ? shortThing : { some: 'long', object: 'with', lots: 'of', stuff }\n\nconst obj3 = conditionIsTruthy ? { some: 'eeeeeeeeeeeeven looooooooooooooooooooooooooooooonger', object: 'with', lots: 'of', stuff } : shortThing\n\nconst obj4 = conditionIsTruthy ? shortThing : { some: 'eeeeeeeeeeeeven looooooooooooooooooooooooooooooonger', object: 'with', lots: 'of', stuff }\n\nconst obj5 = conditionIsTruthy ? { some: 'long', object: 'with', lots: 'of', stuff } : { some: 'eeeeeeeeeeeeven looooooooooooooooooooooooooooooonger', object: 'with', lots: 'of', stuff }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst obj0 =\n  conditionIsTruthy ? shortThing :\n  otherShortThing;\n\nconst obj1 =\n  conditionIsTruthy ? { some: \"long\", object: \"with\", lots: \"of\", stuff } :\n  shortThing;\n\nconst obj2 =\n  conditionIsTruthy ? shortThing :\n  { some: \"long\", object: \"with\", lots: \"of\", stuff };\n\nconst obj3 =\n  conditionIsTruthy ? {\n    some: \"eeeeeeeeeeeeven looooooooooooooooooooooooooooooonger\",\n    object: \"with\",\n    lots: \"of\",\n    stuff\n  } :\n  shortThing;\n\nconst obj4 =\n  conditionIsTruthy ? shortThing :\n  {\n    some: \"eeeeeeeeeeeeven looooooooooooooooooooooooooooooonger\",\n    object: \"with\",\n    lots: \"of\",\n    stuff\n  };\n\nconst obj5 =\n  conditionIsTruthy ? { some: \"long\", object: \"with\", lots: \"of\", stuff } :\n  {\n    some: \"eeeeeeeeeeeeven looooooooooooooooooooooooooooooonger\",\n    object: \"with\",\n    lots: \"of\",\n    stuff\n  };\n\n`;\n"
  },
  {
    "path": "tests/ternaries/binary.js",
    "content": "const funnelSnapshotCard = (report === MY_OVERVIEW &&\n  !ReportGK.xar_metrics_active_capitol_v2) ||\n  (report === COMPANY_OVERVIEW &&\n    !ReportGK.xar_metrics_active_capitol_v2_company_metrics)\n  ? <ReportMetricsFunnelSnapshotCard metrics={metrics} />\n  : null;\n\nroom = room.map((row, rowIndex) => (\n  row.map((col, colIndex) => (\n    (rowIndex === 0 || colIndex === 0 || rowIndex === height || colIndex === width) ? 1 : 0\n  ))\n))\n"
  },
  {
    "path": "tests/ternaries/indent.js",
    "content": "aaaaaaaaaaaaaaa ? bbbbbbbbbbbbbbbbbb : ccccccccccccccc ? ddddddddddddddd : eeeeeeeeeeeeeee ? fffffffffffffff : gggggggggggggggg\n"
  },
  {
    "path": "tests/ternaries/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\nrun_spec(__dirname, { tabWidth: 4 }, [\"typescript\"]);\nrun_spec(__dirname, { flattenTernaries: true }, [\"typescript\"]);\n"
  },
  {
    "path": "tests/ternaries/nested.js",
    "content": "const value = condition1\r\n  ? value1\r\n  : condition2\r\n      ? value2\r\n      : condition3\r\n          ? value3\r\n          : value4;\r\n\r\nconst value =\r\n  condition1 ? value1 :\r\n  condition2 ? value2 :\r\n  condition3 ? value3 :\r\n  value4;\r\n"
  },
  {
    "path": "tests/ternaries/parenthesis.js",
    "content": "debug ? this.state.isVisible ? \"partially visible\" : \"hidden\" : null;\ndebug ? this.state.isVisible && somethingComplex ? \"partially visible\" : \"hidden\" : null;\n\na => a ? () => {a} : () => {a}\na => a ? a : a\na => a ? aasdasdasdasdasdasdaaasdasdasdasdasdasdasdasdasdasdasdasdasdaaaaaa : a\n"
  },
  {
    "path": "tests/ternaries/test.js",
    "content": "const obj0 = conditionIsTruthy ? shortThing : otherShortThing\n\nconst obj1 = conditionIsTruthy ? { some: 'long', object: 'with', lots: 'of', stuff } : shortThing\n\nconst obj2 = conditionIsTruthy ? shortThing : { some: 'long', object: 'with', lots: 'of', stuff }\n\nconst obj3 = conditionIsTruthy ? { some: 'eeeeeeeeeeeeven looooooooooooooooooooooooooooooonger', object: 'with', lots: 'of', stuff } : shortThing\n\nconst obj4 = conditionIsTruthy ? shortThing : { some: 'eeeeeeeeeeeeven looooooooooooooooooooooooooooooonger', object: 'with', lots: 'of', stuff }\n\nconst obj5 = conditionIsTruthy ? { some: 'long', object: 'with', lots: 'of', stuff } : { some: 'eeeeeeeeeeeeven looooooooooooooooooooooooooooooonger', object: 'with', lots: 'of', stuff }\n"
  },
  {
    "path": "tests/test_declarations/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test_declarations.js 1`] = `\n// Shouldn't break\n\nit(\"does something really long and complicated so I have to write a very long name for the test\", () => {\n  console.log(\"hello!\");\n});\n\nit(\"does something really long and complicated so I have to write a very long name for the test\", function() {\n  console.log(\"hello!\");\n});\n\nit(\\`does something really long and complicated so I have to write a very long name for the test\\`, function() {\n  console.log(\"hello!\");\n});\n\nit(\\`{foo + bar} does something really long and complicated so I have to write a very long name for the test\\`, function() {\n  console.log(\"hello!\");\n});\n\nit(\\`handles\n  some\n    newlines\n  does something really long and complicated so I have to write a very long name for the test\\`, () => {\n  console.log(\"hello!\");\n})\n\ntest(\"does something really long and complicated so I have to write a very long name for the test\", (done) => {\n  console.log(\"hello!\");\n});\n\ntest(\\`does something really long and complicated so I have to write a very long name for the test\\`, (done) => {\n  console.log(\"hello!\");\n});\n\ndescribe(\"does something really long and complicated so I have to write a very long name for the describe block\", () => {\n  it(\"an example test\", (done) => {\n    console.log(\"hello!\");\n  });\n});\n\ndescribe(\\`does something really long and complicated so I have to write a very long name for the describe block\\`, () => {\n  it(\\`an example test\\`, (done) => {\n    console.log(\"hello!\");\n  });\n});\n\n// Should break\n\nit.only(\"does something really long and complicated so I have to write a very long name for the test\", () => {\n  console.log(\"hello!\");\n});\n\nit.only(\\`does something really long and complicated so I have to write a very long name for the test\\`, () => {\n  console.log(\"hello!\");\n});\n\nit.only(\"does something really long and complicated so I have to write a very long name for the test\", 10, () => {\n  console.log(\"hello!\");\n});\n\nit.only.only(\"does something really long and complicated so I have to write a very long name for the test\", () => {\n  console.log(\"hello!\");\n});\n\nit.only.only(\"does something really long and complicated so I have to write a very long name for the test\", (a, b, c) => {\n  console.log(\"hello!\");\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Shouldn't break\n\nit(\"does something really long and complicated so I have to write a very long name for the test\", () => {\n  console.log(\"hello!\");\n});\n\nit(\"does something really long and complicated so I have to write a very long name for the test\", function() {\n  console.log(\"hello!\");\n});\n\nit(\\`does something really long and complicated so I have to write a very long name for the test\\`, function() {\n  console.log(\"hello!\");\n});\n\nit(\\`{foo + bar} does something really long and complicated so I have to write a very long name for the test\\`, function() {\n  console.log(\"hello!\");\n});\n\nit(\\`handles\n  some\n    newlines\n  does something really long and complicated so I have to write a very long name for the test\\`, () => {\n  console.log(\"hello!\");\n});\n\ntest(\"does something really long and complicated so I have to write a very long name for the test\", done => {\n  console.log(\"hello!\");\n});\n\ntest(\\`does something really long and complicated so I have to write a very long name for the test\\`, done => {\n  console.log(\"hello!\");\n});\n\ndescribe(\"does something really long and complicated so I have to write a very long name for the describe block\", () => {\n  it(\"an example test\", done => {\n    console.log(\"hello!\");\n  });\n});\n\ndescribe(\\`does something really long and complicated so I have to write a very long name for the describe block\\`, () => {\n  it(\\`an example test\\`, done => {\n    console.log(\"hello!\");\n  });\n});\n\n// Should break\n\nit.only(\n  \"does something really long and complicated so I have to write a very long name for the test\",\n  () => {\n    console.log(\"hello!\");\n  }\n);\n\nit.only(\n  \\`does something really long and complicated so I have to write a very long name for the test\\`,\n  () => {\n    console.log(\"hello!\");\n  }\n);\n\nit.only(\n  \"does something really long and complicated so I have to write a very long name for the test\",\n  10,\n  () => {\n    console.log(\"hello!\");\n  }\n);\n\nit.only.only(\n  \"does something really long and complicated so I have to write a very long name for the test\",\n  () => {\n    console.log(\"hello!\");\n  }\n);\n\nit.only.only(\n  \"does something really long and complicated so I have to write a very long name for the test\",\n  (a, b, c) => {\n    console.log(\"hello!\");\n  }\n);\n\n`;\n"
  },
  {
    "path": "tests/test_declarations/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/test_declarations/test_declarations.js",
    "content": "// Shouldn't break\n\nit(\"does something really long and complicated so I have to write a very long name for the test\", () => {\n  console.log(\"hello!\");\n});\n\nit(\"does something really long and complicated so I have to write a very long name for the test\", function() {\n  console.log(\"hello!\");\n});\n\nit(`does something really long and complicated so I have to write a very long name for the test`, function() {\n  console.log(\"hello!\");\n});\n\nit(`{foo + bar} does something really long and complicated so I have to write a very long name for the test`, function() {\n  console.log(\"hello!\");\n});\n\nit(`handles\n  some\n    newlines\n  does something really long and complicated so I have to write a very long name for the test`, () => {\n  console.log(\"hello!\");\n})\n\ntest(\"does something really long and complicated so I have to write a very long name for the test\", (done) => {\n  console.log(\"hello!\");\n});\n\ntest(`does something really long and complicated so I have to write a very long name for the test`, (done) => {\n  console.log(\"hello!\");\n});\n\ndescribe(\"does something really long and complicated so I have to write a very long name for the describe block\", () => {\n  it(\"an example test\", (done) => {\n    console.log(\"hello!\");\n  });\n});\n\ndescribe(`does something really long and complicated so I have to write a very long name for the describe block`, () => {\n  it(`an example test`, (done) => {\n    console.log(\"hello!\");\n  });\n});\n\n// Should break\n\nit.only(\"does something really long and complicated so I have to write a very long name for the test\", () => {\n  console.log(\"hello!\");\n});\n\nit.only(`does something really long and complicated so I have to write a very long name for the test`, () => {\n  console.log(\"hello!\");\n});\n\nit.only(\"does something really long and complicated so I have to write a very long name for the test\", 10, () => {\n  console.log(\"hello!\");\n});\n\nit.only.only(\"does something really long and complicated so I have to write a very long name for the test\", () => {\n  console.log(\"hello!\");\n});\n\nit.only.only(\"does something really long and complicated so I have to write a very long name for the test\", (a, b, c) => {\n  console.log(\"hello!\");\n});\n"
  },
  {
    "path": "tests/trailing_comma/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`es5.js 1`] = `\nfunction send_single_email(\n  app,\n  email_id,\n  email_address,\n  subject,\n  html,\n  reply_to\n) {\n  send_single_email_implementation(  app,\n  email_id,\n  email_address,\n  subject,\n  html,\n  reply_to);\n  return \"nothing\";\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction send_single_email(\n  app,\n  email_id,\n  email_address,\n  subject,\n  html,\n  reply_to\n) {\n  send_single_email_implementation(\n    app,\n    email_id,\n    email_address,\n    subject,\n    html,\n    reply_to\n  );\n  return \"nothing\";\n}\n\n`;\n\nexports[`es5.js 2`] = `\nfunction send_single_email(\n  app,\n  email_id,\n  email_address,\n  subject,\n  html,\n  reply_to\n) {\n  send_single_email_implementation(  app,\n  email_id,\n  email_address,\n  subject,\n  html,\n  reply_to);\n  return \"nothing\";\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction send_single_email(\n  app,\n  email_id,\n  email_address,\n  subject,\n  html,\n  reply_to,\n) {\n  send_single_email_implementation(\n    app,\n    email_id,\n    email_address,\n    subject,\n    html,\n    reply_to,\n  );\n  return \"nothing\";\n}\n\n`;\n\nexports[`es5.js 3`] = `\nfunction send_single_email(\n  app,\n  email_id,\n  email_address,\n  subject,\n  html,\n  reply_to\n) {\n  send_single_email_implementation(  app,\n  email_id,\n  email_address,\n  subject,\n  html,\n  reply_to);\n  return \"nothing\";\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction send_single_email(\n  app,\n  email_id,\n  email_address,\n  subject,\n  html,\n  reply_to\n) {\n  send_single_email_implementation(\n    app,\n    email_id,\n    email_address,\n    subject,\n    html,\n    reply_to\n  );\n  return \"nothing\";\n}\n\n`;\n\nexports[`es5.js 4`] = `\nfunction send_single_email(\n  app,\n  email_id,\n  email_address,\n  subject,\n  html,\n  reply_to\n) {\n  send_single_email_implementation(  app,\n  email_id,\n  email_address,\n  subject,\n  html,\n  reply_to);\n  return \"nothing\";\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction send_single_email(\n  app,\n  email_id,\n  email_address,\n  subject,\n  html,\n  reply_to\n) {\n  send_single_email_implementation(\n    app,\n    email_id,\n    email_address,\n    subject,\n    html,\n    reply_to\n  );\n  return \"nothing\";\n}\n\n`;\n\nexports[`es5.js 5`] = `\nfunction send_single_email(\n  app,\n  email_id,\n  email_address,\n  subject,\n  html,\n  reply_to\n) {\n  send_single_email_implementation(  app,\n  email_id,\n  email_address,\n  subject,\n  html,\n  reply_to);\n  return \"nothing\";\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction send_single_email(\n  app,\n  email_id,\n  email_address,\n  subject,\n  html,\n  reply_to,\n) {\n  send_single_email_implementation(\n    app,\n    email_id,\n    email_address,\n    subject,\n    html,\n    reply_to,\n  );\n  return \"nothing\";\n}\n\n`;\n\nexports[`export.js 1`] = `\nexport { value1, value2 as value2_renamed, value3, value4 as value4_renamed, value5 } from \"exports\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport {\n  value1,\n  value2 as value2_renamed,\n  value3,\n  value4 as value4_renamed,\n  value5\n} from \"exports\";\n\n`;\n\nexports[`export.js 2`] = `\nexport { value1, value2 as value2_renamed, value3, value4 as value4_renamed, value5 } from \"exports\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport {\n  value1,\n  value2 as value2_renamed,\n  value3,\n  value4 as value4_renamed,\n  value5,\n} from \"exports\";\n\n`;\n\nexports[`export.js 3`] = `\nexport { value1, value2 as value2_renamed, value3, value4 as value4_renamed, value5 } from \"exports\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport {\n  value1,\n  value2 as value2_renamed,\n  value3,\n  value4 as value4_renamed,\n  value5,\n} from \"exports\";\n\n`;\n\nexports[`export.js 4`] = `\nexport { value1, value2 as value2_renamed, value3, value4 as value4_renamed, value5 } from \"exports\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport {\n  value1,\n  value2 as value2_renamed,\n  value3,\n  value4 as value4_renamed,\n  value5\n} from \"exports\";\n\n`;\n\nexports[`export.js 5`] = `\nexport { value1, value2 as value2_renamed, value3, value4 as value4_renamed, value5 } from \"exports\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport {\n  value1,\n  value2 as value2_renamed,\n  value3,\n  value4 as value4_renamed,\n  value5,\n} from \"exports\";\n\n`;\n\nexports[`function-calls.js 1`] = `\nconst a = (param1, param2, param3) => {}\n\na('value', 'value2', 'value3');\n\na(\n  'a-long-value',\n  'a-really-really-long-value',\n  'a-really-really-really-long-value',\n);\n\na('value', 'value2', a('long-nested-value', 'long-nested-value2', 'long-nested-value3'));\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst a = (param1, param2, param3) => {};\n\na(\"value\", \"value2\", \"value3\");\n\na(\n  \"a-long-value\",\n  \"a-really-really-long-value\",\n  \"a-really-really-really-long-value\"\n);\n\na(\n  \"value\",\n  \"value2\",\n  a(\"long-nested-value\", \"long-nested-value2\", \"long-nested-value3\")\n);\n\n`;\n\nexports[`function-calls.js 2`] = `\nconst a = (param1, param2, param3) => {}\n\na('value', 'value2', 'value3');\n\na(\n  'a-long-value',\n  'a-really-really-long-value',\n  'a-really-really-really-long-value',\n);\n\na('value', 'value2', a('long-nested-value', 'long-nested-value2', 'long-nested-value3'));\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst a = (param1, param2, param3) => {};\n\na(\"value\", \"value2\", \"value3\");\n\na(\n  \"a-long-value\",\n  \"a-really-really-long-value\",\n  \"a-really-really-really-long-value\",\n);\n\na(\n  \"value\",\n  \"value2\",\n  a(\"long-nested-value\", \"long-nested-value2\", \"long-nested-value3\"),\n);\n\n`;\n\nexports[`function-calls.js 3`] = `\nconst a = (param1, param2, param3) => {}\n\na('value', 'value2', 'value3');\n\na(\n  'a-long-value',\n  'a-really-really-long-value',\n  'a-really-really-really-long-value',\n);\n\na('value', 'value2', a('long-nested-value', 'long-nested-value2', 'long-nested-value3'));\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst a = (param1, param2, param3) => {};\n\na(\"value\", \"value2\", \"value3\");\n\na(\n  \"a-long-value\",\n  \"a-really-really-long-value\",\n  \"a-really-really-really-long-value\"\n);\n\na(\n  \"value\",\n  \"value2\",\n  a(\"long-nested-value\", \"long-nested-value2\", \"long-nested-value3\")\n);\n\n`;\n\nexports[`function-calls.js 4`] = `\nconst a = (param1, param2, param3) => {}\n\na('value', 'value2', 'value3');\n\na(\n  'a-long-value',\n  'a-really-really-long-value',\n  'a-really-really-really-long-value',\n);\n\na('value', 'value2', a('long-nested-value', 'long-nested-value2', 'long-nested-value3'));\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst a = (param1, param2, param3) => {};\n\na(\"value\", \"value2\", \"value3\");\n\na(\n  \"a-long-value\",\n  \"a-really-really-long-value\",\n  \"a-really-really-really-long-value\"\n);\n\na(\n  \"value\",\n  \"value2\",\n  a(\"long-nested-value\", \"long-nested-value2\", \"long-nested-value3\")\n);\n\n`;\n\nexports[`function-calls.js 5`] = `\nconst a = (param1, param2, param3) => {}\n\na('value', 'value2', 'value3');\n\na(\n  'a-long-value',\n  'a-really-really-long-value',\n  'a-really-really-really-long-value',\n);\n\na('value', 'value2', a('long-nested-value', 'long-nested-value2', 'long-nested-value3'));\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst a = (param1, param2, param3) => {};\n\na(\"value\", \"value2\", \"value3\");\n\na(\n  \"a-long-value\",\n  \"a-really-really-long-value\",\n  \"a-really-really-really-long-value\",\n);\n\na(\n  \"value\",\n  \"value2\",\n  a(\"long-nested-value\", \"long-nested-value2\", \"long-nested-value3\"),\n);\n\n`;\n\nexports[`import.js 1`] = `\nimport {\n  runTaskForChanged,\n  description,\n  someOtherLabel,\n  thatMakes,\n  itGo,\n  multiLine,\n  andMore,\n  soWeCanGetItTo80Columns\n} from '.';\nimport {fitsIn, oneLine} from '.';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport {\n  runTaskForChanged,\n  description,\n  someOtherLabel,\n  thatMakes,\n  itGo,\n  multiLine,\n  andMore,\n  soWeCanGetItTo80Columns\n} from \".\";\nimport { fitsIn, oneLine } from \".\";\n\n`;\n\nexports[`import.js 2`] = `\nimport {\n  runTaskForChanged,\n  description,\n  someOtherLabel,\n  thatMakes,\n  itGo,\n  multiLine,\n  andMore,\n  soWeCanGetItTo80Columns\n} from '.';\nimport {fitsIn, oneLine} from '.';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport {\n  runTaskForChanged,\n  description,\n  someOtherLabel,\n  thatMakes,\n  itGo,\n  multiLine,\n  andMore,\n  soWeCanGetItTo80Columns,\n} from \".\";\nimport { fitsIn, oneLine } from \".\";\n\n`;\n\nexports[`import.js 3`] = `\nimport {\n  runTaskForChanged,\n  description,\n  someOtherLabel,\n  thatMakes,\n  itGo,\n  multiLine,\n  andMore,\n  soWeCanGetItTo80Columns\n} from '.';\nimport {fitsIn, oneLine} from '.';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport {\n  runTaskForChanged,\n  description,\n  someOtherLabel,\n  thatMakes,\n  itGo,\n  multiLine,\n  andMore,\n  soWeCanGetItTo80Columns,\n} from \".\";\nimport { fitsIn, oneLine } from \".\";\n\n`;\n\nexports[`import.js 4`] = `\nimport {\n  runTaskForChanged,\n  description,\n  someOtherLabel,\n  thatMakes,\n  itGo,\n  multiLine,\n  andMore,\n  soWeCanGetItTo80Columns\n} from '.';\nimport {fitsIn, oneLine} from '.';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport {\n  runTaskForChanged,\n  description,\n  someOtherLabel,\n  thatMakes,\n  itGo,\n  multiLine,\n  andMore,\n  soWeCanGetItTo80Columns,\n} from \".\";\nimport { fitsIn, oneLine } from \".\";\n\n`;\n\nexports[`import.js 5`] = `\nimport {\n  runTaskForChanged,\n  description,\n  someOtherLabel,\n  thatMakes,\n  itGo,\n  multiLine,\n  andMore,\n  soWeCanGetItTo80Columns\n} from '.';\nimport {fitsIn, oneLine} from '.';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport {\n  runTaskForChanged,\n  description,\n  someOtherLabel,\n  thatMakes,\n  itGo,\n  multiLine,\n  andMore,\n  soWeCanGetItTo80Columns\n} from \".\";\nimport { fitsIn, oneLine } from \".\";\n\n`;\n\nexports[`object.js 1`] = `\nconst a = {\n  b: true,\n  c: {\n    c1: 'hello'\n  },\n  d: false\n};\n\nconst aLong = {\n  bHasALongName: 'a-long-value',\n  cHasALongName: {\n    c1: 'a-really-long-value',\n    c2: 'a-really-really-long-value',\n  },\n  dHasALongName: 'a-long-value-too'\n};\n\nconst aLong = {\n  dHasALongName: 'a-long-value-too',\n  eHasABooleanExpression: a === a,\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst a = {\n  b: true,\n  c: {\n    c1: \"hello\"\n  },\n  d: false\n};\n\nconst aLong = {\n  bHasALongName: \"a-long-value\",\n  cHasALongName: {\n    c1: \"a-really-long-value\",\n    c2: \"a-really-really-long-value\"\n  },\n  dHasALongName: \"a-long-value-too\"\n};\n\nconst aLong = {\n  dHasALongName: \"a-long-value-too\",\n  eHasABooleanExpression: a === a\n};\n\n`;\n\nexports[`object.js 2`] = `\nconst a = {\n  b: true,\n  c: {\n    c1: 'hello'\n  },\n  d: false\n};\n\nconst aLong = {\n  bHasALongName: 'a-long-value',\n  cHasALongName: {\n    c1: 'a-really-long-value',\n    c2: 'a-really-really-long-value',\n  },\n  dHasALongName: 'a-long-value-too'\n};\n\nconst aLong = {\n  dHasALongName: 'a-long-value-too',\n  eHasABooleanExpression: a === a,\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst a = {\n  b: true,\n  c: {\n    c1: \"hello\",\n  },\n  d: false,\n};\n\nconst aLong = {\n  bHasALongName: \"a-long-value\",\n  cHasALongName: {\n    c1: \"a-really-long-value\",\n    c2: \"a-really-really-long-value\",\n  },\n  dHasALongName: \"a-long-value-too\",\n};\n\nconst aLong = {\n  dHasALongName: \"a-long-value-too\",\n  eHasABooleanExpression: a === a,\n};\n\n`;\n\nexports[`object.js 3`] = `\nconst a = {\n  b: true,\n  c: {\n    c1: 'hello'\n  },\n  d: false\n};\n\nconst aLong = {\n  bHasALongName: 'a-long-value',\n  cHasALongName: {\n    c1: 'a-really-long-value',\n    c2: 'a-really-really-long-value',\n  },\n  dHasALongName: 'a-long-value-too'\n};\n\nconst aLong = {\n  dHasALongName: 'a-long-value-too',\n  eHasABooleanExpression: a === a,\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst a = {\n  b: true,\n  c: {\n    c1: \"hello\",\n  },\n  d: false,\n};\n\nconst aLong = {\n  bHasALongName: \"a-long-value\",\n  cHasALongName: {\n    c1: \"a-really-long-value\",\n    c2: \"a-really-really-long-value\",\n  },\n  dHasALongName: \"a-long-value-too\",\n};\n\nconst aLong = {\n  dHasALongName: \"a-long-value-too\",\n  eHasABooleanExpression: a === a,\n};\n\n`;\n\nexports[`object.js 4`] = `\nconst a = {\n  b: true,\n  c: {\n    c1: 'hello'\n  },\n  d: false\n};\n\nconst aLong = {\n  bHasALongName: 'a-long-value',\n  cHasALongName: {\n    c1: 'a-really-long-value',\n    c2: 'a-really-really-long-value',\n  },\n  dHasALongName: 'a-long-value-too'\n};\n\nconst aLong = {\n  dHasALongName: 'a-long-value-too',\n  eHasABooleanExpression: a === a,\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst a = {\n  b: true,\n  c: {\n    c1: \"hello\"\n  },\n  d: false\n};\n\nconst aLong = {\n  bHasALongName: \"a-long-value\",\n  cHasALongName: {\n    c1: \"a-really-long-value\",\n    c2: \"a-really-really-long-value\"\n  },\n  dHasALongName: \"a-long-value-too\"\n};\n\nconst aLong = {\n  dHasALongName: \"a-long-value-too\",\n  eHasABooleanExpression: a === a\n};\n\n`;\n\nexports[`object.js 5`] = `\nconst a = {\n  b: true,\n  c: {\n    c1: 'hello'\n  },\n  d: false\n};\n\nconst aLong = {\n  bHasALongName: 'a-long-value',\n  cHasALongName: {\n    c1: 'a-really-long-value',\n    c2: 'a-really-really-long-value',\n  },\n  dHasALongName: 'a-long-value-too'\n};\n\nconst aLong = {\n  dHasALongName: 'a-long-value-too',\n  eHasABooleanExpression: a === a,\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst a = {\n  b: true,\n  c: {\n    c1: \"hello\",\n  },\n  d: false,\n};\n\nconst aLong = {\n  bHasALongName: \"a-long-value\",\n  cHasALongName: {\n    c1: \"a-really-long-value\",\n    c2: \"a-really-really-long-value\",\n  },\n  dHasALongName: \"a-long-value-too\",\n};\n\nconst aLong = {\n  dHasALongName: \"a-long-value-too\",\n  eHasABooleanExpression: a === a,\n};\n\n`;\n\nexports[`trailing_whitespace.js 1`] = `\nlet example = [\n  'FOO',\n  'BAR',\n  // Comment\n];\n\nfoo({},\n  // Comment\n);\n\no = {\n  state,\n  // Comment\n};\n\no = {\n  state,\n\n  // Comment\n};\n\nfunction supersupersupersuperLongF(\n  supersupersupersuperLongA,\n  supersupersupersuperLongB\n  // Comment\n) {\n  a\n}\nfunction supersupersupersuperLongF(\n  supersupersupersuperLongA,\n  supersupersupersuperLongB,\n  // Comment\n) {\n  a\n}\n\nthis.getAttribute(function(s)\n  /*string*/ {\n  console.log()\n});\nthis.getAttribute(function(s) /*string*/ {\n  console.log()\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nlet example = [\n  \"FOO\",\n  \"BAR\"\n  // Comment\n];\n\nfoo(\n  {}\n  // Comment\n);\n\no = {\n  state\n  // Comment\n};\n\no = {\n  state\n\n  // Comment\n};\n\nfunction supersupersupersuperLongF(\n  supersupersupersuperLongA,\n  supersupersupersuperLongB\n  // Comment\n) {\n  a;\n}\nfunction supersupersupersuperLongF(\n  supersupersupersuperLongA,\n  supersupersupersuperLongB\n  // Comment\n) {\n  a;\n}\n\nthis.getAttribute(function(s) /*string*/ {\n  console.log();\n});\nthis.getAttribute(function(s) /*string*/ {\n  console.log();\n});\n\n`;\n\nexports[`trailing_whitespace.js 2`] = `\nlet example = [\n  'FOO',\n  'BAR',\n  // Comment\n];\n\nfoo({},\n  // Comment\n);\n\no = {\n  state,\n  // Comment\n};\n\no = {\n  state,\n\n  // Comment\n};\n\nfunction supersupersupersuperLongF(\n  supersupersupersuperLongA,\n  supersupersupersuperLongB\n  // Comment\n) {\n  a\n}\nfunction supersupersupersuperLongF(\n  supersupersupersuperLongA,\n  supersupersupersuperLongB,\n  // Comment\n) {\n  a\n}\n\nthis.getAttribute(function(s)\n  /*string*/ {\n  console.log()\n});\nthis.getAttribute(function(s) /*string*/ {\n  console.log()\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nlet example = [\n  \"FOO\",\n  \"BAR\",\n  // Comment\n];\n\nfoo(\n  {},\n  // Comment\n);\n\no = {\n  state,\n  // Comment\n};\n\no = {\n  state,\n\n  // Comment\n};\n\nfunction supersupersupersuperLongF(\n  supersupersupersuperLongA,\n  supersupersupersuperLongB,\n  // Comment\n) {\n  a;\n}\nfunction supersupersupersuperLongF(\n  supersupersupersuperLongA,\n  supersupersupersuperLongB,\n  // Comment\n) {\n  a;\n}\n\nthis.getAttribute(function(s) /*string*/ {\n  console.log();\n});\nthis.getAttribute(function(s) /*string*/ {\n  console.log();\n});\n\n`;\n\nexports[`trailing_whitespace.js 3`] = `\nlet example = [\n  'FOO',\n  'BAR',\n  // Comment\n];\n\nfoo({},\n  // Comment\n);\n\no = {\n  state,\n  // Comment\n};\n\no = {\n  state,\n\n  // Comment\n};\n\nfunction supersupersupersuperLongF(\n  supersupersupersuperLongA,\n  supersupersupersuperLongB\n  // Comment\n) {\n  a\n}\nfunction supersupersupersuperLongF(\n  supersupersupersuperLongA,\n  supersupersupersuperLongB,\n  // Comment\n) {\n  a\n}\n\nthis.getAttribute(function(s)\n  /*string*/ {\n  console.log()\n});\nthis.getAttribute(function(s) /*string*/ {\n  console.log()\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nlet example = [\n  \"FOO\",\n  \"BAR\",\n  // Comment\n];\n\nfoo(\n  {}\n  // Comment\n);\n\no = {\n  state,\n  // Comment\n};\n\no = {\n  state,\n\n  // Comment\n};\n\nfunction supersupersupersuperLongF(\n  supersupersupersuperLongA,\n  supersupersupersuperLongB\n  // Comment\n) {\n  a;\n}\nfunction supersupersupersuperLongF(\n  supersupersupersuperLongA,\n  supersupersupersuperLongB\n  // Comment\n) {\n  a;\n}\n\nthis.getAttribute(function(s) /*string*/ {\n  console.log();\n});\nthis.getAttribute(function(s) /*string*/ {\n  console.log();\n});\n\n`;\n\nexports[`trailing_whitespace.js 4`] = `\nlet example = [\n  'FOO',\n  'BAR',\n  // Comment\n];\n\nfoo({},\n  // Comment\n);\n\no = {\n  state,\n  // Comment\n};\n\no = {\n  state,\n\n  // Comment\n};\n\nfunction supersupersupersuperLongF(\n  supersupersupersuperLongA,\n  supersupersupersuperLongB\n  // Comment\n) {\n  a\n}\nfunction supersupersupersuperLongF(\n  supersupersupersuperLongA,\n  supersupersupersuperLongB,\n  // Comment\n) {\n  a\n}\n\nthis.getAttribute(function(s)\n  /*string*/ {\n  console.log()\n});\nthis.getAttribute(function(s) /*string*/ {\n  console.log()\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nlet example = [\n  \"FOO\",\n  \"BAR\",\n  // Comment\n];\n\nfoo(\n  {}\n  // Comment\n);\n\no = {\n  state\n  // Comment\n};\n\no = {\n  state\n\n  // Comment\n};\n\nfunction supersupersupersuperLongF(\n  supersupersupersuperLongA,\n  supersupersupersuperLongB\n  // Comment\n) {\n  a;\n}\nfunction supersupersupersuperLongF(\n  supersupersupersuperLongA,\n  supersupersupersuperLongB\n  // Comment\n) {\n  a;\n}\n\nthis.getAttribute(function(s) /*string*/ {\n  console.log();\n});\nthis.getAttribute(function(s) /*string*/ {\n  console.log();\n});\n\n`;\n\nexports[`trailing_whitespace.js 5`] = `\nlet example = [\n  'FOO',\n  'BAR',\n  // Comment\n];\n\nfoo({},\n  // Comment\n);\n\no = {\n  state,\n  // Comment\n};\n\no = {\n  state,\n\n  // Comment\n};\n\nfunction supersupersupersuperLongF(\n  supersupersupersuperLongA,\n  supersupersupersuperLongB\n  // Comment\n) {\n  a\n}\nfunction supersupersupersuperLongF(\n  supersupersupersuperLongA,\n  supersupersupersuperLongB,\n  // Comment\n) {\n  a\n}\n\nthis.getAttribute(function(s)\n  /*string*/ {\n  console.log()\n});\nthis.getAttribute(function(s) /*string*/ {\n  console.log()\n});\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nlet example = [\n  \"FOO\",\n  \"BAR\"\n  // Comment\n];\n\nfoo(\n  {},\n  // Comment\n);\n\no = {\n  state,\n  // Comment\n};\n\no = {\n  state,\n\n  // Comment\n};\n\nfunction supersupersupersuperLongF(\n  supersupersupersuperLongA,\n  supersupersupersuperLongB,\n  // Comment\n) {\n  a;\n}\nfunction supersupersupersuperLongF(\n  supersupersupersuperLongA,\n  supersupersupersuperLongB,\n  // Comment\n) {\n  a;\n}\n\nthis.getAttribute(function(s) /*string*/ {\n  console.log();\n});\nthis.getAttribute(function(s) /*string*/ {\n  console.log();\n});\n\n`;\n"
  },
  {
    "path": "tests/trailing_comma/es5.js",
    "content": "function send_single_email(\n  app,\n  email_id,\n  email_address,\n  subject,\n  html,\n  reply_to\n) {\n  send_single_email_implementation(  app,\n  email_id,\n  email_address,\n  subject,\n  html,\n  reply_to);\n  return \"nothing\";\n}\n"
  },
  {
    "path": "tests/trailing_comma/export.js",
    "content": "export { value1, value2 as value2_renamed, value3, value4 as value4_renamed, value5 } from \"exports\";\n"
  },
  {
    "path": "tests/trailing_comma/function-calls.js",
    "content": "const a = (param1, param2, param3) => {}\n\na('value', 'value2', 'value3');\n\na(\n  'a-long-value',\n  'a-really-really-long-value',\n  'a-really-really-really-long-value',\n);\n\na('value', 'value2', a('long-nested-value', 'long-nested-value2', 'long-nested-value3'));\n"
  },
  {
    "path": "tests/trailing_comma/import.js",
    "content": "import {\n  runTaskForChanged,\n  description,\n  someOtherLabel,\n  thatMakes,\n  itGo,\n  multiLine,\n  andMore,\n  soWeCanGetItTo80Columns\n} from '.';\nimport {fitsIn, oneLine} from '.';\n"
  },
  {
    "path": "tests/trailing_comma/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\nrun_spec(__dirname, { trailingComma: \"all\" }, [\"typescript\"]);\nrun_spec(__dirname, { trailingComma: \"es5\" }, [\"typescript\"]);\nrun_spec(__dirname, { trailingComma: \"array,import\" }, [\"typescript\"]);\nrun_spec(__dirname, { trailingComma: \"object,export,arguments\" }, [\n  \"typescript\"\n]);\n"
  },
  {
    "path": "tests/trailing_comma/object.js",
    "content": "const a = {\n  b: true,\n  c: {\n    c1: 'hello'\n  },\n  d: false\n};\n\nconst aLong = {\n  bHasALongName: 'a-long-value',\n  cHasALongName: {\n    c1: 'a-really-long-value',\n    c2: 'a-really-really-long-value',\n  },\n  dHasALongName: 'a-long-value-too'\n};\n\nconst aLong = {\n  dHasALongName: 'a-long-value-too',\n  eHasABooleanExpression: a === a,\n};\n"
  },
  {
    "path": "tests/trailing_comma/trailing_whitespace.js",
    "content": "let example = [\n  'FOO',\n  'BAR',\n  // Comment\n];\n\nfoo({},\n  // Comment\n);\n\no = {\n  state,\n  // Comment\n};\n\no = {\n  state,\n\n  // Comment\n};\n\nfunction supersupersupersuperLongF(\n  supersupersupersuperLongA,\n  supersupersupersuperLongB\n  // Comment\n) {\n  a\n}\nfunction supersupersupersuperLongF(\n  supersupersupersuperLongA,\n  supersupersupersuperLongB,\n  // Comment\n) {\n  a\n}\n\nthis.getAttribute(function(s)\n  /*string*/ {\n  console.log()\n});\nthis.getAttribute(function(s) /*string*/ {\n  console.log()\n});\n"
  },
  {
    "path": "tests/trailing_whitespace/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`trailing.js 1`] = `\nexport type Result<T, V> = | { kind: \"not-test-editor1\" } | { kind: \"not-test-editor2\" };\n\n// Note: there are trailing whitespace in this file\n\\`\n   \n   \n\\` + \\`\n    \n    \n\\`;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport type Result<T, V> =\n  | { kind: \"not-test-editor1\" }\n  | { kind: \"not-test-editor2\" };\n\n// Note: there are trailing whitespace in this file\n\\`\n   \n   \n\\` +\n  \\`\n    \n    \n\\`;\n\n`;\n"
  },
  {
    "path": "tests/trailing_whitespace/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/trailing_whitespace/trailing.js",
    "content": "export type Result<T, V> = | { kind: \"not-test-editor1\" } | { kind: \"not-test-editor2\" };\n\n// Note: there are trailing whitespace in this file\n`\n   \n   \n` + `\n    \n    \n`;\n"
  },
  {
    "path": "tests/try/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`empty.js 1`] = `\ntry {\n} catch (e) {\n}\nfinally {\n}\n\ntry {\n} catch (e) {\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntry {\n} catch (e) {\n} finally {\n}\n\ntry {\n} catch (e) {}\n\n`;\n\nexports[`try.js 1`] = `\ntry\n/* missing comment */\n{;}\nfinally {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntry {\n  /* missing comment */\n} finally {\n}\n\n`;\n"
  },
  {
    "path": "tests/try/empty.js",
    "content": "try {\n} catch (e) {\n}\nfinally {\n}\n\ntry {\n} catch (e) {\n}\n"
  },
  {
    "path": "tests/try/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/try/try.js",
    "content": "try\n/* missing comment */\n{;}\nfinally {}\n"
  },
  {
    "path": "tests/typescript/compiler/ClassDeclaration22.ts",
    "content": "class C {\r\n    \"foo\"();\r\n    \"bar\"() { }\r\n}\r\n"
  },
  {
    "path": "tests/typescript/compiler/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`ClassDeclaration22.ts 1`] = `\nclass C {\n    \"foo\"();\n    \"bar\"() { }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {\n  foo();\n  bar() {}\n}\n\n`;\n\nexports[`anyIsAssignableToObject.ts 1`] = `\ninterface P {\n    p: {};\n}\n\ninterface Q extends P { // Check assignability here. Any is assignable to {}\n    p: any;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface P {\n  p: {};\n}\n\ninterface Q extends P {\n  // Check assignability here. Any is assignable to {}\n  p: any;\n}\n\n`;\n\nexports[`badArrayIndex.ts 1`] = `\nvar results = number[];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar results = number[];\n\n`;\n\nexports[`castOfAwait.ts 1`] = `\n// @target: es6\nasync function f() {\n    <number> await 0;\n    typeof await 0;\n    void await 0;\n    await void <string> typeof <number> void await 0;\n    await await 0;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @target: es6\nasync function f() {\n  <number>await 0;\n  typeof await 0;\n  void await 0;\n  await void (<string>typeof (<number>void await 0));\n  await await 0;\n}\n\n`;\n\nexports[`castParentheses.ts 1`] = `\n﻿class a {\n    static b: any;\n}\n\nvar b = (<any>a);\nvar b = (<any>a).b;\nvar b = (<any>a.b).c;\nvar b = (<any>a.b()).c;\nvar b = (<any>new a);\nvar b = (<any>new a.b);\nvar b = (<any>new a).b\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass a {\n  static b: any;\n}\n\nvar b = <any>a;\nvar b = (<any>a).b;\nvar b = (<any>a.b).c;\nvar b = (<any>a.b()).c;\nvar b = <any>new a();\nvar b = <any>new a.b();\nvar b = (<any>new a()).b;\n\n`;\n\nexports[`castTest.ts 1`] = `\n\nvar x : any = 0;\nvar z = <number> x;\nvar y = x + z;\n\nvar a = <any>0;\nvar b = <boolean>true;\nvar s = <string>\"\";\n\nvar ar = <any[]>null;\n\nvar f = <(res : number) => void>null;\n\ndeclare class Point\n{\n    x: number;\n    y: number;\n    add(dx: number, dy: number): Point;\n    mult(p: Point): Point;\n    constructor(x: number, y: number);\n}\n\nvar p_cast = <Point> ({\n    x: 0,\n    y: 0,\n    add: function(dx, dy) {\n        return new Point(this.x + dx, this.y + dy);\n    },\n    mult: function(p) { return p; }\n})\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x: any = 0;\nvar z = <number>x;\nvar y = x + z;\n\nvar a = <any>0;\nvar b = <boolean>true;\nvar s = <string>\"\";\n\nvar ar = <any[]>null;\n\nvar f = <(res: number) => void>null;\n\ndeclare class Point {\n  x: number;\n  y: number;\n  add(dx: number, dy: number): Point;\n  mult(p: Point): Point;\n  constructor(x: number, y: number);\n}\n\nvar p_cast = <Point>{\n  x: 0,\n  y: 0,\n  add: function(dx, dy) {\n    return new Point(this.x + dx, this.y + dy);\n  },\n  mult: function(p) {\n    return p;\n  }\n};\n\n`;\n\nexports[`checkInfiniteExpansionTermination.ts 1`] = `\n// Regression test for #1002\n// Before fix this code would cause infinite loop\n\ninterface IObservable<T> {\n    n: IObservable<T[]>; // Needed, must be T[]\n}\n\n// Needed\ninterface ISubject<T> extends IObservable<T> { }\n\ninterface Foo { x }\ninterface Bar { y }\n\nvar values: IObservable<Foo>;\nvar values2: ISubject<Bar>;\nvalues = values2;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Regression test for #1002\n// Before fix this code would cause infinite loop\n\ninterface IObservable<T> {\n  n: IObservable<T[]>; // Needed, must be T[]\n}\n\n// Needed\ninterface ISubject<T> extends IObservable<T> {}\n\ninterface Foo {\n  x;\n}\ninterface Bar {\n  y;\n}\n\nvar values: IObservable<Foo>;\nvar values2: ISubject<Bar>;\nvalues = values2;\n\n`;\n\nexports[`commentInNamespaceDeclarationWithIdentifierPathName.ts 1`] = `\n﻿namespace hello.hi.world\n{\n    function foo() {}\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nnamespace hello.hi.world {\n  function foo() {\n  }\n}\n\n`;\n\nexports[`commentsInterface.ts 1`] = `\ninterface i2 {\n    foo: (/**param help*/b: number) => string;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface i2 {\n  foo: (/**param help*/ b: number) => string;\n}\n\n`;\n\nexports[`contextualSignatureInstantiation2.ts 1`] = `\n// dot f g x = f(g(x))\nvar dot: <T, S>(f: (_: T) => S) => <U>(g: (_: U) => T) => (_: U) => S;\ndot = <T, S>(f: (_: T) => S) => <U>(g: (_: U) => T): (r:U) => S => (x) => f(g(x));\nvar id: <T>(x:T) => T;\nvar r23 = dot(id)(id);~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// dot f g x = f(g(x))\nvar dot: <T, S>(f: (_: T) => S) => <U>(g: (_: U) => T) => (_: U) => S;\ndot = <T, S>(f: (_: T) => S) => <U>(g: (_: U) => T): ((r: U) => S) => x =>\n  f(g(x));\nvar id: <T>(x: T) => T;\nvar r23 = dot(id)(id);\n\n`;\n\nexports[`declareDottedModuleName.ts 1`] = `\n// @declaration: true\nmodule M {\n    module P.Q { } // This shouldnt be emitted\n}\n\nmodule M {\n    export module R.S { }  //This should be emitted\n}\n\nmodule T.U { // This needs to be emitted\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @declaration: true\nnamespace M {\n  namespace P.Q {\n\n  } // This shouldnt be emitted\n}\n\nnamespace M {\n  export namespace R.S {\n\n  } //This should be emitted\n}\n\nnamespace T.U {\n  // This needs to be emitted\n}\n\n`;\n\nexports[`decrementAndIncrementOperators.ts 1`] = `\nvar x = 0;\n\n// errors\n1 ++;\n\n(1)++;\n(1)--;\n\n++(1);\n--(1);\n\n(1 + 2)++;\n(1 + 2)--;\n\n++(1 + 2);\n--(1 + 2);\n\n(x + x)++;\n(x + x)--;\n\n++(x + x);\n--(x + x);\n\n//OK\nx++;\nx--;\n\n++x;\n--x;\n\n(x)++;\n--(x);\n\n((x))++;\n((x))--;\n\nx[x++]++;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x = 0;\n\n// errors\n1++;\n\n1++;\n1--;\n\n++1;\n--1;\n\n(1 + 2)++;\n(1 + 2)--;\n\n++(1 + 2);\n--(1 + 2);\n\n(x + x)++;\n(x + x)--;\n\n++(x + x);\n--(x + x);\n\n//OK\nx++;\nx--;\n\n++x;\n--x;\n\nx++;\n--x;\n\nx++;\nx--;\n\nx[x++]++;\n\n`;\n\nexports[`downlevelLetConst1.ts 1`] = `\nconst~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst;\n\n`;\n\nexports[`errorOnInitializerInInterfaceProperty.ts 1`] = `\ninterface Foo {\n    bar: number = 5;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface Foo {\n  bar: number = 5;\n}\n\n`;\n\nexports[`es5ExportDefaultClassDeclaration4.ts 1`] = `\n// @target: es5\n// @module: commonjs\n// @declaration: true\n\ndeclare module \"foo\" {\n    export var before: C;\n\n    export default class C {\n        method(): C;\n    }\n\n    export var after: C;\n\n    export var t: typeof C;\n}\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @target: es5\n// @module: commonjs\n// @declaration: true\n\ndeclare module \"foo\" {\n  export var before: C;\n\n  export default class C {\n    method(): C;\n  }\n\n  export var after: C;\n\n  export var t: typeof C;\n}\n\n`;\n\nexports[`functionOverloadsOnGenericArity1.ts 1`] = `\n// overloading on arity not allowed\ninterface C {\n   f<T>(): string;\n   f<T, U>(): string; \n \n   <T>(): string;\n   <T, U>(): string; \n \n  new <T>(): string;\n  new <T, U>(): string; \n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// overloading on arity not allowed\ninterface C {\n  f<T>(): string;\n  f<T, U>(): string;\n\n  <T>(): string;\n  <T, U>(): string;\n\n  new <T>(): string;\n  new <T, U>(): string;\n}\n\n`;\n\nexports[`globalIsContextualKeyword.ts 1`] = `\nfunction a() {\n    let global = 1;\n}\nfunction b() {\n    class global {}\n}\n\nnamespace global {\n}\n\nfunction foo(global: number) {\n}\n\nlet obj = {\n    global: \"123\"\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction a() {\n  let global = 1;\n}\nfunction b() {\n  class global {}\n}\n\nnamespace global {\n\n}\n\nfunction foo(global: number) {}\n\nlet obj = {\n  global: \"123\"\n};\n\n`;\n\nexports[`indexSignatureWithInitializer.ts 1`] = `\n// These used to be indexers, now they are computed properties\ninterface I {\n    [x = '']: string;\n}\n\nclass C {\n    [x = 0]: string\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// These used to be indexers, now they are computed properties\ninterface I {\n  [x = \"\"]: string;\n}\n\nclass C {\n  [x = 0]: string;\n}\n\n`;\n\nexports[`mappedTypeWithCombinedTypeMappers.ts 1`] = `\n// Repro from #13351\n\ntype Meta<T, A> = {\n    [P in keyof T]: {\n        value: T[P];\n        also: A;\n        readonly children: Meta<T[P], A>;\n    };\n}\n\ninterface Input {\n    x: string;\n    y: number;\n}\n\ndeclare const output: Meta<Input, boolean>;\n\nconst shouldFail: { important: boolean } = output.x.children;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Repro from #13351\n\ntype Meta<T, A> = {\n  [P in keyof T]: {\n    value: T[P];\n    also: A;\n    readonly children: Meta<T[P], A>;\n  }\n};\n\ninterface Input {\n  x: string;\n  y: number;\n}\n\ndeclare const output: Meta<Input, boolean>;\n\nconst shouldFail: { important: boolean } = output.x.children;\n\n`;\n\nexports[`modifiersOnInterfaceIndexSignature1.ts 1`] = `\ninterface I {\n  public [a: string]: number;\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface I {\n  public [a: string]: number;\n}\n\n`;\n\nexports[`privacyGloImport.ts 1`] = `\n//@declaration: true\nmodule m1 {\n    export module m1_M1_public {\n        export class c1 {\n        }\n        export function f1() {\n            return new c1;\n        }\n        export var v1 = c1;\n        export var v2: c1;\n    }\n\n    module m1_M2_private {\n        export class c1 {\n        }\n        export function f1() {\n            return new c1;\n        }\n        export var v1 = c1;\n        export var v2: c1;\n    }\n\n    //export declare module \"m1_M3_public\" {\n    //    export function f1();\n    //    export class c1 {\n    //    }\n    //    export var v1: { new (): c1; };\n    //    export var v2: c1;\n    //}\n\n    //declare module \"m1_M4_private\" {\n    //    export function f1();\n    //    export class c1 {\n    //    }\n    //    export var v1: { new (): c1; };\n    //    export var v2: c1;\n    //}\n\n    import m1_im1_private = m1_M1_public;\n    export var m1_im1_private_v1_public = m1_im1_private.c1;\n    export var m1_im1_private_v2_public = new m1_im1_private.c1();\n    export var m1_im1_private_v3_public = m1_im1_private.f1;\n    export var m1_im1_private_v4_public = m1_im1_private.f1();\n    var m1_im1_private_v1_private = m1_im1_private.c1;\n    var m1_im1_private_v2_private = new m1_im1_private.c1();\n    var m1_im1_private_v3_private = m1_im1_private.f1;\n    var m1_im1_private_v4_private = m1_im1_private.f1();\n\n\n    import m1_im2_private = m1_M2_private;\n    export var m1_im2_private_v1_public = m1_im2_private.c1;\n    export var m1_im2_private_v2_public = new m1_im2_private.c1();\n    export var m1_im2_private_v3_public = m1_im2_private.f1;\n    export var m1_im2_private_v4_public = m1_im2_private.f1();\n    var m1_im2_private_v1_private = m1_im2_private.c1;\n    var m1_im2_private_v2_private = new m1_im2_private.c1();\n    var m1_im2_private_v3_private = m1_im2_private.f1;\n    var m1_im2_private_v4_private = m1_im2_private.f1();\n\n    //import m1_im3_private = require(\"m1_M3_public\");\n    //export var m1_im3_private_v1_public = m1_im3_private.c1;\n    //export var m1_im3_private_v2_public = new m1_im3_private.c1();\n    //export var m1_im3_private_v3_public = m1_im3_private.f1;\n    //export var m1_im3_private_v4_public = m1_im3_private.f1();\n    //var m1_im3_private_v1_private = m1_im3_private.c1;\n    //var m1_im3_private_v2_private = new m1_im3_private.c1();\n    //var m1_im3_private_v3_private = m1_im3_private.f1;\n    //var m1_im3_private_v4_private = m1_im3_private.f1();\n\n    //import m1_im4_private = require(\"m1_M4_private\");\n    //export var m1_im4_private_v1_public = m1_im4_private.c1;\n    //export var m1_im4_private_v2_public = new m1_im4_private.c1();\n    //export var m1_im4_private_v3_public = m1_im4_private.f1;\n    //export var m1_im4_private_v4_public = m1_im4_private.f1();\n    //var m1_im4_private_v1_private = m1_im4_private.c1;\n    //var m1_im4_private_v2_private = new m1_im4_private.c1();\n    //var m1_im4_private_v3_private = m1_im4_private.f1;\n    //var m1_im4_private_v4_private = m1_im4_private.f1();\n\n    export import m1_im1_public = m1_M1_public;\n    export import m1_im2_public = m1_M2_private;\n    //export import m1_im3_public = require(\"m1_M3_public\");\n    //export import m1_im4_public = require(\"m1_M4_private\");\n}\n\nmodule glo_M1_public {\n    export class c1 {\n    }\n    export function f1() {\n        return new c1;\n    }\n    export var v1 = c1;\n    export var v2: c1;\n}\n\ndeclare module \"glo_M2_public\" {\n    export function f1();\n    export class c1 {\n    }\n    export var v1: { new (): c1; };\n    export var v2: c1;\n}\n\ndeclare module \"use_glo_M1_public\" {\n    import use_glo_M1_public = glo_M1_public;\n    export var use_glo_M1_public_v1_public: { new (): use_glo_M1_public.c1; };\n    export var use_glo_M1_public_v2_public: typeof use_glo_M1_public;\n    export var use_glo_M1_public_v3_public: ()=> use_glo_M1_public.c1;\n    var use_glo_M1_public_v1_private: { new (): use_glo_M1_public.c1; };\n    var use_glo_M1_public_v2_private: typeof use_glo_M1_public;\n    var use_glo_M1_public_v3_private: () => use_glo_M1_public.c1;\n\n    import use_glo_M2_public = require(\"glo_M2_public\");\n    export var use_glo_M2_public_v1_public: { new (): use_glo_M2_public.c1; };\n    export var use_glo_M2_public_v2_public: typeof use_glo_M2_public;\n    export var use_glo_M2_public_v3_public: () => use_glo_M2_public.c1;\n    var use_glo_M2_public_v1_private: { new (): use_glo_M2_public.c1; };\n    var use_glo_M2_public_v2_private: typeof use_glo_M2_public;\n    var use_glo_M2_public_v3_private: () => use_glo_M2_public.c1;\n\n    module m2 {\n        //import errorImport = require(\"glo_M2_public\");\n        import nonerrorImport = glo_M1_public;\n\n        module m5 {\n            //import m5_errorImport = require(\"glo_M2_public\");\n            import m5_nonerrorImport = glo_M1_public;\n        }\n    }\n}\n\ndeclare module \"anotherParseError\" {\n    module m2 {\n        //declare module \"abc\" {\n        //}\n    }\n\n    module m2 {\n        //module \"abc2\" {\n        //}\n    }\n    //module \"abc3\" {\n    //}\n}\n\nmodule m2 {\n    //import m3 = require(\"use_glo_M1_public\");\n    module m4 {\n        var a = 10;\n        //import m2 = require(\"use_glo_M1_public\");\n    }\n\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n//@declaration: true\nnamespace m1 {\n  export namespace m1_M1_public {\n    export class c1 {}\n    export function f1() {\n      return new c1();\n    }\n    export var v1 = c1;\n    export var v2: c1;\n  }\n\n  namespace m1_M2_private {\n    export class c1 {}\n    export function f1() {\n      return new c1();\n    }\n    export var v1 = c1;\n    export var v2: c1;\n  }\n\n  //export declare module \"m1_M3_public\" {\n  //    export function f1();\n  //    export class c1 {\n  //    }\n  //    export var v1: { new (): c1; };\n  //    export var v2: c1;\n  //}\n\n  //declare module \"m1_M4_private\" {\n  //    export function f1();\n  //    export class c1 {\n  //    }\n  //    export var v1: { new (): c1; };\n  //    export var v2: c1;\n  //}\n\n  import m1_im1_private = m1_M1_public;\n  export var m1_im1_private_v1_public = m1_im1_private.c1;\n  export var m1_im1_private_v2_public = new m1_im1_private.c1();\n  export var m1_im1_private_v3_public = m1_im1_private.f1;\n  export var m1_im1_private_v4_public = m1_im1_private.f1();\n  var m1_im1_private_v1_private = m1_im1_private.c1;\n  var m1_im1_private_v2_private = new m1_im1_private.c1();\n  var m1_im1_private_v3_private = m1_im1_private.f1;\n  var m1_im1_private_v4_private = m1_im1_private.f1();\n\n  import m1_im2_private = m1_M2_private;\n  export var m1_im2_private_v1_public = m1_im2_private.c1;\n  export var m1_im2_private_v2_public = new m1_im2_private.c1();\n  export var m1_im2_private_v3_public = m1_im2_private.f1;\n  export var m1_im2_private_v4_public = m1_im2_private.f1();\n  var m1_im2_private_v1_private = m1_im2_private.c1;\n  var m1_im2_private_v2_private = new m1_im2_private.c1();\n  var m1_im2_private_v3_private = m1_im2_private.f1;\n  var m1_im2_private_v4_private = m1_im2_private.f1();\n\n  //import m1_im3_private = require(\"m1_M3_public\");\n  //export var m1_im3_private_v1_public = m1_im3_private.c1;\n  //export var m1_im3_private_v2_public = new m1_im3_private.c1();\n  //export var m1_im3_private_v3_public = m1_im3_private.f1;\n  //export var m1_im3_private_v4_public = m1_im3_private.f1();\n  //var m1_im3_private_v1_private = m1_im3_private.c1;\n  //var m1_im3_private_v2_private = new m1_im3_private.c1();\n  //var m1_im3_private_v3_private = m1_im3_private.f1;\n  //var m1_im3_private_v4_private = m1_im3_private.f1();\n\n  //import m1_im4_private = require(\"m1_M4_private\");\n  //export var m1_im4_private_v1_public = m1_im4_private.c1;\n  //export var m1_im4_private_v2_public = new m1_im4_private.c1();\n  //export var m1_im4_private_v3_public = m1_im4_private.f1;\n  //export var m1_im4_private_v4_public = m1_im4_private.f1();\n  //var m1_im4_private_v1_private = m1_im4_private.c1;\n  //var m1_im4_private_v2_private = new m1_im4_private.c1();\n  //var m1_im4_private_v3_private = m1_im4_private.f1;\n  //var m1_im4_private_v4_private = m1_im4_private.f1();\n\n  export import m1_im1_public = m1_M1_public;\n  export import m1_im2_public = m1_M2_private;\n  //export import m1_im3_public = require(\"m1_M3_public\");\n  //export import m1_im4_public = require(\"m1_M4_private\");\n}\n\nnamespace glo_M1_public {\n  export class c1 {}\n  export function f1() {\n    return new c1();\n  }\n  export var v1 = c1;\n  export var v2: c1;\n}\n\ndeclare module \"glo_M2_public\" {\n  export function f1();\n  export class c1 {}\n  export var v1: { new (): c1 };\n  export var v2: c1;\n}\n\ndeclare module \"use_glo_M1_public\" {\n  import use_glo_M1_public = glo_M1_public;\n  export var use_glo_M1_public_v1_public: { new (): use_glo_M1_public.c1 };\n  export var use_glo_M1_public_v2_public: typeof use_glo_M1_public;\n  export var use_glo_M1_public_v3_public: () => use_glo_M1_public.c1;\n  var use_glo_M1_public_v1_private: { new (): use_glo_M1_public.c1 };\n  var use_glo_M1_public_v2_private: typeof use_glo_M1_public;\n  var use_glo_M1_public_v3_private: () => use_glo_M1_public.c1;\n\n  import use_glo_M2_public = require(\"glo_M2_public\");\n  export var use_glo_M2_public_v1_public: { new (): use_glo_M2_public.c1 };\n  export var use_glo_M2_public_v2_public: typeof use_glo_M2_public;\n  export var use_glo_M2_public_v3_public: () => use_glo_M2_public.c1;\n  var use_glo_M2_public_v1_private: { new (): use_glo_M2_public.c1 };\n  var use_glo_M2_public_v2_private: typeof use_glo_M2_public;\n  var use_glo_M2_public_v3_private: () => use_glo_M2_public.c1;\n\n  namespace m2 {\n    //import errorImport = require(\"glo_M2_public\");\n    import nonerrorImport = glo_M1_public;\n\n    namespace m5 {\n      //import m5_errorImport = require(\"glo_M2_public\");\n      import m5_nonerrorImport = glo_M1_public;\n    }\n  }\n}\n\ndeclare module \"anotherParseError\" {\n  namespace m2 {\n    //declare module \"abc\" {\n    //}\n  }\n\n  namespace m2 {\n    //module \"abc2\" {\n    //}\n  }\n  //module \"abc3\" {\n  //}\n}\n\nnamespace m2 {\n  //import m3 = require(\"use_glo_M1_public\");\n  namespace m4 {\n    var a = 10;\n    //import m2 = require(\"use_glo_M1_public\");\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript/compiler/anyIsAssignableToObject.ts",
    "content": "interface P {\n    p: {};\n}\n\ninterface Q extends P { // Check assignability here. Any is assignable to {}\n    p: any;\n}\n"
  },
  {
    "path": "tests/typescript/compiler/badArrayIndex.ts",
    "content": "var results = number[];\n"
  },
  {
    "path": "tests/typescript/compiler/castOfAwait.ts",
    "content": "// @target: es6\r\nasync function f() {\r\n    <number> await 0;\r\n    typeof await 0;\r\n    void await 0;\r\n    await void <string> typeof <number> void await 0;\r\n    await await 0;\r\n}\r\n"
  },
  {
    "path": "tests/typescript/compiler/castParentheses.ts",
    "content": "﻿class a {\r\n    static b: any;\r\n}\r\n\r\nvar b = (<any>a);\r\nvar b = (<any>a).b;\r\nvar b = (<any>a.b).c;\r\nvar b = (<any>a.b()).c;\r\nvar b = (<any>new a);\r\nvar b = (<any>new a.b);\r\nvar b = (<any>new a).b\r\n"
  },
  {
    "path": "tests/typescript/compiler/castTest.ts",
    "content": "\r\nvar x : any = 0;\r\nvar z = <number> x;\r\nvar y = x + z;\r\n\r\nvar a = <any>0;\r\nvar b = <boolean>true;\r\nvar s = <string>\"\";\r\n\r\nvar ar = <any[]>null;\r\n\r\nvar f = <(res : number) => void>null;\r\n\r\ndeclare class Point\r\n{\r\n    x: number;\r\n    y: number;\r\n    add(dx: number, dy: number): Point;\r\n    mult(p: Point): Point;\r\n    constructor(x: number, y: number);\r\n}\r\n\r\nvar p_cast = <Point> ({\r\n    x: 0,\r\n    y: 0,\r\n    add: function(dx, dy) {\r\n        return new Point(this.x + dx, this.y + dy);\r\n    },\r\n    mult: function(p) { return p; }\r\n})\r\n"
  },
  {
    "path": "tests/typescript/compiler/checkInfiniteExpansionTermination.ts",
    "content": "// Regression test for #1002\r\n// Before fix this code would cause infinite loop\r\n\r\ninterface IObservable<T> {\r\n    n: IObservable<T[]>; // Needed, must be T[]\r\n}\r\n\r\n// Needed\r\ninterface ISubject<T> extends IObservable<T> { }\r\n\r\ninterface Foo { x }\r\ninterface Bar { y }\r\n\r\nvar values: IObservable<Foo>;\r\nvar values2: ISubject<Bar>;\r\nvalues = values2;\r\n"
  },
  {
    "path": "tests/typescript/compiler/commentInNamespaceDeclarationWithIdentifierPathName.ts",
    "content": "﻿namespace hello.hi.world\r\n{\r\n    function foo() {}\r\n}\r\n"
  },
  {
    "path": "tests/typescript/compiler/commentsInterface.ts",
    "content": "interface i2 {\n    foo: (/**param help*/b: number) => string;\n}\n"
  },
  {
    "path": "tests/typescript/compiler/contextualSignatureInstantiation2.ts",
    "content": "// dot f g x = f(g(x))\r\nvar dot: <T, S>(f: (_: T) => S) => <U>(g: (_: U) => T) => (_: U) => S;\r\ndot = <T, S>(f: (_: T) => S) => <U>(g: (_: U) => T): (r:U) => S => (x) => f(g(x));\r\nvar id: <T>(x:T) => T;\r\nvar r23 = dot(id)(id);"
  },
  {
    "path": "tests/typescript/compiler/declareDottedModuleName.ts",
    "content": "// @declaration: true\r\nmodule M {\r\n    module P.Q { } // This shouldnt be emitted\r\n}\r\n\r\nmodule M {\r\n    export module R.S { }  //This should be emitted\r\n}\r\n\r\nmodule T.U { // This needs to be emitted\r\n}"
  },
  {
    "path": "tests/typescript/compiler/decrementAndIncrementOperators.ts",
    "content": "var x = 0;\r\n\r\n// errors\r\n1 ++;\r\n\r\n(1)++;\r\n(1)--;\r\n\r\n++(1);\r\n--(1);\r\n\r\n(1 + 2)++;\r\n(1 + 2)--;\r\n\r\n++(1 + 2);\r\n--(1 + 2);\r\n\r\n(x + x)++;\r\n(x + x)--;\r\n\r\n++(x + x);\r\n--(x + x);\r\n\r\n//OK\r\nx++;\r\nx--;\r\n\r\n++x;\r\n--x;\r\n\r\n(x)++;\r\n--(x);\r\n\r\n((x))++;\r\n((x))--;\r\n\r\nx[x++]++;\r\n"
  },
  {
    "path": "tests/typescript/compiler/downlevelLetConst1.ts",
    "content": "const"
  },
  {
    "path": "tests/typescript/compiler/errorOnInitializerInInterfaceProperty.ts",
    "content": "interface Foo {\r\n    bar: number = 5;\r\n}\r\n"
  },
  {
    "path": "tests/typescript/compiler/es5ExportDefaultClassDeclaration4.ts",
    "content": "// @target: es5\r\n// @module: commonjs\r\n// @declaration: true\r\n\r\ndeclare module \"foo\" {\r\n    export var before: C;\r\n\r\n    export default class C {\r\n        method(): C;\r\n    }\r\n\r\n    export var after: C;\r\n\r\n    export var t: typeof C;\r\n}\r\n\r\n"
  },
  {
    "path": "tests/typescript/compiler/functionOverloadsOnGenericArity1.ts",
    "content": "// overloading on arity not allowed\r\ninterface C {\r\n   f<T>(): string;\r\n   f<T, U>(): string; \r\n \r\n   <T>(): string;\r\n   <T, U>(): string; \r\n \r\n  new <T>(): string;\r\n  new <T, U>(): string; \r\n}\r\n"
  },
  {
    "path": "tests/typescript/compiler/globalIsContextualKeyword.ts",
    "content": "function a() {\r\n    let global = 1;\r\n}\r\nfunction b() {\r\n    class global {}\r\n}\r\n\r\nnamespace global {\r\n}\r\n\r\nfunction foo(global: number) {\r\n}\r\n\r\nlet obj = {\r\n    global: \"123\"\r\n}"
  },
  {
    "path": "tests/typescript/compiler/indexSignatureWithInitializer.ts",
    "content": "// These used to be indexers, now they are computed properties\r\ninterface I {\r\n    [x = '']: string;\r\n}\r\n\r\nclass C {\r\n    [x = 0]: string\r\n}"
  },
  {
    "path": "tests/typescript/compiler/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/compiler/mappedTypeWithCombinedTypeMappers.ts",
    "content": "// Repro from #13351\r\n\r\ntype Meta<T, A> = {\r\n    [P in keyof T]: {\r\n        value: T[P];\r\n        also: A;\r\n        readonly children: Meta<T[P], A>;\r\n    };\r\n}\r\n\r\ninterface Input {\r\n    x: string;\r\n    y: number;\r\n}\r\n\r\ndeclare const output: Meta<Input, boolean>;\r\n\r\nconst shouldFail: { important: boolean } = output.x.children;\r\n"
  },
  {
    "path": "tests/typescript/compiler/modifiersOnInterfaceIndexSignature1.ts",
    "content": "interface I {\r\n  public [a: string]: number;\r\n}"
  },
  {
    "path": "tests/typescript/compiler/privacyGloImport.ts",
    "content": "//@declaration: true\r\nmodule m1 {\r\n    export module m1_M1_public {\r\n        export class c1 {\r\n        }\r\n        export function f1() {\r\n            return new c1;\r\n        }\r\n        export var v1 = c1;\r\n        export var v2: c1;\r\n    }\r\n\r\n    module m1_M2_private {\r\n        export class c1 {\r\n        }\r\n        export function f1() {\r\n            return new c1;\r\n        }\r\n        export var v1 = c1;\r\n        export var v2: c1;\r\n    }\r\n\r\n    //export declare module \"m1_M3_public\" {\r\n    //    export function f1();\r\n    //    export class c1 {\r\n    //    }\r\n    //    export var v1: { new (): c1; };\r\n    //    export var v2: c1;\r\n    //}\r\n\r\n    //declare module \"m1_M4_private\" {\r\n    //    export function f1();\r\n    //    export class c1 {\r\n    //    }\r\n    //    export var v1: { new (): c1; };\r\n    //    export var v2: c1;\r\n    //}\r\n\r\n    import m1_im1_private = m1_M1_public;\r\n    export var m1_im1_private_v1_public = m1_im1_private.c1;\r\n    export var m1_im1_private_v2_public = new m1_im1_private.c1();\r\n    export var m1_im1_private_v3_public = m1_im1_private.f1;\r\n    export var m1_im1_private_v4_public = m1_im1_private.f1();\r\n    var m1_im1_private_v1_private = m1_im1_private.c1;\r\n    var m1_im1_private_v2_private = new m1_im1_private.c1();\r\n    var m1_im1_private_v3_private = m1_im1_private.f1;\r\n    var m1_im1_private_v4_private = m1_im1_private.f1();\r\n\r\n\r\n    import m1_im2_private = m1_M2_private;\r\n    export var m1_im2_private_v1_public = m1_im2_private.c1;\r\n    export var m1_im2_private_v2_public = new m1_im2_private.c1();\r\n    export var m1_im2_private_v3_public = m1_im2_private.f1;\r\n    export var m1_im2_private_v4_public = m1_im2_private.f1();\r\n    var m1_im2_private_v1_private = m1_im2_private.c1;\r\n    var m1_im2_private_v2_private = new m1_im2_private.c1();\r\n    var m1_im2_private_v3_private = m1_im2_private.f1;\r\n    var m1_im2_private_v4_private = m1_im2_private.f1();\r\n\r\n    //import m1_im3_private = require(\"m1_M3_public\");\r\n    //export var m1_im3_private_v1_public = m1_im3_private.c1;\r\n    //export var m1_im3_private_v2_public = new m1_im3_private.c1();\r\n    //export var m1_im3_private_v3_public = m1_im3_private.f1;\r\n    //export var m1_im3_private_v4_public = m1_im3_private.f1();\r\n    //var m1_im3_private_v1_private = m1_im3_private.c1;\r\n    //var m1_im3_private_v2_private = new m1_im3_private.c1();\r\n    //var m1_im3_private_v3_private = m1_im3_private.f1;\r\n    //var m1_im3_private_v4_private = m1_im3_private.f1();\r\n\r\n    //import m1_im4_private = require(\"m1_M4_private\");\r\n    //export var m1_im4_private_v1_public = m1_im4_private.c1;\r\n    //export var m1_im4_private_v2_public = new m1_im4_private.c1();\r\n    //export var m1_im4_private_v3_public = m1_im4_private.f1;\r\n    //export var m1_im4_private_v4_public = m1_im4_private.f1();\r\n    //var m1_im4_private_v1_private = m1_im4_private.c1;\r\n    //var m1_im4_private_v2_private = new m1_im4_private.c1();\r\n    //var m1_im4_private_v3_private = m1_im4_private.f1;\r\n    //var m1_im4_private_v4_private = m1_im4_private.f1();\r\n\r\n    export import m1_im1_public = m1_M1_public;\r\n    export import m1_im2_public = m1_M2_private;\r\n    //export import m1_im3_public = require(\"m1_M3_public\");\r\n    //export import m1_im4_public = require(\"m1_M4_private\");\r\n}\r\n\r\nmodule glo_M1_public {\r\n    export class c1 {\r\n    }\r\n    export function f1() {\r\n        return new c1;\r\n    }\r\n    export var v1 = c1;\r\n    export var v2: c1;\r\n}\r\n\r\ndeclare module \"glo_M2_public\" {\r\n    export function f1();\r\n    export class c1 {\r\n    }\r\n    export var v1: { new (): c1; };\r\n    export var v2: c1;\r\n}\r\n\r\ndeclare module \"use_glo_M1_public\" {\r\n    import use_glo_M1_public = glo_M1_public;\r\n    export var use_glo_M1_public_v1_public: { new (): use_glo_M1_public.c1; };\r\n    export var use_glo_M1_public_v2_public: typeof use_glo_M1_public;\r\n    export var use_glo_M1_public_v3_public: ()=> use_glo_M1_public.c1;\r\n    var use_glo_M1_public_v1_private: { new (): use_glo_M1_public.c1; };\r\n    var use_glo_M1_public_v2_private: typeof use_glo_M1_public;\r\n    var use_glo_M1_public_v3_private: () => use_glo_M1_public.c1;\r\n\r\n    import use_glo_M2_public = require(\"glo_M2_public\");\r\n    export var use_glo_M2_public_v1_public: { new (): use_glo_M2_public.c1; };\r\n    export var use_glo_M2_public_v2_public: typeof use_glo_M2_public;\r\n    export var use_glo_M2_public_v3_public: () => use_glo_M2_public.c1;\r\n    var use_glo_M2_public_v1_private: { new (): use_glo_M2_public.c1; };\r\n    var use_glo_M2_public_v2_private: typeof use_glo_M2_public;\r\n    var use_glo_M2_public_v3_private: () => use_glo_M2_public.c1;\r\n\r\n    module m2 {\r\n        //import errorImport = require(\"glo_M2_public\");\r\n        import nonerrorImport = glo_M1_public;\r\n\r\n        module m5 {\r\n            //import m5_errorImport = require(\"glo_M2_public\");\r\n            import m5_nonerrorImport = glo_M1_public;\r\n        }\r\n    }\r\n}\r\n\r\ndeclare module \"anotherParseError\" {\r\n    module m2 {\r\n        //declare module \"abc\" {\r\n        //}\r\n    }\r\n\r\n    module m2 {\r\n        //module \"abc2\" {\r\n        //}\r\n    }\r\n    //module \"abc3\" {\r\n    //}\r\n}\r\n\r\nmodule m2 {\r\n    //import m3 = require(\"use_glo_M1_public\");\r\n    module m4 {\r\n        var a = 10;\r\n        //import m2 = require(\"use_glo_M1_public\");\r\n    }\r\n\r\n}"
  },
  {
    "path": "tests/typescript/conformance/ambient/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`ambientDeclarations.ts 1`] = `\ndeclare var n;\n\ndeclare var m: string;\n\ndeclare function fn1();\n\ndeclare function fn2(n: string): number;\n\ndeclare function fn3(n: string): number;\ndeclare function fn4(n: number, y: number): string;\n\ndeclare function fn5(x, y?);\ndeclare function fn6(e?);\ndeclare function fn7(x, y?, ...z);\ndeclare function fn8(y?, ...z: number[]);\ndeclare function fn9(...q: {}[]);\ndeclare function fn10<T>(...q: T[]);\n\ndeclare class cls {\n    constructor();\n    method(): cls;\n    static static(p): number;\n    static q;\n    private fn();\n    private static fns();\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare var n;\n\ndeclare var m: string;\n\ndeclare function fn1()\n\ndeclare function fn2(n: string): number\n\ndeclare function fn3(n: string): number\ndeclare function fn4(n: number, y: number): string\n\ndeclare function fn5(x, y?)\ndeclare function fn6(e?)\ndeclare function fn7(x, y?, ...z)\ndeclare function fn8(y?, ...z: number[])\ndeclare function fn9(...q: {}[])\ndeclare function fn10<T>(...q: T[])\n\ndeclare class cls {\n  constructor();\n  method(): cls;\n  static static(p): number;\n  static q;\n  private fn();\n  private static fns();\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/ambient/ambientDeclarations.ts",
    "content": "declare var n;\r\n\r\ndeclare var m: string;\r\n\r\ndeclare function fn1();\r\n\r\ndeclare function fn2(n: string): number;\r\n\r\ndeclare function fn3(n: string): number;\r\ndeclare function fn4(n: number, y: number): string;\r\n\r\ndeclare function fn5(x, y?);\r\ndeclare function fn6(e?);\r\ndeclare function fn7(x, y?, ...z);\r\ndeclare function fn8(y?, ...z: number[]);\r\ndeclare function fn9(...q: {}[]);\r\ndeclare function fn10<T>(...q: T[]);\r\n\r\ndeclare class cls {\r\n    constructor();\r\n    method(): cls;\r\n    static static(p): number;\r\n    static q;\r\n    private fn();\r\n    private static fns();\r\n}\r\n"
  },
  {
    "path": "tests/typescript/conformance/ambient/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/classes/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`classExpression.ts 1`] = `\nvar x = class C {\n}\n\nvar y = {\n    foo: class C2 {\n    }\n}\n\nvar z = class C4 {\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x = class C {};\n\nvar y = {\n  foo: class C2 {}\n};\n\nvar z = class C4 {};\n\n`;\n\nexports[`mixinAccessModifiers.ts 1`] = `\n// @declaration: true\n\ntype Constructable = new (...args: any[]) => object;\n\nclass Private {\n\tconstructor (...args: any[]) {}\n\tprivate p: string;\n}\n\nclass Private2 {\n\tconstructor (...args: any[]) {}\n\tprivate p: string;\n}\n\nclass Protected {\n\tconstructor (...args: any[]) {}\n\tprotected p: string;\n\tprotected static s: string;\n}\n\nclass Protected2 {\n\tconstructor (...args: any[]) {}\n\tprotected p: string;\n\tprotected static s: string;\n}\n\nclass Public {\n\tconstructor (...args: any[]) {}\n\tpublic p: string;\n\tpublic static s: string;\n}\n\nclass Public2 {\n\tconstructor (...args: any[]) {}\n\tpublic p: string;\n\tpublic static s: string;\n}\n\nfunction f1(x: Private & Private2) {\n\tx.p;  // Error, private constituent makes property inaccessible\n}\n\nfunction f2(x: Private & Protected) {\n\tx.p;  // Error, private constituent makes property inaccessible\n}\n\nfunction f3(x: Private & Public) {\n\tx.p;  // Error, private constituent makes property inaccessible\n}\n\nfunction f4(x: Protected & Protected2) {\n\tx.p;  // Error, protected when all constituents are protected\n}\n\nfunction f5(x: Protected & Public) {\n\tx.p;  // Ok, public if any constituent is public\n}\n\nfunction f6(x: Public & Public2) {\n\tx.p;  // Ok, public if any constituent is public\n}\n\ndeclare function Mix<T, U>(c1: T, c2: U): T & U;\n\n// Can't derive from type with inaccessible properties\n\nclass C1 extends Mix(Private, Private2) {}\nclass C2 extends Mix(Private, Protected) {}\nclass C3 extends Mix(Private, Public) {}\n\nclass C4 extends Mix(Protected, Protected2) {\n\tf(c4: C4, c5: C5, c6: C6) {\n\t\tc4.p;\n\t\tc5.p;\n\t\tc6.p;\n\t}\n\tstatic g() {\n\t\tC4.s;\n\t\tC5.s;\n\t\tC6.s\n\t}\n}\n\nclass C5 extends Mix(Protected, Public) {\n\tf(c4: C4, c5: C5, c6: C6) {\n\t\tc4.p;  // Error, not in class deriving from Protected2\n\t\tc5.p;\n\t\tc6.p;\n\t}\n\tstatic g() {\n\t\tC4.s;  // Error, not in class deriving from Protected2\n\t\tC5.s;\n\t\tC6.s\n\t}\n}\n\nclass C6 extends Mix(Public, Public2) {\n\tf(c4: C4, c5: C5, c6: C6) {\n\t\tc4.p;  // Error, not in class deriving from Protected2\n\t\tc5.p;\n\t\tc6.p;\n\t}\n\tstatic g() {\n\t\tC4.s;  // Error, not in class deriving from Protected2\n\t\tC5.s;\n\t\tC6.s\n\t}\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @declaration: true\n\ntype Constructable = new (...args: any[]) => object;\n\nclass Private {\n  constructor(...args: any[]) {}\n  private p: string;\n}\n\nclass Private2 {\n  constructor(...args: any[]) {}\n  private p: string;\n}\n\nclass Protected {\n  constructor(...args: any[]) {}\n  protected p: string;\n  protected static s: string;\n}\n\nclass Protected2 {\n  constructor(...args: any[]) {}\n  protected p: string;\n  protected static s: string;\n}\n\nclass Public {\n  constructor(...args: any[]) {}\n  public p: string;\n  public static s: string;\n}\n\nclass Public2 {\n  constructor(...args: any[]) {}\n  public p: string;\n  public static s: string;\n}\n\nfunction f1(x: Private & Private2) {\n  x.p; // Error, private constituent makes property inaccessible\n}\n\nfunction f2(x: Private & Protected) {\n  x.p; // Error, private constituent makes property inaccessible\n}\n\nfunction f3(x: Private & Public) {\n  x.p; // Error, private constituent makes property inaccessible\n}\n\nfunction f4(x: Protected & Protected2) {\n  x.p; // Error, protected when all constituents are protected\n}\n\nfunction f5(x: Protected & Public) {\n  x.p; // Ok, public if any constituent is public\n}\n\nfunction f6(x: Public & Public2) {\n  x.p; // Ok, public if any constituent is public\n}\n\ndeclare function Mix<T, U>(c1: T, c2: U): T & U\n\n// Can't derive from type with inaccessible properties\n\nclass C1 extends Mix(Private, Private2) {}\nclass C2 extends Mix(Private, Protected) {}\nclass C3 extends Mix(Private, Public) {}\n\nclass C4 extends Mix(Protected, Protected2) {\n  f(c4: C4, c5: C5, c6: C6) {\n    c4.p;\n    c5.p;\n    c6.p;\n  }\n  static g() {\n    C4.s;\n    C5.s;\n    C6.s;\n  }\n}\n\nclass C5 extends Mix(Protected, Public) {\n  f(c4: C4, c5: C5, c6: C6) {\n    c4.p; // Error, not in class deriving from Protected2\n    c5.p;\n    c6.p;\n  }\n  static g() {\n    C4.s; // Error, not in class deriving from Protected2\n    C5.s;\n    C6.s;\n  }\n}\n\nclass C6 extends Mix(Public, Public2) {\n  f(c4: C4, c5: C5, c6: C6) {\n    c4.p; // Error, not in class deriving from Protected2\n    c5.p;\n    c6.p;\n  }\n  static g() {\n    C4.s; // Error, not in class deriving from Protected2\n    C5.s;\n    C6.s;\n  }\n}\n\n`;\n\nexports[`mixinClassesAnnotated.ts 1`] = `\n// @declaration: true\n\ntype Constructor<T> = new(...args: any[]) => T;\n\nclass Base {\n    constructor(public x: number, public y: number) {}\n}\n\nclass Derived extends Base {\n    constructor(x: number, y: number, public z: number) {\n        super(x, y);\n    }\n}\n\nconst Printable = <T extends Constructor<Base>>(superClass: T): Constructor<Printable> & { message: string } & T =>\n    class extends superClass {\n        static message = \"hello\";\n        print() {\n            const output = this.x + \",\" + this.y;\n        }\n    }\n\n\nfunction Tagged<T extends Constructor<{}>>(superClass: T): Constructor<Tagged> & T {\n    class C extends superClass {\n        _tag: string;\n        constructor(...args: any[]) {\n            super(...args);\n            this._tag = \"hello\";\n        }\n    }\n    return C;\n}\n\nconst Thing1 = Tagged(Derived);\nconst Thing2 = Tagged(Printable(Derived));\nThing2.message;\n\nfunction f1() {\n    const thing = new Thing1(1, 2, 3);\n    thing.x;\n    thing._tag;\n}\n\nfunction f2() {\n    const thing = new Thing2(1, 2, 3);\n    thing.x;\n    thing._tag;\n    thing.print();\n}\n\nclass Thing3 extends Thing2 {\n    constructor(tag: string) {\n        super(10, 20, 30);\n        this._tag = tag;\n    }\n    test() {\n        this.print();\n    }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @declaration: true\n\ntype Constructor<T> = new (...args: any[]) => T;\n\nclass Base {\n  constructor(public x: number, public y: number) {}\n}\n\nclass Derived extends Base {\n  constructor(x: number, y: number, public z: number) {\n    super(x, y);\n  }\n}\n\nconst Printable = <T extends Constructor<Base>>(\n  superClass: T\n): Constructor<Printable> & { message: string } & T =>\n  class extends superClass {\n    static message = \"hello\";\n    print() {\n      const output = this.x + \",\" + this.y;\n    }\n  };\n\nfunction Tagged<T extends Constructor<{}>>(\n  superClass: T\n): Constructor<Tagged> & T {\n  class C extends superClass {\n    _tag: string;\n    constructor(...args: any[]) {\n      super(...args);\n      this._tag = \"hello\";\n    }\n  }\n  return C;\n}\n\nconst Thing1 = Tagged(Derived);\nconst Thing2 = Tagged(Printable(Derived));\nThing2.message;\n\nfunction f1() {\n  const thing = new Thing1(1, 2, 3);\n  thing.x;\n  thing._tag;\n}\n\nfunction f2() {\n  const thing = new Thing2(1, 2, 3);\n  thing.x;\n  thing._tag;\n  thing.print();\n}\n\nclass Thing3 extends Thing2 {\n  constructor(tag: string) {\n    super(10, 20, 30);\n    this._tag = tag;\n  }\n  test() {\n    this.print();\n  }\n}\n\n`;\n\nexports[`mixinClassesAnonymous.ts 1`] = `\ntype Constructor<T> = new(...args: any[]) => T;\n\nclass Base {\n    constructor(public x: number, public y: number) {}\n}\n\nclass Derived extends Base {\n    constructor(x: number, y: number, public z: number) {\n        super(x, y);\n    }\n}\n\nconst Printable = <T extends Constructor<Base>>(superClass: T) => class extends superClass {\n    static message = \"hello\";\n    print() {\n        const output = this.x + \",\" + this.y;\n    }\n}\n\nfunction Tagged<T extends Constructor<{}>>(superClass: T) {\n    class C extends superClass {\n        _tag: string;\n        constructor(...args: any[]) {\n            super(...args);\n            this._tag = \"hello\";\n        }\n    }\n    return C;\n}\n\nconst Thing1 = Tagged(Derived);\nconst Thing2 = Tagged(Printable(Derived));\nThing2.message;\n\nfunction f1() {\n    const thing = new Thing1(1, 2, 3);\n    thing.x;\n    thing._tag;\n}\n\nfunction f2() {\n    const thing = new Thing2(1, 2, 3);\n    thing.x;\n    thing._tag;\n    thing.print();\n}\n\nclass Thing3 extends Thing2 {\n    constructor(tag: string) {\n        super(10, 20, 30);\n        this._tag = tag;\n    }\n    test() {\n        this.print();\n    }\n}\n\n// Repro from #13805\n\nconst Timestamped = <CT extends Constructor<object>>(Base: CT) => {\n    return class extends Base {\n        timestamp = new Date();\n    };\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype Constructor<T> = new (...args: any[]) => T;\n\nclass Base {\n  constructor(public x: number, public y: number) {}\n}\n\nclass Derived extends Base {\n  constructor(x: number, y: number, public z: number) {\n    super(x, y);\n  }\n}\n\nconst Printable = <T extends Constructor<Base>>(superClass: T) =>\n  class extends superClass {\n    static message = \"hello\";\n    print() {\n      const output = this.x + \",\" + this.y;\n    }\n  };\n\nfunction Tagged<T extends Constructor<{}>>(superClass: T) {\n  class C extends superClass {\n    _tag: string;\n    constructor(...args: any[]) {\n      super(...args);\n      this._tag = \"hello\";\n    }\n  }\n  return C;\n}\n\nconst Thing1 = Tagged(Derived);\nconst Thing2 = Tagged(Printable(Derived));\nThing2.message;\n\nfunction f1() {\n  const thing = new Thing1(1, 2, 3);\n  thing.x;\n  thing._tag;\n}\n\nfunction f2() {\n  const thing = new Thing2(1, 2, 3);\n  thing.x;\n  thing._tag;\n  thing.print();\n}\n\nclass Thing3 extends Thing2 {\n  constructor(tag: string) {\n    super(10, 20, 30);\n    this._tag = tag;\n  }\n  test() {\n    this.print();\n  }\n}\n\n// Repro from #13805\n\nconst Timestamped = <CT extends Constructor<object>>(Base: CT) => {\n  return class extends Base {\n    timestamp = new Date();\n  };\n};\n\n`;\n\nexports[`mixinClassesMembers.ts 1`] = `\n// @declaration: true\n\ndeclare class C1 {\n    public a: number;\n    protected b: number;\n    private c: number;\n    constructor(s: string);\n    constructor(n: number);\n}\n\ndeclare class M1 {\n    constructor(...args: any[]);\n    p: number;\n    static p: number;\n}\n\ndeclare class M2 {\n    constructor(...args: any[]);\n    f(): number;\n    static f(): number;\n}\n\ndeclare const Mixed1: typeof M1 & typeof C1;\ndeclare const Mixed2: typeof C1 & typeof M1;\ndeclare const Mixed3: typeof M2 & typeof M1 & typeof C1;\ndeclare const Mixed4: typeof C1 & typeof M1 & typeof M2;\ndeclare const Mixed5: typeof M1 & typeof M2;\n\nfunction f1() {\n    let x1 = new Mixed1(\"hello\");\n    let x2 = new Mixed1(42);\n    let x3 = new Mixed2(\"hello\");\n    let x4 = new Mixed2(42);\n    let x5 = new Mixed3(\"hello\");\n    let x6 = new Mixed3(42);\n    let x7 = new Mixed4(\"hello\");\n    let x8 = new Mixed4(42);\n    let x9 = new Mixed5();\n}\n\nfunction f2() {\n    let x = new Mixed1(\"hello\");\n    x.a;\n    x.p;\n    Mixed1.p;\n}\n\nfunction f3() {\n    let x = new Mixed2(\"hello\");\n    x.a;\n    x.p;\n    Mixed2.p;\n}\n\nfunction f4() {\n    let x = new Mixed3(\"hello\");\n    x.a;\n    x.p;\n    x.f();\n    Mixed3.p;\n    Mixed3.f();\n}\n\nfunction f5() {\n    let x = new Mixed4(\"hello\");\n    x.a;\n    x.p;\n    x.f();\n    Mixed4.p;\n    Mixed4.f();\n}\n\nfunction f6() {\n    let x = new Mixed5();\n    x.p;\n    x.f();\n    Mixed5.p;\n    Mixed5.f();\n}\n\nclass C2 extends Mixed1 {\n    constructor() {\n        super(\"hello\");\n        this.a;\n        this.b;\n        this.p;\n    }\n}\n\nclass C3 extends Mixed3 {\n    constructor() {\n        super(42);\n        this.a;\n        this.b;\n        this.p;\n        this.f();\n    }\n    f() { return super.f(); }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @declaration: true\n\ndeclare class C1 {\n  public a: number;\n  protected b: number;\n  private c: number;\n  constructor(s: string);\n  constructor(n: number);\n}\n\ndeclare class M1 {\n  constructor(...args: any[]);\n  p: number;\n  static p: number;\n}\n\ndeclare class M2 {\n  constructor(...args: any[]);\n  f(): number;\n  static f(): number;\n}\n\ndeclare const Mixed1: typeof M1 & typeof C1;\ndeclare const Mixed2: typeof C1 & typeof M1;\ndeclare const Mixed3: typeof M2 & typeof M1 & typeof C1;\ndeclare const Mixed4: typeof C1 & typeof M1 & typeof M2;\ndeclare const Mixed5: typeof M1 & typeof M2;\n\nfunction f1() {\n  let x1 = new Mixed1(\"hello\");\n  let x2 = new Mixed1(42);\n  let x3 = new Mixed2(\"hello\");\n  let x4 = new Mixed2(42);\n  let x5 = new Mixed3(\"hello\");\n  let x6 = new Mixed3(42);\n  let x7 = new Mixed4(\"hello\");\n  let x8 = new Mixed4(42);\n  let x9 = new Mixed5();\n}\n\nfunction f2() {\n  let x = new Mixed1(\"hello\");\n  x.a;\n  x.p;\n  Mixed1.p;\n}\n\nfunction f3() {\n  let x = new Mixed2(\"hello\");\n  x.a;\n  x.p;\n  Mixed2.p;\n}\n\nfunction f4() {\n  let x = new Mixed3(\"hello\");\n  x.a;\n  x.p;\n  x.f();\n  Mixed3.p;\n  Mixed3.f();\n}\n\nfunction f5() {\n  let x = new Mixed4(\"hello\");\n  x.a;\n  x.p;\n  x.f();\n  Mixed4.p;\n  Mixed4.f();\n}\n\nfunction f6() {\n  let x = new Mixed5();\n  x.p;\n  x.f();\n  Mixed5.p;\n  Mixed5.f();\n}\n\nclass C2 extends Mixed1 {\n  constructor() {\n    super(\"hello\");\n    this.a;\n    this.b;\n    this.p;\n  }\n}\n\nclass C3 extends Mixed3 {\n  constructor() {\n    super(42);\n    this.a;\n    this.b;\n    this.p;\n    this.f();\n  }\n  f() {\n    return super.f();\n  }\n}\n\n`;\n\nexports[`nestedClassDeclaration.ts 1`] = `\n// nested classes are not allowed\n\nclass C {\n    x: string;\n}\n\nfunction foo() {\n    class C3 {\n    }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// nested classes are not allowed\n\nclass C {\n  x: string;\n}\n\nfunction foo() {\n  class C3 {}\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`classInsideBlock.ts 1`] = `\nfunction foo() {\n    class C { }\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo() {\n  class C {}\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`classAbstractAccessor.ts 1`] = `\n\nabstract class A {\n   abstract get a();\n   abstract get aa() { return 1; }\n   abstract set b(x: string);\n   abstract set bb(x: string) {}\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nabstract class A {\n  abstract get a();\n  abstract get aa() {\n    return 1;\n  }\n  abstract set b(x: string);\n  abstract set bb(x: string) {}\n}\n\n`;\n\nexports[`classAbstractAsIdentifier.ts 1`] = `\nclass abstract {\n    foo() { return 1; }\n}\n\nnew abstract;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass abstract {\n  foo() {\n    return 1;\n  }\n}\n\nnew abstract();\n\n`;\n\nexports[`classAbstractAssignabilityConstructorFunction.ts 1`] = `\nabstract class A { }\n\nvar AAA: new() => A;\n\nAAA = A;\nAAA = \"asdf\";~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nabstract class A {}\n\nvar AAA: new () => A;\n\nAAA = A;\nAAA = \"asdf\";\n\n`;\n\nexports[`classAbstractClinterfaceAssignability.ts 1`] = `\n\nvar I: IConstructor;\n\nabstract class A {\n    x: number;\n    static y: number;\n}\n\nvar AA: typeof A;\nAA = I;\n\nvar AAA: typeof I;\nAAA = A;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar I: IConstructor;\n\nabstract class A {\n  x: number;\n  static y: number;\n}\n\nvar AA: typeof A;\nAA = I;\n\nvar AAA: typeof I;\nAAA = A;\n\n`;\n\nexports[`classAbstractConstructorAssignability.ts 1`] = `\n\nclass A {}\n\nabstract class B extends A {}\n\nclass C extends B {}\n\nvar AA : typeof A = B;\nvar BB : typeof B = A;\nvar CC : typeof C = B;\n\nnew AA;\nnew BB;\nnew CC;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {}\n\nabstract class B extends A {}\n\nclass C extends B {}\n\nvar AA: typeof A = B;\nvar BB: typeof B = A;\nvar CC: typeof C = B;\n\nnew AA();\nnew BB();\nnew CC();\n\n`;\n\nexports[`classAbstractCrashedOnce.ts 1`] = `\nabstract class foo {\n    protected abstract test();\n}\n\nclass bar extends foo {\n    test() {\n    }\n}\nvar x = new bar();~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nabstract class foo {\n  protected abstract test();\n}\n\nclass bar extends foo {\n  test() {}\n}\nvar x = new bar();\n\n`;\n\nexports[`classAbstractExtends.ts 1`] = `\n\nclass A {\n    foo() {}\n}\n\nabstract class B extends A {\n    abstract bar();\n}\n\nclass C extends B { }\n\nabstract class D extends B {}\n\nclass E extends B {\n    bar() {}\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {\n  foo() {}\n}\n\nabstract class B extends A {\n  abstract bar();\n}\n\nclass C extends B {}\n\nabstract class D extends B {}\n\nclass E extends B {\n  bar() {}\n}\n\n`;\n\nexports[`classAbstractFactoryFunction.ts 1`] = `\n\nclass A {}\nabstract class B extends A {}\n\nfunction NewA(Factory: typeof A) {\n    return new A;\n}\n\nfunction NewB(Factory: typeof B) {\n    return new B;\n}\n\nNewA(A);\nNewA(B);\n\nNewB(A);\nNewB(B);~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {}\nabstract class B extends A {}\n\nfunction NewA(Factory: typeof A) {\n  return new A();\n}\n\nfunction NewB(Factory: typeof B) {\n  return new B();\n}\n\nNewA(A);\nNewA(B);\n\nNewB(A);\nNewB(B);\n\n`;\n\nexports[`classAbstractGeneric.ts 1`] = `\nabstract class A<T> {\n    t: T;\n\n    abstract foo(): T;\n    abstract bar(t: T);\n}\n\nabstract class B<T> extends A {}\n\nclass C<T> extends A {}\n\nclass D extends A {}\n\nclass E<T> extends A {\n    foo() { return this.t; }\n}\n\nclass F<T> extends A {\n    bar(t : T) {}\n}\n\nclass G<T> extends A {\n    foo() { return this.t; }\n    bar(t: T) { }\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nabstract class A<T> {\n  t: T;\n\n  abstract foo(): T;\n  abstract bar(t: T);\n}\n\nabstract class B<T> extends A {}\n\nclass C<T> extends A {}\n\nclass D extends A {}\n\nclass E<T> extends A {\n  foo() {\n    return this.t;\n  }\n}\n\nclass F<T> extends A {\n  bar(t: T) {}\n}\n\nclass G<T> extends A {\n  foo() {\n    return this.t;\n  }\n  bar(t: T) {}\n}\n\n`;\n\nexports[`classAbstractImportInstantiation.ts 1`] = `\n\nexport abstract class A {}\n\nnew A;\n\n\nnew myA;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport abstract class A {}\n\nnew A();\n\nnew myA();\n\n`;\n\nexports[`classAbstractInAModule.ts 1`] = `\n\nexport abstract class A {}\nexport class B extends A {}\n\n\nnew M.A;\nnew M.B;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport abstract class A {}\nexport class B extends A {}\n\nnew M.A();\nnew M.B();\n\n`;\n\nexports[`classAbstractInheritance.ts 1`] = `\nabstract class A {}\n\nabstract class B extends A {}\n\nclass C extends A {}\n\nabstract class AA {\n    abstract foo();\n}\n\nabstract class BB extends AA {}\n\nclass CC extends AA {}\n\nclass DD extends BB {}\n\nabstract class EE extends BB {}\n\nclass FF extends CC {}\n\nabstract class GG extends CC {}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nabstract class A {}\n\nabstract class B extends A {}\n\nclass C extends A {}\n\nabstract class AA {\n  abstract foo();\n}\n\nabstract class BB extends AA {}\n\nclass CC extends AA {}\n\nclass DD extends BB {}\n\nabstract class EE extends BB {}\n\nclass FF extends CC {}\n\nabstract class GG extends CC {}\n\n`;\n\nexports[`classAbstractInstantiations1.ts 1`] = `\n\nabstract class A {}\n\nclass B extends A {}\n\nabstract class C extends B {}\n\nnew A;\nnew A(1);\nnew B;\nnew C;\n\nvar a : A;\nvar b : B;\nvar c : C;\n\na = new B;\nb = new B;\nc = new B;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nabstract class A {}\n\nclass B extends A {}\n\nabstract class C extends B {}\n\nnew A();\nnew A(1);\nnew B();\nnew C();\n\nvar a: A;\nvar b: B;\nvar c: C;\n\na = new B();\nb = new B();\nc = new B();\n\n`;\n\nexports[`classAbstractInstantiations2.ts 1`] = `\nclass A {\n}\n\nabstract class B {\n    foo(): number { return this.bar(); }\n    abstract bar() : number;\n}\n\nnew B;\n\nvar BB: typeof B = B;\nvar AA: typeof A = BB;\nnew AA;\n\nfunction constructB(Factory : typeof B) {\n    new Factory;\n}\n\nvar BB = B;\nnew BB;\n\nvar x : any = C;\nnew x;\n\nclass C extends B { }\n\nabstract class D extends B { }\n\nclass E extends B {\n    bar() { return 1; }\n}\n\nabstract class F extends B {\n    abstract foo() : number;\n    bar() { return 2; }\n}\n\nabstract class G {\n    abstract qux(x : number) : string;\n    abstract qux() : number;\n    y : number;\n    abstract quz(x : number, y : string) : boolean;\n\n    abstract nom(): boolean;\n    nom(x : number): boolean;\n}\n\nclass H {\n    abstract baz() : number;\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {}\n\nabstract class B {\n  foo(): number {\n    return this.bar();\n  }\n  abstract bar(): number;\n}\n\nnew B();\n\nvar BB: typeof B = B;\nvar AA: typeof A = BB;\nnew AA();\n\nfunction constructB(Factory: typeof B) {\n  new Factory();\n}\n\nvar BB = B;\nnew BB();\n\nvar x: any = C;\nnew x();\n\nclass C extends B {}\n\nabstract class D extends B {}\n\nclass E extends B {\n  bar() {\n    return 1;\n  }\n}\n\nabstract class F extends B {\n  abstract foo(): number;\n  bar() {\n    return 2;\n  }\n}\n\nabstract class G {\n  abstract qux(x: number): string;\n  abstract qux(): number;\n  y: number;\n  abstract quz(x: number, y: string): boolean;\n\n  abstract nom(): boolean;\n  nom(x: number): boolean;\n}\n\nclass H {\n  abstract baz(): number;\n}\n\n`;\n\nexports[`classAbstractMethodInNonAbstractClass.ts 1`] = `\nclass A {\n    abstract foo();\n}\n\nclass B {\n    abstract foo() {}\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {\n  abstract foo();\n}\n\nclass B {\n  abstract foo() {}\n}\n\n`;\n\nexports[`classAbstractMethodWithImplementation.ts 1`] = `\nabstract class A {\n    abstract foo() {}\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nabstract class A {\n  abstract foo() {}\n}\n\n`;\n\nexports[`classAbstractMixedWithModifiers.ts 1`] = `\nabstract class A {\n    abstract foo_a();\n    \n    public abstract foo_b();\n    protected abstract foo_c();\n    private abstract foo_d();\n    \n    abstract public foo_bb();\n    abstract protected foo_cc();\n    abstract private foo_dd();\n    \n    abstract static foo_d();\n    \n    static abstract foo_e();\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nabstract class A {\n  abstract foo_a();\n\n  public abstract foo_b();\n  protected abstract foo_c();\n  private abstract foo_d();\n\n  public abstract foo_bb();\n  protected abstract foo_cc();\n  private abstract foo_dd();\n\n  static abstract foo_d();\n\n  static abstract foo_e();\n}\n\n`;\n\nexports[`classAbstractOverloads.ts 1`] = `\nabstract class A {\n    abstract foo();\n    abstract foo() : number;\n    abstract foo();\n    \n    abstract bar();\n    bar();\n    abstract bar();\n    \n    abstract baz();\n    baz();\n    abstract baz();\n    baz() {}\n    \n    qux();\n}\n\nabstract class B {\n    abstract foo() : number;\n    abstract foo();\n    x : number;\n    abstract foo();\n    abstract foo();\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nabstract class A {\n  abstract foo();\n  abstract foo(): number;\n  abstract foo();\n\n  abstract bar();\n  bar();\n  abstract bar();\n\n  abstract baz();\n  baz();\n  abstract baz();\n  baz() {}\n\n  qux();\n}\n\nabstract class B {\n  abstract foo(): number;\n  abstract foo();\n  x: number;\n  abstract foo();\n  abstract foo();\n}\n\n`;\n\nexports[`classAbstractOverrideWithAbstract.ts 1`] = `\nclass A {\n    foo() {}\n}\n\nabstract class B extends A {\n    abstract foo();\n}\n\nabstract class AA {\n    foo() {}\n    abstract bar();\n}\n\nabstract class BB extends AA {\n    abstract foo();\n    bar () {}\n}\n\nclass CC extends BB {}\n\nclass DD extends BB {\n    foo() {}\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {\n  foo() {}\n}\n\nabstract class B extends A {\n  abstract foo();\n}\n\nabstract class AA {\n  foo() {}\n  abstract bar();\n}\n\nabstract class BB extends AA {\n  abstract foo();\n  bar() {}\n}\n\nclass CC extends BB {}\n\nclass DD extends BB {\n  foo() {}\n}\n\n`;\n\nexports[`classAbstractProperties.ts 1`] = `\nabstract class A {\n    abstract x : number;\n    public abstract y : number;\n    protected abstract z : number;\n    private abstract w : number;\n    \n    abstract m: () => void; \n    \n    abstract foo_x() : number;\n    public abstract foo_y() : number;\n    protected abstract foo_z() : number;\n    private abstract foo_w() : number;\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nabstract class A {\n  abstract x: number;\n  public abstract y: number;\n  protected abstract z: number;\n  private abstract w: number;\n\n  abstract m: () => void;\n\n  abstract foo_x(): number;\n  public abstract foo_y(): number;\n  protected abstract foo_z(): number;\n  private abstract foo_w(): number;\n}\n\n`;\n\nexports[`classAbstractSingleLineDecl.ts 1`] = `\nabstract class A {}\n\nabstract\nclass B {}\n\nabstract\n\nclass C {}\n\nnew A;\nnew B;\nnew C;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nabstract class A {}\n\nabstract;\nclass B {}\n\nabstract;\n\nclass C {}\n\nnew A();\nnew B();\nnew C();\n\n`;\n\nexports[`classAbstractSuperCalls.ts 1`] = `\n\nclass A {\n    foo() { return 1; }\n}\n\nabstract class B extends A {\n    abstract foo();\n    bar() { super.foo(); }\n    baz() { return this.foo; }\n}\n\nclass C extends B {\n    foo() { return 2; }\n    qux() { return super.foo() || super.foo; }\n    norf() { return super.bar(); }\n}\n\nclass AA {\n    foo() { return 1; }\n    bar() { return this.foo(); }\n}\n\nabstract class BB extends AA {\n    abstract foo();\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {\n  foo() {\n    return 1;\n  }\n}\n\nabstract class B extends A {\n  abstract foo();\n  bar() {\n    super.foo();\n  }\n  baz() {\n    return this.foo;\n  }\n}\n\nclass C extends B {\n  foo() {\n    return 2;\n  }\n  qux() {\n    return super.foo() || super.foo;\n  }\n  norf() {\n    return super.bar();\n  }\n}\n\nclass AA {\n  foo() {\n    return 1;\n  }\n  bar() {\n    return this.foo();\n  }\n}\n\nabstract class BB extends AA {\n  abstract foo();\n}\n\n`;\n\nexports[`classAbstractUsingAbstractMethod1.ts 1`] = `\nabstract class A {\n    abstract foo() : number;\n}\n\nclass B extends A {\n    foo() { return 1; }\n}\n\nabstract class C extends A  {\n    abstract foo() : number;\n}\n\nvar a = new B;\na.foo();\n\na = new C;\na.foo();~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nabstract class A {\n  abstract foo(): number;\n}\n\nclass B extends A {\n  foo() {\n    return 1;\n  }\n}\n\nabstract class C extends A {\n  abstract foo(): number;\n}\n\nvar a = new B();\na.foo();\n\na = new C();\na.foo();\n\n`;\n\nexports[`classAbstractUsingAbstractMethods2.ts 1`] = `\nclass A {\n    abstract foo();\n}\n\nclass B extends A  {}\n\nabstract class C extends A {}\n\nclass D extends A {\n    foo() {}\n}\n\nabstract class E extends A {\n    foo() {}\n}\n\nabstract class AA {\n    abstract foo();\n}\n\nclass BB extends AA  {}\n\nabstract class CC extends AA {}\n\nclass DD extends AA {\n    foo() {}\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass A {\n  abstract foo();\n}\n\nclass B extends A {}\n\nabstract class C extends A {}\n\nclass D extends A {\n  foo() {}\n}\n\nabstract class E extends A {\n  foo() {}\n}\n\nabstract class AA {\n  abstract foo();\n}\n\nclass BB extends AA {}\n\nabstract class CC extends AA {}\n\nclass DD extends AA {\n  foo() {}\n}\n\n`;\n\nexports[`classAbstractWithInterface.ts 1`] = `\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractAccessor.ts",
    "content": "\r\nabstract class A {\r\n   abstract get a();\r\n   abstract get aa() { return 1; }\r\n   abstract set b(x: string);\r\n   abstract set bb(x: string) {}\r\n}\r\n"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractAsIdentifier.ts",
    "content": "class abstract {\r\n    foo() { return 1; }\r\n}\r\n\r\nnew abstract;"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractAssignabilityConstructorFunction.ts",
    "content": "abstract class A { }\r\n\r\nvar AAA: new() => A;\r\n\r\nAAA = A;\r\nAAA = \"asdf\";"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractClinterfaceAssignability.ts",
    "content": "\r\nvar I: IConstructor;\r\n\r\nabstract class A {\r\n    x: number;\r\n    static y: number;\r\n}\r\n\r\nvar AA: typeof A;\r\nAA = I;\r\n\r\nvar AAA: typeof I;\r\nAAA = A;"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractConstructorAssignability.ts",
    "content": "\r\nclass A {}\r\n\r\nabstract class B extends A {}\r\n\r\nclass C extends B {}\r\n\r\nvar AA : typeof A = B;\r\nvar BB : typeof B = A;\r\nvar CC : typeof C = B;\r\n\r\nnew AA;\r\nnew BB;\r\nnew CC;"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractCrashedOnce.ts",
    "content": "abstract class foo {\r\n    protected abstract test();\r\n}\r\n\r\nclass bar extends foo {\r\n    test() {\r\n    }\r\n}\r\nvar x = new bar();"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractExtends.ts",
    "content": "\r\nclass A {\r\n    foo() {}\r\n}\r\n\r\nabstract class B extends A {\r\n    abstract bar();\r\n}\r\n\r\nclass C extends B { }\r\n\r\nabstract class D extends B {}\r\n\r\nclass E extends B {\r\n    bar() {}\r\n}"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractFactoryFunction.ts",
    "content": "\r\nclass A {}\r\nabstract class B extends A {}\r\n\r\nfunction NewA(Factory: typeof A) {\r\n    return new A;\r\n}\r\n\r\nfunction NewB(Factory: typeof B) {\r\n    return new B;\r\n}\r\n\r\nNewA(A);\r\nNewA(B);\r\n\r\nNewB(A);\r\nNewB(B);"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractGeneric.ts",
    "content": "abstract class A<T> {\r\n    t: T;\r\n\r\n    abstract foo(): T;\r\n    abstract bar(t: T);\r\n}\r\n\r\nabstract class B<T> extends A {}\r\n\r\nclass C<T> extends A {}\r\n\r\nclass D extends A {}\r\n\r\nclass E<T> extends A {\r\n    foo() { return this.t; }\r\n}\r\n\r\nclass F<T> extends A {\r\n    bar(t : T) {}\r\n}\r\n\r\nclass G<T> extends A {\r\n    foo() { return this.t; }\r\n    bar(t: T) { }\r\n}"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractImportInstantiation.ts",
    "content": "\r\nexport abstract class A {}\r\n\r\nnew A;\r\n\r\n\r\nnew myA;\r\n"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractInAModule.ts",
    "content": "\r\nexport abstract class A {}\r\nexport class B extends A {}\r\n\r\n\r\nnew M.A;\r\nnew M.B;"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractInheritance.ts",
    "content": "abstract class A {}\r\n\r\nabstract class B extends A {}\r\n\r\nclass C extends A {}\r\n\r\nabstract class AA {\r\n    abstract foo();\r\n}\r\n\r\nabstract class BB extends AA {}\r\n\r\nclass CC extends AA {}\r\n\r\nclass DD extends BB {}\r\n\r\nabstract class EE extends BB {}\r\n\r\nclass FF extends CC {}\r\n\r\nabstract class GG extends CC {}"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractInstantiations1.ts",
    "content": "\r\nabstract class A {}\r\n\r\nclass B extends A {}\r\n\r\nabstract class C extends B {}\r\n\r\nnew A;\r\nnew A(1);\r\nnew B;\r\nnew C;\r\n\r\nvar a : A;\r\nvar b : B;\r\nvar c : C;\r\n\r\na = new B;\r\nb = new B;\r\nc = new B;\r\n"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractInstantiations2.ts",
    "content": "class A {\r\n}\r\n\r\nabstract class B {\r\n    foo(): number { return this.bar(); }\r\n    abstract bar() : number;\r\n}\r\n\r\nnew B;\r\n\r\nvar BB: typeof B = B;\r\nvar AA: typeof A = BB;\r\nnew AA;\r\n\r\nfunction constructB(Factory : typeof B) {\r\n    new Factory;\r\n}\r\n\r\nvar BB = B;\r\nnew BB;\r\n\r\nvar x : any = C;\r\nnew x;\r\n\r\nclass C extends B { }\r\n\r\nabstract class D extends B { }\r\n\r\nclass E extends B {\r\n    bar() { return 1; }\r\n}\r\n\r\nabstract class F extends B {\r\n    abstract foo() : number;\r\n    bar() { return 2; }\r\n}\r\n\r\nabstract class G {\r\n    abstract qux(x : number) : string;\r\n    abstract qux() : number;\r\n    y : number;\r\n    abstract quz(x : number, y : string) : boolean;\r\n\r\n    abstract nom(): boolean;\r\n    nom(x : number): boolean;\r\n}\r\n\r\nclass H {\r\n    abstract baz() : number;\r\n}"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractMethodInNonAbstractClass.ts",
    "content": "class A {\r\n    abstract foo();\r\n}\r\n\r\nclass B {\r\n    abstract foo() {}\r\n}"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractMethodWithImplementation.ts",
    "content": "abstract class A {\r\n    abstract foo() {}\r\n}"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractMixedWithModifiers.ts",
    "content": "abstract class A {\r\n    abstract foo_a();\r\n    \r\n    public abstract foo_b();\r\n    protected abstract foo_c();\r\n    private abstract foo_d();\r\n    \r\n    abstract public foo_bb();\r\n    abstract protected foo_cc();\r\n    abstract private foo_dd();\r\n    \r\n    abstract static foo_d();\r\n    \r\n    static abstract foo_e();\r\n}"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractOverloads.ts",
    "content": "abstract class A {\r\n    abstract foo();\r\n    abstract foo() : number;\r\n    abstract foo();\r\n    \r\n    abstract bar();\r\n    bar();\r\n    abstract bar();\r\n    \r\n    abstract baz();\r\n    baz();\r\n    abstract baz();\r\n    baz() {}\r\n    \r\n    qux();\r\n}\r\n\r\nabstract class B {\r\n    abstract foo() : number;\r\n    abstract foo();\r\n    x : number;\r\n    abstract foo();\r\n    abstract foo();\r\n}"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractOverrideWithAbstract.ts",
    "content": "class A {\r\n    foo() {}\r\n}\r\n\r\nabstract class B extends A {\r\n    abstract foo();\r\n}\r\n\r\nabstract class AA {\r\n    foo() {}\r\n    abstract bar();\r\n}\r\n\r\nabstract class BB extends AA {\r\n    abstract foo();\r\n    bar () {}\r\n}\r\n\r\nclass CC extends BB {}\r\n\r\nclass DD extends BB {\r\n    foo() {}\r\n}"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractProperties.ts",
    "content": "abstract class A {\r\n    abstract x : number;\r\n    public abstract y : number;\r\n    protected abstract z : number;\r\n    private abstract w : number;\r\n    \r\n    abstract m: () => void; \r\n    \r\n    abstract foo_x() : number;\r\n    public abstract foo_y() : number;\r\n    protected abstract foo_z() : number;\r\n    private abstract foo_w() : number;\r\n}"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractSingleLineDecl.ts",
    "content": "abstract class A {}\r\n\r\nabstract\r\nclass B {}\r\n\r\nabstract\r\n\r\nclass C {}\r\n\r\nnew A;\r\nnew B;\r\nnew C;"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractSuperCalls.ts",
    "content": "\r\nclass A {\r\n    foo() { return 1; }\r\n}\r\n\r\nabstract class B extends A {\r\n    abstract foo();\r\n    bar() { super.foo(); }\r\n    baz() { return this.foo; }\r\n}\r\n\r\nclass C extends B {\r\n    foo() { return 2; }\r\n    qux() { return super.foo() || super.foo; }\r\n    norf() { return super.bar(); }\r\n}\r\n\r\nclass AA {\r\n    foo() { return 1; }\r\n    bar() { return this.foo(); }\r\n}\r\n\r\nabstract class BB extends AA {\r\n    abstract foo();\r\n}\r\n"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractUsingAbstractMethod1.ts",
    "content": "abstract class A {\r\n    abstract foo() : number;\r\n}\r\n\r\nclass B extends A {\r\n    foo() { return 1; }\r\n}\r\n\r\nabstract class C extends A  {\r\n    abstract foo() : number;\r\n}\r\n\r\nvar a = new B;\r\na.foo();\r\n\r\na = new C;\r\na.foo();"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractUsingAbstractMethods2.ts",
    "content": "class A {\r\n    abstract foo();\r\n}\r\n\r\nclass B extends A  {}\r\n\r\nabstract class C extends A {}\r\n\r\nclass D extends A {\r\n    foo() {}\r\n}\r\n\r\nabstract class E extends A {\r\n    foo() {}\r\n}\r\n\r\nabstract class AA {\r\n    abstract foo();\r\n}\r\n\r\nclass BB extends AA  {}\r\n\r\nabstract class CC extends AA {}\r\n\r\nclass DD extends AA {\r\n    foo() {}\r\n}"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractWithInterface.ts",
    "content": ""
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classAbstractKeyword/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classHeritageSpecification/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`classAppearsToHaveMembersOfObject.ts 1`] = `\nclass C { foo: string; }\n\nvar c: C;\nvar r = c.toString();\nvar r2 = c.hasOwnProperty('');\nvar o: Object = c;\nvar o2: {} = c;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {\n  foo: string;\n}\n\nvar c: C;\nvar r = c.toString();\nvar r2 = c.hasOwnProperty(\"\");\nvar o: Object = c;\nvar o2: {} = c;\n\n`;\n\nexports[`classExtendingClass.ts 1`] = `\nclass C {\n    foo: string;\n    thing() { }\n    static other() { }\n}\n\nclass D extends C {\n    bar: string;\n}\n\nvar d: D;\nvar r = d.foo;\nvar r2 = d.bar;\nvar r3 = d.thing();\nvar r4 = D.other();\n\nclass C2<T> {\n    foo: T;\n    thing(x: T) { }\n    static other<T>(x: T) { }\n}\n\nclass D2<T> extends C2<T> {\n    bar: string;\n}\n\nvar d2: D2<string>;\nvar r5 = d2.foo;\nvar r6 = d2.bar;\nvar r7 = d2.thing('');\nvar r8 = D2.other(1);~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {\n  foo: string;\n  thing() {}\n  static other() {}\n}\n\nclass D extends C {\n  bar: string;\n}\n\nvar d: D;\nvar r = d.foo;\nvar r2 = d.bar;\nvar r3 = d.thing();\nvar r4 = D.other();\n\nclass C2<T> {\n  foo: T;\n  thing(x: T) {}\n  static other<T>(x: T) {}\n}\n\nclass D2<T> extends C2<T> {\n  bar: string;\n}\n\nvar d2: D2<string>;\nvar r5 = d2.foo;\nvar r6 = d2.bar;\nvar r7 = d2.thing(\"\");\nvar r8 = D2.other(1);\n\n`;\n\nexports[`classExtendsItselfIndirectly.ts 1`] = `\nclass C extends E { foo: string; } // error\n\nclass D extends C { bar: string; }\n\nclass E extends D { baz: number; }\n\nclass C2<T> extends E2<T> { foo: T; } // error\n\nclass D2<T> extends C2<T> { bar: T; }\n\nclass E2<T> extends D2<T> { baz: T; }~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C extends E {\n  foo: string;\n} // error\n\nclass D extends C {\n  bar: string;\n}\n\nclass E extends D {\n  baz: number;\n}\n\nclass C2<T> extends E2<T> {\n  foo: T;\n} // error\n\nclass D2<T> extends C2<T> {\n  bar: T;\n}\n\nclass E2<T> extends D2<T> {\n  baz: T;\n}\n\n`;\n\nexports[`classIsSubtypeOfBaseType.ts 1`] = `\nclass Base<T> {\n    foo: T;\n}\n\nclass Derived extends Base<string> {\n    foo: any;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass Base<T> {\n  foo: T;\n}\n\nclass Derived extends Base<string> {\n  foo: any;\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classHeritageSpecification/classAppearsToHaveMembersOfObject.ts",
    "content": "class C { foo: string; }\r\n\r\nvar c: C;\r\nvar r = c.toString();\r\nvar r2 = c.hasOwnProperty('');\r\nvar o: Object = c;\r\nvar o2: {} = c;\r\n"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingClass.ts",
    "content": "class C {\r\n    foo: string;\r\n    thing() { }\r\n    static other() { }\r\n}\r\n\r\nclass D extends C {\r\n    bar: string;\r\n}\r\n\r\nvar d: D;\r\nvar r = d.foo;\r\nvar r2 = d.bar;\r\nvar r3 = d.thing();\r\nvar r4 = D.other();\r\n\r\nclass C2<T> {\r\n    foo: T;\r\n    thing(x: T) { }\r\n    static other<T>(x: T) { }\r\n}\r\n\r\nclass D2<T> extends C2<T> {\r\n    bar: string;\r\n}\r\n\r\nvar d2: D2<string>;\r\nvar r5 = d2.foo;\r\nvar r6 = d2.bar;\r\nvar r7 = d2.thing('');\r\nvar r8 = D2.other(1);"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly.ts",
    "content": "class C extends E { foo: string; } // error\r\n\r\nclass D extends C { bar: string; }\r\n\r\nclass E extends D { baz: number; }\r\n\r\nclass C2<T> extends E2<T> { foo: T; } // error\r\n\r\nclass D2<T> extends C2<T> { bar: T; }\r\n\r\nclass E2<T> extends D2<T> { baz: T; }"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classHeritageSpecification/classIsSubtypeOfBaseType.ts",
    "content": "class Base<T> {\r\n    foo: T;\r\n}\r\n\r\nclass Derived extends Base<string> {\r\n    foo: any;\r\n}\r\n"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classHeritageSpecification/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/classInsideBlock.ts",
    "content": "function foo() {\r\n    class C { }\r\n}"
  },
  {
    "path": "tests/typescript/conformance/classes/classDeclarations/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/classes/classExpression.ts",
    "content": "var x = class C {\r\n}\r\n\r\nvar y = {\r\n    foo: class C2 {\r\n    }\r\n}\r\n\r\nvar z = class C4 {\r\n}\r\n"
  },
  {
    "path": "tests/typescript/conformance/classes/constructorDeclarations/constructorParameters/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`constructorDefaultValuesReferencingThis.ts 1`] = `\nclass C {\n    constructor(x = this) { }\n}\n\nclass D<T> {\n    constructor(x = this) { }\n}\n\nclass E<T> {\n    constructor(public x = this) { }\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {\n  constructor(x = this) {}\n}\n\nclass D<T> {\n  constructor(x = this) {}\n}\n\nclass E<T> {\n  constructor(public x = this) {}\n}\n\n`;\n\nexports[`constructorImplementationWithDefaultValues.ts 1`] = `\nclass C {\n    constructor(x);\n    constructor(x = 1) {\n        var y = x;\n    }\n}\n\nclass D<T> {\n    constructor(x);\n    constructor(x:T = null) {\n        var y = x;\n    }\n}\n\nclass E<T extends Date> {\n    constructor(x);\n    constructor(x: T = null) {\n        var y = x;\n    }\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {\n  constructor(x);\n  constructor(x = 1) {\n    var y = x;\n  }\n}\n\nclass D<T> {\n  constructor(x);\n  constructor(x: T = null) {\n    var y = x;\n  }\n}\n\nclass E<T extends Date> {\n  constructor(x);\n  constructor(x: T = null) {\n    var y = x;\n  }\n}\n\n`;\n\nexports[`constructorImplementationWithDefaultValues2.ts 1`] = `\nclass C {\n    constructor(x);\n    constructor(public x: string = 1) {\n        var y = x;\n    }\n}\n\nclass D<T, U> {\n    constructor(x: T, y: U);\n    constructor(x: T = 1, public y: U = x) {\n        var z = x;\n    }\n}\n\nclass E<T extends Date> {\n    constructor(x);\n    constructor(x: T = new Date()) {\n        var y = x;\n    }\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {\n  constructor(x);\n  constructor(public x: string = 1) {\n    var y = x;\n  }\n}\n\nclass D<T, U> {\n  constructor(x: T, y: U);\n  constructor(x: T = 1, public y: U = x) {\n    var z = x;\n  }\n}\n\nclass E<T extends Date> {\n  constructor(x);\n  constructor(x: T = new Date()) {\n    var y = x;\n  }\n}\n\n`;\n\nexports[`constructorOverloadsWithDefaultValues.ts 1`] = `\nclass C {\n    foo: string;\n    constructor(x = 1);\n    constructor() {\n    }\n}\n\nclass D<T> {\n    foo: string;\n    constructor(x = 1);\n    constructor() {\n    }\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {\n  foo: string;\n  constructor(x = 1);\n  constructor() {}\n}\n\nclass D<T> {\n  foo: string;\n  constructor(x = 1);\n  constructor() {}\n}\n\n`;\n\nexports[`constructorOverloadsWithOptionalParameters.ts 1`] = `\nclass C {\n    foo: string;\n    constructor(x?, y?: any[]); \n    constructor() {\n    }\n}\n\nclass D<T> {\n    foo: string;\n    constructor(x?, y?: any[]); \n    constructor() {\n    }\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {\n  foo: string;\n  constructor(x?, y?: any[]);\n  constructor() {}\n}\n\nclass D<T> {\n  foo: string;\n  constructor(x?, y?: any[]);\n  constructor() {}\n}\n\n`;\n\nexports[`constructorParameterProperties.ts 1`] = `\nclass C {\n    y: string;\n    constructor(private x: string, protected z: string) { }\n}\n\nvar c: C;\nvar r = c.y;\nvar r2 = c.x; // error\nvar r3 = c.z; // error\n\nclass D<T> {\n    y: T;\n    constructor(a: T, private x: T, protected z: T) { }\n}\n\nvar d: D<string>;\nvar r = d.y;\nvar r2 = d.x; // error\nvar r3 = d.a; // error\nvar r4 = d.z; // error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {\n  y: string;\n  constructor(private x: string, protected z: string) {}\n}\n\nvar c: C;\nvar r = c.y;\nvar r2 = c.x; // error\nvar r3 = c.z; // error\n\nclass D<T> {\n  y: T;\n  constructor(a: T, private x: T, protected z: T) {}\n}\n\nvar d: D<string>;\nvar r = d.y;\nvar r2 = d.x; // error\nvar r3 = d.a; // error\nvar r4 = d.z; // error\n\n`;\n\nexports[`constructorParameterProperties2.ts 1`] = `\nclass C {\n    y: number;\n    constructor(y: number) { } // ok\n}\n\nvar c: C;\nvar r = c.y;\n\nclass D {\n    y: number;\n    constructor(public y: number) { }\n}\n\nvar d: D;\nvar r2 = d.y;\n\nclass E {\n    y: number;\n    constructor(private y: number) { }\n}\n\nvar e: E;\nvar r3 = e.y; // error\n\nclass F {\n    y: number;\n    constructor(protected y: number) { }\n}\n\nvar f: F;\nvar r4 = f.y; // error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {\n  y: number;\n  constructor(y: number) {} // ok\n}\n\nvar c: C;\nvar r = c.y;\n\nclass D {\n  y: number;\n  constructor(public y: number) {}\n}\n\nvar d: D;\nvar r2 = d.y;\n\nclass E {\n  y: number;\n  constructor(private y: number) {}\n}\n\nvar e: E;\nvar r3 = e.y; // error\n\nclass F {\n  y: number;\n  constructor(protected y: number) {}\n}\n\nvar f: F;\nvar r4 = f.y; // error\n\n`;\n\nexports[`declarationEmitReadonly.ts 1`] = `\n// @declaration: true\n\nclass C {\n    constructor(readonly x: number) {}\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @declaration: true\n\nclass C {\n  constructor(readonly x: number) {}\n}\n\n`;\n\nexports[`readonlyConstructorAssignment.ts 1`] = `\n// Tests that readonly parameter properties behave like regular readonly properties\n\nclass A {\n    constructor(readonly x: number) {\n        this.x = 0;\n    }\n}\n\nclass B extends A {\n    constructor(x: number) {\n        super(x);\n        // Fails, x is readonly\n        this.x = 1;\n    }\n}\n\nclass C extends A {\n    // This is the usual behavior of readonly properties:\n    // if one is redeclared in a base class, then it can be assigned to.\n    constructor(readonly x: number) {\n        super(x);\n        this.x = 1;\n    }\n}\n\nclass D {\n    constructor(private readonly x: number) {\n        this.x = 0;\n    }\n}\n\n// Fails, can't redeclare readonly property\nclass E extends D {\n    constructor(readonly x: number) {\n        super(x);\n        this.x = 1;\n    }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// Tests that readonly parameter properties behave like regular readonly properties\n\nclass A {\n  constructor(readonly x: number) {\n    this.x = 0;\n  }\n}\n\nclass B extends A {\n  constructor(x: number) {\n    super(x);\n    // Fails, x is readonly\n    this.x = 1;\n  }\n}\n\nclass C extends A {\n  // This is the usual behavior of readonly properties:\n  // if one is redeclared in a base class, then it can be assigned to.\n  constructor(readonly x: number) {\n    super(x);\n    this.x = 1;\n  }\n}\n\nclass D {\n  constructor(private readonly x: number) {\n    this.x = 0;\n  }\n}\n\n// Fails, can't redeclare readonly property\nclass E extends D {\n  constructor(readonly x: number) {\n    super(x);\n    this.x = 1;\n  }\n}\n\n`;\n\nexports[`readonlyInConstructorParameters.ts 1`] = `\nclass C {\n    constructor(readonly x: number) {}\n}\nnew C(1).x = 2;\n\nclass E {\n    constructor(readonly public x: number) {}\n}\n\nclass F {\n    constructor(private readonly x: number) {}\n}\nnew F(1).x;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {\n  constructor(readonly x: number) {}\n}\nnew C(1).x = 2;\n\nclass E {\n  constructor(public readonly x: number) {}\n}\n\nclass F {\n  constructor(private readonly x: number) {}\n}\nnew F(1).x;\n\n`;\n\nexports[`readonlyReadonly.ts 1`] = `\nclass C {\n    readonly readonly x: number;\n    constructor(readonly readonly y: number) {}\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass C {\n  readonly x: number;\n  constructor(readonly y: number) {}\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/classes/constructorDeclarations/constructorParameters/constructorDefaultValuesReferencingThis.ts",
    "content": "class C {\r\n    constructor(x = this) { }\r\n}\r\n\r\nclass D<T> {\r\n    constructor(x = this) { }\r\n}\r\n\r\nclass E<T> {\r\n    constructor(public x = this) { }\r\n}"
  },
  {
    "path": "tests/typescript/conformance/classes/constructorDeclarations/constructorParameters/constructorImplementationWithDefaultValues.ts",
    "content": "class C {\r\n    constructor(x);\r\n    constructor(x = 1) {\r\n        var y = x;\r\n    }\r\n}\r\n\r\nclass D<T> {\r\n    constructor(x);\r\n    constructor(x:T = null) {\r\n        var y = x;\r\n    }\r\n}\r\n\r\nclass E<T extends Date> {\r\n    constructor(x);\r\n    constructor(x: T = null) {\r\n        var y = x;\r\n    }\r\n}"
  },
  {
    "path": "tests/typescript/conformance/classes/constructorDeclarations/constructorParameters/constructorImplementationWithDefaultValues2.ts",
    "content": "class C {\r\n    constructor(x);\r\n    constructor(public x: string = 1) {\r\n        var y = x;\r\n    }\r\n}\r\n\r\nclass D<T, U> {\r\n    constructor(x: T, y: U);\r\n    constructor(x: T = 1, public y: U = x) {\r\n        var z = x;\r\n    }\r\n}\r\n\r\nclass E<T extends Date> {\r\n    constructor(x);\r\n    constructor(x: T = new Date()) {\r\n        var y = x;\r\n    }\r\n}"
  },
  {
    "path": "tests/typescript/conformance/classes/constructorDeclarations/constructorParameters/constructorOverloadsWithDefaultValues.ts",
    "content": "class C {\r\n    foo: string;\r\n    constructor(x = 1);\r\n    constructor() {\r\n    }\r\n}\r\n\r\nclass D<T> {\r\n    foo: string;\r\n    constructor(x = 1);\r\n    constructor() {\r\n    }\r\n}"
  },
  {
    "path": "tests/typescript/conformance/classes/constructorDeclarations/constructorParameters/constructorOverloadsWithOptionalParameters.ts",
    "content": "class C {\r\n    foo: string;\r\n    constructor(x?, y?: any[]); \r\n    constructor() {\r\n    }\r\n}\r\n\r\nclass D<T> {\r\n    foo: string;\r\n    constructor(x?, y?: any[]); \r\n    constructor() {\r\n    }\r\n}"
  },
  {
    "path": "tests/typescript/conformance/classes/constructorDeclarations/constructorParameters/constructorParameterProperties.ts",
    "content": "class C {\r\n    y: string;\r\n    constructor(private x: string, protected z: string) { }\r\n}\r\n\r\nvar c: C;\r\nvar r = c.y;\r\nvar r2 = c.x; // error\r\nvar r3 = c.z; // error\r\n\r\nclass D<T> {\r\n    y: T;\r\n    constructor(a: T, private x: T, protected z: T) { }\r\n}\r\n\r\nvar d: D<string>;\r\nvar r = d.y;\r\nvar r2 = d.x; // error\r\nvar r3 = d.a; // error\r\nvar r4 = d.z; // error\r\n"
  },
  {
    "path": "tests/typescript/conformance/classes/constructorDeclarations/constructorParameters/constructorParameterProperties2.ts",
    "content": "class C {\r\n    y: number;\r\n    constructor(y: number) { } // ok\r\n}\r\n\r\nvar c: C;\r\nvar r = c.y;\r\n\r\nclass D {\r\n    y: number;\r\n    constructor(public y: number) { }\r\n}\r\n\r\nvar d: D;\r\nvar r2 = d.y;\r\n\r\nclass E {\r\n    y: number;\r\n    constructor(private y: number) { }\r\n}\r\n\r\nvar e: E;\r\nvar r3 = e.y; // error\r\n\r\nclass F {\r\n    y: number;\r\n    constructor(protected y: number) { }\r\n}\r\n\r\nvar f: F;\r\nvar r4 = f.y; // error\r\n"
  },
  {
    "path": "tests/typescript/conformance/classes/constructorDeclarations/constructorParameters/declarationEmitReadonly.ts",
    "content": "// @declaration: true\r\n\r\nclass C {\r\n    constructor(readonly x: number) {}\r\n}"
  },
  {
    "path": "tests/typescript/conformance/classes/constructorDeclarations/constructorParameters/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/classes/constructorDeclarations/constructorParameters/readonlyConstructorAssignment.ts",
    "content": "// Tests that readonly parameter properties behave like regular readonly properties\r\n\r\nclass A {\r\n    constructor(readonly x: number) {\r\n        this.x = 0;\r\n    }\r\n}\r\n\r\nclass B extends A {\r\n    constructor(x: number) {\r\n        super(x);\r\n        // Fails, x is readonly\r\n        this.x = 1;\r\n    }\r\n}\r\n\r\nclass C extends A {\r\n    // This is the usual behavior of readonly properties:\r\n    // if one is redeclared in a base class, then it can be assigned to.\r\n    constructor(readonly x: number) {\r\n        super(x);\r\n        this.x = 1;\r\n    }\r\n}\r\n\r\nclass D {\r\n    constructor(private readonly x: number) {\r\n        this.x = 0;\r\n    }\r\n}\r\n\r\n// Fails, can't redeclare readonly property\r\nclass E extends D {\r\n    constructor(readonly x: number) {\r\n        super(x);\r\n        this.x = 1;\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/typescript/conformance/classes/constructorDeclarations/constructorParameters/readonlyInConstructorParameters.ts",
    "content": "class C {\r\n    constructor(readonly x: number) {}\r\n}\r\nnew C(1).x = 2;\r\n\r\nclass E {\r\n    constructor(readonly public x: number) {}\r\n}\r\n\r\nclass F {\r\n    constructor(private readonly x: number) {}\r\n}\r\nnew F(1).x;"
  },
  {
    "path": "tests/typescript/conformance/classes/constructorDeclarations/constructorParameters/readonlyReadonly.ts",
    "content": "class C {\r\n    readonly readonly x: number;\r\n    constructor(readonly readonly y: number) {}\r\n}"
  },
  {
    "path": "tests/typescript/conformance/classes/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/classes/mixinAccessModifiers.ts",
    "content": "// @declaration: true\n\ntype Constructable = new (...args: any[]) => object;\n\nclass Private {\n\tconstructor (...args: any[]) {}\n\tprivate p: string;\n}\n\nclass Private2 {\n\tconstructor (...args: any[]) {}\n\tprivate p: string;\n}\n\nclass Protected {\n\tconstructor (...args: any[]) {}\n\tprotected p: string;\n\tprotected static s: string;\n}\n\nclass Protected2 {\n\tconstructor (...args: any[]) {}\n\tprotected p: string;\n\tprotected static s: string;\n}\n\nclass Public {\n\tconstructor (...args: any[]) {}\n\tpublic p: string;\n\tpublic static s: string;\n}\n\nclass Public2 {\n\tconstructor (...args: any[]) {}\n\tpublic p: string;\n\tpublic static s: string;\n}\n\nfunction f1(x: Private & Private2) {\n\tx.p;  // Error, private constituent makes property inaccessible\n}\n\nfunction f2(x: Private & Protected) {\n\tx.p;  // Error, private constituent makes property inaccessible\n}\n\nfunction f3(x: Private & Public) {\n\tx.p;  // Error, private constituent makes property inaccessible\n}\n\nfunction f4(x: Protected & Protected2) {\n\tx.p;  // Error, protected when all constituents are protected\n}\n\nfunction f5(x: Protected & Public) {\n\tx.p;  // Ok, public if any constituent is public\n}\n\nfunction f6(x: Public & Public2) {\n\tx.p;  // Ok, public if any constituent is public\n}\n\ndeclare function Mix<T, U>(c1: T, c2: U): T & U;\n\n// Can't derive from type with inaccessible properties\n\nclass C1 extends Mix(Private, Private2) {}\nclass C2 extends Mix(Private, Protected) {}\nclass C3 extends Mix(Private, Public) {}\n\nclass C4 extends Mix(Protected, Protected2) {\n\tf(c4: C4, c5: C5, c6: C6) {\n\t\tc4.p;\n\t\tc5.p;\n\t\tc6.p;\n\t}\n\tstatic g() {\n\t\tC4.s;\n\t\tC5.s;\n\t\tC6.s\n\t}\n}\n\nclass C5 extends Mix(Protected, Public) {\n\tf(c4: C4, c5: C5, c6: C6) {\n\t\tc4.p;  // Error, not in class deriving from Protected2\n\t\tc5.p;\n\t\tc6.p;\n\t}\n\tstatic g() {\n\t\tC4.s;  // Error, not in class deriving from Protected2\n\t\tC5.s;\n\t\tC6.s\n\t}\n}\n\nclass C6 extends Mix(Public, Public2) {\n\tf(c4: C4, c5: C5, c6: C6) {\n\t\tc4.p;  // Error, not in class deriving from Protected2\n\t\tc5.p;\n\t\tc6.p;\n\t}\n\tstatic g() {\n\t\tC4.s;  // Error, not in class deriving from Protected2\n\t\tC5.s;\n\t\tC6.s\n\t}\n}\n"
  },
  {
    "path": "tests/typescript/conformance/classes/mixinClassesAnnotated.ts",
    "content": "// @declaration: true\n\ntype Constructor<T> = new(...args: any[]) => T;\n\nclass Base {\n    constructor(public x: number, public y: number) {}\n}\n\nclass Derived extends Base {\n    constructor(x: number, y: number, public z: number) {\n        super(x, y);\n    }\n}\n\nconst Printable = <T extends Constructor<Base>>(superClass: T): Constructor<Printable> & { message: string } & T =>\n    class extends superClass {\n        static message = \"hello\";\n        print() {\n            const output = this.x + \",\" + this.y;\n        }\n    }\n\n\nfunction Tagged<T extends Constructor<{}>>(superClass: T): Constructor<Tagged> & T {\n    class C extends superClass {\n        _tag: string;\n        constructor(...args: any[]) {\n            super(...args);\n            this._tag = \"hello\";\n        }\n    }\n    return C;\n}\n\nconst Thing1 = Tagged(Derived);\nconst Thing2 = Tagged(Printable(Derived));\nThing2.message;\n\nfunction f1() {\n    const thing = new Thing1(1, 2, 3);\n    thing.x;\n    thing._tag;\n}\n\nfunction f2() {\n    const thing = new Thing2(1, 2, 3);\n    thing.x;\n    thing._tag;\n    thing.print();\n}\n\nclass Thing3 extends Thing2 {\n    constructor(tag: string) {\n        super(10, 20, 30);\n        this._tag = tag;\n    }\n    test() {\n        this.print();\n    }\n}\n"
  },
  {
    "path": "tests/typescript/conformance/classes/mixinClassesAnonymous.ts",
    "content": "type Constructor<T> = new(...args: any[]) => T;\n\nclass Base {\n    constructor(public x: number, public y: number) {}\n}\n\nclass Derived extends Base {\n    constructor(x: number, y: number, public z: number) {\n        super(x, y);\n    }\n}\n\nconst Printable = <T extends Constructor<Base>>(superClass: T) => class extends superClass {\n    static message = \"hello\";\n    print() {\n        const output = this.x + \",\" + this.y;\n    }\n}\n\nfunction Tagged<T extends Constructor<{}>>(superClass: T) {\n    class C extends superClass {\n        _tag: string;\n        constructor(...args: any[]) {\n            super(...args);\n            this._tag = \"hello\";\n        }\n    }\n    return C;\n}\n\nconst Thing1 = Tagged(Derived);\nconst Thing2 = Tagged(Printable(Derived));\nThing2.message;\n\nfunction f1() {\n    const thing = new Thing1(1, 2, 3);\n    thing.x;\n    thing._tag;\n}\n\nfunction f2() {\n    const thing = new Thing2(1, 2, 3);\n    thing.x;\n    thing._tag;\n    thing.print();\n}\n\nclass Thing3 extends Thing2 {\n    constructor(tag: string) {\n        super(10, 20, 30);\n        this._tag = tag;\n    }\n    test() {\n        this.print();\n    }\n}\n\n// Repro from #13805\n\nconst Timestamped = <CT extends Constructor<object>>(Base: CT) => {\n    return class extends Base {\n        timestamp = new Date();\n    };\n}\n"
  },
  {
    "path": "tests/typescript/conformance/classes/mixinClassesMembers.ts",
    "content": "// @declaration: true\n\ndeclare class C1 {\n    public a: number;\n    protected b: number;\n    private c: number;\n    constructor(s: string);\n    constructor(n: number);\n}\n\ndeclare class M1 {\n    constructor(...args: any[]);\n    p: number;\n    static p: number;\n}\n\ndeclare class M2 {\n    constructor(...args: any[]);\n    f(): number;\n    static f(): number;\n}\n\ndeclare const Mixed1: typeof M1 & typeof C1;\ndeclare const Mixed2: typeof C1 & typeof M1;\ndeclare const Mixed3: typeof M2 & typeof M1 & typeof C1;\ndeclare const Mixed4: typeof C1 & typeof M1 & typeof M2;\ndeclare const Mixed5: typeof M1 & typeof M2;\n\nfunction f1() {\n    let x1 = new Mixed1(\"hello\");\n    let x2 = new Mixed1(42);\n    let x3 = new Mixed2(\"hello\");\n    let x4 = new Mixed2(42);\n    let x5 = new Mixed3(\"hello\");\n    let x6 = new Mixed3(42);\n    let x7 = new Mixed4(\"hello\");\n    let x8 = new Mixed4(42);\n    let x9 = new Mixed5();\n}\n\nfunction f2() {\n    let x = new Mixed1(\"hello\");\n    x.a;\n    x.p;\n    Mixed1.p;\n}\n\nfunction f3() {\n    let x = new Mixed2(\"hello\");\n    x.a;\n    x.p;\n    Mixed2.p;\n}\n\nfunction f4() {\n    let x = new Mixed3(\"hello\");\n    x.a;\n    x.p;\n    x.f();\n    Mixed3.p;\n    Mixed3.f();\n}\n\nfunction f5() {\n    let x = new Mixed4(\"hello\");\n    x.a;\n    x.p;\n    x.f();\n    Mixed4.p;\n    Mixed4.f();\n}\n\nfunction f6() {\n    let x = new Mixed5();\n    x.p;\n    x.f();\n    Mixed5.p;\n    Mixed5.f();\n}\n\nclass C2 extends Mixed1 {\n    constructor() {\n        super(\"hello\");\n        this.a;\n        this.b;\n        this.p;\n    }\n}\n\nclass C3 extends Mixed3 {\n    constructor() {\n        super(42);\n        this.a;\n        this.b;\n        this.p;\n        this.f();\n    }\n    f() { return super.f(); }\n}\n"
  },
  {
    "path": "tests/typescript/conformance/classes/nestedClassDeclaration.ts",
    "content": "// nested classes are not allowed\r\n\r\nclass C {\r\n    x: string;\r\n}\r\n\r\nfunction foo() {\r\n    class C3 {\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/typescript/conformance/comments/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`comments.ts 1`] = `\n/* http://www.site.com or http://www.site.com/page.html */\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/* http://www.site.com or http://www.site.com/page.html */\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/comments/comments.ts",
    "content": "/* http://www.site.com or http://www.site.com/page.html */\n"
  },
  {
    "path": "tests/typescript/conformance/comments/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/declarationEmit/typePredicates/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`declarationEmitThisPredicatesWithPrivateName01.ts 1`] = `\n// @declaration: true\n// @module: commonjs\n\nexport class C {\n    m(): this is D {\n        return this instanceof D;\n    }\n}\n\nclass D extends C {\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @declaration: true\n// @module: commonjs\n\nexport class C {\n  m(): this is D {\n    return this instanceof D;\n  }\n}\n\nclass D extends C {}\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/declarationEmit/typePredicates/declarationEmitThisPredicatesWithPrivateName01.ts",
    "content": "// @declaration: true\r\n// @module: commonjs\r\n\r\nexport class C {\r\n    m(): this is D {\r\n        return this instanceof D;\r\n    }\r\n}\r\n\r\nclass D extends C {\r\n}"
  },
  {
    "path": "tests/typescript/conformance/declarationEmit/typePredicates/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/es6/Symbols/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`symbolProperty15.ts 1`] = `\n//@target: ES6\nclass C { }\ninterface I {\n    [Symbol.iterator]?: { x };\n}\n\ndeclare function foo(i: I): I;\ndeclare function foo(a: any): any;\n\ndeclare function bar(i: C): C;\ndeclare function bar(a: any): any;\n\nfoo(new C);\nvar i: I;\nbar(i);~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n//@target: ES6\nclass C {}\ninterface I {\n  [Symbol.iterator]?: { x };\n}\n\ndeclare function foo(i: I): I\ndeclare function foo(a: any): any\n\ndeclare function bar(i: C): C\ndeclare function bar(a: any): any\n\nfoo(new C());\nvar i: I;\nbar(i);\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/es6/Symbols/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/es6/Symbols/symbolProperty15.ts",
    "content": "//@target: ES6\r\nclass C { }\r\ninterface I {\r\n    [Symbol.iterator]?: { x };\r\n}\r\n\r\ndeclare function foo(i: I): I;\r\ndeclare function foo(a: any): any;\r\n\r\ndeclare function bar(i: C): C;\r\ndeclare function bar(a: any): any;\r\n\r\nfoo(new C);\r\nvar i: I;\r\nbar(i);"
  },
  {
    "path": "tests/typescript/conformance/es6/templates/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`templateStringWithEmbeddedTypeAssertionOnAdditionES6.ts 1`] = `\n﻿// @target: ES6\nvar x = \\`abc\\${ <any>(10 + 10) }def\\`;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @target: ES6\nvar x = \\`abc\\${<any>(10 + 10)}def\\`;\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/es6/templates/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/es6/templates/templateStringWithEmbeddedTypeAssertionOnAdditionES6.ts",
    "content": "﻿// @target: ES6\r\nvar x = `abc${ <any>(10 + 10) }def`;\r\n"
  },
  {
    "path": "tests/typescript/conformance/expressions/asOperator/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`asOperatorContextualType.ts 1`] = `\n// should error\nvar x = (v => v) as (x: number) => string;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// should error\nvar x = (v => v) as (x: number) => string;\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/expressions/asOperator/asOperatorContextualType.ts",
    "content": "// should error\r\nvar x = (v => v) as (x: number) => string;\r\n"
  },
  {
    "path": "tests/typescript/conformance/expressions/asOperator/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/expressions/functionCalls/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`callWithSpreadES6.ts 1`] = `\n// @target: ES6\n\ninterface X {\n    foo(x: number, y: number, ...z: string[]);\n}\n\nfunction foo(x: number, y: number, ...z: string[]) {\n}\n\nvar a: string[];\nvar z: number[];\nvar obj: X;\nvar xa: X[];\n\nfoo(1, 2, \"abc\");\nfoo(1, 2, ...a);\nfoo(1, 2, ...a, \"abc\");\n\nobj.foo(1, 2, \"abc\");\nobj.foo(1, 2, ...a);\nobj.foo(1, 2, ...a, \"abc\");\n\n(obj.foo)(1, 2, \"abc\");\n(obj.foo)(1, 2, ...a);\n(obj.foo)(1, 2, ...a, \"abc\");\n\nxa[1].foo(1, 2, \"abc\");\nxa[1].foo(1, 2, ...a);\nxa[1].foo(1, 2, ...a, \"abc\");\n\n(<Function>xa[1].foo)(...[1, 2, \"abc\"]);\n\nclass C {\n    constructor(x: number, y: number, ...z: string[]) {\n        this.foo(x, y);\n        this.foo(x, y, ...z);\n    }\n    foo(x: number, y: number, ...z: string[]) {\n    }\n}\n\nclass D extends C {\n    constructor() {\n        super(1, 2);\n        super(1, 2, ...a);\n    }\n    foo() {\n        super.foo(1, 2);\n        super.foo(1, 2, ...a);\n    }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @target: ES6\n\ninterface X {\n  foo(x: number, y: number, ...z: string[]);\n}\n\nfunction foo(x: number, y: number, ...z: string[]) {}\n\nvar a: string[];\nvar z: number[];\nvar obj: X;\nvar xa: X[];\n\nfoo(1, 2, \"abc\");\nfoo(1, 2, ...a);\nfoo(1, 2, ...a, \"abc\");\n\nobj.foo(1, 2, \"abc\");\nobj.foo(1, 2, ...a);\nobj.foo(1, 2, ...a, \"abc\");\n\nobj.foo(1, 2, \"abc\");\nobj.foo(1, 2, ...a);\nobj.foo(1, 2, ...a, \"abc\");\n\nxa[1].foo(1, 2, \"abc\");\nxa[1].foo(1, 2, ...a);\nxa[1].foo(1, 2, ...a, \"abc\");\n\n(<Function>xa[1].foo)(...[1, 2, \"abc\"]);\n\nclass C {\n  constructor(x: number, y: number, ...z: string[]) {\n    this.foo(x, y);\n    this.foo(x, y, ...z);\n  }\n  foo(x: number, y: number, ...z: string[]) {}\n}\n\nclass D extends C {\n  constructor() {\n    super(1, 2);\n    super(1, 2, ...a);\n  }\n  foo() {\n    super.foo(1, 2);\n    super.foo(1, 2, ...a);\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/expressions/functionCalls/callWithSpreadES6.ts",
    "content": "// @target: ES6\r\n\r\ninterface X {\r\n    foo(x: number, y: number, ...z: string[]);\r\n}\r\n\r\nfunction foo(x: number, y: number, ...z: string[]) {\r\n}\r\n\r\nvar a: string[];\r\nvar z: number[];\r\nvar obj: X;\r\nvar xa: X[];\r\n\r\nfoo(1, 2, \"abc\");\r\nfoo(1, 2, ...a);\r\nfoo(1, 2, ...a, \"abc\");\r\n\r\nobj.foo(1, 2, \"abc\");\r\nobj.foo(1, 2, ...a);\r\nobj.foo(1, 2, ...a, \"abc\");\r\n\r\n(obj.foo)(1, 2, \"abc\");\r\n(obj.foo)(1, 2, ...a);\r\n(obj.foo)(1, 2, ...a, \"abc\");\r\n\r\nxa[1].foo(1, 2, \"abc\");\r\nxa[1].foo(1, 2, ...a);\r\nxa[1].foo(1, 2, ...a, \"abc\");\r\n\r\n(<Function>xa[1].foo)(...[1, 2, \"abc\"]);\r\n\r\nclass C {\r\n    constructor(x: number, y: number, ...z: string[]) {\r\n        this.foo(x, y);\r\n        this.foo(x, y, ...z);\r\n    }\r\n    foo(x: number, y: number, ...z: string[]) {\r\n    }\r\n}\r\n\r\nclass D extends C {\r\n    constructor() {\r\n        super(1, 2);\r\n        super(1, 2, ...a);\r\n    }\r\n    foo() {\r\n        super.foo(1, 2);\r\n        super.foo(1, 2, ...a);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/typescript/conformance/expressions/functionCalls/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/interfaces/interfaceDeclarations/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`interfaceWithMultipleBaseTypes2.ts 1`] = `\ninterface Base {\n    x: {\n        a?: string; b: string;\n    }\n}\n\ninterface Base2 {\n    x: {\n        b: string; c?: number;\n    }\n}\n\ninterface Derived extends Base, Base2 {\n    x: { b: string }\n}\n\ninterface Derived2 extends Base, Base2 {\n    x: { a: number; b: string }\n}\n\ninterface Derived3 extends Base, Base2 {\n    x: { a: string; b: string }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface Base {\n  x: {\n    a?: string;\n    b: string;\n  };\n}\n\ninterface Base2 {\n  x: {\n    b: string;\n    c?: number;\n  };\n}\n\ninterface Derived extends Base, Base2 {\n  x: { b: string };\n}\n\ninterface Derived2 extends Base, Base2 {\n  x: { a: number; b: string };\n}\n\ninterface Derived3 extends Base, Base2 {\n  x: { a: string; b: string };\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/interfaces/interfaceDeclarations/interfaceWithMultipleBaseTypes2.ts",
    "content": "interface Base {\r\n    x: {\r\n        a?: string; b: string;\r\n    }\r\n}\r\n\r\ninterface Base2 {\r\n    x: {\r\n        b: string; c?: number;\r\n    }\r\n}\r\n\r\ninterface Derived extends Base, Base2 {\r\n    x: { b: string }\r\n}\r\n\r\ninterface Derived2 extends Base, Base2 {\r\n    x: { a: number; b: string }\r\n}\r\n\r\ninterface Derived3 extends Base, Base2 {\r\n    x: { a: string; b: string }\r\n}\r\n"
  },
  {
    "path": "tests/typescript/conformance/interfaces/interfaceDeclarations/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/internalModules/importDeclarations/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`circularImportAlias.ts 1`] = `\n// expected no error\n\nmodule B {\n    export import a = A;\n    export class D extends a.C {\n        id: number;\n    }\n}\n\nmodule A {\n    export class C { name: string }\n    export import b = B;\n}\n\nvar c: { name: string };\nvar c = new B.a.C();\n\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// expected no error\n\nnamespace B {\n  export import a = A;\n  export class D extends a.C {\n    id: number;\n  }\n}\n\nnamespace A {\n  export class C {\n    name: string;\n  }\n  export import b = B;\n}\n\nvar c: { name: string };\nvar c = new B.a.C();\n\n`;\n\nexports[`exportImportAlias.ts 1`] = `\n// expect no errors here\n\nmodule A {\n\n    export var x = 'hello world'\n    export class Point {\n        constructor(public x: number, public y: number) { }\n    }\n    export module B {\n        export interface Id {\n            name: string;\n        }\n    }\n}\n\nmodule C {\n    export import a = A;\n}\n\nvar a: string = C.a.x;\nvar b: { x: number; y: number; } = new C.a.Point(0, 0);\nvar c: { name: string };\nvar c: C.a.B.Id;\n\nmodule X {\n    export function Y() {\n        return 42;\n    }\n\n    export module Y {\n        export class Point {\n            constructor(public x: number, public y: number) { }\n        }\n    }\n}\n\nmodule Z {\n\n    // 'y' should be a fundule here\n    export import y = X.Y;\n}\n\nvar m: number = Z.y();\nvar n: { x: number; y: number; } = new Z.y.Point(0, 0);\n\nmodule K {\n    export class L {\n        constructor(public name: string) { }\n    }\n\n    export module L {\n        export var y = 12;\n        export interface Point {\n            x: number;\n            y: number;\n        }\n    }\n}\n\nmodule M {\n    export import D = K.L;\n}\n\nvar o: { name: string };\nvar o = new M.D('Hello');\n\nvar p: { x: number; y: number; }\nvar p: M.D.Point;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// expect no errors here\n\nnamespace A {\n  export var x = \"hello world\";\n  export class Point {\n    constructor(public x: number, public y: number) {}\n  }\n  export namespace B {\n    export interface Id {\n      name: string;\n    }\n  }\n}\n\nnamespace C {\n  export import a = A;\n}\n\nvar a: string = C.a.x;\nvar b: { x: number; y: number } = new C.a.Point(0, 0);\nvar c: { name: string };\nvar c: C.a.B.Id;\n\nnamespace X {\n  export function Y() {\n    return 42;\n  }\n\n  export namespace Y {\n    export class Point {\n      constructor(public x: number, public y: number) {}\n    }\n  }\n}\n\nnamespace Z {\n  // 'y' should be a fundule here\n  export import y = X.Y;\n}\n\nvar m: number = Z.y();\nvar n: { x: number; y: number } = new Z.y.Point(0, 0);\n\nnamespace K {\n  export class L {\n    constructor(public name: string) {}\n  }\n\n  export namespace L {\n    export var y = 12;\n    export interface Point {\n      x: number;\n      y: number;\n    }\n  }\n}\n\nnamespace M {\n  export import D = K.L;\n}\n\nvar o: { name: string };\nvar o = new M.D(\"Hello\");\n\nvar p: { x: number; y: number };\nvar p: M.D.Point;\n\n`;\n\nexports[`exportInterface.ts 1`] = `\nexport interface I {}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport interface I {}\n\n`;\n\nexports[`importAliasIdentifiers.ts 1`] = `\nmodule moduleA {\n    export class Point {\n        constructor(public x: number, public y: number) { }\n    }\n}\n\nimport alias = moduleA;\n\nvar p: alias.Point;\nvar p: moduleA.Point;\nvar p: { x: number; y: number; };\n\nclass clodule {\n    name: string;\n}\n\nmodule clodule {\n    export interface Point {\n        x: number; y: number;\n    }\n    var Point: Point = { x: 0, y: 0 };\n}\n\nimport clolias = clodule;\n\nvar p: clolias.Point;\nvar p: clodule.Point;\nvar p: { x: number; y: number; };\n\n\nfunction fundule() {\n    return { x: 0, y: 0 };\n}\n\nmodule fundule {\n    export interface Point {\n        x: number; y: number;\n    }\n    var Point: Point = { x: 0, y: 0 };\n}\n\nimport funlias = fundule;\n\nvar p: funlias.Point;\nvar p: fundule.Point;\nvar p: { x: number; y: number; };~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nnamespace moduleA {\n  export class Point {\n    constructor(public x: number, public y: number) {}\n  }\n}\n\nimport alias = moduleA;\n\nvar p: alias.Point;\nvar p: moduleA.Point;\nvar p: { x: number; y: number };\n\nclass clodule {\n  name: string;\n}\n\nnamespace clodule {\n  export interface Point {\n    x: number;\n    y: number;\n  }\n  var Point: Point = { x: 0, y: 0 };\n}\n\nimport clolias = clodule;\n\nvar p: clolias.Point;\nvar p: clodule.Point;\nvar p: { x: number; y: number };\n\nfunction fundule() {\n  return { x: 0, y: 0 };\n}\n\nnamespace fundule {\n  export interface Point {\n    x: number;\n    y: number;\n  }\n  var Point: Point = { x: 0, y: 0 };\n}\n\nimport funlias = fundule;\n\nvar p: funlias.Point;\nvar p: fundule.Point;\nvar p: { x: number; y: number };\n\n`;\n\nexports[`invalidImportAliasIdentifiers.ts 1`] = `\n// none of these should work, since non are actually modules\n\nvar V = 12;\n\nimport v = V;\n\nclass C {\n    name: string;\n}\n\nimport c = C;\n\nenum E {\n    Red, Blue\n}\n\nimport e = E;\n\ninterface I {\n    id: number;\n}\n\nimport i = I;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// none of these should work, since non are actually modules\n\nvar V = 12;\n\nimport v = V;\n\nclass C {\n  name: string;\n}\n\nimport c = C;\n\nenum E {\n  Red,\n  Blue\n}\n\nimport e = E;\n\ninterface I {\n  id: number;\n}\n\nimport i = I;\n\n`;\n\nexports[`shadowedInternalModule.ts 1`] = `\n// all errors imported modules conflict with local variables\n\nmodule A {\n    export var Point = { x: 0, y: 0 }\n    export interface Point {\n        x: number;\n        y: number;\n    }\n} \n\nmodule B {\n    var A = { x: 0, y: 0 };\n    import Point = A;\n}\n\nmodule X {\n    export module Y {\n        export interface Point{\n            x: number;\n            y: number\n        }\n    }\n\n    export class Y {\n        name: string;\n    }\n}\n\nmodule Z {\n    import Y = X.Y;\n\n    var Y = 12;\n}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// all errors imported modules conflict with local variables\n\nnamespace A {\n  export var Point = { x: 0, y: 0 };\n  export interface Point {\n    x: number;\n    y: number;\n  }\n}\n\nnamespace B {\n  var A = { x: 0, y: 0 };\n  import Point = A;\n}\n\nnamespace X {\n  export namespace Y {\n    export interface Point {\n      x: number;\n      y: number;\n    }\n  }\n\n  export class Y {\n    name: string;\n  }\n}\n\nnamespace Z {\n  import Y = X.Y;\n\n  var Y = 12;\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/internalModules/importDeclarations/circularImportAlias.ts",
    "content": "// expected no error\r\n\r\nmodule B {\r\n    export import a = A;\r\n    export class D extends a.C {\r\n        id: number;\r\n    }\r\n}\r\n\r\nmodule A {\r\n    export class C { name: string }\r\n    export import b = B;\r\n}\r\n\r\nvar c: { name: string };\r\nvar c = new B.a.C();\r\n\r\n\r\n"
  },
  {
    "path": "tests/typescript/conformance/internalModules/importDeclarations/exportImportAlias.ts",
    "content": "// expect no errors here\r\n\r\nmodule A {\r\n\r\n    export var x = 'hello world'\r\n    export class Point {\r\n        constructor(public x: number, public y: number) { }\r\n    }\r\n    export module B {\r\n        export interface Id {\r\n            name: string;\r\n        }\r\n    }\r\n}\r\n\r\nmodule C {\r\n    export import a = A;\r\n}\r\n\r\nvar a: string = C.a.x;\r\nvar b: { x: number; y: number; } = new C.a.Point(0, 0);\r\nvar c: { name: string };\r\nvar c: C.a.B.Id;\r\n\r\nmodule X {\r\n    export function Y() {\r\n        return 42;\r\n    }\r\n\r\n    export module Y {\r\n        export class Point {\r\n            constructor(public x: number, public y: number) { }\r\n        }\r\n    }\r\n}\r\n\r\nmodule Z {\r\n\r\n    // 'y' should be a fundule here\r\n    export import y = X.Y;\r\n}\r\n\r\nvar m: number = Z.y();\r\nvar n: { x: number; y: number; } = new Z.y.Point(0, 0);\r\n\r\nmodule K {\r\n    export class L {\r\n        constructor(public name: string) { }\r\n    }\r\n\r\n    export module L {\r\n        export var y = 12;\r\n        export interface Point {\r\n            x: number;\r\n            y: number;\r\n        }\r\n    }\r\n}\r\n\r\nmodule M {\r\n    export import D = K.L;\r\n}\r\n\r\nvar o: { name: string };\r\nvar o = new M.D('Hello');\r\n\r\nvar p: { x: number; y: number; }\r\nvar p: M.D.Point;"
  },
  {
    "path": "tests/typescript/conformance/internalModules/importDeclarations/exportInterface.ts",
    "content": "export interface I {}"
  },
  {
    "path": "tests/typescript/conformance/internalModules/importDeclarations/importAliasIdentifiers.ts",
    "content": "module moduleA {\r\n    export class Point {\r\n        constructor(public x: number, public y: number) { }\r\n    }\r\n}\r\n\r\nimport alias = moduleA;\r\n\r\nvar p: alias.Point;\r\nvar p: moduleA.Point;\r\nvar p: { x: number; y: number; };\r\n\r\nclass clodule {\r\n    name: string;\r\n}\r\n\r\nmodule clodule {\r\n    export interface Point {\r\n        x: number; y: number;\r\n    }\r\n    var Point: Point = { x: 0, y: 0 };\r\n}\r\n\r\nimport clolias = clodule;\r\n\r\nvar p: clolias.Point;\r\nvar p: clodule.Point;\r\nvar p: { x: number; y: number; };\r\n\r\n\r\nfunction fundule() {\r\n    return { x: 0, y: 0 };\r\n}\r\n\r\nmodule fundule {\r\n    export interface Point {\r\n        x: number; y: number;\r\n    }\r\n    var Point: Point = { x: 0, y: 0 };\r\n}\r\n\r\nimport funlias = fundule;\r\n\r\nvar p: funlias.Point;\r\nvar p: fundule.Point;\r\nvar p: { x: number; y: number; };"
  },
  {
    "path": "tests/typescript/conformance/internalModules/importDeclarations/invalidImportAliasIdentifiers.ts",
    "content": "// none of these should work, since non are actually modules\r\n\r\nvar V = 12;\r\n\r\nimport v = V;\r\n\r\nclass C {\r\n    name: string;\r\n}\r\n\r\nimport c = C;\r\n\r\nenum E {\r\n    Red, Blue\r\n}\r\n\r\nimport e = E;\r\n\r\ninterface I {\r\n    id: number;\r\n}\r\n\r\nimport i = I;\r\n"
  },
  {
    "path": "tests/typescript/conformance/internalModules/importDeclarations/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/internalModules/importDeclarations/shadowedInternalModule.ts",
    "content": "// all errors imported modules conflict with local variables\r\n\r\nmodule A {\r\n    export var Point = { x: 0, y: 0 }\r\n    export interface Point {\r\n        x: number;\r\n        y: number;\r\n    }\r\n} \r\n\r\nmodule B {\r\n    var A = { x: 0, y: 0 };\r\n    import Point = A;\r\n}\r\n\r\nmodule X {\r\n    export module Y {\r\n        export interface Point{\r\n            x: number;\r\n            y: number\r\n        }\r\n    }\r\n\r\n    export class Y {\r\n        name: string;\r\n    }\r\n}\r\n\r\nmodule Z {\r\n    import Y = X.Y;\r\n\r\n    var Y = 12;\r\n}"
  },
  {
    "path": "tests/typescript/conformance/parser/ecmascript5/Statements/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`parserES5ForOfStatement2.ts 1`] = `\n//@target: ES5\nfor (var of X) {\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n//@target: ES5\nfor (var of X) {\n}\n\n`;\n\nexports[`parserES5ForOfStatement21.ts 1`] = `\n//@target: ES5\nfor (var of of) { }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n//@target: ES5\nfor (var of of) {\n}\n\n`;\n\nexports[`parserForInStatement2.ts 1`] = `\nfor (var in X) {\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfor (var in X) {\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/parser/ecmascript5/Statements/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/parser/ecmascript5/Statements/parserES5ForOfStatement2.ts",
    "content": "//@target: ES5\r\nfor (var of X) {\r\n}\r\n"
  },
  {
    "path": "tests/typescript/conformance/parser/ecmascript5/Statements/parserES5ForOfStatement21.ts",
    "content": "//@target: ES5\r\nfor (var of of) { }\r\n"
  },
  {
    "path": "tests/typescript/conformance/parser/ecmascript5/Statements/parserForInStatement2.ts",
    "content": "for (var in X) {\r\n}\r\n"
  },
  {
    "path": "tests/typescript/conformance/types/abstractKeyword/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`abstractKeyword.ts 1`] = `\nabstract interface I {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nabstract interface I {}\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/abstractKeyword/abstractKeyword.ts",
    "content": "abstract interface I {}\n"
  },
  {
    "path": "tests/typescript/conformance/types/abstractKeyword/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/any/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`anyAsConstructor.ts 1`] = `\n// any is considered an untyped function call\n// can be called except with type arguments which is an error\n\nvar x: any;\nvar a = new x();\nvar b = new x('hello');\nvar c = new x(x);\n\n// grammar allows this for constructors\nvar d = new x<any>(x); // no error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// any is considered an untyped function call\n// can be called except with type arguments which is an error\n\nvar x: any;\nvar a = new x();\nvar b = new x(\"hello\");\nvar c = new x(x);\n\n// grammar allows this for constructors\nvar d = new x<any>(x); // no error\n\n`;\n\nexports[`anyAsFunctionCall.ts 1`] = `\n// any is considered an untyped function call\n// can be called except with type arguments which is an error\n\nvar x: any;\nvar a = x();\nvar b = x('hello');\nvar c = x(x);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// any is considered an untyped function call\n// can be called except with type arguments which is an error\n\nvar x: any;\nvar a = x();\nvar b = x(\"hello\");\nvar c = x(x);\n\n`;\n\nexports[`anyAsGenericFunctionCall.ts 1`] = `\n// any is considered an untyped function call\n// can be called except with type arguments which is an error\n\nvar x: any;\nvar a = x<number>();\nvar b = x<string>('hello');\nvar c = x<object>('hello');\n\nclass C { foo: string; }\nvar c = x<C>(x);\nvar d = x<any>(x);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// any is considered an untyped function call\n// can be called except with type arguments which is an error\n\nvar x: any;\nvar a = x<number>();\nvar b = x<string>(\"hello\");\nvar c = x<object>(\"hello\");\n\nclass C {\n  foo: string;\n}\nvar c = x<C>(x);\nvar d = x<any>(x);\n\n`;\n\nexports[`anyPropertyAccess.ts 1`] = `\nvar x: any;\nvar a = x.foo;\nvar b = x['foo'];\nvar c = x['fn']();\nvar d = x.bar.baz;\nvar e = x[0].foo;\nvar f = x['0'].bar;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x: any;\nvar a = x.foo;\nvar b = x[\"foo\"];\nvar c = x[\"fn\"]();\nvar d = x.bar.baz;\nvar e = x[0].foo;\nvar f = x[\"0\"].bar;\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/any/anyAsConstructor.ts",
    "content": "// any is considered an untyped function call\n// can be called except with type arguments which is an error\n\nvar x: any;\nvar a = new x();\nvar b = new x('hello');\nvar c = new x(x);\n\n// grammar allows this for constructors\nvar d = new x<any>(x); // no error\n"
  },
  {
    "path": "tests/typescript/conformance/types/any/anyAsFunctionCall.ts",
    "content": "// any is considered an untyped function call\n// can be called except with type arguments which is an error\n\nvar x: any;\nvar a = x();\nvar b = x('hello');\nvar c = x(x);\n"
  },
  {
    "path": "tests/typescript/conformance/types/any/anyAsGenericFunctionCall.ts",
    "content": "// any is considered an untyped function call\n// can be called except with type arguments which is an error\n\nvar x: any;\nvar a = x<number>();\nvar b = x<string>('hello');\nvar c = x<object>('hello');\n\nclass C { foo: string; }\nvar c = x<C>(x);\nvar d = x<any>(x);\n"
  },
  {
    "path": "tests/typescript/conformance/types/any/anyPropertyAccess.ts",
    "content": "var x: any;\nvar a = x.foo;\nvar b = x['foo'];\nvar c = x['fn']();\nvar d = x.bar.baz;\nvar e = x[0].foo;\nvar f = x['0'].bar;\n"
  },
  {
    "path": "tests/typescript/conformance/types/any/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/constKeyword/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`constKeyword.ts 1`] = `\nconst enum E { A, B, C }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst enum E {\n  A,\n  B,\n  C\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/constKeyword/constKeyword.ts",
    "content": "const enum E { A, B, C }\r\n"
  },
  {
    "path": "tests/typescript/conformance/types/constKeyword/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/constructorType/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`cunstructorType.ts 1`] = `\nvar d: new(x: number) => void;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar d: new (x: number) => void;\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/constructorType/cunstructorType.ts",
    "content": "var d: new(x: number) => void;\n"
  },
  {
    "path": "tests/typescript/conformance/types/constructorType/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/decorator/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`decorator.ts 1`] = `\ndeclare function dec<T>(target: T): T;\n\n@dec\nenum E {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare function dec<T>(target: T): T\n\n@dec enum E {}\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/decorator/decorator.ts",
    "content": "declare function dec<T>(target: T): T;\n\n@dec\nenum E {}\n"
  },
  {
    "path": "tests/typescript/conformance/types/decorator/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/enumDeclaration/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`enumDeclaration.ts 1`] = `\nenum E { A, B, C }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nenum E {\n  A,\n  B,\n  C\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/enumDeclaration/enumDeclaration.ts",
    "content": "enum E { A, B, C }\r\n"
  },
  {
    "path": "tests/typescript/conformance/types/enumDeclaration/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/firstTypeNode/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`firstTypeNode.ts 1`] = `\nexport function fooWithTypePredicate(a: any): a is number {\n    return true;\n}\nexport function fooWithTypePredicateAndMulitpleParams(a: any, b: any, c: any): a is number {\n    return true;\n}\nexport function fooWithTypeTypePredicateAndGeneric<T>(a: any): a is T {\n    return true;\n}\nexport function fooWithTypeTypePredicateAndRestParam(a: any, ...rest): a is number {\n    return true;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport function fooWithTypePredicate(a: any): a is number {\n  return true;\n}\nexport function fooWithTypePredicateAndMulitpleParams(\n  a: any,\n  b: any,\n  c: any\n): a is number {\n  return true;\n}\nexport function fooWithTypeTypePredicateAndGeneric<T>(a: any): a is T {\n  return true;\n}\nexport function fooWithTypeTypePredicateAndRestParam(\n  a: any,\n  ...rest\n): a is number {\n  return true;\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/firstTypeNode/firstTypeNode.ts",
    "content": "export function fooWithTypePredicate(a: any): a is number {\n    return true;\n}\nexport function fooWithTypePredicateAndMulitpleParams(a: any, b: any, c: any): a is number {\n    return true;\n}\nexport function fooWithTypeTypePredicateAndGeneric<T>(a: any): a is T {\n    return true;\n}\nexport function fooWithTypeTypePredicateAndRestParam(a: any, ...rest): a is number {\n    return true;\n}\n"
  },
  {
    "path": "tests/typescript/conformance/types/firstTypeNode/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/functions/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`functionImplementationErrors.ts 1`] = `\n// @allowUnreachableCode: true\n\n// FunctionExpression with no return type annotation with multiple return statements with unrelated types\nvar f1 = function () {\n    return '';\n    return 3;\n};\nvar f2 = function x() {\n    return '';\n    return 3;\n};\nvar f3 = () => {\n    return '';\n    return 3;\n};\n\n// FunctionExpression with no return type annotation with return branch of number[] and other of string[]\nvar f4 = function () {\n    if (true) {\n        return [''];\n    } else {\n        return [1];\n    }\n}\n\n// Function implemetnation with non -void return type annotation with no return\nfunction f5(): number {\n}\n\nvar m;\n// Function signature with parameter initializer referencing in scope local variable\nfunction f6(n = m) {\n    var m = 4;\n}\n\n// Function signature with initializer referencing other parameter to the right\nfunction f7(n = m, m?) {\n}\n\n// FunctionExpression with non -void return type annotation with a throw, no return, and other code\n// Should be error but isn't\nundefined === function (): number {\n    throw undefined;\n    var x = 4;\n};\n\nclass Base { private x; }\nclass AnotherClass { private y; }\nclass Derived1 extends Base { private m; }\nclass Derived2 extends Base { private n; }\nfunction f8() {\n    return new Derived1();\n    return new Derived2();    \n}\nvar f9 = function () {\n    return new Derived1();\n    return new Derived2();\n};\nvar f10 = () => {\n    return new Derived1();\n    return new Derived2();\n};\nfunction f11() {\n    return new Base();\n    return new AnotherClass();\n}\nvar f12 = function () {\n    return new Base();\n    return new AnotherClass();\n};\nvar f13 = () => {\n    return new Base();\n    return new AnotherClass();\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @allowUnreachableCode: true\n\n// FunctionExpression with no return type annotation with multiple return statements with unrelated types\nvar f1 = function() {\n  return \"\";\n  return 3;\n};\nvar f2 = function x() {\n  return \"\";\n  return 3;\n};\nvar f3 = () => {\n  return \"\";\n  return 3;\n};\n\n// FunctionExpression with no return type annotation with return branch of number[] and other of string[]\nvar f4 = function() {\n  if (true) {\n    return [\"\"];\n  } else {\n    return [1];\n  }\n};\n\n// Function implemetnation with non -void return type annotation with no return\nfunction f5(): number {}\n\nvar m;\n// Function signature with parameter initializer referencing in scope local variable\nfunction f6(n = m) {\n  var m = 4;\n}\n\n// Function signature with initializer referencing other parameter to the right\nfunction f7(n = m, m?) {}\n\n// FunctionExpression with non -void return type annotation with a throw, no return, and other code\n// Should be error but isn't\nundefined ===\n  function(): number {\n    throw undefined;\n    var x = 4;\n  };\n\nclass Base {\n  private x;\n}\nclass AnotherClass {\n  private y;\n}\nclass Derived1 extends Base {\n  private m;\n}\nclass Derived2 extends Base {\n  private n;\n}\nfunction f8() {\n  return new Derived1();\n  return new Derived2();\n}\nvar f9 = function() {\n  return new Derived1();\n  return new Derived2();\n};\nvar f10 = () => {\n  return new Derived1();\n  return new Derived2();\n};\nfunction f11() {\n  return new Base();\n  return new AnotherClass();\n}\nvar f12 = function() {\n  return new Base();\n  return new AnotherClass();\n};\nvar f13 = () => {\n  return new Base();\n  return new AnotherClass();\n};\n\n`;\n\nexports[`functionImplementations.ts 1`] = `\n// @allowUnreachableCode: true\n\n// FunctionExpression with no return type annotation and no return statement returns void\nvar v: void = function () { } ();\n\n// FunctionExpression f with no return type annotation and directly references f in its body returns any\nvar a: any = function f() {\n    return f;\n};\nvar a: any = function f() {\n    return f();\n};\n\n// FunctionExpression f with no return type annotation and indirectly references f in its body returns any\nvar a: any = function f() {\n    var x = f;\n    return x;\n};\n\n// Two mutually recursive function implementations with no return type annotations\nfunction rec1() {\n    return rec2();\n}\nfunction rec2() {\n    return rec1();\n}\nvar a = rec1();\nvar a = rec2();\n\n// Two mutually recursive function implementations with return type annotation in one\nfunction rec3(): number {\n    return rec4();\n}\nfunction rec4() {\n    return rec3();\n}\nvar n: number;\nvar n = rec3();\nvar n = rec4();\n\n// FunctionExpression with no return type annotation and returns a number\nvar n = function () {\n    return 3;\n} ();\n\n// FunctionExpression with no return type annotation and returns null\nvar nu = null;\nvar nu = function () {\n    return null;\n} ();\n\n// FunctionExpression with no return type annotation and returns undefined\nvar un = undefined;\nvar un = function () {\n    return undefined;\n} ();\n\n// FunctionExpression with no return type annotation and returns a type parameter type\nvar n = function <T>(x: T) {\n    return x;\n} (4);\n\n// FunctionExpression with no return type annotation and returns a constrained type parameter type\nvar n = function <T extends {}>(x: T) {\n    return x;\n} (4);\n\n// FunctionExpression with no return type annotation with multiple return statements with identical types\nvar n = function () {\n    return 3;\n    return 5;\n}();\n\n// Otherwise, the inferred return type is the first of the types of the return statement expressions\n// in the function body that is a supertype of each of the others, \n// ignoring return statements with no expressions.\n// A compile - time error occurs if no return statement expression has a type that is a supertype of each of the others.\n// FunctionExpression with no return type annotation with multiple return statements with subtype relation between returns\nclass Base { private m; }\nclass Derived extends Base { private q; }\nvar b: Base;\nvar b = function () {\n    return new Base(); return new Derived();\n} ();\n\n// FunctionExpression with no return type annotation with multiple return statements with one a recursive call\nvar a = function f() {\n    return new Base(); return new Derived(); return f(); // ?\n} ();\n\n// FunctionExpression with non -void return type annotation with a single throw statement\nundefined === function (): number {\n    throw undefined;\n};\n\n// Type of 'this' in function implementation is 'any'\nfunction thisFunc() {\n    var x = this;\n    var x: any;\n}\n\n// Function signature with optional parameter, no type annotation and initializer has initializer's type\nfunction opt1(n = 4) {\n    var m = n;\n    var m: number;\n}\n\n// Function signature with optional parameter, no type annotation and initializer has initializer's widened type\nfunction opt2(n = { x: null, y: undefined }) {\n    var m = n;\n    var m: { x: any; y: any };\n}\n\n// Function signature with initializer referencing other parameter to the left\nfunction opt3(n: number, m = n) {\n    var y = m;\n    var y: number;\n}\n\n// Function signature with optional parameter has correct codegen \n// (tested above)\n\n// FunctionExpression with non -void return type annotation return with no expression\nfunction f6(): number {\n    return;\n}\n\nclass Derived2 extends Base { private r: string; }\nclass AnotherClass { private x }\n// if f is a contextually typed function expression, the inferred return type is the union type\n// of the types of the return statement expressions in the function body, \n// ignoring return statements with no expressions.\nvar f7: (x: number) => string | number = x => { // should be (x: number) => number | string\n    if (x < 0) { return x; }\n    return x.toString();\n}\nvar f8: (x: number) => any = x => { // should be (x: number) => Base\n    return new Base();\n    return new Derived2();\n}\nvar f9: (x: number) => any = x => { // should be (x: number) => Base\n    return new Base();\n    return new Derived();\n    return new Derived2();\n}\nvar f10: (x: number) => any = x => { // should be (x: number) => Derived | Derived1\n    return new Derived();\n    return new Derived2();\n}\nvar f11: (x: number) => any = x => { // should be (x: number) => Base | AnotherClass\n    return new Base();\n    return new AnotherClass();\n}\nvar f12: (x: number) => any = x => { // should be (x: number) => Base | AnotherClass\n    return new Base();\n    return; // should be ignored\n    return new AnotherClass();\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @allowUnreachableCode: true\n\n// FunctionExpression with no return type annotation and no return statement returns void\nvar v: void = (function() {})();\n\n// FunctionExpression f with no return type annotation and directly references f in its body returns any\nvar a: any = function f() {\n  return f;\n};\nvar a: any = function f() {\n  return f();\n};\n\n// FunctionExpression f with no return type annotation and indirectly references f in its body returns any\nvar a: any = function f() {\n  var x = f;\n  return x;\n};\n\n// Two mutually recursive function implementations with no return type annotations\nfunction rec1() {\n  return rec2();\n}\nfunction rec2() {\n  return rec1();\n}\nvar a = rec1();\nvar a = rec2();\n\n// Two mutually recursive function implementations with return type annotation in one\nfunction rec3(): number {\n  return rec4();\n}\nfunction rec4() {\n  return rec3();\n}\nvar n: number;\nvar n = rec3();\nvar n = rec4();\n\n// FunctionExpression with no return type annotation and returns a number\nvar n = (function() {\n  return 3;\n})();\n\n// FunctionExpression with no return type annotation and returns null\nvar nu = null;\nvar nu = (function() {\n  return null;\n})();\n\n// FunctionExpression with no return type annotation and returns undefined\nvar un = undefined;\nvar un = (function() {\n  return undefined;\n})();\n\n// FunctionExpression with no return type annotation and returns a type parameter type\nvar n = (function<T>(x: T) {\n  return x;\n})(4);\n\n// FunctionExpression with no return type annotation and returns a constrained type parameter type\nvar n = (function<T extends {}>(x: T) {\n  return x;\n})(4);\n\n// FunctionExpression with no return type annotation with multiple return statements with identical types\nvar n = (function() {\n  return 3;\n  return 5;\n})();\n\n// Otherwise, the inferred return type is the first of the types of the return statement expressions\n// in the function body that is a supertype of each of the others,\n// ignoring return statements with no expressions.\n// A compile - time error occurs if no return statement expression has a type that is a supertype of each of the others.\n// FunctionExpression with no return type annotation with multiple return statements with subtype relation between returns\nclass Base {\n  private m;\n}\nclass Derived extends Base {\n  private q;\n}\nvar b: Base;\nvar b = (function() {\n  return new Base();\n  return new Derived();\n})();\n\n// FunctionExpression with no return type annotation with multiple return statements with one a recursive call\nvar a = (function f() {\n  return new Base();\n  return new Derived();\n  return f(); // ?\n})();\n\n// FunctionExpression with non -void return type annotation with a single throw statement\nundefined ===\n  function(): number {\n    throw undefined;\n  };\n\n// Type of 'this' in function implementation is 'any'\nfunction thisFunc() {\n  var x = this;\n  var x: any;\n}\n\n// Function signature with optional parameter, no type annotation and initializer has initializer's type\nfunction opt1(n = 4) {\n  var m = n;\n  var m: number;\n}\n\n// Function signature with optional parameter, no type annotation and initializer has initializer's widened type\nfunction opt2(n = { x: null, y: undefined }) {\n  var m = n;\n  var m: { x: any; y: any };\n}\n\n// Function signature with initializer referencing other parameter to the left\nfunction opt3(n: number, m = n) {\n  var y = m;\n  var y: number;\n}\n\n// Function signature with optional parameter has correct codegen\n// (tested above)\n\n// FunctionExpression with non -void return type annotation return with no expression\nfunction f6(): number {\n  return;\n}\n\nclass Derived2 extends Base {\n  private r: string;\n}\nclass AnotherClass {\n  private x;\n}\n// if f is a contextually typed function expression, the inferred return type is the union type\n// of the types of the return statement expressions in the function body,\n// ignoring return statements with no expressions.\nvar f7: (x: number) => string | number = x => {\n  // should be (x: number) => number | string\n  if (x < 0) {\n    return x;\n  }\n  return x.toString();\n};\nvar f8: (x: number) => any = x => {\n  // should be (x: number) => Base\n  return new Base();\n  return new Derived2();\n};\nvar f9: (x: number) => any = x => {\n  // should be (x: number) => Base\n  return new Base();\n  return new Derived();\n  return new Derived2();\n};\nvar f10: (x: number) => any = x => {\n  // should be (x: number) => Derived | Derived1\n  return new Derived();\n  return new Derived2();\n};\nvar f11: (x: number) => any = x => {\n  // should be (x: number) => Base | AnotherClass\n  return new Base();\n  return new AnotherClass();\n};\nvar f12: (x: number) => any = x => {\n  // should be (x: number) => Base | AnotherClass\n  return new Base();\n  return; // should be ignored\n  return new AnotherClass();\n};\n\n`;\n\nexports[`functionOverloadCompatibilityWithVoid01.ts 1`] = `\nfunction f(x: string): number;\nfunction f(x: string): void {\n    return;\n} \n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction f(x: string): number;\nfunction f(x: string): void {\n  return;\n}\n\n`;\n\nexports[`functionOverloadCompatibilityWithVoid02.ts 1`] = `\nfunction f(x: string): void;\nfunction f(x: string): number {\n    return 0;\n} \n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction f(x: string): void;\nfunction f(x: string): number {\n  return 0;\n}\n\n`;\n\nexports[`functionOverloadCompatibilityWithVoid03.ts 1`] = `\nfunction f(x: string): void;\nfunction f(x: string): void {\n    return;\n} \n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction f(x: string): void;\nfunction f(x: string): void {\n  return;\n}\n\n`;\n\nexports[`functionOverloadErrorsSyntax.ts 1`] = `\n//Function overload signature with optional parameter followed by non-optional parameter\nfunction fn4a(x?: number, y: string);\nfunction fn4a() { }\n\nfunction fn4b(n: string, x?: number, y: string);\nfunction fn4b() { }\n\n//Function overload signature with rest param followed by non-optional parameter\nfunction fn5(x: string, ...y: any[], z: string);\nfunction fn5() { }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n//Function overload signature with optional parameter followed by non-optional parameter\nfunction fn4a(x?: number, y: string);\nfunction fn4a() {}\n\nfunction fn4b(n: string, x?: number, y: string);\nfunction fn4b() {}\n\n//Function overload signature with rest param followed by non-optional parameter\nfunction fn5(x: string, ...y: any[], z: string);\nfunction fn5() {}\n\n`;\n\nexports[`functionTypeTypeParameters.ts 1`] = `\ntype FuncWithTypeParameter = <T, P>() => {};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype FuncWithTypeParameter = <T, P>() => {};\n\n`;\n\nexports[`parameterInitializersForwardReferencing.ts 1`] = `\nfunction left(a, b = a, c = b) {\n    a;\n    b;\n}\n\nfunction right(a = b, b = a) {\n    a;\n    b;\n}\n\nfunction right2(a = b, b = c, c = a) {\n    a;\n    b;\n    c;\n}\n\nfunction inside(a = b) {\n    var b;\n}\n\nfunction outside() {\n    var b;\n    function inside(a = b) { // Still an error because b is declared inside the function\n        var b;\n    }\n}\n\nfunction defaultArgFunction(a = function () { return b; }, b = 1) { }\nfunction defaultArgArrow(a = () => () => b, b = 3) { }\n\nclass C {\n    constructor(a = b, b = 1) { }\n    method(a = b, b = 1) { }\n}\n\n// Function expressions\nvar x = (a = b, b = c, c = d) => { var d; };\n\n// Should not produce errors - can reference later parameters if they occur within a function expression initializer.\nfunction f(a, b = function () { return c; }, c = b()) {\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction left(a, b = a, c = b) {\n  a;\n  b;\n}\n\nfunction right(a = b, b = a) {\n  a;\n  b;\n}\n\nfunction right2(a = b, b = c, c = a) {\n  a;\n  b;\n  c;\n}\n\nfunction inside(a = b) {\n  var b;\n}\n\nfunction outside() {\n  var b;\n  function inside(a = b) {\n    // Still an error because b is declared inside the function\n    var b;\n  }\n}\n\nfunction defaultArgFunction(\n  a = function() {\n    return b;\n  },\n  b = 1\n) {}\nfunction defaultArgArrow(a = () => () => b, b = 3) {}\n\nclass C {\n  constructor(a = b, b = 1) {}\n  method(a = b, b = 1) {}\n}\n\n// Function expressions\nvar x = (a = b, b = c, c = d) => {\n  var d;\n};\n\n// Should not produce errors - can reference later parameters if they occur within a function expression initializer.\nfunction f(\n  a,\n  b = function() {\n    return c;\n  },\n  c = b()\n) {}\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/functions/functionImplementationErrors.ts",
    "content": "// @allowUnreachableCode: true\n\n// FunctionExpression with no return type annotation with multiple return statements with unrelated types\nvar f1 = function () {\n    return '';\n    return 3;\n};\nvar f2 = function x() {\n    return '';\n    return 3;\n};\nvar f3 = () => {\n    return '';\n    return 3;\n};\n\n// FunctionExpression with no return type annotation with return branch of number[] and other of string[]\nvar f4 = function () {\n    if (true) {\n        return [''];\n    } else {\n        return [1];\n    }\n}\n\n// Function implemetnation with non -void return type annotation with no return\nfunction f5(): number {\n}\n\nvar m;\n// Function signature with parameter initializer referencing in scope local variable\nfunction f6(n = m) {\n    var m = 4;\n}\n\n// Function signature with initializer referencing other parameter to the right\nfunction f7(n = m, m?) {\n}\n\n// FunctionExpression with non -void return type annotation with a throw, no return, and other code\n// Should be error but isn't\nundefined === function (): number {\n    throw undefined;\n    var x = 4;\n};\n\nclass Base { private x; }\nclass AnotherClass { private y; }\nclass Derived1 extends Base { private m; }\nclass Derived2 extends Base { private n; }\nfunction f8() {\n    return new Derived1();\n    return new Derived2();    \n}\nvar f9 = function () {\n    return new Derived1();\n    return new Derived2();\n};\nvar f10 = () => {\n    return new Derived1();\n    return new Derived2();\n};\nfunction f11() {\n    return new Base();\n    return new AnotherClass();\n}\nvar f12 = function () {\n    return new Base();\n    return new AnotherClass();\n};\nvar f13 = () => {\n    return new Base();\n    return new AnotherClass();\n};\n"
  },
  {
    "path": "tests/typescript/conformance/types/functions/functionImplementations.ts",
    "content": "// @allowUnreachableCode: true\n\n// FunctionExpression with no return type annotation and no return statement returns void\nvar v: void = function () { } ();\n\n// FunctionExpression f with no return type annotation and directly references f in its body returns any\nvar a: any = function f() {\n    return f;\n};\nvar a: any = function f() {\n    return f();\n};\n\n// FunctionExpression f with no return type annotation and indirectly references f in its body returns any\nvar a: any = function f() {\n    var x = f;\n    return x;\n};\n\n// Two mutually recursive function implementations with no return type annotations\nfunction rec1() {\n    return rec2();\n}\nfunction rec2() {\n    return rec1();\n}\nvar a = rec1();\nvar a = rec2();\n\n// Two mutually recursive function implementations with return type annotation in one\nfunction rec3(): number {\n    return rec4();\n}\nfunction rec4() {\n    return rec3();\n}\nvar n: number;\nvar n = rec3();\nvar n = rec4();\n\n// FunctionExpression with no return type annotation and returns a number\nvar n = function () {\n    return 3;\n} ();\n\n// FunctionExpression with no return type annotation and returns null\nvar nu = null;\nvar nu = function () {\n    return null;\n} ();\n\n// FunctionExpression with no return type annotation and returns undefined\nvar un = undefined;\nvar un = function () {\n    return undefined;\n} ();\n\n// FunctionExpression with no return type annotation and returns a type parameter type\nvar n = function <T>(x: T) {\n    return x;\n} (4);\n\n// FunctionExpression with no return type annotation and returns a constrained type parameter type\nvar n = function <T extends {}>(x: T) {\n    return x;\n} (4);\n\n// FunctionExpression with no return type annotation with multiple return statements with identical types\nvar n = function () {\n    return 3;\n    return 5;\n}();\n\n// Otherwise, the inferred return type is the first of the types of the return statement expressions\n// in the function body that is a supertype of each of the others, \n// ignoring return statements with no expressions.\n// A compile - time error occurs if no return statement expression has a type that is a supertype of each of the others.\n// FunctionExpression with no return type annotation with multiple return statements with subtype relation between returns\nclass Base { private m; }\nclass Derived extends Base { private q; }\nvar b: Base;\nvar b = function () {\n    return new Base(); return new Derived();\n} ();\n\n// FunctionExpression with no return type annotation with multiple return statements with one a recursive call\nvar a = function f() {\n    return new Base(); return new Derived(); return f(); // ?\n} ();\n\n// FunctionExpression with non -void return type annotation with a single throw statement\nundefined === function (): number {\n    throw undefined;\n};\n\n// Type of 'this' in function implementation is 'any'\nfunction thisFunc() {\n    var x = this;\n    var x: any;\n}\n\n// Function signature with optional parameter, no type annotation and initializer has initializer's type\nfunction opt1(n = 4) {\n    var m = n;\n    var m: number;\n}\n\n// Function signature with optional parameter, no type annotation and initializer has initializer's widened type\nfunction opt2(n = { x: null, y: undefined }) {\n    var m = n;\n    var m: { x: any; y: any };\n}\n\n// Function signature with initializer referencing other parameter to the left\nfunction opt3(n: number, m = n) {\n    var y = m;\n    var y: number;\n}\n\n// Function signature with optional parameter has correct codegen \n// (tested above)\n\n// FunctionExpression with non -void return type annotation return with no expression\nfunction f6(): number {\n    return;\n}\n\nclass Derived2 extends Base { private r: string; }\nclass AnotherClass { private x }\n// if f is a contextually typed function expression, the inferred return type is the union type\n// of the types of the return statement expressions in the function body, \n// ignoring return statements with no expressions.\nvar f7: (x: number) => string | number = x => { // should be (x: number) => number | string\n    if (x < 0) { return x; }\n    return x.toString();\n}\nvar f8: (x: number) => any = x => { // should be (x: number) => Base\n    return new Base();\n    return new Derived2();\n}\nvar f9: (x: number) => any = x => { // should be (x: number) => Base\n    return new Base();\n    return new Derived();\n    return new Derived2();\n}\nvar f10: (x: number) => any = x => { // should be (x: number) => Derived | Derived1\n    return new Derived();\n    return new Derived2();\n}\nvar f11: (x: number) => any = x => { // should be (x: number) => Base | AnotherClass\n    return new Base();\n    return new AnotherClass();\n}\nvar f12: (x: number) => any = x => { // should be (x: number) => Base | AnotherClass\n    return new Base();\n    return; // should be ignored\n    return new AnotherClass();\n}\n"
  },
  {
    "path": "tests/typescript/conformance/types/functions/functionOverloadCompatibilityWithVoid01.ts",
    "content": "function f(x: string): number;\nfunction f(x: string): void {\n    return;\n} \n"
  },
  {
    "path": "tests/typescript/conformance/types/functions/functionOverloadCompatibilityWithVoid02.ts",
    "content": "function f(x: string): void;\nfunction f(x: string): number {\n    return 0;\n} \n"
  },
  {
    "path": "tests/typescript/conformance/types/functions/functionOverloadCompatibilityWithVoid03.ts",
    "content": "function f(x: string): void;\nfunction f(x: string): void {\n    return;\n} \n"
  },
  {
    "path": "tests/typescript/conformance/types/functions/functionOverloadErrorsSyntax.ts",
    "content": "//Function overload signature with optional parameter followed by non-optional parameter\nfunction fn4a(x?: number, y: string);\nfunction fn4a() { }\n\nfunction fn4b(n: string, x?: number, y: string);\nfunction fn4b() { }\n\n//Function overload signature with rest param followed by non-optional parameter\nfunction fn5(x: string, ...y: any[], z: string);\nfunction fn5() { }\n"
  },
  {
    "path": "tests/typescript/conformance/types/functions/functionTypeTypeParameters.ts",
    "content": "type FuncWithTypeParameter = <T, P>() => {};\n"
  },
  {
    "path": "tests/typescript/conformance/types/functions/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/functions/parameterInitializersForwardReferencing.ts",
    "content": "function left(a, b = a, c = b) {\n    a;\n    b;\n}\n\nfunction right(a = b, b = a) {\n    a;\n    b;\n}\n\nfunction right2(a = b, b = c, c = a) {\n    a;\n    b;\n    c;\n}\n\nfunction inside(a = b) {\n    var b;\n}\n\nfunction outside() {\n    var b;\n    function inside(a = b) { // Still an error because b is declared inside the function\n        var b;\n    }\n}\n\nfunction defaultArgFunction(a = function () { return b; }, b = 1) { }\nfunction defaultArgArrow(a = () => () => b, b = 3) { }\n\nclass C {\n    constructor(a = b, b = 1) { }\n    method(a = b, b = 1) { }\n}\n\n// Function expressions\nvar x = (a = b, b = c, c = d) => { var d; };\n\n// Should not produce errors - can reference later parameters if they occur within a function expression initializer.\nfunction f(a, b = function () { return c; }, c = b()) {\n}\n"
  },
  {
    "path": "tests/typescript/conformance/types/importEqualsDeclaration/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`importEqualsDeclaration.ts 1`] = `\nimport glo_m4 = require(\"glo_m4\");\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport glo_m4 = require(\"glo_m4\");\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/importEqualsDeclaration/importEqualsDeclaration.ts",
    "content": "import glo_m4 = require(\"glo_m4\");\r\n"
  },
  {
    "path": "tests/typescript/conformance/types/importEqualsDeclaration/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/indexedAccesType/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`indexedAccesType.ts 1`] = `\nconst a: Foo['bar'] = {\n  baz: 'yawp'\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst a: Foo[\"bar\"] = {\n  baz: \"yawp\"\n};\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/indexedAccesType/indexedAccesType.ts",
    "content": "const a: Foo['bar'] = {\n  baz: 'yawp'\n}\n"
  },
  {
    "path": "tests/typescript/conformance/types/indexedAccesType/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/interfaceDeclaration/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`interfaceDeclaration.ts 1`] = `\ninterface abstract {\n    abstract(): void,\n    concrete(): number\n}\n\ninterface X {\n  x\n}\n\ninterface nil {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface abstract {\n  abstract(): void;\n  concrete(): number;\n}\n\ninterface X {\n  x;\n}\n\ninterface nil {}\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/interfaceDeclaration/interfaceDeclaration.ts",
    "content": "interface abstract {\n    abstract(): void,\n    concrete(): number\n}\n\ninterface X {\n  x\n}\n\ninterface nil {}\n"
  },
  {
    "path": "tests/typescript/conformance/types/interfaceDeclaration/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/intersectionType/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`intersectionType.ts 1`] = `\ntype A = & string;\ntype B =\n  & { foo: string }\n  & { bar: number };\n\ntype C = [& { foo: 1 } & { bar: 2 }, & { foo: 3 } & { bar: 4 }];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype A = string;\ntype B = { foo: string } & { bar: number };\n\ntype C = [{ foo: 1 } & { bar: 2 }, { foo: 3 } & { bar: 4 }];\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/intersectionType/intersectionType.ts",
    "content": "type A = & string;\ntype B =\n  & { foo: string }\n  & { bar: number };\n\ntype C = [& { foo: 1 } & { bar: 2 }, & { foo: 3 } & { bar: 4 }];\n"
  },
  {
    "path": "tests/typescript/conformance/types/intersectionType/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/lastTypeNode/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`lastTypeNode.ts 1`] = `\nfunction x3(callback: (x?: 'hi') => number) {};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction x3(callback: (x?: \"hi\") => number) {}\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/lastTypeNode/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/lastTypeNode/lastTypeNode.ts",
    "content": "function x3(callback: (x?: 'hi') => number) {};\n"
  },
  {
    "path": "tests/typescript/conformance/types/mappedType/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`mappedType.ts 1`] = `\ntype Keys = 'option1' | 'option2';\ntype Flags = { [K in Keys]: boolean };\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype Keys = \"option1\" | \"option2\";\ntype Flags = { [K in Keys]: boolean };\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/mappedType/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/mappedType/mappedType.ts",
    "content": "type Keys = 'option1' | 'option2';\r\ntype Flags = { [K in Keys]: boolean };\r\n\r\n"
  },
  {
    "path": "tests/typescript/conformance/types/methodSignature/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`methodSignature.ts 1`] = `\nvar logger: {\n    log(val: any, val2: any),\n    error(val: any)\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar logger: {\n  log(val: any, val2: any);\n  error(val: any);\n};\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/methodSignature/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/methodSignature/methodSignature.ts",
    "content": "var logger: {\r\n    log(val: any, val2: any),\r\n    error(val: any)\r\n};\r\n"
  },
  {
    "path": "tests/typescript/conformance/types/moduleDeclaration/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`moduleDeclaration.ts 1`] = `\nmodule A {\n    export class A {\n    }\n}\n\ndeclare module \"B\" {\n    export class B {\n    }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nnamespace A {\n  export class A {}\n}\n\ndeclare module \"B\" {\n  export class B {}\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/moduleDeclaration/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/moduleDeclaration/moduleDeclaration.ts",
    "content": "module A {\r\n    export class A {\r\n    }\r\n}\r\n\r\ndeclare module \"B\" {\r\n    export class B {\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/typescript/conformance/types/namespaceExportDeclaration/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`exportAsNamespace.d.ts 1`] = `\n// issue: https://github.com/Microsoft/TypeScript/issues/11545\n\nexport var X;\nexport as namespace N\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// issue: https://github.com/Microsoft/TypeScript/issues/11545\n\nexport var X;\nexport as namespace N;\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/namespaceExportDeclaration/exportAsNamespace.d.ts",
    "content": "// issue: https://github.com/Microsoft/TypeScript/issues/11545\n\nexport var X;\nexport as namespace N\n"
  },
  {
    "path": "tests/typescript/conformance/types/namespaceExportDeclaration/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/never/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`never.ts 1`] = `\nvar x: never\nvar x: never | string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x: never;\nvar x: never | string;\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/never/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/never/never.ts",
    "content": "var x: never\nvar x: never | string\n"
  },
  {
    "path": "tests/typescript/conformance/types/nonNullExpression/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`nonNullExpression.ts 1`] = `\nvar xx = (xx!, xx);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar xx = (xx!, xx);\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/nonNullExpression/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/nonNullExpression/nonNullExpression.ts",
    "content": "var xx = (xx!, xx);\n"
  },
  {
    "path": "tests/typescript/conformance/types/parameterProperty/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`parameterProperty.ts 1`] = `\nclass c3 {\n  constructor(public arg: number = 10) {\n    // fails because of comment\n  }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass c3 {\n  constructor(public arg: number = 10) {\n    // fails because of comment\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/parameterProperty/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/parameterProperty/parameterProperty.ts",
    "content": "class c3 {\r\n  constructor(public arg: number = 10) {\r\n    // fails because of comment\r\n  }\r\n}\r\n"
  },
  {
    "path": "tests/typescript/conformance/types/symbol/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`symbol.ts 1`] = `\nvar x: symbol\nvar x: symbol | string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x: symbol;\nvar x: symbol | string;\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/symbol/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/symbol/symbol.ts",
    "content": "var x: symbol\nvar x: symbol | string\n"
  },
  {
    "path": "tests/typescript/conformance/types/thisType/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`thisType.ts 1`] = `\ndeclare class MyArray<T> extends Array<T> {\n    sort(compareFn?: (a: T, b: T) => number): this;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare class MyArray<T> extends Array<T> {\n  sort(compareFn?: (a: T, b: T) => number): this;\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/thisType/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/thisType/thisType.ts",
    "content": "declare class MyArray<T> extends Array<T> {\n    sort(compareFn?: (a: T, b: T) => number): this;\n}\n"
  },
  {
    "path": "tests/typescript/conformance/types/tuple/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`contextualTypeWithTuple.ts 1`] = `\n﻿// no error\nvar numStrTuple: [number, string] = [5, \"hello\"];\nvar numStrTuple2: [number, string] = [5, \"foo\", true];\nvar numStrBoolTuple: [number, string, boolean] = [5, \"foo\", true];\nvar objNumTuple: [{ a: string }, number] = [{ a: \"world\" }, 5];\nvar strTupleTuple: [string, [number, {}]] = [\"bar\", [5, { x: 1, y: 1 }]];\nclass C { }\nclass D { }\nvar unionTuple: [C, string | number] = [new C(), \"foo\"];\nvar unionTuple1: [C, string | number] = [new C(), \"foo\"];\nvar unionTuple2: [C, string | number, D] = [new C(), \"foo\", new D()];\nvar unionTuple3: [number, string| number] = [10, \"foo\"]; \n\nnumStrTuple = numStrTuple2;\nnumStrTuple = numStrBoolTuple;\n\n// error\nobjNumTuple = [ {}, 5];\nnumStrBoolTuple = numStrTuple;\nvar strStrTuple: [string, string] = [\"foo\", \"bar\", 5];\n\nunionTuple = unionTuple1;\nunionTuple = unionTuple2;\nunionTuple2 = unionTuple;\nnumStrTuple = unionTuple3;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// no error\nvar numStrTuple: [number, string] = [5, \"hello\"];\nvar numStrTuple2: [number, string] = [5, \"foo\", true];\nvar numStrBoolTuple: [number, string, boolean] = [5, \"foo\", true];\nvar objNumTuple: [{ a: string }, number] = [{ a: \"world\" }, 5];\nvar strTupleTuple: [string, [number, {}]] = [\"bar\", [5, { x: 1, y: 1 }]];\nclass C {}\nclass D {}\nvar unionTuple: [C, string | number] = [new C(), \"foo\"];\nvar unionTuple1: [C, string | number] = [new C(), \"foo\"];\nvar unionTuple2: [C, string | number, D] = [new C(), \"foo\", new D()];\nvar unionTuple3: [number, string | number] = [10, \"foo\"];\n\nnumStrTuple = numStrTuple2;\nnumStrTuple = numStrBoolTuple;\n\n// error\nobjNumTuple = [{}, 5];\nnumStrBoolTuple = numStrTuple;\nvar strStrTuple: [string, string] = [\"foo\", \"bar\", 5];\n\nunionTuple = unionTuple1;\nunionTuple = unionTuple2;\nunionTuple2 = unionTuple;\nnumStrTuple = unionTuple3;\n\n`;\n\nexports[`indexerWithTuple.ts 1`] = `\n﻿var strNumTuple: [string, number] = [\"foo\", 10]; \nvar numTupleTuple: [number, [string, number]] = [10, [\"bar\", 20]];\nvar unionTuple1: [number, string| number] = [10, \"foo\"]; \nvar unionTuple2: [boolean, string| number] = [true, \"foo\"]; \n\n// no error\nvar idx0 = 0;\nvar idx1 = 1;\nvar ele10 = strNumTuple[0]; // string\nvar ele11 = strNumTuple[1]; // number\nvar ele12 = strNumTuple[2]; // string | number\nvar ele13 = strNumTuple[idx0]; // string | number\nvar ele14 = strNumTuple[idx1]; // string | number\nvar ele15 = strNumTuple[\"0\"]; // string\nvar ele16 = strNumTuple[\"1\"]; // number\nvar strNumTuple1 = numTupleTuple[1];  //[string, number];\nvar ele17 = numTupleTuple[2]; // number | [string, number]\nvar eleUnion10 = unionTuple1[0]; // number\nvar eleUnion11 = unionTuple1[1]; // string | number\nvar eleUnion12 = unionTuple1[2]; // string | number\nvar eleUnion13 = unionTuple1[idx0]; // string | number\nvar eleUnion14 = unionTuple1[idx1]; // string | number\nvar eleUnion15 = unionTuple1[\"0\"]; // number\nvar eleUnion16 = unionTuple1[\"1\"]; // string | number\n\nvar eleUnion20 = unionTuple2[0]; // boolean\nvar eleUnion21 = unionTuple2[1]; // string | number\nvar eleUnion22 = unionTuple2[2]; // string | number | boolean\nvar eleUnion23 = unionTuple2[idx0]; // string | number | boolean\nvar eleUnion24 = unionTuple2[idx1]; // string | number | boolean\nvar eleUnion25 = unionTuple2[\"0\"]; // boolean\nvar eleUnion26 = unionTuple2[\"1\"]; // string | number\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar strNumTuple: [string, number] = [\"foo\", 10];\nvar numTupleTuple: [number, [string, number]] = [10, [\"bar\", 20]];\nvar unionTuple1: [number, string | number] = [10, \"foo\"];\nvar unionTuple2: [boolean, string | number] = [true, \"foo\"];\n\n// no error\nvar idx0 = 0;\nvar idx1 = 1;\nvar ele10 = strNumTuple[0]; // string\nvar ele11 = strNumTuple[1]; // number\nvar ele12 = strNumTuple[2]; // string | number\nvar ele13 = strNumTuple[idx0]; // string | number\nvar ele14 = strNumTuple[idx1]; // string | number\nvar ele15 = strNumTuple[\"0\"]; // string\nvar ele16 = strNumTuple[\"1\"]; // number\nvar strNumTuple1 = numTupleTuple[1]; //[string, number];\nvar ele17 = numTupleTuple[2]; // number | [string, number]\nvar eleUnion10 = unionTuple1[0]; // number\nvar eleUnion11 = unionTuple1[1]; // string | number\nvar eleUnion12 = unionTuple1[2]; // string | number\nvar eleUnion13 = unionTuple1[idx0]; // string | number\nvar eleUnion14 = unionTuple1[idx1]; // string | number\nvar eleUnion15 = unionTuple1[\"0\"]; // number\nvar eleUnion16 = unionTuple1[\"1\"]; // string | number\n\nvar eleUnion20 = unionTuple2[0]; // boolean\nvar eleUnion21 = unionTuple2[1]; // string | number\nvar eleUnion22 = unionTuple2[2]; // string | number | boolean\nvar eleUnion23 = unionTuple2[idx0]; // string | number | boolean\nvar eleUnion24 = unionTuple2[idx1]; // string | number | boolean\nvar eleUnion25 = unionTuple2[\"0\"]; // boolean\nvar eleUnion26 = unionTuple2[\"1\"]; // string | number\n\n`;\n\nexports[`tupleElementTypes1.ts 1`] = `\nvar [a, b]: [number, any] = [undefined, undefined];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar [a, b]: [number, any] = [undefined, undefined];\n\n`;\n\nexports[`tupleElementTypes2.ts 1`] = `\nfunction f([a, b]: [number, any]) { }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction f([a, b]: [number, any]) {}\n\n`;\n\nexports[`tupleElementTypes3.ts 1`] = `\nvar [a, b] = [0, undefined];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar [a, b] = [0, undefined];\n\n`;\n\nexports[`tupleElementTypes4.ts 1`] = `\nfunction f([a, b] = [0, undefined]) { }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction f([a, b] = [0, undefined]) {}\n\n`;\n\nexports[`typeInferenceWithTupleType.ts 1`] = `\n﻿function combine<T, U>(x: T, y: U): [T, U] {\n    return [x, y];\n}\n\nvar combineResult = combine(\"string\", 10);\nvar combineEle1 = combineResult[0]; // string\nvar combineEle2 = combineResult[1]; // number\n\nfunction zip<T, U>(array1: T[], array2: U[]): [[T, U]] {\n    if (array1.length != array2.length) {\n        return [[undefined, undefined]];\n    }\n    var length = array1.length;\n    var zipResult: [[T, U]];\n    for (var i = 0; i < length; ++i) {\n        zipResult.push([array1[i], array2[i]]);\n    }\n    return zipResult;\n}\n\nvar zipResult = zip([\"foo\", \"bar\"], [5, 6]);\nvar zipResultEle = zipResult[0]; // [string, number]\nvar zipResultEleEle = zipResult[0][0]; // string\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction combine<T, U>(x: T, y: U): [T, U] {\n  return [x, y];\n}\n\nvar combineResult = combine(\"string\", 10);\nvar combineEle1 = combineResult[0]; // string\nvar combineEle2 = combineResult[1]; // number\n\nfunction zip<T, U>(array1: T[], array2: U[]): [[T, U]] {\n  if (array1.length != array2.length) {\n    return [[undefined, undefined]];\n  }\n  var length = array1.length;\n  var zipResult: [[T, U]];\n  for (var i = 0; i < length; ++i) {\n    zipResult.push([array1[i], array2[i]]);\n  }\n  return zipResult;\n}\n\nvar zipResult = zip([\"foo\", \"bar\"], [5, 6]);\nvar zipResultEle = zipResult[0]; // [string, number]\nvar zipResultEleEle = zipResult[0][0]; // string\n\n`;\n\nexports[`wideningTuples1.ts 1`] = `\n//@noImplicitAny: true\ndeclare function foo<T extends [any]>(x: T): T;\n\nvar y = foo([undefined]);\ny = [\"\"];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n//@noImplicitAny: true\ndeclare function foo<T extends [any]>(x: T): T\n\nvar y = foo([undefined]);\ny = [\"\"];\n\n`;\n\nexports[`wideningTuples2.ts 1`] = `\n//@noImplicitAny: true\nvar foo: () => [any] = function bar() {\n    let intermediate = bar();\n    intermediate = [\"\"];\n    return [undefined];\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n//@noImplicitAny: true\nvar foo: () => [any] = function bar() {\n  let intermediate = bar();\n  intermediate = [\"\"];\n  return [undefined];\n};\n\n`;\n\nexports[`wideningTuples3.ts 1`] = `\n//@noImplicitAny: true\nvar a: [any];\n\nvar b = a = [undefined, null];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n//@noImplicitAny: true\nvar a: [any];\n\nvar b = (a = [undefined, null]);\n\n`;\n\nexports[`wideningTuples4.ts 1`] = `\nvar a: [any];\n\nvar b = a = [undefined, null];\nb = [\"\", \"\"];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar a: [any];\n\nvar b = (a = [undefined, null]);\nb = [\"\", \"\"];\n\n`;\n\nexports[`wideningTuples5.ts 1`] = `\n//@noImplicitAny: true\nvar [a, b] = [undefined, null];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n//@noImplicitAny: true\nvar [a, b] = [undefined, null];\n\n`;\n\nexports[`wideningTuples6.ts 1`] = `\nvar [a, b] = [undefined, null];\na = \"\";\nb = \"\";\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar [a, b] = [undefined, null];\na = \"\";\nb = \"\";\n\n`;\n\nexports[`wideningTuples7.ts 1`] = `\n//@noImplicitAny: true\nvar foo = function bar() {\n    let intermediate: [string];\n    return intermediate = [undefined];\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n//@noImplicitAny: true\nvar foo = function bar() {\n  let intermediate: [string];\n  return (intermediate = [undefined]);\n};\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/tuple/contextualTypeWithTuple.ts",
    "content": "﻿// no error\nvar numStrTuple: [number, string] = [5, \"hello\"];\nvar numStrTuple2: [number, string] = [5, \"foo\", true];\nvar numStrBoolTuple: [number, string, boolean] = [5, \"foo\", true];\nvar objNumTuple: [{ a: string }, number] = [{ a: \"world\" }, 5];\nvar strTupleTuple: [string, [number, {}]] = [\"bar\", [5, { x: 1, y: 1 }]];\nclass C { }\nclass D { }\nvar unionTuple: [C, string | number] = [new C(), \"foo\"];\nvar unionTuple1: [C, string | number] = [new C(), \"foo\"];\nvar unionTuple2: [C, string | number, D] = [new C(), \"foo\", new D()];\nvar unionTuple3: [number, string| number] = [10, \"foo\"]; \n\nnumStrTuple = numStrTuple2;\nnumStrTuple = numStrBoolTuple;\n\n// error\nobjNumTuple = [ {}, 5];\nnumStrBoolTuple = numStrTuple;\nvar strStrTuple: [string, string] = [\"foo\", \"bar\", 5];\n\nunionTuple = unionTuple1;\nunionTuple = unionTuple2;\nunionTuple2 = unionTuple;\nnumStrTuple = unionTuple3;\n"
  },
  {
    "path": "tests/typescript/conformance/types/tuple/emptyTuples/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`emptyTuplesTypeAssertion02.ts 1`] = `\n// @declaration: true\n\nlet x = [] as [];\nlet y = x[0];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// @declaration: true\n\nlet x = [] as [];\nlet y = x[0];\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/tuple/emptyTuples/emptyTuplesTypeAssertion02.ts",
    "content": "// @declaration: true\n\nlet x = [] as [];\nlet y = x[0];\n"
  },
  {
    "path": "tests/typescript/conformance/types/tuple/emptyTuples/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/tuple/indexerWithTuple.ts",
    "content": "﻿var strNumTuple: [string, number] = [\"foo\", 10]; \nvar numTupleTuple: [number, [string, number]] = [10, [\"bar\", 20]];\nvar unionTuple1: [number, string| number] = [10, \"foo\"]; \nvar unionTuple2: [boolean, string| number] = [true, \"foo\"]; \n\n// no error\nvar idx0 = 0;\nvar idx1 = 1;\nvar ele10 = strNumTuple[0]; // string\nvar ele11 = strNumTuple[1]; // number\nvar ele12 = strNumTuple[2]; // string | number\nvar ele13 = strNumTuple[idx0]; // string | number\nvar ele14 = strNumTuple[idx1]; // string | number\nvar ele15 = strNumTuple[\"0\"]; // string\nvar ele16 = strNumTuple[\"1\"]; // number\nvar strNumTuple1 = numTupleTuple[1];  //[string, number];\nvar ele17 = numTupleTuple[2]; // number | [string, number]\nvar eleUnion10 = unionTuple1[0]; // number\nvar eleUnion11 = unionTuple1[1]; // string | number\nvar eleUnion12 = unionTuple1[2]; // string | number\nvar eleUnion13 = unionTuple1[idx0]; // string | number\nvar eleUnion14 = unionTuple1[idx1]; // string | number\nvar eleUnion15 = unionTuple1[\"0\"]; // number\nvar eleUnion16 = unionTuple1[\"1\"]; // string | number\n\nvar eleUnion20 = unionTuple2[0]; // boolean\nvar eleUnion21 = unionTuple2[1]; // string | number\nvar eleUnion22 = unionTuple2[2]; // string | number | boolean\nvar eleUnion23 = unionTuple2[idx0]; // string | number | boolean\nvar eleUnion24 = unionTuple2[idx1]; // string | number | boolean\nvar eleUnion25 = unionTuple2[\"0\"]; // boolean\nvar eleUnion26 = unionTuple2[\"1\"]; // string | number\n"
  },
  {
    "path": "tests/typescript/conformance/types/tuple/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/tuple/tupleElementTypes1.ts",
    "content": "var [a, b]: [number, any] = [undefined, undefined];\n"
  },
  {
    "path": "tests/typescript/conformance/types/tuple/tupleElementTypes2.ts",
    "content": "function f([a, b]: [number, any]) { }\n"
  },
  {
    "path": "tests/typescript/conformance/types/tuple/tupleElementTypes3.ts",
    "content": "var [a, b] = [0, undefined];\n"
  },
  {
    "path": "tests/typescript/conformance/types/tuple/tupleElementTypes4.ts",
    "content": "function f([a, b] = [0, undefined]) { }\n"
  },
  {
    "path": "tests/typescript/conformance/types/tuple/typeInferenceWithTupleType.ts",
    "content": "﻿function combine<T, U>(x: T, y: U): [T, U] {\n    return [x, y];\n}\n\nvar combineResult = combine(\"string\", 10);\nvar combineEle1 = combineResult[0]; // string\nvar combineEle2 = combineResult[1]; // number\n\nfunction zip<T, U>(array1: T[], array2: U[]): [[T, U]] {\n    if (array1.length != array2.length) {\n        return [[undefined, undefined]];\n    }\n    var length = array1.length;\n    var zipResult: [[T, U]];\n    for (var i = 0; i < length; ++i) {\n        zipResult.push([array1[i], array2[i]]);\n    }\n    return zipResult;\n}\n\nvar zipResult = zip([\"foo\", \"bar\"], [5, 6]);\nvar zipResultEle = zipResult[0]; // [string, number]\nvar zipResultEleEle = zipResult[0][0]; // string\n\n"
  },
  {
    "path": "tests/typescript/conformance/types/tuple/wideningTuples1.ts",
    "content": "//@noImplicitAny: true\ndeclare function foo<T extends [any]>(x: T): T;\n\nvar y = foo([undefined]);\ny = [\"\"];\n"
  },
  {
    "path": "tests/typescript/conformance/types/tuple/wideningTuples2.ts",
    "content": "//@noImplicitAny: true\nvar foo: () => [any] = function bar() {\n    let intermediate = bar();\n    intermediate = [\"\"];\n    return [undefined];\n};\n"
  },
  {
    "path": "tests/typescript/conformance/types/tuple/wideningTuples3.ts",
    "content": "//@noImplicitAny: true\nvar a: [any];\n\nvar b = a = [undefined, null];\n"
  },
  {
    "path": "tests/typescript/conformance/types/tuple/wideningTuples4.ts",
    "content": "var a: [any];\n\nvar b = a = [undefined, null];\nb = [\"\", \"\"];\n"
  },
  {
    "path": "tests/typescript/conformance/types/tuple/wideningTuples5.ts",
    "content": "//@noImplicitAny: true\nvar [a, b] = [undefined, null];\n"
  },
  {
    "path": "tests/typescript/conformance/types/tuple/wideningTuples6.ts",
    "content": "var [a, b] = [undefined, null];\na = \"\";\nb = \"\";\n"
  },
  {
    "path": "tests/typescript/conformance/types/tuple/wideningTuples7.ts",
    "content": "//@noImplicitAny: true\nvar foo = function bar() {\n    let intermediate: [string];\n    return intermediate = [undefined];\n};\n"
  },
  {
    "path": "tests/typescript/conformance/types/typeOperator/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`typeOperator.ts 1`] = `\nlet a: (keyof T)[] = [\"a\", \"b\"];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nlet a: (keyof T)[] = [\"a\", \"b\"];\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/typeOperator/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/typeOperator/typeOperator.ts",
    "content": "let a: (keyof T)[] = [\"a\", \"b\"];\r\n"
  },
  {
    "path": "tests/typescript/conformance/types/typeParameter/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`typeParameter.ts 1`] = `\ninterface IObservable<T> {\n  n: IObservable<T[]> // fails because of comment\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface IObservable<T> {\n  n: IObservable<T[]>; // fails because of comment\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/typeParameter/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/typeParameter/typeParameter.ts",
    "content": "interface IObservable<T> {\r\n  n: IObservable<T[]> // fails because of comment\r\n}\r\n"
  },
  {
    "path": "tests/typescript/conformance/types/typeParameters/typeParameterLists/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`innerTypeParameterShadowingOuterOne.ts 1`] = `\n// inner type parameters shadow outer ones of the same name\n// no errors expected\n\nfunction f<T extends Date>() {\n    function g<T extends Number>() {\n        var x: T;\n        x.toFixed();\n    }\n    var x: T;\n    x.getDate();\n}\n\nfunction f2<T extends Date, U extends Date>() {\n    function g<T extends Number, U extends Number>() {\n        var x: U;\n        x.toFixed();\n    }\n    var x: U;\n    x.getDate();\n}\n//function f2<T extends Date, U extends T>() {\n//    function g<T extends Number, U extends T>() {\n//        var x: U;\n//        x.toFixed();\n//    }\n//    var x: U;\n//    x.getDate();\n//}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// inner type parameters shadow outer ones of the same name\n// no errors expected\n\nfunction f<T extends Date>() {\n  function g<T extends Number>() {\n    var x: T;\n    x.toFixed();\n  }\n  var x: T;\n  x.getDate();\n}\n\nfunction f2<T extends Date, U extends Date>() {\n  function g<T extends Number, U extends Number>() {\n    var x: U;\n    x.toFixed();\n  }\n  var x: U;\n  x.getDate();\n}\n//function f2<T extends Date, U extends T>() {\n//    function g<T extends Number, U extends T>() {\n//        var x: U;\n//        x.toFixed();\n//    }\n//    var x: U;\n//    x.getDate();\n//}\n\n`;\n\nexports[`innerTypeParameterShadowingOuterOne2.ts 1`] = `\n// inner type parameters shadow outer ones of the same name\n// no errors expected\n\nclass C<T extends Date> {\n    g<T extends Number>() {\n        var x: T;\n        x.toFixed();\n    }\n\n    h() {\n        var x: T;\n        x.getDate();\n    }\n}\n\nclass C2<T extends Date, U extends Date> {\n    g<T extends Number, U extends Number>() {\n        var x: U;\n        x.toFixed();\n    }\n\n    h() {\n        var x: U;\n        x.getDate();\n    }\n}\n//class C2<T extends Date, U extends T> {\n//    g<T extends Number, U extends T>() {\n//        var x: U;\n//        x.toFixed();\n//    }\n\n//    h() {\n//        var x: U;\n//        x.getDate();\n//    }\n//}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// inner type parameters shadow outer ones of the same name\n// no errors expected\n\nclass C<T extends Date> {\n  g<T extends Number>() {\n    var x: T;\n    x.toFixed();\n  }\n\n  h() {\n    var x: T;\n    x.getDate();\n  }\n}\n\nclass C2<T extends Date, U extends Date> {\n  g<T extends Number, U extends Number>() {\n    var x: U;\n    x.toFixed();\n  }\n\n  h() {\n    var x: U;\n    x.getDate();\n  }\n}\n//class C2<T extends Date, U extends T> {\n//    g<T extends Number, U extends T>() {\n//        var x: U;\n//        x.toFixed();\n//    }\n\n//    h() {\n//        var x: U;\n//        x.getDate();\n//    }\n//}\n\n`;\n\nexports[`staticMembersUsingClassTypeParameter.ts 1`] = `\n// BUG 745747\nclass C<T> {\n    static x: T;\n    static f(x: T) {}\n}\n\nclass C2<T, U> {\n    static x: U;\n    static f(x: U) { }\n}\n\nclass C3<T extends Date> {\n    static x: T;\n    static f(x: T) { }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// BUG 745747\nclass C<T> {\n  static x: T;\n  static f(x: T) {}\n}\n\nclass C2<T, U> {\n  static x: U;\n  static f(x: U) {}\n}\n\nclass C3<T extends Date> {\n  static x: T;\n  static f(x: T) {}\n}\n\n`;\n\nexports[`typeParametersAvailableInNestedScope2.ts 1`] = `\nfunction foo<T, U>(x: T, y: U) {\n    function bar<V>(z: V) {\n        function baz<W>(a: W) {\n            var c: T;\n            var d: U;\n            var e: V;\n        }\n    }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction foo<T, U>(x: T, y: U) {\n  function bar<V>(z: V) {\n    function baz<W>(a: W) {\n      var c: T;\n      var d: U;\n      var e: V;\n    }\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/typeParameters/typeParameterLists/innerTypeParameterShadowingOuterOne.ts",
    "content": "// inner type parameters shadow outer ones of the same name\n// no errors expected\n\nfunction f<T extends Date>() {\n    function g<T extends Number>() {\n        var x: T;\n        x.toFixed();\n    }\n    var x: T;\n    x.getDate();\n}\n\nfunction f2<T extends Date, U extends Date>() {\n    function g<T extends Number, U extends Number>() {\n        var x: U;\n        x.toFixed();\n    }\n    var x: U;\n    x.getDate();\n}\n//function f2<T extends Date, U extends T>() {\n//    function g<T extends Number, U extends T>() {\n//        var x: U;\n//        x.toFixed();\n//    }\n//    var x: U;\n//    x.getDate();\n//}\n"
  },
  {
    "path": "tests/typescript/conformance/types/typeParameters/typeParameterLists/innerTypeParameterShadowingOuterOne2.ts",
    "content": "// inner type parameters shadow outer ones of the same name\n// no errors expected\n\nclass C<T extends Date> {\n    g<T extends Number>() {\n        var x: T;\n        x.toFixed();\n    }\n\n    h() {\n        var x: T;\n        x.getDate();\n    }\n}\n\nclass C2<T extends Date, U extends Date> {\n    g<T extends Number, U extends Number>() {\n        var x: U;\n        x.toFixed();\n    }\n\n    h() {\n        var x: U;\n        x.getDate();\n    }\n}\n//class C2<T extends Date, U extends T> {\n//    g<T extends Number, U extends T>() {\n//        var x: U;\n//        x.toFixed();\n//    }\n\n//    h() {\n//        var x: U;\n//        x.getDate();\n//    }\n//}\n"
  },
  {
    "path": "tests/typescript/conformance/types/typeParameters/typeParameterLists/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/typeParameters/typeParameterLists/staticMembersUsingClassTypeParameter.ts",
    "content": "// BUG 745747\nclass C<T> {\n    static x: T;\n    static f(x: T) {}\n}\n\nclass C2<T, U> {\n    static x: U;\n    static f(x: U) { }\n}\n\nclass C3<T extends Date> {\n    static x: T;\n    static f(x: T) { }\n}\n"
  },
  {
    "path": "tests/typescript/conformance/types/typeParameters/typeParameterLists/typeParametersAvailableInNestedScope2.ts",
    "content": "function foo<T, U>(x: T, y: U) {\n    function bar<V>(z: V) {\n        function baz<W>(a: W) {\n            var c: T;\n            var d: U;\n            var e: V;\n        }\n    }\n}\n"
  },
  {
    "path": "tests/typescript/conformance/types/typeReference/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`typeReference.ts 1`] = `\nlet n: Promise<number>\nlet m: Map<number, string>\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nlet n: Promise<number>;\nlet m: Map<number, string>;\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/typeReference/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/typeReference/typeReference.ts",
    "content": "let n: Promise<number>\nlet m: Map<number, string>\n"
  },
  {
    "path": "tests/typescript/conformance/types/undefined/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`undefined.ts 1`] = `\nvar x: undefined\nvar x: undefined | string\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x: undefined;\nvar x: undefined | string;\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/undefined/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/undefined/undefined.ts",
    "content": "var x: undefined\nvar x: undefined | string\n"
  },
  {
    "path": "tests/typescript/conformance/types/union/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`unionTypeCallSignatures.ts 1`] = `\n﻿var numOrDate: number | Date;\nvar strOrBoolean: string | boolean;\nvar strOrNum: string | number;\n\n// If each type in U has call signatures and the sets of call signatures are identical ignoring return types, \n// U has the same set of call signatures, but with return types that are unions of the return types of the respective call signatures from each type in U.\nvar unionOfDifferentReturnType: { (a: number): number; } | { (a: number): Date; };\nnumOrDate = unionOfDifferentReturnType(10);\nstrOrBoolean = unionOfDifferentReturnType(\"hello\"); // error \nunionOfDifferentReturnType1(true); // error in type of parameter\n\nvar unionOfDifferentReturnType1: { (a: number): number; (a: string): string; } | { (a: number): Date; (a: string): boolean; };\nnumOrDate = unionOfDifferentReturnType1(10);\nstrOrBoolean = unionOfDifferentReturnType1(\"hello\");\nunionOfDifferentReturnType1(true); // error in type of parameter\nunionOfDifferentReturnType1(); // error missing parameter\n\nvar unionOfDifferentParameterTypes: { (a: number): number; } | { (a: string): Date; };\nunionOfDifferentParameterTypes(10);// error - no call signatures\nunionOfDifferentParameterTypes(\"hello\");// error - no call signatures\nunionOfDifferentParameterTypes();// error - no call signatures\n\nvar unionOfDifferentNumberOfSignatures: { (a: number): number; } | { (a: number): Date; (a: string): boolean; };\nunionOfDifferentNumberOfSignatures(); // error - no call signatures\nunionOfDifferentNumberOfSignatures(10); // error - no call signatures\nunionOfDifferentNumberOfSignatures(\"hello\"); // error - no call signatures\n\nvar unionWithDifferentParameterCount: { (a: string): string; } | { (a: string, b: number): number; } ;\nunionWithDifferentParameterCount();// no  call signature\nunionWithDifferentParameterCount(\"hello\");// no  call signature\nunionWithDifferentParameterCount(\"hello\", 10);// no  call signature\n\nvar unionWithOptionalParameter1: { (a: string, b?: number): string; } | { (a: string, b?: number): number; };\nstrOrNum = unionWithOptionalParameter1('hello');\nstrOrNum = unionWithOptionalParameter1('hello', 10);\nstrOrNum = unionWithOptionalParameter1('hello', \"hello\"); // error in parameter type\nstrOrNum = unionWithOptionalParameter1(); // error\n\nvar unionWithOptionalParameter2: { (a: string, b?: number): string; } | { (a: string, b: number): number };\nstrOrNum = unionWithOptionalParameter2('hello'); // error no call signature\nstrOrNum = unionWithOptionalParameter2('hello', 10); // error no call signature\nstrOrNum = unionWithOptionalParameter2('hello', \"hello\"); // error no call signature\nstrOrNum = unionWithOptionalParameter2(); // error no call signature\n\nvar unionWithOptionalParameter3: { (a: string, b?: number): string; } | { (a: string): number; };\nstrOrNum = unionWithOptionalParameter3('hello');\nstrOrNum = unionWithOptionalParameter3('hello', 10); // error no call signature\nstrOrNum = unionWithOptionalParameter3('hello', \"hello\"); // error no call signature\nstrOrNum = unionWithOptionalParameter3(); // error no call signature\n\nvar unionWithRestParameter1: { (a: string, ...b: number[]): string; } | { (a: string, ...b: number[]): number };\nstrOrNum = unionWithRestParameter1('hello');\nstrOrNum = unionWithRestParameter1('hello', 10);\nstrOrNum = unionWithRestParameter1('hello', 10, 11);\nstrOrNum = unionWithRestParameter1('hello', \"hello\"); // error in parameter type\nstrOrNum = unionWithRestParameter1(); // error\n\nvar unionWithRestParameter2: { (a: string, ...b: number[]): string; } | { (a: string, b: number): number };\nstrOrNum = unionWithRestParameter2('hello'); // error no call signature\nstrOrNum = unionWithRestParameter2('hello', 10); // error no call signature\nstrOrNum = unionWithRestParameter2('hello', 10, 11); // error no call signature\nstrOrNum = unionWithRestParameter2('hello', \"hello\"); // error no call signature\nstrOrNum = unionWithRestParameter2(); // error no call signature\n\nvar unionWithRestParameter3: { (a: string, ...b: number[]): string; } | { (a: string): number };\nstrOrNum = unionWithRestParameter3('hello');\nstrOrNum = unionWithRestParameter3('hello', 10); // error no call signature\nstrOrNum = unionWithRestParameter3('hello', 10, 11); // error no call signature\nstrOrNum = unionWithRestParameter3('hello', \"hello\"); // error no call signature\nstrOrNum = unionWithRestParameter3(); // error no call signature\n\nvar unionWithRestParameter4: { (...a: string[]): string; } | { (a: string, b: string): number; };\nstrOrNum = unionWithRestParameter4(\"hello\"); // error supplied parameters do not match any call signature\nstrOrNum = unionWithRestParameter4(\"hello\", \"world\");\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar numOrDate: number | Date;\nvar strOrBoolean: string | boolean;\nvar strOrNum: string | number;\n\n// If each type in U has call signatures and the sets of call signatures are identical ignoring return types,\n// U has the same set of call signatures, but with return types that are unions of the return types of the respective call signatures from each type in U.\nvar unionOfDifferentReturnType: { (a: number): number } | { (a: number): Date };\nnumOrDate = unionOfDifferentReturnType(10);\nstrOrBoolean = unionOfDifferentReturnType(\"hello\"); // error\nunionOfDifferentReturnType1(true); // error in type of parameter\n\nvar unionOfDifferentReturnType1:\n  | { (a: number): number; (a: string): string }\n  | { (a: number): Date; (a: string): boolean };\nnumOrDate = unionOfDifferentReturnType1(10);\nstrOrBoolean = unionOfDifferentReturnType1(\"hello\");\nunionOfDifferentReturnType1(true); // error in type of parameter\nunionOfDifferentReturnType1(); // error missing parameter\n\nvar unionOfDifferentParameterTypes:\n  | { (a: number): number }\n  | { (a: string): Date };\nunionOfDifferentParameterTypes(10); // error - no call signatures\nunionOfDifferentParameterTypes(\"hello\"); // error - no call signatures\nunionOfDifferentParameterTypes(); // error - no call signatures\n\nvar unionOfDifferentNumberOfSignatures:\n  | { (a: number): number }\n  | { (a: number): Date; (a: string): boolean };\nunionOfDifferentNumberOfSignatures(); // error - no call signatures\nunionOfDifferentNumberOfSignatures(10); // error - no call signatures\nunionOfDifferentNumberOfSignatures(\"hello\"); // error - no call signatures\n\nvar unionWithDifferentParameterCount:\n  | { (a: string): string }\n  | { (a: string, b: number): number };\nunionWithDifferentParameterCount(); // no  call signature\nunionWithDifferentParameterCount(\"hello\"); // no  call signature\nunionWithDifferentParameterCount(\"hello\", 10); // no  call signature\n\nvar unionWithOptionalParameter1:\n  | { (a: string, b?: number): string }\n  | { (a: string, b?: number): number };\nstrOrNum = unionWithOptionalParameter1(\"hello\");\nstrOrNum = unionWithOptionalParameter1(\"hello\", 10);\nstrOrNum = unionWithOptionalParameter1(\"hello\", \"hello\"); // error in parameter type\nstrOrNum = unionWithOptionalParameter1(); // error\n\nvar unionWithOptionalParameter2:\n  | { (a: string, b?: number): string }\n  | { (a: string, b: number): number };\nstrOrNum = unionWithOptionalParameter2(\"hello\"); // error no call signature\nstrOrNum = unionWithOptionalParameter2(\"hello\", 10); // error no call signature\nstrOrNum = unionWithOptionalParameter2(\"hello\", \"hello\"); // error no call signature\nstrOrNum = unionWithOptionalParameter2(); // error no call signature\n\nvar unionWithOptionalParameter3:\n  | { (a: string, b?: number): string }\n  | { (a: string): number };\nstrOrNum = unionWithOptionalParameter3(\"hello\");\nstrOrNum = unionWithOptionalParameter3(\"hello\", 10); // error no call signature\nstrOrNum = unionWithOptionalParameter3(\"hello\", \"hello\"); // error no call signature\nstrOrNum = unionWithOptionalParameter3(); // error no call signature\n\nvar unionWithRestParameter1:\n  | { (a: string, ...b: number[]): string }\n  | { (a: string, ...b: number[]): number };\nstrOrNum = unionWithRestParameter1(\"hello\");\nstrOrNum = unionWithRestParameter1(\"hello\", 10);\nstrOrNum = unionWithRestParameter1(\"hello\", 10, 11);\nstrOrNum = unionWithRestParameter1(\"hello\", \"hello\"); // error in parameter type\nstrOrNum = unionWithRestParameter1(); // error\n\nvar unionWithRestParameter2:\n  | { (a: string, ...b: number[]): string }\n  | { (a: string, b: number): number };\nstrOrNum = unionWithRestParameter2(\"hello\"); // error no call signature\nstrOrNum = unionWithRestParameter2(\"hello\", 10); // error no call signature\nstrOrNum = unionWithRestParameter2(\"hello\", 10, 11); // error no call signature\nstrOrNum = unionWithRestParameter2(\"hello\", \"hello\"); // error no call signature\nstrOrNum = unionWithRestParameter2(); // error no call signature\n\nvar unionWithRestParameter3:\n  | { (a: string, ...b: number[]): string }\n  | { (a: string): number };\nstrOrNum = unionWithRestParameter3(\"hello\");\nstrOrNum = unionWithRestParameter3(\"hello\", 10); // error no call signature\nstrOrNum = unionWithRestParameter3(\"hello\", 10, 11); // error no call signature\nstrOrNum = unionWithRestParameter3(\"hello\", \"hello\"); // error no call signature\nstrOrNum = unionWithRestParameter3(); // error no call signature\n\nvar unionWithRestParameter4:\n  | { (...a: string[]): string }\n  | { (a: string, b: string): number };\nstrOrNum = unionWithRestParameter4(\"hello\"); // error supplied parameters do not match any call signature\nstrOrNum = unionWithRestParameter4(\"hello\", \"world\");\n\n`;\n\nexports[`unionTypeCallSignatures3.ts 1`] = `\n﻿function f1(s: string) { }\nfunction f2(s?: string) { }\nfunction f3(...s: string[]) { }\nfunction f4(s: string, s2?: string) { }\nfunction f5(s?: string, n?: number) { }\nfunction f6(s?: string, ...n: number[]) { }\nfunction f7(s: string, ...sRest: string[]) { }\n\nvar fUnion: typeof f1 | typeof f2 | typeof f3 | typeof f4 | typeof f5 | typeof f6 | typeof f7;\n\nfUnion(\"\"); // All constituents can be called by passing a single string.\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction f1(s: string) {}\nfunction f2(s?: string) {}\nfunction f3(...s: string[]) {}\nfunction f4(s: string, s2?: string) {}\nfunction f5(s?: string, n?: number) {}\nfunction f6(s?: string, ...n: number[]) {}\nfunction f7(s: string, ...sRest: string[]) {}\n\nvar fUnion:\n  | typeof f1\n  | typeof f2\n  | typeof f3\n  | typeof f4\n  | typeof f5\n  | typeof f6\n  | typeof f7;\n\nfUnion(\"\"); // All constituents can be called by passing a single string.\n\n`;\n\nexports[`unionTypeCallSignatures4.ts 1`] = `\n﻿type F1 = (a: string, b?: string) => void;\ntype F2 = (a: string, b?: string, c?: string) => void;\ntype F3 = (a: string, ...rest: string[]) => void;\ntype F4 = (a: string, b?: string, ...rest: string[]) => void;\ntype F5 = (a: string, b: string) => void;\n\nvar f12: F1 | F2;\nf12(\"a\");\nf12(\"a\", \"b\");\nf12(\"a\", \"b\", \"c\");  // error\n\nvar f34: F3 | F4;\nf34(\"a\");\nf34(\"a\", \"b\");\nf34(\"a\", \"b\", \"c\");\n\nvar f1234: F1 | F2 | F3 | F4;\nf1234(\"a\");\nf1234(\"a\", \"b\");\nf1234(\"a\", \"b\", \"c\");  // error\n\nvar f12345: F1 | F2 | F3 | F4 | F5;\nf12345(\"a\");  // error\nf12345(\"a\", \"b\");\nf12345(\"a\", \"b\", \"c\");  // error\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype F1 = (a: string, b?: string) => void;\ntype F2 = (a: string, b?: string, c?: string) => void;\ntype F3 = (a: string, ...rest: string[]) => void;\ntype F4 = (a: string, b?: string, ...rest: string[]) => void;\ntype F5 = (a: string, b: string) => void;\n\nvar f12: F1 | F2;\nf12(\"a\");\nf12(\"a\", \"b\");\nf12(\"a\", \"b\", \"c\"); // error\n\nvar f34: F3 | F4;\nf34(\"a\");\nf34(\"a\", \"b\");\nf34(\"a\", \"b\", \"c\");\n\nvar f1234: F1 | F2 | F3 | F4;\nf1234(\"a\");\nf1234(\"a\", \"b\");\nf1234(\"a\", \"b\", \"c\"); // error\n\nvar f12345: F1 | F2 | F3 | F4 | F5;\nf12345(\"a\"); // error\nf12345(\"a\", \"b\");\nf12345(\"a\", \"b\", \"c\"); // error\n\n`;\n\nexports[`unionTypeConstructSignatures.ts 1`] = `\n﻿var numOrDate: number | Date;\nvar strOrBoolean: string | boolean;\nvar strOrNum: string | number;\n\n// If each type in U has construct signatures and the sets of construct signatures are identical ignoring return types, \n// U has the same set of construct signatures, but with return types that are unions of the return types of the respective construct signatures from each type in U.\nvar unionOfDifferentReturnType: { new (a: number): number; } | { new (a: number): Date; };\nnumOrDate = new unionOfDifferentReturnType(10);\nstrOrBoolean = new unionOfDifferentReturnType(\"hello\"); // error \nnew unionOfDifferentReturnType1(true); // error in type of parameter\n\nvar unionOfDifferentReturnType1: { new (a: number): number; new (a: string): string; } | { new (a: number): Date; new (a: string): boolean; };\nnumOrDate = new unionOfDifferentReturnType1(10);\nstrOrBoolean = new unionOfDifferentReturnType1(\"hello\");\nnew unionOfDifferentReturnType1(true); // error in type of parameter\nnew unionOfDifferentReturnType1(); // error missing parameter\n\nvar unionOfDifferentParameterTypes: { new (a: number): number; } | { new (a: string): Date; };\nnew unionOfDifferentParameterTypes(10);// error - no call signatures\nnew unionOfDifferentParameterTypes(\"hello\");// error - no call signatures\nnew unionOfDifferentParameterTypes();// error - no call signatures\n\nvar unionOfDifferentNumberOfSignatures: { new (a: number): number; } | { new (a: number): Date; new (a: string): boolean; };\nnew unionOfDifferentNumberOfSignatures(); // error - no call signatures\nnew unionOfDifferentNumberOfSignatures(10); // error - no call signatures\nnew unionOfDifferentNumberOfSignatures(\"hello\"); // error - no call signatures\n\nvar unionWithDifferentParameterCount: { new (a: string): string; } | { new (a: string, b: number): number; };\nnew unionWithDifferentParameterCount();// no  call signature\nnew unionWithDifferentParameterCount(\"hello\");// no  call signature\nnew unionWithDifferentParameterCount(\"hello\", 10);// no  call signature\n\nvar unionWithOptionalParameter1: { new (a: string, b?: number): string; } | { new (a: string, b?: number): number; };\nstrOrNum = new unionWithOptionalParameter1('hello');\nstrOrNum = new unionWithOptionalParameter1('hello', 10);\nstrOrNum = new unionWithOptionalParameter1('hello', \"hello\"); // error in parameter type\nstrOrNum = new unionWithOptionalParameter1(); // error\n\nvar unionWithOptionalParameter2: { new (a: string, b?: number): string; } | { new (a: string, b: number): number };\nstrOrNum = new unionWithOptionalParameter2('hello'); // error no call signature\nstrOrNum = new unionWithOptionalParameter2('hello', 10); // error no call signature\nstrOrNum = new unionWithOptionalParameter2('hello', \"hello\"); // error no call signature\nstrOrNum = new unionWithOptionalParameter2(); // error no call signature\n\nvar unionWithOptionalParameter3: { new (a: string, b?: number): string; } | { new (a: string): number; };\nstrOrNum = new unionWithOptionalParameter3('hello'); // error no call signature\nstrOrNum = new unionWithOptionalParameter3('hello', 10); // error no call signature\nstrOrNum = new unionWithOptionalParameter3('hello', \"hello\"); // error no call signature\nstrOrNum = new unionWithOptionalParameter3(); // error no call signature\n\nvar unionWithRestParameter1: { new (a: string, ...b: number[]): string; } | { new (a: string, ...b: number[]): number };\nstrOrNum = new unionWithRestParameter1('hello');\nstrOrNum = new unionWithRestParameter1('hello', 10);\nstrOrNum = new unionWithRestParameter1('hello', 10, 11);\nstrOrNum = new unionWithRestParameter1('hello', \"hello\"); // error in parameter type\nstrOrNum = new unionWithRestParameter1(); // error\n\nvar unionWithRestParameter2: { new (a: string, ...b: number[]): string; } | { new (a: string, b: number): number };\nstrOrNum = new unionWithRestParameter2('hello'); // error no call signature\nstrOrNum = new unionWithRestParameter2('hello', 10); // error no call signature\nstrOrNum = new unionWithRestParameter2('hello', 10, 11); // error no call signature\nstrOrNum = new unionWithRestParameter2('hello', \"hello\"); // error no call signature\nstrOrNum = new unionWithRestParameter2(); // error no call signature\n\nvar unionWithRestParameter3: { new (a: string, ...b: number[]): string; } | { new (a: string): number };\nstrOrNum = new unionWithRestParameter3('hello'); // error no call signature\nstrOrNum = new unionWithRestParameter3('hello', 10); // error no call signature\nstrOrNum = new unionWithRestParameter3('hello', 10, 11); // error no call signature\nstrOrNum = new unionWithRestParameter3('hello', \"hello\"); // error no call signature\nstrOrNum = new unionWithRestParameter3(); // error no call signature\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar numOrDate: number | Date;\nvar strOrBoolean: string | boolean;\nvar strOrNum: string | number;\n\n// If each type in U has construct signatures and the sets of construct signatures are identical ignoring return types,\n// U has the same set of construct signatures, but with return types that are unions of the return types of the respective construct signatures from each type in U.\nvar unionOfDifferentReturnType:\n  | { new (a: number): number }\n  | { new (a: number): Date };\nnumOrDate = new unionOfDifferentReturnType(10);\nstrOrBoolean = new unionOfDifferentReturnType(\"hello\"); // error\nnew unionOfDifferentReturnType1(true); // error in type of parameter\n\nvar unionOfDifferentReturnType1:\n  | { new (a: number): number; new (a: string): string }\n  | { new (a: number): Date; new (a: string): boolean };\nnumOrDate = new unionOfDifferentReturnType1(10);\nstrOrBoolean = new unionOfDifferentReturnType1(\"hello\");\nnew unionOfDifferentReturnType1(true); // error in type of parameter\nnew unionOfDifferentReturnType1(); // error missing parameter\n\nvar unionOfDifferentParameterTypes:\n  | { new (a: number): number }\n  | { new (a: string): Date };\nnew unionOfDifferentParameterTypes(10); // error - no call signatures\nnew unionOfDifferentParameterTypes(\"hello\"); // error - no call signatures\nnew unionOfDifferentParameterTypes(); // error - no call signatures\n\nvar unionOfDifferentNumberOfSignatures:\n  | { new (a: number): number }\n  | { new (a: number): Date; new (a: string): boolean };\nnew unionOfDifferentNumberOfSignatures(); // error - no call signatures\nnew unionOfDifferentNumberOfSignatures(10); // error - no call signatures\nnew unionOfDifferentNumberOfSignatures(\"hello\"); // error - no call signatures\n\nvar unionWithDifferentParameterCount:\n  | { new (a: string): string }\n  | { new (a: string, b: number): number };\nnew unionWithDifferentParameterCount(); // no  call signature\nnew unionWithDifferentParameterCount(\"hello\"); // no  call signature\nnew unionWithDifferentParameterCount(\"hello\", 10); // no  call signature\n\nvar unionWithOptionalParameter1:\n  | { new (a: string, b?: number): string }\n  | { new (a: string, b?: number): number };\nstrOrNum = new unionWithOptionalParameter1(\"hello\");\nstrOrNum = new unionWithOptionalParameter1(\"hello\", 10);\nstrOrNum = new unionWithOptionalParameter1(\"hello\", \"hello\"); // error in parameter type\nstrOrNum = new unionWithOptionalParameter1(); // error\n\nvar unionWithOptionalParameter2:\n  | { new (a: string, b?: number): string }\n  | { new (a: string, b: number): number };\nstrOrNum = new unionWithOptionalParameter2(\"hello\"); // error no call signature\nstrOrNum = new unionWithOptionalParameter2(\"hello\", 10); // error no call signature\nstrOrNum = new unionWithOptionalParameter2(\"hello\", \"hello\"); // error no call signature\nstrOrNum = new unionWithOptionalParameter2(); // error no call signature\n\nvar unionWithOptionalParameter3:\n  | { new (a: string, b?: number): string }\n  | { new (a: string): number };\nstrOrNum = new unionWithOptionalParameter3(\"hello\"); // error no call signature\nstrOrNum = new unionWithOptionalParameter3(\"hello\", 10); // error no call signature\nstrOrNum = new unionWithOptionalParameter3(\"hello\", \"hello\"); // error no call signature\nstrOrNum = new unionWithOptionalParameter3(); // error no call signature\n\nvar unionWithRestParameter1:\n  | { new (a: string, ...b: number[]): string }\n  | { new (a: string, ...b: number[]): number };\nstrOrNum = new unionWithRestParameter1(\"hello\");\nstrOrNum = new unionWithRestParameter1(\"hello\", 10);\nstrOrNum = new unionWithRestParameter1(\"hello\", 10, 11);\nstrOrNum = new unionWithRestParameter1(\"hello\", \"hello\"); // error in parameter type\nstrOrNum = new unionWithRestParameter1(); // error\n\nvar unionWithRestParameter2:\n  | { new (a: string, ...b: number[]): string }\n  | { new (a: string, b: number): number };\nstrOrNum = new unionWithRestParameter2(\"hello\"); // error no call signature\nstrOrNum = new unionWithRestParameter2(\"hello\", 10); // error no call signature\nstrOrNum = new unionWithRestParameter2(\"hello\", 10, 11); // error no call signature\nstrOrNum = new unionWithRestParameter2(\"hello\", \"hello\"); // error no call signature\nstrOrNum = new unionWithRestParameter2(); // error no call signature\n\nvar unionWithRestParameter3:\n  | { new (a: string, ...b: number[]): string }\n  | { new (a: string): number };\nstrOrNum = new unionWithRestParameter3(\"hello\"); // error no call signature\nstrOrNum = new unionWithRestParameter3(\"hello\", 10); // error no call signature\nstrOrNum = new unionWithRestParameter3(\"hello\", 10, 11); // error no call signature\nstrOrNum = new unionWithRestParameter3(\"hello\", \"hello\"); // error no call signature\nstrOrNum = new unionWithRestParameter3(); // error no call signature\n\n`;\n\nexports[`unionTypeEquivalence.ts 1`] = `\n﻿// A | B is equivalent to A if B is a subtype of A\nclass C { }\nclass D extends C { foo() { } }\nvar x: C;\nvar x : C | D;\n\n// A | B is equivalent to B | A.\nvar y: string | number;\nvar y : number | string;\n\n// AB | C is equivalent to A | BC, where AB is A | B and BC is B | C.\nvar z : string | number | boolean;\nvar z : (string | number) | boolean;\nvar z : string | (number | boolean);\nvar AB : string | number;\nvar BC : number | boolean;\nvar z1: typeof AB | boolean;\nvar z1: string | typeof BC;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// A | B is equivalent to A if B is a subtype of A\nclass C {}\nclass D extends C {\n  foo() {}\n}\nvar x: C;\nvar x: C | D;\n\n// A | B is equivalent to B | A.\nvar y: string | number;\nvar y: number | string;\n\n// AB | C is equivalent to A | BC, where AB is A | B and BC is B | C.\nvar z: string | number | boolean;\nvar z: (string | number) | boolean;\nvar z: string | (number | boolean);\nvar AB: string | number;\nvar BC: number | boolean;\nvar z1: typeof AB | boolean;\nvar z1: string | typeof BC;\n\n`;\n\nexports[`unionTypeFromArrayLiteral.ts 1`] = `\n﻿// The resulting type an array literal expression is determined as follows:\n// If the array literal is empty, the resulting type is an array type with the element type Undefined.\n// Otherwise, if the array literal is contextually typed by a type that has a property with the numeric name ‘0’, the resulting type is a tuple type constructed from the types of the element expressions.\n// Otherwise, the resulting type is an array type with an element type that is the union of the types of the element expressions.\n\nvar arr1 = [1, 2]; // number[]\nvar arr2 = [\"hello\", true]; // (string | number)[]\nvar arr3Tuple: [number, string] = [3, \"three\"]; // [number, string]\nvar arr4Tuple: [number, string] = [3, \"three\", \"hello\"]; // [number, string, string]\nvar arrEmpty = [];\nvar arr5Tuple: {\n    0: string;\n    5: number;\n} = [\"hello\", true, false, \" hello\", true, 10, \"any\"]; // Tuple\nclass C { foo() { } }\nclass D { foo2() { } }\nclass E extends C { foo3() { } }\nclass F extends C { foo4() { } }\nvar c: C, d: D, e: E, f: F;\nvar arr6 = [c, d];  // (C | D)[]\nvar arr7 = [c, d, e]; // (C | D)[]\nvar arr8 = [c, e]; // C[]\nvar arr9 = [e, f]; // (E|F)[]\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// The resulting type an array literal expression is determined as follows:\n// If the array literal is empty, the resulting type is an array type with the element type Undefined.\n// Otherwise, if the array literal is contextually typed by a type that has a property with the numeric name ‘0’, the resulting type is a tuple type constructed from the types of the element expressions.\n// Otherwise, the resulting type is an array type with an element type that is the union of the types of the element expressions.\n\nvar arr1 = [1, 2]; // number[]\nvar arr2 = [\"hello\", true]; // (string | number)[]\nvar arr3Tuple: [number, string] = [3, \"three\"]; // [number, string]\nvar arr4Tuple: [number, string] = [3, \"three\", \"hello\"]; // [number, string, string]\nvar arrEmpty = [];\nvar arr5Tuple: {\n  0: string;\n  5: number;\n} = [\"hello\", true, false, \" hello\", true, 10, \"any\"]; // Tuple\nclass C {\n  foo() {}\n}\nclass D {\n  foo2() {}\n}\nclass E extends C {\n  foo3() {}\n}\nclass F extends C {\n  foo4() {}\n}\nvar c: C, d: D, e: E, f: F;\nvar arr6 = [c, d]; // (C | D)[]\nvar arr7 = [c, d, e]; // (C | D)[]\nvar arr8 = [c, e]; // C[]\nvar arr9 = [e, f]; // (E|F)[]\n\n`;\n\nexports[`unionTypeIndexSignature.ts 1`] = `\n﻿var numOrDate: number | Date;\nvar anyVar: number;\n\n// If each type in U has a string index signature, \n// U has a string index signature of a union type of the types of the string index signatures from each type in U.\n\nvar unionOfDifferentReturnType: { [a: string]: number; } | { [a: string]: Date; };\nnumOrDate = unionOfDifferentReturnType[\"hello\"]; // number | Date\nnumOrDate = unionOfDifferentReturnType[10]; // number | Date\n\nvar unionOfTypesWithAndWithoutStringSignature: { [a: string]: number; } | boolean;\nanyVar = unionOfTypesWithAndWithoutStringSignature[\"hello\"]; // any\nanyVar = unionOfTypesWithAndWithoutStringSignature[10]; // any\n\n// If each type in U has a numeric index signature, \n// U has a numeric index signature of a union type of the types of the numeric index signatures from each type in U.\nvar unionOfDifferentReturnType1: { [a: number]: number; } | { [a: number]: Date; };\nnumOrDate = unionOfDifferentReturnType1[\"hello\"]; // any\nnumOrDate = unionOfDifferentReturnType1[10]; // number | Date\n\nvar unionOfTypesWithAndWithoutStringSignature1: { [a: number]: number; } | boolean;\nanyVar = unionOfTypesWithAndWithoutStringSignature1[\"hello\"]; // any\nanyVar = unionOfTypesWithAndWithoutStringSignature1[10]; // any\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar numOrDate: number | Date;\nvar anyVar: number;\n\n// If each type in U has a string index signature,\n// U has a string index signature of a union type of the types of the string index signatures from each type in U.\n\nvar unionOfDifferentReturnType: { [a: string]: number } | { [a: string]: Date };\nnumOrDate = unionOfDifferentReturnType[\"hello\"]; // number | Date\nnumOrDate = unionOfDifferentReturnType[10]; // number | Date\n\nvar unionOfTypesWithAndWithoutStringSignature:\n  | { [a: string]: number }\n  | boolean;\nanyVar = unionOfTypesWithAndWithoutStringSignature[\"hello\"]; // any\nanyVar = unionOfTypesWithAndWithoutStringSignature[10]; // any\n\n// If each type in U has a numeric index signature,\n// U has a numeric index signature of a union type of the types of the numeric index signatures from each type in U.\nvar unionOfDifferentReturnType1:\n  | { [a: number]: number }\n  | { [a: number]: Date };\nnumOrDate = unionOfDifferentReturnType1[\"hello\"]; // any\nnumOrDate = unionOfDifferentReturnType1[10]; // number | Date\n\nvar unionOfTypesWithAndWithoutStringSignature1:\n  | { [a: number]: number }\n  | boolean;\nanyVar = unionOfTypesWithAndWithoutStringSignature1[\"hello\"]; // any\nanyVar = unionOfTypesWithAndWithoutStringSignature1[10]; // any\n\n`;\n\nexports[`unionTypePropertyAccessibility.ts 1`] = `\nclass Default {\n    member: string;\n}\n\nclass Public {\n    public member: string;\n}\n\nclass Protected {\n    protected member: string;\n}\n\nclass Private {\n    private member: number;\n}\n\nvar v1: Default;\nvar v2: Public;\nvar v3: Protected;\nvar v4: Private;\nvar v5: Default | Public;\nvar v6: Default | Protected;\nvar v7: Default | Private;\nvar v8: Public | Protected;\nvar v9: Public | Private;\nvar v10: Protected | Private;\nvar v11: Default | Public | Protected;\nvar v12: Default | Public | Private;\nvar v13: Default | Protected | Private;\nvar v14: Public | Private | Protected;\nvar v15: Default | Public | Private | Protected;\n\nv1.member;\nv2.member;\nv3.member;\nv4.member;\nv5.member;\nv6.member;\nv7.member;\nv8.member;\nv9.member;\nv10.member;\nv11.member;\nv12.member;\nv13.member;\nv14.member;\nv15.member;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass Default {\n  member: string;\n}\n\nclass Public {\n  public member: string;\n}\n\nclass Protected {\n  protected member: string;\n}\n\nclass Private {\n  private member: number;\n}\n\nvar v1: Default;\nvar v2: Public;\nvar v3: Protected;\nvar v4: Private;\nvar v5: Default | Public;\nvar v6: Default | Protected;\nvar v7: Default | Private;\nvar v8: Public | Protected;\nvar v9: Public | Private;\nvar v10: Protected | Private;\nvar v11: Default | Public | Protected;\nvar v12: Default | Public | Private;\nvar v13: Default | Protected | Private;\nvar v14: Public | Private | Protected;\nvar v15: Default | Public | Private | Protected;\n\nv1.member;\nv2.member;\nv3.member;\nv4.member;\nv5.member;\nv6.member;\nv7.member;\nv8.member;\nv9.member;\nv10.member;\nv11.member;\nv12.member;\nv13.member;\nv14.member;\nv15.member;\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/union/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/union/unionTypeCallSignatures.ts",
    "content": "﻿var numOrDate: number | Date;\nvar strOrBoolean: string | boolean;\nvar strOrNum: string | number;\n\n// If each type in U has call signatures and the sets of call signatures are identical ignoring return types, \n// U has the same set of call signatures, but with return types that are unions of the return types of the respective call signatures from each type in U.\nvar unionOfDifferentReturnType: { (a: number): number; } | { (a: number): Date; };\nnumOrDate = unionOfDifferentReturnType(10);\nstrOrBoolean = unionOfDifferentReturnType(\"hello\"); // error \nunionOfDifferentReturnType1(true); // error in type of parameter\n\nvar unionOfDifferentReturnType1: { (a: number): number; (a: string): string; } | { (a: number): Date; (a: string): boolean; };\nnumOrDate = unionOfDifferentReturnType1(10);\nstrOrBoolean = unionOfDifferentReturnType1(\"hello\");\nunionOfDifferentReturnType1(true); // error in type of parameter\nunionOfDifferentReturnType1(); // error missing parameter\n\nvar unionOfDifferentParameterTypes: { (a: number): number; } | { (a: string): Date; };\nunionOfDifferentParameterTypes(10);// error - no call signatures\nunionOfDifferentParameterTypes(\"hello\");// error - no call signatures\nunionOfDifferentParameterTypes();// error - no call signatures\n\nvar unionOfDifferentNumberOfSignatures: { (a: number): number; } | { (a: number): Date; (a: string): boolean; };\nunionOfDifferentNumberOfSignatures(); // error - no call signatures\nunionOfDifferentNumberOfSignatures(10); // error - no call signatures\nunionOfDifferentNumberOfSignatures(\"hello\"); // error - no call signatures\n\nvar unionWithDifferentParameterCount: { (a: string): string; } | { (a: string, b: number): number; } ;\nunionWithDifferentParameterCount();// no  call signature\nunionWithDifferentParameterCount(\"hello\");// no  call signature\nunionWithDifferentParameterCount(\"hello\", 10);// no  call signature\n\nvar unionWithOptionalParameter1: { (a: string, b?: number): string; } | { (a: string, b?: number): number; };\nstrOrNum = unionWithOptionalParameter1('hello');\nstrOrNum = unionWithOptionalParameter1('hello', 10);\nstrOrNum = unionWithOptionalParameter1('hello', \"hello\"); // error in parameter type\nstrOrNum = unionWithOptionalParameter1(); // error\n\nvar unionWithOptionalParameter2: { (a: string, b?: number): string; } | { (a: string, b: number): number };\nstrOrNum = unionWithOptionalParameter2('hello'); // error no call signature\nstrOrNum = unionWithOptionalParameter2('hello', 10); // error no call signature\nstrOrNum = unionWithOptionalParameter2('hello', \"hello\"); // error no call signature\nstrOrNum = unionWithOptionalParameter2(); // error no call signature\n\nvar unionWithOptionalParameter3: { (a: string, b?: number): string; } | { (a: string): number; };\nstrOrNum = unionWithOptionalParameter3('hello');\nstrOrNum = unionWithOptionalParameter3('hello', 10); // error no call signature\nstrOrNum = unionWithOptionalParameter3('hello', \"hello\"); // error no call signature\nstrOrNum = unionWithOptionalParameter3(); // error no call signature\n\nvar unionWithRestParameter1: { (a: string, ...b: number[]): string; } | { (a: string, ...b: number[]): number };\nstrOrNum = unionWithRestParameter1('hello');\nstrOrNum = unionWithRestParameter1('hello', 10);\nstrOrNum = unionWithRestParameter1('hello', 10, 11);\nstrOrNum = unionWithRestParameter1('hello', \"hello\"); // error in parameter type\nstrOrNum = unionWithRestParameter1(); // error\n\nvar unionWithRestParameter2: { (a: string, ...b: number[]): string; } | { (a: string, b: number): number };\nstrOrNum = unionWithRestParameter2('hello'); // error no call signature\nstrOrNum = unionWithRestParameter2('hello', 10); // error no call signature\nstrOrNum = unionWithRestParameter2('hello', 10, 11); // error no call signature\nstrOrNum = unionWithRestParameter2('hello', \"hello\"); // error no call signature\nstrOrNum = unionWithRestParameter2(); // error no call signature\n\nvar unionWithRestParameter3: { (a: string, ...b: number[]): string; } | { (a: string): number };\nstrOrNum = unionWithRestParameter3('hello');\nstrOrNum = unionWithRestParameter3('hello', 10); // error no call signature\nstrOrNum = unionWithRestParameter3('hello', 10, 11); // error no call signature\nstrOrNum = unionWithRestParameter3('hello', \"hello\"); // error no call signature\nstrOrNum = unionWithRestParameter3(); // error no call signature\n\nvar unionWithRestParameter4: { (...a: string[]): string; } | { (a: string, b: string): number; };\nstrOrNum = unionWithRestParameter4(\"hello\"); // error supplied parameters do not match any call signature\nstrOrNum = unionWithRestParameter4(\"hello\", \"world\");\n"
  },
  {
    "path": "tests/typescript/conformance/types/union/unionTypeCallSignatures3.ts",
    "content": "﻿function f1(s: string) { }\nfunction f2(s?: string) { }\nfunction f3(...s: string[]) { }\nfunction f4(s: string, s2?: string) { }\nfunction f5(s?: string, n?: number) { }\nfunction f6(s?: string, ...n: number[]) { }\nfunction f7(s: string, ...sRest: string[]) { }\n\nvar fUnion: typeof f1 | typeof f2 | typeof f3 | typeof f4 | typeof f5 | typeof f6 | typeof f7;\n\nfUnion(\"\"); // All constituents can be called by passing a single string.\n"
  },
  {
    "path": "tests/typescript/conformance/types/union/unionTypeCallSignatures4.ts",
    "content": "﻿type F1 = (a: string, b?: string) => void;\ntype F2 = (a: string, b?: string, c?: string) => void;\ntype F3 = (a: string, ...rest: string[]) => void;\ntype F4 = (a: string, b?: string, ...rest: string[]) => void;\ntype F5 = (a: string, b: string) => void;\n\nvar f12: F1 | F2;\nf12(\"a\");\nf12(\"a\", \"b\");\nf12(\"a\", \"b\", \"c\");  // error\n\nvar f34: F3 | F4;\nf34(\"a\");\nf34(\"a\", \"b\");\nf34(\"a\", \"b\", \"c\");\n\nvar f1234: F1 | F2 | F3 | F4;\nf1234(\"a\");\nf1234(\"a\", \"b\");\nf1234(\"a\", \"b\", \"c\");  // error\n\nvar f12345: F1 | F2 | F3 | F4 | F5;\nf12345(\"a\");  // error\nf12345(\"a\", \"b\");\nf12345(\"a\", \"b\", \"c\");  // error\n"
  },
  {
    "path": "tests/typescript/conformance/types/union/unionTypeConstructSignatures.ts",
    "content": "﻿var numOrDate: number | Date;\nvar strOrBoolean: string | boolean;\nvar strOrNum: string | number;\n\n// If each type in U has construct signatures and the sets of construct signatures are identical ignoring return types, \n// U has the same set of construct signatures, but with return types that are unions of the return types of the respective construct signatures from each type in U.\nvar unionOfDifferentReturnType: { new (a: number): number; } | { new (a: number): Date; };\nnumOrDate = new unionOfDifferentReturnType(10);\nstrOrBoolean = new unionOfDifferentReturnType(\"hello\"); // error \nnew unionOfDifferentReturnType1(true); // error in type of parameter\n\nvar unionOfDifferentReturnType1: { new (a: number): number; new (a: string): string; } | { new (a: number): Date; new (a: string): boolean; };\nnumOrDate = new unionOfDifferentReturnType1(10);\nstrOrBoolean = new unionOfDifferentReturnType1(\"hello\");\nnew unionOfDifferentReturnType1(true); // error in type of parameter\nnew unionOfDifferentReturnType1(); // error missing parameter\n\nvar unionOfDifferentParameterTypes: { new (a: number): number; } | { new (a: string): Date; };\nnew unionOfDifferentParameterTypes(10);// error - no call signatures\nnew unionOfDifferentParameterTypes(\"hello\");// error - no call signatures\nnew unionOfDifferentParameterTypes();// error - no call signatures\n\nvar unionOfDifferentNumberOfSignatures: { new (a: number): number; } | { new (a: number): Date; new (a: string): boolean; };\nnew unionOfDifferentNumberOfSignatures(); // error - no call signatures\nnew unionOfDifferentNumberOfSignatures(10); // error - no call signatures\nnew unionOfDifferentNumberOfSignatures(\"hello\"); // error - no call signatures\n\nvar unionWithDifferentParameterCount: { new (a: string): string; } | { new (a: string, b: number): number; };\nnew unionWithDifferentParameterCount();// no  call signature\nnew unionWithDifferentParameterCount(\"hello\");// no  call signature\nnew unionWithDifferentParameterCount(\"hello\", 10);// no  call signature\n\nvar unionWithOptionalParameter1: { new (a: string, b?: number): string; } | { new (a: string, b?: number): number; };\nstrOrNum = new unionWithOptionalParameter1('hello');\nstrOrNum = new unionWithOptionalParameter1('hello', 10);\nstrOrNum = new unionWithOptionalParameter1('hello', \"hello\"); // error in parameter type\nstrOrNum = new unionWithOptionalParameter1(); // error\n\nvar unionWithOptionalParameter2: { new (a: string, b?: number): string; } | { new (a: string, b: number): number };\nstrOrNum = new unionWithOptionalParameter2('hello'); // error no call signature\nstrOrNum = new unionWithOptionalParameter2('hello', 10); // error no call signature\nstrOrNum = new unionWithOptionalParameter2('hello', \"hello\"); // error no call signature\nstrOrNum = new unionWithOptionalParameter2(); // error no call signature\n\nvar unionWithOptionalParameter3: { new (a: string, b?: number): string; } | { new (a: string): number; };\nstrOrNum = new unionWithOptionalParameter3('hello'); // error no call signature\nstrOrNum = new unionWithOptionalParameter3('hello', 10); // error no call signature\nstrOrNum = new unionWithOptionalParameter3('hello', \"hello\"); // error no call signature\nstrOrNum = new unionWithOptionalParameter3(); // error no call signature\n\nvar unionWithRestParameter1: { new (a: string, ...b: number[]): string; } | { new (a: string, ...b: number[]): number };\nstrOrNum = new unionWithRestParameter1('hello');\nstrOrNum = new unionWithRestParameter1('hello', 10);\nstrOrNum = new unionWithRestParameter1('hello', 10, 11);\nstrOrNum = new unionWithRestParameter1('hello', \"hello\"); // error in parameter type\nstrOrNum = new unionWithRestParameter1(); // error\n\nvar unionWithRestParameter2: { new (a: string, ...b: number[]): string; } | { new (a: string, b: number): number };\nstrOrNum = new unionWithRestParameter2('hello'); // error no call signature\nstrOrNum = new unionWithRestParameter2('hello', 10); // error no call signature\nstrOrNum = new unionWithRestParameter2('hello', 10, 11); // error no call signature\nstrOrNum = new unionWithRestParameter2('hello', \"hello\"); // error no call signature\nstrOrNum = new unionWithRestParameter2(); // error no call signature\n\nvar unionWithRestParameter3: { new (a: string, ...b: number[]): string; } | { new (a: string): number };\nstrOrNum = new unionWithRestParameter3('hello'); // error no call signature\nstrOrNum = new unionWithRestParameter3('hello', 10); // error no call signature\nstrOrNum = new unionWithRestParameter3('hello', 10, 11); // error no call signature\nstrOrNum = new unionWithRestParameter3('hello', \"hello\"); // error no call signature\nstrOrNum = new unionWithRestParameter3(); // error no call signature\n"
  },
  {
    "path": "tests/typescript/conformance/types/union/unionTypeEquivalence.ts",
    "content": "﻿// A | B is equivalent to A if B is a subtype of A\nclass C { }\nclass D extends C { foo() { } }\nvar x: C;\nvar x : C | D;\n\n// A | B is equivalent to B | A.\nvar y: string | number;\nvar y : number | string;\n\n// AB | C is equivalent to A | BC, where AB is A | B and BC is B | C.\nvar z : string | number | boolean;\nvar z : (string | number) | boolean;\nvar z : string | (number | boolean);\nvar AB : string | number;\nvar BC : number | boolean;\nvar z1: typeof AB | boolean;\nvar z1: string | typeof BC;\n"
  },
  {
    "path": "tests/typescript/conformance/types/union/unionTypeFromArrayLiteral.ts",
    "content": "﻿// The resulting type an array literal expression is determined as follows:\n// If the array literal is empty, the resulting type is an array type with the element type Undefined.\n// Otherwise, if the array literal is contextually typed by a type that has a property with the numeric name ‘0’, the resulting type is a tuple type constructed from the types of the element expressions.\n// Otherwise, the resulting type is an array type with an element type that is the union of the types of the element expressions.\n\nvar arr1 = [1, 2]; // number[]\nvar arr2 = [\"hello\", true]; // (string | number)[]\nvar arr3Tuple: [number, string] = [3, \"three\"]; // [number, string]\nvar arr4Tuple: [number, string] = [3, \"three\", \"hello\"]; // [number, string, string]\nvar arrEmpty = [];\nvar arr5Tuple: {\n    0: string;\n    5: number;\n} = [\"hello\", true, false, \" hello\", true, 10, \"any\"]; // Tuple\nclass C { foo() { } }\nclass D { foo2() { } }\nclass E extends C { foo3() { } }\nclass F extends C { foo4() { } }\nvar c: C, d: D, e: E, f: F;\nvar arr6 = [c, d];  // (C | D)[]\nvar arr7 = [c, d, e]; // (C | D)[]\nvar arr8 = [c, e]; // C[]\nvar arr9 = [e, f]; // (E|F)[]\n"
  },
  {
    "path": "tests/typescript/conformance/types/union/unionTypeIndexSignature.ts",
    "content": "﻿var numOrDate: number | Date;\nvar anyVar: number;\n\n// If each type in U has a string index signature, \n// U has a string index signature of a union type of the types of the string index signatures from each type in U.\n\nvar unionOfDifferentReturnType: { [a: string]: number; } | { [a: string]: Date; };\nnumOrDate = unionOfDifferentReturnType[\"hello\"]; // number | Date\nnumOrDate = unionOfDifferentReturnType[10]; // number | Date\n\nvar unionOfTypesWithAndWithoutStringSignature: { [a: string]: number; } | boolean;\nanyVar = unionOfTypesWithAndWithoutStringSignature[\"hello\"]; // any\nanyVar = unionOfTypesWithAndWithoutStringSignature[10]; // any\n\n// If each type in U has a numeric index signature, \n// U has a numeric index signature of a union type of the types of the numeric index signatures from each type in U.\nvar unionOfDifferentReturnType1: { [a: number]: number; } | { [a: number]: Date; };\nnumOrDate = unionOfDifferentReturnType1[\"hello\"]; // any\nnumOrDate = unionOfDifferentReturnType1[10]; // number | Date\n\nvar unionOfTypesWithAndWithoutStringSignature1: { [a: number]: number; } | boolean;\nanyVar = unionOfTypesWithAndWithoutStringSignature1[\"hello\"]; // any\nanyVar = unionOfTypesWithAndWithoutStringSignature1[10]; // any\n"
  },
  {
    "path": "tests/typescript/conformance/types/union/unionTypePropertyAccessibility.ts",
    "content": "class Default {\n    member: string;\n}\n\nclass Public {\n    public member: string;\n}\n\nclass Protected {\n    protected member: string;\n}\n\nclass Private {\n    private member: number;\n}\n\nvar v1: Default;\nvar v2: Public;\nvar v3: Protected;\nvar v4: Private;\nvar v5: Default | Public;\nvar v6: Default | Protected;\nvar v7: Default | Private;\nvar v8: Public | Protected;\nvar v9: Public | Private;\nvar v10: Protected | Private;\nvar v11: Default | Public | Protected;\nvar v12: Default | Public | Private;\nvar v13: Default | Protected | Private;\nvar v14: Public | Private | Protected;\nvar v15: Default | Public | Private | Protected;\n\nv1.member;\nv2.member;\nv3.member;\nv4.member;\nv5.member;\nv6.member;\nv7.member;\nv8.member;\nv9.member;\nv10.member;\nv11.member;\nv12.member;\nv13.member;\nv14.member;\nv15.member;\n"
  },
  {
    "path": "tests/typescript/conformance/types/variableDeclarator/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`variableDeclarator.ts 1`] = `\ntype MyMap<T, P> = Map<T, P>;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype MyMap<T, P> = Map<T, P>;\n\n`;\n"
  },
  {
    "path": "tests/typescript/conformance/types/variableDeclarator/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/conformance/types/variableDeclarator/variableDeclarator.ts",
    "content": "type MyMap<T, P> = Map<T, P>;\n"
  },
  {
    "path": "tests/typescript/custom/abstract/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`abstractNewlineHandling.ts 1`] = `\nvar\nabstract\nclass X {}\n\nconst\nabstract\nclass Y {}\n\nexport let\nabstract\nclass Y {}\n\nlet\nabstract\nexport class Y {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar abstract;\nclass X {}\n\nconst abstract;\nclass Y {}\n\nexport let abstract;\nclass Y {}\n\nlet abstract;\nexport class Y {}\n\n`;\n\nexports[`abstractProperties.ts 1`] = `\nabstract class Foo {\n    abstract private a: 1;\n    private abstract b: 2;\n    static abstract c: 3;\n\n    abstract private d = 4;\n    private abstract e = 5;\n    static abstract f = 6;\n\n    abstract private ['g'] = 4;\n    private abstract ['h'] = 5;\n    static abstract ['i'] = 6;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nabstract class Foo {\n  private abstract a: 1;\n  private abstract b: 2;\n  static abstract c: 3;\n\n  private abstract d = 4;\n  private abstract e = 5;\n  static abstract f = 6;\n\n  private abstract [\"g\"] = 4;\n  private abstract [\"h\"] = 5;\n  static abstract [\"i\"] = 6;\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript/custom/abstract/abstractNewlineHandling.ts",
    "content": "var\nabstract\nclass X {}\n\nconst\nabstract\nclass Y {}\n\nexport let\nabstract\nclass Y {}\n\nlet\nabstract\nexport class Y {}\n"
  },
  {
    "path": "tests/typescript/custom/abstract/abstractProperties.ts",
    "content": "abstract class Foo {\n    abstract private a: 1;\n    private abstract b: 2;\n    static abstract c: 3;\n\n    abstract private d = 4;\n    private abstract e = 5;\n    static abstract f = 6;\n\n    abstract private ['g'] = 4;\n    private abstract ['h'] = 5;\n    static abstract ['i'] = 6;\n}\n"
  },
  {
    "path": "tests/typescript/custom/abstract/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/custom/call/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`callSignature.ts 1`] = `\ninterface I {\n    ();\n    (): void;\n    <T, U>(arg: T);\n    <T, U>(arg: T): U;\n}\n\nPromise.all<void>([]);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface I {\n  ();\n  (): void;\n  <T, U>(arg: T);\n  <T, U>(arg: T): U;\n}\n\nPromise.all<void>([]);\n\n`;\n"
  },
  {
    "path": "tests/typescript/custom/call/callSignature.ts",
    "content": "interface I {\n    ();\n    (): void;\n    <T, U>(arg: T);\n    <T, U>(arg: T): U;\n}\n\nPromise.all<void>([]);\n"
  },
  {
    "path": "tests/typescript/custom/call/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/custom/computedProperties/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`string.ts 1`] = `\ninterface I {\n    \"string\": \"I\";\n}\n\ntype T = {\n    \"string\": \"T\";\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface I {\n  \"string\": \"I\";\n}\n\ntype T = {\n  \"string\": \"T\";\n};\n\n`;\n\nexports[`symbol.ts 1`] = `\ninterface I {\n    [Symbol.toStringTag]: \"I\";\n}\n\ntype T = {\n    [Symbol.toStringTag]: \"T\";\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface I {\n  [Symbol.toStringTag]: \"I\";\n}\n\ntype T = {\n  [Symbol.toStringTag]: \"T\";\n};\n\n`;\n"
  },
  {
    "path": "tests/typescript/custom/computedProperties/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/custom/computedProperties/string.ts",
    "content": "interface I {\n    \"string\": \"I\";\n}\n\ntype T = {\n    \"string\": \"T\";\n}\n"
  },
  {
    "path": "tests/typescript/custom/computedProperties/symbol.ts",
    "content": "interface I {\n    [Symbol.toStringTag]: \"I\";\n}\n\ntype T = {\n    [Symbol.toStringTag]: \"T\";\n}\n"
  },
  {
    "path": "tests/typescript/custom/declare/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`declareModifier.d.ts 1`] = `\n\ndeclare function a();\n\ndeclare const b: string;\n\ndeclare var c: number;\n\ndeclare let d: any;\n\ndeclare class e {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare function a()\n\ndeclare const b: string;\n\ndeclare var c: number;\n\ndeclare let d: any;\n\ndeclare class e {}\n\n`;\n"
  },
  {
    "path": "tests/typescript/custom/declare/declareModifier.d.ts",
    "content": "\ndeclare function a();\n\ndeclare const b: string;\n\ndeclare var c: number;\n\ndeclare let d: any;\n\ndeclare class e {}\n"
  },
  {
    "path": "tests/typescript/custom/declare/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/custom/modifiers/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`question.ts 1`] = `\nvar x: {\n    [A in keyof B]?: any;\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x: { [A in keyof B]?: any };\n\n`;\n\nexports[`readonly.ts 1`] = `\nvar x: {\n    readonly [A in keyof B]: any;\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x: { readonly [A in keyof B]: any };\n\n`;\n"
  },
  {
    "path": "tests/typescript/custom/modifiers/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/custom/modifiers/question.ts",
    "content": "var x: {\n    [A in keyof B]?: any;\n};\n"
  },
  {
    "path": "tests/typescript/custom/modifiers/readonly.ts",
    "content": "var x: {\n    readonly [A in keyof B]: any;\n};\n"
  },
  {
    "path": "tests/typescript/custom/module/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`global.ts 1`] = `\ndeclare global {\n    interface Event {\n\t    persist: Function\n  \t}\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare global {\n  interface Event {\n    persist: Function;\n  }\n}\n\n`;\n\nexports[`moduleNamespace.ts 1`] = `\ndeclare module \"f\" {}\n\nnamespace f {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare module \"f\" {\n\n}\n\nnamespace f {\n\n}\n\n`;\n\nexports[`nestedNamespace.ts 1`] = `\nnamespace X {\n    export namespace Y {\n\n    }\n}\n\nnamespace X.Y {\n\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nnamespace X {\n  export namespace Y {  }\n}\n\nnamespace X.Y {\n\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript/custom/module/global.ts",
    "content": "declare global {\n    interface Event {\n\t    persist: Function\n  \t}\n}\n"
  },
  {
    "path": "tests/typescript/custom/module/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/custom/module/moduleNamespace.ts",
    "content": "declare module \"f\" {}\n\nnamespace f {}\n"
  },
  {
    "path": "tests/typescript/custom/module/nestedNamespace.ts",
    "content": "namespace X {\n    export namespace Y {\n\n    }\n}\n\nnamespace X.Y {\n\n}\n"
  },
  {
    "path": "tests/typescript/custom/new/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`newKeyword.ts 1`] = `\nvar x: { y: new <T, U> () => [T, U] };\n\ninterface I {\n    new <T>(x: string);\n    new (x: string);\n    new (x: number): number;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar x: { y: new <T, U>() => [T, U] };\n\ninterface I {\n  new <T>(x: string);\n  new (x: string);\n  new (x: number): number;\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript/custom/new/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/custom/new/newKeyword.ts",
    "content": "var x: { y: new <T, U> () => [T, U] };\n\ninterface I {\n    new <T>(x: string);\n    new (x: string);\n    new (x: number): number;\n}\n"
  },
  {
    "path": "tests/typescript/custom/stability/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`moduleBlock.ts 1`] = `\nmodule m2 {\n    function fn() {\n        return 1;\n    }\n    export function exports() {\n        return 1;\n    }\n    export function require() {\n        return \"require\";\n    }\n}\n\nmodule m2 {\n\n    export function exports() {\n        return 1;\n    }\n\n    export function require() {\n        return \"require\";\n    }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nnamespace m2 {\n  function fn() {\n    return 1;\n  }\n  export function exports() {\n    return 1;\n  }\n  export function require() {\n    return \"require\";\n  }\n}\n\nnamespace m2 {\n  export function exports() {\n    return 1;\n  }\n\n  export function require() {\n    return \"require\";\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript/custom/stability/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/custom/stability/moduleBlock.ts",
    "content": "module m2 {\n    function fn() {\n        return 1;\n    }\n    export function exports() {\n        return 1;\n    }\n    export function require() {\n        return \"require\";\n    }\n}\n\nmodule m2 {\n\n    export function exports() {\n        return 1;\n    }\n\n    export function require() {\n        return \"require\";\n    }\n}\n"
  },
  {
    "path": "tests/typescript/custom/typeParameters/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`callAndConstructSignatureLong.ts 1`] = `\ninterface Interface {\n    <\n        Voila, \n        InViewHumbleVaudevillianVeteran, \n        CastVicariouslyAsBothVictimAndVillainByTheVicissitudesOfFate\n    >(): V;\n    new <\n        ThisVisage, \n        NoMereVeneerOfVanity, \n        IsAVestigeOfTheVoxPopuliNowVacant, \n        Vanished\n    >(): V;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface Interface {\n  <\n    Voila,\n    InViewHumbleVaudevillianVeteran,\n    CastVicariouslyAsBothVictimAndVillainByTheVicissitudesOfFate\n  >(): V;\n  new <\n    ThisVisage,\n    NoMereVeneerOfVanity,\n    IsAVestigeOfTheVoxPopuliNowVacant,\n    Vanished\n  >(): V;\n}\n\n`;\n\nexports[`functionTypeLong.ts 1`] = `\ntype AwkwardlyLongFunctionTypeDefinition = <\n    GenericTypeNumberOne,\n    GenericTypeNumberTwo,\n    GenericTypeNumberThree\n>(\n    arg1: GenericTypeNumberOne,\n    arg2: GenericTypeNumberTwo,\n    arg3: GenericTypeNumberThree\n) => (GenericTypeNumberOne | GenericTypeNumberTwo | GenericTypeNumberThree);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype AwkwardlyLongFunctionTypeDefinition = <\n  GenericTypeNumberOne,\n  GenericTypeNumberTwo,\n  GenericTypeNumberThree\n>(\n  arg1: GenericTypeNumberOne,\n  arg2: GenericTypeNumberTwo,\n  arg3: GenericTypeNumberThree\n) => GenericTypeNumberOne | GenericTypeNumberTwo | GenericTypeNumberThree;\n\n`;\n\nexports[`interfaceParamsLong.ts 1`] = `\ninterface ReallyReallyLongName<\n    TypeArgumentNumberOne, \n    TypeArgumentNumberTwo,\n    TypeArgumentNumberThree\n> {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface ReallyReallyLongName<\n  TypeArgumentNumberOne,\n  TypeArgumentNumberTwo,\n  TypeArgumentNumberThree\n> {}\n\n`;\n\nexports[`typeParametersLong.ts 1`] = `\ntype ReallyReallyReallyLongName<\n    ReallyReallyReallyLongName1, ReallyReallyReallyLongName2\n> = any;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype ReallyReallyReallyLongName<\n  ReallyReallyReallyLongName1,\n  ReallyReallyReallyLongName2\n> = any;\n\n`;\n"
  },
  {
    "path": "tests/typescript/custom/typeParameters/callAndConstructSignatureLong.ts",
    "content": "interface Interface {\n    <\n        Voila, \n        InViewHumbleVaudevillianVeteran, \n        CastVicariouslyAsBothVictimAndVillainByTheVicissitudesOfFate\n    >(): V;\n    new <\n        ThisVisage, \n        NoMereVeneerOfVanity, \n        IsAVestigeOfTheVoxPopuliNowVacant, \n        Vanished\n    >(): V;\n}\n"
  },
  {
    "path": "tests/typescript/custom/typeParameters/functionTypeLong.ts",
    "content": "type AwkwardlyLongFunctionTypeDefinition = <\n    GenericTypeNumberOne,\n    GenericTypeNumberTwo,\n    GenericTypeNumberThree\n>(\n    arg1: GenericTypeNumberOne,\n    arg2: GenericTypeNumberTwo,\n    arg3: GenericTypeNumberThree\n) => (GenericTypeNumberOne | GenericTypeNumberTwo | GenericTypeNumberThree);\n"
  },
  {
    "path": "tests/typescript/custom/typeParameters/interfaceParamsLong.ts",
    "content": "interface ReallyReallyLongName<\n    TypeArgumentNumberOne, \n    TypeArgumentNumberTwo,\n    TypeArgumentNumberThree\n> {}\n"
  },
  {
    "path": "tests/typescript/custom/typeParameters/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/custom/typeParameters/typeParametersLong.ts",
    "content": "type ReallyReallyReallyLongName<\n    ReallyReallyReallyLongName1, ReallyReallyReallyLongName2\n> = any;\n"
  },
  {
    "path": "tests/typescript/webhost/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`webtsc.ts 1`] = `\n/// <reference path='..\\\\..\\\\src\\\\compiler\\\\tsc.ts'/>\n\nnamespace TypeScript.WebTsc {\n\n    declare var RealActiveXObject: { new (s: string): any };\n\n    function getWScriptSystem() {\n        const fso = new RealActiveXObject(\"Scripting.FileSystemObject\");\n\n        const fileStream = new ActiveXObject(\"ADODB.Stream\");\n        fileStream.Type = 2 /*text*/;\n\n        const args: string[] = [];\n        for (let i = 0; i < WScript.Arguments.length; i++) {\n            args[i] = WScript.Arguments.Item(i);\n        }\n        return {\n            args: args,\n            newLine: \"\\\\r\\\\n\",\n            write(s: string): void {\n                WScript.StdOut.Write(s);\n            },\n            writeErr(s: string): void {\n                WScript.StdErr.Write(s);\n            },\n            readFile(fileName: string, encoding?: string): string {\n                if (!fso.FileExists(fileName)) {\n                    return undefined;\n                }\n                fileStream.Open();\n                try {\n                    if (encoding) {\n                        fileStream.Charset = encoding;\n                        fileStream.LoadFromFile(fileName);\n                    }\n                    else {\n                        // Load file and read the first two bytes into a string with no interpretation\n                        fileStream.Charset = \"x-ansi\";\n                        fileStream.LoadFromFile(fileName);\n                        const bom = fileStream.ReadText(2) || \"\";\n                        // Position must be at 0 before encoding can be changed\n                        fileStream.Position = 0;\n                        // [0xFF,0xFE] and [0xFE,0xFF] mean utf-16 (little or big endian), otherwise default to utf-8\n                        fileStream.Charset = bom.length >= 2 && (bom.charCodeAt(0) === 0xFF && bom.charCodeAt(1) === 0xFE || bom.charCodeAt(0) === 0xFE && bom.charCodeAt(1) === 0xFF) ? \"unicode\" : \"utf-8\";\n                    }\n                    // ReadText method always strips byte order mark from resulting string\n                    return fileStream.ReadText();\n                }\n                catch (e) {\n                    throw e;\n                }\n                finally {\n                    fileStream.Close();\n                }\n            },\n            writeFile(fileName: string, data: string): boolean {\n                const f = fso.CreateTextFile(fileName, true);\n                f.Write(data);\n                f.Close();\n                return true;\n            },\n            resolvePath(path: string): string {\n                return fso.GetAbsolutePathName(path);\n            },\n            fileExists(path: string): boolean {\n                return fso.FileExists(path);\n            },\n            directoryExists(path: string) {\n                return fso.FolderExists(path);\n            },\n            createDirectory(directoryName: string) {\n                if (!this.directoryExists(directoryName)) {\n                    fso.CreateFolder(directoryName);\n                }\n            },\n            getExecutingFilePath() {\n                return WScript.ScriptFullName;\n            },\n            getCurrentDirectory() {\n                return \"\";\n            },\n            getMemoryUsage() {\n                return 0;\n            },\n            exit(exitCode?: number): void {\n                WScript.Quit(exitCode);\n            },\n            useCaseSensitiveFileNames: false\n        };\n    }\n\n    export function prepareCompiler(currentDir: string, stdOut: ITextWriter, stdErr: ITextWriter) {\n        const shell = new RealActiveXObject(\"WScript.Shell\");\n        shell.CurrentDirectory = currentDir;\n        WScript.ScriptFullName = currentDir + \"\\\\\\\\tc.js\";\n        WScript.StdOut = stdOut;\n        WScript.StdErr = stdErr;\n        sys = getWScriptSystem();\n\n        return (commandLine: string) => {\n            ts.executeCommandLine(commandLine.split(\" \"));\n        };\n    }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/// <reference path='..\\\\..\\\\src\\\\compiler\\\\tsc.ts'/>\n\nnamespace TypeScript.WebTsc {\n  declare var RealActiveXObject: { new (s: string): any };\n\n  function getWScriptSystem() {\n    const fso = new RealActiveXObject(\"Scripting.FileSystemObject\");\n\n    const fileStream = new ActiveXObject(\"ADODB.Stream\");\n    fileStream.Type = 2 /*text*/;\n\n    const args: string[] = [];\n    for (let i = 0; i < WScript.Arguments.length; i++) {\n      args[i] = WScript.Arguments.Item(i);\n    }\n    return {\n      args: args,\n      newLine: \"\\\\r\\\\n\",\n      write(s: string): void {\n        WScript.StdOut.Write(s);\n      },\n      writeErr(s: string): void {\n        WScript.StdErr.Write(s);\n      },\n      readFile(fileName: string, encoding?: string): string {\n        if (!fso.FileExists(fileName)) {\n          return undefined;\n        }\n        fileStream.Open();\n        try {\n          if (encoding) {\n            fileStream.Charset = encoding;\n            fileStream.LoadFromFile(fileName);\n          } else {\n            // Load file and read the first two bytes into a string with no interpretation\n            fileStream.Charset = \"x-ansi\";\n            fileStream.LoadFromFile(fileName);\n            const bom = fileStream.ReadText(2) || \"\";\n            // Position must be at 0 before encoding can be changed\n            fileStream.Position = 0;\n            // [0xFF,0xFE] and [0xFE,0xFF] mean utf-16 (little or big endian), otherwise default to utf-8\n            fileStream.Charset =\n              bom.length >= 2 &&\n              ((bom.charCodeAt(0) === 0xff && bom.charCodeAt(1) === 0xfe) ||\n                (bom.charCodeAt(0) === 0xfe && bom.charCodeAt(1) === 0xff))\n                ? \"unicode\"\n                : \"utf-8\";\n          }\n          // ReadText method always strips byte order mark from resulting string\n          return fileStream.ReadText();\n        } catch (e) {\n          throw e;\n        } finally {\n          fileStream.Close();\n        }\n      },\n      writeFile(fileName: string, data: string): boolean {\n        const f = fso.CreateTextFile(fileName, true);\n        f.Write(data);\n        f.Close();\n        return true;\n      },\n      resolvePath(path: string): string {\n        return fso.GetAbsolutePathName(path);\n      },\n      fileExists(path: string): boolean {\n        return fso.FileExists(path);\n      },\n      directoryExists(path: string) {\n        return fso.FolderExists(path);\n      },\n      createDirectory(directoryName: string) {\n        if (!this.directoryExists(directoryName)) {\n          fso.CreateFolder(directoryName);\n        }\n      },\n      getExecutingFilePath() {\n        return WScript.ScriptFullName;\n      },\n      getCurrentDirectory() {\n        return \"\";\n      },\n      getMemoryUsage() {\n        return 0;\n      },\n      exit(exitCode?: number): void {\n        WScript.Quit(exitCode);\n      },\n      useCaseSensitiveFileNames: false\n    };\n  }\n\n  export function prepareCompiler(\n    currentDir: string,\n    stdOut: ITextWriter,\n    stdErr: ITextWriter\n  ) {\n    const shell = new RealActiveXObject(\"WScript.Shell\");\n    shell.CurrentDirectory = currentDir;\n    WScript.ScriptFullName = currentDir + \"\\\\\\\\tc.js\";\n    WScript.StdOut = stdOut;\n    WScript.StdErr = stdErr;\n    sys = getWScriptSystem();\n\n    return (commandLine: string) => {\n      ts.executeCommandLine(commandLine.split(\" \"));\n    };\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript/webhost/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript/webhost/webtsc.ts",
    "content": "/// <reference path='..\\..\\src\\compiler\\tsc.ts'/>\r\n\r\nnamespace TypeScript.WebTsc {\r\n\r\n    declare var RealActiveXObject: { new (s: string): any };\r\n\r\n    function getWScriptSystem() {\r\n        const fso = new RealActiveXObject(\"Scripting.FileSystemObject\");\r\n\r\n        const fileStream = new ActiveXObject(\"ADODB.Stream\");\r\n        fileStream.Type = 2 /*text*/;\r\n\r\n        const args: string[] = [];\r\n        for (let i = 0; i < WScript.Arguments.length; i++) {\r\n            args[i] = WScript.Arguments.Item(i);\r\n        }\r\n        return {\r\n            args: args,\r\n            newLine: \"\\r\\n\",\r\n            write(s: string): void {\r\n                WScript.StdOut.Write(s);\r\n            },\r\n            writeErr(s: string): void {\r\n                WScript.StdErr.Write(s);\r\n            },\r\n            readFile(fileName: string, encoding?: string): string {\r\n                if (!fso.FileExists(fileName)) {\r\n                    return undefined;\r\n                }\r\n                fileStream.Open();\r\n                try {\r\n                    if (encoding) {\r\n                        fileStream.Charset = encoding;\r\n                        fileStream.LoadFromFile(fileName);\r\n                    }\r\n                    else {\r\n                        // Load file and read the first two bytes into a string with no interpretation\r\n                        fileStream.Charset = \"x-ansi\";\r\n                        fileStream.LoadFromFile(fileName);\r\n                        const bom = fileStream.ReadText(2) || \"\";\r\n                        // Position must be at 0 before encoding can be changed\r\n                        fileStream.Position = 0;\r\n                        // [0xFF,0xFE] and [0xFE,0xFF] mean utf-16 (little or big endian), otherwise default to utf-8\r\n                        fileStream.Charset = bom.length >= 2 && (bom.charCodeAt(0) === 0xFF && bom.charCodeAt(1) === 0xFE || bom.charCodeAt(0) === 0xFE && bom.charCodeAt(1) === 0xFF) ? \"unicode\" : \"utf-8\";\r\n                    }\r\n                    // ReadText method always strips byte order mark from resulting string\r\n                    return fileStream.ReadText();\r\n                }\r\n                catch (e) {\r\n                    throw e;\r\n                }\r\n                finally {\r\n                    fileStream.Close();\r\n                }\r\n            },\r\n            writeFile(fileName: string, data: string): boolean {\r\n                const f = fso.CreateTextFile(fileName, true);\r\n                f.Write(data);\r\n                f.Close();\r\n                return true;\r\n            },\r\n            resolvePath(path: string): string {\r\n                return fso.GetAbsolutePathName(path);\r\n            },\r\n            fileExists(path: string): boolean {\r\n                return fso.FileExists(path);\r\n            },\r\n            directoryExists(path: string) {\r\n                return fso.FolderExists(path);\r\n            },\r\n            createDirectory(directoryName: string) {\r\n                if (!this.directoryExists(directoryName)) {\r\n                    fso.CreateFolder(directoryName);\r\n                }\r\n            },\r\n            getExecutingFilePath() {\r\n                return WScript.ScriptFullName;\r\n            },\r\n            getCurrentDirectory() {\r\n                return \"\";\r\n            },\r\n            getMemoryUsage() {\r\n                return 0;\r\n            },\r\n            exit(exitCode?: number): void {\r\n                WScript.Quit(exitCode);\r\n            },\r\n            useCaseSensitiveFileNames: false\r\n        };\r\n    }\r\n\r\n    export function prepareCompiler(currentDir: string, stdOut: ITextWriter, stdErr: ITextWriter) {\r\n        const shell = new RealActiveXObject(\"WScript.Shell\");\r\n        shell.CurrentDirectory = currentDir;\r\n        WScript.ScriptFullName = currentDir + \"\\\\tc.js\";\r\n        WScript.StdOut = stdOut;\r\n        WScript.StdErr = stdErr;\r\n        sys = getWScriptSystem();\r\n\r\n        return (commandLine: string) => {\r\n            ts.executeCommandLine(commandLine.split(\" \"));\r\n        };\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/typescript_ambient/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`ambient.ts 1`] = `\ndeclare module \"classnames\" {\n  export default function classnames(...inputs: (string | number | false | object | undefined)[]): string;\n  export class x {}\n  export interface y {}\n  export type z = y;\n}\n\ndeclare module \"x\" {\n  export default class x {}\n}\n\ndeclare module \"y\" {\n  const y = 5;\n  export default y;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare module \"classnames\" {\n  export default function classnames(\n    ...inputs: (string | number | false | object | undefined)[]\n  ): string;\n  export class x {}\n  export interface y {}\n  export type z = y;\n}\n\ndeclare module \"x\" {\n  export default class x {}\n}\n\ndeclare module \"y\" {\n  const y = 5;\n  export default y;\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript_ambient/ambient.ts",
    "content": "declare module \"classnames\" {\n  export default function classnames(...inputs: (string | number | false | object | undefined)[]): string;\n  export class x {}\n  export interface y {}\n  export type z = y;\n}\n\ndeclare module \"x\" {\n  export default class x {}\n}\n\ndeclare module \"y\" {\n  const y = 5;\n  export default y;\n}\n"
  },
  {
    "path": "tests/typescript_ambient/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_array/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`comment.js 1`] = `\nexport class ViewTokensChangedEvent {\n  public readonly ranges: {\n    /**\n     * Start line number of range\n     */\n    readonly fromLineNumber: number;\n  }[];\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport class ViewTokensChangedEvent {\n  public readonly ranges: {\n    /**\n     * Start line number of range\n     */\n    readonly fromLineNumber: number;\n  }[];\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript_array/comment.js",
    "content": "export class ViewTokensChangedEvent {\n  public readonly ranges: {\n    /**\n     * Start line number of range\n     */\n    readonly fromLineNumber: number;\n  }[];\n}\n"
  },
  {
    "path": "tests/typescript_array/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_as/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`as.js 1`] = `\nconst name = (description as DescriptionObject).name || (description as string);\nthis.isTabActionBar((e.target || e.srcElement) as HTMLElement);\n(originalError ? wrappedError(errMsg, originalError) : Error(errMsg)) as InjectionError;\n'current' in (props.pagination as Object)\nstart + (yearSelectTotal as number)\nscrollTop > (visibilityHeight as number)\nexport default class Column<T> extends (RcTable.Column as React.ComponentClass<ColumnProps<T>>) {}\n({}) as {};\nfunction*g() {\n  const test = (yield 'foo') as number;\n}\nasync function g() {\n  const test = (await 'foo') as number;\n}\n({}) as X;\n() => ({}) as X;\nconst state = JSON.stringify({\n  next: window.location.href,\n  nonce,\n} as State);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst name = (description as DescriptionObject).name || (description as string);\nthis.isTabActionBar((e.target || e.srcElement) as HTMLElement);\n(originalError\n  ? wrappedError(errMsg, originalError)\n  : Error(errMsg)) as InjectionError;\n\"current\" in (props.pagination as Object);\nstart + (yearSelectTotal as number);\nscrollTop > (visibilityHeight as number);\nexport default class Column<T> extends (RcTable.Column as React.ComponentClass<\n  ColumnProps<T>\n>) {}\n({} as {});\nfunction* g() {\n  const test = (yield \"foo\") as number;\n}\nasync function g() {\n  const test = (await \"foo\") as number;\n}\n({} as X);\n() => ({} as X);\nconst state = JSON.stringify({\n  next: window.location.href,\n  nonce\n} as State);\n\n`;\n"
  },
  {
    "path": "tests/typescript_as/as.js",
    "content": "const name = (description as DescriptionObject).name || (description as string);\nthis.isTabActionBar((e.target || e.srcElement) as HTMLElement);\n(originalError ? wrappedError(errMsg, originalError) : Error(errMsg)) as InjectionError;\n'current' in (props.pagination as Object)\nstart + (yearSelectTotal as number)\nscrollTop > (visibilityHeight as number)\nexport default class Column<T> extends (RcTable.Column as React.ComponentClass<ColumnProps<T>>) {}\n({}) as {};\nfunction*g() {\n  const test = (yield 'foo') as number;\n}\nasync function g() {\n  const test = (await 'foo') as number;\n}\n({}) as X;\n() => ({}) as X;\nconst state = JSON.stringify({\n  next: window.location.href,\n  nonce,\n} as State);\n"
  },
  {
    "path": "tests/typescript_as/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_cast/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`hug-args.ts 1`] = `\npostMessage(\n  <IActionMessage>{\n    context: item.context,\n    topic: item.topic\n  }\n);\n\nwindow.postMessage(\n  {\n    context: item.context,\n    topic: item.topic\n  } as IActionMessage\n);\n\npostMessages(\n  <IActionMessage[]>[\n    {\n      context: item.context,\n      topic: item.topic\n    }\n  ]\n);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\npostMessage(<IActionMessage>{\n  context: item.context,\n  topic: item.topic\n});\n\nwindow.postMessage({\n  context: item.context,\n  topic: item.topic\n} as IActionMessage);\n\npostMessages(<IActionMessage[]>[\n  {\n    context: item.context,\n    topic: item.topic\n  }\n]);\n\n`;\n\nexports[`parenthesis.ts 1`] = `\n<DocumentHighlightKind>(a ? b : c);\n<any>(() => {});\n\n<x>a || {};\n<x>a && [];\ntrue || <x>a;\n<x>a + <x>b;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<DocumentHighlightKind>(a ? b : c);\n<any>(() => {});\n\n<x>a || {};\n<x>a && [];\ntrue || <x>a;\n<x>a + <x>b;\n\n`;\n"
  },
  {
    "path": "tests/typescript_cast/hug-args.ts",
    "content": "postMessage(\n  <IActionMessage>{\n    context: item.context,\n    topic: item.topic\n  }\n);\n\nwindow.postMessage(\n  {\n    context: item.context,\n    topic: item.topic\n  } as IActionMessage\n);\n\npostMessages(\n  <IActionMessage[]>[\n    {\n      context: item.context,\n      topic: item.topic\n    }\n  ]\n);\n"
  },
  {
    "path": "tests/typescript_cast/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_cast/parenthesis.ts",
    "content": "<DocumentHighlightKind>(a ? b : c);\n<any>(() => {});\n\n<x>a || {};\n<x>a && [];\ntrue || <x>a;\n<x>a + <x>b;\n"
  },
  {
    "path": "tests/typescript_class/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`constructor.ts 1`] = `\nclass foo {\n  constructor(static a: number) {}\n}\n\nclass foo {\n  constructor(export a: number) {}\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass foo {\n  constructor(static a: number) {}\n}\n\nclass foo {\n  constructor(export a: number) {}\n}\n\n`;\n\nexports[`dunder.ts 1`] = `\n// eslint/typescript-eslint-parser#296\nclass F<__T> {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// eslint/typescript-eslint-parser#296\nclass F<__T> {}\n\n`;\n\nexports[`generics.ts 1`] = `\nclass<T> implements Map<T> {}\n\ninterface AudioBufferList {\n\tmBuffers: interop.Reference<any /*AudioBuffer*/>;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass<T> implements Map<T> {}\n\ninterface AudioBufferList {\n  mBuffers: interop.Reference<any /*AudioBuffer*/>;\n}\n\n`;\n\nexports[`methods.ts 1`] = `\nclass X {\n    optionalMethod?() {}\n}\n\ninterface Iterable<T> {\n  export [Symbol.iterator](): Iterator<T>;\n}\n\nexport class Check {\n  private static property = 'test';\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass X {\n  optionalMethod?() {}\n}\n\ninterface Iterable<T> {\n  export [Symbol.iterator](): Iterator<T>;\n}\n\nexport class Check {\n  private static property = \"test\";\n}\n\n`;\n\nexports[`optional.ts 1`] = `\nclass X {\n  private foo? = undefined;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass X {\n  private foo? = undefined;\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript_class/constructor.ts",
    "content": "class foo {\n  constructor(static a: number) {}\n}\n\nclass foo {\n  constructor(export a: number) {}\n}\n"
  },
  {
    "path": "tests/typescript_class/dunder.ts",
    "content": "// eslint/typescript-eslint-parser#296\nclass F<__T> {}\n"
  },
  {
    "path": "tests/typescript_class/generics.ts",
    "content": "class<T> implements Map<T> {}\n\ninterface AudioBufferList {\n\tmBuffers: interop.Reference<any /*AudioBuffer*/>;\n}\n"
  },
  {
    "path": "tests/typescript_class/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_class/methods.ts",
    "content": "class X {\n    optionalMethod?() {}\n}\n\ninterface Iterable<T> {\n  export [Symbol.iterator](): Iterator<T>;\n}\n\nexport class Check {\n  private static property = 'test';\n}\n"
  },
  {
    "path": "tests/typescript_class/optional.ts",
    "content": "class X {\n  private foo? = undefined;\n}\n"
  },
  {
    "path": "tests/typescript_comments/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`abstract_class.ts 1`] = `\nabstract class AbstractRule {\n    /**\n     * @deprecated\n     * Failures will be filtered based on \\`tslint:disable\\` comments by tslint.\n     * This method now does nothing.\n     */\n    filterFailures() {}\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nabstract class AbstractRule {\n  /**\n     * @deprecated\n     * Failures will be filtered based on \\`tslint:disable\\` comments by tslint.\n     * This method now does nothing.\n     */\n  filterFailures() {}\n}\n\n`;\n\nexports[`jsx.ts 1`] = `\nvar example1 = <div>\n\thttps://test\n</div>;\n\nvar example2 = <div>\n\t/*test*/\n</div>;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar example1 = <div>https://test</div>;\n\nvar example2 = <div>/*test*/</div>;\n\n`;\n\nexports[`location.ts 1`] = `\nfunction x({\n  x,\n  y,\n}: {\n  // Hello world.\n  x: string,\n  // Yoyo.\n  y: string,\n}) {}\n\nexport interface ApplicationEventData {\n  registerBroadcastReceiver(onReceiveCallback: (\n    context: any /* android.content.Context */,\n    intent: any /* android.content.Intent */\n  ) => void): void;\n}\n\nexport type WrappedFormUtils = {\n  getFieldDecorator(id: string, options?: {\n    /** 子节点的值的属性，如 Checkbox 的是 'checked' */\n    valuePropName?: string;\n    /** 子节点的初始值，类型、可选值均由子节点决定 */\n    initialValue?: any;\n    /** 收集子节点的值的时机 */\n    trigger?: string;\n    /** 可以把 onChange 的参数转化为控件的值，例如 DatePicker 可设为：(date, dateString) => dateString */\n    getValueFromEvent?: (...args: any[]) => any;\n    /** 校验子节点值的时机 */\n    validateTrigger?: string | string[];\n    /** 校验规则，参见 [async-validator](https://github.com/yiminghe/async-validator) */\n    rules?: ValidationRule[];\n    /** 是否和其他控件互斥，特别用于 Radio 单选控件 */\n    exclusive?: boolean;\n  }): (node: React.ReactNode) => React.ReactNode;\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction x({\n  x,\n  y\n}: {\n  // Hello world.\n  x: string;\n  // Yoyo.\n  y: string;\n}) {}\n\nexport interface ApplicationEventData {\n  registerBroadcastReceiver(\n    onReceiveCallback: (\n      context: any /* android.content.Context */,\n      intent: any /* android.content.Intent */\n    ) => void\n  ): void;\n}\n\nexport type WrappedFormUtils = {\n  getFieldDecorator(\n    id: string,\n    options?: {\n      /** 子节点的值的属性，如 Checkbox 的是 'checked' */\n      valuePropName?: string;\n      /** 子节点的初始值，类型、可选值均由子节点决定 */\n      initialValue?: any;\n      /** 收集子节点的值的时机 */\n      trigger?: string;\n      /** 可以把 onChange 的参数转化为控件的值，例如 DatePicker 可设为：(date, dateString) => dateString */\n      getValueFromEvent?: (...args: any[]) => any;\n      /** 校验子节点值的时机 */\n      validateTrigger?: string | string[];\n      /** 校验规则，参见 [async-validator](https://github.com/yiminghe/async-validator) */\n      rules?: ValidationRule[];\n      /** 是否和其他控件互斥，特别用于 Radio 单选控件 */\n      exclusive?: boolean;\n    }\n  ): (node: React.ReactNode) => React.ReactNode;\n};\n\n`;\n\nexports[`type-parameters.ts 1`] = `\nfunctionName<A /* A comment */>();\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunctionName<A /* A comment */>();\n\n`;\n\nexports[`types.ts 1`] = `\n(() => {\n  // swallow error and fallback to using directory as path\n}) as string[];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n(() => {\n  // swallow error and fallback to using directory as path\n}) as string[];\n\n`;\n"
  },
  {
    "path": "tests/typescript_comments/abstract_class.ts",
    "content": "abstract class AbstractRule {\n    /**\n     * @deprecated\n     * Failures will be filtered based on `tslint:disable` comments by tslint.\n     * This method now does nothing.\n     */\n    filterFailures() {}\n}\n"
  },
  {
    "path": "tests/typescript_comments/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_comments/jsx.ts",
    "content": "var example1 = <div>\n\thttps://test\n</div>;\n\nvar example2 = <div>\n\t/*test*/\n</div>;\n"
  },
  {
    "path": "tests/typescript_comments/location.ts",
    "content": "function x({\n  x,\n  y,\n}: {\n  // Hello world.\n  x: string,\n  // Yoyo.\n  y: string,\n}) {}\n\nexport interface ApplicationEventData {\n  registerBroadcastReceiver(onReceiveCallback: (\n    context: any /* android.content.Context */,\n    intent: any /* android.content.Intent */\n  ) => void): void;\n}\n\nexport type WrappedFormUtils = {\n  getFieldDecorator(id: string, options?: {\n    /** 子节点的值的属性，如 Checkbox 的是 'checked' */\n    valuePropName?: string;\n    /** 子节点的初始值，类型、可选值均由子节点决定 */\n    initialValue?: any;\n    /** 收集子节点的值的时机 */\n    trigger?: string;\n    /** 可以把 onChange 的参数转化为控件的值，例如 DatePicker 可设为：(date, dateString) => dateString */\n    getValueFromEvent?: (...args: any[]) => any;\n    /** 校验子节点值的时机 */\n    validateTrigger?: string | string[];\n    /** 校验规则，参见 [async-validator](https://github.com/yiminghe/async-validator) */\n    rules?: ValidationRule[];\n    /** 是否和其他控件互斥，特别用于 Radio 单选控件 */\n    exclusive?: boolean;\n  }): (node: React.ReactNode) => React.ReactNode;\n};\n"
  },
  {
    "path": "tests/typescript_comments/type-parameters.ts",
    "content": "functionName<A /* A comment */>();\n"
  },
  {
    "path": "tests/typescript_comments/types.ts",
    "content": "(() => {\n  // swallow error and fallback to using directory as path\n}) as string[];\n"
  },
  {
    "path": "tests/typescript_decorators/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`decorators.js 1`] = `\nexport class TestTextFileService {\n\tconstructor(\n\t\t@ILifecycleService lifecycleService,\n\t) {\n\t}\n}\n\n@commonEditorContribution\nexport class TabCompletionController {\n}\n\n@Component({\n  selector: 'angular-component',\n})\nclass AngularComponent {\n  @Input() myInput: string;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport class TestTextFileService {\n  constructor(@ILifecycleService lifecycleService) {}\n}\n\n@commonEditorContribution\nexport class TabCompletionController {}\n\n@Component({\n  selector: \"angular-component\"\n})\nclass AngularComponent {\n  @Input() myInput: string;\n}\n\n`;\n\nexports[`inline-decorators.ts 1`] = `\n\n@d1\n@d2(foo)\n@d3.bar\n@d4.baz()\nclass Class1 {}\n\nclass Class2 {\n    @d1\n    @d2(foo)\n    @d3.bar\n    @d4.baz()\n    method1() {}\n\n    @d1\n    method2() {}\n\n    @d2(foo)\n    method3() {}\n\n    @d3.bar\n    method4() {}\n}\n\nclass Class3 {\n    @d1 fieldA;\n    @d2(foo) fieldB;\n    @d3.bar fieldC;\n    @d4.baz() fieldD;\n\n    constructor (\n        @d1 private x: number,\n        @d2(foo) private y: number,\n        @d3('foo') private z: number,\n        @d4({\n            x: string\n        }) private a: string,\n    ) {}\n}\n\n@decorated class Foo {}\n\nclass Bar {\n    @decorated method() {}\n}\n\nclass MyContainerComponent {\n  @ContentChildren(MyComponent) components: QueryListSomeBigName<MyComponentThat>;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@d1\n@d2(foo)\n@d3.bar\n@d4.baz()\nclass Class1 {}\n\nclass Class2 {\n  @d1\n  @d2(foo)\n  @d3.bar\n  @d4.baz()\n  method1() {}\n\n  @d1\n  method2() {}\n\n  @d2(foo)\n  method3() {}\n\n  @d3.bar\n  method4() {}\n}\n\nclass Class3 {\n  @d1 fieldA;\n  @d2(foo) fieldB;\n  @d3.bar fieldC;\n  @d4.baz() fieldD;\n\n  constructor(\n    @d1 private x: number,\n    @d2(foo) private y: number,\n    @d3(\"foo\") private z: number,\n    @d4({\n      x: string\n    })\n    private a: string\n  ) {}\n}\n\n@decorated\nclass Foo {}\n\nclass Bar {\n  @decorated\n  method() {}\n}\n\nclass MyContainerComponent {\n  @ContentChildren(MyComponent)\n  components: QueryListSomeBigName<MyComponentThat>;\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript_decorators/decorators.js",
    "content": "export class TestTextFileService {\n\tconstructor(\n\t\t@ILifecycleService lifecycleService,\n\t) {\n\t}\n}\n\n@commonEditorContribution\nexport class TabCompletionController {\n}\n\n@Component({\n  selector: 'angular-component',\n})\nclass AngularComponent {\n  @Input() myInput: string;\n}\n"
  },
  {
    "path": "tests/typescript_decorators/inline-decorators.ts",
    "content": "\n@d1\n@d2(foo)\n@d3.bar\n@d4.baz()\nclass Class1 {}\n\nclass Class2 {\n    @d1\n    @d2(foo)\n    @d3.bar\n    @d4.baz()\n    method1() {}\n\n    @d1\n    method2() {}\n\n    @d2(foo)\n    method3() {}\n\n    @d3.bar\n    method4() {}\n}\n\nclass Class3 {\n    @d1 fieldA;\n    @d2(foo) fieldB;\n    @d3.bar fieldC;\n    @d4.baz() fieldD;\n\n    constructor (\n        @d1 private x: number,\n        @d2(foo) private y: number,\n        @d3('foo') private z: number,\n        @d4({\n            x: string\n        }) private a: string,\n    ) {}\n}\n\n@decorated class Foo {}\n\nclass Bar {\n    @decorated method() {}\n}\n\nclass MyContainerComponent {\n  @ContentChildren(MyComponent) components: QueryListSomeBigName<MyComponentThat>;\n}\n"
  },
  {
    "path": "tests/typescript_decorators/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_destructuring/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`destructuring.ts 1`] = `\n({ foo = [] } = bar);\n\nfunction f({ x }?) {}\nfunction g([ x ]?) {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n({ foo = [] } = bar);\n\nfunction f({ x }?) {}\nfunction g([x]?) {}\n\n`;\n"
  },
  {
    "path": "tests/typescript_destructuring/destructuring.ts",
    "content": "({ foo = [] } = bar);\n\nfunction f({ x }?) {}\nfunction g([ x ]?) {}\n"
  },
  {
    "path": "tests/typescript_destructuring/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_enum/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`enum.ts 1`] = `\nenum Direction {\n    Up = 1,\n    Down,\n    Left,\n    Right\n}\n\nenum FileAccess {\n    // constant members\n    None,\n    Read    = 1 << 1,\n    Write   = 1 << 2,\n    ReadWrite  = Read | Write,\n    // computed member\n    G = \"123\".length\n}\n\nenum Empty {\n}\n\nconst enum Enum {\n    A = 1,\n    B = A * 2\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nenum Direction {\n  Up = 1,\n  Down,\n  Left,\n  Right\n}\n\nenum FileAccess {\n  // constant members\n  None,\n  Read = 1 << 1,\n  Write = 1 << 2,\n  ReadWrite = Read | Write,\n  // computed member\n  G = \"123\".length\n}\n\nenum Empty {}\n\nconst enum Enum {\n  A = 1,\n  B = A * 2\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript_enum/enum.ts",
    "content": "enum Direction {\n    Up = 1,\n    Down,\n    Left,\n    Right\n}\n\nenum FileAccess {\n    // constant members\n    None,\n    Read    = 1 << 1,\n    Write   = 1 << 2,\n    ReadWrite  = Read | Write,\n    // computed member\n    G = \"123\".length\n}\n\nenum Empty {\n}\n\nconst enum Enum {\n    A = 1,\n    B = A * 2\n}\n"
  },
  {
    "path": "tests/typescript_enum/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_export/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`comment.js 1`] = `\nexport function match(): string /* the matching pattern */\na\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport function match(): string; /* the matching pattern */\na;\n\n`;\n\nexports[`export.ts 1`] = `\ndeclare module \"hello\" {\n    export default Hello;\n}\n\ndeclare module \"hello\" {\n    export = Hello;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare module \"hello\" {\n  export default Hello;\n}\n\ndeclare module \"hello\" {\n  export = Hello;\n}\n\n`;\n\nexports[`export-class.js 1`] = `\nexport class A {}\nexport default class B {}\nexport abstract class C {}\nexport default abstract class D {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport class A {}\nexport default class B {}\nexport abstract class C {}\nexport default abstract class D {}\n\n`;\n"
  },
  {
    "path": "tests/typescript_export/comment.js",
    "content": "export function match(): string /* the matching pattern */\na\n"
  },
  {
    "path": "tests/typescript_export/export-class.js",
    "content": "export class A {}\nexport default class B {}\nexport abstract class C {}\nexport default abstract class D {}\n"
  },
  {
    "path": "tests/typescript_export/export.ts",
    "content": "declare module \"hello\" {\n    export default Hello;\n}\n\ndeclare module \"hello\" {\n    export = Hello;\n}\n"
  },
  {
    "path": "tests/typescript_export/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_import_require/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`import_require.js 1`] = `\nimport { IModel } from 'vs/editor/common/editorCommon';\nimport JSONContributionRegistry = require('vs/platform/jsonschemas/common/jsonContributionRegistry');\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nimport { IModel } from \"vs/editor/common/editorCommon\";\nimport JSONContributionRegistry = require(\"vs/platform/jsonschemas/common/jsonContributionRegistry\");\n\n`;\n"
  },
  {
    "path": "tests/typescript_import_require/import_require.js",
    "content": "import { IModel } from 'vs/editor/common/editorCommon';\nimport JSONContributionRegistry = require('vs/platform/jsonschemas/common/jsonContributionRegistry');\n"
  },
  {
    "path": "tests/typescript_import_require/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_index_signature/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`index-signature.ts 1`] = `\nclass LocalStorage implements Storage {\n  [index: number]: string;\n  [key: string]: any;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass LocalStorage implements Storage {\n  [index: number]: string;\n  [key: string]: any;\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript_index_signature/index-signature.ts",
    "content": "class LocalStorage implements Storage {\n  [index: number]: string;\n  [key: string]: any;\n}\n"
  },
  {
    "path": "tests/typescript_index_signature/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_interface/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`abstract.ts 1`] = `\nabstract interface I {\n\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nabstract interface I {}\n\n`;\n\nexports[`comments.js 1`] = `\ninterface ScreenObject {\n\t// I make things weird.\n\tat(point: Point): Screen | undefined;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface ScreenObject {\n  // I make things weird.\n  at(point: Point): Screen | undefined;\n}\n\n`;\n\nexports[`long-extends.ts 1`] = `\nexport interface I extends A, B, C {\n  c: string;\n}\n\nexport interface ThirdVeryLongAndBoringInterfaceName extends ALongAndBoringInterfaceName {\n  c: string;\n}\n\nexport interface ThirdVeryLongAndBoringInterfaceName extends ALongAndBoringInterfaceName, AnotherLongAndBoringInterfaceName {\n  c: string;\n}\n\nexport interface ThirdVeryLongAndBoringInterfaceName extends AVeryLongAndBoringInterfaceName, AnotherVeryLongAndBoringInterfaceName {\n  c: string;\n}\n\nexport interface ThirdVeryLongAndBoringInterfaceName extends A_AVeryLongAndBoringInterfaceName, B_AVeryLongAndBoringInterfaceName, C_AVeryLongAndBoringInterfaceName  {\n  c: string;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport interface I extends A, B, C {\n  c: string;\n}\n\nexport interface ThirdVeryLongAndBoringInterfaceName\n  extends ALongAndBoringInterfaceName {\n  c: string;\n}\n\nexport interface ThirdVeryLongAndBoringInterfaceName\n  extends ALongAndBoringInterfaceName,\n    AnotherLongAndBoringInterfaceName {\n  c: string;\n}\n\nexport interface ThirdVeryLongAndBoringInterfaceName\n  extends AVeryLongAndBoringInterfaceName,\n    AnotherVeryLongAndBoringInterfaceName {\n  c: string;\n}\n\nexport interface ThirdVeryLongAndBoringInterfaceName\n  extends A_AVeryLongAndBoringInterfaceName,\n    B_AVeryLongAndBoringInterfaceName,\n    C_AVeryLongAndBoringInterfaceName {\n  c: string;\n}\n\n`;\n\nexports[`separator.ts 1`] = `\ndeclare module 'selenium-webdriver' {\n  export const until: {\n    ableToSwitchToFrame(frame: number | WebElement | By): Condition<boolean>;\n    alertIsPresent(): Condition<Alert>;\n  };\n}\n\nexport interface Edge {\n  cursor: {};\n  node: {\n    id: {};\n  };\n}\n\ninterface Test { one: string, two: any[] }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare module \"selenium-webdriver\" {\n  export const until: {\n    ableToSwitchToFrame(frame: number | WebElement | By): Condition<boolean>;\n    alertIsPresent(): Condition<Alert>;\n  };\n}\n\nexport interface Edge {\n  cursor: {};\n  node: {\n    id: {};\n  };\n}\n\ninterface Test {\n  one: string;\n  two: any[];\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript_interface/abstract.ts",
    "content": "abstract interface I {\n\n}\n"
  },
  {
    "path": "tests/typescript_interface/comments.js",
    "content": "interface ScreenObject {\n\t// I make things weird.\n\tat(point: Point): Screen | undefined;\n}\n"
  },
  {
    "path": "tests/typescript_interface/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_interface/long-extends.ts",
    "content": "export interface I extends A, B, C {\n  c: string;\n}\n\nexport interface ThirdVeryLongAndBoringInterfaceName extends ALongAndBoringInterfaceName {\n  c: string;\n}\n\nexport interface ThirdVeryLongAndBoringInterfaceName extends ALongAndBoringInterfaceName, AnotherLongAndBoringInterfaceName {\n  c: string;\n}\n\nexport interface ThirdVeryLongAndBoringInterfaceName extends AVeryLongAndBoringInterfaceName, AnotherVeryLongAndBoringInterfaceName {\n  c: string;\n}\n\nexport interface ThirdVeryLongAndBoringInterfaceName extends A_AVeryLongAndBoringInterfaceName, B_AVeryLongAndBoringInterfaceName, C_AVeryLongAndBoringInterfaceName  {\n  c: string;\n}\n"
  },
  {
    "path": "tests/typescript_interface/separator.ts",
    "content": "declare module 'selenium-webdriver' {\n  export const until: {\n    ableToSwitchToFrame(frame: number | WebElement | By): Condition<boolean>;\n    alertIsPresent(): Condition<Alert>;\n  };\n}\n\nexport interface Edge {\n  cursor: {};\n  node: {\n    id: {};\n  };\n}\n\ninterface Test { one: string, two: any[] }\n"
  },
  {
    "path": "tests/typescript_keyof/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`keyof.ts 1`] = `\ntype A = keyof (T | U);\ntype B = keyof (X & Y);\ntype C = keyof T | U;\ntype D = keyof X & Y;\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype A = keyof (T | U);\ntype B = keyof (X & Y);\ntype C = keyof T | U;\ntype D = keyof X & Y;\n\n`;\n"
  },
  {
    "path": "tests/typescript_keyof/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_keyof/keyof.ts",
    "content": "type A = keyof (T | U);\ntype B = keyof (X & Y);\ntype C = keyof T | U;\ntype D = keyof X & Y;\n\n"
  },
  {
    "path": "tests/typescript_keywords/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`keywords.js 1`] = `\n// All of these should be an error\n\nmodule Y3 {\n    public module Module {\n        class A { s: string }\n    }\n\n    // Apparently this parses :P\n    export private public protected static readonly abstract async enum X { }\n\n    interface x {\n        export private static readonly [x: any]: any;\n    }\n}\n\nmodule Y4 {\n    public enum Color { Blue, Red }\n}\n\nmodule YY3 {\n    private module Module {\n        class A { s: string }\n    }\n}\n\nmodule YY4 {\n    private enum Color { Blue, Red }\n}\n\nmodule YYY3 {\n    static module Module {\n        class A { s: string }\n    }\n}\n\nmodule YYY4 {\n    static enum Color { Blue, Red }\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// All of these should be an error\n\nnamespace Y3 {\n  public namespace Module {\n    class A {\n      s: string;\n    }\n  }\n\n  // Apparently this parses :P\n  export private public protected static readonly abstract async enum X {}\n\n  interface x {\n    export private static readonly [x: any]: any;\n  }\n}\n\nnamespace Y4 {\n  public enum Color {\n    Blue,\n    Red\n  }\n}\n\nnamespace YY3 {\n  private namespace Module {\n    class A {\n      s: string;\n    }\n  }\n}\n\nnamespace YY4 {\n  private enum Color {\n    Blue,\n    Red\n  }\n}\n\nnamespace YYY3 {\n  static namespace Module {\n    class A {\n      s: string;\n    }\n  }\n}\n\nnamespace YYY4 {\n  static enum Color {\n    Blue,\n    Red\n  }\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript_keywords/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_keywords/keywords.js",
    "content": "// All of these should be an error\n\nmodule Y3 {\n    public module Module {\n        class A { s: string }\n    }\n\n    // Apparently this parses :P\n    export private public protected static readonly abstract async enum X { }\n\n    interface x {\n        export private static readonly [x: any]: any;\n    }\n}\n\nmodule Y4 {\n    public enum Color { Blue, Red }\n}\n\nmodule YY3 {\n    private module Module {\n        class A { s: string }\n    }\n}\n\nmodule YY4 {\n    private enum Color { Blue, Red }\n}\n\nmodule YYY3 {\n    static module Module {\n        class A { s: string }\n    }\n}\n\nmodule YYY4 {\n    static enum Color { Blue, Red }\n}\n"
  },
  {
    "path": "tests/typescript_method/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`semi.js 1`] = `\ndeclare module 'foo' {\n  function foo(namespace: string): void;\n  function bar(namespace: string): void;\n}\n\nfunction pickCard(x: {suit: string; card: number; }[]): number;\nfunction pickCard(x: number): {suit: string; card: number; };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare module \"foo\" {\n  function foo(namespace: string): void;\n  function bar(namespace: string): void;\n}\n\nfunction pickCard(x: { suit: string; card: number }[]): number;\nfunction pickCard(x: number): { suit: string; card: number };\n\n`;\n\nexports[`type_literal_optional_method.ts 1`] = `\nvar v: { e?(): number };\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar v: { e?(): number };\n\n`;\n"
  },
  {
    "path": "tests/typescript_method/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_method/semi.js",
    "content": "declare module 'foo' {\n  function foo(namespace: string): void;\n  function bar(namespace: string): void;\n}\n\nfunction pickCard(x: {suit: string; card: number; }[]): number;\nfunction pickCard(x: number): {suit: string; card: number; };\n"
  },
  {
    "path": "tests/typescript_method/type_literal_optional_method.ts",
    "content": "var v: { e?(): number };\n"
  },
  {
    "path": "tests/typescript_module/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`empty.js 1`] = `\ndeclare module 'autoprefixer';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndeclare module \"autoprefixer\";\n\n`;\n\nexports[`global.js 1`] = `\nnamespace global {}\nmodule global {}\nglobal {}\ndeclare global {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nnamespace global {\n\n}\nnamespace global {\n\n}\nglobal {\n\n}\ndeclare global {\n\n}\n\n`;\n\nexports[`namespace_function.ts 1`] = `\nnamespace X {\n    declare function f();\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nnamespace X {\n  declare function f();\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript_module/empty.js",
    "content": "declare module 'autoprefixer';\n"
  },
  {
    "path": "tests/typescript_module/global.js",
    "content": "namespace global {}\nmodule global {}\nglobal {}\ndeclare global {}\n"
  },
  {
    "path": "tests/typescript_module/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_module/namespace_function.ts",
    "content": "namespace X {\n    declare function f();\n}\n"
  },
  {
    "path": "tests/typescript_new/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`new-signature.ts 1`] = `\ninterface FooConstructor {\n  new (\n    a: number,\n    b: number,\n    c: number,\n    d: number,\n    e: number,\n    f: number,\n    g: number,\n    h: number\n  ): Foo;\n}\n\ninterface BarConstructor {\n  new <A, B, C>(\n    a: number,\n    b: number,\n    c: number,\n    d: number,\n    e: number,\n    f: number,\n    g: number,\n    h: number\n  ): Foo;\n}\n\ntype BazConstructor = {\n  new (\n    a: number,\n    b: number,\n    c: number,\n    d: number,\n    e: number,\n    f: number,\n    g: number,\n    h: number\n  ): Foo;\n}\n\n\ninterface ConstructorBigGenerics {\n  // comment\n  new <AAAAAAAAAAAAAAAAAAAAAAAA, AAAAAAAAAAAAAAAAAAAAAAAA, AAAAAAAAAAAAAAAAAAAAAAAA>(\n    a: number,\n    b: number,\n    c: number,\n    d: number,\n    e: number,\n    f: number,\n    g: number,\n    h: number\n  ): Foo;\n}\n\ninterface ConstructorInline {\n  // https://github.com/prettier/prettier/issues/2163\n  (i): any;\n}\n\ninterface TimerConstructor {\n  // Line-splitting comment\n  new (interval: number, callback: (handler: Timer) => void): Timer;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface FooConstructor {\n  new (\n    a: number,\n    b: number,\n    c: number,\n    d: number,\n    e: number,\n    f: number,\n    g: number,\n    h: number\n  ): Foo;\n}\n\ninterface BarConstructor {\n  new <A, B, C>(\n    a: number,\n    b: number,\n    c: number,\n    d: number,\n    e: number,\n    f: number,\n    g: number,\n    h: number\n  ): Foo;\n}\n\ntype BazConstructor = {\n  new (\n    a: number,\n    b: number,\n    c: number,\n    d: number,\n    e: number,\n    f: number,\n    g: number,\n    h: number\n  ): Foo;\n};\n\ninterface ConstructorBigGenerics {\n  // comment\n  new <\n    AAAAAAAAAAAAAAAAAAAAAAAA,\n    AAAAAAAAAAAAAAAAAAAAAAAA,\n    AAAAAAAAAAAAAAAAAAAAAAAA\n  >(\n    a: number,\n    b: number,\n    c: number,\n    d: number,\n    e: number,\n    f: number,\n    g: number,\n    h: number\n  ): Foo;\n}\n\ninterface ConstructorInline {\n  // https://github.com/prettier/prettier/issues/2163\n  (i): any;\n}\n\ninterface TimerConstructor {\n  // Line-splitting comment\n  new (interval: number, callback: (handler: Timer) => void): Timer;\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript_new/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_new/new-signature.ts",
    "content": "interface FooConstructor {\n  new (\n    a: number,\n    b: number,\n    c: number,\n    d: number,\n    e: number,\n    f: number,\n    g: number,\n    h: number\n  ): Foo;\n}\n\ninterface BarConstructor {\n  new <A, B, C>(\n    a: number,\n    b: number,\n    c: number,\n    d: number,\n    e: number,\n    f: number,\n    g: number,\n    h: number\n  ): Foo;\n}\n\ntype BazConstructor = {\n  new (\n    a: number,\n    b: number,\n    c: number,\n    d: number,\n    e: number,\n    f: number,\n    g: number,\n    h: number\n  ): Foo;\n}\n\n\ninterface ConstructorBigGenerics {\n  // comment\n  new <AAAAAAAAAAAAAAAAAAAAAAAA, AAAAAAAAAAAAAAAAAAAAAAAA, AAAAAAAAAAAAAAAAAAAAAAAA>(\n    a: number,\n    b: number,\n    c: number,\n    d: number,\n    e: number,\n    f: number,\n    g: number,\n    h: number\n  ): Foo;\n}\n\ninterface ConstructorInline {\n  // https://github.com/prettier/prettier/issues/2163\n  (i): any;\n}\n\ninterface TimerConstructor {\n  // Line-splitting comment\n  new (interval: number, callback: (handler: Timer) => void): Timer;\n}\n"
  },
  {
    "path": "tests/typescript_non_null/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`parens.ts 1`] = `\n(a ? b : c) ![tokenKey];\n(a || b) ![tokenKey];\n\nasync function f() {\n    return (await foo())!;\n}\n\nfunction* g() {\n    return (yield * foo())!;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n(a ? b : c)![tokenKey];\n(a || b)![tokenKey];\n\nasync function f() {\n  return (await foo())!;\n}\n\nfunction* g() {\n  return (yield* foo())!;\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript_non_null/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_non_null/parens.ts",
    "content": "(a ? b : c) ![tokenKey];\n(a || b) ![tokenKey];\n\nasync function f() {\n    return (await foo())!;\n}\n\nfunction* g() {\n    return (yield * foo())!;\n}\n"
  },
  {
    "path": "tests/typescript_nosemi/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`index-signature.ts 1`] = `\nclass LocalStorage implements Storage {\n  [index: number]: string;\n  [key: string]: any;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass LocalStorage implements Storage {\n  [index: number]: string\n  [key: string]: any\n}\n\n`;\n\nexports[`interface.ts 1`] = `\ninterface Inline { x: string }\n\ninterface MultiLine {\n    x: string;\n    y: string;\n}\n\ninterface InlineMultiple { x: string; y: string }\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface Inline {\n  x: string\n}\n\ninterface MultiLine {\n  x: string\n  y: string\n}\n\ninterface InlineMultiple {\n  x: string\n  y: string\n}\n\n`;\n\nexports[`type.js 1`] = `\ntype A = {disabled?: boolean, error?: string}\n\nconst foo: {aasdf?: string; asdf?: number; foob?: string; zzz?: string; yyy: string}  = {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype A = { disabled?: boolean; error?: string }\n\nconst foo: {\n  aasdf?: string\n  asdf?: number\n  foob?: string\n  zzz?: string\n  yyy: string\n} = {}\n\n`;\n"
  },
  {
    "path": "tests/typescript_nosemi/index-signature.ts",
    "content": "class LocalStorage implements Storage {\n  [index: number]: string;\n  [key: string]: any;\n}\n"
  },
  {
    "path": "tests/typescript_nosemi/interface.ts",
    "content": "interface Inline { x: string }\n\ninterface MultiLine {\n    x: string;\n    y: string;\n}\n\ninterface InlineMultiple { x: string; y: string }\n"
  },
  {
    "path": "tests/typescript_nosemi/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\", semi: false });\n"
  },
  {
    "path": "tests/typescript_nosemi/type.js",
    "content": "type A = {disabled?: boolean, error?: string}\n\nconst foo: {aasdf?: string; asdf?: number; foob?: string; zzz?: string; yyy: string}  = {}\n"
  },
  {
    "path": "tests/typescript_readonly/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`readonly.ts 1`] = `\nclass Foo {\n  public readonly foo = 'string';\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nclass Foo {\n  public readonly foo = \"string\";\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript_readonly/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_readonly/readonly.ts",
    "content": "class Foo {\n  public readonly foo = 'string';\n}\n"
  },
  {
    "path": "tests/typescript_rest/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`rest.ts 1`] = `\nfunction test([first, ...rest]) {}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction test([first, ...rest]) {}\n\n`;\n"
  },
  {
    "path": "tests/typescript_rest/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_rest/rest.ts",
    "content": "function test([first, ...rest]) {}\n"
  },
  {
    "path": "tests/typescript_semi/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`no-semi.ts 1`] = `\nexport class Mutation {\n  private set: NQuad[];\n  private delete: NQuad[];\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport class Mutation {\n  private set: NQuad[]\n  private delete: NQuad[]\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript_semi/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\", semi: false });\n"
  },
  {
    "path": "tests/typescript_semi/no-semi.ts",
    "content": "export class Mutation {\n  private set: NQuad[];\n  private delete: NQuad[];\n}\n"
  },
  {
    "path": "tests/typescript_trailing_comma/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`trailing.ts 1`] = `\nexport class BaseSingleLevelProfileTargeting<\n\tT extends ValidSingleLevelProfileNode,\n> {\n}\n\nenum Enum {\n\tx = 1,\n\ty = 2,\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport class BaseSingleLevelProfileTargeting<\n  T extends ValidSingleLevelProfileNode\n> {}\n\nenum Enum {\n  x = 1,\n  y = 2,\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript_trailing_comma/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\", trailingComma: \"all\" });\n"
  },
  {
    "path": "tests/typescript_trailing_comma/trailing.ts",
    "content": "export class BaseSingleLevelProfileTargeting<\n\tT extends ValidSingleLevelProfileNode,\n> {\n}\n\nenum Enum {\n\tx = 1,\n\ty = 2,\n}\n"
  },
  {
    "path": "tests/typescript_tsx/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`keyword.tsx 1`] = `\n<try />;\n<object />\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<try />;\n<object />;\n\n`;\n\nexports[`not-react.ts 1`] = `\n/// <reference types=\"node\" />\n\ntype ul = any;\nconst somethingElse = 1;\nconst thing = <ul>somethingElse;\nconst div = \"<div></div>\";\nconst h1 = \\`<h1>Hi</h1>\\`;\nconst footer = '<footer></footer>';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/// <reference types=\"node\" />\n\ntype ul = any;\nconst somethingElse = 1;\nconst thing = <ul>somethingElse;\nconst div = \"<div></div>\";\nconst h1 = \\`<h1>Hi</h1>\\`;\nconst footer = \"<footer></footer>\";\n\n`;\n\nexports[`react.tsx 1`] = `\nconst MyCoolList = ({ things }) =>\n    <ul>\n        {things.map(MyCoolThing)}\n    </ul>;\n\nconst MyCoolThing = ({ thingo }) => <li>{thingo}</li>;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst MyCoolList = ({ things }) => <ul>{things.map(MyCoolThing)}</ul>;\n\nconst MyCoolThing = ({ thingo }) => <li>{thingo}</li>;\n\n`;\n\nexports[`this.tsx 1`] = `\n<this.state.Component />;\n<this.Component />;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n<this.state.Component />;\n<this.Component />;\n\n`;\n"
  },
  {
    "path": "tests/typescript_tsx/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_tsx/keyword.tsx",
    "content": "<try />;\n<object />\n"
  },
  {
    "path": "tests/typescript_tsx/not-react.ts",
    "content": "/// <reference types=\"node\" />\n\ntype ul = any;\nconst somethingElse = 1;\nconst thing = <ul>somethingElse;\nconst div = \"<div></div>\";\nconst h1 = `<h1>Hi</h1>`;\nconst footer = '<footer></footer>';\n"
  },
  {
    "path": "tests/typescript_tsx/react.tsx",
    "content": "const MyCoolList = ({ things }) =>\n    <ul>\n        {things.map(MyCoolThing)}\n    </ul>;\n\nconst MyCoolThing = ({ thingo }) => <li>{thingo}</li>;\n"
  },
  {
    "path": "tests/typescript_tsx/this.tsx",
    "content": "<this.state.Component />;\n<this.Component />;\n"
  },
  {
    "path": "tests/typescript_tuple/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`trailing-comma.ts 1`] = `\nexport interface ShopQueryResult {\n  chic: boolean;\n  location: number[];\n  menus: Menu[];\n  openingDays: number[];\n  closingDays: [\n    {\n      from: string,\n      to: string,\n    }, // <== this one\n  ];\n  shop: string;\n  distance: number;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport interface ShopQueryResult {\n  chic: boolean;\n  location: number[];\n  menus: Menu[];\n  openingDays: number[];\n  closingDays: [\n    {\n      from: string;\n      to: string;\n    } // <== this one\n  ];\n  shop: string;\n  distance: number;\n}\n\n`;\n\nexports[`tuple.ts 1`] = `\n\nexport type SCMRawResource = [\n\tnumber /*handle*/,\n\tstring /*resourceUri*/,\n\tmodes.Command /*command*/,\n\tstring[] /*icons: light, dark*/,\n\tboolean /*strike through*/,\n\tboolean /*faded*/\n];\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport type SCMRawResource = [\n  number /*handle*/,\n  string /*resourceUri*/,\n  modes.Command /*command*/,\n  string[] /*icons: light, dark*/,\n  boolean /*strike through*/,\n  boolean /*faded*/\n];\n\n`;\n"
  },
  {
    "path": "tests/typescript_tuple/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_tuple/trailing-comma.ts",
    "content": "export interface ShopQueryResult {\n  chic: boolean;\n  location: number[];\n  menus: Menu[];\n  openingDays: number[];\n  closingDays: [\n    {\n      from: string,\n      to: string,\n    }, // <== this one\n  ];\n  shop: string;\n  distance: number;\n}\n"
  },
  {
    "path": "tests/typescript_tuple/tuple.ts",
    "content": "\nexport type SCMRawResource = [\n\tnumber /*handle*/,\n\tstring /*resourceUri*/,\n\tmodes.Command /*command*/,\n\tstring[] /*icons: light, dark*/,\n\tboolean /*strike through*/,\n\tboolean /*faded*/\n];\n"
  },
  {
    "path": "tests/typescript_typeparams/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`long-function-arg.ts 1`] = `\nexport const forwardS = R.curry(\n  <V,T>(prop: string, reducer: ReducerFunction<V, T>, value: V, state: {[name: string]: T}) =>\n  R.assoc(prop, reducer(value, state[prop]), state)\n)\n\nexport const forwardS = R.curry(\n  <VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV, TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT>(prop: string, reducer: ReducerFunction<V, T>, value: V, state: {[name: string]: T}) =>\n  R.assoc(prop, reducer(value, state[prop]), state)\n)\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport const forwardS = R.curry(\n  <V, T>(\n    prop: string,\n    reducer: ReducerFunction<V, T>,\n    value: V,\n    state: { [name: string]: T }\n  ) => R.assoc(prop, reducer(value, state[prop]), state)\n);\n\nexport const forwardS = R.curry(\n  <\n    VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV,\n    TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT\n  >(\n    prop: string,\n    reducer: ReducerFunction<V, T>,\n    value: V,\n    state: { [name: string]: T }\n  ) => R.assoc(prop, reducer(value, state[prop]), state)\n);\n\n`;\n"
  },
  {
    "path": "tests/typescript_typeparams/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_typeparams/long-function-arg.ts",
    "content": "export const forwardS = R.curry(\n  <V,T>(prop: string, reducer: ReducerFunction<V, T>, value: V, state: {[name: string]: T}) =>\n  R.assoc(prop, reducer(value, state[prop]), state)\n)\n\nexport const forwardS = R.curry(\n  <VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV, TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT>(prop: string, reducer: ReducerFunction<V, T>, value: V, state: {[name: string]: T}) =>\n  R.assoc(prop, reducer(value, state[prop]), state)\n)\n\n"
  },
  {
    "path": "tests/typescript_union/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`inlining.ts 1`] = `\ninterface RelayProps {\n  articles: a | null,\n}\ninterface RelayProps {\n  articles: Array<{\n    __id: string,\n  } | null> | null | void,\n}\n\ntype UploadState<E, EM, D>\n  // The upload hasnt begun yet\n  = {type: \"Not_begun\"}\n  // The upload timed out\n  | {type: \"Timed_out\"}\n  // Failed somewhere on the line\n  | {type: \"Failed\", error: E, errorMsg: EM}\n  // Uploading to aws3 and CreatePostMutation succeeded\n  | {type: \"Success\", data: D};\n\ntype UploadState<E, EM, D>\n  // The upload hasnt begun yet\n  = A\n  // The upload timed out\n  | B\n  // Failed somewhere on the line\n  | C\n  // Uploading to aws3 and CreatePostMutation succeeded\n  | D;\n\ntype window = Window & {\n  __REDUX_DEVTOOLS_EXTENSION_COMPOSE__: Function;\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ninterface RelayProps {\n  articles: a | null;\n}\ninterface RelayProps {\n  articles: Array<{\n    __id: string;\n  } | null> | null | void;\n}\n\ntype UploadState<E, EM, D> =\n  // The upload hasnt begun yet\n  | { type: \"Not_begun\" }\n  // The upload timed out\n  | { type: \"Timed_out\" }\n  // Failed somewhere on the line\n  | { type: \"Failed\"; error: E; errorMsg: EM }\n  // Uploading to aws3 and CreatePostMutation succeeded\n  | { type: \"Success\"; data: D };\n\ntype UploadState<E, EM, D> =\n  // The upload hasnt begun yet\n  | A\n  // The upload timed out\n  | B\n  // Failed somewhere on the line\n  | C\n  // Uploading to aws3 and CreatePostMutation succeeded\n  | D;\n\ntype window = Window & {\n  __REDUX_DEVTOOLS_EXTENSION_COMPOSE__: Function;\n};\n\n`;\n\nexports[`union-parens.ts 1`] = `\n\nexport type A = (\n  | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n  | bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n);\n\nexport type B = (\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |\n  bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n);\n\nexport type C =\n  | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n  | bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;\n\nexport type D =\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |\n  bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;\n\nexport type Multi = (string | number)[];\n\nfunction f(): (string | number) {}\n\nvar x: (string | number);\nvar y: ((string | number));\n\nclass Foo<T extends (string | number)> {}\n\ninterface Interface {\n    i: (X | Y) & Z;\n    j: Partial<(X | Y)>;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nexport type A =\n  | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n  | bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;\n\nexport type B =\n  | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n  | bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;\n\nexport type C =\n  | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n  | bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;\n\nexport type D =\n  | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n  | bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;\n\nexport type Multi = (string | number)[];\n\nfunction f(): string | number {}\n\nvar x: string | number;\nvar y: string | number;\n\nclass Foo<T extends string | number> {}\n\ninterface Interface {\n  i: (X | Y) & Z;\n  j: Partial<X | Y>;\n}\n\n`;\n"
  },
  {
    "path": "tests/typescript_union/inlining.ts",
    "content": "interface RelayProps {\n  articles: a | null,\n}\ninterface RelayProps {\n  articles: Array<{\n    __id: string,\n  } | null> | null | void,\n}\n\ntype UploadState<E, EM, D>\n  // The upload hasnt begun yet\n  = {type: \"Not_begun\"}\n  // The upload timed out\n  | {type: \"Timed_out\"}\n  // Failed somewhere on the line\n  | {type: \"Failed\", error: E, errorMsg: EM}\n  // Uploading to aws3 and CreatePostMutation succeeded\n  | {type: \"Success\", data: D};\n\ntype UploadState<E, EM, D>\n  // The upload hasnt begun yet\n  = A\n  // The upload timed out\n  | B\n  // Failed somewhere on the line\n  | C\n  // Uploading to aws3 and CreatePostMutation succeeded\n  | D;\n\ntype window = Window & {\n  __REDUX_DEVTOOLS_EXTENSION_COMPOSE__: Function;\n};\n"
  },
  {
    "path": "tests/typescript_union/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"typescript\" });\n"
  },
  {
    "path": "tests/typescript_union/union-parens.ts",
    "content": "\nexport type A = (\n  | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n  | bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n);\n\nexport type B = (\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |\n  bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n);\n\nexport type C =\n  | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n  | bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;\n\nexport type D =\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |\n  bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;\n\nexport type Multi = (string | number)[];\n\nfunction f(): (string | number) {}\n\nvar x: (string | number);\nvar y: ((string | number));\n\nclass Foo<T extends (string | number)> {}\n\ninterface Interface {\n    i: (X | Y) & Z;\n    j: Partial<(X | Y)>;\n}\n"
  },
  {
    "path": "tests/unary/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`object.js 1`] = `\nstate = {\n  // students\n  hoverColumn: -1\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nstate = {\n  // students\n  hoverColumn: -1\n};\n\n`;\n\nexports[`series.js 1`] = `\n1 + ++x;\n1 + x++;\n\n+ ++x;\n+ x++;\n\nx++ + 1;\n++x + 1;\n\n1 - --x;\n1 - x--;\n\n- --x;\n- x--;\n\nx-- - 1;\n--x - 1;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n1 + ++x;\n1 + x++;\n\n+(++x);\n+x++;\n\nx++ + 1;\n++x + 1;\n\n1 - --x;\n1 - x--;\n\n-(--x);\n-x--;\n\nx-- - 1;\n--x - 1;\n\n`;\n"
  },
  {
    "path": "tests/unary/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/unary/object.js",
    "content": "state = {\n  // students\n  hoverColumn: -1\n};\n"
  },
  {
    "path": "tests/unary/series.js",
    "content": "1 + ++x;\n1 + x++;\n\n+ ++x;\n+ x++;\n\nx++ + 1;\n++x + 1;\n\n1 - --x;\n1 - x--;\n\n- --x;\n- x--;\n\nx-- - 1;\n--x - 1;\n"
  },
  {
    "path": "tests/unary_expression/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`urnary_expression.js 1`] = `\n!!x\nx++\nx--;\n-+1;\nx + + + + 1;\nx + (+ (+ (+ 1)))\nx * +y;\n+x * y;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n!!x;\nx++;\nx--;\n-+1;\nx + +(+(+1));\nx + +(+(+1));\nx * +y;\n+x * y;\n\n`;\n"
  },
  {
    "path": "tests/unary_expression/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/unary_expression/urnary_expression.js",
    "content": "!!x\nx++\nx--;\n-+1;\nx + + + + 1;\nx + (+ (+ (+ 1)))\nx * +y;\n+x * y;\n"
  },
  {
    "path": "tests/unicode/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`keys.js 1`] = `\n({'この事はつもり素晴らしいことさ': '35jL9V'})\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n({ この事はつもり素晴らしいことさ: \"35jL9V\" });\n\n`;\n"
  },
  {
    "path": "tests/unicode/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\", \"typescript\"]);\n"
  },
  {
    "path": "tests/unicode/keys.js",
    "content": "({'この事はつもり素晴らしいことさ': '35jL9V'})\n"
  },
  {
    "path": "tests/union_intersection/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`test.js 1`] = `\ntype T5 = \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" | \"8\" | \"9\" | \"10\" | \"11\" | \"12\" | \"13\";\n\ntype T6 = \"a-long-string\" | \"another-long-string\" | \"yet-another-long-string\" | \"one-more-for-good-measure\";\n\ntype T7 =\n  { eventName: \"these\", a: number } |\n  { eventName: \"will\", b: number } |\n  { eventName: \"not\", c: number } |\n  { eventName: \"fit\", d: number } |\n  { eventName: \"on\", e: number } |\n  { eventName: \"one\", f: number } |\n  { eventName: \"line\", g: number };\n\ntype Comment = {\n  type: 'CommentLine';\n  _CommentLine: void;\n  value: string;\n  end: number;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n} | {\n  type: 'CommentBlock';\n  _CommentBlock: void;\n  value: string;\n  end: number;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n};\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ntype T5 =\n  | \"1\"\n  | \"2\"\n  | \"3\"\n  | \"4\"\n  | \"5\"\n  | \"6\"\n  | \"7\"\n  | \"8\"\n  | \"9\"\n  | \"10\"\n  | \"11\"\n  | \"12\"\n  | \"13\";\n\ntype T6 =\n  | \"a-long-string\"\n  | \"another-long-string\"\n  | \"yet-another-long-string\"\n  | \"one-more-for-good-measure\";\n\ntype T7 =\n  | { eventName: \"these\", a: number }\n  | { eventName: \"will\", b: number }\n  | { eventName: \"not\", c: number }\n  | { eventName: \"fit\", d: number }\n  | { eventName: \"on\", e: number }\n  | { eventName: \"one\", f: number }\n  | { eventName: \"line\", g: number };\n\ntype Comment =\n  | {\n      type: \"CommentLine\",\n      _CommentLine: void,\n      value: string,\n      end: number,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number\n    }\n  | {\n      type: \"CommentBlock\",\n      _CommentBlock: void,\n      value: string,\n      end: number,\n      loc: {\n        end: { column: number, line: number },\n        start: { column: number, line: number }\n      },\n      start: number\n    };\n\n`;\n"
  },
  {
    "path": "tests/union_intersection/jsfmt.spec.js",
    "content": "run_spec(__dirname);\n"
  },
  {
    "path": "tests/union_intersection/test.js",
    "content": "type T5 = \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" | \"8\" | \"9\" | \"10\" | \"11\" | \"12\" | \"13\";\n\ntype T6 = \"a-long-string\" | \"another-long-string\" | \"yet-another-long-string\" | \"one-more-for-good-measure\";\n\ntype T7 =\n  { eventName: \"these\", a: number } |\n  { eventName: \"will\", b: number } |\n  { eventName: \"not\", c: number } |\n  { eventName: \"fit\", d: number } |\n  { eventName: \"on\", e: number } |\n  { eventName: \"one\", f: number } |\n  { eventName: \"line\", g: number };\n\ntype Comment = {\n  type: 'CommentLine';\n  _CommentLine: void;\n  value: string;\n  end: number;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n} | {\n  type: 'CommentBlock';\n  _CommentBlock: void;\n  value: string;\n  end: number;\n  loc: {\n    end: {column: number, line: number},\n    start: {column: number, line: number},\n  };\n  start: number;\n};\n"
  },
  {
    "path": "tests/update_expression/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`update_expression.js 1`] = `\n(this.x++).toString()\nnew (r++);\n(x++)();\nconst uuid = String(this._uuidCounter++);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n(this.x++).toString();\nnew (r++)();\n(x++)();\nconst uuid = String(this._uuidCounter++);\n\n`;\n"
  },
  {
    "path": "tests/update_expression/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/update_expression/update_expression.js",
    "content": "(this.x++).toString()\nnew (r++);\n(x++)();\nconst uuid = String(this._uuidCounter++);\n"
  },
  {
    "path": "tests/variable_declarator/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`multiple.js 1`] = `\nvar assert = require('assert'),\n  lookup = require('../lookup');\n\nconst eloBar     = require(\"elo-bar\")\n  , foo        = require(\"foo\")\n  , otherThing = require(\"other-thing\");\n\nvar a, b, c;\n\nlet superSuperSuperLong1, superSuperSuperLong2, superSuperSuperLong3, superSuperSuperLong4;\n\nfor (var i = 0, len = arr.length; i < len; i++) {}\n\nvar templateTagsMapping = {\n    '%{itemIndex}': 'index',\n    '%{itemContentMetaTextViews}': 'views'\n  },\n  separator = '<span class=\"item__content__meta__separator\">•</span>',\n  templateTagsList = $.map(templateTagsMapping, function(value, key) {\n    return key;\n  }),\n  data;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nvar assert = require(\"assert\"),\n  lookup = require(\"../lookup\");\n\nconst eloBar = require(\"elo-bar\"),\n  foo = require(\"foo\"),\n  otherThing = require(\"other-thing\");\n\nvar a, b, c;\n\nlet superSuperSuperLong1,\n  superSuperSuperLong2,\n  superSuperSuperLong3,\n  superSuperSuperLong4;\n\nfor (var i = 0, len = arr.length; i < len; i++) {}\n\nvar templateTagsMapping = {\n    \"%{itemIndex}\": \"index\",\n    \"%{itemContentMetaTextViews}\": \"views\"\n  },\n  separator = '<span class=\"item__content__meta__separator\">•</span>',\n  templateTagsList = $.map(templateTagsMapping, function(value, key) {\n    return key;\n  }),\n  data;\n\n`;\n\nexports[`string.js 1`] = `\nelements[0].innerHTML = '<div></div><div></div><div></div><div></div><div></div><div></div>';\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nelements[0].innerHTML =\n  \"<div></div><div></div><div></div><div></div><div></div><div></div>\";\n\n`;\n"
  },
  {
    "path": "tests/variable_declarator/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"babylon\", \"typescript\"]);\n"
  },
  {
    "path": "tests/variable_declarator/multiple.js",
    "content": "var assert = require('assert'),\n  lookup = require('../lookup');\n\nconst eloBar     = require(\"elo-bar\")\n  , foo        = require(\"foo\")\n  , otherThing = require(\"other-thing\");\n\nvar a, b, c;\n\nlet superSuperSuperLong1, superSuperSuperLong2, superSuperSuperLong3, superSuperSuperLong4;\n\nfor (var i = 0, len = arr.length; i < len; i++) {}\n\nvar templateTagsMapping = {\n    '%{itemIndex}': 'index',\n    '%{itemContentMetaTextViews}': 'views'\n  },\n  separator = '<span class=\"item__content__meta__separator\">•</span>',\n  templateTagsList = $.map(templateTagsMapping, function(value, key) {\n    return key;\n  }),\n  data;\n"
  },
  {
    "path": "tests/variable_declarator/string.js",
    "content": "elements[0].innerHTML = '<div></div><div></div><div></div><div></div><div></div><div></div>';\n"
  },
  {
    "path": "tests/while/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`indent.js 1`] = `\nif (someVeryLongStringA && someVeryLongStringB && someVeryLongStringC && someVeryLongStringD) {}\nwhile (someVeryLongStringA && someVeryLongStringB && someVeryLongStringC && someVeryLongStringD) {}\ndo {}\nwhile (someVeryLongStringA && someVeryLongStringB && someVeryLongStringC && someVeryLongStringD);\n\nif (someVeryLongFunc(someVeryLongArgA, someVeryLongArgB, someVeryLongArgC, someVeryLongArgD)) {}\nwhile (someVeryLongFunc(someVeryLongArgA, someVeryLongArgB, someVeryLongArgC, someVeryLongArgD)) {}\ndo {}\nwhile (someVeryLongFunc(someVeryLongArgA, someVeryLongArgB, someVeryLongArgC, someVeryLongArgD));\n\nwhile (0) 1;\n\ndo 1;\nwhile (0);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nif (\n  someVeryLongStringA &&\n  someVeryLongStringB &&\n  someVeryLongStringC &&\n  someVeryLongStringD\n) {\n}\nwhile (\n  someVeryLongStringA &&\n  someVeryLongStringB &&\n  someVeryLongStringC &&\n  someVeryLongStringD\n) {}\ndo {} while (\n  someVeryLongStringA &&\n  someVeryLongStringB &&\n  someVeryLongStringC &&\n  someVeryLongStringD\n);\n\nif (\n  someVeryLongFunc(\n    someVeryLongArgA,\n    someVeryLongArgB,\n    someVeryLongArgC,\n    someVeryLongArgD\n  )\n) {\n}\nwhile (\n  someVeryLongFunc(\n    someVeryLongArgA,\n    someVeryLongArgB,\n    someVeryLongArgC,\n    someVeryLongArgD\n  )\n) {}\ndo {} while (\n  someVeryLongFunc(\n    someVeryLongArgA,\n    someVeryLongArgB,\n    someVeryLongArgC,\n    someVeryLongArgD\n  )\n);\n\nwhile (0) 1;\n\ndo 1;\nwhile (0);\n\n`;\n"
  },
  {
    "path": "tests/while/indent.js",
    "content": "if (someVeryLongStringA && someVeryLongStringB && someVeryLongStringC && someVeryLongStringD) {}\nwhile (someVeryLongStringA && someVeryLongStringB && someVeryLongStringC && someVeryLongStringD) {}\ndo {}\nwhile (someVeryLongStringA && someVeryLongStringB && someVeryLongStringC && someVeryLongStringD);\n\nif (someVeryLongFunc(someVeryLongArgA, someVeryLongArgB, someVeryLongArgC, someVeryLongArgD)) {}\nwhile (someVeryLongFunc(someVeryLongArgA, someVeryLongArgB, someVeryLongArgC, someVeryLongArgD)) {}\ndo {}\nwhile (someVeryLongFunc(someVeryLongArgA, someVeryLongArgB, someVeryLongArgC, someVeryLongArgD));\n\nwhile (0) 1;\n\ndo 1;\nwhile (0);\n"
  },
  {
    "path": "tests/while/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/windows/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`line-ending.js 1`] = `\nthis;\nhas;\nwindows;\nline;\nendings;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nthis;\nhas;\nwindows;\nline;\nendings;\n\n`;\n\nexports[`template.js 1`] = `\nconst aLongString = \\`\nLine 1\nLine 2\nLine 3\nLine 4\nLine 5\n\\`;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nconst aLongString = \\`\nLine 1\nLine 2\nLine 3\nLine 4\nLine 5\n\\`;\n\n`;\n"
  },
  {
    "path": "tests/windows/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/windows/line-ending.js",
    "content": "this;\r\nhas;\r\nwindows;\r\nline;\r\nendings;\r\n"
  },
  {
    "path": "tests/windows/template.js",
    "content": "const aLongString = `\r\nLine 1\r\nLine 2\r\nLine 3\r\nLine 4\r\nLine 5\r\n`;\r\n"
  },
  {
    "path": "tests/with/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`indent.js 1`] = `\nwith (0) {}\n\nwith (0) 1;\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nwith (0) {\n}\n\nwith (0) 1;\n\n`;\n"
  },
  {
    "path": "tests/with/indent.js",
    "content": "with (0) {}\n\nwith (0) 1;\n"
  },
  {
    "path": "tests/with/jsfmt.spec.js",
    "content": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/yield/__snapshots__/jsfmt.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`conditional.js 1`] = `\nfunction* f() {\n  a = (yield) ? 1 : 1;\n  a = yield 1 ? 1 : 1;\n  a = (yield 1) ? 1 : 1;\n  a = 1 ? yield : yield;\n  a = 1 ? yield 1 : yield 1;\n}\n\nfunction* f() {\n  a = yield* 1 ? 1 : 1;\n  a = (yield* 1) ? 1 : 1;\n  a = 1 ? yield* 1 : yield* 1;\n}\n\nasync function f() {\n  a = await 1 ? 1 : 1;\n  a = (await 1) ? 1 : 1;\n  a = 1 ? await 1 : await 1;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nfunction* f() {\n  a = (yield) ? 1 : 1;\n  a = yield 1 ? 1 : 1;\n  a = (yield 1) ? 1 : 1;\n  a = 1 ? yield : yield;\n  a = 1 ? yield 1 : yield 1;\n}\n\nfunction* f() {\n  a = yield* 1 ? 1 : 1;\n  a = (yield* 1) ? 1 : 1;\n  a = 1 ? yield* 1 : yield* 1;\n}\n\nasync function f() {\n  a = (await 1) ? 1 : 1;\n  a = (await 1) ? 1 : 1;\n  a = 1 ? await 1 : await 1;\n}\n\n`;\n"
  },
  {
    "path": "tests/yield/conditional.js",
    "content": "function* f() {\n  a = (yield) ? 1 : 1;\n  a = yield 1 ? 1 : 1;\n  a = (yield 1) ? 1 : 1;\n  a = 1 ? yield : yield;\n  a = 1 ? yield 1 : yield 1;\n}\n\nfunction* f() {\n  a = yield* 1 ? 1 : 1;\n  a = (yield* 1) ? 1 : 1;\n  a = 1 ? yield* 1 : yield* 1;\n}\n\nasync function f() {\n  a = await 1 ? 1 : 1;\n  a = (await 1) ? 1 : 1;\n  a = 1 ? await 1 : await 1;\n}\n"
  },
  {
    "path": "tests/yield/jsfmt.spec.js",
    "content": "run_spec(__dirname, { parser: \"babylon\" }, [\"typescript\"]);\n"
  },
  {
    "path": "tests_config/.eslintrc.js",
    "content": "\"use strict\";\n\nmodule.exports = {\n  env: {\n    jest: true\n  }\n};\n"
  },
  {
    "path": "tests_config/raw-serializer.js",
    "content": "\"use strict\";\n\nconst RAW = Symbol.for(\"raw\");\n\nmodule.exports = {\n  print(val) {\n    return val[RAW];\n  },\n  test(val) {\n    return (\n      val &&\n      Object.prototype.hasOwnProperty.call(val, RAW) &&\n      typeof val[RAW] === \"string\"\n    );\n  }\n};\n"
  },
  {
    "path": "tests_config/run_spec.js",
    "content": "\"use strict\";\n\nconst isProduction = process.env.NODE_ENV === \"production\";\nconst fs = require(\"fs\");\nconst extname = require(\"path\").extname;\nconst prettier = require(isProduction ? \"../dist/\" : \"../\");\nconst parser = require(\"../src/parser\");\nconst massageAST = require(\"../src/clean-ast.js\").massageAST;\n\nconst AST_COMPARE = process.env[\"AST_COMPARE\"];\nconst VERIFY_ALL_PARSERS = process.env[\"VERIFY_ALL_PARSERS\"] || false;\nconst ALL_PARSERS = process.env[\"ALL_PARSERS\"]\n  ? JSON.parse(process.env[\"ALL_PARSERS\"])\n  : [\"flow\", \"graphql\", \"babylon\", \"typescript\"];\n\nfunction run_spec(dirname, options, additionalParsers) {\n  fs.readdirSync(dirname).forEach(filename => {\n    const path = dirname + \"/\" + filename;\n    if (\n      extname(filename) !== \".snap\" &&\n      fs.lstatSync(path).isFile() &&\n      filename !== \"jsfmt.spec.js\"\n    ) {\n      let rangeStart = 0;\n      let rangeEnd = Infinity;\n      const source = read(path)\n        .replace(/\\r\\n/g, \"\\n\")\n        .replace(\"<<<PRETTIER_RANGE_START>>>\", (match, offset) => {\n          rangeStart = offset;\n          return \"\";\n        })\n        .replace(\"<<<PRETTIER_RANGE_END>>>\", (match, offset) => {\n          rangeEnd = offset;\n          return \"\";\n        });\n\n      const mergedOptions = Object.assign(mergeDefaultOptions(options || {}), {\n        rangeStart: rangeStart,\n        rangeEnd: rangeEnd\n      });\n      const output = prettyprint(source, path, mergedOptions);\n      test(`${mergedOptions.parser} - ${parser.parser}-verify`, () => {\n        expect(raw(source + \"~\".repeat(80) + \"\\n\" + output)).toMatchSnapshot(\n          filename\n        );\n      });\n\n      getParsersToVerify(\n        mergedOptions.parser,\n        additionalParsers || []\n      ).forEach(parserName => {\n        test(`${filename} - ${parserName}-verify`, () => {\n          const verifyOptions = Object.assign(mergedOptions, {\n            parser: parserName\n          });\n          const verifyOutput = prettyprint(source, path, verifyOptions);\n          expect(output).toEqual(verifyOutput);\n        });\n      });\n\n      if (AST_COMPARE) {\n        const ast = parse(source, mergedOptions);\n        const astMassaged = massageAST(ast);\n        let ppastMassaged;\n        let pperr = null;\n        try {\n          const ppast = parse(\n            prettyprint(source, path, mergedOptions),\n            mergedOptions\n          );\n          ppastMassaged = massageAST(ppast);\n        } catch (e) {\n          pperr = e.stack;\n        }\n\n        test(path + \" parse\", () => {\n          expect(pperr).toBe(null);\n          expect(ppastMassaged).toBeDefined();\n          if (!ast.errors || ast.errors.length === 0) {\n            expect(astMassaged).toEqual(ppastMassaged);\n          }\n        });\n      }\n    }\n  });\n}\nglobal.run_spec = run_spec;\n\nfunction stripLocation(ast) {\n  if (Array.isArray(ast)) {\n    return ast.map(e => stripLocation(e));\n  }\n  if (typeof ast === \"object\") {\n    const newObj = {};\n    for (const key in ast) {\n      if (\n        key === \"loc\" ||\n        key === \"range\" ||\n        key === \"raw\" ||\n        key === \"comments\" ||\n        key === \"parent\" ||\n        key === \"prev\"\n      ) {\n        continue;\n      }\n      newObj[key] = stripLocation(ast[key]);\n    }\n    return newObj;\n  }\n  return ast;\n}\n\nfunction parse(string, opts) {\n  return stripLocation(parser.parse(string, opts));\n}\n\nfunction prettyprint(src, filename, options) {\n  return prettier.format(\n    src,\n    Object.assign(\n      {\n        filepath: filename\n      },\n      options\n    )\n  );\n}\n\nfunction read(filename) {\n  return fs.readFileSync(filename, \"utf8\");\n}\n\n/**\n * Wraps a string in a marker object that is used by `./raw-serializer.js` to\n * directly print that string in a snapshot without escaping all double quotes.\n * Backticks will still be escaped.\n */\nfunction raw(string) {\n  if (typeof string !== \"string\") {\n    throw new Error(\"Raw snapshots have to be strings.\");\n  }\n  return { [Symbol.for(\"raw\")]: string };\n}\n\nfunction mergeDefaultOptions(parserConfig) {\n  return Object.assign(\n    {\n      parser: \"flow\",\n      printWidth: 80\n    },\n    parserConfig\n  );\n}\n\nfunction getParsersToVerify(parser, additionalParsers) {\n  if (VERIFY_ALL_PARSERS) {\n    return ALL_PARSERS.splice(ALL_PARSERS.indexOf(parser), 1);\n  }\n  return additionalParsers;\n}\n"
  },
  {
    "path": "tests_integration/.eslintrc.js",
    "content": "\"use strict\";\n\nmodule.exports = {\n  env: {\n    jest: true\n  }\n};\n"
  },
  {
    "path": "tests_integration/__tests__/__snapshots__/config-resolution.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`CLI overrides take precedence 1`] = `\n\"/* eslint-disable */\nconsole.log(\n  \\\\\"should have semi\\\\\"\n);\n/* eslint-disable */\nconsole.log(\n  \\\\\"should not have semi\\\\\"\n)\n/* eslint-disable */\nconsole.log(\n  \\\\\"should have semi\\\\\"\n);\n/* eslint-disable */\n\nfunction f(){\n        console.log(\n                \\\\\"should have tab width 8\\\\\"\n        );\n}\n\\\\\"use strict\\\\\";\n\nmodule.exports = {\n        tabWidth: 8\n};\n/* eslint-disable */\n\nfunction f(){\n  console.log(\n    \\\\\"should have no semicolons\\\\\"\n  )\n}\n/* eslint-disable */\n\nfunction f(){\n   console.log(\n      \\\\\"should have tab width 3\\\\\"\n   );\n}\n/* eslint-disable */\n\nfunction f(){\n  console.log.apply(\n    null,\n    [\n      'this file',\n      'should have trailing comma',\n      'and single quotes',\n    ],\n  );\n}\n\"\n`;\n\nexports[`accepts configuration from --config 1`] = `\n\"/* eslint-disable */\n\nfunction f(){\n  console.log(\\\\\"should have tab width 8\\\\\")\n}\n\"\n`;\n\nexports[`resolves configuration file with --find-config-path file 1`] = `\n\".prettierrc\n\"\n`;\n\nexports[`resolves configuration from external files 1`] = `\n\"/* eslint-disable */\nconsole.log(\\\\\"should have semi\\\\\");\n/* eslint-disable */\nconsole.log(\\\\\"should not have semi\\\\\")\n/* eslint-disable */\nconsole.log(\\\\\"should have semi\\\\\");\n/* eslint-disable */\n\nfunction f(){\n        console.log(\\\\\"should have tab width 8\\\\\");\n}\n\\\\\"use strict\\\\\";\n\nmodule.exports = {\n        tabWidth: 8\n};\n/* eslint-disable */\n\nfunction f(){\n  console.log(\\\\\"should have no semicolons\\\\\")\n}\n/* eslint-disable */\n\nfunction f(){\n   console.log(\\\\\"should have tab width 3\\\\\");\n}\n/* eslint-disable */\n\nfunction f(){\n  console.log.apply(null, [\n    'this file',\n    'should have trailing comma',\n    'and single quotes',\n  ]);\n}\n\"\n`;\n\nexports[`resolves configuration from external files and overrides by extname 1`] = `\n\"function g(){\n  console.log(\\\\\"should have semicolons because it has a .ts extension\\\\\");\n}\nfunction g(){\n     console.log(\\\\\"should have tab width 5 because it has .ts extension\\\\\");\n}\n\"\n`;\n"
  },
  {
    "path": "tests_integration/__tests__/__snapshots__/ignore-path.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`ignore path 1`] = `\n\"regular-module.js\n\"\n`;\n\nexports[`support .prettierignore 1`] = `\n\"other-regular-modules.js\n\"\n`;\n"
  },
  {
    "path": "tests_integration/__tests__/__snapshots__/multiple-patterns.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`multiple patterns 1`] = `\n\"directory/file.js\ndirectory/nested-directory/nested-directory-file.js\nother-directory/file.js\nother-directory/nested-directory/nested-directory-file.js\n\"\n`;\n\nexports[`multiple patterns by with ignore pattern, doesn't ignore node_modules with --with-node-modules flag 1`] = `\n\"node_modules/node-module.js\nother-directory/file.js\nother-directory/nested-directory/nested-directory-file.js\nother-regular-modules.js\nregular-module.js\n\"\n`;\n\nexports[`multiple patterns by with ignore pattern, ignores node_modules by default 1`] = `\n\"other-directory/file.js\nother-directory/nested-directory/nested-directory-file.js\nother-regular-modules.js\nregular-module.js\n\"\n`;\n\nexports[`multiple patterns by with ignore pattern, ignores node_modules by with ./**/*.js 1`] = `\n\"./other-directory/file.js\n./other-directory/nested-directory/nested-directory-file.js\n./other-regular-modules.js\n./regular-module.js\n\"\n`;\n\nexports[`multiple patterns with ignore nested directories pattern 1`] = `\n\"directory/file.js\nother-directory/file.js\nother-regular-modules.js\nregular-module.js\n\"\n`;\n\nexports[`multiple patterns with non exists pattern 1`] = `\n\"directory/file.js\ndirectory/nested-directory/nested-directory-file.js\n\"\n`;\n\nexports[`multiple patterns, throw error and exit with non zero code on non existing files 1`] = `\n\"No matching files. Patterns tried: non-existent.js other-non-existent.js !**/node_modules/** !./node_modules/**\n\"\n`;\n"
  },
  {
    "path": "tests_integration/__tests__/__snapshots__/parser-api.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`allows passing a string to resolve a parser 1`] = `\n\"/* eslint-disable */\nbar();\n\"\n`;\n"
  },
  {
    "path": "tests_integration/__tests__/__snapshots__/with-node-modules.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`doesn't ignore node_modules with --with-node-modules flag 1`] = `\n\"node_modules/node-module.js\nnot_node_modules/file.js\nregular-module.js\n\"\n`;\n\nexports[`doesn't ignore node_modules with --with-node-modules flag for file list 1`] = `\n\"node_modules/node-module.js\nnot_node_modules/file.js\nregular-module.js\n\"\n`;\n\nexports[`ignores node_modules by default 1`] = `\n\"not_node_modules/file.js\nregular-module.js\n\"\n`;\n\nexports[`ignores node_modules by default for file list 1`] = `\n\"not_node_modules/file.js\nregular-module.js\n\"\n`;\n\nexports[`ignores node_modules by with ./**/*.js 1`] = `\n\"./not_node_modules/file.js\n./regular-module.js\n\"\n`;\n"
  },
  {
    "path": "tests_integration/__tests__/__snapshots__/with-parser-inference.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`infers postcss parser 1`] = `\n\"/* JavaScript */\n\\\\\"use strict\\\\\";\n/* Stylesheet */\n* {\n  outline: none;\n}\n\"\n`;\n\nexports[`infers postcss parser with --list-different 1`] = `\"\"`;\n"
  },
  {
    "path": "tests_integration/__tests__/__snapshots__/with-shebang.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`preserves shebang 1`] = `\n\"#!/usr/bin/env node\n\\\\\"use strict\\\\\";\n\"\n`;\n"
  },
  {
    "path": "tests_integration/__tests__/config-resolution.js",
    "content": "\"use strict\";\n\nconst path = require(\"path\");\n\nconst runPrettier = require(\"../runPrettier\");\nconst prettier = require(\"../../\");\n\ntest(\"resolves configuration from external files\", () => {\n  const output = runPrettier(\"cli/config/\", [\"**/*.js\"]);\n  expect(output.stdout).toMatchSnapshot();\n  expect(output.status).toEqual(0);\n});\n\ntest(\"resolves configuration from external files and overrides by extname\", () => {\n  const output = runPrettier(\"cli/config/\", [\"**/*.ts\"]);\n  expect(output.stdout).toMatchSnapshot();\n  expect(output.status).toEqual(0);\n});\n\ntest(\"accepts configuration from --config\", () => {\n  const output = runPrettier(\"cli/config/\", [\n    \"--config\",\n    \".prettierrc\",\n    \"./js/file.js\"\n  ]);\n  expect(output.stdout).toMatchSnapshot();\n  expect(output.status).toEqual(0);\n});\n\ntest(\"resolves configuration file with --find-config-path file\", () => {\n  const output = runPrettier(\"cli/config/\", [\n    \"--find-config-path\",\n    \"no-config/file.js\"\n  ]);\n  expect(output.stdout).toMatchSnapshot();\n  expect(output.status).toEqual(0);\n});\n\ntest(\"prints nothing when no file found with --find-config-path\", () => {\n  const output = runPrettier(\"cli/config/\", [\"--find-config-path\", \"..\"]);\n  expect(output.stdout).toEqual(\"\");\n  expect(output.status).toEqual(1);\n});\n\ntest(\"CLI overrides take precedence\", () => {\n  const output = runPrettier(\"cli/config/\", [\"--print-width\", \"1\", \"**/*.js\"]);\n  expect(output.stdout).toMatchSnapshot();\n  expect(output.status).toEqual(0);\n});\n\ntest(\"API resolveConfig with no args\", () => {\n  return prettier.resolveConfig().then(result => {\n    expect(result).toBeNull();\n  });\n});\n\ntest(\"API resolveConfig with file arg\", () => {\n  const file = path.resolve(path.join(__dirname, \"../cli/config/js/file.js\"));\n  return prettier.resolveConfig(file).then(result => {\n    expect(result).toMatchObject({\n      tabWidth: 8\n    });\n  });\n});\n\ntest(\"API resolveConfig with file arg and extension override\", () => {\n  const file = path.resolve(\n    path.join(__dirname, \"../cli/config/no-config/file.ts\")\n  );\n  return prettier.resolveConfig(file).then(result => {\n    expect(result).toMatchObject({\n      semi: true\n    });\n  });\n});\n"
  },
  {
    "path": "tests_integration/__tests__/debug-check.js",
    "content": "\"use strict\";\n\nconsole.log('debug-check 0');\n\nconst runPrettier = require(\"../runPrettier\");\n\ntest(\"doesn't crash when --debug-check is passed\", () => {\n  console.log('debug-check 1 before');\n  const result = runPrettier(\"cli/with-shebang\", [\n    \"issue1890.js\",\n    \"--debug-check\"\n  ], null, true);\n  console.log('debug-check 1', result);\n\n  expect(result.stdout).toEqual(\"issue1890.js\\n\");\n  expect(result.stderr).toEqual(\"\");\n  expect(result.status).toEqual(0);\n\n  console.log('debug-check 1 end');\n});\n\ntest(\"checks stdin with --debug-check\", () => {\n  console.log('debug-check 2 before');\n  const result = runPrettier(\"cli/with-shebang\", [\"--debug-check\"], {\n    input: \"0\"\n  }, true);\n  console.log('debug-check 2', result);\n\n  expect(result.stdout).toEqual(\"(stdin)\\n\");\n  expect(result.stderr).toEqual(\"\");\n  expect(result.status).toEqual(0);\n\n  console.log('debug-check 2 end');\n});\n"
  },
  {
    "path": "tests_integration/__tests__/debug-print-doc.js",
    "content": "\"use strict\";\n\nconst runPrettier = require(\"../runPrettier\");\n\ntest(\"prints doc with --debug-print-doc\", () => {\n  const result = runPrettier(\"cli/with-shebang\", [\"--debug-print-doc\"], {\n    input: \"0\"\n  });\n\n  expect(result.stdout).toEqual('[\"0\", \";\", hardline, breakParent];\\n');\n  expect(result.stderr).toEqual(\"\");\n  expect(result.status).toEqual(0);\n});\n"
  },
  {
    "path": "tests_integration/__tests__/ignore-path.js",
    "content": "\"use strict\";\n\nconst runPrettier = require(\"../runPrettier\");\n\ntest(\"ignore path\", () => {\n  const result = runPrettier(\"cli/ignore-path\", [\n    \"**/*.js\",\n    \"--ignore-path\",\n    \".gitignore\",\n    \"-l\"\n  ]);\n\n  expect(result.stdout).toMatchSnapshot();\n  expect(result.status).toEqual(1);\n});\n\ntest(\"support .prettierignore\", () => {\n  const result = runPrettier(\"cli/ignore-path\", [\"**/*.js\", \"-l\"]);\n\n  expect(result.stdout).toMatchSnapshot();\n  expect(result.status).toEqual(1);\n});\n"
  },
  {
    "path": "tests_integration/__tests__/list-different.js",
    "content": "\"use strict\";\n\nconst runPrettier = require(\"../runPrettier\");\n\ntest(\"checks stdin with --list-different\", () => {\n  const result = runPrettier(\"cli/with-shebang\", [\"--list-different\"], {\n    input: \"0\"\n  });\n\n  expect(result.stdout).toEqual(\"(stdin)\\n\");\n  expect(result.stderr).toEqual(\"\");\n  expect(result.status).not.toEqual(0);\n});\n"
  },
  {
    "path": "tests_integration/__tests__/multiple-patterns.js",
    "content": "\"use strict\";\n\nconst runPrettier = require(\"../runPrettier\");\n\ntest(\"multiple patterns\", () => {\n  const result = runPrettier(\"cli/multiple-patterns\", [\n    \"directory/**/*.js\",\n    \"other-directory/**/*.js\",\n    \"-l\"\n  ]);\n\n  expect(result.stdout).toMatchSnapshot();\n  expect(result.status).toEqual(1);\n});\n\ntest(\"multiple patterns with non exists pattern\", () => {\n  const result = runPrettier(\"cli/multiple-patterns\", [\n    \"directory/**/*.js\",\n    \"non-existent.js\",\n    \"-l\"\n  ]);\n\n  expect(result.stdout).toMatchSnapshot();\n  expect(result.status).toEqual(1);\n});\n\ntest(\"multiple patterns with ignore nested directories pattern\", () => {\n  const result = runPrettier(\"cli/multiple-patterns\", [\n    \"**/*.js\",\n    \"!**/nested-directory/**\",\n    \"-l\"\n  ]);\n\n  expect(result.stdout).toMatchSnapshot();\n  expect(result.status).toEqual(1);\n});\n\ntest(\"multiple patterns by with ignore pattern, ignores node_modules by default\", () => {\n  const result = runPrettier(\"cli/multiple-patterns\", [\n    \"**/*.js\",\n    \"!directory/**\",\n    \"-l\"\n  ]);\n\n  expect(result.stdout).toMatchSnapshot();\n  expect(result.status).toEqual(1);\n});\n\ntest(\"multiple patterns by with ignore pattern, ignores node_modules by with ./**/*.js\", () => {\n  const result = runPrettier(\"cli/multiple-patterns\", [\n    \"./**/*.js\",\n    \"!./directory/**\",\n    \"-l\"\n  ]);\n\n  expect(result.stdout).toMatchSnapshot();\n  expect(result.status).toEqual(1);\n});\n\ntest(\"multiple patterns by with ignore pattern, doesn't ignore node_modules with --with-node-modules flag\", () => {\n  const result = runPrettier(\"cli/multiple-patterns\", [\n    \"**/*.js\",\n    \"!directory/**\",\n    \"-l\",\n    \"--with-node-modules\"\n  ]);\n\n  expect(result.stdout).toMatchSnapshot();\n  expect(result.status).toEqual(1);\n});\n\ntest(\"no errors on empty patterns\", () => {\n  const result = runPrettier(\"cli/multiple-patterns\");\n\n  expect(result.status).toEqual(0);\n});\n\ntest(\"multiple patterns, throw error and exit with non zero code on non existing files\", () => {\n  const result = runPrettier(\"cli/multiple-patterns\", [\n    \"non-existent.js\",\n    \"other-non-existent.js\",\n    \"-l\"\n  ]);\n\n  expect(result.stderr).toMatchSnapshot();\n  expect(result.status).toEqual(2);\n});\n"
  },
  {
    "path": "tests_integration/__tests__/parser-api.js",
    "content": "\"use strict\";\n\nconst prettier = require(\"../..\");\nconst runPrettier = require(\"../runPrettier\");\n\ntest(\"allows custom parser provided as object\", () => {\n  const output = prettier.format(\"1\", {\n    parser(text) {\n      expect(text).toEqual(\"1\");\n      return {\n        type: \"Literal\",\n        value: 2,\n        raw: \"2\"\n      };\n    }\n  });\n  expect(output).toEqual(\"2\");\n});\n\ntest(\"allows usage of prettier's supported parsers\", () => {\n  const output = prettier.format(\"foo ( )\", {\n    parser(text, parsers) {\n      expect(typeof parsers.babylon).toEqual(\"function\");\n      const ast = parsers.babylon(text);\n      ast.program.body[0].expression.callee.name = \"bar\";\n      return ast;\n    }\n  });\n  expect(output).toEqual(\"bar();\\n\");\n});\n\ntest(\"allows passing a string to resolve a parser\", () => {\n  const output = runPrettier(\"./custom-parsers/\", [\n    \"./custom-rename-input.js\",\n    \"--parser\",\n    \"./custom-rename-parser\"\n  ]);\n  expect(output.stdout).toMatchSnapshot();\n  expect(output.status).toEqual(0);\n});\n"
  },
  {
    "path": "tests_integration/__tests__/syntax-error.js",
    "content": "\"use strict\";\n\nconst runPrettier = require(\"../runPrettier\");\n\ntest(\"exits with non-zero code when input has a syntax error\", () => {\n  const result = runPrettier(\"cli/with-shebang\", [\"--stdin\"], {\n    input: \"a.2\"\n  });\n\n  expect(result.status).toEqual(2);\n});\n"
  },
  {
    "path": "tests_integration/__tests__/with-node-modules.js",
    "content": "\"use strict\";\n\nconst runPrettier = require(\"../runPrettier\");\n\ntest(\"ignores node_modules by default\", () => {\n  const result = runPrettier(\"cli/with-node-modules\", [\"**/*.js\", \"-l\"]);\n\n  expect(result.stdout).toMatchSnapshot();\n  expect(result.status).toEqual(1);\n});\n\ntest(\"ignores node_modules by with ./**/*.js\", () => {\n  const result = runPrettier(\"cli/with-node-modules\", [\"./**/*.js\", \"-l\"]);\n\n  expect(result.stdout).toMatchSnapshot();\n  expect(result.status).toEqual(1);\n});\n\ntest(\"doesn't ignore node_modules with --with-node-modules flag\", () => {\n  const result = runPrettier(\"cli/with-node-modules\", [\n    \"**/*.js\",\n    \"-l\",\n    \"--with-node-modules\"\n  ]);\n\n  expect(result.stdout).toMatchSnapshot();\n  expect(result.status).toEqual(1);\n});\n\ntest(\"ignores node_modules by default for file list\", () => {\n  const result = runPrettier(\"cli/with-node-modules\", [\n    \"node_modules/node-module.js\",\n    \"not_node_modules/file.js\",\n    \"regular-module.js\",\n    \"-l\"\n  ]);\n\n  expect(result.stdout).toMatchSnapshot();\n  expect(result.status).toEqual(1);\n});\n\ntest(\"doesn't ignore node_modules with --with-node-modules flag for file list\", () => {\n  const result = runPrettier(\"cli/with-node-modules\", [\n    \"node_modules/node-module.js\",\n    \"not_node_modules/file.js\",\n    \"regular-module.js\",\n    \"-l\",\n    \"--with-node-modules\"\n  ]);\n\n  expect(result.stdout).toMatchSnapshot();\n  expect(result.status).toEqual(1);\n});\n"
  },
  {
    "path": "tests_integration/__tests__/with-parser-inference.js",
    "content": "\"use strict\";\n\nconst runPrettier = require(\"../runPrettier\");\n\ntest(\"infers postcss parser\", () => {\n  const result = runPrettier(\"cli/with-parser-inference\", [\"*\"]);\n\n  expect(result.stdout).toMatchSnapshot();\n  expect(result.status).toEqual(0);\n});\n\ntest(\"infers postcss parser with --list-different\", () => {\n  const result = runPrettier(\"cli/with-parser-inference\", [\n    \"--list-different\",\n    \"*\"\n  ]);\n\n  expect(result.stdout).toMatchSnapshot();\n  expect(result.status).toEqual(0);\n});\n"
  },
  {
    "path": "tests_integration/__tests__/with-shebang.js",
    "content": "\"use strict\";\n\nconst runPrettier = require(\"../runPrettier\");\n\ntest(\"preserves shebang\", () => {\n  const result = runPrettier(\"cli/with-shebang\", [\"issue1890.js\"]);\n\n  expect(result.stdout).toMatchSnapshot();\n  expect(result.status).toEqual(0);\n});\n"
  },
  {
    "path": "tests_integration/cli/config/.prettierrc",
    "content": "semi: false\n\noverrides:\n- files: \"*.ts\"\n  options:\n    semi: true\n"
  },
  {
    "path": "tests_integration/cli/config/jest/.prettierrc",
    "content": "semi: false\n\noverrides:\n- files:\n  - \"*.test.js\"\n  - \"**/__best-tests__/*.js\"\n  options:\n    semi: true\n"
  },
  {
    "path": "tests_integration/cli/config/jest/Component.js",
    "content": "/* eslint-disable */\nconsole.log(\"should not have semi\")\n"
  },
  {
    "path": "tests_integration/cli/config/jest/Component.test.js",
    "content": "/* eslint-disable */\nconsole.log(\"should have semi\");\n"
  },
  {
    "path": "tests_integration/cli/config/jest/__best-tests__/file.js",
    "content": "/* eslint-disable */\nconsole.log(\"should have semi\");\n"
  },
  {
    "path": "tests_integration/cli/config/js/file.js",
    "content": "/* eslint-disable */\n\nfunction f() {\n  console.log(\"should have tab width 8\");\n}\n"
  },
  {
    "path": "tests_integration/cli/config/js/prettier.config.js",
    "content": "\"use strict\";\n\nmodule.exports = {\n  tabWidth: 8\n};\n"
  },
  {
    "path": "tests_integration/cli/config/no-config/file.js",
    "content": "/* eslint-disable */\n\nfunction f() {\n  console.log(\"should have no semicolons\");\n}\n"
  },
  {
    "path": "tests_integration/cli/config/no-config/file.ts",
    "content": "function g() {\n  console.log(\"should have semicolons because it has a .ts extension\");\n}\n"
  },
  {
    "path": "tests_integration/cli/config/package/file.js",
    "content": "/* eslint-disable */\n\nfunction f() {\n  console.log(\"should have tab width 3\");\n}\n"
  },
  {
    "path": "tests_integration/cli/config/package/file.ts",
    "content": "function g() {\n  console.log(\"should have tab width 5 because it has .ts extension\");\n}\n"
  },
  {
    "path": "tests_integration/cli/config/package/package.json",
    "content": "{\n  \"name\": \"my-package\",\n  \"version\": \"9000\",\n  \"prettier\": {\n    \"tabWidth\": 3,\n    \"overrides\": [\n      {\n        \"files\": \"*.ts\",\n        \"options\": {\n          \"tabWidth\": 5\n        }\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "tests_integration/cli/config/rc-json/.prettierrc",
    "content": "{\n    \"trailingComma\": \"all\",\n    \"singleQuote\": true\n}\n"
  },
  {
    "path": "tests_integration/cli/config/rc-json/file.js",
    "content": "/* eslint-disable */\n\nfunction f() {\n  console.log.apply(null, [\n    \"this file\",\n    \"should have trailing comma\",\n    \"and single quotes\",\n  ]);\n}\n"
  },
  {
    "path": "tests_integration/cli/ignore-path/.gitignore",
    "content": "other-regular-modules.js\n"
  },
  {
    "path": "tests_integration/cli/ignore-path/.prettierignore",
    "content": "regular-module.js\n"
  },
  {
    "path": "tests_integration/cli/ignore-path/regular-module.js",
    "content": "/* eslint-disable */\n'use strict';\n"
  },
  {
    "path": "tests_integration/cli/multiple-patterns/directory/file.js",
    "content": "/* eslint-disable */\n'use strict';\n"
  },
  {
    "path": "tests_integration/cli/multiple-patterns/directory/nested-directory/nested-directory-file.js",
    "content": "/* eslint-disable */\n'use strict';\n"
  },
  {
    "path": "tests_integration/cli/multiple-patterns/other-directory/file.js",
    "content": "/* eslint-disable */\n'use strict';\n"
  },
  {
    "path": "tests_integration/cli/multiple-patterns/other-directory/nested-directory/nested-directory-file.js",
    "content": "/* eslint-disable */\n'use strict';\n"
  },
  {
    "path": "tests_integration/cli/multiple-patterns/other-regular-modules.js",
    "content": "/* eslint-disable */\n'use strict';\n"
  },
  {
    "path": "tests_integration/cli/multiple-patterns/regular-module.js",
    "content": "/* eslint-disable */\n'use strict';\n"
  },
  {
    "path": "tests_integration/cli/with-node-modules/not_node_modules/file.js",
    "content": "/* eslint-disable */\n'use strict';\n"
  },
  {
    "path": "tests_integration/cli/with-node-modules/regular-module.js",
    "content": "/* eslint-disable */\n'use strict';\n"
  },
  {
    "path": "tests_integration/cli/with-parser-inference/javascript.js",
    "content": "/* JavaScript */\n\"use strict\";\n"
  },
  {
    "path": "tests_integration/cli/with-parser-inference/stylesheet.css",
    "content": "/* Stylesheet */\n* {\n  outline: none;\n}\n"
  },
  {
    "path": "tests_integration/cli/with-shebang/issue1890.js",
    "content": "#!/usr/bin/env node\n\"use strict\";\n"
  },
  {
    "path": "tests_integration/custom-parsers/custom-rename-input.js",
    "content": "/* eslint-disable */\nfoo ( )\n"
  },
  {
    "path": "tests_integration/custom-parsers/custom-rename-parser.js",
    "content": "\"use strict\";\n\nmodule.exports = function(text, parsers) {\n  const ast = parsers.babylon(text);\n  ast.program.body[0].expression.callee.name = \"bar\";\n  return ast;\n};\n"
  },
  {
    "path": "tests_integration/runPrettier.js",
    "content": "/*\n * runPrettier – spawns `prettier` process.\n * Adopted from Jest's integration tests suite.\n */\n\"use strict\";\n\nconst path = require(\"path\");\nconst spawnSync = require(\"cross-spawn\").sync;\n\nconst PRETTIER_PATH = path.resolve(__dirname, \"../bin/prettier.js\");\n\n// return the result of the spawned process:\n//  [ 'status', 'signal', 'output', 'pid', 'stdout', 'stderr',\n//    'envPairs', 'options', 'args', 'file' ]\nfunction runPrettier(dir, args, options, consoleLog) {\n  const isRelative = dir[0] !== \"/\";\n\n  if (isRelative) {\n    dir = path.resolve(__dirname, dir);\n  }\n\n  consoleLog && console.log('before spawnSync', dir, args, options);\n  const result = spawnSync(\n    'node',\n    [PRETTIER_PATH].concat(args || []),\n    Object.assign({}, options, { cwd: dir })\n  );\n\n  result.stdout = result.stdout && result.stdout.toString();\n  result.stderr = result.stderr && result.stderr.toString();\n\n  consoleLog && console.log('after spawnSync', {\n    status: result.status,\n    stdout: result.stdout,\n    stderr: result.stderr,\n    envPairsLength: result.envPairs.length,\n    options: {\n      cwd: result.options.cwd,\n      file: result.options.file,\n      args: result.options.args,\n      envPairsLength: result.options.envPairs.length,\n      stdio: result.options.stdio\n    },\n    args: result.args,\n    file: result.file,\n    error: result.error\n  });\n  return result;\n}\n\nmodule.exports = runPrettier;\n"
  },
  {
    "path": "website/.eslintrc.js",
    "content": "\"use strict\";\n\nmodule.exports = {\n  rules: {\n    \"import/no-extraneous-dependencies\": \"off\"\n  }\n};\n"
  },
  {
    "path": "website/README.md",
    "content": "\n## Configuration\nIn the project repo, the `docs` folder is used to hold documentation written in markdown. A `blog` folder can be used to hold blog posts written in markdown.\n\n### Document and Blog Front Matters\n\nDocumentation should contain front matter that follows this example:\n```\n---\nid: doc1 <!-- used for docs to find each other and to map links -->\ntitle: Document Title\nlayout: docs1 <!-- used to determine different sidebar groupings -->\ncategory: Sidebar Category 1 <!-- Category on the sidebar under which this doc goes -->\npermalink: docs/en/doc1.html <!-- link to the document that is used for site -->\nprevious: doc0 <!-- previous doc on sidebar for navigation -->\nnext: doc2 <!-- next doc on the sidebar for navigation -->\n<!-- don't include next if this is the last doc; don't include previous if first doc -->\n---\n```\n\nBlog posts should be written as markdown files with the following front matter:\n```\n---\ntitle: Blog Post Title\nauthor: Author Name\nauthorURL: http://twitter.com/author <!-- (or some other link) -->\nauthorFBID: 21315325 <!-- id to get author's picture -->\n---\n```\nIn the blog post you should include a line `<!--truncate-->`. This will determine under which point text will be ignored when generating the preview of your blog post. Blog posts should have the file name format: `yyyy-mm-dd-your-file-name.md`.\n\n### Language Configurations\n\nThe `examples` script will generate a `languages.js` file and `i18n` folder for translation support, but if you only wish to support English, then these are not needed.\n\n### Site Configurations\n\nConfigure the siteConfig.js file which has comments guiding you through what needs to be done and how each configuration affects your website.\n\nCustomize core/Footer.js which will serve as the footer for each page on your website.\n\nInclude your own top-level pages as React components in `pages/`. These components should just be the body sections of the pages you want, and they will be included with the header and footer that the rest of Docusaurus uses. Examples are provided for your reference. Currently, if you want to add other React components to your pages, you must include all of it inside that file due to how `require` paths are set-up. You may also include `.html` files directly, but this is not recommended, and these will just be served as is and will not have any of the header/footer/styles shared by the rest of Docusaurus.\n\nAll images and other static assets you wish to include should be placed inside the `static` folder. Any `.css` files provided in `static` will be concatenated to the standard styles provided by Docusaurus and used site-wide.\n\nFiles placed in `static/` will be accessible in the following way: `static/img/image.png` will be accessible at `img/image.png`.\n\n## Using Docusaurus\n\n### Run the Server\n\nTo run your website locally run the script:\n\n```\nyarn start\n```\n\nThis will start a server hosting your website locally at `localhost:3000`. This server will ignore any occurences `siteConfig.baseUrl` in URLs, e.g. `localhost:3000/your-site/index.html` will be the same as `localhost:3000/index.html`. Any changes to configured files will be reflected by refreshing the page, i.e. the server does not need to be restarted to show changes.\n\n\n### Build Static Pages\n\nTo create a static build of your website, run the script:\n\n```\nyarn build\n```\n\nThis will generate `.html` files from all of your docs and other pages included in `pages/`. This allows you to check whether or not all your files are being generated correctly. The build folder is inside Docusaurus's directory inside `node_modules`.\n\n### Publishing Your Website\n\nUse CircleCI to publish your website whenever your project repo is updated. Configure your circle.yml file in your project repo to run commands to publish to GitHub Pages. An example is shown here:\n\n```yaml\nmachine:\n  node:\n    version: 6.10.3\n  npm:\n    version: 3.10.10\n\ntest:\n  override:\n    - \"true\"\n\ndeployment:\n  website:\n    branch: master\n    commands:\n      - git config --global user.email \"test-site-bot@users.noreply.github.com\"\n      - git config --global user.name \"Website Deployment Script\"\n      - echo \"machine github.com login test-site-bot password $GITHUB_TOKEN\" > ~/.netrc\n      - cd website && npm install && GIT_USER=test-site-bot npm run publish-gh-pages\n```\n\nNote that in this case a GitHub user `test-site-bot` is created to use just for publishing. Make sure to give your Git user push permissions for your project and to set a GITHUB_TOKEN environment variable in Circle if you choose to publish this way.\n\nIf you wish to manually publish your website with the `publish-gh-pages` script, run the following example command with the appropriate variables for your project:\n\n```\nDEPLOY_USER=deltice GIT_USER=test-site-bot CIRCLE_PROJECT_USERNAME=deltice CIRCLE_PROJECT_REPONAME=test-site CIRCLE_BRANCH=master npm run publish-gh-pages\n```\n"
  },
  {
    "path": "website/core/Footer.js",
    "content": "\"use strict\";\n\nconst React = require(\"react\");\n\nconst GithubButton = props =>\n  <a\n    className=\"github-button\"\n    href={props.config.githubUrl}\n    data-icon=\"octicon-star\"\n    data-count-href={`/${props.config.repo}/stargazers`}\n    data-count-api={`/repos/${props.config.repo}#stargazers_count`}\n    data-count-aria-label=\"# stargazers on GitHub\"\n    aria-label=\"Star this project on GitHub\"\n  >\n    Star\n  </a>;\n\nGithubButton.propTypes = {\n  config: React.PropTypes.object\n};\n\nclass Footer extends React.Component {\n  url(path) {\n    return this.props.config.baseUrl + \"docs/\" + this.props.language + path;\n  }\n\n  render() {\n    // const currentYear = new Date().getFullYear();\n    return (\n      <footer className=\"nav-footer\" id=\"footer\">\n        <section className=\"sitemap\">\n          <a href={this.props.config.baseUrl} className=\"nav-home\">\n            <img\n              src={this.props.config.baseUrl + this.props.config.footerIcon}\n              alt={this.props.config.title}\n            />\n          </a>\n          <div>\n            <h5>Docs</h5>\n            <a href={this.url(\"/why-prettier.html\")}>Why Prettier?</a>\n            <a href={this.url(\"/usage.html\")}>Usage</a>\n            <a href={this.url(\"/options.html\")}>Options</a>\n            <a href={this.url(\"/editors.html\")}>Editor Integeration</a>\n          </div>\n          <div>\n            <h5>Community</h5>\n            <a href={this.url(\"/users/\")}>User Showcase</a>\n            <a\n              href=\"http://stackoverflow.com/questions/tagged/prettier\"\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n            >\n              Stack Overflow\n            </a>\n            <a href=\"https://gitter.im/jlongster/prettier\">Chat on Gitter</a>\n            {/*<a\n              href=\"https://twitter.com/\"\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n            >\n              Twitter\n            </a>*/}\n          </div>\n          <div>\n            <h5>More</h5>\n            {/*<a href={this.props.config.baseUrl + \"blog\"}>Blog</a>*/}\n            <a href={this.props.config.githubUrl}>GitHub</a>\n            <GithubButton config={this.props.config} />\n          </div>\n        </section>\n      </footer>\n    );\n  }\n}\n\nFooter.propTypes = {\n  language: React.PropTypes.string,\n  config: React.PropTypes.object\n};\n\nmodule.exports = Footer;\n"
  },
  {
    "path": "website/deploy.sh",
    "content": "#!/bin/bash\n\nif [ ! $GITHUB_TOKEN ]; then\n  >&2 echo \"error: GITHUB_TOKEN not present in env\"\n  exit 1\nfi\n\ngit config --global user.email \"prettier-bot@users.noreply.github.com\"\ngit config --global user.name \"Prettier Bot\"\necho \"machine github.com login prettier-bot password $GITHUB_TOKEN\" > ~/.netrc\n\ncd website\nexport GIT_USER=prettier-bot\nexport CIRCLE_BRANCH=$TRAVIS_BRANCH\nexport CIRCLE_PROJECT_USERNAME=prettier\nexport CIRCLE_PROJECT_REPONAME=prettier\nexport CI_PULL_REQUEST=$TRAVIS_PULL_REQUEST_BRANCH\nyarn --pure-lockfile && yarn run publish-gh-pages\n"
  },
  {
    "path": "website/editors.json",
    "content": "[\n    {\n        \"image\": \"/images/atom-128px.png\",\n        \"name\": \"Atom\",\n        \"content\": \"[`prettier-atom`](https://github.com/prettier/prettier-atom)\"\n    },\n    {\n        \"image\": \"/images/emacs-128px.png\",\n        \"name\": \"Emacs\",\n        \"content\": \"[`prettier-emacs`](https://github.com/prettier/prettier-emacs)\"\n    },\n    {\n        \"image\": \"/images/vim-128px.png\",\n        \"name\": \"vim\",\n        \"content\": \"[`neoformat`](https://github.com/sbdchd/neoformat), [`ale`](https://github.com/w0rp/ale), [`vim-prettier`](https://github.com/mitermayer/vim-prettier)\"\n    },\n    {\n        \"image\": \"/images/vscode-128px.png\",\n        \"name\": \"Visual Studio Code\",\n        \"content\": \"[`prettier-vscode`](https://github.com/esbenp/prettier-vscode)\"\n    },\n    {\n        \"image\": \"/images/visualstudio-128px.png\",\n        \"name\": \"Visual Studio\",\n        \"content\": \"[`JavaScriptPrettier`](https://github.com/madskristensen/JavaScriptPrettier)\"\n    },\n    {\n        \"image\": \"/images/sublimetext-128px.png\",\n        \"name\": \"Sublime Text\",\n        \"content\": \"[`JsPrettier`](https://packagecontrol.io/packages/JsPrettier)\"\n    },\n    {\n        \"image\": \"/images/webstorm-128px.png\",\n        \"name\": \"WebStorm\",\n        \"content\": \"[External Tool](https://github.com/prettier/prettier/blob/master/editors/webstorm/README.md)\"\n    }\n]\n"
  },
  {
    "path": "website/languages.json",
    "content": "[\n    {\n        \"name\": \"JavaScript\",\n        \"image\": \"/images/js-128px.png\",\n        \"variants\": [\n            \"[ES2017](https://github.com/tc39/proposals/blob/master/finished-proposals.md)\",\n            \"[JSX](https://facebook.github.io/jsx/)\",\n            \"[Flow](https://flow.org/)\",\n            \"[TypeScript](https://www.typescriptlang.org/)\",\n            \"[JSON](http://json.org/)\"\n        ]\n    },\n    {\n        \"name\": \"CSS\",\n        \"image\": \"/images/css-128px.png\",\n        \"variants\": [\n            \"CSS3+\",\n            \"[LESS](http://lesscss.org/)\",\n            \"[SCSS](http://sass-lang.com)\",\n            \"[styled-components](http://styled-components.com) 💅\",\n            \"[styled-jsx](http://npmjs.com/styled-jsx)\"\n        ]\n    },\n    {\n        \"name\": \"GraphQL\",\n        \"image\": \"/images/graphql-128px.png\",\n        \"variants\": [\n            \"[GraphQL](http://graphql.org/)\",\n            \"[GraphQL Schemas](http://graphql.org/learn/schema/)\"\n        ]\n    }\n]\n"
  },
  {
    "path": "website/package.json",
    "content": "{\n  \"scripts\": {\n    \"start\": \"docusaurus-start\",\n    \"build\": \"docusaurus-build\",\n    \"publish-gh-pages\": \"docusaurus-publish\"\n  },\n  \"devDependencies\": {\n    \"docusaurus\": \"^1.0.0-alpha.9\"\n  }\n}\n"
  },
  {
    "path": "website/pages/en/help/index.js",
    "content": "\"use strict\";\n\nconst React = require(\"react\");\n\nconst CompLibrary = require(\"../../../core/CompLibrary.js\");\nconst Container = CompLibrary.Container;\nconst GridBlock = CompLibrary.GridBlock;\n\n// const siteConfig = require(process.cwd() + \"/siteConfig.js\");\n\nclass Help extends React.Component {\n  render() {\n    const supportLinks = [\n      {\n        content:\n          \"Learn more using the [documentation on this site.](/docs/en/why-prettier.html)\\n\",\n        title: \"Browse Docs\"\n      },\n      {\n        content: \"Ask questions about the documentation and project\\n\",\n        title: \"Join the community\"\n      },\n      {\n        content: \"Find out what's new with this project\\n\",\n        title: \"Stay up to date\"\n      }\n    ];\n\n    return (\n      <div>\n        <div className=\"docMainWrapper wrapper\">\n          <Container className=\"mainContainer documentContainer postContainer\">\n            <div className=\"post\">\n              <header className=\"postHeader\">\n                <h2>Need help?</h2>\n              </header>\n              <p>This project is maintained by a dedicated group of people;</p>\n              <GridBlock contents={supportLinks} layout=\"threeColumn\" />\n            </div>\n          </Container>\n        </div>\n      </div>\n    );\n  }\n}\n\nHelp.defaultProps = {\n  language: \"en\"\n};\n\nmodule.exports = Help;\n"
  },
  {
    "path": "website/pages/en/index.js",
    "content": "\"use strict\";\n\nconst React = require(\"react\");\n\nconst CompLibrary = require(\"../../core/CompLibrary.js\");\n// const Marked = CompLibrary.Marked; /* Used to read markdown */\nconst Container = CompLibrary.Container;\nconst GridBlock = CompLibrary.GridBlock;\n\nconst siteConfig = require(process.cwd() + \"/siteConfig.js\");\n\nclass Button extends React.Component {\n  render() {\n    return (\n      <div className=\"pluginWrapper buttonWrapper\">\n        <a className=\"button\" href={this.props.href} target={this.props.target}>\n          {this.props.children}\n        </a>\n      </div>\n    );\n  }\n}\n\nButton.defaultProps = {\n  target: \"_self\"\n};\n\nButton.propTypes = {\n  href: React.PropTypes.string,\n  target: React.PropTypes.string,\n  children: React.PropTypes.any\n};\n\nclass HomeSplash extends React.Component {\n  render() {\n    return (\n      <div className=\"homeContainer\">\n        <div className=\"homeSplashFade\">\n          <div className=\"wrapper homeWrapper\">\n            <div className=\"projectLogo\">\n              <img src=\"/icon.png\" />\n            </div>\n            <div className=\"inner\">\n              <h2 className=\"projectTitle\">\n                {siteConfig.title}\n                <small>\n                  {siteConfig.tagline}\n                </small>\n              </h2>\n              <div className=\"section promoSection\">\n                <div className=\"promoRow\">\n                  <div className=\"pluginRowBlock\">\n                    <Button href=\"/playground/\">Try It Out</Button>\n                    <Button\n                      href={\"/docs/\" + this.props.language + \"/usage.html\"}\n                    >\n                      Get Started\n                    </Button>\n                    <Button\n                      href={\"/docs/\" + this.props.language + \"/options.html\"}\n                    >\n                      Options\n                    </Button>\n                  </div>\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n\nHomeSplash.propTypes = {\n  language: React.PropTypes.string\n};\n\nclass Index extends React.Component {\n  render() {\n    const language = this.props.language || \"en\";\n    const showcase = siteConfig.users\n      .filter(user => {\n        return user.pinned;\n      })\n      .map((user, i) => {\n        return (\n          <a key={i} href={user.infoLink}>\n            <img src={user.image} title={user.caption} />\n            <br />\n            {user.caption}\n          </a>\n        );\n      });\n\n    return (\n      <div>\n        <script src=\"redirect.js\" />\n        <HomeSplash language={language} />\n        <div className=\"mainContainer\">\n          <div\n            className=\"productShowcaseSection lightBackground paddingTop paddingBottom\"\n            style={{ textAlign: \"center\" }}\n          >\n            <h2 style={{ margin: 0 }}>Language Support</h2>\n            <Container>\n              <GridBlock\n                align=\"center\"\n                contents={siteConfig.supportedLanguages.map(language => ({\n                  title: language.name,\n                  image: language.image,\n                  imageAlign: \"top\",\n                  content: language.variants.join(\"\\n\\n\")\n                }))}\n                layout=\"fourColumn\"\n              />\n            </Container>\n          </div>\n\n          {/*<div\n            className=\"productShowcaseSection paddingBottom\"\n            style={{ textAlign: \"center\" }}\n          >\n            <h2>Feature Callout</h2>\n            <Marked>These are features of this project</Marked>\n          </div>*/}\n\n          <div className=\"productShowcaseSection paddingBottom\">\n            <h2>Editor Integration</h2>\n            <Container>\n              <GridBlock\n                align=\"center\"\n                contents={siteConfig.editors.map(editor => ({\n                  content: editor.content || \"\",\n                  image: editor.image,\n                  imageAlign: \"bottom\",\n                  title: editor.name\n                }))}\n                layout=\"fourColumn\"\n              />\n            </Container>\n\n            <p>Developed an integration?</p>\n            <a\n              href={`${siteConfig.githubUrl}/edit/master/website/editors.json`}\n              className=\"button\"\n            >\n              Add it here\n            </a>\n          </div>\n\n          {/*<Container padding={[\"bottom\", \"top\"]} background=\"dark\">\n            <GridBlock\n              contents={[\n                {\n                  content:\n                    \"This is another description of how this project is useful\",\n                  image: \"/prettier.png\",\n                  imageAlign: \"left\",\n                  title: \"Description\"\n                }\n              ]}\n            />\n          </Container>*/}\n\n          <div className=\"productShowcaseSection paddingTop paddingBottom lightBackground\">\n            <h2>\n              Who{\"'\"}s Using Prettier?\n            </h2>\n            <p>\n              A few of the{\" \"}\n              <a href=\"https://www.npmjs.com/browse/depended/prettier\">\n                many projects\n              </a>{\" \"}\n              using Prettier\n            </p>\n            <div className=\"logos\">\n              {showcase}\n            </div>\n            <div className=\"more-users\">\n              <a\n                className=\"button\"\n                href={siteConfig.baseUrl + language + \"/users/\"}\n                target=\"_self\"\n              >\n                More Prettier Users\n              </a>\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n\nIndex.propTypes = {\n  language: React.PropTypes.string\n};\n\nmodule.exports = Index;\n"
  },
  {
    "path": "website/pages/en/users/index.js",
    "content": "\"use strict\";\n\nconst React = require(\"react\");\n\nconst CompLibrary = require(\"../../../core/CompLibrary.js\");\nconst Container = CompLibrary.Container;\n\nconst siteConfig = require(process.cwd() + \"/siteConfig.js\");\n\nclass Users extends React.Component {\n  render() {\n    const showcase = siteConfig.users.map((user, i) => {\n      return (\n        <a key={i} href={user.infoLink}>\n          <img src={user.image} title={user.caption} />\n        </a>\n      );\n    });\n\n    return (\n      <div>\n        <div className=\"mainContainer\">\n          <Container padding={[\"bottom\", \"top\"]}>\n            <div className=\"showcaseSection\">\n              <div className=\"prose\">\n                <h1>\n                  Who{\"'\"}s Using This?\n                </h1>\n                <p>\n                  A few of the{\" \"}\n                  <a href=\"https://www.npmjs.com/browse/depended/prettier\">\n                    many projects\n                  </a>{\" \"}\n                  using Prettier\n                </p>\n              </div>\n              <div className=\"logos\">\n                {showcase}\n              </div>\n              <p>Are you using this project?</p>\n              <a\n                href={`${siteConfig.githubUrl}/edit/master/website/users.json`}\n                className=\"button\"\n              >\n                Add your company\n              </a>\n            </div>\n          </Container>\n        </div>\n      </div>\n    );\n  }\n}\n\nUsers.defaultProps = {\n  language: \"en\"\n};\n\nmodule.exports = Users;\n"
  },
  {
    "path": "website/pages/playground/index.html",
    "content": "<!doctype html>\n<html>\n<head>\n  <meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=no\">\n  <title>Prettier</title>\n\n  <link rel=\"manifest\" href=\"/manifest.json\">\n\n  <meta name=\"mobile-web-app-capable\" content=\"yes\">\n  <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n  <meta name=\"application-name\" content=\"Prettier\">\n  <meta name=\"apple-mobile-web-app-title\" content=\"Prettier\">\n  <meta name=\"theme-color\" content=\"#1A2B34\">\n  <meta name=\"msapplication-navbutton-color\" content=\"#1A2B34\">\n  <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\">\n  <meta name=\"msapplication-starturl\" content=\"/\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n\n  <link rel=\"icon\" href=\"/icon.png\">\n  <link rel=\"apple-touch-icon\" href=\"/icon.png\">\n\n  <link rel=\"stylesheet\" crossorigin  href=\"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.26.0/codemirror.css\">\n  <link rel=\"stylesheet\" crossorigin  href=\"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.26.0/theme/neat.css\">\n\n  <script src=\"/lib/prettier-version.js\"></script>\n  <script src=\"/playground.js\"></script>\n\n  <script src=\"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.26.0/codemirror.js\"></script>\n  <script src=\"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.26.0/mode/javascript/javascript.js\"></script>\n  <script src=\"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.26.0/addon/display/rulers.js\"></script>\n  <script src=\"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.26.0/addon/search/searchcursor.js\"></script>\n  <script src=\"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.26.0/addon/edit/matchbrackets.js\"></script>\n  <script src=\"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.26.0/addon/edit/closebrackets.js\"></script>\n  <script src=\"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.26.0/addon/comment/comment.js\"></script>\n  <script src=\"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.26.0/addon/wrap/hardwrap.js\"></script>\n  <script src=\"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.26.0/keymap/sublime.js\"></script>\n\n  <style type=\"text/css\">\n    html,\n    body {\n      font-family: \"Helvetica Neue\", \"Open Sans\", sans-serif;\n      font-size: 11.7px;\n      margin: 0;\n      padding: 0;\n      background-color: #FAFAFA;\n      color: #6A6A6A;\n    }\n\n    body {\n      display: flex;\n      flex-direction: column;\n      height: 100vh;\n    }\n\n    .options-summary {\n      font-size: 1.4em;\n      margin-top: 8px;\n      text-align: center;\n    }\n\n    header {\n      height: 30px;\n      padding: 10px 10px;\n      display: flex;\n      flex-flow: row nowrap;\n      position: relative;\n      text-align: left;\n      justify-content: space-between;\n      align-items: center;\n      background-color: #1A2B34;\n      color: #e0e0e0;\n    }\n\n    @media (max-width: 500px) {\n      .tagline {\n        display: none;\n      }\n    }\n\n    header a {\n      height: 34px;\n      display: flex;\n      text-decoration: none;\n    }\n\n    header a,\n    header a:visited {\n      color: #fff;\n    }\n\n    header a:focus,\n    header a:active,\n    header a:hover {\n      color: #fff;\n    }\n\n    .logo {\n      height: 100%;\n      margin-left: 10px;\n      margin-right: 10px;\n    }\n\n    header h2 {\n      display: block;\n      font-family: \"Helvetica Neue\", Arial, sans-serif;\n      font-weight: 400;\n      line-height: 8px;\n      position: relative;\n      z-index: 9999;\n    }\n\n    .links {\n      font-size: 1.3em;\n      margin-right: 30px;\n    }\n\n    textarea.loading {\n      opacity: 0;\n    }\n\n    .editors-container {\n      display: flex;\n      flex-grow: 1;\n    }\n\n    .editors {\n      display: flex;\n      flex-flow: row wrap;\n      flex: 1;\n    }\n\n    .editor {\n      display: flex;\n      flex: 1;\n      flex-basis: 100%;\n      position: relative;\n      border-top: 1px solid #1A2B34;\n    }\n\n    /* display as 2x2 grid */\n    @media (min-width: 800px) {\n      .editor {\n        flex-basis: 50%;\n      }\n    }\n\n    /* display as four columns */\n    @media (min-width: 1200px) {\n      .editor {\n        flex-basis: 25%;\n      }\n    }\n\n    .arrow {\n      align-self: center;\n      font-size: 1.2em;\n    }\n\n    .CodeMirror {\n      height: auto;\n      position: absolute;\n      top: 0;\n      left: 0;\n      right: 0;\n      bottom: 0;\n      font-family: Menlo, monospace;\n      font-size: 11.05px;\n      line-height: 17.68px;\n    }\n\n    .options-container {\n      display: flex;\n      flex-flow: row wrap;\n      justify-content: space-around;\n    }\n\n    .options {\n      padding: 0 10px;\n      display: flex;\n      flex-flow: column wrap;\n      flex-grow: 1;\n      justify-content: space-around;\n      margin: 5px;\n      margin-bottom: 0;\n      min-width: 150px;\n    }\n\n    label {\n      font-family: \"Consolas\", \"Courier New\", Courier, monospace;\n      margin: 0 10px;\n    }\n\n    @media (max-width: 408px) {\n      label {\n        padding: 8px;\n      }\n      .options-container {\n        flex-direction: column-reverse;\n      }\n      .options.last {\n        flex-direction: column-reverse;\n      }\n    }\n\n    input[type=\"number\"] {\n      max-width: 40px;\n    }\n\n    footer {\n      text-align: center;\n    }\n  </style>\n</head>\n\n<body>\n  <header>\n    <a href=\"/\">\n      <img class=\"logo\" src=\"/icon.png\">\n      <h2>Prettier</h2>\n    </a>\n\n    <span class=\"links\">\n      <a\n        class=\"github-button\"\n        href=\"https://github.com/prettier/prettier\"\n        data-show-count=\"true\"\n        aria-label=\"Star prettier on GitHub\">\n        GitHub\n      </a>\n    </span>\n  </header>\n\n  <section class=\"editors-container\">\n    <div class=\"editors\">\n      <div class=\"editor input\">\n        <textarea class=\"loading\" id=\"input-editor\"></textarea>\n      </div>\n      <div class=\"editor ast\">\n        <textarea class=\"loading\" id=\"ast-editor\"></textarea>\n      </div>\n      <div class=\"editor doc\">\n        <textarea class=\"loading\" id=\"doc-editor\"></textarea>\n      </div>\n      <div class=\"editor output\">\n        <textarea class=\"loading\" id=\"output-editor\"></textarea>\n      </div>\n    </div>\n  </section>\n\n  <section>\n    <details>\n      <summary class=\"options-summary\">Options</summary>\n\n      <div class=\"options-container\">\n        <div class=\"options\">\n          <label>--print-width <input type=\"number\" value=\"80\" min=\"0\" id=\"printWidth\"></input> </label>\n          <label>--tab-width <input type=\"number\" min=\"0\" value=\"2\" id=\"tabWidth\"></input> </label>\n        </div>\n        <div class=\"options\">\n          <label><input type=\"checkbox\" id=\"useTabs\"></input> --use-tabs</label>\n          <label><input type=\"checkbox\" data-inverted id=\"semi\"></input> --no-semi</label>\n          <label><input type=\"checkbox\" id=\"singleQuote\"></input> --single-quote</label>\n          <label><input type=\"checkbox\" data-inverted id=\"bracketSpacing\"></input> --no-bracket-spacing</label>\n          <label><input type=\"checkbox\" id=\"jsxBracketSameLine\"></input> --jsx-bracket-same-line</label>\n        </div>\n        <div class=\"options last\">\n          <label>--trailing-comma <select id=\"trailingComma\"><option value=\"none\">none</option><option value=\"es5\">es5</option><option value=\"all\">all</option></select></label>\n          <label>--parser <select id=\"parser\"><option value=\"babylon\">babylon</option><option value=\"flow\">flow</option><option value=\"typescript\">typescript</option><option value=\"postcss\">postcss</option><option value=\"json\">json</option><option value=\"graphql\">graphql</option></select></label>\n          <span style=\"flex: 0.3\"></span>\n          <label><input type=\"checkbox\" id=\"ast\"></input> show AST (debug)</label>\n          <label><input type=\"checkbox\" id=\"doc\"></input> show doc (debug)</label>\n        </div>\n      </div>\n    </details>\n  </section>\n\n  <footer>\n    <p class=\"version-link\">\n      <a href=\"https://github.com/prettier/prettier\">\n        prettier version\n        <span class=\"version\"></span>\n        (master)\n      </a>\n    </p>\n  </footer>\n\n  <script src=\"/install-service-worker.js\"></script>\n\n  <script async defer src=\"https://buttons.github.io/buttons.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "website/siteConfig.js",
    "content": "\"use strict\";\n\nconst fs = require(\"fs\");\n\nconst PACKAGE = require(\"../package\");\nconst GITHUB_URL = `https://github.com/${PACKAGE.repository}`;\n\nconst users = require(\"./users\");\nconst editors = require(\"./editors\");\nconst supportedLanguages = require(\"./languages\");\n\nconst siteConfig = {\n  title: \"Prettier\",\n  githubUrl: GITHUB_URL,\n  url: PACKAGE.homepage,\n  baseUrl: \"/\",\n  projectName: PACKAGE.name,\n  repo: PACKAGE.repository,\n  users,\n  editors,\n  supportedLanguages,\n  /* base url for editing docs, usage example: editUrl + 'en/doc1.md' */\n  editUrl: `${GITHUB_URL}/edit/master/docs/`,\n  /* header links for links on this site, 'LANGUAGE' will be replaced by whatever\n     language the page is for, ex: 'en' */\n  headerLinksInternal: [\n    {\n      section: \"docs\",\n      href: \"/docs/LANGUAGE/why-prettier.html\",\n      text: \"Docs\"\n    },\n    // { section: \"help\", href: \"/LANGUAGE/help/\", text: \"Help\" },\n    // {section: 'blog', href: '/test-site/blog', text: 'Blog'},\n    {\n      section: \"playground\",\n      href: \"/playground/\",\n      text: \"Playground\"\n    }\n  ],\n  /* header links for links outside the site */\n  headerLinksExternal: [\n    {\n      section: \"github\",\n      href: GITHUB_URL,\n      text: \"GitHub\"\n    }\n  ],\n  /* path to images for header/footer */\n  headerIcon: \"icon.png\",\n  footerIcon: \"icon.png\",\n  favicon: \"icon.png\",\n  /* default link for docsSidebar */\n  docsSidebarDefaults: {\n    layout: \"docs\",\n    root: \"/docs/en/why-prettier.html\",\n    title: \"Docs\"\n  },\n  /* colors for website */\n  colors: {\n    primaryColor: \"#1A2B34\",\n    secondaryColor: \"#808080\",\n    prismColor:\n      \"rgba(26, 43, 52, 0.03)\" /* primaryColor in rgba form, with 0.03 alpha */\n  },\n  tagline: \"Opinionated Code Formatter\"\n};\n\nlet languages;\nif (fs.existsSync(\"./languages.js\")) {\n  languages = require(\"./languages.js\");\n  siteConfig[\"en\"] = require(\"./i18n/en.js\");\n} else {\n  languages = [\n    {\n      enabled: true,\n      name: \"English\",\n      tag: \"en\"\n    }\n  ];\n}\n\nconst enabledLanguages = languages.filter(lang => lang.enabled);\n\nsiteConfig.languages = enabledLanguages;\n\n/* INJECT LOCALIZED FILES BEGIN */\n/* INJECT LOCALIZED FILES END */\n\nmodule.exports = siteConfig;\n"
  },
  {
    "path": "website/static/CNAME",
    "content": "prettier.io\n"
  },
  {
    "path": "website/static/install-service-worker.js",
    "content": "\"use strict\";\n\n/* eslint-env browser */\n\nif (\"serviceWorker\" in navigator) {\n  navigator.serviceWorker.register(\"/service-worker.js\", {\n    scope: \"/playground/\"\n  });\n}\n"
  },
  {
    "path": "website/static/lib/index.js",
    "content": "'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;};function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return call&&(typeof call===\"object\"||typeof call===\"function\")?call:self;}function _inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function, not \"+typeof superClass);}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass;}function _interopDefault(ex){return ex&&(typeof ex==='undefined'?'undefined':_typeof(ex))==='object'&&'default'in ex?ex['default']:ex;}var require$$0=_interopDefault(require('assert'));var require$$0$1=_interopDefault(require('path'));var os=_interopDefault(require('os'));var fs=_interopDefault(require('fs'));var util=_interopDefault(require('util'));var module$1=_interopDefault(require('module'));var index$2=function index$2(x){if(typeof x!=='string'){throw new TypeError('Expected a string, got '+(typeof x==='undefined'?'undefined':_typeof(x)));}// Catches EFBBBF (UTF-8 BOM) because the buffer-to-string\n// conversion translates it to FEFF (UTF-16 BOM)\nif(x.charCodeAt(0)===0xFEFF){return x.slice(1);}return x;};function assertDoc(val){if(!(typeof val===\"string\"||val!=null&&typeof val.type===\"string\")){throw new Error(\"Value \"+JSON.stringify(val)+\" is not a valid document\");}}function concat$1(parts){parts.forEach(assertDoc);// We cannot do this until we change `printJSXElement` to not\n// access the internals of a document directly.\n// if(parts.length === 1) {\n//   // If it's a single document, no need to concat it.\n//   return parts[0];\n// }\nreturn{type:\"concat\",parts:parts};}function indent$1(contents){assertDoc(contents);return{type:\"indent\",contents:contents};}function align(n,contents){assertDoc(contents);return{type:\"align\",contents:contents,n:n};}function group(contents,opts){opts=opts||{};assertDoc(contents);return{type:\"group\",contents:contents,break:!!opts.shouldBreak,expandedStates:opts.expandedStates};}function conditionalGroup(states,opts){return group(states[0],Object.assign(opts||{},{expandedStates:states}));}function fill(parts){parts.forEach(assertDoc);return{type:\"fill\",parts:parts};}function ifBreak(breakContents,flatContents){if(breakContents){assertDoc(breakContents);}if(flatContents){assertDoc(flatContents);}return{type:\"if-break\",breakContents:breakContents,flatContents:flatContents};}function lineSuffix$1(contents){assertDoc(contents);return{type:\"line-suffix\",contents:contents};}var lineSuffixBoundary={type:\"line-suffix-boundary\"};var breakParent$1={type:\"break-parent\"};var line={type:\"line\"};var softline={type:\"line\",soft:true};var hardline$1=concat$1([{type:\"line\",hard:true},breakParent$1]);var literalline=concat$1([{type:\"line\",hard:true,literal:true},breakParent$1]);var cursor$1={type:\"cursor\",placeholder:Symbol(\"cursor\")};function join$1(sep,arr){var res=[];for(var _i2=0;_i2<arr.length;_i2++){if(_i2!==0){res.push(sep);}res.push(arr[_i2]);}return concat$1(res);}function addAlignmentToDoc(doc,size,tabWidth){var aligned=doc;if(size>0){// Use indent to add tabs for all the levels of tabs we need\nfor(var _i3=0;_i3<Math.floor(size/tabWidth);++_i3){aligned=indent$1(aligned);}// Use align for all the spaces that are needed\naligned=align(size%tabWidth,aligned);// size is absolute from 0 and not relative to the current\n// indentation, so we use -Infinity to reset the indentation to 0\naligned=align(-Infinity,aligned);}return aligned;}var docBuilders$1={concat:concat$1,join:join$1,line:line,softline:softline,hardline:hardline$1,literalline:literalline,group:group,conditionalGroup:conditionalGroup,fill:fill,lineSuffix:lineSuffix$1,lineSuffixBoundary:lineSuffixBoundary,cursor:cursor$1,breakParent:breakParent$1,ifBreak:ifBreak,indent:indent$1,align:align,addAlignmentToDoc:addAlignmentToDoc};function isExportDeclaration(node){if(node){switch(node.type){case\"ExportDefaultDeclaration\":case\"ExportDefaultSpecifier\":case\"DeclareExportDeclaration\":case\"ExportNamedDeclaration\":case\"ExportAllDeclaration\":return true;}}return false;}function getParentExportDeclaration(path){var parentNode=path.getParentNode();if(path.getName()===\"declaration\"&&isExportDeclaration(parentNode)){return parentNode;}return null;}function getPenultimate(arr){if(arr.length>1){return arr[arr.length-2];}return null;}function getLast(arr){if(arr.length>0){return arr[arr.length-1];}return null;}function skip(chars){return function(text,index,opts){var backwards=opts&&opts.backwards;// Allow `skip` functions to be threaded together without having\n// to check for failures (did someone say monads?).\nif(index===false){return false;}var length=text.length;var cursor=index;while(cursor>=0&&cursor<length){var c=text.charAt(cursor);if(chars instanceof RegExp){if(!chars.test(c)){return cursor;}}else if(chars.indexOf(c)===-1){return cursor;}backwards?cursor--:cursor++;}if(cursor===-1||cursor===length){// If we reached the beginning or end of the file, return the\n// out-of-bounds cursor. It's up to the caller to handle this\n// correctly. We don't want to indicate `false` though if it\n// actually skipped valid characters.\nreturn cursor;}return false;};}var skipWhitespace=skip(/\\s/);var skipSpaces=skip(\" \\t\");var skipToLineEnd=skip(\",; \\t\");var skipEverythingButNewLine=skip(/[^\\r\\n]/);function skipInlineComment(text,index){if(index===false){return false;}if(text.charAt(index)===\"/\"&&text.charAt(index+1)===\"*\"){for(var _i4=index+2;_i4<text.length;++_i4){if(text.charAt(_i4)===\"*\"&&text.charAt(_i4+1)===\"/\"){return _i4+2;}}}return index;}function skipTrailingComment(text,index){if(index===false){return false;}if(text.charAt(index)===\"/\"&&text.charAt(index+1)===\"/\"){return skipEverythingButNewLine(text,index);}return index;}// This one doesn't use the above helper function because it wants to\n// test \\r\\n in order and `skip` doesn't support ordering and we only\n// want to skip one newline. It's simple to implement.\nfunction skipNewline(text,index,opts){var backwards=opts&&opts.backwards;if(index===false){return false;}var atIndex=text.charAt(index);if(backwards){if(text.charAt(index-1)===\"\\r\"&&atIndex===\"\\n\"){return index-2;}if(atIndex===\"\\n\"||atIndex===\"\\r\"||atIndex==='\\u2028'||atIndex==='\\u2029'){return index-1;}}else{if(atIndex===\"\\r\"&&text.charAt(index+1)===\"\\n\"){return index+2;}if(atIndex===\"\\n\"||atIndex===\"\\r\"||atIndex==='\\u2028'||atIndex==='\\u2029'){return index+1;}}return index;}function hasNewline(text,index,opts){opts=opts||{};var idx=skipSpaces(text,opts.backwards?index-1:index,opts);var idx2=skipNewline(text,idx,opts);return idx!==idx2;}function hasNewlineInRange(text,start,end){for(var _i5=start;_i5<end;++_i5){if(text.charAt(_i5)===\"\\n\"){return true;}}return false;}// Note: this function doesn't ignore leading comments unlike isNextLineEmpty\nfunction isPreviousLineEmpty(text,node){var idx=locStart$1(node)-1;idx=skipSpaces(text,idx,{backwards:true});idx=skipNewline(text,idx,{backwards:true});idx=skipSpaces(text,idx,{backwards:true});var idx2=skipNewline(text,idx,{backwards:true});return idx!==idx2;}function isNextLineEmpty(text,node){var oldIdx=null;var idx=locEnd$1(node);while(idx!==oldIdx){// We need to skip all the potential trailing inline comments\noldIdx=idx;idx=skipToLineEnd(text,idx);idx=skipInlineComment(text,idx);idx=skipSpaces(text,idx);}idx=skipTrailingComment(text,idx);idx=skipNewline(text,idx);return hasNewline(text,idx);}function getNextNonSpaceNonCommentCharacter$1(text,node){var oldIdx=null;var idx=locEnd$1(node);while(idx!==oldIdx){oldIdx=idx;idx=skipSpaces(text,idx);idx=skipInlineComment(text,idx);idx=skipTrailingComment(text,idx);idx=skipNewline(text,idx);}return text.charAt(idx);}function hasSpaces(text,index,opts){opts=opts||{};var idx=skipSpaces(text,opts.backwards?index-1:index,opts);return idx!==index;}function locStart$1(node){// Handle nodes with decorators. They should start at the first decorator\nif(node.declaration&&node.declaration.decorators&&node.declaration.decorators.length>0){return locStart$1(node.declaration.decorators[0]);}if(node.decorators&&node.decorators.length>0){return locStart$1(node.decorators[0]);}if(node.__location){return node.__location.startOffset;}if(node.range){return node.range[0];}if(typeof node.start===\"number\"){return node.start;}if(node.source){return lineColumnToIndex(node.source.start,node.source.input.css)-1;}if(node.loc){return node.loc.start;}}function locEnd$1(node){var endNode=node.nodes&&getLast(node.nodes);if(endNode&&node.source&&!node.source.end){node=endNode;}var loc=void 0;if(node.range){loc=node.range[1];}else if(typeof node.end===\"number\"){loc=node.end;}else if(node.source){loc=lineColumnToIndex(node.source.end,node.source.input.css);}if(node.__location){return node.__location.endOffset;}if(node.typeAnnotation){return Math.max(loc,locEnd$1(node.typeAnnotation));}if(node.loc&&!loc){return node.loc.end;}return loc;}// Super inefficient, needs to be cached.\nfunction lineColumnToIndex(lineColumn,text){var index=0;for(var _i6=0;_i6<lineColumn.line-1;++_i6){index=text.indexOf(\"\\n\",index)+1;if(index===-1){return-1;}}return index+lineColumn.column;}function setLocStart(node,index){if(node.range){node.range[0]=index;}else{node.start=index;}}function setLocEnd(node,index){if(node.range){node.range[1]=index;}else{node.end=index;}}var PRECEDENCE={};[[\"||\"],[\"&&\"],[\"|\"],[\"^\"],[\"&\"],[\"==\",\"===\",\"!=\",\"!==\"],[\"<\",\">\",\"<=\",\">=\",\"in\",\"instanceof\"],[\">>\",\"<<\",\">>>\"],[\"+\",\"-\"],[\"*\",\"/\",\"%\"],[\"**\"]].forEach(function(tier,i){tier.forEach(function(op){PRECEDENCE[op]=i;});});function getPrecedence(op){return PRECEDENCE[op];}var equalityOperators={\"==\":true,\"!=\":true,\"===\":true,\"!==\":true};var multiplicativeOperators={\"*\":true,\"/\":true,\"%\":true};var bitshiftOperators={\">>\":true,\">>>\":true,\"<<\":true};function shouldFlatten(parentOp,nodeOp){if(getPrecedence(nodeOp)!==getPrecedence(parentOp)){return false;}// ** is right-associative\n// x ** y ** z --> x ** (y ** z)\nif(parentOp===\"**\"){return false;}// x == y == z --> (x == y) == z\nif(equalityOperators[parentOp]&&equalityOperators[nodeOp]){return false;}// x * y % z --> (x * y) % z\nif(nodeOp===\"%\"&&multiplicativeOperators[parentOp]||parentOp===\"%\"&&multiplicativeOperators[nodeOp]){return false;}// x << y << z --> (x << y) << z\nif(bitshiftOperators[parentOp]&&bitshiftOperators[nodeOp]){return false;}return true;}function isBitwiseOperator(operator){return!!bitshiftOperators[operator]||operator===\"|\"||operator===\"^\"||operator===\"&\";}// Tests if an expression starts with `{`, or (if forbidFunctionAndClass holds) `function` or `class`.\n// Will be overzealous if there's already necessary grouping parentheses.\nfunction startsWithNoLookaheadToken(node,forbidFunctionAndClass){node=getLeftMost(node);switch(node.type){// Hack. Remove after https://github.com/eslint/typescript-eslint-parser/issues/331\ncase\"ObjectPattern\":return!forbidFunctionAndClass;case\"FunctionExpression\":case\"ClassExpression\":return forbidFunctionAndClass;case\"ObjectExpression\":return true;case\"MemberExpression\":return startsWithNoLookaheadToken(node.object,forbidFunctionAndClass);case\"TaggedTemplateExpression\":if(node.tag.type===\"FunctionExpression\"){// IIFEs are always already parenthesized\nreturn false;}return startsWithNoLookaheadToken(node.tag,forbidFunctionAndClass);case\"CallExpression\":if(node.callee.type===\"FunctionExpression\"){// IIFEs are always already parenthesized\nreturn false;}return startsWithNoLookaheadToken(node.callee,forbidFunctionAndClass);case\"ConditionalExpression\":return startsWithNoLookaheadToken(node.test,forbidFunctionAndClass);case\"UpdateExpression\":return!node.prefix&&startsWithNoLookaheadToken(node.argument,forbidFunctionAndClass);case\"BindExpression\":return node.object&&startsWithNoLookaheadToken(node.object,forbidFunctionAndClass);case\"SequenceExpression\":return startsWithNoLookaheadToken(node.expressions[0],forbidFunctionAndClass);case\"TSAsExpression\":return startsWithNoLookaheadToken(node.expression,forbidFunctionAndClass);default:return false;}}function getLeftMost(node){if(node.left){return getLeftMost(node.left);}return node;}function hasBlockComments(node){return node.comments&&node.comments.some(isBlockComment);}function isBlockComment(comment){return comment.type===\"Block\"||comment.type===\"CommentBlock\";}function getAlignmentSize(value,tabWidth,startIndex){startIndex=startIndex||0;var size=0;for(var _i7=startIndex;_i7<value.length;++_i7){if(value[_i7]===\"\\t\"){// Tabs behave in a way that they are aligned to the nearest\n// multiple of tabWidth:\n// 0 -> 4, 1 -> 4, 2 -> 4, 3 -> 4\n// 4 -> 8, 5 -> 8, 6 -> 8, 7 -> 8 ...\nsize=size+tabWidth-size%tabWidth;}else{size++;}}return size;}var util$3={getPrecedence:getPrecedence,shouldFlatten:shouldFlatten,isBitwiseOperator:isBitwiseOperator,isExportDeclaration:isExportDeclaration,getParentExportDeclaration:getParentExportDeclaration,getPenultimate:getPenultimate,getLast:getLast,getNextNonSpaceNonCommentCharacter:getNextNonSpaceNonCommentCharacter$1,skipWhitespace:skipWhitespace,skipSpaces:skipSpaces,skipNewline:skipNewline,isNextLineEmpty:isNextLineEmpty,isPreviousLineEmpty:isPreviousLineEmpty,hasNewline:hasNewline,hasNewlineInRange:hasNewlineInRange,hasSpaces:hasSpaces,locStart:locStart$1,locEnd:locEnd$1,setLocStart:setLocStart,setLocEnd:setLocEnd,startsWithNoLookaheadToken:startsWithNoLookaheadToken,hasBlockComments:hasBlockComments,isBlockComment:isBlockComment,getAlignmentSize:getAlignmentSize};var assert=require$$0;var docBuilders=docBuilders$1;var concat=docBuilders.concat;var hardline=docBuilders.hardline;var breakParent=docBuilders.breakParent;var indent=docBuilders.indent;var lineSuffix=docBuilders.lineSuffix;var join=docBuilders.join;var cursor=docBuilders.cursor;var util$2=util$3;var childNodesCacheKey=Symbol(\"child-nodes\");var locStart=util$2.locStart;var locEnd=util$2.locEnd;var getNextNonSpaceNonCommentCharacter=util$2.getNextNonSpaceNonCommentCharacter;function getSortedChildNodes(node,text,resultArray){if(!node){return;}if(resultArray){if(node&&(node.type&&node.type!==\"CommentBlock\"&&node.type!==\"CommentLine\"&&node.type!==\"Line\"&&node.type!==\"Block\"&&node.type!==\"EmptyStatement\"&&node.type!==\"TemplateElement\"||node.kind&&node.kind!==\"Comment\")){// This reverse insertion sort almost always takes constant\n// time because we almost always (maybe always?) append the\n// nodes in order anyway.\nvar _i8=void 0;for(_i8=resultArray.length-1;_i8>=0;--_i8){if(locStart(resultArray[_i8])<=locStart(node)&&locEnd(resultArray[_i8])<=locEnd(node)){break;}}resultArray.splice(_i8+1,0,node);return;}}else if(node[childNodesCacheKey]){return node[childNodesCacheKey];}var names=void 0;if(node&&(typeof node==='undefined'?'undefined':_typeof(node))===\"object\"){names=Object.keys(node).filter(function(n){return n!==\"enclosingNode\"&&n!==\"precedingNode\"&&n!==\"followingNode\";});}else{return;}if(!resultArray){Object.defineProperty(node,childNodesCacheKey,{value:resultArray=[],enumerable:false});}for(var _i9=0,nameCount=names.length;_i9<nameCount;++_i9){getSortedChildNodes(node[names[_i9]],text,resultArray);}return resultArray;}// As efficiently as possible, decorate the comment object with\n// .precedingNode, .enclosingNode, and/or .followingNode properties, at\n// least one of which is guaranteed to be defined.\nfunction decorateComment(node,comment,text){var childNodes=getSortedChildNodes(node,text);var precedingNode=void 0;var followingNode=void 0;// Time to dust off the old binary search robes and wizard hat.\nvar left=0;var right=childNodes.length;while(left<right){var middle=left+right>>1;var child=childNodes[middle];if(locStart(child)-locStart(comment)<=0&&locEnd(comment)-locEnd(child)<=0){// The comment is completely contained by this child node.\ncomment.enclosingNode=child;decorateComment(child,comment,text);return;// Abandon the binary search at this level.\n}if(locEnd(child)-locStart(comment)<=0){// This child node falls completely before the comment.\n// Because we will never consider this node or any nodes\n// before it again, this node must be the closest preceding\n// node we have encountered so far.\nprecedingNode=child;left=middle+1;continue;}if(locEnd(comment)-locStart(child)<=0){// This child node falls completely after the comment.\n// Because we will never consider this node or any nodes after\n// it again, this node must be the closest following node we\n// have encountered so far.\nfollowingNode=child;right=middle;continue;}throw new Error(\"Comment location overlaps with node location\");}// We don't want comments inside of different expressions inside of the same\n// template literal to move to another expression.\nif(comment.enclosingNode&&comment.enclosingNode.type===\"TemplateLiteral\"){var quasis=comment.enclosingNode.quasis;var commentIndex=findExpressionIndexForComment(quasis,comment);if(precedingNode&&findExpressionIndexForComment(quasis,precedingNode)!==commentIndex){precedingNode=null;}if(followingNode&&findExpressionIndexForComment(quasis,followingNode)!==commentIndex){followingNode=null;}}if(precedingNode){comment.precedingNode=precedingNode;}if(followingNode){comment.followingNode=followingNode;}}function attach(comments,ast,text){if(!Array.isArray(comments)){return;}var tiesToBreak=[];comments.forEach(function(comment,i){decorateComment(ast,comment,text);var precedingNode=comment.precedingNode;var enclosingNode=comment.enclosingNode;var followingNode=comment.followingNode;var isLastComment=comments.length-1===i;if(util$2.hasNewline(text,locStart(comment),{backwards:true})){// If a comment exists on its own line, prefer a leading comment.\n// We also need to check if it's the first line of the file.\nif(handleLastFunctionArgComments(text,precedingNode,enclosingNode,followingNode,comment)||handleMemberExpressionComments(enclosingNode,followingNode,comment)||handleIfStatementComments(text,precedingNode,enclosingNode,followingNode,comment)||handleTryStatementComments(enclosingNode,followingNode,comment)||handleClassComments(enclosingNode,comment)||handleImportSpecifierComments(enclosingNode,comment)||handleObjectPropertyComments(enclosingNode,comment)||handleForComments(enclosingNode,precedingNode,comment)||handleUnionTypeComments(precedingNode,enclosingNode,followingNode,comment)||handleOnlyComments(enclosingNode,ast,comment,isLastComment)||handleImportDeclarationComments(text,enclosingNode,precedingNode,comment)||handleAssignmentPatternComments(enclosingNode,comment)){// We're good\n}else if(followingNode){// Always a leading comment.\naddLeadingComment(followingNode,comment);}else if(precedingNode){addTrailingComment(precedingNode,comment);}else if(enclosingNode){addDanglingComment(enclosingNode,comment);}else{// There are no nodes, let's attach it to the root of the ast\naddDanglingComment(ast,comment);}}else if(util$2.hasNewline(text,locEnd(comment))){if(handleLastFunctionArgComments(text,precedingNode,enclosingNode,followingNode,comment)||handleConditionalExpressionComments(enclosingNode,precedingNode,followingNode,comment,text)||handleImportSpecifierComments(enclosingNode,comment)||handleIfStatementComments(text,precedingNode,enclosingNode,followingNode,comment)||handleClassComments(enclosingNode,comment)||handleLabeledStatementComments(enclosingNode,comment)||handleCallExpressionComments(precedingNode,enclosingNode,comment)||handlePropertyComments(enclosingNode,comment)||handleExportNamedDeclarationComments(enclosingNode,comment)||handleOnlyComments(enclosingNode,ast,comment,isLastComment)||handleClassMethodComments(enclosingNode,comment)||handleTypeAliasComments(enclosingNode,followingNode,comment)||handleVariableDeclaratorComments(enclosingNode,followingNode,comment)){// We're good\n}else if(precedingNode){// There is content before this comment on the same line, but\n// none after it, so prefer a trailing comment of the previous node.\naddTrailingComment(precedingNode,comment);}else if(followingNode){addLeadingComment(followingNode,comment);}else if(enclosingNode){addDanglingComment(enclosingNode,comment);}else{// There are no nodes, let's attach it to the root of the ast\naddDanglingComment(ast,comment);}}else{if(handleIfStatementComments(text,precedingNode,enclosingNode,followingNode,comment)||handleObjectPropertyAssignment(enclosingNode,precedingNode,comment)||handleCommentInEmptyParens(text,enclosingNode,comment)||handleMethodNameComments(enclosingNode,precedingNode,comment)||handleOnlyComments(enclosingNode,ast,comment,isLastComment)){// We're good\n}else if(precedingNode&&followingNode){// Otherwise, text exists both before and after the comment on\n// the same line. If there is both a preceding and following\n// node, use a tie-breaking algorithm to determine if it should\n// be attached to the next or previous node. In the last case,\n// simply attach the right node;\nvar tieCount=tiesToBreak.length;if(tieCount>0){var lastTie=tiesToBreak[tieCount-1];if(lastTie.followingNode!==comment.followingNode){breakTies(tiesToBreak,text);}}tiesToBreak.push(comment);}else if(precedingNode){addTrailingComment(precedingNode,comment);}else if(followingNode){addLeadingComment(followingNode,comment);}else if(enclosingNode){addDanglingComment(enclosingNode,comment);}else{// There are no nodes, let's attach it to the root of the ast\naddDanglingComment(ast,comment);}}});breakTies(tiesToBreak,text);comments.forEach(function(comment){// These node references were useful for breaking ties, but we\n// don't need them anymore, and they create cycles in the AST that\n// may lead to infinite recursion if we don't delete them here.\ndelete comment.precedingNode;delete comment.enclosingNode;delete comment.followingNode;});}function breakTies(tiesToBreak,text){var tieCount=tiesToBreak.length;if(tieCount===0){return;}var precedingNode=tiesToBreak[0].precedingNode;var followingNode=tiesToBreak[0].followingNode;var gapEndPos=locStart(followingNode);// Iterate backwards through tiesToBreak, examining the gaps\n// between the tied comments. In order to qualify as leading, a\n// comment must be separated from followingNode by an unbroken series of\n// whitespace-only gaps (or other comments).\nvar indexOfFirstLeadingComment=void 0;for(indexOfFirstLeadingComment=tieCount;indexOfFirstLeadingComment>0;--indexOfFirstLeadingComment){var comment=tiesToBreak[indexOfFirstLeadingComment-1];assert.strictEqual(comment.precedingNode,precedingNode);assert.strictEqual(comment.followingNode,followingNode);var gap=text.slice(locEnd(comment),gapEndPos);if(/\\S/.test(gap)){// The gap string contained something other than whitespace.\nbreak;}gapEndPos=locStart(comment);}tiesToBreak.forEach(function(comment,i){if(i<indexOfFirstLeadingComment){addTrailingComment(precedingNode,comment);}else{addLeadingComment(followingNode,comment);}});tiesToBreak.length=0;}function addCommentHelper(node,comment){var comments=node.comments||(node.comments=[]);comments.push(comment);comment.printed=false;// For some reason, TypeScript parses `// x` inside of JSXText as a comment\n// We already \"print\" it via the raw text, we don't need to re-print it as a\n// comment\nif(node.type===\"JSXText\"){comment.printed=true;}}function addLeadingComment(node,comment){comment.leading=true;comment.trailing=false;addCommentHelper(node,comment);}function addDanglingComment(node,comment){comment.leading=false;comment.trailing=false;addCommentHelper(node,comment);}function addTrailingComment(node,comment){comment.leading=false;comment.trailing=true;addCommentHelper(node,comment);}function addBlockStatementFirstComment(node,comment){var body=node.body.filter(function(n){return n.type!==\"EmptyStatement\";});if(body.length===0){addDanglingComment(node,comment);}else{addLeadingComment(body[0],comment);}}function addBlockOrNotComment(node,comment){if(node.type===\"BlockStatement\"){addBlockStatementFirstComment(node,comment);}else{addLeadingComment(node,comment);}}// There are often comments before the else clause of if statements like\n//\n//   if (1) { ... }\n//   // comment\n//   else { ... }\n//\n// They are being attached as leading comments of the BlockExpression which\n// is not well printed. What we want is to instead move the comment inside\n// of the block and make it leadingComment of the first element of the block\n// or dangling comment of the block if there is nothing inside\n//\n//   if (1) { ... }\n//   else {\n//     // comment\n//     ...\n//   }\nfunction handleIfStatementComments(text,precedingNode,enclosingNode,followingNode,comment){if(!enclosingNode||enclosingNode.type!==\"IfStatement\"||!followingNode){return false;}// We unfortunately have no way using the AST or location of nodes to know\n// if the comment is positioned before or after the condition parenthesis:\n//   if (a /* comment */) {}\n//   if (a) /* comment */ {}\n// The only workaround I found is to look at the next character to see if\n// it is a ).\nif(getNextNonSpaceNonCommentCharacter(text,comment)===\")\"){addTrailingComment(precedingNode,comment);return true;}if(followingNode.type===\"BlockStatement\"){addBlockStatementFirstComment(followingNode,comment);return true;}if(followingNode.type===\"IfStatement\"){addBlockOrNotComment(followingNode.consequent,comment);return true;}return false;}// Same as IfStatement but for TryStatement\nfunction handleTryStatementComments(enclosingNode,followingNode,comment){if(!enclosingNode||enclosingNode.type!==\"TryStatement\"||!followingNode){return false;}if(followingNode.type===\"BlockStatement\"){addBlockStatementFirstComment(followingNode,comment);return true;}if(followingNode.type===\"TryStatement\"){addBlockOrNotComment(followingNode.finalizer,comment);return true;}if(followingNode.type===\"CatchClause\"){addBlockOrNotComment(followingNode.body,comment);return true;}return false;}function handleMemberExpressionComments(enclosingNode,followingNode,comment){if(enclosingNode&&enclosingNode.type===\"MemberExpression\"&&followingNode&&followingNode.type===\"Identifier\"){addLeadingComment(enclosingNode,comment);return true;}return false;}function handleConditionalExpressionComments(enclosingNode,precedingNode,followingNode,comment,text){var isSameLineAsPrecedingNode=precedingNode&&!util$2.hasNewlineInRange(text,locEnd(precedingNode),locStart(comment));if((!precedingNode||!isSameLineAsPrecedingNode)&&enclosingNode&&enclosingNode.type===\"ConditionalExpression\"&&followingNode){addLeadingComment(followingNode,comment);return true;}return false;}function handleObjectPropertyAssignment(enclosingNode,precedingNode,comment){if(enclosingNode&&(enclosingNode.type===\"ObjectProperty\"||enclosingNode.type===\"Property\")&&enclosingNode.shorthand&&enclosingNode.key===precedingNode&&enclosingNode.value.type===\"AssignmentPattern\"){addTrailingComment(enclosingNode.value.left,comment);return true;}return false;}function handleMethodNameComments(enclosingNode,precedingNode,comment){// This is only needed for estree parsers (flow, typescript) to attach\n// after a method name:\n// obj = { fn /*comment*/() {} };\nif(enclosingNode&&precedingNode&&(enclosingNode.type===\"Property\"||enclosingNode.type===\"MethodDefinition\")&&precedingNode.type===\"Identifier\"&&enclosingNode.key===precedingNode){addTrailingComment(precedingNode,comment);return true;}return false;}function handleCommentInEmptyParens(text,enclosingNode,comment){if(getNextNonSpaceNonCommentCharacter(text,comment)!==\")\"){return false;}// Only add dangling comments to fix the case when no params are present,\n// i.e. a function without any argument.\nif(enclosingNode&&((enclosingNode.type===\"FunctionDeclaration\"||enclosingNode.type===\"FunctionExpression\"||enclosingNode.type===\"ArrowFunctionExpression\"||enclosingNode.type===\"ClassMethod\"||enclosingNode.type===\"ObjectMethod\")&&enclosingNode.params.length===0||enclosingNode.type===\"CallExpression\"&&enclosingNode.arguments.length===0)){addDanglingComment(enclosingNode,comment);return true;}if(enclosingNode&&enclosingNode.type===\"MethodDefinition\"&&enclosingNode.value.params.length===0){addDanglingComment(enclosingNode.value,comment);return true;}return false;}function handleLastFunctionArgComments(text,precedingNode,enclosingNode,followingNode,comment){// Type definitions functions\nif(precedingNode&&precedingNode.type===\"FunctionTypeParam\"&&enclosingNode&&enclosingNode.type===\"FunctionTypeAnnotation\"&&followingNode&&followingNode.type!==\"FunctionTypeParam\"){addTrailingComment(precedingNode,comment);return true;}// Real functions\nif(precedingNode&&(precedingNode.type===\"Identifier\"||precedingNode.type===\"AssignmentPattern\")&&enclosingNode&&(enclosingNode.type===\"ArrowFunctionExpression\"||enclosingNode.type===\"FunctionExpression\"||enclosingNode.type===\"FunctionDeclaration\"||enclosingNode.type===\"ObjectMethod\"||enclosingNode.type===\"ClassMethod\")&&getNextNonSpaceNonCommentCharacter(text,comment)===\")\"){addTrailingComment(precedingNode,comment);return true;}return false;}function handleClassComments(enclosingNode,comment){if(enclosingNode&&(enclosingNode.type===\"ClassDeclaration\"||enclosingNode.type===\"ClassExpression\")){addLeadingComment(enclosingNode,comment);return true;}return false;}function handleImportSpecifierComments(enclosingNode,comment){if(enclosingNode&&enclosingNode.type===\"ImportSpecifier\"){addLeadingComment(enclosingNode,comment);return true;}return false;}function handleObjectPropertyComments(enclosingNode,comment){if(enclosingNode&&enclosingNode.type===\"ObjectProperty\"){addLeadingComment(enclosingNode,comment);return true;}return false;}function handleLabeledStatementComments(enclosingNode,comment){if(enclosingNode&&enclosingNode.type===\"LabeledStatement\"){addLeadingComment(enclosingNode,comment);return true;}return false;}function handleCallExpressionComments(precedingNode,enclosingNode,comment){if(enclosingNode&&enclosingNode.type===\"CallExpression\"&&precedingNode&&enclosingNode.callee===precedingNode&&enclosingNode.arguments.length>0){addLeadingComment(enclosingNode.arguments[0],comment);return true;}return false;}function handleUnionTypeComments(precedingNode,enclosingNode,followingNode,comment){if(enclosingNode&&(enclosingNode.type===\"UnionTypeAnnotation\"||enclosingNode.type===\"TSUnionType\")){addTrailingComment(precedingNode,comment);return true;}return false;}function handlePropertyComments(enclosingNode,comment){if(enclosingNode&&(enclosingNode.type===\"Property\"||enclosingNode.type===\"ObjectProperty\")){addLeadingComment(enclosingNode,comment);return true;}return false;}function handleExportNamedDeclarationComments(enclosingNode,comment){if(enclosingNode&&enclosingNode.type===\"ExportNamedDeclaration\"){addLeadingComment(enclosingNode,comment);return true;}return false;}function handleOnlyComments(enclosingNode,ast,comment,isLastComment){// With Flow the enclosingNode is undefined so use the AST instead.\nif(ast&&ast.body&&ast.body.length===0){if(isLastComment){addDanglingComment(ast,comment);}else{addLeadingComment(ast,comment);}return true;}else if(enclosingNode&&enclosingNode.type===\"Program\"&&enclosingNode.body.length===0&&enclosingNode.directives&&enclosingNode.directives.length===0){if(isLastComment){addDanglingComment(enclosingNode,comment);}else{addLeadingComment(enclosingNode,comment);}return true;}return false;}function handleForComments(enclosingNode,precedingNode,comment){if(enclosingNode&&(enclosingNode.type===\"ForInStatement\"||enclosingNode.type===\"ForOfStatement\")){addLeadingComment(enclosingNode,comment);return true;}return false;}function handleImportDeclarationComments(text,enclosingNode,precedingNode,comment){if(precedingNode&&enclosingNode&&enclosingNode.type===\"ImportDeclaration\"&&util$2.hasNewline(text,util$2.locEnd(comment))){addTrailingComment(precedingNode,comment);return true;}return false;}function handleAssignmentPatternComments(enclosingNode,comment){if(enclosingNode&&enclosingNode.type===\"AssignmentPattern\"){addLeadingComment(enclosingNode,comment);return true;}return false;}function handleClassMethodComments(enclosingNode,comment){if(enclosingNode&&enclosingNode.type===\"ClassMethod\"){addTrailingComment(enclosingNode,comment);return true;}return false;}function handleTypeAliasComments(enclosingNode,followingNode,comment){if(enclosingNode&&enclosingNode.type===\"TypeAlias\"){addLeadingComment(enclosingNode,comment);return true;}return false;}function handleVariableDeclaratorComments(enclosingNode,followingNode,comment){if(enclosingNode&&enclosingNode.type===\"VariableDeclarator\"&&followingNode&&(followingNode.type===\"ObjectExpression\"||followingNode.type===\"ArrayExpression\")){addLeadingComment(followingNode,comment);return true;}return false;}function printComment(commentPath,options){var comment=commentPath.getValue();comment.printed=true;switch(comment.type||comment.kind){case\"Comment\":return\"#\"+comment.value.trimRight();case\"CommentBlock\":case\"Block\":return\"/*\"+comment.value+\"*/\";case\"CommentLine\":case\"Line\":// Print shebangs with the proper comment characters\nif(options.originalText.slice(util$2.locStart(comment)).startsWith(\"#!\")){return\"#!\"+comment.value.trimRight();}return\"//\"+comment.value.trimRight();default:throw new Error(\"Not a comment: \"+JSON.stringify(comment));}}function findExpressionIndexForComment(quasis,comment){var startPos=locStart(comment)-1;for(var _i10=1;_i10<quasis.length;++_i10){if(startPos<getQuasiRange(quasis[_i10]).start){return _i10-1;}}// We haven't found it, it probably means that some of the locations are off.\n// Let's just return the first one.\nreturn 0;}function getQuasiRange(expr){if(expr.start!==undefined){// Babylon\nreturn{start:expr.start,end:expr.end};}// Flow\nreturn{start:expr.range[0],end:expr.range[1]};}function printLeadingComment(commentPath,print,options){var comment=commentPath.getValue();var contents=printComment(commentPath,options);if(!contents){return\"\";}var isBlock=util$2.isBlockComment(comment);// Leading block comments should see if they need to stay on the\n// same line or not.\nif(isBlock){return concat([contents,util$2.hasNewline(options.originalText,locEnd(comment))?hardline:\" \"]);}return concat([contents,hardline]);}function printTrailingComment(commentPath,print,options){var comment=commentPath.getValue();var contents=printComment(commentPath,options);if(!contents){return\"\";}var isBlock=util$2.isBlockComment(comment);if(util$2.hasNewline(options.originalText,locStart(comment),{backwards:true})){// This allows comments at the end of nested structures:\n// {\n//   x: 1,\n//   y: 2\n//   // A comment\n// }\n// Those kinds of comments are almost always leading comments, but\n// here it doesn't go \"outside\" the block and turns it into a\n// trailing comment for `2`. We can simulate the above by checking\n// if this a comment on its own line; normal trailing comments are\n// always at the end of another expression.\nvar isLineBeforeEmpty=util$2.isPreviousLineEmpty(options.originalText,comment);return lineSuffix(concat([hardline,isLineBeforeEmpty?hardline:\"\",contents]));}else if(isBlock){// Trailing block comments never need a newline\nreturn concat([\" \",contents]);}return concat([lineSuffix(\" \"+contents),!isBlock?breakParent:\"\"]);}function printDanglingComments(path,options,sameIndent){var parts=[];var node=path.getValue();if(!node||!node.comments){return\"\";}path.each(function(commentPath){var comment=commentPath.getValue();if(comment&&!comment.leading&&!comment.trailing){parts.push(printComment(commentPath,options));}},\"comments\");if(parts.length===0){return\"\";}if(sameIndent){return join(hardline,parts);}return indent(concat([hardline,join(hardline,parts)]));}function prependCursorPlaceholder(path,options,printed){if(path.getNode()===options.cursorNode&&path.getValue()){return concat([cursor,printed]);}return printed;}function printComments(path,print,options,needsSemi){var value=path.getValue();var printed=print(path);var comments=value&&value.comments;if(!comments||comments.length===0){return prependCursorPlaceholder(path,options,printed);}var leadingParts=[];var trailingParts=[needsSemi?\";\":\"\",printed];path.each(function(commentPath){var comment=commentPath.getValue();var leading=comment.leading;var trailing=comment.trailing;if(leading){var contents=printLeadingComment(commentPath,print,options);if(!contents){return;}leadingParts.push(contents);var text=options.originalText;if(util$2.hasNewline(text,util$2.skipNewline(text,util$2.locEnd(comment)))){leadingParts.push(hardline);}}else if(trailing){trailingParts.push(printTrailingComment(commentPath,print,options));}},\"comments\");return prependCursorPlaceholder(path,options,concat(leadingParts.concat(trailingParts)));}var comments$1={attach:attach,printComments:printComments,printDanglingComments:printDanglingComments,getSortedChildNodes:getSortedChildNodes};var name=\"prettier-miscellaneous\";var version$1=\"1.5.3\";var description=\"Prettier Miscellaneous is a fork of Prettier with the goal of supporting minor extra options\";var bin={\"prettier\":\"./bin/prettier.js\"};var repository=\"arijs/prettier-miscellaneous\";var homepage=\"https://prettier.io\";var author=\"Rafael Hengles\";var license=\"MIT\";var main=\"./index.js\";var dependencies={\"babel-code-frame\":\"7.0.0-alpha.12\",\"babylon\":\"7.0.0-beta.13\",\"chalk\":\"2.0.1\",\"cosmiconfig\":\"2.1.3\",\"dashify\":\"0.2.2\",\"diff\":\"3.2.0\",\"esutils\":\"2.0.2\",\"flow-parser\":\"0.47.0\",\"get-stream\":\"3.0.0\",\"globby\":\"^6.1.0\",\"graphql\":\"0.10.1\",\"ignore\":\"^3.3.3\",\"jest-validate\":\"20.0.3\",\"json-to-ast\":\"2.0.0-alpha1.2\",\"minimatch\":\"3.0.4\",\"minimist\":\"1.2.0\",\"parse5\":\"3.0.2\",\"postcss\":\"^6.0.1\",\"postcss-less\":\"^1.0.0\",\"postcss-media-query-parser\":\"0.2.3\",\"postcss-scss\":\"1.0.0\",\"postcss-selector-parser\":\"2.2.3\",\"postcss-values-parser\":\"git://github.com/shellscape/postcss-values-parser.git#5e351360479116f3fe309602cdd15b0a233bc29f\",\"strip-bom\":\"3.0.0\",\"typescript\":\"2.5.0-dev.20170617\",\"typescript-eslint-parser\":\"git://github.com/eslint/typescript-eslint-parser.git#7c38401aa1452e6cc493151b8ab3a591e4d5e74a\"};var devDependencies={\"babel-cli\":\"6.24.1\",\"babel-preset-es2015\":\"6.24.1\",\"codecov\":\"2.2.0\",\"cross-env\":\"5.0.1\",\"cross-spawn\":\"5.1.0\",\"eslint\":\"4.1.1\",\"eslint-friendly-formatter\":\"3.0.0\",\"eslint-plugin-import\":\"2.6.1\",\"eslint-plugin-prettier\":\"2.1.2\",\"eslint-plugin-react\":\"7.1.0\",\"jest\":\"20.0.0\",\"mkdirp\":\"^0.5.1\",\"prettier\":\"1.5.2\",\"rimraf\":\"2.6.1\",\"rollup\":\"0.41.1\",\"rollup-plugin-commonjs\":\"7.0.0\",\"rollup-plugin-json\":\"2.1.0\",\"rollup-plugin-node-builtins\":\"2.0.0\",\"rollup-plugin-node-globals\":\"1.1.0\",\"rollup-plugin-node-resolve\":\"2.0.0\",\"rollup-plugin-replace\":\"1.1.1\",\"shelljs\":\"0.7.8\",\"sw-toolbox\":\"3.6.0\",\"uglify-es\":\"3.0.15\",\"webpack\":\"2.6.1\"};var scripts={\"test\":\"jest\",\"posttest\":\"npm run test-tabs && npm run test-tabs-inv\",\"test-tabs\":\"node ./bin/prettier.js --use-tabs --bracket-spacing --trailing-comma array,object -- ./bin/prettier.js > ./bin/prettier-with-tabs.js\",\"test-tabs-inv\":\"node ./bin/prettier-with-tabs.js -- ./bin/prettier-with-tabs.js > ./bin/prettier-spaces.js\",\"test-integration\":\"jest tests_integration\",\"lint\":\"cross-env EFF_NO_LINK_RULES=true eslint . --format node_modules/eslint-friendly-formatter\",\"build\":\"./scripts/build/build.js\"};var _package={name:name,version:version$1,description:description,bin:bin,repository:repository,homepage:homepage,author:author,license:license,main:main,dependencies:dependencies,devDependencies:devDependencies,scripts:scripts};var _package$1=Object.freeze({name:name,version:version$1,description:description,bin:bin,repository:repository,homepage:homepage,author:author,license:license,main:main,dependencies:dependencies,devDependencies:devDependencies,scripts:scripts,default:_package});var assert$2=require$$0;var util$6=util$3;var startsWithNoLookaheadToken$1=util$6.startsWithNoLookaheadToken;function FastPath$1(value){assert$2.ok(this instanceof FastPath$1);this.stack=[value];}// The name of the current property is always the penultimate element of\n// this.stack, and always a String.\nFastPath$1.prototype.getName=function getName(){var s=this.stack;var len=s.length;if(len>1){return s[len-2];}// Since the name is always a string, null is a safe sentinel value to\n// return if we do not know the name of the (root) value.\nreturn null;};// The value of the current property is always the final element of\n// this.stack.\nFastPath$1.prototype.getValue=function getValue(){var s=this.stack;return s[s.length-1];};function getNodeHelper(path,count){var s=path.stack;for(var _i11=s.length-1;_i11>=0;_i11-=2){var value=s[_i11];if(value&&!Array.isArray(value)&&--count<0){return value;}}return null;}FastPath$1.prototype.getNode=function getNode(count){return getNodeHelper(this,~~count);};FastPath$1.prototype.getParentNode=function getParentNode(count){return getNodeHelper(this,~~count+1);};// Temporarily push properties named by string arguments given after the\n// callback function onto this.stack, then call the callback with a\n// reference to this (modified) FastPath object. Note that the stack will\n// be restored to its original state after the callback is finished, so it\n// is probably a mistake to retain a reference to the path.\nFastPath$1.prototype.call=function call(callback/*, name1, name2, ... */){var s=this.stack;var origLen=s.length;var value=s[origLen-1];var argc=arguments.length;for(var _i12=1;_i12<argc;++_i12){var _name=arguments[_i12];value=value[_name];s.push(_name,value);}var result=callback(this);s.length=origLen;return result;};// Similar to FastPath.prototype.call, except that the value obtained by\n// accessing this.getValue()[name1][name2]... should be array-like. The\n// callback will be called with a reference to this path object for each\n// element of the array.\nFastPath$1.prototype.each=function each(callback/*, name1, name2, ... */){var s=this.stack;var origLen=s.length;var value=s[origLen-1];var argc=arguments.length;for(var _i13=1;_i13<argc;++_i13){var _name2=arguments[_i13];value=value[_name2];s.push(_name2,value);}for(var _i14=0;_i14<value.length;++_i14){if(_i14 in value){s.push(_i14,value[_i14]);// If the callback needs to know the value of i, call\n// path.getName(), assuming path is the parameter name.\ncallback(this);s.length-=2;}}s.length=origLen;};// Similar to FastPath.prototype.each, except that the results of the\n// callback function invocations are stored in an array and returned at\n// the end of the iteration.\nFastPath$1.prototype.map=function map(callback/*, name1, name2, ... */){var s=this.stack;var origLen=s.length;var value=s[origLen-1];var argc=arguments.length;for(var _i15=1;_i15<argc;++_i15){var _name3=arguments[_i15];value=value[_name3];s.push(_name3,value);}var result=new Array(value.length);for(var _i16=0;_i16<value.length;++_i16){if(_i16 in value){s.push(_i16,value[_i16]);result[_i16]=callback(this,_i16);s.length-=2;}}s.length=origLen;return result;};FastPath$1.prototype.needsParens=function(options){var _this=this;var parent=this.getParentNode();if(!parent){return false;}var name=this.getName();var node=this.getNode();// If the value of this path is some child of a Node and not a Node\n// itself, then it doesn't need parentheses. Only Node objects (in\n// fact, only Expression nodes) need parentheses.\nif(this.getValue()!==node){return false;}// Only statements don't need parentheses.\nif(isStatement(node)){return false;}// Identifiers never need parentheses.\nif(node.type===\"Identifier\"){return false;}if(parent.type===\"ParenthesizedExpression\"){return false;}// Add parens around the extends clause of a class. It is needed for almost\n// all expressions.\nif((parent.type===\"ClassDeclaration\"||parent.type===\"ClassExpression\")&&parent.superClass===node&&(node.type===\"ArrowFunctionExpression\"||node.type===\"AssignmentExpression\"||node.type===\"AwaitExpression\"||node.type===\"BinaryExpression\"||node.type===\"ConditionalExpression\"||node.type===\"LogicalExpression\"||node.type===\"NewExpression\"||node.type===\"ObjectExpression\"||node.type===\"ParenthesizedExpression\"||node.type===\"SequenceExpression\"||node.type===\"TaggedTemplateExpression\"||node.type===\"UnaryExpression\"||node.type===\"UpdateExpression\"||node.type===\"YieldExpression\")){return true;}if(parent.type===\"ArrowFunctionExpression\"&&parent.body===node&&node.type!==\"SequenceExpression\"&&// these have parens added anyway\nstartsWithNoLookaheadToken$1(node,/* forbidFunctionAndClass */false)||parent.type===\"ExpressionStatement\"&&startsWithNoLookaheadToken$1(node,/* forbidFunctionAndClass */true)){return true;}switch(node.type){case\"CallExpression\":{var firstParentNotMemberExpression=parent;var _i17=0;while(firstParentNotMemberExpression&&firstParentNotMemberExpression.type===\"MemberExpression\"){firstParentNotMemberExpression=this.getParentNode(++_i17);}if(firstParentNotMemberExpression.type===\"NewExpression\"&&firstParentNotMemberExpression.callee===this.getParentNode(_i17-1)){return true;}return false;}case\"SpreadElement\":case\"SpreadProperty\":return parent.type===\"MemberExpression\"&&name===\"object\"&&parent.object===node;case\"UpdateExpression\":if(parent.type===\"UnaryExpression\"){return node.prefix&&(node.operator===\"++\"&&parent.operator===\"+\"||node.operator===\"--\"&&parent.operator===\"-\");}// else fallthrough\ncase\"UnaryExpression\":switch(parent.type){case\"UnaryExpression\":return node.operator===parent.operator&&(node.operator===\"+\"||node.operator===\"-\");case\"MemberExpression\":return name===\"object\"&&parent.object===node;case\"TaggedTemplateExpression\":return true;case\"NewExpression\":case\"CallExpression\":return name===\"callee\"&&parent.callee===node;case\"BinaryExpression\":return parent.operator===\"**\"&&name===\"left\";default:return false;}case\"BinaryExpression\":{if(parent.type===\"UpdateExpression\"){return true;}var isLeftOfAForStatement=function isLeftOfAForStatement(node){var i=0;while(node){var _parent=_this.getParentNode(i++);if(!_parent){return false;}if(_parent.type===\"ForStatement\"&&_parent.init===node){return true;}node=_parent;}return false;};if(node.operator===\"in\"&&isLeftOfAForStatement(node)){return true;}}// fallthrough\ncase\"TSTypeAssertionExpression\":case\"TSAsExpression\":case\"LogicalExpression\":switch(parent.type){case\"CallExpression\":case\"NewExpression\":return name===\"callee\"&&parent.callee===node;case\"ClassDeclaration\":return name===\"superClass\"&&parent.superClass===node;case\"TSTypeAssertionExpression\":case\"TaggedTemplateExpression\":case\"UnaryExpression\":case\"SpreadElement\":case\"SpreadProperty\":case\"BindExpression\":case\"AwaitExpression\":case\"TSAsExpression\":case\"TSNonNullExpression\":return true;case\"MemberExpression\":return name===\"object\"&&parent.object===node;case\"BinaryExpression\":case\"LogicalExpression\":{if(!node.operator&&node.type!==\"TSTypeAssertionExpression\"){return true;}var po=parent.operator;var pp=util$6.getPrecedence(po);var no=node.operator;var np=util$6.getPrecedence(no);if(pp>np){return true;}if(po===\"||\"&&no===\"&&\"){return true;}if(pp===np&&name===\"right\"){assert$2.strictEqual(parent.right,node);return true;}if(pp===np&&!util$6.shouldFlatten(po,no)){return true;}// Add parenthesis when working with binary operators\n// It's not stricly needed but helps with code understanding\nif(util$6.isBitwiseOperator(po)){return true;}return false;}default:return false;}case\"TSParenthesizedType\":{var grandParent=this.getParentNode(1);if((parent.type===\"TypeParameter\"||parent.type===\"VariableDeclarator\"||parent.type===\"TypeAnnotation\"||parent.type===\"GenericTypeAnnotation\")&&node.typeAnnotation.type===\"TypeAnnotation\"&&node.typeAnnotation.typeAnnotation.type!==\"TSFunctionType\"&&grandParent.type!==\"TSTypeOperator\"){return false;}// Delegate to inner TSParenthesizedType\nif(node.typeAnnotation.type===\"TSParenthesizedType\"){return false;}return true;}case\"SequenceExpression\":switch(parent.type){case\"ReturnStatement\":return false;case\"ForStatement\":// Although parentheses wouldn't hurt around sequence\n// expressions in the head of for loops, traditional style\n// dictates that e.g. i++, j++ should not be wrapped with\n// parentheses.\nreturn false;case\"ExpressionStatement\":return name!==\"expression\";case\"ArrowFunctionExpression\":// We do need parentheses, but SequenceExpressions are handled\n// specially when printing bodies of arrow functions.\nreturn name!==\"body\";default:// Otherwise err on the side of overparenthesization, adding\n// explicit exceptions above if this proves overzealous.\nreturn true;}case\"YieldExpression\":if(parent.type===\"UnaryExpression\"||parent.type===\"AwaitExpression\"||parent.type===\"TSAsExpression\"||parent.type===\"TSNonNullExpression\"){return true;}// else fallthrough\ncase\"AwaitExpression\":switch(parent.type){case\"TaggedTemplateExpression\":case\"BinaryExpression\":case\"LogicalExpression\":case\"SpreadElement\":case\"SpreadProperty\":case\"TSAsExpression\":case\"TSNonNullExpression\":return true;case\"MemberExpression\":return parent.object===node;case\"NewExpression\":case\"CallExpression\":return parent.callee===node;case\"ConditionalExpression\":return parent.test===node;default:return false;}case\"ArrayTypeAnnotation\":return parent.type===\"NullableTypeAnnotation\";case\"IntersectionTypeAnnotation\":case\"UnionTypeAnnotation\":return parent.type===\"ArrayTypeAnnotation\"||parent.type===\"NullableTypeAnnotation\"||parent.type===\"IntersectionTypeAnnotation\"||parent.type===\"UnionTypeAnnotation\";case\"NullableTypeAnnotation\":return parent.type===\"ArrayTypeAnnotation\";case\"FunctionTypeAnnotation\":return parent.type===\"UnionTypeAnnotation\"||parent.type===\"IntersectionTypeAnnotation\";case\"StringLiteral\":case\"NumericLiteral\":case\"Literal\":if(typeof node.value===\"string\"&&parent.type===\"ExpressionStatement\"&&(// TypeScript workaround for eslint/typescript-eslint-parser#267\n// See corresponding workaround in printer.js case: \"Literal\"\noptions.parser!==\"typescript\"&&!parent.directive||options.parser===\"typescript\"&&options.originalText.substr(util$6.locStart(node)-1,1)===\"(\")){// To avoid becoming a directive\nvar _grandParent=this.getParentNode(1);return _grandParent.type===\"Program\"||_grandParent.type===\"BlockStatement\";}return parent.type===\"MemberExpression\"&&typeof node.value===\"number\"&&name===\"object\"&&parent.object===node;case\"AssignmentExpression\":{var _grandParent2=this.getParentNode(1);if(parent.type===\"ArrowFunctionExpression\"&&parent.body===node){return true;}else if(parent.type===\"ClassProperty\"&&parent.key===node&&parent.computed){return false;}else if(parent.type===\"TSPropertySignature\"&&parent.name===node){return false;}else if(parent.type===\"ForStatement\"&&(parent.init===node||parent.update===node)){return false;}else if(parent.type===\"ExpressionStatement\"){return node.left.type===\"ObjectPattern\";}else if(parent.type===\"TSPropertySignature\"&&parent.key===node){return false;}else if(parent.type===\"AssignmentExpression\"){return false;}else if(parent.type===\"SequenceExpression\"&&_grandParent2&&_grandParent2.type===\"ForStatement\"&&(_grandParent2.init===parent||_grandParent2.update===parent)){return false;}return true;}case\"ConditionalExpression\":switch(parent.type){case\"TaggedTemplateExpression\":case\"UnaryExpression\":case\"SpreadElement\":case\"SpreadProperty\":case\"BinaryExpression\":case\"LogicalExpression\":case\"ExportDefaultDeclaration\":case\"AwaitExpression\":case\"JSXSpreadAttribute\":case\"TSTypeAssertionExpression\":case\"TSAsExpression\":case\"TSNonNullExpression\":return true;case\"NewExpression\":case\"CallExpression\":return name===\"callee\"&&parent.callee===node;case\"ConditionalExpression\":return name===\"test\"&&parent.test===node;case\"MemberExpression\":return name===\"object\"&&parent.object===node;default:return false;}case\"FunctionExpression\":switch(parent.type){case\"CallExpression\":return name===\"callee\";// Not strictly necessary, but it's clearer to the reader if IIFEs are wrapped in parentheses.\ncase\"TaggedTemplateExpression\":return true;// This is basically a kind of IIFE.\ncase\"ExportDefaultDeclaration\":return true;default:return false;}case\"ArrowFunctionExpression\":switch(parent.type){case\"CallExpression\":return name===\"callee\";case\"NewExpression\":return name===\"callee\";case\"MemberExpression\":return name===\"object\";case\"TSAsExpression\":case\"BindExpression\":case\"TaggedTemplateExpression\":case\"UnaryExpression\":case\"LogicalExpression\":case\"BinaryExpression\":case\"AwaitExpression\":case\"TSTypeAssertionExpression\":return true;case\"ConditionalExpression\":return name===\"test\";default:return false;}case\"ClassExpression\":return parent.type===\"ExportDefaultDeclaration\";}return false;};function isStatement(node){return node.type===\"BlockStatement\"||node.type===\"BreakStatement\"||node.type===\"ClassBody\"||node.type===\"ClassDeclaration\"||node.type===\"ClassMethod\"||node.type===\"ClassProperty\"||node.type===\"ContinueStatement\"||node.type===\"DebuggerStatement\"||node.type===\"DeclareClass\"||node.type===\"DeclareExportAllDeclaration\"||node.type===\"DeclareExportDeclaration\"||node.type===\"DeclareFunction\"||node.type===\"DeclareInterface\"||node.type===\"DeclareModule\"||node.type===\"DeclareModuleExports\"||node.type===\"DeclareVariable\"||node.type===\"DoWhileStatement\"||node.type===\"ExportAllDeclaration\"||node.type===\"ExportDefaultDeclaration\"||node.type===\"ExportNamedDeclaration\"||node.type===\"ExpressionStatement\"||node.type===\"ForAwaitStatement\"||node.type===\"ForInStatement\"||node.type===\"ForOfStatement\"||node.type===\"ForStatement\"||node.type===\"FunctionDeclaration\"||node.type===\"IfStatement\"||node.type===\"ImportDeclaration\"||node.type===\"InterfaceDeclaration\"||node.type===\"LabeledStatement\"||node.type===\"MethodDefinition\"||node.type===\"ReturnStatement\"||node.type===\"SwitchStatement\"||node.type===\"ThrowStatement\"||node.type===\"TryStatement\"||node.type===\"TSAbstractClassDeclaration\"||node.type===\"TSEnumDeclaration\"||node.type===\"TSImportEqualsDeclaration\"||node.type===\"TSInterfaceDeclaration\"||node.type===\"TSModuleDeclaration\"||node.type===\"TSNamespaceExportDeclaration\"||node.type===\"TSNamespaceFunctionDeclaration\"||node.type===\"TypeAlias\"||node.type===\"VariableDeclaration\"||node.type===\"WhileStatement\"||node.type===\"WithStatement\";}var fastPath=FastPath$1;function traverseDoc(doc,onEnter,onExit,shouldTraverseConditionalGroups){function traverseDocRec(doc){var shouldRecurse=true;if(onEnter){if(onEnter(doc)===false){shouldRecurse=false;}}if(shouldRecurse){if(doc.type===\"concat\"||doc.type===\"fill\"){for(var _i18=0;_i18<doc.parts.length;_i18++){traverseDocRec(doc.parts[_i18]);}}else if(doc.type===\"if-break\"){if(doc.breakContents){traverseDocRec(doc.breakContents);}if(doc.flatContents){traverseDocRec(doc.flatContents);}}else if(doc.type===\"group\"&&doc.expandedStates){if(shouldTraverseConditionalGroups){doc.expandedStates.forEach(traverseDocRec);}else{traverseDocRec(doc.contents);}}else if(doc.contents){traverseDocRec(doc.contents);}}if(onExit){onExit(doc);}}traverseDocRec(doc);}function mapDoc(doc,func){doc=func(doc);if(doc.type===\"concat\"||doc.type===\"fill\"){return Object.assign({},doc,{parts:doc.parts.map(function(d){return mapDoc(d,func);})});}else if(doc.type===\"if-break\"){return Object.assign({},doc,{breakContents:doc.breakContents&&mapDoc(doc.breakContents,func),flatContents:doc.flatContents&&mapDoc(doc.flatContents,func)});}else if(doc.contents){return Object.assign({},doc,{contents:mapDoc(doc.contents,func)});}return doc;}function findInDoc(doc,fn,defaultValue){var result=defaultValue;var hasStopped=false;traverseDoc(doc,function(doc){var maybeResult=fn(doc);if(maybeResult!==undefined){hasStopped=true;result=maybeResult;}if(hasStopped){return false;}});return result;}function isEmpty$1(n){return typeof n===\"string\"&&n.length===0;}function getFirstString(doc){return findInDoc(doc,function(doc){if(typeof doc===\"string\"&&doc.trim().length!==0){return doc;}},null);}function isLineNext$1(doc){return findInDoc(doc,function(doc){if(typeof doc===\"string\"){return false;}if(doc.type===\"line\"){return true;}},false);}function willBreak$1(doc){return findInDoc(doc,function(doc){if(doc.type===\"group\"&&doc.break){return true;}if(doc.type===\"line\"&&doc.hard){return true;}if(doc.type===\"break-parent\"){return true;}},false);}function breakParentGroup(groupStack){if(groupStack.length>0){var parentGroup=groupStack[groupStack.length-1];// Breaks are not propagated through conditional groups because\n// the user is expected to manually handle what breaks.\nif(!parentGroup.expandedStates){parentGroup.break=true;}}return null;}function propagateBreaks(doc){var alreadyVisited=new Map();var groupStack=[];traverseDoc(doc,function(doc){if(doc.type===\"break-parent\"){breakParentGroup(groupStack);}if(doc.type===\"group\"){groupStack.push(doc);if(alreadyVisited.has(doc)){return false;}alreadyVisited.set(doc,true);}},function(doc){if(doc.type===\"group\"){var _group=groupStack.pop();if(_group.break){breakParentGroup(groupStack);}}},/* shouldTraverseConditionalGroups */true);}function removeLines(doc){// Force this doc into flat mode by statically converting all\n// lines into spaces (or soft lines into nothing). Hard lines\n// should still output because there's too great of a chance\n// of breaking existing assumptions otherwise.\nreturn mapDoc(doc,function(d){if(d.type===\"line\"&&!d.hard){return d.soft?\"\":\" \";}else if(d.type===\"if-break\"){return d.flatContents||\"\";}return d;});}function rawText$1(node){return node.extra?node.extra.raw:node.raw;}var docUtils$2={isEmpty:isEmpty$1,getFirstString:getFirstString,willBreak:willBreak$1,isLineNext:isLineNext$1,traverseDoc:traverseDoc,mapDoc:mapDoc,propagateBreaks:propagateBreaks,removeLines:removeLines,rawText:rawText$1};function commonjsRequire(){throw new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs');}function createCommonjsModule(fn,module){return module={exports:{}},fn(module,module.exports),module.exports;}var index$6=createCommonjsModule(function(module,exports){// Copyright 2014, 2015, 2016, 2017 Simon Lydell\n// License: MIT. (See LICENSE.)\nObject.defineProperty(exports,\"__esModule\",{value:true});// This regex comes from regex.coffee, and is inserted here by generate-index.js\n// (run `npm run build`).\nexports.default=/((['\"])(?:(?!\\2|\\\\).|\\\\(?:\\r\\n|[\\s\\S]))*(\\2)?|`(?:[^`\\\\$]|\\\\[\\s\\S]|\\$(?!\\{)|\\$\\{(?:[^{}]|\\{[^}]*\\}?)*\\}?)*(`)?)|(\\/\\/.*)|(\\/\\*(?:[^*]|\\*(?!\\/))*(\\*\\/)?)|(\\/(?!\\*)(?:\\[(?:(?![\\]\\\\]).|\\\\.)*\\]|(?![\\/\\]\\\\]).|\\\\.)+\\/(?:(?!\\s*(?:\\b|[\\u0080-\\uFFFF$\\\\'\"~({]|[+\\-!](?!=)|\\.?\\d))|[gmiyu]{1,5}\\b(?![\\u0080-\\uFFFF$\\\\]|\\s*(?:[+\\-*%&|^<>!=?({]|\\/(?![\\/*])))))|(0[xX][\\da-fA-F]+|0[oO][0-7]+|0[bB][01]+|(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?)|((?!\\d)(?:(?!\\s)[$\\w\\u0080-\\uFFFF]|\\\\u[\\da-fA-F]{4}|\\\\u\\{[\\da-fA-F]{1,6}\\})+)|(--|\\+\\+|&&|\\|\\||=>|\\.{3}|(?:[+\\-\\/%&|^]|\\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2})=?|[?~.,:;[\\](){}])|(\\s+)|(^$|[\\s\\S])/g;exports.matchToToken=function(match){var token={type:\"invalid\",value:match[0]};if(match[1])token.type=\"string\",token.closed=!!(match[3]||match[4]);else if(match[5])token.type=\"comment\";else if(match[6])token.type=\"comment\",token.closed=!!match[7];else if(match[8])token.type=\"regex\";else if(match[9])token.type=\"number\";else if(match[10])token.type=\"name\";else if(match[11])token.type=\"punctuator\";else if(match[12])token.type=\"whitespace\";return token;};});var ast=createCommonjsModule(function(module){/*\n  Copyright (C) 2013 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/(function(){'use strict';function isExpression(node){if(node==null){return false;}switch(node.type){case'ArrayExpression':case'AssignmentExpression':case'BinaryExpression':case'CallExpression':case'ConditionalExpression':case'FunctionExpression':case'Identifier':case'Literal':case'LogicalExpression':case'MemberExpression':case'NewExpression':case'ObjectExpression':case'SequenceExpression':case'ThisExpression':case'UnaryExpression':case'UpdateExpression':return true;}return false;}function isIterationStatement(node){if(node==null){return false;}switch(node.type){case'DoWhileStatement':case'ForInStatement':case'ForStatement':case'WhileStatement':return true;}return false;}function isStatement(node){if(node==null){return false;}switch(node.type){case'BlockStatement':case'BreakStatement':case'ContinueStatement':case'DebuggerStatement':case'DoWhileStatement':case'EmptyStatement':case'ExpressionStatement':case'ForInStatement':case'ForStatement':case'IfStatement':case'LabeledStatement':case'ReturnStatement':case'SwitchStatement':case'ThrowStatement':case'TryStatement':case'VariableDeclaration':case'WhileStatement':case'WithStatement':return true;}return false;}function isSourceElement(node){return isStatement(node)||node!=null&&node.type==='FunctionDeclaration';}function trailingStatement(node){switch(node.type){case'IfStatement':if(node.alternate!=null){return node.alternate;}return node.consequent;case'LabeledStatement':case'ForStatement':case'ForInStatement':case'WhileStatement':case'WithStatement':return node.body;}return null;}function isProblematicIfStatement(node){var current;if(node.type!=='IfStatement'){return false;}if(node.alternate==null){return false;}current=node.consequent;do{if(current.type==='IfStatement'){if(current.alternate==null){return true;}}current=trailingStatement(current);}while(current);return false;}module.exports={isExpression:isExpression,isStatement:isStatement,isIterationStatement:isIterationStatement,isSourceElement:isSourceElement,isProblematicIfStatement:isProblematicIfStatement,trailingStatement:trailingStatement};})();/* vim: set sw=4 ts=4 et tw=80 : */});var code=createCommonjsModule(function(module){/*\n  Copyright (C) 2013-2014 Yusuke Suzuki <utatane.tea@gmail.com>\n  Copyright (C) 2014 Ivan Nikulin <ifaaan@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/(function(){'use strict';var ES6Regex,ES5Regex,NON_ASCII_WHITESPACES,IDENTIFIER_START,IDENTIFIER_PART,ch;// See `tools/generate-identifier-regex.js`.\nES5Regex={// ECMAScript 5.1/Unicode v7.0.0 NonAsciiIdentifierStart:\nNonAsciiIdentifierStart:/[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/,// ECMAScript 5.1/Unicode v7.0.0 NonAsciiIdentifierPart:\nNonAsciiIdentifierPart:/[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/};ES6Regex={// ECMAScript 6/Unicode v7.0.0 NonAsciiIdentifierStart:\nNonAsciiIdentifierStart:/[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309B-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF5D-\\uDF61]|\\uD805[\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF98]|\\uD809[\\uDC00-\\uDC6E]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D]|\\uD87E[\\uDC00-\\uDE1D]/,// ECMAScript 6/Unicode v7.0.0 NonAsciiIdentifierPart:\nNonAsciiIdentifierPart:/[\\xAA\\xB5\\xB7\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1369-\\u1371\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDD0-\\uDDDA\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF01-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF98]|\\uD809[\\uDC00-\\uDC6E]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/};function isDecimalDigit(ch){return 0x30<=ch&&ch<=0x39;// 0..9\n}function isHexDigit(ch){return 0x30<=ch&&ch<=0x39||// 0..9\n0x61<=ch&&ch<=0x66||// a..f\n0x41<=ch&&ch<=0x46;// A..F\n}function isOctalDigit(ch){return ch>=0x30&&ch<=0x37;// 0..7\n}// 7.2 White Space\nNON_ASCII_WHITESPACES=[0x1680,0x180E,0x2000,0x2001,0x2002,0x2003,0x2004,0x2005,0x2006,0x2007,0x2008,0x2009,0x200A,0x202F,0x205F,0x3000,0xFEFF];function isWhiteSpace(ch){return ch===0x20||ch===0x09||ch===0x0B||ch===0x0C||ch===0xA0||ch>=0x1680&&NON_ASCII_WHITESPACES.indexOf(ch)>=0;}// 7.3 Line Terminators\nfunction isLineTerminator(ch){return ch===0x0A||ch===0x0D||ch===0x2028||ch===0x2029;}// 7.6 Identifier Names and Identifiers\nfunction fromCodePoint(cp){if(cp<=0xFFFF){return String.fromCharCode(cp);}var cu1=String.fromCharCode(Math.floor((cp-0x10000)/0x400)+0xD800);var cu2=String.fromCharCode((cp-0x10000)%0x400+0xDC00);return cu1+cu2;}IDENTIFIER_START=new Array(0x80);for(ch=0;ch<0x80;++ch){IDENTIFIER_START[ch]=ch>=0x61&&ch<=0x7A||// a..z\nch>=0x41&&ch<=0x5A||// A..Z\nch===0x24||ch===0x5F;// $ (dollar) and _ (underscore)\n}IDENTIFIER_PART=new Array(0x80);for(ch=0;ch<0x80;++ch){IDENTIFIER_PART[ch]=ch>=0x61&&ch<=0x7A||// a..z\nch>=0x41&&ch<=0x5A||// A..Z\nch>=0x30&&ch<=0x39||// 0..9\nch===0x24||ch===0x5F;// $ (dollar) and _ (underscore)\n}function isIdentifierStartES5(ch){return ch<0x80?IDENTIFIER_START[ch]:ES5Regex.NonAsciiIdentifierStart.test(fromCodePoint(ch));}function isIdentifierPartES5(ch){return ch<0x80?IDENTIFIER_PART[ch]:ES5Regex.NonAsciiIdentifierPart.test(fromCodePoint(ch));}function isIdentifierStartES6(ch){return ch<0x80?IDENTIFIER_START[ch]:ES6Regex.NonAsciiIdentifierStart.test(fromCodePoint(ch));}function isIdentifierPartES6(ch){return ch<0x80?IDENTIFIER_PART[ch]:ES6Regex.NonAsciiIdentifierPart.test(fromCodePoint(ch));}module.exports={isDecimalDigit:isDecimalDigit,isHexDigit:isHexDigit,isOctalDigit:isOctalDigit,isWhiteSpace:isWhiteSpace,isLineTerminator:isLineTerminator,isIdentifierStartES5:isIdentifierStartES5,isIdentifierPartES5:isIdentifierPartES5,isIdentifierStartES6:isIdentifierStartES6,isIdentifierPartES6:isIdentifierPartES6};})();/* vim: set sw=4 ts=4 et tw=80 : */});var keyword=createCommonjsModule(function(module){/*\n  Copyright (C) 2013 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/(function(){'use strict';var code$$1=code;function isStrictModeReservedWordES6(id){switch(id){case'implements':case'interface':case'package':case'private':case'protected':case'public':case'static':case'let':return true;default:return false;}}function isKeywordES5(id,strict){// yield should not be treated as keyword under non-strict mode.\nif(!strict&&id==='yield'){return false;}return isKeywordES6(id,strict);}function isKeywordES6(id,strict){if(strict&&isStrictModeReservedWordES6(id)){return true;}switch(id.length){case 2:return id==='if'||id==='in'||id==='do';case 3:return id==='var'||id==='for'||id==='new'||id==='try';case 4:return id==='this'||id==='else'||id==='case'||id==='void'||id==='with'||id==='enum';case 5:return id==='while'||id==='break'||id==='catch'||id==='throw'||id==='const'||id==='yield'||id==='class'||id==='super';case 6:return id==='return'||id==='typeof'||id==='delete'||id==='switch'||id==='export'||id==='import';case 7:return id==='default'||id==='finally'||id==='extends';case 8:return id==='function'||id==='continue'||id==='debugger';case 10:return id==='instanceof';default:return false;}}function isReservedWordES5(id,strict){return id==='null'||id==='true'||id==='false'||isKeywordES5(id,strict);}function isReservedWordES6(id,strict){return id==='null'||id==='true'||id==='false'||isKeywordES6(id,strict);}function isRestrictedWord(id){return id==='eval'||id==='arguments';}function isIdentifierNameES5(id){var i,iz,ch;if(id.length===0){return false;}ch=id.charCodeAt(0);if(!code$$1.isIdentifierStartES5(ch)){return false;}for(i=1,iz=id.length;i<iz;++i){ch=id.charCodeAt(i);if(!code$$1.isIdentifierPartES5(ch)){return false;}}return true;}function decodeUtf16(lead,trail){return(lead-0xD800)*0x400+(trail-0xDC00)+0x10000;}function isIdentifierNameES6(id){var i,iz,ch,lowCh,check;if(id.length===0){return false;}check=code$$1.isIdentifierStartES6;for(i=0,iz=id.length;i<iz;++i){ch=id.charCodeAt(i);if(0xD800<=ch&&ch<=0xDBFF){++i;if(i>=iz){return false;}lowCh=id.charCodeAt(i);if(!(0xDC00<=lowCh&&lowCh<=0xDFFF)){return false;}ch=decodeUtf16(ch,lowCh);}if(!check(ch)){return false;}check=code$$1.isIdentifierPartES6;}return true;}function isIdentifierES5(id,strict){return isIdentifierNameES5(id)&&!isReservedWordES5(id,strict);}function isIdentifierES6(id,strict){return isIdentifierNameES6(id)&&!isReservedWordES6(id,strict);}module.exports={isKeywordES5:isKeywordES5,isKeywordES6:isKeywordES6,isReservedWordES5:isReservedWordES5,isReservedWordES6:isReservedWordES6,isRestrictedWord:isRestrictedWord,isIdentifierNameES5:isIdentifierNameES5,isIdentifierNameES6:isIdentifierNameES6,isIdentifierES5:isIdentifierES5,isIdentifierES6:isIdentifierES6};})();/* vim: set sw=4 ts=4 et tw=80 : */});var utils=createCommonjsModule(function(module,exports){/*\n  Copyright (C) 2013 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/(function(){'use strict';exports.ast=ast;exports.code=code;exports.keyword=keyword;})();/* vim: set sw=4 ts=4 et tw=80 : */});var matchOperatorsRe=/[|\\\\{}()[\\]^$+*?.]/g;var index$10=function index$10(str){if(typeof str!=='string'){throw new TypeError('Expected a string');}return str.replace(matchOperatorsRe,'\\\\$&');};var index$12=createCommonjsModule(function(module){'use strict';function assembleStyles(){var styles={modifiers:{reset:[0,0],bold:[1,22],// 21 isn't widely supported and 22 does the same thing\ndim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},colors:{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]},bgColors:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49]}};// fix humans\nstyles.colors.grey=styles.colors.gray;Object.keys(styles).forEach(function(groupName){var group=styles[groupName];Object.keys(group).forEach(function(styleName){var style=group[styleName];styles[styleName]=group[styleName]={open:'\\x1B['+style[0]+'m',close:'\\x1B['+style[1]+'m'};});Object.defineProperty(styles,groupName,{value:group,enumerable:false});});return styles;}Object.defineProperty(module,'exports',{enumerable:true,get:assembleStyles});});var index$16=function index$16(){return /[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g;};var ansiRegex=index$16();var index$14=function index$14(str){return typeof str==='string'?str.replace(ansiRegex,''):str;};var ansiRegex$1=index$16;var re=new RegExp(ansiRegex$1().source);// remove the `g` flag\nvar index$18=re.test.bind(re);var argv=process.argv;var terminator=argv.indexOf('--');var hasFlag=function hasFlag(flag){flag='--'+flag;var pos=argv.indexOf(flag);return pos!==-1&&(terminator!==-1?pos<terminator:true);};var index$20=function(){if('FORCE_COLOR'in process.env){return true;}if(hasFlag('no-color')||hasFlag('no-colors')||hasFlag('color=false')){return false;}if(hasFlag('color')||hasFlag('colors')||hasFlag('color=true')||hasFlag('color=always')){return true;}if(process.stdout&&!process.stdout.isTTY){return false;}if(process.platform==='win32'){return true;}if('COLORTERM'in process.env){return true;}if(process.env.TERM==='dumb'){return false;}if(/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)){return true;}return false;}();var escapeStringRegexp=index$10;var ansiStyles=index$12;var stripAnsi=index$14;var hasAnsi=index$18;var supportsColor=index$20;var defineProps=Object.defineProperties;var isSimpleWindowsTerm=process.platform==='win32'&&!/^xterm/i.test(process.env.TERM);function Chalk(options){// detect mode if not set manually\nthis.enabled=!options||options.enabled===undefined?supportsColor:options.enabled;}// use bright blue on Windows as the normal blue color is illegible\nif(isSimpleWindowsTerm){ansiStyles.blue.open='\\x1B[94m';}var styles=function(){var ret={};Object.keys(ansiStyles).forEach(function(key){ansiStyles[key].closeRe=new RegExp(escapeStringRegexp(ansiStyles[key].close),'g');ret[key]={get:function get(){return build.call(this,this._styles.concat(key));}};});return ret;}();var proto=defineProps(function chalk(){},styles);function build(_styles){var builder=function builder(){return applyStyle.apply(builder,arguments);};builder._styles=_styles;builder.enabled=this.enabled;// __proto__ is used because we must return a function, but there is\n// no way to create a function with a different prototype.\n/* eslint-disable no-proto */builder.__proto__=proto;return builder;}function applyStyle(){// support varags, but simply cast to string in case there's only one arg\nvar args=arguments;var argsLen=args.length;var str=argsLen!==0&&String(arguments[0]);if(argsLen>1){// don't slice `arguments`, it prevents v8 optimizations\nfor(var a=1;a<argsLen;a++){str+=' '+args[a];}}if(!this.enabled||!str){return str;}var nestedStyles=this._styles;var i=nestedStyles.length;// Turns out that on Windows dimmed gray text becomes invisible in cmd.exe,\n// see https://github.com/chalk/chalk/issues/58\n// If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop.\nvar originalDim=ansiStyles.dim.open;if(isSimpleWindowsTerm&&(nestedStyles.indexOf('gray')!==-1||nestedStyles.indexOf('grey')!==-1)){ansiStyles.dim.open='';}while(i--){var code=ansiStyles[nestedStyles[i]];// Replace any instances already present with a re-opening code\n// otherwise only the part of the string until said closing code\n// will be colored, and the rest will simply be 'plain'.\nstr=code.open+str.replace(code.closeRe,code.open)+code.close;}// Reset the original 'dim' if we changed it to work around the Windows dimmed gray issue.\nansiStyles.dim.open=originalDim;return str;}function init(){var ret={};Object.keys(styles).forEach(function(name){ret[name]={get:function get(){return build.call(this,[name]);}};});return ret;}defineProps(Chalk.prototype,init());var index$8=new Chalk();var styles_1=ansiStyles;var hasColor=hasAnsi;var stripColor=stripAnsi;var supportsColor_1=supportsColor;index$8.styles=styles_1;index$8.hasColor=hasColor;index$8.stripColor=stripColor;index$8.supportsColor=supportsColor_1;var index$4=createCommonjsModule(function(module,exports){\"use strict\";exports.__esModule=true;exports.codeFrameColumns=codeFrameColumns;exports.default=function(rawLines,lineNumber,colNumber){var opts=arguments.length>3&&arguments[3]!==undefined?arguments[3]:{};if(!deprecationWarningShown){deprecationWarningShown=true;var deprecationError=new Error(\"Passing lineNumber and colNumber is deprecated to babel-code-frame. Please use `codeFrameColumns`.\");deprecationError.name=\"DeprecationWarning\";if(process.emitWarning){process.emitWarning(deprecationError);}else{console.warn(deprecationError);}}colNumber=Math.max(colNumber,0);var location={start:{column:colNumber,line:lineNumber}};return codeFrameColumns(rawLines,location,opts);};var _jsTokens=index$6;var _jsTokens2=_interopRequireDefault(_jsTokens);var _esutils=utils;var _esutils2=_interopRequireDefault(_esutils);var _chalk=index$8;var _chalk2=_interopRequireDefault(_chalk);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}var deprecationWarningShown=false;function getDefs(chalk){return{keyword:chalk.cyan,capitalized:chalk.yellow,jsx_tag:chalk.yellow,punctuator:chalk.yellow,number:chalk.magenta,string:chalk.green,regex:chalk.magenta,comment:chalk.grey,invalid:chalk.white.bgRed.bold,gutter:chalk.grey,marker:chalk.red.bold};}var NEWLINE=/\\r\\n|[\\n\\r\\u2028\\u2029]/;var JSX_TAG=/^[a-z][\\w-]*$/i;var BRACKET=/^[()\\[\\]{}]$/;function getTokenType(match){var _match$slice=match.slice(-2),offset=_match$slice[0],text=_match$slice[1];var token=(0,_jsTokens.matchToToken)(match);if(token.type===\"name\"){if(_esutils2.default.keyword.isReservedWordES6(token.value)){return\"keyword\";}if(JSX_TAG.test(token.value)&&(text[offset-1]===\"<\"||text.substr(offset-2,2)==\"</\")){return\"jsx_tag\";}if(token.value[0]!==token.value[0].toLowerCase()){return\"capitalized\";}}if(token.type===\"punctuator\"&&BRACKET.test(token.value)){return\"bracket\";}return token.type;}function highlight(defs,text){return text.replace(_jsTokens2.default,function(){for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}var type=getTokenType(args);var colorize=defs[type];if(colorize){return args[0].split(NEWLINE).map(function(str){return colorize(str);}).join(\"\\n\");}else{return args[0];}});}function getMarkerLines(loc,source,opts){var startLoc=Object.assign({},{column:0,line:-1},loc.start);var endLoc=Object.assign({},startLoc,loc.end);var linesAbove=opts.linesAbove||2;var linesBelow=opts.linesBelow||3;var startLine=startLoc.line;var startColumn=startLoc.column;var endLine=endLoc.line;var endColumn=endLoc.column;var start=Math.max(startLine-(linesAbove+1),0);var end=Math.min(source.length,endLine+linesBelow);if(startLine===-1){start=0;}if(endLine===-1){end=source.length;}var lineDiff=endLine-startLine;var markerLines={};if(lineDiff){for(var i=0;i<=lineDiff;i++){var lineNumber=i+startLine;if(!startColumn){markerLines[lineNumber]=true;}else if(i===0){var sourceLength=source[lineNumber-1].length;markerLines[lineNumber]=[startColumn,sourceLength-startColumn];}else if(i===lineDiff){markerLines[lineNumber]=[0,endColumn];}else{var _sourceLength=source[lineNumber-i].length;markerLines[lineNumber]=[0,_sourceLength];}}}else{if(startColumn===endColumn){if(startColumn){markerLines[startLine]=[startColumn,0];}else{markerLines[startLine]=true;}}else{markerLines[startLine]=[startColumn,endColumn-startColumn];}}return{start:start,end:end,markerLines:markerLines};}function codeFrameColumns(rawLines,loc){var opts=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};var highlighted=opts.highlightCode&&_chalk2.default.supportsColor||opts.forceColor;var chalk=_chalk2.default;if(opts.forceColor){chalk=new _chalk2.default.constructor({enabled:true});}var maybeHighlight=function maybeHighlight(chalkFn,string){return highlighted?chalkFn(string):string;};var defs=getDefs(chalk);if(highlighted)rawLines=highlight(defs,rawLines);var lines=rawLines.split(NEWLINE);var _getMarkerLines=getMarkerLines(loc,lines,opts),start=_getMarkerLines.start,end=_getMarkerLines.end,markerLines=_getMarkerLines.markerLines;var numberMaxWidth=String(end).length;var frame=lines.slice(start,end).map(function(line,index){var number=start+1+index;var paddedNumber=(\" \"+number).slice(-numberMaxWidth);var gutter=\" \"+paddedNumber+\" | \";var hasMarker=markerLines[number];if(hasMarker){var markerLine=\"\";if(Array.isArray(hasMarker)){var markerSpacing=line.slice(0,Math.max(hasMarker[0]-1,0)).replace(/[^\\t]/g,\" \");var numberOfMarkers=hasMarker[1]||1;markerLine=[\"\\n \",maybeHighlight(defs.gutter,gutter.replace(/\\d/g,\" \")),markerSpacing,maybeHighlight(defs.marker,\"^\").repeat(numberOfMarkers)].join(\"\");}return[maybeHighlight(defs.marker,\">\"),maybeHighlight(defs.gutter,gutter),line,markerLine].join(\"\");}else{return\" \"+maybeHighlight(defs.gutter,gutter)+line;}}).join(\"\\n\");if(highlighted){return chalk.reset(frame);}else{return frame;}}});var path=require$$0$1;var parsers={get flow(){return eval(\"require\")(\"./parser-flow\");},get graphql(){return eval(\"require\")(\"./parser-graphql\");},get parse5(){return eval(\"require\")(\"./parser-parse5\");},get babylon(){return eval(\"require\")(\"./parser-babylon\");},get typescript(){return eval(\"require\")(\"./parser-typescript\");},get postcss(){return eval(\"require\")(\"./parser-postcss\");},get json(){return eval(\"require\")(\"./parser-json\");}};function resolveParseFunction(opts){if(typeof opts.parser===\"function\"){return opts.parser;}if(typeof opts.parser===\"string\"){if(parsers.hasOwnProperty(opts.parser)){return parsers[opts.parser];}try{return eval(\"require\")(path.resolve(process.cwd(),opts.parser));}catch(err){throw new Error('Couldn\\'t resolve parser \"'+opts.parser+'\"');}}return parsers.babylon;}function parse(text,opts){var parseFunction=resolveParseFunction(opts);try{return parseFunction(text,parsers,opts);}catch(error){var loc=error.loc;if(loc){var codeFrame=index$4;error.codeFrame=codeFrame.codeFrameColumns(text,loc,{highlightCode:true});error.message+=\"\\n\"+error.codeFrame;throw error;}throw error.stack;}}var parser$1={parse:parse};var util$7=util$3;var docUtils$1=docUtils$2;var docBuilders$4=docBuilders$1;var comments$4=comments$1;var indent$3=docBuilders$4.indent;var hardline$3=docBuilders$4.hardline;var softline$2=docBuilders$4.softline;var concat$3=docBuilders$4.concat;function printSubtree(subtreeParser,path,print,options){var next=Object.assign({},{transformDoc:function transformDoc(doc){return doc;}},subtreeParser);next.options=Object.assign({},options,next.options,{originalText:next.text});var ast=parser$1.parse(next.text,next.options);var astComments=ast.comments;delete ast.comments;comments$4.attach(astComments,ast,next.text,next.options);var nextDoc=printer.printAstToDoc(ast,next.options);return next.transformDoc(nextDoc,{path:path,print:print});}/**\n * @returns {{ text, options?, transformDoc? } | void}\n */function getSubtreeParser(path,options){switch(options.parser){case\"parse5\":return fromHtmlParser2(path,options);case\"babylon\":case\"flow\":case\"typescript\":return fromBabylonFlowOrTypeScript(path,options);}}function fromBabylonFlowOrTypeScript(path){var node=path.getValue();switch(node.type){case\"TemplateLiteral\":{var isCss=[isStyledJsx,isStyledComponents].some(function(isIt){return isIt(path);});if(isCss){// Get full template literal with expressions replaced by placeholders\nvar rawQuasis=node.quasis.map(function(q){return q.value.raw;});var text=rawQuasis.join(\"@prettier-placeholder\");return{options:{parser:\"postcss\"},transformDoc:transformCssDoc,text:text};}break;}case\"TemplateElement\":{var parent=path.getParentNode();var parentParent=path.getParentNode(1);/*\n       * react-relay and graphql-tag\n       * graphql`...`\n       * graphql.experimental`...`\n       * gql`...`\n       */if(parentParent&&parentParent.type===\"TaggedTemplateExpression\"&&parent.quasis.length===1&&(parentParent.tag.type===\"MemberExpression\"&&parentParent.tag.object.name===\"graphql\"&&parentParent.tag.property.name===\"experimental\"||parentParent.tag.type===\"Identifier\"&&(parentParent.tag.name===\"gql\"||parentParent.tag.name===\"graphql\"))){return{options:{parser:\"graphql\"},transformDoc:function transformDoc(doc){return concat$3([indent$3(concat$3([softline$2,stripTrailingHardline(doc)])),softline$2]);},text:parent.quasis[0].value.raw};}break;}}}function fromHtmlParser2(path,options){var node=path.getValue();switch(node.type){case\"text\":{var parent=path.getParentNode();// Inline JavaScript\nif(parent.type===\"script\"&&(!parent.attribs.lang&&!parent.attribs.lang||parent.attribs.type===\"text/javascript\"||parent.attribs.type===\"application/javascript\")){var _parser=options.parser===\"flow\"?\"flow\":\"babylon\";return{options:{parser:_parser},transformDoc:function transformDoc(doc){return concat$3([hardline$3,doc]);},text:getText(options,node)};}// Inline TypeScript\nif(parent.type===\"script\"&&(parent.attribs.type===\"application/x-typescript\"||parent.attribs.lang===\"ts\")){return{options:{parser:\"typescript\"},transformDoc:function transformDoc(doc){return concat$3([hardline$3,doc]);},text:getText(options,node)};}// Inline Styles\nif(parent.type===\"style\"){return{options:{parser:\"postcss\"},transformDoc:function transformDoc(doc){return concat$3([hardline$3,stripTrailingHardline(doc)]);},text:getText(options,node)};}break;}case\"attribute\":{/*\n       * Vue binding sytax: JS expressions\n       * :class=\"{ 'some-key': value }\"\n       * v-bind:id=\"'list-' + id\"\n       * v-if=\"foo && !bar\"\n       * @click=\"someFunction()\"\n       */if(/(^@)|(^v-)|:/.test(node.key)&&!/^\\w+$/.test(node.value)){return{text:node.value,options:{parser:parseJavaScriptExpression,// Use singleQuote since HTML attributes use double-quotes.\n// TODO(azz): We still need to do an entity escape on the attribute.\nsingleQuote:true},transformDoc:function transformDoc(doc){return concat$3([node.key,'=\"',util$7.hasNewlineInRange(node.value,0,node.value.length)?doc:docUtils$1.removeLines(doc),'\"']);}};}}}}function transformCssDoc(quasisDoc,parent){var parentNode=parent.path.getValue();var expressionDocs=parentNode.expressions?parent.path.map(parent.print,\"expressions\"):[];var newDoc=replacePlaceholders(quasisDoc,expressionDocs);if(!newDoc){throw new Error(\"Couldn't insert all the expressions\");}return concat$3([\"`\",indent$3(concat$3([softline$2,stripTrailingHardline(newDoc)])),softline$2,\"`\"]);}// Search all the placeholders in the quasisDoc tree\n// and replace them with the expression docs one by one\n// returns a new doc with all the placeholders replaced,\n// or null if it couldn't replace any expression\nfunction replacePlaceholders(quasisDoc,expressionDocs){if(!expressionDocs||!expressionDocs.length){return quasisDoc;}var expressions=expressionDocs.slice();var newDoc=docUtils$1.mapDoc(quasisDoc,function(doc){if(!doc||!doc.parts||!doc.parts.length){return doc;}var parts=doc.parts;if(parts.length>1&&parts[0]===\"@\"&&typeof parts[1]===\"string\"&&parts[1].startsWith(\"prettier-placeholder\")){// If placeholder is split, join it\nvar at=parts[0];var placeholder=parts[1];var rest=parts.slice(2);parts=[at+placeholder].concat(rest);}if(typeof parts[0]===\"string\"&&parts[0].startsWith(\"@prettier-placeholder\")){var _placeholder=parts[0];var _rest=parts.slice(1);// When the expression has a suffix appended, like:\n// animation: linear ${time}s ease-out;\nvar suffix=_placeholder.slice(\"@prettier-placeholder\".length);var expression=expressions.shift();parts=[\"${\",expression,\"}\"+suffix].concat(_rest);}return Object.assign({},doc,{parts:parts});});return expressions.length===0?newDoc:null;}function parseJavaScriptExpression(text,parsers){// Force parsing as an expression\nvar ast=parsers.babylon('('+text+')');// Extract expression from the declaration\nreturn{type:\"File\",program:ast.program.body[0].expression};}function getText(options,node){return options.originalText.slice(util$7.locStart(node),util$7.locEnd(node));}function stripTrailingHardline(doc){// HACK remove ending hardline, original PR: #1984\nif(doc.type===\"concat\"&&doc.parts[0].type===\"concat\"&&doc.parts[0].parts.length===2&&// doc.parts[0].parts[1] === hardline :\ndoc.parts[0].parts[1].type===\"concat\"&&doc.parts[0].parts[1].parts.length===2&&doc.parts[0].parts[1].parts[0].hard&&doc.parts[0].parts[1].parts[1].type===\"break-parent\"){return doc.parts[0].parts[0];}return doc;}/**\n * Template literal in this context:\n * <style jsx>{`div{color:red}`}</style>\n */function isStyledJsx(path){var node=path.getValue();var parent=path.getParentNode();var parentParent=path.getParentNode(1);return parentParent&&node.quasis&&parent.type===\"JSXExpressionContainer\"&&parentParent.type===\"JSXElement\"&&parentParent.openingElement.name.name===\"style\"&&parentParent.openingElement.attributes.some(function(attribute){return attribute.name.name===\"jsx\";});}/**\n * Template literal in these contexts:\n * styled.button`color: red`\n * Foo.extend`color: red`\n * css`color: red`\n * keyframes`0% { opacity: 0; }`\n * injectGlobal`body{ margin:0: }`\n */function isStyledComponents(path){var parent=path.getParentNode();return parent&&parent.type===\"TaggedTemplateExpression\"&&(parent.tag.type===\"MemberExpression\"&&(parent.tag.object.name===\"styled\"||/^[A-Z]/.test(parent.tag.object.name)&&parent.tag.property.name===\"extend\")||parent.tag.type===\"Identifier\"&&parent.tag.name===\"css\");}var multiparser$1={getSubtreeParser:getSubtreeParser,printSubtree:printSubtree};var docBuilders$5=docBuilders$1;var concat$4=docBuilders$5.concat;var join$3=docBuilders$5.join;var hardline$4=docBuilders$5.hardline;var line$2=docBuilders$5.line;var softline$3=docBuilders$5.softline;var group$2=docBuilders$5.group;var indent$4=docBuilders$5.indent;var ifBreak$2=docBuilders$5.ifBreak;function genericPrint$1(path,options,print){var n=path.getValue();if(!n){return\"\";}if(typeof n===\"string\"){return n;}switch(n.kind){case\"Document\":{return concat$4([join$3(concat$4([hardline$4,hardline$4]),path.map(print,\"definitions\")),hardline$4]);}case\"OperationDefinition\":{return concat$4([n.name===null?\"\":n.operation,n.name?concat$4([\" \",path.call(print,\"name\")]):\"\",n.variableDefinitions&&n.variableDefinitions.length?group$2(concat$4([\"(\",indent$4(concat$4([softline$3,join$3(concat$4([ifBreak$2(\"\",\", \"),softline$3]),path.map(print,\"variableDefinitions\"))])),softline$3,\")\"])):\"\",printDirectives(path,print,n),n.selectionSet?n.name===null?\"\":\" \":\"\",path.call(print,\"selectionSet\")]);}case\"FragmentDefinition\":{return concat$4([\"fragment \",path.call(print,\"name\"),\" on \",path.call(print,\"typeCondition\"),printDirectives(path,print,n),\" \",path.call(print,\"selectionSet\")]);}case\"SelectionSet\":{return concat$4([\"{\",indent$4(concat$4([hardline$4,join$3(hardline$4,path.map(print,\"selections\"))])),hardline$4,\"}\"]);}case\"Field\":{return group$2(concat$4([n.alias?concat$4([path.call(print,\"alias\"),\": \"]):\"\",path.call(print,\"name\"),n.arguments.length>0?group$2(concat$4([\"(\",indent$4(concat$4([softline$3,join$3(concat$4([ifBreak$2(\"\",\", \"),softline$3]),path.map(print,\"arguments\"))])),softline$3,\")\"])):\"\",printDirectives(path,print,n),n.selectionSet?\" \":\"\",path.call(print,\"selectionSet\")]));}case\"Name\":{return n.value;}case\"StringValue\":{return concat$4(['\"',n.value,'\"']);}case\"IntValue\":case\"FloatValue\":case\"EnumValue\":{return n.value;}case\"BooleanValue\":{return n.value?\"true\":\"false\";}case\"NullValue\":{return\"null\";}case\"Variable\":{return concat$4([\"$\",path.call(print,\"name\")]);}case\"ListValue\":{return group$2(concat$4([\"[\",indent$4(concat$4([softline$3,join$3(concat$4([ifBreak$2(\"\",\", \"),softline$3]),path.map(print,\"values\"))])),softline$3,\"]\"]));}case\"ObjectValue\":{return group$2(concat$4([\"{\",options.bracesSpacing&&n.fields.length>0?\" \":\"\",indent$4(concat$4([softline$3,join$3(concat$4([ifBreak$2(\"\",\", \"),softline$3]),path.map(print,\"fields\"))])),softline$3,ifBreak$2(\"\",options.bracesSpacing&&n.fields.length>0?\" \":\"\"),\"}\"]));}case\"ObjectField\":case\"Argument\":{return concat$4([path.call(print,\"name\"),\": \",path.call(print,\"value\")]);}case\"Directive\":{return concat$4([\"@\",path.call(print,\"name\"),n.arguments.length>0?group$2(concat$4([\"(\",indent$4(concat$4([softline$3,join$3(concat$4([ifBreak$2(\"\",\", \"),softline$3]),path.map(print,\"arguments\"))])),softline$3,\")\"])):\"\"]);}case\"NamedType\":{return path.call(print,\"name\");}case\"VariableDefinition\":{return concat$4([path.call(print,\"variable\"),\": \",path.call(print,\"type\"),n.defaultValue?concat$4([\" = \",path.call(print,\"defaultValue\")]):\"\"]);}case\"TypeExtensionDefinition\":{return concat$4([\"extend \",path.call(print,\"definition\")]);}case\"ObjectTypeDefinition\":{return concat$4([\"type \",path.call(print,\"name\"),n.interfaces.length>0?concat$4([\" implements \",join$3(\", \",path.map(print,\"interfaces\"))]):\"\",printDirectives(path,print,n),\" {\",n.fields.length>0?indent$4(concat$4([hardline$4,join$3(hardline$4,path.map(print,\"fields\"))])):\"\",hardline$4,\"}\"]);}case\"FieldDefinition\":{return concat$4([path.call(print,\"name\"),n.arguments.length>0?group$2(concat$4([\"(\",indent$4(concat$4([softline$3,join$3(concat$4([ifBreak$2(\"\",\", \"),softline$3]),path.map(print,\"arguments\"))])),softline$3,\")\"])):\"\",\": \",path.call(print,\"type\"),printDirectives(path,print,n)]);}case\"DirectiveDefinition\":{return concat$4([\"directive \",\"@\",path.call(print,\"name\"),n.arguments.length>0?group$2(concat$4([\"(\",indent$4(concat$4([softline$3,join$3(concat$4([ifBreak$2(\"\",\", \"),softline$3]),path.map(print,\"arguments\"))])),softline$3,\")\"])):\"\",concat$4([\" on \",join$3(\" | \",path.map(print,\"locations\"))])]);}case\"EnumTypeDefinition\":{return concat$4([\"enum \",path.call(print,\"name\"),printDirectives(path,print,n),\" {\",n.values.length>0?indent$4(concat$4([hardline$4,join$3(hardline$4,path.map(print,\"values\"))])):\"\",hardline$4,\"}\"]);}case\"EnumValueDefinition\":{return concat$4([path.call(print,\"name\"),printDirectives(path,print,n)]);}case\"InputValueDefinition\":{return concat$4([path.call(print,\"name\"),\": \",path.call(print,\"type\"),n.defaultValue?concat$4([\" = \",path.call(print,\"defaultValue\")]):\"\",printDirectives(path,print,n)]);}case\"InputObjectTypeDefinition\":{return concat$4([\"input \",path.call(print,\"name\"),printDirectives(path,print,n),\" {\",n.fields.length>0?indent$4(concat$4([hardline$4,join$3(hardline$4,path.map(print,\"fields\"))])):\"\",hardline$4,\"}\"]);}case\"SchemaDefinition\":{return concat$4([\"schema\",printDirectives(path,print,n),\" {\",n.operationTypes.length>0?indent$4(concat$4([hardline$4,join$3(hardline$4,path.map(print,\"operationTypes\"))])):\"\",hardline$4,\"}\"]);}case\"OperationTypeDefinition\":{return concat$4([path.call(print,\"operation\"),\": \",path.call(print,\"type\")]);}case\"InterfaceTypeDefinition\":{return concat$4([\"interface \",path.call(print,\"name\"),printDirectives(path,print,n),\" {\",n.fields.length>0?indent$4(concat$4([hardline$4,join$3(hardline$4,path.map(print,\"fields\"))])):\"\",hardline$4,\"}\"]);}case\"FragmentSpread\":{return concat$4([\"...\",path.call(print,\"name\"),printDirectives(path,print,n)]);}case\"InlineFragment\":{return concat$4([\"...\",n.typeCondition?concat$4([\" on \",path.call(print,\"typeCondition\")]):\"\",printDirectives(path,print,n),\" \",path.call(print,\"selectionSet\")]);}case\"UnionTypeDefinition\":{return group$2(concat$4([\"union \",path.call(print,\"name\"),\" =\",ifBreak$2(\"\",\" \"),indent$4(concat$4([ifBreak$2(concat$4([line$2,\"  \"])),join$3(concat$4([line$2,\"| \"]),path.map(print,\"types\"))]))]));}case\"ScalarTypeDefinition\":{return concat$4([\"scalar \",path.call(print,\"name\"),printDirectives(path,print,n)]);}case\"NonNullType\":{return concat$4([path.call(print,\"type\"),\"!\"]);}case\"ListType\":{return concat$4([\"[\",path.call(print,\"type\"),\"]\"]);}default:throw new Error(\"unknown graphql type: \"+JSON.stringify(n.kind));}}function printDirectives(path,print,n){if(n.directives.length===0){return\"\";}return concat$4([\" \",group$2(indent$4(concat$4([softline$3,join$3(concat$4([ifBreak$2(\"\",\" \"),softline$3]),path.map(print,\"directives\"))])))]);}var printerGraphql=genericPrint$1;var util$8=util$3;var docBuilders$6=docBuilders$1;var concat$5=docBuilders$6.concat;var join$4=docBuilders$6.join;var hardline$5=docBuilders$6.hardline;var line$3=docBuilders$6.line;var softline$4=docBuilders$6.softline;var group$3=docBuilders$6.group;var indent$5=docBuilders$6.indent;// const ifBreak = docBuilders.ifBreak;\n// http://w3c.github.io/html/single-page.html#void-elements\nvar voidTags={area:true,base:true,br:true,col:true,embed:true,hr:true,img:true,input:true,link:true,meta:true,param:true,source:true,track:true,wbr:true};function genericPrint$2(path,options,print){var n=path.getValue();if(!n){return\"\";}if(typeof n===\"string\"){return n;}switch(n.type){case\"root\":{return printChildren(path,print);}case\"directive\":{return concat$5([\"<\",n.data,\">\",hardline$5]);}case\"text\":{return n.data.replace(/\\s+/g,\" \").trim();}case\"script\":case\"style\":case\"tag\":{var selfClose=voidTags[n.name]?\">\":\" />\";var children=printChildren(path,print);var _hasNewline=util$8.hasNewlineInRange(options.originalText,util$8.locStart(n),util$8.locEnd(n));return group$3(concat$5([_hasNewline?hardline$5:\"\",\"<\",n.name,printAttributes(path,print),n.children.length?\">\":selfClose,n.name.toLowerCase()===\"html\"?concat$5([hardline$5,children]):indent$5(children),n.children.length?concat$5([softline$4,\"</\",n.name,\">\"]):hardline$5]));}case\"comment\":{return concat$5([\"<!-- \",n.data.trim(),\" -->\"]);}case\"attribute\":{if(!n.value){return n.key;}return concat$5([n.key,'=\"',n.value,'\"']);}default:throw new Error(\"unknown htmlparser2 type: \"+n.type);}}function printAttributes(path,print){var node=path.getValue();return concat$5([node.attributes.length?\" \":\"\",indent$5(join$4(line$3,path.map(print,\"attributes\")))]);}function printChildren(path,print){var children=[];path.each(function(childPath){var child=childPath.getValue();if(child.type!==\"text\"){children.push(hardline$5);}children.push(childPath.call(print));},\"children\");return concat$5(children);}var printerHtmlparser2=genericPrint$2;var util$9=util$3;var docBuilders$7=docBuilders$1;var concat$6=docBuilders$7.concat;var join$5=docBuilders$7.join;var line$4=docBuilders$7.line;var hardline$6=docBuilders$7.hardline;var softline$5=docBuilders$7.softline;var group$4=docBuilders$7.group;var fill$2=docBuilders$7.fill;var indent$6=docBuilders$7.indent;var docUtils$4=docUtils$2;var removeLines$1=docUtils$4.removeLines;function genericPrint$3(path,options,print){var n=path.getValue();if(!n){return\"\";}if(typeof n===\"string\"){return n;}switch(n.type){case\"css-root\":{return concat$6([printNodeSequence(path,options,print),hardline$6]);}case\"css-comment\":{if(n.raws.content){return n.raws.content;}var text=options.originalText.slice(util$9.locStart(n),util$9.locEnd(n));var _rawText=n.raws.text||n.text;// Workaround a bug where the location is off.\n// https://github.com/postcss/postcss-scss/issues/63\nif(text.indexOf(_rawText)===-1){if(n.raws.inline){return concat$6([\"// \",_rawText]);}return concat$6([\"/* \",_rawText,\" */\"]);}return text;}case\"css-rule\":{return concat$6([path.call(print,\"selector\"),n.important?\" !important\":\"\",n.nodes?concat$6([\" {\",n.nodes.length>0?indent$6(concat$6([hardline$6,printNodeSequence(path,options,print)])):\"\",hardline$6,\"}\"]):\";\"]);}case\"css-decl\":{// When the following less construct &:extend(.foo); is parsed with scss,\n// it will put a space after `:` and break it. Ideally we should parse\n// less files with less, but we can hardcode this to work with scss as\n// well.\nvar isValueExtend=n.value.type===\"value-root\"&&n.value.group.type===\"value-value\"&&n.value.group.group.type===\"value-func\"&&n.value.group.group.value===\"extend\";var isComposed=n.value.type===\"value-root\"&&n.value.group.type===\"value-value\"&&n.prop===\"composes\";return concat$6([n.raws.before.replace(/[\\s;]/g,\"\"),n.prop,\":\",isValueExtend?\"\":\" \",isComposed?removeLines$1(path.call(print,\"value\")):path.call(print,\"value\"),n.important?\" !important\":\"\",n.nodes?concat$6([\" {\",indent$6(concat$6([softline$5,printNodeSequence(path,options,print)])),softline$5,\"}\"]):\";\"]);}case\"css-atrule\":{var hasParams=n.params&&!(n.params.type===\"media-query-list\"&&n.params.value===\"\");return concat$6([\"@\",n.name,hasParams?concat$6([\" \",path.call(print,\"params\")]):\"\",n.nodes?concat$6([\" {\",indent$6(concat$6([n.nodes.length>0?softline$5:\"\",printNodeSequence(path,options,print)])),softline$5,\"}\"]):\";\"]);}case\"css-import\":{return concat$6([\"@\",n.name,\" \",n.directives?concat$6([n.directives,\" \"]):\"\",n.importPath,\";\"]);}// postcss-media-query-parser\ncase\"media-query-list\":{var parts=[];path.each(function(childPath){var node=childPath.getValue();if(node.type===\"media-query\"&&node.value===\"\"){return;}parts.push(childPath.call(print));},\"nodes\");return group$4(indent$6(join$5(concat$6([\",\",line$4]),parts)));}case\"media-query\":{return join$5(\" \",path.map(print,\"nodes\"));}case\"media-type\":{return n.value;}case\"media-feature-expression\":{if(!n.nodes){return n.value;}return concat$6([\"(\",concat$6(path.map(print,\"nodes\")),\")\"]);}case\"media-feature\":{return n.value.replace(/ +/g,\" \");}case\"media-colon\":{return concat$6([n.value,\" \"]);}case\"media-value\":{return n.value;}case\"media-keyword\":{return n.value;}case\"media-url\":{return n.value;}case\"media-unknown\":{return n.value;}// postcss-selector-parser\ncase\"selector-root\":{return group$4(join$5(concat$6([\",\",hardline$6]),path.map(print,\"nodes\")));}case\"selector-comment\":{return n.value;}case\"selector-string\":{return n.value;}case\"selector-tag\":{return n.value;}case\"selector-id\":{return concat$6([\"#\",n.value]);}case\"selector-class\":{return concat$6([\".\",n.value]);}case\"selector-attribute\":{return concat$6([\"[\",n.attribute,n.operator?n.operator:\"\",n.value?n.value:\"\",n.insensitive?\" i\":\"\",\"]\"]);}case\"selector-combinator\":{if(n.value===\"+\"||n.value===\">\"||n.value===\"~\"){var parent=path.getParentNode();var leading=parent.type===\"selector-selector\"&&parent.nodes[0]===n?\"\":line$4;return concat$6([leading,n.value,\" \"]);}return n.value.trim()||line$4;}case\"selector-universal\":{return n.value;}case\"selector-selector\":{return group$4(indent$6(concat$6(path.map(print,\"nodes\"))));}case\"selector-pseudo\":{return concat$6([n.value,n.nodes&&n.nodes.length>0?concat$6([\"(\",join$5(\", \",path.map(print,\"nodes\")),\")\"]):\"\"]);}case\"selector-nesting\":{return printValue(n.value);}// postcss-values-parser\ncase\"value-root\":{return path.call(print,\"group\");}case\"value-comma_group\":{var printed=path.map(print,\"groups\");var _parts=[];for(var _i19=0;_i19<n.groups.length;++_i19){_parts.push(printed[_i19]);if(_i19!==n.groups.length-1&&n.groups[_i19+1].raws&&n.groups[_i19+1].raws.before!==\"\"){if(n.groups[_i19+1].type===\"value-operator\"&&[\"+\",\"-\",\"/\",\"*\",\"%\"].indexOf(n.groups[_i19+1].value)!==-1){_parts.push(\" \");}else{_parts.push(line$4);}}}return group$4(indent$6(fill$2(_parts)));}case\"value-paren_group\":{var _parent2=path.getParentNode();var isURLCall=_parent2&&_parent2.type===\"value-func\"&&_parent2.value===\"url\";if(isURLCall&&(n.groups.length===1||n.groups.length>0&&n.groups[0].type===\"value-comma_group\"&&n.groups[0].groups.length>0&&n.groups[0].groups[0].type===\"value-word\"&&n.groups[0].groups[0].value===\"data\")){return concat$6([n.open?path.call(print,\"open\"):\"\",join$5(\",\",path.map(print,\"groups\")),n.close?path.call(print,\"close\"):\"\"]);}if(!n.open){var _printed=path.map(print,\"groups\");var res=[];for(var _i20=0;_i20<_printed.length;_i20++){if(_i20!==0){res.push(concat$6([\",\",line$4]));}res.push(_printed[_i20]);}return group$4(indent$6(fill$2(res)));}return group$4(concat$6([n.open?path.call(print,\"open\"):\"\",indent$6(concat$6([softline$5,join$5(concat$6([\",\",line$4]),path.map(print,\"groups\"))])),softline$5,n.close?path.call(print,\"close\"):\"\"]));}case\"value-value\":{return path.call(print,\"group\");}case\"value-func\":{return concat$6([n.value,path.call(print,\"group\")]);}case\"value-paren\":{if(n.raws.before!==\"\"){return concat$6([line$4,n.value]);}return n.value;}case\"value-number\":{return concat$6([n.value,n.unit]);}case\"value-operator\":{return n.value;}case\"value-word\":{if(n.isColor&&n.isHex){return n.value.toLowerCase();}return n.value;}case\"value-colon\":{return n.value;}case\"value-comma\":{return concat$6([n.value,\" \"]);}case\"value-string\":{return concat$6([n.quoted?n.raws.quote:\"\",n.value,n.quoted?n.raws.quote:\"\"]);}case\"value-atword\":{return concat$6([\"@\",n.value]);}default:throw new Error(\"unknown postcss type: \"+JSON.stringify(n.type));}}function printNodeSequence(path,options,print){var node=path.getValue();var parts=[];var i=0;path.map(function(pathChild){var prevNode=node.nodes[i-1];if(prevNode&&prevNode.type===\"css-comment\"&&prevNode.text.trim()===\"prettier-ignore\"){var childNode=pathChild.getValue();parts.push(options.originalText.slice(util$9.locStart(childNode),util$9.locEnd(childNode)));}else{parts.push(pathChild.call(print));}if(i!==node.nodes.length-1){if(node.nodes[i+1].type===\"css-comment\"&&!util$9.hasNewline(options.originalText,util$9.locStart(node.nodes[i+1]),{backwards:true})||node.nodes[i+1].type===\"css-atrule\"&&node.nodes[i+1].name===\"else\"){parts.push(\" \");}else{parts.push(hardline$6);if(util$9.isNextLineEmpty(options.originalText,pathChild.getValue())){parts.push(hardline$6);}}}i++;},\"nodes\");return concat$6(parts);}function printValue(value){return value;}var printerPostcss=genericPrint$3;var assert$1=require$$0;var comments$3=comments$1;var FastPath=fastPath;var multiparser=multiparser$1;var util$5=util$3;var isIdentifierName=utils.keyword.isIdentifierNameES6;var docBuilders$3=docBuilders$1;var concat$2=docBuilders$3.concat;var join$2=docBuilders$3.join;var line$1=docBuilders$3.line;var hardline$2=docBuilders$3.hardline;var softline$1=docBuilders$3.softline;var literalline$1=docBuilders$3.literalline;var group$1=docBuilders$3.group;var indent$2=docBuilders$3.indent;var align$1=docBuilders$3.align;var conditionalGroup$1=docBuilders$3.conditionalGroup;var fill$1=docBuilders$3.fill;var ifBreak$1=docBuilders$3.ifBreak;var breakParent$2=docBuilders$3.breakParent;var lineSuffixBoundary$1=docBuilders$3.lineSuffixBoundary;var addAlignmentToDoc$1=docBuilders$3.addAlignmentToDoc;var docUtils=docUtils$2;var willBreak=docUtils.willBreak;var isLineNext=docUtils.isLineNext;var isEmpty=docUtils.isEmpty;var rawText=docUtils.rawText;function shouldPrintComma(options,level){return options.trailingComma[level];}function getPrintFunction(options){switch(options.parser){case\"graphql\":return printerGraphql;case\"parse5\":return printerHtmlparser2;case\"postcss\":return printerPostcss;default:return genericPrintNoParens;}}function hasJsxIgnoreComment(path){var node=path.getValue();var parent=path.getParentNode();if(!parent||node.type!==\"JSXElement\"||parent.type!==\"JSXElement\"){return false;}// Lookup the previous sibling, ignoring any empty JSXText elements\nvar index=parent.children.indexOf(node);var prevSibling=null;for(var _i21=index;_i21>0;_i21--){var candidate=parent.children[_i21-1];if(candidate.type===\"JSXText\"&&!isMeaningfulJSXText(candidate)){continue;}prevSibling=candidate;break;}return prevSibling&&prevSibling.type===\"JSXExpressionContainer\"&&prevSibling.expression.type===\"JSXEmptyExpression\"&&prevSibling.expression.comments.find(function(comment){return comment.value.trim()===\"prettier-ignore\";});}function genericPrint(path,options,printPath,args){assert$1.ok(path instanceof FastPath);var node=path.getValue();// Escape hatch\nif(node&&(node.comments&&node.comments.length>0&&node.comments.some(function(comment){return comment.value.trim()===\"prettier-ignore\";})||hasJsxIgnoreComment(path))){return options.originalText.slice(util$5.locStart(node),util$5.locEnd(node));}if(node){// Potentially switch to a different parser\nvar next=multiparser.getSubtreeParser(path,options);if(next){try{return multiparser.printSubtree(next,path,printPath,options);}catch(error){/* istanbul ignore if */if(process.env.PRETTIER_DEBUG){var e=new Error(error);e.parser=next.options.parser;throw e;}// Continue with current parser\n}}}var needsParens=false;var linesWithoutParens=getPrintFunction(options)(path,options,printPath,args);if(!node||isEmpty(linesWithoutParens)){return linesWithoutParens;}var decorators=[];if(node.decorators&&node.decorators.length>0&&// If the parent node is an export declaration, it will be\n// responsible for printing node.decorators.\n!util$5.getParentExportDeclaration(path)){var separator=hardline$2;path.each(function(decoratorPath){var prefix=\"@\";var decorator=decoratorPath.getValue();if(decorator.expression){decorator=decorator.expression;prefix=\"\";}if(node.decorators.length===1&&node.type!==\"ClassDeclaration\"&&node.type!==\"MethodDefinition\"&&node.type!==\"ClassMethod\"&&(decorator.type===\"Identifier\"||decorator.type===\"MemberExpression\"||decorator.type===\"CallExpression\"&&(decorator.arguments.length===0||decorator.arguments.length===1&&(isStringLiteral(decorator.arguments[0])||decorator.arguments[0].type===\"Identifier\"||decorator.arguments[0].type===\"MemberExpression\")))){separator=line$1;}decorators.push(prefix,printPath(decoratorPath),separator);},\"decorators\");}else if(util$5.isExportDeclaration(node)&&node.declaration&&node.declaration.decorators){// Export declarations are responsible for printing any decorators\n// that logically apply to node.declaration.\npath.each(function(decoratorPath){var decorator=decoratorPath.getValue();var prefix=decorator.type===\"Decorator\"?\"\":\"@\";decorators.push(prefix,printPath(decoratorPath),hardline$2);},\"declaration\",\"decorators\");}else{// Nodes with decorators can't have parentheses, so we can avoid\n// computing path.needsParens() except in this case.\nneedsParens=path.needsParens(options);}if(node.type){// HACK: ASI prevention in no-semi mode relies on knowledge of whether\n// or not a paren has been inserted (see `exprNeedsASIProtection()`).\n// For now, we're just passing that information by mutating the AST here,\n// but it would be nice to find a cleaner way to do this.\nnode.needsParens=needsParens;}var parts=[];if(needsParens){parts.unshift(\"(\");}parts.push(linesWithoutParens);if(needsParens){parts.push(\")\");}if(decorators.length>0){return group$1(concat$2(decorators.concat(parts)));}return concat$2(parts);}function getPropertyPadding(options,path){if(!options.alignObjectProperties){return\"\";}var n=path.getValue();var type=n.type;var parentNode=path.getParentNode();var isPropertyKey=(parentNode.type===\"Property\"||parentNode.type===\"ObjectProperty\")&&parentNode.key===n;if(!isPropertyKey){return\"\";}var parentObject=path.getParentNode(1);var shouldBreak=util$5.hasNewlineInRange(options.originalText,util$5.locStart(parentObject),util$5.locEnd(parentObject));if(!shouldBreak){return\"\";}var nameLength=type===\"Identifier\"?n.name.length:type===\"NumericLiteral\"?printNumber(n.extra.raw).length:type===\"StringLiteral\"?nodeStr(n,options).length:undefined;if(nameLength===undefined){return\"\";}var properties=parentObject.properties;var lengths=properties.map(function(p){if(!p.key){return 0;}return p.key.end-p.key.start+(p.computed?2:0);});var maxLength=Math.max.apply(null,lengths);var padLength=maxLength-nameLength+1;var padding=\" \".repeat(padLength);return padding;}function genericPrintNoParens(path,options,print,args){var n=path.getValue();var semi=options.semi?\";\":\"\";if(!n){return\"\";}if(typeof n===\"string\"){return n;}var parts=[];switch(n.type){case\"File\":return path.call(print,\"program\");case\"Program\":// Babel 6\nif(n.directives){path.each(function(childPath){parts.push(print(childPath),semi,hardline$2);if(util$5.isNextLineEmpty(options.originalText,childPath.getValue())){parts.push(hardline$2);}},\"directives\");}parts.push(path.call(function(bodyPath){return printStatementSequence(bodyPath,options,print);},\"body\"));parts.push(comments$3.printDanglingComments(path,options,/* sameIndent */true));// Only force a trailing newline if there were any contents.\nif(n.body.length||n.comments){parts.push(hardline$2);}return concat$2(parts);// Babel extension.\ncase\"EmptyStatement\":return\"\";case\"ExpressionStatement\":// Detect Flow-parsed directives\nif(n.directive){return concat$2([nodeStr(n.expression,options,true),semi]);}return concat$2([path.call(print,\"expression\"),semi]);// Babel extension.\ncase\"ParenthesizedExpression\":return concat$2([\"(\",path.call(print,\"expression\"),\")\"]);case\"AssignmentExpression\":return printAssignment(n.left,path.call(print,\"left\"),concat$2([\" \",n.operator]),n.right,path.call(print,\"right\"),options,n.type);case\"BinaryExpression\":case\"LogicalExpression\":{var parent=path.getParentNode();var parentParent=path.getParentNode(1);var isInsideParenthesis=n!==parent.body&&(parent.type===\"IfStatement\"||parent.type===\"WhileStatement\"||parent.type===\"DoWhileStatement\");var _parts2=printBinaryishExpressions(path,print,options,/* isNested */false,isInsideParenthesis);//   if (\n//     this.hasPlugin(\"dynamicImports\") && this.lookahead().type === tt.parenLeft\n//   ) {\n//\n// looks super weird, we want to break the children if the parent breaks\n//\n//   if (\n//     this.hasPlugin(\"dynamicImports\") &&\n//     this.lookahead().type === tt.parenLeft\n//   ) {\nif(isInsideParenthesis){return concat$2(_parts2);}if(parent.type===\"UnaryExpression\"){return group$1(concat$2([indent$2(concat$2([softline$1,concat$2(_parts2)])),softline$1]));}// Avoid indenting sub-expressions in assignment/return/etc statements.\nif(parent.type===\"AssignmentExpression\"||parent.type===\"VariableDeclarator\"||shouldInlineLogicalExpression(n)||parent.type===\"ReturnStatement\"||parent.type===\"JSXExpressionContainer\"&&parentParent.type===\"JSXAttribute\"||n===parent.body&&parent.type===\"ArrowFunctionExpression\"||n!==parent.body&&parent.type===\"ForStatement\"||parent.type===\"ObjectProperty\"||parent.type===\"Property\"||parent.type===\"ConditionalExpression\"){return group$1(concat$2(_parts2));}var rest=concat$2(_parts2.slice(1));return group$1(concat$2([// Don't include the initial expression in the indentation\n// level. The first item is guaranteed to be the first\n// left-most expression.\n_parts2.length>0?_parts2[0]:\"\",indent$2(rest)]));}case\"AssignmentPattern\":return concat$2([path.call(print,\"left\"),\" = \",path.call(print,\"right\")]);case\"TSTypeAssertionExpression\":return concat$2([\"<\",path.call(print,\"typeAnnotation\"),\">\",path.call(print,\"expression\")]);case\"MemberExpression\":{var _parent3=path.getParentNode();var firstNonMemberParent=void 0;var _i22=0;do{firstNonMemberParent=path.getParentNode(_i22);_i22++;}while(firstNonMemberParent&&firstNonMemberParent.type===\"MemberExpression\");var shouldInline=firstNonMemberParent&&(firstNonMemberParent.type===\"VariableDeclarator\"&&firstNonMemberParent.id.type!==\"Identifier\"||firstNonMemberParent.type===\"AssignmentExpression\"&&firstNonMemberParent.left.type!==\"Identifier\")||n.computed||n.object.type===\"Identifier\"&&n.property.type===\"Identifier\"&&_parent3.type!==\"MemberExpression\";return concat$2([path.call(print,\"object\"),shouldInline?printMemberLookup(path,options,print):group$1(indent$2(concat$2([softline$1,printMemberLookup(path,options,print)])))]);}case\"MetaProperty\":return concat$2([path.call(print,\"meta\"),\".\",path.call(print,\"property\")]);case\"BindExpression\":if(n.object){parts.push(path.call(print,\"object\"));}parts.push(printBindExpressionCallee(path,options,print));return concat$2(parts);case\"Identifier\":{var parentNode=path.getParentNode();var isFunctionDeclarationIdentifier=parentNode.type===\"DeclareFunction\"&&parentNode.id===n;return concat$2([n.name,n.optional?\"?\":\"\",n.typeAnnotation&&!isFunctionDeclarationIdentifier?\": \":\"\",path.call(print,\"typeAnnotation\")]);}case\"SpreadElement\":case\"SpreadElementPattern\":case\"RestProperty\":case\"ExperimentalRestProperty\":case\"ExperimentalSpreadProperty\":case\"SpreadProperty\":case\"SpreadPropertyPattern\":case\"RestElement\":case\"ObjectTypeSpreadProperty\":return concat$2([\"...\",path.call(print,\"argument\"),n.typeAnnotation?\": \":\"\",path.call(print,\"typeAnnotation\")]);case\"FunctionDeclaration\":case\"FunctionExpression\":case\"TSNamespaceFunctionDeclaration\":if(isNodeStartingWithDeclare(n,options)){parts.push(\"declare \");}parts.push(printFunctionDeclaration(path,print,options));if(!n.body){parts.push(semi);}return concat$2(parts);case\"ArrowFunctionExpression\":{if(n.async){parts.push(\"async \");}//parts.push(printFunctionTypeParameters(path, options, print));\nif(canPrintParamsWithoutParens(n,options)){parts.push(path.call(print,\"params\",0));}else{parts.push(group$1(concat$2([printFunctionParams(path,print,options,/* expandLast */args&&(args.expandLastArg||args.expandFirstArg),/* printTypeParams */true),printReturnType(path,print)])));}parts.push(\" =>\");var body=path.call(function(bodyPath){return print(bodyPath,args);},\"body\");// We want to always keep these types of nodes on the same line\n// as the arrow.\nif(!hasLeadingOwnLineComment(options.originalText,n.body)&&(n.body.type===\"ArrayExpression\"||n.body.type===\"ObjectExpression\"||n.body.type===\"BlockStatement\"||n.body.type===\"JSXElement\"||isTemplateOnItsOwnLine(n.body,options.originalText)||n.body.type===\"ArrowFunctionExpression\")){return group$1(concat$2([concat$2(parts),\" \",body]));}// We handle sequence expressions as the body of arrows specially,\n// so that the required parentheses end up on their own lines.\nif(n.body.type===\"SequenceExpression\"){return group$1(concat$2([concat$2(parts),group$1(concat$2([\" (\",indent$2(concat$2([softline$1,body])),softline$1,\")\"]))]));}// if the arrow function is expanded as last argument, we are adding a\n// level of indentation and need to add a softline to align the closing )\n// with the opening (.\nvar shouldAddSoftLine=args&&args.expandLastArg;// In order to avoid confusion between\n// a => a ? a : a\n// a <= a ? a : a\nvar shouldAddParens=n.body.type===\"ConditionalExpression\"&&!util$5.startsWithNoLookaheadToken(n.body,/* forbidFunctionAndClass */false);return group$1(concat$2([concat$2(parts),group$1(concat$2([indent$2(concat$2([line$1,shouldAddParens?ifBreak$1(\"\",\"(\"):\"\",body,shouldAddParens?ifBreak$1(\"\",\")\"):\"\"])),shouldAddSoftLine?concat$2([ifBreak$1(shouldPrintComma(options,\"arguments\")?\",\":\"\"),softline$1]):\"\"]))]));}case\"MethodDefinition\":case\"TSAbstractMethodDefinition\":if(n.accessibility){parts.push(n.accessibility+\" \");}if(n.static){parts.push(\"static \");}if(n.type===\"TSAbstractMethodDefinition\"){parts.push(\"abstract \");}parts.push(printMethod(path,options,print));return concat$2(parts);case\"YieldExpression\":parts.push(\"yield\");if(n.delegate){parts.push(\"*\");}if(n.argument){parts.push(\" \",path.call(print,\"argument\"));}return concat$2(parts);case\"AwaitExpression\":return concat$2([\"await \",path.call(print,\"argument\")]);case\"ImportSpecifier\":if(n.importKind){parts.push(path.call(print,\"importKind\"),\" \");}parts.push(path.call(print,\"imported\"));if(n.local&&n.local.name!==n.imported.name){parts.push(\" as \",path.call(print,\"local\"));}return concat$2(parts);case\"ExportSpecifier\":parts.push(path.call(print,\"local\"));if(n.exported&&n.exported.name!==n.local.name){parts.push(\" as \",path.call(print,\"exported\"));}return concat$2(parts);case\"ImportNamespaceSpecifier\":parts.push(\"* as \");if(n.local){parts.push(path.call(print,\"local\"));}else if(n.id){parts.push(path.call(print,\"id\"));}return concat$2(parts);case\"ImportDefaultSpecifier\":if(n.local){return path.call(print,\"local\");}return path.call(print,\"id\");case\"TSExportAssigment\":return concat$2([\"export = \",path.call(print,\"expression\"),semi]);case\"ExportDefaultDeclaration\":case\"ExportNamedDeclaration\":return printExportDeclaration(path,options,print);case\"ExportAllDeclaration\":return concat$2([\"export * from \",path.call(print,\"source\"),semi]);case\"ExportNamespaceSpecifier\":case\"ExportDefaultSpecifier\":return path.call(print,\"exported\");case\"ImportDeclaration\":{parts.push(\"import \");if(n.importKind&&n.importKind!==\"value\"){parts.push(n.importKind+\" \");}var standalones=[];var grouped=[];if(n.specifiers&&n.specifiers.length>0){path.each(function(specifierPath){var value=specifierPath.getValue();if(value.type===\"ImportDefaultSpecifier\"||value.type===\"ImportNamespaceSpecifier\"){standalones.push(print(specifierPath));}else{grouped.push(print(specifierPath));}},\"specifiers\");if(standalones.length>0){parts.push(join$2(\", \",standalones));}if(standalones.length>0&&grouped.length>0){parts.push(\", \");}if(grouped.length===1&&standalones.length===0&&n.specifiers&&!n.specifiers.some(function(node){return node.comments;})){parts.push(concat$2([\"{\",options.bracesSpacing?\" \":\"\",concat$2(grouped),options.bracesSpacing?\" \":\"\",\"}\"]));}else if(grouped.length>=1){parts.push(group$1(concat$2([\"{\",indent$2(concat$2([options.bracesSpacing?line$1:softline$1,join$2(concat$2([\",\",line$1]),grouped)])),ifBreak$1(shouldPrintComma(options,\"import\")?\",\":\"\"),options.bracesSpacing?line$1:softline$1,\"}\"])));}parts.push(\" from \");}else if(n.importKind&&n.importKind===\"type\"||// import {} from 'x'\n/{\\s*}/.test(options.originalText.slice(util$5.locStart(n),util$5.locStart(n.source)))){parts.push(\"{} from \");}parts.push(path.call(print,\"source\"),semi);return concat$2(parts);}case\"Import\":return\"import\";case\"BlockStatement\":{var naked=path.call(function(bodyPath){return printStatementSequence(bodyPath,options,print);},\"body\");var hasContent=n.body.find(function(node){return node.type!==\"EmptyStatement\";});var hasDirectives=n.directives&&n.directives.length>0;var _parent4=path.getParentNode();var _parentParent=path.getParentNode(1);if(!hasContent&&!hasDirectives&&!n.comments&&(_parent4.type===\"ArrowFunctionExpression\"||_parent4.type===\"FunctionExpression\"||_parent4.type===\"FunctionDeclaration\"||_parent4.type===\"ObjectMethod\"||_parent4.type===\"ClassMethod\"||_parent4.type===\"ForStatement\"||_parent4.type===\"WhileStatement\"||_parent4.type===\"DoWhileStatement\"||_parent4.type===\"CatchClause\"&&!_parentParent.finalizer)){return\"{}\";}parts.push(\"{\");// Babel 6\nif(hasDirectives){path.each(function(childPath){parts.push(indent$2(concat$2([hardline$2,print(childPath),semi])));if(util$5.isNextLineEmpty(options.originalText,childPath.getValue())){parts.push(hardline$2);}},\"directives\");}if(hasContent){parts.push(indent$2(concat$2([hardline$2,naked])));}parts.push(comments$3.printDanglingComments(path,options));parts.push(hardline$2,\"}\");return concat$2(parts);}case\"ReturnStatement\":parts.push(\"return\");if(n.argument){if(returnArgumentHasLeadingComment(options,n.argument)){parts.push(concat$2([\" (\",indent$2(concat$2([softline$1,path.call(print,\"argument\")])),line$1,\")\"]));}else if(n.argument.type===\"LogicalExpression\"||n.argument.type===\"BinaryExpression\"||n.argument.type===\"SequenceExpression\"){parts.push(group$1(concat$2([ifBreak$1(\" (\",\" \"),indent$2(concat$2([softline$1,path.call(print,\"argument\")])),softline$1,ifBreak$1(\")\")])));}else{parts.push(\" \",path.call(print,\"argument\"));}}if(hasDanglingComments(n)){parts.push(\" \",comments$3.printDanglingComments(path,options,/* sameIndent */true));}parts.push(semi);return concat$2(parts);case\"NewExpression\":case\"CallExpression\":{var isNew=n.type===\"NewExpression\";if(// We want to keep require calls as a unit\n!isNew&&n.callee.type===\"Identifier\"&&n.callee.name===\"require\"||n.callee.type===\"Import\"||// Template literals as single arguments\nn.arguments.length===1&&isTemplateOnItsOwnLine(n.arguments[0],options.originalText)||// Keep test declarations on a single line\n// e.g. `it('long name', () => {`\n!isNew&&n.callee.type===\"Identifier\"&&(n.callee.name===\"it\"||n.callee.name===\"test\"||n.callee.name===\"describe\")&&n.arguments.length===2&&(n.arguments[0].type===\"StringLiteral\"||n.arguments[0].type===\"TemplateLiteral\"||n.arguments[0].type===\"Literal\"&&typeof n.arguments[0].value===\"string\")&&(n.arguments[1].type===\"FunctionExpression\"||n.arguments[1].type===\"ArrowFunctionExpression\")&&n.arguments[1].params.length<=1){return concat$2([isNew?\"new \":\"\",path.call(print,\"callee\"),path.call(print,\"typeParameters\"),concat$2([\"(\",join$2(\", \",path.map(print,\"arguments\")),\")\"])]);}// We detect calls on member lookups and possibly print them in a\n// special chain format. See `printMemberChain` for more info.\nif(!isNew&&isMemberish(n.callee)){return printMemberChain(path,options,print);}return concat$2([isNew?\"new \":\"\",path.call(print,\"callee\"),printFunctionTypeParameters(path,options,print),printArgumentsList(path,options,print)]);}case\"TSInterfaceDeclaration\":parts.push(n.abstract?\"abstract \":\"\",printTypeScriptModifiers(path,options,print),\"interface \",path.call(print,\"id\"),n.typeParameters?path.call(print,\"typeParameters\"):\"\",\" \");if(n.heritage.length){parts.push(group$1(indent$2(concat$2([softline$1,\"extends \",indent$2(join$2(concat$2([\",\",line$1]),path.map(print,\"heritage\"))),\" \"]))));}parts.push(path.call(print,\"body\"));return concat$2(parts);case\"ObjectExpression\":case\"ObjectPattern\":case\"ObjectTypeAnnotation\":case\"TSInterfaceBody\":case\"TSTypeLiteral\":{var isTypeAnnotation=n.type===\"ObjectTypeAnnotation\";var shouldBreak=n.type===\"TSInterfaceBody\"||n.type!==\"ObjectPattern\"&&util$5.hasNewlineInRange(options.originalText,util$5.locStart(n),util$5.locEnd(n));var separator=n.type===\"TSInterfaceBody\"||n.type===\"TSTypeLiteral\"?ifBreak$1(semi,\";\"):\",\";var fields=[];var leftBrace=n.exact?\"{|\":\"{\";var rightBrace=n.exact?\"|}\":\"}\";var _parent5=path.getParentNode(0);var propertiesField=void 0;if(n.type===\"TSTypeLiteral\"){propertiesField=\"members\";}else if(n.type===\"TSInterfaceBody\"){propertiesField=\"body\";}else{propertiesField=\"properties\";}if(isTypeAnnotation){fields.push(\"indexers\",\"callProperties\");}fields.push(propertiesField);// Unfortunately, things are grouped together in the ast can be\n// interleaved in the source code. So we need to reorder them before\n// printing them.\nvar propsAndLoc=[];fields.forEach(function(field){path.each(function(childPath){var node=childPath.getValue();propsAndLoc.push({node:node,printed:print(childPath),loc:util$5.locStart(node)});},field);});var separatorParts=[];var props=propsAndLoc.sort(function(a,b){return a.loc-b.loc;}).map(function(prop){var result=concat$2(separatorParts.concat(group$1(prop.printed)));separatorParts=[separator,line$1];if(util$5.isNextLineEmpty(options.originalText,prop.node)){separatorParts.push(hardline$2);}return result;});var lastElem=util$5.getLast(n[propertiesField]);var canHaveTrailingSeparator=!(lastElem&&(lastElem.type===\"RestProperty\"||lastElem.type===\"RestElement\"));var content=void 0;if(props.length===0&&!n.typeAnnotation){if(!hasDanglingComments(n)){return concat$2([leftBrace,rightBrace]);}content=group$1(concat$2([leftBrace,comments$3.printDanglingComments(path,options),softline$1,rightBrace,n.optional?\"?\":\"\"]));}else{content=concat$2([leftBrace,indent$2(concat$2([options.bracesSpacing?line$1:softline$1,concat$2(props)])),ifBreak$1(canHaveTrailingSeparator&&(separator!==\",\"||shouldPrintComma(options,\"object\"))?separator:\"\"),concat$2([options.bracesSpacing?line$1:softline$1,rightBrace]),n.optional?\"?\":\"\",n.typeAnnotation?\": \":\"\",path.call(print,\"typeAnnotation\")]);}// If we inline the object as first argument of the parent, we don't want\n// to create another group so that the object breaks before the return\n// type\nvar parentParentParent=path.getParentNode(2);if(n.type===\"ObjectPattern\"&&_parent5&&shouldHugArguments(_parent5)&&_parent5.params[0]===n||shouldHugType(n)&&parentParentParent&&shouldHugArguments(parentParentParent)&&parentParentParent.params[0].typeAnnotation.typeAnnotation===n){return content;}return group$1(content,{shouldBreak:shouldBreak});}// Babel 6\ncase\"ObjectProperty\":// Non-standard AST node type.\ncase\"Property\":if(n.method||n.kind===\"get\"||n.kind===\"set\"){return printMethod(path,options,print);}if(n.shorthand){parts.push(path.call(print,\"value\"));}else{var printedLeft=void 0;var propertyPadding=path.call(getPropertyPadding.bind(null,options),\"key\");if(n.computed){printedLeft=concat$2([\"[\",path.call(print,\"key\"),\"]\",propertyPadding.slice(2)]);}else{printedLeft=concat$2([printPropertyKey(path,options,print),propertyPadding]);}parts.push(printAssignment(n.key,printedLeft,\":\",n.value,path.call(print,\"value\"),options,n.type));}return concat$2(parts);// Babel 6\ncase\"ClassMethod\":if(n.static){parts.push(\"static \");}parts=parts.concat(printObjectMethod(path,options,print));return concat$2(parts);// Babel 6\ncase\"ObjectMethod\":return printObjectMethod(path,options,print);case\"Decorator\":return concat$2([\"@\",path.call(print,\"expression\")]);case\"ArrayExpression\":case\"ArrayPattern\":if(n.elements.length===0){if(!hasDanglingComments(n)){parts.push(\"[]\");}else{parts.push(group$1(concat$2([\"[\",comments$3.printDanglingComments(path,options),softline$1,\"]\"])));}}else{var _lastElem=util$5.getLast(n.elements);var canHaveTrailingComma=!(_lastElem&&_lastElem.type===\"RestElement\");// JavaScript allows you to have empty elements in an array which\n// changes its length based on the number of commas. The algorithm\n// is that if the last argument is null, we need to force insert\n// a comma to ensure JavaScript recognizes it.\n//   [,].length === 1\n//   [1,].length === 1\n//   [1,,].length === 2\n//\n// Note that util.getLast returns null if the array is empty, but\n// we already check for an empty array just above so we are safe\nvar needsForcedTrailingComma=canHaveTrailingComma&&_lastElem===null;var printedElements=[];var _separatorParts=[];path.each(function(childPath){printedElements.push(concat$2(_separatorParts));printedElements.push(group$1(print(childPath)));_separatorParts=[\",\",options.arrayExpand?hardline$2:line$1];if(childPath.getValue()&&util$5.isNextLineEmpty(options.originalText,childPath.getValue())){_separatorParts.push(softline$1);}},\"elements\");parts.push(group$1(concat$2([\"[\",indent$2(concat$2([options.bracketSpacing?line$1:softline$1,printArrayItems(path,options,\"elements\",print)])),needsForcedTrailingComma?\",\":\"\",ifBreak$1(canHaveTrailingComma&&!needsForcedTrailingComma&&shouldPrintComma(options,\"array\")?\",\":\"\"),comments$3.printDanglingComments(path,options,/* sameIndent */true),options.arrayExpand?hardline$2:options.bracketSpacing?line$1:softline$1,\"]\"])));}if(n.optional){parts.push(\"?\");}if(n.typeAnnotation){parts.push(\": \",path.call(print,\"typeAnnotation\"));}return concat$2(parts);case\"SequenceExpression\":{var _parent6=path.getParentNode(0);if(_parent6.type===\"ExpressionStatement\"||_parent6.type===\"ForStatement\"){// For ExpressionStatements and for-loop heads, which are among\n// the few places a SequenceExpression appears unparenthesized, we want\n// to indent expressions after the first.\nvar _parts3=[];path.each(function(p){if(p.getName()===0){_parts3.push(print(p));}else{_parts3.push(\",\",indent$2(concat$2([line$1,print(p)])));}},\"expressions\");return group$1(concat$2(_parts3));}return group$1(concat$2([join$2(concat$2([\",\",line$1]),path.map(print,\"expressions\"))]));}case\"ThisExpression\":return\"this\";case\"Super\":return\"super\";case\"NullLiteral\":// Babel 6 Literal split\nreturn\"null\";case\"RegExpLiteral\":// Babel 6 Literal split\nreturn printRegex(n);case\"NumericLiteral\":// Babel 6 Literal split\nreturn printNumber(n.extra.raw);case\"BooleanLiteral\":// Babel 6 Literal split\ncase\"StringLiteral\":// Babel 6 Literal split\ncase\"Literal\":{if(n.regex){return printRegex(n.regex);}if(typeof n.value===\"number\"){return printNumber(n.raw);}if(typeof n.value!==\"string\"){return\"\"+n.value;}// TypeScript workaround for eslint/typescript-eslint-parser#267\n// See corresponding workaround in fast-path.js needsParens()\nvar grandParent=path.getParentNode(1);var isTypeScriptDirective=options.parser===\"typescript\"&&typeof n.value===\"string\"&&grandParent&&(grandParent.type===\"Program\"||grandParent.type===\"BlockStatement\");return nodeStr(n,options,isTypeScriptDirective);}case\"Directive\":return path.call(print,\"value\");// Babel 6\ncase\"DirectiveLiteral\":return nodeStr(n,options);case\"UnaryExpression\":parts.push(n.operator);if(/[a-z]$/.test(n.operator)){parts.push(\" \");}parts.push(path.call(print,\"argument\"));return concat$2(parts);case\"UpdateExpression\":parts.push(path.call(print,\"argument\"),n.operator);if(n.prefix){parts.reverse();}return concat$2(parts);case\"ConditionalExpression\":{// We print a ConditionalExpression in either \"JSX mode\" or \"normal mode\".\n// See tests/jsx/conditional-expression.js for more info.\nvar jsxMode=false;var _parent7=path.getParentNode();var forceNoIndent=_parent7.type===\"ConditionalExpression\";// Find the outermost non-ConditionalExpression parent, and the outermost\n// ConditionalExpression parent. We'll use these to determine if we should\n// print in JSX mode.\nvar currentParent=void 0;var previousParent=void 0;var _i23=0;do{previousParent=currentParent||n;currentParent=path.getParentNode(_i23);_i23++;}while(currentParent&&currentParent.type===\"ConditionalExpression\");var firstNonConditionalParent=currentParent||_parent7;var lastConditionalParent=previousParent;/**/if(options.flattenTernaries){var subTernary=_parent7.type===n.type;var _parts4=[path.call(print,\"test\"),\" ? \",path.call(print,\"consequent\"),\" :\",hardline$2,path.call(print,\"alternate\")];return group$1(subTernary?concat$2(_parts4):indent$2(concat$2([softline$1].concat(_parts4))));}/**/if(n.test.type===\"JSXElement\"||n.consequent.type===\"JSXElement\"||n.alternate.type===\"JSXElement\"||_parent7.type===\"JSXExpressionContainer\"||firstNonConditionalParent.type===\"JSXExpressionContainer\"||conditionalExpressionChainContainsJSX(lastConditionalParent)){jsxMode=true;forceNoIndent=true;// Even though they don't need parens, we wrap (almost) everything in\n// parens when using ?: within JSX, because the parens are analagous to\n// curly braces in an if statement.\nvar wrap=function wrap(doc){return concat$2([ifBreak$1(\"(\",\"\"),indent$2(concat$2([softline$1,doc])),softline$1,ifBreak$1(\")\",\"\")]);};// The only things we don't wrap are:\n// * Nested conditional expressions\n// * null\nvar shouldNotWrap=function shouldNotWrap(node){return node.type===\"ConditionalExpression\"||node.type===\"NullLiteral\"||node.type===\"Literal\"&&node.value===null;};parts.push(\" ? \",shouldNotWrap(n.consequent)?path.call(print,\"consequent\"):wrap(path.call(print,\"consequent\")),\" : \",shouldNotWrap(n.alternate)?path.call(print,\"alternate\"):wrap(path.call(print,\"alternate\")));}else{// normal mode\nparts.push(line$1,\"? \",n.consequent.type===\"ConditionalExpression\"?ifBreak$1(\"\",\"(\"):\"\",align$1(2,path.call(print,\"consequent\")),n.consequent.type===\"ConditionalExpression\"?ifBreak$1(\"\",\")\"):\"\",line$1,\": \",align$1(2,path.call(print,\"alternate\")));}// In JSX mode, we want a whole chain of ConditionalExpressions to all\n// break if any of them break. That means we should only group around the\n// outer-most ConditionalExpression.\nvar maybeGroup=function maybeGroup(doc){return jsxMode?_parent7===firstNonConditionalParent?group$1(doc):doc:group$1(doc);};// Always group in normal mode.\nreturn maybeGroup(concat$2([path.call(print,\"test\"),forceNoIndent?concat$2(parts):indent$2(concat$2(parts))]));}case\"VariableDeclaration\":{var printed=path.map(function(childPath){return print(childPath);},\"declarations\");// We generally want to terminate all variable declarations with a\n// semicolon, except when they in the () part of for loops.\nvar _parentNode=path.getParentNode();var isParentForLoop=_parentNode.type===\"ForStatement\"||_parentNode.type===\"ForInStatement\"||_parentNode.type===\"ForOfStatement\"||_parentNode.type===\"ForAwaitStatement\";var hasValue=n.declarations.some(function(decl){return decl.init;});var firstVariable=void 0;if(printed.length===1){firstVariable=printed[0];}else if(printed.length>1){// Indent first var to comply with eslint one-var rule\nfirstVariable=indent$2(printed[0]);}parts=[isNodeStartingWithDeclare(n,options)?\"declare \":\"\",n.kind,firstVariable?concat$2([\" \",firstVariable]):\"\",indent$2(concat$2(printed.slice(1).map(function(p){return concat$2([\",\",hasValue&&!isParentForLoop?hardline$2:line$1,p]);})))];if(!(isParentForLoop&&_parentNode.body!==n)){parts.push(semi);}return group$1(concat$2(parts));}case\"VariableDeclarator\":return printAssignment(n.id,concat$2([path.call(print,\"id\"),path.call(print,\"typeParameters\")]),\" =\",n.init,n.init&&path.call(print,\"init\"),options,n.type);case\"WithStatement\":return group$1(concat$2([\"with (\",path.call(print,\"object\"),\")\",adjustClause(n.body,path.call(print,\"body\"))]));case\"IfStatement\":{var con=adjustClause(n.consequent,path.call(print,\"consequent\"));var opening=group$1(concat$2([\"if (\",group$1(concat$2([indent$2(concat$2([softline$1,path.call(print,\"test\")])),softline$1])),\")\",con]));parts.push(opening);if(n.alternate){if(n.consequent.type===\"BlockStatement\"){if(options.breakBeforeElse){parts.push(hardline$2,\"else\");}else{parts.push(\" \",\"else\");}}else{parts.push(hardline$2,\"else\");}parts.push(group$1(adjustClause(n.alternate,path.call(print,\"alternate\"),n.alternate.type===\"IfStatement\")));}return concat$2(parts);}case\"ForStatement\":{var _body=adjustClause(n.body,path.call(print,\"body\"));// We want to keep dangling comments above the loop to stay consistent.\n// Any comment positioned between the for statement and the parentheses\n// is going to be printed before the statement.\nvar dangling=comments$3.printDanglingComments(path,options,/* sameLine */true);var printedComments=dangling?concat$2([dangling,softline$1]):\"\";if(!n.init&&!n.test&&!n.update){return concat$2([printedComments,group$1(concat$2([\"for (;;)\",_body]))]);}return concat$2([printedComments,group$1(concat$2([\"for (\",group$1(concat$2([indent$2(concat$2([softline$1,path.call(print,\"init\"),\";\",line$1,path.call(print,\"test\"),\";\",line$1,path.call(print,\"update\")])),softline$1])),\")\",_body]))]);}case\"WhileStatement\":return group$1(concat$2([\"while (\",group$1(concat$2([indent$2(concat$2([softline$1,path.call(print,\"test\")])),softline$1])),\")\",adjustClause(n.body,path.call(print,\"body\"))]));case\"ForInStatement\":// Note: esprima can't actually parse \"for each (\".\nreturn group$1(concat$2([n.each?\"for each (\":\"for (\",path.call(print,\"left\"),\" in \",path.call(print,\"right\"),\")\",adjustClause(n.body,path.call(print,\"body\"))]));case\"ForOfStatement\":case\"ForAwaitStatement\":{// Babylon 7 removed ForAwaitStatement in favor of ForOfStatement\n// with `\"await\": true`:\n// https://github.com/estree/estree/pull/138\nvar isAwait=n.type===\"ForAwaitStatement\"||n.await;return group$1(concat$2([\"for\",isAwait?\" await\":\"\",\" (\",path.call(print,\"left\"),\" of \",path.call(print,\"right\"),\")\",adjustClause(n.body,path.call(print,\"body\"))]));}case\"DoWhileStatement\":{var clause=adjustClause(n.body,path.call(print,\"body\"));var doBody=group$1(concat$2([\"do\",clause]));parts=[doBody];if(n.body.type===\"BlockStatement\"){parts.push(\" \");}else{parts.push(hardline$2);}parts.push(\"while (\");parts.push(group$1(concat$2([indent$2(concat$2([softline$1,path.call(print,\"test\")])),softline$1])),\")\",semi);return concat$2(parts);}case\"DoExpression\":return concat$2([\"do \",path.call(print,\"body\")]);case\"BreakStatement\":parts.push(\"break\");if(n.label){parts.push(\" \",path.call(print,\"label\"));}parts.push(semi);return concat$2(parts);case\"ContinueStatement\":parts.push(\"continue\");if(n.label){parts.push(\" \",path.call(print,\"label\"));}parts.push(semi);return concat$2(parts);case\"LabeledStatement\":if(n.body.type===\"EmptyStatement\"){return concat$2([path.call(print,\"label\"),\":;\"]);}return concat$2([path.call(print,\"label\"),\": \",path.call(print,\"body\")]);case\"TryStatement\":return concat$2([\"try \",path.call(print,\"block\"),n.handler?concat$2([\" \",path.call(print,\"handler\")]):\"\",n.finalizer?concat$2([\" finally \",path.call(print,\"finalizer\")]):\"\"]);case\"CatchClause\":return concat$2([\"catch (\",path.call(print,\"param\"),\") \",path.call(print,\"body\")]);case\"ThrowStatement\":return concat$2([\"throw \",path.call(print,\"argument\"),semi]);// Note: ignoring n.lexical because it has no printing consequences.\ncase\"SwitchStatement\":return concat$2([\"switch (\",path.call(print,\"discriminant\"),\") {\",n.cases.length>0?indent$2(concat$2([hardline$2,join$2(hardline$2,path.map(function(casePath){var caseNode=casePath.getValue();return concat$2([casePath.call(print),n.cases.indexOf(caseNode)!==n.cases.length-1&&util$5.isNextLineEmpty(options.originalText,caseNode)?hardline$2:\"\"]);},\"cases\"))])):\"\",hardline$2,\"}\"]);case\"SwitchCase\":{if(n.test){parts.push(\"case \",path.call(print,\"test\"),\":\");}else{parts.push(\"default:\");}var consequent=n.consequent.filter(function(node){return node.type!==\"EmptyStatement\";});if(consequent.length>0){var cons=path.call(function(consequentPath){return printStatementSequence(consequentPath,options,print);},\"consequent\");parts.push(consequent.length===1&&consequent[0].type===\"BlockStatement\"?concat$2([\" \",cons]):indent$2(concat$2([hardline$2,cons])));}return concat$2(parts);}// JSX extensions below.\ncase\"DebuggerStatement\":return concat$2([\"debugger\",semi]);case\"JSXAttribute\":parts.push(path.call(print,\"name\"));if(n.value){var res=void 0;if(isStringLiteral(n.value)){var value=rawText(n.value);if(options.jsxSingleQuote){res=\"'\"+value.slice(1,-1).replace(/'/g,\"&#39;\")+\"'\";}else{res='\"'+value.slice(1,-1).replace(/\"/g,\"&quot;\")+'\"';}}else{res=path.call(print,\"value\");}parts.push(\"=\",res);}return concat$2(parts);case\"JSXIdentifier\":// Can be removed when this is fixed:\n// https://github.com/eslint/typescript-eslint-parser/issues/337\nif(!n.name){return\"this\";}return\"\"+n.name;case\"JSXNamespacedName\":return join$2(\":\",[path.call(print,\"namespace\"),path.call(print,\"name\")]);case\"JSXMemberExpression\":return join$2(\".\",[path.call(print,\"object\"),path.call(print,\"property\")]);case\"TSQualifiedName\":return join$2(\".\",[path.call(print,\"left\"),path.call(print,\"right\")]);case\"JSXSpreadAttribute\":return concat$2([\"{...\",path.call(print,\"argument\"),\"}\"]);case\"JSXExpressionContainer\":{var _parent8=path.getParentNode(0);var _shouldInline=n.expression.type===\"ArrayExpression\"||n.expression.type===\"ObjectExpression\"||n.expression.type===\"ArrowFunctionExpression\"||n.expression.type===\"CallExpression\"||n.expression.type===\"FunctionExpression\"||n.expression.type===\"JSXEmptyExpression\"||n.expression.type===\"TemplateLiteral\"||n.expression.type===\"TaggedTemplateExpression\"||_parent8.type===\"JSXElement\"&&(n.expression.type===\"ConditionalExpression\"||isBinaryish(n.expression));if(_shouldInline){return group$1(concat$2([\"{\",path.call(print,\"expression\"),lineSuffixBoundary$1,\"}\"]));}return group$1(concat$2([\"{\",indent$2(concat$2([softline$1,path.call(print,\"expression\")])),softline$1,lineSuffixBoundary$1,\"}\"]));}case\"JSXElement\":{var elem=comments$3.printComments(path,function(){return printJSXElement(path,options,print);},options);return maybeWrapJSXElementInParens(path,elem);}case\"JSXOpeningElement\":{var _n2=path.getValue();// don't break up opening elements with a single long text attribute\nif(_n2.attributes.length===1&&_n2.attributes[0].value&&isStringLiteral(_n2.attributes[0].value)){return group$1(concat$2([\"<\",path.call(print,\"name\"),\" \",concat$2(path.map(print,\"attributes\")),_n2.selfClosing?\" />\":\">\"]));}return group$1(concat$2([\"<\",path.call(print,\"name\"),concat$2([indent$2(concat$2(path.map(function(attr){return concat$2([line$1,print(attr)]);},\"attributes\"))),_n2.selfClosing?line$1:options.jsxBracketSameLine?\">\":softline$1]),_n2.selfClosing?\"/>\":options.jsxBracketSameLine?\"\":\">\"]));}case\"JSXClosingElement\":return concat$2([\"</\",path.call(print,\"name\"),\">\"]);case\"JSXText\":/* istanbul ignore next */throw new Error(\"JSXTest should be handled by JSXElement\");case\"JSXEmptyExpression\":{var requiresHardline=n.comments&&!n.comments.every(util$5.isBlockComment);return concat$2([comments$3.printDanglingComments(path,options,/* sameIndent */!requiresHardline),requiresHardline?hardline$2:\"\"]);}case\"ClassBody\":if(!n.comments&&n.body.length===0){return\"{}\";}return concat$2([\"{\",n.body.length>0?indent$2(concat$2([hardline$2,path.call(function(bodyPath){return printStatementSequence(bodyPath,options,print);},\"body\")])):comments$3.printDanglingComments(path,options),hardline$2,\"}\"]);case\"ClassProperty\":case\"TSAbstractClassProperty\":{if(n.accessibility){parts.push(n.accessibility+\" \");}if(n.static){parts.push(\"static \");}if(n.type===\"TSAbstractClassProperty\"){parts.push(\"abstract \");}if(n.readonly){parts.push(\"readonly \");}var variance=getFlowVariance(n);if(variance){parts.push(variance);}if(n.computed){parts.push(\"[\",path.call(print,\"key\"),\"]\");}else{parts.push(printPropertyKey(path,options,print));}if(n.typeAnnotation){parts.push(\": \",path.call(print,\"typeAnnotation\"));}if(n.value){parts.push(\" =\",printAssignmentRight(n.value,path.call(print,\"value\"),false,// canBreak\noptions));}parts.push(semi);return concat$2(parts);}case\"ClassDeclaration\":case\"ClassExpression\":case\"TSAbstractClassDeclaration\":if(isNodeStartingWithDeclare(n,options)){parts.push(\"declare \");}parts.push(concat$2(printClass(path,options,print)));return concat$2(parts);case\"TSInterfaceHeritage\":parts.push(path.call(print,\"id\"));if(n.typeParameters){parts.push(path.call(print,\"typeParameters\"));}return concat$2(parts);case\"TemplateElement\":return join$2(literalline$1,n.value.raw.split(/\\r?\\n/g));case\"TemplateLiteral\":{var expressions=path.map(print,\"expressions\");parts.push(\"`\");path.each(function(childPath){var i=childPath.getName();parts.push(print(childPath));if(i<expressions.length){// For a template literal of the following form:\n//   `someQuery {\n//     ${call({\n//       a,\n//       b,\n//     })}\n//   }`\n// the expression is on its own line (there is a \\n in the previous\n// quasi literal), therefore we want to indent the JavaScript\n// expression inside at the beginning of ${ instead of the beginning\n// of the `.\nvar size=0;var _value=childPath.getValue().value.raw;var _index=_value.lastIndexOf(\"\\n\");var tabWidth=options.tabWidth;if(_index!==-1){size=util$5.getAlignmentSize(// All the leading whitespaces\n_value.slice(_index+1).match(/^[ \\t]*/)[0],tabWidth);}var aligned=addAlignmentToDoc$1(expressions[i],size,tabWidth);parts.push(\"${\",aligned,lineSuffixBoundary$1,\"}\");}},\"quasis\");parts.push(\"`\");return concat$2(parts);}// These types are unprintable because they serve as abstract\n// supertypes for other (printable) types.\ncase\"TaggedTemplateExpression\":return concat$2([path.call(print,\"tag\"),path.call(print,\"quasi\")]);case\"Node\":case\"Printable\":case\"SourceLocation\":case\"Position\":case\"Statement\":case\"Function\":case\"Pattern\":case\"Expression\":case\"Declaration\":case\"Specifier\":case\"NamedSpecifier\":case\"Comment\":case\"MemberTypeAnnotation\":// Flow\ncase\"Type\":/* istanbul ignore next */throw new Error(\"unprintable type: \"+JSON.stringify(n.type));// Type Annotations for Facebook Flow, typically stripped out or\n// transformed away before printing.\ncase\"TypeAnnotation\":if(n.typeAnnotation){return path.call(print,\"typeAnnotation\");}/* istanbul ignore next */return\"\";case\"TSTupleType\":case\"TupleTypeAnnotation\":{var typesField=n.type===\"TSTupleType\"?\"elementTypes\":\"types\";return group$1(concat$2([\"[\",indent$2(concat$2([softline$1,printArrayItems(path,options,typesField,print)])),// TypeScript doesn't support trailing commas in tuple types\nn.type===\"TSTupleType\"?\"\":ifBreak$1(shouldPrintComma(options,\"array\")?\",\":\"\"),comments$3.printDanglingComments(path,options,/* sameIndent */true),softline$1,\"]\"]));}case\"ExistsTypeAnnotation\":return\"*\";case\"EmptyTypeAnnotation\":return\"empty\";case\"AnyTypeAnnotation\":return\"any\";case\"MixedTypeAnnotation\":return\"mixed\";case\"ArrayTypeAnnotation\":return concat$2([path.call(print,\"elementType\"),\"[]\"]);case\"BooleanTypeAnnotation\":return\"boolean\";case\"BooleanLiteralTypeAnnotation\":return\"\"+n.value;case\"DeclareClass\":return printFlowDeclaration(path,printClass(path,options,print));case\"DeclareFunction\":// For TypeScript the DeclareFunction node shares the AST\n// structure with FunctionDeclaration\nif(n.params){return concat$2([\"declare \",printFunctionDeclaration(path,print,options)]);}return printFlowDeclaration(path,[\"function \",path.call(print,\"id\"),n.predicate?\" \":\"\",path.call(print,\"predicate\"),semi]);case\"DeclareModule\":return printFlowDeclaration(path,[\"module \",path.call(print,\"id\"),\" \",path.call(print,\"body\")]);case\"DeclareModuleExports\":return printFlowDeclaration(path,[\"module.exports\",\": \",path.call(print,\"typeAnnotation\"),semi]);case\"DeclareVariable\":return printFlowDeclaration(path,[\"var \",path.call(print,\"id\"),semi]);case\"DeclareExportAllDeclaration\":return concat$2([\"declare export * from \",path.call(print,\"source\")]);case\"DeclareExportDeclaration\":return concat$2([\"declare \",printExportDeclaration(path,options,print)]);case\"FunctionTypeAnnotation\":case\"TSFunctionType\":{// FunctionTypeAnnotation is ambiguous:\n// declare function foo(a: B): void; OR\n// var A: (a: B) => void;\nvar _parent9=path.getParentNode(0);var _parentParent2=path.getParentNode(1);var _parentParentParent=path.getParentNode(2);var isArrowFunctionTypeAnnotation=n.type===\"TSFunctionType\"||!(_parent9.type===\"ObjectTypeProperty\"&&!getFlowVariance(_parent9)&&!_parent9.optional&&util$5.locStart(_parent9)===util$5.locStart(n)||_parent9.type===\"ObjectTypeCallProperty\"||_parentParentParent&&_parentParentParent.type===\"DeclareFunction\");var needsColon=isArrowFunctionTypeAnnotation&&_parent9.type===\"TypeAnnotation\";// Sadly we can't put it inside of FastPath::needsColon because we are\n// printing \":\" as part of the expression and it would put parenthesis\n// around :(\nvar needsParens=needsColon&&isArrowFunctionTypeAnnotation&&_parent9.type===\"TypeAnnotation\"&&_parentParent2.type===\"ArrowFunctionExpression\";if(isObjectTypePropertyAFunction(_parent9)){isArrowFunctionTypeAnnotation=true;needsColon=true;}if(needsParens){parts.push(\"(\");}parts.push(printFunctionParams(path,print,options,/* expandArg */false,/* printTypeParams */true));// The returnType is not wrapped in a TypeAnnotation, so the colon\n// needs to be added separately.\nif(n.returnType||n.predicate||n.typeAnnotation){parts.push(isArrowFunctionTypeAnnotation?\" => \":\": \",path.call(print,\"returnType\"),path.call(print,\"predicate\"),path.call(print,\"typeAnnotation\"));}if(needsParens){parts.push(\")\");}return group$1(concat$2(parts));}case\"FunctionTypeParam\":return concat$2([path.call(print,\"name\"),n.optional?\"?\":\"\",n.name?\": \":\"\",path.call(print,\"typeAnnotation\")]);case\"GenericTypeAnnotation\":return concat$2([path.call(print,\"id\"),path.call(print,\"typeParameters\")]);case\"DeclareInterface\":case\"InterfaceDeclaration\":{if(n.type===\"DeclareInterface\"||isNodeStartingWithDeclare(n,options)){parts.push(\"declare \");}parts.push(\"interface \",path.call(print,\"id\"),path.call(print,\"typeParameters\"));if(n[\"extends\"].length>0){parts.push(group$1(indent$2(concat$2([line$1,\"extends \",join$2(\", \",path.map(print,\"extends\"))]))));}parts.push(\" \");parts.push(path.call(print,\"body\"));return group$1(concat$2(parts));}case\"ClassImplements\":case\"InterfaceExtends\":return concat$2([path.call(print,\"id\"),path.call(print,\"typeParameters\")]);case\"TSIntersectionType\":case\"IntersectionTypeAnnotation\":{var types=path.map(print,\"types\");var result=[];for(var _i24=0;_i24<types.length;++_i24){if(_i24===0){result.push(types[_i24]);}else if(!isObjectType(n.types[_i24-1])&&!isObjectType(n.types[_i24])){// If no object is involved, go to the next line if it breaks\nresult.push(indent$2(concat$2([\" &\",line$1,types[_i24]])));}else{// If you go from object to non-object or vis-versa, then inline it\nresult.push(\" & \",_i24>1?indent$2(types[_i24]):types[_i24]);}}return group$1(concat$2(result));}case\"TSUnionType\":case\"UnionTypeAnnotation\":{// single-line variation\n// A | B | C\n// multi-line variation\n// | A\n// | B\n// | C\nvar _parent10=path.getParentNode();// If there's a leading comment, the parent is doing the indentation\nvar shouldIndent=_parent10.type!==\"TypeParameterInstantiation\"&&_parent10.type!==\"GenericTypeAnnotation\"&&!((_parent10.type===\"TypeAlias\"||_parent10.type===\"VariableDeclarator\")&&hasLeadingOwnLineComment(options.originalText,n));// {\n//   a: string\n// } | null | void\n// should be inlined and not be printed in the multi-line variant\nvar shouldHug=shouldHugType(n);// We want to align the children but without its comment, so it looks like\n// | child1\n// // comment\n// | child2\nvar _printed2=path.map(function(typePath){var printedType=typePath.call(print);if(!shouldHug&&shouldIndent){printedType=align$1(2,printedType);}return comments$3.printComments(typePath,function(){return printedType;},options);},\"types\");if(shouldHug){return join$2(\" | \",_printed2);}var _code=concat$2([ifBreak$1(concat$2([shouldIndent?line$1:\"\",\"| \"])),join$2(concat$2([line$1,\"| \"]),_printed2)]);return group$1(shouldIndent?indent$2(_code):_code);}case\"NullableTypeAnnotation\":return concat$2([\"?\",path.call(print,\"typeAnnotation\")]);case\"TSNullKeyword\":case\"NullLiteralTypeAnnotation\":return\"null\";case\"ThisTypeAnnotation\":return\"this\";case\"NumberTypeAnnotation\":return\"number\";case\"ObjectTypeCallProperty\":if(n.static){parts.push(\"static \");}parts.push(path.call(print,\"value\"));return concat$2(parts);case\"ObjectTypeIndexer\":{var _variance=getFlowVariance(n);return concat$2([_variance||\"\",\"[\",path.call(print,\"id\"),n.id?\": \":\"\",path.call(print,\"key\"),\"]: \",path.call(print,\"value\")]);}case\"ObjectTypeProperty\":{var _variance2=getFlowVariance(n);return concat$2([n.static?\"static \":\"\",isGetterOrSetter(n)?n.kind+\" \":\"\",_variance2||\"\",path.call(print,\"key\"),n.optional?\"?\":\"\",isFunctionNotation(n)?\"\":\": \",path.call(print,\"value\")]);}case\"QualifiedTypeIdentifier\":return concat$2([path.call(print,\"qualification\"),\".\",path.call(print,\"id\")]);case\"StringLiteralTypeAnnotation\":return nodeStr(n,options);case\"NumberLiteralTypeAnnotation\":assert$1.strictEqual(_typeof(n.value),\"number\");if(n.extra!=null){return printNumber(n.extra.raw);}return printNumber(n.raw);case\"StringTypeAnnotation\":return\"string\";case\"DeclareTypeAlias\":case\"TypeAlias\":{if(n.type===\"DeclareTypeAlias\"||isNodeStartingWithDeclare(n,options)){parts.push(\"declare \");}var canBreak=n.right.type===\"StringLiteralTypeAnnotation\";var _printed3=printAssignmentRight(n.right,path.call(print,\"right\"),canBreak,options);parts.push(\"type \",path.call(print,\"id\"),path.call(print,\"typeParameters\"),\" =\",_printed3,semi);return group$1(concat$2(parts));}case\"TypeCastExpression\":return concat$2([\"(\",path.call(print,\"expression\"),\": \",path.call(print,\"typeAnnotation\"),\")\"]);case\"TypeParameterDeclaration\":case\"TypeParameterInstantiation\":return printTypeParameters(path,options,print,\"params\");case\"TypeParameter\":{var _variance3=getFlowVariance(n);if(_variance3){parts.push(_variance3);}parts.push(path.call(print,\"name\"));if(n.bound){parts.push(\": \");parts.push(path.call(print,\"bound\"));}if(n.constraint){parts.push(\" extends \",path.call(print,\"constraint\"));}if(n[\"default\"]){parts.push(\" = \",path.call(print,\"default\"));}return concat$2(parts);}case\"TypeofTypeAnnotation\":return concat$2([\"typeof \",path.call(print,\"argument\")]);case\"VoidTypeAnnotation\":return\"void\";case\"InferredPredicate\":return\"%checks\";// Unhandled types below. If encountered, nodes of these types should\n// be either left alone or desugared into AST types that are fully\n// supported by the pretty-printer.\ncase\"DeclaredPredicate\":return concat$2([\"%checks(\",path.call(print,\"value\"),\")\"]);case\"TSAbstractKeyword\":return\"abstract\";case\"TSAnyKeyword\":return\"any\";case\"TSAsyncKeyword\":return\"async\";case\"TSBooleanKeyword\":return\"boolean\";case\"TSConstKeyword\":return\"const\";case\"TSDeclareKeyword\":return\"declare\";case\"TSExportKeyword\":return\"export\";case\"TSNeverKeyword\":return\"never\";case\"TSNumberKeyword\":return\"number\";case\"TSObjectKeyword\":return\"object\";case\"TSProtectedKeyword\":return\"protected\";case\"TSPrivateKeyword\":return\"private\";case\"TSPublicKeyword\":return\"public\";case\"TSReadonlyKeyword\":return\"readonly\";case\"TSSymbolKeyword\":return\"symbol\";case\"TSStaticKeyword\":return\"static\";case\"TSStringKeyword\":return\"string\";case\"TSUndefinedKeyword\":return\"undefined\";case\"TSVoidKeyword\":return\"void\";case\"TSAsExpression\":return concat$2([path.call(print,\"expression\"),\" as \",path.call(print,\"typeAnnotation\")]);case\"TSArrayType\":return concat$2([path.call(print,\"elementType\"),\"[]\"]);case\"TSPropertySignature\":{if(n.export){parts.push(\"export \");}if(n.accessibility){parts.push(n.accessibility+\" \");}if(n.static){parts.push(\"static \");}if(n.readonly){parts.push(\"readonly \");}if(n.computed){parts.push(\"[\");}parts.push(path.call(print,\"key\"));if(n.computed){parts.push(\"]\");}if(n.optional){parts.push(\"?\");}if(n.typeAnnotation){parts.push(\": \");parts.push(path.call(print,\"typeAnnotation\"));}// This isn't valid semantically, but it's in the AST so we can print it.\nif(n.initializer){parts.push(\" = \",path.call(print,\"initializer\"));}return concat$2(parts);}case\"TSParameterProperty\":if(n.accessibility){parts.push(n.accessibility+\" \");}if(n.export){parts.push(\"export \");}if(n.static){parts.push(\"static \");}if(n.readonly){parts.push(\"readonly \");}parts.push(path.call(print,\"parameter\"));return concat$2(parts);case\"TSTypeReference\":return concat$2([path.call(print,\"typeName\"),printTypeParameters(path,options,print,\"typeParameters\")]);case\"TSTypeQuery\":return concat$2([\"typeof \",path.call(print,\"exprName\")]);case\"TSParenthesizedType\":{return path.call(print,\"typeAnnotation\");}case\"TSIndexSignature\":{var _parent11=path.getParentNode();return concat$2([n.export?\"export \":\"\",n.accessibility?concat$2([n.accessibility,\" \"]):\"\",n.static?\"static \":\"\",n.readonly?\"readonly \":\"\",\"[\",path.call(print,\"index\"),\"]: \",path.call(print,\"typeAnnotation\"),_parent11.type===\"ClassBody\"?semi:\"\"]);}case\"TSTypePredicate\":return concat$2([path.call(print,\"parameterName\"),\" is \",path.call(print,\"typeAnnotation\")]);case\"TSNonNullExpression\":return concat$2([path.call(print,\"expression\"),\"!\"]);case\"TSThisType\":return\"this\";case\"TSLastTypeNode\":return path.call(print,\"literal\");case\"TSIndexedAccessType\":return concat$2([path.call(print,\"objectType\"),\"[\",path.call(print,\"indexType\"),\"]\"]);case\"TSConstructSignature\":case\"TSConstructorType\":case\"TSCallSignature\":{if(n.type!==\"TSCallSignature\"){parts.push(\"new \");}parts.push(group$1(printFunctionParams(path,print,options,/* expandArg */false,/* printTypeParams */true)));if(n.typeAnnotation){var isType=n.type===\"TSConstructorType\";parts.push(isType?\" => \":\": \",path.call(print,\"typeAnnotation\"));}return concat$2(parts);}case\"TSTypeOperator\":return concat$2([\"keyof \",path.call(print,\"typeAnnotation\")]);case\"TSMappedType\":return group$1(concat$2([\"{\",indent$2(concat$2([options.bracesSpacing?line$1:softline$1,n.readonlyToken?concat$2([path.call(print,\"readonlyToken\"),\" \"]):\"\",printTypeScriptModifiers(path,options,print),\"[\",path.call(print,\"typeParameter\"),\"]\",n.questionToken?\"?\":\"\",\": \",path.call(print,\"typeAnnotation\")])),comments$3.printDanglingComments(path,options,/* sameIndent */true),options.bracesSpacing?line$1:softline$1,\"}\"]));case\"TSTypeParameter\":parts.push(path.call(print,\"name\"));if(n.constraint){parts.push(\" in \",path.call(print,\"constraint\"));}return concat$2(parts);case\"TSMethodSignature\":parts.push(n.accessibility?concat$2([n.accessibility,\" \"]):\"\",n.export?\"export \":\"\",n.static?\"static \":\"\",n.readonly?\"readonly \":\"\",n.computed?\"[\":\"\",path.call(print,\"key\"),n.computed?\"]\":\"\",n.optional?\"?\":\"\",printFunctionParams(path,print,options,/* expandArg */false,/* printTypeParams */true));if(n.typeAnnotation){parts.push(\": \",path.call(print,\"typeAnnotation\"));}return group$1(concat$2(parts));case\"TSNamespaceExportDeclaration\":parts.push(\"export as namespace \",path.call(print,\"name\"));if(options.semi){parts.push(\";\");}return group$1(concat$2(parts));case\"TSEnumDeclaration\":if(n.modifiers){parts.push(printTypeScriptModifiers(path,options,print));}parts.push(\"enum \",path.call(print,\"name\"),\" \");if(n.members.length===0){parts.push(group$1(concat$2([\"{\",comments$3.printDanglingComments(path,options),softline$1,\"}\"])));}else{parts.push(group$1(concat$2([\"{\",indent$2(concat$2([hardline$2,//options.bracesSpacing\nprintArrayItems(path,options,\"members\",print),shouldPrintComma(options,\"object\")?\",\":\"\"])),comments$3.printDanglingComments(path,options,/* sameIndent */true),hardline$2,//options.bracesSpacing\n\"}\"])));}return concat$2(parts);case\"TSEnumMember\":parts.push(path.call(print,\"name\"));if(n.initializer){parts.push(\" = \",path.call(print,\"initializer\"));}return concat$2(parts);case\"TSImportEqualsDeclaration\":parts.push(printTypeScriptModifiers(path,options,print),\"import \",path.call(print,\"name\"),\" = \",path.call(print,\"moduleReference\"));if(options.semi){parts.push(\";\");}return group$1(concat$2(parts));case\"TSExternalModuleReference\":return concat$2([\"require(\",path.call(print,\"expression\"),\")\"]);case\"TSModuleDeclaration\":{var _parent12=path.getParentNode();var isExternalModule=isLiteral(n.name);var parentIsDeclaration=_parent12.type===\"TSModuleDeclaration\";var bodyIsDeclaration=n.body&&n.body.type===\"TSModuleDeclaration\";if(parentIsDeclaration){parts.push(\".\");}else{parts.push(printTypeScriptModifiers(path,options,print));// Global declaration looks like this:\n// (declare)? global { ... }\nvar isGlobalDeclaration=n.name.type===\"Identifier\"&&n.name.name===\"global\"&&!/namespace|module/.test(options.originalText.slice(util$5.locStart(n),util$5.locStart(n.name)));if(!isGlobalDeclaration){parts.push(isExternalModule?\"module \":\"namespace \");}}parts.push(path.call(print,\"name\"));if(bodyIsDeclaration){parts.push(path.call(print,\"body\"));}else if(n.body){parts.push(\" {\",indent$2(concat$2([line$1,path.call(function(bodyPath){return comments$3.printDanglingComments(bodyPath,options,true);},\"body\"),group$1(path.call(print,\"body\"))])),line$1,\"}\");}else{parts.push(semi);}return concat$2(parts);}case\"TSModuleBlock\":return path.call(function(bodyPath){return printStatementSequence(bodyPath,options,print);},\"body\");case\"json-identifier\":return'\"'+n.value+'\"';default:/* istanbul ignore next */throw new Error(\"unknown type: \"+JSON.stringify(n.type));}}function printStatementSequence(path,options,print){var printed=[];var bodyNode=path.getNode();var isClass=bodyNode.type===\"ClassBody\";path.map(function(stmtPath,i){var stmt=stmtPath.getValue();// Just in case the AST has been modified to contain falsy\n// \"statements,\" it's safer simply to skip them.\n/* istanbul ignore if */if(!stmt){return;}// Skip printing EmptyStatement nodes to avoid leaving stray\n// semicolons lying around.\nif(stmt.type===\"EmptyStatement\"){return;}var stmtPrinted=print(stmtPath);var text=options.originalText;var parts=[];// in no-semi mode, prepend statement with semicolon if it might break ASI\nif(!options.semi&&!isClass&&stmtNeedsASIProtection(stmtPath,options)){if(stmt.comments&&stmt.comments.some(function(comment){return comment.leading;})){// Note: stmtNeedsASIProtection requires stmtPath to already be printed\n// as it reads needsParens which is mutated on the instance\nparts.push(print(stmtPath,{needsSemi:true}));}else{parts.push(\";\",stmtPrinted);}}else{parts.push(stmtPrinted);}if(!options.semi&&isClass){if(classPropMayCauseASIProblems(stmtPath)){parts.push(\";\");}else if(stmt.type===\"ClassProperty\"){var nextChild=bodyNode.body[i+1];if(classChildNeedsASIProtection(nextChild)){parts.push(\";\");}}}if(util$5.isNextLineEmpty(text,stmt)&&!isLastStatement(stmtPath)){parts.push(hardline$2);}printed.push(concat$2(parts));});return join$2(hardline$2,printed);}function printPropertyKey(path,options,print){var node=path.getNode();var key=node.key;if(isStringLiteral(key)&&isIdentifierName(key.value)&&!node.computed){// 'a' -> a\nreturn path.call(function(keyPath){return comments$3.printComments(keyPath,function(){return key.value;},options);},\"key\");}return path.call(print,\"key\");}function printMethod(path,options,print){var node=path.getNode();var semi=options.semi?\";\":\"\";var kind=node.kind;var parts=[];if(node.type===\"ObjectMethod\"||node.type===\"ClassMethod\"){node.value=node;}if(node.value.async){parts.push(\"async \");}if(!kind||kind===\"init\"||kind===\"method\"||kind===\"constructor\"){if(node.value.generator){parts.push(\"*\");}}else{assert$1.ok(kind===\"get\"||kind===\"set\");parts.push(kind,\" \");}var key=printPropertyKey(path,options,print);if(node.computed){key=concat$2([\"[\",key,\"]\"]);}parts.push(key,concat$2(path.call(function(valuePath){return[printFunctionTypeParameters(valuePath,options,print),group$1(concat$2([options.spaceBeforeFunctionParen?\" \":\"\",printFunctionParams(valuePath,print,options),printReturnType(valuePath,print)]))];},\"value\")));if(!node.value.body||node.value.body.length===0){parts.push(semi);}else{parts.push(\" \",path.call(print,\"value\",\"body\"));}return concat$2(parts);}function couldGroupArg(arg){return arg.type===\"ObjectExpression\"&&arg.properties.length>0||arg.type===\"ArrayExpression\"&&arg.elements.length>0||arg.type===\"TSTypeAssertionExpression\"||arg.type===\"TSAsExpression\"||arg.type===\"FunctionExpression\"||arg.type===\"ArrowFunctionExpression\"&&(arg.body.type===\"BlockStatement\"||arg.body.type===\"ArrowFunctionExpression\"||arg.body.type===\"ObjectExpression\"||arg.body.type===\"ArrayExpression\"||arg.body.type===\"CallExpression\"||arg.body.type===\"JSXElement\");}function shouldGroupLastArg(args){var lastArg=util$5.getLast(args);var penultimateArg=util$5.getPenultimate(args);return(!lastArg.comments||!lastArg.comments.length)&&couldGroupArg(lastArg)&&(// If the last two arguments are of the same type,\n// disable last element expansion.\n!penultimateArg||penultimateArg.type!==lastArg.type);}function shouldGroupFirstArg(args){if(args.length!==2){return false;}var firstArg=args[0];var secondArg=args[1];return(!firstArg.comments||!firstArg.comments.length)&&(firstArg.type===\"FunctionExpression\"||firstArg.type===\"ArrowFunctionExpression\"&&firstArg.body.type===\"BlockStatement\")&&!couldGroupArg(secondArg);}function printArgumentsList(path,options,print){var printed=path.map(print,\"arguments\");if(printed.length===0){return concat$2([\"(\",comments$3.printDanglingComments(path,options,/* sameIndent */true),\")\"]);}var args=path.getValue().arguments;// This is just an optimization; I think we could return the\n// conditional group for all function calls, but it's more expensive\n// so only do it for specific forms.\nvar shouldGroupFirst=shouldGroupFirstArg(args);var shouldGroupLast=shouldGroupLastArg(args);if(shouldGroupFirst||shouldGroupLast){var shouldBreak=shouldGroupFirst?printed.slice(1).some(willBreak):printed.slice(0,-1).some(willBreak);// We want to print the last argument with a special flag\nvar printedExpanded=void 0;var _i25=0;path.each(function(argPath){if(shouldGroupFirst&&_i25===0){printedExpanded=[argPath.call(function(p){return print(p,{expandFirstArg:true});})].concat(printed.slice(1));}if(shouldGroupLast&&_i25===args.length-1){printedExpanded=printed.slice(0,-1).concat(argPath.call(function(p){return print(p,{expandLastArg:true});}));}_i25++;},\"arguments\");return concat$2([printed.some(willBreak)?breakParent$2:\"\",conditionalGroup$1([concat$2([\"(\",join$2(concat$2([\", \"]),printedExpanded),\")\"]),shouldGroupFirst?concat$2([\"(\",group$1(printedExpanded[0],{shouldBreak:true}),printed.length>1?\", \":\"\",join$2(concat$2([\",\",line$1]),printed.slice(1)),\")\"]):concat$2([\"(\",join$2(concat$2([\",\",line$1]),printed.slice(0,-1)),printed.length>1?\", \":\"\",group$1(util$5.getLast(printedExpanded),{shouldBreak:true}),\")\"]),group$1(concat$2([\"(\",indent$2(concat$2([line$1,join$2(concat$2([\",\",line$1]),printed)])),shouldPrintComma(options,\"arguments\")?\",\":\"\",line$1,\")\"]),{shouldBreak:true})],{shouldBreak:shouldBreak})]);}return group$1(concat$2([\"(\",indent$2(concat$2([softline$1,join$2(concat$2([\",\",line$1]),printed)])),ifBreak$1(shouldPrintComma(options,\"arguments\")?\",\":\"\"),softline$1,\")\"]),{shouldBreak:printed.some(willBreak)});}function printFunctionTypeParameters(path,options,print){var fun=path.getValue();if(fun.typeParameters){return path.call(print,\"typeParameters\");}return\"\";}function printFunctionParams(path,print,options,expandArg,printTypeParams){var fun=path.getValue();var paramsField=fun.parameters?\"parameters\":\"params\";var typeParams=printTypeParams?printFunctionTypeParameters(path,options,print):\"\";var printed=[];if(fun[paramsField]){printed=path.map(print,paramsField);}if(fun.rest){printed.push(concat$2([\"...\",path.call(print,\"rest\")]));}if(printed.length===0){return concat$2([typeParams,\"(\",comments$3.printDanglingComments(path,options,/* sameIndent */true),\")\"]);}var lastParam=util$5.getLast(fun[paramsField]);// If the parent is a call with the first/last argument expansion and this is the\n// params of the first/last argument, we dont want the arguments to break and instead\n// want the whole expression to be on a new line.\n//\n// Good:                 Bad:\n//   verylongcall(         verylongcall((\n//     (a, b) => {           a,\n//     }                     b,\n//   })                    ) => {\n//                         })\nif(expandArg&&!(fun[paramsField]&&fun[paramsField].some(function(n){return n.comments;}))){return group$1(concat$2([docUtils.removeLines(typeParams),\"(\",join$2(\", \",printed.map(docUtils.removeLines)),\")\"]));}// Single object destructuring should hug\n//\n// function({\n//   a,\n//   b,\n//   c\n// }) {}\nif(shouldHugArguments(fun)){return concat$2([typeParams,\"(\",join$2(\", \",printed),\")\"]);}var parent=path.getParentNode();var flowTypeAnnotations=[\"AnyTypeAnnotation\",\"NullLiteralTypeAnnotation\",\"GenericTypeAnnotation\",\"ThisTypeAnnotation\",\"NumberTypeAnnotation\",\"VoidTypeAnnotation\",\"EmptyTypeAnnotation\",\"MixedTypeAnnotation\",\"BooleanTypeAnnotation\",\"BooleanLiteralTypeAnnotation\",\"StringTypeAnnotation\"];var isFlowShorthandWithOneArg=(isObjectTypePropertyAFunction(parent)||isTypeAnnotationAFunction(parent)||parent.type===\"TypeAlias\"||parent.type===\"UnionTypeAnnotation\"||parent.type===\"TSUnionType\"||parent.type===\"IntersectionTypeAnnotation\"||parent.type===\"FunctionTypeAnnotation\"&&parent.returnType===fun)&&fun[paramsField].length===1&&fun[paramsField][0].name===null&&fun[paramsField][0].typeAnnotation&&fun.typeParameters===null&&flowTypeAnnotations.indexOf(fun[paramsField][0].typeAnnotation.type)!==-1&&!(fun[paramsField][0].typeAnnotation.type===\"GenericTypeAnnotation\"&&fun[paramsField][0].typeAnnotation.typeParameters)&&!fun.rest;if(isFlowShorthandWithOneArg){return concat$2(printed);}var canHaveTrailingComma=!(lastParam&&lastParam.type===\"RestElement\")&&!fun.rest;return concat$2([typeParams,\"(\",indent$2(concat$2([softline$1,join$2(concat$2([\",\",line$1]),printed)])),ifBreak$1(canHaveTrailingComma&&shouldPrintComma(options,\"arguments\")?\",\":\"\"),softline$1,\")\"]);}function canPrintParamsWithoutParens(node,options){return node.params.length===1&&!node.rest&&!node.typeParameters&&node.params[0].type===\"Identifier\"&&!node.params[0].typeAnnotation&&!node.params[0].comments&&!node.params[0].optional&&!node.predicate&&!node.returnType&&!options.arrowParens;}function printFunctionDeclaration(path,print,options){var n=path.getValue();var parts=[];if(n.async){parts.push(\"async \");}parts.push(\"function\");if(n.generator){parts.push(\"*\");}if(n.id){parts.push(\" \",path.call(print,\"id\"));}parts.push(printFunctionTypeParameters(path,options,print),group$1(concat$2([options.spaceBeforeFunctionParen?\" \":\"\",printFunctionParams(path,print,options),printReturnType(path,print)])),options.noSpaceEmptyFn?\"\":n.body?\" \":\"\",//options.noSpaceEmptyFn ? \"\" : \" \",\npath.call(print,\"body\"));return concat$2(parts);}function printObjectMethod(path,options,print){var objMethod=path.getValue();var parts=[];if(objMethod.async){parts.push(\"async \");}if(objMethod.generator){parts.push(\"*\");}if(objMethod.method||objMethod.kind===\"get\"||objMethod.kind===\"set\"){return printMethod(path,options,print);}var key=printPropertyKey(path,options,print);if(objMethod.computed){parts.push(\"[\",key,\"]\");}else{parts.push(key);}parts.push(printFunctionTypeParameters(path,options,print),group$1(concat$2([options.spaceBeforeFunctionParen?\" \":\"\",printFunctionParams(path,print,options),printReturnType(path,print)])),\" \",path.call(print,\"body\"));return concat$2(parts);}function printReturnType(path,print){var n=path.getValue();var parts=[path.call(print,\"returnType\")];// prepend colon to TypeScript type annotation\nif(n.returnType&&n.returnType.typeAnnotation){parts.unshift(\": \");}if(n.predicate){// The return type will already add the colon, but otherwise we\n// need to do it ourselves\nparts.push(n.returnType?\" \":\": \",path.call(print,\"predicate\"));}return concat$2(parts);}function printExportDeclaration(path,options,print){var decl=path.getValue();var semi=options.semi?\";\":\"\";var parts=[\"export \"];if(decl[\"default\"]||decl.type===\"ExportDefaultDeclaration\"){parts.push(\"default \");}parts.push(comments$3.printDanglingComments(path,options,/* sameIndent */true));if(decl.declaration){parts.push(path.call(print,\"declaration\"));if(decl.type===\"ExportDefaultDeclaration\"&&decl.declaration.type!==\"ClassDeclaration\"&&decl.declaration.type!==\"FunctionDeclaration\"&&decl.declaration.type!==\"TSAbstractClassDeclaration\"&&decl.declaration.type!==\"TSNamespaceFunctionDeclaration\"){parts.push(semi);}}else{if(decl.specifiers&&decl.specifiers.length>0){var specifiers=[];var defaultSpecifiers=[];var namespaceSpecifiers=[];path.each(function(specifierPath){var specifierType=path.getValue().type;if(specifierType===\"ExportSpecifier\"){specifiers.push(print(specifierPath));}else if(specifierType===\"ExportDefaultSpecifier\"){defaultSpecifiers.push(print(specifierPath));}else if(specifierType===\"ExportNamespaceSpecifier\"){namespaceSpecifiers.push(concat$2([\"* as \",print(specifierPath)]));}},\"specifiers\");var isNamespaceFollowed=namespaceSpecifiers.length!==0&&(specifiers.length!==0||defaultSpecifiers.length!==0);var isDefaultFollowed=defaultSpecifiers.length!==0&&specifiers.length!==0;parts.push(decl.exportKind===\"type\"?\"type \":\"\",concat$2(namespaceSpecifiers),concat$2([isNamespaceFollowed?\", \":\"\"]),concat$2(defaultSpecifiers),concat$2([isDefaultFollowed?\", \":\"\"]),specifiers.length!==0?group$1(concat$2([\"{\",indent$2(concat$2([options.bracesSpacing?line$1:softline$1,join$2(concat$2([\",\",line$1]),specifiers)])),ifBreak$1(shouldPrintComma(options,\"export\")?\",\":\"\"),options.bracesSpacing?line$1:softline$1,\"}\"])):\"\");}else{parts.push(\"{}\");}if(decl.source){parts.push(\" from \",path.call(print,\"source\"));}parts.push(semi);}return concat$2(parts);}function printFlowDeclaration(path,parts){var parentExportDecl=util$5.getParentExportDeclaration(path);if(parentExportDecl){assert$1.strictEqual(parentExportDecl.type,\"DeclareExportDeclaration\");}else{// If the parent node has type DeclareExportDeclaration, then it\n// will be responsible for printing the \"declare\" token. Otherwise\n// it needs to be printed with this non-exported declaration node.\nparts.unshift(\"declare \");}return concat$2(parts);}function getFlowVariance(path){if(!path.variance){return null;}// Babylon 7.0 currently uses variance node type, and flow should\n// follow suit soon:\n// https://github.com/babel/babel/issues/4722\nvar variance=path.variance.kind||path.variance;switch(variance){case\"plus\":return\"+\";case\"minus\":return\"-\";default:/* istanbul ignore next */return variance;}}function printTypeScriptModifiers(path,options,print){var n=path.getValue();if(!n.modifiers||!n.modifiers.length){return\"\";}return concat$2([join$2(\" \",path.map(print,\"modifiers\")),\" \"]);}function printTypeParameters(path,options,print,paramsKey){var n=path.getValue();if(!n[paramsKey]){return\"\";}// for TypeParameterDeclaration typeParameters is a single node\nif(!Array.isArray(n[paramsKey])){return path.call(print,paramsKey);}var shouldInline=n[paramsKey].length===1&&(shouldHugType(n[paramsKey][0])||n[paramsKey][0].type===\"GenericTypeAnnotation\"&&shouldHugType(n[paramsKey][0].id)||n[paramsKey][0].type===\"NullableTypeAnnotation\");if(shouldInline){return concat$2([\"<\",join$2(\", \",path.map(print,paramsKey)),\">\"]);}return group$1(concat$2([\"<\",indent$2(concat$2([softline$1,join$2(concat$2([\",\",line$1]),path.map(print,paramsKey))])),ifBreak$1(options.parser!==\"typescript\"&&shouldPrintComma(options,\"arguments\")?\",\":\"\"),softline$1,\">\"]));}function printClass(path,options,print){var n=path.getValue();var parts=[];if(n.type===\"TSAbstractClassDeclaration\"){parts.push(\"abstract \");}parts.push(\"class\");if(n.id){parts.push(\" \",path.call(print,\"id\"));}parts.push(path.call(print,\"typeParameters\"));var partsGroup=[];if(n.superClass){parts.push(\" extends \",path.call(print,\"superClass\"),path.call(print,\"superTypeParameters\"));}else if(n.extends&&n.extends.length>0){parts.push(\" extends \",join$2(\", \",path.map(print,\"extends\")));}if(n[\"implements\"]&&n[\"implements\"].length>0){partsGroup.push(line$1,\"implements \",group$1(indent$2(join$2(concat$2([\",\",line$1]),path.map(print,\"implements\")))));}if(partsGroup.length>0){parts.push(group$1(indent$2(concat$2(partsGroup))));}parts.push(\" \",path.call(print,\"body\"));return parts;}function printMemberLookup(path,options,print){var property=path.call(print,\"property\");var n=path.getValue();if(!n.computed){return concat$2([\".\",property]);}if(!n.property||n.property.type===\"Literal\"&&typeof n.property.value===\"number\"||n.property.type===\"NumericLiteral\"){return concat$2([\"[\",property,\"]\"]);}return group$1(concat$2([\"[\",indent$2(concat$2([softline$1,property])),softline$1,\"]\"]));}function printBindExpressionCallee(path,options,print){return concat$2([\"::\",path.call(print,\"callee\")]);}// We detect calls on member expressions specially to format a\n// common pattern better. The pattern we are looking for is this:\n//\n// arr\n//   .map(x => x + 1)\n//   .filter(x => x > 10)\n//   .some(x => x % 2)\n//\n// The way it is structured in the AST is via a nested sequence of\n// MemberExpression and CallExpression. We need to traverse the AST\n// and make groups out of it to print it in the desired way.\nfunction printMemberChain(path,options,print){// The first phase is to linearize the AST by traversing it down.\n//\n//   a().b()\n// has the following AST structure:\n//   CallExpression(MemberExpression(CallExpression(Identifier)))\n// and we transform it into\n//   [Identifier, CallExpression, MemberExpression, CallExpression]\nvar printedNodes=[];function rec(path){var node=path.getValue();if(node.type===\"CallExpression\"&&isMemberish(node.callee)){printedNodes.unshift({node:node,printed:comments$3.printComments(path,function(){return concat$2([printFunctionTypeParameters(path,options,print),printArgumentsList(path,options,print)]);},options)});path.call(function(callee){return rec(callee);},\"callee\");}else if(isMemberish(node)){printedNodes.unshift({node:node,printed:comments$3.printComments(path,function(){return node.type===\"MemberExpression\"?printMemberLookup(path,options,print):printBindExpressionCallee(path,options,print);},options)});path.call(function(object){return rec(object);},\"object\");}else{printedNodes.unshift({node:node,printed:path.call(print)});}}// Note: the comments of the root node have already been printed, so we\n// need to extract this first call without printing them as they would\n// if handled inside of the recursive call.\nprintedNodes.unshift({node:path.getValue(),printed:concat$2([printFunctionTypeParameters(path,options,print),printArgumentsList(path,options,print)])});path.call(function(callee){return rec(callee);},\"callee\");// Once we have a linear list of printed nodes, we want to create groups out\n// of it.\n//\n//   a().b.c().d().e\n// will be grouped as\n//   [\n//     [Identifier, CallExpression],\n//     [MemberExpression, MemberExpression, CallExpression],\n//     [MemberExpression, CallExpression],\n//     [MemberExpression],\n//   ]\n// so that we can print it as\n//   a()\n//     .b.c()\n//     .d()\n//     .e\n// The first group is the first node followed by\n//   - as many CallExpression as possible\n//       < fn()()() >.something()\n//   - then, as many MemberExpression as possible but the last one\n//       < this.items >.something()\nvar groups=[];var currentGroup=[printedNodes[0]];var i=1;for(;i<printedNodes.length;++i){if(printedNodes[i].node.type===\"CallExpression\"){currentGroup.push(printedNodes[i]);}else{break;}}for(;i+1<printedNodes.length;++i){if(isMemberish(printedNodes[i].node)&&isMemberish(printedNodes[i+1].node)){currentGroup.push(printedNodes[i]);}else{break;}}groups.push(currentGroup);currentGroup=[];// Then, each following group is a sequence of MemberExpression followed by\n// a sequence of CallExpression. To compute it, we keep adding things to the\n// group until we has seen a CallExpression in the past and reach a\n// MemberExpression\nvar hasSeenCallExpression=false;for(;i<printedNodes.length;++i){if(hasSeenCallExpression&&isMemberish(printedNodes[i].node)){// [0] should be appended at the end of the group instead of the\n// beginning of the next one\nif(printedNodes[i].node.computed&&isLiteral(printedNodes[i].node.property)){currentGroup.push(printedNodes[i]);continue;}groups.push(currentGroup);currentGroup=[];hasSeenCallExpression=false;}if(printedNodes[i].node.type===\"CallExpression\"){hasSeenCallExpression=true;}currentGroup.push(printedNodes[i]);if(printedNodes[i].node.comments&&printedNodes[i].node.comments.some(function(comment){return comment.trailing;})){groups.push(currentGroup);currentGroup=[];hasSeenCallExpression=false;}}if(currentGroup.length>0){groups.push(currentGroup);}// There are cases like Object.keys(), Observable.of(), _.values() where\n// they are the subject of all the chained calls and therefore should\n// be kept on the same line:\n//\n//   Object.keys(items)\n//     .filter(x => x)\n//     .map(x => x)\n//\n// In order to detect those cases, we use an heuristic: if the first\n// node is just an identifier with the name starting with a capital\n// letter, just a sequence of _$ or this. The rationale is that they are\n// likely to be factories.\nvar shouldMerge=groups.length>=2&&!groups[1][0].node.comments&&groups[0].length===1&&(groups[0][0].node.type===\"ThisExpression\"||groups[0][0].node.type===\"Identifier\"&&groups[0][0].node.name.match(/(^[A-Z])|^[_$]+$/));function printGroup(printedGroup){return concat$2(printedGroup.map(function(tuple){return tuple.printed;}));}function printIndentedGroup(groups){if(groups.length===0){return\"\";}return indent$2(group$1(concat$2([hardline$2,join$2(hardline$2,groups.map(printGroup))])));}var printedGroups=groups.map(printGroup);var oneLine=concat$2(printedGroups);var cutoff=shouldMerge?3:2;var flatGroups=groups.slice(0,cutoff).reduce(function(res,group){return res.concat(group);},[]);var hasComment=flatGroups.slice(1,-1).some(function(node){return hasLeadingComment(node.node);})||flatGroups.slice(0,-1).some(function(node){return hasTrailingComment(node.node);})||groups[cutoff]&&hasLeadingComment(groups[cutoff][0].node);// If we only have a single `.`, we shouldn't do anything fancy and just\n// render everything concatenated together.\nif(groups.length<=cutoff&&!hasComment&&// (a || b).map() should be break before .map() instead of ||\ngroups[0][0].node.type!==\"LogicalExpression\"){return group$1(oneLine);}var expanded=concat$2([printGroup(groups[0]),shouldMerge?concat$2(groups.slice(1,2).map(printGroup)):\"\",printIndentedGroup(groups.slice(shouldMerge?2:1))]);// If there's a comment, we don't want to print in one line.\nif(hasComment){return group$1(expanded);}// If any group but the last one has a hard line, we want to force expand\n// it. If the last group is a function it's okay to inline if it fits.\nif(printedGroups.slice(0,-1).some(willBreak)){return group$1(expanded);}return concat$2([// We only need to check `oneLine` because if `expanded` is chosen\n// that means that the parent group has already been broken\n// naturally\nwillBreak(oneLine)?breakParent$2:\"\",conditionalGroup$1([oneLine,expanded])]);}function isEmptyJSXElement(node){if(node.children.length===0){return true;}if(node.children.length>1){return false;}// if there is one text child and does not contain any meaningful text\n// we can treat the element as empty.\nvar child=node.children[0];return isLiteral(child)&&!isMeaningfulJSXText(child);}// Only space, newline, carriage return, and tab are treated as whitespace\n// inside JSX.\nvar jsxWhitespaceChars=\" \\n\\r\\t\";var containsNonJsxWhitespaceRegex=new RegExp(\"[^\"+jsxWhitespaceChars+\"]\");var matchJsxWhitespaceRegex=new RegExp(\"([\"+jsxWhitespaceChars+\"]+)\");// Meaningful if it contains non-whitespace characters,\n// or it contains whitespace without a new line.\nfunction isMeaningfulJSXText(node){return isLiteral(node)&&(containsNonJsxWhitespaceRegex.test(rawText(node))||!/\\n/.test(rawText(node)));}function conditionalExpressionChainContainsJSX(node){return Boolean(getConditionalChainContents(node).find(function(child){return child.type===\"JSXElement\";}));}// If we have nested conditional expressions, we want to print them in JSX mode\n// if there's at least one JSXElement somewhere in the tree.\n//\n// A conditional expression chain like this should be printed in normal mode,\n// because there aren't JSXElements anywhere in it:\n//\n// isA ? \"A\" : isB ? \"B\" : isC ? \"C\" : \"Unknown\";\n//\n// But a conditional expression chain like this should be printed in JSX mode,\n// because there is a JSXElement in the last ConditionalExpression:\n//\n// isA ? \"A\" : isB ? \"B\" : isC ? \"C\" : <span className=\"warning\">Unknown</span>;\n//\n// This type of ConditionalExpression chain is structured like this in the AST:\n//\n// ConditionalExpression {\n//   test: ...,\n//   consequent: ...,\n//   alternate: ConditionalExpression {\n//     test: ...,\n//     consequent: ...,\n//     alternate: ConditionalExpression {\n//       test: ...,\n//       consequent: ...,\n//       alternate: ...,\n//     }\n//   }\n// }\n//\n// We want to traverse over that shape and convert it into a flat structure so\n// that we can find if there's a JSXElement somewhere inside.\nfunction getConditionalChainContents(node){// Given this code:\n//\n// // Using a ConditionalExpression as the consequent is uncommon, but should\n// // be handled.\n// A ? B : C ? D : E ? F ? G : H : I\n//\n// which has this AST:\n//\n// ConditionalExpression {\n//   test: Identifier(A),\n//   consequent: Identifier(B),\n//   alternate: ConditionalExpression {\n//     test: Identifier(C),\n//     consequent: Identifier(D),\n//     alternate: ConditionalExpression {\n//       test: Identifier(E),\n//       consequent: ConditionalExpression {\n//         test: Identifier(F),\n//         consequent: Identifier(G),\n//         alternate: Identifier(H),\n//       },\n//       alternate: Identifier(I),\n//     }\n//   }\n// }\n//\n// we should return this Array:\n//\n// [\n//   Identifier(A),\n//   Identifier(B),\n//   Identifier(C),\n//   Identifier(D),\n//   Identifier(E),\n//   Identifier(F),\n//   Identifier(G),\n//   Identifier(H),\n//   Identifier(I)\n// ];\n//\n// This loses the information about whether each node was the test,\n// consequent, or alternate, but we don't care about that here- we are only\n// flattening this structure to find if there's any JSXElements inside.\nvar nonConditionalExpressions=[];function recurse(node){if(node.type===\"ConditionalExpression\"){recurse(node.test);recurse(node.consequent);recurse(node.alternate);}else{nonConditionalExpressions.push(node);}}recurse(node);return nonConditionalExpressions;}// Detect an expression node representing `{\" \"}`\nfunction isJSXWhitespaceExpression(node){return node.type===\"JSXExpressionContainer\"&&isLiteral(node.expression)&&node.expression.value===\" \"&&!node.expression.comments;}// JSX Children are strange, mostly for two reasons:\n// 1. JSX reads newlines into string values, instead of skipping them like JS\n// 2. up to one whitespace between elements within a line is significant,\n//    but not between lines.\n//\n// Leading, trailing, and lone whitespace all need to\n// turn themselves into the rather ugly `{' '}` when breaking.\n//\n// We print JSX using the `fill` doc primitive.\n// This requires that we give it an array of alternating\n// content and whitespace elements.\n// To ensure this we add dummy `\"\"` content elements as needed.\nfunction printJSXChildren(path,options,print,jsxWhitespace){var n=path.getValue();var children=[];// using `map` instead of `each` because it provides `i`\npath.map(function(childPath,i){var child=childPath.getValue();if(isLiteral(child)){var text=rawText(child);// Contains a non-whitespace character\nif(isMeaningfulJSXText(child)){var words=text.split(matchJsxWhitespaceRegex);// Starts with whitespace\nif(words[0]===\"\"){children.push(\"\");words.shift();if(/\\n/.test(words[0])){children.push(hardline$2);}else{children.push(jsxWhitespace);}words.shift();}var endWhitespace=void 0;// Ends with whitespace\nif(util$5.getLast(words)===\"\"){words.pop();endWhitespace=words.pop();}// This was whitespace only without a new line.\nif(words.length===0){return;}words.forEach(function(word,i){if(i%2===1){children.push(line$1);}else{children.push(word);}});if(endWhitespace!==undefined){if(/\\n/.test(endWhitespace)){children.push(hardline$2);}else{children.push(jsxWhitespace);}}else{// Ideally this would be a `hardline` to allow a break between\n// tags and text.\n// Unfortunately Facebook have a custom translation pipeline\n// (https://github.com/prettier/prettier/issues/1581#issuecomment-300975032)\n// that uses the JSX syntax, but does not follow the React whitespace\n// rules.\n// Ensuring that we never have a break between tags and text in JSX\n// will allow Facebook to adopt Prettier without too much of an\n// adverse effect on formatting algorithm.\nchildren.push(\"\");}}else if(/\\n/.test(text)){// Keep (up to one) blank line between tags/expressions/text.\n// Note: We don't keep blank lines between text elements.\nif(text.match(/\\n/g).length>1){children.push(\"\");children.push(hardline$2);}}else{children.push(\"\");children.push(jsxWhitespace);}}else{var printedChild=print(childPath);children.push(printedChild);var next=n.children[i+1];var directlyFollowedByMeaningfulText=next&&isMeaningfulJSXText(next)&&!/^[ \\n\\r\\t]/.test(rawText(next));if(directlyFollowedByMeaningfulText){// Potentially this could be a hardline as well.\n// See the comment above about the Facebook translation pipeline as\n// to why this is an empty string.\nchildren.push(\"\");}else{children.push(hardline$2);}}},\"children\");return children;}// JSX expands children from the inside-out, instead of the outside-in.\n// This is both to break children before attributes,\n// and to ensure that when children break, their parents do as well.\n//\n// Any element that is written without any newlines and fits on a single line\n// is left that way.\n// Not only that, any user-written-line containing multiple JSX siblings\n// should also be kept on one line if possible,\n// so each user-written-line is wrapped in its own group.\n//\n// Elements that contain newlines or don't fit on a single line (recursively)\n// are fully-split, using hardline and shouldBreak: true.\n//\n// To support that case properly, all leading and trailing spaces\n// are stripped from the list of children, and replaced with a single hardline.\nfunction printJSXElement(path,options,print){var n=path.getValue();// Turn <div></div> into <div />\nif(isEmptyJSXElement(n)){n.openingElement.selfClosing=true;delete n.closingElement;}var openingLines=path.call(print,\"openingElement\");var closingLines=path.call(print,\"closingElement\");if(n.children.length===1&&n.children[0].type===\"JSXExpressionContainer\"&&(n.children[0].expression.type===\"TemplateLiteral\"||n.children[0].expression.type===\"TaggedTemplateExpression\")){return concat$2([openingLines,concat$2(path.map(print,\"children\")),closingLines]);}// If no children, just print the opening element\nif(n.openingElement.selfClosing){assert$1.ok(!n.closingElement);return openingLines;}// Convert `{\" \"}` to text nodes containing a space.\n// This makes it easy to turn them into `jsxWhitespace` which\n// can then print as either a space or `{\" \"}` when breaking.\nn.children=n.children.map(function(child){if(isJSXWhitespaceExpression(child)){return{type:\"JSXText\",value:\" \",raw:\" \"};}return child;});var containsTag=n.children.filter(function(child){return child.type===\"JSXElement\";}).length>0;var containsMultipleExpressions=n.children.filter(function(child){return child.type===\"JSXExpressionContainer\";}).length>1;var containsMultipleAttributes=n.openingElement.attributes.length>1;// Record any breaks. Should never go from true to false, only false to true.\nvar forcedBreak=willBreak(openingLines)||containsTag||containsMultipleAttributes||containsMultipleExpressions;var rawJsxWhitespace=options.singleQuote?\"{' '}\":'{\" \"}';var jsxWhitespace=ifBreak$1(concat$2([rawJsxWhitespace,softline$1]),\" \");var children=printJSXChildren(path,options,print,jsxWhitespace);var containsText=n.children.filter(function(child){return isMeaningfulJSXText(child);}).length>0;// We can end up we multiple whitespace elements with empty string\n// content between them.\n// We need to remove empty whitespace and softlines before JSX whitespace\n// to get the correct output.\nfor(var _i26=children.length-2;_i26>=0;_i26--){var isPairOfEmptyStrings=children[_i26]===\"\"&&children[_i26+1]===\"\";var isPairOfHardlines=children[_i26]===hardline$2&&children[_i26+1]===\"\"&&children[_i26+2]===hardline$2;var isLineFollowedByJSXWhitespace=(children[_i26]===softline$1||children[_i26]===hardline$2)&&children[_i26+1]===\"\"&&children[_i26+2]===jsxWhitespace;var isJSXWhitespaceFollowedByLine=children[_i26]===jsxWhitespace&&children[_i26+1]===\"\"&&(children[_i26+2]===softline$1||children[_i26+2]===hardline$2);if(isPairOfHardlines&&containsText||isPairOfEmptyStrings||isLineFollowedByJSXWhitespace){children.splice(_i26,2);}else if(isJSXWhitespaceFollowedByLine){children.splice(_i26+1,2);}}// Trim trailing lines (or empty strings)\nwhile(children.length&&(isLineNext(util$5.getLast(children))||isEmpty(util$5.getLast(children)))){children.pop();}// Trim leading lines (or empty strings)\nwhile(children.length&&(isLineNext(children[0])||isEmpty(children[0]))&&(isLineNext(children[1])||isEmpty(children[1]))){children.shift();children.shift();}// Tweak how we format children if outputting this element over multiple lines.\n// Also detect whether we will force this element to output over multiple lines.\nvar multilineChildren=[];children.forEach(function(child,i){// There are a number of situations where we need to ensure we display\n// whitespace as `{\" \"}` when outputting this element over multiple lines.\nif(child===jsxWhitespace){if(i===1&&children[i-1]===\"\"){if(children.length===2){// Solitary whitespace\nmultilineChildren.push(rawJsxWhitespace);return;}// Leading whitespace\nmultilineChildren.push(concat$2([rawJsxWhitespace,hardline$2]));return;}else if(i===children.length-1){// Trailing whitespace\nmultilineChildren.push(rawJsxWhitespace);return;}else if(children[i-1]===\"\"&&children[i-2]===hardline$2){// Whitespace after line break\nmultilineChildren.push(rawJsxWhitespace);return;}}multilineChildren.push(child);if(willBreak(child)){forcedBreak=true;}});// If there is text we use `fill` to fit as much onto each line as possible.\n// When there is no text (just tags and expressions) we use `group`\n// to output each on a separate line.\nvar content=containsText?fill$1(multilineChildren):group$1(concat$2(multilineChildren),{shouldBreak:true});var multiLineElem=group$1(concat$2([openingLines,indent$2(concat$2([hardline$2,content])),hardline$2,closingLines]));if(forcedBreak){return multiLineElem;}return conditionalGroup$1([group$1(concat$2([openingLines,concat$2(children),closingLines])),multiLineElem]);}function maybeWrapJSXElementInParens(path,elem){var parent=path.getParentNode();if(!parent){return elem;}var NO_WRAP_PARENTS={ArrayExpression:true,JSXElement:true,JSXExpressionContainer:true,ExpressionStatement:true,CallExpression:true,ConditionalExpression:true};if(NO_WRAP_PARENTS[parent.type]){return elem;}return group$1(concat$2([ifBreak$1(\"(\"),indent$2(concat$2([softline$1,elem])),softline$1,ifBreak$1(\")\")]));}function isBinaryish(node){return node.type===\"BinaryExpression\"||node.type===\"LogicalExpression\";}function isMemberish(node){return node.type===\"MemberExpression\"||node.type===\"BindExpression\"&&node.object;}function shouldInlineLogicalExpression(node){if(node.type!==\"LogicalExpression\"){return false;}if(node.right.type===\"ObjectExpression\"&&node.right.properties.length!==0){return true;}if(node.right.type===\"ArrayExpression\"&&node.right.elements.length!==0){return true;}if(node.right.type===\"JSXElement\"){return true;}return false;}// For binary expressions to be consistent, we need to group\n// subsequent operators with the same precedence level under a single\n// group. Otherwise they will be nested such that some of them break\n// onto new lines but not all. Operators with the same precedence\n// level should either all break or not. Because we group them by\n// precedence level and the AST is structured based on precedence\n// level, things are naturally broken up correctly, i.e. `&&` is\n// broken before `+`.\nfunction printBinaryishExpressions(path,print,options,isNested,isInsideParenthesis){var parts=[];var node=path.getValue();// We treat BinaryExpression and LogicalExpression nodes the same.\nif(isBinaryish(node)){// Put all operators with the same precedence level in the same\n// group. The reason we only need to do this with the `left`\n// expression is because given an expression like `1 + 2 - 3`, it\n// is always parsed like `((1 + 2) - 3)`, meaning the `left` side\n// is where the rest of the expression will exist. Binary\n// expressions on the right side mean they have a difference\n// precedence level and should be treated as a separate group, so\n// print them normally. (This doesn't hold for the `**` operator,\n// which is unique in that it is right-associative.)\nif(util$5.shouldFlatten(node.operator,node.left.operator)){// Flatten them out by recursively calling this function.\nparts=parts.concat(path.call(function(left){return printBinaryishExpressions(left,print,options,/* isNested */true,isInsideParenthesis);},\"left\"));}else{parts.push(path.call(print,\"left\"));}var right=concat$2([node.operator,shouldInlineLogicalExpression(node)?\" \":line$1,path.call(print,\"right\")]);// If there's only a single binary expression, we want to create a group\n// in order to avoid having a small right part like -1 be on its own line.\nvar parent=path.getParentNode();var shouldGroup=!(isInsideParenthesis&&node.type===\"LogicalExpression\")&&parent.type!==node.type&&node.left.type!==node.type&&node.right.type!==node.type;parts.push(\" \",shouldGroup?group$1(right):right);// The root comments are already printed, but we need to manually print\n// the other ones since we don't call the normal print on BinaryExpression,\n// only for the left and right parts\nif(isNested&&node.comments){parts=comments$3.printComments(path,function(){return concat$2(parts);},options);}}else{// Our stopping case. Simply print the node normally.\nparts.push(path.call(print));}return parts;}function printAssignmentRight(rightNode,printedRight,canBreak,options){if(hasLeadingOwnLineComment(options.originalText,rightNode)){return indent$2(concat$2([hardline$2,printedRight]));}if(canBreak){return indent$2(concat$2([line$1,printedRight]));}return concat$2([\" \",printedRight]);}function printAssignment(leftNode,printedLeft,operator,rightNode,printedRight,options,type){if(!rightNode){return printedLeft;}var canBreak=options.breakProperty&&type===\"Property\"||isBinaryish(rightNode)&&!shouldInlineLogicalExpression(rightNode)||rightNode.type===\"ConditionalExpression\"&&isBinaryish(rightNode.test)&&!shouldInlineLogicalExpression(rightNode.test)||(leftNode.type===\"Identifier\"||isStringLiteral(leftNode)||leftNode.type===\"MemberExpression\")&&(isStringLiteral(rightNode)||isMemberExpressionChain(rightNode));var printed=printAssignmentRight(rightNode,printedRight,canBreak,options);return group$1(concat$2([printedLeft,operator,printed]));}function adjustClause(node,clause,forceSpace){if(node.type===\"EmptyStatement\"){return\";\";}if(node.type===\"BlockStatement\"||forceSpace){return concat$2([\" \",clause]);}return indent$2(concat$2([line$1,clause]));}function nodeStr(node,options,isFlowOrTypeScriptDirectiveLiteral){var raw=rawText(node);// `rawContent` is the string exactly like it appeared in the input source\n// code, with its enclosing quote.\nvar rawContent=raw.slice(1,-1);var double={quote:'\"',regex:/\"/g};var single={quote:\"'\",regex:/'/g};var preferred=options.singleQuote?single:double;var alternate=preferred===single?double:single;var shouldUseAlternateQuote=false;var isDirectiveLiteral=isFlowOrTypeScriptDirectiveLiteral||node.type===\"DirectiveLiteral\";var canChangeDirectiveQuotes=false;// If `rawContent` contains at least one of the quote preferred for enclosing\n// the string, we might want to enclose with the alternate quote instead, to\n// minimize the number of escaped quotes.\n// Also check for the alternate quote, to determine if we're allowed to swap\n// the quotes on a DirectiveLiteral.\nif(rawContent.includes(preferred.quote)||rawContent.includes(alternate.quote)){var numPreferredQuotes=(rawContent.match(preferred.regex)||[]).length;var numAlternateQuotes=(rawContent.match(alternate.regex)||[]).length;shouldUseAlternateQuote=numPreferredQuotes>numAlternateQuotes;}else{canChangeDirectiveQuotes=true;}var enclosingQuote=options.parser===\"json\"?double.quote:shouldUseAlternateQuote?alternate.quote:preferred.quote;// Directives are exact code unit sequences, which means that you can't\n// change the escape sequences they use.\n// See https://github.com/prettier/prettier/issues/1555\n// and https://tc39.github.io/ecma262/#directive-prologue\nif(isDirectiveLiteral){if(canChangeDirectiveQuotes){return enclosingQuote+rawContent+enclosingQuote;}return raw;}// It might sound unnecessary to use `makeString` even if `node.raw` already\n// is enclosed with `enclosingQuote`, but it isn't. `node.raw` could contain\n// unnecessary escapes (such as in `\"\\'\"`). Always using `makeString` makes\n// sure that we consistently output the minimum amount of escaped quotes.\nreturn makeString(rawContent,enclosingQuote);}function makeString(rawContent,enclosingQuote){var otherQuote=enclosingQuote==='\"'?\"'\":'\"';// Matches _any_ escape and unescaped quotes (both single and double).\nvar regex=/\\\\([\\s\\S])|(['\"])/g;// Escape and unescape single and double quotes as needed to be able to\n// enclose `rawContent` with `enclosingQuote`.\nvar newContent=rawContent.replace(regex,function(match,escaped,quote){// If we matched an escape, and the escaped character is a quote of the\n// other type than we intend to enclose the string with, there's no need for\n// it to be escaped, so return it _without_ the backslash.\nif(escaped===otherQuote){return escaped;}// If we matched an unescaped quote and it is of the _same_ type as we\n// intend to enclose the string with, it must be escaped, so return it with\n// a backslash.\nif(quote===enclosingQuote){return\"\\\\\"+quote;}if(quote){return quote;}// Unescape any unnecessarily escaped character.\n// Adapted from https://github.com/eslint/eslint/blob/de0b4ad7bd820ade41b1f606008bea68683dc11a/lib/rules/no-useless-escape.js#L27\nreturn /^[^\\\\nrvtbfux\\r\\n\\u2028\\u2029\"'0-7]$/.test(escaped)?escaped:\"\\\\\"+escaped;});return enclosingQuote+newContent+enclosingQuote;}function printRegex(node){var flags=node.flags.split(\"\").sort().join(\"\");return'/'+node.pattern+'/'+flags;}function printNumber(rawNumber){return rawNumber.toLowerCase// Remove unnecessary plus and zeroes from scientific notation.\n().replace(/^([\\d.]+e)(?:\\+|(-))?0*(\\d)/,\"$1$2$3\"// Remove unnecessary scientific notation (1e0).\n).replace(/^([\\d.]+)e[+-]?0+$/,\"$1\"// Make sure numbers always start with a digit.\n).replace(/^\\./,\"0.\"// Remove extraneous trailing decimal zeroes.\n).replace(/(\\.\\d+?)0+(?=e|$)/,\"$1\"// Remove trailing dot.\n).replace(/\\.(?=e|$)/,\"\");}function isLastStatement(path){var parent=path.getParentNode();if(!parent){return true;}var node=path.getValue();var body=(parent.body||parent.consequent).filter(function(stmt){return stmt.type!==\"EmptyStatement\";});return body&&body[body.length-1]===node;}function hasLeadingComment(node){return node.comments&&node.comments.some(function(comment){return comment.leading;});}function hasTrailingComment(node){return node.comments&&node.comments.some(function(comment){return comment.trailing;});}function hasLeadingOwnLineComment(text,node){if(node.type===\"JSXElement\"){return false;}var res=node.comments&&node.comments.some(function(comment){return comment.leading&&util$5.hasNewline(text,util$5.locEnd(comment));});return res;}function hasNakedLeftSide(node){return node.type===\"AssignmentExpression\"||node.type===\"BinaryExpression\"||node.type===\"LogicalExpression\"||node.type===\"ConditionalExpression\"||node.type===\"CallExpression\"||node.type===\"MemberExpression\"||node.type===\"SequenceExpression\"||node.type===\"TaggedTemplateExpression\"||node.type===\"BindExpression\"&&!node.object||node.type===\"UpdateExpression\"&&!node.prefix;}function getLeftSide(node){if(node.expressions){return node.expressions[0];}return node.left||node.test||node.callee||node.object||node.tag||node.argument||node.expression;}function exprNeedsASIProtection(node,options){// HACK: node.needsParens is added in `genericPrint()` for the sole purpose\n// of being used here. It'd be preferable to find a cleaner way to do this.\nvar maybeASIProblem=node.needsParens||node.type===\"ParenthesizedExpression\"||node.type===\"TypeCastExpression\"||node.type===\"ArrowFunctionExpression\"&&!canPrintParamsWithoutParens(node,options)||node.type===\"ArrayExpression\"||node.type===\"ArrayPattern\"||node.type===\"UnaryExpression\"&&node.prefix&&(node.operator===\"+\"||node.operator===\"-\")||node.type===\"TemplateLiteral\"||node.type===\"TemplateElement\"||node.type===\"JSXElement\"||node.type===\"BindExpression\"||node.type===\"RegExpLiteral\"||node.type===\"Literal\"&&node.pattern||node.type===\"Literal\"&&node.regex;if(maybeASIProblem){return true;}if(!hasNakedLeftSide(node)){return false;}return exprNeedsASIProtection(getLeftSide(node),options);}function stmtNeedsASIProtection(path,options){var node=path.getNode();if(node.type!==\"ExpressionStatement\"){return false;}return exprNeedsASIProtection(node.expression,options);}function classPropMayCauseASIProblems(path){var node=path.getNode();if(node.type!==\"ClassProperty\"){return false;}var name=node.key&&node.key.name;// this isn't actually possible yet with most parsers available today\n// so isn't properly tested yet.\nif((name===\"static\"||name===\"get\"||name===\"set\")&&!node.typeAnnotation){return true;}}function classChildNeedsASIProtection(node){if(!node){return;}if(!node.computed){var _name4=node.key&&node.key.name;if(_name4===\"in\"||_name4===\"instanceof\"){return true;}}switch(node.type){case\"ClassProperty\":case\"TSAbstractClassProperty\":return node.computed;case\"MethodDefinition\":// Flow\ncase\"TSAbstractMethodDefinition\":// TypeScript\ncase\"ClassMethod\":{// Babylon\nvar isAsync=node.value?node.value.async:node.async;var isGenerator=node.value?node.value.generator:node.generator;if(isAsync||node.static||node.kind===\"get\"||node.kind===\"set\"){return false;}if(node.computed||isGenerator){return true;}return false;}default:/* istanbul ignore next */return false;}}// This recurses the return argument, looking for the first token\n// (the leftmost leaf node) and, if it (or its parents) has any\n// leadingComments, returns true (so it can be wrapped in parens).\nfunction returnArgumentHasLeadingComment(options,argument){if(hasLeadingOwnLineComment(options.originalText,argument)){return true;}if(hasNakedLeftSide(argument)){var leftMost=argument;var newLeftMost=void 0;while(newLeftMost=getLeftSide(leftMost)){leftMost=newLeftMost;if(hasLeadingOwnLineComment(options.originalText,leftMost)){return true;}}}return false;}function isMemberExpressionChain(node){if(node.type!==\"MemberExpression\"){return false;}if(node.object.type===\"Identifier\"){return true;}return isMemberExpressionChain(node.object);}// Hack to differentiate between the following two which have the same ast\n// type T = { method: () => void };\n// type T = { method(): void };\nfunction isObjectTypePropertyAFunction(node){return node.type===\"ObjectTypeProperty\"&&node.value.type===\"FunctionTypeAnnotation\"&&!node.static&&!isFunctionNotation(node);}// TODO: This is a bad hack and we need a better way to distinguish between\n// arrow functions and otherwise\nfunction isFunctionNotation(node){return isGetterOrSetter(node)||sameLocStart(node,node.value);}function isGetterOrSetter(node){return node.kind===\"get\"||node.kind===\"set\";}function sameLocStart(nodeA,nodeB){return util$5.locStart(nodeA)===util$5.locStart(nodeB);}// Hack to differentiate between the following two which have the same ast\n// declare function f(a): void;\n// var f: (a) => void;\nfunction isTypeAnnotationAFunction(node){return node.type===\"TypeAnnotation\"&&node.typeAnnotation.type===\"FunctionTypeAnnotation\"&&!node.static&&!sameLocStart(node,node.typeAnnotation);}function isNodeStartingWithDeclare(node,options){if(!(options.parser===\"flow\"||options.parser===\"typescript\")){return false;}return options.originalText.slice(0,util$5.locStart(node)).match(/declare\\s*$/)||options.originalText.slice(node.range[0],node.range[1]).startsWith(\"declare \");}function shouldHugType(node){if(isObjectType(node)){return true;}if(node.type===\"UnionTypeAnnotation\"||node.type===\"TSUnionType\"){var voidCount=node.types.filter(function(n){return n.type===\"VoidTypeAnnotation\"||n.type===\"TSVoidKeyword\"||n.type===\"NullLiteralTypeAnnotation\"||n.type===\"TSNullKeyword\";}).length;var objectCount=node.types.filter(function(n){return n.type===\"ObjectTypeAnnotation\"||n.type===\"TSTypeLiteral\"||// This is a bit aggressive but captures Array<{x}>\nn.type===\"GenericTypeAnnotation\"||n.type===\"TSTypeReference\";}).length;if(node.types.length-1===voidCount&&objectCount>0){return true;}}return false;}function shouldHugArguments(fun){return fun&&fun.params&&fun.params.length===1&&!fun.params[0].comments&&(fun.params[0].type===\"ObjectPattern\"||fun.params[0].type===\"Identifier\"&&fun.params[0].typeAnnotation&&fun.params[0].typeAnnotation.type===\"TypeAnnotation\"&&isObjectType(fun.params[0].typeAnnotation.typeAnnotation)||fun.params[0].type===\"FunctionTypeParam\"&&isObjectType(fun.params[0].typeAnnotation))&&!fun.rest;}function templateLiteralHasNewLines(template){return template.quasis.some(function(quasi){return quasi.value.raw.includes(\"\\n\");});}function isTemplateOnItsOwnLine(n,text){return(n.type===\"TemplateLiteral\"&&templateLiteralHasNewLines(n)||n.type===\"TaggedTemplateExpression\"&&templateLiteralHasNewLines(n.quasi))&&!util$5.hasNewline(text,util$5.locStart(n),{backwards:true});}function printArrayItems(path,options,printPath,print){var printedElements=[];var separatorParts=[];path.each(function(childPath){printedElements.push(concat$2(separatorParts));printedElements.push(group$1(print(childPath)));separatorParts=[\",\",line$1];if(childPath.getValue()&&util$5.isNextLineEmpty(options.originalText,childPath.getValue())){separatorParts.push(softline$1);}},printPath);return concat$2(printedElements);}function hasDanglingComments(node){return node.comments&&node.comments.some(function(comment){return!comment.leading&&!comment.trailing;});}function isLiteral(node){return node.type===\"BooleanLiteral\"||node.type===\"DirectiveLiteral\"||node.type===\"Literal\"||node.type===\"NullLiteral\"||node.type===\"NumericLiteral\"||node.type===\"RegExpLiteral\"||node.type===\"StringLiteral\"||node.type===\"TemplateLiteral\"||node.type===\"TSTypeLiteral\"||node.type===\"JSXText\";}function isStringLiteral(node){return node.type===\"StringLiteral\"||node.type===\"Literal\"&&typeof node.value===\"string\";}function isObjectType(n){return n.type===\"ObjectTypeAnnotation\"||n.type===\"TSTypeLiteral\";}function printAstToDoc$1(ast,options,addAlignmentSize){addAlignmentSize=addAlignmentSize||0;var cache=new Map();function printGenerically(path,args){var node=path.getValue();var shouldCache=node&&(typeof node==='undefined'?'undefined':_typeof(node))===\"object\"&&args===undefined;if(shouldCache&&cache.has(node)){return cache.get(node);}var parent=path.getParentNode(0);// We let JSXElement print its comments itself because it adds () around\n// UnionTypeAnnotation has to align the child without the comments\nvar res=void 0;if(node&&node.type===\"JSXElement\"||parent&&(parent.type===\"UnionTypeAnnotation\"||parent.type===\"TSUnionType\")){res=genericPrint(path,options,printGenerically,args);}else{res=comments$3.printComments(path,function(p){return genericPrint(p,options,printGenerically,args);},options,args&&args.needsSemi);}if(shouldCache){cache.set(node,res);}return res;}var doc=printGenerically(new FastPath(ast));if(addAlignmentSize>0){// Add a hardline to make the indents take effect\n// It should be removed in index.js format()\ndoc=addAlignmentToDoc$1(docUtils.removeLines(concat$2([hardline$2,doc])),addAlignmentSize,options.tabWidth);}docUtils.propagateBreaks(doc);if(options.parser===\"json\"){doc=concat$2([doc,hardline$2]);}return doc;}var printer={printAstToDoc:printAstToDoc$1};var docBuilders$8=docBuilders$1;var concat$7=docBuilders$8.concat;var fill$3=docBuilders$8.fill;var cursor$2=docBuilders$8.cursor;var MODE_BREAK=1;var MODE_FLAT=2;function rootIndent(){return{indent:0,align:{spaces:0,tabs:0}};}function makeIndent(ind){return{indent:ind.indent+1,align:ind.align};}function makeAlign(ind,n){if(n===-Infinity){return{indent:0,align:{spaces:0,tabs:0}};}return{indent:ind.indent,align:{spaces:ind.align.spaces+n,tabs:ind.align.tabs+(n?1:0)}};}function fits(next,restCommands,width,mustBeFlat){var restIdx=restCommands.length;var cmds=[next];while(width>=0){if(cmds.length===0){if(restIdx===0){return true;}cmds.push(restCommands[restIdx-1]);restIdx--;continue;}var x=cmds.pop();var ind=x[0];var mode=x[1];var doc=x[2];var _align=x[3];if(typeof doc===\"string\"){width-=doc.length;}else{switch(doc.type){case\"concat\":for(var _i27=doc.parts.length-1;_i27>=0;_i27--){cmds.push([ind,mode,doc.parts[_i27]]);}break;case\"indent\":cmds.push([makeIndent(ind),mode,doc.contents]);break;case\"align\":cmds.push([makeAlign(ind,doc.n),mode,doc.contents]);break;case\"group\":if(mustBeFlat&&doc.break){return false;}cmds.push([ind,doc.break?MODE_BREAK:mode,doc.contents]);break;case\"fill\":for(var _i28=doc.parts.length-1;_i28>=0;_i28--){cmds.push([ind,mode,doc.parts[_i28]]);}break;case\"if-break\":if(mode===MODE_BREAK){if(doc.breakContents){cmds.push([ind,mode,doc.breakContents,_align]);}}if(mode===MODE_FLAT){if(doc.flatContents){cmds.push([ind,mode,doc.flatContents,_align]);}}break;case\"line\":switch(mode){// fallthrough\ncase MODE_FLAT:if(!doc.hard){if(!doc.soft){width-=1;}break;}return true;case MODE_BREAK:return true;}break;}}}return false;}function printDocToString$1(doc,options){var width=options.printWidth;var newLine=options.newLine||\"\\n\";var pos=0;// cmds is basically a stack. We've turned a recursive call into a\n// while loop which is much faster. The while loop below adds new\n// cmds to the array instead of recursively calling `print`.\nvar cmds=[[rootIndent(),MODE_BREAK,doc]];var out=[];var shouldRemeasure=false;var lineSuffix=[];while(cmds.length!==0){var x=cmds.pop();var ind=x[0];var mode=x[1];var _doc=x[2];var _align2=x[3];if(typeof _doc===\"string\"){out.push(_doc);pos+=_doc.length;}else{switch(_doc.type){case\"cursor\":out.push(cursor$2.placeholder);break;case\"concat\":for(var _i29=_doc.parts.length-1;_i29>=0;_i29--){cmds.push([ind,mode,_doc.parts[_i29]]);}break;case\"indent\":cmds.push([makeIndent(ind),mode,_doc.contents]);break;case\"align\":cmds.push([makeAlign(ind,_doc.n),mode,_doc.contents]);break;case\"group\":switch(mode){case MODE_FLAT:if(!shouldRemeasure){cmds.push([ind,_doc.break?MODE_BREAK:MODE_FLAT,_doc.contents,_align2]);break;}// fallthrough\ncase MODE_BREAK:{shouldRemeasure=false;var next=[ind,MODE_FLAT,_doc.contents];var rem=width-pos;if(!_doc.break&&fits(next,cmds,rem)){cmds.push(next);}else{// Expanded states are a rare case where a document\n// can manually provide multiple representations of\n// itself. It provides an array of documents\n// going from the least expanded (most flattened)\n// representation first to the most expanded. If a\n// group has these, we need to manually go through\n// these states and find the first one that fits.\nif(_doc.expandedStates){var mostExpanded=_doc.expandedStates[_doc.expandedStates.length-1];if(_doc.break){cmds.push([ind,MODE_BREAK,mostExpanded,_align2]);break;}else{for(var _i30=1;_i30<_doc.expandedStates.length+1;_i30++){if(_i30>=_doc.expandedStates.length){cmds.push([ind,MODE_BREAK,mostExpanded,_align2]);break;}else{var state=_doc.expandedStates[_i30];var cmd=[ind,MODE_FLAT,state,_align2];if(fits(cmd,cmds,rem)){cmds.push(cmd);break;}}}}}else{cmds.push([ind,MODE_BREAK,_doc.contents,_align2]);}}break;}}break;// Fills each line with as much code as possible before moving to a new\n// line with the same indentation.\n//\n// Expects doc.parts to be an array of alternating content and\n// whitespace. The whitespace contains the linebreaks.\n//\n// For example:\n//   [\"I\", line, \"love\", line, \"monkeys\"]\n// or\n//   [{ type: group, ... }, softline, { type: group, ... }]\n//\n// It uses this parts structure to handle three main layout cases:\n// * The first two content items fit on the same line without\n//   breaking\n//   -> output the first content item and the whitespace \"flat\".\n// * Only the first content item fits on the line without breaking\n//   -> output the first content item \"flat\" and the whitespace with\n//   \"break\".\n// * Neither content item fits on the line without breaking\n//   -> output the first content item and the whitespace with \"break\".\ncase\"fill\":{var _rem=width-pos;var parts=_doc.parts;if(parts.length===0){break;}var content=parts[0];var contentFlatCmd=[ind,MODE_FLAT,content];var contentBreakCmd=[ind,MODE_BREAK,content];var contentFits=fits(contentFlatCmd,[],width-_rem,true);if(parts.length===1){if(contentFits){cmds.push(contentFlatCmd);}else{cmds.push(contentBreakCmd);}break;}var whitespace=parts[1];var whitespaceFlatCmd=[ind,MODE_FLAT,whitespace];var whitespaceBreakCmd=[ind,MODE_BREAK,whitespace];if(parts.length===2){if(contentFits){cmds.push(whitespaceFlatCmd);cmds.push(contentFlatCmd);}else{cmds.push(whitespaceBreakCmd);cmds.push(contentBreakCmd);}break;}var remaining=parts.slice(2);var remainingCmd=[ind,mode,fill$3(remaining)];var secondContent=parts[2];var firstAndSecondContentFlatCmd=[ind,MODE_FLAT,concat$7([content,whitespace,secondContent])];var firstAndSecondContentFits=fits(firstAndSecondContentFlatCmd,[],_rem,true);if(firstAndSecondContentFits){cmds.push(remainingCmd);cmds.push(whitespaceFlatCmd);cmds.push(contentFlatCmd);}else if(contentFits){cmds.push(remainingCmd);cmds.push(whitespaceBreakCmd);cmds.push(contentFlatCmd);}else{cmds.push(remainingCmd);cmds.push(whitespaceBreakCmd);cmds.push(contentBreakCmd);}break;}case\"if-break\":if(mode===MODE_BREAK){if(_doc.breakContents){cmds.push([ind,mode,_doc.breakContents,_align2]);}}if(mode===MODE_FLAT){if(_doc.flatContents){cmds.push([ind,mode,_doc.flatContents,_align2]);}}break;case\"line-suffix\":lineSuffix.push([ind,mode,_doc.contents,_align2]);break;case\"line-suffix-boundary\":if(lineSuffix.length>0){cmds.push([ind,mode,{type:\"line\",hard:true}]);}break;case\"line\":switch(mode){case MODE_FLAT:if(!_doc.hard){if(!_doc.soft){out.push(\" \");pos+=1;}break;}else{// This line was forced into the output even if we\n// were in flattened mode, so we need to tell the next\n// group that no matter what, it needs to remeasure\n// because the previous measurement didn't accurately\n// capture the entire expression (this is necessary\n// for nested groups)\nshouldRemeasure=true;}// fallthrough\ncase MODE_BREAK:if(lineSuffix.length){cmds.push([ind,mode,_doc,_align2]);[].push.apply(cmds,lineSuffix.reverse());lineSuffix=[];break;}if(_doc.literal){out.push(newLine);pos=0;}else{if(out.length>0){// Trim whitespace at the end of line\nwhile(out.length>0&&out[out.length-1].match(/^[^\\S\\n]*$/)){out.pop();}if(out.length){out[out.length-1]=out[out.length-1].replace(/[^\\S\\n]*$/,\"\");}}var length=ind.indent*options.tabWidth+ind.align.spaces;var _indentString=options.useTabs?\"\\t\".repeat(ind.indent+ind.align.tabs):\" \".repeat(length);out.push(newLine+_indentString);pos=length;}break;}break;default:}}}var cursorPlaceholderIndex=out.indexOf(cursor$2.placeholder);if(cursorPlaceholderIndex!==-1){var beforeCursor=out.slice(0,cursorPlaceholderIndex).join(\"\");var afterCursor=out.slice(cursorPlaceholderIndex+1).join(\"\");return{formatted:beforeCursor+afterCursor,cursor:beforeCursor.length};}return{formatted:out.join(\"\")};}var docPrinter={printDocToString:printDocToString$1};var index$26=createCommonjsModule(function(module){'use strict';function assembleStyles(){var styles={modifiers:{reset:[0,0],bold:[1,22],// 21 isn't widely supported and 22 does the same thing\ndim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},colors:{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]},bgColors:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49]}};// fix humans\nstyles.colors.grey=styles.colors.gray;Object.keys(styles).forEach(function(groupName){var group=styles[groupName];Object.keys(group).forEach(function(styleName){var style=group[styleName];styles[styleName]=group[styleName]={open:'\\x1B['+style[0]+'m',close:'\\x1B['+style[1]+'m'};});Object.defineProperty(styles,groupName,{value:group,enumerable:false});});return styles;}Object.defineProperty(module,'exports',{enumerable:true,get:assembleStyles});});var escapeStringRegexp$1=index$10;var ansiStyles$1=index$26;var stripAnsi$1=index$14;var hasAnsi$1=index$18;var supportsColor$1=index$20;var defineProps$1=Object.defineProperties;var isSimpleWindowsTerm$1=process.platform==='win32'&&!/^xterm/i.test(process.env.TERM);function Chalk$1(options){// detect mode if not set manually\nthis.enabled=!options||options.enabled===undefined?supportsColor$1:options.enabled;}// use bright blue on Windows as the normal blue color is illegible\nif(isSimpleWindowsTerm$1){ansiStyles$1.blue.open='\\x1B[94m';}var styles$1=function(){var ret={};Object.keys(ansiStyles$1).forEach(function(key){ansiStyles$1[key].closeRe=new RegExp(escapeStringRegexp$1(ansiStyles$1[key].close),'g');ret[key]={get:function get(){return build$1.call(this,this._styles.concat(key));}};});return ret;}();var proto$1=defineProps$1(function chalk(){},styles$1);function build$1(_styles){var builder=function builder(){return applyStyle$1.apply(builder,arguments);};builder._styles=_styles;builder.enabled=this.enabled;// __proto__ is used because we must return a function, but there is\n// no way to create a function with a different prototype.\n/* eslint-disable no-proto */builder.__proto__=proto$1;return builder;}function applyStyle$1(){// support varags, but simply cast to string in case there's only one arg\nvar args=arguments;var argsLen=args.length;var str=argsLen!==0&&String(arguments[0]);if(argsLen>1){// don't slice `arguments`, it prevents v8 optimizations\nfor(var a=1;a<argsLen;a++){str+=' '+args[a];}}if(!this.enabled||!str){return str;}var nestedStyles=this._styles;var i=nestedStyles.length;// Turns out that on Windows dimmed gray text becomes invisible in cmd.exe,\n// see https://github.com/chalk/chalk/issues/58\n// If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop.\nvar originalDim=ansiStyles$1.dim.open;if(isSimpleWindowsTerm$1&&(nestedStyles.indexOf('gray')!==-1||nestedStyles.indexOf('grey')!==-1)){ansiStyles$1.dim.open='';}while(i--){var code=ansiStyles$1[nestedStyles[i]];// Replace any instances already present with a re-opening code\n// otherwise only the part of the string until said closing code\n// will be colored, and the rest will simply be 'plain'.\nstr=code.open+str.replace(code.closeRe,code.open)+code.close;}// Reset the original 'dim' if we changed it to work around the Windows dimmed gray issue.\nansiStyles$1.dim.open=originalDim;return str;}function init$1(){var ret={};Object.keys(styles$1).forEach(function(name){ret[name]={get:function get(){return build$1.call(this,[name]);}};});return ret;}defineProps$1(Chalk$1.prototype,init$1());var index$24=new Chalk$1();var styles_1$1=ansiStyles$1;var hasColor$1=hasAnsi$1;var stripColor$1=stripAnsi$1;var supportsColor_1$1=supportsColor$1;index$24.styles=styles_1$1;index$24.hasColor=hasColor$1;index$24.stripColor=stripColor$1;index$24.supportsColor=supportsColor_1$1;var index$36={\"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]};var conversions$1=createCommonjsModule(function(module){/* MIT license */var cssKeywords=index$36;// NOTE: conversions should only return primitive values (i.e. arrays, or\n//       values that give correct `typeof` results).\n//       do not use box values types (i.e. Number(), String(), etc.)\nvar 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\nfor(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 r=rgb[0];var g=rgb[1];var b=rgb[2];var min=Math.min(r,g,b);var max=Math.max(r,g,b);var delta=max-min;var h;var s;var v;if(max===0){s=0;}else{s=delta/max*1000/10;}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;}v=max/255*1000/10;return[h,s,v];};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];};/**\n * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n * */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\nvar distance=comparativeDistance(rgb,value);// Check if its less, if so set as closest\nif(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\nr=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\nconvert.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\nif(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\nvar 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\nr=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\nvalue=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\n// it converted for us.\nreturn 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\n// black and white. normal palette only has 4 greyscale shades.\nif(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\nif(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\nif(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];};});var conversions$3=conversions$1;/*\n\tthis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/// https://jsperf.com/object-keys-vs-for-in-with-closure/3\nvar models$1=Object.keys(conversions$3);function buildGraph(){var graph={};for(var len=models$1.length,i=0;i<len;i++){graph[models$1[i]]={// http://jsperf.com/1-vs-infinity\n// micro-opt, but this is simple.\ndistance:-1,parent:null};}return graph;}// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel){var graph=buildGraph();var queue=[fromModel];// unshift -> queue -> pop\ngraph[fromModel].distance=0;while(queue.length){var current=queue.pop();var adjacents=Object.keys(conversions$3[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$3[graph[toModel].parent][toModel];var cur=graph[toModel].parent;while(graph[cur].parent){path.unshift(graph[cur].parent);fn=link(conversions$3[graph[cur].parent][cur],fn);cur=graph[cur].parent;}fn.conversion=path;return fn;}var route$1=function route$1(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.\ncontinue;}conversion[toModel]=wrapConversion(toModel,graph);}return conversion;};var conversions=conversions$1;var route=route$1;var convert={};var models=Object.keys(conversions);function wrapRaw(fn){var wrappedFn=function wrappedFn(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\nif('conversion'in fn){wrappedFn.conversion=fn.conversion;}return wrappedFn;}function wrapRounded(fn){var wrappedFn=function wrappedFn(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.\n// see notice in conversions.js; don't use box types\n// in conversion functions.\nif((typeof result==='undefined'?'undefined':_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\nif('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);});});var index$34=convert;var index$32=createCommonjsModule(function(module){'use strict';var colorConvert=index$34;var wrapAnsi16=function wrapAnsi16(fn,offset){return function(){var code=fn.apply(colorConvert,arguments);return'\\x1B['+(code+offset)+'m';};};var wrapAnsi256=function wrapAnsi256(fn,offset){return function(){var code=fn.apply(colorConvert,arguments);return'\\x1B['+(38+offset)+';5;'+code+'m';};};var wrapAnsi16m=function wrapAnsi16m(fn,offset){return function(){var rgb=fn.apply(colorConvert,arguments);return'\\x1B['+(38+offset)+';2;'+rgb[0]+';'+rgb[1]+';'+rgb[2]+'m';};};function assembleStyles(){var styles={modifier:{reset:[0,0],// 21 isn't widely supported and 22 does the same thing\nbold:[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]},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]}};// fix humans\nstyles.color.grey=styles.color.gray;Object.keys(styles).forEach(function(groupName){var group=styles[groupName];Object.keys(group).forEach(function(styleName){var style=group[styleName];styles[styleName]=group[styleName]={open:'\\x1B['+style[0]+'m',close:'\\x1B['+style[1]+'m'};});Object.defineProperty(styles,groupName,{value:group,enumerable:false});});var rgb2rgb=function rgb2rgb(r,g,b){return[r,g,b];};styles.color.close='\\x1B[39m';styles.bgColor.close='\\x1B[49m';styles.color.ansi={};styles.color.ansi256={};styles.color.ansi16m={rgb:wrapAnsi16m(rgb2rgb,0)};styles.bgColor.ansi={};styles.bgColor.ansi256={};styles.bgColor.ansi16m={rgb:wrapAnsi16m(rgb2rgb,10)};var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=Object.keys(colorConvert)[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var key=_step.value;if(_typeof(colorConvert[key])!=='object'){continue;}var suite=colorConvert[key];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);}}}catch(err){_didIteratorError=true;_iteratorError=err;}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return();}}finally{if(_didIteratorError){throw _iteratorError;}}}return styles;}Object.defineProperty(module,'exports',{enumerable:true,get:assembleStyles});});var asymmetricMatcher=Symbol.for('jest.asymmetricMatcher');/**\n                                                                 * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.\n                                                                 *\n                                                                 * This source code is licensed under the BSD-style license found in the\n                                                                 * LICENSE file in the root directory of this source tree. An additional grant\n                                                                 * of patent rights can be found in the PATENTS file in the same directory.\n                                                                 *\n                                                                 * \n                                                                 */var SPACE=' ';var ArrayContaining=function(_Array){_inherits(ArrayContaining,_Array);function ArrayContaining(){_classCallCheck(this,ArrayContaining);return _possibleConstructorReturn(this,(ArrayContaining.__proto__||Object.getPrototypeOf(ArrayContaining)).apply(this,arguments));}return ArrayContaining;}(Array);var ObjectContaining=function(_Object){_inherits(ObjectContaining,_Object);function ObjectContaining(){_classCallCheck(this,ObjectContaining);return _possibleConstructorReturn(this,(ObjectContaining.__proto__||Object.getPrototypeOf(ObjectContaining)).apply(this,arguments));}return ObjectContaining;}(Object);var print$1=function print$1(val,print,indent,opts,colors){var stringedValue=val.toString();if(stringedValue==='ArrayContaining'){var array=ArrayContaining.from(val.sample);return opts.spacing===SPACE?stringedValue+SPACE+print(array):print(array);}if(stringedValue==='ObjectContaining'){var object=Object.assign(new ObjectContaining(),val.sample);return opts.spacing===SPACE?stringedValue+SPACE+print(object):print(object);}if(stringedValue==='StringMatching'){return stringedValue+SPACE+print(val.sample);}if(stringedValue==='StringContaining'){return stringedValue+SPACE+print(val.sample);}return val.toAsymmetricMatcher();};var test=function test(object){return object&&object.$$typeof===asymmetricMatcher;};var AsymmetricMatcher$1={print:print$1,test:test};var ansiRegex$2=index$16;/**\n                                          * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.\n                                          *\n                                          * This source code is licensed under the BSD-style license found in the\n                                          * LICENSE file in the root directory of this source tree. An additional grant\n                                          * of patent rights can be found in the PATENTS file in the same directory.\n                                          *\n                                          * \n                                          */var toHumanReadableAnsi=function toHumanReadableAnsi(text){var style=index$32;return text.replace(ansiRegex$2(),function(match,offset,string){switch(match){case style.red.close:case style.green.close:case style.reset.open:case style.reset.close:return'</>';case style.red.open:return'<red>';case style.green.open:return'<green>';case style.dim.open:return'<dim>';case style.bold.open:return'<bold>';default:return'';}});};var test$1=function test$1(value){return typeof value==='string'&&value.match(ansiRegex$2());};var print$2=function print$2(val,print,indent,opts,colors){return print(toHumanReadableAnsi(val));};var ConvertAnsi={print:print$2,test:test$1};function escapeHTML$1(str){return str.replace(/</g,'&lt;').replace(/>/g,'&gt;');}var escapeHTML_1=escapeHTML$1;var escapeHTML=escapeHTML_1;/**\n                                                 * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.\n                                                 *\n                                                 * This source code is licensed under the BSD-style license found in the\n                                                 * LICENSE file in the root directory of this source tree. An additional grant\n                                                 * of patent rights can be found in the PATENTS file in the same directory.\n                                                 *\n                                                 * \n                                                 */var HTML_ELEMENT_REGEXP=/(HTML\\w*?Element)|Text|Comment/;var test$2=isHTMLElement;function isHTMLElement(value){return value!==undefined&&value!==null&&(value.nodeType===1||value.nodeType===3||value.nodeType===8)&&value.constructor!==undefined&&value.constructor.name!==undefined&&HTML_ELEMENT_REGEXP.test(value.constructor.name);}function printChildren$1(flatChildren,print,indent,colors,opts){return flatChildren.map(function(node){if((typeof node==='undefined'?'undefined':_typeof(node))==='object'){return print(node,print,indent,colors,opts);}else if(typeof node==='string'){return colors.content.open+escapeHTML(node)+colors.content.close;}else{return print(node);}}).filter(function(value){return value.trim().length;}).join(opts.edgeSpacing);}function printAttributes$1(attributes,indent,colors,opts){return attributes.sort().map(function(attribute){return opts.spacing+indent(colors.prop.open+attribute.name+colors.prop.close+'=')+colors.value.open+('\"'+attribute.value+'\"')+colors.value.close;}).join('');}var print$3=function print$3(element,print,indent,opts,colors){if(element.nodeType===3){return element.data.split('\\n').map(function(text){return text.trimLeft();}).filter(function(text){return text.length;}).join(' ');}else if(element.nodeType===8){return colors.comment.open+'<!-- '+element.data.trim()+' -->'+colors.comment.close;}var result=colors.tag.open+'<';var elementName=element.tagName.toLowerCase();result+=elementName+colors.tag.close;var hasAttributes=element.attributes&&element.attributes.length;if(hasAttributes){var attributes=Array.prototype.slice.call(element.attributes);result+=printAttributes$1(attributes,indent,colors,opts);}var flatChildren=Array.prototype.slice.call(element.childNodes);if(!flatChildren.length&&element.textContent){flatChildren.push(element.textContent);}var closeInNewLine=hasAttributes&&!opts.min;if(flatChildren.length){var children=printChildren$1(flatChildren,print,indent,colors,opts);result+=colors.tag.open+(closeInNewLine?'\\n':'')+'>'+colors.tag.close+opts.edgeSpacing+indent(children)+opts.edgeSpacing+colors.tag.open+'</'+elementName+'>'+colors.tag.close;}else{result+=colors.tag.open+(closeInNewLine?'\\n':' ')+'/>'+colors.tag.close;}return result;};var HTMLElement$1={print:print$3,test:test$2};var _slicedToArray=function(){function sliceIterator(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i[\"return\"])_i[\"return\"]();}finally{if(_d)throw _e;}}return _arr;}return function(arr,i){if(Array.isArray(arr)){return arr;}else if(Symbol.iterator in Object(arr)){return sliceIterator(arr,i);}else{throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");}};}();var IMMUTABLE_NAMESPACE='Immutable.';/**\n                                           * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.\n                                           *\n                                           * This source code is licensed under the BSD-style license found in the\n                                           * LICENSE file in the root directory of this source tree. An additional grant\n                                           * of patent rights can be found in the PATENTS file in the same directory.\n                                           *\n                                           * \n                                           */var SPACE$1=' ';var addKey=function addKey(isMap,key){return isMap?key+': ':'';};var addFinalEdgeSpacing=function addFinalEdgeSpacing(length,edgeSpacing){return length>0?edgeSpacing:'';};var printImmutable$1=function printImmutable$1(val,print,indent,opts,colors,immutableDataStructureName,isMap){var _ref=isMap?['{','}']:['[',']'],_ref2=_slicedToArray(_ref,2);var openTag=_ref2[0],closeTag=_ref2[1];var result=IMMUTABLE_NAMESPACE+immutableDataStructureName+SPACE$1+openTag+opts.edgeSpacing;var immutableArray=[];val.forEach(function(item,key){return immutableArray.push(indent(addKey(isMap,key)+print(item,print,indent,opts,colors)));});result+=immutableArray.join(','+opts.spacing);if(!opts.min&&immutableArray.length>0){result+=',';}return result+addFinalEdgeSpacing(immutableArray.length,opts.edgeSpacing)+closeTag;};var printImmutable_1=printImmutable$1;var printImmutable=printImmutable_1;/**\n                                                         * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.\n                                                         *\n                                                         * This source code is licensed under the BSD-style license found in the\n                                                         * LICENSE file in the root directory of this source tree. An additional grant\n                                                         * of patent rights can be found in the PATENTS file in the same directory.\n                                                         *\n                                                         * \n                                                         */var IS_LIST='@@__IMMUTABLE_LIST__@@';var test$3=function test$3(maybeList){return!!(maybeList&&maybeList[IS_LIST]);};var print$4=function print$4(val,print,indent,opts,colors){return printImmutable(val,print,indent,opts,colors,'List',false);};var ImmutableList={print:print$4,test:test$3};var printImmutable$2=printImmutable_1;/**\n                                                         * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.\n                                                         *\n                                                         * This source code is licensed under the BSD-style license found in the\n                                                         * LICENSE file in the root directory of this source tree. An additional grant\n                                                         * of patent rights can be found in the PATENTS file in the same directory.\n                                                         *\n                                                         * \n                                                         */var IS_SET='@@__IMMUTABLE_SET__@@';var IS_ORDERED='@@__IMMUTABLE_ORDERED__@@';var test$4=function test$4(maybeSet){return!!(maybeSet&&maybeSet[IS_SET]&&!maybeSet[IS_ORDERED]);};var print$5=function print$5(val,print,indent,opts,colors){return printImmutable$2(val,print,indent,opts,colors,'Set',false);};var ImmutableSet={print:print$5,test:test$4};var printImmutable$3=printImmutable_1;/**\n                                                         * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.\n                                                         *\n                                                         * This source code is licensed under the BSD-style license found in the\n                                                         * LICENSE file in the root directory of this source tree. An additional grant\n                                                         * of patent rights can be found in the PATENTS file in the same directory.\n                                                         *\n                                                         * \n                                                         */var IS_MAP='@@__IMMUTABLE_MAP__@@';var IS_ORDERED$1='@@__IMMUTABLE_ORDERED__@@';var test$5=function test$5(maybeMap){return!!(maybeMap&&maybeMap[IS_MAP]&&!maybeMap[IS_ORDERED$1]);};var print$6=function print$6(val,print,indent,opts,colors){return printImmutable$3(val,print,indent,opts,colors,'Map',true);};var ImmutableMap={print:print$6,test:test$5};var printImmutable$4=printImmutable_1;/**\n                                                         * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.\n                                                         *\n                                                         * This source code is licensed under the BSD-style license found in the\n                                                         * LICENSE file in the root directory of this source tree. An additional grant\n                                                         * of patent rights can be found in the PATENTS file in the same directory.\n                                                         *\n                                                         * \n                                                         */var IS_STACK='@@__IMMUTABLE_STACK__@@';var test$6=function test$6(maybeStack){return!!(maybeStack&&maybeStack[IS_STACK]);};var print$7=function print$7(val,print,indent,opts,colors){return printImmutable$4(val,print,indent,opts,colors,'Stack',false);};var ImmutableStack={print:print$7,test:test$6};var printImmutable$5=printImmutable_1;/**\n                                                         * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.\n                                                         *\n                                                         * This source code is licensed under the BSD-style license found in the\n                                                         * LICENSE file in the root directory of this source tree. An additional grant\n                                                         * of patent rights can be found in the PATENTS file in the same directory.\n                                                         *\n                                                         * \n                                                         */var IS_SET$1='@@__IMMUTABLE_SET__@@';var IS_ORDERED$2='@@__IMMUTABLE_ORDERED__@@';var test$7=function test$7(maybeOrderedSet){return maybeOrderedSet&&maybeOrderedSet[IS_SET$1]&&maybeOrderedSet[IS_ORDERED$2];};var print$8=function print$8(val,print,indent,opts,colors){return printImmutable$5(val,print,indent,opts,colors,'OrderedSet',false);};var ImmutableOrderedSet={print:print$8,test:test$7};var printImmutable$6=printImmutable_1;/**\n                                                         * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.\n                                                         *\n                                                         * This source code is licensed under the BSD-style license found in the\n                                                         * LICENSE file in the root directory of this source tree. An additional grant\n                                                         * of patent rights can be found in the PATENTS file in the same directory.\n                                                         *\n                                                         * \n                                                         */var IS_MAP$1='@@__IMMUTABLE_MAP__@@';var IS_ORDERED$3='@@__IMMUTABLE_ORDERED__@@';var test$8=function test$8(maybeOrderedMap){return maybeOrderedMap&&maybeOrderedMap[IS_MAP$1]&&maybeOrderedMap[IS_ORDERED$3];};var print$9=function print$9(val,print,indent,opts,colors){return printImmutable$6(val,print,indent,opts,colors,'OrderedMap',true);};var ImmutableOrderedMap={print:print$9,test:test$8};var ImmutablePlugins=[ImmutableList,ImmutableSet,ImmutableMap,ImmutableStack,ImmutableOrderedSet,ImmutableOrderedMap];var escapeHTML$2=escapeHTML_1;/**\n                                                 * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.\n                                                 *\n                                                 * This source code is licensed under the BSD-style license found in the\n                                                 * LICENSE file in the root directory of this source tree. An additional grant\n                                                 * of patent rights can be found in the PATENTS file in the same directory.\n                                                 *\n                                                 * \n                                                 */var reactElement=Symbol.for('react.element');function traverseChildren(opaqueChildren,cb){if(Array.isArray(opaqueChildren)){opaqueChildren.forEach(function(child){return traverseChildren(child,cb);});}else if(opaqueChildren!=null&&opaqueChildren!==false){cb(opaqueChildren);}}function printChildren$2(flatChildren,print,indent,colors,opts){return flatChildren.map(function(node){if((typeof node==='undefined'?'undefined':_typeof(node))==='object'){return print(node,print,indent,colors,opts);}else if(typeof node==='string'){return colors.content.open+escapeHTML$2(node)+colors.content.close;}else{return print(node);}}).join(opts.edgeSpacing);}function printProps(props,print,indent,colors,opts){return Object.keys(props).sort().map(function(name){if(name==='children'){return'';}var prop=props[name];var printed=print(prop);if(typeof prop!=='string'){if(printed.indexOf('\\n')!==-1){printed='{'+opts.edgeSpacing+indent(indent(printed)+opts.edgeSpacing+'}');}else{printed='{'+printed+'}';}}return opts.spacing+indent(colors.prop.open+name+colors.prop.close+'=')+colors.value.open+printed+colors.value.close;}).join('');}var print$10=function print$10(element,print,indent,opts,colors){var result=colors.tag.open+'<';var elementName=void 0;if(typeof element.type==='string'){elementName=element.type;}else if(typeof element.type==='function'){elementName=element.type.displayName||element.type.name||'Unknown';}else{elementName='Unknown';}result+=elementName+colors.tag.close;result+=printProps(element.props,print,indent,colors,opts);var opaqueChildren=element.props.children;var hasProps=!!Object.keys(element.props).filter(function(propName){return propName!=='children';}).length;var closeInNewLine=hasProps&&!opts.min;if(opaqueChildren){var flatChildren=[];traverseChildren(opaqueChildren,function(child){flatChildren.push(child);});var children=printChildren$2(flatChildren,print,indent,colors,opts);result+=colors.tag.open+(closeInNewLine?'\\n':'')+'>'+colors.tag.close+opts.edgeSpacing+indent(children)+opts.edgeSpacing+colors.tag.open+'</'+elementName+'>'+colors.tag.close;}else{result+=colors.tag.open+(closeInNewLine?'\\n':' ')+'/>'+colors.tag.close;}return result;};var test$9=function test$9(object){return object&&object.$$typeof===reactElement;};var ReactElement$1={print:print$10,test:test$9};var escapeHTML$3=escapeHTML_1;/**\n                                                 * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.\n                                                 *\n                                                 * This source code is licensed under the BSD-style license found in the\n                                                 * LICENSE file in the root directory of this source tree. An additional grant\n                                                 * of patent rights can be found in the PATENTS file in the same directory.\n                                                 *\n                                                 * \n                                                 */var reactTestInstance=Symbol.for('react.test.json');function printChildren$3(children,print,indent,colors,opts){return children.map(function(child){return printInstance(child,print,indent,colors,opts);}).join(opts.edgeSpacing);}function printProps$1(props,print,indent,colors,opts){return Object.keys(props).sort().map(function(name){var prop=props[name];var printed=print(prop);if(typeof prop!=='string'){if(printed.indexOf('\\n')!==-1){printed='{'+opts.edgeSpacing+indent(indent(printed)+opts.edgeSpacing+'}');}else{printed='{'+printed+'}';}}return opts.spacing+indent(colors.prop.open+name+colors.prop.close+'=')+colors.value.open+printed+colors.value.close;}).join('');}function printInstance(instance,print,indent,colors,opts){if(typeof instance=='number'){return print(instance);}else if(typeof instance==='string'){return colors.content.open+escapeHTML$3(instance)+colors.content.close;}var closeInNewLine=false;var result=colors.tag.open+'<'+instance.type+colors.tag.close;if(instance.props){closeInNewLine=!!Object.keys(instance.props).length&&!opts.min;result+=printProps$1(instance.props,print,indent,colors,opts);}if(instance.children){var children=printChildren$3(instance.children,print,indent,colors,opts);result+=colors.tag.open+(closeInNewLine?'\\n':'')+'>'+colors.tag.close+opts.edgeSpacing+indent(children)+opts.edgeSpacing+colors.tag.open+'</'+instance.type+'>'+colors.tag.close;}else{result+=colors.tag.open+(closeInNewLine?'\\n':' ')+'/>'+colors.tag.close;}return result;}var print$11=function print$11(val,print,indent,opts,colors){return printInstance(val,print,indent,colors,opts);};var test$10=function test$10(object){return object&&object.$$typeof===reactTestInstance;};var ReactTestComponent={print:print$11,test:test$10};var style=index$32;/**\n                                       * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.\n                                       *\n                                       * This source code is licensed under the BSD-style license found in the\n                                       * LICENSE file in the root directory of this source tree. An additional grant\n                                       * of patent rights can be found in the PATENTS file in the same directory.\n                                       *\n                                       * \n                                       */var toString=Object.prototype.toString;var toISOString=Date.prototype.toISOString;var errorToString=Error.prototype.toString;var regExpToString=RegExp.prototype.toString;var symbolToString=Symbol.prototype.toString;var SYMBOL_REGEXP=/^Symbol\\((.*)\\)(.*)$/;var NEWLINE_REGEXP=/\\n/gi;var getSymbols=Object.getOwnPropertySymbols||function(obj){return[];};function isToStringedArrayType(toStringed){return toStringed==='[object Array]'||toStringed==='[object ArrayBuffer]'||toStringed==='[object DataView]'||toStringed==='[object Float32Array]'||toStringed==='[object Float64Array]'||toStringed==='[object Int8Array]'||toStringed==='[object Int16Array]'||toStringed==='[object Int32Array]'||toStringed==='[object Uint8Array]'||toStringed==='[object Uint8ClampedArray]'||toStringed==='[object Uint16Array]'||toStringed==='[object Uint32Array]';}function printNumber$1(val){if(val!=+val){return'NaN';}var isNegativeZero=val===0&&1/val<0;return isNegativeZero?'-0':''+val;}function printFunction(val,printFunctionName){if(!printFunctionName){return'[Function]';}else if(val.name===''){return'[Function anonymous]';}else{return'[Function '+val.name+']';}}function printSymbol(val){return symbolToString.call(val).replace(SYMBOL_REGEXP,'Symbol($1)');}function printError(val){return'['+errorToString.call(val)+']';}function printBasicValue(val,printFunctionName,escapeRegex){if(val===true||val===false){return''+val;}if(val===undefined){return'undefined';}if(val===null){return'null';}var typeOf=typeof val==='undefined'?'undefined':_typeof(val);if(typeOf==='number'){return printNumber$1(val);}if(typeOf==='string'){return'\"'+val.replace(/\"|\\\\/g,'\\\\$&')+'\"';}if(typeOf==='function'){return printFunction(val,printFunctionName);}if(typeOf==='symbol'){return printSymbol(val);}var toStringed=toString.call(val);if(toStringed==='[object WeakMap]'){return'WeakMap {}';}if(toStringed==='[object WeakSet]'){return'WeakSet {}';}if(toStringed==='[object Function]'||toStringed==='[object GeneratorFunction]'){return printFunction(val,printFunctionName);}if(toStringed==='[object Symbol]'){return printSymbol(val);}if(toStringed==='[object Date]'){return toISOString.call(val);}if(toStringed==='[object Error]'){return printError(val);}if(toStringed==='[object RegExp]'){if(escapeRegex){// https://github.com/benjamingr/RegExp.escape/blob/master/polyfill.js\nreturn regExpToString.call(val).replace(/[\\\\^$*+?.()|[\\]{}]/g,'\\\\$&');}return regExpToString.call(val);}if(toStringed==='[object Arguments]'&&val.length===0){return'Arguments []';}if(isToStringedArrayType(toStringed)&&val.length===0){return val.constructor.name+' []';}if(val instanceof Error){return printError(val);}return null;}function printList(list,indent,prevIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors){var body='';if(list.length){body+=edgeSpacing;var innerIndent=prevIndent+indent;for(var _i31=0;_i31<list.length;_i31++){body+=innerIndent+print(list[_i31],indent,innerIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors);if(_i31<list.length-1){body+=','+spacing;}}body+=(min?'':',')+edgeSpacing+prevIndent;}return'['+body+']';}function printArguments(val,indent,prevIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors){return(min?'':'Arguments ')+printList(val,indent,prevIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors);}function printArray(val,indent,prevIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors){return(min?'':val.constructor.name+' ')+printList(val,indent,prevIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors);}function printMap(val,indent,prevIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors){var result='Map {';var iterator=val.entries();var current=iterator.next();if(!current.done){result+=edgeSpacing;var innerIndent=prevIndent+indent;while(!current.done){var key=print(current.value[0],indent,innerIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors);var value=print(current.value[1],indent,innerIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors);result+=innerIndent+key+' => '+value;current=iterator.next();if(!current.done){result+=','+spacing;}}result+=(min?'':',')+edgeSpacing+prevIndent;}return result+'}';}function printObject(val,indent,prevIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors){var constructor=min?'':val.constructor?val.constructor.name+' ':'Object ';var result=constructor+'{';var keys=Object.keys(val).sort();var symbols=getSymbols(val);if(symbols.length){keys=keys.filter(function(key){return(// $FlowFixMe string literal `symbol`. This value is not a valid `typeof` return value\n!((typeof key==='undefined'?'undefined':_typeof(key))==='symbol'||toString.call(key)==='[object Symbol]'));}).concat(symbols);}if(keys.length){result+=edgeSpacing;var innerIndent=prevIndent+indent;for(var _i32=0;_i32<keys.length;_i32++){var key=keys[_i32];var _name5=print(key,indent,innerIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors);var value=print(val[key],indent,innerIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors);result+=innerIndent+_name5+': '+value;if(_i32<keys.length-1){result+=','+spacing;}}result+=(min?'':',')+edgeSpacing+prevIndent;}return result+'}';}function printSet(val,indent,prevIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors){var result='Set {';var iterator=val.entries();var current=iterator.next();if(!current.done){result+=edgeSpacing;var innerIndent=prevIndent+indent;while(!current.done){result+=innerIndent+print(current.value[1],indent,innerIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors);current=iterator.next();if(!current.done){result+=','+spacing;}}result+=(min?'':',')+edgeSpacing+prevIndent;}return result+'}';}function printComplexValue(val,indent,prevIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors){refs=refs.slice();if(refs.indexOf(val)>-1){return'[Circular]';}else{refs.push(val);}currentDepth++;var hitMaxDepth=currentDepth>maxDepth;if(callToJSON&&!hitMaxDepth&&val.toJSON&&typeof val.toJSON==='function'){return print(val.toJSON(),indent,prevIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors);}var toStringed=toString.call(val);if(toStringed==='[object Arguments]'){return hitMaxDepth?'[Arguments]':printArguments(val,indent,prevIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors);}else if(isToStringedArrayType(toStringed)){return hitMaxDepth?'[Array]':printArray(val,indent,prevIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors);}else if(toStringed==='[object Map]'){return hitMaxDepth?'[Map]':printMap(val,indent,prevIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors);}else if(toStringed==='[object Set]'){return hitMaxDepth?'[Set]':printSet(val,indent,prevIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors);}return hitMaxDepth?'[Object]':printObject(val,indent,prevIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors);}function printPlugin(val,indent,prevIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors){var plugin=void 0;for(var p=0;p<plugins.length;p++){if(plugins[p].test(val)){plugin=plugins[p];break;}}if(!plugin){return null;}function boundPrint(val){return print(val,indent,prevIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors);}function boundIndent(str){var indentation=prevIndent+indent;return indentation+str.replace(NEWLINE_REGEXP,'\\n'+indentation);}var opts={edgeSpacing:edgeSpacing,min:min,spacing:spacing};return plugin.print(val,boundPrint,boundIndent,opts,colors);}function print(val,indent,prevIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors){var pluginsResult=printPlugin(val,indent,prevIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors);if(typeof pluginsResult==='string'){return pluginsResult;}var basicResult=printBasicValue(val,printFunctionName,escapeRegex);if(basicResult!==null){return basicResult;}return printComplexValue(val,indent,prevIndent,spacing,edgeSpacing,refs,maxDepth,currentDepth,plugins,min,callToJSON,printFunctionName,escapeRegex,colors);}var DEFAULTS={callToJSON:true,edgeSpacing:'\\n',escapeRegex:false,highlight:false,indent:2,maxDepth:Infinity,min:false,plugins:[],printFunctionName:true,spacing:'\\n',theme:{comment:'gray',content:'reset',prop:'yellow',tag:'cyan',value:'green'}};function validateOptions(opts){Object.keys(opts).forEach(function(key){if(!DEFAULTS.hasOwnProperty(key)){throw new Error('pretty-format: Unknown option \"'+key+'\".');}});if(opts.min&&opts.indent!==undefined&&opts.indent!==0){throw new Error('pretty-format: Options \"min\" and \"indent\" cannot be used together.');}}function normalizeOptions$1(opts){var result={};Object.keys(DEFAULTS).forEach(function(key){return result[key]=opts.hasOwnProperty(key)?key==='theme'?normalizeTheme(opts.theme):opts[key]:DEFAULTS[key];});if(result.min){result.indent=0;}// $FlowFixMe the type cast below means YOU are responsible to verify the code above.\nreturn result;}function normalizeTheme(themeOption){if(!themeOption){throw new Error('pretty-format: Option \"theme\" must not be null.');}if((typeof themeOption==='undefined'?'undefined':_typeof(themeOption))!=='object'){throw new Error('pretty-format: Option \"theme\" must be of type \"object\" but instead received \"'+(typeof themeOption==='undefined'?'undefined':_typeof(themeOption))+'\".');}// Silently ignore any keys in `theme` that are not in defaults.\nvar themeRefined=themeOption;var themeDefaults=DEFAULTS.theme;return Object.keys(themeDefaults).reduce(function(theme,key){theme[key]=Object.prototype.hasOwnProperty.call(themeOption,key)?themeRefined[key]:themeDefaults[key];return theme;},{});}function createIndent(indent){return new Array(indent+1).join(' ');}function prettyFormat$1(val,initialOptions){var opts=void 0;if(!initialOptions){opts=DEFAULTS;}else{validateOptions(initialOptions);opts=normalizeOptions$1(initialOptions);}var colors={comment:{close:'',open:''},content:{close:'',open:''},prop:{close:'',open:''},tag:{close:'',open:''},value:{close:'',open:''}};Object.keys(opts.theme).forEach(function(key){if(opts.highlight){var color=colors[key]=style[opts.theme[key]];if(!color||typeof color.close!=='string'||typeof color.open!=='string'){throw new Error('pretty-format: Option \"theme\" has a key \"'+key+'\" whose value \"'+opts.theme[key]+'\" is undefined in ansi-styles.');}}});var indent=void 0;var refs=void 0;var prevIndent='';var currentDepth=0;var spacing=opts.min?' ':'\\n';var edgeSpacing=opts.min?'':'\\n';if(opts&&opts.plugins.length){indent=createIndent(opts.indent);refs=[];var pluginsResult=printPlugin(val,indent,prevIndent,spacing,edgeSpacing,refs,opts.maxDepth,currentDepth,opts.plugins,opts.min,opts.callToJSON,opts.printFunctionName,opts.escapeRegex,colors);if(typeof pluginsResult==='string'){return pluginsResult;}}var basicResult=printBasicValue(val,opts.printFunctionName,opts.escapeRegex);if(basicResult!==null){return basicResult;}if(!indent){indent=createIndent(opts.indent);}if(!refs){refs=[];}return printComplexValue(val,indent,prevIndent,spacing,edgeSpacing,refs,opts.maxDepth,currentDepth,opts.plugins,opts.min,opts.callToJSON,opts.printFunctionName,opts.escapeRegex,colors);}prettyFormat$1.plugins={AsymmetricMatcher:AsymmetricMatcher$1,ConvertAnsi:ConvertAnsi,HTMLElement:HTMLElement$1,Immutable:ImmutablePlugins,ReactElement:ReactElement$1,ReactTestComponent:ReactTestComponent};var index$30=prettyFormat$1;var chalk$1=index$24;var prettyFormat=index$30;var _require$plugins=index$30.plugins;var AsymmetricMatcher=_require$plugins.AsymmetricMatcher;var ReactElement=_require$plugins.ReactElement;var HTMLElement=_require$plugins.HTMLElement;var Immutable=_require$plugins.Immutable;var PLUGINS=[AsymmetricMatcher,ReactElement,HTMLElement].concat(Immutable);var EXPECTED_COLOR=chalk$1.green;var EXPECTED_BG=chalk$1.bgGreen;var RECEIVED_COLOR=chalk$1.red;var RECEIVED_BG=chalk$1.bgRed;var NUMBERS=['zero','one','two','three','four','five','six','seven','eight','nine','ten','eleven','twelve','thirteen'];// get the type of a value with handling the edge cases like `typeof []`\n// and `typeof null`\nvar getType$1=function getType$1(value){if(typeof value==='undefined'){return'undefined';}else if(value===null){return'null';}else if(Array.isArray(value)){return'array';}else if(typeof value==='boolean'){return'boolean';}else if(typeof value==='function'){return'function';}else if(typeof value==='number'){return'number';}else if(typeof value==='string'){return'string';}else if((typeof value==='undefined'?'undefined':_typeof(value))==='object'){if(value.constructor===RegExp){return'regexp';}else if(value.constructor===Map){return'map';}else if(value.constructor===Set){return'set';}return'object';// $FlowFixMe https://github.com/facebook/flow/issues/1015\n}else if((typeof value==='undefined'?'undefined':_typeof(value))==='symbol'){return'symbol';}throw new Error('value of unknown type: '+value);};var stringify=function stringify(object){var maxDepth=arguments.length>1&&arguments[1]!==undefined?arguments[1]:10;var MAX_LENGTH=10000;var result=void 0;try{result=prettyFormat(object,{maxDepth:maxDepth,min:true,plugins:PLUGINS});}catch(e){result=prettyFormat(object,{callToJSON:false,maxDepth:maxDepth,min:true,plugins:PLUGINS});}return result.length>=MAX_LENGTH&&maxDepth>1?stringify(object,Math.floor(maxDepth/2)):result;};var highlightTrailingWhitespace=function highlightTrailingWhitespace(text,bgColor){return text.replace(/\\s+$/gm,bgColor('$&'));};var printReceived=function printReceived(object){return highlightTrailingWhitespace(RECEIVED_COLOR(stringify(object)),RECEIVED_BG);};var printExpected=function printExpected(value){return highlightTrailingWhitespace(EXPECTED_COLOR(stringify(value)),EXPECTED_BG);};var printWithType=function printWithType(name,received,print){var type=getType$1(received);return name+':'+(type!=='null'&&type!=='undefined'?'\\n  '+type+': ':' ')+print(received);};var ensureNoExpected=function ensureNoExpected(expected,matcherName){matcherName||(matcherName='This');if(typeof expected!=='undefined'){throw new Error(matcherHint('[.not]'+matcherName,undefined,'')+'\\n\\n'+'Matcher does not accept any arguments.\\n'+printWithType('Got',expected,printExpected));}};var ensureActualIsNumber=function ensureActualIsNumber(actual,matcherName){matcherName||(matcherName='This matcher');if(typeof actual!=='number'){throw new Error(matcherHint('[.not]'+matcherName)+'\\n\\n'+'Received value must be a number.\\n'+printWithType('Received',actual,printReceived));}};var ensureExpectedIsNumber=function ensureExpectedIsNumber(expected,matcherName){matcherName||(matcherName='This matcher');if(typeof expected!=='number'){throw new Error(matcherHint('[.not]'+matcherName)+'\\n\\n'+'Expected value must be a number.\\n'+printWithType('Got',expected,printExpected));}};var ensureNumbers=function ensureNumbers(actual,expected,matcherName){ensureActualIsNumber(actual,matcherName);ensureExpectedIsNumber(expected,matcherName);};var pluralize=function pluralize(word,count){return(NUMBERS[count]||count)+' '+word+(count===1?'':'s');};var matcherHint=function matcherHint(matcherName){var received=arguments.length>1&&arguments[1]!==undefined?arguments[1]:'received';var expected=arguments.length>2&&arguments[2]!==undefined?arguments[2]:'expected';var options=arguments[3];var secondArgument=options&&options.secondArgument;var isDirectExpectCall=options&&options.isDirectExpectCall;return chalk$1.dim('expect'+(isDirectExpectCall?'':'('))+RECEIVED_COLOR(received)+chalk$1.dim((isDirectExpectCall?'':')')+matcherName+'(')+EXPECTED_COLOR(expected)+(secondArgument?', '+EXPECTED_COLOR(secondArgument):'')+chalk$1.dim(')');};var index$28={EXPECTED_BG:EXPECTED_BG,EXPECTED_COLOR:EXPECTED_COLOR,RECEIVED_BG:RECEIVED_BG,RECEIVED_COLOR:RECEIVED_COLOR,ensureActualIsNumber:ensureActualIsNumber,ensureExpectedIsNumber:ensureExpectedIsNumber,ensureNoExpected:ensureNoExpected,ensureNumbers:ensureNumbers,getType:getType$1,highlightTrailingWhitespace:highlightTrailingWhitespace,matcherHint:matcherHint,pluralize:pluralize,printExpected:printExpected,printReceived:printReceived,printWithType:printWithType,stringify:stringify};/* eslint-disable no-nested-ternary */var arr=[];var charCodeCache=[];var index$38=function index$38(a,b){if(a===b){return 0;}var swap=a;// Swapping the strings if `a` is longer than `b` so we know which one is the\n// shortest & which one is the longest\nif(a.length>b.length){a=b;b=swap;}var aLen=a.length;var bLen=b.length;if(aLen===0){return bLen;}if(bLen===0){return aLen;}// Performing suffix trimming:\n// We can linearly drop suffix common to both strings since they\n// don't increase distance at all\n// Note: `~-` is the bitwise way to perform a `- 1` operation\nwhile(aLen>0&&a.charCodeAt(~-aLen)===b.charCodeAt(~-bLen)){aLen--;bLen--;}if(aLen===0){return bLen;}// Performing prefix trimming\n// We can linearly drop prefix common to both strings since they\n// don't increase distance at all\nvar start=0;while(start<aLen&&a.charCodeAt(start)===b.charCodeAt(start)){start++;}aLen-=start;bLen-=start;if(aLen===0){return bLen;}var bCharCode;var ret;var tmp;var tmp2;var i=0;var j=0;while(i<aLen){charCodeCache[start+i]=a.charCodeAt(start+i);arr[i]=++i;}while(j<bLen){bCharCode=b.charCodeAt(start+j);tmp=j++;ret=j;for(i=0;i<aLen;i++){tmp2=bCharCode===charCodeCache[start+i]?tmp:tmp+1;tmp=arr[i];ret=arr[i]=tmp>ret?tmp2>ret?ret+1:tmp2:tmp2>tmp?tmp+1:tmp2;}}return ret;};var chalk$2=index$24;var BULLET=chalk$2.bold('\\u25CF');var DEPRECATION=BULLET+' Deprecation Warning';var ERROR$1=BULLET+' Validation Error';var WARNING=BULLET+' Validation Warning';var format$2=function format$2(value){return typeof value==='function'?value.toString():index$30(value,{min:true});};var ValidationError$1=function(_Error){_inherits(ValidationError$1,_Error);function ValidationError$1(name,message,comment){_classCallCheck(this,ValidationError$1);var _this4=_possibleConstructorReturn(this,(ValidationError$1.__proto__||Object.getPrototypeOf(ValidationError$1)).call(this));comment=comment?'\\n\\n'+comment:'\\n';_this4.name='';_this4.stack='';_this4.message=chalk$2.red(chalk$2.bold(name)+':\\n\\n'+message+comment);Error.captureStackTrace(_this4,function(){});return _this4;}return ValidationError$1;}(Error);var logValidationWarning=function logValidationWarning(name,message,comment){comment=comment?'\\n\\n'+comment:'\\n';console.warn(chalk$2.yellow(chalk$2.bold(name)+':\\n\\n'+message+comment));};var createDidYouMeanMessage=function createDidYouMeanMessage(unrecognized,allowedOptions){var leven=index$38;var suggestion=allowedOptions.find(function(option){var steps=leven(option,unrecognized);return steps<3;});return suggestion?'Did you mean '+chalk$2.bold(format$2(suggestion))+'?':'';};var utils$2={DEPRECATION:DEPRECATION,ERROR:ERROR$1,ValidationError:ValidationError$1,WARNING:WARNING,createDidYouMeanMessage:createDidYouMeanMessage,format:format$2,logValidationWarning:logValidationWarning};var chalk=index$24;/**\n                                 * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.\n                                 *\n                                 * This source code is licensed under the BSD-style license found in the\n                                 * LICENSE file in the root directory of this source tree. An additional grant\n                                 * of patent rights can be found in the PATENTS file in the same directory.\n                                 *\n                                 * \n                                 */var _require=index$28;var getType=_require.getType;var _require2=utils$2;var format$1=_require2.format;var ValidationError=_require2.ValidationError;var ERROR=_require2.ERROR;var errorMessage=function errorMessage(option,received,defaultValue,options){var message='  Option '+chalk.bold('\"'+option+'\"')+' must be of type:\\n    '+chalk.bold.green(getType(defaultValue))+'\\n  but instead received:\\n    '+chalk.bold.red(getType(received))+'\\n\\n  Example:\\n  {\\n    '+chalk.bold('\"'+option+'\"')+': '+chalk.bold(format$1(defaultValue))+'\\n  }';var comment=options.comment;var name=options.title&&options.title.error||ERROR;throw new ValidationError(name,message,comment);};var errors={ValidationError:ValidationError,errorMessage:errorMessage};var _require$2=utils$2;var logValidationWarning$1=_require$2.logValidationWarning;var DEPRECATION$2=_require$2.DEPRECATION;/**\n                                                                                                                   * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.\n                                                                                                                   *\n                                                                                                                   * This source code is licensed under the BSD-style license found in the\n                                                                                                                   * LICENSE file in the root directory of this source tree. An additional grant\n                                                                                                                   * of patent rights can be found in the PATENTS file in the same directory.\n                                                                                                                   *\n                                                                                                                   * \n                                                                                                                   */var deprecationMessage=function deprecationMessage(message,options){var comment=options.comment;var name=options.title&&options.title.deprecation||DEPRECATION$2;logValidationWarning$1(name,message,comment);};var deprecationWarning$1=function deprecationWarning$1(config,option,deprecatedOptions,options){if(option in deprecatedOptions){deprecationMessage(deprecatedOptions[option](config),options);return true;}return false;};var deprecated={deprecationWarning:deprecationWarning$1};var chalk$3=index$24;/**\n                                 * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.\n                                 *\n                                 * This source code is licensed under the BSD-style license found in the\n                                 * LICENSE file in the root directory of this source tree. An additional grant\n                                 * of patent rights can be found in the PATENTS file in the same directory.\n                                 *\n                                 * \n                                 */var _require$3=utils$2;var format$3=_require$3.format;var logValidationWarning$2=_require$3.logValidationWarning;var createDidYouMeanMessage$1=_require$3.createDidYouMeanMessage;var WARNING$2=_require$3.WARNING;var unknownOptionWarning$1=function unknownOptionWarning$1(config,exampleConfig,option,options){var didYouMean=createDidYouMeanMessage$1(option,Object.keys(exampleConfig));var message='  Unknown option '+chalk$3.bold('\"'+option+'\"')+' with value '+chalk$3.bold(format$3(config[option]))+' was found.'+(didYouMean&&' '+didYouMean)+'\\n  This is probably a typing mistake. Fixing it will remove this message.';var comment=options.comment;var name=options.title&&options.title.warning||WARNING$2;logValidationWarning$2(name,message,comment);};var warnings={unknownOptionWarning:unknownOptionWarning$1};var config$1={comment:'  A comment',condition:function condition(option,validOption){return true;},deprecate:function deprecate(config,option,deprecatedOptions,options){return false;},deprecatedConfig:{key:function key(config){}},error:function error(option,received,defaultValue,options){},exampleConfig:{key:'value',test:'case'},title:{deprecation:'Deprecation Warning',error:'Validation Error',warning:'Validation Warning'},unknown:function unknown(config,option,options){}};/**\n                                               * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.\n                                               *\n                                               * This source code is licensed under the BSD-style license found in the\n                                               * LICENSE file in the root directory of this source tree. An additional grant\n                                               * of patent rights can be found in the PATENTS file in the same directory.\n                                               *\n                                               * \n                                               */var exampleConfig$2=config$1;var toString$1=Object.prototype.toString;var validationCondition$1=function validationCondition$1(option,validOption){return option===null||option===undefined||toString$1.call(option)===toString$1.call(validOption);};var condition=validationCondition$1;var _require$1=deprecated;var deprecationWarning=_require$1.deprecationWarning;/**\n                                                                                 * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.\n                                                                                 *\n                                                                                 * This source code is licensed under the BSD-style license found in the\n                                                                                 * LICENSE file in the root directory of this source tree. An additional grant\n                                                                                 * of patent rights can be found in the PATENTS file in the same directory.\n                                                                                 *\n                                                                                 * \n                                                                                 */var _require2$1=warnings;var unknownOptionWarning=_require2$1.unknownOptionWarning;var _require3=errors;var errorMessage$1=_require3.errorMessage;var exampleConfig$1=exampleConfig$2;var validationCondition=condition;var _require4=utils$2;var ERROR$2=_require4.ERROR;var DEPRECATION$1=_require4.DEPRECATION;var WARNING$1=_require4.WARNING;var defaultConfig$1={comment:'',condition:validationCondition,deprecate:deprecationWarning,deprecatedConfig:{},error:errorMessage$1,exampleConfig:exampleConfig$1,title:{deprecation:DEPRECATION$1,error:ERROR$2,warning:WARNING$1},unknown:unknownOptionWarning};var defaultConfig=defaultConfig$1;/**\n                                                   * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.\n                                                   *\n                                                   * This source code is licensed under the BSD-style license found in the\n                                                   * LICENSE file in the root directory of this source tree. An additional grant\n                                                   * of patent rights can be found in the PATENTS file in the same directory.\n                                                   *\n                                                   * \n                                                   */var _validate=function _validate(config,options){var hasDeprecationWarnings=false;for(var key in config){if(options.deprecatedConfig&&key in options.deprecatedConfig&&typeof options.deprecate==='function'){var isDeprecatedKey=options.deprecate(config,key,options.deprecatedConfig,options);hasDeprecationWarnings=hasDeprecationWarnings||isDeprecatedKey;}else if(hasOwnProperty.call(options.exampleConfig,key)){if(typeof options.condition==='function'&&typeof options.error==='function'&&!options.condition(config[key],options.exampleConfig[key])){options.error(key,config[key],options.exampleConfig[key],options);}}else{options.unknown&&options.unknown(config,options.exampleConfig,key,options);}}return{hasDeprecationWarnings:hasDeprecationWarnings};};var validate$1=function validate$1(config,options){_validate(options,defaultConfig);// validate against jest-validate config\nvar defaultedOptions=Object.assign({},defaultConfig,options,{title:Object.assign({},defaultConfig.title,options.title)});var _validate2=_validate(config,defaultedOptions);var hasDeprecationWarnings=_validate2.hasDeprecationWarnings;return{hasDeprecationWarnings:hasDeprecationWarnings,isValid:true};};var validate_1=validate$1;var index$22={ValidationError:errors.ValidationError,createDidYouMeanMessage:utils$2.createDidYouMeanMessage,format:utils$2.format,logValidationWarning:utils$2.logValidationWarning,validate:validate_1};var deprecated$2={useFlowParser:function useFlowParser(config){return'  The '+'\"useFlowParser\"'+' option is deprecated. Use '+'\"parser\"'+' instead.\\n\\n  Prettier now treats your configuration as:\\n  {\\n    '+'\"parser\"'+': '+(config.useFlowParser?'\"flow\"':'\"babylon\"')+'\\n  }';}};var deprecated_1=deprecated$2;var validate=index$22.validate;var deprecatedConfig=deprecated_1;var defaultsTrailingComma={array:false,object:false,import:false,export:false,arguments:false};var trailingCommaPresets={none:Object.assign({},defaultsTrailingComma),es5:Object.assign({},defaultsTrailingComma,{array:true,object:true,import:true,export:true}),all:Object.assign({},defaultsTrailingComma,{array:true,object:true,import:true,export:true,arguments:true})};var defaults={cursorOffset:-1,rangeStart:0,rangeEnd:Infinity,useTabs:false,tabWidth:2,printWidth:80,singleQuote:false,jsxSingleQuote:false,trailingComma:Object.assign({},defaultsTrailingComma),bracketSpacing:false,bracesSpacing:true,breakProperty:false,arrowParens:false,arrayExpand:false,flattenTernaries:false,breakBeforeElse:false,jsxBracketSameLine:false,alignObjectProperties:false,noSpaceEmptyFn:false,parser:\"babylon\",semi:true,spaceBeforeFunctionParen:false,__log:false};var exampleConfig=Object.assign({},defaults,{filepath:\"path/to/Filename\",printWidth:80,originalText:\"text\"});// Copy options and fill in default values.\nfunction normalize(options){var normalized=Object.assign({},options||{});var filepath=normalized.filepath;if(/\\.(css|less|scss)$/.test(filepath)){normalized.parser=\"postcss\";}else if(/\\.html$/.test(filepath)){normalized.parser=\"parse5\";}else if(/\\.(ts|tsx)$/.test(filepath)){normalized.parser=\"typescript\";}else if(/\\.(graphql|gql)$/.test(filepath)){normalized.parser=\"graphql\";}else if(/\\.json$/.test(filepath)){normalized.parser=\"json\";}if(normalized.parser===\"json\"){normalized.trailingComma=\"none\";}normalized.trailingComma=normalizeTrailingComma(normalized.trailingComma);var parserBackup=normalized.parser;if(typeof normalized.parser===\"function\"){// Delete the function from the object to pass validation.\ndelete normalized.parser;}validate(normalized,{exampleConfig:exampleConfig,deprecatedConfig:deprecatedConfig});// Restore the option back to a function;\nnormalized.parser=parserBackup;// For backward compatibility. Deprecated in 0.0.10\nif(\"useFlowParser\"in normalized){normalized.parser=normalized.useFlowParser?\"flow\":\"babylon\";delete normalized.useFlowParser;}Object.keys(defaults).forEach(function(k){if(normalized[k]==null){normalized[k]=defaults[k];}});return normalized;}function normalizeTrailingComma(value){var trailingComma=void 0;if(\"boolean\"===typeof value){// Support a deprecated boolean type for the trailing comma config\n// for a few versions. This code can be removed later.\ntrailingComma=Object.assign({},trailingCommaPresets[value?\"es5\":\"none\"]);console.warn(\"Warning: `trailingComma` without any argument is deprecated. \"+'Specify \"none\", \"es5\", or \"all\".');}else if(\"object\"===(typeof value==='undefined'?'undefined':_typeof(value))){trailingComma={};Object.keys(defaultsTrailingComma).forEach(function(k){trailingComma[k]=null==value[k]?defaultsTrailingComma[k]:value[k];});}else if(\"string\"===typeof value){trailingComma=trailingCommaPresets[value];if(trailingComma){trailingComma=Object.assign({},trailingComma);}else{trailingComma=Object.assign({},trailingCommaPresets.none);value.split(\",\").forEach(function(k){if(k in defaultsTrailingComma){trailingComma[k]=true;}});}}else{trailingComma=Object.assign({},defaultsTrailingComma);}return trailingComma;}var options={normalize:normalize};function flattenDoc(doc){if(doc.type===\"concat\"){var res=[];for(var _i33=0;_i33<doc.parts.length;++_i33){var doc2=doc.parts[_i33];if(typeof doc2!==\"string\"&&doc2.type===\"concat\"){[].push.apply(res,flattenDoc(doc2).parts);}else{var flattened=flattenDoc(doc2);if(flattened!==\"\"){res.push(flattened);}}}return Object.assign({},doc,{parts:res});}else if(doc.type===\"if-break\"){return Object.assign({},doc,{breakContents:doc.breakContents!=null?flattenDoc(doc.breakContents):null,flatContents:doc.flatContents!=null?flattenDoc(doc.flatContents):null});}else if(doc.type===\"group\"){return Object.assign({},doc,{contents:flattenDoc(doc.contents),expandedStates:doc.expandedStates?doc.expandedStates.map(flattenDoc):doc.expandedStates});}else if(doc.contents){return Object.assign({},doc,{contents:flattenDoc(doc.contents)});}return doc;}function printDoc(doc){if(typeof doc===\"string\"){return JSON.stringify(doc);}if(doc.type===\"line\"){if(doc.literalline){return\"literalline\";}if(doc.hard){return\"hardline\";}if(doc.soft){return\"softline\";}return\"line\";}if(doc.type===\"break-parent\"){return\"breakParent\";}if(doc.type===\"concat\"){return\"[\"+doc.parts.map(printDoc).join(\", \")+\"]\";}if(doc.type===\"indent\"){return\"indent(\"+printDoc(doc.contents)+\")\";}if(doc.type===\"align\"){return\"align(\"+doc.n+\", \"+printDoc(doc.contents)+\")\";}if(doc.type===\"if-break\"){return\"ifBreak(\"+printDoc(doc.breakContents)+(doc.flatContents?\", \"+printDoc(doc.flatContents):\"\")+\")\";}if(doc.type===\"group\"){if(doc.expandedStates){return\"conditionalGroup(\"+\"[\"+doc.expandedStates.map(printDoc).join(\",\")+\"])\";}return(doc.break?\"wrappedGroup\":\"group\")+\"(\"+printDoc(doc.contents)+\")\";}if(doc.type===\"fill\"){return\"fill\"+\"(\"+doc.parts.map(printDoc).join(\", \")+\")\";}if(doc.type===\"line-suffix\"){return\"lineSuffix(\"+printDoc(doc.contents)+\")\";}if(doc.type===\"line-suffix-boundary\"){return\"lineSuffixBoundary\";}throw new Error(\"Unknown doc type \"+doc.type);}var docDebug={printDocToDebug:function printDocToDebug(doc){return printDoc(flattenDoc(doc));}};var os$1=os;function homedir(){var env=process.env;var home=env.HOME;var user=env.LOGNAME||env.USER||env.LNAME||env.USERNAME;if(process.platform==='win32'){return env.USERPROFILE||env.HOMEDRIVE+env.HOMEPATH||home||null;}if(process.platform==='darwin'){return home||(user?'/Users/'+user:null);}if(process.platform==='linux'){return home||(process.getuid()===0?'/root':user?'/home/'+user:null);}return home||null;}var index$42=typeof os$1.homedir==='function'?os$1.homedir:homedir;var index$44=function index$44(args,opts){if(!opts)opts={};var flags={bools:{},strings:{},unknownFn:null};if(typeof opts['unknown']==='function'){flags.unknownFn=opts['unknown'];}if(typeof opts['boolean']==='boolean'&&opts['boolean']){flags.allBools=true;}else{[].concat(opts['boolean']).filter(Boolean).forEach(function(key){flags.bools[key]=true;});}var aliases={};Object.keys(opts.alias||{}).forEach(function(key){aliases[key]=[].concat(opts.alias[key]);aliases[key].forEach(function(x){aliases[x]=[key].concat(aliases[key].filter(function(y){return x!==y;}));});});[].concat(opts.string).filter(Boolean).forEach(function(key){flags.strings[key]=true;if(aliases[key]){flags.strings[aliases[key]]=true;}});var defaults=opts['default']||{};var argv={_:[]};Object.keys(flags.bools).forEach(function(key){setArg(key,defaults[key]===undefined?false:defaults[key]);});var notFlags=[];if(args.indexOf('--')!==-1){notFlags=args.slice(args.indexOf('--')+1);args=args.slice(0,args.indexOf('--'));}function argDefined(key,arg){return flags.allBools&&/^--[^=]+$/.test(arg)||flags.strings[key]||flags.bools[key]||aliases[key];}function setArg(key,val,arg){if(arg&&flags.unknownFn&&!argDefined(key,arg)){if(flags.unknownFn(arg)===false)return;}var value=!flags.strings[key]&&isNumber(val)?Number(val):val;setKey(argv,key.split('.'),value);(aliases[key]||[]).forEach(function(x){setKey(argv,x.split('.'),value);});}function setKey(obj,keys,value){var o=obj;keys.slice(0,-1).forEach(function(key){if(o[key]===undefined)o[key]={};o=o[key];});var key=keys[keys.length-1];if(o[key]===undefined||flags.bools[key]||typeof o[key]==='boolean'){o[key]=value;}else if(Array.isArray(o[key])){o[key].push(value);}else{o[key]=[o[key],value];}}function aliasIsBoolean(key){return aliases[key].some(function(x){return flags.bools[x];});}for(var i=0;i<args.length;i++){var arg=args[i];if(/^--.+=/.test(arg)){// Using [\\s\\S] instead of . because js doesn't support the\n// 'dotall' regex modifier. See:\n// http://stackoverflow.com/a/1068308/13216\nvar m=arg.match(/^--([^=]+)=([\\s\\S]*)$/);var key=m[1];var value=m[2];if(flags.bools[key]){value=value!=='false';}setArg(key,value,arg);}else if(/^--no-.+/.test(arg)){var key=arg.match(/^--no-(.+)/)[1];setArg(key,false,arg);}else if(/^--.+/.test(arg)){var key=arg.match(/^--(.+)/)[1];var next=args[i+1];if(next!==undefined&&!/^-/.test(next)&&!flags.bools[key]&&!flags.allBools&&(aliases[key]?!aliasIsBoolean(key):true)){setArg(key,next,arg);i++;}else if(/^(true|false)$/.test(next)){setArg(key,next==='true',arg);i++;}else{setArg(key,flags.strings[key]?'':true,arg);}}else if(/^-[^-]+/.test(arg)){var letters=arg.slice(1,-1).split('');var broken=false;for(var j=0;j<letters.length;j++){var next=arg.slice(j+2);if(next==='-'){setArg(letters[j],next,arg);continue;}if(/[A-Za-z]/.test(letters[j])&&/=/.test(next)){setArg(letters[j],next.split('=')[1],arg);broken=true;break;}if(/[A-Za-z]/.test(letters[j])&&/-?\\d+(\\.\\d*)?(e-?\\d+)?$/.test(next)){setArg(letters[j],next,arg);broken=true;break;}if(letters[j+1]&&letters[j+1].match(/\\W/)){setArg(letters[j],arg.slice(j+2),arg);broken=true;break;}else{setArg(letters[j],flags.strings[letters[j]]?'':true,arg);}}var key=arg.slice(-1)[0];if(!broken&&key!=='-'){if(args[i+1]&&!/^(-|--)[^-]/.test(args[i+1])&&!flags.bools[key]&&(aliases[key]?!aliasIsBoolean(key):true)){setArg(key,args[i+1],arg);i++;}else if(args[i+1]&&/true|false/.test(args[i+1])){setArg(key,args[i+1]==='true',arg);i++;}else{setArg(key,flags.strings[key]?'':true,arg);}}}else{if(!flags.unknownFn||flags.unknownFn(arg)!==false){argv._.push(flags.strings['_']||!isNumber(arg)?arg:Number(arg));}if(opts.stopEarly){argv._.push.apply(argv._,args.slice(i+1));break;}}}Object.keys(defaults).forEach(function(key){if(!hasKey(argv,key.split('.'))){setKey(argv,key.split('.'),defaults[key]);(aliases[key]||[]).forEach(function(x){setKey(argv,x.split('.'),defaults[key]);});}});if(opts['--']){argv['--']=new Array();notFlags.forEach(function(key){argv['--'].push(key);});}else{notFlags.forEach(function(key){argv._.push(key);});}return argv;};function hasKey(obj,keys){var o=obj;keys.slice(0,-1).forEach(function(key){o=o[key]||{};});var key=keys[keys.length-1];return key in o;}function isNumber(x){if(typeof x==='number')return true;if(/^0x[0-9a-f]+$/i.test(x))return true;return /^[-+]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(e[-+]?\\d+)?$/.test(x);}/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*//* eslint-disable no-unused-vars */var getOwnPropertySymbols=Object.getOwnPropertySymbols;var hasOwnProperty$1=Object.prototype.hasOwnProperty;var propIsEnumerable=Object.prototype.propertyIsEnumerable;function toObject(val){if(val===null||val===undefined){throw new TypeError('Object.assign cannot be called with null or undefined');}return Object(val);}function shouldUseNative(){try{if(!Object.assign){return false;}// Detect buggy property enumeration order in older V8 versions.\n// https://bugs.chromium.org/p/v8/issues/detail?id=4118\nvar test1=new String('abc');// eslint-disable-line no-new-wrappers\ntest1[5]='de';if(Object.getOwnPropertyNames(test1)[0]==='5'){return false;}// https://bugs.chromium.org/p/v8/issues/detail?id=3056\nvar test2={};for(var i=0;i<10;i++){test2['_'+String.fromCharCode(i)]=i;}var order2=Object.getOwnPropertyNames(test2).map(function(n){return test2[n];});if(order2.join('')!=='0123456789'){return false;}// https://bugs.chromium.org/p/v8/issues/detail?id=3056\nvar test3={};'abcdefghijklmnopqrst'.split('').forEach(function(letter){test3[letter]=letter;});if(Object.keys(Object.assign({},test3)).join('')!=='abcdefghijklmnopqrst'){return false;}return true;}catch(err){// We don't expect any of the above to throw, but better to be safe.\nreturn false;}}var index$46=shouldUseNative()?Object.assign:function(target,source){var from;var to=toObject(target);var symbols;for(var s=1;s<arguments.length;s++){from=Object(arguments[s]);for(var key in from){if(hasOwnProperty$1.call(from,key)){to[key]=from[key];}}if(getOwnPropertySymbols){symbols=getOwnPropertySymbols(from);for(var i=0;i<symbols.length;i++){if(propIsEnumerable.call(from,symbols[i])){to[symbols[i]]=from[symbols[i]];}}}}return to;};var fs$1=fs;/**\n * async\n */function isDirectory$1(filepath,cb){if(typeof cb!=='function'){throw new Error('expected a callback function');}if(typeof filepath!=='string'){cb(new Error('expected filepath to be a string'));return;}fs$1.stat(filepath,function(err,stats){if(err){if(err.code==='ENOENT'){cb(null,false);return;}cb(err);return;}cb(null,stats.isDirectory());});}/**\n * sync\n */isDirectory$1.sync=function isDirectorySync(filepath){if(typeof filepath!=='string'){throw new Error('expected filepath to be a string');}try{var stat=fs$1.statSync(filepath);return stat.isDirectory();}catch(err){if(err.code==='ENOENT'){return false;}else{throw err;}}return false;};/**\n * Expose `isDirectory`\n */var index$48=isDirectory$1;var fs$2=fs;var readFile$1=function readFile$1(filepath,options){options=options||{};options.throwNotFound=options.throwNotFound||false;return new Promise(function(resolve,reject){fs$2.readFile(filepath,'utf8',function(err,content){if(err&&err.code==='ENOENT'&&!options.throwNotFound){return resolve(null);}if(err)return reject(err);resolve(content);});});};var index$54=function isArrayish(obj){if(!obj){return false;}return obj instanceof Array||Array.isArray(obj)||obj.length>=0&&obj.splice instanceof Function;};var util$10=util;var isArrayish=index$54;var errorEx$1=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;delete this.message;Object.defineProperty(this,'message',{configurable:true,enumerable:false,get:function get(){var newMessage=message.split(/\\r?\\n/g);for(var key in properties){if(properties.hasOwnProperty(key)&&'message'in properties[key]){newMessage=properties[key].message(this[key],newMessage)||newMessage;if(!isArrayish(newMessage)){newMessage=[newMessage];}}}return newMessage.join('\\n');},set:function set(v){message=v;}});var stackDescriptor=Object.getOwnPropertyDescriptor(this,'stack');var stackGetter=stackDescriptor.get;stackDescriptor.get=function(){var stack=stackGetter.call(this).split(/\\r?\\n+/g);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);};util$10.inherits(errorExError,Error);return errorExError;};errorEx$1.append=function(str,def){return{message:function message(v,_message){v=v||def;if(v){_message[0]+=' '+str.replace('%s',v.toString());}return _message;}};};errorEx$1.line=function(str,def){return{line:function line(v){v=v||def;if(v){return str.replace('%s',v.toString());}return null;}};};var index$52=errorEx$1;var unicode=createCommonjsModule(function(module){// This is autogenerated with esprima tools, see:\n// https://github.com/ariya/esprima/blob/master/esprima.js\n//\n// PS: oh God, I hate Unicode\n// ECMAScript 5.1/Unicode v6.3.0 NonAsciiIdentifierStart:\nvar Uni=module.exports;module.exports.isWhiteSpace=function isWhiteSpace(x){// section 7.2, table 2\nreturn x===' '||x==='\\xA0'||x==='\\uFEFF'// <-- this is not a Unicode WS, only a JS one\n||x>='\\t'&&x<='\\r'// 9 A B C D\n// + whitespace characters from unicode, category Zs\n||x==='\\u1680'||x==='\\u180E'||x>='\\u2000'&&x<='\\u200A'// 0 1 2 3 4 5 6 7 8 9 A\n||x==='\\u2028'||x==='\\u2029'||x==='\\u202F'||x==='\\u205F'||x==='\\u3000';};module.exports.isWhiteSpaceJSON=function isWhiteSpaceJSON(x){return x===' '||x==='\\t'||x==='\\n'||x==='\\r';};module.exports.isLineTerminator=function isLineTerminator(x){// ok, here is the part when JSON is wrong\n// section 7.3, table 3\nreturn x==='\\n'||x==='\\r'||x==='\\u2028'||x==='\\u2029';};module.exports.isLineTerminatorJSON=function isLineTerminatorJSON(x){return x==='\\n'||x==='\\r';};module.exports.isIdentifierStart=function isIdentifierStart(x){return x==='$'||x==='_'||x>='A'&&x<='Z'||x>='a'&&x<='z'||x>='\\x80'&&Uni.NonAsciiIdentifierStart.test(x);};module.exports.isIdentifierPart=function isIdentifierPart(x){return x==='$'||x==='_'||x>='A'&&x<='Z'||x>='a'&&x<='z'||x>='0'&&x<='9'// <-- addition to Start\n||x>='\\x80'&&Uni.NonAsciiIdentifierPart.test(x);};module.exports.NonAsciiIdentifierStart=/[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F0\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/;// ECMAScript 5.1/Unicode v6.3.0 NonAsciiIdentifierPart:\nmodule.exports.NonAsciiIdentifierPart=/[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0\\u08A2-\\u08AC\\u08E4-\\u08FE\\u0900-\\u0963\\u0966-\\u096F\\u0971-\\u0977\\u0979-\\u097F\\u0981-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C01-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C82\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D02\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F0\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1D00-\\u1DE6\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA697\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A\\uAA7B\\uAA80-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE26\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/;});var parse_1=createCommonjsModule(function(module){/*\n * Author: Alex Kocharin <alex@kocharin.ru>\n * GIT: https://github.com/rlidwka/jju\n * License: WTFPL, grab your copy here: http://www.wtfpl.net/txt/copying/\n */// RTFM: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf\nvar Uni=unicode;function isHexDigit(x){return x>='0'&&x<='9'||x>='A'&&x<='F'||x>='a'&&x<='f';}function isOctDigit(x){return x>='0'&&x<='7';}function isDecDigit(x){return x>='0'&&x<='9';}var unescapeMap={'\\'':'\\'','\"':'\"','\\\\':'\\\\','b':'\\b','f':'\\f','n':'\\n','r':'\\r','t':'\\t','v':'\\v','/':'/'};function formatError(input,msg,position,lineno,column,json5){var result=msg+' at '+(lineno+1)+':'+(column+1),tmppos=position-column-1,srcline='',underline='';var isLineTerminator=json5?Uni.isLineTerminator:Uni.isLineTerminatorJSON;// output no more than 70 characters before the wrong ones\nif(tmppos<position-70){tmppos=position-70;}while(1){var chr=input[++tmppos];if(isLineTerminator(chr)||tmppos===input.length){if(position>=tmppos){// ending line error, so show it after the last char\nunderline+='^';}break;}srcline+=chr;if(position===tmppos){underline+='^';}else if(position>tmppos){underline+=input[tmppos]==='\\t'?'\\t':' ';}// output no more than 78 characters on the string\nif(srcline.length>78)break;}return result+'\\n'+srcline+'\\n'+underline;}function parse(input,options){// parse as a standard JSON mode\nvar json5=!(options.mode==='json'||options.legacy);var isLineTerminator=json5?Uni.isLineTerminator:Uni.isLineTerminatorJSON;var isWhiteSpace=json5?Uni.isWhiteSpace:Uni.isWhiteSpaceJSON;var length=input.length,lineno=0,linestart=0,position=0,stack=[];var tokenStart=function tokenStart(){};var tokenEnd=function tokenEnd(v){return v;};/* tokenize({\n       raw: '...',\n       type: 'whitespace'|'comment'|'key'|'literal'|'separator'|'newline',\n       value: 'number'|'string'|'whatever',\n       path: [...],\n     })\n  */if(options._tokenize){(function(){var start=null;tokenStart=function tokenStart(){if(start!==null)throw Error('internal error, token overlap');start=position;};tokenEnd=function tokenEnd(v,type){if(start!=position){var hash={raw:input.substr(start,position-start),type:type,stack:stack.slice(0)};if(v!==undefined)hash.value=v;options._tokenize.call(null,hash);}start=null;return v;};})();}function fail(msg){var column=position-linestart;if(!msg){if(position<length){var token='\\''+JSON.stringify(input[position]).replace(/^\"|\"$/g,'').replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"')+'\\'';if(!msg)msg='Unexpected token '+token;}else{if(!msg)msg='Unexpected end of input';}}var error=SyntaxError(formatError(input,msg,position,lineno,column,json5));error.row=lineno+1;error.column=column+1;throw error;}function newline(chr){// account for <cr><lf>\nif(chr==='\\r'&&input[position]==='\\n')position++;linestart=position;lineno++;}function parseGeneric(){var result;while(position<length){tokenStart();var chr=input[position++];if(chr==='\"'||chr==='\\''&&json5){return tokenEnd(parseString(chr),'literal');}else if(chr==='{'){tokenEnd(undefined,'separator');return parseObject();}else if(chr==='['){tokenEnd(undefined,'separator');return parseArray();}else if(chr==='-'||chr==='.'||isDecDigit(chr//           + number       Infinity          NaN\n)||json5&&(chr==='+'||chr==='I'||chr==='N')){return tokenEnd(parseNumber(),'literal');}else if(chr==='n'){parseKeyword('null');return tokenEnd(null,'literal');}else if(chr==='t'){parseKeyword('true');return tokenEnd(true,'literal');}else if(chr==='f'){parseKeyword('false');return tokenEnd(false,'literal');}else{position--;return tokenEnd(undefined);}}}function parseKey(){var result;while(position<length){tokenStart();var chr=input[position++];if(chr==='\"'||chr==='\\''&&json5){return tokenEnd(parseString(chr),'key');}else if(chr==='{'){tokenEnd(undefined,'separator');return parseObject();}else if(chr==='['){tokenEnd(undefined,'separator');return parseArray();}else if(chr==='.'||isDecDigit(chr)){return tokenEnd(parseNumber(true),'key');}else if(json5&&Uni.isIdentifierStart(chr)||chr==='\\\\'&&input[position]==='u'){// unicode char or a unicode sequence\nvar rollback=position-1;var result=parseIdentifier();if(result===undefined){position=rollback;return tokenEnd(undefined);}else{return tokenEnd(result,'key');}}else{position--;return tokenEnd(undefined);}}}function skipWhiteSpace(){tokenStart();while(position<length){var chr=input[position++];if(isLineTerminator(chr)){position--;tokenEnd(undefined,'whitespace');tokenStart();position++;newline(chr);tokenEnd(undefined,'newline');tokenStart();}else if(isWhiteSpace(chr)){// nothing\n}else if(chr==='/'&&json5&&(input[position]==='/'||input[position]==='*')){position--;tokenEnd(undefined,'whitespace');tokenStart();position++;skipComment(input[position++]==='*');tokenEnd(undefined,'comment');tokenStart();}else{position--;break;}}return tokenEnd(undefined,'whitespace');}function skipComment(multi){while(position<length){var chr=input[position++];if(isLineTerminator(chr)){// LineTerminator is an end of singleline comment\nif(!multi){// let parent function deal with newline\nposition--;return;}newline(chr);}else if(chr==='*'&&multi){// end of multiline comment\nif(input[position]==='/'){position++;return;}}else{// nothing\n}}if(multi){fail('Unclosed multiline comment');}}function parseKeyword(keyword){// keyword[0] is not checked because it should've checked earlier\nvar _pos=position;var len=keyword.length;for(var i=1;i<len;i++){if(position>=length||keyword[i]!=input[position]){position=_pos-1;fail();}position++;}}function parseObject(){var result=options.null_prototype?Object.create(null):{},empty_object={},is_non_empty=false;while(position<length){skipWhiteSpace();var item1=parseKey();skipWhiteSpace();tokenStart();var chr=input[position++];tokenEnd(undefined,'separator');if(chr==='}'&&item1===undefined){if(!json5&&is_non_empty){position--;fail('Trailing comma in object');}return result;}else if(chr===':'&&item1!==undefined){skipWhiteSpace();stack.push(item1);var item2=parseGeneric();stack.pop();if(item2===undefined)fail('No value found for key '+item1);if(typeof item1!=='string'){if(!json5||typeof item1!=='number'){fail('Wrong key type: '+item1);}}if((item1 in empty_object||empty_object[item1]!=null)&&options.reserved_keys!=='replace'){if(options.reserved_keys==='throw'){fail('Reserved key: '+item1);}else{// silently ignore it\n}}else{if(typeof options.reviver==='function'){item2=options.reviver.call(null,item1,item2);}if(item2!==undefined){is_non_empty=true;Object.defineProperty(result,item1,{value:item2,enumerable:true,configurable:true,writable:true});}}skipWhiteSpace();tokenStart();var chr=input[position++];tokenEnd(undefined,'separator');if(chr===','){continue;}else if(chr==='}'){return result;}else{fail();}}else{position--;fail();}}fail();}function parseArray(){var result=[];while(position<length){skipWhiteSpace();stack.push(result.length);var item=parseGeneric();stack.pop();skipWhiteSpace();tokenStart();var chr=input[position++];tokenEnd(undefined,'separator');if(item!==undefined){if(typeof options.reviver==='function'){item=options.reviver.call(null,String(result.length),item);}if(item===undefined){result.length++;item=true;// hack for check below, not included into result\n}else{result.push(item);}}if(chr===','){if(item===undefined){fail('Elisions are not supported');}}else if(chr===']'){if(!json5&&item===undefined&&result.length){position--;fail('Trailing comma in array');}return result;}else{position--;fail();}}}function parseNumber(){// rewind because we don't know first char\nposition--;var start=position,chr=input[position++],t;var to_num=function to_num(is_octal){var str=input.substr(start,position-start);if(is_octal){var result=parseInt(str.replace(/^0o?/,''),8);}else{var result=Number(str);}if(Number.isNaN(result)){position--;fail('Bad numeric literal - \"'+input.substr(start,position-start+1)+'\"');}else if(!json5&&!str.match(/^-?(0|[1-9][0-9]*)(\\.[0-9]+)?(e[+-]?[0-9]+)?$/i)){// additional restrictions imposed by json\nposition--;fail('Non-json numeric literal - \"'+input.substr(start,position-start+1)+'\"');}else{return result;}};// ex: -5982475.249875e+29384\n//     ^ skipping this\nif(chr==='-'||chr==='+'&&json5)chr=input[position++];if(chr==='N'&&json5){parseKeyword('NaN');return NaN;}if(chr==='I'&&json5){parseKeyword('Infinity');// returning +inf or -inf\nreturn to_num();}if(chr>='1'&&chr<='9'){// ex: -5982475.249875e+29384\n//        ^^^ skipping these\nwhile(position<length&&isDecDigit(input[position])){position++;}chr=input[position++];}// special case for leading zero: 0.123456\nif(chr==='0'){chr=input[position++];//             new syntax, \"0o777\"           old syntax, \"0777\"\nvar is_octal=chr==='o'||chr==='O'||isOctDigit(chr);var is_hex=chr==='x'||chr==='X';if(json5&&(is_octal||is_hex)){while(position<length&&(is_hex?isHexDigit:isOctDigit)(input[position])){position++;}var sign=1;if(input[start]==='-'){sign=-1;start++;}else if(input[start]==='+'){start++;}return sign*to_num(is_octal);}}if(chr==='.'){// ex: -5982475.249875e+29384\n//                ^^^ skipping these\nwhile(position<length&&isDecDigit(input[position])){position++;}chr=input[position++];}if(chr==='e'||chr==='E'){chr=input[position++];if(chr==='-'||chr==='+')position++;// ex: -5982475.249875e+29384\n//                       ^^^ skipping these\nwhile(position<length&&isDecDigit(input[position])){position++;}chr=input[position++];}// we have char in the buffer, so count for it\nposition--;return to_num();}function parseIdentifier(){// rewind because we don't know first char\nposition--;var result='';while(position<length){var chr=input[position++];if(chr==='\\\\'&&input[position]==='u'&&isHexDigit(input[position+1])&&isHexDigit(input[position+2])&&isHexDigit(input[position+3])&&isHexDigit(input[position+4])){// UnicodeEscapeSequence\nchr=String.fromCharCode(parseInt(input.substr(position+1,4),16));position+=5;}if(result.length){// identifier started\nif(Uni.isIdentifierPart(chr)){result+=chr;}else{position--;return result;}}else{if(Uni.isIdentifierStart(chr)){result+=chr;}else{return undefined;}}}fail();}function parseString(endChar){// 7.8.4 of ES262 spec\nvar result='';while(position<length){var chr=input[position++];if(chr===endChar){return result;}else if(chr==='\\\\'){if(position>=length)fail();chr=input[position++];if(unescapeMap[chr]&&(json5||chr!='v'&&chr!=\"'\")){result+=unescapeMap[chr];}else if(json5&&isLineTerminator(chr)){// line continuation\nnewline(chr);}else if(chr==='u'||chr==='x'&&json5){// unicode/character escape sequence\nvar off=chr==='u'?4:2;// validation for \\uXXXX\nfor(var i=0;i<off;i++){if(position>=length)fail();if(!isHexDigit(input[position]))fail('Bad escape sequence');position++;}result+=String.fromCharCode(parseInt(input.substr(position-off,off),16));}else if(json5&&isOctDigit(chr)){if(chr<'4'&&isOctDigit(input[position])&&isOctDigit(input[position+1])){// three-digit octal\nvar digits=3;}else if(isOctDigit(input[position])){// two-digit octal\nvar digits=2;}else{var digits=1;}position+=digits-1;result+=String.fromCharCode(parseInt(input.substr(position-digits,digits),8));/*if (!isOctDigit(input[position])) {\n            // \\0 is allowed still\n            result += '\\0'\n          } else {\n            fail('Octal literals are not supported')\n          }*/}else if(json5){// \\X -> x\nresult+=chr;}else{position--;fail();}}else if(isLineTerminator(chr)){fail();}else{if(!json5&&chr.charCodeAt(0)<32){position--;fail('Unexpected control character');}// SourceCharacter but not one of \" or \\ or LineTerminator\nresult+=chr;}}fail();}skipWhiteSpace();var return_value=parseGeneric();if(return_value!==undefined||position<length){skipWhiteSpace();if(position>=length){if(typeof options.reviver==='function'){return_value=options.reviver.call(null,'',return_value);}return return_value;}else{fail();}}else{if(position){fail('No data, only a whitespace');}else{fail('No data, empty input');}}}/*\n * parse(text, options)\n * or\n * parse(text, reviver)\n *\n * where:\n * text - string\n * options - object\n * reviver - function\n */module.exports.parse=function parseJSON(input,options){// support legacy functions\nif(typeof options==='function'){options={reviver:options};}if(input===undefined){// parse(stringify(x)) should be equal x\n// with JSON functions it is not 'cause of undefined\n// so we're fixing it\nreturn undefined;}// JSON.parse compat\nif(typeof input!=='string')input=String(input);if(options==null)options={};if(options.reserved_keys==null)options.reserved_keys='ignore';if(options.reserved_keys==='throw'||options.reserved_keys==='ignore'){if(options.null_prototype==null){options.null_prototype=true;}}try{return parse(input,options);}catch(err){// jju is a recursive parser, so JSON.parse(\"{{{{{{{\") could blow up the stack\n//\n// this catch is used to skip all those internal calls\nif(err instanceof SyntaxError&&err.row!=null&&err.column!=null){var old_err=err;err=SyntaxError(old_err.message);err.column=old_err.column;err.row=old_err.row;}throw err;}};module.exports.tokenize=function tokenizeJSON(input,options){if(options==null)options={};options._tokenize=function(smth){if(options._addstack)smth.stack.unshift.apply(smth.stack,options._addstack);tokens.push(smth);};var tokens=[];tokens.data=module.exports.parse(input,options);return tokens;};});var errorEx=index$52;var fallback=parse_1;var JSONError=errorEx('JSONError',{fileName:errorEx.append('in %s')});var index$50=function index$50(x,reviver,filename){if(typeof reviver==='string'){filename=reviver;reviver=null;}try{try{return JSON.parse(x,reviver);}catch(err){fallback.parse(x,{mode:'json',reviver:reviver});throw err;}}catch(err){var jsonErr=new JSONError(err);if(filename){jsonErr.fileName=filename;}throw jsonErr;}};var parseJson$1=index$50;var parseJson_1=function parseJson_1(json,filepath){try{return parseJson$1(json);}catch(err){err.message='JSON Error in '+filepath+':\\n'+err.message;throw err;}};var path$4=require$$0$1;var readFile=readFile$1;var parseJson=parseJson_1;var loadPackageProp$1=function loadPackageProp$1(packageDir,options){var packagePath=path$4.join(packageDir,'package.json');return readFile(packagePath).then(function(content){if(!content)return null;var parsedContent=parseJson(content,packagePath);var packagePropValue=parsedContent[options.packageProp];if(!packagePropValue)return null;return{config:packagePropValue,filepath:packagePath};});};function isNothing(subject){return typeof subject==='undefined'||subject===null;}function isObject(subject){return(typeof subject==='undefined'?'undefined':_typeof(subject))==='object'&&subject!==null;}function toArray(sequence){if(Array.isArray(sequence))return sequence;else if(isNothing(sequence))return[];return[sequence];}function extend(target,source){var index,length,key,sourceKeys;if(source){sourceKeys=Object.keys(source);for(index=0,length=sourceKeys.length;index<length;index+=1){key=sourceKeys[index];target[key]=source[key];}}return target;}function repeat(string,count){var result='',cycle;for(cycle=0;cycle<count;cycle+=1){result+=string;}return result;}function isNegativeZero(number){return number===0&&Number.NEGATIVE_INFINITY===1/number;}var isNothing_1=isNothing;var isObject_1=isObject;var toArray_1=toArray;var repeat_1=repeat;var isNegativeZero_1=isNegativeZero;var extend_1=extend;var common$1={isNothing:isNothing_1,isObject:isObject_1,toArray:toArray_1,repeat:repeat_1,isNegativeZero:isNegativeZero_1,extend:extend_1};// YAML error class. http://stackoverflow.com/questions/8458984\n//\nfunction YAMLException$2(reason,mark){// Super constructor\nError.call(this);// Include stack trace in error object\nif(Error.captureStackTrace){// Chrome and NodeJS\nError.captureStackTrace(this,this.constructor);}else{// FF, IE 10+ and Safari 6+. Fallback for others\nthis.stack=new Error().stack||'';}this.name='YAMLException';this.reason=reason;this.mark=mark;this.message=(this.reason||'(unknown reason)')+(this.mark?' '+this.mark.toString():'');}// Inherit from Error\nYAMLException$2.prototype=Object.create(Error.prototype);YAMLException$2.prototype.constructor=YAMLException$2;YAMLException$2.prototype.toString=function toString(compact){var result=this.name+': ';result+=this.reason||'(unknown reason)';if(!compact&&this.mark){result+=' '+this.mark.toString();}return result;};var exception=YAMLException$2;var common$3=common$1;function Mark$1(name,buffer,position,line,column){this.name=name;this.buffer=buffer;this.position=position;this.line=line;this.column=column;}Mark$1.prototype.getSnippet=function getSnippet(indent,maxLength){var head,start,tail,end,snippet;if(!this.buffer)return null;indent=indent||4;maxLength=maxLength||75;head='';start=this.position;while(start>0&&'\\0\\r\\n\\x85\\u2028\\u2029'.indexOf(this.buffer.charAt(start-1))===-1){start-=1;if(this.position-start>maxLength/2-1){head=' ... ';start+=5;break;}}tail='';end=this.position;while(end<this.buffer.length&&'\\0\\r\\n\\x85\\u2028\\u2029'.indexOf(this.buffer.charAt(end))===-1){end+=1;if(end-this.position>maxLength/2-1){tail=' ... ';end-=5;break;}}snippet=this.buffer.slice(start,end);return common$3.repeat(' ',indent)+head+snippet+tail+'\\n'+common$3.repeat(' ',indent+this.position-start+head.length)+'^';};Mark$1.prototype.toString=function toString(compact){var snippet,where='';if(this.name){where+='in \"'+this.name+'\" ';}where+='at line '+(this.line+1)+', column '+(this.column+1);if(!compact){snippet=this.getSnippet();if(snippet){where+=':\\n'+snippet;}}return where;};var mark=Mark$1;var YAMLException$4=exception;var TYPE_CONSTRUCTOR_OPTIONS=['kind','resolve','construct','instanceOf','predicate','represent','defaultStyle','styleAliases'];var YAML_NODE_KINDS=['scalar','sequence','mapping'];function compileStyleAliases(map){var result={};if(map!==null){Object.keys(map).forEach(function(style){map[style].forEach(function(alias){result[String(alias)]=style;});});}return result;}function Type$2(tag,options){options=options||{};Object.keys(options).forEach(function(name){if(TYPE_CONSTRUCTOR_OPTIONS.indexOf(name)===-1){throw new YAMLException$4('Unknown option \"'+name+'\" is met in definition of \"'+tag+'\" YAML type.');}});// TODO: Add tag format check.\nthis.tag=tag;this.kind=options['kind']||null;this.resolve=options['resolve']||function(){return true;};this.construct=options['construct']||function(data){return data;};this.instanceOf=options['instanceOf']||null;this.predicate=options['predicate']||null;this.represent=options['represent']||null;this.defaultStyle=options['defaultStyle']||null;this.styleAliases=compileStyleAliases(options['styleAliases']||null);if(YAML_NODE_KINDS.indexOf(this.kind)===-1){throw new YAMLException$4('Unknown kind \"'+this.kind+'\" is specified for \"'+tag+'\" YAML type.');}}var type=Type$2;/*eslint-disable max-len*/var common$4=common$1;var YAMLException$3=exception;var Type$1=type;function compileList(schema,name,result){var exclude=[];schema.include.forEach(function(includedSchema){result=compileList(includedSchema,name,result);});schema[name].forEach(function(currentType){result.forEach(function(previousType,previousIndex){if(previousType.tag===currentType.tag&&previousType.kind===currentType.kind){exclude.push(previousIndex);}});result.push(currentType);});return result.filter(function(type$$1,index){return exclude.indexOf(index)===-1;});}function compileMap()/* lists... */{var result={scalar:{},sequence:{},mapping:{},fallback:{}},index,length;function collectType(type$$1){result[type$$1.kind][type$$1.tag]=result['fallback'][type$$1.tag]=type$$1;}for(index=0,length=arguments.length;index<length;index+=1){arguments[index].forEach(collectType);}return result;}function Schema$2(definition){this.include=definition.include||[];this.implicit=definition.implicit||[];this.explicit=definition.explicit||[];this.implicit.forEach(function(type$$1){if(type$$1.loadKind&&type$$1.loadKind!=='scalar'){throw new YAMLException$3('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.');}});this.compiledImplicit=compileList(this,'implicit',[]);this.compiledExplicit=compileList(this,'explicit',[]);this.compiledTypeMap=compileMap(this.compiledImplicit,this.compiledExplicit);}Schema$2.DEFAULT=null;Schema$2.create=function createSchema(){var schemas,types;switch(arguments.length){case 1:schemas=Schema$2.DEFAULT;types=arguments[0];break;case 2:schemas=arguments[0];types=arguments[1];break;default:throw new YAMLException$3('Wrong number of arguments for Schema.create function');}schemas=common$4.toArray(schemas);types=common$4.toArray(types);if(!schemas.every(function(schema){return schema instanceof Schema$2;})){throw new YAMLException$3('Specified list of super schemas (or a single Schema object) contains a non-Schema object.');}if(!types.every(function(type$$1){return type$$1 instanceof Type$1;})){throw new YAMLException$3('Specified list of YAML types (or a single Type object) contains a non-Type object.');}return new Schema$2({include:schemas,explicit:types});};var schema=Schema$2;var Type$3=type;var str=new Type$3('tag:yaml.org,2002:str',{kind:'scalar',construct:function construct(data){return data!==null?data:'';}});var Type$4=type;var seq=new Type$4('tag:yaml.org,2002:seq',{kind:'sequence',construct:function construct(data){return data!==null?data:[];}});var Type$5=type;var map=new Type$5('tag:yaml.org,2002:map',{kind:'mapping',construct:function construct(data){return data!==null?data:{};}});var Schema$5=schema;var failsafe=new Schema$5({explicit:[str,seq,map]});var Type$6=type;function resolveYamlNull(data){if(data===null)return true;var max=data.length;return max===1&&data==='~'||max===4&&(data==='null'||data==='Null'||data==='NULL');}function constructYamlNull(){return null;}function isNull(object){return object===null;}var _null=new Type$6('tag:yaml.org,2002:null',{kind:'scalar',resolve:resolveYamlNull,construct:constructYamlNull,predicate:isNull,represent:{canonical:function canonical(){return'~';},lowercase:function lowercase(){return'null';},uppercase:function uppercase(){return'NULL';},camelcase:function camelcase(){return'Null';}},defaultStyle:'lowercase'});var Type$7=type;function resolveYamlBoolean(data){if(data===null)return false;var max=data.length;return max===4&&(data==='true'||data==='True'||data==='TRUE')||max===5&&(data==='false'||data==='False'||data==='FALSE');}function constructYamlBoolean(data){return data==='true'||data==='True'||data==='TRUE';}function isBoolean(object){return Object.prototype.toString.call(object)==='[object Boolean]';}var bool=new Type$7('tag:yaml.org,2002:bool',{kind:'scalar',resolve:resolveYamlBoolean,construct:constructYamlBoolean,predicate:isBoolean,represent:{lowercase:function lowercase(object){return object?'true':'false';},uppercase:function uppercase(object){return object?'TRUE':'FALSE';},camelcase:function camelcase(object){return object?'True':'False';}},defaultStyle:'lowercase'});var common$5=common$1;var Type$8=type;function isHexCode(c){return 0x30/* 0 */<=c&&c<=0x39/* 9 */||0x41/* A */<=c&&c<=0x46/* F */||0x61/* a */<=c&&c<=0x66/* f */;}function isOctCode(c){return 0x30/* 0 */<=c&&c<=0x37/* 7 */;}function isDecCode(c){return 0x30/* 0 */<=c&&c<=0x39/* 9 */;}function resolveYamlInteger(data){if(data===null)return false;var max=data.length,index=0,hasDigits=false,ch;if(!max)return false;ch=data[index];// sign\nif(ch==='-'||ch==='+'){ch=data[++index];}if(ch==='0'){// 0\nif(index+1===max)return true;ch=data[++index];// base 2, base 8, base 16\nif(ch==='b'){// base 2\nindex++;for(;index<max;index++){ch=data[index];if(ch==='_')continue;if(ch!=='0'&&ch!=='1')return false;hasDigits=true;}return hasDigits&&ch!=='_';}if(ch==='x'){// base 16\nindex++;for(;index<max;index++){ch=data[index];if(ch==='_')continue;if(!isHexCode(data.charCodeAt(index)))return false;hasDigits=true;}return hasDigits&&ch!=='_';}// base 8\nfor(;index<max;index++){ch=data[index];if(ch==='_')continue;if(!isOctCode(data.charCodeAt(index)))return false;hasDigits=true;}return hasDigits&&ch!=='_';}// base 10 (except 0) or base 60\n// value should not start with `_`;\nif(ch==='_')return false;for(;index<max;index++){ch=data[index];if(ch==='_')continue;if(ch===':')break;if(!isDecCode(data.charCodeAt(index))){return false;}hasDigits=true;}// Should have digits and should not end with `_`\nif(!hasDigits||ch==='_')return false;// if !base60 - done;\nif(ch!==':')return true;// base60 almost not used, no needs to optimize\nreturn /^(:[0-5]?[0-9])+$/.test(data.slice(index));}function constructYamlInteger(data){var value=data,sign=1,ch,base,digits=[];if(value.indexOf('_')!==-1){value=value.replace(/_/g,'');}ch=value[0];if(ch==='-'||ch==='+'){if(ch==='-')sign=-1;value=value.slice(1);ch=value[0];}if(value==='0')return 0;if(ch==='0'){if(value[1]==='b')return sign*parseInt(value.slice(2),2);if(value[1]==='x')return sign*parseInt(value,16);return sign*parseInt(value,8);}if(value.indexOf(':')!==-1){value.split(':').forEach(function(v){digits.unshift(parseInt(v,10));});value=0;base=1;digits.forEach(function(d){value+=d*base;base*=60;});return sign*value;}return sign*parseInt(value,10);}function isInteger(object){return Object.prototype.toString.call(object)==='[object Number]'&&object%1===0&&!common$5.isNegativeZero(object);}var int_1=new Type$8('tag:yaml.org,2002:int',{kind:'scalar',resolve:resolveYamlInteger,construct:constructYamlInteger,predicate:isInteger,represent:{binary:function binary(object){return'0b'+object.toString(2);},octal:function octal(object){return'0'+object.toString(8);},decimal:function decimal(object){return object.toString(10);},hexadecimal:function hexadecimal(object){return'0x'+object.toString(16).toUpperCase();}},defaultStyle:'decimal',styleAliases:{binary:[2,'bin'],octal:[8,'oct'],decimal:[10,'dec'],hexadecimal:[16,'hex']}});var common$6=common$1;var Type$9=type;var YAML_FLOAT_PATTERN=new RegExp(// 2.5e4, 2.5 and integers\n'^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?'+// .2e4, .2\n// special case, seems not from spec\n'|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?'+// 20:59\n'|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*'+// .inf\n'|[-+]?\\\\.(?:inf|Inf|INF)'+// .nan\n'|\\\\.(?:nan|NaN|NAN))$');function resolveYamlFloat(data){if(data===null)return false;if(!YAML_FLOAT_PATTERN.test(data)||// Quick hack to not allow integers end with `_`\n// Probably should update regexp & check speed\ndata[data.length-1]==='_'){return false;}return true;}function constructYamlFloat(data){var value,sign,base,digits;value=data.replace(/_/g,'').toLowerCase();sign=value[0]==='-'?-1:1;digits=[];if('+-'.indexOf(value[0])>=0){value=value.slice(1);}if(value==='.inf'){return sign===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY;}else if(value==='.nan'){return NaN;}else if(value.indexOf(':')>=0){value.split(':').forEach(function(v){digits.unshift(parseFloat(v,10));});value=0.0;base=1;digits.forEach(function(d){value+=d*base;base*=60;});return sign*value;}return sign*parseFloat(value,10);}var SCIENTIFIC_WITHOUT_DOT=/^[-+]?[0-9]+e/;function representYamlFloat(object,style){var res;if(isNaN(object)){switch(style){case'lowercase':return'.nan';case'uppercase':return'.NAN';case'camelcase':return'.NaN';}}else if(Number.POSITIVE_INFINITY===object){switch(style){case'lowercase':return'.inf';case'uppercase':return'.INF';case'camelcase':return'.Inf';}}else if(Number.NEGATIVE_INFINITY===object){switch(style){case'lowercase':return'-.inf';case'uppercase':return'-.INF';case'camelcase':return'-.Inf';}}else if(common$6.isNegativeZero(object)){return'-0.0';}res=object.toString(10);// JS stringifier can build scientific format without dots: 5e-100,\n// while YAML requres dot: 5.e-100. Fix it with simple hack\nreturn SCIENTIFIC_WITHOUT_DOT.test(res)?res.replace('e','.e'):res;}function isFloat(object){return Object.prototype.toString.call(object)==='[object Number]'&&(object%1!==0||common$6.isNegativeZero(object));}var float_1=new Type$9('tag:yaml.org,2002:float',{kind:'scalar',resolve:resolveYamlFloat,construct:constructYamlFloat,predicate:isFloat,represent:representYamlFloat,defaultStyle:'lowercase'});var Schema$4=schema;var json=new Schema$4({include:[failsafe],implicit:[_null,bool,int_1,float_1]});var Schema$3=schema;var core=new Schema$3({include:[json]});var Type$10=type;var YAML_DATE_REGEXP=new RegExp('^([0-9][0-9][0-9][0-9])'+// [1] year\n'-([0-9][0-9])'+// [2] month\n'-([0-9][0-9])$');// [3] day\nvar YAML_TIMESTAMP_REGEXP=new RegExp('^([0-9][0-9][0-9][0-9])'+// [1] year\n'-([0-9][0-9]?)'+// [2] month\n'-([0-9][0-9]?)'+// [3] day\n'(?:[Tt]|[ \\\\t]+)'+// ...\n'([0-9][0-9]?)'+// [4] hour\n':([0-9][0-9])'+// [5] minute\n':([0-9][0-9])'+// [6] second\n'(?:\\\\.([0-9]*))?'+// [7] fraction\n'(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)'+// [8] tz [9] tz_sign [10] tz_hour\n'(?::([0-9][0-9]))?))?$');// [11] tz_minute\nfunction resolveYamlTimestamp(data){if(data===null)return false;if(YAML_DATE_REGEXP.exec(data)!==null)return true;if(YAML_TIMESTAMP_REGEXP.exec(data)!==null)return true;return false;}function constructYamlTimestamp(data){var match,year,month,day,hour,minute,second,fraction=0,delta=null,tz_hour,tz_minute,date;match=YAML_DATE_REGEXP.exec(data);if(match===null)match=YAML_TIMESTAMP_REGEXP.exec(data);if(match===null)throw new Error('Date resolve error');// match: [1] year [2] month [3] day\nyear=+match[1];month=+match[2]-1;// JS month starts with 0\nday=+match[3];if(!match[4]){// no hour\nreturn new Date(Date.UTC(year,month,day));}// match: [4] hour [5] minute [6] second [7] fraction\nhour=+match[4];minute=+match[5];second=+match[6];if(match[7]){fraction=match[7].slice(0,3);while(fraction.length<3){// milli-seconds\nfraction+='0';}fraction=+fraction;}// match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute\nif(match[9]){tz_hour=+match[10];tz_minute=+(match[11]||0);delta=(tz_hour*60+tz_minute)*60000;// delta in mili-seconds\nif(match[9]==='-')delta=-delta;}date=new Date(Date.UTC(year,month,day,hour,minute,second,fraction));if(delta)date.setTime(date.getTime()-delta);return date;}function representYamlTimestamp(object/*, style*/){return object.toISOString();}var timestamp=new Type$10('tag:yaml.org,2002:timestamp',{kind:'scalar',resolve:resolveYamlTimestamp,construct:constructYamlTimestamp,instanceOf:Date,represent:representYamlTimestamp});var Type$11=type;function resolveYamlMerge(data){return data==='<<'||data===null;}var merge=new Type$11('tag:yaml.org,2002:merge',{kind:'scalar',resolve:resolveYamlMerge});/*eslint-disable no-bitwise*/var NodeBuffer;try{// A trick for browserified version, to not include `Buffer` shim\nvar _require$4=commonjsRequire;NodeBuffer=_require$4('buffer').Buffer;}catch(__){}var Type$12=type;// [ 64, 65, 66 ] -> [ padding, CR, LF ]\nvar BASE64_MAP='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\n\\r';function resolveYamlBinary(data){if(data===null)return false;var code,idx,bitlen=0,max=data.length,map=BASE64_MAP;// Convert one by one.\nfor(idx=0;idx<max;idx++){code=map.indexOf(data.charAt(idx));// Skip CR/LF\nif(code>64)continue;// Fail on illegal characters\nif(code<0)return false;bitlen+=6;}// If there are any bits left, source was corrupted\nreturn bitlen%8===0;}function constructYamlBinary(data){var idx,tailbits,input=data.replace(/[\\r\\n=]/g,''),// remove CR/LF & padding to simplify scan\nmax=input.length,map=BASE64_MAP,bits=0,result=[];// Collect by 6*4 bits (3 bytes)\nfor(idx=0;idx<max;idx++){if(idx%4===0&&idx){result.push(bits>>16&0xFF);result.push(bits>>8&0xFF);result.push(bits&0xFF);}bits=bits<<6|map.indexOf(input.charAt(idx));}// Dump tail\ntailbits=max%4*6;if(tailbits===0){result.push(bits>>16&0xFF);result.push(bits>>8&0xFF);result.push(bits&0xFF);}else if(tailbits===18){result.push(bits>>10&0xFF);result.push(bits>>2&0xFF);}else if(tailbits===12){result.push(bits>>4&0xFF);}// Wrap into Buffer for NodeJS and leave Array for browser\nif(NodeBuffer){// Support node 6.+ Buffer API when available\nreturn NodeBuffer.from?NodeBuffer.from(result):new NodeBuffer(result);}return result;}function representYamlBinary(object/*, style*/){var result='',bits=0,idx,tail,max=object.length,map=BASE64_MAP;// Convert every three bytes to 4 ASCII characters.\nfor(idx=0;idx<max;idx++){if(idx%3===0&&idx){result+=map[bits>>18&0x3F];result+=map[bits>>12&0x3F];result+=map[bits>>6&0x3F];result+=map[bits&0x3F];}bits=(bits<<8)+object[idx];}// Dump tail\ntail=max%3;if(tail===0){result+=map[bits>>18&0x3F];result+=map[bits>>12&0x3F];result+=map[bits>>6&0x3F];result+=map[bits&0x3F];}else if(tail===2){result+=map[bits>>10&0x3F];result+=map[bits>>4&0x3F];result+=map[bits<<2&0x3F];result+=map[64];}else if(tail===1){result+=map[bits>>2&0x3F];result+=map[bits<<4&0x3F];result+=map[64];result+=map[64];}return result;}function isBinary(object){return NodeBuffer&&NodeBuffer.isBuffer(object);}var binary=new Type$12('tag:yaml.org,2002:binary',{kind:'scalar',resolve:resolveYamlBinary,construct:constructYamlBinary,predicate:isBinary,represent:representYamlBinary});var Type$13=type;var _hasOwnProperty$1=Object.prototype.hasOwnProperty;var _toString=Object.prototype.toString;function resolveYamlOmap(data){if(data===null)return true;var objectKeys=[],index,length,pair,pairKey,pairHasKey,object=data;for(index=0,length=object.length;index<length;index+=1){pair=object[index];pairHasKey=false;if(_toString.call(pair)!=='[object Object]')return false;for(pairKey in pair){if(_hasOwnProperty$1.call(pair,pairKey)){if(!pairHasKey)pairHasKey=true;else return false;}}if(!pairHasKey)return false;if(objectKeys.indexOf(pairKey)===-1)objectKeys.push(pairKey);else return false;}return true;}function constructYamlOmap(data){return data!==null?data:[];}var omap=new Type$13('tag:yaml.org,2002:omap',{kind:'sequence',resolve:resolveYamlOmap,construct:constructYamlOmap});var Type$14=type;var _toString$1=Object.prototype.toString;function resolveYamlPairs(data){if(data===null)return true;var index,length,pair,keys,result,object=data;result=new Array(object.length);for(index=0,length=object.length;index<length;index+=1){pair=object[index];if(_toString$1.call(pair)!=='[object Object]')return false;keys=Object.keys(pair);if(keys.length!==1)return false;result[index]=[keys[0],pair[keys[0]]];}return true;}function constructYamlPairs(data){if(data===null)return[];var index,length,pair,keys,result,object=data;result=new Array(object.length);for(index=0,length=object.length;index<length;index+=1){pair=object[index];keys=Object.keys(pair);result[index]=[keys[0],pair[keys[0]]];}return result;}var pairs=new Type$14('tag:yaml.org,2002:pairs',{kind:'sequence',resolve:resolveYamlPairs,construct:constructYamlPairs});var Type$15=type;var _hasOwnProperty$2=Object.prototype.hasOwnProperty;function resolveYamlSet(data){if(data===null)return true;var key,object=data;for(key in object){if(_hasOwnProperty$2.call(object,key)){if(object[key]!==null)return false;}}return true;}function constructYamlSet(data){return data!==null?data:{};}var set=new Type$15('tag:yaml.org,2002:set',{kind:'mapping',resolve:resolveYamlSet,construct:constructYamlSet});var Schema$1=schema;var default_safe=new Schema$1({include:[core],implicit:[timestamp,merge],explicit:[binary,omap,pairs,set]});var Type$16=type;function resolveJavascriptUndefined(){return true;}function constructJavascriptUndefined(){/*eslint-disable no-undefined*/return undefined;}function representJavascriptUndefined(){return'';}function isUndefined(object){return typeof object==='undefined';}var _undefined=new Type$16('tag:yaml.org,2002:js/undefined',{kind:'scalar',resolve:resolveJavascriptUndefined,construct:constructJavascriptUndefined,predicate:isUndefined,represent:representJavascriptUndefined});var Type$17=type;function resolveJavascriptRegExp(data){if(data===null)return false;if(data.length===0)return false;var regexp=data,tail=/\\/([gim]*)$/.exec(data),modifiers='';// if regexp starts with '/' it can have modifiers and must be properly closed\n// `/foo/gim` - modifiers tail can be maximum 3 chars\nif(regexp[0]==='/'){if(tail)modifiers=tail[1];if(modifiers.length>3)return false;// if expression starts with /, is should be properly terminated\nif(regexp[regexp.length-modifiers.length-1]!=='/')return false;}return true;}function constructJavascriptRegExp(data){var regexp=data,tail=/\\/([gim]*)$/.exec(data),modifiers='';// `/foo/gim` - tail can be maximum 4 chars\nif(regexp[0]==='/'){if(tail)modifiers=tail[1];regexp=regexp.slice(1,regexp.length-modifiers.length-1);}return new RegExp(regexp,modifiers);}function representJavascriptRegExp(object/*, style*/){var result='/'+object.source+'/';if(object.global)result+='g';if(object.multiline)result+='m';if(object.ignoreCase)result+='i';return result;}function isRegExp(object){return Object.prototype.toString.call(object)==='[object RegExp]';}var regexp=new Type$17('tag:yaml.org,2002:js/regexp',{kind:'scalar',resolve:resolveJavascriptRegExp,construct:constructJavascriptRegExp,predicate:isRegExp,represent:representJavascriptRegExp});var esprima;// Browserified version does not have esprima\n//\n// 1. For node.js just require module as deps\n// 2. For browser try to require mudule via external AMD system.\n//    If not found - try to fallback to window.esprima. If not\n//    found too - then fail to parse.\n//\ntry{// workaround to exclude package from browserify list.\nvar _require$5=commonjsRequire;esprima=_require$5('esprima');}catch(_){/*global window */if(typeof window!=='undefined')esprima=window.esprima;}var Type$18=type;function resolveJavascriptFunction(data){if(data===null)return false;try{var source='('+data+')',ast=esprima.parse(source,{range:true});if(ast.type!=='Program'||ast.body.length!==1||ast.body[0].type!=='ExpressionStatement'||ast.body[0].expression.type!=='FunctionExpression'){return false;}return true;}catch(err){return false;}}function constructJavascriptFunction(data){/*jslint evil:true*/var source='('+data+')',ast=esprima.parse(source,{range:true}),params=[],body;if(ast.type!=='Program'||ast.body.length!==1||ast.body[0].type!=='ExpressionStatement'||ast.body[0].expression.type!=='FunctionExpression'){throw new Error('Failed to resolve function');}ast.body[0].expression.params.forEach(function(param){params.push(param.name);});body=ast.body[0].expression.body.range;// Esprima's ranges include the first '{' and the last '}' characters on\n// function expressions. So cut them out.\n/*eslint-disable no-new-func*/return new Function(params,source.slice(body[0]+1,body[1]-1));}function representJavascriptFunction(object/*, style*/){return object.toString();}function isFunction(object){return Object.prototype.toString.call(object)==='[object Function]';}var _function=new Type$18('tag:yaml.org,2002:js/function',{kind:'scalar',resolve:resolveJavascriptFunction,construct:constructJavascriptFunction,predicate:isFunction,represent:representJavascriptFunction});var Schema$6=schema;var default_full=Schema$6.DEFAULT=new Schema$6({include:[default_safe],explicit:[_undefined,regexp,_function]});/*eslint-disable max-len,no-use-before-define*/var common=common$1;var YAMLException$1=exception;var Mark=mark;var DEFAULT_SAFE_SCHEMA$1=default_safe;var DEFAULT_FULL_SCHEMA$1=default_full;var _hasOwnProperty=Object.prototype.hasOwnProperty;var CONTEXT_FLOW_IN=1;var CONTEXT_FLOW_OUT=2;var CONTEXT_BLOCK_IN=3;var CONTEXT_BLOCK_OUT=4;var CHOMPING_CLIP=1;var CHOMPING_STRIP=2;var CHOMPING_KEEP=3;var PATTERN_NON_PRINTABLE=/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;var PATTERN_NON_ASCII_LINE_BREAKS=/[\\x85\\u2028\\u2029]/;var PATTERN_FLOW_INDICATORS=/[,\\[\\]\\{\\}]/;var PATTERN_TAG_HANDLE=/^(?:!|!!|![a-z\\-]+!)$/i;var PATTERN_TAG_URI=/^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;function is_EOL(c){return c===0x0A/* LF */||c===0x0D/* CR */;}function is_WHITE_SPACE(c){return c===0x09/* Tab */||c===0x20/* Space */;}function is_WS_OR_EOL(c){return c===0x09/* Tab */||c===0x20/* Space */||c===0x0A/* LF */||c===0x0D/* CR */;}function is_FLOW_INDICATOR(c){return c===0x2C/* , */||c===0x5B/* [ */||c===0x5D/* ] */||c===0x7B/* { */||c===0x7D/* } */;}function fromHexCode(c){var lc;if(0x30/* 0 */<=c&&c<=0x39/* 9 */){return c-0x30;}/*eslint-disable no-bitwise*/lc=c|0x20;if(0x61/* a */<=lc&&lc<=0x66/* f */){return lc-0x61+10;}return-1;}function escapedHexLen(c){if(c===0x78/* x */){return 2;}if(c===0x75/* u */){return 4;}if(c===0x55/* U */){return 8;}return 0;}function fromDecimalCode(c){if(0x30/* 0 */<=c&&c<=0x39/* 9 */){return c-0x30;}return-1;}function simpleEscapeSequence(c){return c===0x30/* 0 */?'\\x00':c===0x61/* a */?'\\x07':c===0x62/* b */?'\\x08':c===0x74/* t */?'\\x09':c===0x09/* Tab */?'\\x09':c===0x6E/* n */?'\\x0A':c===0x76/* v */?'\\x0B':c===0x66/* f */?'\\x0C':c===0x72/* r */?'\\x0D':c===0x65/* e */?'\\x1B':c===0x20/* Space */?' ':c===0x22/* \" */?'\\x22':c===0x2F/* / */?'/':c===0x5C/* \\ */?'\\x5C':c===0x4E/* N */?'\\x85':c===0x5F/* _ */?'\\xA0':c===0x4C/* L */?'\\u2028':c===0x50/* P */?'\\u2029':'';}function charFromCodepoint(c){if(c<=0xFFFF){return String.fromCharCode(c);}// Encode UTF-16 surrogate pair\n// https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF\nreturn String.fromCharCode((c-0x010000>>10)+0xD800,(c-0x010000&0x03FF)+0xDC00);}var simpleEscapeCheck=new Array(256);// integer, for fast access\nvar simpleEscapeMap=new Array(256);for(var i=0;i<256;i++){simpleEscapeCheck[i]=simpleEscapeSequence(i)?1:0;simpleEscapeMap[i]=simpleEscapeSequence(i);}function State(input,options){this.input=input;this.filename=options['filename']||null;this.schema=options['schema']||DEFAULT_FULL_SCHEMA$1;this.onWarning=options['onWarning']||null;this.legacy=options['legacy']||false;this.json=options['json']||false;this.listener=options['listener']||null;this.implicitTypes=this.schema.compiledImplicit;this.typeMap=this.schema.compiledTypeMap;this.length=input.length;this.position=0;this.line=0;this.lineStart=0;this.lineIndent=0;this.documents=[];/*\n  this.version;\n  this.checkLineBreaks;\n  this.tagMap;\n  this.anchorMap;\n  this.tag;\n  this.anchor;\n  this.kind;\n  this.result;*/}function generateError(state,message){return new YAMLException$1(message,new Mark(state.filename,state.input,state.position,state.line,state.position-state.lineStart));}function throwError(state,message){throw generateError(state,message);}function throwWarning(state,message){if(state.onWarning){state.onWarning.call(null,generateError(state,message));}}var directiveHandlers={YAML:function handleYamlDirective(state,name,args){var match,major,minor;if(state.version!==null){throwError(state,'duplication of %YAML directive');}if(args.length!==1){throwError(state,'YAML directive accepts exactly one argument');}match=/^([0-9]+)\\.([0-9]+)$/.exec(args[0]);if(match===null){throwError(state,'ill-formed argument of the YAML directive');}major=parseInt(match[1],10);minor=parseInt(match[2],10);if(major!==1){throwError(state,'unacceptable YAML version of the document');}state.version=args[0];state.checkLineBreaks=minor<2;if(minor!==1&&minor!==2){throwWarning(state,'unsupported YAML version of the document');}},TAG:function handleTagDirective(state,name,args){var handle,prefix;if(args.length!==2){throwError(state,'TAG directive accepts exactly two arguments');}handle=args[0];prefix=args[1];if(!PATTERN_TAG_HANDLE.test(handle)){throwError(state,'ill-formed tag handle (first argument) of the TAG directive');}if(_hasOwnProperty.call(state.tagMap,handle)){throwError(state,'there is a previously declared suffix for \"'+handle+'\" tag handle');}if(!PATTERN_TAG_URI.test(prefix)){throwError(state,'ill-formed tag prefix (second argument) of the TAG directive');}state.tagMap[handle]=prefix;}};function captureSegment(state,start,end,checkJson){var _position,_length,_character,_result;if(start<end){_result=state.input.slice(start,end);if(checkJson){for(_position=0,_length=_result.length;_position<_length;_position+=1){_character=_result.charCodeAt(_position);if(!(_character===0x09||0x20<=_character&&_character<=0x10FFFF)){throwError(state,'expected valid JSON character');}}}else if(PATTERN_NON_PRINTABLE.test(_result)){throwError(state,'the stream contains non-printable characters');}state.result+=_result;}}function mergeMappings(state,destination,source,overridableKeys){var sourceKeys,key,index,quantity;if(!common.isObject(source)){throwError(state,'cannot merge mappings; the provided source object is unacceptable');}sourceKeys=Object.keys(source);for(index=0,quantity=sourceKeys.length;index<quantity;index+=1){key=sourceKeys[index];if(!_hasOwnProperty.call(destination,key)){destination[key]=source[key];overridableKeys[key]=true;}}}function storeMappingPair(state,_result,overridableKeys,keyTag,keyNode,valueNode,startLine,startPos){var index,quantity;keyNode=String(keyNode);if(_result===null){_result={};}if(keyTag==='tag:yaml.org,2002:merge'){if(Array.isArray(valueNode)){for(index=0,quantity=valueNode.length;index<quantity;index+=1){mergeMappings(state,_result,valueNode[index],overridableKeys);}}else{mergeMappings(state,_result,valueNode,overridableKeys);}}else{if(!state.json&&!_hasOwnProperty.call(overridableKeys,keyNode)&&_hasOwnProperty.call(_result,keyNode)){state.line=startLine||state.line;state.position=startPos||state.position;throwError(state,'duplicated mapping key');}_result[keyNode]=valueNode;delete overridableKeys[keyNode];}return _result;}function readLineBreak(state){var ch;ch=state.input.charCodeAt(state.position);if(ch===0x0A/* LF */){state.position++;}else if(ch===0x0D/* CR */){state.position++;if(state.input.charCodeAt(state.position)===0x0A/* LF */){state.position++;}}else{throwError(state,'a line break is expected');}state.line+=1;state.lineStart=state.position;}function skipSeparationSpace(state,allowComments,checkIndent){var lineBreaks=0,ch=state.input.charCodeAt(state.position);while(ch!==0){while(is_WHITE_SPACE(ch)){ch=state.input.charCodeAt(++state.position);}if(allowComments&&ch===0x23/* # */){do{ch=state.input.charCodeAt(++state.position);}while(ch!==0x0A/* LF */&&ch!==0x0D/* CR */&&ch!==0);}if(is_EOL(ch)){readLineBreak(state);ch=state.input.charCodeAt(state.position);lineBreaks++;state.lineIndent=0;while(ch===0x20/* Space */){state.lineIndent++;ch=state.input.charCodeAt(++state.position);}}else{break;}}if(checkIndent!==-1&&lineBreaks!==0&&state.lineIndent<checkIndent){throwWarning(state,'deficient indentation');}return lineBreaks;}function testDocumentSeparator(state){var _position=state.position,ch;ch=state.input.charCodeAt(_position);// Condition state.position === state.lineStart is tested\n// in parent on each call, for efficiency. No needs to test here again.\nif((ch===0x2D/* - */||ch===0x2E/* . */)&&ch===state.input.charCodeAt(_position+1)&&ch===state.input.charCodeAt(_position+2)){_position+=3;ch=state.input.charCodeAt(_position);if(ch===0||is_WS_OR_EOL(ch)){return true;}}return false;}function writeFoldedLines(state,count){if(count===1){state.result+=' ';}else if(count>1){state.result+=common.repeat('\\n',count-1);}}function readPlainScalar(state,nodeIndent,withinFlowCollection){var preceding,following,captureStart,captureEnd,hasPendingContent,_line,_lineStart,_lineIndent,_kind=state.kind,_result=state.result,ch;ch=state.input.charCodeAt(state.position);if(is_WS_OR_EOL(ch)||is_FLOW_INDICATOR(ch)||ch===0x23/* # */||ch===0x26/* & */||ch===0x2A/* * */||ch===0x21/* ! */||ch===0x7C/* | */||ch===0x3E/* > */||ch===0x27/* ' */||ch===0x22/* \" */||ch===0x25/* % */||ch===0x40/* @ */||ch===0x60/* ` */){return false;}if(ch===0x3F/* ? */||ch===0x2D/* - */){following=state.input.charCodeAt(state.position+1);if(is_WS_OR_EOL(following)||withinFlowCollection&&is_FLOW_INDICATOR(following)){return false;}}state.kind='scalar';state.result='';captureStart=captureEnd=state.position;hasPendingContent=false;while(ch!==0){if(ch===0x3A/* : */){following=state.input.charCodeAt(state.position+1);if(is_WS_OR_EOL(following)||withinFlowCollection&&is_FLOW_INDICATOR(following)){break;}}else if(ch===0x23/* # */){preceding=state.input.charCodeAt(state.position-1);if(is_WS_OR_EOL(preceding)){break;}}else if(state.position===state.lineStart&&testDocumentSeparator(state)||withinFlowCollection&&is_FLOW_INDICATOR(ch)){break;}else if(is_EOL(ch)){_line=state.line;_lineStart=state.lineStart;_lineIndent=state.lineIndent;skipSeparationSpace(state,false,-1);if(state.lineIndent>=nodeIndent){hasPendingContent=true;ch=state.input.charCodeAt(state.position);continue;}else{state.position=captureEnd;state.line=_line;state.lineStart=_lineStart;state.lineIndent=_lineIndent;break;}}if(hasPendingContent){captureSegment(state,captureStart,captureEnd,false);writeFoldedLines(state,state.line-_line);captureStart=captureEnd=state.position;hasPendingContent=false;}if(!is_WHITE_SPACE(ch)){captureEnd=state.position+1;}ch=state.input.charCodeAt(++state.position);}captureSegment(state,captureStart,captureEnd,false);if(state.result){return true;}state.kind=_kind;state.result=_result;return false;}function readSingleQuotedScalar(state,nodeIndent){var ch,captureStart,captureEnd;ch=state.input.charCodeAt(state.position);if(ch!==0x27/* ' */){return false;}state.kind='scalar';state.result='';state.position++;captureStart=captureEnd=state.position;while((ch=state.input.charCodeAt(state.position))!==0){if(ch===0x27/* ' */){captureSegment(state,captureStart,state.position,true);ch=state.input.charCodeAt(++state.position);if(ch===0x27/* ' */){captureStart=state.position;state.position++;captureEnd=state.position;}else{return true;}}else if(is_EOL(ch)){captureSegment(state,captureStart,captureEnd,true);writeFoldedLines(state,skipSeparationSpace(state,false,nodeIndent));captureStart=captureEnd=state.position;}else if(state.position===state.lineStart&&testDocumentSeparator(state)){throwError(state,'unexpected end of the document within a single quoted scalar');}else{state.position++;captureEnd=state.position;}}throwError(state,'unexpected end of the stream within a single quoted scalar');}function readDoubleQuotedScalar(state,nodeIndent){var captureStart,captureEnd,hexLength,hexResult,tmp,ch;ch=state.input.charCodeAt(state.position);if(ch!==0x22/* \" */){return false;}state.kind='scalar';state.result='';state.position++;captureStart=captureEnd=state.position;while((ch=state.input.charCodeAt(state.position))!==0){if(ch===0x22/* \" */){captureSegment(state,captureStart,state.position,true);state.position++;return true;}else if(ch===0x5C/* \\ */){captureSegment(state,captureStart,state.position,true);ch=state.input.charCodeAt(++state.position);if(is_EOL(ch)){skipSeparationSpace(state,false,nodeIndent);// TODO: rework to inline fn with no type cast?\n}else if(ch<256&&simpleEscapeCheck[ch]){state.result+=simpleEscapeMap[ch];state.position++;}else if((tmp=escapedHexLen(ch))>0){hexLength=tmp;hexResult=0;for(;hexLength>0;hexLength--){ch=state.input.charCodeAt(++state.position);if((tmp=fromHexCode(ch))>=0){hexResult=(hexResult<<4)+tmp;}else{throwError(state,'expected hexadecimal character');}}state.result+=charFromCodepoint(hexResult);state.position++;}else{throwError(state,'unknown escape sequence');}captureStart=captureEnd=state.position;}else if(is_EOL(ch)){captureSegment(state,captureStart,captureEnd,true);writeFoldedLines(state,skipSeparationSpace(state,false,nodeIndent));captureStart=captureEnd=state.position;}else if(state.position===state.lineStart&&testDocumentSeparator(state)){throwError(state,'unexpected end of the document within a double quoted scalar');}else{state.position++;captureEnd=state.position;}}throwError(state,'unexpected end of the stream within a double quoted scalar');}function readFlowCollection(state,nodeIndent){var readNext=true,_line,_tag=state.tag,_result,_anchor=state.anchor,following,terminator,isPair,isExplicitPair,isMapping,overridableKeys={},keyNode,keyTag,valueNode,ch;ch=state.input.charCodeAt(state.position);if(ch===0x5B/* [ */){terminator=0x5D;/* ] */isMapping=false;_result=[];}else if(ch===0x7B/* { */){terminator=0x7D;/* } */isMapping=true;_result={};}else{return false;}if(state.anchor!==null){state.anchorMap[state.anchor]=_result;}ch=state.input.charCodeAt(++state.position);while(ch!==0){skipSeparationSpace(state,true,nodeIndent);ch=state.input.charCodeAt(state.position);if(ch===terminator){state.position++;state.tag=_tag;state.anchor=_anchor;state.kind=isMapping?'mapping':'sequence';state.result=_result;return true;}else if(!readNext){throwError(state,'missed comma between flow collection entries');}keyTag=keyNode=valueNode=null;isPair=isExplicitPair=false;if(ch===0x3F/* ? */){following=state.input.charCodeAt(state.position+1);if(is_WS_OR_EOL(following)){isPair=isExplicitPair=true;state.position++;skipSeparationSpace(state,true,nodeIndent);}}_line=state.line;composeNode(state,nodeIndent,CONTEXT_FLOW_IN,false,true);keyTag=state.tag;keyNode=state.result;skipSeparationSpace(state,true,nodeIndent);ch=state.input.charCodeAt(state.position);if((isExplicitPair||state.line===_line)&&ch===0x3A/* : */){isPair=true;ch=state.input.charCodeAt(++state.position);skipSeparationSpace(state,true,nodeIndent);composeNode(state,nodeIndent,CONTEXT_FLOW_IN,false,true);valueNode=state.result;}if(isMapping){storeMappingPair(state,_result,overridableKeys,keyTag,keyNode,valueNode);}else if(isPair){_result.push(storeMappingPair(state,null,overridableKeys,keyTag,keyNode,valueNode));}else{_result.push(keyNode);}skipSeparationSpace(state,true,nodeIndent);ch=state.input.charCodeAt(state.position);if(ch===0x2C/* , */){readNext=true;ch=state.input.charCodeAt(++state.position);}else{readNext=false;}}throwError(state,'unexpected end of the stream within a flow collection');}function readBlockScalar(state,nodeIndent){var captureStart,folding,chomping=CHOMPING_CLIP,didReadContent=false,detectedIndent=false,textIndent=nodeIndent,emptyLines=0,atMoreIndented=false,tmp,ch;ch=state.input.charCodeAt(state.position);if(ch===0x7C/* | */){folding=false;}else if(ch===0x3E/* > */){folding=true;}else{return false;}state.kind='scalar';state.result='';while(ch!==0){ch=state.input.charCodeAt(++state.position);if(ch===0x2B/* + */||ch===0x2D/* - */){if(CHOMPING_CLIP===chomping){chomping=ch===0x2B/* + */?CHOMPING_KEEP:CHOMPING_STRIP;}else{throwError(state,'repeat of a chomping mode identifier');}}else if((tmp=fromDecimalCode(ch))>=0){if(tmp===0){throwError(state,'bad explicit indentation width of a block scalar; it cannot be less than one');}else if(!detectedIndent){textIndent=nodeIndent+tmp-1;detectedIndent=true;}else{throwError(state,'repeat of an indentation width identifier');}}else{break;}}if(is_WHITE_SPACE(ch)){do{ch=state.input.charCodeAt(++state.position);}while(is_WHITE_SPACE(ch));if(ch===0x23/* # */){do{ch=state.input.charCodeAt(++state.position);}while(!is_EOL(ch)&&ch!==0);}}while(ch!==0){readLineBreak(state);state.lineIndent=0;ch=state.input.charCodeAt(state.position);while((!detectedIndent||state.lineIndent<textIndent)&&ch===0x20/* Space */){state.lineIndent++;ch=state.input.charCodeAt(++state.position);}if(!detectedIndent&&state.lineIndent>textIndent){textIndent=state.lineIndent;}if(is_EOL(ch)){emptyLines++;continue;}// End of the scalar.\nif(state.lineIndent<textIndent){// Perform the chomping.\nif(chomping===CHOMPING_KEEP){state.result+=common.repeat('\\n',didReadContent?1+emptyLines:emptyLines);}else if(chomping===CHOMPING_CLIP){if(didReadContent){// i.e. only if the scalar is not empty.\nstate.result+='\\n';}}// Break this `while` cycle and go to the funciton's epilogue.\nbreak;}// Folded style: use fancy rules to handle line breaks.\nif(folding){// Lines starting with white space characters (more-indented lines) are not folded.\nif(is_WHITE_SPACE(ch)){atMoreIndented=true;// except for the first content line (cf. Example 8.1)\nstate.result+=common.repeat('\\n',didReadContent?1+emptyLines:emptyLines);// End of more-indented block.\n}else if(atMoreIndented){atMoreIndented=false;state.result+=common.repeat('\\n',emptyLines+1);// Just one line break - perceive as the same line.\n}else if(emptyLines===0){if(didReadContent){// i.e. only if we have already read some scalar content.\nstate.result+=' ';}// Several line breaks - perceive as different lines.\n}else{state.result+=common.repeat('\\n',emptyLines);}// Literal style: just add exact number of line breaks between content lines.\n}else{// Keep all line breaks except the header line break.\nstate.result+=common.repeat('\\n',didReadContent?1+emptyLines:emptyLines);}didReadContent=true;detectedIndent=true;emptyLines=0;captureStart=state.position;while(!is_EOL(ch)&&ch!==0){ch=state.input.charCodeAt(++state.position);}captureSegment(state,captureStart,state.position,false);}return true;}function readBlockSequence(state,nodeIndent){var _line,_tag=state.tag,_anchor=state.anchor,_result=[],following,detected=false,ch;if(state.anchor!==null){state.anchorMap[state.anchor]=_result;}ch=state.input.charCodeAt(state.position);while(ch!==0){if(ch!==0x2D/* - */){break;}following=state.input.charCodeAt(state.position+1);if(!is_WS_OR_EOL(following)){break;}detected=true;state.position++;if(skipSeparationSpace(state,true,-1)){if(state.lineIndent<=nodeIndent){_result.push(null);ch=state.input.charCodeAt(state.position);continue;}}_line=state.line;composeNode(state,nodeIndent,CONTEXT_BLOCK_IN,false,true);_result.push(state.result);skipSeparationSpace(state,true,-1);ch=state.input.charCodeAt(state.position);if((state.line===_line||state.lineIndent>nodeIndent)&&ch!==0){throwError(state,'bad indentation of a sequence entry');}else if(state.lineIndent<nodeIndent){break;}}if(detected){state.tag=_tag;state.anchor=_anchor;state.kind='sequence';state.result=_result;return true;}return false;}function readBlockMapping(state,nodeIndent,flowIndent){var following,allowCompact,_line,_pos,_tag=state.tag,_anchor=state.anchor,_result={},overridableKeys={},keyTag=null,keyNode=null,valueNode=null,atExplicitKey=false,detected=false,ch;if(state.anchor!==null){state.anchorMap[state.anchor]=_result;}ch=state.input.charCodeAt(state.position);while(ch!==0){following=state.input.charCodeAt(state.position+1);_line=state.line;// Save the current line.\n_pos=state.position;//\n// Explicit notation case. There are two separate blocks:\n// first for the key (denoted by \"?\") and second for the value (denoted by \":\")\n//\nif((ch===0x3F/* ? */||ch===0x3A/* : */)&&is_WS_OR_EOL(following)){if(ch===0x3F/* ? */){if(atExplicitKey){storeMappingPair(state,_result,overridableKeys,keyTag,keyNode,null);keyTag=keyNode=valueNode=null;}detected=true;atExplicitKey=true;allowCompact=true;}else if(atExplicitKey){// i.e. 0x3A/* : */ === character after the explicit key.\natExplicitKey=false;allowCompact=true;}else{throwError(state,'incomplete explicit mapping pair; a key node is missed');}state.position+=1;ch=following;//\n// Implicit notation case. Flow-style node as the key first, then \":\", and the value.\n//\n}else if(composeNode(state,flowIndent,CONTEXT_FLOW_OUT,false,true)){if(state.line===_line){ch=state.input.charCodeAt(state.position);while(is_WHITE_SPACE(ch)){ch=state.input.charCodeAt(++state.position);}if(ch===0x3A/* : */){ch=state.input.charCodeAt(++state.position);if(!is_WS_OR_EOL(ch)){throwError(state,'a whitespace character is expected after the key-value separator within a block mapping');}if(atExplicitKey){storeMappingPair(state,_result,overridableKeys,keyTag,keyNode,null);keyTag=keyNode=valueNode=null;}detected=true;atExplicitKey=false;allowCompact=false;keyTag=state.tag;keyNode=state.result;}else if(detected){throwError(state,'can not read an implicit mapping pair; a colon is missed');}else{state.tag=_tag;state.anchor=_anchor;return true;// Keep the result of `composeNode`.\n}}else if(detected){throwError(state,'can not read a block mapping entry; a multiline key may not be an implicit key');}else{state.tag=_tag;state.anchor=_anchor;return true;// Keep the result of `composeNode`.\n}}else{break;// Reading is done. Go to the epilogue.\n}//\n// Common reading code for both explicit and implicit notations.\n//\nif(state.line===_line||state.lineIndent>nodeIndent){if(composeNode(state,nodeIndent,CONTEXT_BLOCK_OUT,true,allowCompact)){if(atExplicitKey){keyNode=state.result;}else{valueNode=state.result;}}if(!atExplicitKey){storeMappingPair(state,_result,overridableKeys,keyTag,keyNode,valueNode,_line,_pos);keyTag=keyNode=valueNode=null;}skipSeparationSpace(state,true,-1);ch=state.input.charCodeAt(state.position);}if(state.lineIndent>nodeIndent&&ch!==0){throwError(state,'bad indentation of a mapping entry');}else if(state.lineIndent<nodeIndent){break;}}//\n// Epilogue.\n//\n// Special case: last mapping's node contains only the key in explicit notation.\nif(atExplicitKey){storeMappingPair(state,_result,overridableKeys,keyTag,keyNode,null);}// Expose the resulting mapping.\nif(detected){state.tag=_tag;state.anchor=_anchor;state.kind='mapping';state.result=_result;}return detected;}function readTagProperty(state){var _position,isVerbatim=false,isNamed=false,tagHandle,tagName,ch;ch=state.input.charCodeAt(state.position);if(ch!==0x21/* ! */)return false;if(state.tag!==null){throwError(state,'duplication of a tag property');}ch=state.input.charCodeAt(++state.position);if(ch===0x3C/* < */){isVerbatim=true;ch=state.input.charCodeAt(++state.position);}else if(ch===0x21/* ! */){isNamed=true;tagHandle='!!';ch=state.input.charCodeAt(++state.position);}else{tagHandle='!';}_position=state.position;if(isVerbatim){do{ch=state.input.charCodeAt(++state.position);}while(ch!==0&&ch!==0x3E/* > */);if(state.position<state.length){tagName=state.input.slice(_position,state.position);ch=state.input.charCodeAt(++state.position);}else{throwError(state,'unexpected end of the stream within a verbatim tag');}}else{while(ch!==0&&!is_WS_OR_EOL(ch)){if(ch===0x21/* ! */){if(!isNamed){tagHandle=state.input.slice(_position-1,state.position+1);if(!PATTERN_TAG_HANDLE.test(tagHandle)){throwError(state,'named tag handle cannot contain such characters');}isNamed=true;_position=state.position+1;}else{throwError(state,'tag suffix cannot contain exclamation marks');}}ch=state.input.charCodeAt(++state.position);}tagName=state.input.slice(_position,state.position);if(PATTERN_FLOW_INDICATORS.test(tagName)){throwError(state,'tag suffix cannot contain flow indicator characters');}}if(tagName&&!PATTERN_TAG_URI.test(tagName)){throwError(state,'tag name cannot contain such characters: '+tagName);}if(isVerbatim){state.tag=tagName;}else if(_hasOwnProperty.call(state.tagMap,tagHandle)){state.tag=state.tagMap[tagHandle]+tagName;}else if(tagHandle==='!'){state.tag='!'+tagName;}else if(tagHandle==='!!'){state.tag='tag:yaml.org,2002:'+tagName;}else{throwError(state,'undeclared tag handle \"'+tagHandle+'\"');}return true;}function readAnchorProperty(state){var _position,ch;ch=state.input.charCodeAt(state.position);if(ch!==0x26/* & */)return false;if(state.anchor!==null){throwError(state,'duplication of an anchor property');}ch=state.input.charCodeAt(++state.position);_position=state.position;while(ch!==0&&!is_WS_OR_EOL(ch)&&!is_FLOW_INDICATOR(ch)){ch=state.input.charCodeAt(++state.position);}if(state.position===_position){throwError(state,'name of an anchor node must contain at least one character');}state.anchor=state.input.slice(_position,state.position);return true;}function readAlias(state){var _position,alias,ch;ch=state.input.charCodeAt(state.position);if(ch!==0x2A/* * */)return false;ch=state.input.charCodeAt(++state.position);_position=state.position;while(ch!==0&&!is_WS_OR_EOL(ch)&&!is_FLOW_INDICATOR(ch)){ch=state.input.charCodeAt(++state.position);}if(state.position===_position){throwError(state,'name of an alias node must contain at least one character');}alias=state.input.slice(_position,state.position);if(!state.anchorMap.hasOwnProperty(alias)){throwError(state,'unidentified alias \"'+alias+'\"');}state.result=state.anchorMap[alias];skipSeparationSpace(state,true,-1);return true;}function composeNode(state,parentIndent,nodeContext,allowToSeek,allowCompact){var allowBlockStyles,allowBlockScalars,allowBlockCollections,indentStatus=1,// 1: this>parent, 0: this=parent, -1: this<parent\natNewLine=false,hasContent=false,typeIndex,typeQuantity,type,flowIndent,blockIndent;if(state.listener!==null){state.listener('open',state);}state.tag=null;state.anchor=null;state.kind=null;state.result=null;allowBlockStyles=allowBlockScalars=allowBlockCollections=CONTEXT_BLOCK_OUT===nodeContext||CONTEXT_BLOCK_IN===nodeContext;if(allowToSeek){if(skipSeparationSpace(state,true,-1)){atNewLine=true;if(state.lineIndent>parentIndent){indentStatus=1;}else if(state.lineIndent===parentIndent){indentStatus=0;}else if(state.lineIndent<parentIndent){indentStatus=-1;}}}if(indentStatus===1){while(readTagProperty(state)||readAnchorProperty(state)){if(skipSeparationSpace(state,true,-1)){atNewLine=true;allowBlockCollections=allowBlockStyles;if(state.lineIndent>parentIndent){indentStatus=1;}else if(state.lineIndent===parentIndent){indentStatus=0;}else if(state.lineIndent<parentIndent){indentStatus=-1;}}else{allowBlockCollections=false;}}}if(allowBlockCollections){allowBlockCollections=atNewLine||allowCompact;}if(indentStatus===1||CONTEXT_BLOCK_OUT===nodeContext){if(CONTEXT_FLOW_IN===nodeContext||CONTEXT_FLOW_OUT===nodeContext){flowIndent=parentIndent;}else{flowIndent=parentIndent+1;}blockIndent=state.position-state.lineStart;if(indentStatus===1){if(allowBlockCollections&&(readBlockSequence(state,blockIndent)||readBlockMapping(state,blockIndent,flowIndent))||readFlowCollection(state,flowIndent)){hasContent=true;}else{if(allowBlockScalars&&readBlockScalar(state,flowIndent)||readSingleQuotedScalar(state,flowIndent)||readDoubleQuotedScalar(state,flowIndent)){hasContent=true;}else if(readAlias(state)){hasContent=true;if(state.tag!==null||state.anchor!==null){throwError(state,'alias node should not have any properties');}}else if(readPlainScalar(state,flowIndent,CONTEXT_FLOW_IN===nodeContext)){hasContent=true;if(state.tag===null){state.tag='?';}}if(state.anchor!==null){state.anchorMap[state.anchor]=state.result;}}}else if(indentStatus===0){// Special case: block sequences are allowed to have same indentation level as the parent.\n// http://www.yaml.org/spec/1.2/spec.html#id2799784\nhasContent=allowBlockCollections&&readBlockSequence(state,blockIndent);}}if(state.tag!==null&&state.tag!=='!'){if(state.tag==='?'){for(typeIndex=0,typeQuantity=state.implicitTypes.length;typeIndex<typeQuantity;typeIndex+=1){type=state.implicitTypes[typeIndex];// Implicit resolving is not allowed for non-scalar types, and '?'\n// non-specific tag is only assigned to plain scalars. So, it isn't\n// needed to check for 'kind' conformity.\nif(type.resolve(state.result)){// `state.result` updated in resolver if matched\nstate.result=type.construct(state.result);state.tag=type.tag;if(state.anchor!==null){state.anchorMap[state.anchor]=state.result;}break;}}}else if(_hasOwnProperty.call(state.typeMap[state.kind||'fallback'],state.tag)){type=state.typeMap[state.kind||'fallback'][state.tag];if(state.result!==null&&type.kind!==state.kind){throwError(state,'unacceptable node kind for !<'+state.tag+'> tag; it should be \"'+type.kind+'\", not \"'+state.kind+'\"');}if(!type.resolve(state.result)){// `state.result` updated in resolver if matched\nthrowError(state,'cannot resolve a node with !<'+state.tag+'> explicit tag');}else{state.result=type.construct(state.result);if(state.anchor!==null){state.anchorMap[state.anchor]=state.result;}}}else{throwError(state,'unknown tag !<'+state.tag+'>');}}if(state.listener!==null){state.listener('close',state);}return state.tag!==null||state.anchor!==null||hasContent;}function readDocument(state){var documentStart=state.position,_position,directiveName,directiveArgs,hasDirectives=false,ch;state.version=null;state.checkLineBreaks=state.legacy;state.tagMap={};state.anchorMap={};while((ch=state.input.charCodeAt(state.position))!==0){skipSeparationSpace(state,true,-1);ch=state.input.charCodeAt(state.position);if(state.lineIndent>0||ch!==0x25/* % */){break;}hasDirectives=true;ch=state.input.charCodeAt(++state.position);_position=state.position;while(ch!==0&&!is_WS_OR_EOL(ch)){ch=state.input.charCodeAt(++state.position);}directiveName=state.input.slice(_position,state.position);directiveArgs=[];if(directiveName.length<1){throwError(state,'directive name must not be less than one character in length');}while(ch!==0){while(is_WHITE_SPACE(ch)){ch=state.input.charCodeAt(++state.position);}if(ch===0x23/* # */){do{ch=state.input.charCodeAt(++state.position);}while(ch!==0&&!is_EOL(ch));break;}if(is_EOL(ch))break;_position=state.position;while(ch!==0&&!is_WS_OR_EOL(ch)){ch=state.input.charCodeAt(++state.position);}directiveArgs.push(state.input.slice(_position,state.position));}if(ch!==0)readLineBreak(state);if(_hasOwnProperty.call(directiveHandlers,directiveName)){directiveHandlers[directiveName](state,directiveName,directiveArgs);}else{throwWarning(state,'unknown document directive \"'+directiveName+'\"');}}skipSeparationSpace(state,true,-1);if(state.lineIndent===0&&state.input.charCodeAt(state.position)===0x2D/* - */&&state.input.charCodeAt(state.position+1)===0x2D/* - */&&state.input.charCodeAt(state.position+2)===0x2D/* - */){state.position+=3;skipSeparationSpace(state,true,-1);}else if(hasDirectives){throwError(state,'directives end mark is expected');}composeNode(state,state.lineIndent-1,CONTEXT_BLOCK_OUT,false,true);skipSeparationSpace(state,true,-1);if(state.checkLineBreaks&&PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart,state.position))){throwWarning(state,'non-ASCII line breaks are interpreted as content');}state.documents.push(state.result);if(state.position===state.lineStart&&testDocumentSeparator(state)){if(state.input.charCodeAt(state.position)===0x2E/* . */){state.position+=3;skipSeparationSpace(state,true,-1);}return;}if(state.position<state.length-1){throwError(state,'end of the stream or a document separator is expected');}else{return;}}function loadDocuments(input,options){input=String(input);options=options||{};if(input.length!==0){// Add tailing `\\n` if not exists\nif(input.charCodeAt(input.length-1)!==0x0A/* LF */&&input.charCodeAt(input.length-1)!==0x0D/* CR */){input+='\\n';}// Strip BOM\nif(input.charCodeAt(0)===0xFEFF){input=input.slice(1);}}var state=new State(input,options);// Use 0 as string terminator. That significantly simplifies bounds check.\nstate.input+='\\0';while(state.input.charCodeAt(state.position)===0x20/* Space */){state.lineIndent+=1;state.position+=1;}while(state.position<state.length-1){readDocument(state);}return state.documents;}function loadAll$1(input,iterator,options){var documents=loadDocuments(input,options),index,length;for(index=0,length=documents.length;index<length;index+=1){iterator(documents[index]);}}function load$1(input,options){var documents=loadDocuments(input,options);if(documents.length===0){/*eslint-disable no-undefined*/return undefined;}else if(documents.length===1){return documents[0];}throw new YAMLException$1('expected a single document in the stream, but found more');}function safeLoadAll$1(input,output,options){loadAll$1(input,output,common.extend({schema:DEFAULT_SAFE_SCHEMA$1},options));}function safeLoad$1(input,options){return load$1(input,common.extend({schema:DEFAULT_SAFE_SCHEMA$1},options));}var loadAll_1=loadAll$1;var load_1=load$1;var safeLoadAll_1=safeLoadAll$1;var safeLoad_1=safeLoad$1;var loader$1={loadAll:loadAll_1,load:load_1,safeLoadAll:safeLoadAll_1,safeLoad:safeLoad_1};/*eslint-disable no-use-before-define*/var common$7=common$1;var YAMLException$5=exception;var DEFAULT_FULL_SCHEMA$2=default_full;var DEFAULT_SAFE_SCHEMA$2=default_safe;var _toString$2=Object.prototype.toString;var _hasOwnProperty$3=Object.prototype.hasOwnProperty;var CHAR_TAB=0x09;/* Tab */var CHAR_LINE_FEED=0x0A;/* LF */var CHAR_SPACE=0x20;/* Space */var CHAR_EXCLAMATION=0x21;/* ! */var CHAR_DOUBLE_QUOTE=0x22;/* \" */var CHAR_SHARP=0x23;/* # */var CHAR_PERCENT=0x25;/* % */var CHAR_AMPERSAND=0x26;/* & */var CHAR_SINGLE_QUOTE=0x27;/* ' */var CHAR_ASTERISK=0x2A;/* * */var CHAR_COMMA=0x2C;/* , */var CHAR_MINUS=0x2D;/* - */var CHAR_COLON=0x3A;/* : */var CHAR_GREATER_THAN=0x3E;/* > */var CHAR_QUESTION=0x3F;/* ? */var CHAR_COMMERCIAL_AT=0x40;/* @ */var CHAR_LEFT_SQUARE_BRACKET=0x5B;/* [ */var CHAR_RIGHT_SQUARE_BRACKET=0x5D;/* ] */var CHAR_GRAVE_ACCENT=0x60;/* ` */var CHAR_LEFT_CURLY_BRACKET=0x7B;/* { */var CHAR_VERTICAL_LINE=0x7C;/* | */var CHAR_RIGHT_CURLY_BRACKET=0x7D;/* } */var ESCAPE_SEQUENCES={};ESCAPE_SEQUENCES[0x00]='\\\\0';ESCAPE_SEQUENCES[0x07]='\\\\a';ESCAPE_SEQUENCES[0x08]='\\\\b';ESCAPE_SEQUENCES[0x09]='\\\\t';ESCAPE_SEQUENCES[0x0A]='\\\\n';ESCAPE_SEQUENCES[0x0B]='\\\\v';ESCAPE_SEQUENCES[0x0C]='\\\\f';ESCAPE_SEQUENCES[0x0D]='\\\\r';ESCAPE_SEQUENCES[0x1B]='\\\\e';ESCAPE_SEQUENCES[0x22]='\\\\\"';ESCAPE_SEQUENCES[0x5C]='\\\\\\\\';ESCAPE_SEQUENCES[0x85]='\\\\N';ESCAPE_SEQUENCES[0xA0]='\\\\_';ESCAPE_SEQUENCES[0x2028]='\\\\L';ESCAPE_SEQUENCES[0x2029]='\\\\P';var DEPRECATED_BOOLEANS_SYNTAX=['y','Y','yes','Yes','YES','on','On','ON','n','N','no','No','NO','off','Off','OFF'];function compileStyleMap(schema,map){var result,keys,index,length,tag,style,type;if(map===null)return{};result={};keys=Object.keys(map);for(index=0,length=keys.length;index<length;index+=1){tag=keys[index];style=String(map[tag]);if(tag.slice(0,2)==='!!'){tag='tag:yaml.org,2002:'+tag.slice(2);}type=schema.compiledTypeMap['fallback'][tag];if(type&&_hasOwnProperty$3.call(type.styleAliases,style)){style=type.styleAliases[style];}result[tag]=style;}return result;}function encodeHex(character){var string,handle,length;string=character.toString(16).toUpperCase();if(character<=0xFF){handle='x';length=2;}else if(character<=0xFFFF){handle='u';length=4;}else if(character<=0xFFFFFFFF){handle='U';length=8;}else{throw new YAMLException$5('code point within a string may not be greater than 0xFFFFFFFF');}return'\\\\'+handle+common$7.repeat('0',length-string.length)+string;}function State$1(options){this.schema=options['schema']||DEFAULT_FULL_SCHEMA$2;this.indent=Math.max(1,options['indent']||2);this.skipInvalid=options['skipInvalid']||false;this.flowLevel=common$7.isNothing(options['flowLevel'])?-1:options['flowLevel'];this.styleMap=compileStyleMap(this.schema,options['styles']||null);this.sortKeys=options['sortKeys']||false;this.lineWidth=options['lineWidth']||80;this.noRefs=options['noRefs']||false;this.noCompatMode=options['noCompatMode']||false;this.implicitTypes=this.schema.compiledImplicit;this.explicitTypes=this.schema.compiledExplicit;this.tag=null;this.result='';this.duplicates=[];this.usedDuplicates=null;}// Indents every line in a string. Empty lines (\\n only) are not indented.\nfunction indentString(string,spaces){var ind=common$7.repeat(' ',spaces),position=0,next=-1,result='',line,length=string.length;while(position<length){next=string.indexOf('\\n',position);if(next===-1){line=string.slice(position);position=length;}else{line=string.slice(position,next+1);position=next+1;}if(line.length&&line!=='\\n')result+=ind;result+=line;}return result;}function generateNextLine(state,level){return'\\n'+common$7.repeat(' ',state.indent*level);}function testImplicitResolving(state,str){var index,length,type;for(index=0,length=state.implicitTypes.length;index<length;index+=1){type=state.implicitTypes[index];if(type.resolve(str)){return true;}}return false;}// [33] s-white ::= s-space | s-tab\nfunction isWhitespace(c){return c===CHAR_SPACE||c===CHAR_TAB;}// Returns true if the character can be printed without escaping.\n// From YAML 1.2: \"any allowed characters known to be non-printable\n// should also be escaped. [However,] This isn’t mandatory\"\n// Derived from nb-char - \\t - #x85 - #xA0 - #x2028 - #x2029.\nfunction isPrintable(c){return 0x00020<=c&&c<=0x00007E||0x000A1<=c&&c<=0x00D7FF&&c!==0x2028&&c!==0x2029||0x0E000<=c&&c<=0x00FFFD&&c!==0xFEFF/* BOM */||0x10000<=c&&c<=0x10FFFF;}// Simplified test for values allowed after the first character in plain style.\nfunction isPlainSafe(c){// Uses a subset of nb-char - c-flow-indicator - \":\" - \"#\"\n// where nb-char ::= c-printable - b-char - c-byte-order-mark.\nreturn isPrintable(c)&&c!==0xFEFF// - c-flow-indicator\n&&c!==CHAR_COMMA&&c!==CHAR_LEFT_SQUARE_BRACKET&&c!==CHAR_RIGHT_SQUARE_BRACKET&&c!==CHAR_LEFT_CURLY_BRACKET&&c!==CHAR_RIGHT_CURLY_BRACKET// - \":\" - \"#\"\n&&c!==CHAR_COLON&&c!==CHAR_SHARP;}// Simplified test for values allowed as the first character in plain style.\nfunction isPlainSafeFirst(c){// Uses a subset of ns-char - c-indicator\n// where ns-char = nb-char - s-white.\nreturn isPrintable(c)&&c!==0xFEFF&&!isWhitespace(c// - s-white\n// - (c-indicator ::=\n// “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}”\n)&&c!==CHAR_MINUS&&c!==CHAR_QUESTION&&c!==CHAR_COLON&&c!==CHAR_COMMA&&c!==CHAR_LEFT_SQUARE_BRACKET&&c!==CHAR_RIGHT_SQUARE_BRACKET&&c!==CHAR_LEFT_CURLY_BRACKET&&c!==CHAR_RIGHT_CURLY_BRACKET// | “#” | “&” | “*” | “!” | “|” | “>” | “'” | “\"”\n&&c!==CHAR_SHARP&&c!==CHAR_AMPERSAND&&c!==CHAR_ASTERISK&&c!==CHAR_EXCLAMATION&&c!==CHAR_VERTICAL_LINE&&c!==CHAR_GREATER_THAN&&c!==CHAR_SINGLE_QUOTE&&c!==CHAR_DOUBLE_QUOTE// | “%” | “@” | “`”)\n&&c!==CHAR_PERCENT&&c!==CHAR_COMMERCIAL_AT&&c!==CHAR_GRAVE_ACCENT;}var STYLE_PLAIN=1;var STYLE_SINGLE=2;var STYLE_LITERAL=3;var STYLE_FOLDED=4;var STYLE_DOUBLE=5;// Determines which scalar styles are possible and returns the preferred style.\n// lineWidth = -1 => no limit.\n// Pre-conditions: str.length > 0.\n// Post-conditions:\n//    STYLE_PLAIN or STYLE_SINGLE => no \\n are in the string.\n//    STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1).\n//    STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1).\nfunction chooseScalarStyle(string,singleLineOnly,indentPerLevel,lineWidth,testAmbiguousType){var i;var char;var hasLineBreak=false;var hasFoldableLine=false;// only checked if shouldTrackWidth\nvar shouldTrackWidth=lineWidth!==-1;var previousLineBreak=-1;// count the first line correctly\nvar plain=isPlainSafeFirst(string.charCodeAt(0))&&!isWhitespace(string.charCodeAt(string.length-1));if(singleLineOnly){// Case: no block styles.\n// Check for disallowed characters to rule out plain and single.\nfor(i=0;i<string.length;i++){char=string.charCodeAt(i);if(!isPrintable(char)){return STYLE_DOUBLE;}plain=plain&&isPlainSafe(char);}}else{// Case: block styles permitted.\nfor(i=0;i<string.length;i++){char=string.charCodeAt(i);if(char===CHAR_LINE_FEED){hasLineBreak=true;// Check if any line can be folded.\nif(shouldTrackWidth){hasFoldableLine=hasFoldableLine||// Foldable line = too long, and not more-indented.\ni-previousLineBreak-1>lineWidth&&string[previousLineBreak+1]!==' ';previousLineBreak=i;}}else if(!isPrintable(char)){return STYLE_DOUBLE;}plain=plain&&isPlainSafe(char);}// in case the end is missing a \\n\nhasFoldableLine=hasFoldableLine||shouldTrackWidth&&i-previousLineBreak-1>lineWidth&&string[previousLineBreak+1]!==' ';}// Although every style can represent \\n without escaping, prefer block styles\n// for multiline, since they're more readable and they don't add empty lines.\n// Also prefer folding a super-long line.\nif(!hasLineBreak&&!hasFoldableLine){// Strings interpretable as another type have to be quoted;\n// e.g. the string 'true' vs. the boolean true.\nreturn plain&&!testAmbiguousType(string)?STYLE_PLAIN:STYLE_SINGLE;}// Edge case: block indentation indicator can only have one digit.\nif(string[0]===' '&&indentPerLevel>9){return STYLE_DOUBLE;}// At this point we know block styles are valid.\n// Prefer literal style unless we want to fold.\nreturn hasFoldableLine?STYLE_FOLDED:STYLE_LITERAL;}// Note: line breaking/folding is implemented for only the folded style.\n// NB. We drop the last trailing newline (if any) of a returned block scalar\n//  since the dumper adds its own newline. This always works:\n//    • No ending newline => unaffected; already using strip \"-\" chomping.\n//    • Ending newline    => removed then restored.\n//  Importantly, this keeps the \"+\" chomp indicator from gaining an extra line.\nfunction writeScalar(state,string,level,iskey){state.dump=function(){if(string.length===0){return\"''\";}if(!state.noCompatMode&&DEPRECATED_BOOLEANS_SYNTAX.indexOf(string)!==-1){return\"'\"+string+\"'\";}var indent=state.indent*Math.max(1,level);// no 0-indent scalars\n// As indentation gets deeper, let the width decrease monotonically\n// to the lower bound min(state.lineWidth, 40).\n// Note that this implies\n//  state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound.\n//  state.lineWidth > 40 + state.indent: width decreases until the lower bound.\n// This behaves better than a constant minimum width which disallows narrower options,\n// or an indent threshold which causes the width to suddenly increase.\nvar lineWidth=state.lineWidth===-1?-1:Math.max(Math.min(state.lineWidth,40),state.lineWidth-indent);// Without knowing if keys are implicit/explicit, assume implicit for safety.\nvar singleLineOnly=iskey// No block styles in flow mode.\n||state.flowLevel>-1&&level>=state.flowLevel;function testAmbiguity(string){return testImplicitResolving(state,string);}switch(chooseScalarStyle(string,singleLineOnly,state.indent,lineWidth,testAmbiguity)){case STYLE_PLAIN:return string;case STYLE_SINGLE:return\"'\"+string.replace(/'/g,\"''\")+\"'\";case STYLE_LITERAL:return'|'+blockHeader(string,state.indent)+dropEndingNewline(indentString(string,indent));case STYLE_FOLDED:return'>'+blockHeader(string,state.indent)+dropEndingNewline(indentString(foldString(string,lineWidth),indent));case STYLE_DOUBLE:return'\"'+escapeString(string,lineWidth)+'\"';default:throw new YAMLException$5('impossible error: invalid scalar style');}}();}// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9.\nfunction blockHeader(string,indentPerLevel){var indentIndicator=string[0]===' '?String(indentPerLevel):'';// note the special case: the string '\\n' counts as a \"trailing\" empty line.\nvar clip=string[string.length-1]==='\\n';var keep=clip&&(string[string.length-2]==='\\n'||string==='\\n');var chomp=keep?'+':clip?'':'-';return indentIndicator+chomp+'\\n';}// (See the note for writeScalar.)\nfunction dropEndingNewline(string){return string[string.length-1]==='\\n'?string.slice(0,-1):string;}// Note: a long line without a suitable break point will exceed the width limit.\n// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0.\nfunction foldString(string,width){// In folded style, $k$ consecutive newlines output as $k+1$ newlines—\n// unless they're before or after a more-indented line, or at the very\n// beginning or end, in which case $k$ maps to $k$.\n// Therefore, parse each chunk as newline(s) followed by a content line.\nvar lineRe=/(\\n+)([^\\n]*)/g;// first line (possibly an empty line)\nvar result=function(){var nextLF=string.indexOf('\\n');nextLF=nextLF!==-1?nextLF:string.length;lineRe.lastIndex=nextLF;return foldLine(string.slice(0,nextLF),width);}();// If we haven't reached the first content line yet, don't add an extra \\n.\nvar prevMoreIndented=string[0]==='\\n'||string[0]===' ';var moreIndented;// rest of the lines\nvar match;while(match=lineRe.exec(string)){var prefix=match[1],line=match[2];moreIndented=line[0]===' ';result+=prefix+(!prevMoreIndented&&!moreIndented&&line!==''?'\\n':'')+foldLine(line,width);prevMoreIndented=moreIndented;}return result;}// Greedy line breaking.\n// Picks the longest line under the limit each time,\n// otherwise settles for the shortest line over the limit.\n// NB. More-indented lines *cannot* be folded, as that would add an extra \\n.\nfunction foldLine(line,width){if(line===''||line[0]===' ')return line;// Since a more-indented line adds a \\n, breaks can't be followed by a space.\nvar breakRe=/ [^ ]/g;// note: the match index will always be <= length-2.\nvar match;// start is an inclusive index. end, curr, and next are exclusive.\nvar start=0,end,curr=0,next=0;var result='';// Invariants: 0 <= start <= length-1.\n//   0 <= curr <= next <= max(0, length-2). curr - start <= width.\n// Inside the loop:\n//   A match implies length >= 2, so curr and next are <= length-2.\nwhile(match=breakRe.exec(line)){next=match.index;// maintain invariant: curr - start <= width\nif(next-start>width){end=curr>start?curr:next;// derive end <= length-2\nresult+='\\n'+line.slice(start,end);// skip the space that was output as \\n\nstart=end+1;// derive start <= length-1\n}curr=next;}// By the invariants, start <= length-1, so there is something left over.\n// It is either the whole string or a part starting from non-whitespace.\nresult+='\\n';// Insert a break if the remainder is too long and there is a break available.\nif(line.length-start>width&&curr>start){result+=line.slice(start,curr)+'\\n'+line.slice(curr+1);}else{result+=line.slice(start);}return result.slice(1);// drop extra \\n joiner\n}// Escapes a double-quoted string.\nfunction escapeString(string){var result='';var char;var escapeSeq;for(var i=0;i<string.length;i++){char=string.charCodeAt(i);escapeSeq=ESCAPE_SEQUENCES[char];result+=!escapeSeq&&isPrintable(char)?string[i]:escapeSeq||encodeHex(char);}return result;}function writeFlowSequence(state,level,object){var _result='',_tag=state.tag,index,length;for(index=0,length=object.length;index<length;index+=1){// Write only valid elements.\nif(writeNode(state,level,object[index],false,false)){if(index!==0)_result+=', ';_result+=state.dump;}}state.tag=_tag;state.dump='['+_result+']';}function writeBlockSequence(state,level,object,compact){var _result='',_tag=state.tag,index,length;for(index=0,length=object.length;index<length;index+=1){// Write only valid elements.\nif(writeNode(state,level+1,object[index],true,true)){if(!compact||index!==0){_result+=generateNextLine(state,level);}if(state.dump&&CHAR_LINE_FEED===state.dump.charCodeAt(0)){_result+='-';}else{_result+='- ';}_result+=state.dump;}}state.tag=_tag;state.dump=_result||'[]';// Empty sequence if no valid values.\n}function writeFlowMapping(state,level,object){var _result='',_tag=state.tag,objectKeyList=Object.keys(object),index,length,objectKey,objectValue,pairBuffer;for(index=0,length=objectKeyList.length;index<length;index+=1){pairBuffer='';if(index!==0)pairBuffer+=', ';objectKey=objectKeyList[index];objectValue=object[objectKey];if(!writeNode(state,level,objectKey,false,false)){continue;// Skip this pair because of invalid key;\n}if(state.dump.length>1024)pairBuffer+='? ';pairBuffer+=state.dump+': ';if(!writeNode(state,level,objectValue,false,false)){continue;// Skip this pair because of invalid value.\n}pairBuffer+=state.dump;// Both key and value are valid.\n_result+=pairBuffer;}state.tag=_tag;state.dump='{'+_result+'}';}function writeBlockMapping(state,level,object,compact){var _result='',_tag=state.tag,objectKeyList=Object.keys(object),index,length,objectKey,objectValue,explicitPair,pairBuffer;// Allow sorting keys so that the output file is deterministic\nif(state.sortKeys===true){// Default sorting\nobjectKeyList.sort();}else if(typeof state.sortKeys==='function'){// Custom sort function\nobjectKeyList.sort(state.sortKeys);}else if(state.sortKeys){// Something is wrong\nthrow new YAMLException$5('sortKeys must be a boolean or a function');}for(index=0,length=objectKeyList.length;index<length;index+=1){pairBuffer='';if(!compact||index!==0){pairBuffer+=generateNextLine(state,level);}objectKey=objectKeyList[index];objectValue=object[objectKey];if(!writeNode(state,level+1,objectKey,true,true,true)){continue;// Skip this pair because of invalid key.\n}explicitPair=state.tag!==null&&state.tag!=='?'||state.dump&&state.dump.length>1024;if(explicitPair){if(state.dump&&CHAR_LINE_FEED===state.dump.charCodeAt(0)){pairBuffer+='?';}else{pairBuffer+='? ';}}pairBuffer+=state.dump;if(explicitPair){pairBuffer+=generateNextLine(state,level);}if(!writeNode(state,level+1,objectValue,true,explicitPair)){continue;// Skip this pair because of invalid value.\n}if(state.dump&&CHAR_LINE_FEED===state.dump.charCodeAt(0)){pairBuffer+=':';}else{pairBuffer+=': ';}pairBuffer+=state.dump;// Both key and value are valid.\n_result+=pairBuffer;}state.tag=_tag;state.dump=_result||'{}';// Empty mapping if no valid pairs.\n}function detectType(state,object,explicit){var _result,typeList,index,length,type,style;typeList=explicit?state.explicitTypes:state.implicitTypes;for(index=0,length=typeList.length;index<length;index+=1){type=typeList[index];if((type.instanceOf||type.predicate)&&(!type.instanceOf||(typeof object==='undefined'?'undefined':_typeof(object))==='object'&&object instanceof type.instanceOf)&&(!type.predicate||type.predicate(object))){state.tag=explicit?type.tag:'?';if(type.represent){style=state.styleMap[type.tag]||type.defaultStyle;if(_toString$2.call(type.represent)==='[object Function]'){_result=type.represent(object,style);}else if(_hasOwnProperty$3.call(type.represent,style)){_result=type.represent[style](object,style);}else{throw new YAMLException$5('!<'+type.tag+'> tag resolver accepts not \"'+style+'\" style');}state.dump=_result;}return true;}}return false;}// Serializes `object` and writes it to global `result`.\n// Returns true on success, or false on invalid object.\n//\nfunction writeNode(state,level,object,block,compact,iskey){state.tag=null;state.dump=object;if(!detectType(state,object,false)){detectType(state,object,true);}var type=_toString$2.call(state.dump);if(block){block=state.flowLevel<0||state.flowLevel>level;}var objectOrArray=type==='[object Object]'||type==='[object Array]',duplicateIndex,duplicate;if(objectOrArray){duplicateIndex=state.duplicates.indexOf(object);duplicate=duplicateIndex!==-1;}if(state.tag!==null&&state.tag!=='?'||duplicate||state.indent!==2&&level>0){compact=false;}if(duplicate&&state.usedDuplicates[duplicateIndex]){state.dump='*ref_'+duplicateIndex;}else{if(objectOrArray&&duplicate&&!state.usedDuplicates[duplicateIndex]){state.usedDuplicates[duplicateIndex]=true;}if(type==='[object Object]'){if(block&&Object.keys(state.dump).length!==0){writeBlockMapping(state,level,state.dump,compact);if(duplicate){state.dump='&ref_'+duplicateIndex+state.dump;}}else{writeFlowMapping(state,level,state.dump);if(duplicate){state.dump='&ref_'+duplicateIndex+' '+state.dump;}}}else if(type==='[object Array]'){if(block&&state.dump.length!==0){writeBlockSequence(state,level,state.dump,compact);if(duplicate){state.dump='&ref_'+duplicateIndex+state.dump;}}else{writeFlowSequence(state,level,state.dump);if(duplicate){state.dump='&ref_'+duplicateIndex+' '+state.dump;}}}else if(type==='[object String]'){if(state.tag!=='?'){writeScalar(state,state.dump,level,iskey);}}else{if(state.skipInvalid)return false;throw new YAMLException$5('unacceptable kind of an object to dump '+type);}if(state.tag!==null&&state.tag!=='?'){state.dump='!<'+state.tag+'> '+state.dump;}}return true;}function getDuplicateReferences(object,state){var objects=[],duplicatesIndexes=[],index,length;inspectNode(object,objects,duplicatesIndexes);for(index=0,length=duplicatesIndexes.length;index<length;index+=1){state.duplicates.push(objects[duplicatesIndexes[index]]);}state.usedDuplicates=new Array(length);}function inspectNode(object,objects,duplicatesIndexes){var objectKeyList,index,length;if(object!==null&&(typeof object==='undefined'?'undefined':_typeof(object))==='object'){index=objects.indexOf(object);if(index!==-1){if(duplicatesIndexes.indexOf(index)===-1){duplicatesIndexes.push(index);}}else{objects.push(object);if(Array.isArray(object)){for(index=0,length=object.length;index<length;index+=1){inspectNode(object[index],objects,duplicatesIndexes);}}else{objectKeyList=Object.keys(object);for(index=0,length=objectKeyList.length;index<length;index+=1){inspectNode(object[objectKeyList[index]],objects,duplicatesIndexes);}}}}}function dump$1(input,options){options=options||{};var state=new State$1(options);if(!state.noRefs)getDuplicateReferences(input,state);if(writeNode(state,0,input,true,true))return state.dump+'\\n';return'';}function safeDump$1(input,options){return dump$1(input,common$7.extend({schema:DEFAULT_SAFE_SCHEMA$2},options));}var dump_1=dump$1;var safeDump_1=safeDump$1;var dumper$1={dump:dump_1,safeDump:safeDump_1};var loader=loader$1;var dumper=dumper$1;function deprecated$3(name){return function(){throw new Error('Function '+name+' is deprecated and cannot be used.');};}var Type=type;var Schema=schema;var FAILSAFE_SCHEMA=failsafe;var JSON_SCHEMA=json;var CORE_SCHEMA=core;var DEFAULT_SAFE_SCHEMA=default_safe;var DEFAULT_FULL_SCHEMA=default_full;var load=loader.load;var loadAll=loader.loadAll;var safeLoad=loader.safeLoad;var safeLoadAll=loader.safeLoadAll;var dump=dumper.dump;var safeDump=dumper.safeDump;var YAMLException=exception;// Deprecated schema names from JS-YAML 2.0.x\nvar MINIMAL_SCHEMA=failsafe;var SAFE_SCHEMA=default_safe;var DEFAULT_SCHEMA=default_full;// Deprecated functions from JS-YAML 1.x.x\nvar scan=deprecated$3('scan');var parse$1=deprecated$3('parse');var compose=deprecated$3('compose');var addConstructor=deprecated$3('addConstructor');var jsYaml={Type:Type,Schema:Schema,FAILSAFE_SCHEMA:FAILSAFE_SCHEMA,JSON_SCHEMA:JSON_SCHEMA,CORE_SCHEMA:CORE_SCHEMA,DEFAULT_SAFE_SCHEMA:DEFAULT_SAFE_SCHEMA,DEFAULT_FULL_SCHEMA:DEFAULT_FULL_SCHEMA,load:load,loadAll:loadAll,safeLoad:safeLoad,safeLoadAll:safeLoadAll,dump:dump,safeDump:safeDump,YAMLException:YAMLException,MINIMAL_SCHEMA:MINIMAL_SCHEMA,SAFE_SCHEMA:SAFE_SCHEMA,DEFAULT_SCHEMA:DEFAULT_SCHEMA,scan:scan,parse:parse$1,compose:compose,addConstructor:addConstructor};var yaml$1=jsYaml;var index$56=yaml$1;var index$58=createCommonjsModule(function(module){'use strict';var Module=module$1;var path=require$$0$1;module.exports=function requireFromString(code,filename,opts){if((typeof filename==='undefined'?'undefined':_typeof(filename))==='object'){opts=filename;filename=undefined;}opts=opts||{};filename=filename||'';opts.appendPaths=opts.appendPaths||[];opts.prependPaths=opts.prependPaths||[];if(typeof code!=='string'){throw new Error('code must be a string, not '+(typeof code==='undefined'?'undefined':_typeof(code)));}var paths=Module._nodeModulePaths(path.dirname(filename));var m=new Module(filename,module.parent);m.filename=filename;m.paths=[].concat(opts.prependPaths).concat(paths).concat(opts.appendPaths);m._compile(code,filename);return m.exports;};});var yaml=index$56;var requireFromString=index$58;var readFile$3=readFile$1;var parseJson$2=parseJson_1;var loadRc$1=function loadRc$1(filepath,options){return loadExtensionlessRc().then(function(result){if(result)return result;if(options.rcExtensions)return loadRcWithExtensions();return null;});function loadExtensionlessRc(){return readRcFile().then(function(content){if(!content)return null;var pasedConfig=options.rcStrictJson?parseJson$2(content,filepath):yaml.safeLoad(content,{filename:filepath});return{config:pasedConfig,filepath:filepath};});}function loadRcWithExtensions(){return readRcFile('json').then(function(content){if(content){var successFilepath=filepath+'.json';return{config:parseJson$2(content,successFilepath),filepath:successFilepath};}// If not content was found in the file with extension,\n// try the next possible extension\nreturn readRcFile('yaml');}).then(function(content){if(content){// If the previous check returned an object with a config\n// property, then it succeeded and this step can be skipped\nif(content.config)return content;// If it just returned a string, then *this* check succeeded\nvar successFilepath=filepath+'.yaml';return{config:yaml.safeLoad(content,{filename:successFilepath}),filepath:successFilepath};}return readRcFile('yml');}).then(function(content){if(content){if(content.config)return content;var successFilepath=filepath+'.yml';return{config:yaml.safeLoad(content,{filename:successFilepath}),filepath:successFilepath};}return readRcFile('js');}).then(function(content){if(content){if(content.config)return content;var successFilepath=filepath+'.js';return{config:requireFromString(content,successFilepath),filepath:successFilepath};}return null;});}function readRcFile(extension){var filepathWithExtension=extension?filepath+'.'+extension:filepath;return readFile$3(filepathWithExtension);}};var requireFromString$1=index$58;var readFile$4=readFile$1;var loadJs$1=function loadJs$1(filepath){return readFile$4(filepath).then(function(content){if(!content)return null;return{config:requireFromString$1(content,filepath),filepath:filepath};});};var yaml$2=index$56;var requireFromString$2=index$58;var readFile$5=readFile$1;var parseJson$3=parseJson_1;var loadDefinedFile$1=function loadDefinedFile$1(filepath,options){return readFile$5(filepath,{throwNotFound:true}).then(function(content){var parsedConfig=function(){switch(options.format){case'json':return parseJson$3(content,filepath);case'yaml':return yaml$2.safeLoad(content,{filename:filepath});case'js':return requireFromString$2(content,filepath);default:return tryAllParsing(content,filepath);}}();if(!parsedConfig){throw new Error('Failed to parse \"'+filepath+'\" as JSON, JS, or YAML.');}return{config:parsedConfig,filepath:filepath};});};function tryAllParsing(content,filepath){return tryYaml(content,filepath,function(){return tryRequire(content,filepath,function(){return null;});});}function tryYaml(content,filepath,cb){try{var result=yaml$2.safeLoad(content,{filename:filepath});if(typeof result==='string'){return cb();}return result;}catch(e){return cb();}}function tryRequire(content,filepath,cb){try{return requireFromString$2(content,filepath);}catch(e){return cb();}}var path$3=require$$0$1;var isDir=index$48;var loadPackageProp=loadPackageProp$1;var loadRc=loadRc$1;var loadJs=loadJs$1;var loadDefinedFile=loadDefinedFile$1;var createExplorer$1=function createExplorer$1(options){// These cache Promises that resolve with results, not the results themselves\nvar fileCache=options.cache?new Map():null;var directoryCache=options.cache?new Map():null;var transform=options.transform||identityPromise;function clearFileCache(){if(fileCache)fileCache.clear();}function clearDirectoryCache(){if(directoryCache)directoryCache.clear();}function clearCaches(){clearFileCache();clearDirectoryCache();}function load(searchPath,configPath){if(configPath){var absoluteConfigPath=path$3.resolve(process.cwd(),configPath);if(fileCache&&fileCache.has(absoluteConfigPath)){return fileCache.get(absoluteConfigPath);}var result=loadDefinedFile(absoluteConfigPath,options).then(transform);if(fileCache)fileCache.set(absoluteConfigPath,result);return result;}if(!searchPath)return Promise.resolve(null);var absoluteSearchPath=path$3.resolve(process.cwd(),searchPath);return isDirectory(absoluteSearchPath).then(function(searchPathIsDirectory){var directory=searchPathIsDirectory?absoluteSearchPath:path$3.dirname(absoluteSearchPath);return searchDirectory(directory);});}function searchDirectory(directory){if(directoryCache&&directoryCache.has(directory)){return directoryCache.get(directory);}var result=Promise.resolve().then(function(){if(!options.packageProp)return;return loadPackageProp(directory,options);}).then(function(result){if(result||!options.rc)return result;return loadRc(path$3.join(directory,options.rc),options);}).then(function(result){if(result||!options.js)return result;return loadJs(path$3.join(directory,options.js));}).then(function(result){if(result)return result;var splitPath=directory.split(path$3.sep);var nextDirectory=splitPath.length>1?splitPath.slice(0,-1).join(path$3.sep):null;if(!nextDirectory||directory===options.stopDir)return null;return searchDirectory(nextDirectory);}).then(transform);if(directoryCache)directoryCache.set(directory,result);return result;}return{load:load,clearFileCache:clearFileCache,clearDirectoryCache:clearDirectoryCache,clearCaches:clearCaches};};function isDirectory(filepath){return new Promise(function(resolve,reject){return isDir(filepath,function(err,dir){if(err)return reject(err);return resolve(dir);});});}function identityPromise(x){return Promise.resolve(x);}var path$2=require$$0$1;var oshomedir=index$42;var minimist=index$44;var assign=index$46;var createExplorer=createExplorer$1;var parsedCliArgs=minimist(process.argv);var index$40=function index$40(moduleName,options){options=assign({packageProp:moduleName,rc:'.'+moduleName+'rc',js:moduleName+'.config.js',argv:'config',rcStrictJson:false,stopDir:oshomedir(),cache:true},options);if(options.argv&&parsedCliArgs[options.argv]){options.configPath=path$2.resolve(parsedCliArgs[options.argv]);}return createExplorer(options);};var index$62=function index$62(xs,fn){var res=[];for(var i=0;i<xs.length;i++){var x=fn(xs[i],i);if(isArray(x))res.push.apply(res,x);else res.push(x);}return res;};var isArray=Array.isArray||function(xs){return Object.prototype.toString.call(xs)==='[object Array]';};var index$64=balanced$1;function balanced$1(a,b,str){if(a instanceof RegExp)a=maybeMatch(a,str);if(b instanceof RegExp)b=maybeMatch(b,str);var r=range(a,b,str);return r&&{start:r[0],end:r[1],pre:str.slice(0,r[0]),body:str.slice(r[0]+a.length,r[1]),post:str.slice(r[1]+b.length)};}function maybeMatch(reg,str){var m=str.match(reg);return m?m[0]:null;}balanced$1.range=range;function range(a,b,str){var begs,beg,left,right,result;var ai=str.indexOf(a);var bi=str.indexOf(b,ai+1);var i=ai;if(ai>=0&&bi>0){begs=[];left=str.length;while(i>=0&&!result){if(i==ai){begs.push(i);ai=str.indexOf(a,i+1);}else if(begs.length==1){result=[begs.pop(),bi];}else{beg=begs.pop();if(beg<left){left=beg;right=bi;}bi=str.indexOf(b,i+1);}i=ai<bi&&ai>=0?ai:bi;}if(begs.length){result=[left,right];}}return result;}var concatMap=index$62;var balanced=index$64;var index$60=expandTop;var escSlash='\\0SLASH'+Math.random()+'\\0';var escOpen='\\0OPEN'+Math.random()+'\\0';var escClose='\\0CLOSE'+Math.random()+'\\0';var escComma='\\0COMMA'+Math.random()+'\\0';var escPeriod='\\0PERIOD'+Math.random()+'\\0';function numeric(str){return parseInt(str,10)==str?parseInt(str,10):str.charCodeAt(0);}function escapeBraces(str){return str.split('\\\\\\\\').join(escSlash).split('\\\\{').join(escOpen).split('\\\\}').join(escClose).split('\\\\,').join(escComma).split('\\\\.').join(escPeriod);}function unescapeBraces(str){return str.split(escSlash).join('\\\\').split(escOpen).join('{').split(escClose).join('}').split(escComma).join(',').split(escPeriod).join('.');}// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str){if(!str)return[''];var parts=[];var m=balanced('{','}',str);if(!m)return str.split(',');var pre=m.pre;var body=m.body;var post=m.post;var p=pre.split(',');p[p.length-1]+='{'+body+'}';var postParts=parseCommaParts(post);if(post.length){p[p.length-1]+=postParts.shift();p.push.apply(p,postParts);}parts.push.apply(parts,p);return parts;}function expandTop(str){if(!str)return[];// I don't know why Bash 4.3 does this, but it does.\n// Anything starting with {} will have the first two bytes preserved\n// but *only* at the top level, so {},a}b will not expand to anything,\n// but a{},b}c will be expanded to [a}c,abc].\n// One could argue that this is a bug in Bash, but since the goal of\n// this module is to match Bash's rules, we escape a leading {}\nif(str.substr(0,2)==='{}'){str='\\\\{\\\\}'+str.substr(2);}return expand$1(escapeBraces(str),true).map(unescapeBraces);}function embrace(str){return'{'+str+'}';}function isPadded(el){return /^-?0\\d/.test(el);}function lte(i,y){return i<=y;}function gte(i,y){return i>=y;}function expand$1(str,isTop){var expansions=[];var m=balanced('{','}',str);if(!m||/\\$$/.test(m.pre))return[str];var isNumericSequence=/^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);var isAlphaSequence=/^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);var isSequence=isNumericSequence||isAlphaSequence;var isOptions=m.body.indexOf(',')>=0;if(!isSequence&&!isOptions){// {a},b}\nif(m.post.match(/,.*\\}/)){str=m.pre+'{'+m.body+escClose+m.post;return expand$1(str);}return[str];}var n;if(isSequence){n=m.body.split(/\\.\\./);}else{n=parseCommaParts(m.body);if(n.length===1){// x{{a,b}}y ==> x{a}y x{b}y\nn=expand$1(n[0],false).map(embrace);if(n.length===1){var post=m.post.length?expand$1(m.post,false):[''];return post.map(function(p){return m.pre+n[0]+p;});}}}// at this point, n is the parts, and we know it's not a comma set\n// with a single entry.\n// no need to expand pre, since it is guaranteed to be free of brace-sets\nvar pre=m.pre;var post=m.post.length?expand$1(m.post,false):[''];var N;if(isSequence){var x=numeric(n[0]);var y=numeric(n[1]);var width=Math.max(n[0].length,n[1].length);var incr=n.length==3?Math.abs(numeric(n[2])):1;var test=lte;var reverse=y<x;if(reverse){incr*=-1;test=gte;}var pad=n.some(isPadded);N=[];for(var i=x;test(i,y);i+=incr){var c;if(isAlphaSequence){c=String.fromCharCode(i);if(c==='\\\\')c='';}else{c=String(i);if(pad){var need=width-c.length;if(need>0){var z=new Array(need+1).join('0');if(i<0)c='-'+z+c.slice(1);else c=z+c;}}}N.push(c);}}else{N=concatMap(n,function(el){return expand$1(el,false);});}for(var j=0;j<N.length;j++){for(var k=0;k<post.length;k++){var expansion=pre+N[j]+post[k];if(!isTop||isSequence||expansion)expansions.push(expansion);}}return expansions;}var minimatch_1=minimatch$1;minimatch$1.Minimatch=Minimatch;var path$5={sep:'/'};try{path$5=require$$0$1;}catch(er){}var GLOBSTAR=minimatch$1.GLOBSTAR=Minimatch.GLOBSTAR={};var expand=index$60;var plTypes={'!':{open:'(?:(?!(?:',close:'))[^/]*?)'},'?':{open:'(?:',close:')?'},'+':{open:'(?:',close:')+'},'*':{open:'(?:',close:')*'},'@':{open:'(?:',close:')'}};// any single thing other than /\n// don't need to escape / when using new RegExp()\nvar qmark='[^/]';// * => any number of characters\nvar star=qmark+'*?';// ** when dots are allowed.  Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nvar twoStarDot='(?:(?!(?:\\\\\\/|^)(?:\\\\.{1,2})($|\\\\\\/)).)*?';// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nvar twoStarNoDot='(?:(?!(?:\\\\\\/|^)\\\\.).)*?';// characters that need to be escaped in RegExp.\nvar reSpecials=charSet('().*{}+?[]^$\\\\!');// \"abc\" -> { a:true, b:true, c:true }\nfunction charSet(s){return s.split('').reduce(function(set,c){set[c]=true;return set;},{});}// normalizes slashes.\nvar slashSplit=/\\/+/;minimatch$1.filter=filter;function filter(pattern,options){options=options||{};return function(p,i,list){return minimatch$1(p,pattern,options);};}function ext(a,b){a=a||{};b=b||{};var t={};Object.keys(b).forEach(function(k){t[k]=b[k];});Object.keys(a).forEach(function(k){t[k]=a[k];});return t;}minimatch$1.defaults=function(def){if(!def||!Object.keys(def).length)return minimatch$1;var orig=minimatch$1;var m=function minimatch(p,pattern,options){return orig.minimatch(p,pattern,ext(def,options));};m.Minimatch=function Minimatch(pattern,options){return new orig.Minimatch(pattern,ext(def,options));};return m;};Minimatch.defaults=function(def){if(!def||!Object.keys(def).length)return Minimatch;return minimatch$1.defaults(def).Minimatch;};function minimatch$1(p,pattern,options){if(typeof pattern!=='string'){throw new TypeError('glob pattern string required');}if(!options)options={};// shortcut: comments match nothing.\nif(!options.nocomment&&pattern.charAt(0)==='#'){return false;}// \"\" only matches \"\"\nif(pattern.trim()==='')return p==='';return new Minimatch(pattern,options).match(p);}function Minimatch(pattern,options){if(!(this instanceof Minimatch)){return new Minimatch(pattern,options);}if(typeof pattern!=='string'){throw new TypeError('glob pattern string required');}if(!options)options={};pattern=pattern.trim();// windows support: need to use /, not \\\nif(path$5.sep!=='/'){pattern=pattern.split(path$5.sep).join('/');}this.options=options;this.set=[];this.pattern=pattern;this.regexp=null;this.negate=false;this.comment=false;this.empty=false;// make the set of regexps etc.\nthis.make();}Minimatch.prototype.debug=function(){};Minimatch.prototype.make=make;function make(){// don't do it more than once.\nif(this._made)return;var pattern=this.pattern;var options=this.options;// empty patterns and comments match nothing.\nif(!options.nocomment&&pattern.charAt(0)==='#'){this.comment=true;return;}if(!pattern){this.empty=true;return;}// step 1: figure out negation, etc.\nthis.parseNegate();// step 2: expand braces\nvar set=this.globSet=this.braceExpand();if(options.debug)this.debug=console.error;this.debug(this.pattern,set);// step 3: now we have a set, so turn each one into a series of path-portion\n// matching patterns.\n// These will be regexps, except in the case of \"**\", which is\n// set to the GLOBSTAR object for globstar behavior,\n// and will not contain any / characters\nset=this.globParts=set.map(function(s){return s.split(slashSplit);});this.debug(this.pattern,set);// glob --> regexps\nset=set.map(function(s,si,set){return s.map(this.parse,this);},this);this.debug(this.pattern,set);// filter out everything that didn't compile properly.\nset=set.filter(function(s){return s.indexOf(false)===-1;});this.debug(this.pattern,set);this.set=set;}Minimatch.prototype.parseNegate=parseNegate;function parseNegate(){var pattern=this.pattern;var negate=false;var options=this.options;var negateOffset=0;if(options.nonegate)return;for(var i=0,l=pattern.length;i<l&&pattern.charAt(i)==='!';i++){negate=!negate;negateOffset++;}if(negateOffset)this.pattern=pattern.substr(negateOffset);this.negate=negate;}// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nminimatch$1.braceExpand=function(pattern,options){return braceExpand(pattern,options);};Minimatch.prototype.braceExpand=braceExpand;function braceExpand(pattern,options){if(!options){if(this instanceof Minimatch){options=this.options;}else{options={};}}pattern=typeof pattern==='undefined'?this.pattern:pattern;if(typeof pattern==='undefined'){throw new TypeError('undefined pattern');}if(options.nobrace||!pattern.match(/\\{.*\\}/)){// shortcut. no need to expand.\nreturn[pattern];}return expand(pattern);}// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion.  Otherwise, any series\n// of * is equivalent to a single *.  Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nMinimatch.prototype.parse=parse$2;var SUBPARSE={};function parse$2(pattern,isSub){if(pattern.length>1024*64){throw new TypeError('pattern is too long');}var options=this.options;// shortcuts\nif(!options.noglobstar&&pattern==='**')return GLOBSTAR;if(pattern==='')return'';var re='';var hasMagic=!!options.nocase;var escaping=false;// ? => one single character\nvar patternListStack=[];var negativeLists=[];var stateChar;var inClass=false;var reClassStart=-1;var classStart=-1;// . and .. never match anything that doesn't start with .,\n// even when options.dot is set.\nvar patternStart=pattern.charAt(0)==='.'?''// anything\n// not (start or / followed by . or .. followed by / or end)\n:options.dot?'(?!(?:^|\\\\\\/)\\\\.{1,2}(?:$|\\\\\\/))':'(?!\\\\.)';var self=this;function clearStateChar(){if(stateChar){// we had some state-tracking character\n// that wasn't consumed by this pass.\nswitch(stateChar){case'*':re+=star;hasMagic=true;break;case'?':re+=qmark;hasMagic=true;break;default:re+='\\\\'+stateChar;break;}self.debug('clearStateChar %j %j',stateChar,re);stateChar=false;}}for(var i=0,len=pattern.length,c;i<len&&(c=pattern.charAt(i));i++){this.debug('%s\\t%s %s %j',pattern,i,re,c);// skip over any that are escaped.\nif(escaping&&reSpecials[c]){re+='\\\\'+c;escaping=false;continue;}switch(c){case'/':// completely not allowed, even escaped.\n// Should already be path-split by now.\nreturn false;case'\\\\':clearStateChar();escaping=true;continue;// the various stateChar values\n// for the \"extglob\" stuff.\ncase'?':case'*':case'+':case'@':case'!':this.debug('%s\\t%s %s %j <-- stateChar',pattern,i,re,c);// all of those are literals inside a class, except that\n// the glob [!a] means [^a] in regexp\nif(inClass){this.debug('  in class');if(c==='!'&&i===classStart+1)c='^';re+=c;continue;}// if we already have a stateChar, then it means\n// that there was something like ** or +? in there.\n// Handle the stateChar, then proceed with this one.\nself.debug('call clearStateChar %j',stateChar);clearStateChar();stateChar=c;// if extglob is disabled, then +(asdf|foo) isn't a thing.\n// just clear the statechar *now*, rather than even diving into\n// the patternList stuff.\nif(options.noext)clearStateChar();continue;case'(':if(inClass){re+='(';continue;}if(!stateChar){re+='\\\\(';continue;}patternListStack.push({type:stateChar,start:i-1,reStart:re.length,open:plTypes[stateChar].open,close:plTypes[stateChar].close});// negation is (?:(?!js)[^/]*)\nre+=stateChar==='!'?'(?:(?!(?:':'(?:';this.debug('plType %j %j',stateChar,re);stateChar=false;continue;case')':if(inClass||!patternListStack.length){re+='\\\\)';continue;}clearStateChar();hasMagic=true;var pl=patternListStack.pop();// negation is (?:(?!js)[^/]*)\n// The others are (?:<pattern>)<type>\nre+=pl.close;if(pl.type==='!'){negativeLists.push(pl);}pl.reEnd=re.length;continue;case'|':if(inClass||!patternListStack.length||escaping){re+='\\\\|';escaping=false;continue;}clearStateChar();re+='|';continue;// these are mostly the same in regexp and glob\ncase'[':// swallow any state-tracking char before the [\nclearStateChar();if(inClass){re+='\\\\'+c;continue;}inClass=true;classStart=i;reClassStart=re.length;re+=c;continue;case']'://  a right bracket shall lose its special\n//  meaning and represent itself in\n//  a bracket expression if it occurs\n//  first in the list.  -- POSIX.2 2.8.3.2\nif(i===classStart+1||!inClass){re+='\\\\'+c;escaping=false;continue;}// handle the case where we left a class open.\n// \"[z-a]\" is valid, equivalent to \"\\[z-a\\]\"\nif(inClass){// split where the last [ was, make sure we don't have\n// an invalid re. if so, re-walk the contents of the\n// would-be class to re-translate any characters that\n// were passed through as-is\n// TODO: It would probably be faster to determine this\n// without a try/catch and a new RegExp, but it's tricky\n// to do safely.  For now, this is safe and works.\nvar cs=pattern.substring(classStart+1,i);try{RegExp('['+cs+']');}catch(er){// not a valid class!\nvar sp=this.parse(cs,SUBPARSE);re=re.substr(0,reClassStart)+'\\\\['+sp[0]+'\\\\]';hasMagic=hasMagic||sp[1];inClass=false;continue;}}// finish up the class.\nhasMagic=true;inClass=false;re+=c;continue;default:// swallow any state char that wasn't consumed\nclearStateChar();if(escaping){// no need\nescaping=false;}else if(reSpecials[c]&&!(c==='^'&&inClass)){re+='\\\\';}re+=c;}// switch\n}// for\n// handle the case where we left a class open.\n// \"[abc\" is valid, equivalent to \"\\[abc\"\nif(inClass){// split where the last [ was, and escape it\n// this is a huge pita.  We now have to re-walk\n// the contents of the would-be class to re-translate\n// any characters that were passed through as-is\ncs=pattern.substr(classStart+1);sp=this.parse(cs,SUBPARSE);re=re.substr(0,reClassStart)+'\\\\['+sp[0];hasMagic=hasMagic||sp[1];}// handle the case where we had a +( thing at the *end*\n// of the pattern.\n// each pattern list stack adds 3 chars, and we need to go through\n// and escape any | chars that were passed through as-is for the regexp.\n// Go through and escape them, taking care not to double-escape any\n// | chars that were already escaped.\nfor(pl=patternListStack.pop();pl;pl=patternListStack.pop()){var tail=re.slice(pl.reStart+pl.open.length);this.debug('setting tail',re,pl);// maybe some even number of \\, then maybe 1 \\, followed by a |\ntail=tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g,function(_,$1,$2){if(!$2){// the | isn't already escaped, so escape it.\n$2='\\\\';}// need to escape all those slashes *again*, without escaping the\n// one that we need for escaping the | character.  As it works out,\n// escaping an even number of slashes can be done by simply repeating\n// it exactly after itself.  That's why this trick works.\n//\n// I am sorry that you have to see this.\nreturn $1+$1+$2+'|';});this.debug('tail=%j\\n   %s',tail,tail,pl,re);var t=pl.type==='*'?star:pl.type==='?'?qmark:'\\\\'+pl.type;hasMagic=true;re=re.slice(0,pl.reStart)+t+'\\\\('+tail;}// handle trailing things that only matter at the very end.\nclearStateChar();if(escaping){// trailing \\\\\nre+='\\\\\\\\';}// only need to apply the nodot start if the re starts with\n// something that could conceivably capture a dot\nvar addPatternStart=false;switch(re.charAt(0)){case'.':case'[':case'(':addPatternStart=true;}// Hack to work around lack of negative lookbehind in JS\n// A pattern like: *.!(x).!(y|z) needs to ensure that a name\n// like 'a.xyz.yz' doesn't match.  So, the first negative\n// lookahead, has to look ALL the way ahead, to the end of\n// the pattern.\nfor(var n=negativeLists.length-1;n>-1;n--){var nl=negativeLists[n];var nlBefore=re.slice(0,nl.reStart);var nlFirst=re.slice(nl.reStart,nl.reEnd-8);var nlLast=re.slice(nl.reEnd-8,nl.reEnd);var nlAfter=re.slice(nl.reEnd);nlLast+=nlAfter;// Handle nested stuff like *(*.js|!(*.json)), where open parens\n// mean that we should *not* include the ) in the bit that is considered\n// \"after\" the negated section.\nvar openParensBefore=nlBefore.split('(').length-1;var cleanAfter=nlAfter;for(i=0;i<openParensBefore;i++){cleanAfter=cleanAfter.replace(/\\)[+*?]?/,'');}nlAfter=cleanAfter;var dollar='';if(nlAfter===''&&isSub!==SUBPARSE){dollar='$';}var newRe=nlBefore+nlFirst+nlAfter+dollar+nlLast;re=newRe;}// if the re is not \"\" at this point, then we need to make sure\n// it doesn't match against an empty path part.\n// Otherwise a/* will match a/, which it should not.\nif(re!==''&&hasMagic){re='(?=.)'+re;}if(addPatternStart){re=patternStart+re;}// parsing just a piece of a larger pattern.\nif(isSub===SUBPARSE){return[re,hasMagic];}// skip the regexp for non-magical patterns\n// unescape anything in it, though, so that it'll be\n// an exact match against a file etc.\nif(!hasMagic){return globUnescape(pattern);}var flags=options.nocase?'i':'';try{var regExp=new RegExp('^'+re+'$',flags);}catch(er){// If it was an invalid regular expression, then it can't match\n// anything.  This trick looks for a character after the end of\n// the string, which is of course impossible, except in multi-line\n// mode, but it's not a /m regex.\nreturn new RegExp('$.');}regExp._glob=pattern;regExp._src=re;return regExp;}minimatch$1.makeRe=function(pattern,options){return new Minimatch(pattern,options||{}).makeRe();};Minimatch.prototype.makeRe=makeRe;function makeRe(){if(this.regexp||this.regexp===false)return this.regexp;// at this point, this.set is a 2d array of partial\n// pattern strings, or \"**\".\n//\n// It's better to use .match().  This function shouldn't\n// be used, really, but it's pretty convenient sometimes,\n// when you just want to work with a regex.\nvar set=this.set;if(!set.length){this.regexp=false;return this.regexp;}var options=this.options;var twoStar=options.noglobstar?star:options.dot?twoStarDot:twoStarNoDot;var flags=options.nocase?'i':'';var re=set.map(function(pattern){return pattern.map(function(p){return p===GLOBSTAR?twoStar:typeof p==='string'?regExpEscape(p):p._src;}).join('\\\\\\/');}).join('|');// must match entire pattern\n// ending in a * or ** will make it less strict.\nre='^(?:'+re+')$';// can match anything, as long as it's not this.\nif(this.negate)re='^(?!'+re+').*$';try{this.regexp=new RegExp(re,flags);}catch(ex){this.regexp=false;}return this.regexp;}minimatch$1.match=function(list,pattern,options){options=options||{};var mm=new Minimatch(pattern,options);list=list.filter(function(f){return mm.match(f);});if(mm.options.nonull&&!list.length){list.push(pattern);}return list;};Minimatch.prototype.match=match;function match(f,partial){this.debug('match',f,this.pattern);// short-circuit in the case of busted things.\n// comments, etc.\nif(this.comment)return false;if(this.empty)return f==='';if(f==='/'&&partial)return true;var options=this.options;// windows: need to use /, not \\\nif(path$5.sep!=='/'){f=f.split(path$5.sep).join('/');}// treat the test path as a set of pathparts.\nf=f.split(slashSplit);this.debug(this.pattern,'split',f);// just ONE of the pattern sets in this.set needs to match\n// in order for it to be valid.  If negating, then just one\n// match means that we have failed.\n// Either way, return on the first hit.\nvar set=this.set;this.debug(this.pattern,'set',set);// Find the basename of the path by looking for the last non-empty segment\nvar filename;var i;for(i=f.length-1;i>=0;i--){filename=f[i];if(filename)break;}for(i=0;i<set.length;i++){var pattern=set[i];var file=f;if(options.matchBase&&pattern.length===1){file=[filename];}var hit=this.matchOne(file,pattern,partial);if(hit){if(options.flipNegate)return true;return!this.negate;}}// didn't get any hits.  this is success if it's a negative\n// pattern, failure otherwise.\nif(options.flipNegate)return false;return this.negate;}// set partial to true to test if, for example,\n// \"/a/b\" matches the start of \"/*/b/*/d\"\n// Partial means, if you run out of file before you run\n// out of pattern, then that's fine, as long as all\n// the parts match.\nMinimatch.prototype.matchOne=function(file,pattern,partial){var options=this.options;this.debug('matchOne',{'this':this,file:file,pattern:pattern});this.debug('matchOne',file.length,pattern.length);for(var fi=0,pi=0,fl=file.length,pl=pattern.length;fi<fl&&pi<pl;fi++,pi++){this.debug('matchOne loop');var p=pattern[pi];var f=file[fi];this.debug(pattern,p,f);// should be impossible.\n// some invalid regexp stuff in the set.\nif(p===false)return false;if(p===GLOBSTAR){this.debug('GLOBSTAR',[pattern,p,f]);// \"**\"\n// a/**/b/**/c would match the following:\n// a/b/x/y/z/c\n// a/x/y/z/b/c\n// a/b/x/b/x/c\n// a/b/c\n// To do this, take the rest of the pattern after\n// the **, and see if it would match the file remainder.\n// If so, return success.\n// If not, the ** \"swallows\" a segment, and try again.\n// This is recursively awful.\n//\n// a/**/b/**/c matching a/b/x/y/z/c\n// - a matches a\n// - doublestar\n//   - matchOne(b/x/y/z/c, b/**/c)\n//     - b matches b\n//     - doublestar\n//       - matchOne(x/y/z/c, c) -> no\n//       - matchOne(y/z/c, c) -> no\n//       - matchOne(z/c, c) -> no\n//       - matchOne(c, c) yes, hit\nvar fr=fi;var pr=pi+1;if(pr===pl){this.debug('** at the end');// a ** at the end will just swallow the rest.\n// We have found a match.\n// however, it will not swallow /.x, unless\n// options.dot is set.\n// . and .. are *never* matched by **, for explosively\n// exponential reasons.\nfor(;fi<fl;fi++){if(file[fi]==='.'||file[fi]==='..'||!options.dot&&file[fi].charAt(0)==='.')return false;}return true;}// ok, let's see if we can swallow whatever we can.\nwhile(fr<fl){var swallowee=file[fr];this.debug('\\nglobstar while',file,fr,pattern,pr,swallowee);// XXX remove this slice.  Just pass the start index.\nif(this.matchOne(file.slice(fr),pattern.slice(pr),partial)){this.debug('globstar found match!',fr,fl,swallowee);// found a match.\nreturn true;}else{// can't swallow \".\" or \"..\" ever.\n// can only swallow \".foo\" when explicitly asked.\nif(swallowee==='.'||swallowee==='..'||!options.dot&&swallowee.charAt(0)==='.'){this.debug('dot detected!',file,fr,pattern,pr);break;}// ** swallows a segment, and continue.\nthis.debug('globstar swallow a segment, and continue');fr++;}}// no match was found.\n// However, in partial mode, we can't say this is necessarily over.\n// If there's more *pattern* left, then\nif(partial){// ran out of file\nthis.debug('\\n>>> no match, partial?',file,fr,pattern,pr);if(fr===fl)return true;}return false;}// something other than **\n// non-magic patterns just have to match exactly\n// patterns with magic have been turned into regexps.\nvar hit;if(typeof p==='string'){if(options.nocase){hit=f.toLowerCase()===p.toLowerCase();}else{hit=f===p;}this.debug('string match',p,f,hit);}else{hit=f.match(p);this.debug('pattern match',p,f,hit);}if(!hit)return false;}// Note: ending in / means that we'll get a final \"\"\n// at the end of the pattern.  This can only match a\n// corresponding \"\" at the end of the file.\n// If the file ends in /, then it can only match a\n// a pattern that ends in /, unless the pattern just\n// doesn't have any more for it. But, a/b/ should *not*\n// match \"a/b/*\", even though \"\" matches against the\n// [^/]*? pattern, except in partial mode, where it might\n// simply not be reached yet.\n// However, a/b/ should still satisfy a/*\n// now either we fell off the end of the pattern, or we're done.\nif(fi===fl&&pi===pl){// ran out of pattern and filename at the same time.\n// an exact hit!\nreturn true;}else if(fi===fl){// ran out of file, but still had pattern left.\n// this is ok if we're doing the match as part of\n// a glob fs traversal.\nreturn partial;}else if(pi===pl){// ran out of pattern, still have file left.\n// this is only acceptable if we're on the very last\n// empty segment of a file with a trailing slash.\n// a/* should match a/b/\nvar emptyFileEnd=fi===fl-1&&file[fi]==='';return emptyFileEnd;}// should be unreachable.\nthrow new Error('wtf?');};// replace stuff like \\* with *\nfunction globUnescape(s){return s.replace(/\\\\(.)/g,'$1');}function regExpEscape(s){return s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g,'\\\\$&');}var cosmiconfig=index$40;var minimatch=minimatch_1;var path$1=require$$0$1;var withCache=cosmiconfig(\"prettier\");var noCache=cosmiconfig(\"prettier\",{cache:false});function resolveConfig(filePath,opts){if(opts&&opts.configFile===false){// do not look for a config file\nreturn Promise.resolve(null);}var useCache=!(opts&&opts.useCache===false);var fileDir=filePath?path$1.dirname(filePath):undefined;return(useCache?withCache:noCache).// https://github.com/davidtheclark/cosmiconfig/pull/68\nload(fileDir,opts&&opts.configFile).then(function(result){if(!result){return null;}return mergeOverrides(result.config,filePath);});}function clearCache(){withCache.clearCaches();}function resolveConfigFile(filePath){return noCache.load(filePath).then(function(result){if(result){return result.filepath;}return null;});}function mergeOverrides(config,filePath){var options=Object.assign({},config);if(filePath&&options.overrides){var _iteratorNormalCompletion2=true;var _didIteratorError2=false;var _iteratorError2=undefined;try{for(var _iterator2=options.overrides[Symbol.iterator](),_step2;!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=true){var override=_step2.value;if(pathMatchesGlobs(filePath,override.files,override.excludeFiles)){Object.assign(options,override.options);}}}catch(err){_didIteratorError2=true;_iteratorError2=err;}finally{try{if(!_iteratorNormalCompletion2&&_iterator2.return){_iterator2.return();}}finally{if(_didIteratorError2){throw _iteratorError2;}}}}delete options.overrides;return options;}// Based on eslint: https://github.com/eslint/eslint/blob/master/lib/config/config-ops.js\nfunction pathMatchesGlobs(filePath,patterns,excludedPatterns){var patternList=[].concat(patterns);var excludedPatternList=[].concat(excludedPatterns||[]);var opts={matchBase:true};return patternList.some(function(pattern){return minimatch(filePath,pattern,opts);})&&!excludedPatternList.some(function(excludedPattern){return minimatch(filePath,excludedPattern,opts);});}var resolveConfig_1={resolveConfig:resolveConfig,resolveConfigFile:resolveConfigFile,clearCache:clearCache};var require$$2$19=_package$1&&_package$1['default']||_package$1;var stripBom=index$2;var comments=comments$1;var version=require$$2$19.version;var printAstToDoc=printer.printAstToDoc;var util$1=util$3;var _printDocToString=docPrinter.printDocToString;var normalizeOptions=options.normalize;var parser=parser$1;var printDocToDebug=docDebug.printDocToDebug;var config=resolveConfig_1;function guessLineEnding(text){var index=text.indexOf(\"\\n\");if(index>=0&&text.charAt(index-1)===\"\\r\"){return\"\\r\\n\";}return\"\\n\";}function attachComments(text,ast,opts){var astComments=ast.comments;if(astComments){delete ast.comments;comments.attach(astComments,ast,text,opts);}ast.tokens=[];opts.originalText=text.trimRight();return astComments;}function ensureAllCommentsPrinted(astComments){if(!astComments){return;}for(var _i34=0;_i34<astComments.length;++_i34){if(astComments[_i34].value.trim()===\"prettier-ignore\"){// If there's a prettier-ignore, we're not printing that sub-tree so we\n// don't know if the comments was printed or not.\nreturn;}}astComments.forEach(function(comment){if(!comment.printed){throw new Error('Comment \"'+comment.value.trim()+'\" was not printed. Please report this error!');}delete comment.printed;});}function _formatWithCursor(text,opts,addAlignmentSize){text=stripBom(text);addAlignmentSize=addAlignmentSize||0;var ast=parser.parse(text,opts);var formattedRangeOnly=formatRange(text,opts,ast);if(formattedRangeOnly){return{formatted:formattedRangeOnly};}var cursorOffset=void 0;if(opts.cursorOffset>=0){var cursorNodeAndParents=findNodeAtOffset(ast,opts.cursorOffset);var cursorNode=cursorNodeAndParents.node;if(cursorNode){cursorOffset=opts.cursorOffset-util$1.locStart(cursorNode);opts.cursorNode=cursorNode;}}var astComments=attachComments(text,ast,opts);var doc=printAstToDoc(ast,opts,addAlignmentSize);opts.newLine=guessLineEnding(text);var toStringResult=_printDocToString(doc,opts);var str=toStringResult.formatted;var cursorOffsetResult=toStringResult.cursor;ensureAllCommentsPrinted(astComments);// Remove extra leading indentation as well as the added indentation after last newline\nif(addAlignmentSize>0){return{formatted:str.trim()+opts.newLine};}if(cursorOffset!==undefined){return{formatted:str,cursorOffset:cursorOffsetResult+cursorOffset};}return{formatted:str};}function _format(text,opts,addAlignmentSize){return _formatWithCursor(text,opts,addAlignmentSize).formatted;}function findSiblingAncestors(startNodeAndParents,endNodeAndParents){var resultStartNode=startNodeAndParents.node;var resultEndNode=endNodeAndParents.node;if(resultStartNode===resultEndNode){return{startNode:resultStartNode,endNode:resultEndNode};}var _iteratorNormalCompletion3=true;var _didIteratorError3=false;var _iteratorError3=undefined;try{for(var _iterator3=endNodeAndParents.parentNodes[Symbol.iterator](),_step3;!(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done);_iteratorNormalCompletion3=true){var endParent=_step3.value;if(endParent.type!==\"Program\"&&endParent.type!==\"File\"&&util$1.locStart(endParent)>=util$1.locStart(startNodeAndParents.node)){resultEndNode=endParent;}else{break;}}}catch(err){_didIteratorError3=true;_iteratorError3=err;}finally{try{if(!_iteratorNormalCompletion3&&_iterator3.return){_iterator3.return();}}finally{if(_didIteratorError3){throw _iteratorError3;}}}var _iteratorNormalCompletion4=true;var _didIteratorError4=false;var _iteratorError4=undefined;try{for(var _iterator4=startNodeAndParents.parentNodes[Symbol.iterator](),_step4;!(_iteratorNormalCompletion4=(_step4=_iterator4.next()).done);_iteratorNormalCompletion4=true){var startParent=_step4.value;if(startParent.type!==\"Program\"&&startParent.type!==\"File\"&&util$1.locEnd(startParent)<=util$1.locEnd(endNodeAndParents.node)){resultStartNode=startParent;}else{break;}}}catch(err){_didIteratorError4=true;_iteratorError4=err;}finally{try{if(!_iteratorNormalCompletion4&&_iterator4.return){_iterator4.return();}}finally{if(_didIteratorError4){throw _iteratorError4;}}}return{startNode:resultStartNode,endNode:resultEndNode};}function findNodeAtOffset(node,offset,predicate,parentNodes){predicate=predicate||function(){return true;};parentNodes=parentNodes||[];var start=util$1.locStart(node);var end=util$1.locEnd(node);if(start<=offset&&offset<=end){var _iteratorNormalCompletion5=true;var _didIteratorError5=false;var _iteratorError5=undefined;try{for(var _iterator5=comments.getSortedChildNodes(node)[Symbol.iterator](),_step5;!(_iteratorNormalCompletion5=(_step5=_iterator5.next()).done);_iteratorNormalCompletion5=true){var childNode=_step5.value;var childResult=findNodeAtOffset(childNode,offset,predicate,[node].concat(parentNodes));if(childResult){return childResult;}}}catch(err){_didIteratorError5=true;_iteratorError5=err;}finally{try{if(!_iteratorNormalCompletion5&&_iterator5.return){_iterator5.return();}}finally{if(_didIteratorError5){throw _iteratorError5;}}}if(predicate(node)){return{node:node,parentNodes:parentNodes};}}}// See https://www.ecma-international.org/ecma-262/5.1/#sec-A.5\nfunction isSourceElement(opts,node){if(node==null){return false;}switch(node.type||node.kind){case\"ObjectExpression\":// JSON\ncase\"ArrayExpression\":// JSON\ncase\"StringLiteral\":// JSON\ncase\"NumericLiteral\":// JSON\ncase\"BooleanLiteral\":// JSON\ncase\"NullLiteral\":// JSON\ncase\"json-identifier\":// JSON\nreturn opts.parser===\"json\";case\"FunctionDeclaration\":case\"BlockStatement\":case\"BreakStatement\":case\"ContinueStatement\":case\"DebuggerStatement\":case\"DoWhileStatement\":case\"EmptyStatement\":case\"ExpressionStatement\":case\"ForInStatement\":case\"ForStatement\":case\"IfStatement\":case\"LabeledStatement\":case\"ReturnStatement\":case\"SwitchStatement\":case\"ThrowStatement\":case\"TryStatement\":case\"VariableDeclaration\":case\"WhileStatement\":case\"WithStatement\":case\"ClassDeclaration\":// ES 2015\ncase\"ImportDeclaration\":// Module\ncase\"ExportDefaultDeclaration\":// Module\ncase\"ExportNamedDeclaration\":// Module\ncase\"ExportAllDeclaration\":// Module\ncase\"TypeAlias\":// Flow\ncase\"InterfaceDeclaration\":// Flow, Typescript\ncase\"TypeAliasDeclaration\":// Typescript\ncase\"ExportAssignment\":// Typescript\ncase\"ExportDeclaration\":// Typescript\ncase\"OperationDefinition\":// GraphQL\ncase\"FragmentDefinition\":// GraphQL\ncase\"VariableDefinition\":// GraphQL\ncase\"TypeExtensionDefinition\":// GraphQL\ncase\"ObjectTypeDefinition\":// GraphQL\ncase\"FieldDefinition\":// GraphQL\ncase\"DirectiveDefinition\":// GraphQL\ncase\"EnumTypeDefinition\":// GraphQL\ncase\"EnumValueDefinition\":// GraphQL\ncase\"InputValueDefinition\":// GraphQL\ncase\"InputObjectTypeDefinition\":// GraphQL\ncase\"SchemaDefinition\":// GraphQL\ncase\"OperationTypeDefinition\":// GraphQL\ncase\"InterfaceTypeDefinition\":// GraphQL\ncase\"UnionTypeDefinition\":// GraphQL\ncase\"ScalarTypeDefinition\":// GraphQL\nreturn true;}return false;}function calculateRange(text,opts,ast){// Contract the range so that it has non-whitespace characters at its endpoints.\n// This ensures we can format a range that doesn't end on a node.\nvar rangeStringOrig=text.slice(opts.rangeStart,opts.rangeEnd);var startNonWhitespace=Math.max(opts.rangeStart+rangeStringOrig.search(/\\S/),opts.rangeStart);var endNonWhitespace=void 0;for(endNonWhitespace=opts.rangeEnd;endNonWhitespace>opts.rangeStart;--endNonWhitespace){if(text[endNonWhitespace-1].match(/\\S/)){break;}}var startNodeAndParents=findNodeAtOffset(ast,startNonWhitespace,function(node){return isSourceElement(opts,node);});var endNodeAndParents=findNodeAtOffset(ast,endNonWhitespace,function(node){return isSourceElement(opts,node);});if(!startNodeAndParents||!endNodeAndParents){return{rangeStart:0,rangeEnd:0};}var siblingAncestors=findSiblingAncestors(startNodeAndParents,endNodeAndParents);var startNode=siblingAncestors.startNode;var endNode=siblingAncestors.endNode;var rangeStart=Math.min(util$1.locStart(startNode),util$1.locStart(endNode));var rangeEnd=Math.max(util$1.locEnd(startNode),util$1.locEnd(endNode));return{rangeStart:rangeStart,rangeEnd:rangeEnd};}function formatRange(text,opts,ast){if(opts.rangeStart<=0&&text.length<=opts.rangeEnd){return;}var range=calculateRange(text,opts,ast);var rangeStart=range.rangeStart;var rangeEnd=range.rangeEnd;var rangeString=text.slice(rangeStart,rangeEnd);// Try to extend the range backwards to the beginning of the line.\n// This is so we can detect indentation correctly and restore it.\n// Use `Math.min` since `lastIndexOf` returns 0 when `rangeStart` is 0\nvar rangeStart2=Math.min(rangeStart,text.lastIndexOf(\"\\n\",rangeStart)+1);var indentString=text.slice(rangeStart2,rangeStart);var alignmentSize=util$1.getAlignmentSize(indentString,opts.tabWidth);var rangeFormatted=_format(rangeString,Object.assign({},opts,{rangeStart:0,rangeEnd:Infinity,printWidth:opts.printWidth-alignmentSize}),alignmentSize);// Since the range contracts to avoid trailing whitespace,\n// we need to remove the newline that was inserted by the `format` call.\nvar rangeTrimmed=rangeFormatted.trimRight();return text.slice(0,rangeStart)+rangeTrimmed+text.slice(rangeEnd);}var index={formatWithCursor:function formatWithCursor(text,opts){return _formatWithCursor(text,normalizeOptions(opts));},format:function format(text,opts){return _format(text,normalizeOptions(opts));},check:function check(text,opts){try{var formatted=_format(text,normalizeOptions(opts));return formatted===text;}catch(e){return false;}},resolveConfig:config.resolveConfig,clearConfigCache:config.clearCache,version:version,/* istanbul ignore next */__debug:{parse:function parse(text,opts){return parser.parse(text,opts);},formatAST:function formatAST(ast,opts){opts=normalizeOptions(opts);var doc=printAstToDoc(ast,opts);var str=_printDocToString(doc,opts);return str;},// Doesn't handle shebang for now\nformatDoc:function formatDoc(doc,opts){opts=normalizeOptions(opts);var debug=printDocToDebug(doc);var str=_format(debug,opts);return str;},printToDoc:function printToDoc(text,opts){opts=normalizeOptions(opts);var ast=parser.parse(text,opts);attachComments(text,ast,opts);var doc=printAstToDoc(ast,opts);return doc;},printDocToString:function printDocToString(doc,opts){opts=normalizeOptions(opts);var str=_printDocToString(doc,opts);return str;}}};module.exports=index;\n"
  },
  {
    "path": "website/static/lib/parser-babylon.js",
    "content": "\"use strict\";\n\nvar _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; };\n\nvar babylon = function () {\n\tfunction unwrapExports(x) {\n\t\treturn x && x.__esModule ? x['default'] : x;\n\t}\n\n\tfunction createCommonjsModule(fn, module) {\n\t\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n\t}\n\n\tvar parserBabylon_1 = createCommonjsModule(function (module) {\n\t\t\"use strict\";\n\t\tfunction createError$1(t, e) {\n\t\t\tvar s = new SyntaxError(t + \" (\" + e.start.line + \":\" + e.start.column + \")\");return s.loc = e, s;\n\t\t}function createCommonjsModule$$1(t, e) {\n\t\t\treturn e = { exports: {} }, t(e, e.exports), e.exports;\n\t\t}function parse(t) {\n\t\t\tvar e = index,\n\t\t\t    s = { sourceType: \"module\", allowImportExportEverywhere: !0, allowReturnOutsideFunction: !0, plugins: [\"jsx\", \"flow\", \"doExpressions\", \"objectRestSpread\", \"decorators\", \"classProperties\", \"exportExtensions\", \"asyncGenerators\", \"functionBind\", \"functionSent\", \"dynamicImport\", \"numericSeparator\", \"importMeta\"] };var i = void 0;try {\n\t\t\t\ti = e.parse(t, s);\n\t\t\t} catch (r) {\n\t\t\t\ttry {\n\t\t\t\t\ti = e.parse(t, Object.assign({}, s, { strictMode: !1 }));\n\t\t\t\t} catch (t) {\n\t\t\t\t\tthrow createError(r.message.replace(/ \\(.*\\)/, \"\"), { start: { line: r.loc.line, column: r.loc.column + 1 } });\n\t\t\t\t}\n\t\t\t}return delete i.tokens, i;\n\t\t}var parserCreateError = createError$1,\n\t\t    index = createCommonjsModule$$1(function (t, e) {\n\t\t\tfunction s(t) {\n\t\t\t\tvar e = {};for (var s in b) {\n\t\t\t\t\te[s] = t && s in t ? t[s] : b[s];\n\t\t\t\t}return e;\n\t\t\t}function i(t) {\n\t\t\t\tvar e = t.split(\" \");return function (t) {\n\t\t\t\t\treturn e.indexOf(t) >= 0;\n\t\t\t\t};\n\t\t\t}function r(t, e) {\n\t\t\t\tfor (var s = 65536, i = 0; i < e.length; i += 2) {\n\t\t\t\t\tif ((s += e[i]) > t) return !1;if ((s += e[i + 1]) >= t) return !0;\n\t\t\t\t}return !1;\n\t\t\t}function a(t) {\n\t\t\t\treturn t < 65 ? 36 === t : t < 91 || (t < 97 ? 95 === t : t < 123 || (t <= 65535 ? t >= 170 && j.test(String.fromCharCode(t)) : r(t, D)));\n\t\t\t}function n(t) {\n\t\t\t\treturn t < 48 ? 36 === t : t < 58 || !(t < 65) && (t < 91 || (t < 97 ? 95 === t : t < 123 || (t <= 65535 ? t >= 170 && R.test(String.fromCharCode(t)) : r(t, D) || r(t, O))));\n\t\t\t}function o(t) {\n\t\t\t\treturn 10 === t || 13 === t || 8232 === t || 8233 === t;\n\t\t\t}function h(t, e) {\n\t\t\t\tfor (var s = 1, i = 0;;) {\n\t\t\t\t\tF.lastIndex = i;var r = F.exec(t);if (!(r && r.index < e)) return new U(s, e - i);++s, i = r.index + r[0].length;\n\t\t\t\t}throw new Error(\"Unreachable\");\n\t\t\t}function p(t) {\n\t\t\t\treturn t[t.length - 1];\n\t\t\t}function c(t) {\n\t\t\t\treturn t <= 65535 ? String.fromCharCode(t) : String.fromCharCode(55296 + (t - 65536 >> 10), 56320 + (t - 65536 & 1023));\n\t\t\t}function l(t) {\n\t\t\t\tfor (var e = {}, s = t, i = Array.isArray(s), r = 0, s = i ? s : s[Symbol.iterator]();;) {\n\t\t\t\t\tvar a;if (i) {\n\t\t\t\t\t\tif (r >= s.length) break;a = s[r++];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ((r = s.next()).done) break;a = r.value;\n\t\t\t\t\t}e[a] = !0;\n\t\t\t\t}return e;\n\t\t\t}function u(t) {\n\t\t\t\treturn null != t && \"Property\" === t.type && \"init\" === t.kind && !1 === t.method;\n\t\t\t}function d(t) {\n\t\t\t\treturn \"DeclareExportAllDeclaration\" === t.type || \"DeclareExportDeclaration\" === t.type && (!t.declaration || \"TypeAlias\" !== t.declaration.type && \"InterfaceDeclaration\" !== t.declaration.type);\n\t\t\t}function f(t) {\n\t\t\t\tif (\"JSXIdentifier\" === t.type) return t.name;if (\"JSXNamespacedName\" === t.type) return t.namespace.name + \":\" + t.name.name;if (\"JSXMemberExpression\" === t.type) return f(t.object) + \".\" + f(t.property);throw new Error(\"Node had unexpected type: \" + t.type);\n\t\t\t}function m(t, e) {\n\t\t\t\treturn x(e, t).parse();\n\t\t\t}function y(t, e) {\n\t\t\t\tvar s = x(e, t);return s.options.strictMode && (s.state.strict = !0), s.getExpression();\n\t\t\t}function x(t, e) {\n\t\t\t\treturn new (t && t.plugins ? v(t.plugins) : et)(t, e);\n\t\t\t}function v(t) {\n\t\t\t\tvar e = t.filter(function (t) {\n\t\t\t\t\treturn \"estree\" === t || \"flow\" === t || \"jsx\" === t;\n\t\t\t\t});e.indexOf(\"flow\") >= 0 && (e = e.filter(function (t) {\n\t\t\t\t\treturn \"flow\" !== t;\n\t\t\t\t})).push(\"flow\"), e.indexOf(\"estree\") >= 0 && (e = e.filter(function (t) {\n\t\t\t\t\treturn \"estree\" !== t;\n\t\t\t\t})).unshift(\"estree\");var s = e.join(\"/\"),\n\t\t\t\t    i = ct[s];if (!i) {\n\t\t\t\t\ti = et;for (var r = e, a = Array.isArray(r), n = 0, r = a ? r : r[Symbol.iterator]();;) {\n\t\t\t\t\t\tvar o;if (a) {\n\t\t\t\t\t\t\tif (n >= r.length) break;o = r[n++];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif ((n = r.next()).done) break;o = n.value;\n\t\t\t\t\t\t}i = tt[o](i);\n\t\t\t\t\t}ct[s] = i;\n\t\t\t\t}return i;\n\t\t\t}Object.defineProperty(e, \"__esModule\", { value: !0 });var b = { sourceType: \"script\", sourceFilename: void 0, startLine: 1, allowReturnOutsideFunction: !1, allowImportExportEverywhere: !1, allowSuperOutsideMethod: !1, plugins: [], strictMode: null, ranges: !1 },\n\t\t\t    g = function g(t, e) {\n\t\t\t\tif (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n\t\t\t},\n\t\t\t    w = function w(t, e) {\n\t\t\t\tif (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof e === \"undefined\" ? \"undefined\" : _typeof(e)));t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e);\n\t\t\t},\n\t\t\t    P = function P(t, e) {\n\t\t\t\tif (!t) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return !e || \"object\" != (typeof e === \"undefined\" ? \"undefined\" : _typeof(e)) && \"function\" != typeof e ? t : e;\n\t\t\t},\n\t\t\t    A = !0,\n\t\t\t    k = function t(e) {\n\t\t\t\tvar s = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};g(this, t), this.label = e, this.keyword = s.keyword, this.beforeExpr = !!s.beforeExpr, this.startsExpr = !!s.startsExpr, this.rightAssociative = !!s.rightAssociative, this.isLoop = !!s.isLoop, this.isAssign = !!s.isAssign, this.prefix = !!s.prefix, this.postfix = !!s.postfix, this.binop = s.binop || null, this.updateContext = null;\n\t\t\t},\n\t\t\t    E = function (t) {\n\t\t\t\tfunction e(s) {\n\t\t\t\t\tvar i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};return g(this, e), i.keyword = s, P(this, t.call(this, s, i));\n\t\t\t\t}return w(e, t), e;\n\t\t\t}(k),\n\t\t\t    T = function (t) {\n\t\t\t\tfunction e(s, i) {\n\t\t\t\t\treturn g(this, e), P(this, t.call(this, s, { beforeExpr: A, binop: i }));\n\t\t\t\t}return w(e, t), e;\n\t\t\t}(k),\n\t\t\t    C = { num: new k(\"num\", { startsExpr: !0 }), regexp: new k(\"regexp\", { startsExpr: !0 }), string: new k(\"string\", { startsExpr: !0 }), name: new k(\"name\", { startsExpr: !0 }), eof: new k(\"eof\"), bracketL: new k(\"[\", { beforeExpr: A, startsExpr: !0 }), bracketR: new k(\"]\"), braceL: new k(\"{\", { beforeExpr: A, startsExpr: !0 }), braceBarL: new k(\"{|\", { beforeExpr: A, startsExpr: !0 }), braceR: new k(\"}\"), braceBarR: new k(\"|}\"), parenL: new k(\"(\", { beforeExpr: A, startsExpr: !0 }), parenR: new k(\")\"), comma: new k(\",\", { beforeExpr: A }), semi: new k(\";\", { beforeExpr: A }), colon: new k(\":\", { beforeExpr: A }), doubleColon: new k(\"::\", { beforeExpr: A }), dot: new k(\".\"), question: new k(\"?\", { beforeExpr: A }), questionDot: new k(\"?.\"), arrow: new k(\"=>\", { beforeExpr: A }), template: new k(\"template\"), ellipsis: new k(\"...\", { beforeExpr: A }), backQuote: new k(\"`\", { startsExpr: !0 }), dollarBraceL: new k(\"${\", { beforeExpr: A, startsExpr: !0 }), at: new k(\"@\"), hash: new k(\"#\"), eq: new k(\"=\", { beforeExpr: A, isAssign: !0 }), assign: new k(\"_=\", { beforeExpr: A, isAssign: !0 }), incDec: new k(\"++/--\", { prefix: !0, postfix: !0, startsExpr: !0 }), prefix: new k(\"prefix\", { beforeExpr: A, prefix: !0, startsExpr: !0 }), logicalOR: new T(\"||\", 1), logicalAND: new T(\"&&\", 2), bitwiseOR: new T(\"|\", 3), bitwiseXOR: new T(\"^\", 4), bitwiseAND: new T(\"&\", 5), equality: new T(\"==/!=\", 6), relational: new T(\"</>\", 7), bitShift: new T(\"<</>>\", 8), plusMin: new k(\"+/-\", { beforeExpr: A, binop: 9, prefix: !0, startsExpr: !0 }), modulo: new T(\"%\", 10), star: new T(\"*\", 10), slash: new T(\"/\", 10), exponent: new k(\"**\", { beforeExpr: A, binop: 11, rightAssociative: !0 }) },\n\t\t\t    N = { break: new E(\"break\"), case: new E(\"case\", { beforeExpr: A }), catch: new E(\"catch\"), continue: new E(\"continue\"), debugger: new E(\"debugger\"), default: new E(\"default\", { beforeExpr: A }), do: new E(\"do\", { isLoop: !0, beforeExpr: A }), else: new E(\"else\", { beforeExpr: A }), finally: new E(\"finally\"), for: new E(\"for\", { isLoop: !0 }), function: new E(\"function\", { startsExpr: !0 }), if: new E(\"if\"), return: new E(\"return\", { beforeExpr: A }), switch: new E(\"switch\"), throw: new E(\"throw\", { beforeExpr: A }), try: new E(\"try\"), var: new E(\"var\"), let: new E(\"let\"), const: new E(\"const\"), while: new E(\"while\", { isLoop: !0 }), with: new E(\"with\"), new: new E(\"new\", { beforeExpr: A, startsExpr: !0 }), this: new E(\"this\", { startsExpr: !0 }), super: new E(\"super\", { startsExpr: !0 }), class: new E(\"class\"), extends: new E(\"extends\", { beforeExpr: A }), export: new E(\"export\"), import: new E(\"import\", { startsExpr: !0 }), yield: new E(\"yield\", { beforeExpr: A, startsExpr: !0 }), null: new E(\"null\", { startsExpr: !0 }), true: new E(\"true\", { startsExpr: !0 }), false: new E(\"false\", { startsExpr: !0 }), in: new E(\"in\", { beforeExpr: A, binop: 7 }), instanceof: new E(\"instanceof\", { beforeExpr: A, binop: 7 }), typeof: new E(\"typeof\", { beforeExpr: A, prefix: !0, startsExpr: !0 }), void: new E(\"void\", { beforeExpr: A, prefix: !0, startsExpr: !0 }), delete: new E(\"delete\", { beforeExpr: A, prefix: !0, startsExpr: !0 }) };Object.keys(N).forEach(function (t) {\n\t\t\t\tC[\"_\" + t] = N[t];\n\t\t\t});var S = { 6: i(\"enum await\"), strict: i(\"implements interface let package private protected public static yield\"), strictBind: i(\"eval arguments\") },\n\t\t\t    L = i(\"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this let const class extends export import yield super\"),\n\t\t\t    I = \"ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙա-ևא-תװ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠ-ࢴࢶ-ࢽऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᳩ-ᳬᳮ-ᳱᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕ℘-ℝℤΩℨK-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞ々-〇〡-〩〱-〵〸-〼ぁ-ゖ゛-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿕ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ-ꞮꞰ-ꞷꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭥꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ﬀ-ﬆﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼＡ-Ｚａ-ｚｦ-ﾾￂ-ￇￊ-ￏￒ-ￗￚ-ￜ\",\n\t\t\t    _ = \"‌‍·̀-ͯ·҃-֑҇-ׇֽֿׁׂׅׄؐ-ًؚ-٩ٰۖ-ۜ۟-۪ۤۧۨ-ۭ۰-۹ܑܰ-݊ަ-ް߀-߉߫-߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛ࣔ-ࣣ࣡-ःऺ-़ा-ॏ॑-ॗॢॣ०-९ঁ-ঃ়া-ৄেৈো-্ৗৢৣ০-৯ਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑ੦-ੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣ૦-૯ଁ-ଃ଼ା-ୄେୈୋ-୍ୖୗୢୣ୦-୯ஂா-ூெ-ைொ-்ௗ௦-௯ఀ-ఃా-ౄె-ైొ-్ౕౖౢౣ౦-౯ಁ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢೣ೦-೯ഁ-ഃാ-ൄെ-ൈൊ-്ൗൢൣ൦-൯ංඃ්ා-ුූෘ-ෟ෦-෯ෲෳัิ-ฺ็-๎๐-๙ັິ-ູົຼ່-ໍ໐-໙༘༙༠-༩༹༵༷༾༿ཱ-྄྆྇ྍ-ྗྙ-ྼ࿆ါ-ှ၀-၉ၖ-ၙၞ-ၠၢ-ၤၧ-ၭၱ-ၴႂ-ႍႏ-ႝ፝-፟፩-፱ᜒ-᜔ᜲ-᜴ᝒᝓᝲᝳ឴-៓៝០-៩᠋-᠍᠐-᠙ᢩᤠ-ᤫᤰ-᤻᥆-᥏᧐-᧚ᨗ-ᨛᩕ-ᩞ᩠-᩿᩼-᪉᪐-᪙᪰-᪽ᬀ-ᬄ᬴-᭄᭐-᭙᭫-᭳ᮀ-ᮂᮡ-ᮭ᮰-᮹᯦-᯳ᰤ-᰷᱀-᱉᱐-᱙᳐-᳔᳒-᳨᳭ᳲ-᳴᳸᳹᷀-᷵᷻-᷿‿⁀⁔⃐-⃥⃜⃡-⃰⳯-⵿⳱ⷠ-〪ⷿ-゙゚〯꘠-꘩꙯ꙴ-꙽ꚞꚟ꛰꛱ꠂ꠆ꠋꠣ-ꠧꢀꢁꢴ-ꣅ꣐-꣙꣠-꣱꤀-꤉ꤦ-꤭ꥇ-꥓ꦀ-ꦃ꦳-꧀꧐-꧙ꧥ꧰-꧹ꨩ-ꨶꩃꩌꩍ꩐-꩙ꩻ-ꩽꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭꯰-꯹ﬞ︀-️︠-︯︳︴﹍-﹏０-９＿\",\n\t\t\t    j = new RegExp(\"[\" + I + \"]\"),\n\t\t\t    R = new RegExp(\"[\" + I + _ + \"]\");I = _ = null;var D = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 17, 26, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 157, 310, 10, 21, 11, 7, 153, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 26, 45, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 785, 52, 76, 44, 33, 24, 27, 35, 42, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 85, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 54, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 86, 25, 391, 63, 32, 0, 449, 56, 264, 8, 2, 36, 18, 0, 50, 29, 881, 921, 103, 110, 18, 195, 2749, 1070, 4050, 582, 8634, 568, 8, 30, 114, 29, 19, 47, 17, 3, 32, 20, 6, 18, 881, 68, 12, 0, 67, 12, 65, 0, 32, 6124, 20, 754, 9486, 1, 3071, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 4149, 196, 60, 67, 1213, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42710, 42, 4148, 12, 221, 3, 5761, 10591, 541],\n\t\t\t    O = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 1306, 2, 54, 14, 32, 9, 16, 3, 46, 10, 54, 9, 7, 2, 37, 13, 2, 9, 52, 0, 13, 2, 49, 13, 10, 2, 4, 9, 83, 11, 7, 0, 161, 11, 6, 9, 7, 3, 57, 0, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 87, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 423, 9, 838, 7, 2, 7, 17, 9, 57, 21, 2, 13, 19882, 9, 135, 4, 60, 6, 26, 9, 1016, 45, 17, 3, 19723, 1, 5319, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 2214, 6, 110, 6, 6, 9, 792487, 239],\n\t\t\t    M = /\\r\\n?|\\n|\\u2028|\\u2029/,\n\t\t\t    F = new RegExp(M.source, \"g\"),\n\t\t\t    B = /[\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/,\n\t\t\t    q = function t(e, s, i, r) {\n\t\t\t\tg(this, t), this.token = e, this.isExpr = !!s, this.preserveSpace = !!i, this.override = r;\n\t\t\t},\n\t\t\t    V = { braceStatement: new q(\"{\", !1), braceExpression: new q(\"{\", !0), templateQuasi: new q(\"${\", !0), parenStatement: new q(\"(\", !1), parenExpression: new q(\"(\", !0), template: new q(\"`\", !0, !0, function (t) {\n\t\t\t\t\treturn t.readTmplToken();\n\t\t\t\t}), functionExpression: new q(\"function\", !0) };C.parenR.updateContext = C.braceR.updateContext = function () {\n\t\t\t\tif (1 !== this.state.context.length) {\n\t\t\t\t\tvar t = this.state.context.pop();t === V.braceStatement && this.curContext() === V.functionExpression ? (this.state.context.pop(), this.state.exprAllowed = !1) : t === V.templateQuasi ? this.state.exprAllowed = !0 : this.state.exprAllowed = !t.isExpr;\n\t\t\t\t} else this.state.exprAllowed = !0;\n\t\t\t}, C.name.updateContext = function (t) {\n\t\t\t\tthis.state.exprAllowed = !1, t !== C._let && t !== C._const && t !== C._var || M.test(this.input.slice(this.state.end)) && (this.state.exprAllowed = !0);\n\t\t\t}, C.braceL.updateContext = function (t) {\n\t\t\t\tthis.state.context.push(this.braceIsBlock(t) ? V.braceStatement : V.braceExpression), this.state.exprAllowed = !0;\n\t\t\t}, C.dollarBraceL.updateContext = function () {\n\t\t\t\tthis.state.context.push(V.templateQuasi), this.state.exprAllowed = !0;\n\t\t\t}, C.parenL.updateContext = function (t) {\n\t\t\t\tvar e = t === C._if || t === C._for || t === C._with || t === C._while;this.state.context.push(e ? V.parenStatement : V.parenExpression), this.state.exprAllowed = !0;\n\t\t\t}, C.incDec.updateContext = function () {}, C._function.updateContext = function () {\n\t\t\t\tthis.curContext() !== V.braceStatement && this.state.context.push(V.functionExpression), this.state.exprAllowed = !1;\n\t\t\t}, C.backQuote.updateContext = function () {\n\t\t\t\tthis.curContext() === V.template ? this.state.context.pop() : this.state.context.push(V.template), this.state.exprAllowed = !1;\n\t\t\t};var U = function t(e, s) {\n\t\t\t\tg(this, t), this.line = e, this.column = s;\n\t\t\t},\n\t\t\t    X = function t(e, s) {\n\t\t\t\tg(this, t), this.start = e, this.end = s;\n\t\t\t},\n\t\t\t    J = function (t) {\n\t\t\t\tfunction e() {\n\t\t\t\t\treturn g(this, e), P(this, t.apply(this, arguments));\n\t\t\t\t}return w(e, t), e.prototype.raise = function (t, e) {\n\t\t\t\t\tvar s = h(this.input, t);e += \" (\" + s.line + \":\" + s.column + \")\";var i = new SyntaxError(e);throw i.pos = t, i.loc = s, i;\n\t\t\t\t}, e;\n\t\t\t}(function (t) {\n\t\t\t\tfunction e() {\n\t\t\t\t\treturn g(this, e), P(this, t.apply(this, arguments));\n\t\t\t\t}return w(e, t), e.prototype.addComment = function (t) {\n\t\t\t\t\tthis.filename && (t.loc.filename = this.filename), this.state.trailingComments.push(t), this.state.leadingComments.push(t);\n\t\t\t\t}, e.prototype.processComment = function (t) {\n\t\t\t\t\tif (!(\"Program\" === t.type && t.body.length > 0)) {\n\t\t\t\t\t\tvar e = this.state.commentStack,\n\t\t\t\t\t\t    s = void 0,\n\t\t\t\t\t\t    i = void 0,\n\t\t\t\t\t\t    r = void 0,\n\t\t\t\t\t\t    a = void 0,\n\t\t\t\t\t\t    n = void 0;if (this.state.trailingComments.length > 0) this.state.trailingComments[0].start >= t.end ? (r = this.state.trailingComments, this.state.trailingComments = []) : this.state.trailingComments.length = 0;else {\n\t\t\t\t\t\t\tvar o = p(e);e.length > 0 && o.trailingComments && o.trailingComments[0].start >= t.end && (r = o.trailingComments, o.trailingComments = null);\n\t\t\t\t\t\t}for (e.length > 0 && p(e).start >= t.start && (s = e.pop()); e.length > 0 && p(e).start >= t.start;) {\n\t\t\t\t\t\t\ti = e.pop();\n\t\t\t\t\t\t}if (!i && s && (i = s), s && (\"ObjectProperty\" === s.type || \"CallExpression\" === t.type) && this.state.leadingComments.length > 0 && p(this.state.leadingComments).start >= t.start && this.state.commentPreviousNode) {\n\t\t\t\t\t\t\tfor (n = 0; n < this.state.leadingComments.length; n++) {\n\t\t\t\t\t\t\t\tthis.state.leadingComments[n].end < this.state.commentPreviousNode.end && (this.state.leadingComments.splice(n, 1), n--);\n\t\t\t\t\t\t\t}this.state.leadingComments.length > 0 && (s.trailingComments = this.state.leadingComments, this.state.leadingComments = []);\n\t\t\t\t\t\t}if (i) {\n\t\t\t\t\t\t\tif (i.leadingComments) if (i !== t && p(i.leadingComments).end <= t.start) t.leadingComments = i.leadingComments, i.leadingComments = null;else for (a = i.leadingComments.length - 2; a >= 0; --a) {\n\t\t\t\t\t\t\t\tif (i.leadingComments[a].end <= t.start) {\n\t\t\t\t\t\t\t\t\tt.leadingComments = i.leadingComments.splice(0, a + 1);break;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (this.state.leadingComments.length > 0) if (p(this.state.leadingComments).end <= t.start) {\n\t\t\t\t\t\t\tif (this.state.commentPreviousNode) for (n = 0; n < this.state.leadingComments.length; n++) {\n\t\t\t\t\t\t\t\tthis.state.leadingComments[n].end < this.state.commentPreviousNode.end && (this.state.leadingComments.splice(n, 1), n--);\n\t\t\t\t\t\t\t}this.state.leadingComments.length > 0 && (t.leadingComments = this.state.leadingComments, this.state.leadingComments = []);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfor (a = 0; a < this.state.leadingComments.length && !(this.state.leadingComments[a].end > t.start); a++) {}var h = this.state.leadingComments.slice(0, a);t.leadingComments = 0 === h.length ? null : h, 0 === (r = this.state.leadingComments.slice(a)).length && (r = null);\n\t\t\t\t\t\t}this.state.commentPreviousNode = t, r && (r.length && r[0].start >= t.start && p(r).end <= t.end ? t.innerComments = r : t.trailingComments = r), e.push(t);\n\t\t\t\t\t}\n\t\t\t\t}, e;\n\t\t\t}(function () {\n\t\t\t\tfunction t() {\n\t\t\t\t\tg(this, t);\n\t\t\t\t}return t.prototype.isReservedWord = function (t) {\n\t\t\t\t\treturn \"await\" === t ? this.inModule : S[6](t);\n\t\t\t\t}, t.prototype.hasPlugin = function (t) {\n\t\t\t\t\treturn !!this.plugins[t];\n\t\t\t\t}, t;\n\t\t\t}())),\n\t\t\t    W = function () {\n\t\t\t\tfunction t() {\n\t\t\t\t\tg(this, t);\n\t\t\t\t}return t.prototype.init = function (t, e) {\n\t\t\t\t\tthis.strict = !1 !== t.strictMode && \"module\" === t.sourceType, this.input = e, this.potentialArrowAt = -1, this.inMethod = this.inFunction = this.inGenerator = this.inAsync = this.inPropertyName = this.inType = this.inClass = this.inClassProperty = this.noAnonFunctionType = !1, this.labels = [], this.decorators = [], this.tokens = [], this.comments = [], this.trailingComments = [], this.leadingComments = [], this.commentStack = [], this.pos = this.lineStart = 0, this.curLine = t.startLine, this.type = C.eof, this.value = null, this.start = this.end = this.pos, this.startLoc = this.endLoc = this.curPosition(), this.lastTokEndLoc = this.lastTokStartLoc = null, this.lastTokStart = this.lastTokEnd = this.pos, this.context = [V.braceStatement], this.exprAllowed = !0, this.containsEsc = this.containsOctal = !1, this.octalPosition = null, this.invalidTemplateEscapePosition = null, this.exportedIdentifiers = [];\n\t\t\t\t}, t.prototype.curPosition = function () {\n\t\t\t\t\treturn new U(this.curLine, this.pos - this.lineStart);\n\t\t\t\t}, t.prototype.clone = function (e) {\n\t\t\t\t\tvar s = new t();for (var i in this) {\n\t\t\t\t\t\tvar r = this[i];e && \"context\" !== i || !Array.isArray(r) || (r = r.slice()), s[i] = r;\n\t\t\t\t\t}return s;\n\t\t\t\t}, t;\n\t\t\t}(),\n\t\t\t    G = { decBinOct: [46, 66, 69, 79, 95, 98, 101, 111], hex: [46, 88, 95, 120] },\n\t\t\t    K = function t(e) {\n\t\t\t\tg(this, t), this.type = e.type, this.value = e.value, this.start = e.start, this.end = e.end, this.loc = new X(e.startLoc, e.endLoc);\n\t\t\t},\n\t\t\t    z = function (t) {\n\t\t\t\tfunction e() {\n\t\t\t\t\treturn g(this, e), P(this, t.apply(this, arguments));\n\t\t\t\t}return w(e, t), e.prototype.addExtra = function (t, e, s) {\n\t\t\t\t\tt && ((t.extra = t.extra || {})[e] = s);\n\t\t\t\t}, e.prototype.isRelational = function (t) {\n\t\t\t\t\treturn this.match(C.relational) && this.state.value === t;\n\t\t\t\t}, e.prototype.expectRelational = function (t) {\n\t\t\t\t\tthis.isRelational(t) ? this.next() : this.unexpected(null, C.relational);\n\t\t\t\t}, e.prototype.isContextual = function (t) {\n\t\t\t\t\treturn this.match(C.name) && this.state.value === t;\n\t\t\t\t}, e.prototype.eatContextual = function (t) {\n\t\t\t\t\treturn this.state.value === t && this.eat(C.name);\n\t\t\t\t}, e.prototype.expectContextual = function (t, e) {\n\t\t\t\t\tthis.eatContextual(t) || this.unexpected(null, e);\n\t\t\t\t}, e.prototype.canInsertSemicolon = function () {\n\t\t\t\t\treturn this.match(C.eof) || this.match(C.braceR) || M.test(this.input.slice(this.state.lastTokEnd, this.state.start));\n\t\t\t\t}, e.prototype.isLineTerminator = function () {\n\t\t\t\t\treturn this.eat(C.semi) || this.canInsertSemicolon();\n\t\t\t\t}, e.prototype.semicolon = function () {\n\t\t\t\t\tthis.isLineTerminator() || this.unexpected(null, C.semi);\n\t\t\t\t}, e.prototype.expect = function (t, e) {\n\t\t\t\t\tthis.eat(t) || this.unexpected(e, t);\n\t\t\t\t}, e.prototype.unexpected = function (t) {\n\t\t\t\t\tvar e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : \"Unexpected token\";throw \"string\" != typeof e && (e = \"Unexpected token, expected \" + e.label), this.raise(null != t ? t : this.state.start, e);\n\t\t\t\t}, e;\n\t\t\t}(function (t) {\n\t\t\t\tfunction e(s, i) {\n\t\t\t\t\tg(this, e);var r = P(this, t.call(this));return r.state = new W(), r.state.init(s, i), r;\n\t\t\t\t}return w(e, t), e.prototype.next = function () {\n\t\t\t\t\tthis.isLookahead || this.state.tokens.push(new K(this.state)), this.state.lastTokEnd = this.state.end, this.state.lastTokStart = this.state.start, this.state.lastTokEndLoc = this.state.endLoc, this.state.lastTokStartLoc = this.state.startLoc, this.nextToken();\n\t\t\t\t}, e.prototype.eat = function (t) {\n\t\t\t\t\treturn !!this.match(t) && (this.next(), !0);\n\t\t\t\t}, e.prototype.match = function (t) {\n\t\t\t\t\treturn this.state.type === t;\n\t\t\t\t}, e.prototype.isKeyword = function (t) {\n\t\t\t\t\treturn L(t);\n\t\t\t\t}, e.prototype.lookahead = function () {\n\t\t\t\t\tvar t = this.state;this.state = t.clone(!0), this.isLookahead = !0, this.next(), this.isLookahead = !1;var e = this.state.clone(!0);return this.state = t, e;\n\t\t\t\t}, e.prototype.setStrict = function (t) {\n\t\t\t\t\tif (this.state.strict = t, this.match(C.num) || this.match(C.string)) {\n\t\t\t\t\t\tfor (this.state.pos = this.state.start; this.state.pos < this.state.lineStart;) {\n\t\t\t\t\t\t\tthis.state.lineStart = this.input.lastIndexOf(\"\\n\", this.state.lineStart - 2) + 1, --this.state.curLine;\n\t\t\t\t\t\t}this.nextToken();\n\t\t\t\t\t}\n\t\t\t\t}, e.prototype.curContext = function () {\n\t\t\t\t\treturn this.state.context[this.state.context.length - 1];\n\t\t\t\t}, e.prototype.nextToken = function () {\n\t\t\t\t\tvar t = this.curContext();return t && t.preserveSpace || this.skipSpace(), this.state.containsOctal = !1, this.state.octalPosition = null, this.state.start = this.state.pos, this.state.startLoc = this.state.curPosition(), this.state.pos >= this.input.length ? this.finishToken(C.eof) : t.override ? t.override(this) : this.readToken(this.fullCharCodeAtPos());\n\t\t\t\t}, e.prototype.readToken = function (t) {\n\t\t\t\t\treturn a(t) || 92 === t ? this.readWord() : this.getTokenFromCode(t);\n\t\t\t\t}, e.prototype.fullCharCodeAtPos = function () {\n\t\t\t\t\tvar t = this.input.charCodeAt(this.state.pos);return t <= 55295 || t >= 57344 ? t : (t << 10) + this.input.charCodeAt(this.state.pos + 1) - 56613888;\n\t\t\t\t}, e.prototype.pushComment = function (t, e, s, i, r, a) {\n\t\t\t\t\tvar n = { type: t ? \"CommentBlock\" : \"CommentLine\", value: e, start: s, end: i, loc: new X(r, a) };this.isLookahead || (this.state.tokens.push(n), this.state.comments.push(n), this.addComment(n));\n\t\t\t\t}, e.prototype.skipBlockComment = function () {\n\t\t\t\t\tvar t = this.state.curPosition(),\n\t\t\t\t\t    e = this.state.pos,\n\t\t\t\t\t    s = this.input.indexOf(\"*/\", this.state.pos += 2);-1 === s && this.raise(this.state.pos - 2, \"Unterminated comment\"), this.state.pos = s + 2, F.lastIndex = e;for (var i = void 0; (i = F.exec(this.input)) && i.index < this.state.pos;) {\n\t\t\t\t\t\t++this.state.curLine, this.state.lineStart = i.index + i[0].length;\n\t\t\t\t\t}this.pushComment(!0, this.input.slice(e + 2, s), e, this.state.pos, t, this.state.curPosition());\n\t\t\t\t}, e.prototype.skipLineComment = function (t) {\n\t\t\t\t\tfor (var e = this.state.pos, s = this.state.curPosition(), i = this.input.charCodeAt(this.state.pos += t); this.state.pos < this.input.length && 10 !== i && 13 !== i && 8232 !== i && 8233 !== i;) {\n\t\t\t\t\t\t++this.state.pos, i = this.input.charCodeAt(this.state.pos);\n\t\t\t\t\t}this.pushComment(!1, this.input.slice(e + t, this.state.pos), e, this.state.pos, s, this.state.curPosition());\n\t\t\t\t}, e.prototype.skipSpace = function () {\n\t\t\t\t\tt: for (; this.state.pos < this.input.length;) {\n\t\t\t\t\t\tvar t = this.input.charCodeAt(this.state.pos);switch (t) {case 32:case 160:\n\t\t\t\t\t\t\t\t++this.state.pos;break;case 13:\n\t\t\t\t\t\t\t\t10 === this.input.charCodeAt(this.state.pos + 1) && ++this.state.pos;case 10:case 8232:case 8233:\n\t\t\t\t\t\t\t\t++this.state.pos, ++this.state.curLine, this.state.lineStart = this.state.pos;break;case 47:\n\t\t\t\t\t\t\t\tswitch (this.input.charCodeAt(this.state.pos + 1)) {case 42:\n\t\t\t\t\t\t\t\t\t\tthis.skipBlockComment();break;case 47:\n\t\t\t\t\t\t\t\t\t\tthis.skipLineComment(2);break;default:\n\t\t\t\t\t\t\t\t\t\tbreak t;}break;default:\n\t\t\t\t\t\t\t\tif (!(t > 8 && t < 14 || t >= 5760 && B.test(String.fromCharCode(t)))) break t;++this.state.pos;}\n\t\t\t\t\t}\n\t\t\t\t}, e.prototype.finishToken = function (t, e) {\n\t\t\t\t\tthis.state.end = this.state.pos, this.state.endLoc = this.state.curPosition();var s = this.state.type;this.state.type = t, this.state.value = e, this.updateContext(s);\n\t\t\t\t}, e.prototype.readToken_dot = function () {\n\t\t\t\t\tvar t = this.input.charCodeAt(this.state.pos + 1);if (t >= 48 && t <= 57) return this.readNumber(!0);var e = this.input.charCodeAt(this.state.pos + 2);return 46 === t && 46 === e ? (this.state.pos += 3, this.finishToken(C.ellipsis)) : (++this.state.pos, this.finishToken(C.dot));\n\t\t\t\t}, e.prototype.readToken_slash = function () {\n\t\t\t\t\treturn this.state.exprAllowed ? (++this.state.pos, this.readRegexp()) : 61 === this.input.charCodeAt(this.state.pos + 1) ? this.finishOp(C.assign, 2) : this.finishOp(C.slash, 1);\n\t\t\t\t}, e.prototype.readToken_mult_modulo = function (t) {\n\t\t\t\t\tvar e = 42 === t ? C.star : C.modulo,\n\t\t\t\t\t    s = 1,\n\t\t\t\t\t    i = this.input.charCodeAt(this.state.pos + 1);return 42 === i && (s++, i = this.input.charCodeAt(this.state.pos + 2), e = C.exponent), 61 === i && (s++, e = C.assign), this.finishOp(e, s);\n\t\t\t\t}, e.prototype.readToken_pipe_amp = function (t) {\n\t\t\t\t\tvar e = this.input.charCodeAt(this.state.pos + 1);return e === t ? this.finishOp(124 === t ? C.logicalOR : C.logicalAND, 2) : 61 === e ? this.finishOp(C.assign, 2) : 124 === t && 125 === e && this.hasPlugin(\"flow\") ? this.finishOp(C.braceBarR, 2) : this.finishOp(124 === t ? C.bitwiseOR : C.bitwiseAND, 1);\n\t\t\t\t}, e.prototype.readToken_caret = function () {\n\t\t\t\t\treturn 61 === this.input.charCodeAt(this.state.pos + 1) ? this.finishOp(C.assign, 2) : this.finishOp(C.bitwiseXOR, 1);\n\t\t\t\t}, e.prototype.readToken_plus_min = function (t) {\n\t\t\t\t\tvar e = this.input.charCodeAt(this.state.pos + 1);return e === t ? 45 === e && 62 === this.input.charCodeAt(this.state.pos + 2) && M.test(this.input.slice(this.state.lastTokEnd, this.state.pos)) ? (this.skipLineComment(3), this.skipSpace(), this.nextToken()) : this.finishOp(C.incDec, 2) : 61 === e ? this.finishOp(C.assign, 2) : this.finishOp(C.plusMin, 1);\n\t\t\t\t}, e.prototype.readToken_lt_gt = function (t) {\n\t\t\t\t\tvar e = this.input.charCodeAt(this.state.pos + 1),\n\t\t\t\t\t    s = 1;return e === t ? (s = 62 === t && 62 === this.input.charCodeAt(this.state.pos + 2) ? 3 : 2, 61 === this.input.charCodeAt(this.state.pos + s) ? this.finishOp(C.assign, s + 1) : this.finishOp(C.bitShift, s)) : 33 === e && 60 === t && 45 === this.input.charCodeAt(this.state.pos + 2) && 45 === this.input.charCodeAt(this.state.pos + 3) ? (this.inModule && this.unexpected(), this.skipLineComment(4), this.skipSpace(), this.nextToken()) : (61 === e && (s = 2), this.finishOp(C.relational, s));\n\t\t\t\t}, e.prototype.readToken_eq_excl = function (t) {\n\t\t\t\t\tvar e = this.input.charCodeAt(this.state.pos + 1);return 61 === e ? this.finishOp(C.equality, 61 === this.input.charCodeAt(this.state.pos + 2) ? 3 : 2) : 61 === t && 62 === e ? (this.state.pos += 2, this.finishToken(C.arrow)) : this.finishOp(61 === t ? C.eq : C.prefix, 1);\n\t\t\t\t}, e.prototype.readToken_question = function () {\n\t\t\t\t\tvar t = this.input.charCodeAt(this.state.pos + 1),\n\t\t\t\t\t    e = this.input.charCodeAt(this.state.pos + 2);return 46 !== t || e >= 48 && e <= 57 ? (++this.state.pos, this.finishToken(C.question)) : (this.state.pos += 2, this.finishToken(C.questionDot));\n\t\t\t\t}, e.prototype.getTokenFromCode = function (t) {\n\t\t\t\t\tswitch (t) {case 35:\n\t\t\t\t\t\t\tif (this.hasPlugin(\"classPrivateProperties\") && this.state.inClass) return ++this.state.pos, this.finishToken(C.hash);this.raise(this.state.pos, \"Unexpected character '\" + c(t) + \"'\");case 46:\n\t\t\t\t\t\t\treturn this.readToken_dot();case 40:\n\t\t\t\t\t\t\treturn ++this.state.pos, this.finishToken(C.parenL);case 41:\n\t\t\t\t\t\t\treturn ++this.state.pos, this.finishToken(C.parenR);case 59:\n\t\t\t\t\t\t\treturn ++this.state.pos, this.finishToken(C.semi);case 44:\n\t\t\t\t\t\t\treturn ++this.state.pos, this.finishToken(C.comma);case 91:\n\t\t\t\t\t\t\treturn ++this.state.pos, this.finishToken(C.bracketL);case 93:\n\t\t\t\t\t\t\treturn ++this.state.pos, this.finishToken(C.bracketR);case 123:\n\t\t\t\t\t\t\treturn this.hasPlugin(\"flow\") && 124 === this.input.charCodeAt(this.state.pos + 1) ? this.finishOp(C.braceBarL, 2) : (++this.state.pos, this.finishToken(C.braceL));case 125:\n\t\t\t\t\t\t\treturn ++this.state.pos, this.finishToken(C.braceR);case 58:\n\t\t\t\t\t\t\treturn this.hasPlugin(\"functionBind\") && 58 === this.input.charCodeAt(this.state.pos + 1) ? this.finishOp(C.doubleColon, 2) : (++this.state.pos, this.finishToken(C.colon));case 63:\n\t\t\t\t\t\t\treturn this.readToken_question();case 64:\n\t\t\t\t\t\t\treturn ++this.state.pos, this.finishToken(C.at);case 96:\n\t\t\t\t\t\t\treturn ++this.state.pos, this.finishToken(C.backQuote);case 48:\n\t\t\t\t\t\t\tvar e = this.input.charCodeAt(this.state.pos + 1);if (120 === e || 88 === e) return this.readRadixNumber(16);if (111 === e || 79 === e) return this.readRadixNumber(8);if (98 === e || 66 === e) return this.readRadixNumber(2);case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:\n\t\t\t\t\t\t\treturn this.readNumber(!1);case 34:case 39:\n\t\t\t\t\t\t\treturn this.readString(t);case 47:\n\t\t\t\t\t\t\treturn this.readToken_slash();case 37:case 42:\n\t\t\t\t\t\t\treturn this.readToken_mult_modulo(t);case 124:case 38:\n\t\t\t\t\t\t\treturn this.readToken_pipe_amp(t);case 94:\n\t\t\t\t\t\t\treturn this.readToken_caret();case 43:case 45:\n\t\t\t\t\t\t\treturn this.readToken_plus_min(t);case 60:case 62:\n\t\t\t\t\t\t\treturn this.readToken_lt_gt(t);case 61:case 33:\n\t\t\t\t\t\t\treturn this.readToken_eq_excl(t);case 126:\n\t\t\t\t\t\t\treturn this.finishOp(C.prefix, 1);}this.raise(this.state.pos, \"Unexpected character '\" + c(t) + \"'\");\n\t\t\t\t}, e.prototype.finishOp = function (t, e) {\n\t\t\t\t\tvar s = this.input.slice(this.state.pos, this.state.pos + e);return this.state.pos += e, this.finishToken(t, s);\n\t\t\t\t}, e.prototype.readRegexp = function () {\n\t\t\t\t\tfor (var t = this.state.pos, e = void 0, s = void 0;;) {\n\t\t\t\t\t\tthis.state.pos >= this.input.length && this.raise(t, \"Unterminated regular expression\");var i = this.input.charAt(this.state.pos);if (M.test(i) && this.raise(t, \"Unterminated regular expression\"), e) e = !1;else {\n\t\t\t\t\t\t\tif (\"[\" === i) s = !0;else if (\"]\" === i && s) s = !1;else if (\"/\" === i && !s) break;e = \"\\\\\" === i;\n\t\t\t\t\t\t}++this.state.pos;\n\t\t\t\t\t}var r = this.input.slice(t, this.state.pos);++this.state.pos;var a = this.readWord1();return a && (/^[gmsiyu]*$/.test(a) || this.raise(t, \"Invalid regular expression flag\")), this.finishToken(C.regexp, { pattern: r, flags: a });\n\t\t\t\t}, e.prototype.readInt = function (t, e) {\n\t\t\t\t\tfor (var s = this.state.pos, i = 16 === t ? G.hex : G.decBinOct, r = 0, a = 0, n = null == e ? 1 / 0 : e; a < n; ++a) {\n\t\t\t\t\t\tvar o = this.input.charCodeAt(this.state.pos),\n\t\t\t\t\t\t    h = void 0;if (this.hasPlugin(\"numericSeparator\")) {\n\t\t\t\t\t\t\tvar p = this.input.charCodeAt(this.state.pos - 1),\n\t\t\t\t\t\t\t    c = this.input.charCodeAt(this.state.pos + 1);if (95 === o) {\n\t\t\t\t\t\t\t\t(i.indexOf(p) > -1 || i.indexOf(c) > -1 || Number.isNaN(c)) && this.raise(this.state.pos, \"Invalid NumericLiteralSeparator\"), ++this.state.pos;continue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}if ((h = o >= 97 ? o - 97 + 10 : o >= 65 ? o - 65 + 10 : o >= 48 && o <= 57 ? o - 48 : 1 / 0) >= t) break;++this.state.pos, r = r * t + h;\n\t\t\t\t\t}return this.state.pos === s || null != e && this.state.pos - s !== e ? null : r;\n\t\t\t\t}, e.prototype.readRadixNumber = function (t) {\n\t\t\t\t\tthis.state.pos += 2;var e = this.readInt(t);return null == e && this.raise(this.state.start + 2, \"Expected number in radix \" + t), a(this.fullCharCodeAtPos()) && this.raise(this.state.pos, \"Identifier directly after number\"), this.finishToken(C.num, e);\n\t\t\t\t}, e.prototype.readNumber = function (t) {\n\t\t\t\t\tvar e = this.state.pos,\n\t\t\t\t\t    s = 48 === this.input.charCodeAt(e),\n\t\t\t\t\t    i = !1;t || null !== this.readInt(10) || this.raise(e, \"Invalid number\"), s && this.state.pos == e + 1 && (s = !1);var r = this.input.charCodeAt(this.state.pos);46 !== r || s || (++this.state.pos, this.readInt(10), i = !0, r = this.input.charCodeAt(this.state.pos)), 69 !== r && 101 !== r || s || (43 !== (r = this.input.charCodeAt(++this.state.pos)) && 45 !== r || ++this.state.pos, null === this.readInt(10) && this.raise(e, \"Invalid number\"), i = !0), a(this.fullCharCodeAtPos()) && this.raise(this.state.pos, \"Identifier directly after number\");var n = this.input.slice(e, this.state.pos).replace(/_/g, \"\"),\n\t\t\t\t\t    o = void 0;return i ? o = parseFloat(n) : s && 1 !== n.length ? this.state.strict ? this.raise(e, \"Invalid number\") : o = /[89]/.test(n) ? parseInt(n, 10) : parseInt(n, 8) : o = parseInt(n, 10), this.finishToken(C.num, o);\n\t\t\t\t}, e.prototype.readCodePoint = function (t) {\n\t\t\t\t\tvar e = void 0;if (123 === this.input.charCodeAt(this.state.pos)) {\n\t\t\t\t\t\tvar s = ++this.state.pos;if (e = this.readHexChar(this.input.indexOf(\"}\", this.state.pos) - this.state.pos, t), ++this.state.pos, null === e) --this.state.invalidTemplateEscapePosition;else if (e > 1114111) {\n\t\t\t\t\t\t\tif (!t) return this.state.invalidTemplateEscapePosition = s - 2, null;this.raise(s, \"Code point out of bounds\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else e = this.readHexChar(4, t);return e;\n\t\t\t\t}, e.prototype.readString = function (t) {\n\t\t\t\t\tfor (var e = \"\", s = ++this.state.pos;;) {\n\t\t\t\t\t\tthis.state.pos >= this.input.length && this.raise(this.state.start, \"Unterminated string constant\");var i = this.input.charCodeAt(this.state.pos);if (i === t) break;92 === i ? (e += this.input.slice(s, this.state.pos), e += this.readEscapedChar(!1), s = this.state.pos) : (o(i) && this.raise(this.state.start, \"Unterminated string constant\"), ++this.state.pos);\n\t\t\t\t\t}return e += this.input.slice(s, this.state.pos++), this.finishToken(C.string, e);\n\t\t\t\t}, e.prototype.readTmplToken = function () {\n\t\t\t\t\tfor (var t = \"\", e = this.state.pos, s = !1;;) {\n\t\t\t\t\t\tthis.state.pos >= this.input.length && this.raise(this.state.start, \"Unterminated template\");var i = this.input.charCodeAt(this.state.pos);if (96 === i || 36 === i && 123 === this.input.charCodeAt(this.state.pos + 1)) return this.state.pos === this.state.start && this.match(C.template) ? 36 === i ? (this.state.pos += 2, this.finishToken(C.dollarBraceL)) : (++this.state.pos, this.finishToken(C.backQuote)) : (t += this.input.slice(e, this.state.pos), this.finishToken(C.template, s ? null : t));if (92 === i) {\n\t\t\t\t\t\t\tt += this.input.slice(e, this.state.pos);var r = this.readEscapedChar(!0);null === r ? s = !0 : t += r, e = this.state.pos;\n\t\t\t\t\t\t} else if (o(i)) {\n\t\t\t\t\t\t\tswitch (t += this.input.slice(e, this.state.pos), ++this.state.pos, i) {case 13:\n\t\t\t\t\t\t\t\t\t10 === this.input.charCodeAt(this.state.pos) && ++this.state.pos;case 10:\n\t\t\t\t\t\t\t\t\tt += \"\\n\";break;default:\n\t\t\t\t\t\t\t\t\tt += String.fromCharCode(i);}++this.state.curLine, this.state.lineStart = this.state.pos, e = this.state.pos;\n\t\t\t\t\t\t} else ++this.state.pos;\n\t\t\t\t\t}\n\t\t\t\t}, e.prototype.readEscapedChar = function (t) {\n\t\t\t\t\tvar e = !t,\n\t\t\t\t\t    s = this.input.charCodeAt(++this.state.pos);switch (++this.state.pos, s) {case 110:\n\t\t\t\t\t\t\treturn \"\\n\";case 114:\n\t\t\t\t\t\t\treturn \"\\r\";case 120:\n\t\t\t\t\t\t\tvar i = this.readHexChar(2, e);return null === i ? null : String.fromCharCode(i);case 117:\n\t\t\t\t\t\t\tvar r = this.readCodePoint(e);return null === r ? null : c(r);case 116:\n\t\t\t\t\t\t\treturn \"\\t\";case 98:\n\t\t\t\t\t\t\treturn \"\\b\";case 118:\n\t\t\t\t\t\t\treturn \"\\v\";case 102:\n\t\t\t\t\t\t\treturn \"\\f\";case 13:\n\t\t\t\t\t\t\t10 === this.input.charCodeAt(this.state.pos) && ++this.state.pos;case 10:\n\t\t\t\t\t\t\treturn this.state.lineStart = this.state.pos, ++this.state.curLine, \"\";default:\n\t\t\t\t\t\t\tif (s >= 48 && s <= 55) {\n\t\t\t\t\t\t\t\tvar a = this.state.pos - 1,\n\t\t\t\t\t\t\t\t    n = this.input.substr(this.state.pos - 1, 3).match(/^[0-7]+/)[0],\n\t\t\t\t\t\t\t\t    o = parseInt(n, 8);if (o > 255 && (n = n.slice(0, -1), o = parseInt(n, 8)), o > 0) {\n\t\t\t\t\t\t\t\t\tif (t) return this.state.invalidTemplateEscapePosition = a, null;this.state.strict ? this.raise(a, \"Octal literal in strict mode\") : this.state.containsOctal || (this.state.containsOctal = !0, this.state.octalPosition = a);\n\t\t\t\t\t\t\t\t}return this.state.pos += n.length - 1, String.fromCharCode(o);\n\t\t\t\t\t\t\t}return String.fromCharCode(s);}\n\t\t\t\t}, e.prototype.readHexChar = function (t, e) {\n\t\t\t\t\tvar s = this.state.pos,\n\t\t\t\t\t    i = this.readInt(16, t);return null === i && (e ? this.raise(s, \"Bad character escape sequence\") : (this.state.pos = s - 1, this.state.invalidTemplateEscapePosition = s - 1)), i;\n\t\t\t\t}, e.prototype.readWord1 = function () {\n\t\t\t\t\tthis.state.containsEsc = !1;for (var t = \"\", e = !0, s = this.state.pos; this.state.pos < this.input.length;) {\n\t\t\t\t\t\tvar i = this.fullCharCodeAtPos();if (n(i)) this.state.pos += i <= 65535 ? 1 : 2;else {\n\t\t\t\t\t\t\tif (92 !== i) break;this.state.containsEsc = !0, t += this.input.slice(s, this.state.pos);var r = this.state.pos;117 !== this.input.charCodeAt(++this.state.pos) && this.raise(this.state.pos, \"Expecting Unicode escape sequence \\\\uXXXX\"), ++this.state.pos;var o = this.readCodePoint(!0);(e ? a : n)(o, !0) || this.raise(r, \"Invalid Unicode escape\"), t += c(o), s = this.state.pos;\n\t\t\t\t\t\t}e = !1;\n\t\t\t\t\t}return t + this.input.slice(s, this.state.pos);\n\t\t\t\t}, e.prototype.readWord = function () {\n\t\t\t\t\tvar t = this.readWord1(),\n\t\t\t\t\t    e = C.name;return !this.state.containsEsc && this.isKeyword(t) && (e = N[t]), this.finishToken(e, t);\n\t\t\t\t}, e.prototype.braceIsBlock = function (t) {\n\t\t\t\t\tif (t === C.colon) {\n\t\t\t\t\t\tvar e = this.curContext();if (e === V.braceStatement || e === V.braceExpression) return !e.isExpr;\n\t\t\t\t\t}return t === C._return ? M.test(this.input.slice(this.state.lastTokEnd, this.state.start)) : t === C._else || t === C.semi || t === C.eof || t === C.parenR || (t === C.braceL ? this.curContext() === V.braceStatement : !this.state.exprAllowed);\n\t\t\t\t}, e.prototype.updateContext = function (t) {\n\t\t\t\t\tvar e = this.state.type,\n\t\t\t\t\t    s = void 0;!e.keyword || t !== C.dot && t !== C.questionDot ? (s = e.updateContext) ? s.call(this, t) : this.state.exprAllowed = e.beforeExpr : this.state.exprAllowed = !1;\n\t\t\t\t}, e;\n\t\t\t}(J)),\n\t\t\t    Q = [\"leadingComments\", \"trailingComments\", \"innerComments\"],\n\t\t\t    Y = function () {\n\t\t\t\tfunction t(e, s, i) {\n\t\t\t\t\tg(this, t), this.type = \"\", this.start = s, this.end = 0, this.loc = new X(i), e && e.options.ranges && (this.range = [s, 0]), e && e.filename && (this.loc.filename = e.filename);\n\t\t\t\t}return t.prototype.__clone = function () {\n\t\t\t\t\tvar e = new t();for (var s in this) {\n\t\t\t\t\t\tQ.indexOf(s) < 0 && (e[s] = this[s]);\n\t\t\t\t\t}return e;\n\t\t\t\t}, t;\n\t\t\t}(),\n\t\t\t    H = [],\n\t\t\t    $ = { kind: \"loop\" },\n\t\t\t    Z = { kind: \"switch\" },\n\t\t\t    tt = {},\n\t\t\t    et = function (t) {\n\t\t\t\tfunction e(i, r) {\n\t\t\t\t\tg(this, e), i = s(i);var a = P(this, t.call(this, i, r));return a.options = i, a.inModule = \"module\" === a.options.sourceType, a.input = r, a.plugins = l(a.options.plugins), a.filename = i.sourceFilename, 0 === a.state.pos && \"#\" === a.input[0] && \"!\" === a.input[1] && a.skipLineComment(2), a;\n\t\t\t\t}return w(e, t), e.prototype.parse = function () {\n\t\t\t\t\tvar t = this.startNode(),\n\t\t\t\t\t    e = this.startNode();return this.nextToken(), this.parseTopLevel(t, e);\n\t\t\t\t}, e;\n\t\t\t}(function (t) {\n\t\t\t\tfunction e() {\n\t\t\t\t\treturn g(this, e), P(this, t.apply(this, arguments));\n\t\t\t\t}return w(e, t), e.prototype.parseTopLevel = function (t, e) {\n\t\t\t\t\treturn e.sourceType = this.options.sourceType, this.parseBlockBody(e, !0, !0, C.eof), t.program = this.finishNode(e, \"Program\"), t.comments = this.state.comments, t.tokens = this.state.tokens, this.finishNode(t, \"File\");\n\t\t\t\t}, e.prototype.stmtToDirective = function (t) {\n\t\t\t\t\tvar e = t.expression,\n\t\t\t\t\t    s = this.startNodeAt(e.start, e.loc.start),\n\t\t\t\t\t    i = this.startNodeAt(t.start, t.loc.start),\n\t\t\t\t\t    r = this.input.slice(e.start, e.end),\n\t\t\t\t\t    a = s.value = r.slice(1, -1);return this.addExtra(s, \"raw\", r), this.addExtra(s, \"rawValue\", a), i.value = this.finishNodeAt(s, \"DirectiveLiteral\", e.end, e.loc.end), this.finishNodeAt(i, \"Directive\", t.end, t.loc.end);\n\t\t\t\t}, e.prototype.parseStatement = function (t, e) {\n\t\t\t\t\tthis.match(C.at) && this.parseDecorators(!0);var s = this.state.type,\n\t\t\t\t\t    i = this.startNode();switch (s) {case C._break:case C._continue:\n\t\t\t\t\t\t\treturn this.parseBreakContinueStatement(i, s.keyword);case C._debugger:\n\t\t\t\t\t\t\treturn this.parseDebuggerStatement(i);case C._do:\n\t\t\t\t\t\t\treturn this.parseDoStatement(i);case C._for:\n\t\t\t\t\t\t\treturn this.parseForStatement(i);case C._function:\n\t\t\t\t\t\t\treturn t || this.unexpected(), this.parseFunctionStatement(i);case C._class:\n\t\t\t\t\t\t\treturn t || this.unexpected(), this.parseClass(i, !0);case C._if:\n\t\t\t\t\t\t\treturn this.parseIfStatement(i);case C._return:\n\t\t\t\t\t\t\treturn this.parseReturnStatement(i);case C._switch:\n\t\t\t\t\t\t\treturn this.parseSwitchStatement(i);case C._throw:\n\t\t\t\t\t\t\treturn this.parseThrowStatement(i);case C._try:\n\t\t\t\t\t\t\treturn this.parseTryStatement(i);case C._let:case C._const:\n\t\t\t\t\t\t\tt || this.unexpected();case C._var:\n\t\t\t\t\t\t\treturn this.parseVarStatement(i, s);case C._while:\n\t\t\t\t\t\t\treturn this.parseWhileStatement(i);case C._with:\n\t\t\t\t\t\t\treturn this.parseWithStatement(i);case C.braceL:\n\t\t\t\t\t\t\treturn this.parseBlock();case C.semi:\n\t\t\t\t\t\t\treturn this.parseEmptyStatement(i);case C._export:case C._import:\n\t\t\t\t\t\t\tif (this.hasPlugin(\"dynamicImport\") && this.lookahead().type === C.parenL || this.hasPlugin(\"importMeta\") && this.lookahead().type === C.dot) break;return this.options.allowImportExportEverywhere || (e || this.raise(this.state.start, \"'import' and 'export' may only appear at the top level\"), this.inModule || this.raise(this.state.start, \"'import' and 'export' may appear only with 'sourceType: module'\")), s === C._import ? this.parseImport(i) : this.parseExport(i);case C.name:\n\t\t\t\t\t\t\tif (\"async\" === this.state.value) {\n\t\t\t\t\t\t\t\tvar r = this.state.clone();if (this.next(), this.match(C._function) && !this.canInsertSemicolon()) return this.expect(C._function), this.parseFunction(i, !0, !1, !0);this.state = r;\n\t\t\t\t\t\t\t}}var a = this.state.value,\n\t\t\t\t\t    n = this.parseExpression();return s === C.name && \"Identifier\" === n.type && this.eat(C.colon) ? this.parseLabeledStatement(i, a, n) : this.parseExpressionStatement(i, n);\n\t\t\t\t}, e.prototype.takeDecorators = function (t) {\n\t\t\t\t\tthis.state.decorators.length && (t.decorators = this.state.decorators, this.state.decorators = []);\n\t\t\t\t}, e.prototype.parseDecorators = function (t) {\n\t\t\t\t\tfor (; this.match(C.at);) {\n\t\t\t\t\t\tvar e = this.parseDecorator();this.state.decorators.push(e);\n\t\t\t\t\t}t && this.match(C._export) || this.match(C._class) || this.raise(this.state.start, \"Leading decorators must be attached to a class declaration\");\n\t\t\t\t}, e.prototype.parseDecorator = function () {\n\t\t\t\t\tthis.hasPlugin(\"decorators\") || this.unexpected();var t = this.startNode();return this.next(), t.expression = this.parseMaybeAssign(), this.finishNode(t, \"Decorator\");\n\t\t\t\t}, e.prototype.parseBreakContinueStatement = function (t, e) {\n\t\t\t\t\tvar s = \"break\" === e;this.next(), this.isLineTerminator() ? t.label = null : this.match(C.name) ? (t.label = this.parseIdentifier(), this.semicolon()) : this.unexpected();var i = void 0;for (i = 0; i < this.state.labels.length; ++i) {\n\t\t\t\t\t\tvar r = this.state.labels[i];if (null == t.label || r.name === t.label.name) {\n\t\t\t\t\t\t\tif (null != r.kind && (s || \"loop\" === r.kind)) break;if (t.label && s) break;\n\t\t\t\t\t\t}\n\t\t\t\t\t}return i === this.state.labels.length && this.raise(t.start, \"Unsyntactic \" + e), this.finishNode(t, s ? \"BreakStatement\" : \"ContinueStatement\");\n\t\t\t\t}, e.prototype.parseDebuggerStatement = function (t) {\n\t\t\t\t\treturn this.next(), this.semicolon(), this.finishNode(t, \"DebuggerStatement\");\n\t\t\t\t}, e.prototype.parseDoStatement = function (t) {\n\t\t\t\t\treturn this.next(), this.state.labels.push($), t.body = this.parseStatement(!1), this.state.labels.pop(), this.expect(C._while), t.test = this.parseParenExpression(), this.eat(C.semi), this.finishNode(t, \"DoWhileStatement\");\n\t\t\t\t}, e.prototype.parseForStatement = function (t) {\n\t\t\t\t\tthis.next(), this.state.labels.push($);var e = !1;if (this.hasPlugin(\"asyncGenerators\") && this.state.inAsync && this.isContextual(\"await\") && (e = !0, this.next()), this.expect(C.parenL), this.match(C.semi)) return e && this.unexpected(), this.parseFor(t, null);if (this.match(C._var) || this.match(C._let) || this.match(C._const)) {\n\t\t\t\t\t\tvar s = this.startNode(),\n\t\t\t\t\t\t    i = this.state.type;return this.next(), this.parseVar(s, !0, i), this.finishNode(s, \"VariableDeclaration\"), !this.match(C._in) && !this.isContextual(\"of\") || 1 !== s.declarations.length || s.declarations[0].init ? (e && this.unexpected(), this.parseFor(t, s)) : this.parseForIn(t, s, e);\n\t\t\t\t\t}var r = { start: 0 },\n\t\t\t\t\t    a = this.parseExpression(!0, r);if (this.match(C._in) || this.isContextual(\"of\")) {\n\t\t\t\t\t\tvar n = this.isContextual(\"of\") ? \"for-of statement\" : \"for-in statement\";return this.toAssignable(a, void 0, n), this.checkLVal(a, void 0, void 0, n), this.parseForIn(t, a, e);\n\t\t\t\t\t}return r.start && this.unexpected(r.start), e && this.unexpected(), this.parseFor(t, a);\n\t\t\t\t}, e.prototype.parseFunctionStatement = function (t) {\n\t\t\t\t\treturn this.next(), this.parseFunction(t, !0);\n\t\t\t\t}, e.prototype.parseIfStatement = function (t) {\n\t\t\t\t\treturn this.next(), t.test = this.parseParenExpression(), t.consequent = this.parseStatement(!1), t.alternate = this.eat(C._else) ? this.parseStatement(!1) : null, this.finishNode(t, \"IfStatement\");\n\t\t\t\t}, e.prototype.parseReturnStatement = function (t) {\n\t\t\t\t\treturn this.state.inFunction || this.options.allowReturnOutsideFunction || this.raise(this.state.start, \"'return' outside of function\"), this.next(), this.isLineTerminator() ? t.argument = null : (t.argument = this.parseExpression(), this.semicolon()), this.finishNode(t, \"ReturnStatement\");\n\t\t\t\t}, e.prototype.parseSwitchStatement = function (t) {\n\t\t\t\t\tthis.next(), t.discriminant = this.parseParenExpression();var e = t.cases = [];this.expect(C.braceL), this.state.labels.push(Z);for (var s, i = void 0; !this.match(C.braceR);) {\n\t\t\t\t\t\tif (this.match(C._case) || this.match(C._default)) {\n\t\t\t\t\t\t\tvar r = this.match(C._case);i && this.finishNode(i, \"SwitchCase\"), e.push(i = this.startNode()), i.consequent = [], this.next(), r ? i.test = this.parseExpression() : (s && this.raise(this.state.lastTokStart, \"Multiple default clauses\"), s = !0, i.test = null), this.expect(C.colon);\n\t\t\t\t\t\t} else i ? i.consequent.push(this.parseStatement(!0)) : this.unexpected();\n\t\t\t\t\t}return i && this.finishNode(i, \"SwitchCase\"), this.next(), this.state.labels.pop(), this.finishNode(t, \"SwitchStatement\");\n\t\t\t\t}, e.prototype.parseThrowStatement = function (t) {\n\t\t\t\t\treturn this.next(), M.test(this.input.slice(this.state.lastTokEnd, this.state.start)) && this.raise(this.state.lastTokEnd, \"Illegal newline after throw\"), t.argument = this.parseExpression(), this.semicolon(), this.finishNode(t, \"ThrowStatement\");\n\t\t\t\t}, e.prototype.parseTryStatement = function (t) {\n\t\t\t\t\tif (this.next(), t.block = this.parseBlock(), t.handler = null, this.match(C._catch)) {\n\t\t\t\t\t\tvar e = this.startNode();this.next(), this.expect(C.parenL), e.param = this.parseBindingAtom(), this.checkLVal(e.param, !0, Object.create(null), \"catch clause\"), this.expect(C.parenR), e.body = this.parseBlock(), t.handler = this.finishNode(e, \"CatchClause\");\n\t\t\t\t\t}return t.guardedHandlers = H, t.finalizer = this.eat(C._finally) ? this.parseBlock() : null, t.handler || t.finalizer || this.raise(t.start, \"Missing catch or finally clause\"), this.finishNode(t, \"TryStatement\");\n\t\t\t\t}, e.prototype.parseVarStatement = function (t, e) {\n\t\t\t\t\treturn this.next(), this.parseVar(t, !1, e), this.semicolon(), this.finishNode(t, \"VariableDeclaration\");\n\t\t\t\t}, e.prototype.parseWhileStatement = function (t) {\n\t\t\t\t\treturn this.next(), t.test = this.parseParenExpression(), this.state.labels.push($), t.body = this.parseStatement(!1), this.state.labels.pop(), this.finishNode(t, \"WhileStatement\");\n\t\t\t\t}, e.prototype.parseWithStatement = function (t) {\n\t\t\t\t\treturn this.state.strict && this.raise(this.state.start, \"'with' in strict mode\"), this.next(), t.object = this.parseParenExpression(), t.body = this.parseStatement(!1), this.finishNode(t, \"WithStatement\");\n\t\t\t\t}, e.prototype.parseEmptyStatement = function (t) {\n\t\t\t\t\treturn this.next(), this.finishNode(t, \"EmptyStatement\");\n\t\t\t\t}, e.prototype.parseLabeledStatement = function (t, e, s) {\n\t\t\t\t\tfor (var i = this.state.labels, r = Array.isArray(i), a = 0, i = r ? i : i[Symbol.iterator]();;) {\n\t\t\t\t\t\tvar n;if (r) {\n\t\t\t\t\t\t\tif (a >= i.length) break;n = i[a++];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif ((a = i.next()).done) break;n = a.value;\n\t\t\t\t\t\t}n.name === e && this.raise(s.start, \"Label '\" + e + \"' is already declared\");\n\t\t\t\t\t}for (var o = this.state.type.isLoop ? \"loop\" : this.match(C._switch) ? \"switch\" : null, h = this.state.labels.length - 1; h >= 0; h--) {\n\t\t\t\t\t\tvar p = this.state.labels[h];if (p.statementStart !== t.start) break;p.statementStart = this.state.start, p.kind = o;\n\t\t\t\t\t}return this.state.labels.push({ name: e, kind: o, statementStart: this.state.start }), t.body = this.parseStatement(!0), this.state.labels.pop(), t.label = s, this.finishNode(t, \"LabeledStatement\");\n\t\t\t\t}, e.prototype.parseExpressionStatement = function (t, e) {\n\t\t\t\t\treturn t.expression = e, this.semicolon(), this.finishNode(t, \"ExpressionStatement\");\n\t\t\t\t}, e.prototype.parseBlock = function (t) {\n\t\t\t\t\tvar e = this.startNode();return this.expect(C.braceL), this.parseBlockBody(e, t, !1, C.braceR), this.finishNode(e, \"BlockStatement\");\n\t\t\t\t}, e.prototype.isValidDirective = function (t) {\n\t\t\t\t\treturn \"ExpressionStatement\" === t.type && \"StringLiteral\" === t.expression.type && !t.expression.extra.parenthesized;\n\t\t\t\t}, e.prototype.parseBlockBody = function (t, e, s, i) {\n\t\t\t\t\tfor (var r = t.body = [], a = t.directives = [], n = !1, o = void 0, h = void 0; !this.eat(i);) {\n\t\t\t\t\t\tn || !this.state.containsOctal || h || (h = this.state.octalPosition);var p = this.parseStatement(!0, s);if (e && !n && this.isValidDirective(p)) {\n\t\t\t\t\t\t\tvar c = this.stmtToDirective(p);a.push(c), void 0 === o && \"use strict\" === c.value.value && (o = this.state.strict, this.setStrict(!0), h && this.raise(h, \"Octal literal in strict mode\"));\n\t\t\t\t\t\t} else n = !0, r.push(p);\n\t\t\t\t\t}!1 === o && this.setStrict(!1);\n\t\t\t\t}, e.prototype.parseFor = function (t, e) {\n\t\t\t\t\treturn t.init = e, this.expect(C.semi), t.test = this.match(C.semi) ? null : this.parseExpression(), this.expect(C.semi), t.update = this.match(C.parenR) ? null : this.parseExpression(), this.expect(C.parenR), t.body = this.parseStatement(!1), this.state.labels.pop(), this.finishNode(t, \"ForStatement\");\n\t\t\t\t}, e.prototype.parseForIn = function (t, e, s) {\n\t\t\t\t\tvar i = this.match(C._in) ? \"ForInStatement\" : \"ForOfStatement\";return s ? this.eatContextual(\"of\") : this.next(), \"ForOfStatement\" === i && (t.await = !!s), t.left = e, t.right = this.parseExpression(), this.expect(C.parenR), t.body = this.parseStatement(!1), this.state.labels.pop(), this.finishNode(t, i);\n\t\t\t\t}, e.prototype.parseVar = function (t, e, s) {\n\t\t\t\t\tvar i = t.declarations = [];for (t.kind = s.keyword;;) {\n\t\t\t\t\t\tvar r = this.startNode();if (this.parseVarHead(r), this.eat(C.eq) ? r.init = this.parseMaybeAssign(e) : s !== C._const || this.match(C._in) || this.isContextual(\"of\") ? \"Identifier\" === r.id.type || e && (this.match(C._in) || this.isContextual(\"of\")) ? r.init = null : this.raise(this.state.lastTokEnd, \"Complex binding patterns require an initialization value\") : this.unexpected(), i.push(this.finishNode(r, \"VariableDeclarator\")), !this.eat(C.comma)) break;\n\t\t\t\t\t}return t;\n\t\t\t\t}, e.prototype.parseVarHead = function (t) {\n\t\t\t\t\tt.id = this.parseBindingAtom(), this.checkLVal(t.id, !0, void 0, \"variable declaration\");\n\t\t\t\t}, e.prototype.parseFunction = function (t, e, s, i, r) {\n\t\t\t\t\tvar a = this.state.inMethod;return this.state.inMethod = !1, this.initFunction(t, i), this.match(C.star) && (t.async && !this.hasPlugin(\"asyncGenerators\") ? this.unexpected() : (t.generator = !0, this.next())), !e || r || this.match(C.name) || this.match(C._yield) || this.unexpected(), (this.match(C.name) || this.match(C._yield)) && (t.id = this.parseBindingIdentifier()), this.parseFunctionParams(t), this.parseFunctionBody(t, s), this.state.inMethod = a, this.finishNode(t, e ? \"FunctionDeclaration\" : \"FunctionExpression\");\n\t\t\t\t}, e.prototype.parseFunctionParams = function (t) {\n\t\t\t\t\tthis.expect(C.parenL), t.params = this.parseBindingList(C.parenR);\n\t\t\t\t}, e.prototype.parseClass = function (t, e, s) {\n\t\t\t\t\treturn this.next(), this.takeDecorators(t), this.parseClassId(t, e, s), this.parseClassSuper(t), this.parseClassBody(t), this.finishNode(t, e ? \"ClassDeclaration\" : \"ClassExpression\");\n\t\t\t\t}, e.prototype.isClassProperty = function () {\n\t\t\t\t\treturn this.match(C.eq) || this.match(C.semi) || this.match(C.braceR);\n\t\t\t\t}, e.prototype.isClassMethod = function () {\n\t\t\t\t\treturn this.match(C.parenL);\n\t\t\t\t}, e.prototype.isNonstaticConstructor = function (t) {\n\t\t\t\t\treturn !(t.computed || t.static || \"constructor\" !== t.key.name && \"constructor\" !== t.key.value);\n\t\t\t\t}, e.prototype.parseClassBody = function (t) {\n\t\t\t\t\tvar e = this.state.strict;this.state.strict = !0, this.state.inClass = !0;var s = { hadConstructor: !1 },\n\t\t\t\t\t    i = [],\n\t\t\t\t\t    r = this.startNode();for (r.body = [], this.expect(C.braceL); !this.eat(C.braceR);) {\n\t\t\t\t\t\tif (this.eat(C.semi)) i.length > 0 && this.raise(this.state.lastTokEnd, \"Decorators must not be followed by a semicolon\");else if (this.match(C.at)) i.push(this.parseDecorator());else {\n\t\t\t\t\t\t\tvar a = this.startNode();i.length && (a.decorators = i, i = []), this.parseClassMember(r, a, s);\n\t\t\t\t\t\t}\n\t\t\t\t\t}i.length && this.raise(this.state.start, \"You have trailing decorators with no method\"), t.body = this.finishNode(r, \"ClassBody\"), this.state.inClass = !1, this.state.strict = e;\n\t\t\t\t}, e.prototype.parseClassMember = function (t, e, s) {\n\t\t\t\t\tvar i = e,\n\t\t\t\t\t    r = i,\n\t\t\t\t\t    a = i,\n\t\t\t\t\t    n = i;if (this.hasPlugin(\"classPrivateProperties\") && this.match(C.hash)) {\n\t\t\t\t\t\tthis.next();var o = i;return o.key = this.parseIdentifier(!0), void t.body.push(this.parsePrivateClassProperty(o));\n\t\t\t\t\t}if (r.static = !1, this.match(C.name) && \"static\" === this.state.value) {\n\t\t\t\t\t\tvar h = this.parseIdentifier(!0);if (this.isClassMethod()) return a.kind = \"method\", a.computed = !1, a.key = h, void this.parseClassMethod(t, a, !1, !1);if (this.isClassProperty()) return n.computed = !1, n.key = h, void t.body.push(this.parseClassProperty(n));r.static = !0;\n\t\t\t\t\t}if (this.eat(C.star)) return a.kind = \"method\", this.parsePropertyName(a), this.isNonstaticConstructor(a) && this.raise(a.key.start, \"Constructor can't be a generator\"), a.computed || !a.static || \"prototype\" !== a.key.name && \"prototype\" !== a.key.value || this.raise(a.key.start, \"Classes may not have static property named prototype\"), void this.parseClassMethod(t, a, !0, !1);var p = this.match(C.name),\n\t\t\t\t\t    c = this.parsePropertyName(r);if (r.computed || !r.static || \"prototype\" !== r.key.name && \"prototype\" !== r.key.value || this.raise(r.key.start, \"Classes may not have static property named prototype\"), this.isClassMethod()) this.isNonstaticConstructor(a) ? (s.hadConstructor ? this.raise(c.start, \"Duplicate constructor in the same class\") : a.decorators && this.raise(a.start, \"You can't attach decorators to a class constructor\"), s.hadConstructor = !0, a.kind = \"constructor\") : a.kind = \"method\", this.parseClassMethod(t, a, !1, !1);else if (this.isClassProperty()) this.isNonstaticConstructor(n) && this.raise(n.key.start, \"Classes may not have a non-static field named 'constructor'\"), t.body.push(this.parseClassProperty(n));else if (p && \"async\" === c.name && !this.isLineTerminator()) {\n\t\t\t\t\t\tvar l = this.hasPlugin(\"asyncGenerators\") && this.eat(C.star);a.kind = \"method\", this.parsePropertyName(a), this.isNonstaticConstructor(a) && this.raise(a.key.start, \"Constructor can't be an async function\"), this.parseClassMethod(t, a, l, !0);\n\t\t\t\t\t} else !p || \"get\" !== c.name && \"set\" !== c.name || this.isLineTerminator() && this.match(C.star) ? this.isLineTerminator() ? (this.isNonstaticConstructor(n) && this.raise(n.key.start, \"Classes may not have a non-static field named 'constructor'\"), t.body.push(this.parseClassProperty(n))) : this.unexpected() : (a.kind = c.name, this.parsePropertyName(a), this.isNonstaticConstructor(a) && this.raise(a.key.start, \"Constructor can't have get/set modifier\"), this.parseClassMethod(t, a, !1, !1), this.checkGetterSetterParamCount(a));\n\t\t\t\t}, e.prototype.parsePrivateClassProperty = function (t) {\n\t\t\t\t\treturn this.state.inClassProperty = !0, this.match(C.eq) ? (this.next(), t.value = this.parseMaybeAssign()) : t.value = null, this.semicolon(), this.state.inClassProperty = !1, this.finishNode(t, \"ClassPrivateProperty\");\n\t\t\t\t}, e.prototype.parseClassProperty = function (t) {\n\t\t\t\t\tvar e = this.hasPlugin(\"classProperties\"),\n\t\t\t\t\t    s = \"You can only use Class Properties when the 'classProperties' plugin is enabled.\";return t.typeAnnotation || e || this.raise(t.start, s), this.state.inClassProperty = !0, this.match(C.eq) ? (e || this.raise(this.state.start, s), this.next(), t.value = this.parseMaybeAssign()) : t.value = null, this.semicolon(), this.state.inClassProperty = !1, this.finishNode(t, \"ClassProperty\");\n\t\t\t\t}, e.prototype.parseClassMethod = function (t, e, s, i) {\n\t\t\t\t\tthis.parseMethod(e, s, i), t.body.push(this.finishNode(e, \"ClassMethod\"));\n\t\t\t\t}, e.prototype.parseClassId = function (t, e, s) {\n\t\t\t\t\tthis.match(C.name) ? t.id = this.parseIdentifier() : s || !e ? t.id = null : this.unexpected(null, \"A class name is required\");\n\t\t\t\t}, e.prototype.parseClassSuper = function (t) {\n\t\t\t\t\tt.superClass = this.eat(C._extends) ? this.parseExprSubscripts() : null;\n\t\t\t\t}, e.prototype.parseExport = function (t) {\n\t\t\t\t\tif (this.eat(C._export), this.match(C.star)) {\n\t\t\t\t\t\tvar e = this.startNode();if (this.next(), !this.hasPlugin(\"exportExtensions\") || !this.eatContextual(\"as\")) return this.parseExportFrom(t, !0), this.finishNode(t, \"ExportAllDeclaration\");e.exported = this.parseIdentifier(!0), t.specifiers = [this.finishNode(e, \"ExportNamespaceSpecifier\")], this.parseExportSpecifiersMaybe(t), this.parseExportFrom(t, !0);\n\t\t\t\t\t} else if (this.hasPlugin(\"exportExtensions\") && this.isExportDefaultSpecifier()) {\n\t\t\t\t\t\tvar s = this.startNode();s.exported = this.parseIdentifier(!0);var i = [this.finishNode(s, \"ExportDefaultSpecifier\")];if (t.specifiers = i, this.match(C.comma) && this.lookahead().type === C.star) {\n\t\t\t\t\t\t\tthis.expect(C.comma);var r = this.startNode();this.expect(C.star), this.expectContextual(\"as\"), r.exported = this.parseIdentifier(), i.push(this.finishNode(r, \"ExportNamespaceSpecifier\"));\n\t\t\t\t\t\t} else this.parseExportSpecifiersMaybe(t);this.parseExportFrom(t, !0);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (this.eat(C._default)) {\n\t\t\t\t\t\t\tvar a = this.startNode(),\n\t\t\t\t\t\t\t    n = !1;return this.eat(C._function) ? a = this.parseFunction(a, !0, !1, !1, !0) : this.isContextual(\"async\") && this.lookahead().type === C._function ? (this.eatContextual(\"async\"), this.eat(C._function), a = this.parseFunction(a, !0, !1, !0, !0)) : this.match(C._class) ? a = this.parseClass(a, !0, !0) : (n = !0, a = this.parseMaybeAssign()), t.declaration = a, n && this.semicolon(), this.checkExport(t, !0, !0), this.finishNode(t, \"ExportDefaultDeclaration\");\n\t\t\t\t\t\t}this.shouldParseExportDeclaration() ? (t.specifiers = [], t.source = null, t.declaration = this.parseExportDeclaration(t)) : (t.declaration = null, t.specifiers = this.parseExportSpecifiers(), this.parseExportFrom(t));\n\t\t\t\t\t}return this.checkExport(t, !0), this.finishNode(t, \"ExportNamedDeclaration\");\n\t\t\t\t}, e.prototype.parseExportDeclaration = function (t) {\n\t\t\t\t\treturn this.parseStatement(!0);\n\t\t\t\t}, e.prototype.isExportDefaultSpecifier = function () {\n\t\t\t\t\tif (this.match(C.name)) return \"async\" !== this.state.value;if (!this.match(C._default)) return !1;var t = this.lookahead();return t.type === C.comma || t.type === C.name && \"from\" === t.value;\n\t\t\t\t}, e.prototype.parseExportSpecifiersMaybe = function (t) {\n\t\t\t\t\tthis.eat(C.comma) && (t.specifiers = t.specifiers.concat(this.parseExportSpecifiers()));\n\t\t\t\t}, e.prototype.parseExportFrom = function (t, e) {\n\t\t\t\t\tthis.eatContextual(\"from\") ? (t.source = this.match(C.string) ? this.parseExprAtom() : this.unexpected(), this.checkExport(t)) : e ? this.unexpected() : t.source = null, this.semicolon();\n\t\t\t\t}, e.prototype.shouldParseExportDeclaration = function () {\n\t\t\t\t\treturn \"var\" === this.state.type.keyword || \"const\" === this.state.type.keyword || \"let\" === this.state.type.keyword || \"function\" === this.state.type.keyword || \"class\" === this.state.type.keyword || this.isContextual(\"async\");\n\t\t\t\t}, e.prototype.checkExport = function (t, e, s) {\n\t\t\t\t\tif (e) if (s) this.checkDuplicateExports(t, \"default\");else if (t.specifiers && t.specifiers.length) for (var i = t.specifiers, r = Array.isArray(i), a = 0, i = r ? i : i[Symbol.iterator]();;) {\n\t\t\t\t\t\tvar n;if (r) {\n\t\t\t\t\t\t\tif (a >= i.length) break;n = i[a++];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif ((a = i.next()).done) break;n = a.value;\n\t\t\t\t\t\t}var o = n;this.checkDuplicateExports(o, o.exported.name);\n\t\t\t\t\t} else if (t.declaration) if (\"FunctionDeclaration\" === t.declaration.type || \"ClassDeclaration\" === t.declaration.type) this.checkDuplicateExports(t, t.declaration.id.name);else if (\"VariableDeclaration\" === t.declaration.type) for (var h = t.declaration.declarations, p = Array.isArray(h), c = 0, h = p ? h : h[Symbol.iterator]();;) {\n\t\t\t\t\t\tvar l;if (p) {\n\t\t\t\t\t\t\tif (c >= h.length) break;l = h[c++];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif ((c = h.next()).done) break;l = c.value;\n\t\t\t\t\t\t}var u = l;this.checkDeclaration(u.id);\n\t\t\t\t\t}if (this.state.decorators.length) {\n\t\t\t\t\t\tvar d = t.declaration && (\"ClassDeclaration\" === t.declaration.type || \"ClassExpression\" === t.declaration.type);if (!t.declaration || !d) throw this.raise(t.start, \"You can only use decorators on an export when exporting a class\");this.takeDecorators(t.declaration);\n\t\t\t\t\t}\n\t\t\t\t}, e.prototype.checkDeclaration = function (t) {\n\t\t\t\t\tif (\"ObjectPattern\" === t.type) for (var e = t.properties, s = Array.isArray(e), i = 0, e = s ? e : e[Symbol.iterator]();;) {\n\t\t\t\t\t\tvar r;if (s) {\n\t\t\t\t\t\t\tif (i >= e.length) break;r = e[i++];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif ((i = e.next()).done) break;r = i.value;\n\t\t\t\t\t\t}var a = r;this.checkDeclaration(a);\n\t\t\t\t\t} else if (\"ArrayPattern\" === t.type) for (var n = t.elements, o = Array.isArray(n), h = 0, n = o ? n : n[Symbol.iterator]();;) {\n\t\t\t\t\t\tvar p;if (o) {\n\t\t\t\t\t\t\tif (h >= n.length) break;p = n[h++];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif ((h = n.next()).done) break;p = h.value;\n\t\t\t\t\t\t}var c = p;c && this.checkDeclaration(c);\n\t\t\t\t\t} else \"ObjectProperty\" === t.type ? this.checkDeclaration(t.value) : \"RestElement\" === t.type ? this.checkDeclaration(t.argument) : \"Identifier\" === t.type && this.checkDuplicateExports(t, t.name);\n\t\t\t\t}, e.prototype.checkDuplicateExports = function (t, e) {\n\t\t\t\t\tthis.state.exportedIdentifiers.indexOf(e) > -1 && this.raiseDuplicateExportError(t, e), this.state.exportedIdentifiers.push(e);\n\t\t\t\t}, e.prototype.raiseDuplicateExportError = function (t, e) {\n\t\t\t\t\tthrow this.raise(t.start, \"default\" === e ? \"Only one default export allowed per module.\" : \"`\" + e + \"` has already been exported. Exported identifiers must be unique.\");\n\t\t\t\t}, e.prototype.parseExportSpecifiers = function () {\n\t\t\t\t\tvar t = [],\n\t\t\t\t\t    e = !0,\n\t\t\t\t\t    s = void 0;for (this.expect(C.braceL); !this.eat(C.braceR);) {\n\t\t\t\t\t\tif (e) e = !1;else if (this.expect(C.comma), this.eat(C.braceR)) break;var i = this.match(C._default);i && !s && (s = !0);var r = this.startNode();r.local = this.parseIdentifier(i), r.exported = this.eatContextual(\"as\") ? this.parseIdentifier(!0) : r.local.__clone(), t.push(this.finishNode(r, \"ExportSpecifier\"));\n\t\t\t\t\t}return s && !this.isContextual(\"from\") && this.unexpected(), t;\n\t\t\t\t}, e.prototype.parseImport = function (t) {\n\t\t\t\t\treturn this.eat(C._import), this.match(C.string) ? (t.specifiers = [], t.source = this.parseExprAtom()) : (t.specifiers = [], this.parseImportSpecifiers(t), this.expectContextual(\"from\"), t.source = this.match(C.string) ? this.parseExprAtom() : this.unexpected()), this.semicolon(), this.finishNode(t, \"ImportDeclaration\");\n\t\t\t\t}, e.prototype.parseImportSpecifiers = function (t) {\n\t\t\t\t\tvar e = !0;if (this.match(C.name)) {\n\t\t\t\t\t\tvar s = this.state.start,\n\t\t\t\t\t\t    i = this.state.startLoc;if (t.specifiers.push(this.parseImportSpecifierDefault(this.parseIdentifier(), s, i)), !this.eat(C.comma)) return;\n\t\t\t\t\t}if (this.match(C.star)) {\n\t\t\t\t\t\tvar r = this.startNode();return this.next(), this.expectContextual(\"as\"), r.local = this.parseIdentifier(), this.checkLVal(r.local, !0, void 0, \"import namespace specifier\"), void t.specifiers.push(this.finishNode(r, \"ImportNamespaceSpecifier\"));\n\t\t\t\t\t}for (this.expect(C.braceL); !this.eat(C.braceR);) {\n\t\t\t\t\t\tif (e) e = !1;else if (this.eat(C.colon) && this.unexpected(null, \"ES2015 named imports do not destructure. Use another statement for destructuring after the import.\"), this.expect(C.comma), this.eat(C.braceR)) break;this.parseImportSpecifier(t);\n\t\t\t\t\t}\n\t\t\t\t}, e.prototype.parseImportSpecifier = function (t) {\n\t\t\t\t\tvar e = this.startNode();e.imported = this.parseIdentifier(!0), this.eatContextual(\"as\") ? e.local = this.parseIdentifier() : (this.checkReservedWord(e.imported.name, e.start, !0, !0), e.local = e.imported.__clone()), this.checkLVal(e.local, !0, void 0, \"import specifier\"), t.specifiers.push(this.finishNode(e, \"ImportSpecifier\"));\n\t\t\t\t}, e.prototype.parseImportSpecifierDefault = function (t, e, s) {\n\t\t\t\t\tvar i = this.startNodeAt(e, s);return i.local = t, this.checkLVal(i.local, !0, void 0, \"default import specifier\"), this.finishNode(i, \"ImportDefaultSpecifier\");\n\t\t\t\t}, e;\n\t\t\t}(function (t) {\n\t\t\t\tfunction e() {\n\t\t\t\t\treturn g(this, e), P(this, t.apply(this, arguments));\n\t\t\t\t}return w(e, t), e.prototype.checkPropClash = function (t, e) {\n\t\t\t\t\tif (!t.computed && !t.kind) {\n\t\t\t\t\t\tvar s = t.key;\"__proto__\" === (\"Identifier\" === s.type ? s.name : String(s.value)) && (e.proto && this.raise(s.start, \"Redefinition of __proto__ property\"), e.proto = !0);\n\t\t\t\t\t}\n\t\t\t\t}, e.prototype.getExpression = function () {\n\t\t\t\t\tthis.nextToken();var t = this.parseExpression();return this.match(C.eof) || this.unexpected(), t;\n\t\t\t\t}, e.prototype.parseExpression = function (t, e) {\n\t\t\t\t\tvar s = this.state.start,\n\t\t\t\t\t    i = this.state.startLoc,\n\t\t\t\t\t    r = this.parseMaybeAssign(t, e);if (this.match(C.comma)) {\n\t\t\t\t\t\tvar a = this.startNodeAt(s, i);for (a.expressions = [r]; this.eat(C.comma);) {\n\t\t\t\t\t\t\ta.expressions.push(this.parseMaybeAssign(t, e));\n\t\t\t\t\t\t}return this.toReferencedList(a.expressions), this.finishNode(a, \"SequenceExpression\");\n\t\t\t\t\t}return r;\n\t\t\t\t}, e.prototype.parseMaybeAssign = function (t, e, s, i) {\n\t\t\t\t\tvar r = this.state.start,\n\t\t\t\t\t    a = this.state.startLoc;if (this.match(C._yield) && this.state.inGenerator) {\n\t\t\t\t\t\tvar n = this.parseYield();return s && (n = s.call(this, n, r, a)), n;\n\t\t\t\t\t}var o = void 0;e ? o = !1 : (e = { start: 0 }, o = !0), (this.match(C.parenL) || this.match(C.name)) && (this.state.potentialArrowAt = this.state.start);var h = this.parseMaybeConditional(t, e, i);if (s && (h = s.call(this, h, r, a)), this.state.type.isAssign) {\n\t\t\t\t\t\tvar p = this.startNodeAt(r, a);if (p.operator = this.state.value, p.left = this.match(C.eq) ? this.toAssignable(h, void 0, \"assignment expression\") : h, e.start = 0, this.checkLVal(h, void 0, void 0, \"assignment expression\"), h.extra && h.extra.parenthesized) {\n\t\t\t\t\t\t\tvar c = void 0;\"ObjectPattern\" === h.type ? c = \"`({a}) = 0` use `({a} = 0)`\" : \"ArrayPattern\" === h.type && (c = \"`([a]) = 0` use `([a] = 0)`\"), c && this.raise(h.start, \"You're trying to assign to a parenthesized expression, eg. instead of \" + c);\n\t\t\t\t\t\t}return this.next(), p.right = this.parseMaybeAssign(t), this.finishNode(p, \"AssignmentExpression\");\n\t\t\t\t\t}return o && e.start && this.unexpected(e.start), h;\n\t\t\t\t}, e.prototype.parseMaybeConditional = function (t, e, s) {\n\t\t\t\t\tvar i = this.state.start,\n\t\t\t\t\t    r = this.state.startLoc,\n\t\t\t\t\t    a = this.parseExprOps(t, e);return e && e.start ? a : this.parseConditional(a, t, i, r, s);\n\t\t\t\t}, e.prototype.parseConditional = function (t, e, s, i, r) {\n\t\t\t\t\tif (this.eat(C.question)) {\n\t\t\t\t\t\tvar a = this.startNodeAt(s, i);return a.test = t, a.consequent = this.parseMaybeAssign(), this.expect(C.colon), a.alternate = this.parseMaybeAssign(e), this.finishNode(a, \"ConditionalExpression\");\n\t\t\t\t\t}return t;\n\t\t\t\t}, e.prototype.parseExprOps = function (t, e) {\n\t\t\t\t\tvar s = this.state.start,\n\t\t\t\t\t    i = this.state.startLoc,\n\t\t\t\t\t    r = this.parseMaybeUnary(e);return e && e.start ? r : this.parseExprOp(r, s, i, -1, t);\n\t\t\t\t}, e.prototype.parseExprOp = function (t, e, s, i, r) {\n\t\t\t\t\tvar a = this.state.type.binop;if (!(null == a || r && this.match(C._in)) && a > i) {\n\t\t\t\t\t\tvar n = this.startNodeAt(e, s);n.left = t, n.operator = this.state.value, \"**\" !== n.operator || \"UnaryExpression\" !== t.type || !t.extra || t.extra.parenthesizedArgument || t.extra.parenthesized || this.raise(t.argument.start, \"Illegal expression. Wrap left hand side or entire exponentiation in parentheses.\");var o = this.state.type;this.next();var h = this.state.start,\n\t\t\t\t\t\t    p = this.state.startLoc;return n.right = this.parseExprOp(this.parseMaybeUnary(), h, p, o.rightAssociative ? a - 1 : a, r), this.finishNode(n, o === C.logicalOR || o === C.logicalAND ? \"LogicalExpression\" : \"BinaryExpression\"), this.parseExprOp(n, e, s, i, r);\n\t\t\t\t\t}return t;\n\t\t\t\t}, e.prototype.parseMaybeUnary = function (t) {\n\t\t\t\t\tif (this.state.type.prefix) {\n\t\t\t\t\t\tvar e = this.startNode(),\n\t\t\t\t\t\t    s = this.match(C.incDec);e.operator = this.state.value, e.prefix = !0, this.next();var i = this.state.type;return e.argument = this.parseMaybeUnary(), this.addExtra(e, \"parenthesizedArgument\", !(i !== C.parenL || e.argument.extra && e.argument.extra.parenthesized)), t && t.start && this.unexpected(t.start), s ? this.checkLVal(e.argument, void 0, void 0, \"prefix operation\") : this.state.strict && \"delete\" === e.operator && \"Identifier\" === e.argument.type && this.raise(e.start, \"Deleting local variable in strict mode\"), this.finishNode(e, s ? \"UpdateExpression\" : \"UnaryExpression\");\n\t\t\t\t\t}var r = this.state.start,\n\t\t\t\t\t    a = this.state.startLoc,\n\t\t\t\t\t    n = this.parseExprSubscripts(t);if (t && t.start) return n;for (; this.state.type.postfix && !this.canInsertSemicolon();) {\n\t\t\t\t\t\tvar o = this.startNodeAt(r, a);o.operator = this.state.value, o.prefix = !1, o.argument = n, this.checkLVal(n, void 0, void 0, \"postfix operation\"), this.next(), n = this.finishNode(o, \"UpdateExpression\");\n\t\t\t\t\t}return n;\n\t\t\t\t}, e.prototype.parseExprSubscripts = function (t) {\n\t\t\t\t\tvar e = this.state.start,\n\t\t\t\t\t    s = this.state.startLoc,\n\t\t\t\t\t    i = this.state.potentialArrowAt,\n\t\t\t\t\t    r = this.parseExprAtom(t);return \"ArrowFunctionExpression\" === r.type && r.start === i ? r : t && t.start ? r : this.parseSubscripts(r, e, s);\n\t\t\t\t}, e.prototype.parseSubscripts = function (t, e, s, i) {\n\t\t\t\t\tfor (;;) {\n\t\t\t\t\t\tif (!i && this.eat(C.doubleColon)) {\n\t\t\t\t\t\t\tvar r = this.startNodeAt(e, s);return r.object = t, r.callee = this.parseNoCallExpr(), this.parseSubscripts(this.finishNode(r, \"BindExpression\"), e, s, i);\n\t\t\t\t\t\t}if (this.match(C.questionDot)) {\n\t\t\t\t\t\t\tif (this.hasPlugin(\"optionalChaining\") || this.raise(e, \"You can only use optional-chaining when the 'optionalChaining' plugin is enabled.\"), i && this.lookahead().type == C.parenL) return t;this.next();var a = this.startNodeAt(e, s);if (this.eat(C.bracketL)) a.object = t, a.property = this.parseExpression(), a.computed = !0, a.optional = !0, this.expect(C.bracketR), t = this.finishNode(a, \"MemberExpression\");else if (this.eat(C.parenL)) {\n\t\t\t\t\t\t\t\tvar n = this.state.potentialArrowAt === t.start && \"Identifier\" === t.type && \"async\" === t.name && !this.canInsertSemicolon();a.callee = t, a.arguments = this.parseCallExpressionArguments(C.parenR, n), a.optional = !0, t = this.finishNode(a, \"CallExpression\");\n\t\t\t\t\t\t\t} else a.object = t, a.property = this.parseIdentifier(!0), a.computed = !1, a.optional = !0, t = this.finishNode(a, \"MemberExpression\");\n\t\t\t\t\t\t} else if (this.eat(C.dot)) {\n\t\t\t\t\t\t\tvar o = this.startNodeAt(e, s);o.object = t, o.property = this.hasPlugin(\"classPrivateProperties\") ? this.parseMaybePrivateName() : this.parseIdentifier(!0), o.computed = !1, t = this.finishNode(o, \"MemberExpression\");\n\t\t\t\t\t\t} else if (this.eat(C.bracketL)) {\n\t\t\t\t\t\t\tvar h = this.startNodeAt(e, s);h.object = t, h.property = this.parseExpression(), h.computed = !0, this.expect(C.bracketR), t = this.finishNode(h, \"MemberExpression\");\n\t\t\t\t\t\t} else if (!i && this.match(C.parenL)) {\n\t\t\t\t\t\t\tvar p = this.state.potentialArrowAt === t.start && \"Identifier\" === t.type && \"async\" === t.name && !this.canInsertSemicolon();this.next();var c = this.startNodeAt(e, s);if (c.callee = t, c.arguments = this.parseCallExpressionArguments(C.parenR, p), \"Import\" === c.callee.type) {\n\t\t\t\t\t\t\t\t1 !== c.arguments.length && this.raise(c.start, \"import() requires exactly one argument\");var l = c.arguments[0];l && \"SpreadElement\" === l.type && this.raise(l.start, \"... is not allowed in import()\");\n\t\t\t\t\t\t\t}if (t = this.finishNode(c, \"CallExpression\"), p && this.shouldParseAsyncArrow()) return this.parseAsyncArrowFromCallExpression(this.startNodeAt(e, s), c);this.toReferencedList(c.arguments);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (!this.match(C.backQuote)) return t;var u = this.startNodeAt(e, s);u.tag = t, u.quasi = this.parseTemplate(!0), t = this.finishNode(u, \"TaggedTemplateExpression\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}throw new Error(\"Unreachable\");\n\t\t\t\t}, e.prototype.parseCallExpressionArguments = function (t, e) {\n\t\t\t\t\tfor (var s = [], i = void 0, r = !0; !this.eat(t);) {\n\t\t\t\t\t\tif (r) r = !1;else if (this.expect(C.comma), this.eat(t)) break;this.match(C.parenL) && !i && (i = this.state.start), s.push(this.parseExprListItem(!1, e ? { start: 0 } : void 0, e ? { start: 0 } : void 0));\n\t\t\t\t\t}return e && i && this.shouldParseAsyncArrow() && this.unexpected(), s;\n\t\t\t\t}, e.prototype.shouldParseAsyncArrow = function () {\n\t\t\t\t\treturn this.match(C.arrow);\n\t\t\t\t}, e.prototype.parseAsyncArrowFromCallExpression = function (t, e) {\n\t\t\t\t\treturn this.expect(C.arrow), this.parseArrowExpression(t, e.arguments, !0);\n\t\t\t\t}, e.prototype.parseNoCallExpr = function () {\n\t\t\t\t\tvar t = this.state.start,\n\t\t\t\t\t    e = this.state.startLoc;return this.parseSubscripts(this.parseExprAtom(), t, e, !0);\n\t\t\t\t}, e.prototype.parseExprAtom = function (t) {\n\t\t\t\t\tvar e = this.state.potentialArrowAt === this.state.start,\n\t\t\t\t\t    s = void 0;switch (this.state.type) {case C._super:\n\t\t\t\t\t\t\treturn this.state.inMethod || this.state.inClassProperty || this.options.allowSuperOutsideMethod || this.raise(this.state.start, \"'super' outside of function or class\"), s = this.startNode(), this.next(), this.match(C.parenL) || this.match(C.bracketL) || this.match(C.dot) || this.unexpected(), this.match(C.parenL) && \"constructor\" !== this.state.inMethod && !this.options.allowSuperOutsideMethod && this.raise(s.start, \"super() is only valid inside a class constructor. Make sure the method name is spelled exactly as 'constructor'.\"), this.finishNode(s, \"Super\");case C._import:\n\t\t\t\t\t\t\treturn this.hasPlugin(\"importMeta\") && this.lookahead().type === C.dot ? this.parseImportMetaProperty() : (this.hasPlugin(\"dynamicImport\") || this.unexpected(), s = this.startNode(), this.next(), this.match(C.parenL) || this.unexpected(null, C.parenL), this.finishNode(s, \"Import\"));case C._this:\n\t\t\t\t\t\t\treturn s = this.startNode(), this.next(), this.finishNode(s, \"ThisExpression\");case C._yield:\n\t\t\t\t\t\t\tthis.state.inGenerator && this.unexpected();case C.name:\n\t\t\t\t\t\t\ts = this.startNode();var i = \"await\" === this.state.value && this.state.inAsync,\n\t\t\t\t\t\t\t    r = this.shouldAllowYieldIdentifier(),\n\t\t\t\t\t\t\t    a = this.parseIdentifier(i || r);if (\"await\" === a.name) {\n\t\t\t\t\t\t\t\tif (this.state.inAsync || this.inModule) return this.parseAwait(s);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (\"async\" === a.name && this.match(C._function) && !this.canInsertSemicolon()) return this.next(), this.parseFunction(s, !1, !1, !0);if (e && \"async\" === a.name && this.match(C.name)) {\n\t\t\t\t\t\t\t\t\tvar n = [this.parseIdentifier()];return this.expect(C.arrow), this.parseArrowExpression(s, n, !0);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}return e && !this.canInsertSemicolon() && this.eat(C.arrow) ? this.parseArrowExpression(s, [a]) : a;case C._do:\n\t\t\t\t\t\t\tif (this.hasPlugin(\"doExpressions\")) {\n\t\t\t\t\t\t\t\tvar o = this.startNode();this.next();var h = this.state.inFunction,\n\t\t\t\t\t\t\t\t    p = this.state.labels;return this.state.labels = [], this.state.inFunction = !1, o.body = this.parseBlock(!1), this.state.inFunction = h, this.state.labels = p, this.finishNode(o, \"DoExpression\");\n\t\t\t\t\t\t\t}case C.regexp:\n\t\t\t\t\t\t\tvar c = this.state.value;return s = this.parseLiteral(c.value, \"RegExpLiteral\"), s.pattern = c.pattern, s.flags = c.flags, s;case C.num:\n\t\t\t\t\t\t\treturn this.parseLiteral(this.state.value, \"NumericLiteral\");case C.string:\n\t\t\t\t\t\t\treturn this.parseLiteral(this.state.value, \"StringLiteral\");case C._null:\n\t\t\t\t\t\t\treturn s = this.startNode(), this.next(), this.finishNode(s, \"NullLiteral\");case C._true:case C._false:\n\t\t\t\t\t\t\treturn s = this.startNode(), s.value = this.match(C._true), this.next(), this.finishNode(s, \"BooleanLiteral\");case C.parenL:\n\t\t\t\t\t\t\treturn this.parseParenAndDistinguishExpression(e);case C.bracketL:\n\t\t\t\t\t\t\treturn s = this.startNode(), this.next(), s.elements = this.parseExprList(C.bracketR, !0, t), this.toReferencedList(s.elements), this.finishNode(s, \"ArrayExpression\");case C.braceL:\n\t\t\t\t\t\t\treturn this.parseObj(!1, t);case C._function:\n\t\t\t\t\t\t\treturn this.parseFunctionExpression();case C.at:\n\t\t\t\t\t\t\tthis.parseDecorators();case C._class:\n\t\t\t\t\t\t\treturn s = this.startNode(), this.takeDecorators(s), this.parseClass(s, !1);case C.hash:\n\t\t\t\t\t\t\tif (this.hasPlugin(\"classPrivateProperties\")) return this.parseMaybePrivateName();throw this.unexpected();case C._new:\n\t\t\t\t\t\t\treturn this.parseNew();case C.backQuote:\n\t\t\t\t\t\t\treturn this.parseTemplate(!1);case C.doubleColon:\n\t\t\t\t\t\t\ts = this.startNode(), this.next(), s.object = null;var l = s.callee = this.parseNoCallExpr();if (\"MemberExpression\" === l.type) return this.finishNode(s, \"BindExpression\");throw this.raise(l.start, \"Binding should be performed on object property.\");default:\n\t\t\t\t\t\t\tthrow this.unexpected();}\n\t\t\t\t}, e.prototype.parseMaybePrivateName = function () {\n\t\t\t\t\tif (this.eat(C.hash)) {\n\t\t\t\t\t\tvar t = this.startNode();return t.name = this.parseIdentifier(!0), this.finishNode(t, \"PrivateName\");\n\t\t\t\t\t}return this.parseIdentifier(!0);\n\t\t\t\t}, e.prototype.parseFunctionExpression = function () {\n\t\t\t\t\tvar t = this.startNode(),\n\t\t\t\t\t    e = this.parseIdentifier(!0);return this.state.inGenerator && this.eat(C.dot) && this.hasPlugin(\"functionSent\") ? this.parseMetaProperty(t, e, \"sent\") : this.parseFunction(t, !1);\n\t\t\t\t}, e.prototype.parseMetaProperty = function (t, e, s) {\n\t\t\t\t\treturn t.meta = e, t.property = this.parseIdentifier(!0), t.property.name !== s && this.raise(t.property.start, \"The only valid meta property for \" + e.name + \" is \" + e.name + \".\" + s), this.finishNode(t, \"MetaProperty\");\n\t\t\t\t}, e.prototype.parseImportMetaProperty = function () {\n\t\t\t\t\tvar t = this.startNode(),\n\t\t\t\t\t    e = this.parseIdentifier(!0);return this.expect(C.dot), this.inModule || this.raise(e.start, \"import.meta may appear only with 'sourceType: module'\"), this.parseMetaProperty(t, e, \"meta\");\n\t\t\t\t}, e.prototype.parseLiteral = function (t, e, s, i) {\n\t\t\t\t\ts = s || this.state.start, i = i || this.state.startLoc;var r = this.startNodeAt(s, i);return this.addExtra(r, \"rawValue\", t), this.addExtra(r, \"raw\", this.input.slice(s, this.state.end)), r.value = t, this.next(), this.finishNode(r, e);\n\t\t\t\t}, e.prototype.parseParenExpression = function () {\n\t\t\t\t\tthis.expect(C.parenL);var t = this.parseExpression();return this.expect(C.parenR), t;\n\t\t\t\t}, e.prototype.parseParenAndDistinguishExpression = function (t) {\n\t\t\t\t\tvar e = this.state.start,\n\t\t\t\t\t    s = this.state.startLoc,\n\t\t\t\t\t    i = void 0;this.expect(C.parenL);for (var r = this.state.start, a = this.state.startLoc, n = [], o = { start: 0 }, h = { start: 0 }, p = !0, c = void 0, l = void 0; !this.match(C.parenR);) {\n\t\t\t\t\t\tif (p) p = !1;else if (this.expect(C.comma, h.start || null), this.match(C.parenR)) {\n\t\t\t\t\t\t\tl = this.state.start;break;\n\t\t\t\t\t\t}if (this.match(C.ellipsis)) {\n\t\t\t\t\t\t\tvar u = this.state.start,\n\t\t\t\t\t\t\t    d = this.state.startLoc;c = this.state.start, n.push(this.parseParenItem(this.parseRest(), u, d));break;\n\t\t\t\t\t\t}n.push(this.parseMaybeAssign(!1, o, this.parseParenItem, h));\n\t\t\t\t\t}var f = this.state.start,\n\t\t\t\t\t    m = this.state.startLoc;this.expect(C.parenR);var y = this.startNodeAt(e, s);if (t && this.shouldParseArrow() && (y = this.parseArrow(y))) {\n\t\t\t\t\t\tfor (var x = n, v = Array.isArray(x), b = 0, x = v ? x : x[Symbol.iterator]();;) {\n\t\t\t\t\t\t\tvar g;if (v) {\n\t\t\t\t\t\t\t\tif (b >= x.length) break;g = x[b++];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif ((b = x.next()).done) break;g = b.value;\n\t\t\t\t\t\t\t}var w = g;w.extra && w.extra.parenthesized && this.unexpected(w.extra.parenStart);\n\t\t\t\t\t\t}return this.parseArrowExpression(y, n);\n\t\t\t\t\t}return n.length || this.unexpected(this.state.lastTokStart), l && this.unexpected(l), c && this.unexpected(c), o.start && this.unexpected(o.start), h.start && this.unexpected(h.start), n.length > 1 ? ((i = this.startNodeAt(r, a)).expressions = n, this.toReferencedList(i.expressions), this.finishNodeAt(i, \"SequenceExpression\", f, m)) : i = n[0], this.addExtra(i, \"parenthesized\", !0), this.addExtra(i, \"parenStart\", e), i;\n\t\t\t\t}, e.prototype.shouldParseArrow = function () {\n\t\t\t\t\treturn !this.canInsertSemicolon();\n\t\t\t\t}, e.prototype.parseArrow = function (t) {\n\t\t\t\t\tif (this.eat(C.arrow)) return t;\n\t\t\t\t}, e.prototype.parseParenItem = function (t, e, s) {\n\t\t\t\t\treturn t;\n\t\t\t\t}, e.prototype.parseNew = function () {\n\t\t\t\t\tvar t = this.startNode(),\n\t\t\t\t\t    e = this.parseIdentifier(!0);if (this.eat(C.dot)) {\n\t\t\t\t\t\tvar s = this.parseMetaProperty(t, e, \"target\");return this.state.inFunction || this.raise(s.property.start, \"new.target can only be used in functions\"), s;\n\t\t\t\t\t}t.callee = this.parseNoCallExpr();var i = this.eat(C.questionDot);return this.eat(C.parenL) ? (t.arguments = this.parseExprList(C.parenR), this.toReferencedList(t.arguments)) : t.arguments = [], i && (t.optional = !0), this.finishNode(t, \"NewExpression\");\n\t\t\t\t}, e.prototype.parseTemplateElement = function (t) {\n\t\t\t\t\tvar e = this.startNode();return null === this.state.value && (t ? this.state.invalidTemplateEscapePosition = null : this.raise(this.state.invalidTemplateEscapePosition || 0, \"Invalid escape sequence in template\")), e.value = { raw: this.input.slice(this.state.start, this.state.end).replace(/\\r\\n?/g, \"\\n\"), cooked: this.state.value }, this.next(), e.tail = this.match(C.backQuote), this.finishNode(e, \"TemplateElement\");\n\t\t\t\t}, e.prototype.parseTemplate = function (t) {\n\t\t\t\t\tvar e = this.startNode();this.next(), e.expressions = [];var s = this.parseTemplateElement(t);for (e.quasis = [s]; !s.tail;) {\n\t\t\t\t\t\tthis.expect(C.dollarBraceL), e.expressions.push(this.parseExpression()), this.expect(C.braceR), e.quasis.push(s = this.parseTemplateElement(t));\n\t\t\t\t\t}return this.next(), this.finishNode(e, \"TemplateLiteral\");\n\t\t\t\t}, e.prototype.parseObj = function (t, e) {\n\t\t\t\t\tvar s = [],\n\t\t\t\t\t    i = Object.create(null),\n\t\t\t\t\t    r = !0,\n\t\t\t\t\t    a = this.startNode();a.properties = [], this.next();for (var n = null; !this.eat(C.braceR);) {\n\t\t\t\t\t\tif (r) r = !1;else if (this.expect(C.comma), this.eat(C.braceR)) break;for (; this.match(C.at);) {\n\t\t\t\t\t\t\ts.push(this.parseDecorator());\n\t\t\t\t\t\t}var o = this.startNode(),\n\t\t\t\t\t\t    h = !1,\n\t\t\t\t\t\t    p = !1,\n\t\t\t\t\t\t    c = void 0,\n\t\t\t\t\t\t    l = void 0;if (s.length && (o.decorators = s, s = []), this.hasPlugin(\"objectRestSpread\") && this.match(C.ellipsis)) {\n\t\t\t\t\t\t\tif (o = this.parseSpread(t ? { start: 0 } : void 0), o.type = t ? \"RestElement\" : \"SpreadElement\", t && this.toAssignable(o.argument, !0, \"object pattern\"), a.properties.push(o), !t) continue;var u = this.state.start;if (null !== n) this.unexpected(n, \"Cannot have multiple rest elements when destructuring\");else {\n\t\t\t\t\t\t\t\tif (this.eat(C.braceR)) break;if (!this.match(C.comma) || this.lookahead().type !== C.braceR) {\n\t\t\t\t\t\t\t\t\tn = u;continue;\n\t\t\t\t\t\t\t\t}this.unexpected(u, \"A trailing comma is not permitted after the rest element\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}if (o.method = !1, (t || e) && (c = this.state.start, l = this.state.startLoc), t || (h = this.eat(C.star)), !t && this.isContextual(\"async\")) {\n\t\t\t\t\t\t\th && this.unexpected();var d = this.parseIdentifier();this.match(C.colon) || this.match(C.parenL) || this.match(C.braceR) || this.match(C.eq) || this.match(C.comma) ? (o.key = d, o.computed = !1) : (p = !0, this.hasPlugin(\"asyncGenerators\") && (h = this.eat(C.star)), this.parsePropertyName(o));\n\t\t\t\t\t\t} else this.parsePropertyName(o);this.parseObjPropValue(o, c, l, h, p, t, e), this.checkPropClash(o, i), o.shorthand && this.addExtra(o, \"shorthand\", !0), a.properties.push(o);\n\t\t\t\t\t}return null !== n && this.unexpected(n, \"The rest element has to be the last element when destructuring\"), s.length && this.raise(this.state.start, \"You have trailing decorators with no property\"), this.finishNode(a, t ? \"ObjectPattern\" : \"ObjectExpression\");\n\t\t\t\t}, e.prototype.isGetterOrSetterMethod = function (t, e) {\n\t\t\t\t\treturn !e && !t.computed && \"Identifier\" === t.key.type && (\"get\" === t.key.name || \"set\" === t.key.name) && (this.match(C.string) || this.match(C.num) || this.match(C.bracketL) || this.match(C.name) || !!this.state.type.keyword);\n\t\t\t\t}, e.prototype.checkGetterSetterParamCount = function (t) {\n\t\t\t\t\tvar e = \"get\" === t.kind ? 0 : 1;if (t.params.length !== e) {\n\t\t\t\t\t\tvar s = t.start;\"get\" === t.kind ? this.raise(s, \"getter should have no params\") : this.raise(s, \"setter should have exactly one param\");\n\t\t\t\t\t}\n\t\t\t\t}, e.prototype.parseObjectMethod = function (t, e, s, i) {\n\t\t\t\t\treturn s || e || this.match(C.parenL) ? (i && this.unexpected(), t.kind = \"method\", t.method = !0, this.parseMethod(t, e, s), this.finishNode(t, \"ObjectMethod\")) : this.isGetterOrSetterMethod(t, i) ? ((e || s) && this.unexpected(), t.kind = t.key.name, this.parsePropertyName(t), this.parseMethod(t), this.checkGetterSetterParamCount(t), this.finishNode(t, \"ObjectMethod\")) : void 0;\n\t\t\t\t}, e.prototype.parseObjectProperty = function (t, e, s, i, r) {\n\t\t\t\t\treturn t.shorthand = !1, this.eat(C.colon) ? (t.value = i ? this.parseMaybeDefault(this.state.start, this.state.startLoc) : this.parseMaybeAssign(!1, r), this.finishNode(t, \"ObjectProperty\")) : t.computed || \"Identifier\" !== t.key.type ? void 0 : (this.checkReservedWord(t.key.name, t.key.start, !0, !0), i ? t.value = this.parseMaybeDefault(e, s, t.key.__clone()) : this.match(C.eq) && r ? (r.start || (r.start = this.state.start), t.value = this.parseMaybeDefault(e, s, t.key.__clone())) : t.value = t.key.__clone(), t.shorthand = !0, this.finishNode(t, \"ObjectProperty\"));\n\t\t\t\t}, e.prototype.parseObjPropValue = function (t, e, s, i, r, a, n) {\n\t\t\t\t\tthis.parseObjectMethod(t, i, r, a) || this.parseObjectProperty(t, e, s, a, n) || this.unexpected();\n\t\t\t\t}, e.prototype.parsePropertyName = function (t) {\n\t\t\t\t\tif (this.eat(C.bracketL)) t.computed = !0, t.key = this.parseMaybeAssign(), this.expect(C.bracketR);else {\n\t\t\t\t\t\tt.computed = !1;var e = this.state.inPropertyName;this.state.inPropertyName = !0, t.key = this.match(C.num) || this.match(C.string) ? this.parseExprAtom() : this.parseIdentifier(!0), this.state.inPropertyName = e;\n\t\t\t\t\t}return t.key;\n\t\t\t\t}, e.prototype.initFunction = function (t, e) {\n\t\t\t\t\tt.id = null, t.generator = !1, t.expression = !1, t.async = !!e;\n\t\t\t\t}, e.prototype.parseMethod = function (t, e, s) {\n\t\t\t\t\tvar i = this.state.inMethod;return this.state.inMethod = t.kind || !0, this.initFunction(t, s), this.expect(C.parenL), t.params = this.parseBindingList(C.parenR), t.generator = !!e, this.parseFunctionBody(t), this.state.inMethod = i, t;\n\t\t\t\t}, e.prototype.parseArrowExpression = function (t, e, s) {\n\t\t\t\t\treturn this.initFunction(t, s), t.params = this.toAssignableList(e, !0, \"arrow function parameters\"), this.parseFunctionBody(t, !0), this.finishNode(t, \"ArrowFunctionExpression\");\n\t\t\t\t}, e.prototype.isStrictBody = function (t, e) {\n\t\t\t\t\tif (!e && t.body.directives.length) for (var s = t.body.directives, i = Array.isArray(s), r = 0, s = i ? s : s[Symbol.iterator]();;) {\n\t\t\t\t\t\tvar a;if (i) {\n\t\t\t\t\t\t\tif (r >= s.length) break;a = s[r++];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif ((r = s.next()).done) break;a = r.value;\n\t\t\t\t\t\t}if (\"use strict\" === a.value.value) return !0;\n\t\t\t\t\t}return !1;\n\t\t\t\t}, e.prototype.parseFunctionBody = function (t, e) {\n\t\t\t\t\tvar s = e && !this.match(C.braceL),\n\t\t\t\t\t    i = this.state.inAsync;if (this.state.inAsync = t.async, s) t.body = this.parseMaybeAssign(), t.expression = !0;else {\n\t\t\t\t\t\tvar r = this.state.inFunction,\n\t\t\t\t\t\t    a = this.state.inGenerator,\n\t\t\t\t\t\t    n = this.state.labels;this.state.inFunction = !0, this.state.inGenerator = t.generator, this.state.labels = [], t.body = this.parseBlock(!0), t.expression = !1, this.state.inFunction = r, this.state.inGenerator = a, this.state.labels = n;\n\t\t\t\t\t}this.state.inAsync = i;var o = this.isStrictBody(t, s),\n\t\t\t\t\t    h = this.state.strict || e || o;if (o && t.id && \"Identifier\" === t.id.type && \"yield\" === t.id.name && this.raise(t.id.start, \"Binding yield in strict mode\"), h) {\n\t\t\t\t\t\tvar p = Object.create(null),\n\t\t\t\t\t\t    c = this.state.strict;o && (this.state.strict = !0), t.id && this.checkLVal(t.id, !0, void 0, \"function name\");for (var l = t.params, u = Array.isArray(l), d = 0, l = u ? l : l[Symbol.iterator]();;) {\n\t\t\t\t\t\t\tvar f;if (u) {\n\t\t\t\t\t\t\t\tif (d >= l.length) break;f = l[d++];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif ((d = l.next()).done) break;f = d.value;\n\t\t\t\t\t\t\t}var m = f;o && \"Identifier\" !== m.type && this.raise(m.start, \"Non-simple parameter in strict mode\"), this.checkLVal(m, !0, p, \"function parameter list\");\n\t\t\t\t\t\t}this.state.strict = c;\n\t\t\t\t\t}\n\t\t\t\t}, e.prototype.parseExprList = function (t, e, s) {\n\t\t\t\t\tfor (var i = [], r = !0; !this.eat(t);) {\n\t\t\t\t\t\tif (r) r = !1;else if (this.expect(C.comma), this.eat(t)) break;i.push(this.parseExprListItem(e, s));\n\t\t\t\t\t}return i;\n\t\t\t\t}, e.prototype.parseExprListItem = function (t, e, s) {\n\t\t\t\t\treturn t && this.match(C.comma) ? null : this.match(C.ellipsis) ? this.parseSpread(e) : this.parseMaybeAssign(!1, e, this.parseParenItem, s);\n\t\t\t\t}, e.prototype.parseIdentifier = function (t) {\n\t\t\t\t\tvar e = this.startNode();return t || this.checkReservedWord(this.state.value, this.state.start, !!this.state.type.keyword, !1), this.match(C.name) ? e.name = this.state.value : this.state.type.keyword ? e.name = this.state.type.keyword : this.unexpected(), !t && \"await\" === e.name && this.state.inAsync && this.raise(e.start, \"invalid use of await inside of an async function\"), e.loc.identifierName = e.name, this.next(), this.finishNode(e, \"Identifier\");\n\t\t\t\t}, e.prototype.checkReservedWord = function (t, e, s, i) {\n\t\t\t\t\t(this.isReservedWord(t) || s && this.isKeyword(t)) && this.raise(e, t + \" is a reserved word\"), this.state.strict && (S.strict(t) || i && S.strictBind(t)) && this.raise(e, t + \" is a reserved word in strict mode\");\n\t\t\t\t}, e.prototype.parseAwait = function (t) {\n\t\t\t\t\treturn this.state.inAsync || this.unexpected(), this.match(C.star) && this.raise(t.start, \"await* has been removed from the async functions proposal. Use Promise.all() instead.\"), t.argument = this.parseMaybeUnary(), this.finishNode(t, \"AwaitExpression\");\n\t\t\t\t}, e.prototype.parseYield = function () {\n\t\t\t\t\tvar t = this.startNode();return this.next(), this.match(C.semi) || this.canInsertSemicolon() || !this.match(C.star) && !this.state.type.startsExpr ? (t.delegate = !1, t.argument = null) : (t.delegate = this.eat(C.star), t.argument = this.parseMaybeAssign()), this.finishNode(t, \"YieldExpression\");\n\t\t\t\t}, e;\n\t\t\t}(function (t) {\n\t\t\t\tfunction e() {\n\t\t\t\t\treturn g(this, e), P(this, t.apply(this, arguments));\n\t\t\t\t}return w(e, t), e.prototype.toAssignable = function (t, e, s) {\n\t\t\t\t\tif (t) switch (t.type) {case \"Identifier\":case \"PrivateName\":case \"ObjectPattern\":case \"ArrayPattern\":case \"AssignmentPattern\":\n\t\t\t\t\t\t\tbreak;case \"ObjectExpression\":\n\t\t\t\t\t\t\tt.type = \"ObjectPattern\";for (var i = t.properties, r = Array.isArray(i), a = 0, i = r ? i : i[Symbol.iterator]();;) {\n\t\t\t\t\t\t\t\tvar n;if (r) {\n\t\t\t\t\t\t\t\t\tif (a >= i.length) break;n = i[a++];\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif ((a = i.next()).done) break;n = a.value;\n\t\t\t\t\t\t\t\t}var o = n;\"ObjectMethod\" === o.type ? \"get\" === o.kind || \"set\" === o.kind ? this.raise(o.key.start, \"Object pattern can't contain getter or setter\") : this.raise(o.key.start, \"Object pattern can't contain methods\") : this.toAssignable(o, e, \"object destructuring pattern\");\n\t\t\t\t\t\t\t}break;case \"ObjectProperty\":\n\t\t\t\t\t\t\tthis.toAssignable(t.value, e, s);break;case \"SpreadElement\":\n\t\t\t\t\t\t\tt.type = \"RestElement\";var h = t.argument;this.toAssignable(h, e, s);break;case \"ArrayExpression\":\n\t\t\t\t\t\t\tt.type = \"ArrayPattern\", this.toAssignableList(t.elements, e, s);break;case \"AssignmentExpression\":\n\t\t\t\t\t\t\t\"=\" === t.operator ? (t.type = \"AssignmentPattern\", delete t.operator) : this.raise(t.left.end, \"Only '=' operator can be used for specifying default value.\");break;case \"MemberExpression\":\n\t\t\t\t\t\t\tif (!e) break;default:\n\t\t\t\t\t\t\tvar p = \"Invalid left-hand side\" + (s ? \" in \" + s : \"expression\");this.raise(t.start, p);}return t;\n\t\t\t\t}, e.prototype.toAssignableList = function (t, e, s) {\n\t\t\t\t\tvar i = t.length;if (i) {\n\t\t\t\t\t\tvar r = t[i - 1];if (r && \"RestElement\" === r.type) --i;else if (r && \"SpreadElement\" === r.type) {\n\t\t\t\t\t\t\tr.type = \"RestElement\";var a = r.argument;this.toAssignable(a, e, s), \"Identifier\" !== a.type && \"MemberExpression\" !== a.type && \"ArrayPattern\" !== a.type && this.unexpected(a.start), --i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}for (var n = 0; n < i; n++) {\n\t\t\t\t\t\tvar o = t[n];o && \"SpreadElement\" === o.type && this.raise(o.start, \"The rest element has to be the last element when destructuring\"), o && this.toAssignable(o, e, s);\n\t\t\t\t\t}return t;\n\t\t\t\t}, e.prototype.toReferencedList = function (t) {\n\t\t\t\t\treturn t;\n\t\t\t\t}, e.prototype.parseSpread = function (t) {\n\t\t\t\t\tvar e = this.startNode();return this.next(), e.argument = this.parseMaybeAssign(!1, t), this.finishNode(e, \"SpreadElement\");\n\t\t\t\t}, e.prototype.parseRest = function () {\n\t\t\t\t\tvar t = this.startNode();return this.next(), t.argument = this.parseBindingAtom(), this.finishNode(t, \"RestElement\");\n\t\t\t\t}, e.prototype.shouldAllowYieldIdentifier = function () {\n\t\t\t\t\treturn this.match(C._yield) && !this.state.strict && !this.state.inGenerator;\n\t\t\t\t}, e.prototype.parseBindingIdentifier = function () {\n\t\t\t\t\treturn this.parseIdentifier(this.shouldAllowYieldIdentifier());\n\t\t\t\t}, e.prototype.parseBindingAtom = function () {\n\t\t\t\t\tswitch (this.state.type) {case C._yield:case C.name:\n\t\t\t\t\t\t\treturn this.parseBindingIdentifier();case C.bracketL:\n\t\t\t\t\t\t\tvar t = this.startNode();return this.next(), t.elements = this.parseBindingList(C.bracketR, !0), this.finishNode(t, \"ArrayPattern\");case C.braceL:\n\t\t\t\t\t\t\treturn this.parseObj(!0);default:\n\t\t\t\t\t\t\tthrow this.unexpected();}\n\t\t\t\t}, e.prototype.parseBindingList = function (t, e) {\n\t\t\t\t\tfor (var s = [], i = !0; !this.eat(t);) {\n\t\t\t\t\t\tif (i ? i = !1 : this.expect(C.comma), e && this.match(C.comma)) s.push(null);else {\n\t\t\t\t\t\t\tif (this.eat(t)) break;if (this.match(C.ellipsis)) {\n\t\t\t\t\t\t\t\ts.push(this.parseAssignableListItemTypes(this.parseRest())), this.expect(t);break;\n\t\t\t\t\t\t\t}for (var r = []; this.match(C.at);) {\n\t\t\t\t\t\t\t\tr.push(this.parseDecorator());\n\t\t\t\t\t\t\t}var a = this.parseMaybeDefault();r.length && (a.decorators = r), this.parseAssignableListItemTypes(a), s.push(this.parseMaybeDefault(a.start, a.loc.start, a));\n\t\t\t\t\t\t}\n\t\t\t\t\t}return s;\n\t\t\t\t}, e.prototype.parseAssignableListItemTypes = function (t) {\n\t\t\t\t\treturn t;\n\t\t\t\t}, e.prototype.parseMaybeDefault = function (t, e, s) {\n\t\t\t\t\tif (e = e || this.state.startLoc, t = t || this.state.start, s = s || this.parseBindingAtom(), !this.eat(C.eq)) return s;var i = this.startNodeAt(t, e);return i.left = s, i.right = this.parseMaybeAssign(), this.finishNode(i, \"AssignmentPattern\");\n\t\t\t\t}, e.prototype.checkLVal = function (t, e, s, i) {\n\t\t\t\t\tswitch (t.type) {case \"PrivateName\":case \"Identifier\":\n\t\t\t\t\t\t\tif (this.checkReservedWord(t.name, t.start, !1, !0), s) {\n\t\t\t\t\t\t\t\tvar r = \"_\" + t.name;s[r] ? this.raise(t.start, \"Argument name clash in strict mode\") : s[r] = !0;\n\t\t\t\t\t\t\t}break;case \"MemberExpression\":\n\t\t\t\t\t\t\te && this.raise(t.start, (e ? \"Binding\" : \"Assigning to\") + \" member expression\");break;case \"ObjectPattern\":\n\t\t\t\t\t\t\tfor (var a = t.properties, n = Array.isArray(a), o = 0, a = n ? a : a[Symbol.iterator]();;) {\n\t\t\t\t\t\t\t\tvar h;if (n) {\n\t\t\t\t\t\t\t\t\tif (o >= a.length) break;h = a[o++];\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif ((o = a.next()).done) break;h = o.value;\n\t\t\t\t\t\t\t\t}var p = h;\"ObjectProperty\" === p.type && (p = p.value), this.checkLVal(p, e, s, \"object destructuring pattern\");\n\t\t\t\t\t\t\t}break;case \"ArrayPattern\":\n\t\t\t\t\t\t\tfor (var c = t.elements, l = Array.isArray(c), u = 0, c = l ? c : c[Symbol.iterator]();;) {\n\t\t\t\t\t\t\t\tvar d;if (l) {\n\t\t\t\t\t\t\t\t\tif (u >= c.length) break;d = c[u++];\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif ((u = c.next()).done) break;d = u.value;\n\t\t\t\t\t\t\t\t}var f = d;f && this.checkLVal(f, e, s, \"array destructuring pattern\");\n\t\t\t\t\t\t\t}break;case \"AssignmentPattern\":\n\t\t\t\t\t\t\tthis.checkLVal(t.left, e, s, \"assignment pattern\");break;case \"RestElement\":\n\t\t\t\t\t\t\tthis.checkLVal(t.argument, e, s, \"rest element\");break;default:\n\t\t\t\t\t\t\tvar m = (e ? \"Binding invalid\" : \"Invalid\") + \" left-hand side\" + (i ? \" in \" + i : \"expression\");this.raise(t.start, m);}\n\t\t\t\t}, e;\n\t\t\t}(function (t) {\n\t\t\t\tfunction e() {\n\t\t\t\t\treturn g(this, e), P(this, t.apply(this, arguments));\n\t\t\t\t}return w(e, t), e.prototype.startNode = function () {\n\t\t\t\t\treturn new Y(this, this.state.start, this.state.startLoc);\n\t\t\t\t}, e.prototype.startNodeAt = function (t, e) {\n\t\t\t\t\treturn new Y(this, t, e);\n\t\t\t\t}, e.prototype.finishNode = function (t, e) {\n\t\t\t\t\treturn this.finishNodeAt(t, e, this.state.lastTokEnd, this.state.lastTokEndLoc);\n\t\t\t\t}, e.prototype.finishNodeAt = function (t, e, s, i) {\n\t\t\t\t\treturn t.type = e, t.end = s, t.loc.end = i, this.options.ranges && (t.range[1] = s), this.processComment(t), t;\n\t\t\t\t}, e.prototype.resetStartLocationFromNode = function (t, e) {\n\t\t\t\t\tt.start = e.start, t.loc.start = e.loc.start, this.options.ranges && (t.range[0] = e.range[0]);\n\t\t\t\t}, e;\n\t\t\t}(z))))),\n\t\t\t    st = function st(t) {\n\t\t\t\treturn function (t) {\n\t\t\t\t\tfunction e() {\n\t\t\t\t\t\treturn g(this, e), P(this, t.apply(this, arguments));\n\t\t\t\t\t}return w(e, t), e.prototype.estreeParseRegExpLiteral = function (t) {\n\t\t\t\t\t\tvar e = t.pattern,\n\t\t\t\t\t\t    s = t.flags,\n\t\t\t\t\t\t    i = null;try {\n\t\t\t\t\t\t\ti = new RegExp(e, s);\n\t\t\t\t\t\t} catch (t) {}var r = this.estreeParseLiteral(i);return r.regex = { pattern: e, flags: s }, r;\n\t\t\t\t\t}, e.prototype.estreeParseLiteral = function (t) {\n\t\t\t\t\t\treturn this.parseLiteral(t, \"Literal\");\n\t\t\t\t\t}, e.prototype.directiveToStmt = function (t) {\n\t\t\t\t\t\tvar e = t.value,\n\t\t\t\t\t\t    s = this.startNodeAt(t.start, t.loc.start),\n\t\t\t\t\t\t    i = this.startNodeAt(e.start, e.loc.start);return i.value = e.value, i.raw = e.extra.raw, s.expression = this.finishNodeAt(i, \"Literal\", e.end, e.loc.end), s.directive = e.extra.raw.slice(1, -1), this.finishNodeAt(s, \"ExpressionStatement\", t.end, t.loc.end);\n\t\t\t\t\t}, e.prototype.checkDeclaration = function (e) {\n\t\t\t\t\t\tu(e) ? this.checkDeclaration(e.value) : t.prototype.checkDeclaration.call(this, e);\n\t\t\t\t\t}, e.prototype.checkGetterSetterParamCount = function (t) {\n\t\t\t\t\t\tvar e = \"get\" === t.kind ? 0 : 1;if (t.value.params.length !== e) {\n\t\t\t\t\t\t\tvar s = t.start;\"get\" === t.kind ? this.raise(s, \"getter should have no params\") : this.raise(s, \"setter should have exactly one param\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}, e.prototype.checkLVal = function (e, s, i, r) {\n\t\t\t\t\t\tvar a = this;switch (e.type) {case \"ObjectPattern\":\n\t\t\t\t\t\t\t\te.properties.forEach(function (t) {\n\t\t\t\t\t\t\t\t\ta.checkLVal(\"Property\" === t.type ? t.value : t, s, i, \"object destructuring pattern\");\n\t\t\t\t\t\t\t\t});break;default:\n\t\t\t\t\t\t\t\tt.prototype.checkLVal.call(this, e, s, i, r);}\n\t\t\t\t\t}, e.prototype.checkPropClash = function (t, e) {\n\t\t\t\t\t\tif (!t.computed && u(t)) {\n\t\t\t\t\t\t\tvar s = t.key;\"__proto__\" === (\"Identifier\" === s.type ? s.name : String(s.value)) && (e.proto && this.raise(s.start, \"Redefinition of __proto__ property\"), e.proto = !0);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, e.prototype.isStrictBody = function (t, e) {\n\t\t\t\t\t\tif (!e && t.body.body.length > 0) for (var s = t.body.body, i = Array.isArray(s), r = 0, s = i ? s : s[Symbol.iterator]();;) {\n\t\t\t\t\t\t\tvar a;if (i) {\n\t\t\t\t\t\t\t\tif (r >= s.length) break;a = s[r++];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif ((r = s.next()).done) break;a = r.value;\n\t\t\t\t\t\t\t}var n = a;if (\"ExpressionStatement\" !== n.type || \"Literal\" !== n.expression.type) break;if (\"use strict\" === n.expression.value) return !0;\n\t\t\t\t\t\t}return !1;\n\t\t\t\t\t}, e.prototype.isValidDirective = function (t) {\n\t\t\t\t\t\treturn !(\"ExpressionStatement\" !== t.type || \"Literal\" !== t.expression.type || \"string\" != typeof t.expression.value || t.expression.extra && t.expression.extra.parenthesized);\n\t\t\t\t\t}, e.prototype.stmtToDirective = function (e) {\n\t\t\t\t\t\tvar s = t.prototype.stmtToDirective.call(this, e),\n\t\t\t\t\t\t    i = e.expression.value;return s.value.value = i, s;\n\t\t\t\t\t}, e.prototype.parseBlockBody = function (e, s, i, r) {\n\t\t\t\t\t\tvar a = this;t.prototype.parseBlockBody.call(this, e, s, i, r);var n = e.directives.map(function (t) {\n\t\t\t\t\t\t\treturn a.directiveToStmt(t);\n\t\t\t\t\t\t});e.body = n.concat(e.body), delete e.directives;\n\t\t\t\t\t}, e.prototype.parseClassMethod = function (t, e, s, i) {\n\t\t\t\t\t\tthis.parseMethod(e, s, i), t.body.push(this.finishNode(e, \"MethodDefinition\"));\n\t\t\t\t\t}, e.prototype.parseExprAtom = function (e) {\n\t\t\t\t\t\tswitch (this.state.type) {case C.regexp:\n\t\t\t\t\t\t\t\treturn this.estreeParseRegExpLiteral(this.state.value);case C.num:case C.string:\n\t\t\t\t\t\t\t\treturn this.estreeParseLiteral(this.state.value);case C._null:\n\t\t\t\t\t\t\t\treturn this.estreeParseLiteral(null);case C._true:\n\t\t\t\t\t\t\t\treturn this.estreeParseLiteral(!0);case C._false:\n\t\t\t\t\t\t\t\treturn this.estreeParseLiteral(!1);default:\n\t\t\t\t\t\t\t\treturn t.prototype.parseExprAtom.call(this, e);}\n\t\t\t\t\t}, e.prototype.parseLiteral = function (e, s, i, r) {\n\t\t\t\t\t\tvar a = t.prototype.parseLiteral.call(this, e, s, i, r);return a.raw = a.extra.raw, delete a.extra, a;\n\t\t\t\t\t}, e.prototype.parseMethod = function (e, s, i) {\n\t\t\t\t\t\tvar r = this.startNode();return r.kind = e.kind, r = t.prototype.parseMethod.call(this, r, s, i), delete r.kind, e.value = this.finishNode(r, \"FunctionExpression\"), e;\n\t\t\t\t\t}, e.prototype.parseObjectMethod = function (e, s, i, r) {\n\t\t\t\t\t\tvar a = t.prototype.parseObjectMethod.call(this, e, s, i, r);return a && (\"method\" === a.kind && (a.kind = \"init\"), a.type = \"Property\"), a;\n\t\t\t\t\t}, e.prototype.parseObjectProperty = function (e, s, i, r, a) {\n\t\t\t\t\t\tvar n = t.prototype.parseObjectProperty.call(this, e, s, i, r, a);return n && (n.kind = \"init\", n.type = \"Property\"), n;\n\t\t\t\t\t}, e.prototype.toAssignable = function (e, s, i) {\n\t\t\t\t\t\tif (u(e)) return this.toAssignable(e.value, s, i), e;if (\"ObjectExpression\" === e.type) {\n\t\t\t\t\t\t\te.type = \"ObjectPattern\";for (var r = e.properties, a = Array.isArray(r), n = 0, r = a ? r : r[Symbol.iterator]();;) {\n\t\t\t\t\t\t\t\tvar o;if (a) {\n\t\t\t\t\t\t\t\t\tif (n >= r.length) break;o = r[n++];\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif ((n = r.next()).done) break;o = n.value;\n\t\t\t\t\t\t\t\t}var h = o;\"get\" === h.kind || \"set\" === h.kind ? this.raise(h.key.start, \"Object pattern can't contain getter or setter\") : h.method ? this.raise(h.key.start, \"Object pattern can't contain methods\") : this.toAssignable(h, s, \"object destructuring pattern\");\n\t\t\t\t\t\t\t}return e;\n\t\t\t\t\t\t}return t.prototype.toAssignable.call(this, e, s, i);\n\t\t\t\t\t}, e;\n\t\t\t\t}(t);\n\t\t\t},\n\t\t\t    it = [\"any\", \"mixed\", \"empty\", \"bool\", \"boolean\", \"number\", \"string\", \"void\", \"null\"],\n\t\t\t    rt = { const: \"declare export var\", let: \"declare export var\", type: \"export type\", interface: \"export interface\" },\n\t\t\t    at = function at(t) {\n\t\t\t\treturn function (t) {\n\t\t\t\t\tfunction e() {\n\t\t\t\t\t\treturn g(this, e), P(this, t.apply(this, arguments));\n\t\t\t\t\t}return w(e, t), e.prototype.flowParseTypeInitialiser = function (t) {\n\t\t\t\t\t\tvar e = this.state.inType;this.state.inType = !0, this.expect(t || C.colon);var s = this.flowParseType();return this.state.inType = e, s;\n\t\t\t\t\t}, e.prototype.flowParsePredicate = function () {\n\t\t\t\t\t\tvar t = this.startNode(),\n\t\t\t\t\t\t    e = this.state.startLoc,\n\t\t\t\t\t\t    s = this.state.start;this.expect(C.modulo);var i = this.state.startLoc;return this.expectContextual(\"checks\"), e.line === i.line && e.column === i.column - 1 || this.raise(s, \"Spaces between ´%´ and ´checks´ are not allowed here.\"), this.eat(C.parenL) ? (t.value = this.parseExpression(), this.expect(C.parenR), this.finishNode(t, \"DeclaredPredicate\")) : this.finishNode(t, \"InferredPredicate\");\n\t\t\t\t\t}, e.prototype.flowParseTypeAndPredicateInitialiser = function () {\n\t\t\t\t\t\tvar t = this.state.inType;this.state.inType = !0, this.expect(C.colon);var e = null,\n\t\t\t\t\t\t    s = null;return this.match(C.modulo) ? (this.state.inType = t, s = this.flowParsePredicate()) : (e = this.flowParseType(), this.state.inType = t, this.match(C.modulo) && (s = this.flowParsePredicate())), [e, s];\n\t\t\t\t\t}, e.prototype.flowParseDeclareClass = function (t) {\n\t\t\t\t\t\treturn this.next(), this.flowParseInterfaceish(t), this.finishNode(t, \"DeclareClass\");\n\t\t\t\t\t}, e.prototype.flowParseDeclareFunction = function (t) {\n\t\t\t\t\t\tthis.next();var e = t.id = this.parseIdentifier(),\n\t\t\t\t\t\t    s = this.startNode(),\n\t\t\t\t\t\t    i = this.startNode();this.isRelational(\"<\") ? s.typeParameters = this.flowParseTypeParameterDeclaration() : s.typeParameters = null, this.expect(C.parenL);var r = this.flowParseFunctionTypeParams();s.params = r.params, s.rest = r.rest, this.expect(C.parenR);var a = this.flowParseTypeAndPredicateInitialiser();return s.returnType = a[0], t.predicate = a[1], i.typeAnnotation = this.finishNode(s, \"FunctionTypeAnnotation\"), e.typeAnnotation = this.finishNode(i, \"TypeAnnotation\"), this.finishNode(e, e.type), this.semicolon(), this.finishNode(t, \"DeclareFunction\");\n\t\t\t\t\t}, e.prototype.flowParseDeclare = function (t, e) {\n\t\t\t\t\t\tif (this.match(C._class)) return this.flowParseDeclareClass(t);if (this.match(C._function)) return this.flowParseDeclareFunction(t);if (this.match(C._var)) return this.flowParseDeclareVariable(t);if (this.isContextual(\"module\")) return this.lookahead().type === C.dot ? this.flowParseDeclareModuleExports(t) : (e && this.unexpected(null, \"`declare module` cannot be used inside another `declare module`\"), this.flowParseDeclareModule(t));if (this.isContextual(\"type\")) return this.flowParseDeclareTypeAlias(t);if (this.isContextual(\"interface\")) return this.flowParseDeclareInterface(t);if (this.match(C._export)) return this.flowParseDeclareExportDeclaration(t, e);throw this.unexpected();\n\t\t\t\t\t}, e.prototype.flowParseDeclareVariable = function (t) {\n\t\t\t\t\t\treturn this.next(), t.id = this.flowParseTypeAnnotatableIdentifier(), this.semicolon(), this.finishNode(t, \"DeclareVariable\");\n\t\t\t\t\t}, e.prototype.flowParseDeclareModule = function (t) {\n\t\t\t\t\t\tvar e = this;this.next(), this.match(C.string) ? t.id = this.parseExprAtom() : t.id = this.parseIdentifier();var s = t.body = this.startNode(),\n\t\t\t\t\t\t    i = s.body = [];for (this.expect(C.braceL); !this.match(C.braceR);) {\n\t\t\t\t\t\t\tvar r = this.startNode();if (this.match(C._import)) {\n\t\t\t\t\t\t\t\tvar a = this.lookahead();\"type\" !== a.value && \"typeof\" !== a.value && this.unexpected(null, \"Imports within a `declare module` body must always be `import type` or `import typeof`\"), this.parseImport(r);\n\t\t\t\t\t\t\t} else this.expectContextual(\"declare\", \"Only declares and type imports are allowed inside declare module\"), r = this.flowParseDeclare(r, !0);i.push(r);\n\t\t\t\t\t\t}this.expect(C.braceR), this.finishNode(s, \"BlockStatement\");var n = null,\n\t\t\t\t\t\t    o = !1,\n\t\t\t\t\t\t    h = \"Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module or they are a CommonJS module\";return i.forEach(function (t) {\n\t\t\t\t\t\t\td(t) ? (\"CommonJS\" === n && e.unexpected(t.start, h), n = \"ES\") : \"DeclareModuleExports\" === t.type && (o && e.unexpected(t.start, \"Duplicate `declare module.exports` statement\"), \"ES\" === n && e.unexpected(t.start, h), n = \"CommonJS\", o = !0);\n\t\t\t\t\t\t}), t.kind = n || \"CommonJS\", this.finishNode(t, \"DeclareModule\");\n\t\t\t\t\t}, e.prototype.flowParseDeclareExportDeclaration = function (t, e) {\n\t\t\t\t\t\tif (this.expect(C._export), this.eat(C._default)) return this.match(C._function) || this.match(C._class) ? t.declaration = this.flowParseDeclare(this.startNode()) : (t.declaration = this.flowParseType(), this.semicolon()), t.default = !0, this.finishNode(t, \"DeclareExportDeclaration\");if (this.match(C._const) || this.match(C._let) || (this.isContextual(\"type\") || this.isContextual(\"interface\")) && !e) {\n\t\t\t\t\t\t\tvar s = this.state.value,\n\t\t\t\t\t\t\t    i = rt[s];this.unexpected(this.state.start, \"`declare export \" + s + \"` is not supported. Use `\" + i + \"` instead\");\n\t\t\t\t\t\t}if (this.match(C._var) || this.match(C._function) || this.match(C._class)) return t.declaration = this.flowParseDeclare(this.startNode()), t.default = !1, this.finishNode(t, \"DeclareExportDeclaration\");if (this.match(C.star) || this.match(C.braceL) || this.isContextual(\"interface\") || this.isContextual(\"type\")) return \"ExportNamedDeclaration\" === (t = this.parseExport(t)).type && (t.type = \"ExportDeclaration\", t.default = !1, delete t.exportKind), t.type = \"Declare\" + t.type, t;throw this.unexpected();\n\t\t\t\t\t}, e.prototype.flowParseDeclareModuleExports = function (t) {\n\t\t\t\t\t\treturn this.expectContextual(\"module\"), this.expect(C.dot), this.expectContextual(\"exports\"), t.typeAnnotation = this.flowParseTypeAnnotation(), this.semicolon(), this.finishNode(t, \"DeclareModuleExports\");\n\t\t\t\t\t}, e.prototype.flowParseDeclareTypeAlias = function (t) {\n\t\t\t\t\t\treturn this.next(), this.flowParseTypeAlias(t), this.finishNode(t, \"DeclareTypeAlias\");\n\t\t\t\t\t}, e.prototype.flowParseDeclareInterface = function (t) {\n\t\t\t\t\t\treturn this.next(), this.flowParseInterfaceish(t), this.finishNode(t, \"DeclareInterface\");\n\t\t\t\t\t}, e.prototype.flowParseInterfaceish = function (t) {\n\t\t\t\t\t\tif (t.id = this.parseIdentifier(), this.isRelational(\"<\") ? t.typeParameters = this.flowParseTypeParameterDeclaration() : t.typeParameters = null, t.extends = [], t.mixins = [], this.eat(C._extends)) do {\n\t\t\t\t\t\t\tt.extends.push(this.flowParseInterfaceExtends());\n\t\t\t\t\t\t} while (this.eat(C.comma));if (this.isContextual(\"mixins\")) {\n\t\t\t\t\t\t\tthis.next();do {\n\t\t\t\t\t\t\t\tt.mixins.push(this.flowParseInterfaceExtends());\n\t\t\t\t\t\t\t} while (this.eat(C.comma));\n\t\t\t\t\t\t}t.body = this.flowParseObjectType(!0, !1, !1);\n\t\t\t\t\t}, e.prototype.flowParseInterfaceExtends = function () {\n\t\t\t\t\t\tvar t = this.startNode();return t.id = this.flowParseQualifiedTypeIdentifier(), this.isRelational(\"<\") ? t.typeParameters = this.flowParseTypeParameterInstantiation() : t.typeParameters = null, this.finishNode(t, \"InterfaceExtends\");\n\t\t\t\t\t}, e.prototype.flowParseInterface = function (t) {\n\t\t\t\t\t\treturn this.flowParseInterfaceish(t), this.finishNode(t, \"InterfaceDeclaration\");\n\t\t\t\t\t}, e.prototype.flowParseRestrictedIdentifier = function (t) {\n\t\t\t\t\t\treturn it.indexOf(this.state.value) > -1 && this.raise(this.state.start, \"Cannot overwrite primitive type \" + this.state.value), this.parseIdentifier(t);\n\t\t\t\t\t}, e.prototype.flowParseTypeAlias = function (t) {\n\t\t\t\t\t\treturn t.id = this.flowParseRestrictedIdentifier(), this.isRelational(\"<\") ? t.typeParameters = this.flowParseTypeParameterDeclaration() : t.typeParameters = null, t.right = this.flowParseTypeInitialiser(C.eq), this.semicolon(), this.finishNode(t, \"TypeAlias\");\n\t\t\t\t\t}, e.prototype.flowParseTypeParameter = function () {\n\t\t\t\t\t\tvar t = this.startNode(),\n\t\t\t\t\t\t    e = this.flowParseVariance(),\n\t\t\t\t\t\t    s = this.flowParseTypeAnnotatableIdentifier();return t.name = s.name, t.variance = e, t.bound = s.typeAnnotation, this.match(C.eq) && (this.eat(C.eq), t.default = this.flowParseType()), this.finishNode(t, \"TypeParameter\");\n\t\t\t\t\t}, e.prototype.flowParseTypeParameterDeclaration = function () {\n\t\t\t\t\t\tvar t = this.state.inType,\n\t\t\t\t\t\t    e = this.startNode();e.params = [], this.state.inType = !0, this.isRelational(\"<\") || this.match(C.jsxTagStart) ? this.next() : this.unexpected();do {\n\t\t\t\t\t\t\te.params.push(this.flowParseTypeParameter()), this.isRelational(\">\") || this.expect(C.comma);\n\t\t\t\t\t\t} while (!this.isRelational(\">\"));return this.expectRelational(\">\"), this.state.inType = t, this.finishNode(e, \"TypeParameterDeclaration\");\n\t\t\t\t\t}, e.prototype.flowParseTypeParameterInstantiation = function () {\n\t\t\t\t\t\tvar t = this.startNode(),\n\t\t\t\t\t\t    e = this.state.inType;for (t.params = [], this.state.inType = !0, this.expectRelational(\"<\"); !this.isRelational(\">\");) {\n\t\t\t\t\t\t\tt.params.push(this.flowParseType()), this.isRelational(\">\") || this.expect(C.comma);\n\t\t\t\t\t\t}return this.expectRelational(\">\"), this.state.inType = e, this.finishNode(t, \"TypeParameterInstantiation\");\n\t\t\t\t\t}, e.prototype.flowParseObjectPropertyKey = function () {\n\t\t\t\t\t\treturn this.match(C.num) || this.match(C.string) ? this.parseExprAtom() : this.parseIdentifier(!0);\n\t\t\t\t\t}, e.prototype.flowParseObjectTypeIndexer = function (t, e, s) {\n\t\t\t\t\t\treturn t.static = e, this.expect(C.bracketL), this.lookahead().type === C.colon ? (t.id = this.flowParseObjectPropertyKey(), t.key = this.flowParseTypeInitialiser()) : (t.id = null, t.key = this.flowParseType()), this.expect(C.bracketR), t.value = this.flowParseTypeInitialiser(), t.variance = s, this.finishNode(t, \"ObjectTypeIndexer\");\n\t\t\t\t\t}, e.prototype.flowParseObjectTypeMethodish = function (t) {\n\t\t\t\t\t\tfor (t.params = [], t.rest = null, t.typeParameters = null, this.isRelational(\"<\") && (t.typeParameters = this.flowParseTypeParameterDeclaration()), this.expect(C.parenL); !this.match(C.parenR) && !this.match(C.ellipsis);) {\n\t\t\t\t\t\t\tt.params.push(this.flowParseFunctionTypeParam()), this.match(C.parenR) || this.expect(C.comma);\n\t\t\t\t\t\t}return this.eat(C.ellipsis) && (t.rest = this.flowParseFunctionTypeParam()), this.expect(C.parenR), t.returnType = this.flowParseTypeInitialiser(), this.finishNode(t, \"FunctionTypeAnnotation\");\n\t\t\t\t\t}, e.prototype.flowParseObjectTypeCallProperty = function (t, e) {\n\t\t\t\t\t\tvar s = this.startNode();return t.static = e, t.value = this.flowParseObjectTypeMethodish(s), this.finishNode(t, \"ObjectTypeCallProperty\");\n\t\t\t\t\t}, e.prototype.flowParseObjectType = function (t, e, s) {\n\t\t\t\t\t\tvar i = this.state.inType;this.state.inType = !0;var r = this.startNode();r.callProperties = [], r.properties = [], r.indexers = [];var a = void 0,\n\t\t\t\t\t\t    n = void 0;for (e && this.match(C.braceBarL) ? (this.expect(C.braceBarL), a = C.braceBarR, n = !0) : (this.expect(C.braceL), a = C.braceR, n = !1), r.exact = n; !this.match(a);) {\n\t\t\t\t\t\t\tvar o = !1,\n\t\t\t\t\t\t\t    h = this.startNode();t && this.isContextual(\"static\") && this.lookahead().type !== C.colon && (this.next(), o = !0);var p = this.flowParseVariance();if (this.match(C.bracketL)) r.indexers.push(this.flowParseObjectTypeIndexer(h, o, p));else if (this.match(C.parenL) || this.isRelational(\"<\")) p && this.unexpected(p.start), r.callProperties.push(this.flowParseObjectTypeCallProperty(h, o));else {\n\t\t\t\t\t\t\t\tvar c = \"init\";if (this.isContextual(\"get\") || this.isContextual(\"set\")) {\n\t\t\t\t\t\t\t\t\tvar l = this.lookahead();l.type !== C.name && l.type !== C.string && l.type !== C.num || (c = this.state.value, this.next());\n\t\t\t\t\t\t\t\t}r.properties.push(this.flowParseObjectTypeProperty(h, o, p, c, s));\n\t\t\t\t\t\t\t}this.flowObjectTypeSemicolon();\n\t\t\t\t\t\t}this.expect(a);var u = this.finishNode(r, \"ObjectTypeAnnotation\");return this.state.inType = i, u;\n\t\t\t\t\t}, e.prototype.flowParseObjectTypeProperty = function (t, e, s, i, r) {\n\t\t\t\t\t\tif (this.match(C.ellipsis)) return r || this.unexpected(null, \"Spread operator cannot appear in class or interface definitions\"), s && this.unexpected(s.start, \"Spread properties cannot have variance\"), this.expect(C.ellipsis), t.argument = this.flowParseType(), this.finishNode(t, \"ObjectTypeSpreadProperty\");t.key = this.flowParseObjectPropertyKey(), t.static = e, t.kind = i;var a = !1;return this.isRelational(\"<\") || this.match(C.parenL) ? (s && this.unexpected(s.start), t.value = this.flowParseObjectTypeMethodish(this.startNodeAt(t.start, t.loc.start)), \"get\" !== i && \"set\" !== i || this.flowCheckGetterSetterParamCount(t)) : (\"init\" !== i && this.unexpected(), this.eat(C.question) && (a = !0), t.value = this.flowParseTypeInitialiser(), t.variance = s), t.optional = a, this.finishNode(t, \"ObjectTypeProperty\");\n\t\t\t\t\t}, e.prototype.flowCheckGetterSetterParamCount = function (t) {\n\t\t\t\t\t\tvar e = \"get\" === t.kind ? 0 : 1;if (t.value.params.length !== e) {\n\t\t\t\t\t\t\tvar s = t.start;\"get\" === t.kind ? this.raise(s, \"getter should have no params\") : this.raise(s, \"setter should have exactly one param\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}, e.prototype.flowObjectTypeSemicolon = function () {\n\t\t\t\t\t\tthis.eat(C.semi) || this.eat(C.comma) || this.match(C.braceR) || this.match(C.braceBarR) || this.unexpected();\n\t\t\t\t\t}, e.prototype.flowParseQualifiedTypeIdentifier = function (t, e, s) {\n\t\t\t\t\t\tt = t || this.state.start, e = e || this.state.startLoc;for (var i = s || this.parseIdentifier(); this.eat(C.dot);) {\n\t\t\t\t\t\t\tvar r = this.startNodeAt(t, e);r.qualification = i, r.id = this.parseIdentifier(), i = this.finishNode(r, \"QualifiedTypeIdentifier\");\n\t\t\t\t\t\t}return i;\n\t\t\t\t\t}, e.prototype.flowParseGenericType = function (t, e, s) {\n\t\t\t\t\t\tvar i = this.startNodeAt(t, e);return i.typeParameters = null, i.id = this.flowParseQualifiedTypeIdentifier(t, e, s), this.isRelational(\"<\") && (i.typeParameters = this.flowParseTypeParameterInstantiation()), this.finishNode(i, \"GenericTypeAnnotation\");\n\t\t\t\t\t}, e.prototype.flowParseTypeofType = function () {\n\t\t\t\t\t\tvar t = this.startNode();return this.expect(C._typeof), t.argument = this.flowParsePrimaryType(), this.finishNode(t, \"TypeofTypeAnnotation\");\n\t\t\t\t\t}, e.prototype.flowParseTupleType = function () {\n\t\t\t\t\t\tvar t = this.startNode();for (t.types = [], this.expect(C.bracketL); this.state.pos < this.input.length && !this.match(C.bracketR) && (t.types.push(this.flowParseType()), !this.match(C.bracketR));) {\n\t\t\t\t\t\t\tthis.expect(C.comma);\n\t\t\t\t\t\t}return this.expect(C.bracketR), this.finishNode(t, \"TupleTypeAnnotation\");\n\t\t\t\t\t}, e.prototype.flowParseFunctionTypeParam = function () {\n\t\t\t\t\t\tvar t = null,\n\t\t\t\t\t\t    e = !1,\n\t\t\t\t\t\t    s = null,\n\t\t\t\t\t\t    i = this.startNode(),\n\t\t\t\t\t\t    r = this.lookahead();return r.type === C.colon || r.type === C.question ? (t = this.parseIdentifier(), this.eat(C.question) && (e = !0), s = this.flowParseTypeInitialiser()) : s = this.flowParseType(), i.name = t, i.optional = e, i.typeAnnotation = s, this.finishNode(i, \"FunctionTypeParam\");\n\t\t\t\t\t}, e.prototype.reinterpretTypeAsFunctionTypeParam = function (t) {\n\t\t\t\t\t\tvar e = this.startNodeAt(t.start, t.loc.start);return e.name = null, e.optional = !1, e.typeAnnotation = t, this.finishNode(e, \"FunctionTypeParam\");\n\t\t\t\t\t}, e.prototype.flowParseFunctionTypeParams = function () {\n\t\t\t\t\t\tfor (var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], e = null; !this.match(C.parenR) && !this.match(C.ellipsis);) {\n\t\t\t\t\t\t\tt.push(this.flowParseFunctionTypeParam()), this.match(C.parenR) || this.expect(C.comma);\n\t\t\t\t\t\t}return this.eat(C.ellipsis) && (e = this.flowParseFunctionTypeParam()), { params: t, rest: e };\n\t\t\t\t\t}, e.prototype.flowIdentToTypeAnnotation = function (t, e, s, i) {\n\t\t\t\t\t\tswitch (i.name) {case \"any\":\n\t\t\t\t\t\t\t\treturn this.finishNode(s, \"AnyTypeAnnotation\");case \"void\":\n\t\t\t\t\t\t\t\treturn this.finishNode(s, \"VoidTypeAnnotation\");case \"bool\":case \"boolean\":\n\t\t\t\t\t\t\t\treturn this.finishNode(s, \"BooleanTypeAnnotation\");case \"mixed\":\n\t\t\t\t\t\t\t\treturn this.finishNode(s, \"MixedTypeAnnotation\");case \"empty\":\n\t\t\t\t\t\t\t\treturn this.finishNode(s, \"EmptyTypeAnnotation\");case \"number\":\n\t\t\t\t\t\t\t\treturn this.finishNode(s, \"NumberTypeAnnotation\");case \"string\":\n\t\t\t\t\t\t\t\treturn this.finishNode(s, \"StringTypeAnnotation\");default:\n\t\t\t\t\t\t\t\treturn this.flowParseGenericType(t, e, i);}\n\t\t\t\t\t}, e.prototype.flowParsePrimaryType = function () {\n\t\t\t\t\t\tvar t = this.state.start,\n\t\t\t\t\t\t    e = this.state.startLoc,\n\t\t\t\t\t\t    s = this.startNode(),\n\t\t\t\t\t\t    i = void 0,\n\t\t\t\t\t\t    r = void 0,\n\t\t\t\t\t\t    a = !1,\n\t\t\t\t\t\t    n = this.state.noAnonFunctionType;switch (this.state.type) {case C.name:\n\t\t\t\t\t\t\t\treturn this.flowIdentToTypeAnnotation(t, e, s, this.parseIdentifier());case C.braceL:\n\t\t\t\t\t\t\t\treturn this.flowParseObjectType(!1, !1, !0);case C.braceBarL:\n\t\t\t\t\t\t\t\treturn this.flowParseObjectType(!1, !0, !0);case C.bracketL:\n\t\t\t\t\t\t\t\treturn this.flowParseTupleType();case C.relational:\n\t\t\t\t\t\t\t\tif (\"<\" === this.state.value) return s.typeParameters = this.flowParseTypeParameterDeclaration(), this.expect(C.parenL), i = this.flowParseFunctionTypeParams(), s.params = i.params, s.rest = i.rest, this.expect(C.parenR), this.expect(C.arrow), s.returnType = this.flowParseType(), this.finishNode(s, \"FunctionTypeAnnotation\");break;case C.parenL:\n\t\t\t\t\t\t\t\tif (this.next(), !this.match(C.parenR) && !this.match(C.ellipsis)) if (this.match(C.name)) {\n\t\t\t\t\t\t\t\t\tvar o = this.lookahead().type;a = o !== C.question && o !== C.colon;\n\t\t\t\t\t\t\t\t} else a = !0;if (a) {\n\t\t\t\t\t\t\t\t\tif (this.state.noAnonFunctionType = !1, r = this.flowParseType(), this.state.noAnonFunctionType = n, this.state.noAnonFunctionType || !(this.match(C.comma) || this.match(C.parenR) && this.lookahead().type === C.arrow)) return this.expect(C.parenR), r;this.eat(C.comma);\n\t\t\t\t\t\t\t\t}return i = r ? this.flowParseFunctionTypeParams([this.reinterpretTypeAsFunctionTypeParam(r)]) : this.flowParseFunctionTypeParams(), s.params = i.params, s.rest = i.rest, this.expect(C.parenR), this.expect(C.arrow), s.returnType = this.flowParseType(), s.typeParameters = null, this.finishNode(s, \"FunctionTypeAnnotation\");case C.string:\n\t\t\t\t\t\t\t\treturn this.parseLiteral(this.state.value, \"StringLiteralTypeAnnotation\");case C._true:case C._false:\n\t\t\t\t\t\t\t\treturn s.value = this.match(C._true), this.next(), this.finishNode(s, \"BooleanLiteralTypeAnnotation\");case C.plusMin:\n\t\t\t\t\t\t\t\tif (\"-\" === this.state.value) return this.next(), this.match(C.num) || this.unexpected(null, \"Unexpected token, expected number\"), this.parseLiteral(-this.state.value, \"NumberLiteralTypeAnnotation\", s.start, s.loc.start);this.unexpected();case C.num:\n\t\t\t\t\t\t\t\treturn this.parseLiteral(this.state.value, \"NumberLiteralTypeAnnotation\");case C._null:\n\t\t\t\t\t\t\t\treturn s.value = this.match(C._null), this.next(), this.finishNode(s, \"NullLiteralTypeAnnotation\");case C._this:\n\t\t\t\t\t\t\t\treturn s.value = this.match(C._this), this.next(), this.finishNode(s, \"ThisTypeAnnotation\");case C.star:\n\t\t\t\t\t\t\t\treturn this.next(), this.finishNode(s, \"ExistsTypeAnnotation\");default:\n\t\t\t\t\t\t\t\tif (\"typeof\" === this.state.type.keyword) return this.flowParseTypeofType();}throw this.unexpected();\n\t\t\t\t\t}, e.prototype.flowParsePostfixType = function () {\n\t\t\t\t\t\tfor (var t = this.state.start, e = this.state.startLoc, s = this.flowParsePrimaryType(); !this.canInsertSemicolon() && this.match(C.bracketL);) {\n\t\t\t\t\t\t\tvar i = this.startNodeAt(t, e);i.elementType = s, this.expect(C.bracketL), this.expect(C.bracketR), s = this.finishNode(i, \"ArrayTypeAnnotation\");\n\t\t\t\t\t\t}return s;\n\t\t\t\t\t}, e.prototype.flowParsePrefixType = function () {\n\t\t\t\t\t\tvar t = this.startNode();return this.eat(C.question) ? (t.typeAnnotation = this.flowParsePrefixType(), this.finishNode(t, \"NullableTypeAnnotation\")) : this.flowParsePostfixType();\n\t\t\t\t\t}, e.prototype.flowParseAnonFunctionWithoutParens = function () {\n\t\t\t\t\t\tvar t = this.flowParsePrefixType();if (!this.state.noAnonFunctionType && this.eat(C.arrow)) {\n\t\t\t\t\t\t\tvar e = this.startNodeAt(t.start, t.loc.start);return e.params = [this.reinterpretTypeAsFunctionTypeParam(t)], e.rest = null, e.returnType = this.flowParseType(), e.typeParameters = null, this.finishNode(e, \"FunctionTypeAnnotation\");\n\t\t\t\t\t\t}return t;\n\t\t\t\t\t}, e.prototype.flowParseIntersectionType = function () {\n\t\t\t\t\t\tvar t = this.startNode();this.eat(C.bitwiseAND);var e = this.flowParseAnonFunctionWithoutParens();for (t.types = [e]; this.eat(C.bitwiseAND);) {\n\t\t\t\t\t\t\tt.types.push(this.flowParseAnonFunctionWithoutParens());\n\t\t\t\t\t\t}return 1 === t.types.length ? e : this.finishNode(t, \"IntersectionTypeAnnotation\");\n\t\t\t\t\t}, e.prototype.flowParseUnionType = function () {\n\t\t\t\t\t\tvar t = this.startNode();this.eat(C.bitwiseOR);var e = this.flowParseIntersectionType();for (t.types = [e]; this.eat(C.bitwiseOR);) {\n\t\t\t\t\t\t\tt.types.push(this.flowParseIntersectionType());\n\t\t\t\t\t\t}return 1 === t.types.length ? e : this.finishNode(t, \"UnionTypeAnnotation\");\n\t\t\t\t\t}, e.prototype.flowParseType = function () {\n\t\t\t\t\t\tvar t = this.state.inType;this.state.inType = !0;var e = this.flowParseUnionType();return this.state.inType = t, e;\n\t\t\t\t\t}, e.prototype.flowParseTypeAnnotation = function () {\n\t\t\t\t\t\tvar t = this.startNode();return t.typeAnnotation = this.flowParseTypeInitialiser(), this.finishNode(t, \"TypeAnnotation\");\n\t\t\t\t\t}, e.prototype.flowParseTypeAnnotatableIdentifier = function () {\n\t\t\t\t\t\tvar t = this.flowParseRestrictedIdentifier();return this.match(C.colon) && (t.typeAnnotation = this.flowParseTypeAnnotation(), this.finishNode(t, t.type)), t;\n\t\t\t\t\t}, e.prototype.typeCastToParameter = function (t) {\n\t\t\t\t\t\treturn t.expression.typeAnnotation = t.typeAnnotation, this.finishNodeAt(t.expression, t.expression.type, t.typeAnnotation.end, t.typeAnnotation.loc.end);\n\t\t\t\t\t}, e.prototype.flowParseVariance = function () {\n\t\t\t\t\t\tvar t = null;return this.match(C.plusMin) && (t = this.startNode(), \"+\" === this.state.value ? t.kind = \"plus\" : t.kind = \"minus\", this.next(), this.finishNode(t, \"Variance\")), t;\n\t\t\t\t\t}, e.prototype.parseFunctionBody = function (e, s) {\n\t\t\t\t\t\tif (this.match(C.colon) && !s) {\n\t\t\t\t\t\t\tvar i = this.startNode(),\n\t\t\t\t\t\t\t    r = this.flowParseTypeAndPredicateInitialiser();i.typeAnnotation = r[0], e.predicate = r[1], e.returnType = i.typeAnnotation ? this.finishNode(i, \"TypeAnnotation\") : null;\n\t\t\t\t\t\t}return t.prototype.parseFunctionBody.call(this, e, s);\n\t\t\t\t\t}, e.prototype.parseStatement = function (e, s) {\n\t\t\t\t\t\tif (this.state.strict && this.match(C.name) && \"interface\" === this.state.value) {\n\t\t\t\t\t\t\tvar i = this.startNode();return this.next(), this.flowParseInterface(i);\n\t\t\t\t\t\t}return t.prototype.parseStatement.call(this, e, s);\n\t\t\t\t\t}, e.prototype.parseExpressionStatement = function (e, s) {\n\t\t\t\t\t\tif (\"Identifier\" === s.type) if (\"declare\" === s.name) {\n\t\t\t\t\t\t\tif (this.match(C._class) || this.match(C.name) || this.match(C._function) || this.match(C._var) || this.match(C._export)) return this.flowParseDeclare(e);\n\t\t\t\t\t\t} else if (this.match(C.name)) {\n\t\t\t\t\t\t\tif (\"interface\" === s.name) return this.flowParseInterface(e);if (\"type\" === s.name) return this.flowParseTypeAlias(e);\n\t\t\t\t\t\t}return t.prototype.parseExpressionStatement.call(this, e, s);\n\t\t\t\t\t}, e.prototype.shouldParseExportDeclaration = function () {\n\t\t\t\t\t\treturn this.isContextual(\"type\") || this.isContextual(\"interface\") || t.prototype.shouldParseExportDeclaration.call(this);\n\t\t\t\t\t}, e.prototype.isExportDefaultSpecifier = function () {\n\t\t\t\t\t\treturn (!this.match(C.name) || \"type\" !== this.state.value && \"interface\" !== this.state.value) && t.prototype.isExportDefaultSpecifier.call(this);\n\t\t\t\t\t}, e.prototype.parseConditional = function (e, s, i, r, a) {\n\t\t\t\t\t\tif (a && this.match(C.question)) {\n\t\t\t\t\t\t\tvar n = this.state.clone();try {\n\t\t\t\t\t\t\t\treturn t.prototype.parseConditional.call(this, e, s, i, r);\n\t\t\t\t\t\t\t} catch (t) {\n\t\t\t\t\t\t\t\tif (t instanceof SyntaxError) return this.state = n, a.start = t.pos || this.state.start, e;throw t;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}return t.prototype.parseConditional.call(this, e, s, i, r);\n\t\t\t\t\t}, e.prototype.parseParenItem = function (e, s, i) {\n\t\t\t\t\t\tif (e = t.prototype.parseParenItem.call(this, e, s, i), this.eat(C.question) && (e.optional = !0), this.match(C.colon)) {\n\t\t\t\t\t\t\tvar r = this.startNodeAt(s, i);return r.expression = e, r.typeAnnotation = this.flowParseTypeAnnotation(), this.finishNode(r, \"TypeCastExpression\");\n\t\t\t\t\t\t}return e;\n\t\t\t\t\t}, e.prototype.parseExport = function (e) {\n\t\t\t\t\t\treturn \"ExportNamedDeclaration\" === (e = t.prototype.parseExport.call(this, e)).type && (e.exportKind = e.exportKind || \"value\"), e;\n\t\t\t\t\t}, e.prototype.parseExportDeclaration = function (e) {\n\t\t\t\t\t\tif (this.isContextual(\"type\")) {\n\t\t\t\t\t\t\te.exportKind = \"type\";var s = this.startNode();return this.next(), this.match(C.braceL) ? (e.specifiers = this.parseExportSpecifiers(), this.parseExportFrom(e), null) : this.flowParseTypeAlias(s);\n\t\t\t\t\t\t}if (this.isContextual(\"interface\")) {\n\t\t\t\t\t\t\te.exportKind = \"type\";var i = this.startNode();return this.next(), this.flowParseInterface(i);\n\t\t\t\t\t\t}return t.prototype.parseExportDeclaration.call(this, e);\n\t\t\t\t\t}, e.prototype.parseClassId = function (e, s, i) {\n\t\t\t\t\t\tt.prototype.parseClassId.call(this, e, s, i), this.isRelational(\"<\") && (e.typeParameters = this.flowParseTypeParameterDeclaration());\n\t\t\t\t\t}, e.prototype.isKeyword = function (e) {\n\t\t\t\t\t\treturn (!this.state.inType || \"void\" !== e) && t.prototype.isKeyword.call(this, e);\n\t\t\t\t\t}, e.prototype.readToken = function (e) {\n\t\t\t\t\t\treturn !this.state.inType || 62 !== e && 60 !== e ? t.prototype.readToken.call(this, e) : this.finishOp(C.relational, 1);\n\t\t\t\t\t}, e.prototype.toAssignable = function (e, s, i) {\n\t\t\t\t\t\treturn \"TypeCastExpression\" === e.type ? t.prototype.toAssignable.call(this, this.typeCastToParameter(e), s, i) : t.prototype.toAssignable.call(this, e, s, i);\n\t\t\t\t\t}, e.prototype.toAssignableList = function (e, s, i) {\n\t\t\t\t\t\tfor (var r = 0; r < e.length; r++) {\n\t\t\t\t\t\t\tvar a = e[r];a && \"TypeCastExpression\" === a.type && (e[r] = this.typeCastToParameter(a));\n\t\t\t\t\t\t}return t.prototype.toAssignableList.call(this, e, s, i);\n\t\t\t\t\t}, e.prototype.toReferencedList = function (t) {\n\t\t\t\t\t\tfor (var e = 0; e < t.length; e++) {\n\t\t\t\t\t\t\tvar s = t[e];s && s._exprListItem && \"TypeCastExpression\" === s.type && this.raise(s.start, \"Unexpected type cast\");\n\t\t\t\t\t\t}return t;\n\t\t\t\t\t}, e.prototype.parseExprListItem = function (e, s, i) {\n\t\t\t\t\t\tvar r = this.startNode(),\n\t\t\t\t\t\t    a = t.prototype.parseExprListItem.call(this, e, s, i);return this.match(C.colon) ? (r._exprListItem = !0, r.expression = a, r.typeAnnotation = this.flowParseTypeAnnotation(), this.finishNode(r, \"TypeCastExpression\")) : a;\n\t\t\t\t\t}, e.prototype.checkLVal = function (e, s, i, r) {\n\t\t\t\t\t\tif (\"TypeCastExpression\" !== e.type) return t.prototype.checkLVal.call(this, e, s, i, r);\n\t\t\t\t\t}, e.prototype.parseClassProperty = function (e) {\n\t\t\t\t\t\treturn this.match(C.colon) && (e.typeAnnotation = this.flowParseTypeAnnotation()), t.prototype.parseClassProperty.call(this, e);\n\t\t\t\t\t}, e.prototype.isClassMethod = function () {\n\t\t\t\t\t\treturn this.isRelational(\"<\") || t.prototype.isClassMethod.call(this);\n\t\t\t\t\t}, e.prototype.isClassProperty = function () {\n\t\t\t\t\t\treturn this.match(C.colon) || t.prototype.isClassProperty.call(this);\n\t\t\t\t\t}, e.prototype.isNonstaticConstructor = function (e) {\n\t\t\t\t\t\treturn !this.match(C.colon) && t.prototype.isNonstaticConstructor.call(this, e);\n\t\t\t\t\t}, e.prototype.parseClassMethod = function (e, s, i, r) {\n\t\t\t\t\t\ts.variance && this.unexpected(s.variance.start), delete s.variance, this.isRelational(\"<\") && (s.typeParameters = this.flowParseTypeParameterDeclaration()), t.prototype.parseClassMethod.call(this, e, s, i, r);\n\t\t\t\t\t}, e.prototype.parseClassSuper = function (e) {\n\t\t\t\t\t\tif (t.prototype.parseClassSuper.call(this, e), e.superClass && this.isRelational(\"<\") && (e.superTypeParameters = this.flowParseTypeParameterInstantiation()), this.isContextual(\"implements\")) {\n\t\t\t\t\t\t\tthis.next();var s = e.implements = [];do {\n\t\t\t\t\t\t\t\tvar i = this.startNode();i.id = this.parseIdentifier(), this.isRelational(\"<\") ? i.typeParameters = this.flowParseTypeParameterInstantiation() : i.typeParameters = null, s.push(this.finishNode(i, \"ClassImplements\"));\n\t\t\t\t\t\t\t} while (this.eat(C.comma));\n\t\t\t\t\t\t}\n\t\t\t\t\t}, e.prototype.parsePropertyName = function (e) {\n\t\t\t\t\t\tvar s = this.flowParseVariance(),\n\t\t\t\t\t\t    i = t.prototype.parsePropertyName.call(this, e);return e.variance = s, i;\n\t\t\t\t\t}, e.prototype.parseObjPropValue = function (e, s, i, r, a, n, o) {\n\t\t\t\t\t\te.variance && this.unexpected(e.variance.start), delete e.variance;var h = void 0;this.isRelational(\"<\") && (h = this.flowParseTypeParameterDeclaration(), this.match(C.parenL) || this.unexpected()), t.prototype.parseObjPropValue.call(this, e, s, i, r, a, n, o), h && ((e.value || e).typeParameters = h);\n\t\t\t\t\t}, e.prototype.parseAssignableListItemTypes = function (t) {\n\t\t\t\t\t\treturn this.eat(C.question) && (t.optional = !0), this.match(C.colon) && (t.typeAnnotation = this.flowParseTypeAnnotation()), this.finishNode(t, t.type), t;\n\t\t\t\t\t}, e.prototype.parseMaybeDefault = function (e, s, i) {\n\t\t\t\t\t\tvar r = t.prototype.parseMaybeDefault.call(this, e, s, i);return \"AssignmentPattern\" === r.type && r.typeAnnotation && r.right.start < r.typeAnnotation.start && this.raise(r.typeAnnotation.start, \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`\"), r;\n\t\t\t\t\t}, e.prototype.parseImportSpecifiers = function (e) {\n\t\t\t\t\t\te.importKind = \"value\";var s = null;if (this.match(C._typeof) ? s = \"typeof\" : this.isContextual(\"type\") && (s = \"type\"), s) {\n\t\t\t\t\t\t\tvar i = this.lookahead();(i.type === C.name && \"from\" !== i.value || i.type === C.braceL || i.type === C.star) && (this.next(), e.importKind = s);\n\t\t\t\t\t\t}t.prototype.parseImportSpecifiers.call(this, e);\n\t\t\t\t\t}, e.prototype.parseImportSpecifier = function (t) {\n\t\t\t\t\t\tvar e = this.startNode(),\n\t\t\t\t\t\t    s = this.state.start,\n\t\t\t\t\t\t    i = this.parseIdentifier(!0),\n\t\t\t\t\t\t    r = null;\"type\" === i.name ? r = \"type\" : \"typeof\" === i.name && (r = \"typeof\");var a = !1;if (this.isContextual(\"as\")) {\n\t\t\t\t\t\t\tvar n = this.parseIdentifier(!0);null === r || this.match(C.name) || this.state.type.keyword ? (e.imported = i, e.importKind = null, e.local = this.parseIdentifier()) : (e.imported = n, e.importKind = r, e.local = n.__clone());\n\t\t\t\t\t\t} else null !== r && (this.match(C.name) || this.state.type.keyword) ? (e.imported = this.parseIdentifier(!0), e.importKind = r, this.eatContextual(\"as\") ? e.local = this.parseIdentifier() : (a = !0, e.local = e.imported.__clone())) : (a = !0, e.imported = i, e.importKind = null, e.local = e.imported.__clone());\"type\" !== t.importKind && \"typeof\" !== t.importKind || \"type\" !== e.importKind && \"typeof\" !== e.importKind || this.raise(s, \"`The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements`\"), a && this.checkReservedWord(e.local.name, e.start, !0, !0), this.checkLVal(e.local, !0, void 0, \"import specifier\"), t.specifiers.push(this.finishNode(e, \"ImportSpecifier\"));\n\t\t\t\t\t}, e.prototype.parseFunctionParams = function (e) {\n\t\t\t\t\t\tthis.isRelational(\"<\") && (e.typeParameters = this.flowParseTypeParameterDeclaration()), t.prototype.parseFunctionParams.call(this, e);\n\t\t\t\t\t}, e.prototype.parseVarHead = function (e) {\n\t\t\t\t\t\tt.prototype.parseVarHead.call(this, e), this.match(C.colon) && (e.id.typeAnnotation = this.flowParseTypeAnnotation(), this.finishNode(e.id, e.id.type));\n\t\t\t\t\t}, e.prototype.parseAsyncArrowFromCallExpression = function (e, s) {\n\t\t\t\t\t\tif (this.match(C.colon)) {\n\t\t\t\t\t\t\tvar i = this.state.noAnonFunctionType;this.state.noAnonFunctionType = !0, e.returnType = this.flowParseTypeAnnotation(), this.state.noAnonFunctionType = i;\n\t\t\t\t\t\t}return t.prototype.parseAsyncArrowFromCallExpression.call(this, e, s);\n\t\t\t\t\t}, e.prototype.shouldParseAsyncArrow = function () {\n\t\t\t\t\t\treturn this.match(C.colon) || t.prototype.shouldParseAsyncArrow.call(this);\n\t\t\t\t\t}, e.prototype.parseMaybeAssign = function (e, s, i, r) {\n\t\t\t\t\t\tvar a = null;if (C.jsxTagStart && this.match(C.jsxTagStart)) {\n\t\t\t\t\t\t\tvar n = this.state.clone();try {\n\t\t\t\t\t\t\t\treturn t.prototype.parseMaybeAssign.call(this, e, s, i, r);\n\t\t\t\t\t\t\t} catch (t) {\n\t\t\t\t\t\t\t\tif (!(t instanceof SyntaxError)) throw t;this.state = n, this.state.context.length -= 2, a = t;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}if (null != a || this.isRelational(\"<\")) {\n\t\t\t\t\t\t\tvar o = void 0,\n\t\t\t\t\t\t\t    h = void 0;try {\n\t\t\t\t\t\t\t\th = this.flowParseTypeParameterDeclaration(), (o = t.prototype.parseMaybeAssign.call(this, e, s, i, r)).typeParameters = h, this.resetStartLocationFromNode(o, h);\n\t\t\t\t\t\t\t} catch (t) {\n\t\t\t\t\t\t\t\tthrow a || t;\n\t\t\t\t\t\t\t}if (\"ArrowFunctionExpression\" === o.type) return o;if (null != a) throw a;this.raise(h.start, \"Expected an arrow function after this type parameter declaration\");\n\t\t\t\t\t\t}return t.prototype.parseMaybeAssign.call(this, e, s, i, r);\n\t\t\t\t\t}, e.prototype.parseArrow = function (e) {\n\t\t\t\t\t\tif (this.match(C.colon)) {\n\t\t\t\t\t\t\tvar s = this.state.clone();try {\n\t\t\t\t\t\t\t\tvar i = this.state.noAnonFunctionType;this.state.noAnonFunctionType = !0;var r = this.startNode(),\n\t\t\t\t\t\t\t\t    a = this.flowParseTypeAndPredicateInitialiser();r.typeAnnotation = a[0], e.predicate = a[1], this.state.noAnonFunctionType = i, this.canInsertSemicolon() && this.unexpected(), this.match(C.arrow) || this.unexpected(), e.returnType = r.typeAnnotation ? this.finishNode(r, \"TypeAnnotation\") : null;\n\t\t\t\t\t\t\t} catch (t) {\n\t\t\t\t\t\t\t\tif (!(t instanceof SyntaxError)) throw t;this.state = s;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}return t.prototype.parseArrow.call(this, e);\n\t\t\t\t\t}, e.prototype.shouldParseArrow = function () {\n\t\t\t\t\t\treturn this.match(C.colon) || t.prototype.shouldParseArrow.call(this);\n\t\t\t\t\t}, e;\n\t\t\t\t}(t);\n\t\t\t},\n\t\t\t    nt = { quot: '\"', amp: \"&\", apos: \"'\", lt: \"<\", gt: \">\", nbsp: \" \", iexcl: \"¡\", cent: \"¢\", pound: \"£\", curren: \"¤\", yen: \"¥\", brvbar: \"¦\", sect: \"§\", uml: \"¨\", copy: \"©\", ordf: \"ª\", laquo: \"«\", not: \"¬\", shy: \"­\", reg: \"®\", macr: \"¯\", deg: \"°\", plusmn: \"±\", sup2: \"²\", sup3: \"³\", acute: \"´\", micro: \"µ\", para: \"¶\", middot: \"·\", cedil: \"¸\", sup1: \"¹\", ordm: \"º\", raquo: \"»\", frac14: \"¼\", frac12: \"½\", frac34: \"¾\", iquest: \"¿\", Agrave: \"À\", Aacute: \"Á\", Acirc: \"Â\", Atilde: \"Ã\", Auml: \"Ä\", Aring: \"Å\", AElig: \"Æ\", Ccedil: \"Ç\", Egrave: \"È\", Eacute: \"É\", Ecirc: \"Ê\", Euml: \"Ë\", Igrave: \"Ì\", Iacute: \"Í\", Icirc: \"Î\", Iuml: \"Ï\", ETH: \"Ð\", Ntilde: \"Ñ\", Ograve: \"Ò\", Oacute: \"Ó\", Ocirc: \"Ô\", Otilde: \"Õ\", Ouml: \"Ö\", times: \"×\", Oslash: \"Ø\", Ugrave: \"Ù\", Uacute: \"Ú\", Ucirc: \"Û\", Uuml: \"Ü\", Yacute: \"Ý\", THORN: \"Þ\", szlig: \"ß\", agrave: \"à\", aacute: \"á\", acirc: \"â\", atilde: \"ã\", auml: \"ä\", aring: \"å\", aelig: \"æ\", ccedil: \"ç\", egrave: \"è\", eacute: \"é\", ecirc: \"ê\", euml: \"ë\", igrave: \"ì\", iacute: \"í\", icirc: \"î\", iuml: \"ï\", eth: \"ð\", ntilde: \"ñ\", ograve: \"ò\", oacute: \"ó\", ocirc: \"ô\", otilde: \"õ\", ouml: \"ö\", divide: \"÷\", oslash: \"ø\", ugrave: \"ù\", uacute: \"ú\", ucirc: \"û\", uuml: \"ü\", yacute: \"ý\", thorn: \"þ\", yuml: \"ÿ\", OElig: \"Œ\", oelig: \"œ\", Scaron: \"Š\", scaron: \"š\", Yuml: \"Ÿ\", fnof: \"ƒ\", circ: \"ˆ\", tilde: \"˜\", Alpha: \"Α\", Beta: \"Β\", Gamma: \"Γ\", Delta: \"Δ\", Epsilon: \"Ε\", Zeta: \"Ζ\", Eta: \"Η\", Theta: \"Θ\", Iota: \"Ι\", Kappa: \"Κ\", Lambda: \"Λ\", Mu: \"Μ\", Nu: \"Ν\", Xi: \"Ξ\", Omicron: \"Ο\", Pi: \"Π\", Rho: \"Ρ\", Sigma: \"Σ\", Tau: \"Τ\", Upsilon: \"Υ\", Phi: \"Φ\", Chi: \"Χ\", Psi: \"Ψ\", Omega: \"Ω\", alpha: \"α\", beta: \"β\", gamma: \"γ\", delta: \"δ\", epsilon: \"ε\", zeta: \"ζ\", eta: \"η\", theta: \"θ\", iota: \"ι\", kappa: \"κ\", lambda: \"λ\", mu: \"μ\", nu: \"ν\", xi: \"ξ\", omicron: \"ο\", pi: \"π\", rho: \"ρ\", sigmaf: \"ς\", sigma: \"σ\", tau: \"τ\", upsilon: \"υ\", phi: \"φ\", chi: \"χ\", psi: \"ψ\", omega: \"ω\", thetasym: \"ϑ\", upsih: \"ϒ\", piv: \"ϖ\", ensp: \" \", emsp: \" \", thinsp: \" \", zwnj: \"‌\", zwj: \"‍\", lrm: \"‎\", rlm: \"‏\", ndash: \"–\", mdash: \"—\", lsquo: \"‘\", rsquo: \"’\", sbquo: \"‚\", ldquo: \"“\", rdquo: \"”\", bdquo: \"„\", dagger: \"†\", Dagger: \"‡\", bull: \"•\", hellip: \"…\", permil: \"‰\", prime: \"′\", Prime: \"″\", lsaquo: \"‹\", rsaquo: \"›\", oline: \"‾\", frasl: \"⁄\", euro: \"€\", image: \"ℑ\", weierp: \"℘\", real: \"ℜ\", trade: \"™\", alefsym: \"ℵ\", larr: \"←\", uarr: \"↑\", rarr: \"→\", darr: \"↓\", harr: \"↔\", crarr: \"↵\", lArr: \"⇐\", uArr: \"⇑\", rArr: \"⇒\", dArr: \"⇓\", hArr: \"⇔\", forall: \"∀\", part: \"∂\", exist: \"∃\", empty: \"∅\", nabla: \"∇\", isin: \"∈\", notin: \"∉\", ni: \"∋\", prod: \"∏\", sum: \"∑\", minus: \"−\", lowast: \"∗\", radic: \"√\", prop: \"∝\", infin: \"∞\", ang: \"∠\", and: \"∧\", or: \"∨\", cap: \"∩\", cup: \"∪\", int: \"∫\", there4: \"∴\", sim: \"∼\", cong: \"≅\", asymp: \"≈\", ne: \"≠\", equiv: \"≡\", le: \"≤\", ge: \"≥\", sub: \"⊂\", sup: \"⊃\", nsub: \"⊄\", sube: \"⊆\", supe: \"⊇\", oplus: \"⊕\", otimes: \"⊗\", perp: \"⊥\", sdot: \"⋅\", lceil: \"⌈\", rceil: \"⌉\", lfloor: \"⌊\", rfloor: \"⌋\", lang: \"〈\", rang: \"〉\", loz: \"◊\", spades: \"♠\", clubs: \"♣\", hearts: \"♥\", diams: \"♦\" },\n\t\t\t    ot = /^[\\da-fA-F]+$/,\n\t\t\t    ht = /^\\d+$/;V.j_oTag = new q(\"<tag\", !1), V.j_cTag = new q(\"</tag\", !1), V.j_expr = new q(\"<tag>...</tag>\", !0, !0), C.jsxName = new k(\"jsxName\"), C.jsxText = new k(\"jsxText\", { beforeExpr: !0 }), C.jsxTagStart = new k(\"jsxTagStart\", { startsExpr: !0 }), C.jsxTagEnd = new k(\"jsxTagEnd\"), C.jsxTagStart.updateContext = function () {\n\t\t\t\tthis.state.context.push(V.j_expr), this.state.context.push(V.j_oTag), this.state.exprAllowed = !1;\n\t\t\t}, C.jsxTagEnd.updateContext = function (t) {\n\t\t\t\tvar e = this.state.context.pop();e === V.j_oTag && t === C.slash || e === V.j_cTag ? (this.state.context.pop(), this.state.exprAllowed = this.curContext() === V.j_expr) : this.state.exprAllowed = !0;\n\t\t\t};var pt = function pt(t) {\n\t\t\t\treturn function (t) {\n\t\t\t\t\tfunction e() {\n\t\t\t\t\t\treturn g(this, e), P(this, t.apply(this, arguments));\n\t\t\t\t\t}return w(e, t), e.prototype.jsxReadToken = function () {\n\t\t\t\t\t\tfor (var t = \"\", e = this.state.pos;;) {\n\t\t\t\t\t\t\tthis.state.pos >= this.input.length && this.raise(this.state.start, \"Unterminated JSX contents\");var s = this.input.charCodeAt(this.state.pos);switch (s) {case 60:case 123:\n\t\t\t\t\t\t\t\t\treturn this.state.pos === this.state.start ? 60 === s && this.state.exprAllowed ? (++this.state.pos, this.finishToken(C.jsxTagStart)) : this.getTokenFromCode(s) : (t += this.input.slice(e, this.state.pos), this.finishToken(C.jsxText, t));case 38:\n\t\t\t\t\t\t\t\t\tt += this.input.slice(e, this.state.pos), t += this.jsxReadEntity(), e = this.state.pos;break;default:\n\t\t\t\t\t\t\t\t\to(s) ? (t += this.input.slice(e, this.state.pos), t += this.jsxReadNewLine(!0), e = this.state.pos) : ++this.state.pos;}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, e.prototype.jsxReadNewLine = function (t) {\n\t\t\t\t\t\tvar e = this.input.charCodeAt(this.state.pos),\n\t\t\t\t\t\t    s = void 0;return ++this.state.pos, 13 === e && 10 === this.input.charCodeAt(this.state.pos) ? (++this.state.pos, s = t ? \"\\n\" : \"\\r\\n\") : s = String.fromCharCode(e), ++this.state.curLine, this.state.lineStart = this.state.pos, s;\n\t\t\t\t\t}, e.prototype.jsxReadString = function (t) {\n\t\t\t\t\t\tfor (var e = \"\", s = ++this.state.pos;;) {\n\t\t\t\t\t\t\tthis.state.pos >= this.input.length && this.raise(this.state.start, \"Unterminated string constant\");var i = this.input.charCodeAt(this.state.pos);if (i === t) break;38 === i ? (e += this.input.slice(s, this.state.pos), e += this.jsxReadEntity(), s = this.state.pos) : o(i) ? (e += this.input.slice(s, this.state.pos), e += this.jsxReadNewLine(!1), s = this.state.pos) : ++this.state.pos;\n\t\t\t\t\t\t}return e += this.input.slice(s, this.state.pos++), this.finishToken(C.string, e);\n\t\t\t\t\t}, e.prototype.jsxReadEntity = function () {\n\t\t\t\t\t\tfor (var t = \"\", e = 0, s = void 0, i = this.input[this.state.pos], r = ++this.state.pos; this.state.pos < this.input.length && e++ < 10;) {\n\t\t\t\t\t\t\tif (\";\" === (i = this.input[this.state.pos++])) {\n\t\t\t\t\t\t\t\t\"#\" === t[0] ? \"x\" === t[1] ? (t = t.substr(2), ot.test(t) && (s = String.fromCodePoint(parseInt(t, 16)))) : (t = t.substr(1), ht.test(t) && (s = String.fromCodePoint(parseInt(t, 10)))) : s = nt[t];break;\n\t\t\t\t\t\t\t}t += i;\n\t\t\t\t\t\t}return s || (this.state.pos = r, \"&\");\n\t\t\t\t\t}, e.prototype.jsxReadWord = function () {\n\t\t\t\t\t\tvar t = void 0,\n\t\t\t\t\t\t    e = this.state.pos;do {\n\t\t\t\t\t\t\tt = this.input.charCodeAt(++this.state.pos);\n\t\t\t\t\t\t} while (n(t) || 45 === t);return this.finishToken(C.jsxName, this.input.slice(e, this.state.pos));\n\t\t\t\t\t}, e.prototype.jsxParseIdentifier = function () {\n\t\t\t\t\t\tvar t = this.startNode();return this.match(C.jsxName) ? t.name = this.state.value : this.state.type.keyword ? t.name = this.state.type.keyword : this.unexpected(), this.next(), this.finishNode(t, \"JSXIdentifier\");\n\t\t\t\t\t}, e.prototype.jsxParseNamespacedName = function () {\n\t\t\t\t\t\tvar t = this.state.start,\n\t\t\t\t\t\t    e = this.state.startLoc,\n\t\t\t\t\t\t    s = this.jsxParseIdentifier();if (!this.eat(C.colon)) return s;var i = this.startNodeAt(t, e);return i.namespace = s, i.name = this.jsxParseIdentifier(), this.finishNode(i, \"JSXNamespacedName\");\n\t\t\t\t\t}, e.prototype.jsxParseElementName = function () {\n\t\t\t\t\t\tfor (var t = this.state.start, e = this.state.startLoc, s = this.jsxParseNamespacedName(); this.eat(C.dot);) {\n\t\t\t\t\t\t\tvar i = this.startNodeAt(t, e);i.object = s, i.property = this.jsxParseIdentifier(), s = this.finishNode(i, \"JSXMemberExpression\");\n\t\t\t\t\t\t}return s;\n\t\t\t\t\t}, e.prototype.jsxParseAttributeValue = function () {\n\t\t\t\t\t\tvar t = void 0;switch (this.state.type) {case C.braceL:\n\t\t\t\t\t\t\t\tif (\"JSXEmptyExpression\" === (t = this.jsxParseExpressionContainer()).expression.type) throw this.raise(t.start, \"JSX attributes must only be assigned a non-empty expression\");return t;case C.jsxTagStart:case C.string:\n\t\t\t\t\t\t\t\treturn this.parseExprAtom();default:\n\t\t\t\t\t\t\t\tthrow this.raise(this.state.start, \"JSX value should be either an expression or a quoted JSX text\");}\n\t\t\t\t\t}, e.prototype.jsxParseEmptyExpression = function () {\n\t\t\t\t\t\tvar t = this.startNodeAt(this.state.lastTokEnd, this.state.lastTokEndLoc);return this.finishNodeAt(t, \"JSXEmptyExpression\", this.state.start, this.state.startLoc);\n\t\t\t\t\t}, e.prototype.jsxParseSpreadChild = function () {\n\t\t\t\t\t\tvar t = this.startNode();return this.expect(C.braceL), this.expect(C.ellipsis), t.expression = this.parseExpression(), this.expect(C.braceR), this.finishNode(t, \"JSXSpreadChild\");\n\t\t\t\t\t}, e.prototype.jsxParseExpressionContainer = function () {\n\t\t\t\t\t\tvar t = this.startNode();return this.next(), this.match(C.braceR) ? t.expression = this.jsxParseEmptyExpression() : t.expression = this.parseExpression(), this.expect(C.braceR), this.finishNode(t, \"JSXExpressionContainer\");\n\t\t\t\t\t}, e.prototype.jsxParseAttribute = function () {\n\t\t\t\t\t\tvar t = this.startNode();return this.eat(C.braceL) ? (this.expect(C.ellipsis), t.argument = this.parseMaybeAssign(), this.expect(C.braceR), this.finishNode(t, \"JSXSpreadAttribute\")) : (t.name = this.jsxParseNamespacedName(), t.value = this.eat(C.eq) ? this.jsxParseAttributeValue() : null, this.finishNode(t, \"JSXAttribute\"));\n\t\t\t\t\t}, e.prototype.jsxParseOpeningElementAt = function (t, e) {\n\t\t\t\t\t\tvar s = this.startNodeAt(t, e);for (s.attributes = [], s.name = this.jsxParseElementName(); !this.match(C.slash) && !this.match(C.jsxTagEnd);) {\n\t\t\t\t\t\t\ts.attributes.push(this.jsxParseAttribute());\n\t\t\t\t\t\t}return s.selfClosing = this.eat(C.slash), this.expect(C.jsxTagEnd), this.finishNode(s, \"JSXOpeningElement\");\n\t\t\t\t\t}, e.prototype.jsxParseClosingElementAt = function (t, e) {\n\t\t\t\t\t\tvar s = this.startNodeAt(t, e);return s.name = this.jsxParseElementName(), this.expect(C.jsxTagEnd), this.finishNode(s, \"JSXClosingElement\");\n\t\t\t\t\t}, e.prototype.jsxParseElementAt = function (t, e) {\n\t\t\t\t\t\tvar s = this.startNodeAt(t, e),\n\t\t\t\t\t\t    i = [],\n\t\t\t\t\t\t    r = this.jsxParseOpeningElementAt(t, e),\n\t\t\t\t\t\t    a = null;if (!r.selfClosing) {\n\t\t\t\t\t\t\tt: for (;;) {\n\t\t\t\t\t\t\t\tswitch (this.state.type) {case C.jsxTagStart:\n\t\t\t\t\t\t\t\t\t\tif (t = this.state.start, e = this.state.startLoc, this.next(), this.eat(C.slash)) {\n\t\t\t\t\t\t\t\t\t\t\ta = this.jsxParseClosingElementAt(t, e);break t;\n\t\t\t\t\t\t\t\t\t\t}i.push(this.jsxParseElementAt(t, e));break;case C.jsxText:\n\t\t\t\t\t\t\t\t\t\ti.push(this.parseExprAtom());break;case C.braceL:\n\t\t\t\t\t\t\t\t\t\tthis.lookahead().type === C.ellipsis ? i.push(this.jsxParseSpreadChild()) : i.push(this.jsxParseExpressionContainer());break;default:\n\t\t\t\t\t\t\t\t\t\tthrow this.unexpected();}\n\t\t\t\t\t\t\t}f(a.name) !== f(r.name) && this.raise(a.start, \"Expected corresponding JSX closing tag for <\" + f(r.name) + \">\");\n\t\t\t\t\t\t}return s.openingElement = r, s.closingElement = a, s.children = i, this.match(C.relational) && \"<\" === this.state.value && this.raise(this.state.start, \"Adjacent JSX elements must be wrapped in an enclosing tag\"), this.finishNode(s, \"JSXElement\");\n\t\t\t\t\t}, e.prototype.jsxParseElement = function () {\n\t\t\t\t\t\tvar t = this.state.start,\n\t\t\t\t\t\t    e = this.state.startLoc;return this.next(), this.jsxParseElementAt(t, e);\n\t\t\t\t\t}, e.prototype.parseExprAtom = function (e) {\n\t\t\t\t\t\treturn this.match(C.jsxText) ? this.parseLiteral(this.state.value, \"JSXText\") : this.match(C.jsxTagStart) ? this.jsxParseElement() : t.prototype.parseExprAtom.call(this, e);\n\t\t\t\t\t}, e.prototype.readToken = function (e) {\n\t\t\t\t\t\tif (this.state.inPropertyName) return t.prototype.readToken.call(this, e);var s = this.curContext();if (s === V.j_expr) return this.jsxReadToken();if (s === V.j_oTag || s === V.j_cTag) {\n\t\t\t\t\t\t\tif (a(e)) return this.jsxReadWord();if (62 === e) return ++this.state.pos, this.finishToken(C.jsxTagEnd);if ((34 === e || 39 === e) && s === V.j_oTag) return this.jsxReadString(e);\n\t\t\t\t\t\t}return 60 === e && this.state.exprAllowed ? (++this.state.pos, this.finishToken(C.jsxTagStart)) : t.prototype.readToken.call(this, e);\n\t\t\t\t\t}, e.prototype.updateContext = function (e) {\n\t\t\t\t\t\tif (this.match(C.braceL)) {\n\t\t\t\t\t\t\tvar s = this.curContext();s === V.j_oTag ? this.state.context.push(V.braceExpression) : s === V.j_expr ? this.state.context.push(V.templateQuasi) : t.prototype.updateContext.call(this, e), this.state.exprAllowed = !0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (!this.match(C.slash) || e !== C.jsxTagStart) return t.prototype.updateContext.call(this, e);this.state.context.length -= 2, this.state.context.push(V.j_cTag), this.state.exprAllowed = !1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, e;\n\t\t\t\t}(t);\n\t\t\t};tt.estree = st, tt.flow = at, tt.jsx = pt;var ct = {};e.parse = m, e.parseExpression = y, e.tokTypes = C;\n\t\t});var createError = parserCreateError;var parserBabylon = parse;module.exports = parserBabylon;\n\t});\n\n\tvar parserBabylon = unwrapExports(parserBabylon_1);\n\n\treturn parserBabylon;\n}();\n"
  },
  {
    "path": "website/static/lib/parser-flow.js",
    "content": "var flow = (function () {\nfunction createError$1(t,r){const e=new SyntaxError(t+\" (\"+r.start.line+\":\"+r.start.column+\")\");return e.loc=r,e}function includeShebang$1(t,r){if(!t.startsWith(\"#!\"))return;const e=t.indexOf(\"\\n\"),n={type:\"Line\",value:t.slice(2,e),range:[0,e],loc:{source:null,start:{line:1,column:0},end:{line:1,column:e}}};r.comments=[n].concat(r.comments);}function createCommonjsModule(t,r){return r={exports:{}},t(r,r.exports),r.exports}function parse(t){\"use strict\";const r=flow_parser.parse(t,{esproposal_class_instance_fields:!0,esproposal_class_static_fields:!0,esproposal_export_star_as:!0});if(r.errors.length>0){const t=r.errors[0].loc;throw createError(r.errors[0].message,{start:{line:t.start.line,column:t.start.column+1},end:{line:t.end.line,column:t.end.column+1}})}return includeShebang(t,r),r}var parserCreateError=createError$1; var parserIncludeShebang=includeShebang$1; var flow_parser=createCommonjsModule(function(t,r){!function(t){\"use strict\";function e(t,r){throw[0,t,r]}function n(t,r){function n(r){e(Gd.Undefined_recursive_module,t);}function a(t,r,e){if(\"number\"==typeof t)switch(t){case 0:r[e]={fun:n};break;case 1:r[e]=[ls,n];break;default:r[e]=[];}else switch(t[0]){case 0:r[e]=[0];for(var u=1;u<t[1].length;u++)a(t[1][u],r[e],u);break;default:r[e]=t[1];}}var u=[];return a(r,u,0),u[0]}function a(t,r){if(typeof r===Pk)return t.fun=r,0;if(r.fun)return t.fun=r.fun,0;for(var e=r.length;e--;)t[e]=r[e];return 0}function u(t,r,e){if(\"number\"==typeof t)switch(t){case 0:r.fun=e;break;case 1:default:a(r,e);}else switch(t[0]){case 0:for(var n=1;n<t[1].length;n++)u(t[1][n],r[n],e[n]);}return 0}function i(t,r){var e=t.length,n=e+r.length-1,a=new Array(n);a[0]=0;for(var u=1,i=1;u<e;u++)a[u]=t[u];for(;u<n;u++,i++)a[u]=r[i];return a}function f(t,r,e,n,a){if(n<=r)for(u=1;u<=a;u++)e[n+u]=t[r+u];else for(var u=a;u>=1;u--)e[n+u]=t[r+u];return 0}function c(t,r,e){var n=new Array(e+1);n[0]=0;for(var a=1,u=r+1;a<=e;a++,u++)n[a]=t[u];return n}function s(t,r,e){for(var n=new Array(e),a=0;a<e;a++)n[a]=t[r+a];return n}function o(t,r,e){var n=String.fromCharCode;if(0==r&&e<=4096&&e==t.length)return n.apply(null,t);for(var a=mb;0<e;r+=Nu,e-=Nu)a+=n.apply(null,s(t,r,Math.min(e,Nu)));return a}function v(r){if(t.Uint8Array)e=new t.Uint8Array(r.l);else var e=new Array(r.l);for(var n=r.c,a=n.length,u=0;u<a;u++)e[u]=n.charCodeAt(u);for(a=r.l;u<a;u++)e[u]=0;return r.c=e,r.t=4,e}function l(t,r,e,n,a){if(0==a)return 0;if(0==n&&(a>=e.l||2==e.t&&a>=e.c.length))e.c=4==t.t?o(t.c,r,a):0==r&&t.c.length==a?t.c:t.c.substr(r,a),e.t=e.c.length==e.l?0:2;else if(2==e.t&&n==e.c.length)e.c+=4==t.t?o(t.c,r,a):0==r&&t.c.length==a?t.c:t.c.substr(r,a),e.t=e.c.length==e.l?0:2;else{4!=e.t&&v(e);var u=t.c,i=e.c;if(4==t.t)if(n<=r)for(c=0;c<a;c++)i[n+c]=u[r+c];else for(c=a-1;c>=0;c--)i[n+c]=u[r+c];else{for(var f=Math.min(a,u.length-r),c=0;c<f;c++)i[n+c]=u.charCodeAt(r+c);for(;c<a;c++)i[n+c]=0;}}return 0}function b(t,r){if(r.repeat)return r.repeat(t);var e=mb,n=0;if(0==t)return e;for(;;){if(1&t&&(e+=r),0==(t>>=1))return e;r+=r,9==++n&&r.slice(0,1);}}function k(t){2==t.t?t.c+=b(t.l-t.c.length,\"\\0\"):t.c=o(t.c,0,t.c.length),t.t=0;}function p(t){if(t.length<24){for(var r=0;r<t.length;r++)if(t.charCodeAt(r)>$b)return!1;return!0}return!/[^\\x00-\\x7f]/.test(t)}function h(t){for(var r,e,n,a,u=mb,i=mb,f=0,c=t.length;f<c;f++){if((e=t.charCodeAt(f))<Zn){for(var s=f+1;s<c&&(e=t.charCodeAt(s))<Zn;s++);if(s-f>Hn?(i.substr(0,1),u+=i,i=mb,u+=t.slice(f,s)):i+=t.slice(f,s),s==c)break;f=s;}a=1,++f<c&&(-64&(n=t.charCodeAt(f)))==Zn&&(r=n+(e<<6),e<Jl?(a=r-12416)<Zn&&(a=1):(a=2,++f<c&&(-64&(n=t.charCodeAt(f)))==Zn&&(r=n+(r<<6),e<Kp?((a=r-925824)<Mc||a>=55295&&a<ml)&&(a=2):(a=3,++f<c&&(-64&(n=t.charCodeAt(f)))==Zn&&e<Mo&&((a=n-63447168+(r<<6))<rs||a>nl)&&(a=3))))),a<4?(f-=a,i+=\"�\"):i+=a>ki?String.fromCharCode(55232+(a>>10),Ji+(a&va)):String.fromCharCode(a),i.length>Nu&&(i.substr(0,1),u+=i,i=mb);}return u+i}function d(t){switch(t.t){case 9:return t.c;default:k(t);case 0:if(p(t.c))return t.t=9,t.c;t.t=8;case 8:return h(t.c)}}function m(t,r,e){this.t=t,this.c=r,this.l=e;}function y(t){return new m(0,t,t.length)}function w(t,r){e(t,y(r));}function g(t){w(Gd.Invalid_argument,t);}function T(){g(pu);}function _(t,r,e){if(e&=lh,4!=t.t){if(r==t.c.length)return t.c+=String.fromCharCode(e),r+1==t.l&&(t.t=0),0;v(t);}return t.c[r]=e,0}function S(t,r,e){return r>>>0>=t.l&&T(),_(t,r,e)}function A(t,r){for(var e=t.length,n=new Array(e+1),a=0;a<e;a++)n[a]=t[a];return n[a]=r,n}function E(t,r){if(t.fun)return E(t.fun,r);var e=t.length,n=r.length,a=e-n;return 0==a?t.apply(null,r):a<0?E(t.apply(null,s(r,0,e)),s(r,e,n-e)):function(e){return E(t,A(r,e))}}function x(){g(pu);}function I(t,r){return r>>>0>=t.length-1&&x(),t}function C(t){return isFinite(t)?Math.abs(t)>=2.2250738585072014e-308?0:0!=t?1:2:isNaN(t)?4:3}function N(t,r){var e=t[3]<<16,n=r[3]<<16;return e>n?1:e<n?-1:t[2]>r[2]?1:t[2]<r[2]?-1:t[1]>r[1]?1:t[1]<r[1]?-1:0}function L(t,r){return t<r?-1:t==r?0:1}function R(t,r){return 6&t.t&&k(t),6&r.t&&k(r),t.c<r.c?-1:t.c>r.c?1:0}function P(t,r,e){for(var n=[];;){if(!e||t!==r)if(t instanceof m){if(!(r instanceof m))return 1;if(t!==r&&0!=(i=R(t,r)))return i}else if(t instanceof Array&&t[0]===(0|t[0])){var a=t[0];if(a===Cn&&(a=0),a===Ql){t=t[1];continue}if(!(r instanceof Array&&r[0]===(0|r[0])))return 1;var u=r[0];if(u===Cn&&(u=0),u===Ql){r=r[1];continue}if(a!=u)return a<u?-1:1;switch(a){case 248:if(0!=(i=L(t[2],r[2])))return i;break;case 251:g(\"equal: abstract value\");case 255:var i=N(t,r);if(0!=i)return i;break;default:if(t.length!=r.length)return t.length<r.length?-1:1;t.length>1&&n.push(t,r,1);}}else{if(r instanceof m||r instanceof Array&&r[0]===(0|r[0]))return-1;if(\"number\"!=typeof t&&t&&t.compare)return t.compare(r,e);if(typeof t==Pk)g(\"equal: functional value\");else{if(t<r)return-1;if(t>r)return 1;if(t!=r){if(!e)return NaN;if(t==t)return 1;if(r==r)return-1}}}if(0==n.length)return 0;var f=n.pop();r=n.pop(),f+1<(t=n.pop()).length&&n.push(t,r,f+1),t=t[f],r=r[f];}}function O(t,r){return P(t,r,!0)}function U(t){return t<0&&g(\"Bytes.create\"),new m(t?2:9,mb,t)}function D(t,r){return+(0==P(t,r,!1))}function M(t,r,e,n){if(e>0)if(0==r&&(e>=t.l||2==t.t&&e>=t.c.length))0==n?(t.c=mb,t.t=2):(t.c=b(e,String.fromCharCode(n)),t.t=e==t.l?0:2);else for(4!=t.t&&v(t),e+=r;r<e;r++)t.c[r]=n;return 0}function F(t){w(Gd.Failure,t);}function X(t){return 0!=(6&t.t)&&k(t),t.c}function B(t){var r;if(t=X(t),r=+t,t.length>0&&r===r)return r;if(t=t.replace(/_/g,mb),r=+t,t.length>0&&r===r||/^[+-]?nan$/i.test(t))return r;var e=/^ *([+-]?)0x([0-9a-f]+)\\.?([0-9a-f]*)p([+-]?[0-9]+)/i.exec(t);if(e){var n=e[3].replace(/0+$/,mb),a=parseInt(e[1]+e[2]+n,16),u=(0|e[4])-4*n.length;return r=a*Math.pow(2,u)}return/^\\+?inf(inity)?$/i.test(t)?1/0:/^-inf(inity)?$/i.test(t)?-1/0:void F(\"float_of_string\")}function j(t){var r=(t=X(t)).length;r>31&&g(\"format_int: format too long\");for(var e={justify:Mb,signstyle:xl,filler:hd,alternate:!1,base:0,signedconv:!1,width:0,uppercase:!1,sign:1,prec:-1,conv:\"f\"},n=0;n<r;n++){var a=t.charAt(n);switch(a){case\"-\":e.justify=xl;break;case\"+\":case\" \":e.signstyle=a;break;case\"0\":e.filler=Nv;break;case\"#\":e.alternate=!0;break;case\"1\":case\"2\":case\"3\":case\"4\":case\"5\":case\"6\":case\"7\":case\"8\":case\"9\":for(e.width=0;(a=t.charCodeAt(n)-48)>=0&&a<=9;)e.width=10*e.width+a,n++;n--;break;case\".\":for(e.prec=0,n++;(a=t.charCodeAt(n)-48)>=0&&a<=9;)e.prec=10*e.prec+a,n++;n--;case\"d\":case\"i\":e.signedconv=!0;case\"u\":e.base=10;break;case\"x\":e.base=16;break;case\"X\":e.base=16,e.uppercase=!0;break;case\"o\":e.base=8;break;case\"e\":case\"f\":case\"g\":e.signedconv=!0,e.conv=a;break;case\"E\":case\"F\":case\"G\":e.signedconv=!0,e.uppercase=!0,e.conv=a.toLowerCase();}}return e}function G(t,r){t.uppercase&&(r=r.toUpperCase());var e=r.length;t.signedconv&&(t.sign<0||t.signstyle!=xl)&&e++,t.alternate&&(8==t.base&&(e+=1),16==t.base&&(e+=2));var n=mb;if(t.justify==Mb&&t.filler==hd)for(a=e;a<t.width;a++)n+=hd;if(t.signedconv&&(t.sign<0?n+=xl:t.signstyle!=xl&&(n+=t.signstyle)),t.alternate&&8==t.base&&(n+=Nv),t.alternate&&16==t.base&&(n+=eh),t.justify==Mb&&t.filler==Nv)for(a=e;a<t.width;a++)n+=Nv;if(n+=r,t.justify==xl)for(var a=e;a<t.width;a++)n+=hd;return y(n)}function q(t,r){var e,n=j(t),a=n.prec<0?6:n.prec;if((r<0||0==r&&1/r==-1/0)&&(n.sign=-1,r=-r),isNaN(r))e=ak,n.filler=hd;else if(isFinite(r))switch(n.conv){case\"e\":c=(e=r.toExponential(a)).length;e.charAt(c-3)==za&&(e=e.slice(0,c-1)+Nv+e.slice(c-1));break;case\"f\":e=r.toFixed(a);break;case\"g\":a=a||1;var u=(e=r.toExponential(a-1)).indexOf(za),i=+e.slice(u+1);if(i<-4||r>=1e21||r.toFixed(0).length>a){for(c=u-1;e.charAt(c)==Nv;)c--;e.charAt(c)==bi&&c--,c=(e=e.slice(0,c+1)+e.slice(u)).length,e.charAt(c-3)==za&&(e=e.slice(0,c-1)+Nv+e.slice(c-1));break}var f=a;if(i<0)f-=i+1,e=r.toFixed(f);else for(;(e=r.toFixed(f)).length>a+1;)f--;if(f){for(var c=e.length-1;e.charAt(c)==Nv;)c--;e.charAt(c)==bi&&c--,e=e.slice(0,c+1);}}else e=\"inf\",n.filler=hd;return G(n,e)}function Y(t,r){if(X(t)==hc)return y(mb+r);var e=j(t);r<0&&(e.signedconv?(e.sign=-1,r=-r):r>>>=0);var n=r.toString(e.base);if(e.prec>=0){e.filler=hd;var a=e.prec-n.length;a>0&&(n=b(a,Nv)+n);}return G(e,n)}function J(){return Jd++}function H(t,r){return+(P(t,r,!1)>=0)}function W(t,r){return r=Hd(r,-862048943),r=r<<15|r>>>17,r=Hd(r,461845907),t^=r,((t=t<<13|t>>>19)+(t<<2)|0)-430675100|0}function z(t,r){var e=r[1]|r[2]<<24;return t=W(t,(r[2]>>>8|r[3]<<16)^e)}function V(t){if(Wd)return Math.floor(Math.log2(t));var r=0;if(0==t)return-1/0;if(t>=1)for(;t>=2;)t/=2,r++;else for(;t<1;)t*=2,r--;return r}function $(t){if(!isFinite(t))return isNaN(t)?[lh,1,0,jo]:t>0?[lh,0,0,jo]:[lh,0,0,65520];var r=0==t&&1/t==-1/0?oh:t>=0?0:oh;r&&(t=-t);var e=V(t)+va;e<=0?(e=0,t/=Math.pow(2,-1026)):((t/=Math.pow(2,e-1027))<16&&(t*=2,e-=1),0==e&&(t/=2));var n=Math.pow(2,24),a=0|t,u=0|(t=(t-a)*n);return a=15&a|r|e<<4,[lh,0|(t=(t-u)*n),u,a]}function K(t,r){var e=$(r),n=e[1]|e[2]<<24,a=e[2]>>>8|e[3]<<16;return t=W(t,n),t=W(t,a)}function Q(t,r){var e,n,a=r.length;for(e=0;e+4<=a;e+=4)t=W(t,n=r[e]|r[e+1]<<8|r[e+2]<<16|r[e+3]<<24);switch(n=0,3&a){case 3:n=r[e+2]<<16;case 2:n|=r[e+1]<<8;case 1:t=W(t,n|=r[e]);}return t^=a}function Z(t,r){var e,n,a=r.length;for(e=0;e+4<=a;e+=4)t=W(t,n=r.charCodeAt(e)|r.charCodeAt(e+1)<<8|r.charCodeAt(e+2)<<16|r.charCodeAt(e+3)<<24);switch(n=0,3&a){case 3:n=r.charCodeAt(e+2)<<16;case 2:n|=r.charCodeAt(e+1)<<8;case 1:t=W(t,n|=r.charCodeAt(e));}return t^=a}function tt(t,r){switch(6&r.t){default:k(r);case 0:t=Z(t,r.c);break;case 2:t=Q(t,r.c);}return t}function rt(t){return t^=t>>>16,t=Hd(t,-2048144789),t^=t>>>13,t=Hd(t,-1028477387),t^=t>>>16}function et(t,r,e,n){var a,u,i,f,c,s,o,v,l;for(((f=r)<0||f>zd)&&(f=zd),c=t,s=e,a=[n],u=0,i=1;u<i&&c>0;)if((o=a[u++])instanceof Array&&o[0]===(0|o[0]))switch(o[0]){case 248:s=W(s,o[2]),c--;break;case 250:a[--u]=o[1];break;case 255:s=z(s,o),c--;break;default:for(s=W(s,o.length-1<<10|o[0]),v=1,l=o.length;v<l&&!(i>=f);v++)a[i++]=o[v];}else o instanceof m?(s=tt(s,o),c--):o===(0|o)?(s=W(s,o+o+1),c--):o===+o&&(s=K(s,o),c--);return(s=rt(s))&wp}function nt(t){return[t[3]>>8,t[3]&lh,t[2]>>16,t[2]>>8&lh,t[2]&lh,t[1]>>16,t[1]>>8&lh,t[1]&lh]}function at(t,r,e){function n(e){if(r--,!(t<0||r<0))if(e instanceof Array&&e[0]===(0|e[0]))switch(e[0]){case 248:t--,a=a*bv+e[2]|0;break;case 250:r++,n(e);break;case 255:t--,a=a*bv+e[1]+(e[2]<<24)|0;break;default:t--,a=19*a+e[0]|0;for(f=e.length-1;f>0;f--)n(e[f]);}else if(e instanceof m)switch(t--,6&e.t){default:k(e);case 0:for(var u=e.c,i=e.l,f=0;f<i;f++)a=19*a+u.charCodeAt(f)|0;break;case 2:for(var c=e.c,i=e.l,f=0;f<i;f++)a=19*a+c[f]|0;}else if(e===(0|e))t--,a=a*bv+e|0;else if(e===+e){t--;for(var s=nt($(e)),f=7;f>=0;f--)a=19*a+s[f]|0;}}var a=0;return n(e),a&wp}function ut(t){for(var r,e,n=mb,a=n,u=0,i=t.length;u<i;u++){if((r=t.charCodeAt(u))<Zn){for(var f=u+1;f<i&&(r=t.charCodeAt(f))<Zn;f++);if(f-u>Hn?(a.substr(0,1),n+=a,a=mb,n+=t.slice(u,f)):a+=t.slice(u,f),f==i)break;u=f;}r<Mc?(a+=String.fromCharCode(Io|r>>6),a+=String.fromCharCode(Zn|63&r)):r<Zu||r>=yc?a+=String.fromCharCode(Jl|r>>12,Zn|r>>6&63,Zn|63&r):r>=56319||u+1==i||(e=t.charCodeAt(u+1))<Ji||e>yc?a+=\"ï¿½\":(u++,r=(r<<10)+e-56613888,a+=String.fromCharCode(Kp|r>>18,Zn|r>>12&63,Zn|r>>6&63,Zn|63&r)),a.length>Nu&&(a.substr(0,1),n+=a,a=mb);}return n+a}function it(t){var r=9;return p(t)||(r=8,t=ut(t)),new m(r,t,t.length)}function ft(t,r,e){if(!isFinite(t))return it(isNaN(t)?ak:t>0?Bu:\"-infinity\");var n=0==t&&1/t==-1/0?1:t>=0?0:1;n&&(t=-t);var a=0;if(0==t);else if(t<1)for(;t<1&&a>-1022;)t*=2,a--;else for(;t>=2;)t/=2,a++;var u=a<0?mb:Mb,i=mb;if(n)i=xl;else switch(e){case 43:i=Mb;break;case 32:i=hd;}if(r>=0&&r<13){var f=Math.pow(2,4*r);t=Math.round(t*f)/f;}var c=t.toString(16);if(r>=0){var s=c.indexOf(bi);if(s<0)c+=bi+b(r,Nv);else{var o=s+1+r;c.length<o?c+=b(o-c.length,Nv):c=c.substr(0,o);}}return it(i+eh+c+\"p\"+u+a.toString(10))}function ct(t){return 0==(t[3]|t[2]|t[1])}function st(t){return[lh,t&On,t>>24&On,t>>31&ki]}function ot(t){for(var r=t.length,e=new Array(r),n=0;n<r;n++)e[n]=t[n];return e}function vt(t,r){var e=t[1]-r[1],n=t[2]-r[2]+(e>>24),a=t[3]-r[3]+(n>>24);return[lh,e&On,n&On,a&ki]}function lt(t,r){return t[3]>r[3]?1:t[3]<r[3]?-1:t[2]>r[2]?1:t[2]<r[2]?-1:t[1]>r[1]?1:t[1]<r[1]?-1:0}function bt(t){t[3]=t[3]<<1|t[2]>>23,t[2]=(t[2]<<1|t[1]>>23)&On,t[1]=t[1]<<1&On;}function kt(t){t[1]=(t[1]>>>1|t[2]<<23)&On,t[2]=(t[2]>>>1|t[3]<<23)&On,t[3]=t[3]>>>1;}function pt(t,r){for(var e=0,n=ot(t),a=ot(r),u=[lh,0,0,0];lt(n,a)>0;)e++,bt(a);for(;e>=0;)e--,bt(u),lt(n,a)>=0&&(u[1]++,n=vt(n,a)),kt(a);return[0,u,n]}function ht(t){return t[1]|t[2]<<24}function dt(t){return t[3]<<16<0}function mt(t){var r=-t[1],e=-t[2]+(r>>24),n=-t[3]+(e>>24);return[lh,r&On,e&On,n&ki]}function yt(t,r){var e=j(t);e.signedconv&&dt(r)&&(e.sign=-1,r=mt(r));var n=mb,a=st(e.base);do{var u=pt(r,a);r=u[1],n=\"0123456789abcdef\".charAt(ht(u[2]))+n;}while(!ct(r));if(e.prec>=0){e.filler=hd;var i=e.prec-n.length;i>0&&(n=b(i,Nv)+n);}return G(e,n)}function wt(t){return t.l}function gt(t,r){switch(6&t.t){default:if(r>=t.c.length)return 0;case 0:return t.c.charCodeAt(r);case 4:return t.c[r]}}function Tt(t,r){var e=t[1]+r[1],n=t[2]+r[2]+(e>>24),a=t[3]+r[3]+(n>>24);return[lh,e&On,n&On,a&ki]}function _t(t,r){var e=t[1]*r[1],n=(e*Vd|0)+t[2]*r[1]+t[1]*r[2],a=(n*Vd|0)+t[3]*r[1]+t[2]*r[2]+t[1]*r[3];return[lh,e&On,n&On,a&ki]}function St(t,r){return lt(t,r)<0}function At(t){var r=0,e=wt(t),n=10,a=e>0&&45==gt(t,0)?(r++,-1):1;if(r+1<e&&48==gt(t,r))switch(gt(t,r+1)){case 120:case 88:n=16,r+=2;break;case 111:case 79:n=8,r+=2;break;case 98:case 66:n=2,r+=2;}return[r,a,n]}function Et(t){return t>=48&&t<=57?t-48:t>=65&&t<=90?t-55:t>=97&&t<=xs?t-87:-1}function xt(t){var r=At(t),e=r[0],n=r[1],a=r[2],u=st(a),i=pt([lh,On,268435455,ki],u)[1],f=gt(t,e),c=Et(f);(c<0||c>=a)&&F(Ap);for(var s=st(c);;)if(e++,95!=(f=gt(t,e))){if((c=Et(f))<0||c>=a)break;St(i,s)&&F(Ap),c=st(c),St(s=Tt(_t(u,s),c),c)&&F(Ap);}return e!=wt(t)&&F(Ap),10==r[2]&&St([lh,0,0,oh],s)&&F(Ap),n<0&&(s=mt(s)),s}function It(t){return(t[3]<<16)*Math.pow(2,32)+t[2]*Math.pow(2,24)+t[1]}function Ct(t){var r=At(t),e=r[0],n=r[1],a=r[2],u=wt(t),i=e<u?gt(t,e):0,f=Et(i);(f<0||f>=a)&&F(Ap);var c=f;for(e++;e<u;e++)if(95!=(i=gt(t,e))){if((f=Et(i))<0||f>=a)break;(c=a*c+f)>-1>>>0&&F(Ap);}return e!=u&&F(Ap),c*=n,10==a&&(0|c)!=c&&F(Ap),0|c}function Nt(t){return s(t,1,t.length-1)}function Lt(t){return t.toString()}function Rt(t){for(var r={},e=1;e<t.length;e++){var n=t[e];r[n[1].toString()]=n[2];}return r}function Pt(t,r){return+(P(t,r,!1)<=0)}function Ot(t,r){return+(P(t,r,!1)<0)}function Ut(t){for(var r=0,e=t.length-1;e>=0;e--)r=[0,t[e],r];return r}function Dt(t,r){var t=t+1|0,e=new Array(t);e[0]=0;for(var n=1;n<t;n++)e[n]=r;return e}function Mt(t){return new m(4,t,t.length)}function Ft(t){return t.l}function Xt(t){w(Gd.Sys_error,t);}function Bt(t){if(t.opened||Xt(\"Cannot flush a closed channel\"),t.buffer==mb)return 0;if(t.output)switch(t.output.length){case 2:t.output(t,t.buffer);break;default:t.output(t.buffer);}return t.buffer=mb,0}function jt(t){return t<0&&g(\"String.create\"),new m(t?2:9,mb,t)}function Gt(){return(new Date).getTime()/Ub}function qt(){return Math.floor(Gt())}function Yt(t){this.data=t,this.inode=Kd++;var r=qt();this.atime=r,this.mtime=r,this.ctime=r;}function Jt(){this.content={},this.inode=Kd++;var t=qt();this.atime=t,this.mtime=t,this.ctime=t;}function Ht(t,r,e){void 0===Gd.fds&&(Gd.fds=new Array),e=e||{};var n={};return n.file=r,n.offset=e.append?wt(r.data):0,n.flags=e,Gd.fds[t]=n,Gd.fd_last_idx=t,t}function Wt(r){var e=t;if(e.process&&e.process.stdout&&e.process.stdout.write)e.process.stderr.write(r);else{10==r.charCodeAt(r.length-1)&&(r=r.substr(0,r.length-1));var n=e.console;n&&n.error&&n.error(r);}}function zt(r){var e=t;if(e.process&&e.process.stdout&&e.process.stdout.write)e.process.stdout.write(r);else{10==r.charCodeAt(r.length-1)&&(r=r.substr(0,r.length-1));var n=e.console;n&&n.log&&n.log(r);}}function Vt(t,r){var e=y(r),n=wt(e),a=wt(t.file.data),u=t.offset;if(u+n>=a){var i=jt(u+n);l(t.file.data,0,i,0,a),l(e,0,i,u,n),t.file.data=i;}return t.offset+=n,t.file.modified(),0}function $t(t){var r;switch(t){case 1:r=zt;break;case 2:r=Wt;break;default:r=Vt;}var e=Gd.fds[t];e.flags.rdonly&&Xt(ca+t+\" is readonly\");var n={file:e.file,offset:e.offset,fd:t,opened:!0,buffer:mb,output:r};return Qd[n.fd]=n,n}function Kt(){for(var t=0,r=0;r<Qd.length;r++)Qd[r]&&Qd[r].opened&&(t=[0,Qd[r],t]);return t}function Qt(t,r,e,n){t.opened||Xt(\"Cannot output to a closed channel\");var a;0==e&&wt(r)==n?a=r:l(r,e,a=jt(n),0,n);var u=a.toString(),i=u.lastIndexOf(\"\\n\");return i<0?t.buffer+=u:(t.buffer+=u.substr(0,i+1),Bt(t),t.buffer+=u.substr(i+1)),0}function Zt(t){throw t}function tr(){Zt(Gd.Division_by_zero);}function rr(t,r){return 0==r&&tr(),t%r}function er(t,r){return+(0!=P(t,r,!1))}function nr(t,r){return t[0]=r,0}function ar(t){return t instanceof Array?t[0]:t instanceof m?bd:Ub}function ur(t,r,e){Gd[t+1]=r,e&&(Gd[e]=r);}function ir(t,r){return Zd[X(t)]=r,0}function fr(t,r){return t===r?1:(6&t.t&&k(t),6&r.t&&k(r),t.c==r.c?1:0)}function cr(t,r){return r>>>0>=t.l&&T(),gt(t,r)}function sr(t,r){return 1-fr(t,r)}function or(t,r,e){if(e&=lh,4!=t.t){if(r==t.c.length)return t.c+=String.fromCharCode(e),r+1==t.l&&(t.t=0),0;v(t);}return t.c[r]=e,0}function vr(){Zt(Gd.Not_found);}function lr(r){var e=t,n=r.toString();if(e.process&&e.process.env&&void 0!=e.process.env[n])return it(e.process.env[n]);vr();}function br(){return[0,new Date^4294967295*Math.random()]}function kr(t){for(var r=1;t&&t.joo_tramp;)t=t.joo_tramp.apply(null,t.joo_args),r++;return t}function pr(t,r){return{joo_tramp:t,joo_args:r}}function hr(t){return t}function dr(t){return Zd[t]}function mr(r){return r instanceof Array?r:t.RangeError&&r instanceof t.RangeError&&r.message&&r.message.match(/maximum call stack/i)?hr(Gd.Stack_overflow):t.InternalError&&r instanceof t.InternalError&&r.message&&r.message.match(/too much recursion/i)?hr(Gd.Stack_overflow):r instanceof t.Error?[0,dr(Mk),r]:[0,Gd.Failure,it(String(r))]}function yr(t,r){return 1==t.length?t(r):E(t,[r])}function wr(t,r,e){return 2==t.length?t(r,e):E(t,[r,e])}function gr(t,r,e,n){return 3==t.length?t(r,e,n):E(t,[r,e,n])}function Tr(t,r,e,n,a){return 4==t.length?t(r,e,n,a):E(t,[r,e,n,a])}function _r(t,r,e,n,a,u){return 5==t.length?t(r,e,n,a,u):E(t,[r,e,n,a,u])}function Sr(t){if(\"number\"==typeof t)return 0;switch(t[0]){case 0:return[0,Sr(t[1])];case 1:return[1,Sr(t[1])];case 2:return[2,Sr(t[1])];case 3:return[3,Sr(t[1])];case 4:return[4,Sr(t[1])];case 5:return[5,Sr(t[1])];case 6:return[6,Sr(t[1])];case 7:return[7,Sr(t[1])];case 8:return[8,t[1],Sr(t[2])];case 9:var r=t[1];return[9,r,r,Sr(t[3])];case 10:return[10,Sr(t[1])];case 11:return[11,Sr(t[1])];case 12:return[12,Sr(t[1])];case 13:return[13,Sr(t[1])];default:return[14,Sr(t[1])]}}function Ar(t,r){if(\"number\"==typeof t)return r;switch(t[0]){case 0:return[0,Ar(t[1],r)];case 1:return[1,Ar(t[1],r)];case 2:return[2,Ar(t[1],r)];case 3:return[3,Ar(t[1],r)];case 4:return[4,Ar(t[1],r)];case 5:return[5,Ar(t[1],r)];case 6:return[6,Ar(t[1],r)];case 7:return[7,Ar(t[1],r)];case 8:return[8,t[1],Ar(t[2],r)];case 9:var e=t[2];return[9,t[1],e,Ar(t[3],r)];case 10:return[10,Ar(t[1],r)];case 11:return[11,Ar(t[1],r)];case 12:return[12,Ar(t[1],r)];case 13:return[13,Ar(t[1],r)];default:return[14,Ar(t[1],r)]}}function Er(t,r){if(\"number\"==typeof t)return r;switch(t[0]){case 0:return[0,Er(t[1],r)];case 1:return[1,Er(t[1],r)];case 2:return[2,t[1],Er(t[2],r)];case 3:return[3,t[1],Er(t[2],r)];case 4:var e=t[3],n=t[2];return[4,t[1],n,e,Er(t[4],r)];case 5:var a=t[3],u=t[2];return[5,t[1],u,a,Er(t[4],r)];case 6:var i=t[3],f=t[2];return[6,t[1],f,i,Er(t[4],r)];case 7:var c=t[3],s=t[2];return[7,t[1],s,c,Er(t[4],r)];case 8:var o=t[3],v=t[2];return[8,t[1],v,o,Er(t[4],r)];case 9:return[9,Er(t[1],r)];case 10:return[10,Er(t[1],r)];case 11:return[11,t[1],Er(t[2],r)];case 12:return[12,t[1],Er(t[2],r)];case 13:var l=t[2];return[13,t[1],l,Er(t[3],r)];case 14:var b=t[2];return[14,t[1],b,Er(t[3],r)];case 15:return[15,Er(t[1],r)];case 16:return[16,Er(t[1],r)];case 17:return[17,t[1],Er(t[2],r)];case 18:return[18,t[1],Er(t[2],r)];case 19:return[19,Er(t[1],r)];case 20:var k=t[2];return[20,t[1],k,Er(t[3],r)];case 21:return[21,t[1],Er(t[2],r)];case 22:return[22,Er(t[1],r)];case 23:return[23,t[1],Er(t[2],r)];default:var p=t[2];return[24,t[1],p,Er(t[3],r)]}}function xr(t){throw[0,rm,t]}function Ir(t){throw[0,em,t]}function Cr(t,r){return H(t,r)?t:r}function Nr(t){return 0<=t?t:0|-t}function Lr(t,r){var e=wt(t),n=wt(r),a=U(e+n|0);return l(t,0,a,0,e),l(r,0,a,e,n),a}function Rr(t,r){return t?[0,t[1],Rr(t[2],r)]:r}function Pr(t){for(var r=0,e=t;;){if(!e)return r;var r=r+1|0,e=e[2];}}function Or(t){return t?t[1]:xr(_m)}function Ur(t,r){for(var e=t,n=r;;){if(!e)return n;var a=[0,e[1],n],e=e[2],n=a;}}function Dr(t){return Ur(t,0)}function Mr(t,r){if(r){var e=r[2];return[0,yr(t,r[1]),Mr(t,e)]}return 0}function Fr(t,r){for(n=r;;){if(!n)return 0;var e=n[2];yr(t,n[1]);var n=e;}}function Xr(t,r,e){for(var n=r,a=e;;){if(!a)return n;var u=a[2],n=wr(t,n,a[1]),a=u;}}function Br(t,r){for(var e=t,n=r;;){if(0===e)return n;if(!n)throw[0,im,Tm];var e=e-1|0,n=n[2];}}function jr(t){return 0<=t&&!(lh<t)?t:Ir(Nm)}function Gr(t){if(40<=t){if(92===t)return Sm;r=$b<=t?0:1;}else if(32<=t){if(39<=t)return Am;r=1;}else if(14<=t)r=0;else switch(t){case 8:return Em;case 9:return xm;case 10:return Im;case 13:return Cm;default:var r=0;}if(r){var e=U(1);return or(e,0,t),e}var n=U(4);return or(n,0,92),or(n,1,48+(t/Tb|0)|0),or(n,2,48+((t/10|0)%10|0)|0),or(n,3,48+(t%10|0)|0),n}function qr(t,r){var e=U(t);return Yd(e,0,t,r),e}function Yr(t,r,e){if(0<=r&&0<=e&&!((Ft(t)-e|0)<r)){var n=U(e);return qd(t,r,n,0,e),n}return Ir(Pm)}function Jr(t,r,e){return Yr(t,r,e)}function Hr(t,r,e,n,a){return 0<=a&&0<=r&&!((Ft(t)-a|0)<r)&&0<=n&&!((Ft(e)-a|0)<n)?qd(t,r,e,n,a):Ir(Rm)}function Wr(t,r,e,n,a){return 0<=a&&0<=r&&!((wt(t)-a|0)<r)&&0<=n&&!((Ft(e)-a|0)<n)?l(t,r,e,n,a):Ir(Lm)}function zr(t,r){return qr(t,r)}function Vr(t,r,e){return Yr(t,r,e)}function $r(t,r){var e=wt(r)-1|0;if(!(e<0))for(a=0;;){yr(t,gt(r,a));var n=a+1|0;if(e===a)break;var a=n;}return 0}function Kr(t,r,e,n){for(a=e;;){if(r<=a)throw nm;if(gt(t,a)===n)return a;var a=a+1|0;}}function Qr(t,r,e){var n=wt(t);if(0<=r&&!(n<r))try{Kr(t,n,r,e);return 1}catch(r){if((r=mr(r))===nm)return 0;throw r}return Ir(Om)}function Zr(t,r){if(0===t)return[0];if(0<=t){var e=Dt(t,yr(r,0)),n=t-1|0;if(!(n<1))for(u=1;;){e[u+1]=yr(r,u);var a=u+1|0;if(n===u)break;var u=a;}return e}return Ir(Dm)}function te(t,r,e,n,a){return 0<=a&&0<=r&&!((t.length-1-a|0)<r)&&0<=n&&!((e.length-1-a|0)<n)?f(t,r,e,n,a):Ir(Um)}function re(t){if(t)for(var r=0,e=t,n=t[2],a=t[1];;)if(e)var r=r+1|0,e=e[2];else for(var u=Dt(r,a),i=1,f=n;;){if(!f)return u;var c=f[2];u[i+1]=f[1];var i=i+1|0,f=c;}return[0]}function ee(t){function r(t){return t?t[4]:0}function e(t,r,e){var n=t?t[4]:0,a=e?e[4]:0;return[0,t,r,e,a<=n?n+1|0:a+1|0]}function n(t,n,a){var u=t?t[4]:0,i=a?a[4]:0;if((i+2|0)<u){if(t){var f=t[3],c=t[2],s=t[1];if(r(f)<=r(s))return e(s,c,e(f,n,a));if(f){var o=f[2],v=f[1],l=e(f[3],n,a);return e(e(s,c,v),o,l)}return Ir(jm)}return Ir(Gm)}if((u+2|0)<i){if(a){var b=a[3],k=a[2],p=a[1];if(r(p)<=r(b))return e(e(t,n,p),k,b);if(p){var h=p[2],d=p[1],m=e(p[3],k,b);return e(e(t,n,d),h,m)}return Ir(qm)}return Ir(Ym)}return[0,t,n,a,i<=u?u+1|0:i+1|0]}function a(r,e){if(e){var u=e[3],i=e[2],f=e[1],c=wr(t[1],r,i);if(0===c)return e;if(0<=c){var s=a(r,u);return u===s?e:n(f,i,s)}var o=a(r,f);return f===o?e:n(o,i,u)}return[0,0,r,0,1]}function u(t){return[0,0,t,0,1]}function i(t,r){if(r){var e=r[3],a=r[2];return n(i(t,r[1]),a,e)}return u(t)}function f(t,r){if(r){var e=r[2];return n(r[1],e,f(t,r[3]))}return u(t)}function c(t,r,a){if(t){if(a){var u=a[4],s=t[4],o=a[3],v=a[2],l=a[1],b=t[3],k=t[2],p=t[1];return(u+2|0)<s?n(p,k,c(b,r,a)):(s+2|0)<u?n(c(t,r,l),v,o):e(t,r,a)}return f(r,t)}return i(r,a)}function s(t){for(e=t;;){if(e){var r=e[1];if(r){var e=r;continue}return e[2]}throw nm}}function o(t){for(n=t;;){if(n){var r=n[3],e=n[2];if(r){var n=r;continue}return e}throw nm}}function v(t){if(t){var r=t[1];if(r){var e=t[3],a=t[2];return n(v(r),a,e)}return t[3]}return Ir(Mm)}function l(t,r){if(t){if(r){var e=v(r);return c(t,s(r),e)}return t}return r}function b(r,e){if(e){var n=e[3],a=e[2],u=e[1],i=wr(t[1],r,a);if(0===i)return[0,u,1,n];if(0<=i){var f=b(r,n),s=f[3],o=f[2];return[0,c(u,a,f[1]),o,s]}var v=b(r,u),l=v[2];return[0,v[1],l,c(v[3],a,n)]}return Fm}function k(t){return t?0:1}function p(r,e){for(f=e;;){if(!f)return 0;var n=f[3],a=f[1],u=wr(t[1],r,f[2]),i=0===u?1:0;if(i)return i;var f=0<=u?n:a;}}function h(r,e){if(e){var a=e[3],u=e[2],i=e[1],f=wr(t[1],r,u);if(0===f){if(i){if(a){var c=v(a);return n(i,s(a),c)}return i}return a}if(0<=f){var o=h(r,a);return a===o?e:n(i,u,o)}var l=h(r,i);return i===l?e:n(l,u,a)}return 0}function d(t,r){if(t){if(r){var e=r[4],n=r[2],u=t[4],i=t[2],f=r[3],s=r[1],o=t[3],v=t[1];if(e<=u){if(1===e)return a(n,t);var l=b(i,r),k=l[1],p=d(o,l[3]);return c(d(v,k),i,p)}if(1===u)return a(i,r);var h=b(n,t),m=h[1],y=d(h[3],f);return c(d(m,s),n,y)}return t}return r}function m(t,r){if(t){if(r){var e=t[3],n=t[2],a=t[1],u=b(n,r),i=u[1];if(0===u[2]){var f=m(e,u[3]);return l(m(a,i),f)}var s=m(e,u[3]);return c(m(a,i),n,s)}return 0}return 0}function y(t,r){if(t){if(r){var e=t[3],n=t[2],a=t[1],u=b(n,r),i=u[1];if(0===u[2]){var f=y(e,u[3]);return c(y(a,i),n,f)}var s=y(e,u[3]);return l(y(a,i),s)}return t}return 0}function w(t,r){for(var e=t,n=r;;){if(!e)return n;var a=[0,e[2],e[3],n],e=e[1],n=a;}}function g(r,e){for(var n=w(e,0),a=w(r,0),u=n;;){if(a){if(u){var i=u[3],f=u[2],c=a[3],s=a[2],o=wr(t[1],a[1],u[1]);if(0===o){var v=w(f,i),a=w(s,c),u=v;continue}return o}return 1}return u?-1:0}}function T(t,r){return 0===g(t,r)?1:0}function _(r,e){for(var n=r,a=e;;){if(n){if(a){var u=a[3],i=a[1],f=n[3],c=n[2],s=n[1],o=wr(t[1],c,a[2]);if(0===o){var v=_(s,i);if(v){var n=f,a=u;continue}return v}if(0<=o){var l=_([0,0,c,f,0],u);if(l){n=s;continue}return l}var b=_([0,s,c,0,0],i);if(b){n=f;continue}return b}return 0}return 1}}function S(t,r){for(a=r;;){if(!a)return 0;var e=a[3],n=a[2];S(t,a[1]),yr(t,n);var a=e;}}function A(t,r,e){for(var n=r,a=e;;){if(!n)return a;var u=n[3],i=wr(t,n[2],A(t,n[1],a)),n=u,a=i;}}function E(t,r){for(i=r;;){if(i){var e=i[3],n=i[1],a=yr(t,i[2]);if(a){var u=E(t,n);if(u){var i=e;continue}f=u;}else var f=a;return f}return 1}}function x(t,r){for(i=r;;){if(i){var e=i[3],n=i[1],a=yr(t,i[2]);if(a)f=a;else{var u=x(t,n);if(!u){var i=e;continue}var f=u;}return f}return 0}}function I(t,r){if(r){var e=r[3],n=r[2],a=r[1],u=I(t,a),i=yr(t,n),f=I(t,e);return i?a===u&&e===f?r:c(u,n,f):l(u,f)}return 0}function C(t,r){if(r){var e=r[2],n=r[3],a=C(t,r[1]),u=a[2],i=a[1],f=yr(t,e),s=C(t,n),o=s[2],v=s[1];if(f){var b=l(u,o);return[0,c(i,e,v),b]}var k=c(u,e,o);return[0,l(i,v),k]}return Xm}function N(t){if(t){var r=t[1],e=N(t[3]);return(N(r)+1|0)+e|0}return 0}function L(t,r){for(var e=t,n=r;;){if(!n)return e;var a=n[2],u=n[1],e=[0,a,L(e,n[3])],n=u;}}function R(t){return L(0,t)}function P(r,e){for(f=e;;){if(!f)throw nm;var n=f[2],a=f[3],u=f[1],i=wr(t[1],r,n);if(0===i)return n;var f=0<=i?a:u;}}function O(r,e){if(e){var n=e[3],u=e[2],i=e[1],f=O(r,i),v=yr(r,u),l=O(r,n);if(i===f&&u===v&&n===l)return e;if(0===f)k=0;else var b=o(f),k=0<=wr(t[1],b,u)?1:0;if(!k){if(0===l)h=0;else var p=s(l),h=0<=wr(t[1],u,p)?1:0;if(!h)return c(f,v,l)}return d(f,a(v,l))}return 0}return[0,0,k,p,a,u,h,d,m,y,g,T,_,S,O,A,E,x,I,C,N,R,s,o,s,b,P,function(r){if(r){var n=r[2],i=r[1];if(n){var f=n[2],c=n[1];if(f){var s=f[2],o=f[1];if(s){var v=s[2],l=s[1];if(v){if(v[2]){var b=t[1],k=function(t,r){if(2===t){if(r){var e=r[2];if(e){var n=e[1],a=r[1],u=wr(b,a,n);return 0===u?[0,a,0]:0<=u?[0,n,[0,a,0]]:[0,a,[0,n,0]]}}}else if(3===t&&r){var i=r[2];if(i){var f=i[2];if(f){var c=f[1],s=i[1],o=r[1],v=wr(b,o,s);if(0===v){var l=wr(b,s,c);return 0===l?[0,s,0]:0<=l?[0,c,[0,s,0]]:[0,s,[0,c,0]]}if(0<=v){var k=wr(b,o,c);if(0===k)return[0,s,[0,o,0]];if(0<=k){var h=wr(b,s,c);return 0===h?[0,s,[0,o,0]]:0<=h?[0,c,[0,s,[0,o,0]]]:[0,s,[0,c,[0,o,0]]]}return[0,s,[0,o,[0,c,0]]]}var d=wr(b,s,c);if(0===d)return[0,o,[0,s,0]];if(0<=d){var m=wr(b,o,c);return 0===m?[0,o,[0,s,0]]:0<=m?[0,c,[0,o,[0,s,0]]]:[0,o,[0,c,[0,s,0]]]}return[0,o,[0,s,[0,c,0]]]}}}for(var y=t>>1,w=Br(y,r),g=p(y,r),T=p(t-y|0,w),_=0;;){if(g){if(T){var S=T[2],A=T[1],E=g[2],x=g[1],I=wr(b,x,A);if(0===I){var g=E,T=S,_=[0,x,_];continue}if(0<I){var g=E,_=[0,x,_];continue}var T=S,_=[0,A,_];continue}return Ur(g,_)}return Ur(T,_)}},p=function(t,r){if(2===t){if(r){var e=r[2];if(e){var n=e[1],a=r[1],u=wr(b,a,n);return 0===u?[0,a,0]:0<u?[0,a,[0,n,0]]:[0,n,[0,a,0]]}}}else if(3===t&&r){var i=r[2];if(i){var f=i[2];if(f){var c=f[1],s=i[1],o=r[1],v=wr(b,o,s);if(0===v){var l=wr(b,s,c);return 0===l?[0,s,0]:0<l?[0,s,[0,c,0]]:[0,c,[0,s,0]]}if(0<v){var p=wr(b,s,c);if(0===p)return[0,o,[0,s,0]];if(0<p)return[0,o,[0,s,[0,c,0]]];var h=wr(b,o,c);return 0===h?[0,o,[0,s,0]]:0<h?[0,o,[0,c,[0,s,0]]]:[0,c,[0,o,[0,s,0]]]}var d=wr(b,o,c);if(0===d)return[0,s,[0,o,0]];if(0<d)return[0,s,[0,o,[0,c,0]]];var m=wr(b,s,c);return 0===m?[0,s,[0,o,0]]:0<m?[0,s,[0,c,[0,o,0]]]:[0,c,[0,s,[0,o,0]]]}}}for(var y=t>>1,w=Br(y,r),g=k(y,r),T=k(t-y|0,w),_=0;;){if(g){if(T){var S=T[2],A=T[1],E=g[2],x=g[1],I=wr(b,x,A);if(0===I){var g=E,T=S,_=[0,x,_];continue}if(0<=I){var T=S,_=[0,A,_];continue}var g=E,_=[0,x,_];continue}return Ur(g,_)}return Ur(T,_)}},h=Pr(r),d=2<=h?k(h,r):r,m=function(t,r){if(!(3<t>>>0))switch(t){case 0:return[0,0,r];case 1:if(r)return[0,[0,0,r[1],0,1],r[2]];break;case 2:if(r){var n=r[2];if(n)return[0,[0,[0,0,r[1],0,1],n[1],0,2],n[2]]}break;default:if(r){var a=r[2];if(a){var u=a[2];if(u)return[0,[0,[0,0,r[1],0,1],a[1],[0,0,u[1],0,1],2],u[2]]}}}var i=t/2|0,f=m(i,r),c=f[2],s=f[1];if(c){var o=c[1],v=m((t-i|0)-1|0,c[2]),l=v[2];return[0,e(s,o,v[1]),l]}throw[0,im,Bm]};return m(Pr(d),d)[1]}return a(v[1],a(l,a(o,a(c,u(i)))))}return a(l,a(o,a(c,u(i))))}return a(o,a(c,u(i)))}return a(c,u(i))}return u(i)}return 0}]}function ne(t){throw Y$}function ae(t){var r=t[1];t[1]=ne;try{var e=yr(r,0);return t[1]=e,nr(t,Ql),e}catch(r){throw r=mr(r),t[1]=function(t){throw r},r}}function ue(t){var r=1<=t?t:1,e=q$<r?q$:r,n=U(e);return[0,n,0,e,n]}function ie(t){return Jr(t[1],0,t[2])}function fe(t,r){for(var e=[0,t[3]];;){if(!(e[1]<(t[2]+r|0))){q$<e[1]&&((t[2]+r|0)<=q$?e[1]=q$:xr(Wm));var n=U(e[1]);return Hr(t[1],0,n,0,t[2]),t[1]=n,t[3]=e[1],0}e[1]=2*e[1]|0;}}function ce(t,r){var e=t[2];return t[3]<=e&&fe(t,1),or(t[1],e,r),t[2]=e+1|0,0}function se(t,r){var e=wt(r),n=t[2]+e|0;return t[3]<n&&fe(t,e),Wr(r,0,t[1],t[2],e),t[2]=n,0}function oe(t){return[0,0,U(t)]}function ve(t,r){var e=Ft(t[2]),n=t[1]+r|0,a=e<n?1:0;if(a){var u=U(Cr(2*e|0,n));Hr(t[2],0,u,0,e),t[2]=u;i=0;}else var i=a;return i}function le(t,r){return ve(t,1),S(t[2],t[1],r),t[1]=t[1]+1|0,0}function be(t,r){var e=wt(r);return ve(t,e),Wr(r,0,t[2],t[1],e),t[1]=t[1]+e|0,0}function ke(t){return Jr(t[2],0,t[1])}function pe(t,r){for(y=r;;){if(\"number\"==typeof y)return 0;switch(y[0]){case 0:var e=y[1];be(t,zm);y=e;continue;case 1:var n=y[1];be(t,Vm);y=n;continue;case 2:var a=y[1];be(t,$m);y=a;continue;case 3:var u=y[1];be(t,Km);y=u;continue;case 4:var i=y[1];be(t,Qm);y=i;continue;case 5:var f=y[1];be(t,Zm);y=f;continue;case 6:var c=y[1];be(t,ty);y=c;continue;case 7:var s=y[1];be(t,ry);y=s;continue;case 8:var o=y[2],v=y[1];be(t,ey),pe(t,v),be(t,ny);y=o;continue;case 9:var l=y[3],b=y[1];be(t,ay),pe(t,b),be(t,uy);y=l;continue;case 10:var k=y[1];be(t,iy);y=k;continue;case 11:var p=y[1];be(t,fy);y=p;continue;case 12:var h=y[1];be(t,cy);y=h;continue;case 13:var d=y[1];be(t,sy);y=d;continue;default:var m=y[1];be(t,oy);var y=m;continue}}}function he(t){if(\"number\"==typeof t)return 0;switch(t[0]){case 0:return[0,he(t[1])];case 1:return[1,he(t[1])];case 2:return[2,he(t[1])];case 3:return[3,he(t[1])];case 4:return[4,he(t[1])];case 5:return[5,he(t[1])];case 6:return[6,he(t[1])];case 7:return[7,he(t[1])];case 8:return[8,t[1],he(t[2])];case 9:return[9,t[2],t[1],he(t[3])];case 10:return[10,he(t[1])];case 11:return[11,he(t[1])];case 12:return[12,he(t[1])];case 13:return[13,he(t[1])];default:return[14,he(t[1])]}}function de(t){if(\"number\"==typeof t)return[0,function(t){return 0},function(t){return 0},function(t){return 0},function(t){return 0}];switch(t[0]){case 0:var r=de(t[1]),e=r[4],n=r[3],a=r[2],u=r[1];return[0,function(t){return yr(u,0),0},function(t){return yr(a,0),0},n,e];case 1:var i=de(t[1]),f=i[4],c=i[3],s=i[2],o=i[1];return[0,function(t){return yr(o,0),0},function(t){return yr(s,0),0},c,f];case 2:var v=de(t[1]),l=v[4],b=v[3],k=v[2],p=v[1];return[0,function(t){return yr(p,0),0},function(t){return yr(k,0),0},b,l];case 3:var h=de(t[1]),d=h[4],m=h[3],y=h[2],w=h[1];return[0,function(t){return yr(w,0),0},function(t){return yr(y,0),0},m,d];case 4:var g=de(t[1]),T=g[4],_=g[3],S=g[2],A=g[1];return[0,function(t){return yr(A,0),0},function(t){return yr(S,0),0},_,T];case 5:var E=de(t[1]),x=E[4],I=E[3],C=E[2],N=E[1];return[0,function(t){return yr(N,0),0},function(t){return yr(C,0),0},I,x];case 6:var L=de(t[1]),R=L[4],P=L[3],O=L[2],U=L[1];return[0,function(t){return yr(U,0),0},function(t){return yr(O,0),0},P,R];case 7:var D=de(t[1]),M=D[4],F=D[3],X=D[2],B=D[1];return[0,function(t){return yr(B,0),0},function(t){return yr(X,0),0},F,M];case 8:var j=de(t[2]),G=j[4],q=j[3],Y=j[2],J=j[1];return[0,function(t){return yr(J,0),0},function(t){return yr(Y,0),0},q,G];case 9:var H=t[2],W=t[1],z=de(t[3]),V=z[4],$=z[3],K=z[2],Q=z[1],Z=de(me(he(W),H)),tt=Z[4],rt=Z[3],et=Z[2],nt=Z[1];return[0,function(t){return yr(Q,0),yr(nt,0),0},function(t){return yr(et,0),yr(K,0),0},function(t){return yr($,0),yr(rt,0),0},function(t){return yr(tt,0),yr(V,0),0}];case 10:var at=de(t[1]),ut=at[4],it=at[3],ft=at[2],ct=at[1];return[0,function(t){return yr(ct,0),0},function(t){return yr(ft,0),0},it,ut];case 11:var st=de(t[1]),ot=st[4],vt=st[3],lt=st[2],bt=st[1];return[0,function(t){return yr(bt,0),0},function(t){return yr(lt,0),0},vt,ot];case 12:var kt=de(t[1]),pt=kt[4],ht=kt[3],dt=kt[2],mt=kt[1];return[0,function(t){return yr(mt,0),0},function(t){return yr(dt,0),0},ht,pt];case 13:var yt=de(t[1]),wt=yt[4],gt=yt[3],Tt=yt[2],_t=yt[1];return[0,function(t){return yr(_t,0),0},function(t){return yr(Tt,0),0},function(t){return yr(gt,0),0},function(t){return yr(wt,0),0}];default:var St=de(t[1]),At=St[4],Et=St[3],xt=St[2],It=St[1];return[0,function(t){return yr(It,0),0},function(t){return yr(xt,0),0},function(t){return yr(Et,0),0},function(t){return yr(At,0),0}]}}function me(t,r){if(\"number\"==typeof t){if(\"number\"==typeof r)return 0;switch(r[0]){case 10:n=0;break;case 11:n=1;break;case 12:n=2;break;case 13:n=3;break;case 14:n=4;break;case 8:n=5;break;case 9:n=6;break;default:throw[0,im,vy]}}else switch(t[0]){case 0:var e=t[1];if(\"number\"==typeof r)a=1;else switch(r[0]){case 0:return[0,me(e,r[1])];case 8:var n=5,a=0;break;case 9:var n=6,a=0;break;case 10:var n=0,a=0;break;case 11:var n=1,a=0;break;case 12:var n=2,a=0;break;case 13:var n=3,a=0;break;case 14:var n=4,a=0;break;default:a=1;}if(a)n=7;break;case 1:var u=t[1];if(\"number\"==typeof r)i=1;else switch(r[0]){case 1:return[1,me(u,r[1])];case 8:var n=5,i=0;break;case 9:var n=6,i=0;break;case 10:var n=0,i=0;break;case 11:var n=1,i=0;break;case 12:var n=2,i=0;break;case 13:var n=3,i=0;break;case 14:var n=4,i=0;break;default:i=1;}if(i)n=7;break;case 2:var f=t[1];if(\"number\"==typeof r)c=1;else switch(r[0]){case 2:return[2,me(f,r[1])];case 8:var n=5,c=0;break;case 9:var n=6,c=0;break;case 10:var n=0,c=0;break;case 11:var n=1,c=0;break;case 12:var n=2,c=0;break;case 13:var n=3,c=0;break;case 14:var n=4,c=0;break;default:c=1;}if(c)n=7;break;case 3:var s=t[1];if(\"number\"==typeof r)o=1;else switch(r[0]){case 3:return[3,me(s,r[1])];case 8:var n=5,o=0;break;case 9:var n=6,o=0;break;case 10:var n=0,o=0;break;case 11:var n=1,o=0;break;case 12:var n=2,o=0;break;case 13:var n=3,o=0;break;case 14:var n=4,o=0;break;default:o=1;}if(o)n=7;break;case 4:var v=t[1];if(\"number\"==typeof r)l=1;else switch(r[0]){case 4:return[4,me(v,r[1])];case 8:var n=5,l=0;break;case 9:var n=6,l=0;break;case 10:var n=0,l=0;break;case 11:var n=1,l=0;break;case 12:var n=2,l=0;break;case 13:var n=3,l=0;break;case 14:var n=4,l=0;break;default:l=1;}if(l)n=7;break;case 5:var b=t[1];if(\"number\"==typeof r)k=1;else switch(r[0]){case 5:return[5,me(b,r[1])];case 8:var n=5,k=0;break;case 9:var n=6,k=0;break;case 10:var n=0,k=0;break;case 11:var n=1,k=0;break;case 12:var n=2,k=0;break;case 13:var n=3,k=0;break;case 14:var n=4,k=0;break;default:k=1;}if(k)n=7;break;case 6:var p=t[1];if(\"number\"==typeof r)h=1;else switch(r[0]){case 6:return[6,me(p,r[1])];case 8:var n=5,h=0;break;case 9:var n=6,h=0;break;case 10:var n=0,h=0;break;case 11:var n=1,h=0;break;case 12:var n=2,h=0;break;case 13:var n=3,h=0;break;case 14:var n=4,h=0;break;default:h=1;}if(h)n=7;break;case 7:var d=t[1];if(\"number\"==typeof r)m=1;else switch(r[0]){case 7:return[7,me(d,r[1])];case 8:var n=5,m=0;break;case 9:var n=6,m=0;break;case 10:var n=0,m=0;break;case 11:var n=1,m=0;break;case 12:var n=2,m=0;break;case 13:var n=3,m=0;break;case 14:var n=4,m=0;break;default:m=1;}if(m)n=7;break;case 8:var y=t[2],w=t[1];if(\"number\"==typeof r)_=1;else switch(r[0]){case 8:var g=r[1],T=me(y,r[2]);return[8,me(w,g),T];case 10:var n=0,_=0;break;case 11:var n=1,_=0;break;case 12:var n=2,_=0;break;case 13:var n=3,_=0;break;case 14:var n=4,_=0;break;default:_=1;}if(_)throw[0,im,Ty];break;case 9:var S=t[3],A=t[2],E=t[1];if(\"number\"==typeof r)x=1;else switch(r[0]){case 8:var n=5,x=0;break;case 9:var I=r[3],C=r[2],N=r[1],L=de(me(he(A),N)),R=L[4];return yr(L[2],0),yr(R,0),[9,E,C,me(S,I)];case 10:var n=0,x=0;break;case 11:var n=1,x=0;break;case 12:var n=2,x=0;break;case 13:var n=3,x=0;break;case 14:var n=4,x=0;break;default:x=1;}if(x)throw[0,im,Sy];break;case 10:var P=t[1];if(\"number\"!=typeof r&&10===r[0])return[10,me(P,r[1])];throw[0,im,ly];case 11:var O=t[1];if(\"number\"==typeof r)U=1;else switch(r[0]){case 10:var n=0,U=0;break;case 11:return[11,me(O,r[1])];default:U=1;}if(U)throw[0,im,ky];break;case 12:var D=t[1];if(\"number\"==typeof r)M=1;else switch(r[0]){case 10:var n=0,M=0;break;case 11:var n=1,M=0;break;case 12:return[12,me(D,r[1])];default:M=1;}if(M)throw[0,im,hy];break;case 13:var F=t[1];if(\"number\"==typeof r)X=1;else switch(r[0]){case 10:var n=0,X=0;break;case 11:var n=1,X=0;break;case 12:var n=2,X=0;break;case 13:return[13,me(F,r[1])];default:X=1;}if(X)throw[0,im,my];break;default:var B=t[1];if(\"number\"==typeof r)j=1;else switch(r[0]){case 10:var n=0,j=0;break;case 11:var n=1,j=0;break;case 12:var n=2,j=0;break;case 13:var n=3,j=0;break;case 14:return[14,me(B,r[1])];default:j=1;}if(j)throw[0,im,wy]}switch(n){case 0:throw[0,im,by];case 1:throw[0,im,py];case 2:throw[0,im,dy];case 3:throw[0,im,yy];case 4:throw[0,im,gy];case 5:throw[0,im,_y];case 6:throw[0,im,Ay];default:throw[0,im,Ey]}}function ye(t,r){if(\"number\"==typeof t)return[0,0,r];if(0===t[0])return[0,[0,t[1],t[2]],r];if(\"number\"!=typeof r&&2===r[0])return[0,[1,t[1]],r[1]];throw H$}function we(t,r,e){var n=ye(t,e);if(\"number\"==typeof r){if(0===r)return[0,n[1],0,n[2]];var a=n[2];if(\"number\"!=typeof a&&2===a[0])return[0,n[1],1,a[1]];throw H$}return[0,n[1],[0,r[1]],n[2]]}function ge(t,r,e){var n=Te(r,e);return[0,[23,t,n[1]],n[2]]}function Te(t,r){if(\"number\"==typeof t)return[0,0,r];switch(t[0]){case 0:if(\"number\"!=typeof r&&0===r[0]){var e=Te(t[1],r[1]);return[0,[0,e[1]],e[2]]}break;case 1:if(\"number\"!=typeof r&&0===r[0]){var n=Te(t[1],r[1]);return[0,[1,n[1]],n[2]]}break;case 2:var a=t[2],u=ye(t[1],r),i=u[2],f=u[1];if(\"number\"!=typeof i&&1===i[0]){var c=Te(a,i[1]);return[0,[2,f,c[1]],c[2]]}throw H$;case 3:var s=t[2],o=ye(t[1],r),v=o[2],l=o[1];if(\"number\"!=typeof v&&1===v[0]){var b=Te(s,v[1]);return[0,[3,l,b[1]],b[2]]}throw H$;case 4:var k=t[4],p=t[1],h=we(t[2],t[3],r),d=h[3],m=h[2],y=h[1];if(\"number\"!=typeof d&&2===d[0]){var w=Te(k,d[1]);return[0,[4,p,y,m,w[1]],w[2]]}throw H$;case 5:var g=t[4],T=t[1],_=we(t[2],t[3],r),S=_[3],A=_[2],E=_[1];if(\"number\"!=typeof S&&3===S[0]){var x=Te(g,S[1]);return[0,[5,T,E,A,x[1]],x[2]]}throw H$;case 6:var I=t[4],C=t[1],N=we(t[2],t[3],r),L=N[3],R=N[2],P=N[1];if(\"number\"!=typeof L&&4===L[0]){var O=Te(I,L[1]);return[0,[6,C,P,R,O[1]],O[2]]}throw H$;case 7:var U=t[4],D=t[1],M=we(t[2],t[3],r),F=M[3],X=M[2],B=M[1];if(\"number\"!=typeof F&&5===F[0]){var j=Te(U,F[1]);return[0,[7,D,B,X,j[1]],j[2]]}throw H$;case 8:var G=t[4],q=t[1],Y=we(t[2],t[3],r),J=Y[3],H=Y[2],W=Y[1];if(\"number\"!=typeof J&&6===J[0]){var z=Te(G,J[1]);return[0,[8,q,W,H,z[1]],z[2]]}throw H$;case 9:if(\"number\"!=typeof r&&7===r[0]){var V=Te(t[1],r[1]);return[0,[9,V[1]],V[2]]}break;case 10:var $=Te(t[1],r);return[0,[10,$[1]],$[2]];case 11:var K=t[1],Q=Te(t[2],r);return[0,[11,K,Q[1]],Q[2]];case 12:var Z=t[1],tt=Te(t[2],r);return[0,[12,Z,tt[1]],tt[2]];case 13:if(\"number\"!=typeof r&&8===r[0]){var rt=r[1],et=r[2],nt=t[3],at=t[1];if(er([0,t[2]],[0,rt]))throw H$;var ut=Te(nt,et);return[0,[13,at,rt,ut[1]],ut[2]]}break;case 14:if(\"number\"!=typeof r&&9===r[0]){var it=r[1],ft=r[3],ct=t[3],st=t[2],ot=t[1],vt=[0,Sr(it)];if(er([0,Sr(st)],vt))throw H$;var lt=Te(ct,Sr(ft));return[0,[14,ot,it,lt[1]],lt[2]]}break;case 15:if(\"number\"!=typeof r&&10===r[0]){var bt=Te(t[1],r[1]);return[0,[15,bt[1]],bt[2]]}break;case 16:if(\"number\"!=typeof r&&11===r[0]){var kt=Te(t[1],r[1]);return[0,[16,kt[1]],kt[2]]}break;case 17:var pt=t[1],ht=Te(t[2],r);return[0,[17,pt,ht[1]],ht[2]];case 18:var dt=t[2],mt=t[1];if(0===mt[0]){var yt=mt[1],wt=yt[2],gt=Te(yt[1],r),Tt=gt[1],_t=Te(dt,gt[2]);return[0,[18,[0,[0,Tt,wt]],_t[1]],_t[2]]}var St=mt[1],At=St[2],Et=Te(St[1],r),xt=Et[1],It=Te(dt,Et[2]);return[0,[18,[1,[0,xt,At]],It[1]],It[2]];case 19:if(\"number\"!=typeof r&&13===r[0]){var Ct=Te(t[1],r[1]);return[0,[19,Ct[1]],Ct[2]]}break;case 20:if(\"number\"!=typeof r&&1===r[0]){var Nt=t[2],Lt=t[1],Rt=Te(t[3],r[1]);return[0,[20,Lt,Nt,Rt[1]],Rt[2]]}break;case 21:if(\"number\"!=typeof r&&2===r[0]){var Pt=t[1],Ot=Te(t[2],r[1]);return[0,[21,Pt,Ot[1]],Ot[2]]}break;case 23:var Ut=t[2],Dt=t[1];if(\"number\"==typeof Dt)switch(Dt){case 0:case 1:case 2:return ge(Dt,Ut,r);case 3:if(\"number\"!=typeof r&&14===r[0]){var Mt=Te(Ut,r[1]);return[0,[23,3,Mt[1]],Mt[2]]}throw H$;default:return ge(Dt,Ut,r)}else switch(Dt[0]){case 0:case 1:case 2:case 3:case 4:case 5:case 6:return ge(Dt,Ut,r);case 7:return ge([7,Dt[1],Dt[2]],Ut,r);case 8:var Ft=Dt[1],Xt=_e(Dt[2],Ut,r),Bt=Xt[2];return[0,[23,[8,Ft,Xt[1]],Bt[1]],Bt[2]];case 9:default:return ge(Dt,Ut,r)}}throw H$}function _e(t,r,e){if(\"number\"==typeof t)return[0,0,Te(r,e)];switch(t[0]){case 0:if(\"number\"!=typeof e&&0===e[0]){var n=_e(t[1],r,e[1]);return[0,[0,n[1]],n[2]]}break;case 1:if(\"number\"!=typeof e&&1===e[0]){var a=_e(t[1],r,e[1]);return[0,[1,a[1]],a[2]]}break;case 2:if(\"number\"!=typeof e&&2===e[0]){var u=_e(t[1],r,e[1]);return[0,[2,u[1]],u[2]]}break;case 3:if(\"number\"!=typeof e&&3===e[0]){var i=_e(t[1],r,e[1]);return[0,[3,i[1]],i[2]]}break;case 4:if(\"number\"!=typeof e&&4===e[0]){var f=_e(t[1],r,e[1]);return[0,[4,f[1]],f[2]]}break;case 5:if(\"number\"!=typeof e&&5===e[0]){var c=_e(t[1],r,e[1]);return[0,[5,c[1]],c[2]]}break;case 6:if(\"number\"!=typeof e&&6===e[0]){var s=_e(t[1],r,e[1]);return[0,[6,s[1]],s[2]]}break;case 7:if(\"number\"!=typeof e&&7===e[0]){var o=_e(t[1],r,e[1]);return[0,[7,o[1]],o[2]]}break;case 8:if(\"number\"!=typeof e&&8===e[0]){var v=e[1],l=e[2],b=t[2];if(er([0,t[1]],[0,v]))throw H$;var k=_e(b,r,l);return[0,[8,v,k[1]],k[2]]}break;case 9:if(\"number\"!=typeof e&&9===e[0]){var p=e[2],h=e[1],d=e[3],m=t[3],y=t[2],w=t[1],g=[0,Sr(h)];if(er([0,Sr(w)],g))throw H$;var T=[0,Sr(p)];if(er([0,Sr(y)],T))throw H$;var _=de(me(he(h),p)),S=_[4];yr(_[2],0),yr(S,0);var A=_e(Sr(m),r,d),E=A[2];return[0,[9,h,p,he(A[1])],E]}break;case 10:if(\"number\"!=typeof e&&10===e[0]){var x=_e(t[1],r,e[1]);return[0,[10,x[1]],x[2]]}break;case 11:if(\"number\"!=typeof e&&11===e[0]){var I=_e(t[1],r,e[1]);return[0,[11,I[1]],I[2]]}break;case 13:if(\"number\"!=typeof e&&13===e[0]){var C=_e(t[1],r,e[1]);return[0,[13,C[1]],C[2]]}break;case 14:if(\"number\"!=typeof e&&14===e[0]){var N=_e(t[1],r,e[1]);return[0,[14,N[1]],N[2]]}}throw H$}function Se(t,r,e){var n=wt(e),a=0<=r?t:0,u=Nr(r);if(u<=n)return e;var i=qr(u,2===a?48:32);switch(a){case 0:Wr(e,0,i,0,n);break;case 1:Wr(e,0,i,u-n|0,n);break;default:if(0<n){if(43===cr(e,0))c=1;else if(45===cr(e,0))c=1;else if(32===cr(e,0))c=1;else var f=0,c=0;if(c){S(i,0,cr(e,0)),Wr(e,1,i,1+(u-n|0)|0,n-1|0);f=1;}}else f=0;if(!f){if(1<n)if(48===cr(e,0)){if(Pf===cr(e,1))o=1;else if(88===cr(e,1))o=1;else var s=0,o=0;if(o){S(i,1,cr(e,1)),Wr(e,2,i,2+(u-n|0)|0,n-2|0);s=1;}}else s=0;else s=0;s||Wr(e,0,i,u-n|0,n);}}return i}function Ae(t,r){var e=Nr(t),n=wt(r),a=cr(r,0);if(58<=a)i=71<=a?5<(a+al|0)>>>0?1:0:65<=a?0:1;else{if(32===a)f=1;else if(43<=a)switch(a+na|0){case 5:if(n<(e+2|0)&&1<n&&!(Pf===cr(r,1)?0:88===cr(r,1)?0:1)){var u=qr(e+2|0,48);return S(u,1,cr(r,1)),Wr(r,2,u,4+(e-n|0)|0,n-2|0),u}var i=0,f=0;break;case 0:case 2:f=1;break;case 1:case 3:case 4:var i=1,f=0;break;default:var i=0,f=0;}else var i=1,f=0;if(f){if(n<(e+1|0)){var c=qr(e+1|0,48);return S(c,0,a),Wr(r,1,c,2+(e-n|0)|0,n-1|0),c}i=1;}}if(!i&&n<e){var s=qr(e,48);return Wr(r,0,s,e-n|0,n),s}return r}function Ee(t){for(a=0;;){if(wt(t)<=a)u=0;else{var r=gt(t,a);if(32<=r){var e=r+kp|0;if(58<e>>>0)if(93<=e)n=0;else n=1;else if(56<(e-1|0)>>>0)n=0;else var n=1;if(n){var a=a+1|0;continue}}else;var u=1;}if(u){var i=[0,0],f=Ft(t)-1|0;if(!(f<0))for(p=0;;){var c=gt(t,p);if(32<=c){var s=c+kp|0;if(58<s>>>0)if(93<=s)var o=0,v=0;else v=1;else if(56<(s-1|0)>>>0)var o=1,v=0;else v=1;if(v)var b=1,o=2;}else o=11<=c?13===c?1:0:8<=c?1:0;switch(o){case 0:b=4;break;case 1:b=2;}i[1]=i[1]+b|0;var k=p+1|0;if(f===p)break;var p=k;}if(i[1]===Ft(t)){var h=Ft(t),d=U(h);qd(t,0,d,0,h);S=d;}else{var m=U(i[1]);i[1]=0;var y=Ft(t)-1|0;if(!(y<0))for(_=0;;){var w=gt(t,_);if(35<=w)g=92===w?1:$b<=w?0:2;else if(32<=w)g=34<=w?1:2;else if(14<=w)g=0;else switch(w){case 8:or(m,i[1],92),or(m,++i[1],98);g=3;break;case 9:or(m,i[1],92),or(m,++i[1],Ad);g=3;break;case 10:or(m,i[1],92),or(m,++i[1],ol);g=3;break;case 13:or(m,i[1],92),or(m,++i[1],rf);g=3;break;default:var g=0;}switch(g){case 0:or(m,i[1],92),or(m,++i[1],48+(w/Tb|0)|0),or(m,++i[1],48+((w/10|0)%10|0)|0),or(m,++i[1],48+(w%10|0)|0);break;case 1:or(m,i[1],92),or(m,++i[1],w);break;case 2:or(m,i[1],w);}i[1]++;var T=_+1|0;if(y===_)break;var _=T;}S=m;}}else var S=t;var A=wt(S),E=qr(A+2|0,34);return l(S,0,E,1,A),E}}function xe(t,r){switch(t){case 0:e=Ew;break;case 1:e=xw;break;case 2:e=Iw;break;case 3:e=Cw;break;case 4:e=Nw;break;case 5:e=Lw;break;case 6:e=Rw;break;case 7:e=Pw;break;case 8:e=Ow;break;case 9:e=Uw;break;case 10:e=Dw;break;case 11:e=Mw;break;default:var e=Fw;}return Y(e,r)}function Ie(t,r){switch(t){case 0:e=tw;break;case 1:e=rw;break;case 2:e=ew;break;case 3:e=nw;break;case 4:e=aw;break;case 5:e=uw;break;case 6:e=iw;break;case 7:e=fw;break;case 8:e=cw;break;case 9:e=sw;break;case 10:e=ow;break;case 11:e=vw;break;default:var e=lw;}return Y(e,r)}function Ce(t,r){switch(t){case 0:e=jy;break;case 1:e=Gy;break;case 2:e=qy;break;case 3:e=Yy;break;case 4:e=Jy;break;case 5:e=Hy;break;case 6:e=Wy;break;case 7:e=zy;break;case 8:e=Vy;break;case 9:e=$y;break;case 10:e=Ky;break;case 11:e=Qy;break;default:var e=Zy;}return Y(e,r)}function Ne(t,r){switch(t){case 0:e=bw;break;case 1:e=kw;break;case 2:e=pw;break;case 3:e=hw;break;case 4:e=dw;break;case 5:e=mw;break;case 6:e=yw;break;case 7:e=ww;break;case 8:e=gw;break;case 9:e=Tw;break;case 10:e=_w;break;case 11:e=Sw;break;default:var e=Aw;}return yt(e,r)}function Le(t,r,e){if(16<=t){if(17<=t)switch(t+xb|0){case 2:a=0;break;case 0:case 3:var n=43,a=1;break;default:var n=32,a=1;}else a=0;if(!a)n=45;var u=ft(e,r,n);if(19<=t){var i=Ft(u);if(0===i)return u;var f=U(i),c=i-1|0;if(!(c<0))for(b=0;;){var s=gt(u,b);if(97<=s)if(xs<s)v=0;else var o=s-32|0,v=1;else v=0;if(!v)o=s;or(f,b,o);var l=b+1|0;if(c===b)break;var b=l;}return f}return u}if(15===t)d=By;else{var k=Nr(r);switch(t){case 15:p=70;break;case 0:case 1:case 2:p=cb;break;case 3:case 4:case 5:p=vu;break;case 6:case 7:case 8:p=69;break;case 9:case 10:case 11:p=ai;break;case 12:case 13:case 14:p=71;break;case 16:case 17:case 18:p=tv;break;default:var p=72;}var h=oe(16);switch(le(h,37),t){case 1:case 4:case 7:case 10:case 13:case 17:case 20:le(h,43);break;case 2:case 5:case 8:case 11:case 14:case 18:case 21:le(h,32);}le(h,46),be(h,y(mb+k)),le(h,p);var d=ke(h);}var m=q(d,e);if(15===t){var w=C(e),g=wt(m);if(3===w)return e<0?Fy:Xy;if(4<=w)return Dy;for(_=0;;){if(_===g)S=0;else{var T=cr(m,_)+Hs|0;if(!(23<T>>>0?55===T?1:0:21<(T-1|0)>>>0?1:0)){var _=_+1|0;continue}var S=1;}return S?m:Lr(m,My)}}return m}function Re(t,r,e,n,a,u,i,f){if(\"number\"==typeof a){if(\"number\"==typeof u)return 0===u?function(a){return Fe(t,r,[4,e,wr(i,f,a)],n)}:function(a,u){return Fe(t,r,[4,e,Ae(a,wr(i,f,u))],n)};var c=u[1];return function(a){return Fe(t,r,[4,e,Ae(c,wr(i,f,a))],n)}}if(0===a[0]){var s=a[2],o=a[1];if(\"number\"==typeof u)return 0===u?function(a){return Fe(t,r,[4,e,Se(o,s,wr(i,f,a))],n)}:function(a,u){return Fe(t,r,[4,e,Se(o,s,Ae(a,wr(i,f,u)))],n)};var v=u[1];return function(a){return Fe(t,r,[4,e,Se(o,s,Ae(v,wr(i,f,a)))],n)}}var l=a[1];if(\"number\"==typeof u)return 0===u?function(a,u){return Fe(t,r,[4,e,Se(l,a,wr(i,f,u))],n)}:function(a,u,c){return Fe(t,r,[4,e,Se(l,a,Ae(u,wr(i,f,c)))],n)};var b=u[1];return function(a,u){return Fe(t,r,[4,e,Se(l,a,Ae(b,wr(i,f,u)))],n)}}function Pe(t,r,e,n,a,u){if(\"number\"==typeof a)return function(a){return Fe(t,r,[4,e,yr(u,a)],n)};if(0===a[0]){var i=a[2],f=a[1];return function(a){return Fe(t,r,[4,e,Se(f,i,yr(u,a))],n)}}var c=a[1];return function(a,i){return Fe(t,r,[4,e,Se(c,a,yr(u,i))],n)}}function Oe(t,r,e,n,a){for(var u=r,i=n,f=a;;){if(\"number\"==typeof f)return wr(u,e,i);switch(f[0]){case 0:var c=f[1];return function(t){return Fe(u,e,[5,i,t],c)};case 1:var s=f[1];return function(t){var r=Gr(t),n=wt(r),a=qr(n+2|0,39);return l(r,0,a,1,n),Fe(u,e,[4,i,a],s)};case 2:var o=f[2],v=f[1];return Pe(u,e,i,o,v,function(t){return t});case 3:return Pe(u,e,i,f[2],f[1],Ee);case 4:return Re(u,e,i,f[4],f[2],f[3],xe,f[1]);case 5:return Re(u,e,i,f[4],f[2],f[3],Ie,f[1]);case 6:return Re(u,e,i,f[4],f[2],f[3],Ce,f[1]);case 7:return Re(u,e,i,f[4],f[2],f[3],Ne,f[1]);case 8:var b=f[4],k=f[3],p=f[2],h=f[1];if(\"number\"==typeof p){if(\"number\"==typeof k)return 0===k?function(t){return Fe(u,e,[4,i,Le(h,J$,t)],b)}:function(t,r){return Fe(u,e,[4,i,Le(h,t,r)],b)};var d=k[1];return function(t){return Fe(u,e,[4,i,Le(h,d,t)],b)}}if(0===p[0]){var m=p[2],y=p[1];if(\"number\"==typeof k)return 0===k?function(t){return Fe(u,e,[4,i,Se(y,m,Le(h,J$,t))],b)}:function(t,r){return Fe(u,e,[4,i,Se(y,m,Le(h,t,r))],b)};var w=k[1];return function(t){return Fe(u,e,[4,i,Se(y,m,Le(h,w,t))],b)}}var g=p[1];if(\"number\"==typeof k)return 0===k?function(t,r){return Fe(u,e,[4,i,Se(g,t,Le(h,J$,r))],b)}:function(t,r,n){return Fe(u,e,[4,i,Se(g,t,Le(h,r,n))],b)};var T=k[1];return function(t,r){return Fe(u,e,[4,i,Se(g,t,Le(h,T,r))],b)};case 9:var _=f[1];return function(t){return Fe(u,e,[4,i,t?wm:gm],_)};case 10:var i=[7,i],f=f[1];continue;case 11:var i=[2,i,f[1]],f=f[2];continue;case 12:var i=[3,i,f[1]],f=f[2];continue;case 13:var S=f[3],A=f[2],E=oe(16);pe(E,A);var x=ke(E);return function(t){return Fe(u,e,[4,i,x],S)};case 14:var I=f[3],C=f[2];return function(t){var r=Te(t[1],Sr(he(C)));if(\"number\"==typeof r[2])return Fe(u,e,i,Er(r[1],I));throw H$};case 15:var N=f[1];return function(t,r){return Fe(u,e,[6,i,function(e){return wr(t,e,r)}],N)};case 16:var L=f[1];return function(t){return Fe(u,e,[6,i,t],L)};case 17:var i=[0,i,f[1]],f=f[2];continue;case 18:var R=f[1];if(0===R[0]){var P=f[2],O=R[1][1],u=function(t,r,e){return function(n,a){return Fe(r,n,[1,t,[0,a]],e)}}(i,u,P),i=0,f=O;continue}var U=f[2],D=R[1][1],u=function(t,r,e){return function(n,a){return Fe(r,n,[1,t,[1,a]],e)}}(i,u,U),i=0,f=D;continue;case 19:throw[0,im,Iy];case 20:var M=f[3],F=[8,i,Cy];return function(t){return Fe(u,e,F,M)};case 21:var X=f[2];return function(t){return Fe(u,e,[4,i,Y(xy,t)],X)};case 22:var B=f[1];return function(t){return Fe(u,e,[5,i,t],B)};case 23:var j=f[2],G=f[1];if(\"number\"==typeof G)switch(G){case 0:case 1:case 2:return t<50?De(t+1|0,u,e,i,j):pr(De,[0,u,e,i,j]);case 3:throw[0,im,Ny];default:return t<50?De(t+1|0,u,e,i,j):pr(De,[0,u,e,i,j])}else switch(G[0]){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:return t<50?De(t+1|0,u,e,i,j):pr(De,[0,u,e,i,j]);case 8:var q=G[2];return t<50?Ue(t+1|0,u,e,i,q,j):pr(Ue,[0,u,e,i,q,j]);case 9:default:return t<50?De(t+1|0,u,e,i,j):pr(De,[0,u,e,i,j])}default:var J=f[3],H=f[1],W=yr(f[2],0);return t<50?Me(t+1|0,u,e,i,J,H,W):pr(Me,[0,u,e,i,J,H,W])}}}function Ue(t,r,e,n,a,u){if(\"number\"==typeof a)return t<50?De(t+1|0,r,e,n,u):pr(De,[0,r,e,n,u]);switch(a[0]){case 0:var i=a[1];return function(t){return Xe(r,e,n,i,u)};case 1:var f=a[1];return function(t){return Xe(r,e,n,f,u)};case 2:var c=a[1];return function(t){return Xe(r,e,n,c,u)};case 3:var s=a[1];return function(t){return Xe(r,e,n,s,u)};case 4:var o=a[1];return function(t){return Xe(r,e,n,o,u)};case 5:var v=a[1];return function(t){return Xe(r,e,n,v,u)};case 6:var l=a[1];return function(t){return Xe(r,e,n,l,u)};case 7:var b=a[1];return function(t){return Xe(r,e,n,b,u)};case 8:var k=a[2];return function(t){return Xe(r,e,n,k,u)};case 9:var p=a[3],h=a[2],d=me(he(a[1]),h);return function(t){return Xe(r,e,n,Ar(d,p),u)};case 10:var m=a[1];return function(t,a){return Xe(r,e,n,m,u)};case 11:var y=a[1];return function(t){return Xe(r,e,n,y,u)};case 12:var w=a[1];return function(t){return Xe(r,e,n,w,u)};case 13:throw[0,im,Ly];default:throw[0,im,Ry]}}function De(t,r,e,n,a){var u=[8,n,Py];return t<50?Oe(t+1|0,r,e,u,a):pr(Oe,[0,r,e,u,a])}function Me(t,r,e,n,a,u,i){if(u){var f=u[1];return function(t){return Be(r,e,n,a,f,yr(i,t))}}var c=[4,n,i];return t<50?Oe(t+1|0,r,e,c,a):pr(Oe,[0,r,e,c,a])}function Fe(t,r,e,n){return kr(Oe(0,t,r,e,n))}function Xe(t,r,e,n,a){return kr(Ue(0,t,r,e,n,a))}function Be(t,r,e,n,a,u){return kr(Me(0,t,r,e,n,a,u))}function je(t,r){for(o=r;;){if(\"number\"==typeof o)return 0;switch(o[0]){case 0:var e=o[2],n=o[1];if(\"number\"==typeof e)switch(e){case 0:a=Xw;break;case 1:a=Bw;break;case 2:a=jw;break;case 3:a=Gw;break;case 4:a=qw;break;case 5:a=Yw;break;default:a=Jw;}else switch(e[0]){case 0:case 1:a=e[1];break;default:var a=Lr(Hw,zr(1,e[1]));}return je(t,n),se(t,a);case 1:var u=o[2],i=o[1];if(0===u[0]){var f=u[1];je(t,i),se(t,Oy);o=f;continue}var c=u[1];je(t,i),se(t,Uy);o=c;continue;case 6:var s=o[2];return je(t,o[1]),se(t,yr(s,0));case 7:var o=o[1];continue;case 8:var v=o[2];return je(t,o[1]),Ir(v);case 2:case 4:var l=o[2];return je(t,o[1]),se(t,l);default:var b=o[2];return je(t,o[1]),ce(t,b)}}}function Ge(t){return Fe(function(t,r){var e=ue(64);return je(e,r),ie(e)},0,0,t[1])}function qe(t,r){var e=t[r+1];if(1-(\"number\"==typeof e)){if(ar(e)===bd)return yr(Ge(ig),e);if(ar(e)===Sl)for(var n=q(mm,e),a=0,u=wt(n);;){if(u<=a)return Lr(n,ym);var i=cr(n,a);if(!(48<=i?58<=i?0:1:45===i?1:0))return n;a=a+1|0;}return fg}return yr(Ge(ug),e)}function Ye(t,r){if(t.length-1<=r)return zw;var e=Ye(t,r+1|0),n=qe(t,r);return wr(Ge(Vw),n,e)}function Je(t){var r=t.length-1;if(2<r>>>0){var e=Ye(t,2),n=qe(t,1);return wr(Ge(rg),n,e)}switch(r){case 0:return eg;case 1:return ng;default:var a=qe(t,1);return yr(Ge(ag),a)}}function He(t){return W$[1]=[0,t,W$[1]],0}function We(t,r){for(var e=t?t[1]:$$,n=16;;){if(r<=n||G$<(2*n|0)){if(e){var a=ar(K$),u=Ql===a?K$[1]:ls===a?ae(K$):K$;u[2]=(u[2]+1|0)%55|0;var i=u[2],f=I(u[1],i)[i+1],c=(u[2]+24|0)%55|0,s=(I(u[1],c)[c+1]+(f^31&(f>>>25|0))|0)&wp,o=u[2];I(u[1],o)[o+1]=s;v=s;}else var v=0;return[0,0,Dt(n,0),v,n]}n=2*n|0;}}function ze(t,r){return 3<=t.length-1?et(10,Tb,t[3],r)&(t[2].length-1-1|0):rr(at(10,Tb,r),t[2].length-1)}function Ve(t,r,e){var n=ze(t,r),a=[0,r,e,I(t[2],n)[n+1]];I(t[2],n)[n+1]=a,t[1]=t[1]+1|0;var u=t[2].length-1<<1<t[1]?1:0;if(u){var i=t[2],f=i.length-1,c=2*f|0,s=c<G$?1:0;if(s){var o=Dt(c,0),v=Dt(c,0),l=1-((t.length-1<4?1:0)||(t[4]<0?1:0));t[2]=o;var b=f-1|0;if(!(b<0)){p=0;t:for(;;){for(T=I(i,p)[p+1];;){if(!T){var k=p+1|0;if(b!==p){var p=k;continue t}break}var h=T[1],d=T[2],m=T[3],y=l?T:[0,h,d,0],w=ze(t,h),g=I(v,w)[w+1];g?g[3]=y:I(o,w)[w+1]=y,I(v,w)[w+1]=y;var T=m;}break}}if(l){var _=c-1|0;if(!(_<0))for(E=0;;){var S=I(v,E)[E+1];S&&(S[3]=0);var A=E+1|0;if(_===E)break;var E=A;}x=0;}else var x=l;C=x;}else var C=s;return C}return u}function $e(t,r){var e=ze(t,r),n=I(t[2],e)[e+1];if(n){var a=n[3],u=n[2];if(0===O(r,n[1]))return u;if(a){var i=a[3],f=a[2];if(0===O(r,a[1]))return f;if(i){var c=i[2],s=i[3];if(0===O(r,i[1]))return c;for(l=s;;){if(!l)throw nm;var o=l[2],v=l[3];if(0===O(r,l[1]))return o;var l=v;}}throw nm}throw nm}throw nm}function Ke(t,r){var e=[0,t,0],n=r[1];return n?(r[1]=e,n[2]=e,0):(r[1]=e,r[2]=e,0)}function Qe(t){var r=t[2];if(r){var e=r[2],n=r[1];return t[2]=e,0===e&&(t[1]=0),n}throw Q$}function Ze(t,r){return t[13]=t[13]+r[3]|0,Ke(r,t[27])}function tn(t,r){return gr(t[17],r,0,wt(r))}function rn(t){return yr(t[19],0)}function en(t,r){return yr(t[20],r)}function nn(t,r,e){rn(t),t[11]=1;var n=(t[6]-e|0)+r|0,a=t[8],u=Pt(a,n)?a:n;return t[10]=u,t[9]=t[6]-t[10]|0,en(t,t[10])}function an(t,r){return nn(t,0,r)}function un(t,r){return t[9]=t[9]-r|0,en(t,r)}function fn(t){var r=t[2];if(r){var e=r[1],n=e[2],a=e[1],u=t[9]<n?1:0;if(u){if(0!==a)return 5<=a?0:an(t,n);i=0;}else var i=u;return i}return rn(t)}function cn(t){var r=Qe(t[27]),e=r[1];return t[12]=t[12]-r[3]|0,t[9]=t[9]+e|0,0}function sn(t,r,e){if(\"number\"==typeof e)switch(e){case 0:var n=t[3];if(n){var a=n[1][1],u=function(t,r){if(r){var e=r[1],n=r[2];return Ot(t,e)?[0,t,r]:[0,e,u(t,n)]}return[0,t,0]};return a[1]=u(t[6]-t[9]|0,a[1]),0}return 0;case 1:var i=t[2];return i?(t[2]=i[2],0):0;case 2:var f=t[3];return f?(t[3]=f[2],0):0;case 3:var c=t[2];return c?an(t,c[1][2]):rn(t);case 4:var s=t[10]!==(t[6]-t[9]|0)?1:0;return s?cn(t):s;default:var o=t[5];if(o){var v=o[2];return tn(t,yr(t[24],o[1])),t[5]=v,0}return 0}else switch(e[0]){case 0:var l=e[1];return t[9]=t[9]-r|0,tn(t,l),t[11]=0,0;case 1:var b=e[2],k=e[1],p=t[2];if(p){var h=p[1],d=h[2];switch(h[1]){case 0:return un(t,k);case 1:case 2:return nn(t,b,d);case 3:return t[9]<r?nn(t,b,d):un(t,k);case 4:return t[11]?un(t,k):t[9]<r?nn(t,b,d):((t[6]-d|0)+b|0)<t[10]?nn(t,b,d):un(t,k);default:return un(t,k)}}return 0;case 2:var m=t[6]-t[9]|0,y=t[3],w=e[2],g=e[1];if(y){var T=y[1][1],_=T[1];if(_){var S=_[1];try{A=function(t,r){for(a=r;;){if(!a)throw nm;var e=a[1],n=a[2];if(H(e,t))return e;var a=n;}}(m,T[1]);}catch(t){if((t=mr(t))!==nm)throw t;var A=S;}E=A;}else var E=m;var x=E-m|0;return 0<=x?un(t,x+g|0):nn(t,E+w|0,t[6])}return 0;case 3:var I=e[2],C=e[1];t[8]<(t[6]-t[9]|0)&&fn(t);var N=t[9]-C|0,L=1===I?1:t[9]<r?I:5;return t[2]=[0,[0,L,N],t[2]],0;case 4:return t[3]=[0,e[1],t[3]],0;default:var R=e[1];return tn(t,yr(t[23],R)),t[5]=[0,R,t[5]],0}}function on(t){for(;;){var r=t[27][2];if(r){var e=r[1],n=e[1],a=n<0?1:0,u=e[3],i=e[2],f=1-(a?(t[13]-t[12]|0)<t[9]?1:0:a);if(f){Qe(t[27]),sn(t,0<=n?n:Z$,i),t[12]=u+t[12]|0;continue}return f}throw Q$}}function vn(t){try{return on(t)}catch(t){if((t=mr(t))===Q$)return 0;throw t}}function ln(t){return t[1]=tK,0}function bn(t,r){var e=t[1];if(e){var n=e[1],a=n[2],u=a[1],i=e[2],f=a[2];if(n[1]<t[12])return ln(t);if(\"number\"!=typeof f)switch(f[0]){case 3:var c=1-r;return c?(a[1]=t[13]+u|0,t[1]=i,0):c;case 1:case 2:return r?(a[1]=t[13]+u|0,t[1]=i,0):r}return 0}return 0}function kn(t){return Lr(dg,Lr(t,hg))}function pn(t){return Lr(pg,Lr(t,kg))}function hn(t){return 0}function dn(t){return 0}function mn(t,r){function e(t){return 0}function n(t){return 0}var a=[0,0,0],u=[0,-1,lg,0];Ke(u,a);var i=[0,[0,[0,1,u],tK],0,0,0,0,78,10,68,78,0,1,1,1,1,D$,bg,t,r,n,e,0,0,kn,pn,hn,dn,a];return i[19]=function(t){return gr(i[17],mg,0,1)},i[20]=function(t){for(e=t;;){var r=0<e?1:0;if(r){if(80<e){gr(i[17],rK,0,80);var e=e+Ha|0;continue}return gr(i[17],rK,0,e)}return r}},i}function yn(t){function r(r){return Bt(t)}return mn(function(r,e,n){return 0<=e&&0<=n&&!((wt(r)-n|0)<e)?Qt(t,r,e,n):Ir(dm)},r)}function wn(t,r,e){throw[0,im,Ag]}function gn(t){if(t[5]===t[3])if(t[9])f=cK;else{if(t[2].length-1<(t[3]+Hn|0)){var r=t[6],e=t[3]-r|0;if((e+Hn|0)<=t[2].length-1)te(t[2],r,t[2],0,e);else{var n=Dt(2*(t[2].length-1+Hn|0)|0,0);te(t[2],r,n,0,e),t[2]=n;}t[3]=e,t[4]=t[4]+r|0,t[5]=t[5]-r|0,t[7]=t[7]-r|0,t[6]=0;}var a=gr(t[1],t[2],t[5],sK);if(0===a){var u=t[3];I(t[2],u)[u+1]=cK,t[3]=t[3]+1|0;}else t[3]=t[3]+a|0;var i=t[5],f=I(t[2],i)[i+1];}else var c=t[5],f=I(t[2],c)[c+1];return-1===f?t[9]=1:t[5]=t[5]+1|0,f}function Tn(t){return t[6]=t[5],t[7]=t[5],t[8]=-1,0}function _n(t,r){return t[7]=t[5],t[8]=r,0}function Sn(t){return t[5]=t[7],t[8]}function An(t){return t[5]=t[6],0}function En(t){return t[6]+t[4]|0}function xn(t){return t[5]+t[4]|0}function In(t){return t[5]-t[6]|0}var Cn=254,Nn=43595,Ln=42237,Rn=43123,Pn=\"Identifier\",On=16777215,Un=43347,Dn=126467,Mn=12287,Fn=\"variance\",Xn=12335,Bn=65370,jn=8202,Gn=65007,qn=119969,Yn=43071,Jn=\"consequent\",Hn=512,Wn=64279,zn=8485,Vn=66204,$n=120539,Kn=64297,Qn=\"params\",Zn=128,ta=8488,ra=68102,ea=42999,na=-43,aa=12589,ua=\"constructor\",ia=126503,fa=68096,ca=\"fd \",sa=120744,oa=126560,va=1023,la=177972,ba=44015,ka=65855,pa=43776,ha=\"0o\",da=43215,ma=12592,ya=12336,wa=42124,ga=120512,Ta=\"decorators\",_a=8489,Sa=66334,Aa=68115,Ea=64324,xa=67592,Ia=126529,Ca=43784,Na=119807,La=8304,Ra=120137,Pa=69807,Oa=\"method\",Ua=69926,Da=65595,Ma=126578,Fa=64322,Xa=11735,Ba=178205,ja=8487,Ga=\"Popping lex mode from empty stack\",qa=43249,Ya=120771,Ja=67589,Ha=-80,Wa=119972,za=\"e\",Va=\"src/parser/statement_parser.ml\",$a=8239,Ka=109,Qa=65598,Za=69687,tu=94031,ru=67669,eu=43583,nu=8348,au=\"Invalid binary/octal \",uu=43019,iu=42239,fu=\"Out_of_memory\",cu=78894,su=11687,ou=43798,vu=101,lu=40959,bu=42922,ku=8454,pu=\"index out of bounds\",hu=\"package\",du=126589,mu=12438,yu=12442,wu=120654,gu=119361,Tu=67637,_u=69743,Su=\"type\",Au=11679,Eu=119892,xu=42894,Iu=11311,Cu=126521,Nu=1024,Lu=119993,Ru=11710,Pu=8543,Ou=8484,Uu=43135,Du=126634,Mu=43334,Fu=43263,Xu=67593,Bu=\"infinity\",ju=120144,Gu=\"private\",qu=70105,Yu=119364,Ju=11359,Hu=8516,Wu=8254,zu=11559,Vu=126551,$u=68151,Ku=\"Property\",Qu=42888,Zu=55296,ti=\"implements\",ri=43255,ei=8399,ni=\"src/parser/type_parser.ml\",ai=103,ui=\"raw\",ii=8468,fi=65470,ci=\"alternate\",si=11686,oi=43712,vi=43009,li=43470,bi=\".\",ki=65535,pi=8469,hi=\"kind\",di=8521,mi=69631,yi=120085,wi=11743,gi=126559,Ti=120655,_i=69890,Si=65023,Ai=66256,Ei=65479,xi=42622,Ii=11310,Ci=11711,Ni=8305,Li=119967,Ri=68159,Pi=\"expected *\",Oi=64433,Ui=42774,Di=11564,Mi=68437,Fi=67871,Xi=126496,Bi=120145,ji=\"expression\",Gi=66045,qi=\"value\",Yi=12348,Ji=56320,Hi=119964,Wi=126554,zi=119140,Vi=43792,$i=68405,Ki=126557,Qi=\"Assert_failure\",Zi=119162,tf=67861,rf=114,ef=43807,nf=19967,af=65663,uf=65574,ff=\"null\",cf=64111,sf=66378,of=\"expressions\",vf=11703,lf=\"get\",bf=69762,kf=\"exported\",pf=68447,hf=11630,df=11519,mf=44031,yf=69839,wf=8286,gf=64310,Tf=120084,_f=120126,Sf=8335,Af=126519,Ef=\"src/parser/expression_parser.ml\",xf=\"(global)\",If=11502,Cf=69941,Nf=42511,Lf=44025,Rf=126534,Pf=120,Of=94032,Uf=126555,Df=67646,Mf=65629,Ff=65076,Xf=126535,Bf=69881,jf=120134,Gf=12343,qf=70084,Yf=69864,Jf=12703,Hf=68107,Wf=126520,zf=126468,Vf=43519,$f=65342,Kf=43615,Qf=120831,Zf=42654,tc=42899,rc=43359,ec=\"Division_by_zero\",nc=119981,ac=43738,uc=65140,ic=67638,fc=68351,cc=68119,sc=43388,oc=126538,vc=70015,lc=8449,bc=120779,kc=12686,pc=126504,hc=\"%d\",dc=68191,mc=70018,yc=57343,wc=67591,gc=55291,Tc=11727,_c=11557,Sc=119980,Ac=43014,Ec=8188,xc=43599,Ic=67967,Cc=8319,Nc=\"from\",Lc=42785,Rc=11775,Pc=126502,Oc=65279,Uc=\"set\",Dc=63743,Mc=2048,Fc=64286,Xc=\"right\",Bc=120093,jc=8486,Gc=\"body\",qc=43743,Yc=12799,Jc=119965,Hc=\"Invalid number \",Wc=126563,zc=64296,Vc=43766,$c=8275,Kc=\"Lookahead.peek failed\",Qc=2147483647,Zc=11670,ts=43815,rs=65536,es=\"properties\",ns=120004,as=8238,us=8417,is=126591,fs=\"arguments\",cs=11719,ss=66517,os=126500,vs=126571,ls=246,bs=65497,ks=120571,ps=\"static\",hs=\"declaration\",ds=12730,ms=120597,ys=64262,ws=8420,gs=77823,Ts=\"init\",_s=66044,Ss=74751,As=195101,Es=66207,xs=122,Is=126602,Cs=69818,Ns=8276,Ls=\"Stack_overflow\",Rs=11742,Ps=126539,Os=8432,Us=120132,Ds=120687,Ms=64311,Fs=43713,Xs=119148,Bs=126564,js=120745,Gs=\"Not_found\",qs=126590,Ys=44010,Js=131071,Hs=-46,Ws=8467,zs=43759,Vs=\"CallExpression\",$s=126583,Ks=74850,Qs=43047,Zs=126530,to=40908,ro=12543,eo=69951,no=42655,ao=65489,uo=66503,io=11695,fo=13311,co=\"superClass\",so=64321,oo=11567,vo=43638,lo=\"typeParameters\",bo=65615,ko=\"false\",po=11718,ho=126556,mo=11623,yo=\"test\",wo=64847,go=43456,To=110593,_o=12538,So=8507,Ao=-36,Eo=55238,xo=12292,Io=192,Co=120487,No=64967,Lo=173782,Ro=65074,Po=43741,Oo=120074,Uo=\"minus\",Do=12548,Mo=245,Fo=8191,Xo=71359,Bo=43643,jo=32752,Go=42537,qo=\"computed\",Yo=126579,Jo=43391,Ho=11558,Wo=126523,zo=64217,Vo=\"id\",$o=\"as\",Ko=\"true\",Qo=65381,Zo=194559,tv=104,rv=108,ev=119996,nv=66559,av=\"Invalid_argument\",uv=64913,iv=12448,fv=126552,cv=70066,sv=55242,ov=120781,vv=12352,lv=12295,bv=65599,kv=43714,pv=65908,hv=43560,dv=120485,mv=65575,yv=\"label\",wv=65495,gv=64466,Tv=43204,_v=64285,Sv=67644,Av=\"shorthand\",Ev=68147,xv=67897,Iv=8526,Cv=12539,Nv=\"0\",Lv=120712,Rv=43641,Pv=126522,Ov=248,Uv=8450,Dv=119974,Mv=119170,Fv=\"Sys_blocked_io\",Xv=67643,Bv=\"superTypeParameters\",jv=43187,Gv=12440,qv=8471,Yv=65473,Jv=68095,Hv=43013,Wv=126553,zv=107,Vv=65305,$v=43754,Kv=110591,Qv=67640,Zv=64284,tl=64317,rl=\"protected\",el=126515,nl=1114111,al=-97,ul=-69,il=43018,fl=11631,cl=44002,sl=\"object\",ol=110,vl=66499,ll=65312,bl=126633,kl=120003,pl=65786,hl=66719,dl=8511,ml=57344,yl=11492,wl=65487,gl=119145,Tl=71351,_l=11726,Sl=253,Al=\"returnType\",El=126540,xl=\"-\",Il=8205,Cl=\"async\",Nl=126543,Ll=126550,Rl=\"left\",Pl=120596,Ol=11646,Ul=64325,Dl=66511,Ml=120121,Fl=43137,Xl=\"Invalid legacy octal \",Bl=12288,jl=\"typeof\",Gl=43697,ql=66175,Yl=126628,Jl=224,Hl=69702,Wl=94078,zl=42895,Vl=8416,$l=917999,Kl=42911,Ql=250,Zl=120770,tb=126463,rb=43309,eb=42559,nb=119179,ab=\"interface\",ub=66512,ib=126588,fb=68415,cb=102,sb=43010,ob=69871,vb=55203,lb=11507,bb=55215,kb=120629,pb=44013,hb=\"default\",db=119976,mb=\"\",yb=\"exportKind\",wb=\"instanceof\",gb=43586,Tb=100,_b=\"argument\",Sb=126566,Ab=126558,Eb=119995,xb=-17,Ib=\"src/parser/ast.ml\",Cb=68100,Nb=126537,Lb=\"Match_failure\",Rb=43790,Pb=68111,Ob=8505,Ub=1e3,Db=120686,Mb=\"+\",Fb=42735,Xb=120127,Bb=65613,jb=65100,Gb=69759,qb=43609,Yb=65500,Jb=42527,Hb=65548,Wb=71338,zb=42611,Vb=120713,$b=127,Kb=11694,Qb=69940,Zb=64318,tk=\"void\",rk=8584,ek=120538,nk=120070,ak=\"nan\",uk=126601,ik=43597,fk=68220,ck=8412,sk=42191,ok=94020,vk=177983,lk=126547,bk=11565,kk=126619,pk=65019,hk=42621,dk=120092,mk=\"property\",yk=67839,wk=120122,gk=42890,Tk=43761,_k=8256,Sk=43231,Ak=44011,Ek=11498,xk=65103,Ik=65039,Ck=64274,Nk=11647,Lk=43273,Rk=70095,Pk=\"function\",Ok=43258,Uk=126562,Dk=6158,Mk=\"jsError\",Fk=71295,Xk=65344,Bk=43642,jk=42606,Gk=126544,qk=64109,Yk=\"unreachable\",Jk=64829,Hk=\"End_of_file\",Wk=11702,zk=73727,Vk=68466,$k=\"Failure\",Kk=43764,Qk=\"local\",Zk=12783,tp=11358,rp=65141,ep=65481,np=68154,ap=12341,up=65278,ip=19893,fp=119172,cp=68031,sp=43574,op=43259,vp=\"camlinternalFormat.ml\",lp=\"elements\",bp=43711,kp=-34,pp=\"Sys_error\",hp=43301,dp=43442,mp=68158,yp=126584,wp=1073741823,gp=126570,Tp=65295,_p=12329,Sp=11263,Ap=\"int_of_string\",Ep=43702,xp=43704,Ip=43822,Cp=\"operator\",Np=\"name\",Lp=119970,Rp=65547,Pp=126514,Op=65276,Up=126498,Dp=\"callee\",Mp=120076,Fp=43395,Xp=119893,Bp=917759,jp=66431,Gp=43709,qp=94098,Yp=126546,Jp=\"predicate\",Hp=64911,Wp=\"types\",zp=11505,Vp=43481,$p=119154,Kp=240,Qp=8203,Zp=42737,th=126624,rh=8525,eh=\"0x\",nh=68116,ah=\"optional\",uh=69887,ih=68029,fh=70080,ch=126499,sh=92728,oh=32768,vh=43311,lh=255,bh=120069,kh=126627,ph=8457,hh=68099,dh=119994,mh=93951,yh=69634,wh=64319,gh=\"source\",Th=65055,_h=65062,Sh=65135,Ah=66303,Eh=12447,xh=126536,Ih=119209,Ch=\"generator\",Nh=120133,Lh=8287,Rh=74606,Ph=67583,Oh=66351,Uh=66717,Dh=64255,Mh=8477,Fh=-79,Xh=119213,Bh=8318,jh=43587,Gh=65597,qh=68023,Yh=68680,Jh=65594,Hh=43814,Wh=43042,zh=120628,Vh=43696,$h=12320,Kh=66463,Qh=42783,Zh=43700,td=43225,rd=42508,ed=64316,nd=43967,ad=120570,ud=66729,id=42539,fd=8483,cd=126548,sd=69733,od=8455,vd=68607,ld=65343,bd=252,kd=126495,pd=\"key\",hd=\" \",dd=43695,md=\"RestElement\",yd=\"Undefined_recursive_module\",wd=43471,gd=11734,Td=68120,_d=43647,Sd=94094,Ad=116,Ed=92159,xd=42607,Id=\"typeAnnotation\",Cd=66461,Nd=173823,Ld=42647,Rd=120513,Pd=\"specifiers\",Od=\"Set.bal\",Ud=126651,Dd=71369,Md=94111,Fd=43782,Xd=\"extends\",Bd=\"importKind\",jd=65338,Gd=[0],qd=l;m.prototype.toString=function(){return d(this)};var Yd=M,Jd=0;Math.imul||(Math.imul=function(t,r){return r|=0,((t>>16)*r<<16)+(t&ki)*r|0});var Hd=Math.imul,Wd=Math.log2&&1020==Math.log2(1.1235582092889474e307),zd=256,Vd=Math.pow(2,-24),$d=function(){function t(t,r){return t+r|0}function r(r,e,n,a,u,i){return e=t(t(e,r),t(a,i)),t(e<<u|e>>>32-u,n)}function e(t,e,n,a,u,i,f){return r(e&n|~e&a,t,e,u,i,f)}function n(t,e,n,a,u,i,f){return r(e&a|n&~a,t,e,u,i,f)}function a(t,e,n,a,u,i,f){return r(e^n^a,t,e,u,i,f)}function u(t,e,n,a,u,i,f){return r(n^(e|~a),t,e,u,i,f)}function i(r,i){for(r[(b=i)>>2]|=Zn<<8*(3&b),b=8+(-4&b);(63&b)<60;b+=4)r[(b>>2)-1]=0;r[(b>>2)-1]=i<<3,r[b>>2]=i>>29&536870911;var f=[1732584193,4023233417,2562383102,271733878];for(b=0;b<r.length;b+=16){var c=f[0],s=f[1],o=f[2],v=f[3];s=u(s=u(s=u(s=u(s=a(s=a(s=a(s=a(s=n(s=n(s=n(s=n(s=e(s=e(s=e(s=e(s,o=e(o,v=e(v,c=e(c,s,o,v,r[b+0],7,3614090360),s,o,r[b+1],12,3905402710),c,s,r[b+2],17,606105819),v,c,r[b+3],22,3250441966),o=e(o,v=e(v,c=e(c,s,o,v,r[b+4],7,4118548399),s,o,r[b+5],12,1200080426),c,s,r[b+6],17,2821735955),v,c,r[b+7],22,4249261313),o=e(o,v=e(v,c=e(c,s,o,v,r[b+8],7,1770035416),s,o,r[b+9],12,2336552879),c,s,r[b+10],17,4294925233),v,c,r[b+11],22,2304563134),o=e(o,v=e(v,c=e(c,s,o,v,r[b+12],7,1804603682),s,o,r[b+13],12,4254626195),c,s,r[b+14],17,2792965006),v,c,r[b+15],22,1236535329),o=n(o,v=n(v,c=n(c,s,o,v,r[b+1],5,4129170786),s,o,r[b+6],9,3225465664),c,s,r[b+11],14,643717713),v,c,r[b+0],20,3921069994),o=n(o,v=n(v,c=n(c,s,o,v,r[b+5],5,3593408605),s,o,r[b+10],9,38016083),c,s,r[b+15],14,3634488961),v,c,r[b+4],20,3889429448),o=n(o,v=n(v,c=n(c,s,o,v,r[b+9],5,568446438),s,o,r[b+14],9,3275163606),c,s,r[b+3],14,4107603335),v,c,r[b+8],20,1163531501),o=n(o,v=n(v,c=n(c,s,o,v,r[b+13],5,2850285829),s,o,r[b+2],9,4243563512),c,s,r[b+7],14,1735328473),v,c,r[b+12],20,2368359562),o=a(o,v=a(v,c=a(c,s,o,v,r[b+5],4,4294588738),s,o,r[b+8],11,2272392833),c,s,r[b+11],16,1839030562),v,c,r[b+14],23,4259657740),o=a(o,v=a(v,c=a(c,s,o,v,r[b+1],4,2763975236),s,o,r[b+4],11,1272893353),c,s,r[b+7],16,4139469664),v,c,r[b+10],23,3200236656),o=a(o,v=a(v,c=a(c,s,o,v,r[b+13],4,681279174),s,o,r[b+0],11,3936430074),c,s,r[b+3],16,3572445317),v,c,r[b+6],23,76029189),o=a(o,v=a(v,c=a(c,s,o,v,r[b+9],4,3654602809),s,o,r[b+12],11,3873151461),c,s,r[b+15],16,530742520),v,c,r[b+2],23,3299628645),o=u(o,v=u(v,c=u(c,s,o,v,r[b+0],6,4096336452),s,o,r[b+7],10,1126891415),c,s,r[b+14],15,2878612391),v,c,r[b+5],21,4237533241),o=u(o,v=u(v,c=u(c,s,o,v,r[b+12],6,1700485571),s,o,r[b+3],10,2399980690),c,s,r[b+10],15,4293915773),v,c,r[b+1],21,2240044497),o=u(o,v=u(v,c=u(c,s,o,v,r[b+8],6,1873313359),s,o,r[b+15],10,4264355552),c,s,r[b+6],15,2734768916),v,c,r[b+13],21,1309151649),o=u(o,v=u(v,c=u(c,s,o,v,r[b+4],6,4149444226),s,o,r[b+11],10,3174756917),c,s,r[b+2],15,718787259),v,c,r[b+9],21,3951481745),f[0]=t(c,f[0]),f[1]=t(s,f[1]),f[2]=t(o,f[2]),f[3]=t(v,f[3]);}for(var l=new Array(16),b=0;b<4;b++)for(var k=0;k<4;k++)l[4*b+k]=f[b]>>8*k&lh;return l}return function(t,r,e){var n=[];switch(6&t.t){default:k(t);case 0:for(var a=t.c,u=0;u<e;u+=4){c=u+r;n[u>>2]=a.charCodeAt(c)|a.charCodeAt(c+1)<<8|a.charCodeAt(c+2)<<16|a.charCodeAt(c+3)<<24;}for(;u<e;u++)n[u>>2]|=a.charCodeAt(u+r)<<8*(3&u);break;case 4:for(var f=t.c,u=0;u<e;u+=4){var c=u+r;n[u>>2]=f[c]|f[c+1]<<8|f[c+2]<<16|f[c+3]<<24;}for(;u<e;u++)n[u>>2]|=f[u+r]<<8*(3&u);}return Mt(i(n,e))}}(),Kd=0;Yt.prototype={truncate:function(){this.data=jt(0),this.modified();},modified:function(){var t=qt();this.atime=t,this.mtime=t;}};Jt.prototype={exists:function(t){return this.content[t]?1:0},mk:function(t,r){this.content[t]=r;},get:function(t){return this.content[t]},list:function(){var t=[];for(var r in this.content)t.push(r);return t},remove:function(t){delete this.content[t];}},(new Jt).mk(mb,new Jt),Ht(0,new Yt(jt(0))),Ht(1,new Yt(jt(0))),Ht(2,new Yt(jt(0)));var Qd=new Array,Zd={},tm=[Ov,y(fu),-1],rm=[Ov,y($k),-3],em=[Ov,y(av),-4],nm=[Ov,y(Gs),-7],am=[Ov,y(Lb),-8],um=[Ov,y(Ls),-9],im=[Ov,y(Qi),-11],fm=[Ov,y(yd),-12],cm=[0,[11,y('File \"'),[2,0,[11,y('\", line '),[4,0,0,0,[11,y(\", characters \"),[4,0,0,0,[12,45,[4,0,0,0,[11,y(\": \"),[2,0,0]]]]]]]]]],y('File \"%s\", line %d, characters %d-%d: %s')],sm=[0,0,[0,0,0,0],[0,0,0,0]],om=[0,0,0],vm=y(\"\u0001\u0002\"),lm=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\"),bm=[0,0,0,0,0,1,0],km=[0,0,0],pm=[0,1],hm=[0,0];ur(11,fm,yd),ur(10,im,Qi),ur(9,[Ov,y(Fv),-10],Fv),ur(8,um,Ls),ur(7,am,Lb),ur(6,nm,Gs),ur(5,[Ov,y(ec),-6],ec),ur(4,[Ov,y(Hk),-5],Hk),ur(3,em,av),ur(2,rm,$k),ur(1,[Ov,y(pp),-2],pp),ur(0,tm,fu);var dm=y(\"output_substring\"),mm=y(\"%.12g\"),ym=y(bi),wm=y(Ko),gm=y(ko),Tm=[0,y(\"list.ml\"),227,11],_m=y(\"hd\"),Sm=y(\"\\\\\\\\\"),Am=y(\"\\\\'\"),Em=y(\"\\\\b\"),xm=y(\"\\\\t\"),Im=y(\"\\\\n\"),Cm=y(\"\\\\r\"),Nm=y(\"Char.chr\"),Lm=y(\"String.blit / Bytes.blit_string\"),Rm=y(\"Bytes.blit\"),Pm=y(\"String.sub / Bytes.sub\"),Om=y(\"String.contains_from / Bytes.contains_from\"),Um=(y(mb),y(\"String.concat\"),y(\"Array.blit\")),Dm=y(\"Array.init\"),Mm=y(\"Set.remove_min_elt\"),Fm=[0,0,0,0],Xm=[0,0,0],Bm=[0,y(\"set.ml\"),405,18],jm=y(Od),Gm=y(Od),qm=y(Od),Ym=y(Od),Jm=y(\"CamlinternalLazy.Undefined\"),Hm=y(\"Buffer.add_substring/add_subbytes\"),Wm=y(\"Buffer.add: cannot grow buffer\"),zm=y(\"%c\"),Vm=y(\"%s\"),$m=y(\"%i\"),Km=y(\"%li\"),Qm=y(\"%ni\"),Zm=y(\"%Li\"),ty=y(\"%f\"),ry=y(\"%B\"),ey=y(\"%{\"),ny=y(\"%}\"),ay=y(\"%(\"),uy=y(\"%)\"),iy=y(\"%a\"),fy=y(\"%t\"),cy=y(\"%?\"),sy=y(\"%r\"),oy=y(\"%_r\"),vy=[0,y(vp),845,23],ly=[0,y(vp),809,21],by=[0,y(vp),810,21],ky=[0,y(vp),813,21],py=[0,y(vp),814,21],hy=[0,y(vp),817,19],dy=[0,y(vp),818,19],my=[0,y(vp),821,22],yy=[0,y(vp),822,22],wy=[0,y(vp),826,30],gy=[0,y(vp),827,30],Ty=[0,y(vp),831,26],_y=[0,y(vp),832,26],Sy=[0,y(vp),841,28],Ay=[0,y(vp),842,28],Ey=[0,y(vp),846,23],xy=y(\"%u\"),Iy=[0,y(vp),1520,4],Cy=y(\"Printf: bad conversion %[\"),Ny=[0,y(vp),1588,39],Ly=[0,y(vp),1611,31],Ry=[0,y(vp),1612,31],Py=y(\"Printf: bad conversion %_\"),Oy=y(\"@{\"),Uy=y(\"@[\"),Dy=y(ak),My=y(bi),Fy=y(\"neg_infinity\"),Xy=y(Bu),By=y(\"%.12g\"),jy=y(\"%nd\"),Gy=y(\"%+nd\"),qy=y(\"% nd\"),Yy=y(\"%ni\"),Jy=y(\"%+ni\"),Hy=y(\"% ni\"),Wy=y(\"%nx\"),zy=y(\"%#nx\"),Vy=y(\"%nX\"),$y=y(\"%#nX\"),Ky=y(\"%no\"),Qy=y(\"%#no\"),Zy=y(\"%nu\"),tw=y(\"%ld\"),rw=y(\"%+ld\"),ew=y(\"% ld\"),nw=y(\"%li\"),aw=y(\"%+li\"),uw=y(\"% li\"),iw=y(\"%lx\"),fw=y(\"%#lx\"),cw=y(\"%lX\"),sw=y(\"%#lX\"),ow=y(\"%lo\"),vw=y(\"%#lo\"),lw=y(\"%lu\"),bw=y(\"%Ld\"),kw=y(\"%+Ld\"),pw=y(\"% Ld\"),hw=y(\"%Li\"),dw=y(\"%+Li\"),mw=y(\"% Li\"),yw=y(\"%Lx\"),ww=y(\"%#Lx\"),gw=y(\"%LX\"),Tw=y(\"%#LX\"),_w=y(\"%Lo\"),Sw=y(\"%#Lo\"),Aw=y(\"%Lu\"),Ew=y(hc),xw=y(\"%+d\"),Iw=y(\"% d\"),Cw=y(\"%i\"),Nw=y(\"%+i\"),Lw=y(\"% i\"),Rw=y(\"%x\"),Pw=y(\"%#x\"),Ow=y(\"%X\"),Uw=y(\"%#X\"),Dw=y(\"%o\"),Mw=y(\"%#o\"),Fw=y(\"%u\"),Xw=y(\"@]\"),Bw=y(\"@}\"),jw=y(\"@?\"),Gw=y(\"@\\n\"),qw=y(\"@.\"),Yw=y(\"@@\"),Jw=y(\"@%\"),Hw=y(\"@\"),Ww=y(\"CamlinternalFormat.Type_mismatch\"),zw=y(mb),Vw=[0,[11,y(\", \"),[2,0,[2,0,0]]],y(\", %s%s\")],$w=y(\"Out of memory\"),Kw=y(\"Stack overflow\"),Qw=y(\"Pattern matching failed\"),Zw=y(\"Assertion failed\"),tg=y(\"Undefined recursive module\"),rg=[0,[12,40,[2,0,[2,0,[12,41,0]]]],y(\"(%s%s)\")],eg=y(mb),ng=y(mb),ag=[0,[12,40,[2,0,[12,41,0]]],y(\"(%s)\")],ug=[0,[4,0,0,0,0],y(hc)],ig=[0,[3,0,0],y(\"%S\")],fg=y(\"_\"),cg=y(\"x\"),sg=y(\"OCAMLRUNPARAM\"),og=y(\"CAMLRUNPARAM\"),vg=y(mb),lg=[3,0,3],bg=y(bi),kg=y(\">\"),pg=y(\"</\"),hg=y(\">\"),dg=y(\"<\"),mg=y(\"\\n\"),yg=y(\"Format.Empty_queue\"),wg=[0,y(mb)],gg=y(\"TMPDIR\"),Tg=y(\"TEMP\"),_g=y(\"Cygwin\"),Sg=y(\"Win32\"),Ag=[0,y(\"sedlexing.ml\"),51,25],Eg=y(\"Sedlexing.MalFormed\"),xg=y(\"Js.Error\"),Ig=y(Mk),Cg=y(xf),Ng=[0,[0]],Lg=[0,y(Ib),18,6],Rg=[0,[0,[0,[0]]]],Pg=[0,y(Ib),39,6],Og=[0,[0]],Ug=[0,y(Ib),44,6],Dg=[0,[0,[0,[0,[0,[0]],[0,[0]]]],[0,[0,[0,[0]]]],[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]]]],Mg=[0,y(Ib),218,6],Fg=[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],Xg=[0,y(Ib),516,6],Bg=[0,[0,[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0,[0,[0]],[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0]]]],jg=[0,y(Ib),782,6],Gg=[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],qg=[0,y(Ib),885,6],Yg=[0,[0,[0,[0,[0,[0]],[0,[0]]]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]]]],Jg=[0,y(Ib),950,6],Hg=[0,[0]],Wg=[0,y(Ib),957,6],zg=[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],Vg=[0,y(Ib),1010,6],$g=[0,[0,[0,[0]]]],Kg=[0,y(Ib),1033,6],Qg=[0,[0]],Zg=[0,[0,[0,[0]]]],tT=[0,[0]],rT=[0,[0,[0,[0,[0,[0]],[0,[0]]]],[0,[0,[0,[0]]]],[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]]]],eT=[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],nT=[0,[0,[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0,[0,[0]],[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0]]]],aT=[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],uT=[0,[0,[0,[0,[0,[0]],[0,[0]]]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]]]],iT=[0,[0]],fT=[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],cT=[0,[0,[0,[0]]]],sT=y(\"Unexpected number\"),oT=y(\"Unexpected string\"),vT=y(\"Unexpected identifier\"),lT=y(\"Unexpected reserved word\"),bT=y(\"Unexpected end of input\"),kT=y(\"Unexpected variance sigil\"),pT=y(\"Type aliases are not allowed in untyped mode\"),hT=y(\"Type annotations are not allowed in untyped mode\"),dT=y(\"Type declarations are not allowed in untyped mode\"),mT=y(\"Type imports are not allowed in untyped mode\"),yT=y(\"Type exports are not allowed in untyped mode\"),wT=y(\"Interfaces are not allowed in untyped mode\"),gT=y(\"Illegal newline after throw\"),TT=y(\"Invalid regular expression\"),_T=y(\"Invalid regular expression: missing /\"),ST=y(\"Invalid left-hand side in assignment\"),AT=y(\"Invalid left-hand side in exponentiation expression\"),ET=y(\"Invalid left-hand side in for-in\"),xT=y(\"Invalid left-hand side in for-of\"),IT=y(\"found an expression instead\"),CT=y(\"Expected an object pattern, array pattern, or an identifier but \"),NT=y(\"More than one default clause in switch statement\"),LT=y(\"Missing catch or finally after try\"),RT=y(\"Illegal continue statement\"),PT=y(\"Illegal break statement\"),OT=y(\"Illegal return statement\"),UT=y(\"Illegal yield expression\"),DT=y(\"Strict mode code may not include a with statement\"),MT=y(\"Catch variable may not be eval or arguments in strict mode\"),FT=y(\"Variable name may not be eval or arguments in strict mode\"),XT=y(\"Parameter name eval or arguments is not allowed in strict mode\"),BT=y(\"Strict mode function may not have duplicate parameter names\"),jT=y(\"Function name may not be eval or arguments in strict mode\"),GT=y(\"Octal literals are not allowed in strict mode.\"),qT=y(\"Delete of an unqualified identifier in strict mode.\"),YT=y(\"Duplicate data property in object literal not allowed in strict mode\"),JT=y(\"Object literal may not have data and accessor property with the same name\"),HT=y(\"Object literal may not have multiple get/set accessors with the same name\"),WT=y(\"Assignment to eval or arguments is not allowed in strict mode\"),zT=y(\"Postfix increment/decrement may not have eval or arguments operand in strict mode\"),VT=y(\"Prefix increment/decrement may not have eval or arguments operand in strict mode\"),$T=y(\"Use of future reserved word in strict mode\"),KT=y(\"JSX attributes must only be assigned a non-empty expression\"),QT=y(\"JSX value should be either an expression or a quoted JSX text\"),ZT=y(\"Const must be initialized\"),t_=y(\"Destructuring assignment must be initialized\"),r_=y(\"Illegal newline before arrow\"),e_=y(\" declared at top level or immediately within another function.\"),n_=y(\"In strict mode code, functions can only be\"),a_=y(\"elements must be wrapped in an enclosing parent tag\"),u_=y(\"Unexpected token <. Remember, adjacent JSX \"),i_=y(\"Rest parameter must be final parameter of an argument list\"),f_=y(\"async is an implementation detail and isn't necessary for your declare function statement. It is sufficient for your declare function to just have a Promise return type.\"),c_=y(\"`declare export let` is not supported. Use `declare export var` instead.\"),s_=y(\"`declare export const` is not supported. Use `declare export var` instead.\"),o_=y(\"`declare export type` is not supported. Use `export type` instead.\"),v_=y(\"`declare export interface` is not supported. Use `export interface` instead.\"),l_=y(\"`export * as` is an early-stage proposal and is not enabled by default. To enable support in the parser, use the `esproposal_export_star_as` option\"),b_=y(\"When exporting a class as a named export, you must specify a class name. Did you mean `export default class ...`?\"),k_=y(\"When exporting a function as a named export, you must specify a function name. Did you mean `export default function ...`?\"),p_=y(\"Found a decorator in an unsupported position.\"),h_=y(\"Type parameter declaration needs a default, since a preceding type parameter declaration has a default.\"),d_=y(\"The Windows version of OCaml has a bug in how it parses hexidecimal numbers. It is fixed in OCaml 4.03.0. Until we can switch to 4.03.0, please avoid either hexidecimal notation or Windows.\"),m_=y(\"Duplicate `declare module.exports` statement!\"),y_=y(\"Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module xor they are a CommonJS module.\"),w_=y(\"Getter should have zero parameters\"),g_=y(\"Setter should have exactly one parameter\"),T_=y(\"`import type` or `import typeof`!\"),__=y(\"Imports within a `declare module` body must always be \"),S_=y(\"The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements\"),A_=y(\"Missing comma between import specifiers\"),E_=y(\"Malformed unicode\"),x_=y(\"Unexpected parser state: \"),I_=y(\"Unexpected token \"),C_=[0,[11,y(\"Unexpected token `\"),[2,0,[11,y(\"`. Did you mean `\"),[2,0,[11,y(\"`?\"),0]]]]],y(\"Unexpected token `%s`. Did you mean `%s`?\")],N_=y(\"'\"),L_=y(\"Invalid flags supplied to RegExp constructor '\"),R_=y(\"'\"),P_=y(\"Undefined label '\"),O_=y(\"' has already been declared\"),U_=y(\" '\"),D_=y(\"Expected corresponding JSX closing tag for \"),M_=[0,[11,y(\"Duplicate export for `\"),[2,0,[12,96,0]]],y(\"Duplicate export for `%s`\")],F_=y(\"Parse_error.Error\"),X_=y(\"comments\"),B_=y(Gc),j_=y(\"Program\"),G_=y(\"DebuggerStatement\"),q_=y(\"EmptyStatement\"),Y_=y(yv),J_=y(\"BreakStatement\"),H_=y(yv),W_=y(\"ContinueStatement\"),z_=y(gh),V_=y(\"DeclareExportAllDeclaration\"),$_=y(gh),K_=y(Pd),Q_=y(hs),Z_=y(hb),tS=y(\"DeclareExportDeclaration\"),rS=y(hi),eS=y(Gc),nS=y(Vo),aS=y(\"DeclareModule\"),uS=y(Id),iS=y(\"DeclareModuleExports\"),fS=y(yo),cS=y(Gc),sS=y(\"DoWhileStatement\"),oS=y(yb),vS=y(hs),lS=y(\"ExportDefaultDeclaration\"),bS=y(yb),kS=y(gh),pS=y(\"ExportAllDeclaration\"),hS=y(yb),dS=y(gh),mS=y(Pd),yS=y(hs),wS=y(\"ExportNamedDeclaration\"),gS=y(\"directive\"),TS=y(ji),_S=y(\"ExpressionStatement\"),SS=y(Gc),AS=y(\"update\"),ES=y(yo),xS=y(Ts),IS=y(\"ForStatement\"),CS=y(\"each\"),NS=y(Gc),LS=y(Xc),RS=y(Rl),PS=y(\"ForInStatement\"),OS=y(\"ForAwaitStatement\"),US=y(\"ForOfStatement\"),DS=y(Gc),MS=y(Xc),FS=y(Rl),XS=y(ci),BS=y(Jn),jS=y(yo),GS=y(\"IfStatement\"),qS=y(Su),YS=y(jl),JS=y(qi),HS=y(Bd),WS=y(gh),zS=y(Pd),VS=y(\"ImportDeclaration\"),$S=y(Gc),KS=y(yv),QS=y(\"LabeledStatement\"),ZS=y(_b),tA=y(\"ReturnStatement\"),rA=y(\"cases\"),eA=y(\"discriminant\"),nA=y(\"SwitchStatement\"),aA=y(_b),uA=y(\"ThrowStatement\"),iA=y(\"finalizer\"),fA=y(\"handler\"),cA=y(\"block\"),sA=y(\"TryStatement\"),oA=y(Gc),vA=y(yo),lA=y(\"WhileStatement\"),bA=y(Gc),kA=y(sl),pA=y(\"WithStatement\"),hA=y(\"Super\"),dA=y(\"ThisExpression\"),mA=y(lp),yA=y(\"ArrayExpression\"),wA=y(lo),gA=y(Al),TA=y(ji),_A=y(Jp),SA=y(Ch),AA=y(Cl),EA=y(Gc),xA=y(Qn),IA=y(Vo),CA=y(\"ArrowFunctionExpression\"),NA=y(\"=\"),LA=y(\"+=\"),RA=y(\"-=\"),PA=y(\"*=\"),OA=y(\"**=\"),UA=y(\"/=\"),DA=y(\"%=\"),MA=y(\"<<=\"),FA=y(\">>=\"),XA=y(\">>>=\"),BA=y(\"|=\"),jA=y(\"^=\"),GA=y(\"&=\"),qA=y(Xc),YA=y(Rl),JA=y(Cp),HA=y(\"AssignmentExpression\"),WA=y(\"==\"),zA=y(\"!=\"),VA=y(\"===\"),$A=y(\"!==\"),KA=y(\"<\"),QA=y(\"<=\"),ZA=y(\">\"),tE=y(\">=\"),rE=y(\"<<\"),eE=y(\">>\"),nE=y(\">>>\"),aE=y(Mb),uE=y(xl),iE=y(\"*\"),fE=y(\"**\"),cE=y(\"/\"),sE=y(\"%\"),oE=y(\"|\"),vE=y(\"^\"),lE=y(\"&\"),bE=y(\"in\"),kE=y(wb),pE=y(Xc),hE=y(Rl),dE=y(Cp),mE=y(\"BinaryExpression\"),yE=y(fs),wE=y(Dp),gE=y(Vs),TE=y(\"filter\"),_E=y(\"blocks\"),SE=y(\"ComprehensionExpression\"),AE=y(ci),EE=y(Jn),xE=y(yo),IE=y(\"ConditionalExpression\"),CE=y(\"filter\"),NE=y(\"blocks\"),LE=y(\"GeneratorExpression\"),RE=y(fs),PE=y(\"Import\"),OE=y(Dp),UE=y(Vs),DE=y(\"&&\"),ME=y(\"||\"),FE=y(Xc),XE=y(Rl),BE=y(Cp),jE=y(\"LogicalExpression\"),GE=y(qo),qE=y(mk),YE=y(sl),JE=y(\"MemberExpression\"),HE=y(mk),WE=y(\"meta\"),zE=y(\"MetaProperty\"),VE=y(fs),$E=y(Dp),KE=y(\"NewExpression\"),QE=y(es),ZE=y(\"ObjectExpression\"),tx=y(of),rx=y(\"SequenceExpression\"),ex=y(Id),nx=y(ji),ax=y(\"TypeCastExpression\"),ux=y(_b),ix=y(\"AwaitExpression\"),fx=y(xl),cx=y(Mb),sx=y(\"!\"),ox=y(\"~\"),vx=y(jl),lx=y(tk),bx=y(\"delete\"),kx=y(\"matched above\"),px=y(_b),hx=y(\"prefix\"),dx=y(Cp),mx=y(\"UnaryExpression\"),yx=y(\"--\"),wx=y(\"++\"),gx=y(\"prefix\"),Tx=y(_b),_x=y(Cp),Sx=y(\"UpdateExpression\"),Ax=y(\"delegate\"),Ex=y(_b),xx=y(\"YieldExpression\"),Ix=y(lo),Cx=y(Al),Nx=y(ji),Lx=y(Jp),Rx=y(Ch),Px=y(Cl),Ox=y(Gc),Ux=y(Qn),Dx=y(Vo),Mx=y(\"FunctionDeclaration\"),Fx=y(lo),Xx=y(Al),Bx=y(ji),jx=y(Jp),Gx=y(Ch),qx=y(Cl),Yx=y(Gc),Jx=y(Qn),Hx=y(Vo),Wx=y(\"FunctionExpression\"),zx=y(ah),Vx=y(Id),$x=y(Np),Kx=y(Pn),Qx=y(ah),Zx=y(Id),tI=y(Np),rI=y(Pn),eI=y(Jn),nI=y(yo),aI=y(\"SwitchCase\"),uI=y(Gc),iI=y(\"param\"),fI=y(\"CatchClause\"),cI=y(Gc),sI=y(\"BlockStatement\"),oI=y(Vo),vI=y(\"DeclareVariable\"),lI=y(Jp),bI=y(Vo),kI=y(\"DeclareFunction\"),pI=y(Xd),hI=y(Gc),dI=y(lo),mI=y(Vo),yI=y(\"DeclareClass\"),wI=y(qi),gI=y(Su),TI=y(kf),_I=y(\"ExportNamespaceSpecifier\"),SI=y(Xc),AI=y(lo),EI=y(Vo),xI=y(\"TypeAlias\"),II=y(Ta),CI=y(ti),NI=y(Bv),LI=y(lo),RI=y(co),PI=y(Gc),OI=y(Vo),UI=y(\"ClassDeclaration\"),DI=y(Ta),MI=y(ti),FI=y(Bv),XI=y(lo),BI=y(co),jI=y(Gc),GI=y(Vo),qI=y(\"ClassExpression\"),YI=y(lo),JI=y(Vo),HI=y(\"ClassImplements\"),WI=y(Gc),zI=y(\"ClassBody\"),VI=y(ua),$I=y(Oa),KI=y(lf),QI=y(Uc),ZI=y(Ta),tC=y(qo),rC=y(ps),eC=y(hi),nC=y(qi),aC=y(pd),uC=y(\"MethodDefinition\"),iC=y(Fn),fC=y(ps),cC=y(qo),sC=y(Id),oC=y(qi),vC=y(pd),lC=y(\"ClassProperty\"),bC=y(Xd),kC=y(Gc),pC=y(lo),hC=y(Vo),dC=y(\"InterfaceDeclaration\"),mC=y(lo),yC=y(Vo),wC=y(\"InterfaceExtends\"),gC=y(Id),TC=y(es),_C=y(\"ObjectPattern\"),SC=y(Id),AC=y(lp),EC=y(\"ArrayPattern\"),xC=y(Xc),IC=y(Rl),CC=y(\"AssignmentPattern\"),NC=y(_b),LC=y(md),RC=y(_b),PC=y(md),OC=y(Ts),UC=y(lf),DC=y(Uc),MC=y(qo),FC=y(Av),XC=y(Oa),BC=y(hi),jC=y(qi),GC=y(pd),qC=y(Ku),YC=y(_b),JC=y(\"SpreadProperty\"),HC=y(qo),WC=y(Av),zC=y(Oa),VC=y(hi),$C=y(qi),KC=y(pd),QC=y(Ku),ZC=y(_b),tN=y(\"RestProperty\"),rN=y(_b),eN=y(\"SpreadElement\"),nN=y(\"each\"),aN=y(Xc),uN=y(Rl),iN=y(\"ComprehensionBlock\"),fN=y(\"regex\"),cN=y(ui),sN=y(qi),oN=y(ui),vN=y(qi),lN=y(\"Literal\"),bN=y(of),kN=y(\"quasis\"),pN=y(\"TemplateLiteral\"),hN=y(\"tail\"),dN=y(qi),mN=y(\"TemplateElement\"),yN=y(\"quasi\"),wN=y(\"tag\"),gN=y(\"TaggedTemplateExpression\"),TN=y(\"var\"),_N=y(\"let\"),SN=y(\"const\"),AN=y(hi),EN=y(\"declarations\"),xN=y(\"VariableDeclaration\"),IN=y(Ts),CN=y(Vo),NN=y(\"VariableDeclarator\"),LN=y(\"AnyTypeAnnotation\"),RN=y(\"MixedTypeAnnotation\"),PN=y(\"EmptyTypeAnnotation\"),ON=y(\"VoidTypeAnnotation\"),UN=y(\"NullLiteralTypeAnnotation\"),DN=y(\"NumberTypeAnnotation\"),MN=y(\"StringTypeAnnotation\"),FN=y(\"BooleanTypeAnnotation\"),XN=y(Id),BN=y(\"NullableTypeAnnotation\"),jN=y(lo),GN=y(\"rest\"),qN=y(Al),YN=y(Qn),JN=y(\"FunctionTypeAnnotation\"),HN=y(ah),WN=y(Id),zN=y(Np),VN=y(\"FunctionTypeParam\"),$N=[0,0,0,0],KN=y(\"callProperties\"),QN=y(\"indexers\"),ZN=y(es),tL=y(\"exact\"),rL=y(\"ObjectTypeAnnotation\"),eL=y(\"There should not be computed object type property keys\"),nL=y(Ts),aL=y(lf),uL=y(Uc),iL=y(hi),fL=y(Fn),cL=y(ps),sL=y(ah),oL=y(qi),vL=y(pd),lL=y(\"ObjectTypeProperty\"),bL=y(_b),kL=y(\"ObjectTypeSpreadProperty\"),pL=y(Fn),hL=y(ps),dL=y(qi),mL=y(pd),yL=y(Vo),wL=y(\"ObjectTypeIndexer\"),gL=y(ps),TL=y(qi),_L=y(\"ObjectTypeCallProperty\"),SL=y(\"elementType\"),AL=y(\"ArrayTypeAnnotation\"),EL=y(Vo),xL=y(\"qualification\"),IL=y(\"QualifiedTypeIdentifier\"),CL=y(lo),NL=y(Vo),LL=y(\"GenericTypeAnnotation\"),RL=y(Wp),PL=y(\"UnionTypeAnnotation\"),OL=y(Wp),UL=y(\"IntersectionTypeAnnotation\"),DL=y(_b),ML=y(\"TypeofTypeAnnotation\"),FL=y(Wp),XL=y(\"TupleTypeAnnotation\"),BL=y(ui),jL=y(qi),GL=y(\"StringLiteralTypeAnnotation\"),qL=y(ui),YL=y(qi),JL=y(\"NumberLiteralTypeAnnotation\"),HL=y(ui),WL=y(qi),zL=y(\"BooleanLiteralTypeAnnotation\"),VL=y(\"ExistsTypeAnnotation\"),$L=y(Id),KL=y(\"TypeAnnotation\"),QL=y(Qn),ZL=y(\"TypeParameterDeclaration\"),tR=y(hb),rR=y(Fn),eR=y(\"bound\"),nR=y(Np),aR=y(\"TypeParameter\"),uR=y(Qn),iR=y(\"TypeParameterInstantiation\"),fR=y(\"children\"),cR=y(\"closingElement\"),sR=y(\"openingElement\"),oR=y(\"JSXElement\"),vR=y(\"selfClosing\"),lR=y(\"attributes\"),bR=y(Np),kR=y(\"JSXOpeningElement\"),pR=y(Np),hR=y(\"JSXClosingElement\"),dR=y(qi),mR=y(Np),yR=y(\"JSXAttribute\"),wR=y(_b),gR=y(\"JSXSpreadAttribute\"),TR=y(\"JSXEmptyExpression\"),_R=y(ji),SR=y(\"JSXExpressionContainer\"),AR=y(ui),ER=y(qi),xR=y(\"JSXText\"),IR=y(mk),CR=y(sl),NR=y(\"JSXMemberExpression\"),LR=y(Np),RR=y(\"namespace\"),PR=y(\"JSXNamespacedName\"),OR=y(Np),UR=y(\"JSXIdentifier\"),DR=y(kf),MR=y(Qk),FR=y(\"ExportSpecifier\"),XR=y(Qk),BR=y(\"ImportDefaultSpecifier\"),jR=y(Qk),GR=y(\"ImportNamespaceSpecifier\"),qR=y(Bd),YR=y(Qk),JR=y(\"imported\"),HR=y(\"ImportSpecifier\"),WR=y(\"Block\"),zR=y(\"Line\"),VR=y(qi),$R=y(qi),KR=y(\"DeclaredPredicate\"),QR=y(\"InferredPredicate\"),ZR=y(\"range\"),tP=y(\"loc\"),rP=y(Su),eP=[0,1,0],nP=y(\"T_IDENTIFIER\"),aP=y(\"T_LCURLY\"),uP=y(\"T_RCURLY\"),iP=y(\"T_LCURLYBAR\"),fP=y(\"T_RCURLYBAR\"),cP=y(\"T_LPAREN\"),sP=y(\"T_RPAREN\"),oP=y(\"T_LBRACKET\"),vP=y(\"T_RBRACKET\"),lP=y(\"T_SEMICOLON\"),bP=y(\"T_COMMA\"),kP=y(\"T_PERIOD\"),pP=y(\"T_ARROW\"),hP=y(\"T_ELLIPSIS\"),dP=y(\"T_AT\"),mP=y(\"T_FUNCTION\"),yP=y(\"T_IF\"),wP=y(\"T_IN\"),gP=y(\"T_INSTANCEOF\"),TP=y(\"T_RETURN\"),_P=y(\"T_SWITCH\"),SP=y(\"T_THIS\"),AP=y(\"T_THROW\"),EP=y(\"T_TRY\"),xP=y(\"T_VAR\"),IP=y(\"T_WHILE\"),CP=y(\"T_WITH\"),NP=y(\"T_CONST\"),LP=y(\"T_LET\"),RP=y(\"T_NULL\"),PP=y(\"T_FALSE\"),OP=y(\"T_TRUE\"),UP=y(\"T_BREAK\"),DP=y(\"T_CASE\"),MP=y(\"T_CATCH\"),FP=y(\"T_CONTINUE\"),XP=y(\"T_DEFAULT\"),BP=y(\"T_DO\"),jP=y(\"T_FINALLY\"),GP=y(\"T_FOR\"),qP=y(\"T_CLASS\"),YP=y(\"T_EXTENDS\"),JP=y(\"T_STATIC\"),HP=y(\"T_ELSE\"),WP=y(\"T_NEW\"),zP=y(\"T_DELETE\"),VP=y(\"T_TYPEOF\"),$P=y(\"T_VOID\"),KP=y(\"T_ENUM\"),QP=y(\"T_EXPORT\"),ZP=y(\"T_IMPORT\"),tO=y(\"T_SUPER\"),rO=y(\"T_IMPLEMENTS\"),eO=y(\"T_INTERFACE\"),nO=y(\"T_PACKAGE\"),aO=y(\"T_PRIVATE\"),uO=y(\"T_PROTECTED\"),iO=y(\"T_PUBLIC\"),fO=y(\"T_YIELD\"),cO=y(\"T_DEBUGGER\"),sO=y(\"T_DECLARE\"),oO=y(\"T_TYPE\"),vO=y(\"T_OF\"),lO=y(\"T_ASYNC\"),bO=y(\"T_AWAIT\"),kO=y(\"T_CHECKS\"),pO=y(\"T_RSHIFT3_ASSIGN\"),hO=y(\"T_RSHIFT_ASSIGN\"),dO=y(\"T_LSHIFT_ASSIGN\"),mO=y(\"T_BIT_XOR_ASSIGN\"),yO=y(\"T_BIT_OR_ASSIGN\"),wO=y(\"T_BIT_AND_ASSIGN\"),gO=y(\"T_MOD_ASSIGN\"),TO=y(\"T_DIV_ASSIGN\"),_O=y(\"T_MULT_ASSIGN\"),SO=y(\"T_EXP_ASSIGN\"),AO=y(\"T_MINUS_ASSIGN\"),EO=y(\"T_PLUS_ASSIGN\"),xO=y(\"T_ASSIGN\"),IO=y(\"T_PLING\"),CO=y(\"T_COLON\"),NO=y(\"T_OR\"),LO=y(\"T_AND\"),RO=y(\"T_BIT_OR\"),PO=y(\"T_BIT_XOR\"),OO=y(\"T_BIT_AND\"),UO=y(\"T_EQUAL\"),DO=y(\"T_NOT_EQUAL\"),MO=y(\"T_STRICT_EQUAL\"),FO=y(\"T_STRICT_NOT_EQUAL\"),XO=y(\"T_LESS_THAN_EQUAL\"),BO=y(\"T_GREATER_THAN_EQUAL\"),jO=y(\"T_LESS_THAN\"),GO=y(\"T_GREATER_THAN\"),qO=y(\"T_LSHIFT\"),YO=y(\"T_RSHIFT\"),JO=y(\"T_RSHIFT3\"),HO=y(\"T_PLUS\"),WO=y(\"T_MINUS\"),zO=y(\"T_DIV\"),VO=y(\"T_MULT\"),$O=y(\"T_EXP\"),KO=y(\"T_MOD\"),QO=y(\"T_NOT\"),ZO=y(\"T_BIT_NOT\"),tU=y(\"T_INCR\"),rU=y(\"T_DECR\"),eU=y(\"T_ERROR\"),nU=y(\"T_EOF\"),aU=y(\"T_JSX_IDENTIFIER\"),uU=y(\"T_ANY_TYPE\"),iU=y(\"T_MIXED_TYPE\"),fU=y(\"T_EMPTY_TYPE\"),cU=y(\"T_BOOLEAN_TYPE\"),sU=y(\"T_NUMBER_TYPE\"),oU=y(\"T_STRING_TYPE\"),vU=y(\"T_VOID_TYPE\"),lU=y(\"T_NUMBER\"),bU=y(\"T_STRING\"),kU=y(\"T_TEMPLATE_PART\"),pU=y(\"T_REGEXP\"),hU=y(\"T_JSX_TEXT\"),dU=y(\"T_NUMBER_SINGLETON_TYPE\"),mU=y(Yk),yU=[0,3],wU=y(Yk),gU=[0,3],TU=y(Yk),_U=[0,3],SU=y(Yk),AU=[0,1],EU=y(Yk),xU=[0,2],IU=y(Yk),CU=[0,0],NU=y(Yk),LU=y(\":\"),RU=y(\":\"),PU=y(Pi),OU=[0,0],UU=[0,2],DU=[0,1],MU=[0,3],FU=[0,3],XU=[0,3],BU=y(Yk),jU=y(Yk),GU=y(Yk),qU=y(Yk),YU=y(Yk),JU=y(Yk),HU=y(Yk),WU=y(\":\"),zU=y(\":\"),VU=y(Pi),$U=y(Yk),KU=y(\"\\\\\"),QU=y(Yk),ZU=y(\"\\\\\"),tD=y(Nv),rD=y(ha),eD=y(ha),nD=y(ha),aD=y(eh),uD=y(eh),iD=y(\"*-/\"),fD=y(\"*/\"),cD=y(\"*-/\"),sD=y(Yk),oD=y(Yk),vD=y(Yk),lD=y(mb),bD=y(mb),kD=y(mb),pD=y(mb),hD=y(Yk),dD=y(\"\\\\\\\\\"),mD=y(Yk),yD=y(\"'\"),wD=y(Yk),gD=y(Yk),TD=y(\"'\"),_D=y('\"'),SD=y(\"<\"),AD=y(\"{\"),ED=y(eh),xD=y(\"iexcl\"),ID=y(\"aelig\"),CD=y(\"Nu\"),ND=y(\"Eacute\"),LD=y(\"Atilde\"),RD=y(\"'int'\"),PD=y(\"AElig\"),OD=y(\"Aacute\"),UD=y(\"Acirc\"),DD=y(\"Agrave\"),MD=y(\"Alpha\"),FD=y(\"Aring\"),XD=[0,197],BD=[0,913],jD=[0,Io],GD=[0,194],qD=[0,193],YD=[0,198],JD=[0,8747],HD=y(\"Auml\"),WD=y(\"Beta\"),zD=y(\"Ccedil\"),VD=y(\"Chi\"),$D=y(\"Dagger\"),KD=y(\"Delta\"),QD=y(\"ETH\"),ZD=[0,208],tM=[0,916],rM=[0,8225],eM=[0,935],nM=[0,199],aM=[0,914],uM=[0,196],iM=[0,195],fM=y(\"Icirc\"),cM=y(\"Ecirc\"),sM=y(\"Egrave\"),oM=y(\"Epsilon\"),vM=y(\"Eta\"),lM=y(\"Euml\"),bM=y(\"Gamma\"),kM=y(\"Iacute\"),pM=[0,205],hM=[0,915],dM=[0,203],mM=[0,919],yM=[0,917],wM=[0,200],gM=[0,202],TM=y(\"Igrave\"),_M=y(\"Iota\"),SM=y(\"Iuml\"),AM=y(\"Kappa\"),EM=y(\"Lambda\"),xM=y(\"Mu\"),IM=y(\"Ntilde\"),CM=[0,209],NM=[0,924],LM=[0,923],RM=[0,922],PM=[0,207],OM=[0,921],UM=[0,204],DM=[0,206],MM=[0,201],FM=y(\"Sigma\"),XM=y(\"Otilde\"),BM=y(\"OElig\"),jM=y(\"Oacute\"),GM=y(\"Ocirc\"),qM=y(\"Ograve\"),YM=y(\"Omega\"),JM=y(\"Omicron\"),HM=y(\"Oslash\"),WM=[0,216],zM=[0,927],VM=[0,937],$M=[0,210],KM=[0,212],QM=[0,211],ZM=[0,338],tF=y(\"Ouml\"),rF=y(\"Phi\"),eF=y(\"Pi\"),nF=y(\"Prime\"),aF=y(\"Psi\"),uF=y(\"Rho\"),iF=y(\"Scaron\"),fF=[0,352],cF=[0,929],sF=[0,936],oF=[0,8243],vF=[0,928],lF=[0,934],bF=[0,214],kF=[0,213],pF=y(\"Uuml\"),hF=y(\"THORN\"),dF=y(\"Tau\"),mF=y(\"Theta\"),yF=y(\"Uacute\"),wF=y(\"Ucirc\"),gF=y(\"Ugrave\"),TF=y(\"Upsilon\"),_F=[0,933],SF=[0,217],AF=[0,219],EF=[0,218],xF=[0,920],IF=[0,932],CF=[0,222],NF=y(\"Xi\"),LF=y(\"Yacute\"),RF=y(\"Yuml\"),PF=y(\"Zeta\"),OF=y(\"aacute\"),UF=y(\"acirc\"),DF=y(\"acute\"),MF=[0,180],FF=[0,226],XF=[0,225],BF=[0,918],jF=[0,376],GF=[0,221],qF=[0,926],YF=[0,220],JF=[0,931],HF=[0,925],WF=y(\"delta\"),zF=y(\"cap\"),VF=y(\"aring\"),$F=y(\"agrave\"),KF=y(\"alefsym\"),QF=y(\"alpha\"),ZF=y(\"amp\"),tX=y(\"and\"),rX=y(\"ang\"),eX=y(\"apos\"),nX=[0,39],aX=[0,8736],uX=[0,8743],iX=[0,38],fX=[0,945],cX=[0,8501],sX=[0,Jl],oX=y(\"asymp\"),vX=y(\"atilde\"),lX=y(\"auml\"),bX=y(\"bdquo\"),kX=y(\"beta\"),pX=y(\"brvbar\"),hX=y(\"bull\"),dX=[0,8226],mX=[0,166],yX=[0,946],wX=[0,8222],gX=[0,228],TX=[0,227],_X=[0,8776],SX=[0,229],AX=y(\"copy\"),EX=y(\"ccedil\"),xX=y(\"cedil\"),IX=y(\"cent\"),CX=y(\"chi\"),NX=y(\"circ\"),LX=y(\"clubs\"),RX=y(\"cong\"),PX=[0,8773],OX=[0,9827],UX=[0,710],DX=[0,967],MX=[0,162],FX=[0,184],XX=[0,231],BX=y(\"crarr\"),jX=y(\"cup\"),GX=y(\"curren\"),qX=y(\"dArr\"),YX=y(\"dagger\"),JX=y(\"darr\"),HX=y(\"deg\"),WX=[0,176],zX=[0,8595],VX=[0,8224],$X=[0,8659],KX=[0,164],QX=[0,8746],ZX=[0,8629],tB=[0,169],rB=[0,8745],eB=y(\"fnof\"),nB=y(\"ensp\"),aB=y(\"diams\"),uB=y(\"divide\"),iB=y(\"eacute\"),fB=y(\"ecirc\"),cB=y(\"egrave\"),sB=y(\"empty\"),oB=y(\"emsp\"),vB=[0,8195],lB=[0,8709],bB=[0,232],kB=[0,234],pB=[0,233],hB=[0,247],dB=[0,9830],mB=y(\"epsilon\"),yB=y(\"equiv\"),wB=y(\"eta\"),gB=y(\"eth\"),TB=y(\"euml\"),_B=y(\"euro\"),SB=y(\"exist\"),AB=[0,8707],EB=[0,8364],xB=[0,235],IB=[0,Kp],CB=[0,951],NB=[0,8801],LB=[0,949],RB=[0,8194],PB=y(\"gt\"),OB=y(\"forall\"),UB=y(\"frac12\"),DB=y(\"frac14\"),MB=y(\"frac34\"),FB=y(\"frasl\"),XB=y(\"gamma\"),BB=y(\"ge\"),jB=[0,8805],GB=[0,947],qB=[0,8260],YB=[0,190],JB=[0,188],HB=[0,189],WB=[0,8704],zB=y(\"hArr\"),VB=y(\"harr\"),$B=y(\"hearts\"),KB=y(\"hellip\"),QB=y(\"iacute\"),ZB=y(\"icirc\"),tj=[0,238],rj=[0,237],ej=[0,8230],nj=[0,9829],aj=[0,8596],uj=[0,8660],ij=[0,62],fj=[0,402],cj=[0,948],sj=[0,230],oj=y(\"prime\"),vj=y(\"ndash\"),lj=y(\"le\"),bj=y(\"kappa\"),kj=y(\"igrave\"),pj=y(\"image\"),hj=y(\"infin\"),dj=y(\"iota\"),mj=y(\"iquest\"),yj=y(\"isin\"),wj=y(\"iuml\"),gj=[0,239],Tj=[0,8712],_j=[0,191],Sj=[0,953],Aj=[0,8734],Ej=[0,8465],xj=[0,236],Ij=y(\"lArr\"),Cj=y(\"lambda\"),Nj=y(\"lang\"),Lj=y(\"laquo\"),Rj=y(\"larr\"),Pj=y(\"lceil\"),Oj=y(\"ldquo\"),Uj=[0,8220],Dj=[0,8968],Mj=[0,8592],Fj=[0,171],Xj=[0,10216],Bj=[0,955],jj=[0,8656],Gj=[0,954],qj=y(\"macr\"),Yj=y(\"lfloor\"),Jj=y(\"lowast\"),Hj=y(\"loz\"),Wj=y(\"lrm\"),zj=y(\"lsaquo\"),Vj=y(\"lsquo\"),$j=y(\"lt\"),Kj=[0,60],Qj=[0,8216],Zj=[0,8249],tG=[0,8206],rG=[0,9674],eG=[0,8727],nG=[0,8970],aG=y(\"mdash\"),uG=y(\"micro\"),iG=y(\"middot\"),fG=y(Uo),cG=y(\"mu\"),sG=y(\"nabla\"),oG=y(\"nbsp\"),vG=[0,160],lG=[0,8711],bG=[0,956],kG=[0,8722],pG=[0,183],hG=[0,181],dG=[0,8212],mG=[0,175],yG=[0,8804],wG=y(\"or\"),gG=y(\"oacute\"),TG=y(\"ne\"),_G=y(\"ni\"),SG=y(\"not\"),AG=y(\"notin\"),EG=y(\"nsub\"),xG=y(\"ntilde\"),IG=y(\"nu\"),CG=[0,957],NG=[0,241],LG=[0,8836],RG=[0,8713],PG=[0,172],OG=[0,8715],UG=[0,8800],DG=y(\"ocirc\"),MG=y(\"oelig\"),FG=y(\"ograve\"),XG=y(\"oline\"),BG=y(\"omega\"),jG=y(\"omicron\"),GG=y(\"oplus\"),qG=[0,8853],YG=[0,959],JG=[0,969],HG=[0,Wu],WG=[0,242],zG=[0,339],VG=[0,244],$G=[0,243],KG=y(\"part\"),QG=y(\"ordf\"),ZG=y(\"ordm\"),tq=y(\"oslash\"),rq=y(\"otilde\"),eq=y(\"otimes\"),nq=y(\"ouml\"),aq=y(\"para\"),uq=[0,182],iq=[0,ls],fq=[0,8855],cq=[0,Mo],sq=[0,Ov],oq=[0,186],vq=[0,170],lq=y(\"permil\"),bq=y(\"perp\"),kq=y(\"phi\"),pq=y(\"pi\"),hq=y(\"piv\"),dq=y(\"plusmn\"),mq=y(\"pound\"),yq=[0,163],wq=[0,177],gq=[0,982],Tq=[0,960],_q=[0,966],Sq=[0,8869],Aq=[0,8240],Eq=[0,8706],xq=[0,8744],Iq=[0,8211],Cq=y(\"sup1\"),Nq=y(\"rlm\"),Lq=y(\"raquo\"),Rq=y(\"prod\"),Pq=y(\"prop\"),Oq=y(\"psi\"),Uq=y(\"quot\"),Dq=y(\"rArr\"),Mq=y(\"radic\"),Fq=y(\"rang\"),Xq=[0,10217],Bq=[0,8730],jq=[0,8658],Gq=[0,34],qq=[0,968],Yq=[0,8733],Jq=[0,8719],Hq=y(\"rarr\"),Wq=y(\"rceil\"),zq=y(\"rdquo\"),Vq=y(\"real\"),$q=y(\"reg\"),Kq=y(\"rfloor\"),Qq=y(\"rho\"),Zq=[0,961],tY=[0,8971],rY=[0,174],eY=[0,8476],nY=[0,8221],aY=[0,8969],uY=[0,8594],iY=[0,187],fY=y(\"sigma\"),cY=y(\"rsaquo\"),sY=y(\"rsquo\"),oY=y(\"sbquo\"),vY=y(\"scaron\"),lY=y(\"sdot\"),bY=y(\"sect\"),kY=y(\"shy\"),pY=[0,173],hY=[0,167],dY=[0,8901],mY=[0,353],yY=[0,8218],wY=[0,8217],gY=[0,8250],TY=y(\"sigmaf\"),_Y=y(\"sim\"),SY=y(\"spades\"),AY=y(\"sub\"),EY=y(\"sube\"),xY=y(\"sum\"),IY=y(\"sup\"),CY=[0,8835],NY=[0,8721],LY=[0,8838],RY=[0,8834],PY=[0,9824],OY=[0,8764],UY=[0,962],DY=[0,963],MY=[0,8207],FY=y(\"uarr\"),XY=y(\"thetasym\"),BY=y(\"sup2\"),jY=y(\"sup3\"),GY=y(\"supe\"),qY=y(\"szlig\"),YY=y(\"tau\"),JY=y(\"there4\"),HY=y(\"theta\"),WY=[0,952],zY=[0,8756],VY=[0,964],$Y=[0,223],KY=[0,8839],QY=[0,179],ZY=[0,178],tJ=y(\"thinsp\"),rJ=y(\"thorn\"),eJ=y(\"tilde\"),nJ=y(\"times\"),aJ=y(\"trade\"),uJ=y(\"uArr\"),iJ=y(\"uacute\"),fJ=[0,Ql],cJ=[0,8657],sJ=[0,8482],oJ=[0,215],vJ=[0,732],lJ=[0,Cn],bJ=[0,8201],kJ=[0,977],pJ=y(\"xi\"),hJ=y(\"ucirc\"),dJ=y(\"ugrave\"),mJ=y(\"uml\"),yJ=y(\"upsih\"),wJ=y(\"upsilon\"),gJ=y(\"uuml\"),TJ=y(\"weierp\"),_J=[0,8472],SJ=[0,bd],AJ=[0,965],EJ=[0,978],xJ=[0,168],IJ=[0,249],CJ=[0,251],NJ=y(\"yacute\"),LJ=y(\"yen\"),RJ=y(\"yuml\"),PJ=y(\"zeta\"),OJ=y(\"zwj\"),UJ=y(\"zwnj\"),DJ=[0,8204],MJ=[0,Il],FJ=[0,950],XJ=[0,lh],BJ=[0,165],jJ=[0,Sl],GJ=[0,958],qJ=[0,8593],YJ=[0,185],JJ=[0,8242],HJ=[0,161],WJ=y(\";\"),zJ=y(\"&\"),VJ=y(Yk),$J=y(\"}\"),KJ=[0,y(mb),y(mb),y(mb)],QJ=y(Yk),ZJ=y(\"${\"),tH=y(\"\\r\\n\"),rH=y(\"\\r\\n\"),eH=y(\"\\n\"),nH=y(ha),aH=y(Xl),uH=y(Hc),iH=y(au),fH=(y(\"src/parser/lexer.ml\"),y(mb),[1,y(\"ILLEGAL\")]),cH=y(\"/\"),sH=y(\"/\"),oH=y(\"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0002\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0002\"),vH=y(\"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0001\u0003\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0004\"),lH=y(\"\u0001\\0\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0003\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0003\"),bH=y(\"\u0001\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0002\u0002\u0004\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0005\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0006\u0002\u0002\u0002\u0007\"),kH=y(\"\u0001\\0\\0\\0\\0\u0002\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0003\"),pH=y(\"\u0001\u0002\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\0\\0\\0\\0\\0\\0\\0\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\0\\0\\0\\0\u0002\\0\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\"),hH=y(\"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\"),dH=y(\"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0002\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\"),mH=y(\"\u0001\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0002\u0002\u0004\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0005\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\\b\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\n\u0002\u0002\u0002\\v\u0002\\f\\r\u000e\u0002\u000f\"),yH=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0002\"),wH=y(\"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0003\u0002\u0002\u0004\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0006\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\"),gH=y(\"\u0001\\0\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\"),TH=y(\"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0002\"),_H=y(\"\u0001\\0\\0\\0\\0\\0\\0\u0002\\0\u0002\\0\\0\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\"),SH=y(\"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0002\"),AH=y(\"\u0001\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0004\"),EH=y(\"\u0001\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0002\u0002\u0004\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0005\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0006\"),xH=y(\"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0001\u0003\"),IH=y(\"\u0001\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0002\u0002\u0004\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0005\u0002\u0002\u0002\u0006\u0005\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0005\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0005\"),CH=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0003\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0003\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\"),NH=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\"),LH=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0002\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\"),RH=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\"),PH=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0002\\0\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0004\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0004\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\"),OH=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\0\\0\\0\\0\\0\\0\\0\u0002\u0002\u0002\u0002\u0002\u0002\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\u0002\u0002\u0002\u0002\u0002\u0002\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\"),UH=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\"),DH=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\"),MH=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0002\\0\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0004\u0004\\0\\0\\0\\0\\0\\0\\0\u0001\u0005\u0001\u0001\u0006\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0007\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\b\u0001\u0001\\0\\0\\0\\0\u0001\\0\u0001\u0005\u0001\u0001\u0006\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0007\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\b\u0001\u0001\"),FH=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0002\u0002\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\"),XH=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0002\\0\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0004\u0004\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0005\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0005\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\"),BH=y(\"\u0001\\0\u0001\\0\\0\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\"),jH=y('\u0001\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0004\u0003\u0003\u0005\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0006\u0007\\b\\t\\n\\v\u0007\\f\\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0015\u0015\u0015\u0015\u0015\u0015\u0015\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u001d\u001e\u001f \\t!\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\"#$%\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\u0002\\t\\t\u0002\u0002\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\u0002\\t\\t\\t\u0002\\t\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\u0002\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\\t\\t\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\u0002\\t\u0002\u0002\u0002\\t\\t\\t\\t\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\u0002\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\\t\\t\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\u0002\\t\\t\u0002\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\u0002\\t\\t\\t\\t\\t\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\\t\\t\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\u0002\\t\\t\\t\\t\\t\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\u0002\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\u0002\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\\t\\t\\t\u0002\\t\\t\\t\\t\u0002\u0002\u0002\\t\\t\u0002\\t\u0002\\t\\t\u0002\u0002\u0002\\t\\t\u0002\u0002\u0002\\t\\t\\t\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\\t\\t\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\\t\\t\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\u0002\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\u0002\\t\u0002\u0002\\t\\t\u0002\\t\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\u0002\\t\u0002\\t\u0002\u0002\\t\\t\u0002\\t\\t\\t\\t\u0002\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\u0002\u0002\\t\\t\\t\\t\\t\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\\t\\t\\t\\t\u0002\u0002\u0002\\t\u0002\u0002\u0002\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\u0002\u0002\u0002\u0002\u0002\\t\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\\t\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\u0002\\t\u0002\\t\\t\\t\\t\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\\t\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\\t\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\u0002\\t\u0002\\t\\t\\t\\t\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\\t\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0003\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\u0002\\t\\t\\t\\t\u0002\u0002\u0002\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\\t\\t\\t\\t\\t\\t\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\\t\\t\\t\\t\\t\\t\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\u0002\\t\u0002\\t\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\u0002\\t\u0002\u0002\u0002\\t\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\\t\\t\\t\\t\u0002\u0002\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002\u0002\u0002\\t\\t\\t\u0002\\t\\t\\t\\t\\t\\t\\t\u0002\u0002\u0002'),GH=y(\"\u0001\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0004\u0003\u0003\u0005\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0002\u0006\u0002\u0007\u0002\u0002\u0006\u0002\u0002\u0002\u0002\u0002\u0002\\b\\t\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\n\u0002\\v\\f\\r\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u000e\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0007\u0007\u0007\u0002\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0002\u0007\u0007\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0007\u0002\u0007\u0002\u0007\u0007\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0007\u0002\u0002\u0007\u0007\u0002\u0007\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0002\u0007\u0002\u0007\u0002\u0002\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0003\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0002\u0007\u0002\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0002\u0002\u0002\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\"),qH=y(\"\u0001\\0\\0\\0\\0\u0002\"),YH=y(\"\u0001\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0002\u0002\u0004\"),JH=y(\"\u0001\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0004\u0003\u0003\u0005\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0002\u0006\u0002\u0007\\b\\t\u0006\\n\\v\\f\\r\u000e\u000f\u0010\u0011\u0012\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u001a\u0002\u001b\u0002\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u001c\u0007\u0007\u0007\u0007\u0007\u0007\u001d\u001e\u001f\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0007\u0007\u0007\u0002\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0002\u0007\u0007\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0007\u0002\u0007\u0002\u0007\u0007\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0007\u0002\u0002\u0007\u0007\u0002\u0007\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0002\u0007\u0002\u0007\u0002\u0002\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0003\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0002\u0007\u0002\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0007\u0002\u0002\u0002\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\u0002\u0002\u0007\u0007\u0007\u0002\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0002\u0002\u0002\"),HH=y(\"\u0001\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0004\u0003\u0003\u0005\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0006\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\"),WH=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\\0\u0001\\0\u0001\u0001\\0\\0\\0\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\\0\\0\u0001\u0001\\0\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\\0\u0001\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\"),zH=y(\"\u0001\\0\\0\u0002\"),VH=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\\0\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\\0\u0001\\0\u0001\u0001\\0\\0\\0\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\\0\\0\u0001\u0001\\0\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\\0\u0001\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\\0\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\"),$H=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\\0\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\\0\u0001\\0\u0001\u0001\\0\\0\\0\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\\0\\0\u0001\u0001\\0\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\\0\u0001\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\\0\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\"),KH=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\\0\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\\0\u0001\\0\u0001\u0001\\0\\0\\0\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\\0\\0\u0001\u0001\\0\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\\0\u0001\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\\0\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\"),QH=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\\0\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\\0\u0001\\0\u0001\u0001\\0\\0\\0\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\\0\\0\u0001\u0001\\0\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\\0\u0001\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\\0\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\"),ZH=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\\0\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\\0\u0001\\0\u0001\u0001\\0\\0\\0\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\\0\\0\u0001\u0001\\0\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\\0\u0001\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\\0\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\"),tW=y(\"\u0001\\0\u0002\"),rW=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0002\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\\0\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\\0\u0001\\0\u0001\u0001\\0\\0\\0\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\\0\\0\u0001\u0001\\0\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\\0\u0001\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\\0\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\"),eW=y(\"\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\"),nW=y(\"\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0002\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\"),aW=y(\"\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0002\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0003\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\"),uW=y(\"\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0002\\0\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\"),iW=y(\"\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\"),fW=y(\"\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0002\\0\u0003\u0004\u0004\u0004\u0004\u0004\u0004\u0004\u0004\u0004\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\"),cW=y(\"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0002\"),sW=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\\0\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\\0\u0001\\0\u0001\u0001\\0\\0\\0\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\u0001\\0\\0\u0001\u0001\\0\u0001\\0\\0\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\\0\u0001\\0\\0\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\u0001\\0\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\\0\\0\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\\0\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\\0\\0\\0\\0\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\u0001\\0\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\u0001\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\u0001\u0001\u0001\u0001\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\u0001\u0001\u0001\\0\u0001\u0001\u0001\u0001\u0001\u0001\u0001\"),oW=y(\"\u0001\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0004\u0002\u0002\u0002\u0002\u0004\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0005\"),vW=y(\"\u0001\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0002\u0002\u0004\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0005\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0006\u0007\"),lW=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0002\"),bW=y(\"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0001\u0001\u0001\u0001\u0001\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0002\"),kW=y(\"\u0001\u0002\\0\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\"),pW=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0002\"),hW=y(\"\u0001\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\u0002\"),dW=y(\"Lexer.FloatOfString.No_good\"),mW=Ut([[0,y(Pk),15],[0,y(\"if\"),16],[0,y(\"in\"),17],[0,y(wb),18],[0,y(\"return\"),19],[0,y(\"switch\"),20],[0,y(\"this\"),21],[0,y(\"throw\"),22],[0,y(\"try\"),23],[0,y(\"var\"),24],[0,y(\"while\"),25],[0,y(\"with\"),26],[0,y(\"const\"),27],[0,y(\"let\"),28],[0,y(ff),29],[0,y(ko),30],[0,y(Ko),31],[0,y(\"break\"),32],[0,y(\"case\"),33],[0,y(\"catch\"),34],[0,y(\"continue\"),35],[0,y(hb),36],[0,y(\"do\"),37],[0,y(\"finally\"),38],[0,y(\"for\"),39],[0,y(\"class\"),40],[0,y(Xd),41],[0,y(ps),42],[0,y(\"else\"),43],[0,y(\"new\"),44],[0,y(\"delete\"),45],[0,y(jl),46],[0,y(tk),47],[0,y(\"enum\"),48],[0,y(\"export\"),49],[0,y(\"import\"),50],[0,y(\"super\"),51],[0,y(ti),52],[0,y(ab),53],[0,y(hu),54],[0,y(Gu),55],[0,y(rl),56],[0,y(\"public\"),57],[0,y(\"yield\"),58],[0,y(\"debugger\"),59],[0,y(\"declare\"),60],[0,y(Su),61],[0,y(\"of\"),62],[0,y(Cl),63],[0,y(\"await\"),64]]),yW=Ut([[0,y(ps),42],[0,y(jl),46],[0,y(\"any\"),ol],[0,y(\"mixed\"),111],[0,y(\"empty\"),112],[0,y(\"bool\"),113],[0,y(\"boolean\"),113],[0,y(Ko),31],[0,y(ko),30],[0,y(\"number\"),rf],[0,y(\"string\"),115],[0,y(tk),Ad],[0,y(ff),29]]),wW=y(Ga),gW=y(Ga),TW=y(fs),_W=y(\"eval\"),SW=y(ti),AW=y(ab),EW=y(hu),xW=y(Gu),IW=y(rl),CW=y(\"public\"),NW=y(ps),LW=y(\"yield\"),RW=y(\"enum\"),PW=[0,y(\"src/parser/parser_env.ml\"),289,2],OW=y(mb),UW=[0,0,0],DW=y(Kc),MW=y(Kc),FW=y(\"Parser_env.Try.Rollback\"),XW=[0,y(\"did not consume any tokens\")],BW=[0,1],jW=[0,0,0],GW=[0,y(ni),494,6],qW=y(ps),YW=y(lf),JW=y(Uc),HW=y(lf),WW=[0,1],zW=[0,[0,0,0]],VW=[0,1],$W=[0,1],KW=[0,1],QW=[0,0],ZW=[0,1],tz=[0,2],rz=[0,7],ez=[0,5],nz=[0,6],az=[0,3],uz=[0,4],iz=[0,y(ni),106,17],fz=[0,y(ni),85,17],cz=[0,y(ni),63,11],sz=[0,y(ni),67,11],oz=[0,y(ni),45,14],vz=[0,31],lz=[0,31],bz=[0,1],kz=[0,29],pz=[0,y(Ef),826,13],hz=[0,y(Ef),728,17],dz=[0,[0,y(mb),y(mb)],1],mz=y(ff),yz=y(ha),wz=y(Xl),gz=y(Hc),Tz=y(au),_z=[0,31],Sz=y(\"new\"),Az=y(\"target\"),Ez=[0,1],xz=[0,0],Iz=[0,1],Cz=[0,0],Nz=[0,1],Lz=[0,0],Rz=[0,2],Pz=[0,3],Oz=[0,7],Uz=[0,6],Dz=[0,4],Mz=[0,5],Fz=[0,[0,17,[0,2]]],Xz=[0,[0,18,[0,3]]],Bz=[0,[0,19,[0,4]]],jz=[0,[0,0,[0,5]]],Gz=[0,[0,1,[0,5]]],qz=[0,[0,2,[0,5]]],Yz=[0,[0,3,[0,5]]],Jz=[0,[0,5,[0,6]]],Hz=[0,[0,7,[0,6]]],Wz=[0,[0,4,[0,6]]],zz=[0,[0,6,[0,6]]],Vz=[0,[0,8,[0,7]]],$z=[0,[0,9,[0,7]]],Kz=[0,[0,10,[0,7]]],Qz=[0,[0,11,[0,8]]],Zz=[0,[0,12,[0,8]]],tV=[0,[0,15,[0,9]]],rV=[0,[0,13,[0,9]]],eV=[0,[0,14,[1,10]]],nV=[0,[0,16,[0,9]]],aV=[0,[0,21,[0,6]]],uV=[0,[0,20,[0,6]]],iV=[0,9],fV=[0,8],cV=[0,7],sV=[0,11],oV=[0,10],vV=[0,12],lV=[0,6],bV=[0,5],kV=[0,3],pV=[0,4],hV=[0,2],dV=[0,1],mV=[0,0],yV=[0,6],wV=y(Cl),gV=y(\":\"),TV=y(bi),_V=y(mb),SV=[0,y(mb)],AV=y(ua),EV=y(ua),xV=[0,1],IV=[0,1],CV=[0,1],NV=[0,1],LV=y(lf),RV=y(Uc),PV=y(lf),OV=y(Uc),UV=y(Su),DV=[0,0],MV=y(jl),FV=[0,1],XV=y($o),BV=y($o),jV=y($o),GV=y(Nc),qV=y($o),YV=y(Nc),JV=y($o),HV=y($o),WV=y(Nc),zV=[0,y(Va),1141,15],VV=y(\"other than an interface declaration!\"),$V=y(\"Internal Flow Error! Parsed `export interface` into something \"),KV=[0,1],QV=[0,1],ZV=y(\"other than a type alias!\"),t$=y(\"Internal Flow Error! Parsed `export type` into something \"),r$=y($o),e$=y($o),n$=y(hb),a$=y(Nc),u$=y(\"Internal Flow Error! Unexpected export statement declaration!\"),i$=y($o),f$=y($o),c$=y(Nc),s$=[0,1],o$=y(\"module\"),v$=[0,1],l$=y(\"module\"),b$=y(\"exports\"),k$=[0,1],p$=[0,1],h$=y(\"mixins\"),d$=y(\"mixins\"),m$=[0,1],y$=[0,1],w$=y(\"Label\"),g$=[0,27],T$=[0,0,0],_$=[0,y(Va),197,20],S$=[0,y(Va),214,20],A$=y(\"Parser error: No such thing as an expression pattern!\"),E$=[0,1],x$=[0,1],I$=y(\"use strict\"),C$=[0,0,0],N$=y(\"\\n\"),L$=y(\"Nooo: \"),R$=[0,[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],P$=[0,y(\"src/parser/parser_flow.ml\"),37,28],O$=[0,[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],U$=y(\"Internal error: \");J();var D$=Qc;!function(t){var r=Gd.fds[t];r.flags.wronly&&Xt(ca+t+\" is writeonly\"),r.file,r.offset;}(0);var M$=$t(1),F$=$t(2),X$=[0,function(t){return function(t){for(n=t;;){if(!n)return 0;var r=n[2],e=n[1];try{Bt(e);}catch(n){}var n=r;}}(Kt())}],B$=R,j$=function(){return[0,y(\"Unix\"),32,0]}()[1],G$=function(){return Qc/4|0}(),q$=(4*G$|0)-1|0;J(),J(),J();var Y$=[Ov,Jm,J()];J(),J();var J$=-6,H$=[Ov,Ww,J()],W$=[0,0];try{V$=lr(sg);}catch(y){if((y=mr(y))!==nm)throw y;try{z$=lr(og);}catch(y){if((y=mr(y))!==nm)throw y;var z$=vg;}var V$=z$;}var $$=function(t,r){return Qr(t,0,r)}(V$,82),K$=[ls,function(t){for(var r=br(),e=[0,Dt(55,0),0],n=0==r.length-1?[0,0]:r,a=n.length-1,u=0;;){I(e[1],u)[u+1]=u;var i=u+1|0;if(54===u){var f=[0,cg],c=54+Cr(55,a)|0;if(!(c<0))for(g=0;;){var s=g%55|0,o=rr(g,a),v=I(n,o)[o+1],l=Lr(f[1],y(mb+v));f[1]=$d(l,0,wt(l));var b=f[1],k=cr(b,3)<<24,p=cr(b,2)<<16,h=cr(b,1)<<8,d=((cr(b,0)+h|0)+p|0)+k|0,m=(I(e[1],s)[s+1]^d)&wp;I(e[1],s)[s+1]=m;var w=g+1|0;if(c===g)break;var g=w;}return e[2]=0,e}u=i;}}],Q$=[Ov,yg,J()],Z$=1000000010,tK=[0,[0,-1,[0,-1,wg,0]],0],rK=zr(80,32),eK=Hn,nK=function(t){return ue(eK)}(),aK=yn(M$);yn(F$),function(t){function r(t){return 0}mn(function(r,e,n){var a=e<0?1:0;if(a)i=a;else var u=n<0?1:0,i=u||((wt(r)-n|0)<e?1:0);i&&Ir(Hm);var f=t[2]+n|0;return t[3]<f&&fe(t,n),Wr(r,e,t[1],t[2],n),t[2]=f,0},r);}(nK),function(t){var r=X$[1];X$[1]=function(e){return yr(t,0),yr(r,0)};}(function(t){for(;;){if(!(1<aK[14])){aK[13]=Z$,vn(aK),aK[12]=1,aK[13]=1;var r=aK[27];r[1]=0,r[2]=0,ln(aK),aK[2]=0,aK[3]=0,aK[4]=0,aK[5]=0,aK[10]=0,aK[14]=0,aK[9]=aK[6],aK[14]=aK[14]+1|0;if(aK[14]<aK[15]){var e=[0,0|-aK[13],[3,0,3],0];Ze(aK,e),aK[1]=[0,[0,aK[13],e],aK[1]];}else if(aK[14]===aK[15]){var n=aK[16],a=wt(n);Ze(aK,[0,a,[0,n],a]),vn(aK);}return yr(aK[18],0)}1<aK[14]&&(aK[14]<aK[15]&&(Ze(aK,[0,0,1,0]),bn(aK,1),bn(aK,0)),aK[14]=aK[14]-1|0);}});var uK=u,iK=n;try{lr(gg);}catch(y){if((y=mr(y))!==nm)throw y}try{lr(Tg);}catch(y){if((y=mr(y))!==nm)throw y}sr(j$,_g)&&sr(j$,Sg);J();for(var fK=[Ov,Eg,J()],cK=-1,sK=Hn,oK=Dt(256,-1),vK=0;;){I(oK,vK)[vK+1]=1;var lK=vK+1|0;if($b===vK)for(a1=Io;;){I(oK,a1)[a1+1]=2;var bK=a1+1|0;if(223===a1)for(n1=Jl;;){I(oK,n1)[n1+1]=3;var kK=n1+1|0;if(239===n1)for(e1=Kp;;){I(oK,e1)[e1+1]=4;var pK=e1+1|0;if(247===e1){var hK=function(t){for(var r=wt(t),e=0,n=0;;){if((0|r)<=n){if(n===(0|r))for(var a=Dt(e,0),u=0,i=0,f=e;;){if(0<f){var c=cr(t,u);if(Io<=c)if(Kp<=c)if(Ov<=c)h=0;else{var s=cr(t,u+1|0),o=cr(t,u+2|0),v=cr(t,u+3|0),l=2!=(s>>>6|0)?1:0;if(l)k=l;else var b=2!=(o>>>6|0)?1:0,k=b||(2!=(v>>>6|0)?1:0);if(k)throw fK;var p=(7&c)<<18|(63&s)<<12|(63&o)<<6|63&v,h=1;}else if(Jl<=c){var d=cr(t,u+1|0),m=cr(t,u+2|0);if((2!=(d>>>6|0)?1:0)||(2!=(m>>>6|0)?1:0))throw fK;var y=(15&c)<<12|(63&d)<<6|63&m,w=Zu<=y?1:0;if(w?y<=57088?1:0:w)throw fK;var p=y,h=1;}else{var g=cr(t,u+1|0);if(2!=(g>>>6|0))throw fK;var p=(31&c)<<6|63&g,h=1;}else if(Zn<=c)h=0;else var p=c,h=1;if(h){I(a,i)[i+1]=p;var T=cr(t,u),u=u+I(oK,T)[T+1]|0,i=i+1|0,f=f-1|0;continue}throw fK}var _=a.length-1;return[0,wn,Zr(_,function(t){return I(a,t)[t+1]}),_,0,0,0,0,0,1]}throw fK}var S=cr(t,n),A=I(oK,S)[S+1];if(!(0<A))throw fK;var e=e+1|0,n=n+A|0;}},dK=function(t,r,e){for(var n=t[6]+r|0,a=t[2],u=ue(4*e|0),i=n,f=e;;){if(!(0<f))return ie(u);var c=I(a,i)[i+1];if($b<c)if(2047<c)if(ki<c){if(nl<c)throw fK;ce(u,jr(Kp|c>>>18|0)),ce(u,jr(Zn|63&(c>>>12|0))),ce(u,jr(Zn|63&(c>>>6|0))),ce(u,jr(Zn|63&c));}else{var s=Zu<=c?1:0;if(s?c<ml?1:0:s)throw fK;ce(u,jr(Jl|c>>>12|0)),ce(u,jr(Zn|63&(c>>>6|0))),ce(u,jr(Zn|63&c));}else ce(u,jr(Io|c>>>6|0)),ce(u,jr(Zn|63&c));else ce(u,jr(c));var i=i+1|0,f=f-1|0;}},mK=function(t){return dK(t,0,t[5]-t[6]|0)},yK=t,wK=null,gK=function(t){return void 0!==t?1:0},TK=yK.Array,_K=[Ov,xg,J()],SK=yK.Error;!function(t,r){ir(t,ar(r)===Ov?r:r[1]);}(Ig,[0,_K,{}]);var AK=function(t){throw t};He(function(t){return t[1]===_K?[0,it(t[2].toString())]:0}),He(function(t){return t instanceof TK?0:[0,it(t.toString())]});var EK=function(t,r){return[0,t[1],t[2],r[3]]},xK=function(t){return\"number\"==typeof t?Cg:t[1]},IK=function(t){if(\"number\"==typeof t)return 1;switch(t[0]){case 0:return 2;case 1:case 2:return 3;default:return 4}},CK=function(t,r){var e=t[1]-r[1]|0;return 0===e?t[2]-r[2]|0:e},NK=wr(iK,Lg,Ng),LK=wr(iK,Pg,Rg),RK=wr(iK,Ug,Og),PK=wr(iK,Mg,Dg),OK=wr(iK,Xg,Fg),UK=wr(iK,jg,Bg),DK=wr(iK,qg,Gg),MK=wr(iK,Jg,Yg),FK=wr(iK,Wg,Hg),XK=wr(iK,Vg,zg),BK=wr(iK,Kg,$g);gr(uK,Qg,NK,NK),gr(uK,Zg,LK,LK),gr(uK,tT,RK,RK),gr(uK,rT,PK,PK),gr(uK,eT,OK,OK),gr(uK,nT,UK,UK),gr(uK,aT,DK,DK),gr(uK,uT,MK,MK),gr(uK,iT,FK,FK),gr(uK,fT,XK,XK),gr(uK,cT,BK,BK);var jK=[Ov,F_,J()],GK=function(t,r,e){return[0,t,r,eP,0,e,om]},qK=function(t,r){return[0,r[1],t,r[3],r[4],r[5],r[6]]},YK=function(t){return t[3][1]},JK=function(t){return t[3][2]},HK=function(t,r){return t!==r[4]?[0,r[1],r[2],r[3],t,r[5],r[6]]:r},WK=function(t){return 35<t?xs<t?-1:cr(CH,t+Ao|0)-1|0:-1},zK=function(t){return 35<t?xs<t?-1:cr(NH,t+Ao|0)-1|0:-1},VK=function(t){return 35<t?xs<t?-1:cr(LH,t+Ao|0)-1|0:-1},$K=function(t){return 35<t?xs<t?-1:cr(RH,t+Ao|0)-1|0:-1},KK=function(t){return 45<t?46<t?-1:0:-1},QK=function(t){return 35<t?xs<t?-1:cr(PH,t+Ao|0)-1|0:-1},ZK=function(t){return 47<t?vu<t?-1:cr(oH,t+-48|0)-1|0:-1},tQ=function(t){return 8<t?Dk<t?Fo<t?Oc<t?-1:Bl<t?up<t?0:-1:$a<t?wf<t?Lh<t?Mn<t?0:-1:0:-1:jn<t?as<t?0:-1:0:-1:cr(eW,t-9|0)-1|0:-1},rQ=function(t){return 41<t?61<t?-1:cr(kH,t+-42|0)-1|0:-1},eQ=function(t){return 44<t?48<t?-1:cr(zH,t+-45|0)-1|0:-1},nQ=function(t){return 44<t?45<t?-1:0:-1},aQ=function(t){return tv<t?105<t?-1:0:-1},uQ=function(t){return 47<t?57<t?-1:0:-1},iQ=function(t){return 42<t?57<t?-1:cr(BH,t+na|0)-1|0:-1},fQ=function(t){return zv<t?rv<t?-1:0:-1},cQ=function(t){return 99<t?Tb<t?-1:0:-1},sQ=function(t){return 45<t?57<t?-1:cr(gH,t+Hs|0)-1|0:-1},oQ=function(t){return 47<t?cb<t?-1:cr(hH,t+-48|0)-1|0:-1},vQ=function(t){return 44<t?57<t?-1:cr(kW,t+-45|0)-1|0:-1},lQ=function(t){return 35<t?xs<t?-1:cr(OH,t+Ao|0)-1|0:-1},bQ=function(t){return 87<t?Pf<t?-1:cr(lm,t-88|0)-1|0:-1},kQ=function(t){return 9<t?10<t?-1:0:-1},pQ=function(t){return 8<t?Dk<t?Fo<t?Oc<t?-1:Bl<t?up<t?0:-1:$a<t?wf<t?Lh<t?Mn<t?0:-1:0:-1:jn<t?as<t?0:-1:0:-1:cr(nW,t-9|0)-1|0:-1},hQ=function(t){return 35<t?xs<t?-1:cr(UH,t+Ao|0)-1|0:-1},dQ=function(t){return 35<t?xs<t?-1:cr(DH,t+Ao|0)-1|0:-1},mQ=function(t){return 35<t?xs<t?-1:cr(MH,t+Ao|0)-1|0:-1},yQ=function(t){return 35<t?Ec<t?Qp<t?$l<t?-1:kk<t?th<t?Lo<t?Nd<t?Ba<t?Zo<t?As<t?Bp<t?0:-1:0:-1:la<t?vk<t?0:-1:0:-1:bl<t?Du<t?Ud<t?Js<t?0:-1:0:-1:kh<t?Yl<t?0:-1:0:-1:wv<t?bs<t?Mv<t?fp<t?Zl<t?Ya<t?Nl<t?Gk<t?Uk<t?Wc<t?$s<t?yp<t?qs<t?is<t?uk<t?Is<t?0:-1:0:-1:ib<t?du<t?0:-1:0:-1:gp<t?vs<t?Ma<t?Yo<t?0:-1:0:-1:Bs<t?Sb<t?0:-1:0:-1:Wv<t?Wi<t?Ki<t?Ab<t?gi<t?oa<t?0:-1:0:-1:Uf<t?ho<t?0:-1:0:-1:cd<t?Ll<t?Vu<t?fv<t?0:-1:0:-1:Yp<t?lk<t?0:-1:0:-1:Pp<t?el<t?Zs<t?Rf<t?Nb<t?oc<t?Ps<t?El<t?0:-1:0:-1:Xf<t?xh<t?0:-1:0:-1:Cu<t?Pv<t?Wo<t?Ia<t?0:-1:0:-1:Af<t?Wf<t?0:-1:0:-1:kd<t?Xi<t?os<t?Pc<t?ia<t?pc<t?0:-1:0:-1:Up<t?ch<t?0:-1:0:-1:Qf<t?tb<t?Dn<t?zf<t?0:-1:0:-1:bc<t?ov<t?0:-1:0:-1:dk<t?Bc<t?ek<t?$n<t?wu<t?Ti<t?Lv<t?Vb<t?sa<t?js<t?0:-1:0:-1:Db<t?Ds<t?0:-1:0:-1:Pl<t?ms<t?zh<t?kb<t?0:-1:0:-1:ad<t?ks<t?0:-1:0:-1:jf<t?Ra<t?dv<t?Co<t?ga<t?Rd<t?0:-1:0:-1:ju<t?Bi<t?0:-1:0:-1:_f<t?Xb<t?Us<t?Nh<t?0:-1:0:-1:Ml<t?wk<t?0:-1:0:-1:Dv<t?db<t?kl<t?ns<t?Oo<t?Mp<t?Tf<t?yi<t?0:-1:0:-1:bh<t?nk<t?0:-1:0:-1:Lu<t?dh<t?Eb<t?ev<t?0:-1:0:-1:Sc<t?nc<t?0:-1:0:-1:Eu<t?Xp<t?Li<t?qn<t?Lp<t?Wa<t?0:-1:0:-1:Hi<t?Jc<t?0:-1:0:-1:Xh<t?gu<t?Yu<t?Na<t?0:-1:0:-1:nb<t?Ih<t?0:-1:0:-1:ra<t?Hf<t?Qb<t?Cf<t?cu<t?Ed<t?Md<t?Kv<t?gl<t?Xs<t?$p<t?Zi<t?0:-1:0:-1:To<t?zi<t?0:-1:0:-1:ok<t?tu<t?Wl<t?Sd<t?0:-1:0:-1:sh<t?mh<t?0:-1:0:-1:Tl<t?Xo<t?Rh<t?Ss<t?Ks<t?gs<t?0:-1:0:-1:Dd<t?zk<t?0:-1:0:-1:qf<t?Rk<t?qu<t?Fk<t?0:-1:0:-1:eo<t?vc<t?0:-1:0:-1:Mi<t?pf<t?_u<t?Gb<t?Yf<t?ob<t?Bf<t?uh<t?0:-1:0:-1:Cs<t?yf<t?0:-1:0:-1:Yh<t?mi<t?Hl<t?sd<t?0:-1:0:-1:Vk<t?vd<t?0:-1:0:-1:np<t?mp<t?fk<t?fc<t?$i<t?fb<t?0:-1:0:-1:Ri<t?dc<t?0:-1:0:-1:cc<t?Td<t?Ev<t?$u<t?0:-1:0:-1:Aa<t?nh<t?0:-1:0:-1:vl<t?uo<t?Qv<t?Xv<t?xv<t?Ic<t?cp<t?Jv<t?hh<t?Cb<t?0:-1:0:-1:qh<t?ih<t?0:-1:0:-1:ru<t?yk<t?tf<t?Fi<t?0:-1:0:-1:Sv<t?Df<t?0:-1:0:-1:ud<t?Ph<t?xa<t?Xu<t?Tu<t?ic<t?0:-1:0:-1:Ja<t?wc<t?0:-1:0:-1:ss<t?nv<t?Uh<t?hl<t?0:-1:0:-1:Dl<t?ub<t?0:-1:0:-1:pl<t?ka<t?Ai<t?Ah<t?sf<t?jp<t?Cd<t?Kh<t?0:-1:0:-1:Sa<t?Oh<t?0:-1:0:-1:Gi<t?ql<t?Vn<t?Es<t?0:-1:0:-1:pv<t?_s<t?0:-1:0:-1:Jh<t?Da<t?Bb<t?bo<t?Mf<t?af<t?0:-1:0:-1:Gh<t?Qa<t?0:-1:0:-1:Rp<t?Hb<t?uf<t?mv<t?0:-1:0:-1:Yb<t?ki<t?0:-1:0:-1:Qh<t?Lc<t?Lf<t?mf<t?Hp<t?uv<t?Op<t?Tp<t?Bn<t?Qo<t?Ei<t?ep<t?wl<t?ao<t?0:-1:0:-1:fi<t?Yv<t?0:-1:0:-1:jd<t?$f<t?ld<t?Xk<t?0:-1:0:-1:Vv<t?ll<t?0:-1:0:-1:_h<t?Ro<t?xk<t?Sh<t?uc<t?rp<t?0:-1:0:-1:Ff<t?jb<t?0:-1:0:-1:pk<t?Si<t?Ik<t?Th<t?0:-1:0:-1:No<t?Gn<t?0:-1:0:-1:zc<t?Kn<t?so<t?Fa<t?Oi<t?gv<t?Jk<t?wo<t?0:-1:0:-1:Ea<t?Ul<t?0:-1:0:-1:ed<t?tl<t?Zb<t?wh<t?0:-1:0:-1:gf<t?Ms<t?0:-1:0:-1:qk<t?cf<t?ys<t?Ck<t?Wn<t?Zv<t?0:-1:0:-1:zo<t?Dh<t?0:-1:0:-1:Eo<t?sv<t?gc<t?Dc<t?0:-1:0:-1:vb<t?bb<t?0:-1:0:-1:sp<t?eu<t?Vc<t?pa<t?Hh<t?ts<t?Ys<t?Ak<t?pb<t?ba<t?0:-1:0:-1:Ip<t?nd<t?0:-1:0:-1:Rb<t?Vi<t?ou<t?ef<t?0:-1:0:-1:Fd<t?Ca<t?0:-1:0:-1:Bo<t?_d<t?Po<t?qc<t?zs<t?Tk<t?0:-1:0:-1:kv<t?ac<t?0:-1:0:-1:qb<t?Kf<t?vo<t?Rv<t?0:-1:0:-1:ik<t?xc<t?0:-1:0:-1:td<t?Sk<t?Un<t?rc<t?go<t?li<t?Vp<t?Vf<t?0:-1:0:-1:sc<t?Jo<t?0:-1:0:-1:op<t?Fu<t?rb<t?vh<t?0:-1:0:-1:ri<t?Ok<t?0:-1:0:-1:bu<t?ea<t?Rn<t?Uu<t?Tv<t?da<t?0:-1:0:-1:Qs<t?Yn<t?0:-1:0:-1:xu<t?zl<t?tc<t?Kl<t?0:-1:0:-1:Qu<t?gk<t?0:-1:0:-1:Zc<t?Au<t?_o<t?Cv<t?wa<t?sk<t?xd<t?zb<t?Ld<t?Zf<t?Zp<t?Ui<t?0:-1:0:-1:hk<t?xi<t?0:-1:0:-1:rd<t?Nf<t?id<t?eb<t?0:-1:0:-1:Ln<t?iu<t?0:-1:0:-1:ds<t?Zk<t?ip<t?nf<t?to<t?lu<t?0:-1:0:-1:Yc<t?fo<t?0:-1:0:-1:aa<t?ma<t?kc<t?Jf<t?0:-1:0:-1:ro<t?Do<t?0:-1:0:-1:Rs<t?wi<t?ap<t?Gf<t?mu<t?Gv<t?Eh<t?iv<t?0:-1:0:-1:Yi<t?vv<t?0:-1:0:-1:lv<t?$h<t?Xn<t?ya<t?0:-1:0:-1:Rc<t?xo<t?0:-1:0:-1:Ru<t?Ci<t?_l<t?Tc<t?gd<t?Xa<t?0:-1:0:-1:po<t?cs<t?0:-1:0:-1:Kb<t?io<t?Wk<t?vf<t?0:-1:0:-1:si<t?su<t?0:-1:0:-1:jc<t?ja<t?tp<t?Ju<t?zu<t?Di<t?mo<t?hf<t?fl<t?Ol<t?0:-1:0:-1:bk<t?oo<t?0:-1:0:-1:lb<t?df<t?_c<t?Ho<t?0:-1:0:-1:yl<t?Ek<t?0:-1:0:-1:di<t?rh<t?rk<t?Sp<t?Ii<t?Iu<t?0:-1:0:-1:Iv<t?Pu<t?0:-1:0:-1:Ob<t?So<t?dl<t?Hu<t?0:-1:0:-1:ta<t?_a<t?0:-1:0:-1:us<t?ws<t?Ws<t?ii<t?Mh<t?fd<t?Ou<t?zn<t?0:-1:0:-1:pi<t?qv<t?0:-1:0:-1:Uv<t?ku<t?od<t?ph<t?0:-1:0:-1:Os<t?lc<t?0:-1:0:-1:Ni<t?Bh<t?nu<t?ei<t?ck<t?Vl<t?0:-1:0:-1:Cc<t?Sf<t?0:-1:0:-1:_k<t?$c<t?Ns<t?La<t?0:-1:0:-1:Il<t?Wu<t?0:-1:0:-1:cr(sW,t+Ao|0)-1|0:-1},wQ=function(t){return Tb<t?vu<t?-1:0:-1},gQ=function(t){return 8<t?Dk<t?Fo<t?Oc<t?-1:Bl<t?up<t?0:-1:$a<t?wf<t?Lh<t?Mn<t?0:-1:0:-1:jn<t?as<t?0:-1:0:-1:cr(aW,t-9|0)-1|0:-1},TQ=function(t){return 41<t?47<t?-1:cr(qH,t+-42|0)-1|0:-1},_Q=function(t){return 47<t?49<t?-1:0:-1},SQ=function(t){return 60<t?61<t?-1:0:-1},AQ=function(t){return 35<t?Ec<t?Qp<t?$l<t?-1:kk<t?th<t?Lo<t?Nd<t?Ba<t?Zo<t?As<t?Bp<t?0:-1:0:-1:la<t?vk<t?0:-1:0:-1:bl<t?Du<t?Ud<t?Js<t?0:-1:0:-1:kh<t?Yl<t?0:-1:0:-1:wv<t?bs<t?Mv<t?fp<t?Zl<t?Ya<t?Nl<t?Gk<t?Uk<t?Wc<t?$s<t?yp<t?qs<t?is<t?uk<t?Is<t?0:-1:0:-1:ib<t?du<t?0:-1:0:-1:gp<t?vs<t?Ma<t?Yo<t?0:-1:0:-1:Bs<t?Sb<t?0:-1:0:-1:Wv<t?Wi<t?Ki<t?Ab<t?gi<t?oa<t?0:-1:0:-1:Uf<t?ho<t?0:-1:0:-1:cd<t?Ll<t?Vu<t?fv<t?0:-1:0:-1:Yp<t?lk<t?0:-1:0:-1:Pp<t?el<t?Zs<t?Rf<t?Nb<t?oc<t?Ps<t?El<t?0:-1:0:-1:Xf<t?xh<t?0:-1:0:-1:Cu<t?Pv<t?Wo<t?Ia<t?0:-1:0:-1:Af<t?Wf<t?0:-1:0:-1:kd<t?Xi<t?os<t?Pc<t?ia<t?pc<t?0:-1:0:-1:Up<t?ch<t?0:-1:0:-1:Qf<t?tb<t?Dn<t?zf<t?0:-1:0:-1:bc<t?ov<t?0:-1:0:-1:dk<t?Bc<t?ek<t?$n<t?wu<t?Ti<t?Lv<t?Vb<t?sa<t?js<t?0:-1:0:-1:Db<t?Ds<t?0:-1:0:-1:Pl<t?ms<t?zh<t?kb<t?0:-1:0:-1:ad<t?ks<t?0:-1:0:-1:jf<t?Ra<t?dv<t?Co<t?ga<t?Rd<t?0:-1:0:-1:ju<t?Bi<t?0:-1:0:-1:_f<t?Xb<t?Us<t?Nh<t?0:-1:0:-1:Ml<t?wk<t?0:-1:0:-1:Dv<t?db<t?kl<t?ns<t?Oo<t?Mp<t?Tf<t?yi<t?0:-1:0:-1:bh<t?nk<t?0:-1:0:-1:Lu<t?dh<t?Eb<t?ev<t?0:-1:0:-1:Sc<t?nc<t?0:-1:0:-1:Eu<t?Xp<t?Li<t?qn<t?Lp<t?Wa<t?0:-1:0:-1:Hi<t?Jc<t?0:-1:0:-1:Xh<t?gu<t?Yu<t?Na<t?0:-1:0:-1:nb<t?Ih<t?0:-1:0:-1:ra<t?Hf<t?Qb<t?Cf<t?cu<t?Ed<t?Md<t?Kv<t?gl<t?Xs<t?$p<t?Zi<t?0:-1:0:-1:To<t?zi<t?0:-1:0:-1:ok<t?tu<t?Wl<t?Sd<t?0:-1:0:-1:sh<t?mh<t?0:-1:0:-1:Tl<t?Xo<t?Rh<t?Ss<t?Ks<t?gs<t?0:-1:0:-1:Dd<t?zk<t?0:-1:0:-1:qf<t?Rk<t?qu<t?Fk<t?0:-1:0:-1:eo<t?vc<t?0:-1:0:-1:Mi<t?pf<t?_u<t?Gb<t?Yf<t?ob<t?Bf<t?uh<t?0:-1:0:-1:Cs<t?yf<t?0:-1:0:-1:Yh<t?mi<t?Hl<t?sd<t?0:-1:0:-1:Vk<t?vd<t?0:-1:0:-1:np<t?mp<t?fk<t?fc<t?$i<t?fb<t?0:-1:0:-1:Ri<t?dc<t?0:-1:0:-1:cc<t?Td<t?Ev<t?$u<t?0:-1:0:-1:Aa<t?nh<t?0:-1:0:-1:vl<t?uo<t?Qv<t?Xv<t?xv<t?Ic<t?cp<t?Jv<t?hh<t?Cb<t?0:-1:0:-1:qh<t?ih<t?0:-1:0:-1:ru<t?yk<t?tf<t?Fi<t?0:-1:0:-1:Sv<t?Df<t?0:-1:0:-1:ud<t?Ph<t?xa<t?Xu<t?Tu<t?ic<t?0:-1:0:-1:Ja<t?wc<t?0:-1:0:-1:ss<t?nv<t?Uh<t?hl<t?0:-1:0:-1:Dl<t?ub<t?0:-1:0:-1:pl<t?ka<t?Ai<t?Ah<t?sf<t?jp<t?Cd<t?Kh<t?0:-1:0:-1:Sa<t?Oh<t?0:-1:0:-1:Gi<t?ql<t?Vn<t?Es<t?0:-1:0:-1:pv<t?_s<t?0:-1:0:-1:Jh<t?Da<t?Bb<t?bo<t?Mf<t?af<t?0:-1:0:-1:Gh<t?Qa<t?0:-1:0:-1:Rp<t?Hb<t?uf<t?mv<t?0:-1:0:-1:Yb<t?ki<t?0:-1:0:-1:Qh<t?Lc<t?Lf<t?mf<t?Hp<t?uv<t?Op<t?Tp<t?Bn<t?Qo<t?Ei<t?ep<t?wl<t?ao<t?0:-1:0:-1:fi<t?Yv<t?0:-1:0:-1:jd<t?$f<t?ld<t?Xk<t?0:-1:0:-1:Vv<t?ll<t?0:-1:0:-1:_h<t?Ro<t?xk<t?Sh<t?uc<t?rp<t?0:-1:0:-1:Ff<t?jb<t?0:-1:0:-1:pk<t?Si<t?Ik<t?Th<t?0:-1:0:-1:No<t?Gn<t?0:-1:0:-1:zc<t?Kn<t?so<t?Fa<t?Oi<t?gv<t?Jk<t?wo<t?0:-1:0:-1:Ea<t?Ul<t?0:-1:0:-1:ed<t?tl<t?Zb<t?wh<t?0:-1:0:-1:gf<t?Ms<t?0:-1:0:-1:qk<t?cf<t?ys<t?Ck<t?Wn<t?Zv<t?0:-1:0:-1:zo<t?Dh<t?0:-1:0:-1:Eo<t?sv<t?gc<t?Dc<t?0:-1:0:-1:vb<t?bb<t?0:-1:0:-1:sp<t?eu<t?Vc<t?pa<t?Hh<t?ts<t?Ys<t?Ak<t?pb<t?ba<t?0:-1:0:-1:Ip<t?nd<t?0:-1:0:-1:Rb<t?Vi<t?ou<t?ef<t?0:-1:0:-1:Fd<t?Ca<t?0:-1:0:-1:Bo<t?_d<t?Po<t?qc<t?zs<t?Tk<t?0:-1:0:-1:kv<t?ac<t?0:-1:0:-1:qb<t?Kf<t?vo<t?Rv<t?0:-1:0:-1:ik<t?xc<t?0:-1:0:-1:td<t?Sk<t?Un<t?rc<t?go<t?li<t?Vp<t?Vf<t?0:-1:0:-1:sc<t?Jo<t?0:-1:0:-1:op<t?Fu<t?rb<t?vh<t?0:-1:0:-1:ri<t?Ok<t?0:-1:0:-1:bu<t?ea<t?Rn<t?Uu<t?Tv<t?da<t?0:-1:0:-1:Qs<t?Yn<t?0:-1:0:-1:xu<t?zl<t?tc<t?Kl<t?0:-1:0:-1:Qu<t?gk<t?0:-1:0:-1:Zc<t?Au<t?_o<t?Cv<t?wa<t?sk<t?xd<t?zb<t?Ld<t?Zf<t?Zp<t?Ui<t?0:-1:0:-1:hk<t?xi<t?0:-1:0:-1:rd<t?Nf<t?id<t?eb<t?0:-1:0:-1:Ln<t?iu<t?0:-1:0:-1:ds<t?Zk<t?ip<t?nf<t?to<t?lu<t?0:-1:0:-1:Yc<t?fo<t?0:-1:0:-1:aa<t?ma<t?kc<t?Jf<t?0:-1:0:-1:ro<t?Do<t?0:-1:0:-1:Rs<t?wi<t?ap<t?Gf<t?mu<t?Gv<t?Eh<t?iv<t?0:-1:0:-1:Yi<t?vv<t?0:-1:0:-1:lv<t?$h<t?Xn<t?ya<t?0:-1:0:-1:Rc<t?xo<t?0:-1:0:-1:Ru<t?Ci<t?_l<t?Tc<t?gd<t?Xa<t?0:-1:0:-1:po<t?cs<t?0:-1:0:-1:Kb<t?io<t?Wk<t?vf<t?0:-1:0:-1:si<t?su<t?0:-1:0:-1:jc<t?ja<t?tp<t?Ju<t?zu<t?Di<t?mo<t?hf<t?fl<t?Ol<t?0:-1:0:-1:bk<t?oo<t?0:-1:0:-1:lb<t?df<t?_c<t?Ho<t?0:-1:0:-1:yl<t?Ek<t?0:-1:0:-1:di<t?rh<t?rk<t?Sp<t?Ii<t?Iu<t?0:-1:0:-1:Iv<t?Pu<t?0:-1:0:-1:Ob<t?So<t?dl<t?Hu<t?0:-1:0:-1:ta<t?_a<t?0:-1:0:-1:us<t?ws<t?Ws<t?ii<t?Mh<t?fd<t?Ou<t?zn<t?0:-1:0:-1:pi<t?qv<t?0:-1:0:-1:Uv<t?ku<t?od<t?ph<t?0:-1:0:-1:Os<t?lc<t?0:-1:0:-1:Ni<t?Bh<t?nu<t?ei<t?ck<t?Vl<t?0:-1:0:-1:Cc<t?Sf<t?0:-1:0:-1:_k<t?$c<t?Ns<t?La<t?0:-1:0:-1:Il<t?Wu<t?0:-1:0:-1:cr(QH,t+Ao|0)-1|0:-1},EQ=function(t){return 118<t?119<t?-1:0:-1},xQ=function(t){return 60<t?62<t?-1:cr(vm,t+-61|0)-1|0:-1},IQ=function(t){return 65<t?98<t?-1:cr(lm,t+-66|0)-1|0:-1},CQ=function(t){return 47<t?55<t?-1:0:-1},NQ=function(t){return Ka<t?ol<t?-1:0:-1},LQ=function(t){return ol<t?111<t?-1:0:-1},RQ=function(t){return 98<t?99<t?-1:0:-1},PQ=function(t){return 47<t?48<t?-1:0:-1},OQ=function(t){return 8<t?Dk<t?Fo<t?Oc<t?-1:Bl<t?up<t?0:-1:$a<t?wf<t?Lh<t?Mn<t?0:-1:0:-1:jn<t?as<t?0:-1:0:-1:cr(fW,t-9|0)-1|0:-1},UQ=function(t){return 45<t?vu<t?-1:cr(lH,t+Hs|0)-1|0:-1},DQ=function(t){return 78<t?111<t?-1:cr(lm,t+Fh|0)-1|0:-1},MQ=function(t){return 35<t?xs<t?-1:cr(FH,t+Ao|0)-1|0:-1},FQ=function(t){return 41<t?42<t?-1:0:-1},XQ=function(t){return 35<t?xs<t?-1:cr(XH,t+Ao|0)-1|0:-1},BQ=function(t){return Ad<t?117<t?-1:0:-1},jQ=function(t){return 46<t?47<t?-1:0:-1},GQ=function(t){return 57<t?58<t?-1:0:-1},qQ=function(t){return 35<t?xs<t?-1:cr(_H,t+Ao|0)-1|0:-1},YQ=function(t,r,e){var n=e-JK(t)|0,a=[0,YK(t),n,e],u=r-JK(t)|0,i=[0,YK(t),u,r];return[0,t[1],i,a]},JQ=function(t,r){var e=En(r);return YQ(t,e,xn(r))},HQ=function(t){var r=t[2],e=t[1],n=e[6],a=n!==om?[0,e[1],e[2],e[3],e[4],e[5],om]:e;if(\"number\"==typeof r)f=1;else switch(r[0]){case 1:var u=r[1],i=[0,u[1],u[3]],f=0;break;case 2:var c=r[1],i=[0,c[1],c[2][3]],f=0;break;case 3:var s=r[1],o=s[2],i=[0,s[1],Lr(sH,Lr(o,Lr(cH,s[3])))],f=0;break;case 4:var v=r[1],i=[0,v[1],v[3]],f=0;break;default:f=1;}if(f)var l=mK(a[2]),b=JQ(a,a[2]),k=l;else var b=i[1],k=i[2];var p=Dr(n[2]);return[0,a,[0,r,b,k,Dr(n[1]),p]]},WQ=function(t,r,e){return[0,t[1],t[2],t[3],t[4],t[5],[0,[0,[0,r,e],t[6][1]],t[6][2]]]},zQ=function(t,r,e){return WQ(t,r,[1,e])},VQ=function(t,r){return WQ(t,r,fH)},$Q=function(t,r){var e=xn(r),n=[0,YK(t)+1|0,e];return[0,t[1],t[2],n,t[4],t[5],t[6]]},KQ=(J(),function(t){try{return B(t)}catch(t){throw t=mr(t)}}),QQ=function(t,r,e,n,a){var u=EK(r,e),i=ie(n),f=a?[0,i]:[1,i];return[0,t[1],t[2],t[3],t[4],t[5],[0,t[6][1],[0,[0,u,f],t[6][2]]]]},ZQ=function(t){if(rs<=t){var r=[0,jr(Zn|63&t),0],e=[0,jr(Zn|63&(t>>>6|0)),r],n=[0,jr(Zn|63&(t>>>12|0)),e];return[0,jr(Kp|t>>>18|0),n]}if(Mc<=t){var a=[0,jr(Zn|63&t),0],u=[0,jr(Zn|63&(t>>>6|0)),a];return[0,jr(Jl|t>>>12|0),u]}if(Zn<=t){var i=[0,jr(Zn|63&t),0];return[0,jr(Io|t>>>6|0),i]}return[0,jr(t),0]},tZ=function(t,r){if(45===cr(r,0))var e=1,n=Vr(r,1,wt(r)-1|0);else var e=0,n=r;if(0===t)c=0;else{switch(t-1|0){case 0:var a=1;try{var u=It(xt(Lr(nH,n)));}catch(r){if(a=0,(r=mr(r))[1]!==rm)throw r;var i=xr(Lr(aH,n)),f=1;}if(a)var i=u,f=1;break;case 1:var c=0,f=0;break;default:var s=1;try{var o=KQ(n);}catch(r){if(s=0,(r=mr(r))[1]!==rm)throw r;var i=xr(Lr(uH,n)),f=1;}if(s)var i=o,f=1;}if(f)var v=i,c=1;}if(!c)try{v=It(xt(n));}catch(f){if((f=mr(f))[1]!==rm)throw f;v=xr(Lr(iH,n));}return[5,t,e?-v:v]},rZ=function(t,r,e){var n=VQ(t,JQ(t,r));return An(r),wr(e,n,r)},eZ=We(0,53),nZ=We(0,53);Fr(function(t){return Ve(eZ,t[1],t[2])},mW),Fr(function(t){return Ve(nZ,t[1],t[2])},yW);var aZ=function(t,r){for(p=t;;){var e=function(t){for(;;)if(_n(t,20),0!==hQ(gn(t)))return Sn(t)},n=function(t){if(0===uQ(gn(t)))for(;;){_n(t,19);var r=zK(gn(t));if(0===r)for(;;)if(_n(t,18),0!==hQ(gn(t)))return Sn(t);if(1!==r)return Sn(t)}return Sn(t)},a=function(t,r){return function(e){_n(e,20);var n=qQ(gn(e));if(2<n>>>0)return Sn(e);switch(n){case 0:return t(e);case 1:return r(e);default:for(;;){_n(e,19);var a=zK(gn(e));if(0===a)for(;;)if(_n(e,18),0!==hQ(gn(e)))return Sn(e);if(1!==a)return Sn(e)}}}}(e,n),u=function(t,r){return function(e){for(;;){_n(e,21);var n=WK(gn(e));if(2<n>>>0)return Sn(e);switch(n){case 0:return t(e);case 1:continue;default:return r(e)}}}}(e,a),i=function(t,r){return function(e){_n(e,21);var n=zK(gn(e));return 0===n?r(e):1===n?t(e):Sn(e)}}(u,e),f=function(t,r,e){return function(n){for(;;){_n(n,21);var a=QK(gn(n));if(3<a>>>0)return Sn(n);switch(a){case 0:return t(n);case 1:return e(n);case 2:continue;default:return r(n)}}}}(e,a,i),c=function(t){for(;;)if(_n(t,14),0!==hQ(gn(t)))return Sn(t)},s=function(t,r,e,n,a,u,i,f,c,s){return function(o){var v=gn(o),l=Fo<v?ki<v?Bc<v?lk<v?Yl<v?vk<v?Zo<v?As<v?1:8:Ba<v?1:8:Js<v?Nd<v?la<v?1:8:Lo<v?1:8:Du<v?Ud<v?1:8:bl<v?1:8:Sb<v?du<v?Is<v?th<v?kh<v?1:8:kk<v?1:8:is<v?uk<v?1:8:qs<v?1:8:Yo<v?yp<v?ib<v?1:8:$s<v?1:8:vs<v?Ma<v?1:8:gp<v?1:8:ho<v?oa<v?Wc<v?Bs<v?1:8:Uk<v?1:8:Ab<v?gi<v?1:8:Ki<v?1:8:fv<v?Wi<v?Uf<v?1:8:Wv<v?1:8:Ll<v?Vu<v?1:8:cd<v?1:8:Ya<v?Wf<v?xh<v?El<v?Gk<v?Yp<v?1:8:Nl<v?1:8:oc<v?Ps<v?1:8:Nb<v?1:8:Ia<v?Rf<v?Xf<v?1:8:Zs<v?1:8:Pv<v?Wo<v?1:8:Cu<v?1:8:ch<v?pc<v?el<v?Af<v?1:8:Pp<v?1:8:Pc<v?ia<v?1:8:os<v?1:8:zf<v?Xi<v?Up<v?1:8:kd<v?1:8:tb<v?Dn<v?1:8:bc<v?1:8:$n<v?Ti<v?Vb<v?js<v?Zl<v?1:8:sa<v?1:8:Ds<v?Lv<v?1:8:Db<v?1:8:ms<v?kb<v?wu<v?1:8:zh<v?1:8:ks<v?Pl<v?1:8:ad<v?1:8:Ra<v?Co<v?Rd<v?ek<v?1:8:ga<v?1:8:Bi<v?dv<v?1:8:ju<v?1:8:Xb<v?Nh<v?jf<v?1:8:Us<v?1:8:wk<v?_f<v?1:8:Ml<v?1:8:fc<v?tu<v?db<v?ns<v?Mp<v?yi<v?dk<v?1:8:Tf<v?1:8:nk<v?Oo<v?1:8:bh<v?1:8:dh<v?ev<v?kl<v?1:8:Eb<v?1:8:nc<v?Lu<v?1:8:Sc<v?1:8:Xp<v?qn<v?Wa<v?Dv<v?1:8:Lp<v?1:8:Jc<v?Li<v?1:8:Hi<v?1:8:Kv<v?Na<v?Eu<v?1:8:To<v?1:8:qp<v?Md<v?1:8:Of<v?1:8:mc<v?Ss<v?Ed<v?mh<v?ok<v?1:8:sh<v?1:8:gs<v?cu<v?1:8:Ks<v?1:8:Fk<v?zk<v?Rh<v?1:8:Wb<v?1:8:fh<v?qf<v?1:8:cv<v?1:8:yh<v?yf<v?_i<v?Ua<v?1:8:Yf<v?1:8:bf<v?Pa<v?1:8:Za<v?1:8:pf<v?vd<v?Yh<v?1:8:Vk<v?1:8:fb<v?Mi<v?1:8:$i<v?1:8:nv<v?Fi<v?Pb<v?Td<v?dc<v?fk<v?1:8:Ev<v?1:8:nh<v?cc<v?1:8:Aa<v?1:8:ih<v?Jv<v?fa<v?1:8:cp<v?1:8:Ic<v?qh<v?1:8:xv<v?1:8:ic<v?Df<v?yk<v?tf<v?1:8:ru<v?1:8:Xv<v?Sv<v?1:8:Qv<v?1:8:wc<v?Xu<v?Tu<v?1:8:xa<v?1:8:Ph<v?Ja<v?1:8:Uh<v?1:8:ql<v?jp<v?uo<v?ub<v?ss<v?1:8:Dl<v?1:8:Kh<v?vl<v?1:8:Cd<v?1:8:Ah<v?Oh<v?sf<v?1:8:Sa<v?1:8:Es<v?Ai<v?1:8:Vn<v?1:8:Qa<v?af<v?ka<v?pv<v?1:8:pl<v?1:8:bo<v?Mf<v?1:8:Bb<v?1:8:mv<v?Da<v?Gh<v?1:8:Jh<v?1:8:Hb<v?uf<v?1:8:Rp<v?1:8:zl<v?ef<v?Fa<v?up<v?Yv<v?ao<v?bs<v?Yb<v?1:8:wv<v?1:8:ep<v?wl<v?1:8:Ei<v?1:8:Xk<v?Qo<v?fi<v?1:8:Bn<v?1:8:ll<v?jd<v?1:8:Oc<v?1:2:uv<v?Sh<v?rp<v?Op<v?1:8:uc<v?1:8:Gn<v?pk<v?1:8:No<v?1:8:gv<v?wo<v?Hp<v?1:8:Jk<v?1:8:Ul<v?Oi<v?1:8:Ea<v?1:8:Dh<v?Kn<v?tl<v?wh<v?so<v?1:8:Zb<v?1:8:Ms<v?ed<v?1:8:gf<v?1:8:Zv<v?Fc<v?zc<v?1:8:_v<v?1:8:Ck<v?Wn<v?1:8:ys<v?1:8:bb<v?Dc<v?cf<v?zo<v?1:8:qk<v?1:8:sv<v?gc<v?1:8:Eo<v?1:8:nd<v?mf<v?vb<v?1:8:cl<v?1:8:ts<v?Ip<v?1:8:Hh<v?1:8:eu<v?bp<v?Tk<v?Ca<v?Vi<v?ou<v?1:8:Rb<v?1:8:pa<v?Fd<v?1:8:Kk<v?1:8:ac<v?qc<v?$v<v?1:8:Po<v?1:8:Fs<v?kv<v?1:8:oi<v?1:8:_d<v?Zh<v?xp<v?Gp<v?1:8:Ep<v?1:8:Vh<v?Gl<v?1:8:dd<v?1:8:Kf<v?Rv<v?Bk<v?1:8:vo<v?1:8:jh<v?Nn<v?1:8:gb<v?1:8:qa<v?rc<v?li<v?Vf<v?hv<v?1:8:wd<v?1:8:Fp<v?dp<v?1:8:sc<v?1:8:Lk<v?vh<v?Mu<v?1:8:hp<v?1:8:Ok<v?op<v?1:8:ri<v?1:8:Ac<v?Yn<v?Fl<v?jv<v?1:8:Rn<v?1:8:uu<v?Wh<v?1:8:il<v?1:8:ea<v?sb<v?Hv<v?1:8:vi<v?1:8:Kl<v?bu<v?1:8:tc<v?1:8:io<v?ma<v?Nf<v?no<v?Lc<v?gk<v?xu<v?1:8:Qu<v?1:8:Ui<v?Qh<v?1:8:Fb<v?1:8:eb<v?xi<v?Ld<v?1:8:jk<v?1:8:Go<v?id<v?1:8:Jb<v?1:8:nf<v?sk<v?iu<v?rd<v?1:8:Ln<v?1:8:lu<v?wa<v?1:8:to<v?1:8:Zk<v?fo<v?ip<v?1:8:Yc<v?1:8:Jf<v?ds<v?1:8:kc<v?1:8:$h<v?yu<v?Cv<v?Do<v?aa<v?1:8:ro<v?1:8:iv<v?_o<v?1:8:Eh<v?1:8:Gf<v?vv<v?mu<v?1:8:Yi<v?1:8:ya<v?ap<v?1:8:_p<v?1:8:Tc<v?Mn<v?xo<v?lv<v?1:8:Bl<v?1:2:Xa<v?Rs<v?1:8:gd<v?1:8:Ci<v?cs<v?_l<v?1:8:po<v?1:8:vf<v?Ru<v?1:8:Wk<v?1:8:Hu<v?df<v?hf<v?Au<v?su<v?Kb<v?1:8:si<v?1:8:Nk<v?Zc<v?1:8:fl<v?1:8:Di<v?oo<v?mo<v?1:8:bk<v?1:8:Ho<v?zu<v?1:8:_c<v?1:8:Iu<v?Ek<v?zp<v?lb<v?1:8:If<v?1:8:Ju<v?yl<v?1:8:tp<v?1:8:Pu<v?Sp<v?Ii<v?1:8:rk<v?1:8:rh<v?Iv<v?1:8:di<v?1:8:ph<v?zn<v?_a<v?So<v?dl<v?1:8:Ob<v?1:8:ja<v?ta<v?1:8:jc<v?1:8:qv<v?fd<v?Ou<v?1:8:Mh<v?1:8:ii<v?pi<v?1:8:Ws<v?1:8:Bh<v?lc<v?ku<v?od<v?1:8:Uv<v?1:8:Sf<v?nu<v?1:8:Cc<v?1:8:wf<v?La<v?Ni<v?1:8:Lh<v?1:2:as<v?$a<v?1:2:jn<v?1:2:cr(jH,v+1|0)-1|0;if(36<l>>>0)return Sn(o);switch(l){case 0:return 76;case 1:return 77;case 2:if(_n(o,2),0===tQ(gn(o)))for(;;)if(_n(o,2),0!==tQ(gn(o)))return Sn(o);return Sn(o);case 3:return 0;case 4:return _n(o,0),0===kQ(gn(o))?0:Sn(o);case 5:return _n(o,69),0===SQ(gn(o))?(_n(o,42),0===SQ(gn(o))?38:Sn(o)):Sn(o);case 6:return 8;case 7:_n(o,77);var b=gn(o);return 0===(32<b?33<b?-1:0:-1)?7:Sn(o);case 8:return _n(o,22),0===AQ(gn(o))?t(o):Sn(o);case 9:return _n(o,65),0===SQ(gn(o))?55:Sn(o);case 10:_n(o,67);var k=gn(o),p=37<k?61<k?-1:cr(lW,k-38|0)-1|0:-1;return 0===p?35:1===p?56:Sn(o);case 11:return 25;case 12:return 26;case 13:_n(o,63);var h=rQ(gn(o));if(2<h>>>0)return Sn(o);switch(h){case 0:return _n(o,64),0===SQ(gn(o))?54:Sn(o);case 1:return 5;default:return 53}case 14:_n(o,61);var d=gn(o),m=42<d?61<d?-1:cr(pW,d+na|0)-1|0:-1;return 0===m?43:1===m?51:Sn(o);case 15:return 32;case 16:_n(o,62);var y=gn(o),w=44<y?61<y?-1:cr(yH,y+-45|0)-1|0:-1;return 0===w?44:1===w?52:Sn(o);case 17:_n(o,30);var g=sQ(gn(o));return 0===g?0===KK(gn(o))?29:Sn(o):1===g?r(o):Sn(o);case 18:_n(o,74);var T=rQ(gn(o));if(2<T>>>0)return Sn(o);switch(T){case 0:_n(o,3);var _=gQ(gn(o));if(2<_>>>0)return Sn(o);switch(_){case 0:for(;;){var S=gQ(gn(o));if(2<S>>>0)return Sn(o);switch(S){case 0:continue;case 1:return a(o);default:return u(o)}}case 1:return a(o);default:return u(o)}case 1:return 6;default:return 73}case 19:_n(o,21);var A=mQ(gn(o));if(7<A>>>0)return Sn(o);switch(A){case 0:return e(o);case 1:return i(o);case 2:for(;;){_n(o,15);var E=XQ(gn(o));if(4<E>>>0)return Sn(o);switch(E){case 0:return f(o);case 1:return i(o);case 2:continue;case 3:for(;;){_n(o,14);var x=QK(gn(o));if(3<x>>>0)return Sn(o);switch(x){case 0:return f(o);case 1:return i(o);case 2:continue;default:return c(o)}}default:return c(o)}}case 3:return s(o);case 4:_n(o,20);var I=MQ(gn(o));if(0===I)return e(o);if(1===I)for(;;){_n(o,11);var C=MQ(gn(o));if(0===C)for(;;)if(_n(o,10),0!==hQ(gn(o)))return Sn(o);if(1!==C)return Sn(o)}return Sn(o);case 5:return n(o);case 6:_n(o,20);var N=$K(gn(o));if(0===N)return e(o);if(1===N)for(;;){_n(o,13);var L=$K(gn(o));if(0===L)for(;;)if(_n(o,12),0!==hQ(gn(o)))return Sn(o);if(1!==L)return Sn(o)}return Sn(o);default:_n(o,20);var R=lQ(gn(o));if(0===R)return e(o);if(1===R)for(;;){_n(o,17);var P=lQ(gn(o));if(0===P)for(;;)if(_n(o,16),0!==hQ(gn(o)))return Sn(o);if(1!==P)return Sn(o)}return Sn(o)}case 20:_n(o,21);var O=QK(gn(o));if(3<O>>>0)return Sn(o);switch(O){case 0:return e(o);case 1:return i(o);case 2:return s(o);default:return n(o)}case 21:return 33;case 22:return 31;case 23:_n(o,59);var U=gn(o),D=59<U?61<U?-1:cr(vm,U+-60|0)-1|0:-1;return 0===D?(_n(o,46),0===SQ(gn(o))?45:Sn(o)):1===D?39:Sn(o);case 24:_n(o,71);var M=xQ(gn(o));return 0===M?(_n(o,41),0===SQ(gn(o))?37:Sn(o)):1===M?72:Sn(o);case 25:_n(o,60);var F=xQ(gn(o));if(0===F)return 40;if(1===F){_n(o,50);var X=xQ(gn(o));return 0===X?47:1===X?(_n(o,49),0===SQ(gn(o))?48:Sn(o)):Sn(o)}return Sn(o);case 26:return 34;case 27:_n(o,75);var B=gn(o);if(0===(63<B?64<B?-1:0:-1)){var j=gn(o);return 0===(35<j?Ec<j?La<j?As<j?-1:Bb<j?bo<j?ju<j?Bi<j?Ki<j?Ab<j?Ba<j?Zo<j?0:-1:qs<j?is<j?bl<j?Du<j?Lo<j?Nd<j?la<j?vk<j?0:-1:0:-1:Ud<j?Js<j?0:-1:0:-1:kk<j?th<j?kh<j?Yl<j?0:-1:0:-1:uk<j?Is<j?0:-1:0:-1:gp<j?vs<j?$s<j?yp<j?ib<j?du<j?0:-1:0:-1:Ma<j?Yo<j?0:-1:0:-1:Uk<j?Wc<j?Bs<j?Sb<j?0:-1:0:-1:gi<j?oa<j?0:-1:0:-1:os<j?Pc<j?Nb<j?oc<j?cd<j?Ll<j?Wv<j?Wi<j?Uf<j?ho<j?0:-1:0:-1:Vu<j?fv<j?0:-1:0:-1:Nl<j?Gk<j?Yp<j?lk<j?0:-1:0:-1:Ps<j?El<j?0:-1:0:-1:Cu<j?Pv<j?Zs<j?Rf<j?Xf<j?xh<j?0:-1:0:-1:Wo<j?Ia<j?0:-1:0:-1:Pp<j?el<j?Af<j?Wf<j?0:-1:0:-1:ia<j?pc<j?0:-1:0:-1:Db<j?Ds<j?bc<j?tb<j?kd<j?Xi<j?Up<j?ch<j?0:-1:0:-1:Dn<j?zf<j?0:-1:0:-1:sa<j?js<j?Zl<j?Ya<j?0:-1:0:-1:Lv<j?Vb<j?0:-1:0:-1:ad<j?ks<j?zh<j?kb<j?wu<j?Ti<j?0:-1:0:-1:Pl<j?ms<j?0:-1:0:-1:ga<j?Rd<j?ek<j?$n<j?0:-1:0:-1:dv<j?Co<j?0:-1:0:-1:Za<j?bf<j?Hi<j?Jc<j?bh<j?nk<j?Ml<j?wk<j?Us<j?Nh<j?jf<j?Ra<j?0:-1:0:-1:_f<j?Xb<j?0:-1:0:-1:Tf<j?yi<j?dk<j?Bc<j?0:-1:0:-1:Oo<j?Mp<j?0:-1:0:-1:Sc<j?nc<j?Eb<j?ev<j?kl<j?ns<j?0:-1:0:-1:Lu<j?dh<j?0:-1:0:-1:Lp<j?Wa<j?Dv<j?db<j?0:-1:0:-1:Li<j?qn<j?0:-1:0:-1:Ks<j?gs<j?Of<j?qp<j?To<j?Na<j?Eu<j?Xp<j?0:-1:0:-1:Md<j?Kv<j?0:-1:0:-1:sh<j?mh<j?ok<j?tu<j?0:-1:0:-1:cu<j?Ed<j?0:-1:0:-1:cv<j?fh<j?Wb<j?zk<j?Rh<j?Ss<j?0:-1:0:-1:qf<j?Fk<j?0:-1:0:-1:Yf<j?_i<j?Ua<j?mc<j?0:-1:0:-1:Pa<j?yf<j?0:-1:0:-1:Qv<j?Xv<j?Aa<j?nh<j?$i<j?fb<j?Vk<j?vd<j?Yh<j?yh<j?0:-1:0:-1:Mi<j?pf<j?0:-1:0:-1:Ev<j?dc<j?fk<j?fc<j?0:-1:0:-1:cc<j?Td<j?0:-1:0:-1:xv<j?Ic<j?cp<j?Jv<j?fa<j?Pb<j?0:-1:0:-1:qh<j?ih<j?0:-1:0:-1:ru<j?yk<j?tf<j?Fi<j?0:-1:0:-1:Sv<j?Df<j?0:-1:0:-1:Cd<j?Kh<j?Uh<j?Ph<j?xa<j?Xu<j?Tu<j?ic<j?0:-1:0:-1:Ja<j?wc<j?0:-1:0:-1:Dl<j?ub<j?ss<j?nv<j?0:-1:0:-1:vl<j?uo<j?0:-1:0:-1:Vn<j?Es<j?Sa<j?Oh<j?sf<j?jp<j?0:-1:0:-1:Ai<j?Ah<j?0:-1:0:-1:pl<j?ka<j?pv<j?ql<j?0:-1:0:-1:Mf<j?af<j?0:-1:0:-1:Hv<j?Ac<j?vb<j?bb<j?Hp<j?uv<j?Ei<j?ep<j?Rp<j?Hb<j?Jh<j?Da<j?Gh<j?Qa<j?0:-1:0:-1:uf<j?mv<j?0:-1:0:-1:wv<j?bs<j?Yb<j?ki<j?0:-1:0:-1:wl<j?ao<j?0:-1:0:-1:Op<j?ll<j?Bn<j?Qo<j?fi<j?Yv<j?0:-1:0:-1:jd<j?Xk<j?0:-1:0:-1:pk<j?Sh<j?uc<j?rp<j?0:-1:0:-1:No<j?Gn<j?0:-1:0:-1:zc<j?Kn<j?so<j?Fa<j?Oi<j?gv<j?Jk<j?wo<j?0:-1:0:-1:Ea<j?Ul<j?0:-1:0:-1:ed<j?tl<j?Zb<j?wh<j?0:-1:0:-1:gf<j?Ms<j?0:-1:0:-1:zo<j?Dh<j?Wn<j?Zv<j?_v<j?Fc<j?0:-1:0:-1:ys<j?Ck<j?0:-1:0:-1:gc<j?Dc<j?qk<j?cf<j?0:-1:0:-1:Eo<j?sv<j?0:-1:0:-1:Bk<j?_d<j?$v<j?Tk<j?ou<j?ef<j?Ip<j?nd<j?cl<j?mf<j?0:-1:0:-1:Hh<j?ts<j?0:-1:0:-1:Fd<j?Ca<j?Rb<j?Vi<j?0:-1:0:-1:Kk<j?pa<j?0:-1:0:-1:Gp<j?bp<j?kv<j?ac<j?Po<j?qc<j?0:-1:0:-1:oi<j?Fs<j?0:-1:0:-1:Gl<j?Zh<j?Ep<j?xp<j?0:-1:0:-1:dd<j?Vh<j?0:-1:0:-1:Mu<j?rc<j?hv<j?eu<j?Nn<j?Kf<j?vo<j?Rv<j?0:-1:0:-1:gb<j?jh<j?0:-1:0:-1:dp<j?li<j?wd<j?Vf<j?0:-1:0:-1:sc<j?Fp<j?0:-1:0:-1:jv<j?qa<j?op<j?Lk<j?hp<j?vh<j?0:-1:0:-1:ri<j?Ok<j?0:-1:0:-1:Wh<j?Yn<j?Rn<j?Fl<j?0:-1:0:-1:il<j?uu<j?0:-1:0:-1:po<j?cs<j?ip<j?nf<j?Ld<j?no<j?xu<j?zl<j?bu<j?ea<j?vi<j?sb<j?0:-1:0:-1:tc<j?Kl<j?0:-1:0:-1:Qh<j?Lc<j?Qu<j?gk<j?0:-1:0:-1:Fb<j?Ui<j?0:-1:0:-1:rd<j?Nf<j?id<j?eb<j?jk<j?xi<j?0:-1:0:-1:Jb<j?Go<j?0:-1:0:-1:wa<j?sk<j?Ln<j?iu<j?0:-1:0:-1:to<j?lu<j?0:-1:0:-1:mu<j?yu<j?aa<j?ma<j?ds<j?Zk<j?Yc<j?fo<j?0:-1:0:-1:kc<j?Jf<j?0:-1:0:-1:_o<j?Cv<j?ro<j?Do<j?0:-1:0:-1:Eh<j?iv<j?0:-1:0:-1:lv<j?$h<j?ap<j?Gf<j?Yi<j?vv<j?0:-1:0:-1:_p<j?ya<j?0:-1:0:-1:gd<j?Xa<j?Rs<j?xo<j?0:-1:0:-1:_l<j?Tc<j?0:-1:0:-1:rk<j?Sp<j?bk<j?oo<j?si<j?su<j?Wk<j?vf<j?Ru<j?Ci<j?0:-1:0:-1:Kb<j?io<j?0:-1:0:-1:fl<j?Nk<j?Zc<j?Au<j?0:-1:0:-1:mo<j?hf<j?0:-1:0:-1:If<j?zp<j?_c<j?Ho<j?zu<j?Di<j?0:-1:0:-1:lb<j?df<j?0:-1:0:-1:tp<j?Ju<j?yl<j?Ek<j?0:-1:0:-1:Ii<j?Iu<j?0:-1:0:-1:Mh<j?fd<j?Ob<j?So<j?di<j?rh<j?Iv<j?Pu<j?0:-1:0:-1:dl<j?Hu<j?0:-1:0:-1:jc<j?ja<j?ta<j?_a<j?0:-1:0:-1:Ou<j?zn<j?0:-1:0:-1:Uv<j?ku<j?Ws<j?ii<j?pi<j?qv<j?0:-1:0:-1:od<j?ph<j?0:-1:0:-1:Cc<j?Sf<j?nu<j?lc<j?0:-1:0:-1:Ni<j?Bh<j?0:-1:0:-1:cr(WH,j+Ao|0)-1|0:-1)?t(o):Sn(o)}return Sn(o);case 28:return 27;case 29:return 1;case 30:return 28;case 31:return _n(o,68),0===SQ(gn(o))?58:Sn(o);case 32:return 9;case 33:return 23;case 34:_n(o,66);var G=gn(o),q=60<G?124<G?-1:cr(hW,G+-61|0)-1|0:-1;return 0===q?57:1===q?36:Sn(o);case 35:return 24;default:return 70}}}(function(t){for(;;)if(_n(t,22),0!==AQ(gn(t)))return Sn(t)},u,e,a,function(t){return _n(t,4),0===GQ(gn(t))?4:Sn(t)},function(t){return 0===fQ(gn(t))&&0===LQ(gn(t))&&0===EQ(gn(t))&&0===nQ(gn(t))&&0===aQ(gn(t))&&0===NQ(gn(t))&&0===RQ(gn(t))&&0===fQ(gn(t))&&0===BQ(gn(t))&&0===cQ(gn(t))&&0===wQ(gn(t))?4:Sn(t)},i,c,function(t,r){return function(e){_n(e,14);var n=qQ(gn(e));if(2<n>>>0)return Sn(e);switch(n){case 0:return r(e);case 1:return t(e);default:for(;;){_n(e,14);var a=zK(gn(e));if(0===a)for(;;)if(_n(e,14),0!==hQ(gn(e)))return Sn(e);if(1!==a)return Sn(e)}}}}(n,c),f);Tn(r);var o=s(r);if(77<o>>>0)return xr(NU);var v=o;if(39<=v)switch(v){case 39:return[0,p,90];case 40:return[0,p,91];case 41:return[0,p,86];case 42:return[0,p,87];case 43:return[0,p,105];case 44:return[0,p,106];case 45:return[0,p,68];case 46:return[0,p,94];case 47:return[0,p,67];case 48:return[0,p,66];case 49:return[0,p,96];case 50:return[0,p,95];case 51:return[0,p,77];case 52:return[0,p,76];case 53:return[0,p,74];case 54:return[0,p,75];case 55:return[0,p,72];case 56:return[0,p,71];case 57:return[0,p,70];case 58:return[0,p,69];case 59:return[0,p,92];case 60:return[0,p,93];case 61:return[0,p,97];case 62:return[0,p,98];case 63:return[0,p,Tb];case 64:return[0,p,vu];case 65:return[0,p,cb];case 66:return[0,p,83];case 67:return[0,p,85];case 68:return[0,p,84];case 69:return[0,p,ai];case 70:return[0,p,tv];case 71:return[0,p,78];case 72:return[0,p,12];case 73:return[0,p,73];case 74:return[0,p,99];case 75:return[0,p,14];case 76:return[0,p[4]?WQ(p,JQ(p,r),4):p,rv];default:return[0,VQ(p,JQ(p,r)),zv]}switch(v){case 0:p=$Q(p,r);continue;case 1:p=VQ(p,JQ(p,r));continue;case 2:continue;case 3:var l=JQ(p,r),b=ue($b),k=cZ(p,b,r),p=QQ(k[1],l,k[2],b,1);continue;case 4:var h=mK(r);if(p[5]){var d=p[4]?zQ(p,JQ(p,r),h):p,m=HK(1,d),y=In(r);if(fr(dK(r,y-1|0,1),LU)&&sr(dK(r,y-2|0,1),RU))return[0,m,80];p=m;continue}var w=JQ(p,r),g=ue($b);se(g,Vr(h,2,wt(h)-2|0));var T=cZ(p,g,r),p=QQ(T[1],w,T[2],g,1);continue;case 5:if(p[4]){p=HK(0,p);continue}An(r);return Tn(r),0===function(t){return 0===FQ(gn(t))?0:Sn(t)}(r)?[0,p,Tb]:xr(PU);case 6:var _=JQ(p,r),S=ue($b),A=sZ(p,S,r),p=QQ(A[1],_,A[2],S,0);continue;case 7:if(0===En(r)){p=sZ(p,ue($b),r)[1];continue}return[0,p,zv];case 8:var E=mK(r),x=JQ(p,r),I=ue($b),C=ue($b);se(C,E);var N=iZ(p,E,I,C,0,r),L=N[3],R=N[1],P=EK(x,N[2]),O=ie(C);return[0,R,[1,[0,P,ie(I),O,L]]];case 9:var U=ue($b),D=ue($b),M=ue($b);se(M,mK(r));var F=vZ(p,JQ(p,r),U,D,M,r),X=F[3],B=F[2],j=F[1],G=ie(M),q=ie(D);return[0,j,[2,[0,B,[0,ie(U),q,G],X]]];case 10:return rZ(p,r,function(t,r){if(Tn(r),0===PQ(gn(r)))if(0===IQ(gn(r)))if(0===_Q(gn(r))){for(;;)if(_n(r,0),0!==_Q(gn(r))){e=Sn(r);break}}else e=Sn(r);else e=Sn(r);else var e=Sn(r);return 0===e?[0,t,CU]:xr(IU)});case 11:return[0,p,OU];case 12:return rZ(p,r,function(t,r){if(Tn(r),0===PQ(gn(r)))if(0===DQ(gn(r)))if(0===CQ(gn(r))){for(;;)if(_n(r,0),0!==CQ(gn(r))){e=Sn(r);break}}else e=Sn(r);else e=Sn(r);else var e=Sn(r);return 0===e?[0,t,xU]:xr(EU)});case 13:return[0,p,UU];case 14:return rZ(p,r,function(t,r){if(Tn(r),0===PQ(gn(r)))if(0===CQ(gn(r))){for(;;)if(_n(r,0),0!==CQ(gn(r))){e=Sn(r);break}}else e=Sn(r);else var e=Sn(r);return 0===e?[0,t,AU]:xr(SU)});case 15:return[0,p,DU];case 16:return rZ(p,r,function(t,r){if(Tn(r),0===PQ(gn(r)))if(0===bQ(gn(r)))if(0===oQ(gn(r))){for(;;)if(_n(r,0),0!==oQ(gn(r))){e=Sn(r);break}}else e=Sn(r);else e=Sn(r);else var e=Sn(r);return 0===e?[0,t,_U]:xr(TU)});case 17:return[0,p,MU];case 18:return rZ(p,r,function(t,r){function e(t){for(;;)if(_n(t,0),0!==uQ(gn(t)))return Sn(t)}function n(t){var r=iQ(gn(t));return 0===r?0===uQ(gn(t))?e(t):Sn(t):1===r?e(t):Sn(t)}function a(t){if(0===uQ(gn(t)))for(;;){var r=ZK(gn(t));if(0!==r)return 1===r?n(t):Sn(t)}return Sn(t)}Tn(r);var u=sQ(gn(r));if(0===u)f=a(r);else if(1===u)for(;;){var i=UQ(gn(r));if(2<i>>>0)f=Sn(r);else switch(i){case 0:f=a(r);break;case 1:continue;default:f=n(r);}break}else var f=Sn(r);return 0===f?[0,t,gU]:xr(wU)});case 19:return[0,p,FU];case 20:return rZ(p,r,function(t,r){function e(t){for(;;)if(_n(t,0),0!==uQ(gn(t)))return Sn(t)}Tn(r);var n=sQ(gn(r));if(0===n)u=0===uQ(gn(r))?e(r):Sn(r);else if(1===n)for(;;){_n(r,0);var a=sQ(gn(r));if(0===a){_n(r,0);u=0===uQ(gn(r))?e(r):Sn(r);}else{if(1===a)continue;u=Sn(r);}break}else var u=Sn(r);return 0===u?[0,t,yU]:xr(mU)});case 21:return[0,p,XU];case 22:var Y=mK(r);if(64===cr(Y,0))if(64===cr(Y,1))var J=Vr(Y,2,wt(Y)-2|0),H=1;else H=0;else H=0;if(!H)J=Y;try{return[0,p,$e(eZ,J)]}catch(r){if((r=mr(r))===nm)return[0,p,0];throw r}case 23:return[0,p,1];case 24:return[0,p,2];case 25:return[0,p,5];case 26:return[0,p,6];case 27:return[0,p,7];case 28:return[0,p,8];case 29:return[0,p,13];case 30:return[0,p,11];case 31:return[0,p,9];case 32:return[0,p,10];case 33:return[0,p,80];case 34:return[0,p,79];case 35:return[0,p,82];case 36:return[0,p,81];case 37:return[0,p,88];default:return[0,p,89]}}},uZ=function(t,r){for(g=t;;){var e=function(t){return 0===fQ(gn(t))&&0===LQ(gn(t))&&0===EQ(gn(t))&&0===nQ(gn(t))&&0===aQ(gn(t))&&0===NQ(gn(t))&&0===RQ(gn(t))&&0===fQ(gn(t))&&0===BQ(gn(t))&&0===cQ(gn(t))&&0===wQ(gn(t))?3:Sn(t)},n=function(t){return _n(t,3),0===GQ(gn(t))?3:Sn(t)},a=function(t){for(;;)if(_n(t,17),0!==hQ(gn(t)))return Sn(t)},u=function(t){return function(r){_n(r,17);var e=lQ(gn(r));if(0===e)return t(r);if(1===e)for(;;){_n(r,14);var n=lQ(gn(r));if(0===n)for(;;)if(_n(r,13),0!==hQ(gn(r)))return Sn(r);if(1!==n)return Sn(r)}return Sn(r)}}(a),i=function(t){return function(r){_n(r,17);var e=$K(gn(r));if(0===e)return t(r);if(1===e)for(;;){_n(r,10);var n=$K(gn(r));if(0===n)for(;;)if(_n(r,9),0!==hQ(gn(r)))return Sn(r);if(1!==n)return Sn(r)}return Sn(r)}}(a),f=function(t){return function(r){_n(r,17);var e=MQ(gn(r));if(0===e)return t(r);if(1===e)for(;;){_n(r,8);var n=MQ(gn(r));if(0===n)for(;;)if(_n(r,7),0!==hQ(gn(r)))return Sn(r);if(1!==n)return Sn(r)}return Sn(r)}}(a),c=function(t){if(0===uQ(gn(t)))for(;;){_n(t,16);var r=zK(gn(t));if(0===r)for(;;)if(_n(t,15),0!==hQ(gn(t)))return Sn(t);if(1!==r)return Sn(t)}return Sn(t)},s=function(t,r){return function(e){_n(e,17);var n=qQ(gn(e));if(2<n>>>0)return Sn(e);switch(n){case 0:return t(e);case 1:return r(e);default:for(;;){_n(e,16);var a=zK(gn(e));if(0===a)for(;;)if(_n(e,15),0!==hQ(gn(e)))return Sn(e);if(1!==a)return Sn(e)}}}}(a,c),o=function(t,r){return function(e){for(;;){_n(e,18);var n=WK(gn(e));if(2<n>>>0)return Sn(e);switch(n){case 0:return t(e);case 1:continue;default:return r(e)}}}}(a,s),v=function(t,r){return function(e){_n(e,18);var n=zK(gn(e));return 0===n?r(e):1===n?t(e):Sn(e)}}(o,a),l=function(t,r,e){return function(n){for(;;){_n(n,18);var a=QK(gn(n));if(3<a>>>0)return Sn(n);switch(a){case 0:return t(n);case 1:return e(n);case 2:continue;default:return r(n)}}}}(a,s,v),b=function(t){for(;;)if(_n(t,11),0!==hQ(gn(t)))return Sn(t)},k=function(t,r,e){return function(n){for(;;){_n(n,12);var a=XQ(gn(n));if(4<a>>>0)return Sn(n);switch(a){case 0:return r(n);case 1:return t(n);case 2:continue;case 3:for(;;){_n(n,11);var u=QK(gn(n));if(3<u>>>0)return Sn(n);switch(u){case 0:return r(n);case 1:return t(n);case 2:continue;default:return e(n)}}default:return e(n)}}}}(v,b,function(t,r){return function(e){_n(e,11);var n=qQ(gn(e));if(2<n>>>0)return Sn(e);switch(n){case 0:return r(e);case 1:return t(e);default:for(;;){_n(e,11);var a=zK(gn(e));if(0===a)for(;;)if(_n(e,11),0!==hQ(gn(e)))return Sn(e);if(1!==a)return Sn(e)}}}}(c,b)),p=function(t,r,e,n,a,u,i,f){return function(c){_n(c,18);var s=mQ(gn(c));if(7<s>>>0)return Sn(c);switch(s){case 0:return t(c);case 1:return e(c);case 2:return n(c);case 3:return a(c);case 4:return u(c);case 5:return r(c);case 6:return i(c);default:return f(c)}}}(a,s,v,k,l,f,i,u),h=function(t,r,e,n,a,u,i,f,c,s,o,v,l,b){return function(k){var p=gn(k),h=Fo<p?ki<p?Bc<p?lk<p?Yl<p?vk<p?Zo<p?As<p?1:6:Ba<p?1:6:Js<p?Nd<p?la<p?1:6:Lo<p?1:6:Du<p?Ud<p?1:6:bl<p?1:6:Sb<p?du<p?Is<p?th<p?kh<p?1:6:kk<p?1:6:is<p?uk<p?1:6:qs<p?1:6:Yo<p?yp<p?ib<p?1:6:$s<p?1:6:vs<p?Ma<p?1:6:gp<p?1:6:ho<p?oa<p?Wc<p?Bs<p?1:6:Uk<p?1:6:Ab<p?gi<p?1:6:Ki<p?1:6:fv<p?Wi<p?Uf<p?1:6:Wv<p?1:6:Ll<p?Vu<p?1:6:cd<p?1:6:Ya<p?Wf<p?xh<p?El<p?Gk<p?Yp<p?1:6:Nl<p?1:6:oc<p?Ps<p?1:6:Nb<p?1:6:Ia<p?Rf<p?Xf<p?1:6:Zs<p?1:6:Pv<p?Wo<p?1:6:Cu<p?1:6:ch<p?pc<p?el<p?Af<p?1:6:Pp<p?1:6:Pc<p?ia<p?1:6:os<p?1:6:zf<p?Xi<p?Up<p?1:6:kd<p?1:6:tb<p?Dn<p?1:6:bc<p?1:6:$n<p?Ti<p?Vb<p?js<p?Zl<p?1:6:sa<p?1:6:Ds<p?Lv<p?1:6:Db<p?1:6:ms<p?kb<p?wu<p?1:6:zh<p?1:6:ks<p?Pl<p?1:6:ad<p?1:6:Ra<p?Co<p?Rd<p?ek<p?1:6:ga<p?1:6:Bi<p?dv<p?1:6:ju<p?1:6:Xb<p?Nh<p?jf<p?1:6:Us<p?1:6:wk<p?_f<p?1:6:Ml<p?1:6:fc<p?tu<p?db<p?ns<p?Mp<p?yi<p?dk<p?1:6:Tf<p?1:6:nk<p?Oo<p?1:6:bh<p?1:6:dh<p?ev<p?kl<p?1:6:Eb<p?1:6:nc<p?Lu<p?1:6:Sc<p?1:6:Xp<p?qn<p?Wa<p?Dv<p?1:6:Lp<p?1:6:Jc<p?Li<p?1:6:Hi<p?1:6:Kv<p?Na<p?Eu<p?1:6:To<p?1:6:qp<p?Md<p?1:6:Of<p?1:6:mc<p?Ss<p?Ed<p?mh<p?ok<p?1:6:sh<p?1:6:gs<p?cu<p?1:6:Ks<p?1:6:Fk<p?zk<p?Rh<p?1:6:Wb<p?1:6:fh<p?qf<p?1:6:cv<p?1:6:yh<p?yf<p?_i<p?Ua<p?1:6:Yf<p?1:6:bf<p?Pa<p?1:6:Za<p?1:6:pf<p?vd<p?Yh<p?1:6:Vk<p?1:6:fb<p?Mi<p?1:6:$i<p?1:6:nv<p?Fi<p?Pb<p?Td<p?dc<p?fk<p?1:6:Ev<p?1:6:nh<p?cc<p?1:6:Aa<p?1:6:ih<p?Jv<p?fa<p?1:6:cp<p?1:6:Ic<p?qh<p?1:6:xv<p?1:6:ic<p?Df<p?yk<p?tf<p?1:6:ru<p?1:6:Xv<p?Sv<p?1:6:Qv<p?1:6:wc<p?Xu<p?Tu<p?1:6:xa<p?1:6:Ph<p?Ja<p?1:6:Uh<p?1:6:ql<p?jp<p?uo<p?ub<p?ss<p?1:6:Dl<p?1:6:Kh<p?vl<p?1:6:Cd<p?1:6:Ah<p?Oh<p?sf<p?1:6:Sa<p?1:6:Es<p?Ai<p?1:6:Vn<p?1:6:Qa<p?af<p?ka<p?pv<p?1:6:pl<p?1:6:bo<p?Mf<p?1:6:Bb<p?1:6:mv<p?Da<p?Gh<p?1:6:Jh<p?1:6:Hb<p?uf<p?1:6:Rp<p?1:6:zl<p?ef<p?Fa<p?up<p?Yv<p?ao<p?bs<p?Yb<p?1:6:wv<p?1:6:ep<p?wl<p?1:6:Ei<p?1:6:Xk<p?Qo<p?fi<p?1:6:Bn<p?1:6:ll<p?jd<p?1:6:Oc<p?1:2:uv<p?Sh<p?rp<p?Op<p?1:6:uc<p?1:6:Gn<p?pk<p?1:6:No<p?1:6:gv<p?wo<p?Hp<p?1:6:Jk<p?1:6:Ul<p?Oi<p?1:6:Ea<p?1:6:Dh<p?Kn<p?tl<p?wh<p?so<p?1:6:Zb<p?1:6:Ms<p?ed<p?1:6:gf<p?1:6:Zv<p?Fc<p?zc<p?1:6:_v<p?1:6:Ck<p?Wn<p?1:6:ys<p?1:6:bb<p?Dc<p?cf<p?zo<p?1:6:qk<p?1:6:sv<p?gc<p?1:6:Eo<p?1:6:nd<p?mf<p?vb<p?1:6:cl<p?1:6:ts<p?Ip<p?1:6:Hh<p?1:6:eu<p?bp<p?Tk<p?Ca<p?Vi<p?ou<p?1:6:Rb<p?1:6:pa<p?Fd<p?1:6:Kk<p?1:6:ac<p?qc<p?$v<p?1:6:Po<p?1:6:Fs<p?kv<p?1:6:oi<p?1:6:_d<p?Zh<p?xp<p?Gp<p?1:6:Ep<p?1:6:Vh<p?Gl<p?1:6:dd<p?1:6:Kf<p?Rv<p?Bk<p?1:6:vo<p?1:6:jh<p?Nn<p?1:6:gb<p?1:6:qa<p?rc<p?li<p?Vf<p?hv<p?1:6:wd<p?1:6:Fp<p?dp<p?1:6:sc<p?1:6:Lk<p?vh<p?Mu<p?1:6:hp<p?1:6:Ok<p?op<p?1:6:ri<p?1:6:Ac<p?Yn<p?Fl<p?jv<p?1:6:Rn<p?1:6:uu<p?Wh<p?1:6:il<p?1:6:ea<p?sb<p?Hv<p?1:6:vi<p?1:6:Kl<p?bu<p?1:6:tc<p?1:6:io<p?ma<p?Nf<p?no<p?Lc<p?gk<p?xu<p?1:6:Qu<p?1:6:Ui<p?Qh<p?1:6:Fb<p?1:6:eb<p?xi<p?Ld<p?1:6:jk<p?1:6:Go<p?id<p?1:6:Jb<p?1:6:nf<p?sk<p?iu<p?rd<p?1:6:Ln<p?1:6:lu<p?wa<p?1:6:to<p?1:6:Zk<p?fo<p?ip<p?1:6:Yc<p?1:6:Jf<p?ds<p?1:6:kc<p?1:6:$h<p?yu<p?Cv<p?Do<p?aa<p?1:6:ro<p?1:6:iv<p?_o<p?1:6:Eh<p?1:6:Gf<p?vv<p?mu<p?1:6:Yi<p?1:6:ya<p?ap<p?1:6:_p<p?1:6:Tc<p?Mn<p?xo<p?lv<p?1:6:Bl<p?1:2:Xa<p?Rs<p?1:6:gd<p?1:6:Ci<p?cs<p?_l<p?1:6:po<p?1:6:vf<p?Ru<p?1:6:Wk<p?1:6:Hu<p?df<p?hf<p?Au<p?su<p?Kb<p?1:6:si<p?1:6:Nk<p?Zc<p?1:6:fl<p?1:6:Di<p?oo<p?mo<p?1:6:bk<p?1:6:Ho<p?zu<p?1:6:_c<p?1:6:Iu<p?Ek<p?zp<p?lb<p?1:6:If<p?1:6:Ju<p?yl<p?1:6:tp<p?1:6:Pu<p?Sp<p?Ii<p?1:6:rk<p?1:6:rh<p?Iv<p?1:6:di<p?1:6:ph<p?zn<p?_a<p?So<p?dl<p?1:6:Ob<p?1:6:ja<p?ta<p?1:6:jc<p?1:6:qv<p?fd<p?Ou<p?1:6:Mh<p?1:6:ii<p?pi<p?1:6:Ws<p?1:6:Bh<p?lc<p?ku<p?od<p?1:6:Uv<p?1:6:Sf<p?nu<p?1:6:Cc<p?1:6:wf<p?La<p?Ni<p?1:6:Lh<p?1:2:as<p?$a<p?1:2:jn<p?1:2:cr(JH,p+1|0)-1|0;if(30<h>>>0)return Sn(k);switch(h){case 0:return 50;case 1:return 51;case 2:if(_n(k,1),0===tQ(gn(k)))for(;;)if(_n(k,1),0!==tQ(gn(k)))return Sn(k);return Sn(k);case 3:return 0;case 4:return _n(k,0),0===kQ(gn(k))?0:Sn(k);case 5:return 6;case 6:return _n(k,19),0===AQ(gn(k))?t(k):Sn(k);case 7:if(_n(k,51),0===RQ(gn(k))){var d=gn(k);if(0===(ai<d?tv<d?-1:0:-1)){if(0===wQ(gn(k))){if(0===RQ(gn(k))){var m=gn(k);if(0===(106<m?zv<m?-1:0:-1)){var y=gn(k);return 0===(rf<y?115<y?-1:0:-1)?20:Sn(k)}return Sn(k)}return Sn(k)}return Sn(k)}return Sn(k)}return Sn(k);case 8:return 44;case 9:return 27;case 10:return 28;case 11:return _n(k,41),0===jQ(gn(k))?4:Sn(k);case 12:return 48;case 13:return 32;case 14:_n(k,49);var w=OQ(gn(k));if(3<w>>>0)return Sn(k);switch(w){case 0:for(;;){var g=OQ(gn(k));if(3<g>>>0)return Sn(k);switch(g){case 0:continue;case 1:return r(k);case 2:return u(k);default:return c(k)}}case 1:return r(k);case 2:return u(k);default:return c(k)}case 15:_n(k,30);var T=sQ(gn(k));return 0===T?0===KK(gn(k))?29:Sn(k):1===T?e(k):Sn(k);case 16:_n(k,51);var _=TQ(gn(k));if(0===_){_n(k,2);var S=gQ(gn(k));if(2<S>>>0)return Sn(k);switch(S){case 0:for(;;){var A=gQ(gn(k));if(2<A>>>0)return Sn(k);switch(A){case 0:continue;case 1:return l(k);default:return b(k)}}case 1:return l(k);default:return b(k)}}return 1===_?5:Sn(k);case 17:_n(k,18);var E=mQ(gn(k));if(7<E>>>0)return Sn(k);switch(E){case 0:return n(k);case 1:return i(k);case 2:return f(k);case 3:return c(k);case 4:return s(k);case 5:return a(k);case 6:return o(k);default:return v(k)}case 18:_n(k,18);var x=QK(gn(k));if(3<x>>>0)return Sn(k);switch(x){case 0:return n(k);case 1:return i(k);case 2:return c(k);default:return a(k)}case 19:return 33;case 20:return 31;case 21:return 37;case 22:_n(k,39);var I=gn(k);return 0===(61<I?62<I?-1:0:-1)?46:Sn(k);case 23:return 38;case 24:return 34;case 25:return 21;case 26:return 22;case 27:_n(k,19);var C=gn(k),N=35<C?Ec<C?Qp<C?$l<C?-1:kk<C?th<C?Lo<C?Nd<C?Ba<C?Zo<C?As<C?Bp<C?0:-1:0:-1:la<C?vk<C?0:-1:0:-1:bl<C?Du<C?Ud<C?Js<C?0:-1:0:-1:kh<C?Yl<C?0:-1:0:-1:wv<C?bs<C?Mv<C?fp<C?Zl<C?Ya<C?Nl<C?Gk<C?Uk<C?Wc<C?$s<C?yp<C?qs<C?is<C?uk<C?Is<C?0:-1:0:-1:ib<C?du<C?0:-1:0:-1:gp<C?vs<C?Ma<C?Yo<C?0:-1:0:-1:Bs<C?Sb<C?0:-1:0:-1:Wv<C?Wi<C?Ki<C?Ab<C?gi<C?oa<C?0:-1:0:-1:Uf<C?ho<C?0:-1:0:-1:cd<C?Ll<C?Vu<C?fv<C?0:-1:0:-1:Yp<C?lk<C?0:-1:0:-1:Pp<C?el<C?Zs<C?Rf<C?Nb<C?oc<C?Ps<C?El<C?0:-1:0:-1:Xf<C?xh<C?0:-1:0:-1:Cu<C?Pv<C?Wo<C?Ia<C?0:-1:0:-1:Af<C?Wf<C?0:-1:0:-1:kd<C?Xi<C?os<C?Pc<C?ia<C?pc<C?0:-1:0:-1:Up<C?ch<C?0:-1:0:-1:Qf<C?tb<C?Dn<C?zf<C?0:-1:0:-1:bc<C?ov<C?0:-1:0:-1:dk<C?Bc<C?ek<C?$n<C?wu<C?Ti<C?Lv<C?Vb<C?sa<C?js<C?0:-1:0:-1:Db<C?Ds<C?0:-1:0:-1:Pl<C?ms<C?zh<C?kb<C?0:-1:0:-1:ad<C?ks<C?0:-1:0:-1:jf<C?Ra<C?dv<C?Co<C?ga<C?Rd<C?0:-1:0:-1:ju<C?Bi<C?0:-1:0:-1:_f<C?Xb<C?Us<C?Nh<C?0:-1:0:-1:Ml<C?wk<C?0:-1:0:-1:Dv<C?db<C?kl<C?ns<C?Oo<C?Mp<C?Tf<C?yi<C?0:-1:0:-1:bh<C?nk<C?0:-1:0:-1:Lu<C?dh<C?Eb<C?ev<C?0:-1:0:-1:Sc<C?nc<C?0:-1:0:-1:Eu<C?Xp<C?Li<C?qn<C?Lp<C?Wa<C?0:-1:0:-1:Hi<C?Jc<C?0:-1:0:-1:Xh<C?gu<C?Yu<C?Na<C?0:-1:0:-1:nb<C?Ih<C?0:-1:0:-1:ra<C?Hf<C?Qb<C?Cf<C?cu<C?Ed<C?Md<C?Kv<C?gl<C?Xs<C?$p<C?Zi<C?0:-1:0:-1:To<C?zi<C?0:-1:0:-1:ok<C?tu<C?Wl<C?Sd<C?0:-1:0:-1:sh<C?mh<C?0:-1:0:-1:Tl<C?Xo<C?Rh<C?Ss<C?Ks<C?gs<C?0:-1:0:-1:Dd<C?zk<C?0:-1:0:-1:qf<C?Rk<C?qu<C?Fk<C?0:-1:0:-1:eo<C?vc<C?0:-1:0:-1:Mi<C?pf<C?_u<C?Gb<C?Yf<C?ob<C?Bf<C?uh<C?0:-1:0:-1:Cs<C?yf<C?0:-1:0:-1:Yh<C?mi<C?Hl<C?sd<C?0:-1:0:-1:Vk<C?vd<C?0:-1:0:-1:np<C?mp<C?fk<C?fc<C?$i<C?fb<C?0:-1:0:-1:Ri<C?dc<C?0:-1:0:-1:cc<C?Td<C?Ev<C?$u<C?0:-1:0:-1:Aa<C?nh<C?0:-1:0:-1:vl<C?uo<C?Qv<C?Xv<C?xv<C?Ic<C?cp<C?Jv<C?hh<C?Cb<C?0:-1:0:-1:qh<C?ih<C?0:-1:0:-1:ru<C?yk<C?tf<C?Fi<C?0:-1:0:-1:Sv<C?Df<C?0:-1:0:-1:ud<C?Ph<C?xa<C?Xu<C?Tu<C?ic<C?0:-1:0:-1:Ja<C?wc<C?0:-1:0:-1:ss<C?nv<C?Uh<C?hl<C?0:-1:0:-1:Dl<C?ub<C?0:-1:0:-1:pl<C?ka<C?Ai<C?Ah<C?sf<C?jp<C?Cd<C?Kh<C?0:-1:0:-1:Sa<C?Oh<C?0:-1:0:-1:Gi<C?ql<C?Vn<C?Es<C?0:-1:0:-1:pv<C?_s<C?0:-1:0:-1:Jh<C?Da<C?Bb<C?bo<C?Mf<C?af<C?0:-1:0:-1:Gh<C?Qa<C?0:-1:0:-1:Rp<C?Hb<C?uf<C?mv<C?0:-1:0:-1:Yb<C?ki<C?0:-1:0:-1:Qh<C?Lc<C?Lf<C?mf<C?Hp<C?uv<C?Op<C?Tp<C?Bn<C?Qo<C?Ei<C?ep<C?wl<C?ao<C?0:-1:0:-1:fi<C?Yv<C?0:-1:0:-1:jd<C?$f<C?ld<C?Xk<C?0:-1:0:-1:Vv<C?ll<C?0:-1:0:-1:_h<C?Ro<C?xk<C?Sh<C?uc<C?rp<C?0:-1:0:-1:Ff<C?jb<C?0:-1:0:-1:pk<C?Si<C?Ik<C?Th<C?0:-1:0:-1:No<C?Gn<C?0:-1:0:-1:zc<C?Kn<C?so<C?Fa<C?Oi<C?gv<C?Jk<C?wo<C?0:-1:0:-1:Ea<C?Ul<C?0:-1:0:-1:ed<C?tl<C?Zb<C?wh<C?0:-1:0:-1:gf<C?Ms<C?0:-1:0:-1:qk<C?cf<C?ys<C?Ck<C?Wn<C?Zv<C?0:-1:0:-1:zo<C?Dh<C?0:-1:0:-1:Eo<C?sv<C?gc<C?Dc<C?0:-1:0:-1:vb<C?bb<C?0:-1:0:-1:sp<C?eu<C?Vc<C?pa<C?Hh<C?ts<C?Ys<C?Ak<C?pb<C?ba<C?0:-1:0:-1:Ip<C?nd<C?0:-1:0:-1:Rb<C?Vi<C?ou<C?ef<C?0:-1:0:-1:Fd<C?Ca<C?0:-1:0:-1:Bo<C?_d<C?Po<C?qc<C?zs<C?Tk<C?0:-1:0:-1:kv<C?ac<C?0:-1:0:-1:qb<C?Kf<C?vo<C?Rv<C?0:-1:0:-1:ik<C?xc<C?0:-1:0:-1:td<C?Sk<C?Un<C?rc<C?go<C?li<C?Vp<C?Vf<C?0:-1:0:-1:sc<C?Jo<C?0:-1:0:-1:op<C?Fu<C?rb<C?vh<C?0:-1:0:-1:ri<C?Ok<C?0:-1:0:-1:bu<C?ea<C?Rn<C?Uu<C?Tv<C?da<C?0:-1:0:-1:Qs<C?Yn<C?0:-1:0:-1:xu<C?zl<C?tc<C?Kl<C?0:-1:0:-1:Qu<C?gk<C?0:-1:0:-1:Zc<C?Au<C?_o<C?Cv<C?wa<C?sk<C?xd<C?zb<C?Ld<C?Zf<C?Zp<C?Ui<C?0:-1:0:-1:hk<C?xi<C?0:-1:0:-1:rd<C?Nf<C?id<C?eb<C?0:-1:0:-1:Ln<C?iu<C?0:-1:0:-1:ds<C?Zk<C?ip<C?nf<C?to<C?lu<C?0:-1:0:-1:Yc<C?fo<C?0:-1:0:-1:aa<C?ma<C?kc<C?Jf<C?0:-1:0:-1:ro<C?Do<C?0:-1:0:-1:Rs<C?wi<C?ap<C?Gf<C?mu<C?Gv<C?Eh<C?iv<C?0:-1:0:-1:Yi<C?vv<C?0:-1:0:-1:lv<C?$h<C?Xn<C?ya<C?0:-1:0:-1:Rc<C?xo<C?0:-1:0:-1:Ru<C?Ci<C?_l<C?Tc<C?gd<C?Xa<C?0:-1:0:-1:po<C?cs<C?0:-1:0:-1:Kb<C?io<C?Wk<C?vf<C?0:-1:0:-1:si<C?su<C?0:-1:0:-1:jc<C?ja<C?tp<C?Ju<C?zu<C?Di<C?mo<C?hf<C?fl<C?Ol<C?0:-1:0:-1:bk<C?oo<C?0:-1:0:-1:lb<C?df<C?_c<C?Ho<C?0:-1:0:-1:yl<C?Ek<C?0:-1:0:-1:di<C?rh<C?rk<C?Sp<C?Ii<C?Iu<C?0:-1:0:-1:Iv<C?Pu<C?0:-1:0:-1:Ob<C?So<C?dl<C?Hu<C?0:-1:0:-1:ta<C?_a<C?0:-1:0:-1:us<C?ws<C?Ws<C?ii<C?Mh<C?fd<C?Ou<C?zn<C?0:-1:0:-1:pi<C?qv<C?0:-1:0:-1:Uv<C?ku<C?od<C?ph<C?0:-1:0:-1:Os<C?lc<C?0:-1:0:-1:Ni<C?Bh<C?nu<C?ei<C?ck<C?Vl<C?0:-1:0:-1:Cc<C?Sf<C?0:-1:0:-1:_k<C?$c<C?Ns<C?La<C?0:-1:0:-1:Il<C?Wu<C?0:-1:0:-1:cr($H,C+Ao|0)-1|0:-1;if(0===N)return t(k);if(1===N){_n(k,19);var L=gn(k),R=35<L?Ec<L?Qp<L?$l<L?-1:kk<L?th<L?Lo<L?Nd<L?Ba<L?Zo<L?As<L?Bp<L?0:-1:0:-1:la<L?vk<L?0:-1:0:-1:bl<L?Du<L?Ud<L?Js<L?0:-1:0:-1:kh<L?Yl<L?0:-1:0:-1:wv<L?bs<L?Mv<L?fp<L?Zl<L?Ya<L?Nl<L?Gk<L?Uk<L?Wc<L?$s<L?yp<L?qs<L?is<L?uk<L?Is<L?0:-1:0:-1:ib<L?du<L?0:-1:0:-1:gp<L?vs<L?Ma<L?Yo<L?0:-1:0:-1:Bs<L?Sb<L?0:-1:0:-1:Wv<L?Wi<L?Ki<L?Ab<L?gi<L?oa<L?0:-1:0:-1:Uf<L?ho<L?0:-1:0:-1:cd<L?Ll<L?Vu<L?fv<L?0:-1:0:-1:Yp<L?lk<L?0:-1:0:-1:Pp<L?el<L?Zs<L?Rf<L?Nb<L?oc<L?Ps<L?El<L?0:-1:0:-1:Xf<L?xh<L?0:-1:0:-1:Cu<L?Pv<L?Wo<L?Ia<L?0:-1:0:-1:Af<L?Wf<L?0:-1:0:-1:kd<L?Xi<L?os<L?Pc<L?ia<L?pc<L?0:-1:0:-1:Up<L?ch<L?0:-1:0:-1:Qf<L?tb<L?Dn<L?zf<L?0:-1:0:-1:bc<L?ov<L?0:-1:0:-1:dk<L?Bc<L?ek<L?$n<L?wu<L?Ti<L?Lv<L?Vb<L?sa<L?js<L?0:-1:0:-1:Db<L?Ds<L?0:-1:0:-1:Pl<L?ms<L?zh<L?kb<L?0:-1:0:-1:ad<L?ks<L?0:-1:0:-1:jf<L?Ra<L?dv<L?Co<L?ga<L?Rd<L?0:-1:0:-1:ju<L?Bi<L?0:-1:0:-1:_f<L?Xb<L?Us<L?Nh<L?0:-1:0:-1:Ml<L?wk<L?0:-1:0:-1:Dv<L?db<L?kl<L?ns<L?Oo<L?Mp<L?Tf<L?yi<L?0:-1:0:-1:bh<L?nk<L?0:-1:0:-1:Lu<L?dh<L?Eb<L?ev<L?0:-1:0:-1:Sc<L?nc<L?0:-1:0:-1:Eu<L?Xp<L?Li<L?qn<L?Lp<L?Wa<L?0:-1:0:-1:Hi<L?Jc<L?0:-1:0:-1:Xh<L?gu<L?Yu<L?Na<L?0:-1:0:-1:nb<L?Ih<L?0:-1:0:-1:ra<L?Hf<L?Qb<L?Cf<L?cu<L?Ed<L?Md<L?Kv<L?gl<L?Xs<L?$p<L?Zi<L?0:-1:0:-1:To<L?zi<L?0:-1:0:-1:ok<L?tu<L?Wl<L?Sd<L?0:-1:0:-1:sh<L?mh<L?0:-1:0:-1:Tl<L?Xo<L?Rh<L?Ss<L?Ks<L?gs<L?0:-1:0:-1:Dd<L?zk<L?0:-1:0:-1:qf<L?Rk<L?qu<L?Fk<L?0:-1:0:-1:eo<L?vc<L?0:-1:0:-1:Mi<L?pf<L?_u<L?Gb<L?Yf<L?ob<L?Bf<L?uh<L?0:-1:0:-1:Cs<L?yf<L?0:-1:0:-1:Yh<L?mi<L?Hl<L?sd<L?0:-1:0:-1:Vk<L?vd<L?0:-1:0:-1:np<L?mp<L?fk<L?fc<L?$i<L?fb<L?0:-1:0:-1:Ri<L?dc<L?0:-1:0:-1:cc<L?Td<L?Ev<L?$u<L?0:-1:0:-1:Aa<L?nh<L?0:-1:0:-1:vl<L?uo<L?Qv<L?Xv<L?xv<L?Ic<L?cp<L?Jv<L?hh<L?Cb<L?0:-1:0:-1:qh<L?ih<L?0:-1:0:-1:ru<L?yk<L?tf<L?Fi<L?0:-1:0:-1:Sv<L?Df<L?0:-1:0:-1:ud<L?Ph<L?xa<L?Xu<L?Tu<L?ic<L?0:-1:0:-1:Ja<L?wc<L?0:-1:0:-1:ss<L?nv<L?Uh<L?hl<L?0:-1:0:-1:Dl<L?ub<L?0:-1:0:-1:pl<L?ka<L?Ai<L?Ah<L?sf<L?jp<L?Cd<L?Kh<L?0:-1:0:-1:Sa<L?Oh<L?0:-1:0:-1:Gi<L?ql<L?Vn<L?Es<L?0:-1:0:-1:pv<L?_s<L?0:-1:0:-1:Jh<L?Da<L?Bb<L?bo<L?Mf<L?af<L?0:-1:0:-1:Gh<L?Qa<L?0:-1:0:-1:Rp<L?Hb<L?uf<L?mv<L?0:-1:0:-1:Yb<L?ki<L?0:-1:0:-1:Qh<L?Lc<L?Lf<L?mf<L?Hp<L?uv<L?Op<L?Tp<L?Bn<L?Qo<L?Ei<L?ep<L?wl<L?ao<L?0:-1:0:-1:fi<L?Yv<L?0:-1:0:-1:jd<L?$f<L?ld<L?Xk<L?0:-1:0:-1:Vv<L?ll<L?0:-1:0:-1:_h<L?Ro<L?xk<L?Sh<L?uc<L?rp<L?0:-1:0:-1:Ff<L?jb<L?0:-1:0:-1:pk<L?Si<L?Ik<L?Th<L?0:-1:0:-1:No<L?Gn<L?0:-1:0:-1:zc<L?Kn<L?so<L?Fa<L?Oi<L?gv<L?Jk<L?wo<L?0:-1:0:-1:Ea<L?Ul<L?0:-1:0:-1:ed<L?tl<L?Zb<L?wh<L?0:-1:0:-1:gf<L?Ms<L?0:-1:0:-1:qk<L?cf<L?ys<L?Ck<L?Wn<L?Zv<L?0:-1:0:-1:zo<L?Dh<L?0:-1:0:-1:Eo<L?sv<L?gc<L?Dc<L?0:-1:0:-1:vb<L?bb<L?0:-1:0:-1:sp<L?eu<L?Vc<L?pa<L?Hh<L?ts<L?Ys<L?Ak<L?pb<L?ba<L?0:-1:0:-1:Ip<L?nd<L?0:-1:0:-1:Rb<L?Vi<L?ou<L?ef<L?0:-1:0:-1:Fd<L?Ca<L?0:-1:0:-1:Bo<L?_d<L?Po<L?qc<L?zs<L?Tk<L?0:-1:0:-1:kv<L?ac<L?0:-1:0:-1:qb<L?Kf<L?vo<L?Rv<L?0:-1:0:-1:ik<L?xc<L?0:-1:0:-1:td<L?Sk<L?Un<L?rc<L?go<L?li<L?Vp<L?Vf<L?0:-1:0:-1:sc<L?Jo<L?0:-1:0:-1:op<L?Fu<L?rb<L?vh<L?0:-1:0:-1:ri<L?Ok<L?0:-1:0:-1:bu<L?ea<L?Rn<L?Uu<L?Tv<L?da<L?0:-1:0:-1:Qs<L?Yn<L?0:-1:0:-1:xu<L?zl<L?tc<L?Kl<L?0:-1:0:-1:Qu<L?gk<L?0:-1:0:-1:Zc<L?Au<L?_o<L?Cv<L?wa<L?sk<L?xd<L?zb<L?Ld<L?Zf<L?Zp<L?Ui<L?0:-1:0:-1:hk<L?xi<L?0:-1:0:-1:rd<L?Nf<L?id<L?eb<L?0:-1:0:-1:Ln<L?iu<L?0:-1:0:-1:ds<L?Zk<L?ip<L?nf<L?to<L?lu<L?0:-1:0:-1:Yc<L?fo<L?0:-1:0:-1:aa<L?ma<L?kc<L?Jf<L?0:-1:0:-1:ro<L?Do<L?0:-1:0:-1:Rs<L?wi<L?ap<L?Gf<L?mu<L?Gv<L?Eh<L?iv<L?0:-1:0:-1:Yi<L?vv<L?0:-1:0:-1:lv<L?$h<L?Xn<L?ya<L?0:-1:0:-1:Rc<L?xo<L?0:-1:0:-1:Ru<L?Ci<L?_l<L?Tc<L?gd<L?Xa<L?0:-1:0:-1:po<L?cs<L?0:-1:0:-1:Kb<L?io<L?Wk<L?vf<L?0:-1:0:-1:si<L?su<L?0:-1:0:-1:jc<L?ja<L?tp<L?Ju<L?zu<L?Di<L?mo<L?hf<L?fl<L?Ol<L?0:-1:0:-1:bk<L?oo<L?0:-1:0:-1:lb<L?df<L?_c<L?Ho<L?0:-1:0:-1:yl<L?Ek<L?0:-1:0:-1:di<L?rh<L?rk<L?Sp<L?Ii<L?Iu<L?0:-1:0:-1:Iv<L?Pu<L?0:-1:0:-1:Ob<L?So<L?dl<L?Hu<L?0:-1:0:-1:ta<L?_a<L?0:-1:0:-1:us<L?ws<L?Ws<L?ii<L?Mh<L?fd<L?Ou<L?zn<L?0:-1:0:-1:pi<L?qv<L?0:-1:0:-1:Uv<L?ku<L?od<L?ph<L?0:-1:0:-1:Os<L?lc<L?0:-1:0:-1:Ni<L?Bh<L?nu<L?ei<L?ck<L?Vl<L?0:-1:0:-1:Cc<L?Sf<L?0:-1:0:-1:_k<L?$c<L?Ns<L?La<L?0:-1:0:-1:Il<L?Wu<L?0:-1:0:-1:cr(KH,L+Ao|0)-1|0:-1;if(0===R)return t(k);if(1===R){_n(k,19);var P=gn(k),O=35<P?Ec<P?Qp<P?$l<P?-1:kk<P?th<P?Lo<P?Nd<P?Ba<P?Zo<P?As<P?Bp<P?0:-1:0:-1:la<P?vk<P?0:-1:0:-1:bl<P?Du<P?Ud<P?Js<P?0:-1:0:-1:kh<P?Yl<P?0:-1:0:-1:wv<P?bs<P?Mv<P?fp<P?Zl<P?Ya<P?Nl<P?Gk<P?Uk<P?Wc<P?$s<P?yp<P?qs<P?is<P?uk<P?Is<P?0:-1:0:-1:ib<P?du<P?0:-1:0:-1:gp<P?vs<P?Ma<P?Yo<P?0:-1:0:-1:Bs<P?Sb<P?0:-1:0:-1:Wv<P?Wi<P?Ki<P?Ab<P?gi<P?oa<P?0:-1:0:-1:Uf<P?ho<P?0:-1:0:-1:cd<P?Ll<P?Vu<P?fv<P?0:-1:0:-1:Yp<P?lk<P?0:-1:0:-1:Pp<P?el<P?Zs<P?Rf<P?Nb<P?oc<P?Ps<P?El<P?0:-1:0:-1:Xf<P?xh<P?0:-1:0:-1:Cu<P?Pv<P?Wo<P?Ia<P?0:-1:0:-1:Af<P?Wf<P?0:-1:0:-1:kd<P?Xi<P?os<P?Pc<P?ia<P?pc<P?0:-1:0:-1:Up<P?ch<P?0:-1:0:-1:Qf<P?tb<P?Dn<P?zf<P?0:-1:0:-1:bc<P?ov<P?0:-1:0:-1:dk<P?Bc<P?ek<P?$n<P?wu<P?Ti<P?Lv<P?Vb<P?sa<P?js<P?0:-1:0:-1:Db<P?Ds<P?0:-1:0:-1:Pl<P?ms<P?zh<P?kb<P?0:-1:0:-1:ad<P?ks<P?0:-1:0:-1:jf<P?Ra<P?dv<P?Co<P?ga<P?Rd<P?0:-1:0:-1:ju<P?Bi<P?0:-1:0:-1:_f<P?Xb<P?Us<P?Nh<P?0:-1:0:-1:Ml<P?wk<P?0:-1:0:-1:Dv<P?db<P?kl<P?ns<P?Oo<P?Mp<P?Tf<P?yi<P?0:-1:0:-1:bh<P?nk<P?0:-1:0:-1:Lu<P?dh<P?Eb<P?ev<P?0:-1:0:-1:Sc<P?nc<P?0:-1:0:-1:Eu<P?Xp<P?Li<P?qn<P?Lp<P?Wa<P?0:-1:0:-1:Hi<P?Jc<P?0:-1:0:-1:Xh<P?gu<P?Yu<P?Na<P?0:-1:0:-1:nb<P?Ih<P?0:-1:0:-1:ra<P?Hf<P?Qb<P?Cf<P?cu<P?Ed<P?Md<P?Kv<P?gl<P?Xs<P?$p<P?Zi<P?0:-1:0:-1:To<P?zi<P?0:-1:0:-1:ok<P?tu<P?Wl<P?Sd<P?0:-1:0:-1:sh<P?mh<P?0:-1:0:-1:Tl<P?Xo<P?Rh<P?Ss<P?Ks<P?gs<P?0:-1:0:-1:Dd<P?zk<P?0:-1:0:-1:qf<P?Rk<P?qu<P?Fk<P?0:-1:0:-1:eo<P?vc<P?0:-1:0:-1:Mi<P?pf<P?_u<P?Gb<P?Yf<P?ob<P?Bf<P?uh<P?0:-1:0:-1:Cs<P?yf<P?0:-1:0:-1:Yh<P?mi<P?Hl<P?sd<P?0:-1:0:-1:Vk<P?vd<P?0:-1:0:-1:np<P?mp<P?fk<P?fc<P?$i<P?fb<P?0:-1:0:-1:Ri<P?dc<P?0:-1:0:-1:cc<P?Td<P?Ev<P?$u<P?0:-1:0:-1:Aa<P?nh<P?0:-1:0:-1:vl<P?uo<P?Qv<P?Xv<P?xv<P?Ic<P?cp<P?Jv<P?hh<P?Cb<P?0:-1:0:-1:qh<P?ih<P?0:-1:0:-1:ru<P?yk<P?tf<P?Fi<P?0:-1:0:-1:Sv<P?Df<P?0:-1:0:-1:ud<P?Ph<P?xa<P?Xu<P?Tu<P?ic<P?0:-1:0:-1:Ja<P?wc<P?0:-1:0:-1:ss<P?nv<P?Uh<P?hl<P?0:-1:0:-1:Dl<P?ub<P?0:-1:0:-1:pl<P?ka<P?Ai<P?Ah<P?sf<P?jp<P?Cd<P?Kh<P?0:-1:0:-1:Sa<P?Oh<P?0:-1:0:-1:Gi<P?ql<P?Vn<P?Es<P?0:-1:0:-1:pv<P?_s<P?0:-1:0:-1:Jh<P?Da<P?Bb<P?bo<P?Mf<P?af<P?0:-1:0:-1:Gh<P?Qa<P?0:-1:0:-1:Rp<P?Hb<P?uf<P?mv<P?0:-1:0:-1:Yb<P?ki<P?0:-1:0:-1:Qh<P?Lc<P?Lf<P?mf<P?Hp<P?uv<P?Op<P?Tp<P?Bn<P?Qo<P?Ei<P?ep<P?wl<P?ao<P?0:-1:0:-1:fi<P?Yv<P?0:-1:0:-1:jd<P?$f<P?ld<P?Xk<P?0:-1:0:-1:Vv<P?ll<P?0:-1:0:-1:_h<P?Ro<P?xk<P?Sh<P?uc<P?rp<P?0:-1:0:-1:Ff<P?jb<P?0:-1:0:-1:pk<P?Si<P?Ik<P?Th<P?0:-1:0:-1:No<P?Gn<P?0:-1:0:-1:zc<P?Kn<P?so<P?Fa<P?Oi<P?gv<P?Jk<P?wo<P?0:-1:0:-1:Ea<P?Ul<P?0:-1:0:-1:ed<P?tl<P?Zb<P?wh<P?0:-1:0:-1:gf<P?Ms<P?0:-1:0:-1:qk<P?cf<P?ys<P?Ck<P?Wn<P?Zv<P?0:-1:0:-1:zo<P?Dh<P?0:-1:0:-1:Eo<P?sv<P?gc<P?Dc<P?0:-1:0:-1:vb<P?bb<P?0:-1:0:-1:sp<P?eu<P?Vc<P?pa<P?Hh<P?ts<P?Ys<P?Ak<P?pb<P?ba<P?0:-1:0:-1:Ip<P?nd<P?0:-1:0:-1:Rb<P?Vi<P?ou<P?ef<P?0:-1:0:-1:Fd<P?Ca<P?0:-1:0:-1:Bo<P?_d<P?Po<P?qc<P?zs<P?Tk<P?0:-1:0:-1:kv<P?ac<P?0:-1:0:-1:qb<P?Kf<P?vo<P?Rv<P?0:-1:0:-1:ik<P?xc<P?0:-1:0:-1:td<P?Sk<P?Un<P?rc<P?go<P?li<P?Vp<P?Vf<P?0:-1:0:-1:sc<P?Jo<P?0:-1:0:-1:op<P?Fu<P?rb<P?vh<P?0:-1:0:-1:ri<P?Ok<P?0:-1:0:-1:bu<P?ea<P?Rn<P?Uu<P?Tv<P?da<P?0:-1:0:-1:Qs<P?Yn<P?0:-1:0:-1:xu<P?zl<P?tc<P?Kl<P?0:-1:0:-1:Qu<P?gk<P?0:-1:0:-1:Zc<P?Au<P?_o<P?Cv<P?wa<P?sk<P?xd<P?zb<P?Ld<P?Zf<P?Zp<P?Ui<P?0:-1:0:-1:hk<P?xi<P?0:-1:0:-1:rd<P?Nf<P?id<P?eb<P?0:-1:0:-1:Ln<P?iu<P?0:-1:0:-1:ds<P?Zk<P?ip<P?nf<P?to<P?lu<P?0:-1:0:-1:Yc<P?fo<P?0:-1:0:-1:aa<P?ma<P?kc<P?Jf<P?0:-1:0:-1:ro<P?Do<P?0:-1:0:-1:Rs<P?wi<P?ap<P?Gf<P?mu<P?Gv<P?Eh<P?iv<P?0:-1:0:-1:Yi<P?vv<P?0:-1:0:-1:lv<P?$h<P?Xn<P?ya<P?0:-1:0:-1:Rc<P?xo<P?0:-1:0:-1:Ru<P?Ci<P?_l<P?Tc<P?gd<P?Xa<P?0:-1:0:-1:po<P?cs<P?0:-1:0:-1:Kb<P?io<P?Wk<P?vf<P?0:-1:0:-1:si<P?su<P?0:-1:0:-1:jc<P?ja<P?tp<P?Ju<P?zu<P?Di<P?mo<P?hf<P?fl<P?Ol<P?0:-1:0:-1:bk<P?oo<P?0:-1:0:-1:lb<P?df<P?_c<P?Ho<P?0:-1:0:-1:yl<P?Ek<P?0:-1:0:-1:di<P?rh<P?rk<P?Sp<P?Ii<P?Iu<P?0:-1:0:-1:Iv<P?Pu<P?0:-1:0:-1:Ob<P?So<P?dl<P?Hu<P?0:-1:0:-1:ta<P?_a<P?0:-1:0:-1:us<P?ws<P?Ws<P?ii<P?Mh<P?fd<P?Ou<P?zn<P?0:-1:0:-1:pi<P?qv<P?0:-1:0:-1:Uv<P?ku<P?od<P?ph<P?0:-1:0:-1:Os<P?lc<P?0:-1:0:-1:Ni<P?Bh<P?nu<P?ei<P?ck<P?Vl<P?0:-1:0:-1:Cc<P?Sf<P?0:-1:0:-1:_k<P?$c<P?Ns<P?La<P?0:-1:0:-1:Il<P?Wu<P?0:-1:0:-1:cr(rW,P+Ao|0)-1|0:-1;if(0===O)return t(k);if(1===O){_n(k,19);var U=gn(k),D=35<U?Ec<U?Qp<U?$l<U?-1:kk<U?th<U?Lo<U?Nd<U?Ba<U?Zo<U?As<U?Bp<U?0:-1:0:-1:la<U?vk<U?0:-1:0:-1:bl<U?Du<U?Ud<U?Js<U?0:-1:0:-1:kh<U?Yl<U?0:-1:0:-1:wv<U?bs<U?Mv<U?fp<U?Zl<U?Ya<U?Nl<U?Gk<U?Uk<U?Wc<U?$s<U?yp<U?qs<U?is<U?uk<U?Is<U?0:-1:0:-1:ib<U?du<U?0:-1:0:-1:gp<U?vs<U?Ma<U?Yo<U?0:-1:0:-1:Bs<U?Sb<U?0:-1:0:-1:Wv<U?Wi<U?Ki<U?Ab<U?gi<U?oa<U?0:-1:0:-1:Uf<U?ho<U?0:-1:0:-1:cd<U?Ll<U?Vu<U?fv<U?0:-1:0:-1:Yp<U?lk<U?0:-1:0:-1:Pp<U?el<U?Zs<U?Rf<U?Nb<U?oc<U?Ps<U?El<U?0:-1:0:-1:Xf<U?xh<U?0:-1:0:-1:Cu<U?Pv<U?Wo<U?Ia<U?0:-1:0:-1:Af<U?Wf<U?0:-1:0:-1:kd<U?Xi<U?os<U?Pc<U?ia<U?pc<U?0:-1:0:-1:Up<U?ch<U?0:-1:0:-1:Qf<U?tb<U?Dn<U?zf<U?0:-1:0:-1:bc<U?ov<U?0:-1:0:-1:dk<U?Bc<U?ek<U?$n<U?wu<U?Ti<U?Lv<U?Vb<U?sa<U?js<U?0:-1:0:-1:Db<U?Ds<U?0:-1:0:-1:Pl<U?ms<U?zh<U?kb<U?0:-1:0:-1:ad<U?ks<U?0:-1:0:-1:jf<U?Ra<U?dv<U?Co<U?ga<U?Rd<U?0:-1:0:-1:ju<U?Bi<U?0:-1:0:-1:_f<U?Xb<U?Us<U?Nh<U?0:-1:0:-1:Ml<U?wk<U?0:-1:0:-1:Dv<U?db<U?kl<U?ns<U?Oo<U?Mp<U?Tf<U?yi<U?0:-1:0:-1:bh<U?nk<U?0:-1:0:-1:Lu<U?dh<U?Eb<U?ev<U?0:-1:0:-1:Sc<U?nc<U?0:-1:0:-1:Eu<U?Xp<U?Li<U?qn<U?Lp<U?Wa<U?0:-1:0:-1:Hi<U?Jc<U?0:-1:0:-1:Xh<U?gu<U?Yu<U?Na<U?0:-1:0:-1:nb<U?Ih<U?0:-1:0:-1:ra<U?Hf<U?Qb<U?Cf<U?cu<U?Ed<U?Md<U?Kv<U?gl<U?Xs<U?$p<U?Zi<U?0:-1:0:-1:To<U?zi<U?0:-1:0:-1:ok<U?tu<U?Wl<U?Sd<U?0:-1:0:-1:sh<U?mh<U?0:-1:0:-1:Tl<U?Xo<U?Rh<U?Ss<U?Ks<U?gs<U?0:-1:0:-1:Dd<U?zk<U?0:-1:0:-1:qf<U?Rk<U?qu<U?Fk<U?0:-1:0:-1:eo<U?vc<U?0:-1:0:-1:Mi<U?pf<U?_u<U?Gb<U?Yf<U?ob<U?Bf<U?uh<U?0:-1:0:-1:Cs<U?yf<U?0:-1:0:-1:Yh<U?mi<U?Hl<U?sd<U?0:-1:0:-1:Vk<U?vd<U?0:-1:0:-1:np<U?mp<U?fk<U?fc<U?$i<U?fb<U?0:-1:0:-1:Ri<U?dc<U?0:-1:0:-1:cc<U?Td<U?Ev<U?$u<U?0:-1:0:-1:Aa<U?nh<U?0:-1:0:-1:vl<U?uo<U?Qv<U?Xv<U?xv<U?Ic<U?cp<U?Jv<U?hh<U?Cb<U?0:-1:0:-1:qh<U?ih<U?0:-1:0:-1:ru<U?yk<U?tf<U?Fi<U?0:-1:0:-1:Sv<U?Df<U?0:-1:0:-1:ud<U?Ph<U?xa<U?Xu<U?Tu<U?ic<U?0:-1:0:-1:Ja<U?wc<U?0:-1:0:-1:ss<U?nv<U?Uh<U?hl<U?0:-1:0:-1:Dl<U?ub<U?0:-1:0:-1:pl<U?ka<U?Ai<U?Ah<U?sf<U?jp<U?Cd<U?Kh<U?0:-1:0:-1:Sa<U?Oh<U?0:-1:0:-1:Gi<U?ql<U?Vn<U?Es<U?0:-1:0:-1:pv<U?_s<U?0:-1:0:-1:Jh<U?Da<U?Bb<U?bo<U?Mf<U?af<U?0:-1:0:-1:Gh<U?Qa<U?0:-1:0:-1:Rp<U?Hb<U?uf<U?mv<U?0:-1:0:-1:Yb<U?ki<U?0:-1:0:-1:Qh<U?Lc<U?Lf<U?mf<U?Hp<U?uv<U?Op<U?Tp<U?Bn<U?Qo<U?Ei<U?ep<U?wl<U?ao<U?0:-1:0:-1:fi<U?Yv<U?0:-1:0:-1:jd<U?$f<U?ld<U?Xk<U?0:-1:0:-1:Vv<U?ll<U?0:-1:0:-1:_h<U?Ro<U?xk<U?Sh<U?uc<U?rp<U?0:-1:0:-1:Ff<U?jb<U?0:-1:0:-1:pk<U?Si<U?Ik<U?Th<U?0:-1:0:-1:No<U?Gn<U?0:-1:0:-1:zc<U?Kn<U?so<U?Fa<U?Oi<U?gv<U?Jk<U?wo<U?0:-1:0:-1:Ea<U?Ul<U?0:-1:0:-1:ed<U?tl<U?Zb<U?wh<U?0:-1:0:-1:gf<U?Ms<U?0:-1:0:-1:qk<U?cf<U?ys<U?Ck<U?Wn<U?Zv<U?0:-1:0:-1:zo<U?Dh<U?0:-1:0:-1:Eo<U?sv<U?gc<U?Dc<U?0:-1:0:-1:vb<U?bb<U?0:-1:0:-1:sp<U?eu<U?Vc<U?pa<U?Hh<U?ts<U?Ys<U?Ak<U?pb<U?ba<U?0:-1:0:-1:Ip<U?nd<U?0:-1:0:-1:Rb<U?Vi<U?ou<U?ef<U?0:-1:0:-1:Fd<U?Ca<U?0:-1:0:-1:Bo<U?_d<U?Po<U?qc<U?zs<U?Tk<U?0:-1:0:-1:kv<U?ac<U?0:-1:0:-1:qb<U?Kf<U?vo<U?Rv<U?0:-1:0:-1:ik<U?xc<U?0:-1:0:-1:td<U?Sk<U?Un<U?rc<U?go<U?li<U?Vp<U?Vf<U?0:-1:0:-1:sc<U?Jo<U?0:-1:0:-1:op<U?Fu<U?rb<U?vh<U?0:-1:0:-1:ri<U?Ok<U?0:-1:0:-1:bu<U?ea<U?Rn<U?Uu<U?Tv<U?da<U?0:-1:0:-1:Qs<U?Yn<U?0:-1:0:-1:xu<U?zl<U?tc<U?Kl<U?0:-1:0:-1:Qu<U?gk<U?0:-1:0:-1:Zc<U?Au<U?_o<U?Cv<U?wa<U?sk<U?xd<U?zb<U?Ld<U?Zf<U?Zp<U?Ui<U?0:-1:0:-1:hk<U?xi<U?0:-1:0:-1:rd<U?Nf<U?id<U?eb<U?0:-1:0:-1:Ln<U?iu<U?0:-1:0:-1:ds<U?Zk<U?ip<U?nf<U?to<U?lu<U?0:-1:0:-1:Yc<U?fo<U?0:-1:0:-1:aa<U?ma<U?kc<U?Jf<U?0:-1:0:-1:ro<U?Do<U?0:-1:0:-1:Rs<U?wi<U?ap<U?Gf<U?mu<U?Gv<U?Eh<U?iv<U?0:-1:0:-1:Yi<U?vv<U?0:-1:0:-1:lv<U?$h<U?Xn<U?ya<U?0:-1:0:-1:Rc<U?xo<U?0:-1:0:-1:Ru<U?Ci<U?_l<U?Tc<U?gd<U?Xa<U?0:-1:0:-1:po<U?cs<U?0:-1:0:-1:Kb<U?io<U?Wk<U?vf<U?0:-1:0:-1:si<U?su<U?0:-1:0:-1:jc<U?ja<U?tp<U?Ju<U?zu<U?Di<U?mo<U?hf<U?fl<U?Ol<U?0:-1:0:-1:bk<U?oo<U?0:-1:0:-1:lb<U?df<U?_c<U?Ho<U?0:-1:0:-1:yl<U?Ek<U?0:-1:0:-1:di<U?rh<U?rk<U?Sp<U?Ii<U?Iu<U?0:-1:0:-1:Iv<U?Pu<U?0:-1:0:-1:Ob<U?So<U?dl<U?Hu<U?0:-1:0:-1:ta<U?_a<U?0:-1:0:-1:us<U?ws<U?Ws<U?ii<U?Mh<U?fd<U?Ou<U?zn<U?0:-1:0:-1:pi<U?qv<U?0:-1:0:-1:Uv<U?ku<U?od<U?ph<U?0:-1:0:-1:Os<U?lc<U?0:-1:0:-1:Ni<U?Bh<U?nu<U?ei<U?ck<U?Vl<U?0:-1:0:-1:Cc<U?Sf<U?0:-1:0:-1:_k<U?$c<U?Ns<U?La<U?0:-1:0:-1:Il<U?Wu<U?0:-1:0:-1:cr(VH,U+Ao|0)-1|0:-1;if(0===D)return t(k);if(1===D){_n(k,19);var M=gn(k),F=35<M?Ec<M?Qp<M?$l<M?-1:kk<M?th<M?Lo<M?Nd<M?Ba<M?Zo<M?As<M?Bp<M?0:-1:0:-1:la<M?vk<M?0:-1:0:-1:bl<M?Du<M?Ud<M?Js<M?0:-1:0:-1:kh<M?Yl<M?0:-1:0:-1:wv<M?bs<M?Mv<M?fp<M?Zl<M?Ya<M?Nl<M?Gk<M?Uk<M?Wc<M?$s<M?yp<M?qs<M?is<M?uk<M?Is<M?0:-1:0:-1:ib<M?du<M?0:-1:0:-1:gp<M?vs<M?Ma<M?Yo<M?0:-1:0:-1:Bs<M?Sb<M?0:-1:0:-1:Wv<M?Wi<M?Ki<M?Ab<M?gi<M?oa<M?0:-1:0:-1:Uf<M?ho<M?0:-1:0:-1:cd<M?Ll<M?Vu<M?fv<M?0:-1:0:-1:Yp<M?lk<M?0:-1:0:-1:Pp<M?el<M?Zs<M?Rf<M?Nb<M?oc<M?Ps<M?El<M?0:-1:0:-1:Xf<M?xh<M?0:-1:0:-1:Cu<M?Pv<M?Wo<M?Ia<M?0:-1:0:-1:Af<M?Wf<M?0:-1:0:-1:kd<M?Xi<M?os<M?Pc<M?ia<M?pc<M?0:-1:0:-1:Up<M?ch<M?0:-1:0:-1:Qf<M?tb<M?Dn<M?zf<M?0:-1:0:-1:bc<M?ov<M?0:-1:0:-1:dk<M?Bc<M?ek<M?$n<M?wu<M?Ti<M?Lv<M?Vb<M?sa<M?js<M?0:-1:0:-1:Db<M?Ds<M?0:-1:0:-1:Pl<M?ms<M?zh<M?kb<M?0:-1:0:-1:ad<M?ks<M?0:-1:0:-1:jf<M?Ra<M?dv<M?Co<M?ga<M?Rd<M?0:-1:0:-1:ju<M?Bi<M?0:-1:0:-1:_f<M?Xb<M?Us<M?Nh<M?0:-1:0:-1:Ml<M?wk<M?0:-1:0:-1:Dv<M?db<M?kl<M?ns<M?Oo<M?Mp<M?Tf<M?yi<M?0:-1:0:-1:bh<M?nk<M?0:-1:0:-1:Lu<M?dh<M?Eb<M?ev<M?0:-1:0:-1:Sc<M?nc<M?0:-1:0:-1:Eu<M?Xp<M?Li<M?qn<M?Lp<M?Wa<M?0:-1:0:-1:Hi<M?Jc<M?0:-1:0:-1:Xh<M?gu<M?Yu<M?Na<M?0:-1:0:-1:nb<M?Ih<M?0:-1:0:-1:ra<M?Hf<M?Qb<M?Cf<M?cu<M?Ed<M?Md<M?Kv<M?gl<M?Xs<M?$p<M?Zi<M?0:-1:0:-1:To<M?zi<M?0:-1:0:-1:ok<M?tu<M?Wl<M?Sd<M?0:-1:0:-1:sh<M?mh<M?0:-1:0:-1:Tl<M?Xo<M?Rh<M?Ss<M?Ks<M?gs<M?0:-1:0:-1:Dd<M?zk<M?0:-1:0:-1:qf<M?Rk<M?qu<M?Fk<M?0:-1:0:-1:eo<M?vc<M?0:-1:0:-1:Mi<M?pf<M?_u<M?Gb<M?Yf<M?ob<M?Bf<M?uh<M?0:-1:0:-1:Cs<M?yf<M?0:-1:0:-1:Yh<M?mi<M?Hl<M?sd<M?0:-1:0:-1:Vk<M?vd<M?0:-1:0:-1:np<M?mp<M?fk<M?fc<M?$i<M?fb<M?0:-1:0:-1:Ri<M?dc<M?0:-1:0:-1:cc<M?Td<M?Ev<M?$u<M?0:-1:0:-1:Aa<M?nh<M?0:-1:0:-1:vl<M?uo<M?Qv<M?Xv<M?xv<M?Ic<M?cp<M?Jv<M?hh<M?Cb<M?0:-1:0:-1:qh<M?ih<M?0:-1:0:-1:ru<M?yk<M?tf<M?Fi<M?0:-1:0:-1:Sv<M?Df<M?0:-1:0:-1:ud<M?Ph<M?xa<M?Xu<M?Tu<M?ic<M?0:-1:0:-1:Ja<M?wc<M?0:-1:0:-1:ss<M?nv<M?Uh<M?hl<M?0:-1:0:-1:Dl<M?ub<M?0:-1:0:-1:pl<M?ka<M?Ai<M?Ah<M?sf<M?jp<M?Cd<M?Kh<M?0:-1:0:-1:Sa<M?Oh<M?0:-1:0:-1:Gi<M?ql<M?Vn<M?Es<M?0:-1:0:-1:pv<M?_s<M?0:-1:0:-1:Jh<M?Da<M?Bb<M?bo<M?Mf<M?af<M?0:-1:0:-1:Gh<M?Qa<M?0:-1:0:-1:Rp<M?Hb<M?uf<M?mv<M?0:-1:0:-1:Yb<M?ki<M?0:-1:0:-1:Qh<M?Lc<M?Lf<M?mf<M?Hp<M?uv<M?Op<M?Tp<M?Bn<M?Qo<M?Ei<M?ep<M?wl<M?ao<M?0:-1:0:-1:fi<M?Yv<M?0:-1:0:-1:jd<M?$f<M?ld<M?Xk<M?0:-1:0:-1:Vv<M?ll<M?0:-1:0:-1:_h<M?Ro<M?xk<M?Sh<M?uc<M?rp<M?0:-1:0:-1:Ff<M?jb<M?0:-1:0:-1:pk<M?Si<M?Ik<M?Th<M?0:-1:0:-1:No<M?Gn<M?0:-1:0:-1:zc<M?Kn<M?so<M?Fa<M?Oi<M?gv<M?Jk<M?wo<M?0:-1:0:-1:Ea<M?Ul<M?0:-1:0:-1:ed<M?tl<M?Zb<M?wh<M?0:-1:0:-1:gf<M?Ms<M?0:-1:0:-1:qk<M?cf<M?ys<M?Ck<M?Wn<M?Zv<M?0:-1:0:-1:zo<M?Dh<M?0:-1:0:-1:Eo<M?sv<M?gc<M?Dc<M?0:-1:0:-1:vb<M?bb<M?0:-1:0:-1:sp<M?eu<M?Vc<M?pa<M?Hh<M?ts<M?Ys<M?Ak<M?pb<M?ba<M?0:-1:0:-1:Ip<M?nd<M?0:-1:0:-1:Rb<M?Vi<M?ou<M?ef<M?0:-1:0:-1:Fd<M?Ca<M?0:-1:0:-1:Bo<M?_d<M?Po<M?qc<M?zs<M?Tk<M?0:-1:0:-1:kv<M?ac<M?0:-1:0:-1:qb<M?Kf<M?vo<M?Rv<M?0:-1:0:-1:ik<M?xc<M?0:-1:0:-1:td<M?Sk<M?Un<M?rc<M?go<M?li<M?Vp<M?Vf<M?0:-1:0:-1:sc<M?Jo<M?0:-1:0:-1:op<M?Fu<M?rb<M?vh<M?0:-1:0:-1:ri<M?Ok<M?0:-1:0:-1:bu<M?ea<M?Rn<M?Uu<M?Tv<M?da<M?0:-1:0:-1:Qs<M?Yn<M?0:-1:0:-1:xu<M?zl<M?tc<M?Kl<M?0:-1:0:-1:Qu<M?gk<M?0:-1:0:-1:Zc<M?Au<M?_o<M?Cv<M?wa<M?sk<M?xd<M?zb<M?Ld<M?Zf<M?Zp<M?Ui<M?0:-1:0:-1:hk<M?xi<M?0:-1:0:-1:rd<M?Nf<M?id<M?eb<M?0:-1:0:-1:Ln<M?iu<M?0:-1:0:-1:ds<M?Zk<M?ip<M?nf<M?to<M?lu<M?0:-1:0:-1:Yc<M?fo<M?0:-1:0:-1:aa<M?ma<M?kc<M?Jf<M?0:-1:0:-1:ro<M?Do<M?0:-1:0:-1:Rs<M?wi<M?ap<M?Gf<M?mu<M?Gv<M?Eh<M?iv<M?0:-1:0:-1:Yi<M?vv<M?0:-1:0:-1:lv<M?$h<M?Xn<M?ya<M?0:-1:0:-1:Rc<M?xo<M?0:-1:0:-1:Ru<M?Ci<M?_l<M?Tc<M?gd<M?Xa<M?0:-1:0:-1:po<M?cs<M?0:-1:0:-1:Kb<M?io<M?Wk<M?vf<M?0:-1:0:-1:si<M?su<M?0:-1:0:-1:jc<M?ja<M?tp<M?Ju<M?zu<M?Di<M?mo<M?hf<M?fl<M?Ol<M?0:-1:0:-1:bk<M?oo<M?0:-1:0:-1:lb<M?df<M?_c<M?Ho<M?0:-1:0:-1:yl<M?Ek<M?0:-1:0:-1:di<M?rh<M?rk<M?Sp<M?Ii<M?Iu<M?0:-1:0:-1:Iv<M?Pu<M?0:-1:0:-1:Ob<M?So<M?dl<M?Hu<M?0:-1:0:-1:ta<M?_a<M?0:-1:0:-1:us<M?ws<M?Ws<M?ii<M?Mh<M?fd<M?Ou<M?zn<M?0:-1:0:-1:pi<M?qv<M?0:-1:0:-1:Uv<M?ku<M?od<M?ph<M?0:-1:0:-1:Os<M?lc<M?0:-1:0:-1:Ni<M?Bh<M?nu<M?ei<M?ck<M?Vl<M?0:-1:0:-1:Cc<M?Sf<M?0:-1:0:-1:_k<M?$c<M?Ns<M?La<M?0:-1:0:-1:Il<M?Wu<M?0:-1:0:-1:cr(ZH,M+Ao|0)-1|0:-1;return 0===F?t(k):1===F?(_n(k,19),0===AQ(gn(k))?t(k):Sn(k)):Sn(k)}return Sn(k)}return Sn(k)}return Sn(k)}return Sn(k);case 28:_n(k,23);var X=gn(k);return 0===(123<X?124<X?-1:0:-1)?25:Sn(k);case 29:_n(k,43);var B=gn(k);return 0===(124<B?125<B?-1:0:-1)?26:Sn(k);default:return 24}}}(function(t){for(;;)if(_n(t,19),0!==AQ(gn(t)))return Sn(t)},function(t){return function(r){return 0===uQ(gn(r))?t(r):Sn(r)}}(o),o,a,s,p,v,k,l,f,i,u,n,e);Tn(r);var d=h(r);if(51<d>>>0)return xr(HU);switch(d){case 0:g=$Q(g,r);continue;case 1:continue;case 2:var m=JQ(g,r),y=ue($b),w=cZ(g,y,r),g=QQ(w[1],m,w[2],y,1);continue;case 3:var T=mK(r);if(g[5]){var _=g[4]?zQ(g,JQ(g,r),T):g,S=HK(1,_),A=In(r);if(fr(dK(r,A-1|0,1),WU)&&sr(dK(r,A-2|0,1),zU))return[0,S,80];g=S;continue}var E=JQ(g,r),x=ue($b);se(x,T);var I=cZ(g,x,r),g=QQ(I[1],E,I[2],x,1);continue;case 4:if(g[4]){g=HK(0,g);continue}An(r);return Tn(r),0===function(t){return 0===FQ(gn(t))?0:Sn(t)}(r)?[0,g,Tb]:xr(VU);case 5:var C=JQ(g,r),N=ue($b),L=sZ(g,N,r),g=QQ(L[1],C,L[2],N,0);continue;case 6:var R=mK(r),P=JQ(g,r),O=ue($b),U=ue($b);se(U,R);var D=iZ(g,R,O,U,0,r),M=D[3],F=D[1],X=EK(P,D[2]),B=ie(U);return[0,F,[1,[0,X,ie(O),B,M]]];case 7:return rZ(g,r,function(t,r){function e(t){if(0===IQ(gn(t))){if(0===_Q(gn(t)))for(;;)if(_n(t,0),0!==_Q(gn(t)))return Sn(t);return Sn(t)}return Sn(t)}Tn(r);var n=eQ(gn(r));if(0===n)for(;;){var a=pQ(gn(r));if(0!==a){u=1===a?e(r):Sn(r);break}}else var u=1===n?e(r):Sn(r);return 0===u?[0,t,tZ(0,mK(r))]:xr(JU)});case 8:return[0,g,tZ(0,mK(r))];case 9:return rZ(g,r,function(t,r){function e(t){if(0===DQ(gn(t))){if(0===CQ(gn(t)))for(;;)if(_n(t,0),0!==CQ(gn(t)))return Sn(t);return Sn(t)}return Sn(t)}Tn(r);var n=eQ(gn(r));if(0===n)for(;;){var a=pQ(gn(r));if(0!==a){u=1===a?e(r):Sn(r);break}}else var u=1===n?e(r):Sn(r);return 0===u?[0,t,tZ(2,mK(r))]:xr(YU)});case 10:return[0,g,tZ(2,mK(r))];case 11:return rZ(g,r,function(t,r){function e(t){if(0===CQ(gn(t)))for(;;)if(_n(t,0),0!==CQ(gn(t)))return Sn(t);return Sn(t)}Tn(r);var n=eQ(gn(r));if(0===n)for(;;){var a=pQ(gn(r));if(0!==a){u=1===a?e(r):Sn(r);break}}else var u=1===n?e(r):Sn(r);return 0===u?[0,t,tZ(1,mK(r))]:xr(qU)});case 12:return[0,g,tZ(1,mK(r))];case 13:return rZ(g,r,function(t,r){function e(t){if(0===bQ(gn(t))){if(0===oQ(gn(t)))for(;;)if(_n(t,0),0!==oQ(gn(t)))return Sn(t);return Sn(t)}return Sn(t)}if(Tn(r),0===function(t){var r=eQ(gn(t));if(0===r)for(;;){var n=pQ(gn(t));if(0!==n)return 1===n?e(t):Sn(t)}return 1===r?e(t):Sn(t)}(r)){var n=mK(r);try{return[0,t,tZ(3,n)]}catch(e){throw e=mr(e)}}return xr(GU)});case 14:var j=mK(r);try{return[0,g,tZ(3,j)]}catch(t){throw t=mr(t)}case 15:return rZ(g,r,function(t,r){function e(t){for(;;)if(_n(t,0),0!==uQ(gn(t)))return Sn(t)}function n(t){var r=iQ(gn(t));return 0===r?0===uQ(gn(t))?e(t):Sn(t):1===r?e(t):Sn(t)}function a(t){if(0===uQ(gn(t)))for(;;){var r=ZK(gn(t));if(0!==r)return 1===r?n(t):Sn(t)}return Sn(t)}function u(t){for(;;){var r=UQ(gn(t));if(2<r>>>0)return Sn(t);switch(r){case 0:return a(t);case 1:continue;default:return n(t)}}}Tn(r);var i=vQ(gn(r));if(2<i>>>0)s=Sn(r);else switch(i){case 0:for(;;){var f=gn(r),c=8<f?Dk<f?Fo<f?Oc<f?-1:Bl<f?up<f?0:-1:$a<f?wf<f?Lh<f?Mn<f?0:-1:0:-1:jn<f?as<f?0:-1:0:-1:cr(uW,f-9|0)-1|0:-1;if(2<c>>>0)s=Sn(r);else switch(c){case 0:continue;case 1:s=a(r);break;default:s=u(r);}break}break;case 1:s=a(r);break;default:var s=u(r);}return 0===s?[0,t,tZ(3,mK(r))]:xr(jU)});case 16:return[0,g,tZ(3,mK(r))];case 17:return rZ(g,r,function(t,r){function e(t){for(;;)if(_n(t,0),0!==uQ(gn(t)))return Sn(t)}Tn(r);var n=vQ(gn(r));if(2<n>>>0)c=Sn(r);else switch(n){case 0:for(;;){var a=gn(r),u=8<a?Dk<a?Fo<a?Oc<a?-1:Bl<a?up<a?0:-1:$a<a?wf<a?Lh<a?Mn<a?0:-1:0:-1:jn<a?as<a?0:-1:0:-1:cr(iW,a-9|0)-1|0:-1;if(0!==u){if(1===u)for(;;){_n(r,0);var i=sQ(gn(r));if(0===i)c=0;else{if(1===i)continue;c=Sn(r);}break}else c=Sn(r);break}}break;case 1:c=0===uQ(gn(r))?e(r):Sn(r);break;default:for(;;){_n(r,0);var f=sQ(gn(r));if(0===f){_n(r,0);c=0===uQ(gn(r))?e(r):Sn(r);}else{if(1===f)continue;var c=Sn(r);}break}}return 0===c?[0,t,tZ(3,mK(r))]:xr(BU)});case 18:return[0,g,tZ(3,mK(r))];case 19:var G=mK(r);try{return[0,g,$e(nZ,G)]}catch(r){if((r=mr(r))===nm)return[0,g,0];throw r}case 20:return[0,g,65];case 21:return[0,g,7];case 22:return[0,g,8];case 23:return[0,g,1];case 24:return[0,g,2];case 25:return[0,g,3];case 26:return[0,g,4];case 27:return[0,g,5];case 28:return[0,g,6];case 29:return[0,g,13];case 30:return[0,g,11];case 31:return[0,g,9];case 32:return[0,g,10];case 33:return[0,g,80];case 34:return[0,g,79];case 35:return[0,g,7];case 36:return[0,g,8];case 37:return[0,g,92];case 38:return[0,g,93];case 39:return[0,g,78];case 40:return[0,g,79];case 41:return[0,g,Tb];case 42:return[0,g,80];case 43:return[0,g,83];case 44:return[0,g,85];case 45:return[0,g,46];case 46:return[0,g,12];case 47:return[0,g,78];case 48:return[0,g,97];case 49:return[0,g,98];case 50:return[0,g[4]?WQ(g,JQ(g,r),4):g,rv];default:return[0,g,zv]}}},iZ=function(t,r,e,n,a,u){for(var i=t,f=a;;){Tn(u);var c=gn(u),s=92<c?1:cr(oW,c+1|0)-1|0;if(4<s>>>0)o=Sn(u);else switch(s){case 0:o=2;break;case 1:o=3;break;case 2:o=2;break;case 3:o=0;break;default:var o=1;}if(3<o>>>0)return xr($U);switch(o){case 0:var v=mK(u);if(se(n,v),fr(r,v))return[0,i,JQ(i,u),f];se(e,v);continue;case 1:se(n,KU);var l=fZ(i,e,u),b=l[2],k=l[1],p=b||f;se(n,mK(u));var i=k,f=p;continue;case 2:var h=mK(u);se(n,h);var d=VQ(i,JQ(i,u));return se(e,h),[0,d,JQ(d,u),f];default:var m=mK(u);se(n,m),se(e,m);continue}}},fZ=function(t,r,e){function n(t){return _n(t,4),0===CQ(gn(t))?3:Sn(t)}Tn(e);var a=gn(e),u=Pf<a?1:cr(mH,a+1|0)-1|0;if(14<u>>>0)o=Sn(e);else switch(u){case 0:o=0;break;case 1:o=17;break;case 2:o=16;break;case 3:_n(e,16);o=0===kQ(gn(e))?16:Sn(e);break;case 4:_n(e,5);o=0===CQ(gn(e))?n(e):Sn(e);break;case 5:_n(e,12);o=0===CQ(gn(e))?n(e):Sn(e);break;case 6:o=1;break;case 7:o=6;break;case 8:o=7;break;case 9:o=8;break;case 10:o=9;break;case 11:o=10;break;case 12:_n(e,15);var i=gn(e),f=47<i?123<i?-1:cr(cW,i+-48|0)-1|0:-1;if(0===f)o=0===oQ(gn(e))&&0===oQ(gn(e))&&0===oQ(gn(e))?13:Sn(e);else if(1===f)if(0===oQ(gn(e)))for(;;){var c=gn(e),s=47<c?125<c?-1:cr(bW,c+-48|0)-1|0:-1;if(0!==s){o=1===s?14:Sn(e);break}}else o=Sn(e);else o=Sn(e);break;case 13:o=11;break;default:_n(e,15);var o=0===oQ(gn(e))&&0===oQ(gn(e))?2:Sn(e);}if(17<o>>>0)return xr(QU);switch(o){case 0:return[0,t,0];case 1:return se(r,ZU),[0,t,0];case 2:return Fr(function(t){return ce(r,t)},ZQ(Ct(Lr(tD,mK(e))))),[0,t,0];case 3:var v=Ct(Lr(rD,mK(e)));if(256<=v){var l=7&v;Fr(function(t){return ce(r,t)},ZQ(v>>>3|0)),ce(r,jr(48+l|0));}else Fr(function(t){return ce(r,t)},ZQ(v));return[0,t,1];case 4:return Fr(function(t){return ce(r,t)},ZQ(Ct(Lr(eD,mK(e))))),[0,t,1];case 5:return ce(r,jr(0)),[0,t,0];case 6:return ce(r,jr(8)),[0,t,0];case 7:return ce(r,jr(12)),[0,t,0];case 8:return ce(r,jr(10)),[0,t,0];case 9:return ce(r,jr(13)),[0,t,0];case 10:return ce(r,jr(9)),[0,t,0];case 11:return ce(r,jr(11)),[0,t,0];case 12:return Fr(function(t){return ce(r,t)},ZQ(Ct(Lr(nD,mK(e))))),[0,t,1];case 13:var b=mK(e);return Fr(function(t){return ce(r,t)},ZQ(Ct(Lr(aD,Vr(b,1,wt(b)-1|0))))),[0,t,0];case 14:var k=mK(e),p=Ct(Lr(uD,Vr(k,2,wt(k)-3|0))),h=nl<p?VQ(t,JQ(t,e)):t;return Fr(function(t){return ce(r,t)},ZQ(p)),[0,h,0];case 15:var d=mK(e),m=VQ(t,JQ(t,e));return se(r,d),[0,m,0];case 16:return[0,$Q(t,e),0];default:return se(r,mK(e)),[0,t,0]}},cZ=function(t,r,e){for(o=t;;){Tn(e);var n=gn(e),a=-1<n?42<n?0:cr(vH,n)-1|0:-1;if(3<a>>>0)f=Sn(e);else switch(a){case 0:f=3;break;case 1:f=0;break;case 2:_n(e,0);f=0===kQ(gn(e))?0:Sn(e);break;default:_n(e,3);var u=gn(e),i=44<u?47<u?-1:cr(tW,u+-45|0)-1|0:-1,f=0===i?0===jQ(gn(e))?2:Sn(e):1===i?1:Sn(e);}if(3<f>>>0){var c=VQ(o,JQ(o,e));return[0,c,JQ(c,e)]}switch(f){case 0:var s=$Q(o,e);se(r,mK(e));var o=s;continue;case 1:var v=JQ(o,e);return[0,o[4]?WQ(o,v,[2,fD,iD]):o,v];case 2:if(o[4])return[0,o,JQ(o,e)];se(r,cD);continue;default:se(r,mK(e));continue}}},sZ=function(t,r,e){for(;;){Tn(e);var n=gn(e),a=13<n?1:cr(YH,n+1|0)-1|0;if(3<a>>>0)u=Sn(e);else switch(a){case 0:u=0;break;case 1:u=2;break;case 2:u=1;break;default:_n(e,1);var u=0===kQ(gn(e))?1:Sn(e);}if(2<u>>>0)return xr(sD);switch(u){case 0:return[0,t,JQ(t,e)];case 1:var i=JQ(t,e),f=i[3],c=f[3],s=f[2],o=f[1],v=i[2],l=i[1],b=$Q(t,e),k=In(e);return[0,b,[0,l,v,[0,o,s-k|0,c-k|0]]];default:se(r,mK(e));continue}}},oZ=function(t,r,e,n,a){for(C=t;;){Tn(a);var u=gn(a),i=123<u?1:cr(IH,u+1|0)-1|0;if(5<i>>>0)_=Sn(a);else switch(i){case 0:_=1;break;case 1:_=6;break;case 2:_=2;break;case 3:_n(a,2);_=0===kQ(gn(a))?2:Sn(a);break;case 4:_=0;break;default:_n(a,6);var f=gn(a),c=34<f?xs<f?-1:cr(pH,f-35|0)-1|0:-1;if(0===c){var s=gn(a),o=47<s?Pf<s?-1:cr(SH,s+-48|0)-1|0:-1;if(0===o)for(;;){var v=gn(a),l=47<v?59<v?-1:cr(TH,v+-48|0)-1|0:-1;if(0!==l){_=1===l?4:Sn(a);break}}else if(1===o)if(0===oQ(gn(a)))for(;;){var b=gn(a),k=47<b?cb<b?-1:cr(dH,b+-48|0)-1|0:-1;if(0!==k){_=1===k?3:Sn(a);break}}else _=Sn(a);else _=Sn(a);}else if(1===c)if(0===hQ(gn(a))){var p=VK(gn(a));if(0===p){var h=VK(gn(a));if(0===h){var d=VK(gn(a));if(0===d){var m=VK(gn(a));if(0===m){var y=VK(gn(a));if(0===y){var w=VK(gn(a));if(0===w)var g=gn(a),T=58<g?59<g?-1:0:-1,_=0===T?5:Sn(a);else _=1===w?5:Sn(a);}else _=1===y?5:Sn(a);}else _=1===m?5:Sn(a);}else _=1===d?5:Sn(a);}else _=1===h?5:Sn(a);}else _=1===p?5:Sn(a);}else _=Sn(a);else _=Sn(a);}if(6<_>>>0)return xr(gD);switch(_){case 0:var S=mK(a);switch(r){case 0:A=sr(S,TD)?0:1;break;case 1:A=sr(S,_D)?0:1;break;default:if(sr(S,SD))if(sr(S,AD))var A=0,E=0;else E=1;else E=1;if(E)return An(a),[0,C,JQ(C,a)]}if(A)return[0,C,JQ(C,a)];se(n,S),se(e,S);continue;case 1:var x=VQ(C,JQ(C,a));return[0,x,JQ(x,a)];case 2:var I=mK(a);se(n,I),se(e,I);var C=$Q(C,a);continue;case 3:var N=mK(a),L=Vr(N,3,wt(N)-4|0);se(n,N),Fr(function(t){return ce(e,t)},ZQ(Ct(Lr(ED,L))));continue;case 4:var P=mK(a),O=Vr(P,2,wt(P)-3|0);se(n,P),Fr(function(t){return ce(e,t)},ZQ(Ct(O)));continue;case 5:var U=mK(a),D=Vr(U,1,wt(U)-2|0);se(n,U);var M=R(D,xD);if(0<=M)if(0<M){var F=R(D,oj);if(0<=F)if(0<F){var X=R(D,Cq);if(0<=X)if(0<X){var B=R(D,FY);if(0<=B)if(0<B){var j=R(D,pJ);if(0<=j)if(0<j)if(sr(D,NJ))if(sr(D,LJ))if(sr(D,RJ))if(sr(D,PJ))if(sr(D,OJ))if(sr(D,UJ))var G=1,q=0,Y=0,J=0,H=0;else var W=DJ,H=1;else var W=MJ,H=1;else var W=FJ,H=1;else var W=XJ,H=1;else var W=BJ,H=1;else var W=jJ,H=1;else var W=GJ,H=1;else if(sr(D,hJ))if(sr(D,dJ))if(sr(D,mJ))if(sr(D,yJ))if(sr(D,wJ))if(sr(D,gJ))if(sr(D,TJ))var G=1,q=0,Y=0,J=0,H=0;else var W=_J,H=1;else var W=SJ,H=1;else var W=AJ,H=1;else var W=EJ,H=1;else var W=xJ,H=1;else var W=IJ,H=1;else var W=CJ,H=1;if(H)var z=W,J=1;}else var z=qJ,J=1;else{var V=R(D,XY);if(0<=V)if(0<V)if(sr(D,tJ))if(sr(D,rJ))if(sr(D,eJ))if(sr(D,nJ))if(sr(D,aJ))if(sr(D,uJ))if(sr(D,iJ))var G=1,q=0,Y=0,J=0,$=0;else var K=fJ,$=1;else var K=cJ,$=1;else var K=sJ,$=1;else var K=oJ,$=1;else var K=vJ,$=1;else var K=lJ,$=1;else var K=bJ,$=1;else var K=kJ,$=1;else if(sr(D,BY))if(sr(D,jY))if(sr(D,GY))if(sr(D,qY))if(sr(D,YY))if(sr(D,JY))if(sr(D,HY))var G=1,q=0,Y=0,J=0,$=0;else var K=WY,$=1;else var K=zY,$=1;else var K=VY,$=1;else var K=$Y,$=1;else var K=KY,$=1;else var K=QY,$=1;else var K=ZY,$=1;if($)var z=K,J=1;}if(J)var Q=z,Y=1;}else var Q=YJ,Y=1;else{var Z=R(D,Nq);if(0<=Z)if(0<Z){var tt=R(D,fY);if(0<=tt)if(0<tt)if(sr(D,TY))if(sr(D,_Y))if(sr(D,SY))if(sr(D,AY))if(sr(D,EY))if(sr(D,xY))if(sr(D,IY))var G=1,q=0,Y=0,rt=0,et=0;else var nt=CY,et=1;else var nt=NY,et=1;else var nt=LY,et=1;else var nt=RY,et=1;else var nt=PY,et=1;else var nt=OY,et=1;else var nt=UY,et=1;else var nt=DY,et=1;else if(sr(D,cY))if(sr(D,sY))if(sr(D,oY))if(sr(D,vY))if(sr(D,lY))if(sr(D,bY))if(sr(D,kY))var G=1,q=0,Y=0,rt=0,et=0;else var nt=pY,et=1;else var nt=hY,et=1;else var nt=dY,et=1;else var nt=mY,et=1;else var nt=yY,et=1;else var nt=wY,et=1;else var nt=gY,et=1;if(et)var at=nt,rt=1;}else var at=MY,rt=1;else{var ut=R(D,Lq);if(0<=ut)if(0<ut)if(sr(D,Hq))if(sr(D,Wq))if(sr(D,zq))if(sr(D,Vq))if(sr(D,$q))if(sr(D,Kq))if(sr(D,Qq))var G=1,q=0,Y=0,rt=0,it=0;else var ft=Zq,it=1;else var ft=tY,it=1;else var ft=rY,it=1;else var ft=eY,it=1;else var ft=nY,it=1;else var ft=aY,it=1;else var ft=uY,it=1;else var ft=iY,it=1;else if(sr(D,Rq))if(sr(D,Pq))if(sr(D,Oq))if(sr(D,Uq))if(sr(D,Dq))if(sr(D,Mq))if(sr(D,Fq))var G=1,q=0,Y=0,rt=0,it=0;else var ft=Xq,it=1;else var ft=Bq,it=1;else var ft=jq,it=1;else var ft=Gq,it=1;else var ft=qq,it=1;else var ft=Yq,it=1;else var ft=Jq,it=1;if(it)var at=ft,rt=1;}if(rt)var Q=at,Y=1;}if(Y)var ct=Q,q=1;}else var ct=JJ,q=1;else{var st=R(D,vj);if(0<=st)if(0<st){var ot=R(D,wG);if(0<=ot)if(0<ot){var vt=R(D,KG);if(0<=vt)if(0<vt)if(sr(D,lq))if(sr(D,bq))if(sr(D,kq))if(sr(D,pq))if(sr(D,hq))if(sr(D,dq))if(sr(D,mq))var G=1,q=0,lt=0,bt=0,kt=0;else var pt=yq,kt=1;else var pt=wq,kt=1;else var pt=gq,kt=1;else var pt=Tq,kt=1;else var pt=_q,kt=1;else var pt=Sq,kt=1;else var pt=Aq,kt=1;else var pt=Eq,kt=1;else if(sr(D,QG))if(sr(D,ZG))if(sr(D,tq))if(sr(D,rq))if(sr(D,eq))if(sr(D,nq))if(sr(D,aq))var G=1,q=0,lt=0,bt=0,kt=0;else var pt=uq,kt=1;else var pt=iq,kt=1;else var pt=fq,kt=1;else var pt=cq,kt=1;else var pt=sq,kt=1;else var pt=oq,kt=1;else var pt=vq,kt=1;if(kt)var ht=pt,bt=1;}else var ht=xq,bt=1;else{var dt=R(D,gG);if(0<=dt)if(0<dt)if(sr(D,DG))if(sr(D,MG))if(sr(D,FG))if(sr(D,XG))if(sr(D,BG))if(sr(D,jG))if(sr(D,GG))var G=1,q=0,lt=0,bt=0,mt=0;else var yt=qG,mt=1;else var yt=YG,mt=1;else var yt=JG,mt=1;else var yt=HG,mt=1;else var yt=WG,mt=1;else var yt=zG,mt=1;else var yt=VG,mt=1;else var yt=$G,mt=1;else if(sr(D,TG))if(sr(D,_G))if(sr(D,SG))if(sr(D,AG))if(sr(D,EG))if(sr(D,xG))if(sr(D,IG))var G=1,q=0,lt=0,bt=0,mt=0;else var yt=CG,mt=1;else var yt=NG,mt=1;else var yt=LG,mt=1;else var yt=RG,mt=1;else var yt=PG,mt=1;else var yt=OG,mt=1;else var yt=UG,mt=1;if(mt)var ht=yt,bt=1;}if(bt)var gt=ht,lt=1;}else var gt=Iq,lt=1;else{var Tt=R(D,lj);if(0<=Tt)if(0<Tt){var _t=R(D,qj);if(0<=_t)if(0<_t)if(sr(D,aG))if(sr(D,uG))if(sr(D,iG))if(sr(D,fG))if(sr(D,cG))if(sr(D,sG))if(sr(D,oG))var G=1,q=0,lt=0,St=0,At=0;else var Et=vG,At=1;else var Et=lG,At=1;else var Et=bG,At=1;else var Et=kG,At=1;else var Et=pG,At=1;else var Et=hG,At=1;else var Et=dG,At=1;else var Et=mG,At=1;else if(sr(D,Yj))if(sr(D,Jj))if(sr(D,Hj))if(sr(D,Wj))if(sr(D,zj))if(sr(D,Vj))if(sr(D,$j))var G=1,q=0,lt=0,St=0,At=0;else var Et=Kj,At=1;else var Et=Qj,At=1;else var Et=Zj,At=1;else var Et=tG,At=1;else var Et=rG,At=1;else var Et=eG,At=1;else var Et=nG,At=1;if(At)var xt=Et,St=1;}else var xt=yG,St=1;else{var It=R(D,bj);if(0<=It)if(0<It)if(sr(D,Ij))if(sr(D,Cj))if(sr(D,Nj))if(sr(D,Lj))if(sr(D,Rj))if(sr(D,Pj))if(sr(D,Oj))var G=1,q=0,lt=0,St=0,Nt=0;else var Lt=Uj,Nt=1;else var Lt=Dj,Nt=1;else var Lt=Mj,Nt=1;else var Lt=Fj,Nt=1;else var Lt=Xj,Nt=1;else var Lt=Bj,Nt=1;else var Lt=jj,Nt=1;else var Lt=Gj,Nt=1;else if(sr(D,kj))if(sr(D,pj))if(sr(D,hj))if(sr(D,dj))if(sr(D,mj))if(sr(D,yj))if(sr(D,wj))var G=1,q=0,lt=0,St=0,Nt=0;else var Lt=gj,Nt=1;else var Lt=Tj,Nt=1;else var Lt=_j,Nt=1;else var Lt=Sj,Nt=1;else var Lt=Aj,Nt=1;else var Lt=Ej,Nt=1;else var Lt=xj,Nt=1;if(Nt)var xt=Lt,St=1;}if(St)var gt=xt,lt=1;}if(lt)var ct=gt,q=1;}if(q)var Rt=ct,G=0;}else var Rt=HJ,G=0;else{var Pt=R(D,ID);if(0<=Pt)if(0<Pt){var Ot=R(D,WF);if(0<=Ot)if(0<Ot){var Ut=R(D,eB);if(0<=Ut)if(0<Ut){var Dt=R(D,PB);if(0<=Dt)if(0<Dt)if(sr(D,zB))if(sr(D,VB))if(sr(D,$B))if(sr(D,KB))if(sr(D,QB))if(sr(D,ZB))var G=1,Mt=0,Ft=0,Xt=0,Bt=0;else var jt=tj,Bt=1;else var jt=rj,Bt=1;else var jt=ej,Bt=1;else var jt=nj,Bt=1;else var jt=aj,Bt=1;else var jt=uj,Bt=1;else var jt=ij,Bt=1;else if(sr(D,OB))if(sr(D,UB))if(sr(D,DB))if(sr(D,MB))if(sr(D,FB))if(sr(D,XB))if(sr(D,BB))var G=1,Mt=0,Ft=0,Xt=0,Bt=0;else var jt=jB,Bt=1;else var jt=GB,Bt=1;else var jt=qB,Bt=1;else var jt=YB,Bt=1;else var jt=JB,Bt=1;else var jt=HB,Bt=1;else var jt=WB,Bt=1;if(Bt)var Gt=jt,Xt=1;}else var Gt=fj,Xt=1;else{var qt=R(D,nB);if(0<=qt)if(0<qt)if(sr(D,mB))if(sr(D,yB))if(sr(D,wB))if(sr(D,gB))if(sr(D,TB))if(sr(D,_B))if(sr(D,SB))var G=1,Mt=0,Ft=0,Xt=0,Yt=0;else var Jt=AB,Yt=1;else var Jt=EB,Yt=1;else var Jt=xB,Yt=1;else var Jt=IB,Yt=1;else var Jt=CB,Yt=1;else var Jt=NB,Yt=1;else var Jt=LB,Yt=1;else var Jt=RB,Yt=1;else if(sr(D,aB))if(sr(D,uB))if(sr(D,iB))if(sr(D,fB))if(sr(D,cB))if(sr(D,sB))if(sr(D,oB))var G=1,Mt=0,Ft=0,Xt=0,Yt=0;else var Jt=vB,Yt=1;else var Jt=lB,Yt=1;else var Jt=bB,Yt=1;else var Jt=kB,Yt=1;else var Jt=pB,Yt=1;else var Jt=hB,Yt=1;else var Jt=dB,Yt=1;if(Yt)var Gt=Jt,Xt=1;}if(Xt)var Ht=Gt,Ft=1;}else var Ht=cj,Ft=1;else{var Wt=R(D,zF);if(0<=Wt)if(0<Wt){var zt=R(D,AX);if(0<=zt)if(0<zt)if(sr(D,BX))if(sr(D,jX))if(sr(D,GX))if(sr(D,qX))if(sr(D,YX))if(sr(D,JX))if(sr(D,HX))var G=1,Mt=0,Ft=0,Vt=0,$t=0;else var Kt=WX,$t=1;else var Kt=zX,$t=1;else var Kt=VX,$t=1;else var Kt=$X,$t=1;else var Kt=KX,$t=1;else var Kt=QX,$t=1;else var Kt=ZX,$t=1;else var Kt=tB,$t=1;else if(sr(D,EX))if(sr(D,xX))if(sr(D,IX))if(sr(D,CX))if(sr(D,NX))if(sr(D,LX))if(sr(D,RX))var G=1,Mt=0,Ft=0,Vt=0,$t=0;else var Kt=PX,$t=1;else var Kt=OX,$t=1;else var Kt=UX,$t=1;else var Kt=DX,$t=1;else var Kt=MX,$t=1;else var Kt=FX,$t=1;else var Kt=XX,$t=1;if($t)var Qt=Kt,Vt=1;}else var Qt=rB,Vt=1;else{var Zt=R(D,VF);if(0<=Zt)if(0<Zt)if(sr(D,oX))if(sr(D,vX))if(sr(D,lX))if(sr(D,bX))if(sr(D,kX))if(sr(D,pX))if(sr(D,hX))var G=1,Mt=0,Ft=0,Vt=0,tr=0;else var rr=dX,tr=1;else var rr=mX,tr=1;else var rr=yX,tr=1;else var rr=wX,tr=1;else var rr=gX,tr=1;else var rr=TX,tr=1;else var rr=_X,tr=1;else var rr=SX,tr=1;else if(sr(D,$F))if(sr(D,KF))if(sr(D,QF))if(sr(D,ZF))if(sr(D,tX))if(sr(D,rX))if(sr(D,eX))var G=1,Mt=0,Ft=0,Vt=0,tr=0;else var rr=nX,tr=1;else var rr=aX,tr=1;else var rr=uX,tr=1;else var rr=iX,tr=1;else var rr=fX,tr=1;else var rr=cX,tr=1;else var rr=sX,tr=1;if(tr)var Qt=rr,Vt=1;}if(Vt)var Ht=Qt,Ft=1;}if(Ft)var er=Ht,Mt=1;}else var er=sj,Mt=1;else{var nr=R(D,CD);if(0<=nr)if(0<nr){var ar=R(D,FM);if(0<=ar)if(0<ar){var ur=R(D,pF);if(0<=ur)if(0<ur)if(sr(D,NF))if(sr(D,LF))if(sr(D,RF))if(sr(D,PF))if(sr(D,OF))if(sr(D,UF))if(sr(D,DF))var G=1,Mt=0,ir=0,fr=0,or=0;else var vr=MF,or=1;else var vr=FF,or=1;else var vr=XF,or=1;else var vr=BF,or=1;else var vr=jF,or=1;else var vr=GF,or=1;else var vr=qF,or=1;else var vr=YF,or=1;else if(sr(D,hF))if(sr(D,dF))if(sr(D,mF))if(sr(D,yF))if(sr(D,wF))if(sr(D,gF))if(sr(D,TF))var G=1,Mt=0,ir=0,fr=0,or=0;else var vr=_F,or=1;else var vr=SF,or=1;else var vr=AF,or=1;else var vr=EF,or=1;else var vr=xF,or=1;else var vr=IF,or=1;else var vr=CF,or=1;if(or)var lr=vr,fr=1;}else var lr=JF,fr=1;else{var br=R(D,XM);if(0<=br)if(0<br)if(sr(D,tF))if(sr(D,rF))if(sr(D,eF))if(sr(D,nF))if(sr(D,aF))if(sr(D,uF))if(sr(D,iF))var G=1,Mt=0,ir=0,fr=0,kr=0;else var pr=fF,kr=1;else var pr=cF,kr=1;else var pr=sF,kr=1;else var pr=oF,kr=1;else var pr=vF,kr=1;else var pr=lF,kr=1;else var pr=bF,kr=1;else var pr=kF,kr=1;else if(sr(D,BM))if(sr(D,jM))if(sr(D,GM))if(sr(D,qM))if(sr(D,YM))if(sr(D,JM))if(sr(D,HM))var G=1,Mt=0,ir=0,fr=0,kr=0;else var pr=WM,kr=1;else var pr=zM,kr=1;else var pr=VM,kr=1;else var pr=$M,kr=1;else var pr=KM,kr=1;else var pr=QM,kr=1;else var pr=ZM,kr=1;if(kr)var lr=pr,fr=1;}if(fr)var hr=lr,ir=1;}else var hr=HF,ir=1;else{var dr=R(D,ND);if(0<=dr)if(0<dr){var mr=R(D,fM);if(0<=mr)if(0<mr)if(sr(D,TM))if(sr(D,_M))if(sr(D,SM))if(sr(D,AM))if(sr(D,EM))if(sr(D,xM))if(sr(D,IM))var G=1,Mt=0,ir=0,yr=0,wr=0;else var gr=CM,wr=1;else var gr=NM,wr=1;else var gr=LM,wr=1;else var gr=RM,wr=1;else var gr=PM,wr=1;else var gr=OM,wr=1;else var gr=UM,wr=1;else var gr=DM,wr=1;else if(sr(D,cM))if(sr(D,sM))if(sr(D,oM))if(sr(D,vM))if(sr(D,lM))if(sr(D,bM))if(sr(D,kM))var G=1,Mt=0,ir=0,yr=0,wr=0;else var gr=pM,wr=1;else var gr=hM,wr=1;else var gr=dM,wr=1;else var gr=mM,wr=1;else var gr=yM,wr=1;else var gr=wM,wr=1;else var gr=gM,wr=1;if(wr)var Tr=gr,yr=1;}else var Tr=MM,yr=1;else{var _r=R(D,LD);if(0<=_r)if(0<_r)if(sr(D,HD))if(sr(D,WD))if(sr(D,zD))if(sr(D,VD))if(sr(D,$D))if(sr(D,KD))if(sr(D,QD))var G=1,Mt=0,ir=0,yr=0,Sr=0;else var Ar=ZD,Sr=1;else var Ar=tM,Sr=1;else var Ar=rM,Sr=1;else var Ar=eM,Sr=1;else var Ar=nM,Sr=1;else var Ar=aM,Sr=1;else var Ar=uM,Sr=1;else var Ar=iM,Sr=1;else if(sr(D,RD))if(sr(D,PD))if(sr(D,OD))if(sr(D,UD))if(sr(D,DD))if(sr(D,MD))if(sr(D,FD))var G=1,Mt=0,ir=0,yr=0,Sr=0;else var Ar=XD,Sr=1;else var Ar=BD,Sr=1;else var Ar=jD,Sr=1;else var Ar=GD,Sr=1;else var Ar=qD,Sr=1;else var Ar=YD,Sr=1;else var Ar=JD,Sr=1;if(Sr)var Tr=Ar,yr=1;}if(yr)var hr=Tr,ir=1;}if(ir)var er=hr,Mt=1;}if(Mt)var Rt=er,G=0;}var Er=G?0:Rt;Er?Fr(function(t){return ce(e,t)},ZQ(Er[1])):se(e,Lr(zJ,Lr(D,WJ)));continue;default:var Ir=mK(a);se(n,Ir),se(e,Ir);continue}}},vZ=function(t,r,e,n,a,u){for(k=t;;){Tn(u);var i=gn(u),f=96<i?1:cr(bH,i+1|0)-1|0;if(6<f>>>0)s=Sn(u);else switch(f){case 0:s=0;break;case 1:s=6;break;case 2:s=5;break;case 3:_n(u,5);s=0===kQ(gn(u))?4:Sn(u);break;case 4:_n(u,6);var c=gn(u),s=0===(xs<c?123<c?-1:0:-1)?2:Sn(u);break;case 5:s=3;break;default:s=1;}if(6<s>>>0)return xr(QJ);switch(s){case 0:var o=VQ(k,JQ(k,u));return[0,o,EK(r,JQ(o,u)),1];case 1:return ce(a,96),[0,k,EK(r,JQ(k,u)),1];case 2:return se(a,ZJ),[0,k,EK(r,JQ(k,u)),0];case 3:ce(n,92),ce(a,92);var v=fZ(k,e,u)[1],l=mK(u);se(n,l),se(a,l);k=v;continue;case 4:se(n,tH),se(a,rH),se(e,eH);k=$Q(k,u);continue;case 5:var b=mK(u);se(n,b),se(a,b),ce(e,10);var k=$Q(k,u);continue;default:var p=mK(u);se(n,p),se(a,p),se(e,p);continue}}},lZ=ee([0,B$]),bZ=function(t,r){return[0,[0],0,r,qK(t[2].slice(),t)]},kZ=function(t,r){var e=r+1|0;if(t[1].length-1<e)for(n=1;;){if(e<=n){t[1]=Zr(n,function(r){return r<t[1].length-1?I(t[1],r)[r+1]:0});break}var n=2*n|0;}for(;;){if(!(t[2]<=r))return 0;var a=t[4];switch(t[3]){case 0:Qt=HQ(aZ(a,a[2]));break;case 1:Qt=HQ(uZ(a,a[2]));break;case 2:for(var u=a[2],i=a;;){Tn(u);var f=gn(u),c=Fo<f?ki<f?Bc<f?lk<f?Yl<f?vk<f?Zo<f?As<f?1:6:Ba<f?1:6:Js<f?Nd<f?la<f?1:6:Lo<f?1:6:Du<f?Ud<f?1:6:bl<f?1:6:Sb<f?du<f?Is<f?th<f?kh<f?1:6:kk<f?1:6:is<f?uk<f?1:6:qs<f?1:6:Yo<f?yp<f?ib<f?1:6:$s<f?1:6:vs<f?Ma<f?1:6:gp<f?1:6:ho<f?oa<f?Wc<f?Bs<f?1:6:Uk<f?1:6:Ab<f?gi<f?1:6:Ki<f?1:6:fv<f?Wi<f?Uf<f?1:6:Wv<f?1:6:Ll<f?Vu<f?1:6:cd<f?1:6:Ya<f?Wf<f?xh<f?El<f?Gk<f?Yp<f?1:6:Nl<f?1:6:oc<f?Ps<f?1:6:Nb<f?1:6:Ia<f?Rf<f?Xf<f?1:6:Zs<f?1:6:Pv<f?Wo<f?1:6:Cu<f?1:6:ch<f?pc<f?el<f?Af<f?1:6:Pp<f?1:6:Pc<f?ia<f?1:6:os<f?1:6:zf<f?Xi<f?Up<f?1:6:kd<f?1:6:tb<f?Dn<f?1:6:bc<f?1:6:$n<f?Ti<f?Vb<f?js<f?Zl<f?1:6:sa<f?1:6:Ds<f?Lv<f?1:6:Db<f?1:6:ms<f?kb<f?wu<f?1:6:zh<f?1:6:ks<f?Pl<f?1:6:ad<f?1:6:Ra<f?Co<f?Rd<f?ek<f?1:6:ga<f?1:6:Bi<f?dv<f?1:6:ju<f?1:6:Xb<f?Nh<f?jf<f?1:6:Us<f?1:6:wk<f?_f<f?1:6:Ml<f?1:6:fc<f?tu<f?db<f?ns<f?Mp<f?yi<f?dk<f?1:6:Tf<f?1:6:nk<f?Oo<f?1:6:bh<f?1:6:dh<f?ev<f?kl<f?1:6:Eb<f?1:6:nc<f?Lu<f?1:6:Sc<f?1:6:Xp<f?qn<f?Wa<f?Dv<f?1:6:Lp<f?1:6:Jc<f?Li<f?1:6:Hi<f?1:6:Kv<f?Na<f?Eu<f?1:6:To<f?1:6:qp<f?Md<f?1:6:Of<f?1:6:mc<f?Ss<f?Ed<f?mh<f?ok<f?1:6:sh<f?1:6:gs<f?cu<f?1:6:Ks<f?1:6:Fk<f?zk<f?Rh<f?1:6:Wb<f?1:6:fh<f?qf<f?1:6:cv<f?1:6:yh<f?yf<f?_i<f?Ua<f?1:6:Yf<f?1:6:bf<f?Pa<f?1:6:Za<f?1:6:pf<f?vd<f?Yh<f?1:6:Vk<f?1:6:fb<f?Mi<f?1:6:$i<f?1:6:nv<f?Fi<f?Pb<f?Td<f?dc<f?fk<f?1:6:Ev<f?1:6:nh<f?cc<f?1:6:Aa<f?1:6:ih<f?Jv<f?fa<f?1:6:cp<f?1:6:Ic<f?qh<f?1:6:xv<f?1:6:ic<f?Df<f?yk<f?tf<f?1:6:ru<f?1:6:Xv<f?Sv<f?1:6:Qv<f?1:6:wc<f?Xu<f?Tu<f?1:6:xa<f?1:6:Ph<f?Ja<f?1:6:Uh<f?1:6:ql<f?jp<f?uo<f?ub<f?ss<f?1:6:Dl<f?1:6:Kh<f?vl<f?1:6:Cd<f?1:6:Ah<f?Oh<f?sf<f?1:6:Sa<f?1:6:Es<f?Ai<f?1:6:Vn<f?1:6:Qa<f?af<f?ka<f?pv<f?1:6:pl<f?1:6:bo<f?Mf<f?1:6:Bb<f?1:6:mv<f?Da<f?Gh<f?1:6:Jh<f?1:6:Hb<f?uf<f?1:6:Rp<f?1:6:zl<f?ef<f?Fa<f?up<f?Yv<f?ao<f?bs<f?Yb<f?1:6:wv<f?1:6:ep<f?wl<f?1:6:Ei<f?1:6:Xk<f?Qo<f?fi<f?1:6:Bn<f?1:6:ll<f?jd<f?1:6:Oc<f?1:2:uv<f?Sh<f?rp<f?Op<f?1:6:uc<f?1:6:Gn<f?pk<f?1:6:No<f?1:6:gv<f?wo<f?Hp<f?1:6:Jk<f?1:6:Ul<f?Oi<f?1:6:Ea<f?1:6:Dh<f?Kn<f?tl<f?wh<f?so<f?1:6:Zb<f?1:6:Ms<f?ed<f?1:6:gf<f?1:6:Zv<f?Fc<f?zc<f?1:6:_v<f?1:6:Ck<f?Wn<f?1:6:ys<f?1:6:bb<f?Dc<f?cf<f?zo<f?1:6:qk<f?1:6:sv<f?gc<f?1:6:Eo<f?1:6:nd<f?mf<f?vb<f?1:6:cl<f?1:6:ts<f?Ip<f?1:6:Hh<f?1:6:eu<f?bp<f?Tk<f?Ca<f?Vi<f?ou<f?1:6:Rb<f?1:6:pa<f?Fd<f?1:6:Kk<f?1:6:ac<f?qc<f?$v<f?1:6:Po<f?1:6:Fs<f?kv<f?1:6:oi<f?1:6:_d<f?Zh<f?xp<f?Gp<f?1:6:Ep<f?1:6:Vh<f?Gl<f?1:6:dd<f?1:6:Kf<f?Rv<f?Bk<f?1:6:vo<f?1:6:jh<f?Nn<f?1:6:gb<f?1:6:qa<f?rc<f?li<f?Vf<f?hv<f?1:6:wd<f?1:6:Fp<f?dp<f?1:6:sc<f?1:6:Lk<f?vh<f?Mu<f?1:6:hp<f?1:6:Ok<f?op<f?1:6:ri<f?1:6:Ac<f?Yn<f?Fl<f?jv<f?1:6:Rn<f?1:6:uu<f?Wh<f?1:6:il<f?1:6:ea<f?sb<f?Hv<f?1:6:vi<f?1:6:Kl<f?bu<f?1:6:tc<f?1:6:io<f?ma<f?Nf<f?no<f?Lc<f?gk<f?xu<f?1:6:Qu<f?1:6:Ui<f?Qh<f?1:6:Fb<f?1:6:eb<f?xi<f?Ld<f?1:6:jk<f?1:6:Go<f?id<f?1:6:Jb<f?1:6:nf<f?sk<f?iu<f?rd<f?1:6:Ln<f?1:6:lu<f?wa<f?1:6:to<f?1:6:Zk<f?fo<f?ip<f?1:6:Yc<f?1:6:Jf<f?ds<f?1:6:kc<f?1:6:$h<f?yu<f?Cv<f?Do<f?aa<f?1:6:ro<f?1:6:iv<f?_o<f?1:6:Eh<f?1:6:Gf<f?vv<f?mu<f?1:6:Yi<f?1:6:ya<f?ap<f?1:6:_p<f?1:6:Tc<f?Mn<f?xo<f?lv<f?1:6:Bl<f?1:2:Xa<f?Rs<f?1:6:gd<f?1:6:Ci<f?cs<f?_l<f?1:6:po<f?1:6:vf<f?Ru<f?1:6:Wk<f?1:6:Hu<f?df<f?hf<f?Au<f?su<f?Kb<f?1:6:si<f?1:6:Nk<f?Zc<f?1:6:fl<f?1:6:Di<f?oo<f?mo<f?1:6:bk<f?1:6:Ho<f?zu<f?1:6:_c<f?1:6:Iu<f?Ek<f?zp<f?lb<f?1:6:If<f?1:6:Ju<f?yl<f?1:6:tp<f?1:6:Pu<f?Sp<f?Ii<f?1:6:rk<f?1:6:rh<f?Iv<f?1:6:di<f?1:6:ph<f?zn<f?_a<f?So<f?dl<f?1:6:Ob<f?1:6:ja<f?ta<f?1:6:jc<f?1:6:qv<f?fd<f?Ou<f?1:6:Mh<f?1:6:ii<f?pi<f?1:6:Ws<f?1:6:Bh<f?lc<f?ku<f?od<f?1:6:Uv<f?1:6:Sf<f?nu<f?1:6:Cc<f?1:6:wf<f?La<f?Ni<f?1:6:Lh<f?1:2:as<f?$a<f?1:2:jn<f?1:2:cr(GH,f+1|0)-1|0;if(13<c>>>0)o=Sn(u);else switch(c){case 0:o=0;break;case 1:o=14;break;case 2:if(_n(u,2),0===tQ(gn(u))){for(;;)if(_n(u,2),0!==tQ(gn(u))){o=Sn(u);break}}else o=Sn(u);break;case 3:o=1;break;case 4:_n(u,1);o=0===kQ(gn(u))?1:Sn(u);break;case 5:o=13;break;case 6:if(_n(u,12),0===yQ(gn(u))){for(;;)if(_n(u,12),0!==yQ(gn(u))){o=Sn(u);break}}else o=Sn(u);break;case 7:o=10;break;case 8:_n(u,6);var s=TQ(gn(u)),o=0===s?4:1===s?3:Sn(u);break;case 9:o=9;break;case 10:o=5;break;case 11:o=11;break;case 12:o=7;break;default:o=8;}if(14<o>>>0)x=xr(mD);else switch(o){case 0:x=[0,i,rv];break;case 1:i=$Q(i,u);continue;case 2:continue;case 3:var v=JQ(i,u),l=ue($b),b=sZ(i,l,u),i=QQ(b[1],v,b[2],l,0);continue;case 4:var k=JQ(i,u),p=ue($b),h=cZ(i,p,u),i=QQ(h[1],k,h[2],p,1);continue;case 5:x=[0,i,92];break;case 6:x=[0,i,99];break;case 7:x=[0,i,93];break;case 8:x=[0,i,1];break;case 9:x=[0,i,80];break;case 10:x=[0,i,11];break;case 11:x=[0,i,78];break;case 12:x=[0,i,Ka];break;case 13:var d=mK(u),m=JQ(i,u),y=ue($b),w=ue($b);se(w,d);var g=fr(d,yD)?0:1,T=oZ(i,g,y,w,u),_=T[2],S=T[1];se(w,d);var A=ie(y),E=ie(w),x=[0,S,[4,[0,EK(m,_),A,E]]];break;default:x=[0,i,zv];}Qt=HQ(x);break}break;case 3:var C=xn(a[2]),N=YQ(a,C,C),L=ue($b),R=ue($b),P=a[2];Tn(P);var O=gn(P),U=123<O?1:cr(EH,O+1|0)-1|0;if(5<U>>>0)D=Sn(P);else switch(U){case 0:D=1;break;case 1:D=4;break;case 2:D=0;break;case 3:_n(P,0);D=0===kQ(gn(P))?0:Sn(P);break;case 4:D=2;break;default:var D=3;}if(4<D>>>0)q=xr(wD);else switch(D){case 0:var M=mK(P);se(R,M),se(L,M);var F=oZ($Q(a,P),2,L,R,P),X=F[2],B=F[1],j=ie(L),G=ie(R),q=[0,B,[4,[0,EK(N,X),j,G]]];break;case 1:q=[0,a,rv];break;case 2:q=[0,a,92];break;case 3:q=[0,a,1];break;default:var Y=mK(P);se(R,Y),se(L,Y);var J=oZ(a,2,L,R,P),H=J[2],W=J[1],z=ie(L),V=ie(R),q=[0,W,[4,[0,EK(N,H),z,V]]];}Qt=HQ([0,q[1],q[2]]);break;case 4:for(var $=a[2],K=a;;){Tn($);var Q=gn($),Z=-1<Q?Fo<Q?up<Q?Oc<Q?0:1:wf<Q?Mn<Q?Bl<Q?0:1:Lh<Q?0:1:as<Q?$a<Q?0:1:jn<Q?0:1:cr(wH,Q)-1|0:-1;if(5<Z>>>0)rt=Sn($);else switch(Z){case 0:rt=5;break;case 1:if(_n($,1),0===tQ(gn($))){for(;;)if(_n($,1),0!==tQ(gn($))){rt=Sn($);break}}else rt=Sn($);break;case 2:rt=0;break;case 3:_n($,0);rt=0===kQ(gn($))?0:Sn($);break;case 4:_n($,5);var tt=TQ(gn($)),rt=0===tt?3:1===tt?2:Sn($);break;default:rt=4;}if(5<rt>>>0)mt=xr(VJ);else switch(rt){case 0:K=$Q(K,$);continue;case 1:continue;case 2:var et=JQ(K,$),nt=ue($b),at=sZ(K,nt,$),K=QQ(at[1],et,at[2],nt,0);continue;case 3:var ut=JQ(K,$),it=ue($b),ft=cZ(K,it,$),K=QQ(ft[1],ut,ft[2],it,1);continue;case 4:var ct=JQ(K,$),st=ue($b),ot=ue($b),vt=ue($b);se(vt,$J);var lt=vZ(K,ct,st,ot,vt,$),bt=lt[3],kt=lt[2],pt=lt[1],ht=ie(vt),dt=ie(ot),mt=[0,pt,[2,[0,kt,[0,ie(st),dt,ht],bt]]];break;default:var yt=VQ(K,JQ(K,$)),mt=[0,yt,[2,[0,JQ(yt,$),KJ,1]]];}Qt=HQ(mt);break}break;default:for(var gt=a[2],Tt=a;;){Tn(gt);var _t=gn(gt),St=Fo<_t?up<_t?Oc<_t?1:2:wf<_t?Mn<_t?Bl<_t?1:2:Lh<_t?1:2:as<_t?$a<_t?1:2:jn<_t?1:2:cr(HH,_t+1|0)-1|0;if(5<St>>>0)Et=Sn(gt);else switch(St){case 0:Et=0;break;case 1:Et=6;break;case 2:if(_n(gt,2),0===tQ(gn(gt))){for(;;)if(_n(gt,2),0!==tQ(gn(gt))){Et=Sn(gt);break}}else Et=Sn(gt);break;case 3:Et=1;break;case 4:_n(gt,1);Et=0===kQ(gn(gt))?1:Sn(gt);break;default:_n(gt,5);var At=TQ(gn(gt)),Et=0===At?4:1===At?3:Sn(gt);}if(6<Et>>>0)Kt=xr(oD);else switch(Et){case 0:Kt=[0,Tt,rv];break;case 1:Tt=$Q(Tt,gt);continue;case 2:continue;case 3:var xt=JQ(Tt,gt),It=ue($b),Ct=sZ(Tt,It,gt),Tt=QQ(Ct[1],xt,Ct[2],It,0);continue;case 4:var Nt=JQ(Tt,gt),Lt=ue($b),Rt=cZ(Tt,Lt,gt),Tt=QQ(Rt[1],Nt,Rt[2],Lt,1);continue;case 5:var Pt=JQ(Tt,gt),Ot=ue($b),Ut=Tt;t:for(;;){Tn(gt);var Dt=gn(gt),Mt=92<Dt?1:cr(vW,Dt+1|0)-1|0;if(6<Mt>>>0)Bt=Sn(gt);else switch(Mt){case 0:Bt=0;break;case 1:Bt=7;break;case 2:Bt=6;break;case 3:_n(gt,6);Bt=0===kQ(gn(gt))?6:Sn(gt);break;case 4:if(_n(gt,4),0===dQ(gn(gt))){for(;;)if(_n(gt,3),0!==dQ(gn(gt))){Bt=Sn(gt);break}}else Bt=Sn(gt);break;case 5:Bt=5;break;default:_n(gt,7);var Ft=gn(gt),Xt=-1<Ft?13<Ft?0:cr(xH,Ft)-1|0:-1;if(2<Xt>>>0)Bt=Sn(gt);else switch(Xt){case 0:Bt=2;break;case 1:Bt=1;break;default:_n(gt,1);var Bt=0===kQ(gn(gt))?1:Sn(gt);}}if(7<Bt>>>0)Gt=xr(vD);else switch(Bt){case 0:Gt=[0,WQ(Ut,JQ(Ut,gt),14),lD];break;case 1:Gt=[0,WQ(Ut,JQ(Ut,gt),14),bD];break;case 2:se(Ot,mK(gt));continue;case 3:var jt=mK(gt),Gt=[0,Ut,Vr(jt,1,wt(jt)-1|0)];break;case 4:Gt=[0,Ut,kD];break;case 5:for(ce(Ot,91);;){Tn(gt);var qt=gn(gt),Yt=93<qt?1:cr(AH,qt+1|0)-1|0;if(3<Yt>>>0)Wt=Sn(gt);else switch(Yt){case 0:Wt=0;break;case 1:Wt=4;break;case 2:_n(gt,4);var Jt=gn(gt),Ht=91<Jt?93<Jt?-1:cr(vm,Jt-92|0)-1|0:-1,Wt=0===Ht?1:1===Ht?2:Sn(gt);break;default:Wt=3;}if(4<Wt>>>0)zt=xr(hD);else switch(Wt){case 0:zt=Ut;break;case 1:se(Ot,dD);continue;case 2:ce(Ot,92),ce(Ot,93);continue;case 3:ce(Ot,93);var zt=Ut;break;default:se(Ot,mK(gt));continue}Ut=zt;continue t}case 6:Gt=[0,WQ(Ut,JQ(Ut,gt),14),pD];break;default:se(Ot,mK(gt));continue}var Vt=Gt[1],$t=Gt[2],Kt=[0,Vt,[3,[0,EK(Pt,JQ(Vt,gt)),ie(Ot),$t]]];break}break;default:Kt=[0,VQ(Tt,JQ(Tt,gt)),zv];}var Qt=HQ(Kt);break}}var Zt=Qt[1],tr=Qt[2],rr=qK(Zt[2].slice(),Zt);t[4]=Zt;var er=t[2];I(t[1],er)[er+1]=[0,[0,rr,tr]],t[2]=t[2]+1|0;}},pZ=function(t,r,e,n){var a=t?t[1]:0,u=r?r[1]:0;try{var i=hK(n),f=0;}catch(s){if((s=mr(s))!==fK)throw s;var c=[0,[0,[0,e,sm[2],sm[3]],67],0],i=hK(OW),f=c;}var s=u?u[1]:bm,o=GK(e,i,s[5]),v=[0,bZ(o,0)];return[0,[0,f],[0,0],lZ[1],[0,lZ[1]],[0,0],s[6],0,0,0,0,0,0,0,0,0,1,0,0,0,[0,UW],[0,o],v,[0,a],s,e]},hZ=function(t){return Or(t[20][1])},dZ=function(t){return t[24][5]},mZ=function(t,r){var e=r[2];t[1][1]=[0,[0,r[1],e],t[1][1]];var n=t[19];return n?wr(n[1],t,e):0},yZ=function(t,r){var e=r[2],n=r[1];if(wr(lZ[3],e,t[4][1]))return mZ(t,[0,n,[7,e]]);var a=wr(lZ[4],e,t[4][1]);return t[4][1]=a,0},wZ=function(t,r){var e=t?t[1]:0;if(e<2){var n=r[22][1];kZ(n,e);var a=I(n[1],e)[e+1];return a?a[1][2]:xr(MW)}throw[0,im,PW]},gZ=function(t,r){return[0,r[1],r[2],r[3],r[4],r[5],t,r[7],r[8],r[9],r[10],r[11],r[12],r[13],r[14],r[15],r[16],r[17],r[18],r[19],r[20],r[21],r[22],r[23],r[24],r[25]]},TZ=function(t,r){return[0,r[1],r[2],r[3],r[4],r[5],r[6],r[7],r[8],r[9],r[10],r[11],r[12],r[13],r[14],r[15],r[16],r[17],t,r[19],r[20],r[21],r[22],r[23],r[24],r[25]]},_Z=function(t,r){return[0,r[1],r[2],r[3],r[4],r[5],r[6],r[7],r[8],r[9],r[10],r[11],r[12],t,r[14],r[15],r[16],r[17],r[18],r[19],r[20],r[21],r[22],r[23],r[24],r[25]]},SZ=function(t,r){return[0,r[1],r[2],r[3],r[4],r[5],r[6],r[7],t,r[9],r[10],r[11],r[12],r[13],r[14],r[15],r[16],r[17],r[18],r[19],r[20],r[21],r[22],r[23],r[24],r[25]]},AZ=function(t,r){return[0,r[1],r[2],r[3],r[4],r[5],r[6],r[7],r[8],r[9],r[10],t,r[12],r[13],r[14],r[15],r[16],r[17],r[18],r[19],r[20],r[21],r[22],r[23],r[24],r[25]]},EZ=function(t,r){return[0,r[1],r[2],r[3],r[4],r[5],r[6],r[7],r[8],r[9],r[10],r[11],r[12],r[13],t,r[15],r[16],r[17],r[18],r[19],r[20],r[21],r[22],r[23],r[24],r[25]]},xZ=function(t,r){return[0,r[1],r[2],r[3],r[4],r[5],r[6],t,r[8],r[9],r[10],r[11],r[12],r[13],r[14],r[15],r[16],r[17],r[18],r[19],r[20],r[21],r[22],r[23],r[24],r[25]]},IZ=function(t,r){return[0,r[1],r[2],r[3],r[4],r[5],r[6],r[7],r[8],r[9],r[10],r[11],t,r[13],r[14],r[15],r[16],r[17],r[18],r[19],r[20],r[21],r[22],r[23],r[24],r[25]]},CZ=function(t,r){return[0,r[1],r[2],r[3],r[4],r[5],r[6],r[7],r[8],r[9],r[10],r[11],r[12],r[13],r[14],r[15],r[16],r[17],r[18],[0,t],r[20],r[21],r[22],r[23],r[24],r[25]]},NZ=function(t){function r(r){return mZ(t,r)}return function(t){return Fr(r,t)}},LZ=function(t){var r=t[5][1];return r?[0,r[1][2]]:0},RZ=function(t){return[0,t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8],t[9],t[10],t[11],t[12],t[13],t[14],t[15],t[16],t[17],t[18],0,t[20],t[21],t[22],t[23],t[24],t[25]]},PZ=function(t,r,e){return[0,t[1],t[2],lZ[1],t[4],t[5],t[6],t[7],0,0,1,t[11],t[12],t[13],t[14],t[15],e,r,t[18],t[19],t[20],t[21],t[22],t[23],t[24],t[25]]},OZ=function(t){return sr(t,RW)?0:1},UZ=function(t){return sr(t,SW)&&sr(t,AW)&&sr(t,EW)&&sr(t,xW)&&sr(t,IW)&&sr(t,CW)&&sr(t,NW)&&sr(t,LW)?0:1},DZ=function(t){return sr(t,TW)&&sr(t,_W)?0:1},MZ=function(t,r){var e=t?t[1]:0;return wZ([0,e],r)[1]},FZ=function(t,r){var e=t?t[1]:0;return wZ([0,e],r)[3]},XZ=function(t,r){var e=t?t[1]:0;return wZ([0,e],r)[2]},BZ=function(t,r){var e=t?t[1]:0;return wZ([0,e],r)[4]},jZ=function(t){var r=LZ(t);return r&&r[1][2][1]<XZ(0,t)[2][1]?1:0},GZ=function(t){var r=MZ(0,t);if(\"number\"==typeof r){var e=r-3|0;if(tv<e>>>0){if(!(106<(e+1|0)>>>0))return 1}else if(6===e)return 0}return jZ(t)},qZ=function(t,r){var e=t?t[1]:0;return 9===MZ([0,e],r)?[0,XZ([0,e],r)]:0},YZ=function(t,r){var e=t?t[1]:0,n=FZ([0,e],r),a=MZ([0,e],r);if(!UZ(n)&&!DZ(n)&&!OZ(n)){if(\"number\"==typeof a){var u=a-1|0;if(58<u>>>0?64<=u?0:1:27===u?1:0)return 1}return 0}return 1},JZ=function(t,r){var e=t?t[1]:0,n=15===MZ([0,e],r)?1:0;if(n)u=n;else var a=63===MZ([0,e],r)?1:0,u=a?15===MZ([0,e+1|0],r)?1:0:a;return u},HZ=function(t,r){var e=t?t[1]:0,n=MZ([0,e],r);return\"number\"==typeof n&&(14===n?1:40===n?1:0)?1:0},WZ=function(t,r){return mZ(t,[0,XZ(0,t),r])},zZ=function(t){var r=t[1];if(\"number\"==typeof r)switch(r){case 0:return 2;case 108:return 4}else switch(r[0]){case 0:return 0;case 1:case 4:return 1}var e=t[2];return OZ(e)?3:UZ(e)?40:[1,e]},VZ=function(t){var r=BZ(0,t);yr(NZ(t),r);var e=FZ(0,t);return WZ(t,zZ([0,MZ(0,t),e]))},$Z=function(t){function r(r){return mZ(t,[0,r[1],57])}return function(t){return Fr(r,t)}},KZ=function(t,r){var e=t[6];return e?WZ(t,r):e},QZ=function(t,r){var e=t[6],n=r[2],a=r[1];return e?mZ(t,[0,a,n]):e},ZZ=function(t){var r=t[23][1];if(r){var e=r[1],n=XZ(0,t),a=MZ(0,t),u=FZ(0,t);yr(e,[0,n,a,hZ(t),u]);}var i=t[22][1];kZ(i,0);var f=I(i[1],0)[1],c=f?f[1][1]:xr(DW);t[21][1]=c;var s=BZ(0,t);yr(NZ(t),s),Fr(function(r){return t[2][1]=[0,r,t[2][1]],0},wZ([0,0],t)[5]);var o=[0,wZ(0,t)];t[5][1]=o;var v=t[22][1];kZ(v,0),1<v[2]&&te(v[1],1,v[1],0,v[2]-1|0);var l=v[2]-1|0;return I(v[1],l)[l+1]=0,v[2]=v[2]-1|0,0},t0=function(t,r){t[20][1]=[0,r,t[20][1]];var e=hZ(t),n=bZ(t[21][1],e);return t[22][1]=n,0},r0=function(t){var r=t[20][1],e=r?r[2]:xr(gW);t[20][1]=e;var n=hZ(t),a=bZ(t[21][1],n);return t[22][1]=a,0},e0=function(t){var r=1-GZ(t);return r?9===MZ(0,t)?ZZ(t):VZ(t):r},n0=function(t,r){return er(MZ(0,t),r)&&VZ(t),ZZ(t)},a0=function(t,r){return D(MZ(0,t),r)?(ZZ(t),1):0},u0=function(t,r){return sr(FZ(0,t),r)&&VZ(t),ZZ(t)},i0=[Ov,FW,J()],f0=function(t){var r=t[23][1];if(r){var e=[0,0,0,0],n=r[1],a=[0,function(t){var r=[0,t,0],n=e[3];return n?(e[1]=e[1]+1|0,n[2]=r,e[3]=r,0):(e[1]=1,e[2]=r,e[3]=r,0)}];t[23][1]=a;u=[0,[0,n,e]];}else var u=0;return[0,t[1][1],t[2][1],t[5][1],t[20][1],t[21][1],u]},c0=function(t,r,e){if(e){var n=e[1],a=n[1],u=n[2];if(r[23][1]=[0,a],t)for(f=u[2];;){if(!f)return 0;var i=f[2];yr(a,f[1]);var f=i;}return t}return 0},s0=function(t,r){c0(0,t,r[6]),t[1][1]=r[1],t[2][1]=r[2],t[5][1]=r[3],t[20][1]=r[4],t[21][1]=r[5];var e=hZ(t),n=bZ(t[21][1],e);return t[22][1]=n,0},o0=function(t,r,e){return c0(1,t,r[6]),[0,e]},v0=function(t,r){var e=f0(t);try{return o0(t,e,yr(r,t))}catch(r){if((r=mr(r))===i0)return s0(t,e);throw r}},l0=function(t,r){var e=XZ(0,r),n=yr(t,r),a=LZ(r),u=a?a[1]:(WZ(r,XW),XZ(0,r));return[0,EK(e,u),n]},b0=ee([0,B$]),k0=ee([0,B$]),p0=ee([0,function(t,r){var e=r[1],n=t[1],a=e[1],u=n[1],i=r[2],f=t[2];if(u){var c=u[1];if(a){var s=a[1],o=IK(s),v=IK(c)-o|0;if(0===v)var l=xK(s),b=R(xK(c),l);else b=v;}else b=-1;}else b=a?1:0;if(0===b)var k=CK(n[2],e[2]),p=0===k?CK(n[3],e[3]):k;else p=b;return 0===p?O(f,i):p}]),h0=wr(iK,P$,R$),d0=function(t){function r(r){var e=MZ(KW,r);return\"number\"!=typeof e||1<(e+Fh|0)>>>0?wr(M,r,yr(g,r)):wr(F,r,yr(t[14],r)[1])}function e(t,r,e){var n=yr(B,t);n0(t,80);var a=yr(g,t);return[0,EK(r,a[1]),[0,n,a,e]]}function n(t,r,n,a){var u=e(t,r,wr(W,0,t)),i=[0,u[1],[1,u[2]]];return[0,[0,i[1],[0,a,[0,i],0,n,1,0]]]}function u(t,r,e,n,a){1-dZ(t)&&WZ(t,7);var u=a0(t,79);n0(t,80);var i=yr(g,t);return[0,[0,EK(r,i[1]),[0,a,[0,i],u,e,0,n]]]}function i(t,r){var e=MZ(0,r);if(\"number\"==typeof e&&!(11<=e))switch(e){case 2:if(!t)return 0;break;case 4:if(t)return 0;break;case 9:case 10:return ZZ(r)}return VZ(r)}function f(t,r){return r?mZ(t,[0,r[1][1],5]):0}function c(r){var e=EZ(0,r),n=MZ(0,e);if(\"number\"==typeof n&&65===n){var a=XZ(0,e);if(n0(e,65),5===MZ(0,e)){n0(e,5),t0(e,0);var u=yr(t[8],e);r0(e);var i=XZ(0,e);n0(e,6);f=[0,EK(a,i),[0,u]];}else var f=[0,a,0];return[0,f]}return 0}function s(t){var r=MZ(0,t),e=MZ(BW,t);return\"number\"==typeof r&&80===r?\"number\"==typeof e&&65===e?(n0(t,80),[0,0,c(t)]):[0,yr(Q,t),c(t)]:jW}function o(t,r){var e=gZ(1,r);t0(e,1);var n=yr(t,e);return r0(e),n}function v(t){return o(g,t)}function l(t){return o(Z,t)}function b(t){return o(tt,t)}function k(t){return o(z,t)}function p(t,r){return o(gr(H,t,0,0),r)}function h(t){return o(B,t)}function d(t){return o(T,t)}function m(t){return o(Q,t)}function y(t){return o(c,t)}function w(t){return o(s,t)}var g=function t(r){return t.fun(r)},T=function t(r){return t.fun(r)},_=function t(r){return t.fun(r)},S=function t(r){return t.fun(r)},A=function t(r){return t.fun(r)},E=function t(r,e){return t.fun(r,e)},x=function t(r){return t.fun(r)},I=function t(r,e){return t.fun(r,e)},C=function t(r){return t.fun(r)},N=function t(r,e){return t.fun(r,e)},L=function t(r){return t.fun(r)},R=function t(r){return t.fun(r)},P=function t(r,e){return t.fun(r,e)},O=function t(r){return t.fun(r)},U=function t(r){return t.fun(r)},D=function t(r){return t.fun(r)},M=function t(r,e){return t.fun(r,e)},F=function t(r,e){return t.fun(r,e)},X=function t(r){return t.fun(r)},B=function t(r){return t.fun(r)},j=function t(r){return t.fun(r)},G=function t(r){return t.fun(r)},q=function t(r){return t.fun(r)},Y=function t(r){return t.fun(r)},J=function t(r,e,n,a){return t.fun(r,e,n,a)},H=function t(r,e,n,a){return t.fun(r,e,n,a)},W=function t(r,e){return t.fun(r,e)},z=function t(r){return t.fun(r)},V=function t(r){return t.fun(r)},$=function t(r,e){return t.fun(r,e)},K=function t(r,e){return t.fun(r,e)},Q=function t(r){return t.fun(r)};a(g,function(t){return yr(A,t)}),a(T,function(t){1-dZ(t)&&WZ(t,7);var r=XZ(0,t);n0(t,80);var e=yr(g,t),n=LZ(t);if(n)return[0,EK(r,n[1]),e];throw[0,im,oz]}),a(_,function(t){var r=XZ(0,t),e=MZ(0,t);if(\"number\"==typeof e){if(97===e)return ZZ(t),[0,[0,r,0]];if(98===e)return ZZ(t),[0,[0,r,1]]}return 0}),a(S,function(t){if(t){var r=t[1][1],e=Dr(t);if(e)return[0,EK(e[1][1],r),e];throw[0,im,sz]}throw[0,im,cz]}),a(A,function(t){return a0(t,83),wr(E,t,yr(x,t))}),a(E,function(t,r){if(83===MZ(0,t))for(f=[0,r,0];;){var e=MZ(0,t);if(\"number\"!=typeof e||83!==e){var n=yr(S,f),a=n[2],u=n[1];if(a){var i=a[2];if(i)return[0,u,[5,a[1],i[1],i[2]]]}throw[0,im,fz]}n0(t,83);var f=[0,yr(x,t),f];}return r}),a(x,function(t){return a0(t,85),wr(I,t,yr(C,t))}),a(I,function(t,r){if(85===MZ(0,t))for(f=[0,r,0];;){var e=MZ(0,t);if(\"number\"!=typeof e||85!==e){var n=yr(S,f),a=n[2],u=n[1];if(a){var i=a[2];if(i)return[0,u,[6,a[1],i[1],i[2]]]}throw[0,im,iz]}n0(t,85);var f=[0,yr(C,t),f];}return r}),a(C,function(t){return wr(N,t,yr(L,t))}),a(N,function(t,r){var e=MZ(0,t);if(\"number\"==typeof e&&12===e&&!t[14]){var n=wr(M,t,r);return Tr(J,t,n[1],0,[0,[0,n,0],0])}return r}),a(L,function(t){var r=MZ(0,t);if(\"number\"==typeof r&&79===r){var e=XZ(0,t);n0(t,79);var n=yr(L,t);return[0,EK(e,n[1]),[0,n]]}return yr(R,t)}),a(R,function(t){return wr(P,t,yr(O,t))}),a(P,function(t,r){if(!jZ(t)&&a0(t,7)){var e=XZ(0,t);return n0(t,8),wr(P,t,[0,EK(r[1],e),[3,r]])}return r}),a(O,function(t){var r=XZ(0,t),e=MZ(0,t);if(\"number\"==typeof e)switch(e){case 0:var n=yr(V,t);return[0,n[1],[4,n[2]]];case 5:return yr(q,t);case 7:return yr(D,t);case 46:var a=XZ(0,t);n0(t,46);var u=yr(O,t);return[0,EK(a,u[1]),[7,u]];case 92:return yr(Y,t);case 100:return n0(t,Tb),[0,r,8];case 1:case 3:var i=Tr(H,0,1,1,t);return[0,i[1],[2,i[2]]];case 30:case 31:var f=FZ(0,t);return n0(t,e),[0,r,[11,[0,31===e?1:0,f]]]}else switch(e[0]){case 1:var c=e[1],s=c[4],o=c[3],v=c[2],l=c[1];return s&&KZ(t,32),n0(t,[1,[0,l,v,o,s]]),[0,l,[9,[0,v,o]]];case 5:var b=e[2],k=e[1],p=FZ(0,t);return n0(t,[5,k,b]),1===k&&KZ(t,32),[0,r,[10,[0,b,p]]]}var h=yr(U,e);if(h){var d=h[1];return n0(t,e),[0,r,d]}return VZ(t),[0,r,0]}),a(U,function(t){if(\"number\"==typeof t){if(29===t)return uz;if(ol<=t)switch(t-110|0){case 0:return QW;case 1:return ZW;case 2:return tz;case 3:return rz;case 4:return ez;case 5:return nz;default:return az}}return 0}),a(D,function(t){var r=XZ(0,t);n0(t,7);for(i=0;;){var e=MZ(0,t);if(\"number\"==typeof e&&(8===e?1:rv===e?1:0)){var n=Dr(i),a=XZ(0,t);return n0(t,8),[0,EK(r,a),[8,n]]}var u=[0,yr(g,t),i];8!==MZ(0,t)&&n0(t,10);var i=u;}}),a(M,function(t,r){return[0,r[1],[0,0,r,0]]}),a(F,function(t,r){1-dZ(t)&&WZ(t,7);var e=a0(t,79);n0(t,80);var n=yr(g,t);return[0,EK(r[1],n[1]),[0,[0,r],n,e]]}),a(X,function(t){return function(e){for(s=e;;){var n=MZ(0,t);if(\"number\"==typeof n){var a=n-6|0;if(7<a>>>0?cb===a?1:0:5<(a-1|0)>>>0?1:0){if(13===n){var u=XZ(0,t);n0(t,13);var i=r(t),f=[0,[0,EK(u,i[1]),[0,i]]];}else f=0;return[0,Dr(s),f]}}var c=[0,r(t),s];6!==MZ(0,t)&&n0(t,10);var s=c;}}}),a(B,function(t){n0(t,5);var r=wr(X,t,0);return n0(t,6),r}),a(j,function(t){n0(t,5);var r=EZ(0,t),e=MZ(0,r);if(\"number\"==typeof e)if(13<=e){if(rv===e)a=1;else if(14<=e)var n=0,a=0;else a=1;if(a)var u=[0,wr(X,r,0)],n=1;}else if(6===e)var u=zW,n=1;else if(0===e)var u=yr(G,r),n=1;else n=0;else n=0;if(!n){if(yr(U,e)){var i=MZ(VW,r);if(\"number\"==typeof i)if(1<(i+Fh|0)>>>0)c=0;else var f=[0,wr(X,r,0)],c=1;else c=0;if(!c)f=[1,yr(g,r)];s=f;}else var s=[1,yr(g,r)];u=s;}if(0===u[0])p=u;else{var o=u[1];if(t[14])k=u;else{var v=MZ(0,t);if(\"number\"==typeof v)if(6===v)if(12===MZ($W,t))var l=[0,wr(X,t,[0,wr(M,t,o),0])],b=1;else var l=[1,o],b=1;else if(10===v){n0(t,10);var l=[0,wr(X,t,[0,wr(M,t,o),0])],b=1;}else b=0;else b=0;if(!b)l=u;var k=l;}var p=k;}return n0(t,6),p}),a(G,function(r){var e=wr(t[13],0,r),n=MZ(0,r);if(\"number\"==typeof n&&!(1<(n+Fh|0)>>>0)){var a=wr(F,r,e);return a0(r,10),[0,wr(X,r,[0,a,0])]}return[1,wr(E,r,wr(I,r,wr(N,r,wr(P,r,wr(K,r,e)))))]}),a(q,function(t){var r=XZ(0,t),e=yr(j,t);return 0===e[0]?Tr(J,t,r,0,e[1]):e[1]}),a(Y,function(t){var r=XZ(0,t),e=wr(W,0,t);return Tr(J,t,r,e,yr(B,t))}),a(J,function(t,r,e,n){n0(t,12);var a=yr(g,t);return[0,EK(r,a[1]),[1,[0,n,a,e]]]}),a(H,function(r,a,c,s){var o=a?3===MZ(0,s)?1:0:a,v=XZ(0,s);n0(s,o?3:1);for(vt=0;;){if(r&&c)throw[0,im,GW];var l=XZ(0,s),b=r?a0(s,42):r,k=yr(_,s),p=MZ(0,s);if(\"number\"==typeof p){if(92===p)m=1;else{if(rv===p)var h=Dr(vt),d=1;else if(14<=p)var m=0,d=0;else switch(p){case 2:if(o)var m=0,d=0;else var h=Dr(vt),d=1;break;case 4:if(o)var h=Dr(vt),d=1;else var m=0,d=0;break;case 7:if(n0(s,7),80===MZ(WW,s)){var y=yr(t[14],s)[1];n0(s,80);w=[0,y];}else var w=0;var T=yr(g,s);n0(s,8),n0(s,80);var S=yr(g,s),A=[2,[0,EK(l,S[1]),[0,w,T,S,b,k]]];i(o,s);vt=[0,A,vt];continue;case 13:if(c){f(s,k),ZZ(s);var E=yr(g,s),x=[1,[0,EK(l,E[1]),[0,E]]];i(o,s);vt=[0,x,vt];continue}var m=0,d=0;break;case 5:var m=1,d=0;break;default:var m=0,d=0;}if(d){var I=XZ(0,s);return n0(s,o?4:2),[0,EK(v,I),[0,o,h]]}}if(m){f(s,k);var C=wr(W,0,s),N=e(s,XZ(0,s),C),L=[3,[0,EK(l,N[1]),[0,N,b]]];i(o,s);vt=[0,L,vt];continue}}if(0===b)F=0;else if(k)F=0;else if(\"number\"==typeof p)if(80===p){QZ(s,[0,l,40]);var R=[1,[0,l,qW]],P=MZ(0,s);if(\"number\"==typeof P){if(5===P)U=1;else if(92===P)U=1;else var O=0,U=0;if(U){f(s,k);var D=n(s,l,0,R),O=1;}}else O=0;if(!O)D=u(s,l,0,k,R);var M=D,F=1;}else F=0;else F=0;if(!F){var X=function(r){t0(r,0);var e=yr(t[21],r);return r0(r),e},B=X(s)[2];if(1===B[0]){var j=B[1][2];if(sr(j,YW))if(sr(j,JW))var G=0,q=0;else q=1;else q=1;if(q){var Y=MZ(0,s);if(\"number\"==typeof Y){var J=Y-6|0;if(85<J>>>0)if(87<(J+1|0)>>>0)var H=0,z=0;else{f(s,k);var V=n(s,l,b,B),z=1;}else if(1<(J-73|0)>>>0)var H=0,z=0;else var V=u(s,l,b,k,B),z=1;if(z)var $=V,H=1;}else H=0;if(!H){var K=X(s),Q=fr(j,HW);f(s,k);var Z=e(s,l,0),tt=K[1],rt=Z[2][1],et=K[2];if(0===Q){var nt=rt[1];if(rt[2]){mZ(s,[0,tt,63]);}else{if(nt)if(nt[2])at=1;else at=0;else var at=1;if(at){mZ(s,[0,tt,63]);}}}else(rt[1]?0:rt[2]?0:1)||mZ(s,[0,tt,62]);var ut=Q?[1,Z]:[2,Z],$=[0,[0,EK(l,Z[1]),[0,et,ut,0,b,0,0]]];}var it=$,G=1;}}else G=0;if(!G){var ft=MZ(0,s);if(\"number\"==typeof ft){if(5===ft)st=1;else if(92===ft)st=1;else var ct=0,st=0;if(st){f(s,k);var ot=n(s,l,b,B),ct=1;}}else ct=0;if(!ct)ot=u(s,l,b,k,B);it=ot;}M=it;}i(o,s);var vt=[0,M,vt];}}),a(W,function(r,e){var n=XZ(0,e);if(92===MZ(0,e)){1-dZ(e)&&WZ(e,7),n0(e,92);for(var a=0,u=0;;){var i=yr(_,e),f=gr(t[15],e,0,29),c=f[2],s=f[1],o=c[2],v=c[1][2],l=MZ(0,e);if(0===r)var b=0,k=0;else{if(\"number\"==typeof l)if(78===l){ZZ(e);var b=[0,yr(g,e)],k=1,p=1;}else p=0;else p=0;if(!p){a&&mZ(e,[0,s,58]);var b=0,k=a;}}var h=[0,[0,s,[0,v,o,i,b]],u],d=MZ(0,e);if(\"number\"==typeof d){if(93===d)y=1;else if(rv===d)y=1;else var m=0,y=0;if(y)var w=Dr(h),m=1;}else m=0;if(!m){if(n0(e,10),93!==MZ(0,e)){var a=k,u=h;continue}w=Dr(h);}var T=EK(n,XZ(0,e));return n0(e,93),[0,[0,T,[0,w]]]}}return 0}),a(z,function(t){var r=XZ(0,t);if(92===MZ(0,t)){n0(t,92);for(i=0;;){var e=MZ(0,t);if(\"number\"==typeof e&&(93===e?1:rv===e?1:0)){var n=Dr(i),a=EK(r,XZ(0,t));return n0(t,93),[0,[0,a,[0,n]]]}var u=[0,yr(g,t),i];93!==MZ(0,t)&&n0(t,10);var i=u;}}return 0}),a(V,function(r){return wr($,r,wr(t[13],0,r))}),a($,function(r,e){for(c=[0,e[1],[0,e]];;){var n=c[2],a=c[1];if(11!==MZ(0,r)){var u=yr(z,r);return[0,u?EK(a,u[1][1]):a,[0,n,u]]}n0(r,11);var i=wr(t[13],0,r),f=EK(a,i[1]),c=[0,f,[1,[0,f,[0,n,i]]]];}}),a(K,function(t,r){var e=wr($,t,r);return[0,e[1],[4,e[2]]]}),a(Q,function(t){var r=MZ(0,t);return\"number\"==typeof r&&80===r?[0,yr(T,t)]:0});var Z=yr(W,1),tt=yr(W,0);return[0,v,b,l,k,function(t){return o(V,t)},p,h,d,m,y,w]}(h0),m0=yr(function(t){return function(r){function e(t,r){for(c=r;;){var e=c[2],i=c[1],f=t[1];switch(e[0]){case 0:return Xr(n,t,e[1][1]);case 1:return Xr(a,t,e[1][1]);case 2:var c=e[1][1];continue;case 3:var s=e[1][1],o=s[2],v=t[2],l=t[1],b=s[1];wr(b0[3],o,v)&&mZ(l,[0,b,30]);var k=u([0,l,v],s);return[0,k[1],wr(b0[4],o,k[2])];default:return mZ(f,[0,i,19]),t}}}function n(t,r){if(0===r[0]){var n=r[1][2],a=n[1];return e(1===a[0]?u(t,a[1]):t,n[2])}return e(t,r[1][2][1])}function a(t,r){if(r){var n=r[1];return 0===n[0]?e(t,n[1]):e(t,n[1][2][1])}return t}function u(t,r){var e=r[2],n=r[1],a=t[1],u=t[2];return DZ(e)&&QZ(a,[0,n,29]),(OZ(e)||UZ(e))&&QZ(a,[0,n,40]),[0,a,u]}function i(t,r,n,a,u){var i=u[2],f=u[1],c=r||1-n;if(c){var s=r?gZ(1-t[6],t):t;if(a){var o=a[1],v=o[2],l=o[1];DZ(v)&&QZ(s,[0,l,31]),(OZ(v)||UZ(v))&&QZ(s,[0,l,40]);}var b=Xr(e,[0,s,b0[1]],f);if(i)return e(b,i[1][2][1]),0;k=0;}else var k=c;return k}function f(r){n0(r,5);for(v=0;;){var e=MZ(0,r);if(\"number\"==typeof e){var n=e-6|0;if(7<n>>>0?cb===n?1:0:5<(n-1|0)>>>0?1:0){if(13===e){var a=XZ(0,r);n0(r,13);var u=wr(t[19],r,29),i=[0,[0,EK(a,u[1]),[0,u]]];}else i=0;6!==MZ(0,r)&&WZ(r,48);var f=[0,Dr(v),i];return n0(r,6),f}}var c=wr(t[19],r,29);if(78===MZ(0,r)){n0(r,78);var s=yr(t[9],r),o=[0,EK(c[1],s[1]),[2,[0,c,s]]];}else o=c;6!==MZ(0,r)&&n0(r,10);var v=[0,o,v];}}function c(r,e,n){var a=PZ(r,e,n),u=yr(t[17],a),i=u[1];return[0,i,[0,[0,i,u[2]]],u[3]]}function s(r,e,n){var a=[0,r[1],r[2],r[3],r[4],r[5],r[6],r[7],r[8],r[9],1,r[11],r[12],r[13],r[14],r[15],r[16],r[17],r[18],r[19],r[20],r[21],r[22],r[23],r[24],r[25]],u=MZ(0,a);if(\"number\"==typeof u&&1===u){var i=c(a,e,n);return[0,i[2],i[3]]}var f=PZ(a,e,n);return[0,[1,yr(t[9],f)],f[6]]}function o(t,r,e){var n=XZ(0,t),a=MZ(0,t);if(\"number\"==typeof a)if(97===a){ZZ(t);var u=[0,[0,n,0]],i=1;}else if(98===a){ZZ(t);var u=[0,[0,n,1]],i=1;}else i=0;else i=0;if(!i)u=0;if(u){var f=u[1][1];if(!(r?0:e?0:1))return mZ(t,[0,f,5]),0}return u}function v(t){return a0(t,Tb)}function l(t){return a0(t,63)}function b(t){var r=0===t[2]?1:0,e=t[1];if(r)for(u=e;;){if(u){var n=u[2],a=3===u[1][2][0]?1:0;if(a){var u=n;continue}return a}return 1}return r}function k(e){var n=XZ(0,e),a=l(e);n0(e,15);var u=v(e),s=e[7],o=MZ(0,e);if(0===s)h=0;else if(\"number\"==typeof o)if(5===o)var k=0,p=0,h=1;else if(92===o)var d=yr(r[2],e),m=5===MZ(0,e)?0:[0,wr(t[13],vz,e)],k=d,p=m,h=1;else h=0;else h=0;if(!h)var y=[0,wr(t[13],lz,e)],k=yr(r[2],e),p=y;var w=f(e),g=yr(r[11],e),T=g[2],_=g[1],S=c(e,a,u),A=S[2];i(e,S[3],b(w),p,w);var E=0===A[0]?[0,A[1][1],0]:[0,A[1][1],1],x=[17,[0,p,w,A,a,u,T,E[2],_,k]];return[0,EK(n,E[1]),x]}function p(r){for(var e=0,n=0;;){var a=wr(t[19],r,28);if(78===MZ(0,r)){n0(r,78);var u=[0,yr(t[9],r)],i=0;}else{var f=a[1];if(3===a[2][0])var u=km[1],i=km[2];else var u=0,i=[0,[0,f,44],0];}var c=u?u[1][1]:a[1],s=[0,[0,EK(a[1],c),[0,a,u]],e],o=Rr(i,n);if(10!==MZ(0,r)){var v=Or(s)[1],l=Dr(s),b=Or(s)[1],k=Dr(o);return[0,EK(b,v),l,k]}n0(r,10);var e=s,n=o;}}function h(t,r,e){var n=XZ(0,e);n0(e,t);var a=p(e),u=a[3],i=[0,a[2],r];return[0,[0,EK(n,a[1]),i],u]}function d(t){return h(g,w,t)}function m(t){var r=h(27,2,_Z(1,t)),e=r[1],n=e[2],a=r[2];return[0,[0,e[1],n],Dr(Xr(function(t,r){var e=r[1];return r[2][2]?t:[0,[0,e,43],t]},a,n[1]))]}function y(t){return h(28,1,_Z(1,t))}var w=0,g=24;return[0,l,v,o,f,c,b,i,s,function(t){var r=XZ(0,t),e=MZ(0,t);if(\"number\"==typeof e){var n=e+-24|0;if(4<n>>>0)i=0;else{switch(n){case 0:var a=d(t),u=1;break;case 3:var a=m(t),u=1;break;case 4:var a=y(t),u=1;break;default:var i=0,u=0;}if(u)var f=a,i=1;}}else i=0;if(!i){VZ(t);f=d(t);}var c=f[1],s=f[2],o=[27,c[2]];return[0,[0,EK(r,c[1]),o],s]},p,y,m,d,k]}}(h0),d0),y0=yr(yr(function(t){return function(r){return function(e){function n(r){var e=yr(h,r),n=yr(p,r);if(n){var a=n[1];1-yr(k,e)&&mZ(r,[0,e[1],15]);var u=e[2],i=e[1],f=(\"number\"==typeof u||10===u[0]&&DZ(u[1][2])&&QZ(r,[0,i,37]),wr(t[20],r,e)),c=yr(v,r);return[0,EK(f[1],c[1]),[2,[0,a,f,c]]]}return e}function u(t,r){throw i0}function i(t){var r=CZ(u,t),e=n(r),a=MZ(0,r);if(\"number\"==typeof a){if(12===a)throw i0;if(80===a){var i=r[5][1];if(D(i?[0,i[1][1]]:0,yV))throw i0}}if(YZ(0,r)){var f=e[2];if(\"number\"!=typeof f&&10===f[0]&&!sr(f[1][2],wV)&&!jZ(r))throw i0;return e}return e}function f(t,r,e,n){return[0,n,[14,[0,e,t,r]]]}function c(t,r,e){for(var n=r,a=e;;){var u=MZ(0,t);if(\"number\"!=typeof u||82!==u)return[0,a,n];n0(t,82);var i=l0(m,t),c=i[2],s=EK(a,i[1]),n=f(n,c,1,s),a=s;}}function s(t,r,e,n){return[0,n,[3,[0,e,t,r]]]}function o(t,r){if(\"number\"==typeof r){var e=r-29|0;if(16<e>>>0?19===e?1:0:14<(e-1|0)>>>0?1:0)return 0}throw i0}var v=function t(r){return t.fun(r)},l=function t(r){return t.fun(r)},b=function t(r){return t.fun(r)},k=function t(r){return t.fun(r)},p=function t(r){return t.fun(r)},h=function t(r){return t.fun(r)},d=function t(r){return t.fun(r)},m=function t(r){return t.fun(r)},y=function t(r){return t.fun(r)},w=function t(r){return t.fun(r)},g=function t(r){return t.fun(r)},T=function t(r){return t.fun(r)},_=function t(r,e){return t.fun(r,e)},S=function t(r,e,n){return t.fun(r,e,n)},A=function t(r){return t.fun(r)},E=function t(r){return t.fun(r)},x=function t(r,e,n){return t.fun(r,e,n)},I=function t(r){return t.fun(r)},C=function t(r,e){return t.fun(r,e)},N=function t(r){return t.fun(r)},L=function t(r){return t.fun(r)},R=function t(r,e){return t.fun(r,e)},P=function t(r,e,n,a){return t.fun(r,e,n,a)},O=function t(r){return t.fun(r)},U=function t(r){return t.fun(r)},M=function t(r){return t.fun(r)},F=function t(r){return t.fun(r)},X=function t(r,e){return t.fun(r,e)},B=function t(r){return t.fun(r)};return a(v,function(t){var r=MZ(0,t),e=YZ(0,t);if(\"number\"==typeof r){var a=r-6|0;if(85<a>>>0)u=87<(a+1|0)>>>0?0:1;else if(52===a){if(t[16])return yr(l,t);u=0;}else u=0;}else var u=0;if(!u&&0===e)return n(t);var f=v0(t,i);if(f)return f[1];var c=v0(t,F);return c?c[1]:n(t)}),a(l,function(t){return l0(function(t){n0(t,58),1-t[16]&&WZ(t,25);var r=a0(t,Tb),e=1-((9===MZ(0,t)?1:0)||GZ(t));if(r)a=0;else if(e)a=0;else var n=0,a=1;if(!a)n=[0,yr(v,t)];return[25,[0,n,r]]},t)}),a(b,function(t){var r=t[2];if(\"number\"!=typeof r)switch(r[0]){case 10:case 15:case 16:return 1}return 0}),a(k,function(t){var r=t[2];if(\"number\"!=typeof r)switch(r[0]){case 0:case 10:case 15:case 16:case 18:return 1}return 0}),a(p,function(t){var r=MZ(0,t);if(\"number\"==typeof r){var e=r+-66|0;if(12<e>>>0)u=0;else{switch(e){case 0:n=iV;break;case 1:n=fV;break;case 2:n=cV;break;case 3:n=sV;break;case 4:n=oV;break;case 5:n=vV;break;case 6:n=lV;break;case 7:n=bV;break;case 8:n=kV;break;case 9:n=pV;break;case 10:n=hV;break;case 11:n=dV;break;default:var n=mV;}var a=n,u=1;}}else u=0;if(!u)a=0;return 0!==a&&ZZ(t),a}),a(h,function(t){var r=XZ(0,t),e=yr(d,t);if(79===MZ(0,t)){n0(t,79);var n=yr(v,AZ(0,t));n0(t,80);var a=l0(v,t),u=a[2];return[0,EK(r,a[1]),[7,[0,e,n,u]]]}return e}),a(d,function(t){for(var r=l0(m,t),e=c(t,r[2],r[1]),n=e[2],a=e[1];;){var u=MZ(0,t);if(\"number\"!=typeof u||81!==u)return n;n0(t,81);var i=l0(m,t),s=c(t,i[2],i[1]),o=s[2],v=EK(a,s[1]),n=f(n,o,0,v),a=v;}}),a(m,function(t){M=0;t:for(;;){var r=XZ(0,t),e=0!==yr(y,t)?1:0,n=yr(w,AZ(0,t)),a=LZ(t),u=a?a[1]:n[1],i=EK(r,u);if(92===MZ(0,t)){var f=n[2];\"number\"==typeof f||12===f[0]&&WZ(t,47);}var c=MZ(0,t);if(\"number\"==typeof c){var o=c+xb|0;if(1<o>>>0)if(66<=o){switch(o+-66|0){case 0:var v=Fz,l=1;break;case 1:var v=Xz,l=1;break;case 2:var v=Bz,l=1;break;case 3:var v=jz,l=1;break;case 4:var v=Gz,l=1;break;case 5:var v=qz,l=1;break;case 6:var v=Yz,l=1;break;case 7:var v=Jz,l=1;break;case 8:var v=Hz,l=1;break;case 9:var v=Wz,l=1;break;case 10:var v=zz,l=1;break;case 11:var v=Vz,l=1;break;case 12:var v=$z,l=1;break;case 13:var v=Kz,l=1;break;case 14:var v=Qz,l=1;break;case 15:var v=Zz,l=1;break;case 16:var v=tV,l=1;break;case 17:var v=rV,l=1;break;case 18:var v=eV,l=1;break;case 19:var v=nV,l=1;break;default:var b=0,k=0,l=0;}if(l)var p=v,k=1;}else var b=0,k=0;else if(0===o)if(t[11])var p=0,k=1;else var p=uV,k=1;else var p=aV,k=1;if(k)var h=p,b=1;}else b=0;if(!b)h=0;if(0!==h&&ZZ(t),h){var d=h[1],m=d[1],g=d[2];(e?14===m?1:0:e)&&mZ(t,[0,i,16]);for(var T=n,_=[0,m,g],S=i,A=M;;){var E=_[2],x=_[1];if(A){var I=A[1],C=I[2],N=C[2],L=A[2],R=I[3],P=C[1],O=I[1],U=0===N[0]?N[1]:N[1]-1|0;if((E[0],E[1])<=U){var D=EK(R,S),T=s(O,T,P,D),_=[0,x,E],S=D,A=L;continue}}var M=[0,[0,T,[0,x,E],S],A];continue t}}for(var F=n,X=i,B=M;;){if(!B)return F;var j=B[1],G=B[2],q=j[2][1],Y=j[1],J=EK(j[3],X),F=s(Y,F,q,J),X=J,B=G;}}}),a(y,function(t){var r=MZ(0,t);if(\"number\"==typeof r)if(48<=r){if(97<=r){if(!(105<=r))switch(r+al|0){case 0:return Nz;case 1:return Lz;case 6:return Rz;case 7:return Pz}}else if(64===r&&t[17])return Oz}else if(45<=r)switch(r+-45|0){case 0:return Uz;case 1:return Dz;default:return Mz}return 0}),a(w,function(t){var r=XZ(0,t),e=yr(y,t);if(e){var n=e[1];ZZ(t);var a=l0(w,t),u=a[2],i=EK(r,a[1]);if(6===n){var f=u[2];if(\"number\"==typeof f)c=1;else if(10===f[0]){QZ(t,[0,i,33]);c=0;}else var c=1;if(c);}else;return[0,i,[23,[0,n,1,u]]]}var s=MZ(0,t);if(\"number\"==typeof s)if(105===s)var o=Cz,v=1;else if(106===s)var o=Iz,v=1;else v=0;else v=0;if(!v)o=0;if(o){var l=o[1];ZZ(t);var k=l0(w,t),p=k[2],h=k[1];1-yr(b,p)&&mZ(t,[0,p[1],15]);var d=p[2];\"number\"==typeof d||10===d[0]&&DZ(d[1][2])&&KZ(t,39);return[0,EK(r,h),[24,[0,l,p,1]]]}return yr(g,t)}),a(g,function(t){var r=yr(T,t);if(jZ(t))return r;var e=MZ(0,t);if(\"number\"==typeof e)if(105===e)var n=xz,a=1;else if(106===e)var n=Ez,a=1;else a=0;else a=0;if(!a)n=0;if(n){var u=n[1];1-yr(b,r)&&mZ(t,[0,r[1],15]);var i=r[2],f=(\"number\"==typeof i||10===i[0]&&DZ(i[1][2])&&KZ(t,38),XZ(0,t));return ZZ(t),[0,EK(r[1],f),[24,[0,u,r,0]]]}return r}),a(T,function(t){var r=XZ(0,t),e=[0,t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8],t[9],t[10],t[11],t[12],t[13],t[14],0,t[16],t[17],t[18],t[19],t[20],t[21],t[22],t[23],t[24],t[25]],n=1-t[15],a=MZ(0,e);if(\"number\"==typeof a)if(44===a)if(n)var u=yr(A,e),i=1;else i=0;else if(50===a)var u=wr(_,e,r),i=1;else i=0;else i=0;if(!i)u=JZ(0,e)?yr(I,e):yr(N,e);return gr(S,e,r,gr(x,e,r,u))}),a(_,function(t,r){n0(t,50),n0(t,5);var e=yr(v,AZ(0,t));return n0(t,6),[0,EK(r,e[1]),[11,e]]}),a(S,function(r,e,n){var a=MZ(0,r);if(\"number\"==typeof a)switch(a){case 5:if(!r[12]){var u=yr(E,r),i=u[2];return gr(S,r,e,[0,EK(e,u[1]),[4,[0,n,i]]])}break;case 7:n0(r,7);var f=yr(t[7],r),c=EK(e,XZ(0,r));return n0(r,8),gr(S,r,e,[0,c,[15,[0,n,[1,f],1]]]);case 11:n0(r,11);var s=yr(B,r)[1];return gr(S,r,e,[0,EK(e,s[1]),[15,[0,n,[0,s],0]]])}else if(2===a[0])return gr(S,r,e,Tr(P,r,e,n,a[1]));return n}),a(A,function(r){var e=XZ(0,r);if(n0(r,44),r[10]&&11===MZ(0,r)){n0(r,11);var n=[0,e,Sz];if(fr(FZ(0,r),Az)){var a=wr(t[13],0,r);return[0,EK(e,a[1]),[16,[0,n,a]]]}return VZ(r),ZZ(r),[0,e,[10,n]]}var u=XZ(0,r),i=MZ(0,r);if(\"number\"==typeof i)if(44===i)var f=yr(A,r),c=1;else c=0;else c=0;if(!c)f=JZ(0,r)?yr(I,r):yr(N,r);var s=gr(x,IZ(1,r),u,f),o=MZ(0,r);if(\"number\"==typeof o)l=0;else if(2===o[0])var v=Tr(P,r,u,s,o[1]),l=1;else l=0;if(!l)v=s;var b=MZ(0,r);if(\"number\"==typeof b)if(5===b)var k=yr(E,r),p=k[1],h=k[2],d=1;else d=0;else d=0;if(!d)var p=v[1],h=0;return[0,EK(e,p),[17,[0,v,h]]]}),a(E,function(t){var r=XZ(0,t);n0(t,5);for(l=0;;){var e=MZ(0,t);if(\"number\"==typeof e&&(6===e?1:rv===e?1:0)){var n=Dr(l),a=XZ(0,t);return n0(t,6),[0,EK(r,a),n]}var u=MZ(0,t);if(\"number\"==typeof u)if(13===u){var i=XZ(0,t);n0(t,13);var f=yr(v,t),c=[1,[0,EK(i,f[1]),[0,f]]],s=1;}else s=0;else s=0;if(!s)c=[0,yr(v,t)];var o=[0,c,l];6!==MZ(0,t)&&n0(t,10);var l=o;}}),a(x,function(r,e,n){var a=MZ(0,r);if(\"number\"==typeof a)switch(a){case 7:n0(r,7);var u=IZ(0,r),i=yr(t[7],u),f=XZ(0,r);return n0(r,8),gr(S,r,e,[0,EK(e,f),[15,[0,n,[1,i],1]]]);case 11:n0(r,11);var c=yr(B,r)[1];return gr(S,r,e,[0,EK(e,c[1]),[15,[0,n,[0,c],0]]])}else if(2===a[0])return gr(S,r,e,Tr(P,r,e,n,a[1]));return n}),a(I,function(n){var a=XZ(0,n),u=yr(e[1],n);n0(n,15);var i=yr(e[2],n);if(5===MZ(0,n))var f=0,c=0;else{var s=MZ(0,n);if(\"number\"==typeof s)if(92===s)var o=0,v=1;else v=0;else v=0;if(!v)o=[0,wr(t[13],_z,n)];var f=o,c=yr(r[2],n);}var l=yr(e[4],n),b=yr(r[11],n),k=b[2],p=b[1],h=gr(e[5],n,u,i),d=h[2],m=h[3],y=h[1],w=yr(e[6],l);_r(e[7],n,m,w,f,l);var g=0===d[0]?0:1;return[0,EK(a,y),[8,[0,f,l,d,u,i,k,g,p,c]]]}),a(C,function(t,r){var e=FZ(0,t);if(0===r)f=0;else{switch(r-1|0){case 0:KZ(t,32);var n=1;try{var a=It(xt(Lr(yz,e)));}catch(t){if(n=0,(t=mr(t))[1]!==rm)throw t;var u=xr(Lr(wz,e)),i=1;}if(n)var u=a,i=1;break;case 1:var f=0,i=0;break;default:var c=1;try{var s=KQ(e);}catch(t){c=0;if((t=mr(t))[1]!==rm)throw t;var u=xr(Lr(gz,e)),i=1;}if(c)var u=s,i=1;}if(i)var o=u,f=1;}if(!f)try{o=It(xt(e));}catch(i){if((i=mr(i))[1]!==rm)throw i;o=xr(Lr(Tz,e));}return n0(t,[0,r]),o}),a(N,function(r){var e=XZ(0,r),n=MZ(0,r);if(\"number\"==typeof n)switch(n){case 1:return yr(L,r);case 5:return yr(O,r);case 7:var a=yr(U,r);return[0,a[1],[0,a[2]]];case 21:return n0(r,21),[0,e,1];case 29:var u=FZ(0,r);return n0(r,29),[0,e,[13,[0,0,u]]];case 40:return yr(t[23],r);case 51:var i=XZ(0,r);return n0(r,51),[0,i,0];case 92:var f=yr(t[18],r);return[0,f[1],[12,f[2]]];case 30:case 31:var c=FZ(0,r);return n0(r,n),[0,e,[13,[0,[1,31===n?1:0],c]]];case 73:case 99:return yr(M,r)}else switch(n[0]){case 0:var s=n[1],o=FZ(0,r);return[0,e,[13,[0,[2,wr(C,r,s)],o]]];case 1:var v=n[1],l=v[4],b=v[3],k=v[2],p=v[1];return l&&KZ(r,32),n0(r,[1,[0,p,k,b,l]]),[0,p,[13,[0,[0,k],b]]];case 2:var h=wr(R,r,n[1]);return[0,h[1],[21,h[2]]]}if(YZ(0,r)){var d=wr(t[13],0,r);return[0,d[1],[10,d]]}return VZ(r),zv===n&&ZZ(r),[0,e,[13,[0,0,mz]]]}),a(L,function(r){var e=yr(t[11],r);return[0,e[1],[18,e[2]]]}),a(R,function(r,e){var n=e[3],a=e[2],u=e[1],i=a[2],f=a[1];n0(r,[2,e]);var c=[0,u,[0,[0,i,f],n]];if(n)var s=u,o=[0,c,0],v=0;else for(var l=[0,c,0],b=0;;){var k=yr(t[7],r),p=[0,k,b],h=MZ(0,r);if(\"number\"==typeof h)if(2===h){t0(r,4);var d=MZ(0,r);if(\"number\"==typeof d)I=1;else if(2===d[0]){var m=d[1],y=m[3],w=m[2],g=m[1],T=w[2],_=w[1];ZZ(r),r0(r);var S=[0,[0,g,[0,[0,T,_],y]],l];if(!y){var l=S,b=p;continue}var A=Dr(p),E=[0,g,Dr(S),A],x=1,I=0;}else I=1;if(I)throw[0,im,hz]}else x=0;else x=0;if(!x){VZ(r);var C=[0,k[1],dz],N=Dr(p),L=Dr([0,C,l]),E=[0,k[1],L,N];}var s=E[1],o=E[2],v=E[3];break}return[0,EK(u,s),[0,o,v]]}),a(P,function(t,r,e,n){var a=wr(R,t,n);return[0,EK(r,a[1]),[20,[0,e,a]]]}),a(O,function(t){n0(t,5);var e=yr(v,t),n=MZ(0,t);if(\"number\"==typeof n)if(10===n)var a=wr(X,t,[0,e,0]),u=1;else if(80===n)var i=yr(r[8],t),a=[0,EK(e[1],i[1]),[22,[0,e,i]]],u=1;else u=0;else u=0;if(!u)a=e;return n0(t,6),a}),a(U,function(t){var r=XZ(0,t);n0(t,7);for(o=0;;){var e=MZ(0,t);if(\"number\"==typeof e){if(14<=e)i=rv===e?1:0;else if(8<=e)switch(e-8|0){case 0:i=1;break;case 2:n0(t,10);o=[0,0,o];continue;case 5:var n=XZ(0,t);n0(t,13);var a=yr(v,t),u=[1,[0,EK(n,a[1]),[0,a]]];8!==MZ(0,t)&&n0(t,10);o=[0,[0,u],o];continue;default:i=0;}else var i=0;if(i){var f=Dr(o),c=XZ(0,t);return n0(t,8),[0,EK(r,c),[0,f]]}}var s=[0,yr(v,t)];8!==MZ(0,t)&&n0(t,10);var o=[0,[0,s],o];}}),a(M,function(t){t0(t,5);var r=XZ(0,t),e=MZ(0,t);if(\"number\"!=typeof e&&3===e[0]){var n=e[1],a=n[3],u=n[2],i=FZ(0,t);ZZ(t),r0(t);var f=ue(wt(a));$r(function(t){var r=t-103|0;if(!(18<r>>>0))switch(r){case 0:case 2:case 6:case 14:case 18:return ce(f,t)}return 0},a);var c=ie(f);return sr(c,a)&&WZ(t,[3,a]),[0,r,[13,[0,[3,[0,u,c]],i]]]}throw[0,im,pz]}),a(F,function(n){var a=CZ(o,n),u=XZ(0,a),i=12!==MZ(bz,a)?1:0,f=i?yr(e[1],a):i,c=yr(r[2],a);if(YZ(0,a))if(0===c)var s=wr(t[13],kz,a),v=s[1],l=[0,[0,[0,v,[3,[0,[0,v,s[2]],0,0]]],0],0],b=0,k=0,p=1;else p=0;else p=0;if(!p)var h=yr(e[4],a),d=EZ(1,a),m=yr(r[11],d),l=h,b=m[1],k=m[2];var y=l[1];if(l[2])g=0;else if(y)var w=a,g=1;else g=0;if(!g)w=RZ(a);var T=jZ(w);(T?12===MZ(0,w)?1:0:T)&&WZ(w,45),n0(w,12);var _=RZ(w),S=e[8],A=l0(function(t){return gr(S,t,f,0)},_),E=A[2],x=E[1],I=E[2],C=A[1],N=yr(e[6],l);_r(e[7],_,I,N,0,l);var L=0===x[0]?0:1;return[0,EK(u,C),[1,[0,0,l,x,f,0,k,L,b,c]]]}),a(X,function(t,r){var e=MZ(0,t);if(\"number\"==typeof e&&10===e)return n0(t,10),wr(X,t,[0,yr(v,t),r]);var n=Or(r)[1],a=Dr(r);return[0,EK(Or(a)[1],n),[19,[0,a]]]}),a(B,function(r){var e=MZ(0,r),n=FZ(0,r),a=XZ(0,r);if(\"number\"==typeof e&&(60<=e?64<=e?0:1:0===e?1:0))return[0,wr(t[13],0,r),0];if(\"number\"==typeof e){if(65<=e)if(ol===e)i=1;else if(113<=e)i=1;else var u=0,i=0;else if(60<=e)if(64<=e)i=1;else var u=0,i=0;else if(15<=e)i=1;else var u=0,i=0;if(i)var f=[0,[0,a,zZ([0,e,n])]],u=1;}else u=0;if(!u){VZ(r);f=0;}return ZZ(r),[0,[0,a,n],f]}),[0,U,v,h,B,k,T,C,X]}}}(h0),d0),m0),w0=yr(yr(yr(function(t){return function(r){return function(e){return function(n){function u(t){if(t[24][3])for(e=0;;){var r=MZ(0,t);if(\"number\"!=typeof r||14!==r)return Dr(e);ZZ(t);var e=[0,yr(n[6],t),e];}return 0}function i(r){var e=MZ(0,r);if(\"number\"==typeof e){if(7===e){var a=XZ(0,r);n0(r,7);var u=AZ(0,r),i=yr(t[9],u),f=XZ(0,r);return n0(r,8),[0,EK(a,f),[2,i]]}}else switch(e[0]){case 0:var c=e[1],s=FZ(0,r),o=XZ(0,r);return[0,o,[0,[0,o,[0,[2,wr(n[7],r,c)],s]]]];case 1:var v=e[1],l=v[4],b=v[3],k=v[2],p=v[1];return l&&KZ(r,32),n0(r,[1,[0,p,k,b,l]]),[0,p,[0,[0,p,[0,[0,k],b]]]]}var h=yr(n[4],r)[1];return[0,h[1],[1,h]]}function f(t,n){var a=yr(e[2],t),u=i(t),f=u[1],c=u[2],s=XZ(0,t),o=yr(e[4],t);if(0===n){var v=o[1];if(o[2]){mZ(t,[0,f,63]);}else{if(v)if(v[2])l=1;else l=0;else var l=1;if(l){mZ(t,[0,f,63]);}}}else(o[1]?0:o[2]?0:1)||mZ(t,[0,f,62]);var b=yr(r[9],t),k=gr(e[5],t,0,a),p=k[2],h=k[3],d=yr(e[6],o);_r(e[7],t,h,d,0,o);var m=0===p[0]?[0,p[1][1],0]:[0,p[1][1],1],y=m[2];return[0,c,[0,EK(s,m[1]),[0,0,o,p,0,a,0,y,b,0]]]}function c(t){var r=XZ(0,t);n0(t,1);var e=wr(h,t,0),n=XZ(0,t);return n0(t,2),[0,EK(r,n),[0,e]]}function s(t,r){return r?mZ(t,[0,r[1][1],5]):0}function o(n,a,u,i,f,c,o,v){for(;;){var l=MZ(0,n);if(\"number\"==typeof l){var b=l-78|0;if(2<b>>>0)k=ul===b?0:1;else{if(1===b){VZ(n),ZZ(n);continue}var k=0;}if(!k&&!f&&!c){var p=l0(function(e){var n=yr(r[9],e),a=e[24];if(78===MZ(0,e)){if(o&&a[2]?1:0)u=0;else{if(o)i=1;else if(a[1])var u=0,i=0;else i=1;if(i)var f=0,u=1;}if(!u){n0(e,78);f=[0,yr(t[7],e)];}}else f=0;return a0(e,9)||((7===MZ(0,e)?1:0)||(5===MZ(0,e)?1:0))&&VZ(e),[0,n,f]},n),h=p[2],d=h[2],m=h[1];return[1,[0,EK(a,p[1]),[0,i,d,m,o,v]]]}}s(n,v);var y=XZ(0,n),w=yr(r[2],n),g=yr(e[4],n),T=yr(r[9],n),_=gr(e[5],n,f,c),S=_[2],A=_[3],E=yr(e[6],g);_r(e[7],n,A,E,0,g);var x=0===S[0]?[0,S[1][1],0]:[0,S[1][1],1],I=x[1],C=x[2],N=[0,EK(y,I),[0,0,g,S,f,c,0,C,T,w]];if(0===o){switch(i[0]){case 0:var L=i[1][2][1];if(\"number\"==typeof L)O=1;else if(0===L[0])if(sr(L[1],AV))var R=0,P=0,O=0;else var P=1,O=0;else O=1;if(O)var R=0,P=0;break;case 1:if(sr(i[1][2],EV))var R=0,P=0;else P=1;break;default:var R=0,P=0;}if(P)var U=0,R=1;}else R=0;if(!R)U=1;return[0,[0,EK(a,I),[0,U,i,N,o,u]]]}}function v(e,n){var a=gZ(1,e),i=XZ(0,a),f=Rr(n,u(a));n0(a,40);var c=_Z(1,a),s=a[7],o=YZ(0,c);if(0===s)l=0;else if(0===o)var v=0,l=1;else l=0;if(!l)v=[0,wr(t[13],0,c)];var b=yr(r[3],a),k=yr(d,a),p=k[1],h=k[4],m=k[3],y=k[2];return[0,EK(i,p[1]),[2,[0,v,p,y,b,m,h,f]]]}var l=function t(r){return t.fun(r)},b=function t(r,e){return t.fun(r,e)},k=function t(r,e){return t.fun(r,e)},p=function t(r,e,n,a,u){return t.fun(r,e,n,a,u)},h=function t(r,e){return t.fun(r,e)};a(l,function(r){var n=XZ(0,r);if(13===MZ(0,r)){n0(r,13);var a=yr(t[9],r);return[1,[0,EK(n,a[1]),[0,a]]]}var u=pm?pm[1]:0,f=YZ([0,u],r);if(f)var c=f,s=0;else{var o=MZ([0,u],r);if(\"number\"==typeof o)v=1;else if(1<o[0])v=1;else var c=1,s=0,v=0;if(v)var l=0,s=1;}if(!s)l=c;var h=l?yr(e[1],r):l,d=yr(e[2],r),m=i(r);if(0===h)if(0===d){var y=m[2];if(1===y[0]){var w=y[1][2];if(sr(w,PV))if(sr(w,OV))var g=0,T=0;else{var _=MZ(0,r);if(\"number\"==typeof _){var S=_+Ha|0;if(12<S>>>0)if(ul<=S)var A=0,E=0;else switch(S+80|0){case 2:case 5:case 10:E=1;break;default:var A=0,E=0;}else if(10<(S-1|0)>>>0)E=1;else var A=0,E=0;if(E)var x=_r(p,r,n,y,0,0),A=1;}else A=0;if(!A)x=wr(k,r,n);var I=x,T=1;}else{var C=MZ(0,r);if(\"number\"==typeof C){var N=C+Ha|0;if(12<N>>>0)if(ul<=N)var L=0,R=0;else switch(N+80|0){case 2:case 5:case 10:R=1;break;default:var L=0,R=0;}else if(10<(N-1|0)>>>0)R=1;else var L=0,R=0;if(R)var P=_r(p,r,n,y,0,0),L=1;}else L=0;if(!L)P=wr(b,r,n);var I=P,T=1;}if(T)var O=I,g=1;}else g=0;}else g=0;else g=0;if(!g)O=_r(p,r,n,m[2],h,d);return[0,O]}),a(b,function(t,r){var e=f(t,1),n=e[2],a=n[1],u=[0,e[1],[1,[0,a,n[2]]],0,0];return[0,EK(r,a),u]}),a(k,function(t,r){var e=f(t,0),n=e[2],a=n[1],u=[0,e[1],[2,[0,a,n[2]]],0,0];return[0,EK(r,a),u]}),a(p,function(n,a,u,i,f){var c=l0(function(n){var a=MZ(0,n);if(\"number\"==typeof a){if(92===a)v=1;else if(11<=a)v=0;else switch(a){case 5:v=1;break;case 2:case 10:switch(u[0]){case 0:var c=u[1],s=[0,c[1],[13,c[2]]];break;case 1:var o=u[1],s=[0,o[1],[10,o]];break;default:s=u[1];}return[0,s,1,0];default:var v=0;}if(v){var l=XZ(0,n),b=yr(r[2],n),k=yr(e[4],n),p=yr(r[9],n),h=gr(e[5],n,i,f),d=h[2],m=h[3],y=yr(e[6],k);_r(e[7],n,m,y,0,k);var w=0===d[0]?[0,d[1][1],0]:[0,d[1][1],1],g=w[2];return[0,[0,EK(l,w[1]),[8,[0,0,k,d,i,f,0,g,p,b]]],0,1]}}return n0(n,80),[0,yr(t[9],n),0,0]},n),s=c[2],o=[0,u,[0,s[1]],s[3],s[2]];return[0,EK(a,c[1]),o]}),a(h,function(t,r){var e=MZ(0,t);if(\"number\"==typeof e&&(2===e?1:rv===e?1:0))return Dr(r);var n=yr(l,t);return 2!==MZ(0,t)&&n0(t,10),wr(h,t,[0,n,r])});var d=function t(r){return t.fun(r)},m=function t(r,e){return t.fun(r,e)},y=function t(r){return t.fun(r)},w=function t(r){return t.fun(r)};return a(d,function(t){if(41===MZ(0,t)){n0(t,41);var e=[0,yr(n[6],[0,t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8],t[9],t[10],t[11],t[12],t[13],t[14],t[15],0,t[17],t[18],t[19],t[20],t[21],t[22],t[23],t[24],t[25]])],a=yr(r[4],t);}else var e=0,a=0;if(52===MZ(0,t)){1-dZ(t)&&WZ(t,11),n0(t,52);u=wr(m,t,0);}else var u=0;return[0,yr(y,t),e,a,u]}),a(m,function(e,n){var a=wr(t[13],0,e),u=yr(r[4],e),i=[0,[0,u?EK(a[1],u[1][1]):a[1],[0,a,u]],n],f=MZ(0,e);return\"number\"==typeof f&&10===f?(n0(e,10),wr(m,e,i)):Dr(i)}),a(y,function(t){var r=XZ(0,t);n0(t,1);for(i=0;;){var e=MZ(0,t);if(\"number\"==typeof e){var n=e-3|0;if(tv<n>>>0){if(!(106<(n+1|0)>>>0)){var a=Dr(i),u=XZ(0,t);return n0(t,2),[0,EK(r,u),[0,a]]}}else if(6===n){n0(t,9);continue}}var i=[0,yr(w,t),i];}}),a(w,function(t){var r=XZ(0,t),n=u(t),a=5!==MZ(xV,t)?1:0;if(a)var c=92!==MZ(IV,t)?1:0,v=c?a0(t,42):c;else v=a;var l=5!==MZ(CV,t)?1:0;if(l)var b=80!==MZ(NV,t)?1:0,k=b?yr(e[1],t):b;else k=l;var p=yr(e[2],t),h=gr(e[3],t,k,p);if(0===p)if(h)var d=yr(e[2],t),m=1;else m=0;else m=0;if(!m)d=p;var y=i(t);if(0===k&&0===d){var w=y[2];if(1===w[0]){var g=w[1][2];if(!sr(g,LV)){var T=MZ(0,t);if(\"number\"==typeof T&&(78<=T?81<=T?92===T?1:0:79===T?0:1:5===T?1:9===T?1:0))return o(t,r,n,w,k,d,v,h);s(t,h);var _=f(t,1),S=_[2],A=[0,2,_[1],S,v,n];return[0,[0,EK(r,S[1]),A]]}if(!sr(g,RV)){var E=MZ(0,t);if(\"number\"==typeof E&&(78<=E?81<=E?92===E?1:0:79===E?0:1:5===E?1:9===E?1:0))return o(t,r,n,w,k,d,v,h);s(t,h);var x=f(t,0),I=x[2],C=[0,3,x[1],I,v,n];return[0,[0,EK(r,I[1]),C]]}}}return o(t,r,n,y[2],k,d,v,h)}),[0,i,c,v,function(e){var n=XZ(0,e),a=u(e);n0(e,40);var i=MZ(0,e);if(\"number\"==typeof i){var f=i-1|0;if(40<f>>>0)if(91===f)s=1;else var c=0,s=0;else if(38<(f-1|0)>>>0)s=1;else var c=0,s=0;if(s)var o=0,v=0,c=1;}else c=0;if(!c)var l=[0,wr(t[13],0,e)],o=l,v=yr(r[3],e);var b=yr(d,e),k=b[1],p=b[4],h=b[3],m=b[2];return[0,EK(n,k[1]),[5,[0,o,k,m,v,h,p,a]]]},u]}}}}(h0),d0),m0),y0),g0=yr(yr(yr(function(t){return function(r){return function(e){return function(n){function u(t,r){for(n=r;;){var e=n[2];switch(e[0]){case 0:return Xr(function(t,r){return u(t,0===r[0]?r[1][2][2]:r[1][2][1])},t,e[1][1]);case 1:return Xr(function(t,r){if(r){var e=r[1];return u(t,0===e[0]?e[1]:e[1][2][1])}return t},t,e[1][1]);case 2:var n=e[1][1];continue;case 3:return[0,e[1][1],t];default:return xr(A$)}}}function i(r,e,n){if(n){var a=n[1];if(0===a[0]){var u=a[1],i=u[2][1],f=u[1];return!i||i[1][2][2]||i[2]?mZ(r,[0,f,e]):0}var c=a[1],s=c[1],o=1-yr(t[24],[0,s,c[2]]);return o?mZ(r,[0,s,e]):o}return WZ(r,e)}function f(t,e){for(u=e;;){var n=[0,yr(r[5],t),u],a=MZ(0,t);if(\"number\"!=typeof a||10!==a)return Dr(n);n0(t,10);var u=n;}}function c(t){u0(t,YV);var r=MZ(0,t);if(\"number\"!=typeof r&&1===r[0]){var e=r[1],n=e[4],a=e[3],u=e[2],i=e[1];return n&&KZ(t,32),n0(t,[1,[0,i,u,a,n]]),[0,i,[0,[0,u],a]]}var f=FZ(0,t),c=[0,XZ(0,t),[0,[0,f],f]];return VZ(t),c}function s(r,e){var n=XZ(0,r),a=MZ(0,r);if(\"number\"==typeof a&&Tb===a){n0(r,Tb),u0(r,qV);var u=wr(t[13],0,r);return[0,[2,[0,EK(n,u[1]),u]],0]}n0(r,1);for(var i=0,f=0;;){var c=i?i[1]:1,s=MZ(0,r);if(\"number\"==typeof s&&(2===s?1:rv===s?1:0)){var o=Dr(f);return n0(r,2),o}1-c&&mZ(r,[0,XZ(0,r),66]);var v=yr(t[14],r),l=v[2],b=v[1],k=b[2];if(fr(k,UV))var p=1,h=DV;else if(fr(k,MV))var p=1,h=FV;else var p=0,h=0;if(fr(FZ(0,r),XV)){var d=wr(t[13],0,r);if(p)if(YZ(0,r))y=0;else{e&&mZ(r,[0,b[1],65]);var m=[0,[0,h,0,d]],y=1;}else y=0;if(!y)m=[0,[0,0,[0,wr(t[13],0,r)],b]];_=m;}else{if(p)if(YZ(0,r)){e&&mZ(r,[0,b[1],65]);var w=yr(t[14],r),g=w[2],T=w[1];g&&mZ(r,g[1]);var _=[0,[0,h,fr(FZ(0,r),BV)?(u0(r,jV),[0,wr(t[13],0,r)]):0,T]],S=1;}else S=0;else S=0;if(!S){l&&mZ(r,l[1]);_=[0,[0,0,0,b]];}}var i=[0,a0(r,10)],f=[0,_,f];}}var o=function t(r){return t.fun(r)},v=function t(r){return t.fun(r)},l=function t(r){return t.fun(r)},b=function t(r){return t.fun(r)},k=function t(r){return t.fun(r)},p=function t(r){return t.fun(r)},h=function t(r){return t.fun(r)},d=function t(r){return t.fun(r)},m=function t(r){return t.fun(r)},y=function t(r){return t.fun(r)},w=function t(r){return t.fun(r)},g=function t(r){return t.fun(r)},T=function t(r){return t.fun(r)},_=function t(r){return t.fun(r)},S=function t(r){return t.fun(r)},A=function t(r){return t.fun(r)},E=function t(r){return t.fun(r)},x=function t(r){return t.fun(r)},I=function t(r){return t.fun(r)},C=function t(r){return t.fun(r)},N=function t(r){return t.fun(r)},L=function t(r){return t.fun(r)},R=function t(r,e){return t.fun(r,e)},P=function t(r,e){return t.fun(r,e)},O=function t(r,e){return t.fun(r,e)},U=function t(r,e){return t.fun(r,e)},D=function t(r,e){return t.fun(r,e)},M=function t(r,e){return t.fun(r,e)},F=function t(r,e){return t.fun(r,e)},X=function t(r,e){return t.fun(r,e)},B=function t(r,e){return t.fun(r,e)},j=function t(r){return t.fun(r)},G=function t(r){return t.fun(r)},q=function t(r,e,n){return t.fun(r,e,n)},Y=function t(r,e){return t.fun(r,e)},J=function t(r,e){return t.fun(r,e)},H=function t(r){return t.fun(r)};return a(o,function(t){var r=XZ(0,t);return n0(t,9),[0,r,1]}),a(v,function(r){var e=XZ(0,r);if(n0(r,32),9===MZ(0,r))i=0;else if(GZ(r))i=0;else{var n=wr(t[13],0,r),a=n[2];1-wr(k0[3],a,r[3])&&WZ(r,[4,a]);var u=[0,n],i=1;}if(!i)u=0;var f=qZ(0,r),c=f?f[1]:u?u[1][1]:e,s=EK(e,c),o=0===u?1:0;if(o)var v=r[8],l=v||r[9],b=1-l;else b=o;return b&&mZ(r,[0,s,23]),e0(r),[0,s,[1,[0,u]]]}),a(l,function(r){var e=XZ(0,r);if(n0(r,35),9===MZ(0,r))i=0;else if(GZ(r))i=0;else{var n=wr(t[13],0,r),a=n[2];1-wr(k0[3],a,r[3])&&WZ(r,[4,a]);var u=[0,n],i=1;}if(!i)u=0;var f=qZ(0,r),c=f?f[1]:u?u[1][1]:e,s=EK(e,c);return 1-r[8]&&mZ(r,[0,s,22]),e0(r),[0,s,[3,[0,u]]]}),a(b,function(t){var r=XZ(0,t);n0(t,59);var e=qZ(0,t),n=e?e[1]:r;return e0(t),[0,EK(r,n),0]}),a(k,function(r){var e=XZ(0,r);n0(r,37);var n=SZ(1,r),a=yr(t[2],n);n0(r,25),n0(r,5);var u=yr(t[7],r),i=XZ(0,r);n0(r,6);var f=qZ(0,r),c=f?f[1]:i;return 9===MZ(0,r)&&e0(r),[0,EK(e,c),[10,[0,a,u]]]}),a(p,function(r){var n=XZ(0,r);n0(r,39);var a=r[17],u=a?a0(r,64):a;n0(r,5);var f=MZ(0,r);if(\"number\"==typeof f)if(24<=f)if(29<=f)h=0;else{switch(f+-24|0){case 0:var c=AZ(1,r),s=yr(e[13],c),o=[0,[0,[0,s[1]]],s[2]],v=1;break;case 3:var l=AZ(1,r),b=yr(e[12],l),o=[0,[0,[0,b[1]]],b[2]],v=1;break;case 4:var k=AZ(1,r),p=yr(e[11],k),o=[0,[0,[0,p[1]]],p[2]],v=1;break;default:var h=0,v=0;}if(v)var d=o[1],m=o[2],h=1;}else if(9===f)var d=0,m=0,h=1;else h=0;else h=0;if(!h)var y=_Z(1,AZ(1,r)),d=[0,[1,yr(t[7],y)]],m=0;var w=MZ(0,r);if(62!==w&&!u){if(\"number\"==typeof w&&17===w){if(i(r,17,d),d){var g=d[1],T=0===g[0]?[0,g[1]]:[1,g[1]];n0(r,17);var _=yr(t[7],r);n0(r,6);var S=SZ(1,r),A=yr(t[2],S);return[0,EK(n,A[1]),[15,[0,T,_,A,0]]]}throw[0,im,S$]}Fr(function(t){return mZ(r,t)},m),n0(r,9);var E=MZ(0,r);if(\"number\"==typeof E)if(9===E)var x=0,I=1;else I=0;else I=0;if(!I)x=[0,yr(t[7],r)];n0(r,9);var C=MZ(0,r);if(\"number\"==typeof C)if(6===C)var N=0,L=1;else L=0;else L=0;if(!L)N=[0,yr(t[7],r)];n0(r,6);var R=SZ(1,r),P=yr(t[2],R);return[0,EK(n,P[1]),[14,[0,d,x,N,P]]]}if(i(r,18,d),d){var O=d[1],U=0===O[0]?[0,O[1]]:[1,O[1]];n0(r,62);var D=yr(t[9],r);n0(r,6);var M=SZ(1,r),F=yr(t[2],M);return[0,EK(n,F[1]),[16,[0,U,D,F,u]]]}throw[0,im,_$]}),a(h,function(r){var n=XZ(0,r);n0(r,16),n0(r,5);var a=yr(t[7],r);n0(r,6),MZ(0,r);var u=JZ(0,r)?(KZ(r,46),yr(e[14],r)):yr(t[2],r),i=43===MZ(0,r)?(n0(r,43),[0,yr(t[2],r)]):0,f=i?i[1][1]:u[1];return[0,EK(n,f),[18,[0,a,u,i]]]}),a(d,function(r){1-r[10]&&WZ(r,24);var e=XZ(0,r);if(n0(r,19),9===MZ(0,r))a=0;else if(GZ(r))a=0;else var n=[0,yr(t[7],r)],a=1;if(!a)n=0;var u=qZ(0,r),i=u?u[1]:n?n[1][1]:e;return e0(r),[0,EK(e,i),[22,[0,n]]]}),a(m,function(r){var e=XZ(0,r);n0(r,20),n0(r,5);var n=yr(t[7],r);n0(r,6),n0(r,1);for(y=T$;;){var a=y[2],u=y[1],i=MZ(0,r);if(\"number\"==typeof i&&(2===i?1:rv===i?1:0)){var f=Dr(a),c=XZ(0,r);return n0(r,2),[0,EK(e,c),[23,[0,n,f]]]}var s=XZ(0,r),o=MZ(0,r);if(\"number\"==typeof o)if(36===o){u&&WZ(r,20),n0(r,36);var v=0,l=1;}else l=0;else l=0;if(!l){n0(r,33);v=[0,yr(t[7],r)];}var b=u||(0===v?1:0),k=XZ(0,r);n0(r,80);var p=function(t){if(\"number\"==typeof t){var r=t-2|0;if(31<r>>>0?34===r?1:0:29<(r-1|0)>>>0?1:0)return 1}return 0},h=wr(t[4],p,[0,r[1],r[2],r[3],r[4],r[5],r[6],r[7],r[8],1,r[10],r[11],r[12],r[13],r[14],r[15],r[16],r[17],r[18],r[19],r[20],r[21],r[22],r[23],r[24],r[25]]),d=Dr(h),m=d?d[1][1]:k,y=[0,b,[0,[0,EK(s,m),[0,v,h]],a]];}}),a(y,function(r){var e=XZ(0,r);n0(r,22),jZ(r)&&mZ(r,[0,e,12]);var n=yr(t[7],r),a=qZ(0,r),u=a?a[1]:n[1];return e0(r),[0,EK(e,u),[24,[0,n]]]}),a(w,function(r){var e=XZ(0,r);n0(r,23);var n=yr(t[16],r),a=MZ(0,r);if(\"number\"==typeof a)if(34===a){var u=XZ(0,r);n0(r,34),n0(r,5);var i=wr(t[13],g$,r),f=[0,i[1],[3,[0,i,0,0]]];n0(r,6);var c=yr(t[16],r),s=[0,[0,EK(u,c[1]),[0,f,c]]],o=1;}else o=0;else o=0;if(!o)s=0;var v=MZ(0,r);if(\"number\"==typeof v)if(38===v){n0(r,38);var l=[0,yr(t[16],r)],b=1;}else b=0;else b=0;if(!b)l=0;var k=l?l[1][1]:s?s[1][1]:(mZ(r,[0,n[1],21]),n[1]);return[0,EK(e,k),[25,[0,n,s,l]]]}),a(g,function(t){var r=yr(e[9],t),n=r[1],a=n[1],u=r[2],i=n[2],f=qZ(0,t),c=f?f[1]:a;return e0(t),Fr(function(r){return mZ(t,r)},u),[0,EK(a,c),i]}),a(T,function(t){var r=XZ(0,t);n0(t,28);var n=_Z(1,t),a=yr(e[10],n),u=a[3],i=a[1],f=[27,[0,a[2],1]],c=qZ(0,t),s=c?c[1]:i;return e0(t),Fr(function(r){return mZ(t,r)},u),[0,EK(r,s),f]}),a(_,function(r){var e=XZ(0,r);n0(r,25),n0(r,5);var n=yr(t[7],r);n0(r,6);var a=SZ(1,r),u=yr(t[2],a);return[0,EK(e,u[1]),[28,[0,n,u]]]}),a(S,function(r){var e=XZ(0,r);n0(r,26),n0(r,5);var n=yr(t[7],r);n0(r,6);var a=yr(t[2],r),u=EK(e,a[1]);return QZ(r,[0,u,26]),[0,u,[29,[0,n,a]]]}),a(A,function(r){var e=yr(t[16],r);return[0,e[1],[0,e[2]]]}),a(E,function(r){var e=yr(t[7],r),n=MZ(0,r),a=e[2],u=e[1];if(\"number\"!=typeof a&&10===a[0]&&\"number\"==typeof n&&80===n){var i=a[1],f=i[2];n0(r,80),wr(k0[3],f,r[3])&&mZ(r,[0,u,[5,w$,f]]);var c=r[25],s=r[24],o=r[23],v=r[22],l=r[21],b=r[20],k=r[19],p=r[18],h=r[17],d=r[16],m=r[15],y=r[14],w=r[13],g=r[12],T=r[11],_=r[10],S=r[9],A=r[8],E=r[7],x=r[6],I=r[5],C=r[4],N=wr(lZ[4],f,r[3]),L=yr(t[2],[0,r[1],r[2],N,C,I,x,E,A,S,_,T,g,w,y,m,d,h,p,k,b,l,v,o,s,c]);return[0,EK(u,L[1]),[21,[0,i,L]]]}var R=qZ(0,r),P=R?R[1]:e[1];return e0(r),[0,EK(e[1],P),[13,[0,e,0]]]}),a(x,function(r){var e=l0(t[7],r),n=e[2],a=e[1],u=qZ(0,r),i=u?EK(a,u[1]):a;if(e0(r),r[18]){var f=n[2];if(\"number\"==typeof f)l=0;else if(13===f[0]){var c=f[1],s=c[1];if(\"number\"==typeof s)b=1;else if(0===s[0])var o=c[2],v=[0,Vr(o,1,wt(o)-2|0)],l=1,b=0;else b=1;if(b)l=0;}else l=0;if(!l)v=0;k=v;}else var k=0;return[0,i,[13,[0,n,k]]]}),a(I,function(e){var n=XZ(0,e);1-dZ(e)&&WZ(e,6),n0(e,61),t0(e,1);var a=wr(t[13],0,e),u=yr(r[3],e);n0(e,78);var i=yr(r[1],e),f=qZ(0,e),c=f?f[1]:i[1];return e0(e),r0(e),[0,EK(n,c),[0,a,u,i]]}),a(C,function(r){if(YZ(y$,r)){var e=yr(I,r);return[0,e[1],[26,e[2]]]}return yr(t[2],r)}),a(N,function(e){var n=XZ(0,e);1-dZ(e)&&WZ(e,11),n0(e,53);var a=wr(t[13],0,e),u=yr(r[3],e);if(41===MZ(0,e)){n0(e,41);for(c=0;;){var i=[0,yr(r[5],e),c],f=MZ(0,e);if(\"number\"!=typeof f||10!==f){s=Dr(i);break}n0(e,10);var c=i;}}else var s=0;var o=wr(r[6],1,e);return[0,EK(n,o[1]),[0,a,u,o,s,0]]}),a(L,function(t){if(YZ(m$,t)){var r=yr(N,t);return[0,r[1],[20,r[2]]]}return yr(x,t)}),a(R,function(e,n){var a=gZ(1,e);n0(a,40);var u=wr(t[13],0,a),i=yr(r[3],a),c=41===MZ(0,a)?(n0(a,41),f(a,0)):0,s=fr(FZ(0,a),h$)?(u0(a,d$),f(a,0)):0,o=wr(r[6],1,a);return[0,EK(n,o[1]),[0,u,i,o,c,s]]}),a(P,function(t,r){var e=wr(R,t,r);return[0,e[1],[4,e[2]]]}),a(O,function(e,n){n0(e,15);var a=wr(t[13],0,e),u=XZ(0,e),i=yr(r[2],e),f=yr(r[7],e);n0(e,80);var c=yr(r[1],e),s=c[1],o=[0,EK(u,s),[1,[0,f,c,i]]],v=[0,o[1],o],l=a[2],b=[0,EK(a[1],s),l],k=yr(r[10],e),p=qZ(0,e),h=p?p[1]:k?k[1][1]:s;return e0(e),[0,EK(n,h),[0,b,v,k]]}),a(U,function(t,r){var e=wr(O,t,r);return[0,e[1],[6,e[2]]]}),a(D,function(r,e){n0(r,24);var n=gr(t[15],r,p$,28),a=n[2],u=a[2],i=a[1],f=n[1],c=qZ(0,r),s=c?c[1]:f,o=EK(e,s);return e0(r),[0,o,[0,i,u]]}),a(M,function(t,r){var e=wr(D,t,r);return[0,e[1],[9,e[2]]]}),a(F,function(r,e){var n=MZ(0,r);if(\"number\"==typeof n)o=0;else if(1===n[0]){var a=n[1],u=a[4],i=a[3],f=a[2],c=a[1];u&&KZ(r,32),n0(r,[1,[0,c,f,i,u]]);var s=[1,[0,c,[0,[0,f],i]]],o=1;}else o=0;if(!o)s=[0,wr(t[13],0,r)];var v=l0(function(t){n0(t,1);for(var r=0,e=0;;){var n=MZ(0,t);if(\"number\"==typeof n&&(2===n?1:rv===n?1:0)){var a=[0,r,Dr(e)];return n0(t,2),a}var u=wr(B,k$,t),i=u[2],f=u[1];if(r){if(0===r[1][0]){if(\"number\"==typeof i)o=1;else switch(i[0]){case 5:var c=i[1][2];(c&&3<c[1][0]?1:0)||WZ(t,61);var s=1,o=0;break;case 8:WZ(t,60);var s=1,o=0;break;default:o=1;}if(o)var v=0,s=0;}else{if(\"number\"==typeof i)l=1;else if(8===i[0]){WZ(t,61);var s=1,l=0;}else l=1;if(l)var v=0,s=0;}if(s)var b=r,v=1;}else if(\"number\"==typeof i)v=0;else switch(i[0]){case 5:var k=i[1][2];if(k)if(3<k[1][0])var p=r,h=1;else h=0;else h=0;if(!h)p=[0,[1,f]];var b=p,v=1;break;case 8:var b=[0,[0,f]],v=1;break;default:v=0;}if(!v)b=r;var r=b,e=[0,u,e];}},r),l=v[2],b=l[1],k=v[1],p=[0,k,[0,l[2]]],h=EK(e,k);return[0,h,[7,[0,s,p,b?b[1]:[0,h]]]]}),a(X,function(t,e){n0(t,11),u0(t,b$);var n=yr(r[8],t),a=qZ(0,t),u=a?a[1]:n[1];return e0(t),[0,EK(e,u),[8,n]]}),a(B,function(r,e){var n=r?r[1]:0;1-dZ(e)&&WZ(e,8);var a=XZ(0,e),u=MZ(s$,e);if(\"number\"==typeof u)if(24<=u){if(40<=u){if(!(64<=u))switch(u-40|0){case 0:return n0(e,60),wr(P,e,a);case 6:if(50===MZ(0,e))return yr(H,e);break;case 9:if(n)return wr(J,[0,n],e);break;case 13:return n0(e,60),yr(L,e);case 21:var i=MZ(0,e);return\"number\"==typeof i&&50===i&&n?yr(H,e):(n0(e,60),yr(C,e));case 23:return n0(e,60),WZ(e,49),n0(e,63),wr(U,e,a)}}else if(!(25<=u))return n0(e,60),wr(M,e,a)}else{if(15===u)return n0(e,60),wr(U,e,a);if(0===u&&fr(FZ(v$,e),o$))return n0(e,60),u0(e,l$),n||11===MZ(0,e)?wr(X,e,a):wr(F,e,a)}if(n){var f=MZ(0,e);return\"number\"==typeof f&&50===f?(WZ(e,64),yr(t[2],e)):(n0(e,60),wr(M,e,a))}return yr(t[2],e)}),a(j,function(t){u0(t,c$);var r=MZ(0,t);if(\"number\"!=typeof r&&1===r[0]){var e=r[1],n=e[4],a=e[3],u=e[2],i=e[1];return n&&KZ(t,32),n0(t,[1,[0,i,u,a,n]]),[0,i,[0,[0,u],a]]}var f=FZ(0,t),c=[0,XZ(0,t),[0,[0,f],f]];return VZ(t),c}),a(G,function(t){return t[2]}),a(q,function(r,e,n){var a=MZ(0,r);if(\"number\"==typeof a&&(2===a?1:rv===a?1:0)){var u=Dr(n);return[0,Dr(e),u]}var i=yr(t[14],r),f=i[1],c=i[2];if(fr(FZ(0,r),i$)){u0(r,f$);var s=yr(t[14],r)[1],o=yr(G,s);yZ(r,[0,s[1],o]);var v=[0,s],l=0,b=s[1];}else{var k=f[1];yZ(r,[0,k,yr(G,f)]);var v=0,l=c,b=k;}var p=[0,EK(f[1],b),[0,f,v]];10===MZ(0,r)&&n0(r,10);var h=l?[0,l[1],n]:n;return gr(q,r,[0,p,e],h)}),a(Y,function(r,a){var i=xZ(1,gZ(1,r)),f=XZ(0,i);n0(i,49);var c=MZ(0,i);if(\"number\"==typeof c){if(53<=c){if(Tb===c){var s=XZ(0,i);n0(i,Tb);var o=i[24][4],v=fr(FZ(0,i),r$)?(u0(i,e$),o?[0,wr(t[13],0,i)]:(WZ(i,8),0)):0,l=yr(j,i),b=qZ(0,i),k=[0,[1,s,v]],p=b?b[1]:l[1];return e0(i),[0,EK(f,p),[12,[0,0,k,[0,l],1]]]}if(64<=c)X=0;else switch(c+-53|0){case 0:1-dZ(i)&&WZ(i,10);var h=yr(L,i),d=h[2],m=h[1];return(\"number\"==typeof d?0:20===d[0]?(yZ(i,[0,m,yr(G,d[1][1])]),1):0)||xr(Lr($V,VV)),[0,EK(f,h[1]),[12,[0,[0,h],0,0,0]]];case 8:if(1!==MZ(KV,i)){1-dZ(i)&&WZ(i,10);var y=MZ(QV,i);if(\"number\"==typeof y&&Tb===y){n0(i,61);var w=XZ(0,i);n0(i,Tb);var g=yr(j,i),T=qZ(0,i),_=T?T[1]:g[1];return e0(i),[0,EK(f,_),[12,[0,0,[0,[1,w,0]],[0,g],0]]]}var S=yr(C,i),A=S[2],E=S[1];return(\"number\"==typeof A?0:26===A[0]?(yZ(i,[0,E,yr(G,A[1][1])]),1):0)||xr(Lr(t$,ZV)),[0,EK(f,S[1]),[12,[0,[0,S],0,0,0]]]}X=0;break;case 10:X=1;break;default:X=0;}}else{var x=c-14|0;if(26<x>>>0)X=0;else switch(x){case 22:n0(i,36),yZ(i,[0,EK(f,XZ(0,i)),n$]);var I=MZ(0,i);if(\"number\"==typeof I)if(15===I)var N=yr(e[14],i),R=N[1],P=[0,N],O=1;else O=0;else O=0;if(!O)if(HZ(0,i))var U=wr(n[3],i,a),R=U[1],P=[0,U];else{var D=yr(t[9],i),M=qZ(0,i),F=M?M[1]:D[1];e0(i);var R=F,P=[1,D];}return[0,EK(f,R),[11,[0,P,1]]];case 0:case 1:case 10:case 13:case 14:case 26:X=1;break;default:var X=0;}}if(X){var B=wr(t[3],[0,a],i),Y=B[2],J=B[1];if(\"number\"==typeof Y)z=0;else switch(Y[0]){case 2:var H=Y[1][1];if(H)var W=H[1],z=2;else{mZ(i,[0,J,55]);var V=0,z=1;}break;case 17:var $=Y[1][1];if($)var W=$[1],z=2;else{mZ(i,[0,J,56]);var V=0,z=1;}break;case 27:var V=Xr(function(t,r){return Xr(u,t,[0,r[2][1],0])},0,Y[1][1]),z=1;break;default:z=0;}switch(z){case 0:var V=xr(u$),K=0;break;case 1:K=0;break;default:var Q=[0,[0,J,yr(G,W)],0],K=1;}if(!K)Q=V;return Fr(function(t){return yZ(i,t)},Q),[0,EK(f,B[1]),[12,[0,[0,B],0,0,1]]]}}var Z=MZ(0,i);if(\"number\"==typeof Z)if(61===Z){ZZ(i);var tt=0,rt=1;}else rt=0;else rt=0;if(!rt)tt=1;n0(i,1);var et=gr(q,i,0,0),nt=et[2],at=[0,[0,et[1]]],ut=XZ(0,i);n0(i,2);var it=fr(FZ(0,i),a$)?[0,yr(j,i)]:(Fr(function(t){return mZ(i,t)},nt),0),ft=qZ(0,i),ct=ft?ft[1]:it?it[1][1]:ut;return e0(i),[0,EK(f,ct),[12,[0,0,at,it,tt]]]}),a(J,function(e,n){var a=e?e[1]:0;1-dZ(n)&&WZ(n,8);var u=XZ(0,n);n0(n,60);var i=xZ(1,gZ(1,n));n0(i,49);var f=MZ(0,i);if(\"number\"==typeof f)if(54<=f){if(61===f){if(a){var c=yr(I,i),s=c[1],o=c[2];return[0,EK(u,s),[5,[0,0,[0,[4,[0,s,o]]],0,0]]]}}else if(Tb===f){var v=XZ(0,i);n0(i,Tb);var l=i[24][4],b=fr(FZ(0,i),JV)?(u0(i,HV),l?[0,wr(t[13],0,i)]:(WZ(i,8),0)):0,k=yr(j,i),p=qZ(0,i),h=[0,[1,v,b]],d=p?p[1]:k[1];return e0(i),[0,EK(u,d),[5,[0,0,0,h,[0,k]]]]}}else if(41<=f){if(53<=f&&a){var m=yr(N,i),y=m[1],w=m[2];return[0,EK(u,y),[5,[0,0,[0,[5,[0,y,w]]],0,0]]]}}else if(15<=f)switch(f-15|0){case 21:n0(i,36);var g=MZ(0,i);if(\"number\"==typeof g)if(15===g)var T=wr(O,i,u),_=T[1],S=[0,[1,T]],A=1;else if(40===g)var E=wr(R,i,u),_=E[1],S=[0,[2,E]],A=1;else A=0;else A=0;if(!A){var x=yr(r[1],i),C=qZ(0,i),L=C?C[1]:x[1];e0(i);var _=L,S=[0,[3,x]];}return[0,EK(u,_),[5,[0,1,S,0,0]]];case 0:case 9:case 12:case 13:case 25:var P=MZ(0,i);if(\"number\"==typeof P){if(25<=P)if(29<=P)if(40===P)var U=wr(R,i,u),M=U[1],F=[0,[2,U]],X=2;else X=0;else X=27<=P?1:0;else if(15===P)var B=wr(O,i,u),M=B[1],F=[0,[1,B]],X=2;else X=24<=P?1:0;switch(X){case 0:Y=0;break;case 1:\"number\"==typeof P&&(27===P?WZ(i,51):28===P&&WZ(i,50));var G=wr(D,i,u),M=G[1],F=[0,[0,G]],Y=1;break;default:Y=1;}if(Y)return[0,EK(u,M),[5,[0,0,F,0,0]]]}throw[0,im,zV]}var J=MZ(0,i);\"number\"==typeof J&&(53===J?WZ(i,53):61===J&&WZ(i,52));n0(i,1);var H=gr(q,i,0,0),W=H[2],z=[0,[0,H[1]]],V=XZ(0,i);n0(i,2);var $=fr(FZ(0,i),WV)?[0,yr(j,i)]:(Fr(function(t){return mZ(i,t)},W),0),K=qZ(0,i),Q=K?K[1]:$?$[1][1]:V;return e0(i),[0,EK(u,Q),[5,[0,0,0,z,$]]]}),a(H,function(r){var e=gZ(1,r),n=XZ(0,e);n0(e,50);var a=MZ(0,e);if(\"number\"==typeof a)if(46===a){1-dZ(e)&&WZ(e,9),n0(e,46);var u=1,i=0,f=1;}else if(61===a){1-dZ(e)&&WZ(e,9);var u=0,i=[0,wr(t[13],0,e)],f=1;}else f=0;else f=0;if(!f)var u=2,i=0;var o=2!==u?1:0,v=MZ(0,e),l=YZ(0,e);if(\"number\"==typeof v)g=10===v?1:0;else if(1===v[0]){var b=v[1],k=b[4],p=b[3],h=b[2],d=b[1];if(2===u){k&&KZ(e,32),n0(e,[1,[0,d,h,p,k]]);var m=qZ(0,e),y=[0,d,[0,[0,h],p]],w=m?m[1]:d;return e0(e),[0,EK(n,w),[19,[0,u,y,0]]]}g=0;}else var g=0;if(!g&&0===l){var T=s(e,o),_=c(e),S=qZ(0,e),A=S?S[1]:_[1];return e0(e),[0,EK(n,A),[19,[0,u,_,T]]]}var E=MZ(0,e),x=FZ(0,e);if(i)if(\"number\"==typeof E){var I=i[1];if(10===E)N=1;else if(0===E)if(sr(x,GV))var C=0,N=0;else N=1;else var C=0,N=0;if(N)var L=2,R=[1,I],C=1;}else C=0;else C=0;if(!C)var L=u,R=[1,wr(t[13],0,e)];var P=MZ(0,e);if(\"number\"==typeof P)if(10===P){n0(e,10);var O=s(e,o),U=1;}else U=0;else U=0;if(!U)O=0;var D=c(e),M=qZ(0,e),F=M?M[1]:D[1];return e0(e),[0,EK(n,F),[19,[0,L,D,[0,R,O]]]]}),[0,p,h,T,w,_,S,A,v,l,b,B,J,k,o,Y,x,H,L,E,d,m,y,C,g]}}}}(h0),d0),m0),w0),T0=yr(function(t){return function(r){function e(r,e){return[0,e[1],[0,[0,Mr(function(e){if(0===e[0]){var n=e[1],a=n[2],u=a[2],i=a[1],f=a[4],c=n[1];switch(i[0]){case 0:s=[0,i[1]];break;case 1:s=[1,i[1]];break;default:var s=[2,i[1]];}if(0===u[0])b=wr(t[20],r,u[1]);else{var o=u[1],v=o[1],l=o[2];mZ(r,[0,v,2]);var b=[0,v,[4,[0,v,[8,l]]]];}return[0,[0,c,[0,s,b,f]]]}var k=e[1];return[1,[0,k[1],[0,wr(t[20],r,k[2][1])]]]},e[2][1]),0]]]}function n(r,e){return[0,e[1],[1,[0,Mr(function(e){if(e){var n=e[1];if(0===n[0]){var a=n[1];return[0,[0,wr(t[20],r,[0,a[1],a[2]])]]}var u=n[1];return[0,[1,[0,u[1],[0,wr(t[20],r,u[2][1])]]]]}return 0},e[2][1]),0]]]}function a(t,r){var a=r[2],u=r[1];if(\"number\"!=typeof a)switch(a[0]){case 0:return n(t,[0,u,a[1]]);case 2:var i=a[1];if(0===i[1])return[0,u,[2,[0,i[2],i[3]]]];break;case 10:return[0,u,[3,[0,a[1],0,0]]];case 18:return e(t,[0,u,a[1]])}return[0,u,[4,[0,u,a]]]}function u(e){return function(n){var a=XZ(0,n);n0(n,1);for(C=0;;){var u=MZ(0,n);if(\"number\"==typeof u&&(2===u?1:rv===u?1:0)){var i=Dr(C),c=XZ(0,n);if(n0(n,2),80===MZ(0,n))var s=yr(r[8],n),o=s[1],v=[0,s];else var o=c,v=0;return[0,EK(a,o),[0,[0,i,v]]]}var l=XZ(0,n);if(a0(n,13))var b=f(n,e),k=[0,[1,[0,EK(l,b[1]),[0,b]]]];else{var p=yr(t[21],n)[2];switch(p[0]){case 0:h=[0,p[1]];break;case 1:h=[1,p[1]];break;default:var h=[2,p[1]];}var d=MZ(0,n);if(\"number\"==typeof d)if(80===d){n0(n,80);var m=[0,[0,f(n,e),0]],y=1;}else y=0;else y=0;if(!y)if(1===h[0])var w=h[1],m=[0,[0,[0,w[1],[3,[0,w,0,0]]],1]];else{VZ(n);m=0;}if(m){var g=m[1],T=g[1],_=g[2],S=MZ(0,n);if(\"number\"==typeof S)if(78===S){n0(n,78);var A=yr(t[9],n),E=[0,EK(T[1],A[1]),[2,[0,T,A]]],x=1;}else x=0;else x=0;if(!x)E=T;k=[0,[0,[0,EK(l,E[1]),[0,h,E,_]]]];}else k=0;}if(k){var I=k[1];2!==MZ(0,n)&&n0(n,10);var C=[0,I,C];}else;}}}function i(e){return function(n){var a=XZ(0,n);n0(n,7);for(s=0;;){var u=MZ(0,n);if(\"number\"==typeof u){if(14<=u)o=rv===u?1:0;else if(8<=u)switch(u-8|0){case 0:o=1;break;case 2:n0(n,10);s=[0,0,s];continue;case 5:var i=XZ(0,n);n0(n,13);var c=f(n,e),s=[0,[0,[1,[0,EK(i,c[1]),[0,c]]]],s];continue;default:o=0;}else var o=0;if(o){var v=Dr(s),l=XZ(0,n);if(n0(n,8),80===MZ(0,n))var b=yr(r[8],n),k=b[1],p=[0,b];else var k=l,p=0;return[0,EK(a,k),[1,[0,v,p]]]}}var h=f(n,e),d=MZ(0,n);if(\"number\"==typeof d)if(78===d){n0(n,78);var m=yr(t[9],n),y=[0,EK(h[1],m[1]),[2,[0,h,m]]],w=1;}else w=0;else w=0;if(!w)y=h;var g=[0,y];8!==MZ(0,n)&&n0(n,10);s=[0,[0,g],s];}}}function f(r,e){var n=MZ(0,r);if(\"number\"==typeof n){if(1===n)return yr(u(e),r);if(7===n)return yr(i(e),r)}var a=gr(t[15],r,0,e);return[0,a[1],[3,a[2]]]}return[0,e,n,a,u,i,f]}}(h0),d0),_0=function t(r){return t.fun(r)},S0=function t(r,e,n){return t.fun(r,e,n)},A0=function t(r){return t.fun(r)},E0=function t(r,e){return t.fun(r,e)},x0=function t(r,e){return t.fun(r,e)},I0=function t(r,e){return t.fun(r,e)},C0=function t(r,e){return t.fun(r,e)},N0=function t(r,e){return t.fun(r,e)},L0=function t(r){return t.fun(r)},R0=function t(r){return t.fun(r)},P0=function t(r,e){return t.fun(r,e)},O0=function t(r,e,n){return t.fun(r,e,n)},U0=function t(r){return t.fun(r)},D0=function t(r){return t.fun(r)},M0=function(t){function r(r){t0(r,0);var e=XZ(0,r);n0(r,1),n0(r,13);var n=yr(t[9],r),a=XZ(0,r);return n0(r,2),r0(r),[0,EK(e,a),[0,n]]}function e(r){t0(r,0);var e=XZ(0,r);if(n0(r,1),2===MZ(0,r))var n=XZ(0,r)[2],a=[1,[0,e[1],e[3],n]];else a=[0,yr(t[7],r)];var u=XZ(0,r);return n0(r,2),r0(r),[0,EK(e,u),[0,a]]}function n(t){var r=XZ(0,t),e=FZ(0,t);return n0(t,Ka),[0,r,[0,e]]}function u(t){var r=n(t),e=MZ(0,t);if(\"number\"==typeof e){if(11===e){n0(t,11);for(var a=n(t),u=[0,EK(r[1],a[1]),[0,[0,r],a]];;){var i=MZ(0,t);if(\"number\"!=typeof i||11!==i)return[2,u];n0(t,11);var f=n(t),u=[0,EK(u[1],f[1]),[0,[1,u],f]];}}if(80===e){n0(t,80);var c=n(t);return[1,[0,EK(r[1],c[1]),[0,r,c]]]}}return[0,r]}function i(t){var r=XZ(0,t),a=n(t);if(80===MZ(0,t)){n0(t,80);var u=n(t),i=EK(a[1],u[1]),f=i,c=[1,[0,i,[0,a,u]]];}else var f=a[1],c=[0,a];if(78===MZ(0,t)){n0(t,78);var s=MZ(0,t);if(\"number\"==typeof s)if(1===s){var o=e(t),v=o[2],l=o[1];0!==v[1][0]&&mZ(t,[0,l,41]);var b=[0,l,[0,[1,l,v]]],k=0;}else k=1;else if(4===s[0]){var p=s[1],h=p[1],d=p[3],m=p[2];n0(t,s);var b=[0,h,[0,[0,h,[0,[0,m],d]]]],k=0;}else k=1;if(k){WZ(t,42);var y=XZ(0,t),w=y,g=[0,[0,y,[0,SV,_V]]];}else var w=b[1],g=b[2];}else var w=f,g=0;return[0,EK(r,w),[0,c,g]]}function f(t,e){for(var n=0,a=u(t);;){var f=MZ(0,t);if(\"number\"==typeof f){if(94<=f)c=99===f?1:rv===f?1:0;else{if(1===f){n=[0,[1,r(t)],n];continue}var c=93<=f?1:0;}if(c){var s=Dr(n),o=99===MZ(0,t)?1:0;o&&n0(t,99);var v=XZ(0,t);return n0(t,93),r0(t),[0,EK(e,v),[0,a,o,s]]}}n=[0,[0,i(t)],n];}}function c(t,r){n0(t,99);var e=u(t),n=XZ(0,t);n0(t,93);var a=t[20][1];if(a){var i=a[2];if(i)var f=i[2],c=1;else c=0;}else c=0;if(!c)f=xr(wW);t[20][1]=f;var s=hZ(t),o=bZ(t[21][1],s);return t[22][1]=o,[0,EK(r,n),[0,e]]}function s(t){switch(t[0]){case 0:return t[1][2][1];case 1:var r=t[1][2],e=r[1],n=Lr(gV,r[2][2][1]);return Lr(e[2][1],n);default:var a=t[1][2],u=a[1],i=a[2];return Lr(0===u[0]?u[1][2][1]:s([2,u[1]]),Lr(TV,i[2][1]))}}var o=function t(r){return t.fun(r)},v=function t(r,e){return t.fun(r,e)},l=function t(r){return t.fun(r)};return a(o,function(t){var r=MZ(0,t);if(\"number\"==typeof r){if(1===r){var n=e(t);return[0,n[1],[1,n[2]]]}}else if(4===r[0]){var a=r[1],u=a[3],i=a[2],f=a[1];return n0(t,r),[0,f,[2,[0,i,u]]]}var c=yr(l,t);return[0,c[1],[0,c[2]]]}),a(v,function(t,r){var e=f(t,r);if(e[2][2])var n=0,a=0;else{t0(t,3);for(d=0;;){var u=MZ(0,t);if(\"number\"==typeof u){if(92===u){t0(t,2);var i=XZ(0,t);n0(t,92);var l=MZ(0,t);if(\"number\"==typeof l){if(99===l)k=1;else if(rv===l)k=1;else var b=0,k=0;if(k)var p=[0,c(t,i)],b=1;}else b=0;if(!b)p=[1,wr(v,t,i)];if(0!==p[0]){var h=p[1],d=[0,[0,h[1],[0,h[2]]],d];continue}var m=[0,p[1]],y=[0,Dr(d),m],w=1;}else if(rv===u){VZ(t);var y=[0,Dr(d),0],w=1;}else var g=0,w=0;if(w)var n=y[1],a=y[2],g=1;}else g=0;if(g)break;d=[0,yr(o,t),d];}}if(a){var T=a[1],_=T[2][1],S=T[1],A=s(e[2][1]);sr(s(_),A)&&WZ(t,[6,A]);E=S;}else var E=e[1];return[0,EK(e[1],E),[0,e,a,n]]}),a(l,function(t){var r=XZ(0,t);return t0(t,2),n0(t,92),wr(v,t,r)}),[0,r,e,n,u,i,f,c,o,v,l]}(h0),F0=w0[3],X0=y0[3],B0=y0[2],j0=y0[6],G0=w0[2],q0=w0[1],Y0=w0[4],J0=y0[1],H0=y0[5],W0=y0[4],z0=M0[10],V0=T0[6],$0=T0[3];a(_0,function(t){var r=wr(E0,t,function(t){return 0}),e=XZ(0,t);if(n0(t,rv),r)var n=Or(Dr(r))[1],a=EK(Or(r)[1],n);else a=e;return[0,a,r,Dr(t[2][1])]}),a(S0,function(t,r,e){for(var n=TZ(1,t),a=C$;;){var u=a[2],i=a[1],f=MZ(0,n);if(\"number\"==typeof f)if(rv===f)var c=[0,n,i,u],s=1;else s=0;else s=0;if(!s)if(yr(r,f))c=[0,n,i,u];else{if(\"number\"==typeof f)d=0;else if(1===f[0]){var o=yr(e,n),v=[0,o,u],l=o[2];if(\"number\"!=typeof l&&13===l[0]){var b=l[1][2];if(b){var k=n[6],p=b[1],h=k||fr(p,I$),n=gZ(h,n),a=[0,[0,f,i],v];continue}}var c=[0,n,i,v],d=1;}else d=0;if(!d)c=[0,n,i,u];}var m=c[3],y=TZ(0,n);return Fr(function(t){if(\"number\"!=typeof t&&1===t[0]){var r=t[1],e=r[4],n=r[1];return e?QZ(y,[0,n,32]):e}if(\"number\"==typeof t){var a=t;if(59<=a)switch(a){case 59:u=cO;break;case 60:u=sO;break;case 61:u=oO;break;case 62:u=vO;break;case 63:u=lO;break;case 64:u=bO;break;case 65:u=kO;break;case 66:u=pO;break;case 67:u=hO;break;case 68:u=dO;break;case 69:u=mO;break;case 70:u=yO;break;case 71:u=wO;break;case 72:u=gO;break;case 73:u=TO;break;case 74:u=_O;break;case 75:u=SO;break;case 76:u=AO;break;case 77:u=EO;break;case 78:u=xO;break;case 79:u=IO;break;case 80:u=CO;break;case 81:u=NO;break;case 82:u=LO;break;case 83:u=RO;break;case 84:u=PO;break;case 85:u=OO;break;case 86:u=UO;break;case 87:u=DO;break;case 88:u=MO;break;case 89:u=FO;break;case 90:u=XO;break;case 91:u=BO;break;case 92:u=jO;break;case 93:u=GO;break;case 94:u=qO;break;case 95:u=YO;break;case 96:u=JO;break;case 97:u=HO;break;case 98:u=WO;break;case 99:u=zO;break;case 100:u=VO;break;case 101:u=$O;break;case 102:u=KO;break;case 103:u=QO;break;case 104:u=ZO;break;case 105:u=tU;break;case 106:u=rU;break;case 107:u=eU;break;case 108:u=nU;break;case 109:u=aU;break;case 110:u=uU;break;case 111:u=iU;break;case 112:u=fU;break;case 113:u=cU;break;case 114:u=sU;break;case 115:u=oU;break;default:u=vU;}else switch(a){case 0:u=nP;break;case 1:u=aP;break;case 2:u=uP;break;case 3:u=iP;break;case 4:u=fP;break;case 5:u=cP;break;case 6:u=sP;break;case 7:u=oP;break;case 8:u=vP;break;case 9:u=lP;break;case 10:u=bP;break;case 11:u=kP;break;case 12:u=pP;break;case 13:u=hP;break;case 14:u=dP;break;case 15:u=mP;break;case 16:u=yP;break;case 17:u=wP;break;case 18:u=gP;break;case 19:u=TP;break;case 20:u=_P;break;case 21:u=SP;break;case 22:u=AP;break;case 23:u=EP;break;case 24:u=xP;break;case 25:u=IP;break;case 26:u=CP;break;case 27:u=NP;break;case 28:u=LP;break;case 29:u=RP;break;case 30:u=PP;break;case 31:u=OP;break;case 32:u=UP;break;case 33:u=DP;break;case 34:u=MP;break;case 35:u=FP;break;case 36:u=XP;break;case 37:u=BP;break;case 38:u=jP;break;case 39:u=GP;break;case 40:u=qP;break;case 41:u=YP;break;case 42:u=JP;break;case 43:u=HP;break;case 44:u=WP;break;case 45:u=zP;break;case 46:u=VP;break;case 47:u=$P;break;case 48:u=KP;break;case 49:u=QP;break;case 50:u=ZP;break;case 51:u=tO;break;case 52:u=rO;break;case 53:u=eO;break;case 54:u=nO;break;case 55:u=aO;break;case 56:u=uO;break;case 57:u=iO;break;default:u=fO;}}else switch(t[0]){case 0:u=lU;break;case 1:u=bU;break;case 2:u=kU;break;case 3:u=pU;break;case 4:u=hU;break;default:var u=dU;}return xr(Lr(L$,Lr(u,N$)))},Dr(i)),[0,y,m]}}),a(A0,function(t){var r=yr(w0[5],t),e=MZ(0,t);if(\"number\"==typeof e){var n=e-49|0;if(!(11<n>>>0))switch(n){case 0:return wr(g0[15],t,r);case 1:yr($Z(t),r);var a=MZ(E$,t);if(\"number\"==typeof a)if(5===a)var u=yr(g0[16],t),i=1;else i=0;else i=0;if(!i)u=yr(g0[17],t);return u;case 11:if(49===MZ(x$,t))return yr($Z(t),r),wr(g0[12],0,t)}}return wr(N0,[0,r],t)}),a(E0,function(t,r){var e=gr(S0,t,r,A0),n=e[2];return Xr(function(t,r){return[0,r,t]},wr(x0,r,e[1]),n)}),a(x0,function(t,r){for(n=0;;){var e=MZ(0,r);if(\"number\"==typeof e&&rv===e)return Dr(n);if(yr(t,e))return Dr(n);var n=[0,yr(A0,r),n];}}),a(I0,function(t,r){var e=gr(S0,r,t,function(t){return wr(N0,0,t)}),n=e[1],a=e[2];return[0,Xr(function(t,r){return[0,r,t]},wr(C0,t,n),a),n[6]]}),a(C0,function(t,r){for(n=0;;){var e=MZ(0,r);if(\"number\"==typeof e&&rv===e)return Dr(n);if(yr(t,e))return Dr(n);var n=[0,wr(N0,0,r),n];}}),a(N0,function(t,r){var e=t?t[1]:0;1-HZ(0,r)&&yr($Z(r),e);var n=MZ(0,r);if(\"number\"==typeof n){if(27===n)return yr(g0[24],r);if(28===n)return yr(g0[3],r)}if(JZ(0,r))return yr(m0[14],r);if(HZ(0,r))return wr(F0,r,e);if(\"number\"==typeof n){var a=n+-53|0;if(!(8<a>>>0))switch(a){case 0:return yr(g0[18],r);case 7:return wr(g0[11],0,r);case 8:return yr(g0[23],r)}}return yr(L0,r)}),a(L0,function(t){var r=MZ(0,t);if(\"number\"==typeof r){if(rv===r)return VZ(t),[0,XZ(0,t),1];if(!(60<=r))switch(r){case 1:return yr(g0[7],t);case 9:return yr(g0[14],t);case 16:return yr(g0[2],t);case 19:return yr(g0[20],t);case 20:return yr(g0[21],t);case 22:return yr(g0[22],t);case 23:return yr(g0[4],t);case 24:return yr(g0[24],t);case 25:return yr(g0[5],t);case 26:return yr(g0[6],t);case 32:return yr(g0[8],t);case 35:return yr(g0[9],t);case 37:return yr(g0[13],t);case 39:return yr(g0[1],t);case 59:return yr(g0[10],t)}}if(YZ(0,t))return yr(g0[19],t);if(\"number\"==typeof r){if(80===r)e=1;else if(50<=r)e=0;else switch(r){case 43:return yr(g0[2],t);case 2:case 6:case 8:case 10:case 11:case 12:case 13:case 17:case 18:case 33:case 34:case 36:case 38:case 41:case 42:case 49:e=1;break;default:var e=0;}if(e)return VZ(t),ZZ(t),yr(L0,t)}return yr(g0[16],t)}),a(R0,function(t){var r=yr(y0[2],t),e=MZ(0,t);return\"number\"==typeof e&&10===e?wr(y0[8],t,[0,r,0]):r}),a(P0,function(t,r){var e=XZ(0,r),n=FZ(0,r),a=MZ(0,r);if(\"number\"==typeof a)if(28===a){r[6]?KZ(r,40):r[13]&&WZ(r,[1,n]),ZZ(r);u=1;}else u=0;else var u=0;if(u||(UZ(n)?(KZ(r,40),ZZ(r)):(\"number\"==typeof a?4<(a+-60|0)>>>0?0:(n0(r,a),1):0)||n0(r,0)),t){var i=t[1];DZ(n)&&QZ(r,[0,e,i]);}else;return[0,e,n]}),a(O0,function(t,r,e){var n=r?r[1]:0;return l0(function(t){var r=1-n,a=wr(P0,[0,e],t),u=r?79===MZ(0,t)?1:0:r;return u&&(1-dZ(t)&&WZ(t,7),n0(t,79)),[0,a,80===MZ(0,t)?[0,yr(d0[8],t)]:0,u]},t)}),a(U0,function(t){var r=XZ(0,t);n0(t,1);var e=wr(C0,function(t){return 2===t?1:0},t),n=XZ(0,t);return n0(t,2),[0,EK(r,n),[0,e]]}),a(D0,function(t){var r=XZ(0,t);n0(t,1);var e=wr(I0,function(t){return 2===t?1:0},t),n=e[2],a=e[1],u=XZ(0,t);return n0(t,2),[0,EK(r,u),[0,a],n]}),gr(uK,O$,h0,[0,_0,L0,N0,C0,I0,x0,R0,X0,B0,j0,G0,J0,P0,W0,O0,U0,D0,z0,V0,$0,q0,F0,Y0,H0]);var K0=[0,0],Q0=Lt,Z0=function(t,r,e){try{n=new RegExp(r.toString(),e.toString());}catch(r){K0[1]=[0,[0,t,13],K0[1]];var n=new RegExp(mb,e.toString());}return n},t1=function(t,r){function e(t,r){return Nt(re(Mr(t,r)))}function n(t,r){return r?yr(t,r[1]):wK}function a(t){return{line:t[1],column:t[2]}}function u(t){var r=t[1];if(r)var e=r[1],n=\"number\"==typeof e?xf:e[1].toString(),u=n;else u=wK;var i=a(t[3]);return{source:u,start:a(t[2]),end:i}}function f(t,r,e){var n=[0,ZR,Nt([0,r[2][3],r[3][3]])],a=[0,tP,u(r)],f=[0,[0,rP,t.toString()],a,n],s=f.length-1;if(0===s)var o=e.length-1,v=0===o?[0]:c(e,0,o);else v=0==e.length-1?c(f,0,s):i(f,e);return Rt(v)}function s(t){return e(d,t)}function o(t){var r=t[2],n=t[1];switch(r[2]){case 0:a=TN;break;case 1:a=_N;break;default:var a=SN;}var u=[0,AN,a.toString()];return f(xN,n,[0,[0,EN,e(G,r[1])],u])}function v(t){var r=t[2],a=t[1],u=[0,bC,e(R,r[4])],i=[0,kC,Y(r[3])],c=[0,pC,n(K,r[2])];return f(dC,a,[0,[0,hC,g(r[1])],c,i,u])}function l(t){var r=t[2],e=t[1],a=[0,SI,H(r[3])],u=[0,AI,n(K,r[2])];return f(xI,e,[0,[0,EI,g(r[1])],u,a])}function b(t){var r=t[2],a=t[1],u=[0,pI,e(R,r[4])],i=[0,hI,Y(r[3])],c=[0,dI,n(K,r[2])];return f(yI,a,[0,[0,mI,g(r[1])],c,i,u])}function k(t){var r=t[2],e=t[1],a=EK(r[1][1],r[2][1]),u=[0,lI,n(lt,r[3])];return f(kI,e,[0,[0,bI,S(a,[0,r[1],[0,r[2]],0])],u])}function p(t){var r=t[2],e=r[2],n=t[1],a=e?e[1][1]:r[1][1],u=EK(r[1][1],a);return f(vI,n,[0,[0,oI,S(u,[0,r[1],r[2],0])]])}function h(t){var r=t[1];return f(sI,r,[0,[0,cI,s(t[2][1])]])}function d(t){var r=t[2],a=t[1];if(\"number\"==typeof r)return 0===r?f(G_,a,[0]):f(q_,a,[0]);switch(r[0]){case 0:return h([0,a,r[1]]);case 1:return f(J_,a,[0,[0,Y_,n(g,r[1][1])]]);case 2:var u=r[1],i=[0,II,e(_,u[7])],c=[0,CI,e(C,u[6])],s=[0,NI,n(Z,u[5])],m=[0,LI,n(K,u[4])],y=[0,RI,n(_,u[3])],T=[0,PI,N(u[2])];return f(UI,a,[0,[0,OI,n(g,u[1])],T,y,m,s,c,i]);case 3:return f(W_,a,[0,[0,H_,n(g,r[1][1])]]);case 4:return b([0,a,r[1]]);case 5:var S=r[1],L=S[3];if(L){var R=L[1];if(0!==R[0]&&!R[2])return f(V_,a,[0,[0,z_,n(w,S[4])]])}var P=S[2];if(P){var U=P[1];switch(U[0]){case 0:D=p(U[1]);break;case 1:D=k(U[1]);break;case 2:D=b(U[1]);break;case 3:D=H(U[1]);break;case 4:D=l(U[1]);break;default:var D=v(U[1]);}M=D;}else var M=wK;var F=[0,$_,n(w,S[4])],X=[0,K_,I(S[3])];return f(tS,a,[0,[0,Z_,!!S[1]],[0,Q_,M],X,F]);case 6:return k([0,a,r[1]]);case 7:var B=r[1],j=B[1],G=0===j[0]?g(j[1]):w(j[1]),q=0===B[3][0]?\"CommonJS\":\"ES\";return f(aS,a,[0,[0,nS,G],[0,eS,h(B[2])],[0,rS,q]]);case 8:return f(iS,a,[0,[0,uS,$(r[1])]]);case 9:return p([0,a,r[1]]);case 10:var Y=r[1],J=[0,fS,_(Y[2])];return f(sS,a,[0,[0,cS,d(Y[1])],J]);case 11:var W=r[1],z=W[1],V=0===z[0]?d(z[1]):_(z[1]);return f(lS,a,[0,[0,vS,V],[0,oS,x(W[2]).toString()]]);case 12:var Q=r[1],tt=Q[2];if(tt){var rt=tt[1];if(0!==rt[0]&&!rt[2]){var et=[0,bS,x(Q[4]).toString()];return f(pS,a,[0,[0,kS,n(w,Q[3])],et])}}var nt=[0,hS,x(Q[4]).toString()],at=[0,dS,n(w,Q[3])],ut=[0,mS,I(Q[2])];return f(wS,a,[0,[0,yS,n(d,Q[1])],ut,at,nt]);case 13:var it=r[1],ft=[0,gS,n(Q0,it[2])];return f(_S,a,[0,[0,TS,_(it[1])],ft]);case 14:var ct=r[1],st=function(t){return 0===t[0]?o(t[1]):_(t[1])},ot=[0,SS,d(ct[4])],vt=[0,AS,n(_,ct[3])],bt=[0,ES,n(_,ct[2])];return f(IS,a,[0,[0,xS,n(st,ct[1])],bt,vt,ot]);case 15:var kt=r[1],pt=kt[1],ht=0===pt[0]?o(pt[1]):_(pt[1]),dt=[0,CS,!!kt[4]],mt=[0,NS,d(kt[3])];return f(PS,a,[0,[0,RS,ht],[0,LS,_(kt[2])],mt,dt]);case 16:var yt=r[1],wt=yt[4]?OS:US,gt=yt[1],Tt=0===gt[0]?o(gt[1]):_(gt[1]),_t=[0,DS,d(yt[3])];return f(wt,a,[0,[0,FS,Tt],[0,MS,_(yt[2])],_t]);case 17:var St=r[1],At=St[3],Et=0===At[0]?h(At[1]):_(At[1]),xt=[0,Ix,n(K,St[9])],It=[0,Cx,n($,St[8])],Ct=[0,Nx,!!St[7]],Lt=[0,Lx,n(lt,St[6])],Rt=[0,Rx,!!St[5]],Pt=[0,Px,!!St[4]],Ot=[0,Ux,O(St[2])];return f(Mx,a,[0,[0,Dx,n(g,St[1])],Ot,[0,Ox,Et],Pt,Rt,Lt,Ct,It,xt]);case 18:var Ut=r[1],Dt=[0,XS,n(d,Ut[3])],Mt=[0,BS,d(Ut[2])];return f(GS,a,[0,[0,jS,_(Ut[1])],Mt,Dt]);case 19:var Ft=r[1],Xt=Mr(function(t){switch(t[0]){case 0:var r=t[1],e=r[3],n=r[2],a=r[1],u=n?EK(e[1],n[1][1]):e[1],i=n?n[1]:e;if(a){switch(a[1]){case 0:var c=Su,s=1;break;case 1:var c=jl,s=1;break;default:var o=0,s=0;}if(s)var v=c,o=1;}else o=0;if(!o)v=wK;var l=[0,YR,g(i)];return f(HR,u,[0,[0,JR,g(e)],l,[0,qR,v]]);case 1:var b=t[1],k=[0,[0,XR,g(b)]];return f(BR,b[1],k);default:var p=t[1],h=p[1];return f(GR,h,[0,[0,jR,g(p[2])]])}},Ft[3]);switch(Ft[1]){case 0:Bt=qS;break;case 1:Bt=YS;break;default:var Bt=JS;}var jt=[0,HS,Bt.toString()],Gt=[0,WS,w(Ft[2])];return f(VS,a,[0,[0,zS,Nt(re(Xt))],Gt,jt]);case 20:return v([0,a,r[1]]);case 21:var qt=r[1],Yt=[0,$S,d(qt[2])];return f(QS,a,[0,[0,KS,g(qt[1])],Yt]);case 22:return f(tA,a,[0,[0,ZS,n(_,r[1][1])]]);case 23:var Jt=r[1],Ht=[0,rA,e(A,Jt[2])];return f(nA,a,[0,[0,eA,_(Jt[1])],Ht]);case 24:return f(uA,a,[0,[0,aA,_(r[1][1])]]);case 25:var Wt=r[1],zt=[0,iA,n(h,Wt[3])],Vt=[0,fA,n(E,Wt[2])];return f(sA,a,[0,[0,cA,h(Wt[1])],Vt,zt]);case 26:return l([0,a,r[1]]);case 27:return o([0,a,r[1]]);case 28:var $t=r[1],Kt=[0,oA,d($t[2])];return f(lA,a,[0,[0,vA,_($t[1])],Kt]);default:var Qt=r[1],Zt=[0,bA,d(Qt[2])];return f(pA,a,[0,[0,kA,_(Qt[1])],Zt])}}function m(t){var r=t[2],a=t[1],u=[0,fR,e(nt,r[3])],i=[0,cR,n(rt,r[2])],c=r[1],s=c[2],o=c[1],v=[0,vR,!!s[2]],l=[0,lR,e(tt,s[3])];return f(oR,a,[0,[0,sR,f(kR,o,[0,[0,bR,ct(s[1])],l,v])],i,u])}function y(t){var r=t[2],n=t[1],a=[0,bN,e(_,r[2])];return f(pN,n,[0,[0,kN,e(j,r[1])],a])}function w(t){var r=t[2],e=t[1],n=r[2],a=r[1];if(\"number\"==typeof a)i=wK;else switch(a[0]){case 0:i=a[1].toString();break;case 1:i=!!a[1];break;case 2:i=a[1];break;default:var u=a[1],i=Z0(e,u[1],u[2]);}if(\"number\"==typeof a)o=0;else if(3===a[0])var c=a[1],s=[0,[0,sN,i],[0,cN,n.toString()],[0,fN,{pattern:c[1].toString(),flags:c[2].toString()}]],o=1;else o=0;if(!o)s=[0,[0,vN,i],[0,oN,n.toString()]];return f(lN,e,s)}function g(t){return f(Kx,t[1],[0,[0,$x,t[2].toString()],[0,Vx,wK],[0,zx,!1]])}function T(t){var r=t[2],e=r[3],a=t[1],u=0===e[0]?h(e[1]):_(e[1]),i=[0,Fx,n(K,r[9])],c=[0,Xx,n($,r[8])],s=[0,Bx,!!r[7]],o=[0,jx,n(lt,r[6])],v=[0,Gx,!!r[5]],l=[0,qx,!!r[4]],b=[0,Jx,O(r[2])];return f(Wx,a,[0,[0,Hx,n(g,r[1])],b,[0,Yx,u],l,v,o,s,c,i])}function _(t){var r=t[2],a=t[1];if(\"number\"==typeof r)return 0===r?f(hA,a,[0]):f(dA,a,[0]);switch(r[0]){case 0:var u=r[1][1];return f(yA,a,[0,[0,mA,e(function(t){return n(X,t)},u)]]);case 1:var i=r[1],c=i[3],s=0===c[0]?h(c[1]):_(c[1]),o=[0,wA,n(K,i[9])],v=[0,gA,n($,i[8])],l=[0,TA,!!i[7]],b=[0,_A,n(lt,i[6])],k=[0,SA,!!i[5]],p=[0,AA,!!i[4]],d=[0,xA,O(i[2])];return f(CA,a,[0,[0,IA,n(g,i[1])],d,[0,EA,s],p,k,b,l,v,o]);case 2:var S=r[1];switch(S[1]){case 0:A=NA;break;case 1:A=LA;break;case 2:A=RA;break;case 3:A=PA;break;case 4:A=OA;break;case 5:A=UA;break;case 6:A=DA;break;case 7:A=MA;break;case 8:A=FA;break;case 9:A=XA;break;case 10:A=BA;break;case 11:A=jA;break;default:var A=GA;}var E=[0,qA,_(S[3])],x=[0,YA,P(S[2])];return f(HA,a,[0,[0,JA,A.toString()],x,E]);case 3:var I=r[1];switch(I[1]){case 0:L=WA;break;case 1:L=zA;break;case 2:L=VA;break;case 3:L=$A;break;case 4:L=KA;break;case 5:L=QA;break;case 6:L=ZA;break;case 7:L=tE;break;case 8:L=rE;break;case 9:L=eE;break;case 10:L=nE;break;case 11:L=aE;break;case 12:L=uE;break;case 13:L=iE;break;case 14:L=fE;break;case 15:L=cE;break;case 16:L=sE;break;case 17:L=oE;break;case 18:L=vE;break;case 19:L=lE;break;case 20:L=bE;break;default:var L=kE;}var R=[0,pE,_(I[3])],U=[0,hE,_(I[2])];return f(mE,a,[0,[0,dE,L.toString()],U,R]);case 4:var D=r[1],F=[0,yE,e(X,D[2])];return f(gE,a,[0,[0,wE,_(D[1])],F]);case 5:var j=r[1],G=[0,DI,e(_,j[7])],q=[0,MI,e(C,j[6])],Y=[0,FI,n(Z,j[5])],J=[0,XI,n(K,j[4])],H=[0,BI,n(_,j[3])],W=[0,jI,N(j[2])];return f(qI,a,[0,[0,GI,n(g,j[1])],W,H,J,Y,q,G]);case 6:var z=r[1],V=[0,TE,n(_,z[2])];return f(SE,a,[0,[0,_E,e(B,z[1])],V]);case 7:var Q=r[1],tt=[0,AE,_(Q[3])],rt=[0,EE,_(Q[2])];return f(IE,a,[0,[0,xE,_(Q[1])],rt,tt]);case 8:return T([0,a,r[1]]);case 9:var et=r[1],nt=[0,CE,n(_,et[2])];return f(LE,a,[0,[0,NE,e(B,et[1])],nt]);case 10:return g(r[1]);case 11:var at=r[1],ut=[0,RE,e(_,[0,at,0])];return f(UE,a,[0,[0,OE,f(PE,EK(a,at[1]),[0])],ut]);case 12:return m([0,a,r[1]]);case 13:return w([0,a,r[1]]);case 14:var it=r[1],ft=0===it[1]?ME:DE,ct=[0,FE,_(it[3])],st=[0,XE,_(it[2])];return f(jE,a,[0,[0,BE,ft.toString()],st,ct]);case 15:var ot=r[1],vt=ot[2],bt=0===vt[0]?g(vt[1]):_(vt[1]),kt=[0,GE,!!ot[3]];return f(JE,a,[0,[0,YE,_(ot[1])],[0,qE,bt],kt]);case 16:var pt=r[1],ht=[0,HE,g(pt[2])];return f(zE,a,[0,[0,WE,g(pt[1])],ht]);case 17:var dt=r[1],mt=[0,VE,e(X,dt[2])];return f(KE,a,[0,[0,$E,_(dt[1])],mt]);case 18:return f(ZE,a,[0,[0,QE,e(M,r[1][1])]]);case 19:return f(rx,a,[0,[0,tx,e(_,r[1][1])]]);case 20:var yt=r[1],wt=[0,yN,y(yt[2])];return f(gN,a,[0,[0,wN,_(yt[1])],wt]);case 21:return y([0,a,r[1]]);case 22:var gt=r[1],Tt=[0,ex,$(gt[2])];return f(ax,a,[0,[0,nx,_(gt[1])],Tt]);case 23:var _t=r[1];if(7<=_t[1])return f(ix,a,[0,[0,ux,_(_t[3])]]);switch(_t[1]){case 0:St=fx;break;case 1:St=cx;break;case 2:St=sx;break;case 3:St=ox;break;case 4:St=vx;break;case 5:St=lx;break;case 6:St=bx;break;default:var St=xr(kx);}var At=[0,px,_(_t[3])];return f(mx,a,[0,[0,dx,St.toString()],[0,hx,!!_t[2]],At]);case 24:var Et=r[1],xt=0===Et[1]?wx:yx,It=[0,gx,!!Et[3]],Ct=[0,Tx,_(Et[2])];return f(Sx,a,[0,[0,_x,xt.toString()],Ct,It]);default:var Nt=r[1],Lt=[0,Ax,!!Nt[2]];return f(xx,a,[0,[0,Ex,n(_,Nt[1])],Lt])}}function S(t,r){var e=r[1],a=[0,Qx,!!r[3]],u=[0,Zx,n($,r[2])];return f(rI,t,[0,[0,tI,e[2].toString()],u,a])}function A(t){var r=t[2],a=t[1],u=[0,eI,e(d,r[2])];return f(aI,a,[0,[0,nI,n(_,r[1])],u])}function E(t){var r=t[2],e=t[1],n=[0,uI,h(r[2])];return f(fI,e,[0,[0,iI,P(r[1])],n])}function x(t){return 0===t?gI:wI}function I(t){if(t){var r=t[1];if(0===r[0])return e(ot,r[1]);var n=r[2],a=r[1];return Nt(n?[0,f(_I,a,[0,[0,TI,g(n[1])]])]:[0])}return Nt([0])}function C(t){var r=t[2],e=t[1],a=[0,YI,n(Z,r[2])];return f(HI,e,[0,[0,JI,g(r[1])],a])}function N(t){var r=t[1];return f(zI,r,[0,[0,WI,e(L,t[2][1])]])}function L(t){if(0===t[0]){var r=t[1],a=r[2],u=a[2],i=r[1],c=a[5],s=a[4],o=a[3],v=a[1];switch(u[0]){case 0:l=[0,w(u[1]),0];break;case 1:l=[0,g(u[1]),0];break;default:var l=[0,_(u[1]),1];}var b=l[2],k=l[1];switch(v){case 0:p=VI;break;case 1:p=$I;break;case 2:p=KI;break;default:var p=QI;}var h=[0,ZI,e(_,c)],d=[0,eC,p.toString()];return f(uC,i,[0,[0,aC,k],[0,nC,T(o)],d,[0,rC,!!s],[0,tC,!!b],h])}var m=t[1],y=m[2],S=y[1],A=m[1];switch(S[0]){case 0:E=[0,w(S[1]),0];break;case 1:E=[0,g(S[1]),0];break;default:var E=[0,_(S[1]),1];}var x=E[2],I=E[1],C=[0,iC,n(q,y[5])],N=[0,fC,!!y[4]],L=[0,sC,n($,y[3])];return f(lC,A,[0,[0,vC,I],[0,oC,n(_,y[2])],L,[0,cC,!!x],N,C])}function R(t){var r=t[2],e=r[1],a=t[1],u=0===e[0]?g(e[1]):V(e[1]);return f(wC,a,[0,[0,yC,u],[0,mC,n(Z,r[2])]])}function P(t){var r=t[2],a=t[1];switch(r[0]){case 0:var u=r[1],i=[0,gC,n($,u[2])];return f(_C,a,[0,[0,TC,e(F,u[1])],i]);case 1:var c=r[1],s=[0,SC,n($,c[2])],o=c[1];return f(EC,a,[0,[0,AC,e(function(t){return n(U,t)},o)],s]);case 2:var v=r[1],l=v[1],b=[0,xC,_(v[2])];return f(CC,a,[0,[0,IC,P(l)],b]);case 3:return S(a,r[1]);default:return _(r[1])}}function O(t){var r=t[2],n=t[1];if(r){var a=r[1],u=a[1];return Nt(re(Dr([0,f(LC,u,[0,[0,NC,P(a[2][1])]]),Dr(Mr(P,n))])))}return e(P,n)}function U(t){if(0===t[0])return P(t[1]);var r=t[1],e=r[1];return f(PC,e,[0,[0,RC,P(r[2][1])]])}function M(t){if(0===t[0]){var r=t[1],e=r[2],n=e[1],a=r[1];switch(n[0]){case 0:u=[0,w(n[1]),0];break;case 1:u=[0,g(n[1]),0];break;default:var u=[0,_(n[1]),1];}var i=e[2],c=u[2],s=u[1];switch(i[0]){case 0:o=[0,_(i[1]),OC];break;case 1:o=[0,T(i[1]),UC];break;default:var o=[0,T(i[1]),DC];}return f(qC,a,[0,[0,GC,s],[0,jC,o[1]],[0,BC,o[2].toString()],[0,XC,!!e[3]],[0,FC,!!e[4]],[0,MC,!!c]])}var v=t[1],l=v[1];return f(JC,l,[0,[0,YC,_(v[2][1])]])}function F(t){if(0===t[0]){var r=t[1],e=r[2],n=e[1],a=r[1];switch(n[0]){case 0:u=[0,w(n[1]),0];break;case 1:u=[0,g(n[1]),0];break;default:var u=[0,_(n[1]),1];}var i=u[1],c=[0,HC,!!u[2]],s=[0,WC,!!e[3]];return f(QC,a,[0,[0,KC,i],[0,$C,P(e[2])],[0,VC,Ts],[0,zC,!1],s,c])}var o=t[1],v=o[1];return f(tN,v,[0,[0,ZC,P(o[2][1])]])}function X(t){if(0===t[0])return _(t[1]);var r=t[1],e=r[1];return f(eN,e,[0,[0,rN,_(r[2][1])]])}function B(t){var r=t[2],e=t[1],n=[0,nN,!!r[3]],a=[0,aN,_(r[2])];return f(iN,e,[0,[0,uN,P(r[1])],a,n])}function j(t){var r=t[2];return f(mN,t[1],[0,[0,dN,{raw:r[1][1].toString(),cooked:r[1][2].toString()}],[0,hN,!!r[2]]])}function G(t){var r=t[2],e=t[1],a=[0,IN,n(_,r[2])];return f(NN,e,[0,[0,CN,P(r[1])],a])}function q(t){return 0===t[2]?\"plus\":Uo}function Y(t){var r=t[2],e=t[1],a=r[2],u=Xr(function(t,r){var e=t[3],a=t[2],u=t[1];switch(r[0]){case 0:var i=r[1],c=i[2],s=c[1],o=i[1];switch(s[0]){case 0:v=w(s[1]);break;case 1:v=g(s[1]);break;default:var v=xr(eL);}var l=c[2];switch(l[0]){case 0:k=[0,H(l[1]),nL];break;case 1:var b=l[1],k=[0,J([0,b[1],b[2]]),aL];break;default:var p=l[1],k=[0,J([0,p[1],p[2]]),uL];}var h=k[1],d=[0,iL,k[2].toString()],m=[0,fL,n(q,c[6])];return[0,[0,f(lL,o,[0,[0,vL,v],[0,oL,h],[0,sL,!!c[3]],[0,cL,!!c[4]],m,d]),u],a,e];case 1:var y=r[1],T=y[1];return[0,[0,f(kL,T,[0,[0,bL,H(y[2][1])]]),u],a,e];case 2:var _=r[1],S=_[2],A=_[1],E=[0,pL,n(q,S[5])],x=[0,hL,!!S[4]],I=[0,dL,H(S[3])],C=[0,mL,H(S[2])];return[0,u,[0,f(wL,A,[0,[0,yL,n(g,S[1])],C,I,x,E]),a],e];default:var N=r[1],L=N[2],R=N[1],P=[0,gL,!!L[2]];return[0,u,a,[0,f(_L,R,[0,[0,TL,J(L[1])],P]),e]]}},$N,a),i=u[2],c=u[1],s=[0,KN,Nt(re(Dr(u[3])))],o=[0,QN,Nt(re(Dr(i)))],v=[0,ZN,Nt(re(Dr(c)))];return f(rL,e,[0,[0,tL,!!r[1]],v,o,s])}function J(t){var r=t[2],a=r[1],u=t[1],i=a[2],c=a[1],s=[0,jN,n(K,r[3])],o=[0,GN,n(z,i)],v=[0,qN,H(r[2])];return f(JN,u,[0,[0,YN,e(W,c)],v,o,s])}function H(t){var r=t[2],a=t[1];if(\"number\"==typeof r)switch(r){case 0:return f(LN,a,[0]);case 1:return f(RN,a,[0]);case 2:return f(PN,a,[0]);case 3:return f(ON,a,[0]);case 4:return f(UN,a,[0]);case 5:return f(DN,a,[0]);case 6:return f(MN,a,[0]);case 7:return f(FN,a,[0]);default:return f(VL,a,[0])}else switch(r[0]){case 0:return f(BN,a,[0,[0,XN,H(r[1])]]);case 1:return J([0,a,r[1]]);case 2:return Y([0,a,r[1]]);case 3:return f(AL,a,[0,[0,SL,H(r[1])]]);case 4:var u=r[1],i=u[1],c=0===i[0]?g(i[1]):V(i[1]);return f(LL,a,[0,[0,NL,c],[0,CL,n(Z,u[2])]]);case 5:return f(PL,a,[0,[0,RL,e(H,[0,r[1],[0,r[2],r[3]]])]]);case 6:return f(UL,a,[0,[0,OL,e(H,[0,r[1],[0,r[2],r[3]]])]]);case 7:return f(ML,a,[0,[0,DL,H(r[1])]]);case 8:return f(XL,a,[0,[0,FL,e(H,r[1])]]);case 9:var s=r[1];return f(GL,a,[0,[0,jL,s[1].toString()],[0,BL,s[2].toString()]]);case 10:var o=r[1];return f(JL,a,[0,[0,YL,o[1]],[0,qL,o[2].toString()]]);default:var v=r[1];return f(zL,a,[0,[0,WL,!!v[1]],[0,HL,v[2].toString()]])}}function W(t){var r=t[2],e=t[1],a=[0,HN,!!r[3]],u=[0,WN,H(r[2])];return f(VN,e,[0,[0,zN,n(g,r[1])],u,a])}function z(t){return W(t[2][1])}function V(t){var r=t[2],e=r[1],n=t[1],a=0===e[0]?g(e[1]):V(e[1]);return f(IL,n,[0,[0,xL,a],[0,EL,g(r[2])]])}function $(t){var r=t[1];return f(KL,r,[0,[0,$L,H(t[2])]])}function K(t){var r=t[1];return f(ZL,r,[0,[0,QL,e(Q,t[2][1])]])}function Q(t){var r=t[2],e=t[1],a=[0,tR,n(H,r[4])],u=[0,rR,n(q,r[3])],i=[0,eR,n($,r[2])];return f(aR,e,[0,[0,nR,r[1].toString()],i,u,a])}function Z(t){var r=t[1];return f(iR,r,[0,[0,uR,e(H,t[2][1])]])}function tt(t){if(0===t[0]){var r=t[1],e=r[2],a=e[1],u=r[1],i=0===a[0]?at(a[1]):ut(a[1]);return f(yR,u,[0,[0,mR,i],[0,dR,n(st,e[2])]])}var c=t[1],s=c[1];return f(gR,s,[0,[0,wR,_(c[2][1])]])}function rt(t){var r=t[1];return f(hR,r,[0,[0,pR,ct(t[2][1])]])}function et(t){var r=t[2][1],e=t[1],n=0===r[0]?_(r[1]):f(TR,r[1],[0]);return f(SR,e,[0,[0,_R,n]])}function nt(t){var r=t[2],e=t[1];switch(r[0]){case 0:return m([0,e,r[1]]);case 1:return et([0,e,r[1]]);default:var n=r[1];return f(xR,e,[0,[0,ER,n[1].toString()],[0,AR,n[2].toString()]])}}function at(t){return f(UR,t[1],[0,[0,OR,t[2][1].toString()]])}function ut(t){var r=t[2],e=t[1],n=[0,LR,at(r[2])];return f(PR,e,[0,[0,RR,at(r[1])],n])}function ft(t){var r=t[2],e=r[1],n=t[1],a=0===e[0]?at(e[1]):ft(e[1]);return f(NR,n,[0,[0,CR,a],[0,IR,at(r[2])]])}function ct(t){switch(t[0]){case 0:return at(t[1]);case 1:return ut(t[1]);default:return ft(t[1])}}function st(t){return 0===t[0]?w([0,t[1],t[2]]):et([0,t[1],t[2]])}function ot(t){var r=t[2],e=r[2],n=t[1],a=g(e?e[1]:r[1]);return f(FR,n,[0,[0,MR,g(r[1])],[0,DR,a]])}function vt(t){var r=t[2],e=t[1],n=0===r[0]?[0,WR,r[1]]:[0,zR,r[1]];return f(n[1],e,[0,[0,VR,n[2].toString()]])}function lt(t){var r=t[2],e=t[1];if(r)var n=KR,a=[0,[0,$R,_(r[1])]];else var n=QR,a=[0];return f(n,e,a)}var bt=D(r,void 0)?{}:r,kt=bt.esproposal_decorators,pt=it(t),ht=gK(kt)?[0,bm[1],bm[2],0|kt,bm[4],bm[5],bm[6]]:bm,dt=bt.esproposal_class_instance_fields,mt=gK(dt)?[0,0|dt,ht[2],ht[3],ht[4],ht[5],ht[6]]:ht,yt=bt.esproposal_class_static_fields,wt=gK(yt)?[0,mt[1],0|yt,mt[3],mt[4],mt[5],mt[6]]:mt,gt=bt.esproposal_export_star_as,Tt=gK(gt)?[0,wt[1],wt[2],wt[3],0|gt,wt[5],wt[6]]:wt,_t=bt.types,St=[0,gK(_t)?[0,Tt[1],Tt[2],Tt[3],Tt[4],0|_t,Tt[6]]:Tt],At=[0,St],Et=hm?hm[1]:1,xt=At?St:0,It=pZ([0,0],[0,[0,xt]?xt:0],0,pt),Ct=yr(h0[1],It),Lt=Dr(It[1][1]),Pt=Dr(Xr(function(t,r){var e=t[2],n=t[1];return wr(p0[3],r,n)?[0,n,e]:[0,wr(p0[4],r,n),[0,r,e]]},[0,p0[1],0],Lt)[2]);if(Et?0!==Pt?1:0:Et)throw[0,jK,Pt];K0[1]=0;var Ot=Ct[2],Ut=Ct[1],Dt=[0,X_,e(vt,Ct[3])],Mt=f(j_,Ut,[0,[0,B_,s(Ot)],Dt]),Ft=Rr(Pt,K0[1]);return Mt.errors=e(function(t){var r=t[2],e=t[1];if(\"number\"==typeof r){var n=r;if(34<=n)switch(n){case 34:f=YT;break;case 35:f=JT;break;case 36:f=HT;break;case 37:f=WT;break;case 38:f=zT;break;case 39:f=VT;break;case 40:f=$T;break;case 41:f=KT;break;case 42:f=QT;break;case 43:f=ZT;break;case 44:f=t_;break;case 45:f=r_;break;case 46:f=Lr(n_,e_);break;case 47:f=Lr(u_,a_);break;case 48:f=i_;break;case 49:f=f_;break;case 50:f=c_;break;case 51:f=s_;break;case 52:f=o_;break;case 53:f=v_;break;case 54:f=l_;break;case 55:f=b_;break;case 56:f=k_;break;case 57:f=p_;break;case 58:f=h_;break;case 59:f=d_;break;case 60:f=m_;break;case 61:f=y_;break;case 62:f=w_;break;case 63:f=g_;break;case 64:f=Lr(__,T_);break;case 65:f=S_;break;case 66:f=A_;break;default:f=E_;}else switch(n){case 0:f=sT;break;case 1:f=oT;break;case 2:f=vT;break;case 3:f=lT;break;case 4:f=bT;break;case 5:f=kT;break;case 6:f=pT;break;case 7:f=hT;break;case 8:f=dT;break;case 9:f=mT;break;case 10:f=yT;break;case 11:f=wT;break;case 12:f=gT;break;case 13:f=TT;break;case 14:f=_T;break;case 15:f=ST;break;case 16:f=AT;break;case 17:f=ET;break;case 18:f=xT;break;case 19:f=Lr(CT,IT);break;case 20:f=NT;break;case 21:f=LT;break;case 22:f=RT;break;case 23:f=PT;break;case 24:f=OT;break;case 25:f=UT;break;case 26:f=DT;break;case 27:f=MT;break;case 28:f=FT;break;case 29:f=XT;break;case 30:f=BT;break;case 31:f=jT;break;case 32:f=GT;break;default:f=qT;}}else switch(r[0]){case 0:f=Lr(x_,r[1]);break;case 1:f=Lr(I_,r[1]);break;case 2:var a=r[2],i=r[1],f=wr(Ge(C_),i,a);break;case 3:f=Lr(L_,Lr(r[1],N_));break;case 4:f=Lr(P_,Lr(r[1],R_));break;case 5:f=Lr(r[1],Lr(U_,Lr(r[2],O_)));break;case 6:f=Lr(D_,r[1]);break;default:var c=r[1],f=yr(Ge(M_),c);}var s=f.toString();return{loc:u(e),message:s}},Ft),Mt},r1=function(t){return t[1]===_K?yr(AK,t[2]):yr(AK,new SK(Lr(U$,function(r){for(d=r;;){if(!d){if(t===tm)return $w;if(t===um)return Kw;if(t[1]===am){var e=t[2],n=e[3],a=e[2],u=e[1];return _r(Ge(cm),u,a,n,n+5|0,Qw)}if(t[1]===im){var i=t[2],f=i[3],c=i[2],s=i[1];return _r(Ge(cm),s,c,f,f+6|0,Zw)}if(t[1]===fm){var o=t[2],v=o[3],l=o[2],b=o[1];return _r(Ge(cm),b,l,v,v+6|0,tg)}return 0===ar(t)?Lr(t[1][1],Je(t)):t[1]}var k=d[2],p=d[1];try{h=yr(p,t);}catch(t){var h=0;}if(h)return h[1];var d=k;}}(W$[1])).toString()))};return r.parse=function(t,r){try{return t1(t,r)}catch(r){return r=mr(r),r1(r)}},void function(t){yr(X$[1],0);}()}var e1=pK;}else var n1=kK;}else var a1=bK;}else vK=lK;}}(function(){return this}());});const createError=parserCreateError; const includeShebang=parserIncludeShebang;var parserFlow=parse;var parserFlow_1=parserFlow;\n\nreturn parserFlow_1;\n\n}());\n"
  },
  {
    "path": "website/static/lib/parser-graphql.js",
    "content": "var graphql = (function () {\nfunction unwrapExports (x) {\n\treturn x && x.__esModule ? x['default'] : x;\n}\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar parserGraphql_1 = createCommonjsModule(function (module) {\n\"use strict\";function createError$1(e,n){const r=new SyntaxError(e+\" (\"+n.start.line+\":\"+n.start.column+\")\");return r.loc=n,r}function createCommonjsModule$$1(e,n){return n={exports:{}},e(n,n.exports),n.exports}function parseComments(e){const n=[];let r=e.loc.startToken.next;for(;\"<EOF>\"!==r.kind;)\"Comment\"===r.kind&&(Object.assign(r,{column:r.column-1}),n.push(r)),r=r.next;return n}function removeTokens(e){if(e&&\"object\"==typeof e){delete e.startToken,delete e.endToken,delete e.prev,delete e.next;for(const n in e)removeTokens(e[n]);}return e}function parse(e){const n=index;try{const r=n.parse(e);return r.comments=parseComments(r),removeTokens(r),r}catch(e){const n=index$2.GraphQLError;throw e instanceof n?createError(e.message,{start:{line:e.locations[0].line,column:e.locations[0].column}}):e}}var parserCreateError=createError$1,location=createCommonjsModule$$1(function(e,n){function r(e,n){for(var r=/\\r\\n|[\\n\\r]/g,t=1,i=n+1,o=void 0;(o=r.exec(e.body))&&o.index<n;)t+=1,i=n+1-(o.index+o[0].length);return{line:t,column:i}}Object.defineProperty(n,\"__esModule\",{value:!0}),n.getLocation=r;}),GraphQLError_1=createCommonjsModule$$1(function(e,n){function r(e,n,i,o,a,u){var c=i;if(!c&&n&&n.length>0){var s=n[0];c=s&&s.loc&&s.loc.source;}var l=o;!l&&n&&(l=n.filter(function(e){return Boolean(e.loc)}).map(function(e){return e.loc.start})),l&&0===l.length&&(l=void 0);var d=void 0,f=c;f&&l&&(d=l.map(function(e){return(0,t.getLocation)(f,e)})),Object.defineProperties(this,{message:{value:e,enumerable:!0,writable:!0},locations:{value:d||void 0,enumerable:!0},path:{value:a||void 0,enumerable:!0},nodes:{value:n||void 0},source:{value:c||void 0},positions:{value:l||void 0},originalError:{value:u}}),u&&u.stack?Object.defineProperty(this,\"stack\",{value:u.stack,writable:!0,configurable:!0}):Error.captureStackTrace?Error.captureStackTrace(this,r):Object.defineProperty(this,\"stack\",{value:Error().stack,writable:!0,configurable:!0});}Object.defineProperty(n,\"__esModule\",{value:!0}),n.GraphQLError=r;var t=location;r.prototype=Object.create(Error.prototype,{constructor:{value:r},name:{value:\"GraphQLError\"}});}),syntaxError_1=createCommonjsModule$$1(function(e,n){function r(e,n,r){var i=(0,o.getLocation)(e,n);return new a.GraphQLError(\"Syntax Error \"+e.name+\" (\"+i.line+\":\"+i.column+\") \"+r+\"\\n\\n\"+t(e,i),void 0,e,[n])}function t(e,n){var r=n.line,t=(r-1).toString(),o=r.toString(),a=(r+1).toString(),u=a.length,c=e.body.split(/\\r\\n|[\\n\\r]/g);return(r>=2?i(u,t)+\": \"+c[r-2]+\"\\n\":\"\")+i(u,o)+\": \"+c[r-1]+\"\\n\"+Array(2+u+n.column).join(\" \")+\"^\\n\"+(r<c.length?i(u,a)+\": \"+c[r]+\"\\n\":\"\")}function i(e,n){return Array(e-n.length+1).join(\" \")+n}Object.defineProperty(n,\"__esModule\",{value:!0}),n.syntaxError=r;var o=location,a=GraphQLError_1;}),locatedError_1=createCommonjsModule$$1(function(e,n){function r(e,n,r){if(e&&e.path)return e;var i=e?e.message||String(e):\"An unknown error occurred.\";return new t.GraphQLError(i,e&&e.nodes||n,e&&e.source,e&&e.positions,r,e)}Object.defineProperty(n,\"__esModule\",{value:!0}),n.locatedError=r;var t=GraphQLError_1;}),invariant_1=createCommonjsModule$$1(function(e,n){function r(e,n){if(!e)throw new Error(n)}Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=r;}),formatError_1=createCommonjsModule$$1(function(e,n){function r(e){return(0,t.default)(e,\"Received null or undefined error.\"),{message:e.message,locations:e.locations,path:e.path}}Object.defineProperty(n,\"__esModule\",{value:!0}),n.formatError=r;var t=function(e){return e&&e.__esModule?e:{default:e}}(invariant_1);}),index$2=createCommonjsModule$$1(function(e,n){Object.defineProperty(n,\"__esModule\",{value:!0});var r=GraphQLError_1;Object.defineProperty(n,\"GraphQLError\",{enumerable:!0,get:function(){return r.GraphQLError}});var t=syntaxError_1;Object.defineProperty(n,\"syntaxError\",{enumerable:!0,get:function(){return t.syntaxError}});var i=locatedError_1;Object.defineProperty(n,\"locatedError\",{enumerable:!0,get:function(){return i.locatedError}});var o=formatError_1;Object.defineProperty(n,\"formatError\",{enumerable:!0,get:function(){return o.formatError}});}),lexer=createCommonjsModule$$1(function(e,n){function r(e,n){var r=new o(k,0,0,0,0,null);return{source:e,options:n,lastToken:r,token:r,line:1,lineStart:0,advance:t}}function t(){var e=this.lastToken=this.token;if(e.kind!==y){do{e=e.next=u(this,e);}while(e.kind===j);this.token=e;}return e}function i(e){var n=e.value;return n?e.kind+' \"'+n+'\"':e.kind}function o(e,n,r,t,i,o,a){this.kind=e,this.start=n,this.end=r,this.line=t,this.column=i,this.value=a,this.prev=o,this.next=null;}function a(e){return isNaN(e)?y:e<127?JSON.stringify(String.fromCharCode(e)):'\"\\\\u'+(\"00\"+e.toString(16).toUpperCase()).slice(-4)+'\"'}function u(e,n){var r=e.source,t=r.body,i=t.length,u=s(t,n.end,e),f=e.line,p=1+u-e.lineStart;if(u>=i)return new o(y,i,i,f,p,n);var E=M.call(t,u);if(E<32&&9!==E&&10!==E&&13!==E)throw(0,m.syntaxError)(r,u,\"Cannot contain the invalid character \"+a(E)+\".\");switch(E){case 33:return new o(N,u,u+1,f,p,n);case 35:return l(r,u,f,p,n);case 36:return new o(I,u,u+1,f,p,n);case 40:return new o(O,u,u+1,f,p,n);case 41:return new o(_,u,u+1,f,p,n);case 46:if(46===M.call(t,u+1)&&46===M.call(t,u+2))return new o(h,u,u+3,f,p,n);break;case 58:return new o(A,u,u+1,f,p,n);case 61:return new o(D,u,u+1,f,p,n);case 64:return new o(g,u,u+1,f,p,n);case 91:return new o(b,u,u+1,f,p,n);case 93:return new o(L,u,u+1,f,p,n);case 123:return new o(S,u,u+1,f,p,n);case 124:return new o(C,u,u+1,f,p,n);case 125:return new o(R,u,u+1,f,p,n);case 65:case 66:case 67:case 68:case 69:case 70:case 71:case 72:case 73:case 74:case 75:case 76:case 77:case 78:case 79:case 80:case 81:case 82:case 83:case 84:case 85:case 86:case 87:case 88:case 89:case 90:case 95:case 97:case 98:case 99:case 100:case 101:case 102:case 103:case 104:case 105:case 106:case 107:case 108:case 109:case 110:case 111:case 112:case 113:case 114:case 115:case 116:case 117:case 118:case 119:case 120:case 121:case 122:return T(r,u,f,p,n);case 45:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return d(r,u,E,f,p,n);case 34:return v(r,u,f,p,n)}throw(0,m.syntaxError)(r,u,c(E))}function c(e){return 39===e?\"Unexpected single quote character ('), did you mean to use a double quote (\\\")?\":\"Cannot parse the unexpected character \"+a(e)+\".\"}function s(e,n,r){for(var t=e.length,i=n;i<t;){var o=M.call(e,i);if(9===o||32===o||44===o||65279===o)++i;else if(10===o)++i,++r.line,r.lineStart=i;else{if(13!==o)break;10===M.call(e,i+1)?i+=2:++i,++r.line,r.lineStart=i;}}return i}function l(e,n,r,t,i){var a=e.body,u=void 0,c=n;do{u=M.call(a,++c);}while(null!==u&&(u>31||9===u));return new o(j,n,c,r,t,i,V.call(a,n+1,c))}function d(e,n,r,t,i,u){var c=e.body,s=r,l=n,d=!1;if(45===s&&(s=M.call(c,++l)),48===s){if((s=M.call(c,++l))>=48&&s<=57)throw(0,m.syntaxError)(e,l,\"Invalid number, unexpected digit after 0: \"+a(s)+\".\")}else l=f(e,l,s),s=M.call(c,l);return 46===s&&(d=!0,s=M.call(c,++l),l=f(e,l,s),s=M.call(c,l)),69!==s&&101!==s||(d=!0,43!==(s=M.call(c,++l))&&45!==s||(s=M.call(c,++l)),l=f(e,l,s)),new o(d?F:K,n,l,t,i,u,V.call(c,n,l))}function f(e,n,r){var t=e.body,i=n,o=r;if(o>=48&&o<=57){do{o=M.call(t,++i);}while(o>=48&&o<=57);return i}throw(0,m.syntaxError)(e,i,\"Invalid number, expected digit but got: \"+a(o)+\".\")}function v(e,n,r,t,i){for(var u=e.body,c=n+1,s=c,l=0,d=\"\";c<u.length&&null!==(l=M.call(u,c))&&10!==l&&13!==l&&34!==l;){if(l<32&&9!==l)throw(0,m.syntaxError)(e,c,\"Invalid character within String: \"+a(l)+\".\");if(++c,92===l){switch(d+=V.call(u,s,c-1),l=M.call(u,c)){case 34:d+='\"';break;case 47:d+=\"/\";break;case 92:d+=\"\\\\\";break;case 98:d+=\"\\b\";break;case 102:d+=\"\\f\";break;case 110:d+=\"\\n\";break;case 114:d+=\"\\r\";break;case 116:d+=\"\\t\";break;case 117:var f=p(M.call(u,c+1),M.call(u,c+2),M.call(u,c+3),M.call(u,c+4));if(f<0)throw(0,m.syntaxError)(e,c,\"Invalid character escape sequence: \\\\u\"+u.slice(c+1,c+5)+\".\");d+=String.fromCharCode(f),c+=4;break;default:throw(0,m.syntaxError)(e,c,\"Invalid character escape sequence: \\\\\"+String.fromCharCode(l)+\".\")}s=++c;}}if(34!==l)throw(0,m.syntaxError)(e,c,\"Unterminated string.\");return d+=V.call(u,s,c),new o(w,n,c+1,r,t,i,d)}function p(e,n,r,t){return E(e)<<12|E(n)<<8|E(r)<<4|E(t)}function E(e){return e>=48&&e<=57?e-48:e>=65&&e<=70?e-55:e>=97&&e<=102?e-87:-1}function T(e,n,r,t,i){for(var a=e.body,u=a.length,c=n+1,s=0;c!==u&&null!==(s=M.call(a,c))&&(95===s||s>=48&&s<=57||s>=65&&s<=90||s>=97&&s<=122);)++c;return new o(P,n,c,r,t,i,V.call(a,n,c))}Object.defineProperty(n,\"__esModule\",{value:!0}),n.TokenKind=void 0,n.createLexer=r,n.getTokenDesc=i;var m=index$2,k=\"<SOF>\",y=\"<EOF>\",N=\"!\",I=\"$\",O=\"(\",_=\")\",h=\"...\",A=\":\",D=\"=\",g=\"@\",b=\"[\",L=\"]\",S=\"{\",C=\"|\",R=\"}\",P=\"Name\",K=\"Int\",F=\"Float\",w=\"String\",j=\"Comment\",M=(n.TokenKind={SOF:k,EOF:y,BANG:N,DOLLAR:I,PAREN_L:O,PAREN_R:_,SPREAD:h,COLON:A,EQUALS:D,AT:g,BRACKET_L:b,BRACKET_R:L,BRACE_L:S,PIPE:C,BRACE_R:R,NAME:P,INT:K,FLOAT:F,STRING:w,COMMENT:j},String.prototype.charCodeAt),V=String.prototype.slice;o.prototype.toJSON=o.prototype.inspect=function(){return{kind:this.kind,value:this.value,line:this.line,column:this.column}};}),source=createCommonjsModule$$1(function(e,n){function r(e,n){if(!(e instanceof n))throw new TypeError(\"Cannot call a class as a function\")}Object.defineProperty(n,\"__esModule\",{value:!0});n.Source=function e(n,t){r(this,e),this.body=n,this.name=t||\"GraphQL request\";};}),kinds=createCommonjsModule$$1(function(e,n){Object.defineProperty(n,\"__esModule\",{value:!0});n.NAME=\"Name\",n.DOCUMENT=\"Document\",n.OPERATION_DEFINITION=\"OperationDefinition\",n.VARIABLE_DEFINITION=\"VariableDefinition\",n.VARIABLE=\"Variable\",n.SELECTION_SET=\"SelectionSet\",n.FIELD=\"Field\",n.ARGUMENT=\"Argument\",n.FRAGMENT_SPREAD=\"FragmentSpread\",n.INLINE_FRAGMENT=\"InlineFragment\",n.FRAGMENT_DEFINITION=\"FragmentDefinition\",n.INT=\"IntValue\",n.FLOAT=\"FloatValue\",n.STRING=\"StringValue\",n.BOOLEAN=\"BooleanValue\",n.NULL=\"NullValue\",n.ENUM=\"EnumValue\",n.LIST=\"ListValue\",n.OBJECT=\"ObjectValue\",n.OBJECT_FIELD=\"ObjectField\",n.DIRECTIVE=\"Directive\",n.NAMED_TYPE=\"NamedType\",n.LIST_TYPE=\"ListType\",n.NON_NULL_TYPE=\"NonNullType\",n.SCHEMA_DEFINITION=\"SchemaDefinition\",n.OPERATION_TYPE_DEFINITION=\"OperationTypeDefinition\",n.SCALAR_TYPE_DEFINITION=\"ScalarTypeDefinition\",n.OBJECT_TYPE_DEFINITION=\"ObjectTypeDefinition\",n.FIELD_DEFINITION=\"FieldDefinition\",n.INPUT_VALUE_DEFINITION=\"InputValueDefinition\",n.INTERFACE_TYPE_DEFINITION=\"InterfaceTypeDefinition\",n.UNION_TYPE_DEFINITION=\"UnionTypeDefinition\",n.ENUM_TYPE_DEFINITION=\"EnumTypeDefinition\",n.ENUM_VALUE_DEFINITION=\"EnumValueDefinition\",n.INPUT_OBJECT_TYPE_DEFINITION=\"InputObjectTypeDefinition\",n.TYPE_EXTENSION_DEFINITION=\"TypeExtensionDefinition\",n.DIRECTIVE_DEFINITION=\"DirectiveDefinition\";}),parser=createCommonjsModule$$1(function(e,n){function r(e,n){var r=\"string\"==typeof e?new ie.Source(e):e;if(!(r instanceof ie.Source))throw new TypeError(\"Must provide Source. Received: \"+String(r));return a((0,ae.createLexer)(r,n||{}))}function t(e,n){var r=\"string\"==typeof e?new ie.Source(e):e,t=(0,ae.createLexer)(r,n||{});Z(t,ae.TokenKind.SOF);var i=I(t,!1);return Z(t,ae.TokenKind.EOF),i}function i(e,n){var r=\"string\"==typeof e?new ie.Source(e):e,t=(0,ae.createLexer)(r,n||{});Z(t,ae.TokenKind.SOF);var i=L(t);return Z(t,ae.TokenKind.EOF),i}function o(e){var n=Z(e,ae.TokenKind.NAME);return{kind:ue.NAME,value:n.value,loc:W(e,n)}}function a(e){var n=e.token;Z(e,ae.TokenKind.SOF);var r=[];do{r.push(u(e));}while(!z(e,ae.TokenKind.EOF));return{kind:ue.DOCUMENT,definitions:r,loc:W(e,n)}}function u(e){if(X(e,ae.TokenKind.BRACE_L))return c(e);if(X(e,ae.TokenKind.NAME))switch(e.token.value){case\"query\":case\"mutation\":case\"subscription\":return c(e);case\"fragment\":return y(e);case\"schema\":case\"scalar\":case\"type\":case\"interface\":case\"union\":case\"enum\":case\"input\":case\"extend\":case\"directive\":return C(e)}throw ne(e)}function c(e){var n=e.token;if(X(e,ae.TokenKind.BRACE_L))return{kind:ue.OPERATION_DEFINITION,operation:\"query\",name:null,variableDefinitions:null,directives:[],selectionSet:v(e),loc:W(e,n)};var r=s(e),t=void 0;return X(e,ae.TokenKind.NAME)&&(t=o(e)),{kind:ue.OPERATION_DEFINITION,operation:r,name:t,variableDefinitions:l(e),directives:g(e),selectionSet:v(e),loc:W(e,n)}}function s(e){var n=Z(e,ae.TokenKind.NAME);switch(n.value){case\"query\":return\"query\";case\"mutation\":return\"mutation\";case\"subscription\":return\"subscription\"}throw ne(e,n)}function l(e){return X(e,ae.TokenKind.PAREN_L)?te(e,ae.TokenKind.PAREN_L,d,ae.TokenKind.PAREN_R):[]}function d(e){var n=e.token;return{kind:ue.VARIABLE_DEFINITION,variable:f(e),type:(Z(e,ae.TokenKind.COLON),L(e)),defaultValue:z(e,ae.TokenKind.EQUALS)?I(e,!0):null,loc:W(e,n)}}function f(e){var n=e.token;return Z(e,ae.TokenKind.DOLLAR),{kind:ue.VARIABLE,name:o(e),loc:W(e,n)}}function v(e){var n=e.token;return{kind:ue.SELECTION_SET,selections:te(e,ae.TokenKind.BRACE_L,p,ae.TokenKind.BRACE_R),loc:W(e,n)}}function p(e){return X(e,ae.TokenKind.SPREAD)?k(e):E(e)}function E(e){var n=e.token,r=o(e),t=void 0,i=void 0;return z(e,ae.TokenKind.COLON)?(t=r,i=o(e)):(t=null,i=r),{kind:ue.FIELD,alias:t,name:i,arguments:T(e),directives:g(e),selectionSet:X(e,ae.TokenKind.BRACE_L)?v(e):null,loc:W(e,n)}}function T(e){return X(e,ae.TokenKind.PAREN_L)?te(e,ae.TokenKind.PAREN_L,m,ae.TokenKind.PAREN_R):[]}function m(e){var n=e.token;return{kind:ue.ARGUMENT,name:o(e),value:(Z(e,ae.TokenKind.COLON),I(e,!1)),loc:W(e,n)}}function k(e){var n=e.token;if(Z(e,ae.TokenKind.SPREAD),X(e,ae.TokenKind.NAME)&&\"on\"!==e.token.value)return{kind:ue.FRAGMENT_SPREAD,name:N(e),directives:g(e),loc:W(e,n)};var r=null;return\"on\"===e.token.value&&(e.advance(),r=S(e)),{kind:ue.INLINE_FRAGMENT,typeCondition:r,directives:g(e),selectionSet:v(e),loc:W(e,n)}}function y(e){var n=e.token;return ee(e,\"fragment\"),{kind:ue.FRAGMENT_DEFINITION,name:N(e),typeCondition:(ee(e,\"on\"),S(e)),directives:g(e),selectionSet:v(e),loc:W(e,n)}}function N(e){if(\"on\"===e.token.value)throw ne(e);return o(e)}function I(e,n){var r=e.token;switch(r.kind){case ae.TokenKind.BRACKET_L:return h(e,n);case ae.TokenKind.BRACE_L:return A(e,n);case ae.TokenKind.INT:return e.advance(),{kind:ue.INT,value:r.value,loc:W(e,r)};case ae.TokenKind.FLOAT:return e.advance(),{kind:ue.FLOAT,value:r.value,loc:W(e,r)};case ae.TokenKind.STRING:return e.advance(),{kind:ue.STRING,value:r.value,loc:W(e,r)};case ae.TokenKind.NAME:return\"true\"===r.value||\"false\"===r.value?(e.advance(),{kind:ue.BOOLEAN,value:\"true\"===r.value,loc:W(e,r)}):\"null\"===r.value?(e.advance(),{kind:ue.NULL,loc:W(e,r)}):(e.advance(),{kind:ue.ENUM,value:r.value,loc:W(e,r)});case ae.TokenKind.DOLLAR:if(!n)return f(e)}throw ne(e)}function O(e){return I(e,!0)}function _(e){return I(e,!1)}function h(e,n){var r=e.token,t=n?O:_;return{kind:ue.LIST,values:re(e,ae.TokenKind.BRACKET_L,t,ae.TokenKind.BRACKET_R),loc:W(e,r)}}function A(e,n){var r=e.token;Z(e,ae.TokenKind.BRACE_L);for(var t=[];!z(e,ae.TokenKind.BRACE_R);)t.push(D(e,n));return{kind:ue.OBJECT,fields:t,loc:W(e,r)}}function D(e,n){var r=e.token;return{kind:ue.OBJECT_FIELD,name:o(e),value:(Z(e,ae.TokenKind.COLON),I(e,n)),loc:W(e,r)}}function g(e){for(var n=[];X(e,ae.TokenKind.AT);)n.push(b(e));return n}function b(e){var n=e.token;return Z(e,ae.TokenKind.AT),{kind:ue.DIRECTIVE,name:o(e),arguments:T(e),loc:W(e,n)}}function L(e){var n=e.token,r=void 0;return z(e,ae.TokenKind.BRACKET_L)?(r=L(e),Z(e,ae.TokenKind.BRACKET_R),r={kind:ue.LIST_TYPE,type:r,loc:W(e,n)}):r=S(e),z(e,ae.TokenKind.BANG)?{kind:ue.NON_NULL_TYPE,type:r,loc:W(e,n)}:r}function S(e){var n=e.token;return{kind:ue.NAMED_TYPE,name:o(e),loc:W(e,n)}}function C(e){if(X(e,ae.TokenKind.NAME))switch(e.token.value){case\"schema\":return R(e);case\"scalar\":return K(e);case\"type\":return F(e);case\"interface\":return x(e);case\"union\":return B(e);case\"enum\":return G(e);case\"input\":return Q(e);case\"extend\":return J(e);case\"directive\":return q(e)}throw ne(e)}function R(e){var n=e.token;ee(e,\"schema\");var r=g(e),t=te(e,ae.TokenKind.BRACE_L,P,ae.TokenKind.BRACE_R);return{kind:ue.SCHEMA_DEFINITION,directives:r,operationTypes:t,loc:W(e,n)}}function P(e){var n=e.token,r=s(e);Z(e,ae.TokenKind.COLON);var t=S(e);return{kind:ue.OPERATION_TYPE_DEFINITION,operation:r,type:t,loc:W(e,n)}}function K(e){var n=e.token;ee(e,\"scalar\");var r=o(e),t=g(e);return{kind:ue.SCALAR_TYPE_DEFINITION,name:r,directives:t,loc:W(e,n)}}function F(e){var n=e.token;ee(e,\"type\");var r=o(e),t=w(e),i=g(e),a=re(e,ae.TokenKind.BRACE_L,j,ae.TokenKind.BRACE_R);return{kind:ue.OBJECT_TYPE_DEFINITION,name:r,interfaces:t,directives:i,fields:a,loc:W(e,n)}}function w(e){var n=[];if(\"implements\"===e.token.value){e.advance();do{n.push(S(e));}while(X(e,ae.TokenKind.NAME))}return n}function j(e){var n=e.token,r=o(e),t=M(e);Z(e,ae.TokenKind.COLON);var i=L(e),a=g(e);return{kind:ue.FIELD_DEFINITION,name:r,arguments:t,type:i,directives:a,loc:W(e,n)}}function M(e){return X(e,ae.TokenKind.PAREN_L)?te(e,ae.TokenKind.PAREN_L,V,ae.TokenKind.PAREN_R):[]}function V(e){var n=e.token,r=o(e);Z(e,ae.TokenKind.COLON);var t=L(e),i=null;z(e,ae.TokenKind.EQUALS)&&(i=O(e));var a=g(e);return{kind:ue.INPUT_VALUE_DEFINITION,name:r,type:t,defaultValue:i,directives:a,loc:W(e,n)}}function x(e){var n=e.token;ee(e,\"interface\");var r=o(e),t=g(e),i=re(e,ae.TokenKind.BRACE_L,j,ae.TokenKind.BRACE_R);return{kind:ue.INTERFACE_TYPE_DEFINITION,name:r,directives:t,fields:i,loc:W(e,n)}}function B(e){var n=e.token;ee(e,\"union\");var r=o(e),t=g(e);Z(e,ae.TokenKind.EQUALS);var i=U(e);return{kind:ue.UNION_TYPE_DEFINITION,name:r,directives:t,types:i,loc:W(e,n)}}function U(e){var n=[];do{n.push(S(e));}while(z(e,ae.TokenKind.PIPE));return n}function G(e){var n=e.token;ee(e,\"enum\");var r=o(e),t=g(e),i=te(e,ae.TokenKind.BRACE_L,Y,ae.TokenKind.BRACE_R);return{kind:ue.ENUM_TYPE_DEFINITION,name:r,directives:t,values:i,loc:W(e,n)}}function Y(e){var n=e.token,r=o(e),t=g(e);return{kind:ue.ENUM_VALUE_DEFINITION,name:r,directives:t,loc:W(e,n)}}function Q(e){var n=e.token;ee(e,\"input\");var r=o(e),t=g(e),i=re(e,ae.TokenKind.BRACE_L,V,ae.TokenKind.BRACE_R);return{kind:ue.INPUT_OBJECT_TYPE_DEFINITION,name:r,directives:t,fields:i,loc:W(e,n)}}function J(e){var n=e.token;ee(e,\"extend\");var r=F(e);return{kind:ue.TYPE_EXTENSION_DEFINITION,definition:r,loc:W(e,n)}}function q(e){var n=e.token;ee(e,\"directive\"),Z(e,ae.TokenKind.AT);var r=o(e),t=M(e);ee(e,\"on\");var i=$(e);return{kind:ue.DIRECTIVE_DEFINITION,name:r,arguments:t,locations:i,loc:W(e,n)}}function $(e){var n=[];do{n.push(o(e));}while(z(e,ae.TokenKind.PIPE));return n}function W(e,n){if(!e.options.noLocation)return new H(n,e.lastToken,e.source)}function H(e,n,r){this.start=e.start,this.end=n.end,this.startToken=e,this.endToken=n,this.source=r;}function X(e,n){return e.token.kind===n}function z(e,n){var r=e.token.kind===n;return r&&e.advance(),r}function Z(e,n){var r=e.token;if(r.kind===n)return e.advance(),r;throw(0,oe.syntaxError)(e.source,r.start,\"Expected \"+n+\", found \"+(0,ae.getTokenDesc)(r))}function ee(e,n){var r=e.token;if(r.kind===ae.TokenKind.NAME&&r.value===n)return e.advance(),r;throw(0,oe.syntaxError)(e.source,r.start,'Expected \"'+n+'\", found '+(0,ae.getTokenDesc)(r))}function ne(e,n){var r=n||e.token;return(0,oe.syntaxError)(e.source,r.start,\"Unexpected \"+(0,ae.getTokenDesc)(r))}function re(e,n,r,t){Z(e,n);for(var i=[];!z(e,t);)i.push(r(e));return i}function te(e,n,r,t){Z(e,n);for(var i=[r(e)];!z(e,t);)i.push(r(e));return i}Object.defineProperty(n,\"__esModule\",{value:!0}),n.parse=r,n.parseValue=t,n.parseType=i,n.parseConstValue=O,n.parseTypeReference=L,n.parseNamedType=S;var ie=source,oe=index$2,ae=lexer,ue=kinds;H.prototype.toJSON=H.prototype.inspect=function(){return{start:this.start,end:this.end}};}),visitor=createCommonjsModule$$1(function(e,n){function r(e,n,r){var i=r||u,o=void 0,s=Array.isArray(e),l=[e],d=-1,f=[],v=void 0,p=[],E=[],T=e;do{var m=++d===l.length,k=void 0,y=void 0,N=m&&0!==f.length;if(m){if(k=0===E.length?void 0:p.pop(),y=v,v=E.pop(),N){if(s)y=y.slice();else{var I={};for(var O in y)y.hasOwnProperty(O)&&(I[O]=y[O]);y=I;}for(var _=0,h=0;h<f.length;h++){var A=f[h][0],D=f[h][1];s&&(A-=_),s&&null===D?(y.splice(A,1),_++):y[A]=D;}}d=o.index,l=o.keys,f=o.edits,s=o.inArray,o=o.prev;}else{if(k=v?s?d:l[d]:void 0,null===(y=v?v[k]:T)||void 0===y)continue;v&&p.push(k);}var g=void 0;if(!Array.isArray(y)){if(!t(y))throw new Error(\"Invalid AST Node: \"+JSON.stringify(y));var b=a(n,y.kind,m);if(b){if((g=b.call(n,y,k,v,p,E))===c)break;if(!1===g){if(!m){p.pop();continue}}else if(void 0!==g&&(f.push([k,g]),!m)){if(!t(g)){p.pop();continue}y=g;}}}void 0===g&&N&&f.push([k,y]),m||(o={inArray:s,index:d,keys:l,edits:f,prev:o},l=(s=Array.isArray(y))?y:i[y.kind]||[],d=-1,f=[],v&&E.push(v),v=y);}while(void 0!==o);return 0!==f.length&&(T=f[f.length-1][1]),T}function t(e){return e&&\"string\"==typeof e.kind}function i(e){var n=new Array(e.length);return{enter:function(r){for(var t=0;t<e.length;t++)if(!n[t]){var i=a(e[t],r.kind,!1);if(i){var o=i.apply(e[t],arguments);if(!1===o)n[t]=r;else if(o===c)n[t]=c;else if(void 0!==o)return o}}},leave:function(r){for(var t=0;t<e.length;t++)if(n[t])n[t]===r&&(n[t]=null);else{var i=a(e[t],r.kind,!0);if(i){var o=i.apply(e[t],arguments);if(o===c)n[t]=c;else if(void 0!==o&&!1!==o)return o}}}}}function o(e,n){return{enter:function(r){e.enter(r);var i=a(n,r.kind,!1);if(i){var o=i.apply(n,arguments);return void 0!==o&&(e.leave(r),t(o)&&e.enter(o)),o}},leave:function(r){var t=a(n,r.kind,!0),i=void 0;return t&&(i=t.apply(n,arguments)),e.leave(r),i}}}function a(e,n,r){var t=e[n];if(t){if(!r&&\"function\"==typeof t)return t;var i=r?t.leave:t.enter;if(\"function\"==typeof i)return i}else{var o=r?e.leave:e.enter;if(o){if(\"function\"==typeof o)return o;var a=o[n];if(\"function\"==typeof a)return a}}}Object.defineProperty(n,\"__esModule\",{value:!0}),n.visit=r,n.visitInParallel=i,n.visitWithTypeInfo=o,n.getVisitFn=a;var u=n.QueryDocumentKeys={Name:[],Document:[\"definitions\"],OperationDefinition:[\"name\",\"variableDefinitions\",\"directives\",\"selectionSet\"],VariableDefinition:[\"variable\",\"type\",\"defaultValue\"],Variable:[\"name\"],SelectionSet:[\"selections\"],Field:[\"alias\",\"name\",\"arguments\",\"directives\",\"selectionSet\"],Argument:[\"name\",\"value\"],FragmentSpread:[\"name\",\"directives\"],InlineFragment:[\"typeCondition\",\"directives\",\"selectionSet\"],FragmentDefinition:[\"name\",\"typeCondition\",\"directives\",\"selectionSet\"],IntValue:[],FloatValue:[],StringValue:[],BooleanValue:[],NullValue:[],EnumValue:[],ListValue:[\"values\"],ObjectValue:[\"fields\"],ObjectField:[\"name\",\"value\"],Directive:[\"name\",\"arguments\"],NamedType:[\"name\"],ListType:[\"type\"],NonNullType:[\"type\"],SchemaDefinition:[\"directives\",\"operationTypes\"],OperationTypeDefinition:[\"type\"],ScalarTypeDefinition:[\"name\",\"directives\"],ObjectTypeDefinition:[\"name\",\"interfaces\",\"directives\",\"fields\"],FieldDefinition:[\"name\",\"arguments\",\"type\",\"directives\"],InputValueDefinition:[\"name\",\"type\",\"defaultValue\",\"directives\"],InterfaceTypeDefinition:[\"name\",\"directives\",\"fields\"],UnionTypeDefinition:[\"name\",\"directives\",\"types\"],EnumTypeDefinition:[\"name\",\"directives\",\"values\"],EnumValueDefinition:[\"name\",\"directives\"],InputObjectTypeDefinition:[\"name\",\"directives\",\"fields\"],TypeExtensionDefinition:[\"definition\"],DirectiveDefinition:[\"name\",\"arguments\",\"locations\"]},c=n.BREAK={};}),printer=createCommonjsModule$$1(function(e,n){function r(e){return(0,u.visit)(e,{leave:c})}function t(e,n){return e?e.filter(function(e){return e}).join(n||\"\"):\"\"}function i(e){return e&&0!==e.length?a(\"{\\n\"+t(e,\"\\n\"))+\"\\n}\":\"{}\"}function o(e,n,r){return n?e+n+(r||\"\"):\"\"}function a(e){return e&&e.replace(/\\n/g,\"\\n  \")}Object.defineProperty(n,\"__esModule\",{value:!0}),n.print=r;var u=visitor,c={Name:function(e){return e.value},Variable:function(e){return\"$\"+e.name},Document:function(e){return t(e.definitions,\"\\n\\n\")+\"\\n\"},OperationDefinition:function(e){var n=e.operation,r=e.name,i=o(\"(\",t(e.variableDefinitions,\", \"),\")\"),a=t(e.directives,\" \"),u=e.selectionSet;return r||a||i||\"query\"!==n?t([n,t([r,i]),a,u],\" \"):u},VariableDefinition:function(e){return e.variable+\": \"+e.type+o(\" = \",e.defaultValue)},SelectionSet:function(e){return i(e.selections)},Field:function(e){var n=e.alias,r=e.name,i=e.arguments,a=e.directives,u=e.selectionSet;return t([o(\"\",n,\": \")+r+o(\"(\",t(i,\", \"),\")\"),t(a,\" \"),u],\" \")},Argument:function(e){return e.name+\": \"+e.value},FragmentSpread:function(e){return\"...\"+e.name+o(\" \",t(e.directives,\" \"))},InlineFragment:function(e){var n=e.typeCondition,r=e.directives,i=e.selectionSet;return t([\"...\",o(\"on \",n),t(r,\" \"),i],\" \")},FragmentDefinition:function(e){var n=e.name,r=e.typeCondition,i=e.directives,a=e.selectionSet;return\"fragment \"+n+\" on \"+r+\" \"+o(\"\",t(i,\" \"),\" \")+a},IntValue:function(e){return e.value},FloatValue:function(e){return e.value},StringValue:function(e){var n=e.value;return JSON.stringify(n)},BooleanValue:function(e){var n=e.value;return JSON.stringify(n)},NullValue:function(){return\"null\"},EnumValue:function(e){return e.value},ListValue:function(e){return\"[\"+t(e.values,\", \")+\"]\"},ObjectValue:function(e){return\"{\"+t(e.fields,\", \")+\"}\"},ObjectField:function(e){return e.name+\": \"+e.value},Directive:function(e){return\"@\"+e.name+o(\"(\",t(e.arguments,\", \"),\")\")},NamedType:function(e){return e.name},ListType:function(e){return\"[\"+e.type+\"]\"},NonNullType:function(e){return e.type+\"!\"},SchemaDefinition:function(e){var n=e.directives,r=e.operationTypes;return t([\"schema\",t(n,\" \"),i(r)],\" \")},OperationTypeDefinition:function(e){return e.operation+\": \"+e.type},ScalarTypeDefinition:function(e){return t([\"scalar\",e.name,t(e.directives,\" \")],\" \")},ObjectTypeDefinition:function(e){var n=e.name,r=e.interfaces,a=e.directives,u=e.fields;return t([\"type\",n,o(\"implements \",t(r,\", \")),t(a,\" \"),i(u)],\" \")},FieldDefinition:function(e){var n=e.name,r=e.arguments,i=e.type,a=e.directives;return n+o(\"(\",t(r,\", \"),\")\")+\": \"+i+o(\" \",t(a,\" \"))},InputValueDefinition:function(e){var n=e.name,r=e.type,i=e.defaultValue,a=e.directives;return t([n+\": \"+r,o(\"= \",i),t(a,\" \")],\" \")},InterfaceTypeDefinition:function(e){var n=e.name,r=e.directives,o=e.fields;return t([\"interface\",n,t(r,\" \"),i(o)],\" \")},UnionTypeDefinition:function(e){var n=e.name,r=e.directives,i=e.types;return t([\"union\",n,t(r,\" \"),\"= \"+t(i,\" | \")],\" \")},EnumTypeDefinition:function(e){var n=e.name,r=e.directives,o=e.values;return t([\"enum\",n,t(r,\" \"),i(o)],\" \")},EnumValueDefinition:function(e){return t([e.name,t(e.directives,\" \")],\" \")},InputObjectTypeDefinition:function(e){var n=e.name,r=e.directives,o=e.fields;return t([\"input\",n,t(r,\" \"),i(o)],\" \")},TypeExtensionDefinition:function(e){return\"extend \"+e.definition},DirectiveDefinition:function(e){var n=e.name,r=e.arguments,i=e.locations;return\"directive @\"+n+o(\"(\",t(r,\", \"),\")\")+\" on \"+t(i,\" | \")}};}),index=createCommonjsModule$$1(function(e,n){Object.defineProperty(n,\"__esModule\",{value:!0}),n.BREAK=n.getVisitFn=n.visitWithTypeInfo=n.visitInParallel=n.visit=n.Source=n.print=n.parseType=n.parseValue=n.parse=n.TokenKind=n.createLexer=n.Kind=n.getLocation=void 0;var r=location;Object.defineProperty(n,\"getLocation\",{enumerable:!0,get:function(){return r.getLocation}});var t=lexer;Object.defineProperty(n,\"createLexer\",{enumerable:!0,get:function(){return t.createLexer}}),Object.defineProperty(n,\"TokenKind\",{enumerable:!0,get:function(){return t.TokenKind}});var i=parser;Object.defineProperty(n,\"parse\",{enumerable:!0,get:function(){return i.parse}}),Object.defineProperty(n,\"parseValue\",{enumerable:!0,get:function(){return i.parseValue}}),Object.defineProperty(n,\"parseType\",{enumerable:!0,get:function(){return i.parseType}});var o=printer;Object.defineProperty(n,\"print\",{enumerable:!0,get:function(){return o.print}});var a=source;Object.defineProperty(n,\"Source\",{enumerable:!0,get:function(){return a.Source}});var u=visitor;Object.defineProperty(n,\"visit\",{enumerable:!0,get:function(){return u.visit}}),Object.defineProperty(n,\"visitInParallel\",{enumerable:!0,get:function(){return u.visitInParallel}}),Object.defineProperty(n,\"visitWithTypeInfo\",{enumerable:!0,get:function(){return u.visitWithTypeInfo}}),Object.defineProperty(n,\"getVisitFn\",{enumerable:!0,get:function(){return u.getVisitFn}}),Object.defineProperty(n,\"BREAK\",{enumerable:!0,get:function(){return u.BREAK}});var c=function(e){if(e&&e.__esModule)return e;var n={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n.default=e,n}(kinds);n.Kind=c;});const createError=parserCreateError;var parserGraphql=parse;module.exports=parserGraphql;\n});\n\nvar parserGraphql = unwrapExports(parserGraphql_1);\n\nreturn parserGraphql;\n\n}());\n"
  },
  {
    "path": "website/static/lib/parser-json.js",
    "content": "var json = (function () {\nvar commonjsGlobal$1 = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction createError$1(e,t){const n=new SyntaxError(e+\" (\"+t.start.line+\":\"+t.start.column+\")\");return n.loc=t,n}function createCommonjsModule$$1(e,t){return t={exports:{}},e(t,t.exports),t.exports}function parse(e){const t=parse$1;try{const n=t(e);return toBabylon(n)}catch(e){const t=e.message.indexOf(\"\\n\"),n=e.message.slice(0,t),r=n.lastIndexOf(\" \"),o=n.slice(0,r),l=n.slice(r+1),a=l.split(\":\").map(Number);throw createError(\"(json-to-ast) \"+o,{start:{line:a[0],column:a[1]}})}}function toBabylon(e){const t={type:{object:\"ObjectExpression\",property:\"ObjectProperty\",identifier:\"json-identifier\",array:\"ArrayExpression\"}[e.type],start:e.loc.start.offset,end:e.loc.end.offset,loc:e.loc};switch(e.type){case\"object\":return Object.assign(t,{properties:e.children.map(toBabylon)});case\"property\":return Object.assign(t,{key:toBabylon(e.key),value:toBabylon(e.value)});case\"identifier\":return Object.assign(t,{value:e.value});case\"array\":return Object.assign(t,{elements:e.children.map(toBabylon)});case\"literal\":{const n={String:\"StringLiteral\",Number:\"NumericLiteral\",Boolean:\"BooleanLiteral\"},r=JSON.parse(e.rawValue),o=null===r?\"NullLiteral\":n[r.constructor.name];return Object.assign(t,{type:o,value:r,extra:{raw:e.rawValue}})}}}var parserCreateError=createError$1; var commonjsGlobal$$1=\"undefined\"!=typeof window?window:\"undefined\"!=typeof commonjsGlobal$1?commonjsGlobal$1:\"undefined\"!=typeof self?self:{}; var parse$1=createCommonjsModule$$1(function(e,t){!function(t,n){n(e);}(0,function(e){function t(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function n(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}function r(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t);}function o(e,t,n){return e.split(/\\n|\\r\\n?|\\f/)[t-1]+\"\\n\"+(new Array(n).join(\" \")+\"^\")}function l(e){return e>=\"1\"&&e<=\"9\"}function a(e){return e>=\"0\"&&e<=\"9\"}function c(e){return a(e)||e>=\"a\"&&e<=\"f\"||e>=\"A\"&&e<=\"F\"}function s(e){return\"e\"===e||\"E\"===e}function u(e,t,n,r){var o=e.charAt(t);if(\"\\r\"===o)t++,n++,r=1,\"\\n\"===e.charAt(t)&&t++;else if(\"\\n\"===o)t++,n++,r=1;else{if(\"\\t\"!==o&&\" \"!==o)return null;t++,r++;}return{index:t,line:n,column:r}}function i(e,t,n,r){var o=e.charAt(t);return o in x?{type:x[o],line:n,column:r+1,index:t+1,value:null}:null}function f(e,t,n,r){for(var o in S)if(S.hasOwnProperty(o)&&e.substr(t,o.length)===o){var l=S[o],a=l.type,c=l.value;return{type:a,line:n,column:r+o.length,index:t+o.length,value:c}}return null}function p(e,t,n,r){for(var o=t,l=\"\",a=N._START_;t<e.length;){var s=e.charAt(t);switch(a){case N._START_:if('\"'!==s)return null;a=N.START_QUOTE_OR_CHAR,t++;break;case N.START_QUOTE_OR_CHAR:if(\"\\\\\"===s)a=N.ESCAPE,l+=s,t++;else{if('\"'===s)return t++,{type:I.STRING,line:n,column:r+t-o,index:t,value:l};l+=s,t++;}break;case N.ESCAPE:if(!(s in k))return null;if(l+=s,t++,\"u\"===s)for(var u=0;u<4;u++){var i=e.charAt(t);if(!i||!c(i))return null;l+=i,t++;}a=N.START_QUOTE_OR_CHAR;}}}function T(e,t,n,r){var o=t,c=t,u=P._START_;e:for(;t<e.length;){var i=e.charAt(t);switch(u){case P._START_:if(\"-\"===i)u=P.MINUS;else if(\"0\"===i)c=t+1,u=P.ZERO;else{if(!l(i))return null;c=t+1,u=P.DIGIT;}break;case P.MINUS:if(\"0\"===i)c=t+1,u=P.ZERO;else{if(!l(i))return null;c=t+1,u=P.DIGIT;}break;case P.ZERO:if(\".\"===i)u=P.POINT;else{if(!s(i))break e;u=P.EXP;}break;case P.DIGIT:if(a(i))c=t+1;else if(\".\"===i)u=P.POINT;else{if(!s(i))break e;u=P.EXP;}break;case P.POINT:if(!a(i))break e;c=t+1,u=P.DIGIT_FRACTION;break;case P.DIGIT_FRACTION:if(a(i))c=t+1;else{if(!s(i))break e;u=P.EXP;}break;case P.EXP:if(\"+\"===i||\"-\"===i)u=P.EXP_DIGIT_OR_SIGN;else{if(!a(i))break e;c=t+1,u=P.EXP_DIGIT_OR_SIGN;}break;case P.EXP_DIGIT_OR_SIGN:if(!a(i))break e;c=t+1;}t++;}return c>0?{type:I.NUMBER,line:n,column:r+c-o,index:c,value:parseFloat(e.substring(o,c))}:null}function d(e,t){for(var n=1,r=1,o=0,l=[];o<e.length;){var a=[e,o,n,r],c=u.apply(void 0,a);if(c)o=c.index,n=c.line,r=c.column;else{var s=i.apply(void 0,a)||f.apply(void 0,a)||p.apply(void 0,a)||T.apply(void 0,a);if(s){var d={type:s.type,value:s.value,loc:b(n,r,o,s.line,s.column,s.index,t.source)};l.push(d),o=s.index,n=s.line,r=s.column;}else m(C.cannotTokenizeSymbol(e.charAt(o),n,r),e,n,r);}}return l}function v(e,t,n,r){for(var o=void 0,l={type:\"object\",children:[]},a=w._START_;n<t.length;){var c=t[n];switch(a){case w._START_:if(c.type!==I.LEFT_BRACE)return null;o=c,a=w.OPEN_OBJECT,n++;break;case w.OPEN_OBJECT:if(c.type===I.RIGHT_BRACE){if(r.verbose)return l.loc=b(o.loc.start.line,o.loc.start.column,o.loc.start.offset,c.loc.end.line,c.loc.end.column,c.loc.end.offset,r.source),{value:l,index:n+1}}else{var s=E(e,t,n,r);l.children.push(s.value),a=w.PROPERTY,n=s.index;}break;case w.PROPERTY:if(c.type===I.RIGHT_BRACE)return r.verbose&&(l.loc=b(o.loc.start.line,o.loc.start.column,o.loc.start.offset,c.loc.end.line,c.loc.end.column,c.loc.end.offset,r.source)),{value:l,index:n+1};c.type===I.COMMA?(a=w.COMMA,n++):m(h.unexpectedToken(e.substring(c.loc.start.offset,c.loc.end.offset),c.loc.start.line,c.loc.start.column),e,c.loc.start.line,c.loc.start.column);break;case w.COMMA:var u=E(e,t,n,r);u?(n=u.index,l.children.push(u.value),a=w.PROPERTY):m(h.unexpectedToken(e.substring(c.loc.start.offset,c.loc.end.offset),c.loc.start.line,c.loc.start.column),e,c.loc.start.line,c.loc.start.column);}}m(h.unexpectedEnd());}function E(e,t,n,r){for(var o=void 0,l={type:\"property\",key:null,value:null},a=w._START_;n<t.length;){var c=t[n];switch(a){case L._START_:if(c.type!==I.STRING)return null;var s={type:\"identifier\",value:c.value};r.verbose&&(s.loc=c.loc),o=c,l.key=s,a=L.KEY,n++;break;case L.KEY:c.type===I.COLON?(a=L.COLON,n++):m(h.unexpectedToken(e.substring(c.loc.start.offset,c.loc.end.offset),c.loc.start.line,c.loc.start.column),e,c.loc.start.line,c.loc.start.column);break;case L.COLON:var u=O(e,t,n,r);return l.value=u.value,r.verbose&&(l.loc=b(o.loc.start.line,o.loc.start.column,o.loc.start.offset,u.value.loc.end.line,u.value.loc.end.column,u.value.loc.end.offset,r.source)),{value:l,index:u.index}}}}function R(e,t,n,r){for(var o=void 0,l={type:\"array\",children:[]},a=M._START_,c=void 0;n<t.length;)switch(c=t[n],a){case M._START_:if(c.type!==I.LEFT_BRACKET)return null;o=c,a=M.OPEN_ARRAY,n++;break;case M.OPEN_ARRAY:if(c.type===I.RIGHT_BRACKET)return r.verbose&&(l.loc=b(o.loc.start.line,o.loc.start.column,o.loc.start.offset,c.loc.end.line,c.loc.end.column,c.loc.end.offset,r.source)),{value:l,index:n+1};var s=O(e,t,n,r);n=s.index,l.children.push(s.value),a=M.VALUE;break;case M.VALUE:if(c.type===I.RIGHT_BRACKET)return r.verbose&&(l.loc=b(o.loc.start.line,o.loc.start.column,o.loc.start.offset,c.loc.end.line,c.loc.end.column,c.loc.end.offset,r.source)),n++,{value:l,index:n};c.type===I.COMMA?(a=M.COMMA,n++):m(h.unexpectedToken(e.substring(c.loc.start.offset,c.loc.end.offset),c.loc.start.line,c.loc.start.column),e,c.loc.start.line,c.loc.start.column);break;case M.COMMA:var u=O(e,t,n,r);n=u.index,l.children.push(u.value),a=M.VALUE;}m(h.unexpectedEnd());}function _(e,t,n,r){var o=t[n];if(-1!==g.indexOf(o.type)){var l={type:\"literal\",value:o.value,rawValue:e.substring(o.loc.start.offset,o.loc.end.offset)};return r.verbose&&(l.loc=o.loc),{value:l,index:n+1}}return null}function O(e,t,n,r){var o=t[n],l=_.apply(void 0,arguments)||v.apply(void 0,arguments)||R.apply(void 0,arguments);if(l)return l;m(h.unexpectedToken(e.substring(o.loc.start.offset,o.loc.end.offset),o.loc.start.line,o.loc.start.column),e,o.loc.start.line,o.loc.start.column);}var y=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r]);}return e},b=function(e,t,n,r,o,l,a){return{start:{line:e,column:t,offset:n},end:{line:r,column:o,offset:l},source:a||null}},A=function(e){function l(e,r,a,c){t(this,l);var s=a?e+\"\\n\"+o(r,a,c):e,u=n(this,(l.__proto__||Object.getPrototypeOf(l)).call(this,s));return u.rawMessage=e,u}return r(l,e),l}(SyntaxError),m=function(e,t,n,r){throw new A(e,t,n,r)},h={unexpectedEnd:function(){return\"Unexpected end of JSON input\"},unexpectedToken:function(e,t,n){return\"Unexpected token <\"+e+\"> at \"+t+\":\"+n}},C={cannotTokenizeSymbol:function(e,t,n){return\"Cannot tokenize symbol <\"+e+\"> at \"+t+\":\"+n}},I={LEFT_BRACE:0,RIGHT_BRACE:1,LEFT_BRACKET:2,RIGHT_BRACKET:3,COLON:4,COMMA:5,STRING:6,NUMBER:7,TRUE:8,FALSE:9,NULL:10},x={\"{\":I.LEFT_BRACE,\"}\":I.RIGHT_BRACE,\"[\":I.LEFT_BRACKET,\"]\":I.RIGHT_BRACKET,\":\":I.COLON,\",\":I.COMMA},S={true:{type:I.TRUE,value:!0},false:{type:I.FALSE,value:!1},null:{type:I.NULL,value:null}},N={_START_:0,START_QUOTE_OR_CHAR:1,ESCAPE:2},k={'\"':0,\"\\\\\":1,\"/\":2,b:3,f:4,n:5,r:6,t:7,u:8},P={_START_:0,MINUS:1,ZERO:2,DIGIT:3,POINT:4,DIGIT_FRACTION:5,EXP:6,EXP_DIGIT_OR_SIGN:7},g=[I.STRING,I.NUMBER,I.TRUE,I.FALSE,I.NULL],w={_START_:0,OPEN_OBJECT:1,PROPERTY:2,COMMA:3},L={_START_:0,KEY:1,COLON:2},M={_START_:0,OPEN_ARRAY:1,VALUE:2,COMMA:3},B={verbose:!0,source:null},G=function(e,t){var n=d(e,t=y({},B,t));0===n.length&&m(h.unexpectedEnd());var r=O(e,n,0,t);if(r.index===n.length)return r.value;var o=n[r.index];m(h.unexpectedToken(e.substring(o.loc.start.offset,o.loc.end.offset),o.loc.start.line,o.loc.start.column),e,o.loc.start.line,o.loc.start.column);};e.exports=G;});});const createError=parserCreateError;var parserJson=parse;var parserJson_1=parserJson;\n\nreturn parserJson_1;\n\n}());\n"
  },
  {
    "path": "website/static/lib/parser-parse5.js",
    "content": "var parse5 = (function (stream,util) {\nstream = 'default' in stream ? stream['default'] : stream;\nutil = 'default' in util ? util['default'] : util;\n\nfunction _interopDefault$1(e){return e&&\"object\"==typeof e&&\"default\"in e?e.default:e}function createCommonjsModule(e,t){return t={exports:{}},e(t,t.exports),t.exports}function enquoteDoctypeId(e){var t=-1!==e.indexOf('\"')?\"'\":'\"';return t+e+t}function hasPrefix(e,t){for(var n=0;n<t.length;n++)if(0===e.indexOf(t[n]))return!0;return!1}function parse(e){const t=index;try{const n=!/^\\s*<(!doctype|html|head|body)/i.test(e),r=(n?t.parseFragment:t.parse)(e,{treeAdapter:t.treeAdapters.htmlparser2,locationInfo:!0});return extendAst(r)}catch(e){throw e}}function extendAst(e){if(!e||!e.children)return e;for(const t of e.children)extendAst(t),t.attribs&&(t.attributes=convertAttribs(t.attribs));return e}function convertAttribs(e){return Object.keys(e).map(t=>({type:\"attribute\",key:t,value:e[t]}))}var require$$0=_interopDefault$1(require$$0); var require$$1=_interopDefault$1(require$$1); var REPLACEMENT_CHARACTER=\"�\"; var CODE_POINTS={EOF:-1,NULL:0,TABULATION:9,CARRIAGE_RETURN:13,LINE_FEED:10,FORM_FEED:12,SPACE:32,EXCLAMATION_MARK:33,QUOTATION_MARK:34,NUMBER_SIGN:35,AMPERSAND:38,APOSTROPHE:39,HYPHEN_MINUS:45,SOLIDUS:47,DIGIT_0:48,DIGIT_9:57,SEMICOLON:59,LESS_THAN_SIGN:60,EQUALS_SIGN:61,GREATER_THAN_SIGN:62,QUESTION_MARK:63,LATIN_CAPITAL_A:65,LATIN_CAPITAL_F:70,LATIN_CAPITAL_X:88,LATIN_CAPITAL_Z:90,GRAVE_ACCENT:96,LATIN_SMALL_A:97,LATIN_SMALL_F:102,LATIN_SMALL_X:120,LATIN_SMALL_Z:122,REPLACEMENT_CHARACTER:65533}; var CODE_POINT_SEQUENCES={DASH_DASH_STRING:[45,45],DOCTYPE_STRING:[68,79,67,84,89,80,69],CDATA_START_STRING:[91,67,68,65,84,65,91],CDATA_END_STRING:[93,93,62],SCRIPT_STRING:[115,99,114,105,112,116],PUBLIC_STRING:[80,85,66,76,73,67],SYSTEM_STRING:[83,89,83,84,69,77]}; var unicode={REPLACEMENT_CHARACTER:REPLACEMENT_CHARACTER,CODE_POINTS:CODE_POINTS,CODE_POINT_SEQUENCES:CODE_POINT_SEQUENCES}; var preprocessor=createCommonjsModule(function(e){function t(e,t){return e>=55296&&e<=56319&&t>=56320&&t<=57343}function n(e,t){return 1024*(e-55296)+9216+t}var r=unicode.CODE_POINTS,i=e.exports=function(){this.html=null,this.pos=-1,this.lastGapPos=-1,this.lastCharPos=-1,this.droppedBufferSize=0,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=65536;};Object.defineProperty(i.prototype,\"sourcePos\",{get:function(){return this.droppedBufferSize+this.pos}}),i.prototype.dropParsedChunk=function(){this.pos>this.bufferWaterline&&(this.lastCharPos-=this.pos,this.droppedBufferSize+=this.pos,this.html=this.html.substring(this.pos),this.pos=0,this.lastGapPos=-1,this.gapStack=[]);},i.prototype._addGap=function(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos;},i.prototype._processHighRangeCodePoint=function(e){if(this.pos!==this.lastCharPos){var i=this.html.charCodeAt(this.pos+1);t(e,i)&&(this.pos++,e=n(e,i),this._addGap());}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,r.EOF;return e},i.prototype.write=function(e,t){this.html?this.html+=e:this.html=e,this.lastCharPos=this.html.length-1,this.endOfChunkHit=!1,this.lastChunkWritten=t;},i.prototype.insertHtmlAtCurrentPos=function(e){this.html=this.html.substring(0,this.pos+1)+e+this.html.substring(this.pos+1,this.html.length),this.lastCharPos=this.html.length-1,this.endOfChunkHit=!1;},i.prototype.advance=function(){if(++this.pos>this.lastCharPos)return this.lastChunkWritten||(this.endOfChunkHit=!0),r.EOF;var e=this.html.charCodeAt(this.pos);return this.skipNextNewLine&&e===r.LINE_FEED?(this.skipNextNewLine=!1,this._addGap(),this.advance()):e===r.CARRIAGE_RETURN?(this.skipNextNewLine=!0,r.LINE_FEED):(this.skipNextNewLine=!1,e>=55296?this._processHighRangeCodePoint(e):e)},i.prototype.retreat=function(){this.pos===this.lastGapPos&&(this.lastGapPos=this.gapStack.pop(),this.pos--),this.pos--;};}); var UNICODE=unicode; var $=UNICODE.CODE_POINTS; var assign=function(e){function t(e){e.location={line:s,col:i,startOffset:r,endOffset:-1};}var n=Object.getPrototypeOf(e),r=-1,i=-1,s=1,o=!1,T=0,a=-1,E=1;e._consume=function(){var e=n._consume.call(this);return o&&(o=!1,E++,T=this.preprocessor.sourcePos),e===$.LINE_FEED&&(o=!0),a=this.preprocessor.sourcePos-T+1,e},e._unconsume=function(){n._unconsume.call(this),o=!1,a=this.preprocessor.sourcePos-T+1;},e._createStartTagToken=function(){n._createStartTagToken.call(this),t(this.currentToken);},e._createEndTagToken=function(){n._createEndTagToken.call(this),t(this.currentToken);},e._createCommentToken=function(){n._createCommentToken.call(this),t(this.currentToken);},e._createDoctypeToken=function(e){n._createDoctypeToken.call(this,e),t(this.currentToken);},e._createCharacterToken=function(e,r){n._createCharacterToken.call(this,e,r),t(this.currentCharacterToken);},e._createAttr=function(e){n._createAttr.call(this,e),this.currentAttrLocation={line:E,col:a,startOffset:this.preprocessor.sourcePos,endOffset:-1};},e._leaveAttrName=function(e){n._leaveAttrName.call(this,e),this._attachCurrentAttrLocationInfo();},e._leaveAttrValue=function(e){n._leaveAttrValue.call(this,e),this._attachCurrentAttrLocationInfo();},e._attachCurrentAttrLocationInfo=function(){this.currentAttrLocation.endOffset=this.preprocessor.sourcePos,this.currentToken.location.attrs||(this.currentToken.location.attrs=Object.create(null)),this.currentToken.location.attrs[this.currentAttr.name]=this.currentAttrLocation;},e._emitCurrentToken=function(){this.currentCharacterToken&&(this.currentCharacterToken.location.endOffset=this.currentToken.location.startOffset),this.currentToken.location.endOffset=this.preprocessor.sourcePos+1,n._emitCurrentToken.call(this);},e._emitCurrentCharacterToken=function(){this.currentCharacterToken&&-1===this.currentCharacterToken.location.endOffset&&(this.currentCharacterToken.location.endOffset=this.preprocessor.sourcePos),n._emitCurrentCharacterToken.call(this);},Object.keys(n.MODE).map(function(e){return n.MODE[e]}).forEach(function(t){e[t]=function(e){r=this.preprocessor.sourcePos,s=E,i=a,n[t].call(this,e);};});}; var tokenizer_mixin={assign:assign}; var named_entity_data=new Uint16Array([4,52,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,106,303,412,810,1432,1701,1796,1987,2114,2360,2420,2484,3170,3251,4140,4393,4575,4610,5106,5512,5728,6117,6274,6315,6345,6427,6516,7002,7910,8733,9323,9870,10170,10631,10893,11318,11386,11467,12773,13092,14474,14922,15448,15542,16419,17666,18166,18611,19004,19095,19298,19397,4,16,69,77,97,98,99,102,103,108,109,110,111,112,114,115,116,117,140,150,158,169,176,194,199,210,216,222,226,242,256,266,283,294,108,105,103,5,198,1,59,148,1,198,80,5,38,1,59,156,1,38,99,117,116,101,5,193,1,59,167,1,193,114,101,118,101,59,1,258,4,2,105,121,182,191,114,99,5,194,1,59,189,1,194,59,1,1040,114,59,3,55349,56580,114,97,118,101,5,192,1,59,208,1,192,112,104,97,59,1,913,97,99,114,59,1,256,100,59,1,10835,4,2,103,112,232,237,111,110,59,1,260,102,59,3,55349,56632,112,108,121,70,117,110,99,116,105,111,110,59,1,8289,105,110,103,5,197,1,59,264,1,197,4,2,99,115,272,277,114,59,3,55349,56476,105,103,110,59,1,8788,105,108,100,101,5,195,1,59,292,1,195,109,108,5,196,1,59,301,1,196,4,8,97,99,101,102,111,114,115,117,321,350,354,383,388,394,400,405,4,2,99,114,327,336,107,115,108,97,115,104,59,1,8726,4,2,118,119,342,345,59,1,10983,101,100,59,1,8966,121,59,1,1041,4,3,99,114,116,362,369,379,97,117,115,101,59,1,8757,110,111,117,108,108,105,115,59,1,8492,97,59,1,914,114,59,3,55349,56581,112,102,59,3,55349,56633,101,118,101,59,1,728,99,114,59,1,8492,109,112,101,113,59,1,8782,4,14,72,79,97,99,100,101,102,104,105,108,111,114,115,117,442,447,456,504,542,547,569,573,577,616,678,784,790,796,99,121,59,1,1063,80,89,5,169,1,59,454,1,169,4,3,99,112,121,464,470,497,117,116,101,59,1,262,4,2,59,105,476,478,1,8914,116,97,108,68,105,102,102,101,114,101,110,116,105,97,108,68,59,1,8517,108,101,121,115,59,1,8493,4,4,97,101,105,111,514,520,530,535,114,111,110,59,1,268,100,105,108,5,199,1,59,528,1,199,114,99,59,1,264,110,105,110,116,59,1,8752,111,116,59,1,266,4,2,100,110,553,560,105,108,108,97,59,1,184,116,101,114,68,111,116,59,1,183,114,59,1,8493,105,59,1,935,114,99,108,101,4,4,68,77,80,84,591,596,603,609,111,116,59,1,8857,105,110,117,115,59,1,8854,108,117,115,59,1,8853,105,109,101,115,59,1,8855,111,4,2,99,115,623,646,107,119,105,115,101,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8754,101,67,117,114,108,121,4,2,68,81,658,671,111,117,98,108,101,81,117,111,116,101,59,1,8221,117,111,116,101,59,1,8217,4,4,108,110,112,117,688,701,736,753,111,110,4,2,59,101,696,698,1,8759,59,1,10868,4,3,103,105,116,709,717,722,114,117,101,110,116,59,1,8801,110,116,59,1,8751,111,117,114,73,110,116,101,103,114,97,108,59,1,8750,4,2,102,114,742,745,59,1,8450,111,100,117,99,116,59,1,8720,110,116,101,114,67,108,111,99,107,119,105,115,101,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8755,111,115,115,59,1,10799,99,114,59,3,55349,56478,112,4,2,59,67,803,805,1,8915,97,112,59,1,8781,4,11,68,74,83,90,97,99,101,102,105,111,115,834,850,855,860,865,888,903,916,921,1011,1415,4,2,59,111,840,842,1,8517,116,114,97,104,100,59,1,10513,99,121,59,1,1026,99,121,59,1,1029,99,121,59,1,1039,4,3,103,114,115,873,879,883,103,101,114,59,1,8225,114,59,1,8609,104,118,59,1,10980,4,2,97,121,894,900,114,111,110,59,1,270,59,1,1044,108,4,2,59,116,910,912,1,8711,97,59,1,916,114,59,3,55349,56583,4,2,97,102,927,998,4,2,99,109,933,992,114,105,116,105,99,97,108,4,4,65,68,71,84,950,957,978,985,99,117,116,101,59,1,180,111,4,2,116,117,964,967,59,1,729,98,108,101,65,99,117,116,101,59,1,733,114,97,118,101,59,1,96,105,108,100,101,59,1,732,111,110,100,59,1,8900,102,101,114,101,110,116,105,97,108,68,59,1,8518,4,4,112,116,117,119,1021,1026,1048,1249,102,59,3,55349,56635,4,3,59,68,69,1034,1036,1041,1,168,111,116,59,1,8412,113,117,97,108,59,1,8784,98,108,101,4,6,67,68,76,82,85,86,1065,1082,1101,1189,1211,1236,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8751,111,4,2,116,119,1089,1092,59,1,168,110,65,114,114,111,119,59,1,8659,4,2,101,111,1107,1141,102,116,4,3,65,82,84,1117,1124,1136,114,114,111,119,59,1,8656,105,103,104,116,65,114,114,111,119,59,1,8660,101,101,59,1,10980,110,103,4,2,76,82,1149,1177,101,102,116,4,2,65,82,1158,1165,114,114,111,119,59,1,10232,105,103,104,116,65,114,114,111,119,59,1,10234,105,103,104,116,65,114,114,111,119,59,1,10233,105,103,104,116,4,2,65,84,1199,1206,114,114,111,119,59,1,8658,101,101,59,1,8872,112,4,2,65,68,1218,1225,114,114,111,119,59,1,8657,111,119,110,65,114,114,111,119,59,1,8661,101,114,116,105,99,97,108,66,97,114,59,1,8741,110,4,6,65,66,76,82,84,97,1264,1292,1299,1352,1391,1408,114,114,111,119,4,3,59,66,85,1276,1278,1283,1,8595,97,114,59,1,10515,112,65,114,114,111,119,59,1,8693,114,101,118,101,59,1,785,101,102,116,4,3,82,84,86,1310,1323,1334,105,103,104,116,86,101,99,116,111,114,59,1,10576,101,101,86,101,99,116,111,114,59,1,10590,101,99,116,111,114,4,2,59,66,1345,1347,1,8637,97,114,59,1,10582,105,103,104,116,4,2,84,86,1362,1373,101,101,86,101,99,116,111,114,59,1,10591,101,99,116,111,114,4,2,59,66,1384,1386,1,8641,97,114,59,1,10583,101,101,4,2,59,65,1399,1401,1,8868,114,114,111,119,59,1,8615,114,114,111,119,59,1,8659,4,2,99,116,1421,1426,114,59,3,55349,56479,114,111,107,59,1,272,4,16,78,84,97,99,100,102,103,108,109,111,112,113,115,116,117,120,1466,1470,1478,1489,1515,1520,1525,1536,1544,1593,1609,1617,1650,1664,1668,1677,71,59,1,330,72,5,208,1,59,1476,1,208,99,117,116,101,5,201,1,59,1487,1,201,4,3,97,105,121,1497,1503,1512,114,111,110,59,1,282,114,99,5,202,1,59,1510,1,202,59,1,1069,111,116,59,1,278,114,59,3,55349,56584,114,97,118,101,5,200,1,59,1534,1,200,101,109,101,110,116,59,1,8712,4,2,97,112,1550,1555,99,114,59,1,274,116,121,4,2,83,86,1563,1576,109,97,108,108,83,113,117,97,114,101,59,1,9723,101,114,121,83,109,97,108,108,83,113,117,97,114,101,59,1,9643,4,2,103,112,1599,1604,111,110,59,1,280,102,59,3,55349,56636,115,105,108,111,110,59,1,917,117,4,2,97,105,1624,1640,108,4,2,59,84,1631,1633,1,10869,105,108,100,101,59,1,8770,108,105,98,114,105,117,109,59,1,8652,4,2,99,105,1656,1660,114,59,1,8496,109,59,1,10867,97,59,1,919,109,108,5,203,1,59,1675,1,203,4,2,105,112,1683,1689,115,116,115,59,1,8707,111,110,101,110,116,105,97,108,69,59,1,8519,4,5,99,102,105,111,115,1713,1717,1722,1762,1791,121,59,1,1060,114,59,3,55349,56585,108,108,101,100,4,2,83,86,1732,1745,109,97,108,108,83,113,117,97,114,101,59,1,9724,101,114,121,83,109,97,108,108,83,113,117,97,114,101,59,1,9642,4,3,112,114,117,1770,1775,1781,102,59,3,55349,56637,65,108,108,59,1,8704,114,105,101,114,116,114,102,59,1,8497,99,114,59,1,8497,4,12,74,84,97,98,99,100,102,103,111,114,115,116,1822,1827,1834,1848,1855,1877,1882,1887,1890,1896,1978,1984,99,121,59,1,1027,5,62,1,59,1832,1,62,109,109,97,4,2,59,100,1843,1845,1,915,59,1,988,114,101,118,101,59,1,286,4,3,101,105,121,1863,1869,1874,100,105,108,59,1,290,114,99,59,1,284,59,1,1043,111,116,59,1,288,114,59,3,55349,56586,59,1,8921,112,102,59,3,55349,56638,101,97,116,101,114,4,6,69,70,71,76,83,84,1915,1933,1944,1953,1959,1971,113,117,97,108,4,2,59,76,1925,1927,1,8805,101,115,115,59,1,8923,117,108,108,69,113,117,97,108,59,1,8807,114,101,97,116,101,114,59,1,10914,101,115,115,59,1,8823,108,97,110,116,69,113,117,97,108,59,1,10878,105,108,100,101,59,1,8819,99,114,59,3,55349,56482,59,1,8811,4,8,65,97,99,102,105,111,115,117,2005,2012,2026,2032,2036,2049,2073,2089,82,68,99,121,59,1,1066,4,2,99,116,2018,2023,101,107,59,1,711,59,1,94,105,114,99,59,1,292,114,59,1,8460,108,98,101,114,116,83,112,97,99,101,59,1,8459,4,2,112,114,2055,2059,102,59,1,8461,105,122,111,110,116,97,108,76,105,110,101,59,1,9472,4,2,99,116,2079,2083,114,59,1,8459,114,111,107,59,1,294,109,112,4,2,68,69,2097,2107,111,119,110,72,117,109,112,59,1,8782,113,117,97,108,59,1,8783,4,14,69,74,79,97,99,100,102,103,109,110,111,115,116,117,2144,2149,2155,2160,2171,2189,2194,2198,2209,2245,2307,2329,2334,2341,99,121,59,1,1045,108,105,103,59,1,306,99,121,59,1,1025,99,117,116,101,5,205,1,59,2169,1,205,4,2,105,121,2177,2186,114,99,5,206,1,59,2184,1,206,59,1,1048,111,116,59,1,304,114,59,1,8465,114,97,118,101,5,204,1,59,2207,1,204,4,3,59,97,112,2217,2219,2238,1,8465,4,2,99,103,2225,2229,114,59,1,298,105,110,97,114,121,73,59,1,8520,108,105,101,115,59,1,8658,4,2,116,118,2251,2281,4,2,59,101,2257,2259,1,8748,4,2,103,114,2265,2271,114,97,108,59,1,8747,115,101,99,116,105,111,110,59,1,8898,105,115,105,98,108,101,4,2,67,84,2293,2300,111,109,109,97,59,1,8291,105,109,101,115,59,1,8290,4,3,103,112,116,2315,2320,2325,111,110,59,1,302,102,59,3,55349,56640,97,59,1,921,99,114,59,1,8464,105,108,100,101,59,1,296,4,2,107,109,2347,2352,99,121,59,1,1030,108,5,207,1,59,2358,1,207,4,5,99,102,111,115,117,2372,2386,2391,2397,2414,4,2,105,121,2378,2383,114,99,59,1,308,59,1,1049,114,59,3,55349,56589,112,102,59,3,55349,56641,4,2,99,101,2403,2408,114,59,3,55349,56485,114,99,121,59,1,1032,107,99,121,59,1,1028,4,7,72,74,97,99,102,111,115,2436,2441,2446,2452,2467,2472,2478,99,121,59,1,1061,99,121,59,1,1036,112,112,97,59,1,922,4,2,101,121,2458,2464,100,105,108,59,1,310,59,1,1050,114,59,3,55349,56590,112,102,59,3,55349,56642,99,114,59,3,55349,56486,4,11,74,84,97,99,101,102,108,109,111,115,116,2508,2513,2520,2562,2585,2981,2986,3004,3011,3146,3167,99,121,59,1,1033,5,60,1,59,2518,1,60,4,5,99,109,110,112,114,2532,2538,2544,2548,2558,117,116,101,59,1,313,98,100,97,59,1,923,103,59,1,10218,108,97,99,101,116,114,102,59,1,8466,114,59,1,8606,4,3,97,101,121,2570,2576,2582,114,111,110,59,1,317,100,105,108,59,1,315,59,1,1051,4,2,102,115,2591,2907,116,4,10,65,67,68,70,82,84,85,86,97,114,2614,2663,2672,2728,2735,2760,2820,2870,2888,2895,4,2,110,114,2620,2633,103,108,101,66,114,97,99,107,101,116,59,1,10216,114,111,119,4,3,59,66,82,2644,2646,2651,1,8592,97,114,59,1,8676,105,103,104,116,65,114,114,111,119,59,1,8646,101,105,108,105,110,103,59,1,8968,111,4,2,117,119,2679,2692,98,108,101,66,114,97,99,107,101,116,59,1,10214,110,4,2,84,86,2699,2710,101,101,86,101,99,116,111,114,59,1,10593,101,99,116,111,114,4,2,59,66,2721,2723,1,8643,97,114,59,1,10585,108,111,111,114,59,1,8970,105,103,104,116,4,2,65,86,2745,2752,114,114,111,119,59,1,8596,101,99,116,111,114,59,1,10574,4,2,101,114,2766,2792,101,4,3,59,65,86,2775,2777,2784,1,8867,114,114,111,119,59,1,8612,101,99,116,111,114,59,1,10586,105,97,110,103,108,101,4,3,59,66,69,2806,2808,2813,1,8882,97,114,59,1,10703,113,117,97,108,59,1,8884,112,4,3,68,84,86,2829,2841,2852,111,119,110,86,101,99,116,111,114,59,1,10577,101,101,86,101,99,116,111,114,59,1,10592,101,99,116,111,114,4,2,59,66,2863,2865,1,8639,97,114,59,1,10584,101,99,116,111,114,4,2,59,66,2881,2883,1,8636,97,114,59,1,10578,114,114,111,119,59,1,8656,105,103,104,116,97,114,114,111,119,59,1,8660,115,4,6,69,70,71,76,83,84,2922,2936,2947,2956,2962,2974,113,117,97,108,71,114,101,97,116,101,114,59,1,8922,117,108,108,69,113,117,97,108,59,1,8806,114,101,97,116,101,114,59,1,8822,101,115,115,59,1,10913,108,97,110,116,69,113,117,97,108,59,1,10877,105,108,100,101,59,1,8818,114,59,3,55349,56591,4,2,59,101,2992,2994,1,8920,102,116,97,114,114,111,119,59,1,8666,105,100,111,116,59,1,319,4,3,110,112,119,3019,3110,3115,103,4,4,76,82,108,114,3030,3058,3070,3098,101,102,116,4,2,65,82,3039,3046,114,114,111,119,59,1,10229,105,103,104,116,65,114,114,111,119,59,1,10231,105,103,104,116,65,114,114,111,119,59,1,10230,101,102,116,4,2,97,114,3079,3086,114,114,111,119,59,1,10232,105,103,104,116,97,114,114,111,119,59,1,10234,105,103,104,116,97,114,114,111,119,59,1,10233,102,59,3,55349,56643,101,114,4,2,76,82,3123,3134,101,102,116,65,114,114,111,119,59,1,8601,105,103,104,116,65,114,114,111,119,59,1,8600,4,3,99,104,116,3154,3158,3161,114,59,1,8466,59,1,8624,114,111,107,59,1,321,59,1,8810,4,8,97,99,101,102,105,111,115,117,3188,3192,3196,3222,3227,3237,3243,3248,112,59,1,10501,121,59,1,1052,4,2,100,108,3202,3213,105,117,109,83,112,97,99,101,59,1,8287,108,105,110,116,114,102,59,1,8499,114,59,3,55349,56592,110,117,115,80,108,117,115,59,1,8723,112,102,59,3,55349,56644,99,114,59,1,8499,59,1,924,4,9,74,97,99,101,102,111,115,116,117,3271,3276,3283,3306,3422,3427,4120,4126,4137,99,121,59,1,1034,99,117,116,101,59,1,323,4,3,97,101,121,3291,3297,3303,114,111,110,59,1,327,100,105,108,59,1,325,59,1,1053,4,3,103,115,119,3314,3380,3415,97,116,105,118,101,4,3,77,84,86,3327,3340,3365,101,100,105,117,109,83,112,97,99,101,59,1,8203,104,105,4,2,99,110,3348,3357,107,83,112,97,99,101,59,1,8203,83,112,97,99,101,59,1,8203,101,114,121,84,104,105,110,83,112,97,99,101,59,1,8203,116,101,100,4,2,71,76,3389,3405,114,101,97,116,101,114,71,114,101,97,116,101,114,59,1,8811,101,115,115,76,101,115,115,59,1,8810,76,105,110,101,59,1,10,114,59,3,55349,56593,4,4,66,110,112,116,3437,3444,3460,3464,114,101,97,107,59,1,8288,66,114,101,97,107,105,110,103,83,112,97,99,101,59,1,160,102,59,1,8469,4,13,59,67,68,69,71,72,76,78,80,82,83,84,86,3492,3494,3517,3536,3578,3657,3685,3784,3823,3860,3915,4066,4107,1,10988,4,2,111,117,3500,3510,110,103,114,117,101,110,116,59,1,8802,112,67,97,112,59,1,8813,111,117,98,108,101,86,101,114,116,105,99,97,108,66,97,114,59,1,8742,4,3,108,113,120,3544,3552,3571,101,109,101,110,116,59,1,8713,117,97,108,4,2,59,84,3561,3563,1,8800,105,108,100,101,59,3,8770,824,105,115,116,115,59,1,8708,114,101,97,116,101,114,4,7,59,69,70,71,76,83,84,3600,3602,3609,3621,3631,3637,3650,1,8815,113,117,97,108,59,1,8817,117,108,108,69,113,117,97,108,59,3,8807,824,114,101,97,116,101,114,59,3,8811,824,101,115,115,59,1,8825,108,97,110,116,69,113,117,97,108,59,3,10878,824,105,108,100,101,59,1,8821,117,109,112,4,2,68,69,3666,3677,111,119,110,72,117,109,112,59,3,8782,824,113,117,97,108,59,3,8783,824,101,4,2,102,115,3692,3724,116,84,114,105,97,110,103,108,101,4,3,59,66,69,3709,3711,3717,1,8938,97,114,59,3,10703,824,113,117,97,108,59,1,8940,115,4,6,59,69,71,76,83,84,3739,3741,3748,3757,3764,3777,1,8814,113,117,97,108,59,1,8816,114,101,97,116,101,114,59,1,8824,101,115,115,59,3,8810,824,108,97,110,116,69,113,117,97,108,59,3,10877,824,105,108,100,101,59,1,8820,101,115,116,101,100,4,2,71,76,3795,3812,114,101,97,116,101,114,71,114,101,97,116,101,114,59,3,10914,824,101,115,115,76,101,115,115,59,3,10913,824,114,101,99,101,100,101,115,4,3,59,69,83,3838,3840,3848,1,8832,113,117,97,108,59,3,10927,824,108,97,110,116,69,113,117,97,108,59,1,8928,4,2,101,105,3866,3881,118,101,114,115,101,69,108,101,109,101,110,116,59,1,8716,103,104,116,84,114,105,97,110,103,108,101,4,3,59,66,69,3900,3902,3908,1,8939,97,114,59,3,10704,824,113,117,97,108,59,1,8941,4,2,113,117,3921,3973,117,97,114,101,83,117,4,2,98,112,3933,3952,115,101,116,4,2,59,69,3942,3945,3,8847,824,113,117,97,108,59,1,8930,101,114,115,101,116,4,2,59,69,3963,3966,3,8848,824,113,117,97,108,59,1,8931,4,3,98,99,112,3981,4e3,4045,115,101,116,4,2,59,69,3990,3993,3,8834,8402,113,117,97,108,59,1,8840,99,101,101,100,115,4,4,59,69,83,84,4015,4017,4025,4037,1,8833,113,117,97,108,59,3,10928,824,108,97,110,116,69,113,117,97,108,59,1,8929,105,108,100,101,59,3,8831,824,101,114,115,101,116,4,2,59,69,4056,4059,3,8835,8402,113,117,97,108,59,1,8841,105,108,100,101,4,4,59,69,70,84,4080,4082,4089,4100,1,8769,113,117,97,108,59,1,8772,117,108,108,69,113,117,97,108,59,1,8775,105,108,100,101,59,1,8777,101,114,116,105,99,97,108,66,97,114,59,1,8740,99,114,59,3,55349,56489,105,108,100,101,5,209,1,59,4135,1,209,59,1,925,4,14,69,97,99,100,102,103,109,111,112,114,115,116,117,118,4170,4176,4187,4205,4212,4217,4228,4253,4259,4292,4295,4316,4337,4346,108,105,103,59,1,338,99,117,116,101,5,211,1,59,4185,1,211,4,2,105,121,4193,4202,114,99,5,212,1,59,4200,1,212,59,1,1054,98,108,97,99,59,1,336,114,59,3,55349,56594,114,97,118,101,5,210,1,59,4226,1,210,4,3,97,101,105,4236,4241,4246,99,114,59,1,332,103,97,59,1,937,99,114,111,110,59,1,927,112,102,59,3,55349,56646,101,110,67,117,114,108,121,4,2,68,81,4272,4285,111,117,98,108,101,81,117,111,116,101,59,1,8220,117,111,116,101,59,1,8216,59,1,10836,4,2,99,108,4301,4306,114,59,3,55349,56490,97,115,104,5,216,1,59,4314,1,216,105,4,2,108,109,4323,4332,100,101,5,213,1,59,4330,1,213,101,115,59,1,10807,109,108,5,214,1,59,4344,1,214,101,114,4,2,66,80,4354,4380,4,2,97,114,4360,4364,114,59,1,8254,97,99,4,2,101,107,4372,4375,59,1,9182,101,116,59,1,9140,97,114,101,110,116,104,101,115,105,115,59,1,9180,4,9,97,99,102,104,105,108,111,114,115,4413,4422,4426,4431,4435,4438,4448,4471,4561,114,116,105,97,108,68,59,1,8706,121,59,1,1055,114,59,3,55349,56595,105,59,1,934,59,1,928,117,115,77,105,110,117,115,59,1,177,4,2,105,112,4454,4467,110,99,97,114,101,112,108,97,110,101,59,1,8460,102,59,1,8473,4,4,59,101,105,111,4481,4483,4526,4531,1,10939,99,101,100,101,115,4,4,59,69,83,84,4498,4500,4507,4519,1,8826,113,117,97,108,59,1,10927,108,97,110,116,69,113,117,97,108,59,1,8828,105,108,100,101,59,1,8830,109,101,59,1,8243,4,2,100,112,4537,4543,117,99,116,59,1,8719,111,114,116,105,111,110,4,2,59,97,4555,4557,1,8759,108,59,1,8733,4,2,99,105,4567,4572,114,59,3,55349,56491,59,1,936,4,4,85,102,111,115,4585,4594,4599,4604,79,84,5,34,1,59,4592,1,34,114,59,3,55349,56596,112,102,59,1,8474,99,114,59,3,55349,56492,4,12,66,69,97,99,101,102,104,105,111,114,115,117,4636,4642,4650,4681,4704,4763,4767,4771,5047,5069,5081,5094,97,114,114,59,1,10512,71,5,174,1,59,4648,1,174,4,3,99,110,114,4658,4664,4668,117,116,101,59,1,340,103,59,1,10219,114,4,2,59,116,4675,4677,1,8608,108,59,1,10518,4,3,97,101,121,4689,4695,4701,114,111,110,59,1,344,100,105,108,59,1,342,59,1,1056,4,2,59,118,4710,4712,1,8476,101,114,115,101,4,2,69,85,4722,4748,4,2,108,113,4728,4736,101,109,101,110,116,59,1,8715,117,105,108,105,98,114,105,117,109,59,1,8651,112,69,113,117,105,108,105,98,114,105,117,109,59,1,10607,114,59,1,8476,111,59,1,929,103,104,116,4,8,65,67,68,70,84,85,86,97,4792,4840,4849,4905,4912,4972,5022,5040,4,2,110,114,4798,4811,103,108,101,66,114,97,99,107,101,116,59,1,10217,114,111,119,4,3,59,66,76,4822,4824,4829,1,8594,97,114,59,1,8677,101,102,116,65,114,114,111,119,59,1,8644,101,105,108,105,110,103,59,1,8969,111,4,2,117,119,4856,4869,98,108,101,66,114,97,99,107,101,116,59,1,10215,110,4,2,84,86,4876,4887,101,101,86,101,99,116,111,114,59,1,10589,101,99,116,111,114,4,2,59,66,4898,4900,1,8642,97,114,59,1,10581,108,111,111,114,59,1,8971,4,2,101,114,4918,4944,101,4,3,59,65,86,4927,4929,4936,1,8866,114,114,111,119,59,1,8614,101,99,116,111,114,59,1,10587,105,97,110,103,108,101,4,3,59,66,69,4958,4960,4965,1,8883,97,114,59,1,10704,113,117,97,108,59,1,8885,112,4,3,68,84,86,4981,4993,5004,111,119,110,86,101,99,116,111,114,59,1,10575,101,101,86,101,99,116,111,114,59,1,10588,101,99,116,111,114,4,2,59,66,5015,5017,1,8638,97,114,59,1,10580,101,99,116,111,114,4,2,59,66,5033,5035,1,8640,97,114,59,1,10579,114,114,111,119,59,1,8658,4,2,112,117,5053,5057,102,59,1,8477,110,100,73,109,112,108,105,101,115,59,1,10608,105,103,104,116,97,114,114,111,119,59,1,8667,4,2,99,104,5087,5091,114,59,1,8475,59,1,8625,108,101,68,101,108,97,121,101,100,59,1,10740,4,13,72,79,97,99,102,104,105,109,111,113,115,116,117,5134,5150,5157,5164,5198,5203,5259,5265,5277,5283,5374,5380,5385,4,2,67,99,5140,5146,72,99,121,59,1,1065,121,59,1,1064,70,84,99,121,59,1,1068,99,117,116,101,59,1,346,4,5,59,97,101,105,121,5176,5178,5184,5190,5195,1,10940,114,111,110,59,1,352,100,105,108,59,1,350,114,99,59,1,348,59,1,1057,114,59,3,55349,56598,111,114,116,4,4,68,76,82,85,5216,5227,5238,5250,111,119,110,65,114,114,111,119,59,1,8595,101,102,116,65,114,114,111,119,59,1,8592,105,103,104,116,65,114,114,111,119,59,1,8594,112,65,114,114,111,119,59,1,8593,103,109,97,59,1,931,97,108,108,67,105,114,99,108,101,59,1,8728,112,102,59,3,55349,56650,4,2,114,117,5289,5293,116,59,1,8730,97,114,101,4,4,59,73,83,85,5306,5308,5322,5367,1,9633,110,116,101,114,115,101,99,116,105,111,110,59,1,8851,117,4,2,98,112,5329,5347,115,101,116,4,2,59,69,5338,5340,1,8847,113,117,97,108,59,1,8849,101,114,115,101,116,4,2,59,69,5358,5360,1,8848,113,117,97,108,59,1,8850,110,105,111,110,59,1,8852,99,114,59,3,55349,56494,97,114,59,1,8902,4,4,98,99,109,112,5395,5420,5475,5478,4,2,59,115,5401,5403,1,8912,101,116,4,2,59,69,5411,5413,1,8912,113,117,97,108,59,1,8838,4,2,99,104,5426,5468,101,101,100,115,4,4,59,69,83,84,5440,5442,5449,5461,1,8827,113,117,97,108,59,1,10928,108,97,110,116,69,113,117,97,108,59,1,8829,105,108,100,101,59,1,8831,84,104,97,116,59,1,8715,59,1,8721,4,3,59,101,115,5486,5488,5507,1,8913,114,115,101,116,4,2,59,69,5498,5500,1,8835,113,117,97,108,59,1,8839,101,116,59,1,8913,4,11,72,82,83,97,99,102,104,105,111,114,115,5536,5546,5552,5567,5579,5602,5607,5655,5695,5701,5711,79,82,78,5,222,1,59,5544,1,222,65,68,69,59,1,8482,4,2,72,99,5558,5563,99,121,59,1,1035,121,59,1,1062,4,2,98,117,5573,5576,59,1,9,59,1,932,4,3,97,101,121,5587,5593,5599,114,111,110,59,1,356,100,105,108,59,1,354,59,1,1058,114,59,3,55349,56599,4,2,101,105,5613,5631,4,2,114,116,5619,5627,101,102,111,114,101,59,1,8756,97,59,1,920,4,2,99,110,5637,5647,107,83,112,97,99,101,59,3,8287,8202,83,112,97,99,101,59,1,8201,108,100,101,4,4,59,69,70,84,5668,5670,5677,5688,1,8764,113,117,97,108,59,1,8771,117,108,108,69,113,117,97,108,59,1,8773,105,108,100,101,59,1,8776,112,102,59,3,55349,56651,105,112,108,101,68,111,116,59,1,8411,4,2,99,116,5717,5722,114,59,3,55349,56495,114,111,107,59,1,358,4,14,97,98,99,100,102,103,109,110,111,112,114,115,116,117,5758,5789,5805,5823,5830,5835,5846,5852,5921,5937,6089,6095,6101,6108,4,2,99,114,5764,5774,117,116,101,5,218,1,59,5772,1,218,114,4,2,59,111,5781,5783,1,8607,99,105,114,59,1,10569,114,4,2,99,101,5796,5800,121,59,1,1038,118,101,59,1,364,4,2,105,121,5811,5820,114,99,5,219,1,59,5818,1,219,59,1,1059,98,108,97,99,59,1,368,114,59,3,55349,56600,114,97,118,101,5,217,1,59,5844,1,217,97,99,114,59,1,362,4,2,100,105,5858,5905,101,114,4,2,66,80,5866,5892,4,2,97,114,5872,5876,114,59,1,95,97,99,4,2,101,107,5884,5887,59,1,9183,101,116,59,1,9141,97,114,101,110,116,104,101,115,105,115,59,1,9181,111,110,4,2,59,80,5913,5915,1,8899,108,117,115,59,1,8846,4,2,103,112,5927,5932,111,110,59,1,370,102,59,3,55349,56652,4,8,65,68,69,84,97,100,112,115,5955,5985,5996,6009,6026,6033,6044,6075,114,114,111,119,4,3,59,66,68,5967,5969,5974,1,8593,97,114,59,1,10514,111,119,110,65,114,114,111,119,59,1,8645,111,119,110,65,114,114,111,119,59,1,8597,113,117,105,108,105,98,114,105,117,109,59,1,10606,101,101,4,2,59,65,6017,6019,1,8869,114,114,111,119,59,1,8613,114,114,111,119,59,1,8657,111,119,110,97,114,114,111,119,59,1,8661,101,114,4,2,76,82,6052,6063,101,102,116,65,114,114,111,119,59,1,8598,105,103,104,116,65,114,114,111,119,59,1,8599,105,4,2,59,108,6082,6084,1,978,111,110,59,1,933,105,110,103,59,1,366,99,114,59,3,55349,56496,105,108,100,101,59,1,360,109,108,5,220,1,59,6115,1,220,4,9,68,98,99,100,101,102,111,115,118,6137,6143,6148,6152,6166,6250,6255,6261,6267,97,115,104,59,1,8875,97,114,59,1,10987,121,59,1,1042,97,115,104,4,2,59,108,6161,6163,1,8873,59,1,10982,4,2,101,114,6172,6175,59,1,8897,4,3,98,116,121,6183,6188,6238,97,114,59,1,8214,4,2,59,105,6194,6196,1,8214,99,97,108,4,4,66,76,83,84,6209,6214,6220,6231,97,114,59,1,8739,105,110,101,59,1,124,101,112,97,114,97,116,111,114,59,1,10072,105,108,100,101,59,1,8768,84,104,105,110,83,112,97,99,101,59,1,8202,114,59,3,55349,56601,112,102,59,3,55349,56653,99,114,59,3,55349,56497,100,97,115,104,59,1,8874,4,5,99,101,102,111,115,6286,6292,6298,6303,6309,105,114,99,59,1,372,100,103,101,59,1,8896,114,59,3,55349,56602,112,102,59,3,55349,56654,99,114,59,3,55349,56498,4,4,102,105,111,115,6325,6330,6333,6339,114,59,3,55349,56603,59,1,926,112,102,59,3,55349,56655,99,114,59,3,55349,56499,4,9,65,73,85,97,99,102,111,115,117,6365,6370,6375,6380,6391,6405,6410,6416,6422,99,121,59,1,1071,99,121,59,1,1031,99,121,59,1,1070,99,117,116,101,5,221,1,59,6389,1,221,4,2,105,121,6397,6402,114,99,59,1,374,59,1,1067,114,59,3,55349,56604,112,102,59,3,55349,56656,99,114,59,3,55349,56500,109,108,59,1,376,4,8,72,97,99,100,101,102,111,115,6445,6450,6457,6472,6477,6501,6505,6510,99,121,59,1,1046,99,117,116,101,59,1,377,4,2,97,121,6463,6469,114,111,110,59,1,381,59,1,1047,111,116,59,1,379,4,2,114,116,6483,6497,111,87,105,100,116,104,83,112,97,99,101,59,1,8203,97,59,1,918,114,59,1,8488,112,102,59,1,8484,99,114,59,3,55349,56501,4,16,97,98,99,101,102,103,108,109,110,111,112,114,115,116,117,119,6550,6561,6568,6612,6622,6634,6645,6672,6699,6854,6870,6923,6933,6963,6974,6983,99,117,116,101,5,225,1,59,6559,1,225,114,101,118,101,59,1,259,4,6,59,69,100,105,117,121,6582,6584,6588,6591,6600,6609,1,8766,59,3,8766,819,59,1,8767,114,99,5,226,1,59,6598,1,226,116,101,5,180,1,59,6607,1,180,59,1,1072,108,105,103,5,230,1,59,6620,1,230,4,2,59,114,6628,6630,1,8289,59,3,55349,56606,114,97,118,101,5,224,1,59,6643,1,224,4,2,101,112,6651,6667,4,2,102,112,6657,6663,115,121,109,59,1,8501,104,59,1,8501,104,97,59,1,945,4,2,97,112,6678,6692,4,2,99,108,6684,6688,114,59,1,257,103,59,1,10815,5,38,1,59,6697,1,38,4,2,100,103,6705,6737,4,5,59,97,100,115,118,6717,6719,6724,6727,6734,1,8743,110,100,59,1,10837,59,1,10844,108,111,112,101,59,1,10840,59,1,10842,4,7,59,101,108,109,114,115,122,6753,6755,6758,6762,6814,6835,6848,1,8736,59,1,10660,101,59,1,8736,115,100,4,2,59,97,6770,6772,1,8737,4,8,97,98,99,100,101,102,103,104,6790,6793,6796,6799,6802,6805,6808,6811,59,1,10664,59,1,10665,59,1,10666,59,1,10667,59,1,10668,59,1,10669,59,1,10670,59,1,10671,116,4,2,59,118,6821,6823,1,8735,98,4,2,59,100,6830,6832,1,8894,59,1,10653,4,2,112,116,6841,6845,104,59,1,8738,59,1,197,97,114,114,59,1,9084,4,2,103,112,6860,6865,111,110,59,1,261,102,59,3,55349,56658,4,7,59,69,97,101,105,111,112,6886,6888,6891,6897,6900,6904,6908,1,8776,59,1,10864,99,105,114,59,1,10863,59,1,8778,100,59,1,8779,115,59,1,39,114,111,120,4,2,59,101,6917,6919,1,8776,113,59,1,8778,105,110,103,5,229,1,59,6931,1,229,4,3,99,116,121,6941,6946,6949,114,59,3,55349,56502,59,1,42,109,112,4,2,59,101,6957,6959,1,8776,113,59,1,8781,105,108,100,101,5,227,1,59,6972,1,227,109,108,5,228,1,59,6981,1,228,4,2,99,105,6989,6997,111,110,105,110,116,59,1,8755,110,116,59,1,10769,4,16,78,97,98,99,100,101,102,105,107,108,110,111,112,114,115,117,7036,7041,7119,7135,7149,7155,7219,7224,7347,7354,7463,7489,7786,7793,7814,7866,111,116,59,1,10989,4,2,99,114,7047,7094,107,4,4,99,101,112,115,7058,7064,7073,7080,111,110,103,59,1,8780,112,115,105,108,111,110,59,1,1014,114,105,109,101,59,1,8245,105,109,4,2,59,101,7088,7090,1,8765,113,59,1,8909,4,2,118,119,7100,7105,101,101,59,1,8893,101,100,4,2,59,103,7113,7115,1,8965,101,59,1,8965,114,107,4,2,59,116,7127,7129,1,9141,98,114,107,59,1,9142,4,2,111,121,7141,7146,110,103,59,1,8780,59,1,1073,113,117,111,59,1,8222,4,5,99,109,112,114,116,7167,7181,7188,7193,7199,97,117,115,4,2,59,101,7176,7178,1,8757,59,1,8757,112,116,121,118,59,1,10672,115,105,59,1,1014,110,111,117,59,1,8492,4,3,97,104,119,7207,7210,7213,59,1,946,59,1,8502,101,101,110,59,1,8812,114,59,3,55349,56607,103,4,7,99,111,115,116,117,118,119,7241,7262,7288,7305,7328,7335,7340,4,3,97,105,117,7249,7253,7258,112,59,1,8898,114,99,59,1,9711,112,59,1,8899,4,3,100,112,116,7270,7275,7281,111,116,59,1,10752,108,117,115,59,1,10753,105,109,101,115,59,1,10754,4,2,113,116,7294,7300,99,117,112,59,1,10758,97,114,59,1,9733,114,105,97,110,103,108,101,4,2,100,117,7318,7324,111,119,110,59,1,9661,112,59,1,9651,112,108,117,115,59,1,10756,101,101,59,1,8897,101,100,103,101,59,1,8896,97,114,111,119,59,1,10509,4,3,97,107,111,7362,7436,7458,4,2,99,110,7368,7432,107,4,3,108,115,116,7377,7386,7394,111,122,101,110,103,101,59,1,10731,113,117,97,114,101,59,1,9642,114,105,97,110,103,108,101,4,4,59,100,108,114,7411,7413,7419,7425,1,9652,111,119,110,59,1,9662,101,102,116,59,1,9666,105,103,104,116,59,1,9656,107,59,1,9251,4,2,49,51,7442,7454,4,2,50,52,7448,7451,59,1,9618,59,1,9617,52,59,1,9619,99,107,59,1,9608,4,2,101,111,7469,7485,4,2,59,113,7475,7478,3,61,8421,117,105,118,59,3,8801,8421,116,59,1,8976,4,4,112,116,119,120,7499,7504,7517,7523,102,59,3,55349,56659,4,2,59,116,7510,7512,1,8869,111,109,59,1,8869,116,105,101,59,1,8904,4,12,68,72,85,86,98,100,104,109,112,116,117,118,7549,7571,7597,7619,7655,7660,7682,7708,7715,7721,7728,7750,4,4,76,82,108,114,7559,7562,7565,7568,59,1,9559,59,1,9556,59,1,9558,59,1,9555,4,5,59,68,85,100,117,7583,7585,7588,7591,7594,1,9552,59,1,9574,59,1,9577,59,1,9572,59,1,9575,4,4,76,82,108,114,7607,7610,7613,7616,59,1,9565,59,1,9562,59,1,9564,59,1,9561,4,7,59,72,76,82,104,108,114,7635,7637,7640,7643,7646,7649,7652,1,9553,59,1,9580,59,1,9571,59,1,9568,59,1,9579,59,1,9570,59,1,9567,111,120,59,1,10697,4,4,76,82,108,114,7670,7673,7676,7679,59,1,9557,59,1,9554,59,1,9488,59,1,9484,4,5,59,68,85,100,117,7694,7696,7699,7702,7705,1,9472,59,1,9573,59,1,9576,59,1,9516,59,1,9524,105,110,117,115,59,1,8863,108,117,115,59,1,8862,105,109,101,115,59,1,8864,4,4,76,82,108,114,7738,7741,7744,7747,59,1,9563,59,1,9560,59,1,9496,59,1,9492,4,7,59,72,76,82,104,108,114,7766,7768,7771,7774,7777,7780,7783,1,9474,59,1,9578,59,1,9569,59,1,9566,59,1,9532,59,1,9508,59,1,9500,114,105,109,101,59,1,8245,4,2,101,118,7799,7804,118,101,59,1,728,98,97,114,5,166,1,59,7812,1,166,4,4,99,101,105,111,7824,7829,7834,7846,114,59,3,55349,56503,109,105,59,1,8271,109,4,2,59,101,7841,7843,1,8765,59,1,8909,108,4,3,59,98,104,7855,7857,7860,1,92,59,1,10693,115,117,98,59,1,10184,4,2,108,109,7872,7885,108,4,2,59,101,7879,7881,1,8226,116,59,1,8226,112,4,3,59,69,101,7894,7896,7899,1,8782,59,1,10926,4,2,59,113,7905,7907,1,8783,59,1,8783,4,15,97,99,100,101,102,104,105,108,111,114,115,116,117,119,121,7942,8021,8075,8080,8121,8126,8157,8279,8295,8430,8446,8485,8491,8707,8726,4,3,99,112,114,7950,7956,8007,117,116,101,59,1,263,4,6,59,97,98,99,100,115,7970,7972,7977,7984,7998,8003,1,8745,110,100,59,1,10820,114,99,117,112,59,1,10825,4,2,97,117,7990,7994,112,59,1,10827,112,59,1,10823,111,116,59,1,10816,59,3,8745,65024,4,2,101,111,8013,8017,116,59,1,8257,110,59,1,711,4,4,97,101,105,117,8031,8046,8056,8061,4,2,112,114,8037,8041,115,59,1,10829,111,110,59,1,269,100,105,108,5,231,1,59,8054,1,231,114,99,59,1,265,112,115,4,2,59,115,8069,8071,1,10828,109,59,1,10832,111,116,59,1,267,4,3,100,109,110,8088,8097,8104,105,108,5,184,1,59,8095,1,184,112,116,121,118,59,1,10674,116,5,162,2,59,101,8112,8114,1,162,114,100,111,116,59,1,183,114,59,3,55349,56608,4,3,99,101,105,8134,8138,8154,121,59,1,1095,99,107,4,2,59,109,8146,8148,1,10003,97,114,107,59,1,10003,59,1,967,114,4,7,59,69,99,101,102,109,115,8174,8176,8179,8258,8261,8268,8273,1,9675,59,1,10691,4,3,59,101,108,8187,8189,8193,1,710,113,59,1,8791,101,4,2,97,100,8200,8223,114,114,111,119,4,2,108,114,8210,8216,101,102,116,59,1,8634,105,103,104,116,59,1,8635,4,5,82,83,97,99,100,8235,8238,8241,8246,8252,59,1,174,59,1,9416,115,116,59,1,8859,105,114,99,59,1,8858,97,115,104,59,1,8861,59,1,8791,110,105,110,116,59,1,10768,105,100,59,1,10991,99,105,114,59,1,10690,117,98,115,4,2,59,117,8288,8290,1,9827,105,116,59,1,9827,4,4,108,109,110,112,8305,8326,8376,8400,111,110,4,2,59,101,8313,8315,1,58,4,2,59,113,8321,8323,1,8788,59,1,8788,4,2,109,112,8332,8344,97,4,2,59,116,8339,8341,1,44,59,1,64,4,3,59,102,108,8352,8354,8358,1,8705,110,59,1,8728,101,4,2,109,120,8365,8371,101,110,116,59,1,8705,101,115,59,1,8450,4,2,103,105,8382,8395,4,2,59,100,8388,8390,1,8773,111,116,59,1,10861,110,116,59,1,8750,4,3,102,114,121,8408,8412,8417,59,3,55349,56660,111,100,59,1,8720,5,169,2,59,115,8424,8426,1,169,114,59,1,8471,4,2,97,111,8436,8441,114,114,59,1,8629,115,115,59,1,10007,4,2,99,117,8452,8457,114,59,3,55349,56504,4,2,98,112,8463,8474,4,2,59,101,8469,8471,1,10959,59,1,10961,4,2,59,101,8480,8482,1,10960,59,1,10962,100,111,116,59,1,8943,4,7,100,101,108,112,114,118,119,8507,8522,8536,8550,8600,8697,8702,97,114,114,4,2,108,114,8516,8519,59,1,10552,59,1,10549,4,2,112,115,8528,8532,114,59,1,8926,99,59,1,8927,97,114,114,4,2,59,112,8545,8547,1,8630,59,1,10557,4,6,59,98,99,100,111,115,8564,8566,8573,8587,8592,8596,1,8746,114,99,97,112,59,1,10824,4,2,97,117,8579,8583,112,59,1,10822,112,59,1,10826,111,116,59,1,8845,114,59,1,10821,59,3,8746,65024,4,4,97,108,114,118,8610,8623,8663,8672,114,114,4,2,59,109,8618,8620,1,8631,59,1,10556,121,4,3,101,118,119,8632,8651,8656,113,4,2,112,115,8639,8645,114,101,99,59,1,8926,117,99,99,59,1,8927,101,101,59,1,8910,101,100,103,101,59,1,8911,101,110,5,164,1,59,8670,1,164,101,97,114,114,111,119,4,2,108,114,8684,8690,101,102,116,59,1,8630,105,103,104,116,59,1,8631,101,101,59,1,8910,101,100,59,1,8911,4,2,99,105,8713,8721,111,110,105,110,116,59,1,8754,110,116,59,1,8753,108,99,116,121,59,1,9005,4,19,65,72,97,98,99,100,101,102,104,105,106,108,111,114,115,116,117,119,122,8773,8778,8783,8821,8839,8854,8887,8914,8930,8944,9036,9041,9058,9197,9227,9258,9281,9297,9305,114,114,59,1,8659,97,114,59,1,10597,4,4,103,108,114,115,8793,8799,8805,8809,103,101,114,59,1,8224,101,116,104,59,1,8504,114,59,1,8595,104,4,2,59,118,8816,8818,1,8208,59,1,8867,4,2,107,108,8827,8834,97,114,111,119,59,1,10511,97,99,59,1,733,4,2,97,121,8845,8851,114,111,110,59,1,271,59,1,1076,4,3,59,97,111,8862,8864,8880,1,8518,4,2,103,114,8870,8876,103,101,114,59,1,8225,114,59,1,8650,116,115,101,113,59,1,10871,4,3,103,108,109,8895,8902,8907,5,176,1,59,8900,1,176,116,97,59,1,948,112,116,121,118,59,1,10673,4,2,105,114,8920,8926,115,104,116,59,1,10623,59,3,55349,56609,97,114,4,2,108,114,8938,8941,59,1,8643,59,1,8642,4,5,97,101,103,115,118,8956,8986,8989,8996,9001,109,4,3,59,111,115,8965,8967,8983,1,8900,110,100,4,2,59,115,8975,8977,1,8900,117,105,116,59,1,9830,59,1,9830,59,1,168,97,109,109,97,59,1,989,105,110,59,1,8946,4,3,59,105,111,9009,9011,9031,1,247,100,101,5,247,2,59,111,9020,9022,1,247,110,116,105,109,101,115,59,1,8903,110,120,59,1,8903,99,121,59,1,1106,99,4,2,111,114,9048,9053,114,110,59,1,8990,111,112,59,1,8973,4,5,108,112,116,117,119,9070,9076,9081,9130,9144,108,97,114,59,1,36,102,59,3,55349,56661,4,5,59,101,109,112,115,9093,9095,9109,9116,9122,1,729,113,4,2,59,100,9102,9104,1,8784,111,116,59,1,8785,105,110,117,115,59,1,8760,108,117,115,59,1,8724,113,117,97,114,101,59,1,8865,98,108,101,98,97,114,119,101,100,103,101,59,1,8966,110,4,3,97,100,104,9153,9160,9172,114,114,111,119,59,1,8595,111,119,110,97,114,114,111,119,115,59,1,8650,97,114,112,111,111,110,4,2,108,114,9184,9190,101,102,116,59,1,8643,105,103,104,116,59,1,8642,4,2,98,99,9203,9211,107,97,114,111,119,59,1,10512,4,2,111,114,9217,9222,114,110,59,1,8991,111,112,59,1,8972,4,3,99,111,116,9235,9248,9252,4,2,114,121,9241,9245,59,3,55349,56505,59,1,1109,108,59,1,10742,114,111,107,59,1,273,4,2,100,114,9264,9269,111,116,59,1,8945,105,4,2,59,102,9276,9278,1,9663,59,1,9662,4,2,97,104,9287,9292,114,114,59,1,8693,97,114,59,1,10607,97,110,103,108,101,59,1,10662,4,2,99,105,9311,9315,121,59,1,1119,103,114,97,114,114,59,1,10239,4,18,68,97,99,100,101,102,103,108,109,110,111,112,113,114,115,116,117,120,9361,9376,9398,9439,9444,9447,9462,9495,9531,9585,9598,9614,9659,9755,9771,9792,9808,9826,4,2,68,111,9367,9372,111,116,59,1,10871,116,59,1,8785,4,2,99,115,9382,9392,117,116,101,5,233,1,59,9390,1,233,116,101,114,59,1,10862,4,4,97,105,111,121,9408,9414,9430,9436,114,111,110,59,1,283,114,4,2,59,99,9421,9423,1,8790,5,234,1,59,9428,1,234,108,111,110,59,1,8789,59,1,1101,111,116,59,1,279,59,1,8519,4,2,68,114,9453,9458,111,116,59,1,8786,59,3,55349,56610,4,3,59,114,115,9470,9472,9482,1,10906,97,118,101,5,232,1,59,9480,1,232,4,2,59,100,9488,9490,1,10902,111,116,59,1,10904,4,4,59,105,108,115,9505,9507,9515,9518,1,10905,110,116,101,114,115,59,1,9191,59,1,8467,4,2,59,100,9524,9526,1,10901,111,116,59,1,10903,4,3,97,112,115,9539,9544,9564,99,114,59,1,275,116,121,4,3,59,115,118,9554,9556,9561,1,8709,101,116,59,1,8709,59,1,8709,112,4,2,49,59,9571,9583,4,2,51,52,9577,9580,59,1,8196,59,1,8197,1,8195,4,2,103,115,9591,9594,59,1,331,112,59,1,8194,4,2,103,112,9604,9609,111,110,59,1,281,102,59,3,55349,56662,4,3,97,108,115,9622,9635,9640,114,4,2,59,115,9629,9631,1,8917,108,59,1,10723,117,115,59,1,10865,105,4,3,59,108,118,9649,9651,9656,1,949,111,110,59,1,949,59,1,1013,4,4,99,115,117,118,9669,9686,9716,9747,4,2,105,111,9675,9680,114,99,59,1,8790,108,111,110,59,1,8789,4,2,105,108,9692,9696,109,59,1,8770,97,110,116,4,2,103,108,9705,9710,116,114,59,1,10902,101,115,115,59,1,10901,4,3,97,101,105,9724,9729,9734,108,115,59,1,61,115,116,59,1,8799,118,4,2,59,68,9741,9743,1,8801,68,59,1,10872,112,97,114,115,108,59,1,10725,4,2,68,97,9761,9766,111,116,59,1,8787,114,114,59,1,10609,4,3,99,100,105,9779,9783,9788,114,59,1,8495,111,116,59,1,8784,109,59,1,8770,4,2,97,104,9798,9801,59,1,951,5,240,1,59,9806,1,240,4,2,109,114,9814,9822,108,5,235,1,59,9820,1,235,111,59,1,8364,4,3,99,105,112,9834,9838,9843,108,59,1,33,115,116,59,1,8707,4,2,101,111,9849,9859,99,116,97,116,105,111,110,59,1,8496,110,101,110,116,105,97,108,101,59,1,8519,4,12,97,99,101,102,105,106,108,110,111,112,114,115,9896,9910,9914,9921,9954,9960,9967,9989,9994,10027,10036,10164,108,108,105,110,103,100,111,116,115,101,113,59,1,8786,121,59,1,1092,109,97,108,101,59,1,9792,4,3,105,108,114,9929,9935,9950,108,105,103,59,1,64259,4,2,105,108,9941,9945,103,59,1,64256,105,103,59,1,64260,59,3,55349,56611,108,105,103,59,1,64257,108,105,103,59,3,102,106,4,3,97,108,116,9975,9979,9984,116,59,1,9837,105,103,59,1,64258,110,115,59,1,9649,111,102,59,1,402,4,2,112,114,1e4,10005,102,59,3,55349,56663,4,2,97,107,10011,10016,108,108,59,1,8704,4,2,59,118,10022,10024,1,8916,59,1,10969,97,114,116,105,110,116,59,1,10765,4,2,97,111,10042,10159,4,2,99,115,10048,10155,4,6,49,50,51,52,53,55,10062,10102,10114,10135,10139,10151,4,6,50,51,52,53,54,56,10076,10083,10086,10093,10096,10099,5,189,1,59,10081,1,189,59,1,8531,5,188,1,59,10091,1,188,59,1,8533,59,1,8537,59,1,8539,4,2,51,53,10108,10111,59,1,8532,59,1,8534,4,3,52,53,56,10122,10129,10132,5,190,1,59,10127,1,190,59,1,8535,59,1,8540,53,59,1,8536,4,2,54,56,10145,10148,59,1,8538,59,1,8541,56,59,1,8542,108,59,1,8260,119,110,59,1,8994,99,114,59,3,55349,56507,4,17,69,97,98,99,100,101,102,103,105,106,108,110,111,114,115,116,118,10206,10217,10247,10254,10268,10273,10358,10363,10374,10380,10385,10406,10458,10464,10470,10497,10610,4,2,59,108,10212,10214,1,8807,59,1,10892,4,3,99,109,112,10225,10231,10244,117,116,101,59,1,501,109,97,4,2,59,100,10239,10241,1,947,59,1,989,59,1,10886,114,101,118,101,59,1,287,4,2,105,121,10260,10265,114,99,59,1,285,59,1,1075,111,116,59,1,289,4,4,59,108,113,115,10283,10285,10288,10308,1,8805,59,1,8923,4,3,59,113,115,10296,10298,10301,1,8805,59,1,8807,108,97,110,116,59,1,10878,4,4,59,99,100,108,10318,10320,10324,10345,1,10878,99,59,1,10921,111,116,4,2,59,111,10332,10334,1,10880,4,2,59,108,10340,10342,1,10882,59,1,10884,4,2,59,101,10351,10354,3,8923,65024,115,59,1,10900,114,59,3,55349,56612,4,2,59,103,10369,10371,1,8811,59,1,8921,109,101,108,59,1,8503,99,121,59,1,1107,4,4,59,69,97,106,10395,10397,10400,10403,1,8823,59,1,10898,59,1,10917,59,1,10916,4,4,69,97,101,115,10416,10419,10434,10453,59,1,8809,112,4,2,59,112,10426,10428,1,10890,114,111,120,59,1,10890,4,2,59,113,10440,10442,1,10888,4,2,59,113,10448,10450,1,10888,59,1,8809,105,109,59,1,8935,112,102,59,3,55349,56664,97,118,101,59,1,96,4,2,99,105,10476,10480,114,59,1,8458,109,4,3,59,101,108,10489,10491,10494,1,8819,59,1,10894,59,1,10896,5,62,6,59,99,100,108,113,114,10512,10514,10527,10532,10538,10545,1,62,4,2,99,105,10520,10523,59,1,10919,114,59,1,10874,111,116,59,1,8919,80,97,114,59,1,10645,117,101,115,116,59,1,10876,4,5,97,100,101,108,115,10557,10574,10579,10599,10605,4,2,112,114,10563,10570,112,114,111,120,59,1,10886,114,59,1,10616,111,116,59,1,8919,113,4,2,108,113,10586,10592,101,115,115,59,1,8923,108,101,115,115,59,1,10892,101,115,115,59,1,8823,105,109,59,1,8819,4,2,101,110,10616,10626,114,116,110,101,113,113,59,3,8809,65024,69,59,3,8809,65024,4,10,65,97,98,99,101,102,107,111,115,121,10653,10658,10713,10718,10724,10760,10765,10786,10850,10875,114,114,59,1,8660,4,4,105,108,109,114,10668,10674,10678,10684,114,115,112,59,1,8202,102,59,1,189,105,108,116,59,1,8459,4,2,100,114,10690,10695,99,121,59,1,1098,4,3,59,99,119,10703,10705,10710,1,8596,105,114,59,1,10568,59,1,8621,97,114,59,1,8463,105,114,99,59,1,293,4,3,97,108,114,10732,10748,10754,114,116,115,4,2,59,117,10741,10743,1,9829,105,116,59,1,9829,108,105,112,59,1,8230,99,111,110,59,1,8889,114,59,3,55349,56613,115,4,2,101,119,10772,10779,97,114,111,119,59,1,10533,97,114,111,119,59,1,10534,4,5,97,109,111,112,114,10798,10803,10809,10839,10844,114,114,59,1,8703,116,104,116,59,1,8763,107,4,2,108,114,10816,10827,101,102,116,97,114,114,111,119,59,1,8617,105,103,104,116,97,114,114,111,119,59,1,8618,102,59,3,55349,56665,98,97,114,59,1,8213,4,3,99,108,116,10858,10863,10869,114,59,3,55349,56509,97,115,104,59,1,8463,114,111,107,59,1,295,4,2,98,112,10881,10887,117,108,108,59,1,8259,104,101,110,59,1,8208,4,15,97,99,101,102,103,105,106,109,110,111,112,113,115,116,117,10925,10936,10958,10977,10990,11001,11039,11045,11101,11192,11220,11226,11237,11285,11299,99,117,116,101,5,237,1,59,10934,1,237,4,3,59,105,121,10944,10946,10955,1,8291,114,99,5,238,1,59,10953,1,238,59,1,1080,4,2,99,120,10964,10968,121,59,1,1077,99,108,5,161,1,59,10975,1,161,4,2,102,114,10983,10986,59,1,8660,59,3,55349,56614,114,97,118,101,5,236,1,59,10999,1,236,4,4,59,105,110,111,11011,11013,11028,11034,1,8520,4,2,105,110,11019,11024,110,116,59,1,10764,116,59,1,8749,102,105,110,59,1,10716,116,97,59,1,8489,108,105,103,59,1,307,4,3,97,111,112,11053,11092,11096,4,3,99,103,116,11061,11065,11088,114,59,1,299,4,3,101,108,112,11073,11076,11082,59,1,8465,105,110,101,59,1,8464,97,114,116,59,1,8465,104,59,1,305,102,59,1,8887,101,100,59,1,437,4,5,59,99,102,111,116,11113,11115,11121,11136,11142,1,8712,97,114,101,59,1,8453,105,110,4,2,59,116,11129,11131,1,8734,105,101,59,1,10717,100,111,116,59,1,305,4,5,59,99,101,108,112,11154,11156,11161,11179,11186,1,8747,97,108,59,1,8890,4,2,103,114,11167,11173,101,114,115,59,1,8484,99,97,108,59,1,8890,97,114,104,107,59,1,10775,114,111,100,59,1,10812,4,4,99,103,112,116,11202,11206,11211,11216,121,59,1,1105,111,110,59,1,303,102,59,3,55349,56666,97,59,1,953,114,111,100,59,1,10812,117,101,115,116,5,191,1,59,11235,1,191,4,2,99,105,11243,11248,114,59,3,55349,56510,110,4,5,59,69,100,115,118,11261,11263,11266,11271,11282,1,8712,59,1,8953,111,116,59,1,8949,4,2,59,118,11277,11279,1,8948,59,1,8947,59,1,8712,4,2,59,105,11291,11293,1,8290,108,100,101,59,1,297,4,2,107,109,11305,11310,99,121,59,1,1110,108,5,239,1,59,11316,1,239,4,6,99,102,109,111,115,117,11332,11346,11351,11357,11363,11380,4,2,105,121,11338,11343,114,99,59,1,309,59,1,1081,114,59,3,55349,56615,97,116,104,59,1,567,112,102,59,3,55349,56667,4,2,99,101,11369,11374,114,59,3,55349,56511,114,99,121,59,1,1112,107,99,121,59,1,1108,4,8,97,99,102,103,104,106,111,115,11404,11418,11433,11438,11445,11450,11455,11461,112,112,97,4,2,59,118,11413,11415,1,954,59,1,1008,4,2,101,121,11424,11430,100,105,108,59,1,311,59,1,1082,114,59,3,55349,56616,114,101,101,110,59,1,312,99,121,59,1,1093,99,121,59,1,1116,112,102,59,3,55349,56668,99,114,59,3,55349,56512,4,23,65,66,69,72,97,98,99,100,101,102,103,104,106,108,109,110,111,112,114,115,116,117,118,11515,11538,11544,11555,11560,11721,11780,11818,11868,12136,12160,12171,12203,12208,12246,12275,12327,12509,12523,12569,12641,12732,12752,4,3,97,114,116,11523,11528,11532,114,114,59,1,8666,114,59,1,8656,97,105,108,59,1,10523,97,114,114,59,1,10510,4,2,59,103,11550,11552,1,8806,59,1,10891,97,114,59,1,10594,4,9,99,101,103,109,110,112,113,114,116,11580,11586,11594,11600,11606,11624,11627,11636,11694,117,116,101,59,1,314,109,112,116,121,118,59,1,10676,114,97,110,59,1,8466,98,100,97,59,1,955,103,4,3,59,100,108,11615,11617,11620,1,10216,59,1,10641,101,59,1,10216,59,1,10885,117,111,5,171,1,59,11634,1,171,114,4,8,59,98,102,104,108,112,115,116,11655,11657,11669,11673,11677,11681,11685,11690,1,8592,4,2,59,102,11663,11665,1,8676,115,59,1,10527,115,59,1,10525,107,59,1,8617,112,59,1,8619,108,59,1,10553,105,109,59,1,10611,108,59,1,8610,4,3,59,97,101,11702,11704,11709,1,10923,105,108,59,1,10521,4,2,59,115,11715,11717,1,10925,59,3,10925,65024,4,3,97,98,114,11729,11734,11739,114,114,59,1,10508,114,107,59,1,10098,4,2,97,107,11745,11758,99,4,2,101,107,11752,11755,59,1,123,59,1,91,4,2,101,115,11764,11767,59,1,10635,108,4,2,100,117,11774,11777,59,1,10639,59,1,10637,4,4,97,101,117,121,11790,11796,11811,11815,114,111,110,59,1,318,4,2,100,105,11802,11807,105,108,59,1,316,108,59,1,8968,98,59,1,123,59,1,1083,4,4,99,113,114,115,11828,11832,11845,11864,97,59,1,10550,117,111,4,2,59,114,11840,11842,1,8220,59,1,8222,4,2,100,117,11851,11857,104,97,114,59,1,10599,115,104,97,114,59,1,10571,104,59,1,8626,4,5,59,102,103,113,115,11880,11882,12008,12011,12031,1,8804,116,4,5,97,104,108,114,116,11895,11913,11935,11947,11996,114,114,111,119,4,2,59,116,11905,11907,1,8592,97,105,108,59,1,8610,97,114,112,111,111,110,4,2,100,117,11925,11931,111,119,110,59,1,8637,112,59,1,8636,101,102,116,97,114,114,111,119,115,59,1,8647,105,103,104,116,4,3,97,104,115,11959,11974,11984,114,114,111,119,4,2,59,115,11969,11971,1,8596,59,1,8646,97,114,112,111,111,110,115,59,1,8651,113,117,105,103,97,114,114,111,119,59,1,8621,104,114,101,101,116,105,109,101,115,59,1,8907,59,1,8922,4,3,59,113,115,12019,12021,12024,1,8804,59,1,8806,108,97,110,116,59,1,10877,4,5,59,99,100,103,115,12043,12045,12049,12070,12083,1,10877,99,59,1,10920,111,116,4,2,59,111,12057,12059,1,10879,4,2,59,114,12065,12067,1,10881,59,1,10883,4,2,59,101,12076,12079,3,8922,65024,115,59,1,10899,4,5,97,100,101,103,115,12095,12103,12108,12126,12131,112,112,114,111,120,59,1,10885,111,116,59,1,8918,113,4,2,103,113,12115,12120,116,114,59,1,8922,103,116,114,59,1,10891,116,114,59,1,8822,105,109,59,1,8818,4,3,105,108,114,12144,12150,12156,115,104,116,59,1,10620,111,111,114,59,1,8970,59,3,55349,56617,4,2,59,69,12166,12168,1,8822,59,1,10897,4,2,97,98,12177,12198,114,4,2,100,117,12184,12187,59,1,8637,4,2,59,108,12193,12195,1,8636,59,1,10602,108,107,59,1,9604,99,121,59,1,1113,4,5,59,97,99,104,116,12220,12222,12227,12235,12241,1,8810,114,114,59,1,8647,111,114,110,101,114,59,1,8990,97,114,100,59,1,10603,114,105,59,1,9722,4,2,105,111,12252,12258,100,111,116,59,1,320,117,115,116,4,2,59,97,12267,12269,1,9136,99,104,101,59,1,9136,4,4,69,97,101,115,12285,12288,12303,12322,59,1,8808,112,4,2,59,112,12295,12297,1,10889,114,111,120,59,1,10889,4,2,59,113,12309,12311,1,10887,4,2,59,113,12317,12319,1,10887,59,1,8808,105,109,59,1,8934,4,8,97,98,110,111,112,116,119,122,12345,12359,12364,12421,12446,12467,12474,12490,4,2,110,114,12351,12355,103,59,1,10220,114,59,1,8701,114,107,59,1,10214,103,4,3,108,109,114,12373,12401,12409,101,102,116,4,2,97,114,12382,12389,114,114,111,119,59,1,10229,105,103,104,116,97,114,114,111,119,59,1,10231,97,112,115,116,111,59,1,10236,105,103,104,116,97,114,114,111,119,59,1,10230,112,97,114,114,111,119,4,2,108,114,12433,12439,101,102,116,59,1,8619,105,103,104,116,59,1,8620,4,3,97,102,108,12454,12458,12462,114,59,1,10629,59,3,55349,56669,117,115,59,1,10797,105,109,101,115,59,1,10804,4,2,97,98,12480,12485,115,116,59,1,8727,97,114,59,1,95,4,3,59,101,102,12498,12500,12506,1,9674,110,103,101,59,1,9674,59,1,10731,97,114,4,2,59,108,12517,12519,1,40,116,59,1,10643,4,5,97,99,104,109,116,12535,12540,12548,12561,12564,114,114,59,1,8646,111,114,110,101,114,59,1,8991,97,114,4,2,59,100,12556,12558,1,8651,59,1,10605,59,1,8206,114,105,59,1,8895,4,6,97,99,104,105,113,116,12583,12589,12594,12597,12614,12635,113,117,111,59,1,8249,114,59,3,55349,56513,59,1,8624,109,4,3,59,101,103,12606,12608,12611,1,8818,59,1,10893,59,1,10895,4,2,98,117,12620,12623,59,1,91,111,4,2,59,114,12630,12632,1,8216,59,1,8218,114,111,107,59,1,322,5,60,8,59,99,100,104,105,108,113,114,12660,12662,12675,12680,12686,12692,12698,12705,1,60,4,2,99,105,12668,12671,59,1,10918,114,59,1,10873,111,116,59,1,8918,114,101,101,59,1,8907,109,101,115,59,1,8905,97,114,114,59,1,10614,117,101,115,116,59,1,10875,4,2,80,105,12711,12716,97,114,59,1,10646,4,3,59,101,102,12724,12726,12729,1,9667,59,1,8884,59,1,9666,114,4,2,100,117,12739,12746,115,104,97,114,59,1,10570,104,97,114,59,1,10598,4,2,101,110,12758,12768,114,116,110,101,113,113,59,3,8808,65024,69,59,3,8808,65024,4,14,68,97,99,100,101,102,104,105,108,110,111,112,115,117,12803,12809,12893,12908,12914,12928,12933,12937,13011,13025,13032,13049,13052,13069,68,111,116,59,1,8762,4,4,99,108,112,114,12819,12827,12849,12887,114,5,175,1,59,12825,1,175,4,2,101,116,12833,12836,59,1,9794,4,2,59,101,12842,12844,1,10016,115,101,59,1,10016,4,2,59,115,12855,12857,1,8614,116,111,4,4,59,100,108,117,12869,12871,12877,12883,1,8614,111,119,110,59,1,8615,101,102,116,59,1,8612,112,59,1,8613,107,101,114,59,1,9646,4,2,111,121,12899,12905,109,109,97,59,1,10793,59,1,1084,97,115,104,59,1,8212,97,115,117,114,101,100,97,110,103,108,101,59,1,8737,114,59,3,55349,56618,111,59,1,8487,4,3,99,100,110,12945,12954,12985,114,111,5,181,1,59,12952,1,181,4,4,59,97,99,100,12964,12966,12971,12976,1,8739,115,116,59,1,42,105,114,59,1,10992,111,116,5,183,1,59,12983,1,183,117,115,4,3,59,98,100,12995,12997,13e3,1,8722,59,1,8863,4,2,59,117,13006,13008,1,8760,59,1,10794,4,2,99,100,13017,13021,112,59,1,10971,114,59,1,8230,112,108,117,115,59,1,8723,4,2,100,112,13038,13044,101,108,115,59,1,8871,102,59,3,55349,56670,59,1,8723,4,2,99,116,13058,13063,114,59,3,55349,56514,112,111,115,59,1,8766,4,3,59,108,109,13077,13079,13087,1,956,116,105,109,97,112,59,1,8888,97,112,59,1,8888,4,24,71,76,82,86,97,98,99,100,101,102,103,104,105,106,108,109,111,112,114,115,116,117,118,119,13142,13165,13217,13229,13247,13330,13359,13414,13420,13508,13513,13579,13602,13626,13631,13762,13767,13855,13936,13995,14214,14285,14312,14432,4,2,103,116,13148,13152,59,3,8921,824,4,2,59,118,13158,13161,3,8811,8402,59,3,8811,824,4,3,101,108,116,13173,13200,13204,102,116,4,2,97,114,13181,13188,114,114,111,119,59,1,8653,105,103,104,116,97,114,114,111,119,59,1,8654,59,3,8920,824,4,2,59,118,13210,13213,3,8810,8402,59,3,8810,824,105,103,104,116,97,114,114,111,119,59,1,8655,4,2,68,100,13235,13241,97,115,104,59,1,8879,97,115,104,59,1,8878,4,5,98,99,110,112,116,13259,13264,13270,13275,13308,108,97,59,1,8711,117,116,101,59,1,324,103,59,3,8736,8402,4,5,59,69,105,111,112,13287,13289,13293,13298,13302,1,8777,59,3,10864,824,100,59,3,8779,824,115,59,1,329,114,111,120,59,1,8777,117,114,4,2,59,97,13316,13318,1,9838,108,4,2,59,115,13325,13327,1,9838,59,1,8469,4,2,115,117,13336,13344,112,5,160,1,59,13342,1,160,109,112,4,2,59,101,13352,13355,3,8782,824,59,3,8783,824,4,5,97,101,111,117,121,13371,13385,13391,13407,13411,4,2,112,114,13377,13380,59,1,10819,111,110,59,1,328,100,105,108,59,1,326,110,103,4,2,59,100,13399,13401,1,8775,111,116,59,3,10861,824,112,59,1,10818,59,1,1085,97,115,104,59,1,8211,4,7,59,65,97,100,113,115,120,13436,13438,13443,13466,13472,13478,13494,1,8800,114,114,59,1,8663,114,4,2,104,114,13450,13454,107,59,1,10532,4,2,59,111,13460,13462,1,8599,119,59,1,8599,111,116,59,3,8784,824,117,105,118,59,1,8802,4,2,101,105,13484,13489,97,114,59,1,10536,109,59,3,8770,824,105,115,116,4,2,59,115,13503,13505,1,8708,59,1,8708,114,59,3,55349,56619,4,4,69,101,115,116,13523,13527,13563,13568,59,3,8807,824,4,3,59,113,115,13535,13537,13559,1,8817,4,3,59,113,115,13545,13547,13551,1,8817,59,3,8807,824,108,97,110,116,59,3,10878,824,59,3,10878,824,105,109,59,1,8821,4,2,59,114,13574,13576,1,8815,59,1,8815,4,3,65,97,112,13587,13592,13597,114,114,59,1,8654,114,114,59,1,8622,97,114,59,1,10994,4,3,59,115,118,13610,13612,13623,1,8715,4,2,59,100,13618,13620,1,8956,59,1,8954,59,1,8715,99,121,59,1,1114,4,7,65,69,97,100,101,115,116,13647,13652,13656,13661,13665,13737,13742,114,114,59,1,8653,59,3,8806,824,114,114,59,1,8602,114,59,1,8229,4,4,59,102,113,115,13675,13677,13703,13725,1,8816,116,4,2,97,114,13684,13691,114,114,111,119,59,1,8602,105,103,104,116,97,114,114,111,119,59,1,8622,4,3,59,113,115,13711,13713,13717,1,8816,59,3,8806,824,108,97,110,116,59,3,10877,824,4,2,59,115,13731,13734,3,10877,824,59,1,8814,105,109,59,1,8820,4,2,59,114,13748,13750,1,8814,105,4,2,59,101,13757,13759,1,8938,59,1,8940,105,100,59,1,8740,4,2,112,116,13773,13778,102,59,3,55349,56671,5,172,3,59,105,110,13787,13789,13829,1,172,110,4,4,59,69,100,118,13800,13802,13806,13812,1,8713,59,3,8953,824,111,116,59,3,8949,824,4,3,97,98,99,13820,13823,13826,59,1,8713,59,1,8951,59,1,8950,105,4,2,59,118,13836,13838,1,8716,4,3,97,98,99,13846,13849,13852,59,1,8716,59,1,8958,59,1,8957,4,3,97,111,114,13863,13892,13899,114,4,4,59,97,115,116,13874,13876,13883,13888,1,8742,108,108,101,108,59,1,8742,108,59,3,11005,8421,59,3,8706,824,108,105,110,116,59,1,10772,4,3,59,99,101,13907,13909,13914,1,8832,117,101,59,1,8928,4,2,59,99,13920,13923,3,10927,824,4,2,59,101,13929,13931,1,8832,113,59,3,10927,824,4,4,65,97,105,116,13946,13951,13971,13982,114,114,59,1,8655,114,114,4,3,59,99,119,13961,13963,13967,1,8603,59,3,10547,824,59,3,8605,824,103,104,116,97,114,114,111,119,59,1,8603,114,105,4,2,59,101,13990,13992,1,8939,59,1,8941,4,7,99,104,105,109,112,113,117,14011,14036,14060,14080,14085,14090,14106,4,4,59,99,101,114,14021,14023,14028,14032,1,8833,117,101,59,1,8929,59,3,10928,824,59,3,55349,56515,111,114,116,4,2,109,112,14045,14050,105,100,59,1,8740,97,114,97,108,108,101,108,59,1,8742,109,4,2,59,101,14067,14069,1,8769,4,2,59,113,14075,14077,1,8772,59,1,8772,105,100,59,1,8740,97,114,59,1,8742,115,117,4,2,98,112,14098,14102,101,59,1,8930,101,59,1,8931,4,3,98,99,112,14114,14157,14171,4,4,59,69,101,115,14124,14126,14130,14133,1,8836,59,3,10949,824,59,1,8840,101,116,4,2,59,101,14141,14144,3,8834,8402,113,4,2,59,113,14151,14153,1,8840,59,3,10949,824,99,4,2,59,101,14164,14166,1,8833,113,59,3,10928,824,4,4,59,69,101,115,14181,14183,14187,14190,1,8837,59,3,10950,824,59,1,8841,101,116,4,2,59,101,14198,14201,3,8835,8402,113,4,2,59,113,14208,14210,1,8841,59,3,10950,824,4,4,103,105,108,114,14224,14228,14238,14242,108,59,1,8825,108,100,101,5,241,1,59,14236,1,241,103,59,1,8824,105,97,110,103,108,101,4,2,108,114,14254,14269,101,102,116,4,2,59,101,14263,14265,1,8938,113,59,1,8940,105,103,104,116,4,2,59,101,14279,14281,1,8939,113,59,1,8941,4,2,59,109,14291,14293,1,957,4,3,59,101,115,14301,14303,14308,1,35,114,111,59,1,8470,112,59,1,8199,4,9,68,72,97,100,103,105,108,114,115,14332,14338,14344,14349,14355,14369,14376,14408,14426,97,115,104,59,1,8877,97,114,114,59,1,10500,112,59,3,8781,8402,97,115,104,59,1,8876,4,2,101,116,14361,14365,59,3,8805,8402,59,3,62,8402,110,102,105,110,59,1,10718,4,3,65,101,116,14384,14389,14393,114,114,59,1,10498,59,3,8804,8402,4,2,59,114,14399,14402,3,60,8402,105,101,59,3,8884,8402,4,2,65,116,14414,14419,114,114,59,1,10499,114,105,101,59,3,8885,8402,105,109,59,3,8764,8402,4,3,65,97,110,14440,14445,14468,114,114,59,1,8662,114,4,2,104,114,14452,14456,107,59,1,10531,4,2,59,111,14462,14464,1,8598,119,59,1,8598,101,97,114,59,1,10535,4,18,83,97,99,100,101,102,103,104,105,108,109,111,112,114,115,116,117,118,14512,14515,14535,14560,14597,14603,14618,14643,14657,14662,14701,14741,14747,14769,14851,14877,14907,14916,59,1,9416,4,2,99,115,14521,14531,117,116,101,5,243,1,59,14529,1,243,116,59,1,8859,4,2,105,121,14541,14557,114,4,2,59,99,14548,14550,1,8858,5,244,1,59,14555,1,244,59,1,1086,4,5,97,98,105,111,115,14572,14577,14583,14587,14591,115,104,59,1,8861,108,97,99,59,1,337,118,59,1,10808,116,59,1,8857,111,108,100,59,1,10684,108,105,103,59,1,339,4,2,99,114,14609,14614,105,114,59,1,10687,59,3,55349,56620,4,3,111,114,116,14626,14630,14640,110,59,1,731,97,118,101,5,242,1,59,14638,1,242,59,1,10689,4,2,98,109,14649,14654,97,114,59,1,10677,59,1,937,110,116,59,1,8750,4,4,97,99,105,116,14672,14677,14693,14698,114,114,59,1,8634,4,2,105,114,14683,14687,114,59,1,10686,111,115,115,59,1,10683,110,101,59,1,8254,59,1,10688,4,3,97,101,105,14709,14714,14719,99,114,59,1,333,103,97,59,1,969,4,3,99,100,110,14727,14733,14736,114,111,110,59,1,959,59,1,10678,117,115,59,1,8854,112,102,59,3,55349,56672,4,3,97,101,108,14755,14759,14764,114,59,1,10679,114,112,59,1,10681,117,115,59,1,8853,4,7,59,97,100,105,111,115,118,14785,14787,14792,14831,14837,14841,14848,1,8744,114,114,59,1,8635,4,4,59,101,102,109,14802,14804,14817,14824,1,10845,114,4,2,59,111,14811,14813,1,8500,102,59,1,8500,5,170,1,59,14822,1,170,5,186,1,59,14829,1,186,103,111,102,59,1,8886,114,59,1,10838,108,111,112,101,59,1,10839,59,1,10843,4,3,99,108,111,14859,14863,14873,114,59,1,8500,97,115,104,5,248,1,59,14871,1,248,108,59,1,8856,105,4,2,108,109,14884,14893,100,101,5,245,1,59,14891,1,245,101,115,4,2,59,97,14901,14903,1,8855,115,59,1,10806,109,108,5,246,1,59,14914,1,246,98,97,114,59,1,9021,4,12,97,99,101,102,104,105,108,109,111,114,115,117,14948,14992,14996,15033,15038,15068,15090,15189,15192,15222,15427,15441,114,4,4,59,97,115,116,14959,14961,14976,14989,1,8741,5,182,2,59,108,14968,14970,1,182,108,101,108,59,1,8741,4,2,105,108,14982,14986,109,59,1,10995,59,1,11005,59,1,8706,121,59,1,1087,114,4,5,99,105,109,112,116,15009,15014,15019,15024,15027,110,116,59,1,37,111,100,59,1,46,105,108,59,1,8240,59,1,8869,101,110,107,59,1,8241,114,59,3,55349,56621,4,3,105,109,111,15046,15057,15063,4,2,59,118,15052,15054,1,966,59,1,981,109,97,116,59,1,8499,110,101,59,1,9742,4,3,59,116,118,15076,15078,15087,1,960,99,104,102,111,114,107,59,1,8916,59,1,982,4,2,97,117,15096,15119,110,4,2,99,107,15103,15115,107,4,2,59,104,15110,15112,1,8463,59,1,8462,118,59,1,8463,115,4,9,59,97,98,99,100,101,109,115,116,15140,15142,15148,15151,15156,15168,15171,15179,15184,1,43,99,105,114,59,1,10787,59,1,8862,105,114,59,1,10786,4,2,111,117,15162,15165,59,1,8724,59,1,10789,59,1,10866,110,5,177,1,59,15177,1,177,105,109,59,1,10790,119,111,59,1,10791,59,1,177,4,3,105,112,117,15200,15208,15213,110,116,105,110,116,59,1,10773,102,59,3,55349,56673,110,100,5,163,1,59,15220,1,163,4,10,59,69,97,99,101,105,110,111,115,117,15244,15246,15249,15253,15258,15334,15347,15367,15416,15421,1,8826,59,1,10931,112,59,1,10935,117,101,59,1,8828,4,2,59,99,15264,15266,1,10927,4,6,59,97,99,101,110,115,15280,15282,15290,15299,15303,15329,1,8826,112,112,114,111,120,59,1,10935,117,114,108,121,101,113,59,1,8828,113,59,1,10927,4,3,97,101,115,15311,15319,15324,112,112,114,111,120,59,1,10937,113,113,59,1,10933,105,109,59,1,8936,105,109,59,1,8830,109,101,4,2,59,115,15342,15344,1,8242,59,1,8473,4,3,69,97,115,15355,15358,15362,59,1,10933,112,59,1,10937,105,109,59,1,8936,4,3,100,102,112,15375,15378,15404,59,1,8719,4,3,97,108,115,15386,15392,15398,108,97,114,59,1,9006,105,110,101,59,1,8978,117,114,102,59,1,8979,4,2,59,116,15410,15412,1,8733,111,59,1,8733,105,109,59,1,8830,114,101,108,59,1,8880,4,2,99,105,15433,15438,114,59,3,55349,56517,59,1,968,110,99,115,112,59,1,8200,4,6,102,105,111,112,115,117,15462,15467,15472,15478,15485,15491,114,59,3,55349,56622,110,116,59,1,10764,112,102,59,3,55349,56674,114,105,109,101,59,1,8279,99,114,59,3,55349,56518,4,3,97,101,111,15499,15520,15534,116,4,2,101,105,15506,15515,114,110,105,111,110,115,59,1,8461,110,116,59,1,10774,115,116,4,2,59,101,15528,15530,1,63,113,59,1,8799,116,5,34,1,59,15540,1,34,4,21,65,66,72,97,98,99,100,101,102,104,105,108,109,110,111,112,114,115,116,117,120,15586,15609,15615,15620,15796,15855,15893,15931,15977,16001,16039,16183,16204,16222,16228,16285,16312,16318,16363,16408,16416,4,3,97,114,116,15594,15599,15603,114,114,59,1,8667,114,59,1,8658,97,105,108,59,1,10524,97,114,114,59,1,10511,97,114,59,1,10596,4,7,99,100,101,110,113,114,116,15636,15651,15656,15664,15687,15696,15770,4,2,101,117,15642,15646,59,3,8765,817,116,101,59,1,341,105,99,59,1,8730,109,112,116,121,118,59,1,10675,103,4,4,59,100,101,108,15675,15677,15680,15683,1,10217,59,1,10642,59,1,10661,101,59,1,10217,117,111,5,187,1,59,15694,1,187,114,4,11,59,97,98,99,102,104,108,112,115,116,119,15721,15723,15727,15739,15742,15746,15750,15754,15758,15763,15767,1,8594,112,59,1,10613,4,2,59,102,15733,15735,1,8677,115,59,1,10528,59,1,10547,115,59,1,10526,107,59,1,8618,112,59,1,8620,108,59,1,10565,105,109,59,1,10612,108,59,1,8611,59,1,8605,4,2,97,105,15776,15781,105,108,59,1,10522,111,4,2,59,110,15788,15790,1,8758,97,108,115,59,1,8474,4,3,97,98,114,15804,15809,15814,114,114,59,1,10509,114,107,59,1,10099,4,2,97,107,15820,15833,99,4,2,101,107,15827,15830,59,1,125,59,1,93,4,2,101,115,15839,15842,59,1,10636,108,4,2,100,117,15849,15852,59,1,10638,59,1,10640,4,4,97,101,117,121,15865,15871,15886,15890,114,111,110,59,1,345,4,2,100,105,15877,15882,105,108,59,1,343,108,59,1,8969,98,59,1,125,59,1,1088,4,4,99,108,113,115,15903,15907,15914,15927,97,59,1,10551,100,104,97,114,59,1,10601,117,111,4,2,59,114,15922,15924,1,8221,59,1,8221,104,59,1,8627,4,3,97,99,103,15939,15966,15970,108,4,4,59,105,112,115,15950,15952,15957,15963,1,8476,110,101,59,1,8475,97,114,116,59,1,8476,59,1,8477,116,59,1,9645,5,174,1,59,15975,1,174,4,3,105,108,114,15985,15991,15997,115,104,116,59,1,10621,111,111,114,59,1,8971,59,3,55349,56623,4,2,97,111,16007,16028,114,4,2,100,117,16014,16017,59,1,8641,4,2,59,108,16023,16025,1,8640,59,1,10604,4,2,59,118,16034,16036,1,961,59,1,1009,4,3,103,110,115,16047,16167,16171,104,116,4,6,97,104,108,114,115,116,16063,16081,16103,16130,16143,16155,114,114,111,119,4,2,59,116,16073,16075,1,8594,97,105,108,59,1,8611,97,114,112,111,111,110,4,2,100,117,16093,16099,111,119,110,59,1,8641,112,59,1,8640,101,102,116,4,2,97,104,16112,16120,114,114,111,119,115,59,1,8644,97,114,112,111,111,110,115,59,1,8652,105,103,104,116,97,114,114,111,119,115,59,1,8649,113,117,105,103,97,114,114,111,119,59,1,8605,104,114,101,101,116,105,109,101,115,59,1,8908,103,59,1,730,105,110,103,100,111,116,115,101,113,59,1,8787,4,3,97,104,109,16191,16196,16201,114,114,59,1,8644,97,114,59,1,8652,59,1,8207,111,117,115,116,4,2,59,97,16214,16216,1,9137,99,104,101,59,1,9137,109,105,100,59,1,10990,4,4,97,98,112,116,16238,16252,16257,16278,4,2,110,114,16244,16248,103,59,1,10221,114,59,1,8702,114,107,59,1,10215,4,3,97,102,108,16265,16269,16273,114,59,1,10630,59,3,55349,56675,117,115,59,1,10798,105,109,101,115,59,1,10805,4,2,97,112,16291,16304,114,4,2,59,103,16298,16300,1,41,116,59,1,10644,111,108,105,110,116,59,1,10770,97,114,114,59,1,8649,4,4,97,99,104,113,16328,16334,16339,16342,113,117,111,59,1,8250,114,59,3,55349,56519,59,1,8625,4,2,98,117,16348,16351,59,1,93,111,4,2,59,114,16358,16360,1,8217,59,1,8217,4,3,104,105,114,16371,16377,16383,114,101,101,59,1,8908,109,101,115,59,1,8906,105,4,4,59,101,102,108,16394,16396,16399,16402,1,9657,59,1,8885,59,1,9656,116,114,105,59,1,10702,108,117,104,97,114,59,1,10600,59,1,8478,4,19,97,98,99,100,101,102,104,105,108,109,111,112,113,114,115,116,117,119,122,16459,16466,16472,16572,16590,16672,16687,16746,16844,16850,16924,16963,16988,17115,17121,17154,17206,17614,17656,99,117,116,101,59,1,347,113,117,111,59,1,8218,4,10,59,69,97,99,101,105,110,112,115,121,16494,16496,16499,16513,16518,16531,16536,16556,16564,16569,1,8827,59,1,10932,4,2,112,114,16505,16508,59,1,10936,111,110,59,1,353,117,101,59,1,8829,4,2,59,100,16524,16526,1,10928,105,108,59,1,351,114,99,59,1,349,4,3,69,97,115,16544,16547,16551,59,1,10934,112,59,1,10938,105,109,59,1,8937,111,108,105,110,116,59,1,10771,105,109,59,1,8831,59,1,1089,111,116,4,3,59,98,101,16582,16584,16587,1,8901,59,1,8865,59,1,10854,4,7,65,97,99,109,115,116,120,16606,16611,16634,16642,16646,16652,16668,114,114,59,1,8664,114,4,2,104,114,16618,16622,107,59,1,10533,4,2,59,111,16628,16630,1,8600,119,59,1,8600,116,5,167,1,59,16640,1,167,105,59,1,59,119,97,114,59,1,10537,109,4,2,105,110,16659,16665,110,117,115,59,1,8726,59,1,8726,116,59,1,10038,114,4,2,59,111,16679,16682,3,55349,56624,119,110,59,1,8994,4,4,97,99,111,121,16697,16702,16716,16739,114,112,59,1,9839,4,2,104,121,16708,16713,99,121,59,1,1097,59,1,1096,114,116,4,2,109,112,16724,16729,105,100,59,1,8739,97,114,97,108,108,101,108,59,1,8741,5,173,1,59,16744,1,173,4,2,103,109,16752,16770,109,97,4,3,59,102,118,16762,16764,16767,1,963,59,1,962,59,1,962,4,8,59,100,101,103,108,110,112,114,16788,16790,16795,16806,16817,16828,16832,16838,1,8764,111,116,59,1,10858,4,2,59,113,16801,16803,1,8771,59,1,8771,4,2,59,69,16812,16814,1,10910,59,1,10912,4,2,59,69,16823,16825,1,10909,59,1,10911,101,59,1,8774,108,117,115,59,1,10788,97,114,114,59,1,10610,97,114,114,59,1,8592,4,4,97,101,105,116,16860,16883,16891,16904,4,2,108,115,16866,16878,108,115,101,116,109,105,110,117,115,59,1,8726,104,112,59,1,10803,112,97,114,115,108,59,1,10724,4,2,100,108,16897,16900,59,1,8739,101,59,1,8995,4,2,59,101,16910,16912,1,10922,4,2,59,115,16918,16920,1,10924,59,3,10924,65024,4,3,102,108,112,16932,16938,16958,116,99,121,59,1,1100,4,2,59,98,16944,16946,1,47,4,2,59,97,16952,16954,1,10692,114,59,1,9023,102,59,3,55349,56676,97,4,2,100,114,16970,16985,101,115,4,2,59,117,16978,16980,1,9824,105,116,59,1,9824,59,1,8741,4,3,99,115,117,16996,17028,17089,4,2,97,117,17002,17015,112,4,2,59,115,17009,17011,1,8851,59,3,8851,65024,112,4,2,59,115,17022,17024,1,8852,59,3,8852,65024,117,4,2,98,112,17035,17062,4,3,59,101,115,17043,17045,17048,1,8847,59,1,8849,101,116,4,2,59,101,17056,17058,1,8847,113,59,1,8849,4,3,59,101,115,17070,17072,17075,1,8848,59,1,8850,101,116,4,2,59,101,17083,17085,1,8848,113,59,1,8850,4,3,59,97,102,17097,17099,17112,1,9633,114,4,2,101,102,17106,17109,59,1,9633,59,1,9642,59,1,9642,97,114,114,59,1,8594,4,4,99,101,109,116,17131,17136,17142,17148,114,59,3,55349,56520,116,109,110,59,1,8726,105,108,101,59,1,8995,97,114,102,59,1,8902,4,2,97,114,17160,17172,114,4,2,59,102,17167,17169,1,9734,59,1,9733,4,2,97,110,17178,17202,105,103,104,116,4,2,101,112,17188,17197,112,115,105,108,111,110,59,1,1013,104,105,59,1,981,115,59,1,175,4,5,98,99,109,110,112,17218,17351,17420,17423,17427,4,9,59,69,100,101,109,110,112,114,115,17238,17240,17243,17248,17261,17267,17279,17285,17291,1,8834,59,1,10949,111,116,59,1,10941,4,2,59,100,17254,17256,1,8838,111,116,59,1,10947,117,108,116,59,1,10945,4,2,69,101,17273,17276,59,1,10955,59,1,8842,108,117,115,59,1,10943,97,114,114,59,1,10617,4,3,101,105,117,17299,17335,17339,116,4,3,59,101,110,17308,17310,17322,1,8834,113,4,2,59,113,17317,17319,1,8838,59,1,10949,101,113,4,2,59,113,17330,17332,1,8842,59,1,10955,109,59,1,10951,4,2,98,112,17345,17348,59,1,10965,59,1,10963,99,4,6,59,97,99,101,110,115,17366,17368,17376,17385,17389,17415,1,8827,112,112,114,111,120,59,1,10936,117,114,108,121,101,113,59,1,8829,113,59,1,10928,4,3,97,101,115,17397,17405,17410,112,112,114,111,120,59,1,10938,113,113,59,1,10934,105,109,59,1,8937,105,109,59,1,8831,59,1,8721,103,59,1,9834,4,13,49,50,51,59,69,100,101,104,108,109,110,112,115,17455,17462,17469,17476,17478,17481,17496,17509,17524,17530,17536,17548,17554,5,185,1,59,17460,1,185,5,178,1,59,17467,1,178,5,179,1,59,17474,1,179,1,8835,59,1,10950,4,2,111,115,17487,17491,116,59,1,10942,117,98,59,1,10968,4,2,59,100,17502,17504,1,8839,111,116,59,1,10948,115,4,2,111,117,17516,17520,108,59,1,10185,98,59,1,10967,97,114,114,59,1,10619,117,108,116,59,1,10946,4,2,69,101,17542,17545,59,1,10956,59,1,8843,108,117,115,59,1,10944,4,3,101,105,117,17562,17598,17602,116,4,3,59,101,110,17571,17573,17585,1,8835,113,4,2,59,113,17580,17582,1,8839,59,1,10950,101,113,4,2,59,113,17593,17595,1,8843,59,1,10956,109,59,1,10952,4,2,98,112,17608,17611,59,1,10964,59,1,10966,4,3,65,97,110,17622,17627,17650,114,114,59,1,8665,114,4,2,104,114,17634,17638,107,59,1,10534,4,2,59,111,17644,17646,1,8601,119,59,1,8601,119,97,114,59,1,10538,108,105,103,5,223,1,59,17664,1,223,4,13,97,98,99,100,101,102,104,105,111,112,114,115,119,17694,17709,17714,17737,17742,17749,17754,17860,17905,17957,17964,18090,18122,4,2,114,117,17700,17706,103,101,116,59,1,8982,59,1,964,114,107,59,1,9140,4,3,97,101,121,17722,17728,17734,114,111,110,59,1,357,100,105,108,59,1,355,59,1,1090,111,116,59,1,8411,108,114,101,99,59,1,8981,114,59,3,55349,56625,4,4,101,105,107,111,17764,17805,17836,17851,4,2,114,116,17770,17786,101,4,2,52,102,17777,17780,59,1,8756,111,114,101,59,1,8756,97,4,3,59,115,118,17795,17797,17802,1,952,121,109,59,1,977,59,1,977,4,2,99,110,17811,17831,107,4,2,97,115,17818,17826,112,112,114,111,120,59,1,8776,105,109,59,1,8764,115,112,59,1,8201,4,2,97,115,17842,17846,112,59,1,8776,105,109,59,1,8764,114,110,5,254,1,59,17858,1,254,4,3,108,109,110,17868,17873,17901,100,101,59,1,732,101,115,5,215,3,59,98,100,17884,17886,17898,1,215,4,2,59,97,17892,17894,1,8864,114,59,1,10801,59,1,10800,116,59,1,8749,4,3,101,112,115,17913,17917,17953,97,59,1,10536,4,4,59,98,99,102,17927,17929,17934,17939,1,8868,111,116,59,1,9014,105,114,59,1,10993,4,2,59,111,17945,17948,3,55349,56677,114,107,59,1,10970,97,59,1,10537,114,105,109,101,59,1,8244,4,3,97,105,112,17972,17977,18082,100,101,59,1,8482,4,7,97,100,101,109,112,115,116,17993,18051,18056,18059,18066,18072,18076,110,103,108,101,4,5,59,100,108,113,114,18009,18011,18017,18032,18035,1,9653,111,119,110,59,1,9663,101,102,116,4,2,59,101,18026,18028,1,9667,113,59,1,8884,59,1,8796,105,103,104,116,4,2,59,101,18045,18047,1,9657,113,59,1,8885,111,116,59,1,9708,59,1,8796,105,110,117,115,59,1,10810,108,117,115,59,1,10809,98,59,1,10701,105,109,101,59,1,10811,101,122,105,117,109,59,1,9186,4,3,99,104,116,18098,18111,18116,4,2,114,121,18104,18108,59,3,55349,56521,59,1,1094,99,121,59,1,1115,114,111,107,59,1,359,4,2,105,111,18128,18133,120,116,59,1,8812,104,101,97,100,4,2,108,114,18143,18154,101,102,116,97,114,114,111,119,59,1,8606,105,103,104,116,97,114,114,111,119,59,1,8608,4,18,65,72,97,98,99,100,102,103,104,108,109,111,112,114,115,116,117,119,18204,18209,18214,18234,18250,18268,18292,18308,18319,18343,18379,18397,18413,18504,18547,18553,18584,18603,114,114,59,1,8657,97,114,59,1,10595,4,2,99,114,18220,18230,117,116,101,5,250,1,59,18228,1,250,114,59,1,8593,114,4,2,99,101,18241,18245,121,59,1,1118,118,101,59,1,365,4,2,105,121,18256,18265,114,99,5,251,1,59,18263,1,251,59,1,1091,4,3,97,98,104,18276,18281,18287,114,114,59,1,8645,108,97,99,59,1,369,97,114,59,1,10606,4,2,105,114,18298,18304,115,104,116,59,1,10622,59,3,55349,56626,114,97,118,101,5,249,1,59,18317,1,249,4,2,97,98,18325,18338,114,4,2,108,114,18332,18335,59,1,8639,59,1,8638,108,107,59,1,9600,4,2,99,116,18349,18374,4,2,111,114,18355,18369,114,110,4,2,59,101,18363,18365,1,8988,114,59,1,8988,111,112,59,1,8975,114,105,59,1,9720,4,2,97,108,18385,18390,99,114,59,1,363,5,168,1,59,18395,1,168,4,2,103,112,18403,18408,111,110,59,1,371,102,59,3,55349,56678,4,6,97,100,104,108,115,117,18427,18434,18445,18470,18475,18494,114,114,111,119,59,1,8593,111,119,110,97,114,114,111,119,59,1,8597,97,114,112,111,111,110,4,2,108,114,18457,18463,101,102,116,59,1,8639,105,103,104,116,59,1,8638,117,115,59,1,8846,105,4,3,59,104,108,18484,18486,18489,1,965,59,1,978,111,110,59,1,965,112,97,114,114,111,119,115,59,1,8648,4,3,99,105,116,18512,18537,18542,4,2,111,114,18518,18532,114,110,4,2,59,101,18526,18528,1,8989,114,59,1,8989,111,112,59,1,8974,110,103,59,1,367,114,105,59,1,9721,99,114,59,3,55349,56522,4,3,100,105,114,18561,18566,18572,111,116,59,1,8944,108,100,101,59,1,361,105,4,2,59,102,18579,18581,1,9653,59,1,9652,4,2,97,109,18590,18595,114,114,59,1,8648,108,5,252,1,59,18601,1,252,97,110,103,108,101,59,1,10663,4,15,65,66,68,97,99,100,101,102,108,110,111,112,114,115,122,18643,18648,18661,18667,18847,18851,18857,18904,18909,18915,18931,18937,18943,18949,18996,114,114,59,1,8661,97,114,4,2,59,118,18656,18658,1,10984,59,1,10985,97,115,104,59,1,8872,4,2,110,114,18673,18679,103,114,116,59,1,10652,4,7,101,107,110,112,114,115,116,18695,18704,18711,18720,18742,18754,18810,112,115,105,108,111,110,59,1,1013,97,112,112,97,59,1,1008,111,116,104,105,110,103,59,1,8709,4,3,104,105,114,18728,18732,18735,105,59,1,981,59,1,982,111,112,116,111,59,1,8733,4,2,59,104,18748,18750,1,8597,111,59,1,1009,4,2,105,117,18760,18766,103,109,97,59,1,962,4,2,98,112,18772,18791,115,101,116,110,101,113,4,2,59,113,18784,18787,3,8842,65024,59,3,10955,65024,115,101,116,110,101,113,4,2,59,113,18803,18806,3,8843,65024,59,3,10956,65024,4,2,104,114,18816,18822,101,116,97,59,1,977,105,97,110,103,108,101,4,2,108,114,18834,18840,101,102,116,59,1,8882,105,103,104,116,59,1,8883,121,59,1,1074,97,115,104,59,1,8866,4,3,101,108,114,18865,18884,18890,4,3,59,98,101,18873,18875,18880,1,8744,97,114,59,1,8891,113,59,1,8794,108,105,112,59,1,8942,4,2,98,116,18896,18901,97,114,59,1,124,59,1,124,114,59,3,55349,56627,116,114,105,59,1,8882,115,117,4,2,98,112,18923,18927,59,3,8834,8402,59,3,8835,8402,112,102,59,3,55349,56679,114,111,112,59,1,8733,116,114,105,59,1,8883,4,2,99,117,18955,18960,114,59,3,55349,56523,4,2,98,112,18966,18981,110,4,2,69,101,18973,18977,59,3,10955,65024,59,3,8842,65024,110,4,2,69,101,18988,18992,59,3,10956,65024,59,3,8843,65024,105,103,122,97,103,59,1,10650,4,7,99,101,102,111,112,114,115,19020,19026,19061,19066,19072,19075,19089,105,114,99,59,1,373,4,2,100,105,19032,19055,4,2,98,103,19038,19043,97,114,59,1,10847,101,4,2,59,113,19050,19052,1,8743,59,1,8793,101,114,112,59,1,8472,114,59,3,55349,56628,112,102,59,3,55349,56680,59,1,8472,4,2,59,101,19081,19083,1,8768,97,116,104,59,1,8768,99,114,59,3,55349,56524,4,14,99,100,102,104,105,108,109,110,111,114,115,117,118,119,19125,19146,19152,19157,19173,19176,19192,19197,19202,19236,19252,19269,19286,19291,4,3,97,105,117,19133,19137,19142,112,59,1,8898,114,99,59,1,9711,112,59,1,8899,116,114,105,59,1,9661,114,59,3,55349,56629,4,2,65,97,19163,19168,114,114,59,1,10234,114,114,59,1,10231,59,1,958,4,2,65,97,19182,19187,114,114,59,1,10232,114,114,59,1,10229,97,112,59,1,10236,105,115,59,1,8955,4,3,100,112,116,19210,19215,19230,111,116,59,1,10752,4,2,102,108,19221,19225,59,3,55349,56681,117,115,59,1,10753,105,109,101,59,1,10754,4,2,65,97,19242,19247,114,114,59,1,10233,114,114,59,1,10230,4,2,99,113,19258,19263,114,59,3,55349,56525,99,117,112,59,1,10758,4,2,112,116,19275,19281,108,117,115,59,1,10756,114,105,59,1,9651,101,101,59,1,8897,101,100,103,101,59,1,8896,4,8,97,99,101,102,105,111,115,117,19316,19335,19349,19357,19362,19367,19373,19379,99,4,2,117,121,19323,19332,116,101,5,253,1,59,19330,1,253,59,1,1103,4,2,105,121,19341,19346,114,99,59,1,375,59,1,1099,110,5,165,1,59,19355,1,165,114,59,3,55349,56630,99,121,59,1,1111,112,102,59,3,55349,56682,99,114,59,3,55349,56526,4,2,99,109,19385,19389,121,59,1,1102,108,5,255,1,59,19395,1,255,4,10,97,99,100,101,102,104,105,111,115,119,19419,19426,19441,19446,19462,19467,19472,19480,19486,19492,99,117,116,101,59,1,378,4,2,97,121,19432,19438,114,111,110,59,1,382,59,1,1079,111,116,59,1,380,4,2,101,116,19452,19458,116,114,102,59,1,8488,97,59,1,950,114,59,3,55349,56631,99,121,59,1,1078,103,114,97,114,114,59,1,8669,112,102,59,3,55349,56683,99,114,59,3,55349,56527,4,2,106,110,19498,19501,59,1,8205,106,59,1,8204]); var index$4=createCommonjsModule(function(e){function t(e){return e===u.SPACE||e===u.LINE_FEED||e===u.TABULATION||e===u.FORM_FEED}function n(e){return e>=u.DIGIT_0&&e<=u.DIGIT_9}function r(e){return e>=u.LATIN_CAPITAL_A&&e<=u.LATIN_CAPITAL_Z}function i(e){return e>=u.LATIN_SMALL_A&&e<=u.LATIN_SMALL_Z}function s(e){return i(e)||r(e)}function o(e){return s(e)||n(e)}function T(e,t){return n(e)||t&&(e>=u.LATIN_CAPITAL_A&&e<=u.LATIN_CAPITAL_F||e>=u.LATIN_SMALL_A&&e<=u.LATIN_SMALL_F)}function a(e){return e>=55296&&e<=57343||e>1114111}function E(e){return e+32}function _(e){return e<=65535?String.fromCharCode(e):(e-=65536,String.fromCharCode(e>>>10&1023|55296)+String.fromCharCode(56320|1023&e))}function c(e){return String.fromCharCode(E(e))}function p(e,t){for(var n=m[++e],r=++e,i=r+n-1;r<=i;){var s=r+i>>>1,o=m[s];if(o<t)r=s+1;else{if(!(o>t))return m[s+n];i=s-1;}}return-1}var A=preprocessor,h=tokenizer_mixin,l=unicode,m=named_entity_data,u=l.CODE_POINTS,N=l.CODE_POINT_SEQUENCES,d={0:65533,13:13,128:8364,129:129,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,141:141,142:381,143:143,144:144,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,157:157,158:382,159:376},C=\"DATA_STATE\",S=e.exports=function(e){this.preprocessor=new A,this.tokenQueue=[],this.allowCDATA=!1,this.state=C,this.returnState=\"\",this.tempBuff=[],this.additionalAllowedCp=void 0,this.lastStartTagName=\"\",this.consumedAfterSnapshot=-1,this.active=!1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr=null,e&&e.locationInfo&&h.assign(this);};S.CHARACTER_TOKEN=\"CHARACTER_TOKEN\",S.NULL_CHARACTER_TOKEN=\"NULL_CHARACTER_TOKEN\",S.WHITESPACE_CHARACTER_TOKEN=\"WHITESPACE_CHARACTER_TOKEN\",S.START_TAG_TOKEN=\"START_TAG_TOKEN\",S.END_TAG_TOKEN=\"END_TAG_TOKEN\",S.COMMENT_TOKEN=\"COMMENT_TOKEN\",S.DOCTYPE_TOKEN=\"DOCTYPE_TOKEN\",S.EOF_TOKEN=\"EOF_TOKEN\",S.HIBERNATION_TOKEN=\"HIBERNATION_TOKEN\",S.MODE=S.prototype.MODE={DATA:C,RCDATA:\"RCDATA_STATE\",RAWTEXT:\"RAWTEXT_STATE\",SCRIPT_DATA:\"SCRIPT_DATA_STATE\",PLAINTEXT:\"PLAINTEXT_STATE\"},S.getTokenAttr=function(e,t){for(var n=e.attrs.length-1;n>=0;n--)if(e.attrs[n].name===t)return e.attrs[n].value;return null},S.prototype.getNextToken=function(){for(;!this.tokenQueue.length&&this.active;){this._hibernationSnapshot();var e=this._consume();this._ensureHibernation()||this[this.state](e);}return this.tokenQueue.shift()},S.prototype.write=function(e,t){this.active=!0,this.preprocessor.write(e,t);},S.prototype.insertHtmlAtCurrentPos=function(e){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(e);},S.prototype._hibernationSnapshot=function(){this.consumedAfterSnapshot=0;},S.prototype._ensureHibernation=function(){if(this.preprocessor.endOfChunkHit){for(;this.consumedAfterSnapshot>0;this.consumedAfterSnapshot--)this.preprocessor.retreat();return this.active=!1,this.tokenQueue.push({type:S.HIBERNATION_TOKEN}),!0}return!1},S.prototype._consume=function(){return this.consumedAfterSnapshot++,this.preprocessor.advance()},S.prototype._unconsume=function(){this.consumedAfterSnapshot--,this.preprocessor.retreat();},S.prototype._unconsumeSeveral=function(e){for(;e--;)this._unconsume();},S.prototype._reconsumeInState=function(e){this.state=e,this._unconsume();},S.prototype._consumeSubsequentIfMatch=function(e,t,n){for(var r=0,i=!0,s=e.length,o=0,T=t,a=void 0;o<s;o++){if(o>0&&(T=this._consume(),r++),T===u.EOF){i=!1;break}if(a=e[o],T!==a&&(n||T!==E(a))){i=!1;break}}return i||this._unconsumeSeveral(r),i},S.prototype._lookahead=function(){var e=this._consume();return this._unconsume(),e},S.prototype.isTempBufferEqualToScriptString=function(){if(this.tempBuff.length!==N.SCRIPT_STRING.length)return!1;for(var e=0;e<this.tempBuff.length;e++)if(this.tempBuff[e]!==N.SCRIPT_STRING[e])return!1;return!0},S.prototype._createStartTagToken=function(){this.currentToken={type:S.START_TAG_TOKEN,tagName:\"\",selfClosing:!1,attrs:[]};},S.prototype._createEndTagToken=function(){this.currentToken={type:S.END_TAG_TOKEN,tagName:\"\",attrs:[]};},S.prototype._createCommentToken=function(){this.currentToken={type:S.COMMENT_TOKEN,data:\"\"};},S.prototype._createDoctypeToken=function(e){this.currentToken={type:S.DOCTYPE_TOKEN,name:e,forceQuirks:!1,publicId:null,systemId:null};},S.prototype._createCharacterToken=function(e,t){this.currentCharacterToken={type:e,chars:t};},S.prototype._createAttr=function(e){this.currentAttr={name:e,value:\"\"};},S.prototype._isDuplicateAttr=function(){return null!==S.getTokenAttr(this.currentToken,this.currentAttr.name)},S.prototype._leaveAttrName=function(e){this.state=e,this._isDuplicateAttr()||this.currentToken.attrs.push(this.currentAttr);},S.prototype._leaveAttrValue=function(e){this.state=e;},S.prototype._isAppropriateEndTagToken=function(){return this.lastStartTagName===this.currentToken.tagName},S.prototype._emitCurrentToken=function(){this._emitCurrentCharacterToken(),this.currentToken.type===S.START_TAG_TOKEN&&(this.lastStartTagName=this.currentToken.tagName),this.tokenQueue.push(this.currentToken),this.currentToken=null;},S.prototype._emitCurrentCharacterToken=function(){this.currentCharacterToken&&(this.tokenQueue.push(this.currentCharacterToken),this.currentCharacterToken=null);},S.prototype._emitEOFToken=function(){this._emitCurrentCharacterToken(),this.tokenQueue.push({type:S.EOF_TOKEN});},S.prototype._appendCharToCurrentCharacterToken=function(e,t){this.currentCharacterToken&&this.currentCharacterToken.type!==e&&this._emitCurrentCharacterToken(),this.currentCharacterToken?this.currentCharacterToken.chars+=t:this._createCharacterToken(e,t);},S.prototype._emitCodePoint=function(e){var n=S.CHARACTER_TOKEN;t(e)?n=S.WHITESPACE_CHARACTER_TOKEN:e===u.NULL&&(n=S.NULL_CHARACTER_TOKEN),this._appendCharToCurrentCharacterToken(n,_(e));},S.prototype._emitSeveralCodePoints=function(e){for(var t=0;t<e.length;t++)this._emitCodePoint(e[t]);},S.prototype._emitChar=function(e){this._appendCharToCurrentCharacterToken(S.CHARACTER_TOKEN,e);},S.prototype._consumeNumericEntity=function(e){var t=\"\",n=void 0;do{t+=_(this._consume()),n=this._lookahead();}while(n!==u.EOF&&T(n,e));this._lookahead()===u.SEMICOLON&&this._consume();var r=parseInt(t,e?16:10),i=d[r];return i||(a(r)?u.REPLACEMENT_CHARACTER:r)},S.prototype._consumeNamedEntity=function(e){for(var t=null,n=0,r=null,i=0,s=!1,T=0;T>-1;){var a=m[T],E=a<7;if(E&&1&a&&(t=2&a?[m[++T],m[++T]]:[m[++T]],n=i,r===u.SEMICOLON)){s=!0;break}if(r=this._consume(),i++,r===u.EOF)break;T=E?4&a?p(T,r):-1:r===a?++T:-1;}if(t){if(!s&&(this._unconsumeSeveral(i-n),e)){var _=this._lookahead();if(_===u.EQUALS_SIGN||o(_))return this._unconsumeSeveral(n),null}return t}return this._unconsumeSeveral(i),null},S.prototype._consumeCharacterReference=function(e,n){if(t(e)||e===u.GREATER_THAN_SIGN||e===u.AMPERSAND||e===this.additionalAllowedCp||e===u.EOF)return this._unconsume(),null;if(e===u.NUMBER_SIGN){var r=!1,i=this._lookahead();return i!==u.LATIN_SMALL_X&&i!==u.LATIN_CAPITAL_X||(this._consume(),r=!0),(i=this._lookahead())!==u.EOF&&T(i,r)?[this._consumeNumericEntity(r)]:(this._unconsumeSeveral(r?2:1),null)}return this._unconsume(),this._consumeNamedEntity(n)};var f=S.prototype;f[C]=function(e){this.preprocessor.dropParsedChunk(),e===u.AMPERSAND?this.state=\"CHARACTER_REFERENCE_IN_DATA_STATE\":e===u.LESS_THAN_SIGN?this.state=\"TAG_OPEN_STATE\":e===u.NULL?this._emitCodePoint(e):e===u.EOF?this._emitEOFToken():this._emitCodePoint(e);},f.CHARACTER_REFERENCE_IN_DATA_STATE=function(e){this.additionalAllowedCp=void 0;var t=this._consumeCharacterReference(e,!1);this._ensureHibernation()||(t?this._emitSeveralCodePoints(t):this._emitChar(\"&\"),this.state=C);},f.RCDATA_STATE=function(e){this.preprocessor.dropParsedChunk(),e===u.AMPERSAND?this.state=\"CHARACTER_REFERENCE_IN_RCDATA_STATE\":e===u.LESS_THAN_SIGN?this.state=\"RCDATA_LESS_THAN_SIGN_STATE\":e===u.NULL?this._emitChar(l.REPLACEMENT_CHARACTER):e===u.EOF?this._emitEOFToken():this._emitCodePoint(e);},f.CHARACTER_REFERENCE_IN_RCDATA_STATE=function(e){this.additionalAllowedCp=void 0;var t=this._consumeCharacterReference(e,!1);this._ensureHibernation()||(t?this._emitSeveralCodePoints(t):this._emitChar(\"&\"),this.state=\"RCDATA_STATE\");},f.RAWTEXT_STATE=function(e){this.preprocessor.dropParsedChunk(),e===u.LESS_THAN_SIGN?this.state=\"RAWTEXT_LESS_THAN_SIGN_STATE\":e===u.NULL?this._emitChar(l.REPLACEMENT_CHARACTER):e===u.EOF?this._emitEOFToken():this._emitCodePoint(e);},f.SCRIPT_DATA_STATE=function(e){this.preprocessor.dropParsedChunk(),e===u.LESS_THAN_SIGN?this.state=\"SCRIPT_DATA_LESS_THAN_SIGN_STATE\":e===u.NULL?this._emitChar(l.REPLACEMENT_CHARACTER):e===u.EOF?this._emitEOFToken():this._emitCodePoint(e);},f.PLAINTEXT_STATE=function(e){this.preprocessor.dropParsedChunk(),e===u.NULL?this._emitChar(l.REPLACEMENT_CHARACTER):e===u.EOF?this._emitEOFToken():this._emitCodePoint(e);},f.TAG_OPEN_STATE=function(e){e===u.EXCLAMATION_MARK?this.state=\"MARKUP_DECLARATION_OPEN_STATE\":e===u.SOLIDUS?this.state=\"END_TAG_OPEN_STATE\":s(e)?(this._createStartTagToken(),this._reconsumeInState(\"TAG_NAME_STATE\")):e===u.QUESTION_MARK?this._reconsumeInState(\"BOGUS_COMMENT_STATE\"):(this._emitChar(\"<\"),this._reconsumeInState(C));},f.END_TAG_OPEN_STATE=function(e){s(e)?(this._createEndTagToken(),this._reconsumeInState(\"TAG_NAME_STATE\")):e===u.GREATER_THAN_SIGN?this.state=C:e===u.EOF?(this._reconsumeInState(C),this._emitChar(\"<\"),this._emitChar(\"/\")):this._reconsumeInState(\"BOGUS_COMMENT_STATE\");},f.TAG_NAME_STATE=function(e){t(e)?this.state=\"BEFORE_ATTRIBUTE_NAME_STATE\":e===u.SOLIDUS?this.state=\"SELF_CLOSING_START_TAG_STATE\":e===u.GREATER_THAN_SIGN?(this.state=C,this._emitCurrentToken()):r(e)?this.currentToken.tagName+=c(e):e===u.NULL?this.currentToken.tagName+=l.REPLACEMENT_CHARACTER:e===u.EOF?this._reconsumeInState(C):this.currentToken.tagName+=_(e);},f.RCDATA_LESS_THAN_SIGN_STATE=function(e){e===u.SOLIDUS?(this.tempBuff=[],this.state=\"RCDATA_END_TAG_OPEN_STATE\"):(this._emitChar(\"<\"),this._reconsumeInState(\"RCDATA_STATE\"));},f.RCDATA_END_TAG_OPEN_STATE=function(e){s(e)?(this._createEndTagToken(),this._reconsumeInState(\"RCDATA_END_TAG_NAME_STATE\")):(this._emitChar(\"<\"),this._emitChar(\"/\"),this._reconsumeInState(\"RCDATA_STATE\"));},f.RCDATA_END_TAG_NAME_STATE=function(e){if(r(e))this.currentToken.tagName+=c(e),this.tempBuff.push(e);else if(i(e))this.currentToken.tagName+=_(e),this.tempBuff.push(e);else{if(this._isAppropriateEndTagToken()){if(t(e))return void(this.state=\"BEFORE_ATTRIBUTE_NAME_STATE\");if(e===u.SOLIDUS)return void(this.state=\"SELF_CLOSING_START_TAG_STATE\");if(e===u.GREATER_THAN_SIGN)return this.state=C,void this._emitCurrentToken()}this._emitChar(\"<\"),this._emitChar(\"/\"),this._emitSeveralCodePoints(this.tempBuff),this._reconsumeInState(\"RCDATA_STATE\");}},f.RAWTEXT_LESS_THAN_SIGN_STATE=function(e){e===u.SOLIDUS?(this.tempBuff=[],this.state=\"RAWTEXT_END_TAG_OPEN_STATE\"):(this._emitChar(\"<\"),this._reconsumeInState(\"RAWTEXT_STATE\"));},f.RAWTEXT_END_TAG_OPEN_STATE=function(e){s(e)?(this._createEndTagToken(),this._reconsumeInState(\"RAWTEXT_END_TAG_NAME_STATE\")):(this._emitChar(\"<\"),this._emitChar(\"/\"),this._reconsumeInState(\"RAWTEXT_STATE\"));},f.RAWTEXT_END_TAG_NAME_STATE=function(e){if(r(e))this.currentToken.tagName+=c(e),this.tempBuff.push(e);else if(i(e))this.currentToken.tagName+=_(e),this.tempBuff.push(e);else{if(this._isAppropriateEndTagToken()){if(t(e))return void(this.state=\"BEFORE_ATTRIBUTE_NAME_STATE\");if(e===u.SOLIDUS)return void(this.state=\"SELF_CLOSING_START_TAG_STATE\");if(e===u.GREATER_THAN_SIGN)return this._emitCurrentToken(),void(this.state=C)}this._emitChar(\"<\"),this._emitChar(\"/\"),this._emitSeveralCodePoints(this.tempBuff),this._reconsumeInState(\"RAWTEXT_STATE\");}},f.SCRIPT_DATA_LESS_THAN_SIGN_STATE=function(e){e===u.SOLIDUS?(this.tempBuff=[],this.state=\"SCRIPT_DATA_END_TAG_OPEN_STATE\"):e===u.EXCLAMATION_MARK?(this.state=\"SCRIPT_DATA_ESCAPE_START_STATE\",this._emitChar(\"<\"),this._emitChar(\"!\")):(this._emitChar(\"<\"),this._reconsumeInState(\"SCRIPT_DATA_STATE\"));},f.SCRIPT_DATA_END_TAG_OPEN_STATE=function(e){s(e)?(this._createEndTagToken(),this._reconsumeInState(\"SCRIPT_DATA_END_TAG_NAME_STATE\")):(this._emitChar(\"<\"),this._emitChar(\"/\"),this._reconsumeInState(\"SCRIPT_DATA_STATE\"));},f.SCRIPT_DATA_END_TAG_NAME_STATE=function(e){if(r(e))this.currentToken.tagName+=c(e),this.tempBuff.push(e);else if(i(e))this.currentToken.tagName+=_(e),this.tempBuff.push(e);else{if(this._isAppropriateEndTagToken()){if(t(e))return void(this.state=\"BEFORE_ATTRIBUTE_NAME_STATE\");if(e===u.SOLIDUS)return void(this.state=\"SELF_CLOSING_START_TAG_STATE\");if(e===u.GREATER_THAN_SIGN)return this._emitCurrentToken(),void(this.state=C)}this._emitChar(\"<\"),this._emitChar(\"/\"),this._emitSeveralCodePoints(this.tempBuff),this._reconsumeInState(\"SCRIPT_DATA_STATE\");}},f.SCRIPT_DATA_ESCAPE_START_STATE=function(e){e===u.HYPHEN_MINUS?(this.state=\"SCRIPT_DATA_ESCAPE_START_DASH_STATE\",this._emitChar(\"-\")):this._reconsumeInState(\"SCRIPT_DATA_STATE\");},f.SCRIPT_DATA_ESCAPE_START_DASH_STATE=function(e){e===u.HYPHEN_MINUS?(this.state=\"SCRIPT_DATA_ESCAPED_DASH_DASH_STATE\",this._emitChar(\"-\")):this._reconsumeInState(\"SCRIPT_DATA_STATE\");},f.SCRIPT_DATA_ESCAPED_STATE=function(e){e===u.HYPHEN_MINUS?(this.state=\"SCRIPT_DATA_ESCAPED_DASH_STATE\",this._emitChar(\"-\")):e===u.LESS_THAN_SIGN?this.state=\"SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE\":e===u.NULL?this._emitChar(l.REPLACEMENT_CHARACTER):e===u.EOF?this._reconsumeInState(C):this._emitCodePoint(e);},f.SCRIPT_DATA_ESCAPED_DASH_STATE=function(e){e===u.HYPHEN_MINUS?(this.state=\"SCRIPT_DATA_ESCAPED_DASH_DASH_STATE\",this._emitChar(\"-\")):e===u.LESS_THAN_SIGN?this.state=\"SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE\":e===u.NULL?(this.state=\"SCRIPT_DATA_ESCAPED_STATE\",this._emitChar(l.REPLACEMENT_CHARACTER)):e===u.EOF?this._reconsumeInState(C):(this.state=\"SCRIPT_DATA_ESCAPED_STATE\",this._emitCodePoint(e));},f.SCRIPT_DATA_ESCAPED_DASH_DASH_STATE=function(e){e===u.HYPHEN_MINUS?this._emitChar(\"-\"):e===u.LESS_THAN_SIGN?this.state=\"SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE\":e===u.GREATER_THAN_SIGN?(this.state=\"SCRIPT_DATA_STATE\",this._emitChar(\">\")):e===u.NULL?(this.state=\"SCRIPT_DATA_ESCAPED_STATE\",this._emitChar(l.REPLACEMENT_CHARACTER)):e===u.EOF?this._reconsumeInState(C):(this.state=\"SCRIPT_DATA_ESCAPED_STATE\",this._emitCodePoint(e));},f.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE=function(e){e===u.SOLIDUS?(this.tempBuff=[],this.state=\"SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE\"):s(e)?(this.tempBuff=[],this._emitChar(\"<\"),this._reconsumeInState(\"SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE\")):(this._emitChar(\"<\"),this._reconsumeInState(\"SCRIPT_DATA_ESCAPED_STATE\"));},f.SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE=function(e){s(e)?(this._createEndTagToken(),this._reconsumeInState(\"SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE\")):(this._emitChar(\"<\"),this._emitChar(\"/\"),this._reconsumeInState(\"SCRIPT_DATA_ESCAPED_STATE\"));},f.SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE=function(e){if(r(e))this.currentToken.tagName+=c(e),this.tempBuff.push(e);else if(i(e))this.currentToken.tagName+=_(e),this.tempBuff.push(e);else{if(this._isAppropriateEndTagToken()){if(t(e))return void(this.state=\"BEFORE_ATTRIBUTE_NAME_STATE\");if(e===u.SOLIDUS)return void(this.state=\"SELF_CLOSING_START_TAG_STATE\");if(e===u.GREATER_THAN_SIGN)return this._emitCurrentToken(),void(this.state=C)}this._emitChar(\"<\"),this._emitChar(\"/\"),this._emitSeveralCodePoints(this.tempBuff),this._reconsumeInState(\"SCRIPT_DATA_ESCAPED_STATE\");}},f.SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE=function(e){t(e)||e===u.SOLIDUS||e===u.GREATER_THAN_SIGN?(this.state=this.isTempBufferEqualToScriptString()?\"SCRIPT_DATA_DOUBLE_ESCAPED_STATE\":\"SCRIPT_DATA_ESCAPED_STATE\",this._emitCodePoint(e)):r(e)?(this.tempBuff.push(E(e)),this._emitCodePoint(e)):i(e)?(this.tempBuff.push(e),this._emitCodePoint(e)):this._reconsumeInState(\"SCRIPT_DATA_ESCAPED_STATE\");},f.SCRIPT_DATA_DOUBLE_ESCAPED_STATE=function(e){e===u.HYPHEN_MINUS?(this.state=\"SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE\",this._emitChar(\"-\")):e===u.LESS_THAN_SIGN?(this.state=\"SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE\",this._emitChar(\"<\")):e===u.NULL?this._emitChar(l.REPLACEMENT_CHARACTER):e===u.EOF?this._reconsumeInState(C):this._emitCodePoint(e);},f.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE=function(e){e===u.HYPHEN_MINUS?(this.state=\"SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE\",this._emitChar(\"-\")):e===u.LESS_THAN_SIGN?(this.state=\"SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE\",this._emitChar(\"<\")):e===u.NULL?(this.state=\"SCRIPT_DATA_DOUBLE_ESCAPED_STATE\",this._emitChar(l.REPLACEMENT_CHARACTER)):e===u.EOF?this._reconsumeInState(C):(this.state=\"SCRIPT_DATA_DOUBLE_ESCAPED_STATE\",this._emitCodePoint(e));},f.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE=function(e){e===u.HYPHEN_MINUS?this._emitChar(\"-\"):e===u.LESS_THAN_SIGN?(this.state=\"SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE\",this._emitChar(\"<\")):e===u.GREATER_THAN_SIGN?(this.state=\"SCRIPT_DATA_STATE\",this._emitChar(\">\")):e===u.NULL?(this.state=\"SCRIPT_DATA_DOUBLE_ESCAPED_STATE\",this._emitChar(l.REPLACEMENT_CHARACTER)):e===u.EOF?this._reconsumeInState(C):(this.state=\"SCRIPT_DATA_DOUBLE_ESCAPED_STATE\",this._emitCodePoint(e));},f.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE=function(e){e===u.SOLIDUS?(this.tempBuff=[],this.state=\"SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE\",this._emitChar(\"/\")):this._reconsumeInState(\"SCRIPT_DATA_DOUBLE_ESCAPED_STATE\");},f.SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE=function(e){t(e)||e===u.SOLIDUS||e===u.GREATER_THAN_SIGN?(this.state=this.isTempBufferEqualToScriptString()?\"SCRIPT_DATA_ESCAPED_STATE\":\"SCRIPT_DATA_DOUBLE_ESCAPED_STATE\",this._emitCodePoint(e)):r(e)?(this.tempBuff.push(E(e)),this._emitCodePoint(e)):i(e)?(this.tempBuff.push(e),this._emitCodePoint(e)):this._reconsumeInState(\"SCRIPT_DATA_DOUBLE_ESCAPED_STATE\");},f.BEFORE_ATTRIBUTE_NAME_STATE=function(e){t(e)||(e===u.SOLIDUS||e===u.GREATER_THAN_SIGN||e===u.EOF?this._reconsumeInState(\"AFTER_ATTRIBUTE_NAME_STATE\"):e===u.EQUALS_SIGN?(this._createAttr(\"=\"),this.state=\"ATTRIBUTE_NAME_STATE\"):(this._createAttr(\"\"),this._reconsumeInState(\"ATTRIBUTE_NAME_STATE\")));},f.ATTRIBUTE_NAME_STATE=function(e){t(e)||e===u.SOLIDUS||e===u.GREATER_THAN_SIGN||e===u.EOF?(this._leaveAttrName(\"AFTER_ATTRIBUTE_NAME_STATE\"),this._unconsume()):e===u.EQUALS_SIGN?this._leaveAttrName(\"BEFORE_ATTRIBUTE_VALUE_STATE\"):r(e)?this.currentAttr.name+=c(e):e===u.QUOTATION_MARK||e===u.APOSTROPHE||e===u.LESS_THAN_SIGN?this.currentAttr.name+=_(e):e===u.NULL?this.currentAttr.name+=l.REPLACEMENT_CHARACTER:this.currentAttr.name+=_(e);},f.AFTER_ATTRIBUTE_NAME_STATE=function(e){t(e)||(e===u.SOLIDUS?this.state=\"SELF_CLOSING_START_TAG_STATE\":e===u.EQUALS_SIGN?this.state=\"BEFORE_ATTRIBUTE_VALUE_STATE\":e===u.GREATER_THAN_SIGN?(this.state=C,this._emitCurrentToken()):e===u.EOF?this._reconsumeInState(C):(this._createAttr(\"\"),this._reconsumeInState(\"ATTRIBUTE_NAME_STATE\")));},f.BEFORE_ATTRIBUTE_VALUE_STATE=function(e){t(e)||(e===u.QUOTATION_MARK?this.state=\"ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE\":e===u.APOSTROPHE?this.state=\"ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE\":this._reconsumeInState(\"ATTRIBUTE_VALUE_UNQUOTED_STATE\"));},f.ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE=function(e){e===u.QUOTATION_MARK?this.state=\"AFTER_ATTRIBUTE_VALUE_QUOTED_STATE\":e===u.AMPERSAND?(this.additionalAllowedCp=u.QUOTATION_MARK,this.returnState=this.state,this.state=\"CHARACTER_REFERENCE_IN_ATTRIBUTE_VALUE_STATE\"):e===u.NULL?this.currentAttr.value+=l.REPLACEMENT_CHARACTER:e===u.EOF?this._reconsumeInState(C):this.currentAttr.value+=_(e);},f.ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE=function(e){e===u.APOSTROPHE?this.state=\"AFTER_ATTRIBUTE_VALUE_QUOTED_STATE\":e===u.AMPERSAND?(this.additionalAllowedCp=u.APOSTROPHE,this.returnState=this.state,this.state=\"CHARACTER_REFERENCE_IN_ATTRIBUTE_VALUE_STATE\"):e===u.NULL?this.currentAttr.value+=l.REPLACEMENT_CHARACTER:e===u.EOF?this._reconsumeInState(C):this.currentAttr.value+=_(e);},f.ATTRIBUTE_VALUE_UNQUOTED_STATE=function(e){t(e)?this._leaveAttrValue(\"BEFORE_ATTRIBUTE_NAME_STATE\"):e===u.AMPERSAND?(this.additionalAllowedCp=u.GREATER_THAN_SIGN,this.returnState=this.state,this.state=\"CHARACTER_REFERENCE_IN_ATTRIBUTE_VALUE_STATE\"):e===u.GREATER_THAN_SIGN?(this._leaveAttrValue(C),this._emitCurrentToken()):e===u.NULL?this.currentAttr.value+=l.REPLACEMENT_CHARACTER:e===u.QUOTATION_MARK||e===u.APOSTROPHE||e===u.LESS_THAN_SIGN||e===u.EQUALS_SIGN||e===u.GRAVE_ACCENT?this.currentAttr.value+=_(e):e===u.EOF?this._reconsumeInState(C):this.currentAttr.value+=_(e);},f.CHARACTER_REFERENCE_IN_ATTRIBUTE_VALUE_STATE=function(e){var t=this._consumeCharacterReference(e,!0);if(!this._ensureHibernation()){if(t)for(var n=0;n<t.length;n++)this.currentAttr.value+=_(t[n]);else this.currentAttr.value+=\"&\";this.state=this.returnState;}},f.AFTER_ATTRIBUTE_VALUE_QUOTED_STATE=function(e){t(e)?this._leaveAttrValue(\"BEFORE_ATTRIBUTE_NAME_STATE\"):e===u.SOLIDUS?this._leaveAttrValue(\"SELF_CLOSING_START_TAG_STATE\"):e===u.GREATER_THAN_SIGN?(this._leaveAttrValue(C),this._emitCurrentToken()):e===u.EOF?this._reconsumeInState(C):this._reconsumeInState(\"BEFORE_ATTRIBUTE_NAME_STATE\");},f.SELF_CLOSING_START_TAG_STATE=function(e){e===u.GREATER_THAN_SIGN?(this.currentToken.selfClosing=!0,this.state=C,this._emitCurrentToken()):e===u.EOF?this._reconsumeInState(C):this._reconsumeInState(\"BEFORE_ATTRIBUTE_NAME_STATE\");},f.BOGUS_COMMENT_STATE=function(){this._createCommentToken(),this._reconsumeInState(\"BOGUS_COMMENT_STATE_CONTINUATION\");},f.BOGUS_COMMENT_STATE_CONTINUATION=function(e){for(;;){if(e===u.GREATER_THAN_SIGN){this.state=C;break}if(e===u.EOF){this._reconsumeInState(C);break}if(this.currentToken.data+=e===u.NULL?l.REPLACEMENT_CHARACTER:_(e),this._hibernationSnapshot(),e=this._consume(),this._ensureHibernation())return}this._emitCurrentToken();},f.MARKUP_DECLARATION_OPEN_STATE=function(e){var t=this._consumeSubsequentIfMatch(N.DASH_DASH_STRING,e,!0),n=!t&&this._consumeSubsequentIfMatch(N.DOCTYPE_STRING,e,!1),r=!t&&!n&&this.allowCDATA&&this._consumeSubsequentIfMatch(N.CDATA_START_STRING,e,!0);this._ensureHibernation()||(t?(this._createCommentToken(),this.state=\"COMMENT_START_STATE\"):n?this.state=\"DOCTYPE_STATE\":r?this.state=\"CDATA_SECTION_STATE\":this._reconsumeInState(\"BOGUS_COMMENT_STATE\"));},f.COMMENT_START_STATE=function(e){e===u.HYPHEN_MINUS?this.state=\"COMMENT_START_DASH_STATE\":e===u.NULL?(this.currentToken.data+=l.REPLACEMENT_CHARACTER,this.state=\"COMMENT_STATE\"):e===u.GREATER_THAN_SIGN?(this.state=C,this._emitCurrentToken()):e===u.EOF?(this._emitCurrentToken(),this._reconsumeInState(C)):(this.currentToken.data+=_(e),this.state=\"COMMENT_STATE\");},f.COMMENT_START_DASH_STATE=function(e){e===u.HYPHEN_MINUS?this.state=\"COMMENT_END_STATE\":e===u.NULL?(this.currentToken.data+=\"-\",this.currentToken.data+=l.REPLACEMENT_CHARACTER,this.state=\"COMMENT_STATE\"):e===u.GREATER_THAN_SIGN?(this.state=C,this._emitCurrentToken()):e===u.EOF?(this._emitCurrentToken(),this._reconsumeInState(C)):(this.currentToken.data+=\"-\",this.currentToken.data+=_(e),this.state=\"COMMENT_STATE\");},f.COMMENT_STATE=function(e){e===u.HYPHEN_MINUS?this.state=\"COMMENT_END_DASH_STATE\":e===u.NULL?this.currentToken.data+=l.REPLACEMENT_CHARACTER:e===u.EOF?(this._emitCurrentToken(),this._reconsumeInState(C)):this.currentToken.data+=_(e);},f.COMMENT_END_DASH_STATE=function(e){e===u.HYPHEN_MINUS?this.state=\"COMMENT_END_STATE\":e===u.NULL?(this.currentToken.data+=\"-\",this.currentToken.data+=l.REPLACEMENT_CHARACTER,this.state=\"COMMENT_STATE\"):e===u.EOF?(this._emitCurrentToken(),this._reconsumeInState(C)):(this.currentToken.data+=\"-\",this.currentToken.data+=_(e),this.state=\"COMMENT_STATE\");},f.COMMENT_END_STATE=function(e){e===u.GREATER_THAN_SIGN?(this.state=C,this._emitCurrentToken()):e===u.EXCLAMATION_MARK?this.state=\"COMMENT_END_BANG_STATE\":e===u.HYPHEN_MINUS?this.currentToken.data+=\"-\":e===u.NULL?(this.currentToken.data+=\"--\",this.currentToken.data+=l.REPLACEMENT_CHARACTER,this.state=\"COMMENT_STATE\"):e===u.EOF?(this._reconsumeInState(C),this._emitCurrentToken()):(this.currentToken.data+=\"--\",this.currentToken.data+=_(e),this.state=\"COMMENT_STATE\");},f.COMMENT_END_BANG_STATE=function(e){e===u.HYPHEN_MINUS?(this.currentToken.data+=\"--!\",this.state=\"COMMENT_END_DASH_STATE\"):e===u.GREATER_THAN_SIGN?(this.state=C,this._emitCurrentToken()):e===u.NULL?(this.currentToken.data+=\"--!\",this.currentToken.data+=l.REPLACEMENT_CHARACTER,this.state=\"COMMENT_STATE\"):e===u.EOF?(this._emitCurrentToken(),this._reconsumeInState(C)):(this.currentToken.data+=\"--!\",this.currentToken.data+=_(e),this.state=\"COMMENT_STATE\");},f.DOCTYPE_STATE=function(e){t(e)||(e===u.GREATER_THAN_SIGN?(this._createDoctypeToken(null),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=C):e===u.EOF?(this._createDoctypeToken(null),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._reconsumeInState(C)):(this._createDoctypeToken(\"\"),this._reconsumeInState(\"DOCTYPE_NAME_STATE\")));},f.DOCTYPE_NAME_STATE=function(e){t(e)||e===u.GREATER_THAN_SIGN||e===u.EOF?this._reconsumeInState(\"AFTER_DOCTYPE_NAME_STATE\"):r(e)?this.currentToken.name+=c(e):e===u.NULL?this.currentToken.name+=l.REPLACEMENT_CHARACTER:this.currentToken.name+=_(e);},f.AFTER_DOCTYPE_NAME_STATE=function(e){if(!t(e))if(e===u.GREATER_THAN_SIGN)this.state=C,this._emitCurrentToken();else{var n=this._consumeSubsequentIfMatch(N.PUBLIC_STRING,e,!1),r=!n&&this._consumeSubsequentIfMatch(N.SYSTEM_STRING,e,!1);this._ensureHibernation()||(n?this.state=\"BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE\":r?this.state=\"BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE\":(this.currentToken.forceQuirks=!0,this.state=\"BOGUS_DOCTYPE_STATE\"));}},f.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE=function(e){t(e)||(e===u.QUOTATION_MARK?(this.currentToken.publicId=\"\",this.state=\"DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE\"):e===u.APOSTROPHE?(this.currentToken.publicId=\"\",this.state=\"DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE\"):(this.currentToken.forceQuirks=!0,this._reconsumeInState(\"BOGUS_DOCTYPE_STATE\")));},f.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE=function(e){e===u.QUOTATION_MARK?this.state=\"BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE\":e===u.NULL?this.currentToken.publicId+=l.REPLACEMENT_CHARACTER:e===u.GREATER_THAN_SIGN?(this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=C):e===u.EOF?(this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._reconsumeInState(C)):this.currentToken.publicId+=_(e);},f.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE=function(e){e===u.APOSTROPHE?this.state=\"BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE\":e===u.NULL?this.currentToken.publicId+=l.REPLACEMENT_CHARACTER:e===u.GREATER_THAN_SIGN?(this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=C):e===u.EOF?(this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._reconsumeInState(C)):this.currentToken.publicId+=_(e);},f.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE=function(e){t(e)||(e===u.GREATER_THAN_SIGN?(this._emitCurrentToken(),this.state=C):e===u.QUOTATION_MARK?(this.currentToken.systemId=\"\",this.state=\"DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE\"):e===u.APOSTROPHE?(this.currentToken.systemId=\"\",this.state=\"DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE\"):(this.currentToken.forceQuirks=!0,this._reconsumeInState(\"BOGUS_DOCTYPE_STATE\")));},f.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE=function(e){t(e)||(e===u.QUOTATION_MARK?(this.currentToken.systemId=\"\",this.state=\"DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE\"):e===u.APOSTROPHE?(this.currentToken.systemId=\"\",this.state=\"DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE\"):(this.currentToken.forceQuirks=!0,this._reconsumeInState(\"BOGUS_DOCTYPE_STATE\")));},f.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE=function(e){e===u.QUOTATION_MARK?this.state=\"AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE\":e===u.GREATER_THAN_SIGN?(this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=C):e===u.NULL?this.currentToken.systemId+=l.REPLACEMENT_CHARACTER:e===u.EOF?(this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._reconsumeInState(C)):this.currentToken.systemId+=_(e);},f.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE=function(e){e===u.APOSTROPHE?this.state=\"AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE\":e===u.GREATER_THAN_SIGN?(this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=C):e===u.NULL?this.currentToken.systemId+=l.REPLACEMENT_CHARACTER:e===u.EOF?(this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._reconsumeInState(C)):this.currentToken.systemId+=_(e);},f.AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE=function(e){t(e)||(e===u.GREATER_THAN_SIGN?(this._emitCurrentToken(),this.state=C):e===u.EOF?(this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._reconsumeInState(C)):this.state=\"BOGUS_DOCTYPE_STATE\");},f.BOGUS_DOCTYPE_STATE=function(e){e===u.GREATER_THAN_SIGN?(this._emitCurrentToken(),this.state=C):e===u.EOF&&(this._emitCurrentToken(),this._reconsumeInState(C));},f.CDATA_SECTION_STATE=function(e){for(;;){if(e===u.EOF){this._reconsumeInState(C);break}var t=this._consumeSubsequentIfMatch(N.CDATA_END_STRING,e,!0);if(this._ensureHibernation())break;if(t){this.state=C;break}if(this._emitCodePoint(e),this._hibernationSnapshot(),e=this._consume(),this._ensureHibernation())break}};}); var html=createCommonjsModule(function(e,t){var n=t.NAMESPACES={HTML:\"http://www.w3.org/1999/xhtml\",MATHML:\"http://www.w3.org/1998/Math/MathML\",SVG:\"http://www.w3.org/2000/svg\",XLINK:\"http://www.w3.org/1999/xlink\",XML:\"http://www.w3.org/XML/1998/namespace\",XMLNS:\"http://www.w3.org/2000/xmlns/\"};t.ATTRS={TYPE:\"type\",ACTION:\"action\",ENCODING:\"encoding\",PROMPT:\"prompt\",NAME:\"name\",COLOR:\"color\",FACE:\"face\",SIZE:\"size\"},t.DOCUMENT_MODE={NO_QUIRKS:\"no-quirks\",QUIRKS:\"quirks\",LIMITED_QUIRKS:\"limited-quirks\"};var r=t.TAG_NAMES={A:\"a\",ADDRESS:\"address\",ANNOTATION_XML:\"annotation-xml\",APPLET:\"applet\",AREA:\"area\",ARTICLE:\"article\",ASIDE:\"aside\",B:\"b\",BASE:\"base\",BASEFONT:\"basefont\",BGSOUND:\"bgsound\",BIG:\"big\",BLOCKQUOTE:\"blockquote\",BODY:\"body\",BR:\"br\",BUTTON:\"button\",CAPTION:\"caption\",CENTER:\"center\",CODE:\"code\",COL:\"col\",COLGROUP:\"colgroup\",DD:\"dd\",DESC:\"desc\",DETAILS:\"details\",DIALOG:\"dialog\",DIR:\"dir\",DIV:\"div\",DL:\"dl\",DT:\"dt\",EM:\"em\",EMBED:\"embed\",FIELDSET:\"fieldset\",FIGCAPTION:\"figcaption\",FIGURE:\"figure\",FONT:\"font\",FOOTER:\"footer\",FOREIGN_OBJECT:\"foreignObject\",FORM:\"form\",FRAME:\"frame\",FRAMESET:\"frameset\",H1:\"h1\",H2:\"h2\",H3:\"h3\",H4:\"h4\",H5:\"h5\",H6:\"h6\",HEAD:\"head\",HEADER:\"header\",HGROUP:\"hgroup\",HR:\"hr\",HTML:\"html\",I:\"i\",IMG:\"img\",IMAGE:\"image\",INPUT:\"input\",IFRAME:\"iframe\",KEYGEN:\"keygen\",LABEL:\"label\",LI:\"li\",LINK:\"link\",LISTING:\"listing\",MAIN:\"main\",MALIGNMARK:\"malignmark\",MARQUEE:\"marquee\",MATH:\"math\",MENU:\"menu\",MENUITEM:\"menuitem\",META:\"meta\",MGLYPH:\"mglyph\",MI:\"mi\",MO:\"mo\",MN:\"mn\",MS:\"ms\",MTEXT:\"mtext\",NAV:\"nav\",NOBR:\"nobr\",NOFRAMES:\"noframes\",NOEMBED:\"noembed\",NOSCRIPT:\"noscript\",OBJECT:\"object\",OL:\"ol\",OPTGROUP:\"optgroup\",OPTION:\"option\",P:\"p\",PARAM:\"param\",PLAINTEXT:\"plaintext\",PRE:\"pre\",RB:\"rb\",RP:\"rp\",RT:\"rt\",RTC:\"rtc\",RUBY:\"ruby\",S:\"s\",SCRIPT:\"script\",SECTION:\"section\",SELECT:\"select\",SOURCE:\"source\",SMALL:\"small\",SPAN:\"span\",STRIKE:\"strike\",STRONG:\"strong\",STYLE:\"style\",SUB:\"sub\",SUMMARY:\"summary\",SUP:\"sup\",TABLE:\"table\",TBODY:\"tbody\",TEMPLATE:\"template\",TEXTAREA:\"textarea\",TFOOT:\"tfoot\",TD:\"td\",TH:\"th\",THEAD:\"thead\",TITLE:\"title\",TR:\"tr\",TRACK:\"track\",TT:\"tt\",U:\"u\",UL:\"ul\",SVG:\"svg\",VAR:\"var\",WBR:\"wbr\",XMP:\"xmp\"},i=t.SPECIAL_ELEMENTS=Object.create(null);i[n.HTML]=Object.create(null),i[n.HTML][r.ADDRESS]=!0,i[n.HTML][r.APPLET]=!0,i[n.HTML][r.AREA]=!0,i[n.HTML][r.ARTICLE]=!0,i[n.HTML][r.ASIDE]=!0,i[n.HTML][r.BASE]=!0,i[n.HTML][r.BASEFONT]=!0,i[n.HTML][r.BGSOUND]=!0,i[n.HTML][r.BLOCKQUOTE]=!0,i[n.HTML][r.BODY]=!0,i[n.HTML][r.BR]=!0,i[n.HTML][r.BUTTON]=!0,i[n.HTML][r.CAPTION]=!0,i[n.HTML][r.CENTER]=!0,i[n.HTML][r.COL]=!0,i[n.HTML][r.COLGROUP]=!0,i[n.HTML][r.DD]=!0,i[n.HTML][r.DETAILS]=!0,i[n.HTML][r.DIR]=!0,i[n.HTML][r.DIV]=!0,i[n.HTML][r.DL]=!0,i[n.HTML][r.DT]=!0,i[n.HTML][r.EMBED]=!0,i[n.HTML][r.FIELDSET]=!0,i[n.HTML][r.FIGCAPTION]=!0,i[n.HTML][r.FIGURE]=!0,i[n.HTML][r.FOOTER]=!0,i[n.HTML][r.FORM]=!0,i[n.HTML][r.FRAME]=!0,i[n.HTML][r.FRAMESET]=!0,i[n.HTML][r.H1]=!0,i[n.HTML][r.H2]=!0,i[n.HTML][r.H3]=!0,i[n.HTML][r.H4]=!0,i[n.HTML][r.H5]=!0,i[n.HTML][r.H6]=!0,i[n.HTML][r.HEAD]=!0,i[n.HTML][r.HEADER]=!0,i[n.HTML][r.HGROUP]=!0,i[n.HTML][r.HR]=!0,i[n.HTML][r.HTML]=!0,i[n.HTML][r.IFRAME]=!0,i[n.HTML][r.IMG]=!0,i[n.HTML][r.INPUT]=!0,i[n.HTML][r.LI]=!0,i[n.HTML][r.LINK]=!0,i[n.HTML][r.LISTING]=!0,i[n.HTML][r.MAIN]=!0,i[n.HTML][r.MARQUEE]=!0,i[n.HTML][r.MENU]=!0,i[n.HTML][r.META]=!0,i[n.HTML][r.NAV]=!0,i[n.HTML][r.NOEMBED]=!0,i[n.HTML][r.NOFRAMES]=!0,i[n.HTML][r.NOSCRIPT]=!0,i[n.HTML][r.OBJECT]=!0,i[n.HTML][r.OL]=!0,i[n.HTML][r.P]=!0,i[n.HTML][r.PARAM]=!0,i[n.HTML][r.PLAINTEXT]=!0,i[n.HTML][r.PRE]=!0,i[n.HTML][r.SCRIPT]=!0,i[n.HTML][r.SECTION]=!0,i[n.HTML][r.SELECT]=!0,i[n.HTML][r.SOURCE]=!0,i[n.HTML][r.STYLE]=!0,i[n.HTML][r.SUMMARY]=!0,i[n.HTML][r.TABLE]=!0,i[n.HTML][r.TBODY]=!0,i[n.HTML][r.TD]=!0,i[n.HTML][r.TEMPLATE]=!0,i[n.HTML][r.TEXTAREA]=!0,i[n.HTML][r.TFOOT]=!0,i[n.HTML][r.TH]=!0,i[n.HTML][r.THEAD]=!0,i[n.HTML][r.TITLE]=!0,i[n.HTML][r.TR]=!0,i[n.HTML][r.TRACK]=!0,i[n.HTML][r.UL]=!0,i[n.HTML][r.WBR]=!0,i[n.HTML][r.XMP]=!0,i[n.MATHML]=Object.create(null),i[n.MATHML][r.MI]=!0,i[n.MATHML][r.MO]=!0,i[n.MATHML][r.MN]=!0,i[n.MATHML][r.MS]=!0,i[n.MATHML][r.MTEXT]=!0,i[n.MATHML][r.ANNOTATION_XML]=!0,i[n.SVG]=Object.create(null),i[n.SVG][r.TITLE]=!0,i[n.SVG][r.FOREIGN_OBJECT]=!0,i[n.SVG][r.DESC]=!0;}); var open_element_stack=createCommonjsModule(function(e){function t(e){switch(e.length){case 1:return e===i.P;case 2:return e===i.RB||e===i.RP||e===i.RT||e===i.DD||e===i.DT||e===i.LI;case 3:return e===i.RTC;case 6:return e===i.OPTION;case 8:return e===i.OPTGROUP||e===i.MENUITEM}return!1}function n(e,t){switch(e.length){case 2:if(e===i.TD||e===i.TH)return t===s.HTML;if(e===i.MI||e===i.MO||e===i.MN||e===i.MS)return t===s.MATHML;break;case 4:if(e===i.HTML)return t===s.HTML;if(e===i.DESC)return t===s.SVG;break;case 5:if(e===i.TABLE)return t===s.HTML;if(e===i.MTEXT)return t===s.MATHML;if(e===i.TITLE)return t===s.SVG;break;case 6:return(e===i.APPLET||e===i.OBJECT)&&t===s.HTML;case 7:return(e===i.CAPTION||e===i.MARQUEE)&&t===s.HTML;case 8:return e===i.TEMPLATE&&t===s.HTML;case 13:return e===i.FOREIGN_OBJECT&&t===s.SVG;case 14:return e===i.ANNOTATION_XML&&t===s.MATHML}return!1}var r=html,i=r.TAG_NAMES,s=r.NAMESPACES,o=e.exports=function(e,t){this.stackTop=-1,this.items=[],this.current=e,this.currentTagName=null,this.currentTmplContent=null,this.tmplCount=0,this.treeAdapter=t;};o.prototype._indexOf=function(e){for(var t=-1,n=this.stackTop;n>=0;n--)if(this.items[n]===e){t=n;break}return t},o.prototype._isInTemplate=function(){return this.currentTagName===i.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===s.HTML},o.prototype._updateCurrentElement=function(){this.current=this.items[this.stackTop],this.currentTagName=this.current&&this.treeAdapter.getTagName(this.current),this.currentTmplContent=this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):null;},o.prototype.push=function(e){this.items[++this.stackTop]=e,this._updateCurrentElement(),this._isInTemplate()&&this.tmplCount++;},o.prototype.pop=function(){this.stackTop--,this.tmplCount>0&&this._isInTemplate()&&this.tmplCount--,this._updateCurrentElement();},o.prototype.replace=function(e,t){var n=this._indexOf(e);this.items[n]=t,n===this.stackTop&&this._updateCurrentElement();},o.prototype.insertAfter=function(e,t){var n=this._indexOf(e)+1;this.items.splice(n,0,t),n===++this.stackTop&&this._updateCurrentElement();},o.prototype.popUntilTagNamePopped=function(e){for(;this.stackTop>-1;){var t=this.currentTagName,n=this.treeAdapter.getNamespaceURI(this.current);if(this.pop(),t===e&&n===s.HTML)break}},o.prototype.popUntilElementPopped=function(e){for(;this.stackTop>-1;){var t=this.current;if(this.pop(),t===e)break}},o.prototype.popUntilNumberedHeaderPopped=function(){for(;this.stackTop>-1;){var e=this.currentTagName,t=this.treeAdapter.getNamespaceURI(this.current);if(this.pop(),e===i.H1||e===i.H2||e===i.H3||e===i.H4||e===i.H5||e===i.H6&&t===s.HTML)break}},o.prototype.popUntilTableCellPopped=function(){for(;this.stackTop>-1;){var e=this.currentTagName,t=this.treeAdapter.getNamespaceURI(this.current);if(this.pop(),e===i.TD||e===i.TH&&t===s.HTML)break}},o.prototype.popAllUpToHtmlElement=function(){this.stackTop=0,this._updateCurrentElement();},o.prototype.clearBackToTableContext=function(){for(;this.currentTagName!==i.TABLE&&this.currentTagName!==i.TEMPLATE&&this.currentTagName!==i.HTML||this.treeAdapter.getNamespaceURI(this.current)!==s.HTML;)this.pop();},o.prototype.clearBackToTableBodyContext=function(){for(;this.currentTagName!==i.TBODY&&this.currentTagName!==i.TFOOT&&this.currentTagName!==i.THEAD&&this.currentTagName!==i.TEMPLATE&&this.currentTagName!==i.HTML||this.treeAdapter.getNamespaceURI(this.current)!==s.HTML;)this.pop();},o.prototype.clearBackToTableRowContext=function(){for(;this.currentTagName!==i.TR&&this.currentTagName!==i.TEMPLATE&&this.currentTagName!==i.HTML||this.treeAdapter.getNamespaceURI(this.current)!==s.HTML;)this.pop();},o.prototype.remove=function(e){for(var t=this.stackTop;t>=0;t--)if(this.items[t]===e){this.items.splice(t,1),this.stackTop--,this._updateCurrentElement();break}},o.prototype.tryPeekProperlyNestedBodyElement=function(){var e=this.items[1];return e&&this.treeAdapter.getTagName(e)===i.BODY?e:null},o.prototype.contains=function(e){return this._indexOf(e)>-1},o.prototype.getCommonAncestor=function(e){var t=this._indexOf(e);return--t>=0?this.items[t]:null},o.prototype.isRootHtmlElementCurrent=function(){return 0===this.stackTop&&this.currentTagName===i.HTML},o.prototype.hasInScope=function(e){for(var t=this.stackTop;t>=0;t--){var r=this.treeAdapter.getTagName(this.items[t]),i=this.treeAdapter.getNamespaceURI(this.items[t]);if(r===e&&i===s.HTML)return!0;if(n(r,i))return!1}return!0},o.prototype.hasNumberedHeaderInScope=function(){for(var e=this.stackTop;e>=0;e--){var t=this.treeAdapter.getTagName(this.items[e]),r=this.treeAdapter.getNamespaceURI(this.items[e]);if((t===i.H1||t===i.H2||t===i.H3||t===i.H4||t===i.H5||t===i.H6)&&r===s.HTML)return!0;if(n(t,r))return!1}return!0},o.prototype.hasInListItemScope=function(e){for(var t=this.stackTop;t>=0;t--){var r=this.treeAdapter.getTagName(this.items[t]),o=this.treeAdapter.getNamespaceURI(this.items[t]);if(r===e&&o===s.HTML)return!0;if((r===i.UL||r===i.OL)&&o===s.HTML||n(r,o))return!1}return!0},o.prototype.hasInButtonScope=function(e){for(var t=this.stackTop;t>=0;t--){var r=this.treeAdapter.getTagName(this.items[t]),o=this.treeAdapter.getNamespaceURI(this.items[t]);if(r===e&&o===s.HTML)return!0;if(r===i.BUTTON&&o===s.HTML||n(r,o))return!1}return!0},o.prototype.hasInTableScope=function(e){for(var t=this.stackTop;t>=0;t--){var n=this.treeAdapter.getTagName(this.items[t]);if(this.treeAdapter.getNamespaceURI(this.items[t])===s.HTML){if(n===e)return!0;if(n===i.TABLE||n===i.TEMPLATE||n===i.HTML)return!1}}return!0},o.prototype.hasTableBodyContextInTableScope=function(){for(var e=this.stackTop;e>=0;e--){var t=this.treeAdapter.getTagName(this.items[e]);if(this.treeAdapter.getNamespaceURI(this.items[e])===s.HTML){if(t===i.TBODY||t===i.THEAD||t===i.TFOOT)return!0;if(t===i.TABLE||t===i.HTML)return!1}}return!0},o.prototype.hasInSelectScope=function(e){for(var t=this.stackTop;t>=0;t--){var n=this.treeAdapter.getTagName(this.items[t]);if(this.treeAdapter.getNamespaceURI(this.items[t])===s.HTML){if(n===e)return!0;if(n!==i.OPTION&&n!==i.OPTGROUP)return!1}}return!0},o.prototype.generateImpliedEndTags=function(){for(;t(this.currentTagName);)this.pop();},o.prototype.generateImpliedEndTagsWithExclusion=function(e){for(;t(this.currentTagName)&&this.currentTagName!==e;)this.pop();};}); var formatting_element_list=createCommonjsModule(function(e){var t=e.exports=function(e){this.length=0,this.entries=[],this.treeAdapter=e,this.bookmark=null;};t.MARKER_ENTRY=\"MARKER_ENTRY\",t.ELEMENT_ENTRY=\"ELEMENT_ENTRY\",t.prototype._getNoahArkConditionCandidates=function(e){var n=[];if(this.length>=3)for(var r=this.treeAdapter.getAttrList(e).length,i=this.treeAdapter.getTagName(e),s=this.treeAdapter.getNamespaceURI(e),o=this.length-1;o>=0;o--){var T=this.entries[o];if(T.type===t.MARKER_ENTRY)break;var a=T.element,E=this.treeAdapter.getAttrList(a);this.treeAdapter.getTagName(a)===i&&this.treeAdapter.getNamespaceURI(a)===s&&E.length===r&&n.push({idx:o,attrs:E});}return n.length<3?[]:n},t.prototype._ensureNoahArkCondition=function(e){var t=this._getNoahArkConditionCandidates(e),n=t.length;if(n){for(var r=this.treeAdapter.getAttrList(e),i=r.length,s=Object.create(null),o=0;o<i;o++){var T=r[o];s[T.name]=T.value;}for(o=0;o<i;o++)for(var a=0;a<n;a++){var E=t[a].attrs[o];if(s[E.name]!==E.value&&(t.splice(a,1),n--),t.length<3)return}for(o=n-1;o>=2;o--)this.entries.splice(t[o].idx,1),this.length--;}},t.prototype.insertMarker=function(){this.entries.push({type:t.MARKER_ENTRY}),this.length++;},t.prototype.pushElement=function(e,n){this._ensureNoahArkCondition(e),this.entries.push({type:t.ELEMENT_ENTRY,element:e,token:n}),this.length++;},t.prototype.insertElementAfterBookmark=function(e,n){for(var r=this.length-1;r>=0&&this.entries[r]!==this.bookmark;r--);this.entries.splice(r+1,0,{type:t.ELEMENT_ENTRY,element:e,token:n}),this.length++;},t.prototype.removeEntry=function(e){for(var t=this.length-1;t>=0;t--)if(this.entries[t]===e){this.entries.splice(t,1),this.length--;break}},t.prototype.clearToLastMarker=function(){for(;this.length;){var e=this.entries.pop();if(this.length--,e.type===t.MARKER_ENTRY)break}},t.prototype.getElementEntryInScopeWithTagName=function(e){for(var n=this.length-1;n>=0;n--){var r=this.entries[n];if(r.type===t.MARKER_ENTRY)return null;if(this.treeAdapter.getTagName(r.element)===e)return r}return null},t.prototype.getElementEntry=function(e){for(var n=this.length-1;n>=0;n--){var r=this.entries[n];if(r.type===t.ELEMENT_ENTRY&&r.element===e)return r}return null};}); var OpenElementStack=open_element_stack; var Tokenizer=index$4; var HTML=html; var $$1=HTML.TAG_NAMES; var assign$1=function(e){function t(t,n){var i=t.__location;if(i)if(i.startTag||(i.startTag={line:i.line,col:i.col,startOffset:i.startOffset,endOffset:i.endOffset},i.attrs&&(i.startTag.attrs=i.attrs)),n.location){var s=n.location,o=r.getTagName(t),T=n.type===Tokenizer.END_TAG_TOKEN&&o===n.tagName;T&&(i.endTag={line:s.line,col:s.col,startOffset:s.startOffset,endOffset:s.endOffset}),i.endOffset=T?s.endOffset:s.startOffset;}else n.type===Tokenizer.EOF_TOKEN&&(i.endOffset=e.tokenizer.preprocessor.sourcePos);}var n=Object.getPrototypeOf(e),r=e.treeAdapter,i=null,s=null,o=null;e._bootstrap=function(r,T){n._bootstrap.call(this,r,T),i=null,s=null,o=null,e.openElements.pop=function(){t(this.current,o),OpenElementStack.prototype.pop.call(this);},e.openElements.popAllUpToHtmlElement=function(){for(var e=this.stackTop;e>0;e--)t(this.items[e],o);OpenElementStack.prototype.popAllUpToHtmlElement.call(this);},e.openElements.remove=function(e){t(e,o),OpenElementStack.prototype.remove.call(this,e);};},e._runParsingLoop=function(r){n._runParsingLoop.call(this,r);for(var i=e.openElements.stackTop;i>=0;i--)t(e.openElements.items[i],o);},e._processTokenInForeignContent=function(e){o=e,n._processTokenInForeignContent.call(this,e);},e._processToken=function(e){if(o=e,n._processToken.call(this,e),e.type===Tokenizer.END_TAG_TOKEN&&(e.tagName===$$1.HTML||e.tagName===$$1.BODY&&this.openElements.hasInScope($$1.BODY)))for(var r=this.openElements.stackTop;r>=0;r--){var i=this.openElements.items[r];if(this.treeAdapter.getTagName(i)===e.tagName){t(i,e);break}}},e._setDocumentType=function(e){n._setDocumentType.call(this,e);for(var t=this.treeAdapter.getChildNodes(this.document),r=t.length,i=0;i<r;i++){var s=t[i];if(this.treeAdapter.isDocumentTypeNode(s)){s.__location=e.location;break}}},e._attachElementToTree=function(e){e.__location=i||null,i=null,n._attachElementToTree.call(this,e);},e._appendElement=function(e,t){i=e.location,n._appendElement.call(this,e,t);},e._insertElement=function(e,t){i=e.location,n._insertElement.call(this,e,t);},e._insertTemplate=function(e){i=e.location,n._insertTemplate.call(this,e),this.treeAdapter.getTemplateContent(this.openElements.current).__location=null;},e._insertFakeRootElement=function(){n._insertFakeRootElement.call(this),this.openElements.current.__location=null;},e._appendCommentNode=function(e,t){n._appendCommentNode.call(this,e,t);var r=this.treeAdapter.getChildNodes(t);r[r.length-1].__location=e.location;},e._findFosterParentingLocation=function(){return s=n._findFosterParentingLocation.call(this)},e._insertCharacters=function(e){n._insertCharacters.call(this,e);var t=this._shouldFosterParentOnInsertion(),r=t&&s.parent||this.openElements.currentTmplContent||this.openElements.current,i=this.treeAdapter.getChildNodes(r),o=i[t&&s.beforeElement?i.indexOf(s.beforeElement)-1:i.length-1];o.__location?o.__location.endOffset=e.location.endOffset:o.__location=e.location;};}; var parser_mixin={assign:assign$1}; var _default=createCommonjsModule(function(e,t){var n=html.DOCUMENT_MODE;t.createDocument=function(){return{nodeName:\"#document\",mode:n.NO_QUIRKS,childNodes:[]}},t.createDocumentFragment=function(){return{nodeName:\"#document-fragment\",childNodes:[]}},t.createElement=function(e,t,n){return{nodeName:e,tagName:e,attrs:n,namespaceURI:t,childNodes:[],parentNode:null}},t.createCommentNode=function(e){return{nodeName:\"#comment\",data:e,parentNode:null}};var r=function(e){return{nodeName:\"#text\",value:e,parentNode:null}},i=t.appendChild=function(e,t){e.childNodes.push(t),t.parentNode=e;},s=t.insertBefore=function(e,t,n){var r=e.childNodes.indexOf(n);e.childNodes.splice(r,0,t),t.parentNode=e;};t.setTemplateContent=function(e,t){e.content=t;},t.getTemplateContent=function(e){return e.content},t.setDocumentType=function(e,t,n,r){for(var s=null,o=0;o<e.childNodes.length;o++)if(\"#documentType\"===e.childNodes[o].nodeName){s=e.childNodes[o];break}s?(s.name=t,s.publicId=n,s.systemId=r):i(e,{nodeName:\"#documentType\",name:t,publicId:n,systemId:r});},t.setDocumentMode=function(e,t){e.mode=t;},t.getDocumentMode=function(e){return e.mode},t.detachNode=function(e){if(e.parentNode){var t=e.parentNode.childNodes.indexOf(e);e.parentNode.childNodes.splice(t,1),e.parentNode=null;}},t.insertText=function(e,t){if(e.childNodes.length){var n=e.childNodes[e.childNodes.length-1];if(\"#text\"===n.nodeName)return void(n.value+=t)}i(e,r(t));},t.insertTextBefore=function(e,t,n){var i=e.childNodes[e.childNodes.indexOf(n)-1];i&&\"#text\"===i.nodeName?i.value+=t:s(e,r(t),n);},t.adoptAttributes=function(e,t){for(var n=[],r=0;r<e.attrs.length;r++)n.push(e.attrs[r].name);for(var i=0;i<t.length;i++)-1===n.indexOf(t[i].name)&&e.attrs.push(t[i]);},t.getFirstChild=function(e){return e.childNodes[0]},t.getChildNodes=function(e){return e.childNodes},t.getParentNode=function(e){return e.parentNode},t.getAttrList=function(e){return e.attrs},t.getTagName=function(e){return e.tagName},t.getNamespaceURI=function(e){return e.namespaceURI},t.getTextNodeContent=function(e){return e.value},t.getCommentNodeContent=function(e){return e.data},t.getDocumentTypeNodeName=function(e){return e.name},t.getDocumentTypeNodePublicId=function(e){return e.publicId},t.getDocumentTypeNodeSystemId=function(e){return e.systemId},t.isTextNode=function(e){return\"#text\"===e.nodeName},t.isCommentNode=function(e){return\"#comment\"===e.nodeName},t.isDocumentTypeNode=function(e){return\"#documentType\"===e.nodeName},t.isElementNode=function(e){return!!e.tagName};}); var DOCUMENT_MODE=html.DOCUMENT_MODE; var VALID_DOCTYPE_NAME=\"html\"; var QUIRKS_MODE_SYSTEM_ID=\"http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd\"; var QUIRKS_MODE_PUBLIC_ID_PREFIXES=[\"+//silmaril//dtd html pro v0r11 19970101//en\",\"-//advasoft ltd//dtd html 3.0 aswedit + extensions//en\",\"-//as//dtd html 3.0 aswedit + extensions//en\",\"-//ietf//dtd html 2.0 level 1//en\",\"-//ietf//dtd html 2.0 level 2//en\",\"-//ietf//dtd html 2.0 strict level 1//en\",\"-//ietf//dtd html 2.0 strict level 2//en\",\"-//ietf//dtd html 2.0 strict//en\",\"-//ietf//dtd html 2.0//en\",\"-//ietf//dtd html 2.1e//en\",\"-//ietf//dtd html 3.0//en\",\"-//ietf//dtd html 3.0//en//\",\"-//ietf//dtd html 3.2 final//en\",\"-//ietf//dtd html 3.2//en\",\"-//ietf//dtd html 3//en\",\"-//ietf//dtd html level 0//en\",\"-//ietf//dtd html level 0//en//2.0\",\"-//ietf//dtd html level 1//en\",\"-//ietf//dtd html level 1//en//2.0\",\"-//ietf//dtd html level 2//en\",\"-//ietf//dtd html level 2//en//2.0\",\"-//ietf//dtd html level 3//en\",\"-//ietf//dtd html level 3//en//3.0\",\"-//ietf//dtd html strict level 0//en\",\"-//ietf//dtd html strict level 0//en//2.0\",\"-//ietf//dtd html strict level 1//en\",\"-//ietf//dtd html strict level 1//en//2.0\",\"-//ietf//dtd html strict level 2//en\",\"-//ietf//dtd html strict level 2//en//2.0\",\"-//ietf//dtd html strict level 3//en\",\"-//ietf//dtd html strict level 3//en//3.0\",\"-//ietf//dtd html strict//en\",\"-//ietf//dtd html strict//en//2.0\",\"-//ietf//dtd html strict//en//3.0\",\"-//ietf//dtd html//en\",\"-//ietf//dtd html//en//2.0\",\"-//ietf//dtd html//en//3.0\",\"-//metrius//dtd metrius presentational//en\",\"-//microsoft//dtd internet explorer 2.0 html strict//en\",\"-//microsoft//dtd internet explorer 2.0 html//en\",\"-//microsoft//dtd internet explorer 2.0 tables//en\",\"-//microsoft//dtd internet explorer 3.0 html strict//en\",\"-//microsoft//dtd internet explorer 3.0 html//en\",\"-//microsoft//dtd internet explorer 3.0 tables//en\",\"-//netscape comm. corp.//dtd html//en\",\"-//netscape comm. corp.//dtd strict html//en\",\"-//o'reilly and associates//dtd html 2.0//en\",\"-//o'reilly and associates//dtd html extended 1.0//en\",\"-//spyglass//dtd html 2.0 extended//en\",\"-//sq//dtd html 2.0 hotmetal + extensions//en\",\"-//sun microsystems corp.//dtd hotjava html//en\",\"-//sun microsystems corp.//dtd hotjava strict html//en\",\"-//w3c//dtd html 3 1995-03-24//en\",\"-//w3c//dtd html 3.2 draft//en\",\"-//w3c//dtd html 3.2 final//en\",\"-//w3c//dtd html 3.2//en\",\"-//w3c//dtd html 3.2s draft//en\",\"-//w3c//dtd html 4.0 frameset//en\",\"-//w3c//dtd html 4.0 transitional//en\",\"-//w3c//dtd html experimental 19960712//en\",\"-//w3c//dtd html experimental 970421//en\",\"-//w3c//dtd w3 html//en\",\"-//w3o//dtd w3 html 3.0//en\",\"-//w3o//dtd w3 html 3.0//en//\",\"-//webtechs//dtd mozilla html 2.0//en\",\"-//webtechs//dtd mozilla html//en\"]; var QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES=QUIRKS_MODE_PUBLIC_ID_PREFIXES.concat([\"-//w3c//dtd html 4.01 frameset//\",\"-//w3c//dtd html 4.01 transitional//\"]); var QUIRKS_MODE_PUBLIC_IDS=[\"-//w3o//dtd w3 html strict 3.0//en//\",\"-/w3c/dtd html 4.0 transitional/en\",\"html\"]; var LIMITED_QUIRKS_PUBLIC_ID_PREFIXES=[\"-//W3C//DTD XHTML 1.0 Frameset//\",\"-//W3C//DTD XHTML 1.0 Transitional//\"]; var LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES=LIMITED_QUIRKS_PUBLIC_ID_PREFIXES.concat([\"-//W3C//DTD HTML 4.01 Frameset//\",\"-//W3C//DTD HTML 4.01 Transitional//\"]); var getDocumentMode=function(e,t,n){if(e!==VALID_DOCTYPE_NAME)return DOCUMENT_MODE.QUIRKS;if(n&&n.toLowerCase()===QUIRKS_MODE_SYSTEM_ID)return DOCUMENT_MODE.QUIRKS;if(null!==t){if(t=t.toLowerCase(),QUIRKS_MODE_PUBLIC_IDS.indexOf(t)>-1)return DOCUMENT_MODE.QUIRKS;var r=null===n?QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES:QUIRKS_MODE_PUBLIC_ID_PREFIXES;if(hasPrefix(t,r))return DOCUMENT_MODE.QUIRKS;if(r=null===n?LIMITED_QUIRKS_PUBLIC_ID_PREFIXES:LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES,hasPrefix(t,r))return DOCUMENT_MODE.LIMITED_QUIRKS}return DOCUMENT_MODE.NO_QUIRKS}; var serializeContent=function(e,t,n){var r=\"!DOCTYPE \";return e&&(r+=e),null!==t?r+=\" PUBLIC \"+enquoteDoctypeId(t):null!==n&&(r+=\" SYSTEM\"),null!==n&&(r+=\" \"+enquoteDoctypeId(n)),r}; var doctype={getDocumentMode:getDocumentMode,serializeContent:serializeContent}; var foreign_content=createCommonjsModule(function(e,t){function n(e,t){return t===T.MATHML&&(e===o.MI||e===o.MO||e===o.MN||e===o.MS||e===o.MTEXT)}function r(e,t,n){if(t===T.MATHML&&e===o.ANNOTATION_XML)for(var r=0;r<n.length;r++)if(n[r].name===a.ENCODING){var i=n[r].value.toLowerCase();return i===E.TEXT_HTML||i===E.APPLICATION_XML}return t===T.SVG&&(e===o.FOREIGN_OBJECT||e===o.DESC||e===o.TITLE)}var i=index$4,s=html,o=s.TAG_NAMES,T=s.NAMESPACES,a=s.ATTRS,E={TEXT_HTML:\"text/html\",APPLICATION_XML:\"application/xhtml+xml\"},_={attributename:\"attributeName\",attributetype:\"attributeType\",basefrequency:\"baseFrequency\",baseprofile:\"baseProfile\",calcmode:\"calcMode\",clippathunits:\"clipPathUnits\",diffuseconstant:\"diffuseConstant\",edgemode:\"edgeMode\",filterunits:\"filterUnits\",glyphref:\"glyphRef\",gradienttransform:\"gradientTransform\",gradientunits:\"gradientUnits\",kernelmatrix:\"kernelMatrix\",kernelunitlength:\"kernelUnitLength\",keypoints:\"keyPoints\",keysplines:\"keySplines\",keytimes:\"keyTimes\",lengthadjust:\"lengthAdjust\",limitingconeangle:\"limitingConeAngle\",markerheight:\"markerHeight\",markerunits:\"markerUnits\",markerwidth:\"markerWidth\",maskcontentunits:\"maskContentUnits\",maskunits:\"maskUnits\",numoctaves:\"numOctaves\",pathlength:\"pathLength\",patterncontentunits:\"patternContentUnits\",patterntransform:\"patternTransform\",patternunits:\"patternUnits\",pointsatx:\"pointsAtX\",pointsaty:\"pointsAtY\",pointsatz:\"pointsAtZ\",preservealpha:\"preserveAlpha\",preserveaspectratio:\"preserveAspectRatio\",primitiveunits:\"primitiveUnits\",refx:\"refX\",refy:\"refY\",repeatcount:\"repeatCount\",repeatdur:\"repeatDur\",requiredextensions:\"requiredExtensions\",requiredfeatures:\"requiredFeatures\",specularconstant:\"specularConstant\",specularexponent:\"specularExponent\",spreadmethod:\"spreadMethod\",startoffset:\"startOffset\",stddeviation:\"stdDeviation\",stitchtiles:\"stitchTiles\",surfacescale:\"surfaceScale\",systemlanguage:\"systemLanguage\",tablevalues:\"tableValues\",targetx:\"targetX\",targety:\"targetY\",textlength:\"textLength\",viewbox:\"viewBox\",viewtarget:\"viewTarget\",xchannelselector:\"xChannelSelector\",ychannelselector:\"yChannelSelector\",zoomandpan:\"zoomAndPan\"},c={\"xlink:actuate\":{prefix:\"xlink\",name:\"actuate\",namespace:T.XLINK},\"xlink:arcrole\":{prefix:\"xlink\",name:\"arcrole\",namespace:T.XLINK},\"xlink:href\":{prefix:\"xlink\",name:\"href\",namespace:T.XLINK},\"xlink:role\":{prefix:\"xlink\",name:\"role\",namespace:T.XLINK},\"xlink:show\":{prefix:\"xlink\",name:\"show\",namespace:T.XLINK},\"xlink:title\":{prefix:\"xlink\",name:\"title\",namespace:T.XLINK},\"xlink:type\":{prefix:\"xlink\",name:\"type\",namespace:T.XLINK},\"xml:base\":{prefix:\"xml\",name:\"base\",namespace:T.XML},\"xml:lang\":{prefix:\"xml\",name:\"lang\",namespace:T.XML},\"xml:space\":{prefix:\"xml\",name:\"space\",namespace:T.XML},xmlns:{prefix:\"\",name:\"xmlns\",namespace:T.XMLNS},\"xmlns:xlink\":{prefix:\"xmlns\",name:\"xlink\",namespace:T.XMLNS}},p=t.SVG_TAG_NAMES_ADJUSTMENT_MAP={altglyph:\"altGlyph\",altglyphdef:\"altGlyphDef\",altglyphitem:\"altGlyphItem\",animatecolor:\"animateColor\",animatemotion:\"animateMotion\",animatetransform:\"animateTransform\",clippath:\"clipPath\",feblend:\"feBlend\",fecolormatrix:\"feColorMatrix\",fecomponenttransfer:\"feComponentTransfer\",fecomposite:\"feComposite\",feconvolvematrix:\"feConvolveMatrix\",fediffuselighting:\"feDiffuseLighting\",fedisplacementmap:\"feDisplacementMap\",fedistantlight:\"feDistantLight\",feflood:\"feFlood\",fefunca:\"feFuncA\",fefuncb:\"feFuncB\",fefuncg:\"feFuncG\",fefuncr:\"feFuncR\",fegaussianblur:\"feGaussianBlur\",feimage:\"feImage\",femerge:\"feMerge\",femergenode:\"feMergeNode\",femorphology:\"feMorphology\",feoffset:\"feOffset\",fepointlight:\"fePointLight\",fespecularlighting:\"feSpecularLighting\",fespotlight:\"feSpotLight\",fetile:\"feTile\",feturbulence:\"feTurbulence\",foreignobject:\"foreignObject\",glyphref:\"glyphRef\",lineargradient:\"linearGradient\",radialgradient:\"radialGradient\",textpath:\"textPath\"},A=Object.create(null);A[o.B]=!0,A[o.BIG]=!0,A[o.BLOCKQUOTE]=!0,A[o.BODY]=!0,A[o.BR]=!0,A[o.CENTER]=!0,A[o.CODE]=!0,A[o.DD]=!0,A[o.DIV]=!0,A[o.DL]=!0,A[o.DT]=!0,A[o.EM]=!0,A[o.EMBED]=!0,A[o.H1]=!0,A[o.H2]=!0,A[o.H3]=!0,A[o.H4]=!0,A[o.H5]=!0,A[o.H6]=!0,A[o.HEAD]=!0,A[o.HR]=!0,A[o.I]=!0,A[o.IMG]=!0,A[o.LI]=!0,A[o.LISTING]=!0,A[o.MENU]=!0,A[o.META]=!0,A[o.NOBR]=!0,A[o.OL]=!0,A[o.P]=!0,A[o.PRE]=!0,A[o.RUBY]=!0,A[o.S]=!0,A[o.SMALL]=!0,A[o.SPAN]=!0,A[o.STRONG]=!0,A[o.STRIKE]=!0,A[o.SUB]=!0,A[o.SUP]=!0,A[o.TABLE]=!0,A[o.TT]=!0,A[o.U]=!0,A[o.UL]=!0,A[o.VAR]=!0,t.causesExit=function(e){var t=e.tagName;return!!(t===o.FONT&&(null!==i.getTokenAttr(e,a.COLOR)||null!==i.getTokenAttr(e,a.SIZE)||null!==i.getTokenAttr(e,a.FACE)))||A[t]},t.adjustTokenMathMLAttrs=function(e){for(var t=0;t<e.attrs.length;t++)if(\"definitionurl\"===e.attrs[t].name){e.attrs[t].name=\"definitionURL\";break}},t.adjustTokenSVGAttrs=function(e){for(var t=0;t<e.attrs.length;t++){var n=_[e.attrs[t].name];n&&(e.attrs[t].name=n);}},t.adjustTokenXMLAttrs=function(e){for(var t=0;t<e.attrs.length;t++){var n=c[e.attrs[t].name];n&&(e.attrs[t].prefix=n.prefix,e.attrs[t].name=n.name,e.attrs[t].namespace=n.namespace);}},t.adjustTokenSVGTagName=function(e){var t=p[e.tagName];t&&(e.tagName=t);},t.isIntegrationPoint=function(e,t,i,s){return!(s&&s!==T.HTML||!r(e,t,i))||!(s&&s!==T.MATHML||!n(e,t))};}); var merge_options=function(e,t){return t=t||Object.create(null),[e,t].reduce(function(e,t){return Object.keys(t).forEach(function(n){e[n]=t[n];}),e},Object.create(null))}; var index$2=createCommonjsModule(function(e){function t(e,t){var n=e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName);return n?e.openElements.contains(n.element)?e.openElements.hasInScope(t.tagName)||(n=null):(e.activeFormattingElements.removeEntry(n),n=null):Ce(e,t),n}function n(e,t){for(var n=null,r=e.openElements.stackTop;r>=0;r--){var i=e.openElements.items[r];if(i===t.element)break;e._isSpecialElement(i)&&(n=i);}return n||(e.openElements.popUntilElementPopped(t.element),e.activeFormattingElements.removeEntry(t)),n}function r(e,t,n){for(var r=t,s=e.openElements.getCommonAncestor(t),o=0,T=s;T!==n;o++,T=s){s=e.openElements.getCommonAncestor(T);var a=e.activeFormattingElements.getElementEntry(T),E=a&&o>=vt;!a||E?(E&&e.activeFormattingElements.removeEntry(a),e.openElements.remove(T)):(T=i(e,a),r===t&&(e.activeFormattingElements.bookmark=a),e.treeAdapter.detachNode(r),e.treeAdapter.appendChild(T,r),r=T);}return r}function i(e,t){var n=e.treeAdapter.getNamespaceURI(t.element),r=e.treeAdapter.createElement(t.token.tagName,n,t.token.attrs);return e.openElements.replace(t.element,r),t.element=r,r}function s(e,t,n){if(e._isElementCausesFosterParenting(t))e._fosterParentElement(n);else{var r=e.treeAdapter.getTagName(t),i=e.treeAdapter.getNamespaceURI(t);r===Pt.TEMPLATE&&i===Dt.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,n);}}function o(e,t,n){var r=e.treeAdapter.getNamespaceURI(n.element),i=n.token,s=e.treeAdapter.createElement(i.tagName,r,i.attrs);e._adoptNodes(t,s),e.treeAdapter.appendChild(t,s),e.activeFormattingElements.insertElementAfterBookmark(s,n.token),e.activeFormattingElements.removeEntry(n),e.openElements.remove(n.element),e.openElements.insertAfter(t,s);}function T(e,i){for(var T,a=0;a<Ut&&(T=t(e,i,T));a++){var E=n(e,T);if(!E)break;e.activeFormattingElements.bookmark=T;var _=r(e,E,T.element),c=e.openElements.getCommonAncestor(T.element);e.treeAdapter.detachNode(_),s(e,c,_),o(e,E,T);}}function a(){}function E(e,t){e._appendCommentNode(t,e.openElements.currentTmplContent||e.openElements.current);}function _(e,t){e._appendCommentNode(t,e.openElements.items[0]);}function c(e,t){e._appendCommentNode(t,e.document);}function p(e,t){e._insertCharacters(t);}function A(e){e.stopped=!0;}function h(e,t){e._setDocumentType(t);var n=t.forceQuirks?Lt.DOCUMENT_MODE.QUIRKS:Ot.getDocumentMode(t.name,t.publicId,t.systemId);e.treeAdapter.setDocumentMode(e.document,n),e.insertionMode=Ft;}function l(e,t){e.treeAdapter.setDocumentMode(e.document,Lt.DOCUMENT_MODE.QUIRKS),e.insertionMode=Ft,e._processToken(t);}function m(e,t){t.tagName===Pt.HTML?(e._insertElement(t,Dt.HTML),e.insertionMode=Gt):N(e,t);}function u(e,t){var n=t.tagName;n!==Pt.HTML&&n!==Pt.HEAD&&n!==Pt.BODY&&n!==Pt.BR||N(e,t);}function N(e,t){e._insertFakeRootElement(),e.insertionMode=Gt,e._processToken(t);}function d(e,t){var n=t.tagName;n===Pt.HTML?Ee(e,t):n===Pt.HEAD?(e._insertElement(t,Dt.HTML),e.headElement=e.openElements.current,e.insertionMode=Bt):S(e,t);}function C(e,t){var n=t.tagName;n!==Pt.HEAD&&n!==Pt.BODY&&n!==Pt.HTML&&n!==Pt.BR||S(e,t);}function S(e,t){e._insertFakeElement(Pt.HEAD),e.headElement=e.openElements.current,e.insertionMode=Bt,e._processToken(t);}function f(e,t){var n=t.tagName;n===Pt.HTML?Ee(e,t):n===Pt.BASE||n===Pt.BASEFONT||n===Pt.BGSOUND||n===Pt.LINK||n===Pt.META?e._appendElement(t,Dt.HTML):n===Pt.TITLE?e._switchToTextParsing(t,Nt.MODE.RCDATA):n===Pt.NOSCRIPT||n===Pt.NOFRAMES||n===Pt.STYLE?e._switchToTextParsing(t,Nt.MODE.RAWTEXT):n===Pt.SCRIPT?e._switchToTextParsing(t,Nt.MODE.SCRIPT_DATA):n===Pt.TEMPLATE?(e._insertTemplate(t,Dt.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=$t,e._pushTmplInsertionMode($t)):n!==Pt.HEAD&&I(e,t);}function O(e,t){var n=t.tagName;n===Pt.HEAD?(e.openElements.pop(),e.insertionMode=yt):n===Pt.BODY||n===Pt.BR||n===Pt.HTML?I(e,t):n===Pt.TEMPLATE&&e.openElements.tmplCount>0&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(Pt.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e._popTmplInsertionMode(),e._resetInsertionMode());}function I(e,t){e.openElements.pop(),e.insertionMode=yt,e._processToken(t);}function R(e,t){var n=t.tagName;n===Pt.HTML?Ee(e,t):n===Pt.BODY?(e._insertElement(t,Dt.HTML),e.framesetOk=!1,e.insertionMode=bt):n===Pt.FRAMESET?(e._insertElement(t,Dt.HTML),e.insertionMode=Jt):n===Pt.BASE||n===Pt.BASEFONT||n===Pt.BGSOUND||n===Pt.LINK||n===Pt.META||n===Pt.NOFRAMES||n===Pt.SCRIPT||n===Pt.STYLE||n===Pt.TEMPLATE||n===Pt.TITLE?(e.openElements.push(e.headElement),f(e,t),e.openElements.remove(e.headElement)):n!==Pt.HEAD&&L(e,t);}function M(e,t){var n=t.tagName;n===Pt.BODY||n===Pt.HTML||n===Pt.BR?L(e,t):n===Pt.TEMPLATE&&O(e,t);}function L(e,t){e._insertFakeElement(Pt.BODY),e.insertionMode=bt,e._processToken(t);}function P(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t);}function D(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=!1;}function g(e,t){0===e.openElements.tmplCount&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs);}function H(e,t){var n=e.openElements.tryPeekProperlyNestedBodyElement();n&&0===e.openElements.tmplCount&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(n,t.attrs));}function k(e,t){var n=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&n&&(e.treeAdapter.detachNode(n),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,Dt.HTML),e.insertionMode=Jt);}function U(e,t){e.openElements.hasInButtonScope(Pt.P)&&e._closePElement(),e._insertElement(t,Dt.HTML);}function v(e,t){e.openElements.hasInButtonScope(Pt.P)&&e._closePElement();var n=e.openElements.currentTagName;n!==Pt.H1&&n!==Pt.H2&&n!==Pt.H3&&n!==Pt.H4&&n!==Pt.H5&&n!==Pt.H6||e.openElements.pop(),e._insertElement(t,Dt.HTML);}function F(e,t){e.openElements.hasInButtonScope(Pt.P)&&e._closePElement(),e._insertElement(t,Dt.HTML),e.skipNextNewLine=!0,e.framesetOk=!1;}function G(e,t){var n=e.openElements.tmplCount>0;e.formElement&&!n||(e.openElements.hasInButtonScope(Pt.P)&&e._closePElement(),e._insertElement(t,Dt.HTML),n||(e.formElement=e.openElements.current));}function B(e,t){e.framesetOk=!1;for(var n=t.tagName,r=e.openElements.stackTop;r>=0;r--){var i=e.openElements.items[r],s=e.treeAdapter.getTagName(i),o=null;if(n===Pt.LI&&s===Pt.LI?o=Pt.LI:n!==Pt.DD&&n!==Pt.DT||s!==Pt.DD&&s!==Pt.DT||(o=s),o){e.openElements.generateImpliedEndTagsWithExclusion(o),e.openElements.popUntilTagNamePopped(o);break}if(s!==Pt.ADDRESS&&s!==Pt.DIV&&s!==Pt.P&&e._isSpecialElement(i))break}e.openElements.hasInButtonScope(Pt.P)&&e._closePElement(),e._insertElement(t,Dt.HTML);}function y(e,t){e.openElements.hasInButtonScope(Pt.P)&&e._closePElement(),e._insertElement(t,Dt.HTML),e.tokenizer.state=Nt.MODE.PLAINTEXT;}function b(e,t){e.openElements.hasInScope(Pt.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(Pt.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,Dt.HTML),e.framesetOk=!1;}function K(e,t){var n=e.activeFormattingElements.getElementEntryInScopeWithTagName(Pt.A);n&&(T(e,t),e.openElements.remove(n.element),e.activeFormattingElements.removeEntry(n)),e._reconstructActiveFormattingElements(),e._insertElement(t,Dt.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function x(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Dt.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function Y(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(Pt.NOBR)&&(T(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,Dt.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function w(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Dt.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1;}function X(e,t){e.treeAdapter.getDocumentMode(e.document)!==Lt.DOCUMENT_MODE.QUIRKS&&e.openElements.hasInButtonScope(Pt.P)&&e._closePElement(),e._insertElement(t,Dt.HTML),e.framesetOk=!1,e.insertionMode=xt;}function Q(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,Dt.HTML),e.framesetOk=!1;}function W(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,Dt.HTML);var n=Nt.getTokenAttr(t,gt.TYPE);n&&n.toLowerCase()===kt||(e.framesetOk=!1);}function j(e,t){e._appendElement(t,Dt.HTML);}function z(e,t){e.openElements.hasInButtonScope(Pt.P)&&e._closePElement(),e.openElements.currentTagName===Pt.MENUITEM&&e.openElements.pop(),e._appendElement(t,Dt.HTML),e.framesetOk=!1;}function V(e,t){t.tagName=Pt.IMG,Q(e,t);}function $(e,t){e._insertElement(t,Dt.HTML),e.skipNextNewLine=!0,e.tokenizer.state=Nt.MODE.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=!1,e.insertionMode=Kt;}function q(e,t){e.openElements.hasInButtonScope(Pt.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=!1,e._switchToTextParsing(t,Nt.MODE.RAWTEXT);}function J(e,t){e.framesetOk=!1,e._switchToTextParsing(t,Nt.MODE.RAWTEXT);}function Z(e,t){e._switchToTextParsing(t,Nt.MODE.RAWTEXT);}function ee(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Dt.HTML),e.framesetOk=!1,e.insertionMode===xt||e.insertionMode===wt||e.insertionMode===Qt||e.insertionMode===Wt||e.insertionMode===jt?e.insertionMode=Vt:e.insertionMode=zt;}function te(e,t){e.openElements.currentTagName===Pt.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,Dt.HTML);}function ne(e,t){e.openElements.hasInScope(Pt.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,Dt.HTML);}function re(e,t){e.openElements.hasInScope(Pt.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(Pt.RTC),e._insertElement(t,Dt.HTML);}function ie(e,t){e.openElements.currentTagName===Pt.MENUITEM&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,Dt.HTML);}function se(e,t){e.openElements.hasInButtonScope(Pt.P)&&e._closePElement(),e.openElements.currentTagName===Pt.MENUITEM&&e.openElements.pop(),e._insertElement(t,Dt.HTML);}function oe(e,t){e._reconstructActiveFormattingElements(),It.adjustTokenMathMLAttrs(t),It.adjustTokenXMLAttrs(t),t.selfClosing?e._appendElement(t,Dt.MATHML):e._insertElement(t,Dt.MATHML);}function Te(e,t){e._reconstructActiveFormattingElements(),It.adjustTokenSVGAttrs(t),It.adjustTokenXMLAttrs(t),t.selfClosing?e._appendElement(t,Dt.SVG):e._insertElement(t,Dt.SVG);}function ae(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Dt.HTML);}function Ee(e,t){var n=t.tagName;switch(n.length){case 1:n===Pt.I||n===Pt.S||n===Pt.B||n===Pt.U?x(e,t):n===Pt.P?U(e,t):n===Pt.A?K(e,t):ae(e,t);break;case 2:n===Pt.DL||n===Pt.OL||n===Pt.UL?U(e,t):n===Pt.H1||n===Pt.H2||n===Pt.H3||n===Pt.H4||n===Pt.H5||n===Pt.H6?v(e,t):n===Pt.LI||n===Pt.DD||n===Pt.DT?B(e,t):n===Pt.EM||n===Pt.TT?x(e,t):n===Pt.BR?Q(e,t):n===Pt.HR?z(e,t):n===Pt.RB?ne(e,t):n===Pt.RT||n===Pt.RP?re(e,t):n!==Pt.TH&&n!==Pt.TD&&n!==Pt.TR&&ae(e,t);break;case 3:n===Pt.DIV||n===Pt.DIR||n===Pt.NAV?U(e,t):n===Pt.PRE?F(e,t):n===Pt.BIG?x(e,t):n===Pt.IMG||n===Pt.WBR?Q(e,t):n===Pt.XMP?q(e,t):n===Pt.SVG?Te(e,t):n===Pt.RTC?ne(e,t):n!==Pt.COL&&ae(e,t);break;case 4:n===Pt.HTML?g(e,t):n===Pt.BASE||n===Pt.LINK||n===Pt.META?f(e,t):n===Pt.BODY?H(e,t):n===Pt.MAIN?U(e,t):n===Pt.FORM?G(e,t):n===Pt.CODE||n===Pt.FONT?x(e,t):n===Pt.NOBR?Y(e,t):n===Pt.AREA?Q(e,t):n===Pt.MATH?oe(e,t):n===Pt.MENU?se(e,t):n!==Pt.HEAD&&ae(e,t);break;case 5:n===Pt.STYLE||n===Pt.TITLE?f(e,t):n===Pt.ASIDE?U(e,t):n===Pt.SMALL?x(e,t):n===Pt.TABLE?X(e,t):n===Pt.EMBED?Q(e,t):n===Pt.INPUT?W(e,t):n===Pt.PARAM||n===Pt.TRACK?j(e,t):n===Pt.IMAGE?V(e,t):n!==Pt.FRAME&&n!==Pt.TBODY&&n!==Pt.TFOOT&&n!==Pt.THEAD&&ae(e,t);break;case 6:n===Pt.SCRIPT?f(e,t):n===Pt.CENTER||n===Pt.FIGURE||n===Pt.FOOTER||n===Pt.HEADER||n===Pt.HGROUP?U(e,t):n===Pt.BUTTON?b(e,t):n===Pt.STRIKE||n===Pt.STRONG?x(e,t):n===Pt.APPLET||n===Pt.OBJECT?w(e,t):n===Pt.KEYGEN?Q(e,t):n===Pt.SOURCE?j(e,t):n===Pt.IFRAME?J(e,t):n===Pt.SELECT?ee(e,t):n===Pt.OPTION?te(e,t):ae(e,t);break;case 7:n===Pt.BGSOUND?f(e,t):n===Pt.DETAILS||n===Pt.ADDRESS||n===Pt.ARTICLE||n===Pt.SECTION||n===Pt.SUMMARY?U(e,t):n===Pt.LISTING?F(e,t):n===Pt.MARQUEE?w(e,t):n===Pt.NOEMBED?Z(e,t):n!==Pt.CAPTION&&ae(e,t);break;case 8:n===Pt.BASEFONT?f(e,t):n===Pt.MENUITEM?ie(e,t):n===Pt.FRAMESET?k(e,t):n===Pt.FIELDSET?U(e,t):n===Pt.TEXTAREA?$(e,t):n===Pt.TEMPLATE?f(e,t):n===Pt.NOSCRIPT?Z(e,t):n===Pt.OPTGROUP?te(e,t):n!==Pt.COLGROUP&&ae(e,t);break;case 9:n===Pt.PLAINTEXT?y(e,t):ae(e,t);break;case 10:n===Pt.BLOCKQUOTE||n===Pt.FIGCAPTION?U(e,t):ae(e,t);break;default:ae(e,t);}}function _e(e){e.openElements.hasInScope(Pt.BODY)&&(e.insertionMode=qt);}function ce(e,t){e.openElements.hasInScope(Pt.BODY)&&(e.insertionMode=qt,e._processToken(t));}function pe(e,t){var n=t.tagName;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n));}function Ae(e){var t=e.openElements.tmplCount>0,n=e.formElement;t||(e.formElement=null),(n||t)&&e.openElements.hasInScope(Pt.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(Pt.FORM):e.openElements.remove(n));}function he(e){e.openElements.hasInButtonScope(Pt.P)||e._insertFakeElement(Pt.P),e._closePElement();}function le(e){e.openElements.hasInListItemScope(Pt.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(Pt.LI),e.openElements.popUntilTagNamePopped(Pt.LI));}function me(e,t){var n=t.tagName;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilTagNamePopped(n));}function ue(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped());}function Ne(e,t){var n=t.tagName;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker());}function de(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(Pt.BR),e.openElements.pop(),e.framesetOk=!1;}function Ce(e,t){for(var n=t.tagName,r=e.openElements.stackTop;r>0;r--){var i=e.openElements.items[r];if(e.treeAdapter.getTagName(i)===n){e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilElementPopped(i);break}if(e._isSpecialElement(i))break}}function Se(e,t){var n=t.tagName;switch(n.length){case 1:n===Pt.A||n===Pt.B||n===Pt.I||n===Pt.S||n===Pt.U?T(e,t):n===Pt.P?he(e,t):Ce(e,t);break;case 2:n===Pt.DL||n===Pt.UL||n===Pt.OL?pe(e,t):n===Pt.LI?le(e,t):n===Pt.DD||n===Pt.DT?me(e,t):n===Pt.H1||n===Pt.H2||n===Pt.H3||n===Pt.H4||n===Pt.H5||n===Pt.H6?ue(e,t):n===Pt.BR?de(e,t):n===Pt.EM||n===Pt.TT?T(e,t):Ce(e,t);break;case 3:n===Pt.BIG?T(e,t):n===Pt.DIR||n===Pt.DIV||n===Pt.NAV?pe(e,t):Ce(e,t);break;case 4:n===Pt.BODY?_e(e,t):n===Pt.HTML?ce(e,t):n===Pt.FORM?Ae(e,t):n===Pt.CODE||n===Pt.FONT||n===Pt.NOBR?T(e,t):n===Pt.MAIN||n===Pt.MENU?pe(e,t):Ce(e,t);break;case 5:n===Pt.ASIDE?pe(e,t):n===Pt.SMALL?T(e,t):Ce(e,t);break;case 6:n===Pt.CENTER||n===Pt.FIGURE||n===Pt.FOOTER||n===Pt.HEADER||n===Pt.HGROUP?pe(e,t):n===Pt.APPLET||n===Pt.OBJECT?Ne(e,t):n===Pt.STRIKE||n===Pt.STRONG?T(e,t):Ce(e,t);break;case 7:n===Pt.ADDRESS||n===Pt.ARTICLE||n===Pt.DETAILS||n===Pt.SECTION||n===Pt.SUMMARY?pe(e,t):n===Pt.MARQUEE?Ne(e,t):Ce(e,t);break;case 8:n===Pt.FIELDSET?pe(e,t):n===Pt.TEMPLATE?O(e,t):Ce(e,t);break;case 10:n===Pt.BLOCKQUOTE||n===Pt.FIGCAPTION?pe(e,t):Ce(e,t);break;default:Ce(e,t);}}function fe(e,t){e.tmplInsertionModeStackTop>-1?rt(e,t):e.stopped=!0;}function Oe(e,t){t.tagName===Pt.SCRIPT&&(e.pendingScript=e.openElements.current),e.openElements.pop(),e.insertionMode=e.originalInsertionMode;}function Ie(e,t){e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e._processToken(t);}function Re(e,t){var n=e.openElements.currentTagName;n===Pt.TABLE||n===Pt.TBODY||n===Pt.TFOOT||n===Pt.THEAD||n===Pt.TR?(e.pendingCharacterTokens=[],e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=Yt,e._processToken(t)):Ge(e,t);}function Me(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,Dt.HTML),e.insertionMode=wt;}function Le(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,Dt.HTML),e.insertionMode=Xt;}function Pe(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(Pt.COLGROUP),e.insertionMode=Xt,e._processToken(t);}function De(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,Dt.HTML),e.insertionMode=Qt;}function ge(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(Pt.TBODY),e.insertionMode=Qt,e._processToken(t);}function He(e,t){e.openElements.hasInTableScope(Pt.TABLE)&&(e.openElements.popUntilTagNamePopped(Pt.TABLE),e._resetInsertionMode(),e._processToken(t));}function ke(e,t){var n=Nt.getTokenAttr(t,gt.TYPE);n&&n.toLowerCase()===kt?e._appendElement(t,Dt.HTML):Ge(e,t);}function Ue(e,t){e.formElement||0!==e.openElements.tmplCount||(e._insertElement(t,Dt.HTML),e.formElement=e.openElements.current,e.openElements.pop());}function ve(e,t){var n=t.tagName;switch(n.length){case 2:n===Pt.TD||n===Pt.TH||n===Pt.TR?ge(e,t):Ge(e,t);break;case 3:n===Pt.COL?Pe(e,t):Ge(e,t);break;case 4:n===Pt.FORM?Ue(e,t):Ge(e,t);break;case 5:n===Pt.TABLE?He(e,t):n===Pt.STYLE?f(e,t):n===Pt.TBODY||n===Pt.TFOOT||n===Pt.THEAD?De(e,t):n===Pt.INPUT?ke(e,t):Ge(e,t);break;case 6:n===Pt.SCRIPT?f(e,t):Ge(e,t);break;case 7:n===Pt.CAPTION?Me(e,t):Ge(e,t);break;case 8:n===Pt.COLGROUP?Le(e,t):n===Pt.TEMPLATE?f(e,t):Ge(e,t);break;default:Ge(e,t);}}function Fe(e,t){var n=t.tagName;n===Pt.TABLE?e.openElements.hasInTableScope(Pt.TABLE)&&(e.openElements.popUntilTagNamePopped(Pt.TABLE),e._resetInsertionMode()):n===Pt.TEMPLATE?O(e,t):n!==Pt.BODY&&n!==Pt.CAPTION&&n!==Pt.COL&&n!==Pt.COLGROUP&&n!==Pt.HTML&&n!==Pt.TBODY&&n!==Pt.TD&&n!==Pt.TFOOT&&n!==Pt.TH&&n!==Pt.THEAD&&n!==Pt.TR&&Ge(e,t);}function Ge(e,t){var n=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,e._processTokenInBodyMode(t),e.fosterParentingEnabled=n;}function Be(e,t){e.pendingCharacterTokens.push(t);}function ye(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=!0;}function be(e,t){var n=0;if(e.hasNonWhitespacePendingCharacterToken)for(;n<e.pendingCharacterTokens.length;n++)Ge(e,e.pendingCharacterTokens[n]);else for(;n<e.pendingCharacterTokens.length;n++)e._insertCharacters(e.pendingCharacterTokens[n]);e.insertionMode=e.originalInsertionMode,e._processToken(t);}function Ke(e,t){var n=t.tagName;n===Pt.CAPTION||n===Pt.COL||n===Pt.COLGROUP||n===Pt.TBODY||n===Pt.TD||n===Pt.TFOOT||n===Pt.TH||n===Pt.THEAD||n===Pt.TR?e.openElements.hasInTableScope(Pt.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(Pt.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=xt,e._processToken(t)):Ee(e,t);}function xe(e,t){var n=t.tagName;n===Pt.CAPTION||n===Pt.TABLE?e.openElements.hasInTableScope(Pt.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(Pt.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=xt,n===Pt.TABLE&&e._processToken(t)):n!==Pt.BODY&&n!==Pt.COL&&n!==Pt.COLGROUP&&n!==Pt.HTML&&n!==Pt.TBODY&&n!==Pt.TD&&n!==Pt.TFOOT&&n!==Pt.TH&&n!==Pt.THEAD&&n!==Pt.TR&&Se(e,t);}function Ye(e,t){var n=t.tagName;n===Pt.HTML?Ee(e,t):n===Pt.COL?e._appendElement(t,Dt.HTML):n===Pt.TEMPLATE?f(e,t):Xe(e,t);}function we(e,t){var n=t.tagName;n===Pt.COLGROUP?e.openElements.currentTagName===Pt.COLGROUP&&(e.openElements.pop(),e.insertionMode=xt):n===Pt.TEMPLATE?O(e,t):n!==Pt.COL&&Xe(e,t);}function Xe(e,t){e.openElements.currentTagName===Pt.COLGROUP&&(e.openElements.pop(),e.insertionMode=xt,e._processToken(t));}function Qe(e,t){var n=t.tagName;n===Pt.TR?(e.openElements.clearBackToTableBodyContext(),e._insertElement(t,Dt.HTML),e.insertionMode=Wt):n===Pt.TH||n===Pt.TD?(e.openElements.clearBackToTableBodyContext(),e._insertFakeElement(Pt.TR),e.insertionMode=Wt,e._processToken(t)):n===Pt.CAPTION||n===Pt.COL||n===Pt.COLGROUP||n===Pt.TBODY||n===Pt.TFOOT||n===Pt.THEAD?e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=xt,e._processToken(t)):ve(e,t);}function We(e,t){var n=t.tagName;n===Pt.TBODY||n===Pt.TFOOT||n===Pt.THEAD?e.openElements.hasInTableScope(n)&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=xt):n===Pt.TABLE?e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=xt,e._processToken(t)):(n!==Pt.BODY&&n!==Pt.CAPTION&&n!==Pt.COL&&n!==Pt.COLGROUP||n!==Pt.HTML&&n!==Pt.TD&&n!==Pt.TH&&n!==Pt.TR)&&Fe(e,t);}function je(e,t){var n=t.tagName;n===Pt.TH||n===Pt.TD?(e.openElements.clearBackToTableRowContext(),e._insertElement(t,Dt.HTML),e.insertionMode=jt,e.activeFormattingElements.insertMarker()):n===Pt.CAPTION||n===Pt.COL||n===Pt.COLGROUP||n===Pt.TBODY||n===Pt.TFOOT||n===Pt.THEAD||n===Pt.TR?e.openElements.hasInTableScope(Pt.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=Qt,e._processToken(t)):ve(e,t);}function ze(e,t){var n=t.tagName;n===Pt.TR?e.openElements.hasInTableScope(Pt.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=Qt):n===Pt.TABLE?e.openElements.hasInTableScope(Pt.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=Qt,e._processToken(t)):n===Pt.TBODY||n===Pt.TFOOT||n===Pt.THEAD?(e.openElements.hasInTableScope(n)||e.openElements.hasInTableScope(Pt.TR))&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=Qt,e._processToken(t)):(n!==Pt.BODY&&n!==Pt.CAPTION&&n!==Pt.COL&&n!==Pt.COLGROUP||n!==Pt.HTML&&n!==Pt.TD&&n!==Pt.TH)&&Fe(e,t);}function Ve(e,t){var n=t.tagName;n===Pt.CAPTION||n===Pt.COL||n===Pt.COLGROUP||n===Pt.TBODY||n===Pt.TD||n===Pt.TFOOT||n===Pt.TH||n===Pt.THEAD||n===Pt.TR?(e.openElements.hasInTableScope(Pt.TD)||e.openElements.hasInTableScope(Pt.TH))&&(e._closeTableCell(),e._processToken(t)):Ee(e,t);}function $e(e,t){var n=t.tagName;n===Pt.TD||n===Pt.TH?e.openElements.hasInTableScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=Wt):n===Pt.TABLE||n===Pt.TBODY||n===Pt.TFOOT||n===Pt.THEAD||n===Pt.TR?e.openElements.hasInTableScope(n)&&(e._closeTableCell(),e._processToken(t)):n!==Pt.BODY&&n!==Pt.CAPTION&&n!==Pt.COL&&n!==Pt.COLGROUP&&n!==Pt.HTML&&Se(e,t);}function qe(e,t){var n=t.tagName;n===Pt.HTML?Ee(e,t):n===Pt.OPTION?(e.openElements.currentTagName===Pt.OPTION&&e.openElements.pop(),e._insertElement(t,Dt.HTML)):n===Pt.OPTGROUP?(e.openElements.currentTagName===Pt.OPTION&&e.openElements.pop(),e.openElements.currentTagName===Pt.OPTGROUP&&e.openElements.pop(),e._insertElement(t,Dt.HTML)):n===Pt.INPUT||n===Pt.KEYGEN||n===Pt.TEXTAREA||n===Pt.SELECT?e.openElements.hasInSelectScope(Pt.SELECT)&&(e.openElements.popUntilTagNamePopped(Pt.SELECT),e._resetInsertionMode(),n!==Pt.SELECT&&e._processToken(t)):n!==Pt.SCRIPT&&n!==Pt.TEMPLATE||f(e,t);}function Je(e,t){var n=t.tagName;if(n===Pt.OPTGROUP){var r=e.openElements.items[e.openElements.stackTop-1],i=r&&e.treeAdapter.getTagName(r);e.openElements.currentTagName===Pt.OPTION&&i===Pt.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagName===Pt.OPTGROUP&&e.openElements.pop();}else n===Pt.OPTION?e.openElements.currentTagName===Pt.OPTION&&e.openElements.pop():n===Pt.SELECT&&e.openElements.hasInSelectScope(Pt.SELECT)?(e.openElements.popUntilTagNamePopped(Pt.SELECT),e._resetInsertionMode()):n===Pt.TEMPLATE&&O(e,t);}function Ze(e,t){var n=t.tagName;n===Pt.CAPTION||n===Pt.TABLE||n===Pt.TBODY||n===Pt.TFOOT||n===Pt.THEAD||n===Pt.TR||n===Pt.TD||n===Pt.TH?(e.openElements.popUntilTagNamePopped(Pt.SELECT),e._resetInsertionMode(),e._processToken(t)):qe(e,t);}function et(e,t){var n=t.tagName;n===Pt.CAPTION||n===Pt.TABLE||n===Pt.TBODY||n===Pt.TFOOT||n===Pt.THEAD||n===Pt.TR||n===Pt.TD||n===Pt.TH?e.openElements.hasInTableScope(n)&&(e.openElements.popUntilTagNamePopped(Pt.SELECT),e._resetInsertionMode(),e._processToken(t)):Je(e,t);}function tt(e,t){var n=t.tagName;if(n===Pt.BASE||n===Pt.BASEFONT||n===Pt.BGSOUND||n===Pt.LINK||n===Pt.META||n===Pt.NOFRAMES||n===Pt.SCRIPT||n===Pt.STYLE||n===Pt.TEMPLATE||n===Pt.TITLE)f(e,t);else{var r=rn[n]||bt;e._popTmplInsertionMode(),e._pushTmplInsertionMode(r),e.insertionMode=r,e._processToken(t);}}function nt(e,t){t.tagName===Pt.TEMPLATE&&O(e,t);}function rt(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(Pt.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e._popTmplInsertionMode(),e._resetInsertionMode(),e._processToken(t)):e.stopped=!0;}function it(e,t){t.tagName===Pt.HTML?Ee(e,t):ot(e,t);}function st(e,t){t.tagName===Pt.HTML?e.fragmentContext||(e.insertionMode=en):ot(e,t);}function ot(e,t){e.insertionMode=bt,e._processToken(t);}function Tt(e,t){var n=t.tagName;n===Pt.HTML?Ee(e,t):n===Pt.FRAMESET?e._insertElement(t,Dt.HTML):n===Pt.FRAME?e._appendElement(t,Dt.HTML):n===Pt.NOFRAMES&&f(e,t);}function at(e,t){t.tagName!==Pt.FRAMESET||e.openElements.isRootHtmlElementCurrent()||(e.openElements.pop(),e.fragmentContext||e.openElements.currentTagName===Pt.FRAMESET||(e.insertionMode=Zt));}function Et(e,t){var n=t.tagName;n===Pt.HTML?Ee(e,t):n===Pt.NOFRAMES&&f(e,t);}function _t(e,t){t.tagName===Pt.HTML&&(e.insertionMode=tn);}function ct(e,t){t.tagName===Pt.HTML?Ee(e,t):pt(e,t);}function pt(e,t){e.insertionMode=bt,e._processToken(t);}function At(e,t){var n=t.tagName;n===Pt.HTML?Ee(e,t):n===Pt.NOFRAMES&&f(e,t);}function ht(e,t){t.chars=Mt.REPLACEMENT_CHARACTER,e._insertCharacters(t);}function lt(e,t){e._insertCharacters(t),e.framesetOk=!1;}function mt(e,t){if(It.causesExit(t)&&!e.fragmentContext){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==Dt.HTML&&!e._isIntegrationPoint(e.openElements.current);)e.openElements.pop();e._processToken(t);}else{var n=e._getAdjustedCurrentElement(),r=e.treeAdapter.getNamespaceURI(n);r===Dt.MATHML?It.adjustTokenMathMLAttrs(t):r===Dt.SVG&&(It.adjustTokenSVGTagName(t),It.adjustTokenSVGAttrs(t)),It.adjustTokenXMLAttrs(t),t.selfClosing?e._appendElement(t,r):e._insertElement(t,r);}}function ut(e,t){for(var n=e.openElements.stackTop;n>0;n--){var r=e.openElements.items[n];if(e.treeAdapter.getNamespaceURI(r)===Dt.HTML){e._processToken(t);break}if(e.treeAdapter.getTagName(r).toLowerCase()===t.tagName){e.openElements.popUntilElementPopped(r);break}}}var Nt=index$4,dt=open_element_stack,Ct=formatting_element_list,St=parser_mixin,ft=_default,Ot=doctype,It=foreign_content,Rt=merge_options,Mt=unicode,Lt=html,Pt=Lt.TAG_NAMES,Dt=Lt.NAMESPACES,gt=Lt.ATTRS,Ht={locationInfo:!1,treeAdapter:ft},kt=\"hidden\",Ut=8,vt=3,Ft=\"BEFORE_HTML_MODE\",Gt=\"BEFORE_HEAD_MODE\",Bt=\"IN_HEAD_MODE\",yt=\"AFTER_HEAD_MODE\",bt=\"IN_BODY_MODE\",Kt=\"TEXT_MODE\",xt=\"IN_TABLE_MODE\",Yt=\"IN_TABLE_TEXT_MODE\",wt=\"IN_CAPTION_MODE\",Xt=\"IN_COLUMN_GROUP_MODE\",Qt=\"IN_TABLE_BODY_MODE\",Wt=\"IN_ROW_MODE\",jt=\"IN_CELL_MODE\",zt=\"IN_SELECT_MODE\",Vt=\"IN_SELECT_IN_TABLE_MODE\",$t=\"IN_TEMPLATE_MODE\",qt=\"AFTER_BODY_MODE\",Jt=\"IN_FRAMESET_MODE\",Zt=\"AFTER_FRAMESET_MODE\",en=\"AFTER_AFTER_BODY_MODE\",tn=\"AFTER_AFTER_FRAMESET_MODE\",nn=Object.create(null);nn[Pt.TR]=Wt,nn[Pt.TBODY]=nn[Pt.THEAD]=nn[Pt.TFOOT]=Qt,nn[Pt.CAPTION]=wt,nn[Pt.COLGROUP]=Xt,nn[Pt.TABLE]=xt,nn[Pt.BODY]=bt,nn[Pt.FRAMESET]=Jt;var rn=Object.create(null);rn[Pt.CAPTION]=rn[Pt.COLGROUP]=rn[Pt.TBODY]=rn[Pt.TFOOT]=rn[Pt.THEAD]=xt,rn[Pt.COL]=Xt,rn[Pt.TR]=Qt,rn[Pt.TD]=rn[Pt.TH]=Wt;var sn=Object.create(null);sn.INITIAL_MODE=Object.create(null),sn.INITIAL_MODE[Nt.CHARACTER_TOKEN]=sn.INITIAL_MODE[Nt.NULL_CHARACTER_TOKEN]=l,sn.INITIAL_MODE[Nt.WHITESPACE_CHARACTER_TOKEN]=a,sn.INITIAL_MODE[Nt.COMMENT_TOKEN]=E,sn.INITIAL_MODE[Nt.DOCTYPE_TOKEN]=h,sn.INITIAL_MODE[Nt.START_TAG_TOKEN]=sn.INITIAL_MODE[Nt.END_TAG_TOKEN]=sn.INITIAL_MODE[Nt.EOF_TOKEN]=l,sn[Ft]=Object.create(null),sn[Ft][Nt.CHARACTER_TOKEN]=sn[Ft][Nt.NULL_CHARACTER_TOKEN]=N,sn[Ft][Nt.WHITESPACE_CHARACTER_TOKEN]=a,sn[Ft][Nt.COMMENT_TOKEN]=E,sn[Ft][Nt.DOCTYPE_TOKEN]=a,sn[Ft][Nt.START_TAG_TOKEN]=m,sn[Ft][Nt.END_TAG_TOKEN]=u,sn[Ft][Nt.EOF_TOKEN]=N,sn[Gt]=Object.create(null),sn[Gt][Nt.CHARACTER_TOKEN]=sn[Gt][Nt.NULL_CHARACTER_TOKEN]=S,sn[Gt][Nt.WHITESPACE_CHARACTER_TOKEN]=a,sn[Gt][Nt.COMMENT_TOKEN]=E,sn[Gt][Nt.DOCTYPE_TOKEN]=a,sn[Gt][Nt.START_TAG_TOKEN]=d,sn[Gt][Nt.END_TAG_TOKEN]=C,sn[Gt][Nt.EOF_TOKEN]=S,sn[Bt]=Object.create(null),sn[Bt][Nt.CHARACTER_TOKEN]=sn[Bt][Nt.NULL_CHARACTER_TOKEN]=I,sn[Bt][Nt.WHITESPACE_CHARACTER_TOKEN]=p,sn[Bt][Nt.COMMENT_TOKEN]=E,sn[Bt][Nt.DOCTYPE_TOKEN]=a,sn[Bt][Nt.START_TAG_TOKEN]=f,sn[Bt][Nt.END_TAG_TOKEN]=O,sn[Bt][Nt.EOF_TOKEN]=I,sn[yt]=Object.create(null),sn[yt][Nt.CHARACTER_TOKEN]=sn[yt][Nt.NULL_CHARACTER_TOKEN]=L,sn[yt][Nt.WHITESPACE_CHARACTER_TOKEN]=p,sn[yt][Nt.COMMENT_TOKEN]=E,sn[yt][Nt.DOCTYPE_TOKEN]=a,sn[yt][Nt.START_TAG_TOKEN]=R,sn[yt][Nt.END_TAG_TOKEN]=M,sn[yt][Nt.EOF_TOKEN]=L,sn[bt]=Object.create(null),sn[bt][Nt.CHARACTER_TOKEN]=D,sn[bt][Nt.NULL_CHARACTER_TOKEN]=a,sn[bt][Nt.WHITESPACE_CHARACTER_TOKEN]=P,sn[bt][Nt.COMMENT_TOKEN]=E,sn[bt][Nt.DOCTYPE_TOKEN]=a,sn[bt][Nt.START_TAG_TOKEN]=Ee,sn[bt][Nt.END_TAG_TOKEN]=Se,sn[bt][Nt.EOF_TOKEN]=fe,sn[Kt]=Object.create(null),sn[Kt][Nt.CHARACTER_TOKEN]=sn[Kt][Nt.NULL_CHARACTER_TOKEN]=sn[Kt][Nt.WHITESPACE_CHARACTER_TOKEN]=p,sn[Kt][Nt.COMMENT_TOKEN]=sn[Kt][Nt.DOCTYPE_TOKEN]=sn[Kt][Nt.START_TAG_TOKEN]=a,sn[Kt][Nt.END_TAG_TOKEN]=Oe,sn[Kt][Nt.EOF_TOKEN]=Ie,sn[xt]=Object.create(null),sn[xt][Nt.CHARACTER_TOKEN]=sn[xt][Nt.NULL_CHARACTER_TOKEN]=sn[xt][Nt.WHITESPACE_CHARACTER_TOKEN]=Re,sn[xt][Nt.COMMENT_TOKEN]=E,sn[xt][Nt.DOCTYPE_TOKEN]=a,sn[xt][Nt.START_TAG_TOKEN]=ve,sn[xt][Nt.END_TAG_TOKEN]=Fe,sn[xt][Nt.EOF_TOKEN]=fe,sn[Yt]=Object.create(null),sn[Yt][Nt.CHARACTER_TOKEN]=ye,sn[Yt][Nt.NULL_CHARACTER_TOKEN]=a,sn[Yt][Nt.WHITESPACE_CHARACTER_TOKEN]=Be,sn[Yt][Nt.COMMENT_TOKEN]=sn[Yt][Nt.DOCTYPE_TOKEN]=sn[Yt][Nt.START_TAG_TOKEN]=sn[Yt][Nt.END_TAG_TOKEN]=sn[Yt][Nt.EOF_TOKEN]=be,sn[wt]=Object.create(null),sn[wt][Nt.CHARACTER_TOKEN]=D,sn[wt][Nt.NULL_CHARACTER_TOKEN]=a,sn[wt][Nt.WHITESPACE_CHARACTER_TOKEN]=P,sn[wt][Nt.COMMENT_TOKEN]=E,sn[wt][Nt.DOCTYPE_TOKEN]=a,sn[wt][Nt.START_TAG_TOKEN]=Ke,sn[wt][Nt.END_TAG_TOKEN]=xe,sn[wt][Nt.EOF_TOKEN]=fe,sn[Xt]=Object.create(null),sn[Xt][Nt.CHARACTER_TOKEN]=sn[Xt][Nt.NULL_CHARACTER_TOKEN]=Xe,sn[Xt][Nt.WHITESPACE_CHARACTER_TOKEN]=p,sn[Xt][Nt.COMMENT_TOKEN]=E,sn[Xt][Nt.DOCTYPE_TOKEN]=a,sn[Xt][Nt.START_TAG_TOKEN]=Ye,sn[Xt][Nt.END_TAG_TOKEN]=we,sn[Xt][Nt.EOF_TOKEN]=fe,sn[Qt]=Object.create(null),sn[Qt][Nt.CHARACTER_TOKEN]=sn[Qt][Nt.NULL_CHARACTER_TOKEN]=sn[Qt][Nt.WHITESPACE_CHARACTER_TOKEN]=Re,sn[Qt][Nt.COMMENT_TOKEN]=E,sn[Qt][Nt.DOCTYPE_TOKEN]=a,sn[Qt][Nt.START_TAG_TOKEN]=Qe,sn[Qt][Nt.END_TAG_TOKEN]=We,sn[Qt][Nt.EOF_TOKEN]=fe,sn[Wt]=Object.create(null),sn[Wt][Nt.CHARACTER_TOKEN]=sn[Wt][Nt.NULL_CHARACTER_TOKEN]=sn[Wt][Nt.WHITESPACE_CHARACTER_TOKEN]=Re,sn[Wt][Nt.COMMENT_TOKEN]=E,sn[Wt][Nt.DOCTYPE_TOKEN]=a,sn[Wt][Nt.START_TAG_TOKEN]=je,sn[Wt][Nt.END_TAG_TOKEN]=ze,sn[Wt][Nt.EOF_TOKEN]=fe,sn[jt]=Object.create(null),sn[jt][Nt.CHARACTER_TOKEN]=D,sn[jt][Nt.NULL_CHARACTER_TOKEN]=a,sn[jt][Nt.WHITESPACE_CHARACTER_TOKEN]=P,sn[jt][Nt.COMMENT_TOKEN]=E,sn[jt][Nt.DOCTYPE_TOKEN]=a,sn[jt][Nt.START_TAG_TOKEN]=Ve,sn[jt][Nt.END_TAG_TOKEN]=$e,sn[jt][Nt.EOF_TOKEN]=fe,sn[zt]=Object.create(null),sn[zt][Nt.CHARACTER_TOKEN]=p,sn[zt][Nt.NULL_CHARACTER_TOKEN]=a,sn[zt][Nt.WHITESPACE_CHARACTER_TOKEN]=p,sn[zt][Nt.COMMENT_TOKEN]=E,sn[zt][Nt.DOCTYPE_TOKEN]=a,sn[zt][Nt.START_TAG_TOKEN]=qe,sn[zt][Nt.END_TAG_TOKEN]=Je,sn[zt][Nt.EOF_TOKEN]=fe,sn[Vt]=Object.create(null),sn[Vt][Nt.CHARACTER_TOKEN]=p,sn[Vt][Nt.NULL_CHARACTER_TOKEN]=a,sn[Vt][Nt.WHITESPACE_CHARACTER_TOKEN]=p,sn[Vt][Nt.COMMENT_TOKEN]=E,sn[Vt][Nt.DOCTYPE_TOKEN]=a,sn[Vt][Nt.START_TAG_TOKEN]=Ze,sn[Vt][Nt.END_TAG_TOKEN]=et,sn[Vt][Nt.EOF_TOKEN]=fe,sn[$t]=Object.create(null),sn[$t][Nt.CHARACTER_TOKEN]=D,sn[$t][Nt.NULL_CHARACTER_TOKEN]=a,sn[$t][Nt.WHITESPACE_CHARACTER_TOKEN]=P,sn[$t][Nt.COMMENT_TOKEN]=E,sn[$t][Nt.DOCTYPE_TOKEN]=a,sn[$t][Nt.START_TAG_TOKEN]=tt,sn[$t][Nt.END_TAG_TOKEN]=nt,sn[$t][Nt.EOF_TOKEN]=rt,sn[qt]=Object.create(null),sn[qt][Nt.CHARACTER_TOKEN]=sn[qt][Nt.NULL_CHARACTER_TOKEN]=ot,sn[qt][Nt.WHITESPACE_CHARACTER_TOKEN]=P,sn[qt][Nt.COMMENT_TOKEN]=_,sn[qt][Nt.DOCTYPE_TOKEN]=a,sn[qt][Nt.START_TAG_TOKEN]=it,sn[qt][Nt.END_TAG_TOKEN]=st,sn[qt][Nt.EOF_TOKEN]=A,sn[Jt]=Object.create(null),sn[Jt][Nt.CHARACTER_TOKEN]=sn[Jt][Nt.NULL_CHARACTER_TOKEN]=a,sn[Jt][Nt.WHITESPACE_CHARACTER_TOKEN]=p,sn[Jt][Nt.COMMENT_TOKEN]=E,sn[Jt][Nt.DOCTYPE_TOKEN]=a,sn[Jt][Nt.START_TAG_TOKEN]=Tt,sn[Jt][Nt.END_TAG_TOKEN]=at,sn[Jt][Nt.EOF_TOKEN]=A,sn[Zt]=Object.create(null),sn[Zt][Nt.CHARACTER_TOKEN]=sn[Zt][Nt.NULL_CHARACTER_TOKEN]=a,sn[Zt][Nt.WHITESPACE_CHARACTER_TOKEN]=p,sn[Zt][Nt.COMMENT_TOKEN]=E,sn[Zt][Nt.DOCTYPE_TOKEN]=a,sn[Zt][Nt.START_TAG_TOKEN]=Et,sn[Zt][Nt.END_TAG_TOKEN]=_t,sn[Zt][Nt.EOF_TOKEN]=A,sn[en]=Object.create(null),sn[en][Nt.CHARACTER_TOKEN]=pt,sn[en][Nt.NULL_CHARACTER_TOKEN]=pt,sn[en][Nt.WHITESPACE_CHARACTER_TOKEN]=P,sn[en][Nt.COMMENT_TOKEN]=c,sn[en][Nt.DOCTYPE_TOKEN]=a,sn[en][Nt.START_TAG_TOKEN]=ct,sn[en][Nt.END_TAG_TOKEN]=pt,sn[en][Nt.EOF_TOKEN]=A,sn[tn]=Object.create(null),sn[tn][Nt.CHARACTER_TOKEN]=sn[tn][Nt.NULL_CHARACTER_TOKEN]=a,sn[tn][Nt.WHITESPACE_CHARACTER_TOKEN]=P,sn[tn][Nt.COMMENT_TOKEN]=c,sn[tn][Nt.DOCTYPE_TOKEN]=a,sn[tn][Nt.START_TAG_TOKEN]=At,sn[tn][Nt.END_TAG_TOKEN]=a,sn[tn][Nt.EOF_TOKEN]=A;var on=e.exports=function(e){this.options=Rt(Ht,e),this.treeAdapter=this.options.treeAdapter,this.pendingScript=null,this.options.locationInfo&&St.assign(this);};on.prototype.parse=function(e){var t=this.treeAdapter.createDocument();return this._bootstrap(t,null),this.tokenizer.write(e,!0),this._runParsingLoop(null),t},on.prototype.parseFragment=function(e,t){t||(t=this.treeAdapter.createElement(Pt.TEMPLATE,Dt.HTML,[]));var n=this.treeAdapter.createElement(\"documentmock\",Dt.HTML,[]);this._bootstrap(n,t),this.treeAdapter.getTagName(t)===Pt.TEMPLATE&&this._pushTmplInsertionMode($t),this._initTokenizerForFragmentParsing(),this._insertFakeRootElement(),this._resetInsertionMode(),this._findFormInFragmentContext(),this.tokenizer.write(e,!0),this._runParsingLoop(null);var r=this.treeAdapter.getFirstChild(n),i=this.treeAdapter.createDocumentFragment();return this._adoptNodes(r,i),i},on.prototype._bootstrap=function(e,t){this.tokenizer=new Nt(this.options),this.stopped=!1,this.insertionMode=\"INITIAL_MODE\",this.originalInsertionMode=\"\",this.document=e,this.fragmentContext=t,this.headElement=null,this.formElement=null,this.openElements=new dt(this.document,this.treeAdapter),this.activeFormattingElements=new Ct(this.treeAdapter),this.tmplInsertionModeStack=[],this.tmplInsertionModeStackTop=-1,this.currentTmplInsertionMode=null,this.pendingCharacterTokens=[],this.hasNonWhitespacePendingCharacterToken=!1,this.framesetOk=!0,this.skipNextNewLine=!1,this.fosterParentingEnabled=!1;},on.prototype._runParsingLoop=function(e){for(;!this.stopped;){this._setupTokenizerCDATAMode();var t=this.tokenizer.getNextToken();if(t.type===Nt.HIBERNATION_TOKEN)break;if(this.skipNextNewLine&&(this.skipNextNewLine=!1,t.type===Nt.WHITESPACE_CHARACTER_TOKEN&&\"\\n\"===t.chars[0])){if(1===t.chars.length)continue;t.chars=t.chars.substr(1);}if(this._processInputToken(t),e&&this.pendingScript)break}},on.prototype.runParsingLoopForCurrentChunk=function(e,t){if(this._runParsingLoop(t),t&&this.pendingScript){var n=this.pendingScript;return this.pendingScript=null,void t(n)}e&&e();},on.prototype._setupTokenizerCDATAMode=function(){var e=this._getAdjustedCurrentElement();this.tokenizer.allowCDATA=e&&e!==this.document&&this.treeAdapter.getNamespaceURI(e)!==Dt.HTML&&!this._isIntegrationPoint(e);},on.prototype._switchToTextParsing=function(e,t){this._insertElement(e,Dt.HTML),this.tokenizer.state=t,this.originalInsertionMode=this.insertionMode,this.insertionMode=Kt;},on.prototype.switchToPlaintextParsing=function(){this.insertionMode=Kt,this.originalInsertionMode=bt,this.tokenizer.state=Nt.MODE.PLAINTEXT;},on.prototype._getAdjustedCurrentElement=function(){return 0===this.openElements.stackTop&&this.fragmentContext?this.fragmentContext:this.openElements.current},on.prototype._findFormInFragmentContext=function(){var e=this.fragmentContext;do{if(this.treeAdapter.getTagName(e)===Pt.FORM){this.formElement=e;break}e=this.treeAdapter.getParentNode(e);}while(e)},on.prototype._initTokenizerForFragmentParsing=function(){if(this.treeAdapter.getNamespaceURI(this.fragmentContext)===Dt.HTML){var e=this.treeAdapter.getTagName(this.fragmentContext);e===Pt.TITLE||e===Pt.TEXTAREA?this.tokenizer.state=Nt.MODE.RCDATA:e===Pt.STYLE||e===Pt.XMP||e===Pt.IFRAME||e===Pt.NOEMBED||e===Pt.NOFRAMES||e===Pt.NOSCRIPT?this.tokenizer.state=Nt.MODE.RAWTEXT:e===Pt.SCRIPT?this.tokenizer.state=Nt.MODE.SCRIPT_DATA:e===Pt.PLAINTEXT&&(this.tokenizer.state=Nt.MODE.PLAINTEXT);}},on.prototype._setDocumentType=function(e){this.treeAdapter.setDocumentType(this.document,e.name,e.publicId,e.systemId);},on.prototype._attachElementToTree=function(e){if(this._shouldFosterParentOnInsertion())this._fosterParentElement(e);else{var t=this.openElements.currentTmplContent||this.openElements.current;this.treeAdapter.appendChild(t,e);}},on.prototype._appendElement=function(e,t){var n=this.treeAdapter.createElement(e.tagName,t,e.attrs);this._attachElementToTree(n);},on.prototype._insertElement=function(e,t){var n=this.treeAdapter.createElement(e.tagName,t,e.attrs);this._attachElementToTree(n),this.openElements.push(n);},on.prototype._insertFakeElement=function(e){var t=this.treeAdapter.createElement(e,Dt.HTML,[]);this._attachElementToTree(t),this.openElements.push(t);},on.prototype._insertTemplate=function(e){var t=this.treeAdapter.createElement(e.tagName,Dt.HTML,e.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(t,n),this._attachElementToTree(t),this.openElements.push(t);},on.prototype._insertFakeRootElement=function(){var e=this.treeAdapter.createElement(Pt.HTML,Dt.HTML,[]);this.treeAdapter.appendChild(this.openElements.current,e),this.openElements.push(e);},on.prototype._appendCommentNode=function(e,t){var n=this.treeAdapter.createCommentNode(e.data);this.treeAdapter.appendChild(t,n);},on.prototype._insertCharacters=function(e){if(this._shouldFosterParentOnInsertion())this._fosterParentText(e.chars);else{var t=this.openElements.currentTmplContent||this.openElements.current;this.treeAdapter.insertText(t,e.chars);}},on.prototype._adoptNodes=function(e,t){for(;;){var n=this.treeAdapter.getFirstChild(e);if(!n)break;this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(t,n);}},on.prototype._shouldProcessTokenInForeignContent=function(e){var t=this._getAdjustedCurrentElement();if(!t||t===this.document)return!1;var n=this.treeAdapter.getNamespaceURI(t);if(n===Dt.HTML)return!1;if(this.treeAdapter.getTagName(t)===Pt.ANNOTATION_XML&&n===Dt.MATHML&&e.type===Nt.START_TAG_TOKEN&&e.tagName===Pt.SVG)return!1;var r=e.type===Nt.CHARACTER_TOKEN||e.type===Nt.NULL_CHARACTER_TOKEN||e.type===Nt.WHITESPACE_CHARACTER_TOKEN;return(!(e.type===Nt.START_TAG_TOKEN&&e.tagName!==Pt.MGLYPH&&e.tagName!==Pt.MALIGNMARK)&&!r||!this._isIntegrationPoint(t,Dt.MATHML))&&((e.type!==Nt.START_TAG_TOKEN&&!r||!this._isIntegrationPoint(t,Dt.HTML))&&e.type!==Nt.EOF_TOKEN)},on.prototype._processToken=function(e){sn[this.insertionMode][e.type](this,e);},on.prototype._processTokenInBodyMode=function(e){sn[bt][e.type](this,e);},on.prototype._processTokenInForeignContent=function(e){e.type===Nt.CHARACTER_TOKEN?lt(this,e):e.type===Nt.NULL_CHARACTER_TOKEN?ht(this,e):e.type===Nt.WHITESPACE_CHARACTER_TOKEN?p(this,e):e.type===Nt.COMMENT_TOKEN?E(this,e):e.type===Nt.START_TAG_TOKEN?mt(this,e):e.type===Nt.END_TAG_TOKEN&&ut(this,e);},on.prototype._processInputToken=function(e){this._shouldProcessTokenInForeignContent(e)?this._processTokenInForeignContent(e):this._processToken(e);},on.prototype._isIntegrationPoint=function(e,t){var n=this.treeAdapter.getTagName(e),r=this.treeAdapter.getNamespaceURI(e),i=this.treeAdapter.getAttrList(e);return It.isIntegrationPoint(n,r,i,t)},on.prototype._reconstructActiveFormattingElements=function(){var e=this.activeFormattingElements.length;if(e){var t=e,n=null;do{if(t--,(n=this.activeFormattingElements.entries[t]).type===Ct.MARKER_ENTRY||this.openElements.contains(n.element)){t++;break}}while(t>0);for(var r=t;r<e;r++)n=this.activeFormattingElements.entries[r],this._insertElement(n.token,this.treeAdapter.getNamespaceURI(n.element)),n.element=this.openElements.current;}},on.prototype._closeTableCell=function(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=Wt;},on.prototype._closePElement=function(){this.openElements.generateImpliedEndTagsWithExclusion(Pt.P),this.openElements.popUntilTagNamePopped(Pt.P);},on.prototype._resetInsertionMode=function(){for(var e=this.openElements.stackTop,t=!1;e>=0;e--){var n=this.openElements.items[e];0===e&&(t=!0,this.fragmentContext&&(n=this.fragmentContext));var r=this.treeAdapter.getTagName(n),i=nn[r];if(i){this.insertionMode=i;break}if(!(t||r!==Pt.TD&&r!==Pt.TH)){this.insertionMode=jt;break}if(!t&&r===Pt.HEAD){this.insertionMode=Bt;break}if(r===Pt.SELECT){this._resetInsertionModeForSelect(e);break}if(r===Pt.TEMPLATE){this.insertionMode=this.currentTmplInsertionMode;break}if(r===Pt.HTML){this.insertionMode=this.headElement?yt:Gt;break}if(t){this.insertionMode=bt;break}}},on.prototype._resetInsertionModeForSelect=function(e){if(e>0)for(var t=e-1;t>0;t--){var n=this.openElements.items[t],r=this.treeAdapter.getTagName(n);if(r===Pt.TEMPLATE)break;if(r===Pt.TABLE)return void(this.insertionMode=Vt)}this.insertionMode=zt;},on.prototype._pushTmplInsertionMode=function(e){this.tmplInsertionModeStack.push(e),this.tmplInsertionModeStackTop++,this.currentTmplInsertionMode=e;},on.prototype._popTmplInsertionMode=function(){this.tmplInsertionModeStack.pop(),this.tmplInsertionModeStackTop--,this.currentTmplInsertionMode=this.tmplInsertionModeStack[this.tmplInsertionModeStackTop];},on.prototype._isElementCausesFosterParenting=function(e){var t=this.treeAdapter.getTagName(e);return t===Pt.TABLE||t===Pt.TBODY||t===Pt.TFOOT||t===Pt.THEAD||t===Pt.TR},on.prototype._shouldFosterParentOnInsertion=function(){return this.fosterParentingEnabled&&this._isElementCausesFosterParenting(this.openElements.current)},on.prototype._findFosterParentingLocation=function(){for(var e={parent:null,beforeElement:null},t=this.openElements.stackTop;t>=0;t--){var n=this.openElements.items[t],r=this.treeAdapter.getTagName(n),i=this.treeAdapter.getNamespaceURI(n);if(r===Pt.TEMPLATE&&i===Dt.HTML){e.parent=this.treeAdapter.getTemplateContent(n);break}if(r===Pt.TABLE){e.parent=this.treeAdapter.getParentNode(n),e.parent?e.beforeElement=n:e.parent=this.openElements.items[t-1];break}}return e.parent||(e.parent=this.openElements.items[0]),e},on.prototype._fosterParentElement=function(e){var t=this._findFosterParentingLocation();t.beforeElement?this.treeAdapter.insertBefore(t.parent,e,t.beforeElement):this.treeAdapter.appendChild(t.parent,e);},on.prototype._fosterParentText=function(e){var t=this._findFosterParentingLocation();t.beforeElement?this.treeAdapter.insertTextBefore(t.parent,e,t.beforeElement):this.treeAdapter.insertText(t.parent,e);},on.prototype._isSpecialElement=function(e){var t=this.treeAdapter.getTagName(e),n=this.treeAdapter.getNamespaceURI(e);return Lt.SPECIAL_ELEMENTS[n][t]};}); var index$6=createCommonjsModule(function(e){var t=_default,n=doctype,r=merge_options,i=html,s=i.TAG_NAMES,o=i.NAMESPACES,T={treeAdapter:t},a=/&/g,E=/\\u00a0/g,_=/\"/g,c=/</g,p=/>/g,A=e.exports=function(e,t){this.options=r(T,t),this.treeAdapter=this.options.treeAdapter,this.html=\"\",this.startNode=e;};A.escapeString=function(e,t){return e=e.replace(a,\"&amp;\").replace(E,\"&nbsp;\"),e=t?e.replace(_,\"&quot;\"):e.replace(c,\"&lt;\").replace(p,\"&gt;\")},A.prototype.serialize=function(){return this._serializeChildNodes(this.startNode),this.html},A.prototype._serializeChildNodes=function(e){var t=this.treeAdapter.getChildNodes(e);if(t)for(var n=0,r=t.length;n<r;n++){var i=t[n];this.treeAdapter.isElementNode(i)?this._serializeElement(i):this.treeAdapter.isTextNode(i)?this._serializeTextNode(i):this.treeAdapter.isCommentNode(i)?this._serializeCommentNode(i):this.treeAdapter.isDocumentTypeNode(i)&&this._serializeDocumentTypeNode(i);}},A.prototype._serializeElement=function(e){var t=this.treeAdapter.getTagName(e),n=this.treeAdapter.getNamespaceURI(e);if(this.html+=\"<\"+t,this._serializeAttributes(e),this.html+=\">\",t!==s.AREA&&t!==s.BASE&&t!==s.BASEFONT&&t!==s.BGSOUND&&t!==s.BR&&t!==s.BR&&t!==s.COL&&t!==s.EMBED&&t!==s.FRAME&&t!==s.HR&&t!==s.IMG&&t!==s.INPUT&&t!==s.KEYGEN&&t!==s.LINK&&t!==s.MENUITEM&&t!==s.META&&t!==s.PARAM&&t!==s.SOURCE&&t!==s.TRACK&&t!==s.WBR){var r=t===s.TEMPLATE&&n===o.HTML?this.treeAdapter.getTemplateContent(e):e;this._serializeChildNodes(r),this.html+=\"</\"+t+\">\";}},A.prototype._serializeAttributes=function(e){for(var t=this.treeAdapter.getAttrList(e),n=0,r=t.length;n<r;n++){var i=t[n],s=A.escapeString(i.value,!0);this.html+=\" \",i.namespace?i.namespace===o.XML?this.html+=\"xml:\"+i.name:i.namespace===o.XMLNS?(\"xmlns\"!==i.name&&(this.html+=\"xmlns:\"),this.html+=i.name):i.namespace===o.XLINK?this.html+=\"xlink:\"+i.name:this.html+=i.namespace+\":\"+i.name:this.html+=i.name,this.html+='=\"'+s+'\"';}},A.prototype._serializeTextNode=function(e){var t=this.treeAdapter.getTextNodeContent(e),n=this.treeAdapter.getParentNode(e),r=void 0;n&&this.treeAdapter.isElementNode(n)&&(r=this.treeAdapter.getTagName(n)),r===s.STYLE||r===s.SCRIPT||r===s.XMP||r===s.IFRAME||r===s.NOEMBED||r===s.NOFRAMES||r===s.PLAINTEXT||r===s.NOSCRIPT?this.html+=t:this.html+=A.escapeString(t,!1);},A.prototype._serializeCommentNode=function(e){this.html+=\"\\x3c!--\"+this.treeAdapter.getCommentNodeContent(e)+\"--\\x3e\";},A.prototype._serializeDocumentTypeNode=function(e){var t=this.treeAdapter.getDocumentTypeNodeName(e);this.html+=\"<\"+n.serializeContent(t,null,null)+\">\";};}); var htmlparser2=createCommonjsModule(function(e,t){var n=doctype,r=html.DOCUMENT_MODE,i={element:1,text:3,cdata:4,comment:8},s={tagName:\"name\",childNodes:\"children\",parentNode:\"parent\",previousSibling:\"prev\",nextSibling:\"next\",nodeValue:\"data\"},o=function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);};o.prototype={get firstChild(){var e=this.children;return e&&e[0]||null},get lastChild(){var e=this.children;return e&&e[e.length-1]||null},get nodeType(){return i[this.type]||i.element}},Object.keys(s).forEach(function(e){var t=s[e];Object.defineProperty(o.prototype,e,{get:function(){return this[t]||null},set:function(e){return this[t]=e,e}});}),t.createDocument=function(){return new o({type:\"root\",name:\"root\",parent:null,prev:null,next:null,children:[],\"x-mode\":r.NO_QUIRKS})},t.createDocumentFragment=function(){return new o({type:\"root\",name:\"root\",parent:null,prev:null,next:null,children:[]})},t.createElement=function(e,t,n){for(var r=Object.create(null),i=Object.create(null),s=Object.create(null),T=0;T<n.length;T++){var a=n[T].name;r[a]=n[T].value,i[a]=n[T].namespace,s[a]=n[T].prefix;}return new o({type:\"script\"===e||\"style\"===e?e:\"tag\",name:e,namespace:t,attribs:r,\"x-attribsNamespace\":i,\"x-attribsPrefix\":s,children:[],parent:null,prev:null,next:null})},t.createCommentNode=function(e){return new o({type:\"comment\",data:e,parent:null,prev:null,next:null})};var T=function(e){return new o({type:\"text\",data:e,parent:null,prev:null,next:null})},a=t.appendChild=function(e,t){var n=e.children[e.children.length-1];n&&(n.next=t,t.prev=n),e.children.push(t),t.parent=e;},E=t.insertBefore=function(e,t,n){var r=e.children.indexOf(n),i=n.prev;i&&(i.next=t,t.prev=i),n.prev=t,t.next=n,e.children.splice(r,0,t),t.parent=e;};t.setTemplateContent=function(e,t){a(e,t);},t.getTemplateContent=function(e){return e.children[0]},t.setDocumentType=function(e,t,r,i){for(var s=n.serializeContent(t,r,i),T=null,E=0;E<e.children.length;E++)if(\"directive\"===e.children[E].type&&\"!doctype\"===e.children[E].name){T=e.children[E];break}T?(T.data=s,T[\"x-name\"]=t,T[\"x-publicId\"]=r,T[\"x-systemId\"]=i):a(e,new o({type:\"directive\",name:\"!doctype\",data:s,\"x-name\":t,\"x-publicId\":r,\"x-systemId\":i}));},t.setDocumentMode=function(e,t){e[\"x-mode\"]=t;},t.getDocumentMode=function(e){return e[\"x-mode\"]},t.detachNode=function(e){if(e.parent){var t=e.parent.children.indexOf(e),n=e.prev,r=e.next;e.prev=null,e.next=null,n&&(n.next=r),r&&(r.prev=n),e.parent.children.splice(t,1),e.parent=null;}},t.insertText=function(e,t){var n=e.children[e.children.length-1];n&&\"text\"===n.type?n.data+=t:a(e,T(t));},t.insertTextBefore=function(e,t,n){var r=e.children[e.children.indexOf(n)-1];r&&\"text\"===r.type?r.data+=t:E(e,T(t),n);},t.adoptAttributes=function(e,t){for(var n=0;n<t.length;n++){var r=t[n].name;void 0===e.attribs[r]&&(e.attribs[r]=t[n].value,e[\"x-attribsNamespace\"][r]=t[n].namespace,e[\"x-attribsPrefix\"][r]=t[n].prefix);}},t.getFirstChild=function(e){return e.children[0]},t.getChildNodes=function(e){return e.children},t.getParentNode=function(e){return e.parent},t.getAttrList=function(e){var t=[];for(var n in e.attribs)t.push({name:n,value:e.attribs[n],namespace:e[\"x-attribsNamespace\"][n],prefix:e[\"x-attribsPrefix\"][n]});return t},t.getTagName=function(e){return e.name},t.getNamespaceURI=function(e){return e.namespace},t.getTextNodeContent=function(e){return e.data},t.getCommentNodeContent=function(e){return e.data},t.getDocumentTypeNodeName=function(e){return e[\"x-name\"]},t.getDocumentTypeNodePublicId=function(e){return e[\"x-publicId\"]},t.getDocumentTypeNodeSystemId=function(e){return e[\"x-systemId\"]},t.isTextNode=function(e){return\"text\"===e.type},t.isCommentNode=function(e){return\"comment\"===e.type},t.isDocumentTypeNode=function(e){return\"directive\"===e.type&&\"!doctype\"===e.name},t.isElementNode=function(e){return!!e.attribs};}); var parser_stream=createCommonjsModule(function(e){var t=require$$0.Writable,n=require$$1.inherits,r=index$2,i=e.exports=function(e){t.call(this),this.parser=new r(e),this.lastChunkWritten=!1,this.writeCallback=null,this.pausedByScript=!1,this.document=this.parser.treeAdapter.createDocument(),this.pendingHtmlInsertions=[],this._resume=this._resume.bind(this),this._documentWrite=this._documentWrite.bind(this),this._scriptHandler=this._scriptHandler.bind(this),this.parser._bootstrap(this.document,null);};n(i,t),i.prototype._write=function(e,t,n){this.writeCallback=n,this.parser.tokenizer.write(e.toString(\"utf8\"),this.lastChunkWritten),this._runParsingLoop();},i.prototype.end=function(e,n,r){this.lastChunkWritten=!0,t.prototype.end.call(this,e,n,r);},i.prototype._runParsingLoop=function(){this.parser.runParsingLoopForCurrentChunk(this.writeCallback,this._scriptHandler);},i.prototype._resume=function(){if(!this.pausedByScript)throw new Error(\"Parser was already resumed\");for(;this.pendingHtmlInsertions.length;){var e=this.pendingHtmlInsertions.pop();this.parser.tokenizer.insertHtmlAtCurrentPos(e);}this.pausedByScript=!1,this.parser.tokenizer.active&&this._runParsingLoop();},i.prototype._documentWrite=function(e){this.parser.stopped||this.pendingHtmlInsertions.push(e);},i.prototype._scriptHandler=function(e){this.listeners(\"script\").length?(this.pausedByScript=!0,this.emit(\"script\",e,this._documentWrite,this._resume)):this._runParsingLoop();};}); var plain_text_conversion_stream=createCommonjsModule(function(e){var t=parser_stream,n=require$$1.inherits,r=html.TAG_NAMES;n(e.exports=function(e){t.call(this,e),this.parser._insertFakeElement(r.HTML),this.parser._insertFakeElement(r.HEAD),this.parser.openElements.pop(),this.parser._insertFakeElement(r.BODY),this.parser._insertFakeElement(r.PRE),this.parser.treeAdapter.insertText(this.parser.openElements.current,\"\\n\"),this.parser.switchToPlaintextParsing();},t);}); var serializer_stream=createCommonjsModule(function(e){var t=require$$0.Readable,n=require$$1.inherits,r=index$6,i=e.exports=function(e,n){t.call(this),this.serializer=new r(e,n),Object.defineProperty(this.serializer,\"html\",{get:function(){return\"\"},set:this.push.bind(this)});};n(i,t),i.prototype._read=function(){this.serializer.serialize(),this.push(null);};}); var dev_null_stream=createCommonjsModule(function(e){var t=require$$0.Writable,n=require$$1,r=e.exports=function(){t.call(this);};n.inherits(r,t),r.prototype._write=function(e,t,n){n();};}); var parser_feedback_simulator=createCommonjsModule(function(e){var t=index$4,n=foreign_content,r=unicode,i=html,s=i.TAG_NAMES,o=i.NAMESPACES,T=e.exports=function(e){this.tokenizer=e,this.namespaceStack=[],this.namespaceStackTop=-1,this._enterNamespace(o.HTML);};T.prototype.getNextToken=function(){var e=this.tokenizer.getNextToken();if(e.type===t.START_TAG_TOKEN)this._handleStartTagToken(e);else if(e.type===t.END_TAG_TOKEN)this._handleEndTagToken(e);else if(e.type===t.NULL_CHARACTER_TOKEN&&this.inForeignContent)e.type=t.CHARACTER_TOKEN,e.chars=r.REPLACEMENT_CHARACTER;else if(this.skipNextNewLine&&(e.type!==t.HIBERNATION_TOKEN&&(this.skipNextNewLine=!1),e.type===t.WHITESPACE_CHARACTER_TOKEN&&\"\\n\"===e.chars[0])){if(1===e.chars.length)return this.getNextToken();e.chars=e.chars.substr(1);}return e},T.prototype._enterNamespace=function(e){this.namespaceStackTop++,this.namespaceStack.push(e),this.inForeignContent=e!==o.HTML,this.currentNamespace=e,this.tokenizer.allowCDATA=this.inForeignContent;},T.prototype._leaveCurrentNamespace=function(){this.namespaceStackTop--,this.namespaceStack.pop(),this.currentNamespace=this.namespaceStack[this.namespaceStackTop],this.inForeignContent=this.currentNamespace!==o.HTML,this.tokenizer.allowCDATA=this.inForeignContent;},T.prototype._ensureTokenizerMode=function(e){e===s.TEXTAREA||e===s.TITLE?this.tokenizer.state=t.MODE.RCDATA:e===s.PLAINTEXT?this.tokenizer.state=t.MODE.PLAINTEXT:e===s.SCRIPT?this.tokenizer.state=t.MODE.SCRIPT_DATA:e!==s.STYLE&&e!==s.IFRAME&&e!==s.XMP&&e!==s.NOEMBED&&e!==s.NOFRAMES&&e!==s.NOSCRIPT||(this.tokenizer.state=t.MODE.RAWTEXT);},T.prototype._handleStartTagToken=function(e){var t=e.tagName;if(t===s.SVG?this._enterNamespace(o.SVG):t===s.MATH&&this._enterNamespace(o.MATHML),this.inForeignContent){if(n.causesExit(e))return void this._leaveCurrentNamespace();var r=this.currentNamespace;r===o.MATHML?n.adjustTokenMathMLAttrs(e):r===o.SVG&&(n.adjustTokenSVGTagName(e),n.adjustTokenSVGAttrs(e)),n.adjustTokenXMLAttrs(e),t=e.tagName,!e.selfClosing&&n.isIntegrationPoint(t,r,e.attrs)&&this._enterNamespace(o.HTML);}else t===s.PRE||t===s.TEXTAREA||t===s.LISTING?this.skipNextNewLine=!0:t===s.IMAGE&&(e.tagName=s.IMG),this._ensureTokenizerMode(t);},T.prototype._handleEndTagToken=function(e){var t=e.tagName;if(this.inForeignContent)(t===s.SVG&&this.currentNamespace===o.SVG||t===s.MATH&&this.currentNamespace===o.MATHML)&&this._leaveCurrentNamespace();else{var r=this.namespaceStack[this.namespaceStackTop-1];r===o.SVG&&n.SVG_TAG_NAMES_ADJUSTMENT_MAP[t]&&(t=n.SVG_TAG_NAMES_ADJUSTMENT_MAP[t]),n.isIntegrationPoint(t,r,e.attrs)&&this._leaveCurrentNamespace();}this.currentNamespace===o.SVG&&n.adjustTokenSVGTagName(e);};}); var index$8=createCommonjsModule(function(e){var t=require$$0.Transform,n=dev_null_stream,r=require$$1.inherits,i=index$4,s=parser_feedback_simulator,o=merge_options,T={locationInfo:!1},a=e.exports=function(e){t.call(this),this.options=o(T,e),this.tokenizer=new i(e),this.parserFeedbackSimulator=new s(this.tokenizer),this.pendingText=null,this.currentTokenLocation=void 0,this.lastChunkWritten=!1,this.stopped=!1,this.pipe(new n);};r(a,t),a.prototype._transform=function(e,t,n){this.stopped||(this.tokenizer.write(e.toString(\"utf8\"),this.lastChunkWritten),this._runParsingLoop()),this.push(e),n();},a.prototype._flush=function(e){e();},a.prototype.end=function(e,n,r){this.lastChunkWritten=!0,t.prototype.end.call(this,e,n,r);},a.prototype.stop=function(){this.stopped=!0;},a.prototype._runParsingLoop=function(){do{var e=this.parserFeedbackSimulator.getNextToken();if(e.type===i.HIBERNATION_TOKEN)break;e.type===i.CHARACTER_TOKEN||e.type===i.WHITESPACE_CHARACTER_TOKEN||e.type===i.NULL_CHARACTER_TOKEN?(this.options.locationInfo&&(null===this.pendingText?this.currentTokenLocation=e.location:this.currentTokenLocation.endOffset=e.location.endOffset),this.pendingText=(this.pendingText||\"\")+e.chars):(this._emitPendingText(),this._handleToken(e));}while(!this.stopped&&e.type!==i.EOF_TOKEN)},a.prototype._handleToken=function(e){this.options.locationInfo&&(this.currentTokenLocation=e.location),e.type===i.START_TAG_TOKEN?this.emit(\"startTag\",e.tagName,e.attrs,e.selfClosing,this.currentTokenLocation):e.type===i.END_TAG_TOKEN?this.emit(\"endTag\",e.tagName,this.currentTokenLocation):e.type===i.COMMENT_TOKEN?this.emit(\"comment\",e.data,this.currentTokenLocation):e.type===i.DOCTYPE_TOKEN&&this.emit(\"doctype\",e.name,e.publicId,e.systemId,this.currentTokenLocation);},a.prototype._emitPendingText=function(){null!==this.pendingText&&(this.emit(\"text\",this.pendingText,this.currentTokenLocation),this.pendingText=null);};}); var Parser=index$2; var Serializer=index$6; var parse$1=function(e,t){return new Parser(t).parse(e)}; var parseFragment=function(e,t,n){return\"string\"==typeof e&&(n=t,t=e,e=null),new Parser(n).parseFragment(t,e)}; var serialize=function(e,t){return new Serializer(e,t).serialize()}; var treeAdapters={default:_default,htmlparser2:htmlparser2}; var ParserStream=parser_stream; var PlainTextConversionStream=plain_text_conversion_stream; var SerializerStream=serializer_stream; var SAXParser=index$8; var index={parse:parse$1,parseFragment:parseFragment,serialize:serialize,treeAdapters:treeAdapters,ParserStream:ParserStream,PlainTextConversionStream:PlainTextConversionStream,SerializerStream:SerializerStream,SAXParser:SAXParser}; var parserParse5=parse;var parserParse5_1=parserParse5;\n\nreturn parserParse5_1;\n\n}(stream,util));\n"
  },
  {
    "path": "website/static/lib/parser-postcss.js",
    "content": "var postcss = (function () {\nfunction unwrapExports (x) {\n\treturn x && x.__esModule ? x['default'] : x;\n}\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar parserPostcss = createCommonjsModule(function (module) {\nmodule.exports = /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 160);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nvar TAG = exports.TAG = 'tag';\nvar STRING = exports.STRING = 'string';\nvar SELECTOR = exports.SELECTOR = 'selector';\nvar ROOT = exports.ROOT = 'root';\nvar PSEUDO = exports.PSEUDO = 'pseudo';\nvar NESTING = exports.NESTING = 'nesting';\nvar ID = exports.ID = 'id';\nvar COMMENT = exports.COMMENT = 'comment';\nvar COMBINATOR = exports.COMBINATOR = 'combinator';\nvar CLASS = exports.CLASS = 'class';\nvar ATTRIBUTE = exports.ATTRIBUTE = 'attribute';\nvar UNIVERSAL = exports.UNIVERSAL = 'universal';\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nconst Node = __webpack_require__(4);\n\nclass Container extends Node {\n\n  constructor (opts) {\n    super(opts);\n\n    if (!this.nodes) {\n      this.nodes = [];\n    }\n  }\n\n  push (child) {\n    child.parent = this;\n    this.nodes.push(child);\n    return this;\n  }\n\n  each (callback) {\n    if (!this.lastEach) this.lastEach = 0;\n    if (!this.indexes) this.indexes = { };\n\n    this.lastEach += 1;\n\n    let id = this.lastEach,\n      index,\n      result;\n\n    this.indexes[id] = 0;\n\n    if (!this.nodes) return undefined;\n\n    while (this.indexes[id] < this.nodes.length) {\n      index  = this.indexes[id];\n      result = callback(this.nodes[index], index);\n      if (result === false) break;\n\n      this.indexes[id] += 1;\n    }\n\n    delete this.indexes[id];\n\n    return result;\n  }\n\n  walk (callback) {\n    return this.each((child, i) => {\n      let result = callback(child, i);\n      if (result !== false && child.walk) {\n        result = child.walk(callback);\n      }\n      return result;\n    });\n  }\n\n  walkType (type, callback) {\n    if (!type || !callback) {\n      throw new Error('Parameters {type} and {callback} are required.');\n    }\n\n    // allow users to pass a constructor, or node type string; eg. Word.\n    type = type.name && type.prototype ? type.name : type;\n\n    return this.walk((node, index) => {\n      if (node.type === type) {\n        return callback.call(this, node, index);\n      }\n    });\n  }\n\n  append (node) {\n    node.parent = this;\n    this.nodes.push(node);\n    return this;\n  }\n\n  prepend (node) {\n    node.parent = this;\n    this.nodes.unshift(node);\n    return this;\n  }\n\n  cleanRaws (keepBetween) {\n    super.cleanRaws(keepBetween);\n    if (this.nodes) {\n      for (let node of this.nodes) node.cleanRaws(keepBetween);\n    }\n  }\n\n  insertAfter (oldNode, newNode) {\n    let oldIndex = this.index(oldNode),\n      index;\n\n    this.nodes.splice(oldIndex + 1, 0, newNode);\n\n    for (let id in this.indexes) {\n      index = this.indexes[id];\n      if (oldIndex <= index) {\n        this.indexes[id] = index + this.nodes.length;\n      }\n    }\n\n    return this;\n  }\n\n  insertBefore (oldNode, newNode) {\n    let oldIndex = this.index(oldNode),\n      index;\n\n    this.nodes.splice(oldIndex, 0, newNode);\n\n    for (let id in this.indexes) {\n      index = this.indexes[id];\n      if (oldIndex <= index) {\n        this.indexes[id] = index + this.nodes.length;\n      }\n    }\n\n    return this;\n  }\n\n  removeChild (child) {\n    child = this.index(child);\n    this.nodes[child].parent = undefined;\n    this.nodes.splice(child, 1);\n\n    let index;\n    for (let id in this.indexes) {\n      index = this.indexes[id];\n      if (index >= child) {\n        this.indexes[id] = index - 1;\n      }\n    }\n\n    return this;\n  }\n\n  removeAll () {\n    for (let node of this.nodes) node.parent = undefined;\n    this.nodes = [];\n    return this;\n  }\n\n  every (condition) {\n    return this.nodes.every(condition);\n  }\n\n  some (condition) {\n    return this.nodes.some(condition);\n  }\n\n  index (child) {\n    if (typeof child === 'number') {\n      return child;\n    }\n    else {\n      return this.nodes.indexOf(child);\n    }\n  }\n\n  get first () {\n    if (!this.nodes) return undefined;\n    return this.nodes[0];\n  }\n\n  get last () {\n    if (!this.nodes) return undefined;\n    return this.nodes[this.nodes.length - 1];\n  }\n\n  toString () {\n    let result = this.nodes.map(String).join('');\n\n    if (this.value) {\n      result = this.value + result;\n    }\n\n    if (this.raws.before) {\n      result = this.raws.before + result;\n    }\n\n    if (this.raws.after) {\n      result += this.raws.after;\n    }\n\n    return result;\n  }\n}\n\nContainer.registerWalker = (constructor) => {\n  let walkerName = 'walk' + constructor.name;\n\n  // plural sugar\n  if (walkerName.lastIndexOf('s') !== walkerName.length - 1) {\n    walkerName += 's';\n  }\n\n  if (Container.prototype[walkerName]) {\n    return;\n  }\n\n  // we need access to `this` so we can't use an arrow function\n  Container.prototype[walkerName] = function (callback) {\n    return this.walkType(constructor, callback);\n  };\n};\n\nmodule.exports = Container;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar singleQuote = exports.singleQuote = '\\''.charCodeAt(0);\nvar doubleQuote = exports.doubleQuote = '\"'.charCodeAt(0);\nvar backslash = exports.backslash = '\\\\'.charCodeAt(0);\nvar backTick = exports.backTick = '`'.charCodeAt(0);\nvar slash = exports.slash = '/'.charCodeAt(0);\nvar newline = exports.newline = '\\n'.charCodeAt(0);\nvar space = exports.space = ' '.charCodeAt(0);\nvar feed = exports.feed = '\\f'.charCodeAt(0);\nvar tab = exports.tab = '\\t'.charCodeAt(0);\nvar carriageReturn = exports.carriageReturn = '\\r'.charCodeAt(0);\nvar openedParenthesis = exports.openedParenthesis = '('.charCodeAt(0);\nvar closedParenthesis = exports.closedParenthesis = ')'.charCodeAt(0);\nvar openedCurlyBracket = exports.openedCurlyBracket = '{'.charCodeAt(0);\nvar closedCurlyBracket = exports.closedCurlyBracket = '}'.charCodeAt(0);\nvar openSquareBracket = exports.openSquareBracket = '['.charCodeAt(0);\nvar closeSquareBracket = exports.closeSquareBracket = ']'.charCodeAt(0);\nvar semicolon = exports.semicolon = ';'.charCodeAt(0);\nvar asterisk = exports.asterisk = '*'.charCodeAt(0);\nvar colon = exports.colon = ':'.charCodeAt(0);\nvar comma = exports.comma = ','.charCodeAt(0);\nvar dot = exports.dot = '.'.charCodeAt(0);\nvar atRule = exports.atRule = '@'.charCodeAt(0);\nvar tilde = exports.tilde = '~'.charCodeAt(0);\nvar hash = exports.hash = '#'.charCodeAt(0);\n\nvar atEndPattern = exports.atEndPattern = /[ \\n\\t\\r\\f\\{\\(\\)'\"\\\\;/\\[\\]#]/g;\nvar wordEndPattern = exports.wordEndPattern = /[ \\n\\t\\r\\f\\(\\)\\{\\}:,;@!'\"\\\\\\]\\[#]|\\/(?=\\*)/g;\nvar badBracketPattern = exports.badBracketPattern = /.[\\\\\\/\\(\"'\\n]/;\n\nvar variablePattern = exports.variablePattern = /^@[^:\\(\\{]+:/;\nvar hashColorPattern = exports.hashColorPattern = /^#[0-9a-fA-F]{6}$|^#[0-9a-fA-F]{3}$/;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = warnOnce;\nvar printed = {};\n\nfunction warnOnce(message) {\n    if (printed[message]) return;\n    printed[message] = true;\n\n    if (typeof console !== 'undefined' && console.warn) console.warn(message);\n}\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nlet cloneNode = function (obj, parent) {\n  let cloned = new obj.constructor();\n\n  for (let i in obj) {\n    if (!obj.hasOwnProperty(i)) continue;\n\n    let value = obj[i],\n      type  = typeof value;\n\n    if (i === 'parent' && type === 'object') {\n      if (parent) cloned[i] = parent;\n    }\n    else if (i === 'source') {\n      cloned[i] = value;\n    }\n    else if (value instanceof Array) {\n      cloned[i] = value.map(j => cloneNode(j, cloned));\n    }\n    else if (i !== 'before'  && i !== 'after' && i !== 'between' && i !== 'semicolon') {\n      if (type === 'object' && value !== null) value = cloneNode(value);\n      cloned[i] = value;\n    }\n  }\n\n  return cloned;\n};\n\nmodule.exports = class Node {\n\n  constructor (defaults) {\n    defaults = defaults || {};\n    this.raws = { before: '', after: '' };\n\n    for (let name in defaults) {\n      this[name] = defaults[name];\n    }\n  }\n\n  remove () {\n    if (this.parent) {\n      this.parent.removeChild(this);\n    }\n\n    this.parent = undefined;\n\n    return this;\n  }\n\n  toString () {\n    return [\n      this.raws.before,\n      String(this.value),\n      this.raws.after\n    ].join('');\n  }\n\n  clone (overrides) {\n    overrides = overrides || {};\n\n    let cloned = cloneNode(this);\n\n    for (let name in overrides) {\n      cloned[name] = overrides[name];\n    }\n\n    return cloned;\n  }\n\n  cloneBefore (overrides) {\n    overrides = overrides || {};\n\n    let cloned = this.clone(overrides);\n\n    this.parent.insertBefore(this, cloned);\n    return cloned;\n  }\n\n  cloneAfter (overrides) {\n    overrides = overrides || {};\n\n    let cloned = this.clone(overrides);\n\n    this.parent.insertAfter(this, cloned);\n    return cloned;\n  }\n\n  replaceWith () {\n    let nodes = Array.prototype.slice.call(arguments);\n\n    if (this.parent) {\n      for (let node of nodes) {\n        this.parent.insertBefore(this, node);\n      }\n\n      this.remove();\n    }\n\n    return this;\n  }\n\n  moveTo (container) {\n    this.cleanRaws(this.root() === container.root());\n    this.remove();\n\n    container.append(this);\n\n    return this;\n  }\n\n  moveBefore (node) {\n    this.cleanRaws(this.root() === node.root());\n    this.remove();\n\n    node.parent.insertBefore(node, this);\n\n    return this;\n  }\n\n  moveAfter (node) {\n    this.cleanRaws(this.root() === node.root());\n    this.remove();\n    node.parent.insertAfter(node, this);\n    return this;\n  }\n\n  next () {\n    let index = this.parent.index(this);\n\n    return this.parent.nodes[index + 1];\n  }\n\n  prev () {\n    let index = this.parent.index(this);\n\n    return this.parent.nodes[index - 1];\n  }\n\n  toJSON () {\n    let fixed = { };\n\n    for (let name in this) {\n      if (!this.hasOwnProperty(name)) continue;\n      if (name === 'parent') continue;\n      let value = this[name];\n\n      if (value instanceof Array) {\n        fixed[name] = value.map(i => {\n          if (typeof i === 'object' && i.toJSON) {\n            return i.toJSON();\n          }\n          else {\n            return i;\n          }\n        });\n      }\n      else if (typeof value === 'object' && value.toJSON) {\n        fixed[name] = value.toJSON();\n      }\n      else {\n        fixed[name] = value;\n      }\n    }\n\n    return fixed;\n  }\n\n  root () {\n    let result = this;\n\n    while (result.parent) result = result.parent;\n\n    return result;\n  }\n\n  cleanRaws (keepBetween) {\n    delete this.raws.before;\n    delete this.raws.after;\n    if (!keepBetween) delete this.raws.between;\n  }\n\n  positionInside (index) {\n    let string = this.toString(),\n      column = this.source.start.column,\n      line   = this.source.start.line;\n\n    for (let i = 0; i < index; i++) {\n      if (string[i] === '\\n') {\n        column = 1;\n        line  += 1;\n      }\n      else {\n        column += 1;\n      }\n    }\n\n    return { line, column };\n  }\n\n  positionBy (opts) {\n    let pos = this.source.start;\n\n    if (opts.index) {\n      pos = this.positionInside(opts.index);\n    }\n    else if (opts.word) {\n      let index = this.toString().indexOf(opts.word);\n      if (index !== -1) pos = this.positionInside(index);\n    }\n\n    return pos;\n  }\n};\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(process) {// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = parts.length - 1; i >= 0; i--) {\n    var last = parts[i];\n    if (last === '.') {\n      parts.splice(i, 1);\n    } else if (last === '..') {\n      parts.splice(i, 1);\n      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\n    for (; up--; up) {\n      parts.unshift('..');\n    }\n  }\n\n  return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n    /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n  return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n  var resolvedPath = '',\n      resolvedAbsolute = false;\n\n  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    var path = (i >= 0) ? arguments[i] : process.cwd();\n\n    // Skip empty and invalid entries\n    if (typeof path !== 'string') {\n      throw new TypeError('Arguments to path.resolve must be strings');\n    } else if (!path) {\n      continue;\n    }\n\n    resolvedPath = path + '/' + resolvedPath;\n    resolvedAbsolute = path.charAt(0) === '/';\n  }\n\n  // At this point the path should be resolved to a full absolute path, but\n  // handle relative paths to be safe (might happen when process.cwd() fails)\n\n  // Normalize the path\n  resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n    return !!p;\n  }), !resolvedAbsolute).join('/');\n\n  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n  var isAbsolute = exports.isAbsolute(path),\n      trailingSlash = substr(path, -1) === '/';\n\n  // Normalize the path\n  path = normalizeArray(filter(path.split('/'), function(p) {\n    return !!p;\n  }), !isAbsolute).join('/');\n\n  if (!path && !isAbsolute) {\n    path = '.';\n  }\n  if (path && trailingSlash) {\n    path += '/';\n  }\n\n  return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n  return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n  var paths = Array.prototype.slice.call(arguments, 0);\n  return exports.normalize(filter(paths, function(p, index) {\n    if (typeof p !== 'string') {\n      throw new TypeError('Arguments to path.join must be strings');\n    }\n    return p;\n  }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n  from = exports.resolve(from).substr(1);\n  to = exports.resolve(to).substr(1);\n\n  function trim(arr) {\n    var start = 0;\n    for (; start < arr.length; start++) {\n      if (arr[start] !== '') break;\n    }\n\n    var end = arr.length - 1;\n    for (; end >= 0; end--) {\n      if (arr[end] !== '') break;\n    }\n\n    if (start > end) return [];\n    return arr.slice(start, end - start + 1);\n  }\n\n  var fromParts = trim(from.split('/'));\n  var toParts = trim(to.split('/'));\n\n  var length = Math.min(fromParts.length, toParts.length);\n  var samePartsLength = length;\n  for (var i = 0; i < length; i++) {\n    if (fromParts[i] !== toParts[i]) {\n      samePartsLength = i;\n      break;\n    }\n  }\n\n  var outputParts = [];\n  for (var i = samePartsLength; i < fromParts.length; i++) {\n    outputParts.push('..');\n  }\n\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n  return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function(path) {\n  var result = splitPath(path),\n      root = result[0],\n      dir = result[1];\n\n  if (!root && !dir) {\n    // No dirname whatsoever\n    return '.';\n  }\n\n  if (dir) {\n    // It has a dirname, strip trailing slash\n    dir = dir.substr(0, dir.length - 1);\n  }\n\n  return root + dir;\n};\n\n\nexports.basename = function(path, ext) {\n  var f = splitPath(path)[2];\n  // TODO: make this comparison case-insensitive on windows?\n  if (ext && f.substr(-1 * ext.length) === ext) {\n    f = f.substr(0, f.length - ext.length);\n  }\n  return f;\n};\n\n\nexports.extname = function(path) {\n  return splitPath(path)[3];\n};\n\nfunction filter (xs, f) {\n    if (xs.filter) return xs.filter(f);\n    var res = [];\n    for (var i = 0; i < xs.length; i++) {\n        if (f(xs[i], i, xs)) res.push(xs[i]);\n    }\n    return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n    ? function (str, start, len) { return str.substr(start, len) }\n    : function (str, start, len) {\n        if (start < 0) start = str.length + start;\n        return str.substr(start, len);\n    };\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7)));\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar cloneNode = function cloneNode(obj, parent) {\n    if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) !== 'object') {\n        return obj;\n    }\n\n    var cloned = new obj.constructor();\n\n    for (var i in obj) {\n        if (!obj.hasOwnProperty(i)) {\n            continue;\n        }\n        var value = obj[i];\n        var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n\n        if (i === 'parent' && type === 'object') {\n            if (parent) {\n                cloned[i] = parent;\n            }\n        } else if (value instanceof Array) {\n            cloned[i] = value.map(function (j) {\n                return cloneNode(j, cloned);\n            });\n        } else {\n            cloned[i] = cloneNode(value, cloned);\n        }\n    }\n\n    return cloned;\n};\n\nvar _class = function () {\n    function _class() {\n        var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n        _classCallCheck(this, _class);\n\n        for (var key in opts) {\n            this[key] = opts[key];\n        }\n        var _opts$spaces = opts.spaces;\n        _opts$spaces = _opts$spaces === undefined ? {} : _opts$spaces;\n        var _opts$spaces$before = _opts$spaces.before,\n            before = _opts$spaces$before === undefined ? '' : _opts$spaces$before,\n            _opts$spaces$after = _opts$spaces.after,\n            after = _opts$spaces$after === undefined ? '' : _opts$spaces$after;\n\n        this.spaces = { before: before, after: after };\n    }\n\n    _class.prototype.remove = function remove() {\n        if (this.parent) {\n            this.parent.removeChild(this);\n        }\n        this.parent = undefined;\n        return this;\n    };\n\n    _class.prototype.replaceWith = function replaceWith() {\n        if (this.parent) {\n            for (var index in arguments) {\n                this.parent.insertBefore(this, arguments[index]);\n            }\n            this.remove();\n        }\n        return this;\n    };\n\n    _class.prototype.next = function next() {\n        return this.parent.at(this.parent.index(this) + 1);\n    };\n\n    _class.prototype.prev = function prev() {\n        return this.parent.at(this.parent.index(this) - 1);\n    };\n\n    _class.prototype.clone = function clone() {\n        var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n        var cloned = cloneNode(this);\n        for (var name in overrides) {\n            cloned[name] = overrides[name];\n        }\n        return cloned;\n    };\n\n    _class.prototype.toString = function toString() {\n        return [this.spaces.before, String(this.value), this.spaces.after].join('');\n    };\n\n    return _class;\n}();\n\nexports.default = _class;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ());\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // 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\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // 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.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] };\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = unclosed;\nfunction unclosed(state, what) {\n  throw state.input.error(\"Unclosed \" + what, state.line, state.pos - state.offset);\n}\nmodule.exports = exports[\"default\"];\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; }; }();\n\nvar _container = __webpack_require__(18);\n\nvar _container2 = _interopRequireDefault(_container);\n\nvar _warnOnce = __webpack_require__(3);\n\nvar _warnOnce2 = _interopRequireDefault(_warnOnce);\n\nvar _list = __webpack_require__(115);\n\nvar _list2 = _interopRequireDefault(_list);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * Represents a CSS rule: a selector followed by a declaration block.\n *\n * @extends Container\n *\n * @example\n * const root = postcss.parse('a{}');\n * const rule = root.first;\n * rule.type       //=> 'rule'\n * rule.toString() //=> 'a{}'\n */\nvar Rule = function (_Container) {\n    _inherits(Rule, _Container);\n\n    function Rule(defaults) {\n        _classCallCheck(this, Rule);\n\n        var _this = _possibleConstructorReturn(this, _Container.call(this, defaults));\n\n        _this.type = 'rule';\n        if (!_this.nodes) _this.nodes = [];\n        return _this;\n    }\n\n    /**\n     * An array containing the rule’s individual selectors.\n     * Groups of selectors are split at commas.\n     *\n     * @type {string[]}\n     *\n     * @example\n     * const root = postcss.parse('a, b { }');\n     * const rule = root.first;\n     *\n     * rule.selector  //=> 'a, b'\n     * rule.selectors //=> ['a', 'b']\n     *\n     * rule.selectors = ['a', 'strong'];\n     * rule.selector //=> 'a, strong'\n     */\n\n\n    _createClass(Rule, [{\n        key: 'selectors',\n        get: function get() {\n            return _list2.default.comma(this.selector);\n        },\n        set: function set(values) {\n            var match = this.selector ? this.selector.match(/,\\s*/) : null;\n            var sep = match ? match[0] : ',' + this.raw('between', 'beforeOpen');\n            this.selector = values.join(sep);\n        }\n    }, {\n        key: '_selector',\n        get: function get() {\n            (0, _warnOnce2.default)('Rule#_selector is deprecated. Use Rule#raws.selector');\n            return this.raws.selector;\n        },\n        set: function set(val) {\n            (0, _warnOnce2.default)('Rule#_selector is deprecated. Use Rule#raws.selector');\n            this.raws.selector = val;\n        }\n\n        /**\n         * @memberof Rule#\n         * @member {string} selector - the rule’s full selector represented\n         *                             as a string\n         *\n         * @example\n         * const root = postcss.parse('a, b { }');\n         * const rule = root.first;\n         * rule.selector //=> 'a, b'\n         */\n\n        /**\n         * @memberof Rule#\n         * @member {object} raws - Information to generate byte-to-byte equal\n         *                         node string as it was in the origin input.\n         *\n         * Every parser saves its own properties,\n         * but the default CSS parser uses:\n         *\n         * * `before`: the space symbols before the node. It also stores `*`\n         *   and `_` symbols before the declaration (IE hack).\n         * * `after`: the space symbols after the last child of the node\n         *   to the end of the node.\n         * * `between`: the symbols between the property and value\n         *   for declarations, selector and `{` for rules, or last parameter\n         *   and `{` for at-rules.\n         * * `semicolon`: contains true if the last child has\n         *   an (optional) semicolon.\n         *\n         * PostCSS cleans selectors from comments and extra spaces,\n         * but it stores origin content in raws properties.\n         * As such, if you don’t change a declaration’s value,\n         * PostCSS will use the raw value with comments.\n         *\n         * @example\n         * const root = postcss.parse('a {\\n  color:black\\n}')\n         * root.first.first.raws //=> { before: '', between: ' ', after: '\\n' }\n         */\n\n    }]);\n\n    return Rule;\n}(_container2.default);\n\nexports.default = Rule;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; }; }();\n\nvar _node = __webpack_require__(6);\n\nvar _node2 = _interopRequireDefault(_node);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Namespace = function (_Node) {\n    _inherits(Namespace, _Node);\n\n    function Namespace() {\n        _classCallCheck(this, Namespace);\n\n        return _possibleConstructorReturn(this, _Node.apply(this, arguments));\n    }\n\n    Namespace.prototype.toString = function toString() {\n        return [this.spaces.before, this.ns, String(this.value), this.spaces.after].join('');\n    };\n\n    _createClass(Namespace, [{\n        key: 'ns',\n        get: function get() {\n            var n = this.namespace;\n            return n ? (typeof n === 'string' ? n : '') + '|' : '';\n        }\n    }]);\n\n    return Namespace;\n}(_node2.default);\n\nexports.default = Namespace;\n\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports) {\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n  if (aName in aArgs) {\n    return aArgs[aName];\n  } else if (arguments.length === 3) {\n    return aDefaultValue;\n  } else {\n    throw new Error('\"' + aName + '\" is a required argument.');\n  }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n  var match = aUrl.match(urlRegexp);\n  if (!match) {\n    return null;\n  }\n  return {\n    scheme: match[1],\n    auth: match[2],\n    host: match[3],\n    port: match[4],\n    path: match[5]\n  };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n  var url = '';\n  if (aParsedUrl.scheme) {\n    url += aParsedUrl.scheme + ':';\n  }\n  url += '//';\n  if (aParsedUrl.auth) {\n    url += aParsedUrl.auth + '@';\n  }\n  if (aParsedUrl.host) {\n    url += aParsedUrl.host;\n  }\n  if (aParsedUrl.port) {\n    url += \":\" + aParsedUrl.port;\n  }\n  if (aParsedUrl.path) {\n    url += aParsedUrl.path;\n  }\n  return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n  var path = aPath;\n  var url = urlParse(aPath);\n  if (url) {\n    if (!url.path) {\n      return aPath;\n    }\n    path = url.path;\n  }\n  var isAbsolute = exports.isAbsolute(path);\n\n  var parts = path.split(/\\/+/);\n  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n    part = parts[i];\n    if (part === '.') {\n      parts.splice(i, 1);\n    } else if (part === '..') {\n      up++;\n    } else if (up > 0) {\n      if (part === '') {\n        // The first part is blank if the path is absolute. Trying to go\n        // above the root is a no-op. Therefore we can remove all '..' parts\n        // directly after the root.\n        parts.splice(i + 1, up);\n        up = 0;\n      } else {\n        parts.splice(i, 2);\n        up--;\n      }\n    }\n  }\n  path = parts.join('/');\n\n  if (path === '') {\n    path = isAbsolute ? '/' : '.';\n  }\n\n  if (url) {\n    url.path = path;\n    return urlGenerate(url);\n  }\n  return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n *   first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n *   is updated with the result and aRoot is returned. Otherwise the result\n *   is returned.\n *   - If aPath is absolute, the result is aPath.\n *   - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n  if (aPath === \"\") {\n    aPath = \".\";\n  }\n  var aPathUrl = urlParse(aPath);\n  var aRootUrl = urlParse(aRoot);\n  if (aRootUrl) {\n    aRoot = aRootUrl.path || '/';\n  }\n\n  // `join(foo, '//www.example.org')`\n  if (aPathUrl && !aPathUrl.scheme) {\n    if (aRootUrl) {\n      aPathUrl.scheme = aRootUrl.scheme;\n    }\n    return urlGenerate(aPathUrl);\n  }\n\n  if (aPathUrl || aPath.match(dataUrlRegexp)) {\n    return aPath;\n  }\n\n  // `join('http://', 'www.example.com')`\n  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n    aRootUrl.host = aPath;\n    return urlGenerate(aRootUrl);\n  }\n\n  var joined = aPath.charAt(0) === '/'\n    ? aPath\n    : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n  if (aRootUrl) {\n    aRootUrl.path = joined;\n    return urlGenerate(aRootUrl);\n  }\n  return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n  return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n\n  aRoot = aRoot.replace(/\\/$/, '');\n\n  // It is possible for the path to be above the root. In this case, simply\n  // checking whether the root is a prefix of the path won't work. Instead, we\n  // need to remove components from the root one by one, until either we find\n  // a prefix that fits, or we run out of components to remove.\n  var level = 0;\n  while (aPath.indexOf(aRoot + '/') !== 0) {\n    var index = aRoot.lastIndexOf(\"/\");\n    if (index < 0) {\n      return aPath;\n    }\n\n    // If the only part of the root that is left is the scheme (i.e. http://,\n    // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n    // have exhausted all components, so the path is not relative to the root.\n    aRoot = aRoot.slice(0, index);\n    if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n      return aPath;\n    }\n\n    ++level;\n  }\n\n  // Make sure we add a \"../\" for each component we removed from the root.\n  return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n  var obj = Object.create(null);\n  return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n  return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return '$' + aStr;\n  }\n\n  return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return aStr.slice(1);\n  }\n\n  return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n  if (!s) {\n    return false;\n  }\n\n  var length = s.length;\n\n  if (length < 9 /* \"__proto__\".length */) {\n    return false;\n  }\n\n  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 2) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n      s.charCodeAt(length - 8) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 9) !== 95  /* '_' */) {\n    return false;\n  }\n\n  for (var i = length - 10; i >= 0; i--) {\n    if (s.charCodeAt(i) !== 36 /* '$' */) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n  var cmp = mappingA.source - mappingB.source;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0 || onlyCompareOriginal) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return mappingA.name - mappingB.name;\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0 || onlyCompareGenerated) {\n    return cmp;\n  }\n\n  cmp = mappingA.source - mappingB.source;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return mappingA.name - mappingB.name;\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n  if (aStr1 === aStr2) {\n    return 0;\n  }\n\n  if (aStr1 > aStr2) {\n    return 1;\n  }\n\n  return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; }; }();\n\nvar _declaration = __webpack_require__(71);\n\nvar _declaration2 = _interopRequireDefault(_declaration);\n\nvar _comment = __webpack_require__(24);\n\nvar _comment2 = _interopRequireDefault(_comment);\n\nvar _node = __webpack_require__(26);\n\nvar _node2 = _interopRequireDefault(_node);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction cleanSource(nodes) {\n    return nodes.map(function (i) {\n        if (i.nodes) i.nodes = cleanSource(i.nodes);\n        delete i.source;\n        return i;\n    });\n}\n\n/**\n * The {@link Root}, {@link AtRule}, and {@link Rule} container nodes\n * inherit some common methods to help work with their children.\n *\n * Note that all containers can store any content. If you write a rule inside\n * a rule, PostCSS will parse it.\n *\n * @extends Node\n * @abstract\n */\n\nvar Container = function (_Node) {\n    _inherits(Container, _Node);\n\n    function Container() {\n        _classCallCheck(this, Container);\n\n        return _possibleConstructorReturn(this, _Node.apply(this, arguments));\n    }\n\n    Container.prototype.push = function push(child) {\n        child.parent = this;\n        this.nodes.push(child);\n        return this;\n    };\n\n    /**\n     * Iterates through the container’s immediate children,\n     * calling `callback` for each child.\n     *\n     * Returning `false` in the callback will break iteration.\n     *\n     * This method only iterates through the container’s immediate children.\n     * If you need to recursively iterate through all the container’s descendant\n     * nodes, use {@link Container#walk}.\n     *\n     * Unlike the for `{}`-cycle or `Array#forEach` this iterator is safe\n     * if you are mutating the array of child nodes during iteration.\n     * PostCSS will adjust the current index to match the mutations.\n     *\n     * @param {childIterator} callback - iterator receives each node and index\n     *\n     * @return {false|undefined} returns `false` if iteration was broke\n     *\n     * @example\n     * const root = postcss.parse('a { color: black; z-index: 1 }');\n     * const rule = root.first;\n     *\n     * for ( let decl of rule.nodes ) {\n     *     decl.cloneBefore({ prop: '-webkit-' + decl.prop });\n     *     // Cycle will be infinite, because cloneBefore moves the current node\n     *     // to the next index\n     * }\n     *\n     * rule.each(decl => {\n     *     decl.cloneBefore({ prop: '-webkit-' + decl.prop });\n     *     // Will be executed only for color and z-index\n     * });\n     */\n\n\n    Container.prototype.each = function each(callback) {\n        if (!this.lastEach) this.lastEach = 0;\n        if (!this.indexes) this.indexes = {};\n\n        this.lastEach += 1;\n        var id = this.lastEach;\n        this.indexes[id] = 0;\n\n        if (!this.nodes) return undefined;\n\n        var index = void 0,\n            result = void 0;\n        while (this.indexes[id] < this.nodes.length) {\n            index = this.indexes[id];\n            result = callback(this.nodes[index], index);\n            if (result === false) break;\n\n            this.indexes[id] += 1;\n        }\n\n        delete this.indexes[id];\n\n        return result;\n    };\n\n    /**\n     * Traverses the container’s descendant nodes, calling callback\n     * for each node.\n     *\n     * Like container.each(), this method is safe to use\n     * if you are mutating arrays during iteration.\n     *\n     * If you only need to iterate through the container’s immediate children,\n     * use {@link Container#each}.\n     *\n     * @param {childIterator} callback - iterator receives each node and index\n     *\n     * @return {false|undefined} returns `false` if iteration was broke\n     *\n     * @example\n     * root.walk(node => {\n     *   // Traverses all descendant nodes.\n     * });\n     */\n\n\n    Container.prototype.walk = function walk(callback) {\n        return this.each(function (child, i) {\n            var result = callback(child, i);\n            if (result !== false && child.walk) {\n                result = child.walk(callback);\n            }\n            return result;\n        });\n    };\n\n    /**\n     * Traverses the container’s descendant nodes, calling callback\n     * for each declaration node.\n     *\n     * If you pass a filter, iteration will only happen over declarations\n     * with matching properties.\n     *\n     * Like {@link Container#each}, this method is safe\n     * to use if you are mutating arrays during iteration.\n     *\n     * @param {string|RegExp} [prop]   - string or regular expression\n     *                                   to filter declarations by property name\n     * @param {childIterator} callback - iterator receives each node and index\n     *\n     * @return {false|undefined} returns `false` if iteration was broke\n     *\n     * @example\n     * root.walkDecls(decl => {\n     *   checkPropertySupport(decl.prop);\n     * });\n     *\n     * root.walkDecls('border-radius', decl => {\n     *   decl.remove();\n     * });\n     *\n     * root.walkDecls(/^background/, decl => {\n     *   decl.value = takeFirstColorFromGradient(decl.value);\n     * });\n     */\n\n\n    Container.prototype.walkDecls = function walkDecls(prop, callback) {\n        if (!callback) {\n            callback = prop;\n            return this.walk(function (child, i) {\n                if (child.type === 'decl') {\n                    return callback(child, i);\n                }\n            });\n        } else if (prop instanceof RegExp) {\n            return this.walk(function (child, i) {\n                if (child.type === 'decl' && prop.test(child.prop)) {\n                    return callback(child, i);\n                }\n            });\n        } else {\n            return this.walk(function (child, i) {\n                if (child.type === 'decl' && child.prop === prop) {\n                    return callback(child, i);\n                }\n            });\n        }\n    };\n\n    /**\n     * Traverses the container’s descendant nodes, calling callback\n     * for each rule node.\n     *\n     * If you pass a filter, iteration will only happen over rules\n     * with matching selectors.\n     *\n     * Like {@link Container#each}, this method is safe\n     * to use if you are mutating arrays during iteration.\n     *\n     * @param {string|RegExp} [selector] - string or regular expression\n     *                                     to filter rules by selector\n     * @param {childIterator} callback   - iterator receives each node and index\n     *\n     * @return {false|undefined} returns `false` if iteration was broke\n     *\n     * @example\n     * const selectors = [];\n     * root.walkRules(rule => {\n     *   selectors.push(rule.selector);\n     * });\n     * console.log(`Your CSS uses ${selectors.length} selectors`);\n     */\n\n\n    Container.prototype.walkRules = function walkRules(selector, callback) {\n        if (!callback) {\n            callback = selector;\n\n            return this.walk(function (child, i) {\n                if (child.type === 'rule') {\n                    return callback(child, i);\n                }\n            });\n        } else if (selector instanceof RegExp) {\n            return this.walk(function (child, i) {\n                if (child.type === 'rule' && selector.test(child.selector)) {\n                    return callback(child, i);\n                }\n            });\n        } else {\n            return this.walk(function (child, i) {\n                if (child.type === 'rule' && child.selector === selector) {\n                    return callback(child, i);\n                }\n            });\n        }\n    };\n\n    /**\n     * Traverses the container’s descendant nodes, calling callback\n     * for each at-rule node.\n     *\n     * If you pass a filter, iteration will only happen over at-rules\n     * that have matching names.\n     *\n     * Like {@link Container#each}, this method is safe\n     * to use if you are mutating arrays during iteration.\n     *\n     * @param {string|RegExp} [name]   - string or regular expression\n     *                                   to filter at-rules by name\n     * @param {childIterator} callback - iterator receives each node and index\n     *\n     * @return {false|undefined} returns `false` if iteration was broke\n     *\n     * @example\n     * root.walkAtRules(rule => {\n     *   if ( isOld(rule.name) ) rule.remove();\n     * });\n     *\n     * let first = false;\n     * root.walkAtRules('charset', rule => {\n     *   if ( !first ) {\n     *     first = true;\n     *   } else {\n     *     rule.remove();\n     *   }\n     * });\n     */\n\n\n    Container.prototype.walkAtRules = function walkAtRules(name, callback) {\n        if (!callback) {\n            callback = name;\n            return this.walk(function (child, i) {\n                if (child.type === 'atrule') {\n                    return callback(child, i);\n                }\n            });\n        } else if (name instanceof RegExp) {\n            return this.walk(function (child, i) {\n                if (child.type === 'atrule' && name.test(child.name)) {\n                    return callback(child, i);\n                }\n            });\n        } else {\n            return this.walk(function (child, i) {\n                if (child.type === 'atrule' && child.name === name) {\n                    return callback(child, i);\n                }\n            });\n        }\n    };\n\n    /**\n     * Traverses the container’s descendant nodes, calling callback\n     * for each comment node.\n     *\n     * Like {@link Container#each}, this method is safe\n     * to use if you are mutating arrays during iteration.\n     *\n     * @param {childIterator} callback - iterator receives each node and index\n     *\n     * @return {false|undefined} returns `false` if iteration was broke\n     *\n     * @example\n     * root.walkComments(comment => {\n     *   comment.remove();\n     * });\n     */\n\n\n    Container.prototype.walkComments = function walkComments(callback) {\n        return this.walk(function (child, i) {\n            if (child.type === 'comment') {\n                return callback(child, i);\n            }\n        });\n    };\n\n    /**\n     * Inserts new nodes to the end of the container.\n     *\n     * @param {...(Node|object|string|Node[])} children - new nodes\n     *\n     * @return {Node} this node for methods chain\n     *\n     * @example\n     * const decl1 = postcss.decl({ prop: 'color', value: 'black' });\n     * const decl2 = postcss.decl({ prop: 'background-color', value: 'white' });\n     * rule.append(decl1, decl2);\n     *\n     * root.append({ name: 'charset', params: '\"UTF-8\"' });  // at-rule\n     * root.append({ selector: 'a' });                       // rule\n     * rule.append({ prop: 'color', value: 'black' });       // declaration\n     * rule.append({ text: 'Comment' })                      // comment\n     *\n     * root.append('a {}');\n     * root.first.append('color: black; z-index: 1');\n     */\n\n\n    Container.prototype.append = function append() {\n        for (var _len = arguments.length, children = Array(_len), _key = 0; _key < _len; _key++) {\n            children[_key] = arguments[_key];\n        }\n\n        for (var _iterator = children, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n            var _ref;\n\n            if (_isArray) {\n                if (_i >= _iterator.length) break;\n                _ref = _iterator[_i++];\n            } else {\n                _i = _iterator.next();\n                if (_i.done) break;\n                _ref = _i.value;\n            }\n\n            var child = _ref;\n\n            var nodes = this.normalize(child, this.last);\n            for (var _iterator2 = nodes, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n                var _ref2;\n\n                if (_isArray2) {\n                    if (_i2 >= _iterator2.length) break;\n                    _ref2 = _iterator2[_i2++];\n                } else {\n                    _i2 = _iterator2.next();\n                    if (_i2.done) break;\n                    _ref2 = _i2.value;\n                }\n\n                var node = _ref2;\n                this.nodes.push(node);\n            }\n        }\n        return this;\n    };\n\n    /**\n     * Inserts new nodes to the start of the container.\n     *\n     * @param {...(Node|object|string|Node[])} children - new nodes\n     *\n     * @return {Node} this node for methods chain\n     *\n     * @example\n     * const decl1 = postcss.decl({ prop: 'color', value: 'black' });\n     * const decl2 = postcss.decl({ prop: 'background-color', value: 'white' });\n     * rule.prepend(decl1, decl2);\n     *\n     * root.append({ name: 'charset', params: '\"UTF-8\"' });  // at-rule\n     * root.append({ selector: 'a' });                       // rule\n     * rule.append({ prop: 'color', value: 'black' });       // declaration\n     * rule.append({ text: 'Comment' })                      // comment\n     *\n     * root.append('a {}');\n     * root.first.append('color: black; z-index: 1');\n     */\n\n\n    Container.prototype.prepend = function prepend() {\n        for (var _len2 = arguments.length, children = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n            children[_key2] = arguments[_key2];\n        }\n\n        children = children.reverse();\n        for (var _iterator3 = children, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n            var _ref3;\n\n            if (_isArray3) {\n                if (_i3 >= _iterator3.length) break;\n                _ref3 = _iterator3[_i3++];\n            } else {\n                _i3 = _iterator3.next();\n                if (_i3.done) break;\n                _ref3 = _i3.value;\n            }\n\n            var child = _ref3;\n\n            var nodes = this.normalize(child, this.first, 'prepend').reverse();\n            for (var _iterator4 = nodes, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n                var _ref4;\n\n                if (_isArray4) {\n                    if (_i4 >= _iterator4.length) break;\n                    _ref4 = _iterator4[_i4++];\n                } else {\n                    _i4 = _iterator4.next();\n                    if (_i4.done) break;\n                    _ref4 = _i4.value;\n                }\n\n                var node = _ref4;\n                this.nodes.unshift(node);\n            }for (var id in this.indexes) {\n                this.indexes[id] = this.indexes[id] + nodes.length;\n            }\n        }\n        return this;\n    };\n\n    Container.prototype.cleanRaws = function cleanRaws(keepBetween) {\n        _Node.prototype.cleanRaws.call(this, keepBetween);\n        if (this.nodes) {\n            for (var _iterator5 = this.nodes, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {\n                var _ref5;\n\n                if (_isArray5) {\n                    if (_i5 >= _iterator5.length) break;\n                    _ref5 = _iterator5[_i5++];\n                } else {\n                    _i5 = _iterator5.next();\n                    if (_i5.done) break;\n                    _ref5 = _i5.value;\n                }\n\n                var node = _ref5;\n                node.cleanRaws(keepBetween);\n            }\n        }\n    };\n\n    /**\n     * Insert new node before old node within the container.\n     *\n     * @param {Node|number} exist             - child or child’s index.\n     * @param {Node|object|string|Node[]} add - new node\n     *\n     * @return {Node} this node for methods chain\n     *\n     * @example\n     * rule.insertBefore(decl, decl.clone({ prop: '-webkit-' + decl.prop }));\n     */\n\n\n    Container.prototype.insertBefore = function insertBefore(exist, add) {\n        exist = this.index(exist);\n\n        var type = exist === 0 ? 'prepend' : false;\n        var nodes = this.normalize(add, this.nodes[exist], type).reverse();\n        for (var _iterator6 = nodes, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {\n            var _ref6;\n\n            if (_isArray6) {\n                if (_i6 >= _iterator6.length) break;\n                _ref6 = _iterator6[_i6++];\n            } else {\n                _i6 = _iterator6.next();\n                if (_i6.done) break;\n                _ref6 = _i6.value;\n            }\n\n            var node = _ref6;\n            this.nodes.splice(exist, 0, node);\n        }var index = void 0;\n        for (var id in this.indexes) {\n            index = this.indexes[id];\n            if (exist <= index) {\n                this.indexes[id] = index + nodes.length;\n            }\n        }\n\n        return this;\n    };\n\n    /**\n     * Insert new node after old node within the container.\n     *\n     * @param {Node|number} exist             - child or child’s index\n     * @param {Node|object|string|Node[]} add - new node\n     *\n     * @return {Node} this node for methods chain\n     */\n\n\n    Container.prototype.insertAfter = function insertAfter(exist, add) {\n        exist = this.index(exist);\n\n        var nodes = this.normalize(add, this.nodes[exist]).reverse();\n        for (var _iterator7 = nodes, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) {\n            var _ref7;\n\n            if (_isArray7) {\n                if (_i7 >= _iterator7.length) break;\n                _ref7 = _iterator7[_i7++];\n            } else {\n                _i7 = _iterator7.next();\n                if (_i7.done) break;\n                _ref7 = _i7.value;\n            }\n\n            var node = _ref7;\n            this.nodes.splice(exist + 1, 0, node);\n        }var index = void 0;\n        for (var id in this.indexes) {\n            index = this.indexes[id];\n            if (exist < index) {\n                this.indexes[id] = index + nodes.length;\n            }\n        }\n\n        return this;\n    };\n\n    /**\n     * Removes node from the container and cleans the parent properties\n     * from the node and its children.\n     *\n     * @param {Node|number} child - child or child’s index\n     *\n     * @return {Node} this node for methods chain\n     *\n     * @example\n     * rule.nodes.length  //=> 5\n     * rule.removeChild(decl);\n     * rule.nodes.length  //=> 4\n     * decl.parent        //=> undefined\n     */\n\n\n    Container.prototype.removeChild = function removeChild(child) {\n        child = this.index(child);\n        this.nodes[child].parent = undefined;\n        this.nodes.splice(child, 1);\n\n        var index = void 0;\n        for (var id in this.indexes) {\n            index = this.indexes[id];\n            if (index >= child) {\n                this.indexes[id] = index - 1;\n            }\n        }\n\n        return this;\n    };\n\n    /**\n     * Removes all children from the container\n     * and cleans their parent properties.\n     *\n     * @return {Node} this node for methods chain\n     *\n     * @example\n     * rule.removeAll();\n     * rule.nodes.length //=> 0\n     */\n\n\n    Container.prototype.removeAll = function removeAll() {\n        for (var _iterator8 = this.nodes, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _iterator8[Symbol.iterator]();;) {\n            var _ref8;\n\n            if (_isArray8) {\n                if (_i8 >= _iterator8.length) break;\n                _ref8 = _iterator8[_i8++];\n            } else {\n                _i8 = _iterator8.next();\n                if (_i8.done) break;\n                _ref8 = _i8.value;\n            }\n\n            var node = _ref8;\n            node.parent = undefined;\n        }this.nodes = [];\n        return this;\n    };\n\n    /**\n     * Passes all declaration values within the container that match pattern\n     * through callback, replacing those values with the returned result\n     * of callback.\n     *\n     * This method is useful if you are using a custom unit or function\n     * and need to iterate through all values.\n     *\n     * @param {string|RegExp} pattern      - replace pattern\n     * @param {object} opts                - options to speed up the search\n     * @param {string|string[]} opts.props - an array of property names\n     * @param {string} opts.fast           - string that’s used\n     *                                       to narrow down values and speed up\n                                             the regexp search\n     * @param {function|string} callback   - string to replace pattern\n     *                                       or callback that returns a new\n     *                                       value.\n     *                                       The callback will receive\n     *                                       the same arguments as those\n     *                                       passed to a function parameter\n     *                                       of `String#replace`.\n     *\n     * @return {Node} this node for methods chain\n     *\n     * @example\n     * root.replaceValues(/\\d+rem/, { fast: 'rem' }, string => {\n     *   return 15 * parseInt(string) + 'px';\n     * });\n     */\n\n\n    Container.prototype.replaceValues = function replaceValues(pattern, opts, callback) {\n        if (!callback) {\n            callback = opts;\n            opts = {};\n        }\n\n        this.walkDecls(function (decl) {\n            if (opts.props && opts.props.indexOf(decl.prop) === -1) return;\n            if (opts.fast && decl.value.indexOf(opts.fast) === -1) return;\n\n            decl.value = decl.value.replace(pattern, callback);\n        });\n\n        return this;\n    };\n\n    /**\n     * Returns `true` if callback returns `true`\n     * for all of the container’s children.\n     *\n     * @param {childCondition} condition - iterator returns true or false.\n     *\n     * @return {boolean} is every child pass condition\n     *\n     * @example\n     * const noPrefixes = rule.every(i => i.prop[0] !== '-');\n     */\n\n\n    Container.prototype.every = function every(condition) {\n        return this.nodes.every(condition);\n    };\n\n    /**\n     * Returns `true` if callback returns `true` for (at least) one\n     * of the container’s children.\n     *\n     * @param {childCondition} condition - iterator returns true or false.\n     *\n     * @return {boolean} is some child pass condition\n     *\n     * @example\n     * const hasPrefix = rule.some(i => i.prop[0] === '-');\n     */\n\n\n    Container.prototype.some = function some(condition) {\n        return this.nodes.some(condition);\n    };\n\n    /**\n     * Returns a `child`’s index within the {@link Container#nodes} array.\n     *\n     * @param {Node} child - child of the current container.\n     *\n     * @return {number} child index\n     *\n     * @example\n     * rule.index( rule.nodes[2] ) //=> 2\n     */\n\n\n    Container.prototype.index = function index(child) {\n        if (typeof child === 'number') {\n            return child;\n        } else {\n            return this.nodes.indexOf(child);\n        }\n    };\n\n    /**\n     * The container’s first child.\n     *\n     * @type {Node}\n     *\n     * @example\n     * rule.first == rules.nodes[0];\n     */\n\n\n    Container.prototype.normalize = function normalize(nodes, sample) {\n        var _this2 = this;\n\n        if (typeof nodes === 'string') {\n            var parse = __webpack_require__(73);\n            nodes = cleanSource(parse(nodes).nodes);\n        } else if (Array.isArray(nodes)) {\n            nodes = nodes.slice(0);\n        } else if (nodes.type === 'root') {\n            nodes = nodes.nodes.slice(0);\n        } else if (nodes.type) {\n            nodes = [nodes];\n        } else if (nodes.prop) {\n            if (typeof nodes.value === 'undefined') {\n                throw new Error('Value field is missed in node creation');\n            } else if (typeof nodes.value !== 'string') {\n                nodes.value = String(nodes.value);\n            }\n            nodes = [new _declaration2.default(nodes)];\n        } else if (nodes.selector) {\n            var Rule = __webpack_require__(27);\n            nodes = [new Rule(nodes)];\n        } else if (nodes.name) {\n            var AtRule = __webpack_require__(23);\n            nodes = [new AtRule(nodes)];\n        } else if (nodes.text) {\n            nodes = [new _comment2.default(nodes)];\n        } else {\n            throw new Error('Unknown node type in node creation');\n        }\n\n        var processed = nodes.map(function (i) {\n            if (typeof i.before !== 'function') i = _this2.rebuild(i);\n\n            if (i.parent) i.parent.removeChild(i);\n            if (typeof i.raws.before === 'undefined') {\n                if (sample && typeof sample.raws.before !== 'undefined') {\n                    i.raws.before = sample.raws.before.replace(/[^\\s]/g, '');\n                }\n            }\n            i.parent = _this2;\n            return i;\n        });\n\n        return processed;\n    };\n\n    Container.prototype.rebuild = function rebuild(node, parent) {\n        var _this3 = this;\n\n        var fix = void 0;\n        if (node.type === 'root') {\n            var Root = __webpack_require__(75);\n            fix = new Root();\n        } else if (node.type === 'atrule') {\n            var AtRule = __webpack_require__(23);\n            fix = new AtRule();\n        } else if (node.type === 'rule') {\n            var Rule = __webpack_require__(27);\n            fix = new Rule();\n        } else if (node.type === 'decl') {\n            fix = new _declaration2.default();\n        } else if (node.type === 'comment') {\n            fix = new _comment2.default();\n        }\n\n        for (var i in node) {\n            if (i === 'nodes') {\n                fix.nodes = node.nodes.map(function (j) {\n                    return _this3.rebuild(j, fix);\n                });\n            } else if (i === 'parent' && parent) {\n                fix.parent = parent;\n            } else if (node.hasOwnProperty(i)) {\n                fix[i] = node[i];\n            }\n        }\n\n        return fix;\n    };\n\n    /**\n     * @memberof Container#\n     * @member {Node[]} nodes - an array containing the container’s children\n     *\n     * @example\n     * const root = postcss.parse('a { color: black }');\n     * root.nodes.length           //=> 1\n     * root.nodes[0].selector      //=> 'a'\n     * root.nodes[0].nodes[0].prop //=> 'color'\n     */\n\n    _createClass(Container, [{\n        key: 'first',\n        get: function get() {\n            if (!this.nodes) return undefined;\n            return this.nodes[0];\n        }\n\n        /**\n         * The container’s last child.\n         *\n         * @type {Node}\n         *\n         * @example\n         * rule.last == rule.nodes[rule.nodes.length - 1];\n         */\n\n    }, {\n        key: 'last',\n        get: function get() {\n            if (!this.nodes) return undefined;\n            return this.nodes[this.nodes.length - 1];\n        }\n    }]);\n\n    return Container;\n}(_node2.default);\n\nexports.default = Container;\n\n/**\n * @callback childCondition\n * @param {Node} node    - container child\n * @param {number} index - child index\n * @param {Node[]} nodes - all container children\n * @return {boolean}\n */\n\n/**\n * @callback childIterator\n * @param {Node} node    - container child\n * @param {number} index - child index\n * @return {false|undefined} returning `false` will break iteration\n */\n\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = __webpack_require__(81).SourceMapGenerator;\nexports.SourceMapConsumer = __webpack_require__(154).SourceMapConsumer;\nexports.SourceNode = __webpack_require__(155).SourceNode;\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n\n\nvar base64 = __webpack_require__(91);\nvar ieee754 = __webpack_require__(92);\nvar isArray = __webpack_require__(93);\n\nexports.Buffer = Buffer;\nexports.SlowBuffer = SlowBuffer;\nexports.INSPECT_MAX_BYTES = 50;\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport();\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength();\n\nfunction typedArraySupport () {\n  try {\n    var arr = new Uint8Array(1);\n    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }};\n    return arr.foo() === 42 && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length);\n    that.__proto__ = Buffer.prototype;\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length);\n    }\n    that.length = length;\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192; // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype;\n  return arr\n};\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n};\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype;\n  Buffer.__proto__ = Uint8Array;\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    });\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size);\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n};\n\nfunction allocUnsafe (that, size) {\n  assertSize(size);\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0);\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0;\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n};\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n};\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8';\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0;\n  that = createBuffer(that, length);\n\n  var actual = that.write(string, encoding);\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual);\n  }\n\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0;\n  that = createBuffer(that, length);\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255;\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength; // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array);\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset);\n  } else {\n    array = new Uint8Array(array, byteOffset, length);\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array;\n    that.__proto__ = Buffer.prototype;\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array);\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0;\n    that = createBuffer(that, len);\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len);\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0;\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n};\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length;\n  var y = b.length;\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i];\n      y = b[i];\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n};\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n};\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i;\n  if (length === undefined) {\n    length = 0;\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length;\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length);\n  var pos = 0;\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i];\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos);\n    pos += buf.length;\n  }\n  return buffer\n};\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string;\n  }\n\n  var len = string.length;\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false;\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase();\n        loweredCase = true;\n    }\n  }\n}\nBuffer.byteLength = byteLength;\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false;\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0;\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length;\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0;\n  start >>>= 0;\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8';\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase();\n        loweredCase = true;\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true;\n\nfunction swap (b, n, m) {\n  var i = b[n];\n  b[n] = b[m];\n  b[m] = i;\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length;\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1);\n  }\n  return this\n};\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length;\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3);\n    swap(this, i + 1, i + 2);\n  }\n  return this\n};\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length;\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7);\n    swap(this, i + 1, i + 6);\n    swap(this, i + 2, i + 5);\n    swap(this, i + 3, i + 4);\n  }\n  return this\n};\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0;\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n};\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n};\n\nBuffer.prototype.inspect = function inspect () {\n  var str = '';\n  var max = exports.INSPECT_MAX_BYTES;\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ');\n    if (this.length > max) str += ' ... ';\n  }\n  return '<Buffer ' + str + '>'\n};\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0;\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0;\n  }\n  if (thisStart === undefined) {\n    thisStart = 0;\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length;\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0;\n  end >>>= 0;\n  thisStart >>>= 0;\n  thisEnd >>>= 0;\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart;\n  var y = end - start;\n  var len = Math.min(x, y);\n\n  var thisCopy = this.slice(thisStart, thisEnd);\n  var targetCopy = target.slice(start, end);\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i];\n      y = targetCopy[i];\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n};\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset;\n    byteOffset = 0;\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff;\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000;\n  }\n  byteOffset = +byteOffset;  // Coerce to Number.\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1);\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1;\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0;\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding);\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF; // Search for a byte value [0-255]\n    if (Buffer.TYPED_ARRAY_SUPPORT &&\n        typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1;\n  var arrLength = arr.length;\n  var valLength = val.length;\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase();\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2;\n      arrLength /= 2;\n      valLength /= 2;\n      byteOffset /= 2;\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i;\n  if (dir) {\n    var foundIndex = -1;\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i;\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex;\n        foundIndex = -1;\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true;\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false;\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n};\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n};\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n};\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0;\n  var remaining = buf.length - offset;\n  if (!length) {\n    length = remaining;\n  } else {\n    length = Number(length);\n    if (length > remaining) {\n      length = remaining;\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length;\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2;\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16);\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed;\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8';\n    length = this.length;\n    offset = 0;\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset;\n    length = this.length;\n    offset = 0;\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0;\n    if (isFinite(length)) {\n      length = length | 0;\n      if (encoding === undefined) encoding = 'utf8';\n    } else {\n      encoding = length;\n      length = undefined;\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset;\n  if (length === undefined || length > remaining) length = remaining;\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8';\n\n  var loweredCase = false;\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase();\n        loweredCase = true;\n    }\n  }\n};\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n};\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end);\n  var res = [];\n\n  var i = start;\n  while (i < end) {\n    var firstByte = buf[i];\n    var codePoint = null;\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1;\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint;\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte;\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1];\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F);\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint;\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1];\n          thirdByte = buf[i + 2];\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F);\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint;\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1];\n          thirdByte = buf[i + 2];\n          fourthByte = buf[i + 3];\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F);\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint;\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD;\n      bytesPerSequence = 1;\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000;\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800);\n      codePoint = 0xDC00 | codePoint & 0x3FF;\n    }\n\n    res.push(codePoint);\n    i += bytesPerSequence;\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000;\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length;\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = '';\n  var i = 0;\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    );\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = '';\n  end = Math.min(buf.length, end);\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F);\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = '';\n  end = Math.min(buf.length, end);\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i]);\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length;\n\n  if (!start || start < 0) start = 0;\n  if (!end || end < 0 || end > len) end = len;\n\n  var out = '';\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i]);\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end);\n  var res = '';\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length;\n  start = ~~start;\n  end = end === undefined ? len : ~~end;\n\n  if (start < 0) {\n    start += len;\n    if (start < 0) start = 0;\n  } else if (start > len) {\n    start = len;\n  }\n\n  if (end < 0) {\n    end += len;\n    if (end < 0) end = 0;\n  } else if (end > len) {\n    end = len;\n  }\n\n  if (end < start) end = start;\n\n  var newBuf;\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end);\n    newBuf.__proto__ = Buffer.prototype;\n  } else {\n    var sliceLen = end - start;\n    newBuf = new Buffer(sliceLen, undefined);\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start];\n    }\n  }\n\n  return newBuf\n};\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n  var val = this[offset];\n  var mul = 1;\n  var i = 0;\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul;\n  }\n\n  return val\n};\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length);\n  }\n\n  var val = this[offset + --byteLength];\n  var mul = 1;\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul;\n  }\n\n  return val\n};\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length);\n  return this[offset]\n};\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  return this[offset] | (this[offset + 1] << 8)\n};\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  return (this[offset] << 8) | this[offset + 1]\n};\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n};\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n};\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n  var val = this[offset];\n  var mul = 1;\n  var i = 0;\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul;\n  }\n  mul *= 0x80;\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\n  return val\n};\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n  var i = byteLength;\n  var mul = 1;\n  var val = this[offset + --i];\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul;\n  }\n  mul *= 0x80;\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\n  return val\n};\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length);\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n};\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  var val = this[offset] | (this[offset + 1] << 8);\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n};\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  var val = this[offset + 1] | (this[offset] << 8);\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n};\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n};\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n};\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return ieee754.read(this, offset, true, 23, 4)\n};\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return ieee754.read(this, offset, false, 23, 4)\n};\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length);\n  return ieee754.read(this, offset, true, 52, 8)\n};\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length);\n  return ieee754.read(this, offset, false, 52, 8)\n};\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n    checkInt(this, value, offset, byteLength, maxBytes, 0);\n  }\n\n  var mul = 1;\n  var i = 0;\n  this[offset] = value & 0xFF;\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF;\n  }\n\n  return offset + byteLength\n};\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n    checkInt(this, value, offset, byteLength, maxBytes, 0);\n  }\n\n  var i = byteLength - 1;\n  var mul = 1;\n  this[offset + i] = value & 0xFF;\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF;\n  }\n\n  return offset + byteLength\n};\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n  this[offset] = (value & 0xff);\n  return offset + 1\n};\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1;\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8;\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff);\n    this[offset + 1] = (value >>> 8);\n  } else {\n    objectWriteUInt16(this, value, offset, true);\n  }\n  return offset + 2\n};\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8);\n    this[offset + 1] = (value & 0xff);\n  } else {\n    objectWriteUInt16(this, value, offset, false);\n  }\n  return offset + 2\n};\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1;\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff;\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24);\n    this[offset + 2] = (value >>> 16);\n    this[offset + 1] = (value >>> 8);\n    this[offset] = (value & 0xff);\n  } else {\n    objectWriteUInt32(this, value, offset, true);\n  }\n  return offset + 4\n};\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24);\n    this[offset + 1] = (value >>> 16);\n    this[offset + 2] = (value >>> 8);\n    this[offset + 3] = (value & 0xff);\n  } else {\n    objectWriteUInt32(this, value, offset, false);\n  }\n  return offset + 4\n};\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1);\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit);\n  }\n\n  var i = 0;\n  var mul = 1;\n  var sub = 0;\n  this[offset] = value & 0xFF;\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1;\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;\n  }\n\n  return offset + byteLength\n};\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1);\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit);\n  }\n\n  var i = byteLength - 1;\n  var mul = 1;\n  var sub = 0;\n  this[offset + i] = value & 0xFF;\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1;\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;\n  }\n\n  return offset + byteLength\n};\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n  if (value < 0) value = 0xff + value + 1;\n  this[offset] = (value & 0xff);\n  return offset + 1\n};\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff);\n    this[offset + 1] = (value >>> 8);\n  } else {\n    objectWriteUInt16(this, value, offset, true);\n  }\n  return offset + 2\n};\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8);\n    this[offset + 1] = (value & 0xff);\n  } else {\n    objectWriteUInt16(this, value, offset, false);\n  }\n  return offset + 2\n};\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff);\n    this[offset + 1] = (value >>> 8);\n    this[offset + 2] = (value >>> 16);\n    this[offset + 3] = (value >>> 24);\n  } else {\n    objectWriteUInt32(this, value, offset, true);\n  }\n  return offset + 4\n};\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n  if (value < 0) value = 0xffffffff + value + 1;\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24);\n    this[offset + 1] = (value >>> 16);\n    this[offset + 2] = (value >>> 8);\n    this[offset + 3] = (value & 0xff);\n  } else {\n    objectWriteUInt32(this, value, offset, false);\n  }\n  return offset + 4\n};\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38);\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4);\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n};\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n};\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308);\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8);\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n};\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n};\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0;\n  if (!end && end !== 0) end = this.length;\n  if (targetStart >= target.length) targetStart = target.length;\n  if (!targetStart) targetStart = 0;\n  if (end > 0 && end < start) end = start;\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length;\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start;\n  }\n\n  var len = end - start;\n  var i;\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start];\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start];\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    );\n  }\n\n  return len\n};\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start;\n      start = 0;\n      end = this.length;\n    } else if (typeof end === 'string') {\n      encoding = end;\n      end = this.length;\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0);\n      if (code < 256) {\n        val = code;\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255;\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0;\n  end = end === undefined ? this.length : end >>> 0;\n\n  if (!val) val = 0;\n\n  var i;\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val;\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString());\n    var len = bytes.length;\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len];\n    }\n  }\n\n  return this\n};\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g;\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '');\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '=';\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity;\n  var codePoint;\n  var length = string.length;\n  var leadSurrogate = null;\n  var bytes = [];\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i);\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint;\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n        leadSurrogate = codePoint;\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n    }\n\n    leadSurrogate = null;\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint);\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      );\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      );\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      );\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = [];\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF);\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo;\n  var byteArray = [];\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i);\n    hi = c >> 8;\n    lo = c % 256;\n    byteArray.push(lo);\n    byteArray.push(hi);\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i];\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(84)));\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = lessStringify;\n\nvar _lessStringifier = __webpack_require__(99);\n\nvar _lessStringifier2 = _interopRequireDefault(_lessStringifier);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction lessStringify(node, builder) {\n  var str = new _lessStringifier2.default(builder);\n\n  str.stringify(node);\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; }; }();\n\nvar _container = __webpack_require__(18);\n\nvar _container2 = _interopRequireDefault(_container);\n\nvar _warnOnce = __webpack_require__(3);\n\nvar _warnOnce2 = _interopRequireDefault(_warnOnce);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * Represents an at-rule.\n *\n * If it’s followed in the CSS by a {} block, this node will have\n * a nodes property representing its children.\n *\n * @extends Container\n *\n * @example\n * const root = postcss.parse('@charset \"UTF-8\"; @media print {}');\n *\n * const charset = root.first;\n * charset.type  //=> 'atrule'\n * charset.nodes //=> undefined\n *\n * const media = root.last;\n * media.nodes   //=> []\n */\nvar AtRule = function (_Container) {\n    _inherits(AtRule, _Container);\n\n    function AtRule(defaults) {\n        _classCallCheck(this, AtRule);\n\n        var _this = _possibleConstructorReturn(this, _Container.call(this, defaults));\n\n        _this.type = 'atrule';\n        return _this;\n    }\n\n    AtRule.prototype.append = function append() {\n        var _Container$prototype$;\n\n        if (!this.nodes) this.nodes = [];\n\n        for (var _len = arguments.length, children = Array(_len), _key = 0; _key < _len; _key++) {\n            children[_key] = arguments[_key];\n        }\n\n        return (_Container$prototype$ = _Container.prototype.append).call.apply(_Container$prototype$, [this].concat(children));\n    };\n\n    AtRule.prototype.prepend = function prepend() {\n        var _Container$prototype$2;\n\n        if (!this.nodes) this.nodes = [];\n\n        for (var _len2 = arguments.length, children = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n            children[_key2] = arguments[_key2];\n        }\n\n        return (_Container$prototype$2 = _Container.prototype.prepend).call.apply(_Container$prototype$2, [this].concat(children));\n    };\n\n    _createClass(AtRule, [{\n        key: 'afterName',\n        get: function get() {\n            (0, _warnOnce2.default)('AtRule#afterName was deprecated. Use AtRule#raws.afterName');\n            return this.raws.afterName;\n        },\n        set: function set(val) {\n            (0, _warnOnce2.default)('AtRule#afterName was deprecated. Use AtRule#raws.afterName');\n            this.raws.afterName = val;\n        }\n    }, {\n        key: '_params',\n        get: function get() {\n            (0, _warnOnce2.default)('AtRule#_params was deprecated. Use AtRule#raws.params');\n            return this.raws.params;\n        },\n        set: function set(val) {\n            (0, _warnOnce2.default)('AtRule#_params was deprecated. Use AtRule#raws.params');\n            this.raws.params = val;\n        }\n\n        /**\n         * @memberof AtRule#\n         * @member {string} name - the at-rule’s name immediately follows the `@`\n         *\n         * @example\n         * const root  = postcss.parse('@media print {}');\n         * media.name //=> 'media'\n         * const media = root.first;\n         */\n\n        /**\n         * @memberof AtRule#\n         * @member {string} params - the at-rule’s parameters, the values\n         *                           that follow the at-rule’s name but precede\n         *                           any {} block\n         *\n         * @example\n         * const root  = postcss.parse('@media print, screen {}');\n         * const media = root.first;\n         * media.params //=> 'print, screen'\n         */\n\n        /**\n         * @memberof AtRule#\n         * @member {object} raws - Information to generate byte-to-byte equal\n         *                         node string as it was in the origin input.\n         *\n         * Every parser saves its own properties,\n         * but the default CSS parser uses:\n         *\n         * * `before`: the space symbols before the node. It also stores `*`\n         *   and `_` symbols before the declaration (IE hack).\n         * * `after`: the space symbols after the last child of the node\n         *   to the end of the node.\n         * * `between`: the symbols between the property and value\n         *   for declarations, selector and `{` for rules, or last parameter\n         *   and `{` for at-rules.\n         * * `semicolon`: contains true if the last child has\n         *   an (optional) semicolon.\n         * * `afterName`: the space between the at-rule name and its parameters.\n         *\n         * PostCSS cleans at-rule parameters from comments and extra spaces,\n         * but it stores origin content in raws properties.\n         * As such, if you don’t change a declaration’s value,\n         * PostCSS will use the raw value with comments.\n         *\n         * @example\n         * const root = postcss.parse('  @media\\nprint {\\n}')\n         * root.first.first.raws //=> { before: '  ',\n         *                       //     between: ' ',\n         *                       //     afterName: '\\n',\n         *                       //     after: '\\n' }\n         */\n\n    }]);\n\n    return AtRule;\n}(_container2.default);\n\nexports.default = AtRule;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; }; }();\n\nvar _warnOnce = __webpack_require__(3);\n\nvar _warnOnce2 = _interopRequireDefault(_warnOnce);\n\nvar _node = __webpack_require__(20);\n\nvar _node2 = _interopRequireDefault(_node);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * Represents a comment between declarations or statements (rule and at-rules).\n *\n * Comments inside selectors, at-rule parameters, or declaration values\n * will be stored in the `raws` properties explained above.\n *\n * @extends Node\n */\nvar Comment = function (_Node) {\n    _inherits(Comment, _Node);\n\n    function Comment(defaults) {\n        _classCallCheck(this, Comment);\n\n        var _this = _possibleConstructorReturn(this, _Node.call(this, defaults));\n\n        _this.type = 'comment';\n        return _this;\n    }\n\n    _createClass(Comment, [{\n        key: 'left',\n        get: function get() {\n            (0, _warnOnce2.default)('Comment#left was deprecated. Use Comment#raws.left');\n            return this.raws.left;\n        },\n        set: function set(val) {\n            (0, _warnOnce2.default)('Comment#left was deprecated. Use Comment#raws.left');\n            this.raws.left = val;\n        }\n    }, {\n        key: 'right',\n        get: function get() {\n            (0, _warnOnce2.default)('Comment#right was deprecated. Use Comment#raws.right');\n            return this.raws.right;\n        },\n        set: function set(val) {\n            (0, _warnOnce2.default)('Comment#right was deprecated. Use Comment#raws.right');\n            this.raws.right = val;\n        }\n\n        /**\n         * @memberof Comment#\n         * @member {string} text - the comment’s text\n         */\n\n        /**\n         * @memberof Comment#\n         * @member {object} raws - Information to generate byte-to-byte equal\n         *                         node string as it was in the origin input.\n         *\n         * Every parser saves its own properties,\n         * but the default CSS parser uses:\n         *\n         * * `before`: the space symbols before the node.\n         * * `left`: the space symbols between `/*` and the comment’s text.\n         * * `right`: the space symbols between the comment’s text.\n         */\n\n    }]);\n\n    return Comment;\n}(_node2.default);\n\nexports.default = Comment;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; }; }();\n\nvar _declaration = __webpack_require__(37);\n\nvar _declaration2 = _interopRequireDefault(_declaration);\n\nvar _warnOnce = __webpack_require__(3);\n\nvar _warnOnce2 = _interopRequireDefault(_warnOnce);\n\nvar _comment = __webpack_require__(17);\n\nvar _comment2 = _interopRequireDefault(_comment);\n\nvar _node = __webpack_require__(20);\n\nvar _node2 = _interopRequireDefault(_node);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction cleanSource(nodes) {\n    return nodes.map(function (i) {\n        if (i.nodes) i.nodes = cleanSource(i.nodes);\n        delete i.source;\n        return i;\n    });\n}\n\n/**\n * The {@link Root}, {@link AtRule}, and {@link Rule} container nodes\n * inherit some common methods to help work with their children.\n *\n * Note that all containers can store any content. If you write a rule inside\n * a rule, PostCSS will parse it.\n *\n * @extends Node\n * @abstract\n */\n\nvar Container = function (_Node) {\n    _inherits(Container, _Node);\n\n    function Container() {\n        _classCallCheck(this, Container);\n\n        return _possibleConstructorReturn(this, _Node.apply(this, arguments));\n    }\n\n    Container.prototype.push = function push(child) {\n        child.parent = this;\n        this.nodes.push(child);\n        return this;\n    };\n\n    /**\n     * Iterates through the container’s immediate children,\n     * calling `callback` for each child.\n     *\n     * Returning `false` in the callback will break iteration.\n     *\n     * This method only iterates through the container’s immediate children.\n     * If you need to recursively iterate through all the container’s descendant\n     * nodes, use {@link Container#walk}.\n     *\n     * Unlike the for `{}`-cycle or `Array#forEach` this iterator is safe\n     * if you are mutating the array of child nodes during iteration.\n     * PostCSS will adjust the current index to match the mutations.\n     *\n     * @param {childIterator} callback - iterator receives each node and index\n     *\n     * @return {false|undefined} returns `false` if iteration was broke\n     *\n     * @example\n     * const root = postcss.parse('a { color: black; z-index: 1 }');\n     * const rule = root.first;\n     *\n     * for ( let decl of rule.nodes ) {\n     *     decl.cloneBefore({ prop: '-webkit-' + decl.prop });\n     *     // Cycle will be infinite, because cloneBefore moves the current node\n     *     // to the next index\n     * }\n     *\n     * rule.each(decl => {\n     *     decl.cloneBefore({ prop: '-webkit-' + decl.prop });\n     *     // Will be executed only for color and z-index\n     * });\n     */\n\n\n    Container.prototype.each = function each(callback) {\n        if (!this.lastEach) this.lastEach = 0;\n        if (!this.indexes) this.indexes = {};\n\n        this.lastEach += 1;\n        var id = this.lastEach;\n        this.indexes[id] = 0;\n\n        if (!this.nodes) return undefined;\n\n        var index = void 0,\n            result = void 0;\n        while (this.indexes[id] < this.nodes.length) {\n            index = this.indexes[id];\n            result = callback(this.nodes[index], index);\n            if (result === false) break;\n\n            this.indexes[id] += 1;\n        }\n\n        delete this.indexes[id];\n\n        return result;\n    };\n\n    /**\n     * Traverses the container’s descendant nodes, calling callback\n     * for each node.\n     *\n     * Like container.each(), this method is safe to use\n     * if you are mutating arrays during iteration.\n     *\n     * If you only need to iterate through the container’s immediate children,\n     * use {@link Container#each}.\n     *\n     * @param {childIterator} callback - iterator receives each node and index\n     *\n     * @return {false|undefined} returns `false` if iteration was broke\n     *\n     * @example\n     * root.walk(node => {\n     *   // Traverses all descendant nodes.\n     * });\n     */\n\n\n    Container.prototype.walk = function walk(callback) {\n        return this.each(function (child, i) {\n            var result = callback(child, i);\n            if (result !== false && child.walk) {\n                result = child.walk(callback);\n            }\n            return result;\n        });\n    };\n\n    /**\n     * Traverses the container’s descendant nodes, calling callback\n     * for each declaration node.\n     *\n     * If you pass a filter, iteration will only happen over declarations\n     * with matching properties.\n     *\n     * Like {@link Container#each}, this method is safe\n     * to use if you are mutating arrays during iteration.\n     *\n     * @param {string|RegExp} [prop]   - string or regular expression\n     *                                   to filter declarations by property name\n     * @param {childIterator} callback - iterator receives each node and index\n     *\n     * @return {false|undefined} returns `false` if iteration was broke\n     *\n     * @example\n     * root.walkDecls(decl => {\n     *   checkPropertySupport(decl.prop);\n     * });\n     *\n     * root.walkDecls('border-radius', decl => {\n     *   decl.remove();\n     * });\n     *\n     * root.walkDecls(/^background/, decl => {\n     *   decl.value = takeFirstColorFromGradient(decl.value);\n     * });\n     */\n\n\n    Container.prototype.walkDecls = function walkDecls(prop, callback) {\n        if (!callback) {\n            callback = prop;\n            return this.walk(function (child, i) {\n                if (child.type === 'decl') {\n                    return callback(child, i);\n                }\n            });\n        } else if (prop instanceof RegExp) {\n            return this.walk(function (child, i) {\n                if (child.type === 'decl' && prop.test(child.prop)) {\n                    return callback(child, i);\n                }\n            });\n        } else {\n            return this.walk(function (child, i) {\n                if (child.type === 'decl' && child.prop === prop) {\n                    return callback(child, i);\n                }\n            });\n        }\n    };\n\n    /**\n     * Traverses the container’s descendant nodes, calling callback\n     * for each rule node.\n     *\n     * If you pass a filter, iteration will only happen over rules\n     * with matching selectors.\n     *\n     * Like {@link Container#each}, this method is safe\n     * to use if you are mutating arrays during iteration.\n     *\n     * @param {string|RegExp} [selector] - string or regular expression\n     *                                     to filter rules by selector\n     * @param {childIterator} callback   - iterator receives each node and index\n     *\n     * @return {false|undefined} returns `false` if iteration was broke\n     *\n     * @example\n     * const selectors = [];\n     * root.walkRules(rule => {\n     *   selectors.push(rule.selector);\n     * });\n     * console.log(`Your CSS uses ${selectors.length} selectors`);\n     */\n\n\n    Container.prototype.walkRules = function walkRules(selector, callback) {\n        if (!callback) {\n            callback = selector;\n\n            return this.walk(function (child, i) {\n                if (child.type === 'rule') {\n                    return callback(child, i);\n                }\n            });\n        } else if (selector instanceof RegExp) {\n            return this.walk(function (child, i) {\n                if (child.type === 'rule' && selector.test(child.selector)) {\n                    return callback(child, i);\n                }\n            });\n        } else {\n            return this.walk(function (child, i) {\n                if (child.type === 'rule' && child.selector === selector) {\n                    return callback(child, i);\n                }\n            });\n        }\n    };\n\n    /**\n     * Traverses the container’s descendant nodes, calling callback\n     * for each at-rule node.\n     *\n     * If you pass a filter, iteration will only happen over at-rules\n     * that have matching names.\n     *\n     * Like {@link Container#each}, this method is safe\n     * to use if you are mutating arrays during iteration.\n     *\n     * @param {string|RegExp} [name]   - string or regular expression\n     *                                   to filter at-rules by name\n     * @param {childIterator} callback - iterator receives each node and index\n     *\n     * @return {false|undefined} returns `false` if iteration was broke\n     *\n     * @example\n     * root.walkAtRules(rule => {\n     *   if ( isOld(rule.name) ) rule.remove();\n     * });\n     *\n     * let first = false;\n     * root.walkAtRules('charset', rule => {\n     *   if ( !first ) {\n     *     first = true;\n     *   } else {\n     *     rule.remove();\n     *   }\n     * });\n     */\n\n\n    Container.prototype.walkAtRules = function walkAtRules(name, callback) {\n        if (!callback) {\n            callback = name;\n            return this.walk(function (child, i) {\n                if (child.type === 'atrule') {\n                    return callback(child, i);\n                }\n            });\n        } else if (name instanceof RegExp) {\n            return this.walk(function (child, i) {\n                if (child.type === 'atrule' && name.test(child.name)) {\n                    return callback(child, i);\n                }\n            });\n        } else {\n            return this.walk(function (child, i) {\n                if (child.type === 'atrule' && child.name === name) {\n                    return callback(child, i);\n                }\n            });\n        }\n    };\n\n    /**\n     * Traverses the container’s descendant nodes, calling callback\n     * for each comment node.\n     *\n     * Like {@link Container#each}, this method is safe\n     * to use if you are mutating arrays during iteration.\n     *\n     * @param {childIterator} callback - iterator receives each node and index\n     *\n     * @return {false|undefined} returns `false` if iteration was broke\n     *\n     * @example\n     * root.walkComments(comment => {\n     *   comment.remove();\n     * });\n     */\n\n\n    Container.prototype.walkComments = function walkComments(callback) {\n        return this.walk(function (child, i) {\n            if (child.type === 'comment') {\n                return callback(child, i);\n            }\n        });\n    };\n\n    /**\n     * Inserts new nodes to the end of the container.\n     *\n     * @param {...(Node|object|string|Node[])} children - new nodes\n     *\n     * @return {Node} this node for methods chain\n     *\n     * @example\n     * const decl1 = postcss.decl({ prop: 'color', value: 'black' });\n     * const decl2 = postcss.decl({ prop: 'background-color', value: 'white' });\n     * rule.append(decl1, decl2);\n     *\n     * root.append({ name: 'charset', params: '\"UTF-8\"' });  // at-rule\n     * root.append({ selector: 'a' });                       // rule\n     * rule.append({ prop: 'color', value: 'black' });       // declaration\n     * rule.append({ text: 'Comment' })                      // comment\n     *\n     * root.append('a {}');\n     * root.first.append('color: black; z-index: 1');\n     */\n\n\n    Container.prototype.append = function append() {\n        for (var _len = arguments.length, children = Array(_len), _key = 0; _key < _len; _key++) {\n            children[_key] = arguments[_key];\n        }\n\n        for (var _iterator = children, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n            var _ref;\n\n            if (_isArray) {\n                if (_i >= _iterator.length) break;\n                _ref = _iterator[_i++];\n            } else {\n                _i = _iterator.next();\n                if (_i.done) break;\n                _ref = _i.value;\n            }\n\n            var child = _ref;\n\n            var nodes = this.normalize(child, this.last);\n            for (var _iterator2 = nodes, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n                var _ref2;\n\n                if (_isArray2) {\n                    if (_i2 >= _iterator2.length) break;\n                    _ref2 = _iterator2[_i2++];\n                } else {\n                    _i2 = _iterator2.next();\n                    if (_i2.done) break;\n                    _ref2 = _i2.value;\n                }\n\n                var node = _ref2;\n                this.nodes.push(node);\n            }\n        }\n        return this;\n    };\n\n    /**\n     * Inserts new nodes to the start of the container.\n     *\n     * @param {...(Node|object|string|Node[])} children - new nodes\n     *\n     * @return {Node} this node for methods chain\n     *\n     * @example\n     * const decl1 = postcss.decl({ prop: 'color', value: 'black' });\n     * const decl2 = postcss.decl({ prop: 'background-color', value: 'white' });\n     * rule.prepend(decl1, decl2);\n     *\n     * root.append({ name: 'charset', params: '\"UTF-8\"' });  // at-rule\n     * root.append({ selector: 'a' });                       // rule\n     * rule.append({ prop: 'color', value: 'black' });       // declaration\n     * rule.append({ text: 'Comment' })                      // comment\n     *\n     * root.append('a {}');\n     * root.first.append('color: black; z-index: 1');\n     */\n\n\n    Container.prototype.prepend = function prepend() {\n        for (var _len2 = arguments.length, children = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n            children[_key2] = arguments[_key2];\n        }\n\n        children = children.reverse();\n        for (var _iterator3 = children, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n            var _ref3;\n\n            if (_isArray3) {\n                if (_i3 >= _iterator3.length) break;\n                _ref3 = _iterator3[_i3++];\n            } else {\n                _i3 = _iterator3.next();\n                if (_i3.done) break;\n                _ref3 = _i3.value;\n            }\n\n            var child = _ref3;\n\n            var nodes = this.normalize(child, this.first, 'prepend').reverse();\n            for (var _iterator4 = nodes, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n                var _ref4;\n\n                if (_isArray4) {\n                    if (_i4 >= _iterator4.length) break;\n                    _ref4 = _iterator4[_i4++];\n                } else {\n                    _i4 = _iterator4.next();\n                    if (_i4.done) break;\n                    _ref4 = _i4.value;\n                }\n\n                var node = _ref4;\n                this.nodes.unshift(node);\n            }for (var id in this.indexes) {\n                this.indexes[id] = this.indexes[id] + nodes.length;\n            }\n        }\n        return this;\n    };\n\n    Container.prototype.cleanRaws = function cleanRaws(keepBetween) {\n        _Node.prototype.cleanRaws.call(this, keepBetween);\n        if (this.nodes) {\n            for (var _iterator5 = this.nodes, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {\n                var _ref5;\n\n                if (_isArray5) {\n                    if (_i5 >= _iterator5.length) break;\n                    _ref5 = _iterator5[_i5++];\n                } else {\n                    _i5 = _iterator5.next();\n                    if (_i5.done) break;\n                    _ref5 = _i5.value;\n                }\n\n                var node = _ref5;\n                node.cleanRaws(keepBetween);\n            }\n        }\n    };\n\n    /**\n     * Insert new node before old node within the container.\n     *\n     * @param {Node|number} exist             - child or child’s index.\n     * @param {Node|object|string|Node[]} add - new node\n     *\n     * @return {Node} this node for methods chain\n     *\n     * @example\n     * rule.insertBefore(decl, decl.clone({ prop: '-webkit-' + decl.prop }));\n     */\n\n\n    Container.prototype.insertBefore = function insertBefore(exist, add) {\n        exist = this.index(exist);\n\n        var type = exist === 0 ? 'prepend' : false;\n        var nodes = this.normalize(add, this.nodes[exist], type).reverse();\n        for (var _iterator6 = nodes, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {\n            var _ref6;\n\n            if (_isArray6) {\n                if (_i6 >= _iterator6.length) break;\n                _ref6 = _iterator6[_i6++];\n            } else {\n                _i6 = _iterator6.next();\n                if (_i6.done) break;\n                _ref6 = _i6.value;\n            }\n\n            var node = _ref6;\n            this.nodes.splice(exist, 0, node);\n        }var index = void 0;\n        for (var id in this.indexes) {\n            index = this.indexes[id];\n            if (exist <= index) {\n                this.indexes[id] = index + nodes.length;\n            }\n        }\n\n        return this;\n    };\n\n    /**\n     * Insert new node after old node within the container.\n     *\n     * @param {Node|number} exist             - child or child’s index\n     * @param {Node|object|string|Node[]} add - new node\n     *\n     * @return {Node} this node for methods chain\n     */\n\n\n    Container.prototype.insertAfter = function insertAfter(exist, add) {\n        exist = this.index(exist);\n\n        var nodes = this.normalize(add, this.nodes[exist]).reverse();\n        for (var _iterator7 = nodes, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) {\n            var _ref7;\n\n            if (_isArray7) {\n                if (_i7 >= _iterator7.length) break;\n                _ref7 = _iterator7[_i7++];\n            } else {\n                _i7 = _iterator7.next();\n                if (_i7.done) break;\n                _ref7 = _i7.value;\n            }\n\n            var node = _ref7;\n            this.nodes.splice(exist + 1, 0, node);\n        }var index = void 0;\n        for (var id in this.indexes) {\n            index = this.indexes[id];\n            if (exist < index) {\n                this.indexes[id] = index + nodes.length;\n            }\n        }\n\n        return this;\n    };\n\n    Container.prototype.remove = function remove(child) {\n        if (typeof child !== 'undefined') {\n            (0, _warnOnce2.default)('Container#remove is deprecated. ' + 'Use Container#removeChild');\n            this.removeChild(child);\n        } else {\n            _Node.prototype.remove.call(this);\n        }\n        return this;\n    };\n\n    /**\n     * Removes node from the container and cleans the parent properties\n     * from the node and its children.\n     *\n     * @param {Node|number} child - child or child’s index\n     *\n     * @return {Node} this node for methods chain\n     *\n     * @example\n     * rule.nodes.length  //=> 5\n     * rule.removeChild(decl);\n     * rule.nodes.length  //=> 4\n     * decl.parent        //=> undefined\n     */\n\n\n    Container.prototype.removeChild = function removeChild(child) {\n        child = this.index(child);\n        this.nodes[child].parent = undefined;\n        this.nodes.splice(child, 1);\n\n        var index = void 0;\n        for (var id in this.indexes) {\n            index = this.indexes[id];\n            if (index >= child) {\n                this.indexes[id] = index - 1;\n            }\n        }\n\n        return this;\n    };\n\n    /**\n     * Removes all children from the container\n     * and cleans their parent properties.\n     *\n     * @return {Node} this node for methods chain\n     *\n     * @example\n     * rule.removeAll();\n     * rule.nodes.length //=> 0\n     */\n\n\n    Container.prototype.removeAll = function removeAll() {\n        for (var _iterator8 = this.nodes, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _iterator8[Symbol.iterator]();;) {\n            var _ref8;\n\n            if (_isArray8) {\n                if (_i8 >= _iterator8.length) break;\n                _ref8 = _iterator8[_i8++];\n            } else {\n                _i8 = _iterator8.next();\n                if (_i8.done) break;\n                _ref8 = _i8.value;\n            }\n\n            var node = _ref8;\n            node.parent = undefined;\n        }this.nodes = [];\n        return this;\n    };\n\n    /**\n     * Passes all declaration values within the container that match pattern\n     * through callback, replacing those values with the returned result\n     * of callback.\n     *\n     * This method is useful if you are using a custom unit or function\n     * and need to iterate through all values.\n     *\n     * @param {string|RegExp} pattern      - replace pattern\n     * @param {object} opts                - options to speed up the search\n     * @param {string|string[]} opts.props - an array of property names\n     * @param {string} opts.fast           - string that’s used\n     *                                       to narrow down values and speed up\n                                             the regexp search\n     * @param {function|string} callback   - string to replace pattern\n     *                                       or callback that returns a new\n     *                                       value.\n     *                                       The callback will receive\n     *                                       the same arguments as those\n     *                                       passed to a function parameter\n     *                                       of `String#replace`.\n     *\n     * @return {Node} this node for methods chain\n     *\n     * @example\n     * root.replaceValues(/\\d+rem/, { fast: 'rem' }, string => {\n     *   return 15 * parseInt(string) + 'px';\n     * });\n     */\n\n\n    Container.prototype.replaceValues = function replaceValues(pattern, opts, callback) {\n        if (!callback) {\n            callback = opts;\n            opts = {};\n        }\n\n        this.walkDecls(function (decl) {\n            if (opts.props && opts.props.indexOf(decl.prop) === -1) return;\n            if (opts.fast && decl.value.indexOf(opts.fast) === -1) return;\n\n            decl.value = decl.value.replace(pattern, callback);\n        });\n\n        return this;\n    };\n\n    /**\n     * Returns `true` if callback returns `true`\n     * for all of the container’s children.\n     *\n     * @param {childCondition} condition - iterator returns true or false.\n     *\n     * @return {boolean} is every child pass condition\n     *\n     * @example\n     * const noPrefixes = rule.every(i => i.prop[0] !== '-');\n     */\n\n\n    Container.prototype.every = function every(condition) {\n        return this.nodes.every(condition);\n    };\n\n    /**\n     * Returns `true` if callback returns `true` for (at least) one\n     * of the container’s children.\n     *\n     * @param {childCondition} condition - iterator returns true or false.\n     *\n     * @return {boolean} is some child pass condition\n     *\n     * @example\n     * const hasPrefix = rule.some(i => i.prop[0] === '-');\n     */\n\n\n    Container.prototype.some = function some(condition) {\n        return this.nodes.some(condition);\n    };\n\n    /**\n     * Returns a `child`’s index within the {@link Container#nodes} array.\n     *\n     * @param {Node} child - child of the current container.\n     *\n     * @return {number} child index\n     *\n     * @example\n     * rule.index( rule.nodes[2] ) //=> 2\n     */\n\n\n    Container.prototype.index = function index(child) {\n        if (typeof child === 'number') {\n            return child;\n        } else {\n            return this.nodes.indexOf(child);\n        }\n    };\n\n    /**\n     * The container’s first child.\n     *\n     * @type {Node}\n     *\n     * @example\n     * rule.first == rules.nodes[0];\n     */\n\n\n    Container.prototype.normalize = function normalize(nodes, sample) {\n        var _this2 = this;\n\n        if (typeof nodes === 'string') {\n            var parse = __webpack_require__(39);\n            nodes = cleanSource(parse(nodes).nodes);\n        } else if (!Array.isArray(nodes)) {\n            if (nodes.type === 'root') {\n                nodes = nodes.nodes;\n            } else if (nodes.type) {\n                nodes = [nodes];\n            } else if (nodes.prop) {\n                if (typeof nodes.value === 'undefined') {\n                    throw new Error('Value field is missed in node creation');\n                } else if (typeof nodes.value !== 'string') {\n                    nodes.value = String(nodes.value);\n                }\n                nodes = [new _declaration2.default(nodes)];\n            } else if (nodes.selector) {\n                var Rule = __webpack_require__(9);\n                nodes = [new Rule(nodes)];\n            } else if (nodes.name) {\n                var AtRule = __webpack_require__(16);\n                nodes = [new AtRule(nodes)];\n            } else if (nodes.text) {\n                nodes = [new _comment2.default(nodes)];\n            } else {\n                throw new Error('Unknown node type in node creation');\n            }\n        }\n\n        var processed = nodes.map(function (i) {\n            if (typeof i.raws === 'undefined') i = _this2.rebuild(i);\n\n            if (i.parent) i = i.clone();\n            if (typeof i.raws.before === 'undefined') {\n                if (sample && typeof sample.raws.before !== 'undefined') {\n                    i.raws.before = sample.raws.before.replace(/[^\\s]/g, '');\n                }\n            }\n            i.parent = _this2;\n            return i;\n        });\n\n        return processed;\n    };\n\n    Container.prototype.rebuild = function rebuild(node, parent) {\n        var _this3 = this;\n\n        var fix = void 0;\n        if (node.type === 'root') {\n            var Root = __webpack_require__(41);\n            fix = new Root();\n        } else if (node.type === 'atrule') {\n            var AtRule = __webpack_require__(16);\n            fix = new AtRule();\n        } else if (node.type === 'rule') {\n            var Rule = __webpack_require__(9);\n            fix = new Rule();\n        } else if (node.type === 'decl') {\n            fix = new _declaration2.default();\n        } else if (node.type === 'comment') {\n            fix = new _comment2.default();\n        }\n\n        for (var i in node) {\n            if (i === 'nodes') {\n                fix.nodes = node.nodes.map(function (j) {\n                    return _this3.rebuild(j, fix);\n                });\n            } else if (i === 'parent' && parent) {\n                fix.parent = parent;\n            } else if (node.hasOwnProperty(i)) {\n                fix[i] = node[i];\n            }\n        }\n\n        return fix;\n    };\n\n    Container.prototype.eachInside = function eachInside(callback) {\n        (0, _warnOnce2.default)('Container#eachInside is deprecated. ' + 'Use Container#walk instead.');\n        return this.walk(callback);\n    };\n\n    Container.prototype.eachDecl = function eachDecl(prop, callback) {\n        (0, _warnOnce2.default)('Container#eachDecl is deprecated. ' + 'Use Container#walkDecls instead.');\n        return this.walkDecls(prop, callback);\n    };\n\n    Container.prototype.eachRule = function eachRule(selector, callback) {\n        (0, _warnOnce2.default)('Container#eachRule is deprecated. ' + 'Use Container#walkRules instead.');\n        return this.walkRules(selector, callback);\n    };\n\n    Container.prototype.eachAtRule = function eachAtRule(name, callback) {\n        (0, _warnOnce2.default)('Container#eachAtRule is deprecated. ' + 'Use Container#walkAtRules instead.');\n        return this.walkAtRules(name, callback);\n    };\n\n    Container.prototype.eachComment = function eachComment(callback) {\n        (0, _warnOnce2.default)('Container#eachComment is deprecated. ' + 'Use Container#walkComments instead.');\n        return this.walkComments(callback);\n    };\n\n    _createClass(Container, [{\n        key: 'first',\n        get: function get() {\n            if (!this.nodes) return undefined;\n            return this.nodes[0];\n        }\n\n        /**\n         * The container’s last child.\n         *\n         * @type {Node}\n         *\n         * @example\n         * rule.last == rule.nodes[rule.nodes.length - 1];\n         */\n\n    }, {\n        key: 'last',\n        get: function get() {\n            if (!this.nodes) return undefined;\n            return this.nodes[this.nodes.length - 1];\n        }\n    }, {\n        key: 'semicolon',\n        get: function get() {\n            (0, _warnOnce2.default)('Node#semicolon is deprecated. Use Node#raws.semicolon');\n            return this.raws.semicolon;\n        },\n        set: function set(val) {\n            (0, _warnOnce2.default)('Node#semicolon is deprecated. Use Node#raws.semicolon');\n            this.raws.semicolon = val;\n        }\n    }, {\n        key: 'after',\n        get: function get() {\n            (0, _warnOnce2.default)('Node#after is deprecated. Use Node#raws.after');\n            return this.raws.after;\n        },\n        set: function set(val) {\n            (0, _warnOnce2.default)('Node#after is deprecated. Use Node#raws.after');\n            this.raws.after = val;\n        }\n\n        /**\n         * @memberof Container#\n         * @member {Node[]} nodes - an array containing the container’s children\n         *\n         * @example\n         * const root = postcss.parse('a { color: black }');\n         * root.nodes.length           //=> 1\n         * root.nodes[0].selector      //=> 'a'\n         * root.nodes[0].nodes[0].prop //=> 'color'\n         */\n\n    }]);\n\n    return Container;\n}(_node2.default);\n\nexports.default = Container;\n\n/**\n * @callback childCondition\n * @param {Node} node    - container child\n * @param {number} index - child index\n * @param {Node[]} nodes - all container children\n * @return {boolean}\n */\n\n/**\n * @callback childIterator\n * @param {Node} node    - container child\n * @param {number} index - child index\n * @return {false|undefined} returning `false` will break iteration\n */\n\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; }; }();\n\nvar _cssSyntaxError = __webpack_require__(36);\n\nvar _cssSyntaxError2 = _interopRequireDefault(_cssSyntaxError);\n\nvar _previousMap = __webpack_require__(117);\n\nvar _previousMap2 = _interopRequireDefault(_previousMap);\n\nvar _path = __webpack_require__(5);\n\nvar _path2 = _interopRequireDefault(_path);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar sequence = 0;\n\n/**\n * Represents the source CSS.\n *\n * @example\n * const root  = postcss.parse(css, { from: file });\n * const input = root.source.input;\n */\n\nvar Input = function () {\n\n    /**\n     * @param {string} css    - input CSS source\n     * @param {object} [opts] - {@link Processor#process} options\n     */\n    function Input(css) {\n        var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n        _classCallCheck(this, Input);\n\n        /**\n         * @member {string} - input CSS source\n         *\n         * @example\n         * const input = postcss.parse('a{}', { from: file }).input;\n         * input.css //=> \"a{}\";\n         */\n        this.css = css.toString();\n\n        if (this.css[0] === '\\uFEFF' || this.css[0] === '\\uFFFE') {\n            this.css = this.css.slice(1);\n        }\n\n        if (opts.from) {\n            if (/^\\w+:\\/\\//.test(opts.from)) {\n                /**\n                 * @member {string} - The absolute path to the CSS source file\n                 *                    defined with the `from` option.\n                 *\n                 * @example\n                 * const root = postcss.parse(css, { from: 'a.css' });\n                 * root.source.input.file //=> '/home/ai/a.css'\n                 */\n                this.file = opts.from;\n            } else {\n                this.file = _path2.default.resolve(opts.from);\n            }\n        }\n\n        var map = new _previousMap2.default(this.css, opts);\n        if (map.text) {\n            /**\n             * @member {PreviousMap} - The input source map passed from\n             *                         a compilation step before PostCSS\n             *                         (for example, from Sass compiler).\n             *\n             * @example\n             * root.source.input.map.consumer().sources //=> ['a.sass']\n             */\n            this.map = map;\n            var file = map.consumer().file;\n            if (!this.file && file) this.file = this.mapResolve(file);\n        }\n\n        if (!this.file) {\n            sequence += 1;\n            /**\n             * @member {string} - The unique ID of the CSS source. It will be\n             *                    created if `from` option is not provided\n             *                    (because PostCSS does not know the file path).\n             *\n             * @example\n             * const root = postcss.parse(css);\n             * root.source.input.file //=> undefined\n             * root.source.input.id   //=> \"<input css 1>\"\n             */\n            this.id = '<input css ' + sequence + '>';\n        }\n        if (this.map) this.map.file = this.from;\n    }\n\n    Input.prototype.error = function error(message, line, column) {\n        var opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n        var result = void 0;\n        var origin = this.origin(line, column);\n        if (origin) {\n            result = new _cssSyntaxError2.default(message, origin.line, origin.column, origin.source, origin.file, opts.plugin);\n        } else {\n            result = new _cssSyntaxError2.default(message, line, column, this.css, this.file, opts.plugin);\n        }\n\n        result.input = { line: line, column: column, source: this.css };\n        if (this.file) result.input.file = this.file;\n\n        return result;\n    };\n\n    /**\n     * Reads the input source map and returns a symbol position\n     * in the input source (e.g., in a Sass file that was compiled\n     * to CSS before being passed to PostCSS).\n     *\n     * @param {number} line   - line in input CSS\n     * @param {number} column - column in input CSS\n     *\n     * @return {filePosition} position in input source\n     *\n     * @example\n     * root.source.input.origin(1, 1) //=> { file: 'a.css', line: 3, column: 1 }\n     */\n\n\n    Input.prototype.origin = function origin(line, column) {\n        if (!this.map) return false;\n        var consumer = this.map.consumer();\n\n        var from = consumer.originalPositionFor({ line: line, column: column });\n        if (!from.source) return false;\n\n        var result = {\n            file: this.mapResolve(from.source),\n            line: from.line,\n            column: from.column\n        };\n\n        var source = consumer.sourceContentFor(from.source);\n        if (source) result.source = source;\n\n        return result;\n    };\n\n    Input.prototype.mapResolve = function mapResolve(file) {\n        if (/^\\w+:\\/\\//.test(file)) {\n            return file;\n        } else {\n            return _path2.default.resolve(this.map.consumer().sourceRoot || '.', file);\n        }\n    };\n\n    /**\n     * The CSS source identifier. Contains {@link Input#file} if the user\n     * set the `from` option, or {@link Input#id} if they did not.\n     * @type {string}\n     *\n     * @example\n     * const root = postcss.parse(css, { from: 'a.css' });\n     * root.source.input.from //=> \"/home/ai/a.css\"\n     *\n     * const root = postcss.parse(css);\n     * root.source.input.from //=> \"<input css 1>\"\n     */\n\n\n    _createClass(Input, [{\n        key: 'from',\n        get: function get() {\n            return this.file || this.id;\n        }\n    }]);\n\n    return Input;\n}();\n\nexports.default = Input;\n\n/**\n * @typedef  {object} filePosition\n * @property {string} file   - path to file\n * @property {number} line   - source line in file\n * @property {number} column - source column in file\n */\n\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; }; }();\n\nvar _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; };\n\nvar _cssSyntaxError = __webpack_require__(36);\n\nvar _cssSyntaxError2 = _interopRequireDefault(_cssSyntaxError);\n\nvar _stringifier = __webpack_require__(21);\n\nvar _stringifier2 = _interopRequireDefault(_stringifier);\n\nvar _stringify = __webpack_require__(42);\n\nvar _stringify2 = _interopRequireDefault(_stringify);\n\nvar _warnOnce = __webpack_require__(3);\n\nvar _warnOnce2 = _interopRequireDefault(_warnOnce);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar cloneNode = function cloneNode(obj, parent) {\n    var cloned = new obj.constructor();\n\n    for (var i in obj) {\n        if (!obj.hasOwnProperty(i)) continue;\n        var value = obj[i];\n        var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n\n        if (i === 'parent' && type === 'object') {\n            if (parent) cloned[i] = parent;\n        } else if (i === 'source') {\n            cloned[i] = value;\n        } else if (value instanceof Array) {\n            cloned[i] = value.map(function (j) {\n                return cloneNode(j, cloned);\n            });\n        } else if (i !== 'before' && i !== 'after' && i !== 'between' && i !== 'semicolon') {\n            if (type === 'object' && value !== null) value = cloneNode(value);\n            cloned[i] = value;\n        }\n    }\n\n    return cloned;\n};\n\n/**\n * All node classes inherit the following common methods.\n *\n * @abstract\n */\n\nvar Node = function () {\n\n    /**\n     * @param {object} [defaults] - value for node properties\n     */\n    function Node() {\n        var defaults = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n        _classCallCheck(this, Node);\n\n        this.raws = {};\n        if ((typeof defaults === 'undefined' ? 'undefined' : _typeof(defaults)) !== 'object' && typeof defaults !== 'undefined') {\n            throw new Error('PostCSS nodes constructor accepts object, not ' + JSON.stringify(defaults));\n        }\n        for (var name in defaults) {\n            this[name] = defaults[name];\n        }\n    }\n\n    /**\n     * Returns a CssSyntaxError instance containing the original position\n     * of the node in the source, showing line and column numbers and also\n     * a small excerpt to facilitate debugging.\n     *\n     * If present, an input source map will be used to get the original position\n     * of the source, even from a previous compilation step\n     * (e.g., from Sass compilation).\n     *\n     * This method produces very useful error messages.\n     *\n     * @param {string} message     - error description\n     * @param {object} [opts]      - options\n     * @param {string} opts.plugin - plugin name that created this error.\n     *                               PostCSS will set it automatically.\n     * @param {string} opts.word   - a word inside a node’s string that should\n     *                               be highlighted as the source of the error\n     * @param {number} opts.index  - an index inside a node’s string that should\n     *                               be highlighted as the source of the error\n     *\n     * @return {CssSyntaxError} error object to throw it\n     *\n     * @example\n     * if ( !variables[name] ) {\n     *   throw decl.error('Unknown variable ' + name, { word: name });\n     *   // CssSyntaxError: postcss-vars:a.sass:4:3: Unknown variable $black\n     *   //   color: $black\n     *   // a\n     *   //          ^\n     *   //   background: white\n     * }\n     */\n\n\n    Node.prototype.error = function error(message) {\n        var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n        if (this.source) {\n            var pos = this.positionBy(opts);\n            return this.source.input.error(message, pos.line, pos.column, opts);\n        } else {\n            return new _cssSyntaxError2.default(message);\n        }\n    };\n\n    /**\n     * This method is provided as a convenience wrapper for {@link Result#warn}.\n     *\n     * @param {Result} result      - the {@link Result} instance\n     *                               that will receive the warning\n     * @param {string} text        - warning message\n     * @param {object} [opts]      - options\n     * @param {string} opts.plugin - plugin name that created this warning.\n     *                               PostCSS will set it automatically.\n     * @param {string} opts.word   - a word inside a node’s string that should\n     *                               be highlighted as the source of the warning\n     * @param {number} opts.index  - an index inside a node’s string that should\n     *                               be highlighted as the source of the warning\n     *\n     * @return {Warning} created warning object\n     *\n     * @example\n     * const plugin = postcss.plugin('postcss-deprecated', () => {\n     *   return (root, result) => {\n     *     root.walkDecls('bad', decl => {\n     *       decl.warn(result, 'Deprecated property bad');\n     *     });\n     *   };\n     * });\n     */\n\n\n    Node.prototype.warn = function warn(result, text, opts) {\n        var data = { node: this };\n        for (var i in opts) {\n            data[i] = opts[i];\n        }return result.warn(text, data);\n    };\n\n    /**\n     * Removes the node from its parent and cleans the parent properties\n     * from the node and its children.\n     *\n     * @example\n     * if ( decl.prop.match(/^-webkit-/) ) {\n     *   decl.remove();\n     * }\n     *\n     * @return {Node} node to make calls chain\n     */\n\n\n    Node.prototype.remove = function remove() {\n        if (this.parent) {\n            this.parent.removeChild(this);\n        }\n        this.parent = undefined;\n        return this;\n    };\n\n    /**\n     * Returns a CSS string representing the node.\n     *\n     * @param {stringifier|syntax} [stringifier] - a syntax to use\n     *                                             in string generation\n     *\n     * @return {string} CSS string of this node\n     *\n     * @example\n     * postcss.rule({ selector: 'a' }).toString() //=> \"a {}\"\n     */\n\n\n    Node.prototype.toString = function toString() {\n        var stringifier = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _stringify2.default;\n\n        if (stringifier.stringify) stringifier = stringifier.stringify;\n        var result = '';\n        stringifier(this, function (i) {\n            result += i;\n        });\n        return result;\n    };\n\n    /**\n     * Returns a clone of the node.\n     *\n     * The resulting cloned node and its (cloned) children will have\n     * a clean parent and code style properties.\n     *\n     * @param {object} [overrides] - new properties to override in the clone.\n     *\n     * @example\n     * const cloned = decl.clone({ prop: '-moz-' + decl.prop });\n     * cloned.raws.before  //=> undefined\n     * cloned.parent       //=> undefined\n     * cloned.toString()   //=> -moz-transform: scale(0)\n     *\n     * @return {Node} clone of the node\n     */\n\n\n    Node.prototype.clone = function clone() {\n        var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n        var cloned = cloneNode(this);\n        for (var name in overrides) {\n            cloned[name] = overrides[name];\n        }\n        return cloned;\n    };\n\n    /**\n     * Shortcut to clone the node and insert the resulting cloned node\n     * before the current node.\n     *\n     * @param {object} [overrides] - new properties to override in the clone.\n     *\n     * @example\n     * decl.cloneBefore({ prop: '-moz-' + decl.prop });\n     *\n     * @return {Node} - new node\n     */\n\n\n    Node.prototype.cloneBefore = function cloneBefore() {\n        var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n        var cloned = this.clone(overrides);\n        this.parent.insertBefore(this, cloned);\n        return cloned;\n    };\n\n    /**\n     * Shortcut to clone the node and insert the resulting cloned node\n     * after the current node.\n     *\n     * @param {object} [overrides] - new properties to override in the clone.\n     *\n     * @return {Node} - new node\n     */\n\n\n    Node.prototype.cloneAfter = function cloneAfter() {\n        var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n        var cloned = this.clone(overrides);\n        this.parent.insertAfter(this, cloned);\n        return cloned;\n    };\n\n    /**\n     * Inserts node(s) before the current node and removes the current node.\n     *\n     * @param {...Node} nodes - node(s) to replace current one\n     *\n     * @example\n     * if ( atrule.name == 'mixin' ) {\n     *   atrule.replaceWith(mixinRules[atrule.params]);\n     * }\n     *\n     * @return {Node} current node to methods chain\n     */\n\n\n    Node.prototype.replaceWith = function replaceWith() {\n        if (this.parent) {\n            for (var _len = arguments.length, nodes = Array(_len), _key = 0; _key < _len; _key++) {\n                nodes[_key] = arguments[_key];\n            }\n\n            for (var _iterator = nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n                var _ref;\n\n                if (_isArray) {\n                    if (_i >= _iterator.length) break;\n                    _ref = _iterator[_i++];\n                } else {\n                    _i = _iterator.next();\n                    if (_i.done) break;\n                    _ref = _i.value;\n                }\n\n                var node = _ref;\n\n                this.parent.insertBefore(this, node);\n            }\n\n            this.remove();\n        }\n\n        return this;\n    };\n\n    /**\n     * Removes the node from its current parent and inserts it\n     * at the end of `newParent`.\n     *\n     * This will clean the `before` and `after` code {@link Node#raws} data\n     * from the node and replace them with the indentation style of `newParent`.\n     * It will also clean the `between` property\n     * if `newParent` is in another {@link Root}.\n     *\n     * @param {Container} newParent - container node where the current node\n     *                                will be moved\n     *\n     * @example\n     * atrule.moveTo(atrule.root());\n     *\n     * @return {Node} current node to methods chain\n     */\n\n\n    Node.prototype.moveTo = function moveTo(newParent) {\n        this.cleanRaws(this.root() === newParent.root());\n        this.remove();\n        newParent.append(this);\n        return this;\n    };\n\n    /**\n     * Removes the node from its current parent and inserts it into\n     * a new parent before `otherNode`.\n     *\n     * This will also clean the node’s code style properties just as it would\n     * in {@link Node#moveTo}.\n     *\n     * @param {Node} otherNode - node that will be before current node\n     *\n     * @return {Node} current node to methods chain\n     */\n\n\n    Node.prototype.moveBefore = function moveBefore(otherNode) {\n        this.cleanRaws(this.root() === otherNode.root());\n        this.remove();\n        otherNode.parent.insertBefore(otherNode, this);\n        return this;\n    };\n\n    /**\n     * Removes the node from its current parent and inserts it into\n     * a new parent after `otherNode`.\n     *\n     * This will also clean the node’s code style properties just as it would\n     * in {@link Node#moveTo}.\n     *\n     * @param {Node} otherNode - node that will be after current node\n     *\n     * @return {Node} current node to methods chain\n     */\n\n\n    Node.prototype.moveAfter = function moveAfter(otherNode) {\n        this.cleanRaws(this.root() === otherNode.root());\n        this.remove();\n        otherNode.parent.insertAfter(otherNode, this);\n        return this;\n    };\n\n    /**\n     * Returns the next child of the node’s parent.\n     * Returns `undefined` if the current node is the last child.\n     *\n     * @return {Node|undefined} next node\n     *\n     * @example\n     * if ( comment.text === 'delete next' ) {\n     *   const next = comment.next();\n     *   if ( next ) {\n     *     next.remove();\n     *   }\n     * }\n     */\n\n\n    Node.prototype.next = function next() {\n        var index = this.parent.index(this);\n        return this.parent.nodes[index + 1];\n    };\n\n    /**\n     * Returns the previous child of the node’s parent.\n     * Returns `undefined` if the current node is the first child.\n     *\n     * @return {Node|undefined} previous node\n     *\n     * @example\n     * const annotation = decl.prev();\n     * if ( annotation.type == 'comment' ) {\n     *  readAnnotation(annotation.text);\n     * }\n     */\n\n\n    Node.prototype.prev = function prev() {\n        var index = this.parent.index(this);\n        return this.parent.nodes[index - 1];\n    };\n\n    Node.prototype.toJSON = function toJSON() {\n        var fixed = {};\n\n        for (var name in this) {\n            if (!this.hasOwnProperty(name)) continue;\n            if (name === 'parent') continue;\n            var value = this[name];\n\n            if (value instanceof Array) {\n                fixed[name] = value.map(function (i) {\n                    if ((typeof i === 'undefined' ? 'undefined' : _typeof(i)) === 'object' && i.toJSON) {\n                        return i.toJSON();\n                    } else {\n                        return i;\n                    }\n                });\n            } else if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.toJSON) {\n                fixed[name] = value.toJSON();\n            } else {\n                fixed[name] = value;\n            }\n        }\n\n        return fixed;\n    };\n\n    /**\n     * Returns a {@link Node#raws} value. If the node is missing\n     * the code style property (because the node was manually built or cloned),\n     * PostCSS will try to autodetect the code style property by looking\n     * at other nodes in the tree.\n     *\n     * @param {string} prop          - name of code style property\n     * @param {string} [defaultType] - name of default value, it can be missed\n     *                                 if the value is the same as prop\n     *\n     * @example\n     * const root = postcss.parse('a { background: white }');\n     * root.nodes[0].append({ prop: 'color', value: 'black' });\n     * root.nodes[0].nodes[1].raws.before   //=> undefined\n     * root.nodes[0].nodes[1].raw('before') //=> ' '\n     *\n     * @return {string} code style value\n     */\n\n\n    Node.prototype.raw = function raw(prop, defaultType) {\n        var str = new _stringifier2.default();\n        return str.raw(this, prop, defaultType);\n    };\n\n    /**\n     * Finds the Root instance of the node’s tree.\n     *\n     * @example\n     * root.nodes[0].nodes[0].root() === root\n     *\n     * @return {Root} root parent\n     */\n\n\n    Node.prototype.root = function root() {\n        var result = this;\n        while (result.parent) {\n            result = result.parent;\n        }return result;\n    };\n\n    Node.prototype.cleanRaws = function cleanRaws(keepBetween) {\n        delete this.raws.before;\n        delete this.raws.after;\n        if (!keepBetween) delete this.raws.between;\n    };\n\n    Node.prototype.positionInside = function positionInside(index) {\n        var string = this.toString();\n        var column = this.source.start.column;\n        var line = this.source.start.line;\n\n        for (var i = 0; i < index; i++) {\n            if (string[i] === '\\n') {\n                column = 1;\n                line += 1;\n            } else {\n                column += 1;\n            }\n        }\n\n        return { line: line, column: column };\n    };\n\n    Node.prototype.positionBy = function positionBy(opts) {\n        var pos = this.source.start;\n        if (opts.index) {\n            pos = this.positionInside(opts.index);\n        } else if (opts.word) {\n            var index = this.toString().indexOf(opts.word);\n            if (index !== -1) pos = this.positionInside(index);\n        }\n        return pos;\n    };\n\n    Node.prototype.removeSelf = function removeSelf() {\n        (0, _warnOnce2.default)('Node#removeSelf is deprecated. Use Node#remove.');\n        return this.remove();\n    };\n\n    Node.prototype.replace = function replace(nodes) {\n        (0, _warnOnce2.default)('Node#replace is deprecated. Use Node#replaceWith');\n        return this.replaceWith(nodes);\n    };\n\n    Node.prototype.style = function style(own, detect) {\n        (0, _warnOnce2.default)('Node#style() is deprecated. Use Node#raw()');\n        return this.raw(own, detect);\n    };\n\n    Node.prototype.cleanStyles = function cleanStyles(keepBetween) {\n        (0, _warnOnce2.default)('Node#cleanStyles() is deprecated. Use Node#cleanRaws()');\n        return this.cleanRaws(keepBetween);\n    };\n\n    _createClass(Node, [{\n        key: 'before',\n        get: function get() {\n            (0, _warnOnce2.default)('Node#before is deprecated. Use Node#raws.before');\n            return this.raws.before;\n        },\n        set: function set(val) {\n            (0, _warnOnce2.default)('Node#before is deprecated. Use Node#raws.before');\n            this.raws.before = val;\n        }\n    }, {\n        key: 'between',\n        get: function get() {\n            (0, _warnOnce2.default)('Node#between is deprecated. Use Node#raws.between');\n            return this.raws.between;\n        },\n        set: function set(val) {\n            (0, _warnOnce2.default)('Node#between is deprecated. Use Node#raws.between');\n            this.raws.between = val;\n        }\n\n        /**\n         * @memberof Node#\n         * @member {string} type - String representing the node’s type.\n         *                         Possible values are `root`, `atrule`, `rule`,\n         *                         `decl`, or `comment`.\n         *\n         * @example\n         * postcss.decl({ prop: 'color', value: 'black' }).type //=> 'decl'\n         */\n\n        /**\n         * @memberof Node#\n         * @member {Container} parent - the node’s parent node.\n         *\n         * @example\n         * root.nodes[0].parent == root;\n         */\n\n        /**\n         * @memberof Node#\n         * @member {source} source - the input source of the node\n         *\n         * The property is used in source map generation.\n         *\n         * If you create a node manually (e.g., with `postcss.decl()`),\n         * that node will not have a `source` property and will be absent\n         * from the source map. For this reason, the plugin developer should\n         * consider cloning nodes to create new ones (in which case the new node’s\n         * source will reference the original, cloned node) or setting\n         * the `source` property manually.\n         *\n         * ```js\n         * // Bad\n         * const prefixed = postcss.decl({\n         *   prop: '-moz-' + decl.prop,\n         *   value: decl.value\n         * });\n         *\n         * // Good\n         * const prefixed = decl.clone({ prop: '-moz-' + decl.prop });\n         * ```\n         *\n         * ```js\n         * if ( atrule.name == 'add-link' ) {\n         *   const rule = postcss.rule({ selector: 'a', source: atrule.source });\n         *   atrule.parent.insertBefore(atrule, rule);\n         * }\n         * ```\n         *\n         * @example\n         * decl.source.input.from //=> '/home/ai/a.sass'\n         * decl.source.start      //=> { line: 10, column: 2 }\n         * decl.source.end        //=> { line: 10, column: 12 }\n         */\n\n        /**\n         * @memberof Node#\n         * @member {object} raws - Information to generate byte-to-byte equal\n         *                         node string as it was in the origin input.\n         *\n         * Every parser saves its own properties,\n         * but the default CSS parser uses:\n         *\n         * * `before`: the space symbols before the node. It also stores `*`\n         *   and `_` symbols before the declaration (IE hack).\n         * * `after`: the space symbols after the last child of the node\n         *   to the end of the node.\n         * * `between`: the symbols between the property and value\n         *   for declarations, selector and `{` for rules, or last parameter\n         *   and `{` for at-rules.\n         * * `semicolon`: contains true if the last child has\n         *   an (optional) semicolon.\n         * * `afterName`: the space between the at-rule name and its parameters.\n         * * `left`: the space symbols between `/*` and the comment’s text.\n         * * `right`: the space symbols between the comment’s text\n         *   and <code>*&#47;</code>.\n         * * `important`: the content of the important statement,\n         *   if it is not just `!important`.\n         *\n         * PostCSS cleans selectors, declaration values and at-rule parameters\n         * from comments and extra spaces, but it stores origin content in raws\n         * properties. As such, if you don’t change a declaration’s value,\n         * PostCSS will use the raw value with comments.\n         *\n         * @example\n         * const root = postcss.parse('a {\\n  color:black\\n}')\n         * root.first.first.raws //=> { before: '\\n  ', between: ':' }\n         */\n\n    }]);\n\n    return Node;\n}();\n\nexports.default = Node;\n\n/**\n * @typedef {object} position\n * @property {number} line   - source line in file\n * @property {number} column - source column in file\n */\n\n/**\n * @typedef {object} source\n * @property {Input} input    - {@link Input} with input file\n * @property {position} start - The starting position of the node’s source\n * @property {position} end   - The ending position of the node’s source\n */\n\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar defaultRaw = {\n    colon: ': ',\n    indent: '    ',\n    beforeDecl: '\\n',\n    beforeRule: '\\n',\n    beforeOpen: ' ',\n    beforeClose: '\\n',\n    beforeComment: '\\n',\n    after: '\\n',\n    emptyBody: '',\n    commentLeft: ' ',\n    commentRight: ' '\n};\n\nfunction capitalize(str) {\n    return str[0].toUpperCase() + str.slice(1);\n}\n\nvar Stringifier = function () {\n    function Stringifier(builder) {\n        _classCallCheck(this, Stringifier);\n\n        this.builder = builder;\n    }\n\n    Stringifier.prototype.stringify = function stringify(node, semicolon) {\n        this[node.type](node, semicolon);\n    };\n\n    Stringifier.prototype.root = function root(node) {\n        this.body(node);\n        if (node.raws.after) this.builder(node.raws.after);\n    };\n\n    Stringifier.prototype.comment = function comment(node) {\n        var left = this.raw(node, 'left', 'commentLeft');\n        var right = this.raw(node, 'right', 'commentRight');\n        this.builder('/*' + left + node.text + right + '*/', node);\n    };\n\n    Stringifier.prototype.decl = function decl(node, semicolon) {\n        var between = this.raw(node, 'between', 'colon');\n        var string = node.prop + between + this.rawValue(node, 'value');\n\n        if (node.important) {\n            string += node.raws.important || ' !important';\n        }\n\n        if (semicolon) string += ';';\n        this.builder(string, node);\n    };\n\n    Stringifier.prototype.rule = function rule(node) {\n        this.block(node, this.rawValue(node, 'selector'));\n    };\n\n    Stringifier.prototype.atrule = function atrule(node, semicolon) {\n        var name = '@' + node.name;\n        var params = node.params ? this.rawValue(node, 'params') : '';\n\n        if (typeof node.raws.afterName !== 'undefined') {\n            name += node.raws.afterName;\n        } else if (params) {\n            name += ' ';\n        }\n\n        if (node.nodes) {\n            this.block(node, name + params);\n        } else {\n            var end = (node.raws.between || '') + (semicolon ? ';' : '');\n            this.builder(name + params + end, node);\n        }\n    };\n\n    Stringifier.prototype.body = function body(node) {\n        var last = node.nodes.length - 1;\n        while (last > 0) {\n            if (node.nodes[last].type !== 'comment') break;\n            last -= 1;\n        }\n\n        var semicolon = this.raw(node, 'semicolon');\n        for (var i = 0; i < node.nodes.length; i++) {\n            var child = node.nodes[i];\n            var before = this.raw(child, 'before');\n            if (before) this.builder(before);\n            this.stringify(child, last !== i || semicolon);\n        }\n    };\n\n    Stringifier.prototype.block = function block(node, start) {\n        var between = this.raw(node, 'between', 'beforeOpen');\n        this.builder(start + between + '{', node, 'start');\n\n        var after = void 0;\n        if (node.nodes && node.nodes.length) {\n            this.body(node);\n            after = this.raw(node, 'after');\n        } else {\n            after = this.raw(node, 'after', 'emptyBody');\n        }\n\n        if (after) this.builder(after);\n        this.builder('}', node, 'end');\n    };\n\n    Stringifier.prototype.raw = function raw(node, own, detect) {\n        var value = void 0;\n        if (!detect) detect = own;\n\n        // Already had\n        if (own) {\n            value = node.raws[own];\n            if (typeof value !== 'undefined') return value;\n        }\n\n        var parent = node.parent;\n\n        // Hack for first rule in CSS\n        if (detect === 'before') {\n            if (!parent || parent.type === 'root' && parent.first === node) {\n                return '';\n            }\n        }\n\n        // Floating child without parent\n        if (!parent) return defaultRaw[detect];\n\n        // Detect style by other nodes\n        var root = node.root();\n        if (!root.rawCache) root.rawCache = {};\n        if (typeof root.rawCache[detect] !== 'undefined') {\n            return root.rawCache[detect];\n        }\n\n        if (detect === 'before' || detect === 'after') {\n            return this.beforeAfter(node, detect);\n        } else {\n            var method = 'raw' + capitalize(detect);\n            if (this[method]) {\n                value = this[method](root, node);\n            } else {\n                root.walk(function (i) {\n                    value = i.raws[own];\n                    if (typeof value !== 'undefined') return false;\n                });\n            }\n        }\n\n        if (typeof value === 'undefined') value = defaultRaw[detect];\n\n        root.rawCache[detect] = value;\n        return value;\n    };\n\n    Stringifier.prototype.rawSemicolon = function rawSemicolon(root) {\n        var value = void 0;\n        root.walk(function (i) {\n            if (i.nodes && i.nodes.length && i.last.type === 'decl') {\n                value = i.raws.semicolon;\n                if (typeof value !== 'undefined') return false;\n            }\n        });\n        return value;\n    };\n\n    Stringifier.prototype.rawEmptyBody = function rawEmptyBody(root) {\n        var value = void 0;\n        root.walk(function (i) {\n            if (i.nodes && i.nodes.length === 0) {\n                value = i.raws.after;\n                if (typeof value !== 'undefined') return false;\n            }\n        });\n        return value;\n    };\n\n    Stringifier.prototype.rawIndent = function rawIndent(root) {\n        if (root.raws.indent) return root.raws.indent;\n        var value = void 0;\n        root.walk(function (i) {\n            var p = i.parent;\n            if (p && p !== root && p.parent && p.parent === root) {\n                if (typeof i.raws.before !== 'undefined') {\n                    var parts = i.raws.before.split('\\n');\n                    value = parts[parts.length - 1];\n                    value = value.replace(/[^\\s]/g, '');\n                    return false;\n                }\n            }\n        });\n        return value;\n    };\n\n    Stringifier.prototype.rawBeforeComment = function rawBeforeComment(root, node) {\n        var value = void 0;\n        root.walkComments(function (i) {\n            if (typeof i.raws.before !== 'undefined') {\n                value = i.raws.before;\n                if (value.indexOf('\\n') !== -1) {\n                    value = value.replace(/[^\\n]+$/, '');\n                }\n                return false;\n            }\n        });\n        if (typeof value === 'undefined') {\n            value = this.raw(node, null, 'beforeDecl');\n        }\n        return value;\n    };\n\n    Stringifier.prototype.rawBeforeDecl = function rawBeforeDecl(root, node) {\n        var value = void 0;\n        root.walkDecls(function (i) {\n            if (typeof i.raws.before !== 'undefined') {\n                value = i.raws.before;\n                if (value.indexOf('\\n') !== -1) {\n                    value = value.replace(/[^\\n]+$/, '');\n                }\n                return false;\n            }\n        });\n        if (typeof value === 'undefined') {\n            value = this.raw(node, null, 'beforeRule');\n        }\n        return value;\n    };\n\n    Stringifier.prototype.rawBeforeRule = function rawBeforeRule(root) {\n        var value = void 0;\n        root.walk(function (i) {\n            if (i.nodes && (i.parent !== root || root.first !== i)) {\n                if (typeof i.raws.before !== 'undefined') {\n                    value = i.raws.before;\n                    if (value.indexOf('\\n') !== -1) {\n                        value = value.replace(/[^\\n]+$/, '');\n                    }\n                    return false;\n                }\n            }\n        });\n        return value;\n    };\n\n    Stringifier.prototype.rawBeforeClose = function rawBeforeClose(root) {\n        var value = void 0;\n        root.walk(function (i) {\n            if (i.nodes && i.nodes.length > 0) {\n                if (typeof i.raws.after !== 'undefined') {\n                    value = i.raws.after;\n                    if (value.indexOf('\\n') !== -1) {\n                        value = value.replace(/[^\\n]+$/, '');\n                    }\n                    return false;\n                }\n            }\n        });\n        return value;\n    };\n\n    Stringifier.prototype.rawBeforeOpen = function rawBeforeOpen(root) {\n        var value = void 0;\n        root.walk(function (i) {\n            if (i.type !== 'decl') {\n                value = i.raws.between;\n                if (typeof value !== 'undefined') return false;\n            }\n        });\n        return value;\n    };\n\n    Stringifier.prototype.rawColon = function rawColon(root) {\n        var value = void 0;\n        root.walkDecls(function (i) {\n            if (typeof i.raws.between !== 'undefined') {\n                value = i.raws.between.replace(/[^\\s:]/g, '');\n                return false;\n            }\n        });\n        return value;\n    };\n\n    Stringifier.prototype.beforeAfter = function beforeAfter(node, detect) {\n        var value = void 0;\n        if (node.type === 'decl') {\n            value = this.raw(node, null, 'beforeDecl');\n        } else if (node.type === 'comment') {\n            value = this.raw(node, null, 'beforeComment');\n        } else if (detect === 'before') {\n            value = this.raw(node, null, 'beforeRule');\n        } else {\n            value = this.raw(node, null, 'beforeClose');\n        }\n\n        var buf = node.parent;\n        var depth = 0;\n        while (buf && buf.type !== 'root') {\n            depth += 1;\n            buf = buf.parent;\n        }\n\n        if (value.indexOf('\\n') !== -1) {\n            var indent = this.raw(node, null, 'indent');\n            if (indent.length) {\n                for (var step = 0; step < depth; step++) {\n                    value += indent;\n                }\n            }\n        }\n\n        return value;\n    };\n\n    Stringifier.prototype.rawValue = function rawValue(node, prop) {\n        var value = node[prop];\n        var raw = node.raws[prop];\n        if (raw && raw.value === value) {\n            return raw.raw;\n        } else {\n            return value;\n        }\n    };\n\n    return Stringifier;\n}();\n\nexports.default = Stringifier;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; }; }();\n\nvar _node = __webpack_require__(6);\n\nvar _node2 = _interopRequireDefault(_node);\n\nvar _types = __webpack_require__(0);\n\nvar types = _interopRequireWildcard(_types);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Container = function (_Node) {\n    _inherits(Container, _Node);\n\n    function Container(opts) {\n        _classCallCheck(this, Container);\n\n        var _this = _possibleConstructorReturn(this, _Node.call(this, opts));\n\n        if (!_this.nodes) {\n            _this.nodes = [];\n        }\n        return _this;\n    }\n\n    Container.prototype.append = function append(selector) {\n        selector.parent = this;\n        this.nodes.push(selector);\n        return this;\n    };\n\n    Container.prototype.prepend = function prepend(selector) {\n        selector.parent = this;\n        this.nodes.unshift(selector);\n        return this;\n    };\n\n    Container.prototype.at = function at(index) {\n        return this.nodes[index];\n    };\n\n    Container.prototype.index = function index(child) {\n        if (typeof child === 'number') {\n            return child;\n        }\n        return this.nodes.indexOf(child);\n    };\n\n    Container.prototype.removeChild = function removeChild(child) {\n        child = this.index(child);\n        this.at(child).parent = undefined;\n        this.nodes.splice(child, 1);\n\n        var index = void 0;\n        for (var id in this.indexes) {\n            index = this.indexes[id];\n            if (index >= child) {\n                this.indexes[id] = index - 1;\n            }\n        }\n\n        return this;\n    };\n\n    Container.prototype.removeAll = function removeAll() {\n        for (var _iterator = this.nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n            var _ref;\n\n            if (_isArray) {\n                if (_i >= _iterator.length) break;\n                _ref = _iterator[_i++];\n            } else {\n                _i = _iterator.next();\n                if (_i.done) break;\n                _ref = _i.value;\n            }\n\n            var node = _ref;\n\n            node.parent = undefined;\n        }\n        this.nodes = [];\n        return this;\n    };\n\n    Container.prototype.empty = function empty() {\n        return this.removeAll();\n    };\n\n    Container.prototype.insertAfter = function insertAfter(oldNode, newNode) {\n        var oldIndex = this.index(oldNode);\n        this.nodes.splice(oldIndex + 1, 0, newNode);\n\n        var index = void 0;\n        for (var id in this.indexes) {\n            index = this.indexes[id];\n            if (oldIndex <= index) {\n                this.indexes[id] = index + this.nodes.length;\n            }\n        }\n\n        return this;\n    };\n\n    Container.prototype.insertBefore = function insertBefore(oldNode, newNode) {\n        var oldIndex = this.index(oldNode);\n        this.nodes.splice(oldIndex, 0, newNode);\n\n        var index = void 0;\n        for (var id in this.indexes) {\n            index = this.indexes[id];\n            if (oldIndex <= index) {\n                this.indexes[id] = index + this.nodes.length;\n            }\n        }\n\n        return this;\n    };\n\n    Container.prototype.each = function each(callback) {\n        if (!this.lastEach) {\n            this.lastEach = 0;\n        }\n        if (!this.indexes) {\n            this.indexes = {};\n        }\n\n        this.lastEach++;\n        var id = this.lastEach;\n        this.indexes[id] = 0;\n\n        if (!this.length) {\n            return undefined;\n        }\n\n        var index = void 0,\n            result = void 0;\n        while (this.indexes[id] < this.length) {\n            index = this.indexes[id];\n            result = callback(this.at(index), index);\n            if (result === false) {\n                break;\n            }\n\n            this.indexes[id] += 1;\n        }\n\n        delete this.indexes[id];\n\n        if (result === false) {\n            return false;\n        }\n    };\n\n    Container.prototype.walk = function walk(callback) {\n        return this.each(function (node, i) {\n            var result = callback(node, i);\n\n            if (result !== false && node.length) {\n                result = node.walk(callback);\n            }\n\n            if (result === false) {\n                return false;\n            }\n        });\n    };\n\n    Container.prototype.walkAttributes = function walkAttributes(callback) {\n        var _this2 = this;\n\n        return this.walk(function (selector) {\n            if (selector.type === types.ATTRIBUTE) {\n                return callback.call(_this2, selector);\n            }\n        });\n    };\n\n    Container.prototype.walkClasses = function walkClasses(callback) {\n        var _this3 = this;\n\n        return this.walk(function (selector) {\n            if (selector.type === types.CLASS) {\n                return callback.call(_this3, selector);\n            }\n        });\n    };\n\n    Container.prototype.walkCombinators = function walkCombinators(callback) {\n        var _this4 = this;\n\n        return this.walk(function (selector) {\n            if (selector.type === types.COMBINATOR) {\n                return callback.call(_this4, selector);\n            }\n        });\n    };\n\n    Container.prototype.walkComments = function walkComments(callback) {\n        var _this5 = this;\n\n        return this.walk(function (selector) {\n            if (selector.type === types.COMMENT) {\n                return callback.call(_this5, selector);\n            }\n        });\n    };\n\n    Container.prototype.walkIds = function walkIds(callback) {\n        var _this6 = this;\n\n        return this.walk(function (selector) {\n            if (selector.type === types.ID) {\n                return callback.call(_this6, selector);\n            }\n        });\n    };\n\n    Container.prototype.walkNesting = function walkNesting(callback) {\n        var _this7 = this;\n\n        return this.walk(function (selector) {\n            if (selector.type === types.NESTING) {\n                return callback.call(_this7, selector);\n            }\n        });\n    };\n\n    Container.prototype.walkPseudos = function walkPseudos(callback) {\n        var _this8 = this;\n\n        return this.walk(function (selector) {\n            if (selector.type === types.PSEUDO) {\n                return callback.call(_this8, selector);\n            }\n        });\n    };\n\n    Container.prototype.walkTags = function walkTags(callback) {\n        var _this9 = this;\n\n        return this.walk(function (selector) {\n            if (selector.type === types.TAG) {\n                return callback.call(_this9, selector);\n            }\n        });\n    };\n\n    Container.prototype.walkUniversals = function walkUniversals(callback) {\n        var _this10 = this;\n\n        return this.walk(function (selector) {\n            if (selector.type === types.UNIVERSAL) {\n                return callback.call(_this10, selector);\n            }\n        });\n    };\n\n    Container.prototype.split = function split(callback) {\n        var _this11 = this;\n\n        var current = [];\n        return this.reduce(function (memo, node, index) {\n            var split = callback.call(_this11, node);\n            current.push(node);\n            if (split) {\n                memo.push(current);\n                current = [];\n            } else if (index === _this11.length - 1) {\n                memo.push(current);\n            }\n            return memo;\n        }, []);\n    };\n\n    Container.prototype.map = function map(callback) {\n        return this.nodes.map(callback);\n    };\n\n    Container.prototype.reduce = function reduce(callback, memo) {\n        return this.nodes.reduce(callback, memo);\n    };\n\n    Container.prototype.every = function every(callback) {\n        return this.nodes.every(callback);\n    };\n\n    Container.prototype.some = function some(callback) {\n        return this.nodes.some(callback);\n    };\n\n    Container.prototype.filter = function filter(callback) {\n        return this.nodes.filter(callback);\n    };\n\n    Container.prototype.sort = function sort(callback) {\n        return this.nodes.sort(callback);\n    };\n\n    Container.prototype.toString = function toString() {\n        return this.map(String).join('');\n    };\n\n    _createClass(Container, [{\n        key: 'first',\n        get: function get() {\n            return this.at(0);\n        }\n    }, {\n        key: 'last',\n        get: function get() {\n            return this.at(this.length - 1);\n        }\n    }, {\n        key: 'length',\n        get: function get() {\n            return this.nodes.length;\n        }\n    }]);\n\n    return Container;\n}(_node2.default);\n\nexports.default = Container;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _container = __webpack_require__(12);\n\nvar _container2 = _interopRequireDefault(_container);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * Represents an at-rule.\n *\n * If it’s followed in the CSS by a {} block, this node will have\n * a nodes property representing its children.\n *\n * @extends Container\n *\n * @example\n * const root = postcss.parse('@charset \"UTF-8\"; @media print {}');\n *\n * const charset = root.first;\n * charset.type  //=> 'atrule'\n * charset.nodes //=> undefined\n *\n * const media = root.last;\n * media.nodes   //=> []\n */\nvar AtRule = function (_Container) {\n  _inherits(AtRule, _Container);\n\n  function AtRule(defaults) {\n    _classCallCheck(this, AtRule);\n\n    var _this = _possibleConstructorReturn(this, _Container.call(this, defaults));\n\n    _this.type = 'atrule';\n    return _this;\n  }\n\n  AtRule.prototype.append = function append() {\n    var _Container$prototype$;\n\n    if (!this.nodes) this.nodes = [];\n\n    for (var _len = arguments.length, children = Array(_len), _key = 0; _key < _len; _key++) {\n      children[_key] = arguments[_key];\n    }\n\n    return (_Container$prototype$ = _Container.prototype.append).call.apply(_Container$prototype$, [this].concat(children));\n  };\n\n  AtRule.prototype.prepend = function prepend() {\n    var _Container$prototype$2;\n\n    if (!this.nodes) this.nodes = [];\n\n    for (var _len2 = arguments.length, children = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      children[_key2] = arguments[_key2];\n    }\n\n    return (_Container$prototype$2 = _Container.prototype.prepend).call.apply(_Container$prototype$2, [this].concat(children));\n  };\n\n  /**\n   * @memberof AtRule#\n   * @member {string} name - the at-rule’s name immediately follows the `@`\n   *\n   * @example\n   * const root  = postcss.parse('@media print {}');\n   * media.name //=> 'media'\n   * const media = root.first;\n   */\n\n  /**\n   * @memberof AtRule#\n   * @member {string} params - the at-rule’s parameters, the values\n   *                           that follow the at-rule’s name but precede\n   *                           any {} block\n   *\n   * @example\n   * const root  = postcss.parse('@media print, screen {}');\n   * const media = root.first;\n   * media.params //=> 'print, screen'\n   */\n\n  /**\n   * @memberof AtRule#\n   * @member {object} raws - Information to generate byte-to-byte equal\n   *                         node string as it was in the origin input.\n   *\n   * Every parser saves its own properties,\n   * but the default CSS parser uses:\n   *\n   * * `before`: the space symbols before the node. It also stores `*`\n   *   and `_` symbols before the declaration (IE hack).\n   * * `after`: the space symbols after the last child of the node\n   *   to the end of the node.\n   * * `between`: the symbols between the property and value\n   *   for declarations, selector and `{` for rules, or last parameter\n   *   and `{` for at-rules.\n   * * `semicolon`: contains true if the last child has\n   *   an (optional) semicolon.\n   * * `afterName`: the space between the at-rule name and its parameters.\n   *\n   * PostCSS cleans at-rule parameters from comments and extra spaces,\n   * but it stores origin content in raws properties.\n   * As such, if you don’t change a declaration’s value,\n   * PostCSS will use the raw value with comments.\n   *\n   * @example\n   * const root = postcss.parse('  @media\\nprint {\\n}')\n   * root.first.first.raws //=> { before: '  ',\n   *                       //     between: ' ',\n   *                       //     afterName: '\\n',\n   *                       //     after: '\\n' }\n   */\n\n\n  return AtRule;\n}(_container2.default);\n\nexports.default = AtRule;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _node = __webpack_require__(26);\n\nvar _node2 = _interopRequireDefault(_node);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * Represents a comment between declarations or statements (rule and at-rules).\n *\n * Comments inside selectors, at-rule parameters, or declaration values\n * will be stored in the `raws` properties explained above.\n *\n * @extends Node\n */\nvar Comment = function (_Node) {\n  _inherits(Comment, _Node);\n\n  function Comment(defaults) {\n    _classCallCheck(this, Comment);\n\n    var _this = _possibleConstructorReturn(this, _Node.call(this, defaults));\n\n    _this.type = 'comment';\n    return _this;\n  }\n\n  /**\n   * @memberof Comment#\n   * @member {string} text - the comment’s text\n   */\n\n  /**\n   * @memberof Comment#\n   * @member {object} raws - Information to generate byte-to-byte equal\n   *                         node string as it was in the origin input.\n   *\n   * Every parser saves its own properties,\n   * but the default CSS parser uses:\n   *\n   * * `before`: the space symbols before the node.\n   * * `left`: the space symbols between `/*` and the comment’s text.\n   * * `right`: the space symbols between the comment’s text.\n   */\n\n\n  return Comment;\n}(_node2.default);\n\nexports.default = Comment;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; }; }();\n\nvar _cssSyntaxError = __webpack_require__(70);\n\nvar _cssSyntaxError2 = _interopRequireDefault(_cssSyntaxError);\n\nvar _previousMap = __webpack_require__(142);\n\nvar _previousMap2 = _interopRequireDefault(_previousMap);\n\nvar _path = __webpack_require__(5);\n\nvar _path2 = _interopRequireDefault(_path);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar sequence = 0;\n\n/**\n * Represents the source CSS.\n *\n * @example\n * const root  = postcss.parse(css, { from: file });\n * const input = root.source.input;\n */\n\nvar Input = function () {\n\n    /**\n     * @param {string} css    - input CSS source\n     * @param {object} [opts] - {@link Processor#process} options\n     */\n    function Input(css) {\n        var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n        _classCallCheck(this, Input);\n\n        /**\n         * @member {string} - input CSS source\n         *\n         * @example\n         * const input = postcss.parse('a{}', { from: file }).input;\n         * input.css //=> \"a{}\";\n         */\n        this.css = css.toString();\n\n        if (this.css[0] === '\\uFEFF' || this.css[0] === '\\uFFFE') {\n            this.css = this.css.slice(1);\n        }\n\n        if (opts.from) {\n            if (/^\\w+:\\/\\//.test(opts.from)) {\n                /**\n                 * @member {string} - The absolute path to the CSS source file\n                 *                    defined with the `from` option.\n                 *\n                 * @example\n                 * const root = postcss.parse(css, { from: 'a.css' });\n                 * root.source.input.file //=> '/home/ai/a.css'\n                 */\n                this.file = opts.from;\n            } else {\n                this.file = _path2.default.resolve(opts.from);\n            }\n        }\n\n        var map = new _previousMap2.default(this.css, opts);\n        if (map.text) {\n            /**\n             * @member {PreviousMap} - The input source map passed from\n             *                         a compilation step before PostCSS\n             *                         (for example, from Sass compiler).\n             *\n             * @example\n             * root.source.input.map.consumer().sources //=> ['a.sass']\n             */\n            this.map = map;\n            var file = map.consumer().file;\n            if (!this.file && file) this.file = this.mapResolve(file);\n        }\n\n        if (!this.file) {\n            sequence += 1;\n            /**\n             * @member {string} - The unique ID of the CSS source. It will be\n             *                    created if `from` option is not provided\n             *                    (because PostCSS does not know the file path).\n             *\n             * @example\n             * const root = postcss.parse(css);\n             * root.source.input.file //=> undefined\n             * root.source.input.id   //=> \"<input css 1>\"\n             */\n            this.id = '<input css ' + sequence + '>';\n        }\n        if (this.map) this.map.file = this.from;\n    }\n\n    Input.prototype.error = function error(message, line, column) {\n        var opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n        var result = void 0;\n        var origin = this.origin(line, column);\n        if (origin) {\n            result = new _cssSyntaxError2.default(message, origin.line, origin.column, origin.source, origin.file, opts.plugin);\n        } else {\n            result = new _cssSyntaxError2.default(message, line, column, this.css, this.file, opts.plugin);\n        }\n\n        result.input = { line: line, column: column, source: this.css };\n        if (this.file) result.input.file = this.file;\n\n        return result;\n    };\n\n    /**\n     * Reads the input source map and returns a symbol position\n     * in the input source (e.g., in a Sass file that was compiled\n     * to CSS before being passed to PostCSS).\n     *\n     * @param {number} line   - line in input CSS\n     * @param {number} column - column in input CSS\n     *\n     * @return {filePosition} position in input source\n     *\n     * @example\n     * root.source.input.origin(1, 1) //=> { file: 'a.css', line: 3, column: 1 }\n     */\n\n\n    Input.prototype.origin = function origin(line, column) {\n        if (!this.map) return false;\n        var consumer = this.map.consumer();\n\n        var from = consumer.originalPositionFor({ line: line, column: column });\n        if (!from.source) return false;\n\n        var result = {\n            file: this.mapResolve(from.source),\n            line: from.line,\n            column: from.column\n        };\n\n        var source = consumer.sourceContentFor(from.source);\n        if (source) result.source = source;\n\n        return result;\n    };\n\n    Input.prototype.mapResolve = function mapResolve(file) {\n        if (/^\\w+:\\/\\//.test(file)) {\n            return file;\n        } else {\n            return _path2.default.resolve(this.map.consumer().sourceRoot || '.', file);\n        }\n    };\n\n    /**\n     * The CSS source identifier. Contains {@link Input#file} if the user\n     * set the `from` option, or {@link Input#id} if they did not.\n     * @type {string}\n     *\n     * @example\n     * const root = postcss.parse(css, { from: 'a.css' });\n     * root.source.input.from //=> \"/home/ai/a.css\"\n     *\n     * const root = postcss.parse(css);\n     * root.source.input.from //=> \"<input css 1>\"\n     */\n\n\n    _createClass(Input, [{\n        key: 'from',\n        get: function get() {\n            return this.file || this.id;\n        }\n    }]);\n\n    return Input;\n}();\n\nexports.default = Input;\n\n/**\n * @typedef  {object} filePosition\n * @property {string} file   - path to file\n * @property {number} line   - source line in file\n * @property {number} column - source column in file\n */\n\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; };\n\nvar _cssSyntaxError = __webpack_require__(70);\n\nvar _cssSyntaxError2 = _interopRequireDefault(_cssSyntaxError);\n\nvar _stringifier = __webpack_require__(28);\n\nvar _stringifier2 = _interopRequireDefault(_stringifier);\n\nvar _stringify = __webpack_require__(76);\n\nvar _stringify2 = _interopRequireDefault(_stringify);\n\nvar _warnOnce = __webpack_require__(146);\n\nvar _warnOnce2 = _interopRequireDefault(_warnOnce);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar cloneNode = function cloneNode(obj, parent) {\n    var cloned = new obj.constructor();\n\n    for (var i in obj) {\n        if (!obj.hasOwnProperty(i)) continue;\n        var value = obj[i];\n        var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n\n        if (i === 'parent' && type === 'object') {\n            if (parent) cloned[i] = parent;\n        } else if (i === 'source') {\n            cloned[i] = value;\n        } else if (value instanceof Array) {\n            cloned[i] = value.map(function (j) {\n                return cloneNode(j, cloned);\n            });\n        } else {\n            if (type === 'object' && value !== null) value = cloneNode(value);\n            cloned[i] = value;\n        }\n    }\n\n    return cloned;\n};\n\n/**\n * All node classes inherit the following common methods.\n *\n * @abstract\n */\n\nvar Node = function () {\n\n    /**\n     * @param {object} [defaults] - value for node properties\n     */\n    function Node() {\n        var defaults = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n        _classCallCheck(this, Node);\n\n        this.raws = {};\n        if ((typeof defaults === 'undefined' ? 'undefined' : _typeof(defaults)) !== 'object' && typeof defaults !== 'undefined') {\n            throw new Error('PostCSS nodes constructor accepts object, not ' + JSON.stringify(defaults));\n        }\n        for (var name in defaults) {\n            this[name] = defaults[name];\n        }\n    }\n\n    /**\n     * Returns a CssSyntaxError instance containing the original position\n     * of the node in the source, showing line and column numbers and also\n     * a small excerpt to facilitate debugging.\n     *\n     * If present, an input source map will be used to get the original position\n     * of the source, even from a previous compilation step\n     * (e.g., from Sass compilation).\n     *\n     * This method produces very useful error messages.\n     *\n     * @param {string} message     - error description\n     * @param {object} [opts]      - options\n     * @param {string} opts.plugin - plugin name that created this error.\n     *                               PostCSS will set it automatically.\n     * @param {string} opts.word   - a word inside a node’s string that should\n     *                               be highlighted as the source of the error\n     * @param {number} opts.index  - an index inside a node’s string that should\n     *                               be highlighted as the source of the error\n     *\n     * @return {CssSyntaxError} error object to throw it\n     *\n     * @example\n     * if ( !variables[name] ) {\n     *   throw decl.error('Unknown variable ' + name, { word: name });\n     *   // CssSyntaxError: postcss-vars:a.sass:4:3: Unknown variable $black\n     *   //   color: $black\n     *   // a\n     *   //          ^\n     *   //   background: white\n     * }\n     */\n\n\n    Node.prototype.error = function error(message) {\n        var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n        if (this.source) {\n            var pos = this.positionBy(opts);\n            return this.source.input.error(message, pos.line, pos.column, opts);\n        } else {\n            return new _cssSyntaxError2.default(message);\n        }\n    };\n\n    /**\n     * This method is provided as a convenience wrapper for {@link Result#warn}.\n     *\n     * @param {Result} result      - the {@link Result} instance\n     *                               that will receive the warning\n     * @param {string} text        - warning message\n     * @param {object} [opts]      - options\n     * @param {string} opts.plugin - plugin name that created this warning.\n     *                               PostCSS will set it automatically.\n     * @param {string} opts.word   - a word inside a node’s string that should\n     *                               be highlighted as the source of the warning\n     * @param {number} opts.index  - an index inside a node’s string that should\n     *                               be highlighted as the source of the warning\n     *\n     * @return {Warning} created warning object\n     *\n     * @example\n     * const plugin = postcss.plugin('postcss-deprecated', () => {\n     *   return (root, result) => {\n     *     root.walkDecls('bad', decl => {\n     *       decl.warn(result, 'Deprecated property bad');\n     *     });\n     *   };\n     * });\n     */\n\n\n    Node.prototype.warn = function warn(result, text, opts) {\n        var data = { node: this };\n        for (var i in opts) {\n            data[i] = opts[i];\n        }return result.warn(text, data);\n    };\n\n    /**\n     * Removes the node from its parent and cleans the parent properties\n     * from the node and its children.\n     *\n     * @example\n     * if ( decl.prop.match(/^-webkit-/) ) {\n     *   decl.remove();\n     * }\n     *\n     * @return {Node} node to make calls chain\n     */\n\n\n    Node.prototype.remove = function remove() {\n        if (this.parent) {\n            this.parent.removeChild(this);\n        }\n        this.parent = undefined;\n        return this;\n    };\n\n    /**\n     * Returns a CSS string representing the node.\n     *\n     * @param {stringifier|syntax} [stringifier] - a syntax to use\n     *                                             in string generation\n     *\n     * @return {string} CSS string of this node\n     *\n     * @example\n     * postcss.rule({ selector: 'a' }).toString() //=> \"a {}\"\n     */\n\n\n    Node.prototype.toString = function toString() {\n        var stringifier = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _stringify2.default;\n\n        if (stringifier.stringify) stringifier = stringifier.stringify;\n        var result = '';\n        stringifier(this, function (i) {\n            result += i;\n        });\n        return result;\n    };\n\n    /**\n     * Returns a clone of the node.\n     *\n     * The resulting cloned node and its (cloned) children will have\n     * a clean parent and code style properties.\n     *\n     * @param {object} [overrides] - new properties to override in the clone.\n     *\n     * @example\n     * const cloned = decl.clone({ prop: '-moz-' + decl.prop });\n     * cloned.raws.before  //=> undefined\n     * cloned.parent       //=> undefined\n     * cloned.toString()   //=> -moz-transform: scale(0)\n     *\n     * @return {Node} clone of the node\n     */\n\n\n    Node.prototype.clone = function clone() {\n        var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n        var cloned = cloneNode(this);\n        for (var name in overrides) {\n            cloned[name] = overrides[name];\n        }\n        return cloned;\n    };\n\n    /**\n     * Shortcut to clone the node and insert the resulting cloned node\n     * before the current node.\n     *\n     * @param {object} [overrides] - new properties to override in the clone.\n     *\n     * @example\n     * decl.cloneBefore({ prop: '-moz-' + decl.prop });\n     *\n     * @return {Node} - new node\n     */\n\n\n    Node.prototype.cloneBefore = function cloneBefore() {\n        var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n        var cloned = this.clone(overrides);\n        this.parent.insertBefore(this, cloned);\n        return cloned;\n    };\n\n    /**\n     * Shortcut to clone the node and insert the resulting cloned node\n     * after the current node.\n     *\n     * @param {object} [overrides] - new properties to override in the clone.\n     *\n     * @return {Node} - new node\n     */\n\n\n    Node.prototype.cloneAfter = function cloneAfter() {\n        var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n        var cloned = this.clone(overrides);\n        this.parent.insertAfter(this, cloned);\n        return cloned;\n    };\n\n    /**\n     * Inserts node(s) before the current node and removes the current node.\n     *\n     * @param {...Node} nodes - node(s) to replace current one\n     *\n     * @example\n     * if ( atrule.name == 'mixin' ) {\n     *   atrule.replaceWith(mixinRules[atrule.params]);\n     * }\n     *\n     * @return {Node} current node to methods chain\n     */\n\n\n    Node.prototype.replaceWith = function replaceWith() {\n        if (this.parent) {\n            for (var _len = arguments.length, nodes = Array(_len), _key = 0; _key < _len; _key++) {\n                nodes[_key] = arguments[_key];\n            }\n\n            for (var _iterator = nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n                var _ref;\n\n                if (_isArray) {\n                    if (_i >= _iterator.length) break;\n                    _ref = _iterator[_i++];\n                } else {\n                    _i = _iterator.next();\n                    if (_i.done) break;\n                    _ref = _i.value;\n                }\n\n                var node = _ref;\n\n                this.parent.insertBefore(this, node);\n            }\n\n            this.remove();\n        }\n\n        return this;\n    };\n\n    Node.prototype.moveTo = function moveTo(newParent) {\n        (0, _warnOnce2.default)('Node#moveTo was deprecated. Use Container#append.');\n        this.cleanRaws(this.root() === newParent.root());\n        this.remove();\n        newParent.append(this);\n        return this;\n    };\n\n    Node.prototype.moveBefore = function moveBefore(otherNode) {\n        (0, _warnOnce2.default)('Node#moveBefore was deprecated. Use Node#before.');\n        this.cleanRaws(this.root() === otherNode.root());\n        this.remove();\n        otherNode.parent.insertBefore(otherNode, this);\n        return this;\n    };\n\n    Node.prototype.moveAfter = function moveAfter(otherNode) {\n        (0, _warnOnce2.default)('Node#moveAfter was deprecated. Use Node#after.');\n        this.cleanRaws(this.root() === otherNode.root());\n        this.remove();\n        otherNode.parent.insertAfter(otherNode, this);\n        return this;\n    };\n\n    /**\n     * Returns the next child of the node’s parent.\n     * Returns `undefined` if the current node is the last child.\n     *\n     * @return {Node|undefined} next node\n     *\n     * @example\n     * if ( comment.text === 'delete next' ) {\n     *   const next = comment.next();\n     *   if ( next ) {\n     *     next.remove();\n     *   }\n     * }\n     */\n\n\n    Node.prototype.next = function next() {\n        var index = this.parent.index(this);\n        return this.parent.nodes[index + 1];\n    };\n\n    /**\n     * Returns the previous child of the node’s parent.\n     * Returns `undefined` if the current node is the first child.\n     *\n     * @return {Node|undefined} previous node\n     *\n     * @example\n     * const annotation = decl.prev();\n     * if ( annotation.type == 'comment' ) {\n     *  readAnnotation(annotation.text);\n     * }\n     */\n\n\n    Node.prototype.prev = function prev() {\n        var index = this.parent.index(this);\n        return this.parent.nodes[index - 1];\n    };\n\n    /**\n     * Insert new node before current node to current node’s parent.\n     *\n     * Just alias for `node.parent.insertBefore(node, add)`.\n     *\n     * @param {Node|object|string|Node[]} add - new node\n     *\n     * @return {Node} this node for methods chain.\n     *\n     * @example\n     * decl.before('content: \"\"');\n     */\n\n\n    Node.prototype.before = function before(add) {\n        this.parent.insertBefore(this, add);\n        return this;\n    };\n\n    /**\n     * Insert new node after current node to current node’s parent.\n     *\n     * Just alias for `node.parent.insertAfter(node, add)`.\n     *\n     * @param {Node|object|string|Node[]} add - new node\n     *\n     * @return {Node} this node for methods chain.\n     *\n     * @example\n     * decl.after('color: black');\n     */\n\n\n    Node.prototype.after = function after(add) {\n        this.parent.insertAfter(this, add);\n        return this;\n    };\n\n    Node.prototype.toJSON = function toJSON() {\n        var fixed = {};\n\n        for (var name in this) {\n            if (!this.hasOwnProperty(name)) continue;\n            if (name === 'parent') continue;\n            var value = this[name];\n\n            if (value instanceof Array) {\n                fixed[name] = value.map(function (i) {\n                    if ((typeof i === 'undefined' ? 'undefined' : _typeof(i)) === 'object' && i.toJSON) {\n                        return i.toJSON();\n                    } else {\n                        return i;\n                    }\n                });\n            } else if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.toJSON) {\n                fixed[name] = value.toJSON();\n            } else {\n                fixed[name] = value;\n            }\n        }\n\n        return fixed;\n    };\n\n    /**\n     * Returns a {@link Node#raws} value. If the node is missing\n     * the code style property (because the node was manually built or cloned),\n     * PostCSS will try to autodetect the code style property by looking\n     * at other nodes in the tree.\n     *\n     * @param {string} prop          - name of code style property\n     * @param {string} [defaultType] - name of default value, it can be missed\n     *                                 if the value is the same as prop\n     *\n     * @example\n     * const root = postcss.parse('a { background: white }');\n     * root.nodes[0].append({ prop: 'color', value: 'black' });\n     * root.nodes[0].nodes[1].raws.before   //=> undefined\n     * root.nodes[0].nodes[1].raw('before') //=> ' '\n     *\n     * @return {string} code style value\n     */\n\n\n    Node.prototype.raw = function raw(prop, defaultType) {\n        var str = new _stringifier2.default();\n        return str.raw(this, prop, defaultType);\n    };\n\n    /**\n     * Finds the Root instance of the node’s tree.\n     *\n     * @example\n     * root.nodes[0].nodes[0].root() === root\n     *\n     * @return {Root} root parent\n     */\n\n\n    Node.prototype.root = function root() {\n        var result = this;\n        while (result.parent) {\n            result = result.parent;\n        }return result;\n    };\n\n    Node.prototype.cleanRaws = function cleanRaws(keepBetween) {\n        delete this.raws.before;\n        delete this.raws.after;\n        if (!keepBetween) delete this.raws.between;\n    };\n\n    Node.prototype.positionInside = function positionInside(index) {\n        var string = this.toString();\n        var column = this.source.start.column;\n        var line = this.source.start.line;\n\n        for (var i = 0; i < index; i++) {\n            if (string[i] === '\\n') {\n                column = 1;\n                line += 1;\n            } else {\n                column += 1;\n            }\n        }\n\n        return { line: line, column: column };\n    };\n\n    Node.prototype.positionBy = function positionBy(opts) {\n        var pos = this.source.start;\n        if (opts.index) {\n            pos = this.positionInside(opts.index);\n        } else if (opts.word) {\n            var index = this.toString().indexOf(opts.word);\n            if (index !== -1) pos = this.positionInside(index);\n        }\n        return pos;\n    };\n\n    /**\n     * @memberof Node#\n     * @member {string} type - String representing the node’s type.\n     *                         Possible values are `root`, `atrule`, `rule`,\n     *                         `decl`, or `comment`.\n     *\n     * @example\n     * postcss.decl({ prop: 'color', value: 'black' }).type //=> 'decl'\n     */\n\n    /**\n     * @memberof Node#\n     * @member {Container} parent - the node’s parent node.\n     *\n     * @example\n     * root.nodes[0].parent == root;\n     */\n\n    /**\n     * @memberof Node#\n     * @member {source} source - the input source of the node\n     *\n     * The property is used in source map generation.\n     *\n     * If you create a node manually (e.g., with `postcss.decl()`),\n     * that node will not have a `source` property and will be absent\n     * from the source map. For this reason, the plugin developer should\n     * consider cloning nodes to create new ones (in which case the new node’s\n     * source will reference the original, cloned node) or setting\n     * the `source` property manually.\n     *\n     * ```js\n     * // Bad\n     * const prefixed = postcss.decl({\n     *   prop: '-moz-' + decl.prop,\n     *   value: decl.value\n     * });\n     *\n     * // Good\n     * const prefixed = decl.clone({ prop: '-moz-' + decl.prop });\n     * ```\n     *\n     * ```js\n     * if ( atrule.name == 'add-link' ) {\n     *   const rule = postcss.rule({ selector: 'a', source: atrule.source });\n     *   atrule.parent.insertBefore(atrule, rule);\n     * }\n     * ```\n     *\n     * @example\n     * decl.source.input.from //=> '/home/ai/a.sass'\n     * decl.source.start      //=> { line: 10, column: 2 }\n     * decl.source.end        //=> { line: 10, column: 12 }\n     */\n\n    /**\n     * @memberof Node#\n     * @member {object} raws - Information to generate byte-to-byte equal\n     *                         node string as it was in the origin input.\n     *\n     * Every parser saves its own properties,\n     * but the default CSS parser uses:\n     *\n     * * `before`: the space symbols before the node. It also stores `*`\n     *   and `_` symbols before the declaration (IE hack).\n     * * `after`: the space symbols after the last child of the node\n     *   to the end of the node.\n     * * `between`: the symbols between the property and value\n     *   for declarations, selector and `{` for rules, or last parameter\n     *   and `{` for at-rules.\n     * * `semicolon`: contains true if the last child has\n     *   an (optional) semicolon.\n     * * `afterName`: the space between the at-rule name and its parameters.\n     * * `left`: the space symbols between `/*` and the comment’s text.\n     * * `right`: the space symbols between the comment’s text\n     *   and <code>*&#47;</code>.\n     * * `important`: the content of the important statement,\n     *   if it is not just `!important`.\n     *\n     * PostCSS cleans selectors, declaration values and at-rule parameters\n     * from comments and extra spaces, but it stores origin content in raws\n     * properties. As such, if you don’t change a declaration’s value,\n     * PostCSS will use the raw value with comments.\n     *\n     * @example\n     * const root = postcss.parse('a {\\n  color:black\\n}')\n     * root.first.first.raws //=> { before: '\\n  ', between: ':' }\n     */\n\n    return Node;\n}();\n\nexports.default = Node;\n\n/**\n * @typedef {object} position\n * @property {number} line   - source line in file\n * @property {number} column - source column in file\n */\n\n/**\n * @typedef {object} source\n * @property {Input} input    - {@link Input} with input file\n * @property {position} start - The starting position of the node’s source\n * @property {position} end   - The ending position of the node’s source\n */\n\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; }; }();\n\nvar _container = __webpack_require__(12);\n\nvar _container2 = _interopRequireDefault(_container);\n\nvar _list = __webpack_require__(140);\n\nvar _list2 = _interopRequireDefault(_list);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * Represents a CSS rule: a selector followed by a declaration block.\n *\n * @extends Container\n *\n * @example\n * const root = postcss.parse('a{}');\n * const rule = root.first;\n * rule.type       //=> 'rule'\n * rule.toString() //=> 'a{}'\n */\nvar Rule = function (_Container) {\n  _inherits(Rule, _Container);\n\n  function Rule(defaults) {\n    _classCallCheck(this, Rule);\n\n    var _this = _possibleConstructorReturn(this, _Container.call(this, defaults));\n\n    _this.type = 'rule';\n    if (!_this.nodes) _this.nodes = [];\n    return _this;\n  }\n\n  /**\n   * An array containing the rule’s individual selectors.\n   * Groups of selectors are split at commas.\n   *\n   * @type {string[]}\n   *\n   * @example\n   * const root = postcss.parse('a, b { }');\n   * const rule = root.first;\n   *\n   * rule.selector  //=> 'a, b'\n   * rule.selectors //=> ['a', 'b']\n   *\n   * rule.selectors = ['a', 'strong'];\n   * rule.selector //=> 'a, strong'\n   */\n\n\n  _createClass(Rule, [{\n    key: 'selectors',\n    get: function get() {\n      return _list2.default.comma(this.selector);\n    },\n    set: function set(values) {\n      var match = this.selector ? this.selector.match(/,\\s*/) : null;\n      var sep = match ? match[0] : ',' + this.raw('between', 'beforeOpen');\n      this.selector = values.join(sep);\n    }\n\n    /**\n     * @memberof Rule#\n     * @member {string} selector - the rule’s full selector represented\n     *                             as a string\n     *\n     * @example\n     * const root = postcss.parse('a, b { }');\n     * const rule = root.first;\n     * rule.selector //=> 'a, b'\n     */\n\n    /**\n     * @memberof Rule#\n     * @member {object} raws - Information to generate byte-to-byte equal\n     *                         node string as it was in the origin input.\n     *\n     * Every parser saves its own properties,\n     * but the default CSS parser uses:\n     *\n     * * `before`: the space symbols before the node. It also stores `*`\n     *   and `_` symbols before the declaration (IE hack).\n     * * `after`: the space symbols after the last child of the node\n     *   to the end of the node.\n     * * `between`: the symbols between the property and value\n     *   for declarations, selector and `{` for rules, or last parameter\n     *   and `{` for at-rules.\n     * * `semicolon`: contains true if the last child has\n     *   an (optional) semicolon.\n     *\n     * PostCSS cleans selectors from comments and extra spaces,\n     * but it stores origin content in raws properties.\n     * As such, if you don’t change a declaration’s value,\n     * PostCSS will use the raw value with comments.\n     *\n     * @example\n     * const root = postcss.parse('a {\\n  color:black\\n}')\n     * root.first.first.raws //=> { before: '', between: ' ', after: '\\n' }\n     */\n\n  }]);\n\n  return Rule;\n}(_container2.default);\n\nexports.default = Rule;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar defaultRaw = {\n    colon: ': ',\n    indent: '    ',\n    beforeDecl: '\\n',\n    beforeRule: '\\n',\n    beforeOpen: ' ',\n    beforeClose: '\\n',\n    beforeComment: '\\n',\n    after: '\\n',\n    emptyBody: '',\n    commentLeft: ' ',\n    commentRight: ' '\n};\n\nfunction capitalize(str) {\n    return str[0].toUpperCase() + str.slice(1);\n}\n\nvar Stringifier = function () {\n    function Stringifier(builder) {\n        _classCallCheck(this, Stringifier);\n\n        this.builder = builder;\n    }\n\n    Stringifier.prototype.stringify = function stringify(node, semicolon) {\n        this[node.type](node, semicolon);\n    };\n\n    Stringifier.prototype.root = function root(node) {\n        this.body(node);\n        if (node.raws.after) this.builder(node.raws.after);\n    };\n\n    Stringifier.prototype.comment = function comment(node) {\n        var left = this.raw(node, 'left', 'commentLeft');\n        var right = this.raw(node, 'right', 'commentRight');\n        this.builder('/*' + left + node.text + right + '*/', node);\n    };\n\n    Stringifier.prototype.decl = function decl(node, semicolon) {\n        var between = this.raw(node, 'between', 'colon');\n        var string = node.prop + between + this.rawValue(node, 'value');\n\n        if (node.important) {\n            string += node.raws.important || ' !important';\n        }\n\n        if (semicolon) string += ';';\n        this.builder(string, node);\n    };\n\n    Stringifier.prototype.rule = function rule(node) {\n        this.block(node, this.rawValue(node, 'selector'));\n        if (node.raws.ownSemicolon) {\n            this.builder(node.raws.ownSemicolon, node, 'end');\n        }\n    };\n\n    Stringifier.prototype.atrule = function atrule(node, semicolon) {\n        var name = '@' + node.name;\n        var params = node.params ? this.rawValue(node, 'params') : '';\n\n        if (typeof node.raws.afterName !== 'undefined') {\n            name += node.raws.afterName;\n        } else if (params) {\n            name += ' ';\n        }\n\n        if (node.nodes) {\n            this.block(node, name + params);\n        } else {\n            var end = (node.raws.between || '') + (semicolon ? ';' : '');\n            this.builder(name + params + end, node);\n        }\n    };\n\n    Stringifier.prototype.body = function body(node) {\n        var last = node.nodes.length - 1;\n        while (last > 0) {\n            if (node.nodes[last].type !== 'comment') break;\n            last -= 1;\n        }\n\n        var semicolon = this.raw(node, 'semicolon');\n        for (var i = 0; i < node.nodes.length; i++) {\n            var child = node.nodes[i];\n            var before = this.raw(child, 'before');\n            if (before) this.builder(before);\n            this.stringify(child, last !== i || semicolon);\n        }\n    };\n\n    Stringifier.prototype.block = function block(node, start) {\n        var between = this.raw(node, 'between', 'beforeOpen');\n        this.builder(start + between + '{', node, 'start');\n\n        var after = void 0;\n        if (node.nodes && node.nodes.length) {\n            this.body(node);\n            after = this.raw(node, 'after');\n        } else {\n            after = this.raw(node, 'after', 'emptyBody');\n        }\n\n        if (after) this.builder(after);\n        this.builder('}', node, 'end');\n    };\n\n    Stringifier.prototype.raw = function raw(node, own, detect) {\n        var value = void 0;\n        if (!detect) detect = own;\n\n        // Already had\n        if (own) {\n            value = node.raws[own];\n            if (typeof value !== 'undefined') return value;\n        }\n\n        var parent = node.parent;\n\n        // Hack for first rule in CSS\n        if (detect === 'before') {\n            if (!parent || parent.type === 'root' && parent.first === node) {\n                return '';\n            }\n        }\n\n        // Floating child without parent\n        if (!parent) return defaultRaw[detect];\n\n        // Detect style by other nodes\n        var root = node.root();\n        if (!root.rawCache) root.rawCache = {};\n        if (typeof root.rawCache[detect] !== 'undefined') {\n            return root.rawCache[detect];\n        }\n\n        if (detect === 'before' || detect === 'after') {\n            return this.beforeAfter(node, detect);\n        } else {\n            var method = 'raw' + capitalize(detect);\n            if (this[method]) {\n                value = this[method](root, node);\n            } else {\n                root.walk(function (i) {\n                    value = i.raws[own];\n                    if (typeof value !== 'undefined') return false;\n                });\n            }\n        }\n\n        if (typeof value === 'undefined') value = defaultRaw[detect];\n\n        root.rawCache[detect] = value;\n        return value;\n    };\n\n    Stringifier.prototype.rawSemicolon = function rawSemicolon(root) {\n        var value = void 0;\n        root.walk(function (i) {\n            if (i.nodes && i.nodes.length && i.last.type === 'decl') {\n                value = i.raws.semicolon;\n                if (typeof value !== 'undefined') return false;\n            }\n        });\n        return value;\n    };\n\n    Stringifier.prototype.rawEmptyBody = function rawEmptyBody(root) {\n        var value = void 0;\n        root.walk(function (i) {\n            if (i.nodes && i.nodes.length === 0) {\n                value = i.raws.after;\n                if (typeof value !== 'undefined') return false;\n            }\n        });\n        return value;\n    };\n\n    Stringifier.prototype.rawIndent = function rawIndent(root) {\n        if (root.raws.indent) return root.raws.indent;\n        var value = void 0;\n        root.walk(function (i) {\n            var p = i.parent;\n            if (p && p !== root && p.parent && p.parent === root) {\n                if (typeof i.raws.before !== 'undefined') {\n                    var parts = i.raws.before.split('\\n');\n                    value = parts[parts.length - 1];\n                    value = value.replace(/[^\\s]/g, '');\n                    return false;\n                }\n            }\n        });\n        return value;\n    };\n\n    Stringifier.prototype.rawBeforeComment = function rawBeforeComment(root, node) {\n        var value = void 0;\n        root.walkComments(function (i) {\n            if (typeof i.raws.before !== 'undefined') {\n                value = i.raws.before;\n                if (value.indexOf('\\n') !== -1) {\n                    value = value.replace(/[^\\n]+$/, '');\n                }\n                return false;\n            }\n        });\n        if (typeof value === 'undefined') {\n            value = this.raw(node, null, 'beforeDecl');\n        }\n        return value;\n    };\n\n    Stringifier.prototype.rawBeforeDecl = function rawBeforeDecl(root, node) {\n        var value = void 0;\n        root.walkDecls(function (i) {\n            if (typeof i.raws.before !== 'undefined') {\n                value = i.raws.before;\n                if (value.indexOf('\\n') !== -1) {\n                    value = value.replace(/[^\\n]+$/, '');\n                }\n                return false;\n            }\n        });\n        if (typeof value === 'undefined') {\n            value = this.raw(node, null, 'beforeRule');\n        }\n        return value;\n    };\n\n    Stringifier.prototype.rawBeforeRule = function rawBeforeRule(root) {\n        var value = void 0;\n        root.walk(function (i) {\n            if (i.nodes && (i.parent !== root || root.first !== i)) {\n                if (typeof i.raws.before !== 'undefined') {\n                    value = i.raws.before;\n                    if (value.indexOf('\\n') !== -1) {\n                        value = value.replace(/[^\\n]+$/, '');\n                    }\n                    return false;\n                }\n            }\n        });\n        return value;\n    };\n\n    Stringifier.prototype.rawBeforeClose = function rawBeforeClose(root) {\n        var value = void 0;\n        root.walk(function (i) {\n            if (i.nodes && i.nodes.length > 0) {\n                if (typeof i.raws.after !== 'undefined') {\n                    value = i.raws.after;\n                    if (value.indexOf('\\n') !== -1) {\n                        value = value.replace(/[^\\n]+$/, '');\n                    }\n                    return false;\n                }\n            }\n        });\n        return value;\n    };\n\n    Stringifier.prototype.rawBeforeOpen = function rawBeforeOpen(root) {\n        var value = void 0;\n        root.walk(function (i) {\n            if (i.type !== 'decl') {\n                value = i.raws.between;\n                if (typeof value !== 'undefined') return false;\n            }\n        });\n        return value;\n    };\n\n    Stringifier.prototype.rawColon = function rawColon(root) {\n        var value = void 0;\n        root.walkDecls(function (i) {\n            if (typeof i.raws.between !== 'undefined') {\n                value = i.raws.between.replace(/[^\\s:]/g, '');\n                return false;\n            }\n        });\n        return value;\n    };\n\n    Stringifier.prototype.beforeAfter = function beforeAfter(node, detect) {\n        var value = void 0;\n        if (node.type === 'decl') {\n            value = this.raw(node, null, 'beforeDecl');\n        } else if (node.type === 'comment') {\n            value = this.raw(node, null, 'beforeComment');\n        } else if (detect === 'before') {\n            value = this.raw(node, null, 'beforeRule');\n        } else {\n            value = this.raw(node, null, 'beforeClose');\n        }\n\n        var buf = node.parent;\n        var depth = 0;\n        while (buf && buf.type !== 'root') {\n            depth += 1;\n            buf = buf.parent;\n        }\n\n        if (value.indexOf('\\n') !== -1) {\n            var indent = this.raw(node, null, 'indent');\n            if (indent.length) {\n                for (var step = 0; step < depth; step++) {\n                    value += indent;\n                }\n            }\n        }\n\n        return value;\n    };\n\n    Stringifier.prototype.rawValue = function rawValue(node, prop) {\n        var value = node[prop];\n        var raw = node.raws[prop];\n        if (raw && raw.value === value) {\n            return raw.raw;\n        } else {\n            return value;\n        }\n    };\n\n    return Stringifier;\n}();\n\nexports.default = Stringifier;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nmodule.exports = function () {\n\treturn /[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g;\n};\n\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(module) {\n\nfunction assembleStyles () {\n\tvar styles = {\n\t\tmodifiers: {\n\t\t\treset: [0, 0],\n\t\t\tbold: [1, 22], // 21 isn't widely supported and 22 does the same thing\n\t\t\tdim: [2, 22],\n\t\t\titalic: [3, 23],\n\t\t\tunderline: [4, 24],\n\t\t\tinverse: [7, 27],\n\t\t\thidden: [8, 28],\n\t\t\tstrikethrough: [9, 29]\n\t\t},\n\t\tcolors: {\n\t\t\tblack: [30, 39],\n\t\t\tred: [31, 39],\n\t\t\tgreen: [32, 39],\n\t\t\tyellow: [33, 39],\n\t\t\tblue: [34, 39],\n\t\t\tmagenta: [35, 39],\n\t\t\tcyan: [36, 39],\n\t\t\twhite: [37, 39],\n\t\t\tgray: [90, 39]\n\t\t},\n\t\tbgColors: {\n\t\t\tbgBlack: [40, 49],\n\t\t\tbgRed: [41, 49],\n\t\t\tbgGreen: [42, 49],\n\t\t\tbgYellow: [43, 49],\n\t\t\tbgBlue: [44, 49],\n\t\t\tbgMagenta: [45, 49],\n\t\t\tbgCyan: [46, 49],\n\t\t\tbgWhite: [47, 49]\n\t\t}\n\t};\n\n\t// fix humans\n\tstyles.colors.grey = styles.colors.gray;\n\n\tObject.keys(styles).forEach(function (groupName) {\n\t\tvar group = styles[groupName];\n\n\t\tObject.keys(group).forEach(function (styleName) {\n\t\t\tvar style = group[styleName];\n\n\t\t\tstyles[styleName] = group[styleName] = {\n\t\t\t\topen: '\\u001b[' + style[0] + 'm',\n\t\t\t\tclose: '\\u001b[' + style[1] + 'm'\n\t\t\t};\n\t\t});\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false\n\t\t});\n\t});\n\n\treturn styles;\n}\n\nObject.defineProperty(module, 'exports', {\n\tenumerable: true,\n\tget: assembleStyles\n});\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(159)(module)));\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar matchOperatorsRe = /[|\\\\{}()[\\]^$+*?.]/g;\n\nmodule.exports = function (str) {\n\tif (typeof str !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\treturn str.replace(matchOperatorsRe, '\\\\$&');\n};\n\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports) {\n\nmodule.exports = function flatten(list, depth) {\n  depth = (typeof depth == 'number') ? depth : Infinity;\n\n  if (!depth) {\n    if (Array.isArray(list)) {\n      return list.map(function(i) { return i; });\n    }\n    return list;\n  }\n\n  return _flatten(list, 1);\n\n  function _flatten(list, d) {\n    return list.reduce(function (acc, item) {\n      if (Array.isArray(item) && d < depth) {\n        return acc.concat(_flatten(item, d + 1));\n      }\n      else {\n        return acc.concat(item);\n      }\n    }, []);\n  }\n};\n\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ansiRegex = __webpack_require__(29);\nvar re = new RegExp(ansiRegex().source); // remove the `g` flag\nmodule.exports = re.test.bind(re);\n\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (ary, item) {\n  var i = -1, indexes = [];\n  while((i = ary.indexOf(item, i + 1)) !== -1)\n    indexes.push(i);\n  return indexes\n};\n\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\n * $Id: base64.js,v 2.15 2014/04/05 12:58:57 dankogai Exp dankogai $\n *\n *  Licensed under the MIT license.\n *    http://opensource.org/licenses/mit-license\n *\n *  References:\n *    http://en.wikipedia.org/wiki/Base64\n */\n\n(function(global) {\n    'use strict';\n    // existing version for noConflict()\n    var _Base64 = global.Base64;\n    var version = \"2.1.9\";\n    // if node.js, we use Buffer\n    var buffer;\n    if (typeof module !== 'undefined' && module.exports) {\n        try {\n            buffer = __webpack_require__(14).Buffer;\n        } catch (err) {}\n    }\n    // constants\n    var b64chars\n        = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n    var b64tab = function(bin) {\n        var t = {};\n        for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i;\n        return t;\n    }(b64chars);\n    var fromCharCode = String.fromCharCode;\n    // encoder stuff\n    var cb_utob = function(c) {\n        if (c.length < 2) {\n            var cc = c.charCodeAt(0);\n            return cc < 0x80 ? c\n                : cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6))\n                                + fromCharCode(0x80 | (cc & 0x3f)))\n                : (fromCharCode(0xe0 | ((cc >>> 12) & 0x0f))\n                   + fromCharCode(0x80 | ((cc >>>  6) & 0x3f))\n                   + fromCharCode(0x80 | ( cc         & 0x3f)));\n        } else {\n            var cc = 0x10000\n                + (c.charCodeAt(0) - 0xD800) * 0x400\n                + (c.charCodeAt(1) - 0xDC00);\n            return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07))\n                    + fromCharCode(0x80 | ((cc >>> 12) & 0x3f))\n                    + fromCharCode(0x80 | ((cc >>>  6) & 0x3f))\n                    + fromCharCode(0x80 | ( cc         & 0x3f)));\n        }\n    };\n    var re_utob = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFFF]|[^\\x00-\\x7F]/g;\n    var utob = function(u) {\n        return u.replace(re_utob, cb_utob);\n    };\n    var cb_encode = function(ccc) {\n        var padlen = [0, 2, 1][ccc.length % 3],\n        ord = ccc.charCodeAt(0) << 16\n            | ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8)\n            | ((ccc.length > 2 ? ccc.charCodeAt(2) : 0)),\n        chars = [\n            b64chars.charAt( ord >>> 18),\n            b64chars.charAt((ord >>> 12) & 63),\n            padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n            padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n        ];\n        return chars.join('');\n    };\n    var btoa = global.btoa ? function(b) {\n        return global.btoa(b);\n    } : function(b) {\n        return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n    };\n    var _encode = buffer ? function (u) {\n        return (u.constructor === buffer.constructor ? u : new buffer(u))\n        .toString('base64')\n    }\n    : function (u) { return btoa(utob(u)) };\n    var encode = function(u, urisafe) {\n        return !urisafe\n            ? _encode(String(u))\n            : _encode(String(u)).replace(/[+\\/]/g, function(m0) {\n                return m0 == '+' ? '-' : '_';\n            }).replace(/=/g, '');\n    };\n    var encodeURI = function(u) { return encode(u, true) };\n    // decoder stuff\n    var re_btou = new RegExp([\n        '[\\xC0-\\xDF][\\x80-\\xBF]',\n        '[\\xE0-\\xEF][\\x80-\\xBF]{2}',\n        '[\\xF0-\\xF7][\\x80-\\xBF]{3}'\n    ].join('|'), 'g');\n    var cb_btou = function(cccc) {\n        switch(cccc.length) {\n        case 4:\n            var cp = ((0x07 & cccc.charCodeAt(0)) << 18)\n                |    ((0x3f & cccc.charCodeAt(1)) << 12)\n                |    ((0x3f & cccc.charCodeAt(2)) <<  6)\n                |     (0x3f & cccc.charCodeAt(3)),\n            offset = cp - 0x10000;\n            return (fromCharCode((offset  >>> 10) + 0xD800)\n                    + fromCharCode((offset & 0x3FF) + 0xDC00));\n        case 3:\n            return fromCharCode(\n                ((0x0f & cccc.charCodeAt(0)) << 12)\n                    | ((0x3f & cccc.charCodeAt(1)) << 6)\n                    |  (0x3f & cccc.charCodeAt(2))\n            );\n        default:\n            return  fromCharCode(\n                ((0x1f & cccc.charCodeAt(0)) << 6)\n                    |  (0x3f & cccc.charCodeAt(1))\n            );\n        }\n    };\n    var btou = function(b) {\n        return b.replace(re_btou, cb_btou);\n    };\n    var cb_decode = function(cccc) {\n        var len = cccc.length,\n        padlen = len % 4,\n        n = (len > 0 ? b64tab[cccc.charAt(0)] << 18 : 0)\n            | (len > 1 ? b64tab[cccc.charAt(1)] << 12 : 0)\n            | (len > 2 ? b64tab[cccc.charAt(2)] <<  6 : 0)\n            | (len > 3 ? b64tab[cccc.charAt(3)]       : 0),\n        chars = [\n            fromCharCode( n >>> 16),\n            fromCharCode((n >>>  8) & 0xff),\n            fromCharCode( n         & 0xff)\n        ];\n        chars.length -= [0, 0, 2, 1][padlen];\n        return chars.join('');\n    };\n    var atob = global.atob ? function(a) {\n        return global.atob(a);\n    } : function(a){\n        return a.replace(/[\\s\\S]{1,4}/g, cb_decode);\n    };\n    var _decode = buffer ? function(a) {\n        return (a.constructor === buffer.constructor\n                ? a : new buffer(a, 'base64')).toString();\n    }\n    : function(a) { return btou(atob(a)) };\n    var decode = function(a){\n        return _decode(\n            String(a).replace(/[-_]/g, function(m0) { return m0 == '-' ? '+' : '/' })\n                .replace(/[^A-Za-z0-9\\+\\/]/g, '')\n        );\n    };\n    var noConflict = function() {\n        var Base64 = global.Base64;\n        global.Base64 = _Base64;\n        return Base64;\n    };\n    // export Base64\n    global.Base64 = {\n        VERSION: version,\n        atob: atob,\n        btoa: btoa,\n        fromBase64: decode,\n        toBase64: encode,\n        utob: utob,\n        encode: encode,\n        encodeURI: encodeURI,\n        btou: btou,\n        decode: decode,\n        noConflict: noConflict\n    };\n    // if ES5 is available, make Base64.extendString() available\n    if (typeof Object.defineProperty === 'function') {\n        var noEnum = function(v){\n            return {value:v,enumerable:false,writable:true,configurable:true};\n        };\n        global.Base64.extendString = function () {\n            Object.defineProperty(\n                String.prototype, 'fromBase64', noEnum(function () {\n                    return decode(this)\n                }));\n            Object.defineProperty(\n                String.prototype, 'toBase64', noEnum(function (urisafe) {\n                    return encode(this, urisafe)\n                }));\n            Object.defineProperty(\n                String.prototype, 'toBase64URI', noEnum(function () {\n                    return encode(this, true)\n                }));\n        };\n    }\n    // that's it!\n    if (global['Meteor']) {\n       Base64 = global.Base64; // for normal export in Meteor.js\n    }\n})(this);\n\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; }; }();\n\nvar _supportsColor = __webpack_require__(123);\n\nvar _supportsColor2 = _interopRequireDefault(_supportsColor);\n\nvar _chalk = __webpack_require__(44);\n\nvar _chalk2 = _interopRequireDefault(_chalk);\n\nvar _terminalHighlight = __webpack_require__(120);\n\nvar _terminalHighlight2 = _interopRequireDefault(_terminalHighlight);\n\nvar _warnOnce = __webpack_require__(3);\n\nvar _warnOnce2 = _interopRequireDefault(_warnOnce);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * The CSS parser throws this error for broken CSS.\n *\n * Custom parsers can throw this error for broken custom syntax using\n * the {@link Node#error} method.\n *\n * PostCSS will use the input source map to detect the original error location.\n * If you wrote a Sass file, compiled it to CSS and then parsed it with PostCSS,\n * PostCSS will show the original position in the Sass file.\n *\n * If you need the position in the PostCSS input\n * (e.g., to debug the previous compiler), use `error.input.file`.\n *\n * @example\n * // Catching and checking syntax error\n * try {\n *   postcss.parse('a{')\n * } catch (error) {\n *   if ( error.name === 'CssSyntaxError' ) {\n *     error //=> CssSyntaxError\n *   }\n * }\n *\n * @example\n * // Raising error from plugin\n * throw node.error('Unknown variable', { plugin: 'postcss-vars' });\n */\nvar CssSyntaxError = function () {\n\n    /**\n     * @param {string} message  - error message\n     * @param {number} [line]   - source line of the error\n     * @param {number} [column] - source column of the error\n     * @param {string} [source] - source code of the broken file\n     * @param {string} [file]   - absolute path to the broken file\n     * @param {string} [plugin] - PostCSS plugin name, if error came from plugin\n     */\n    function CssSyntaxError(message, line, column, source, file, plugin) {\n        _classCallCheck(this, CssSyntaxError);\n\n        /**\n         * @member {string} - Always equal to `'CssSyntaxError'`. You should\n         *                    always check error type\n         *                    by `error.name === 'CssSyntaxError'` instead of\n         *                    `error instanceof CssSyntaxError`, because\n         *                    npm could have several PostCSS versions.\n         *\n         * @example\n         * if ( error.name === 'CssSyntaxError' ) {\n         *   error //=> CssSyntaxError\n         * }\n         */\n        this.name = 'CssSyntaxError';\n        /**\n         * @member {string} - Error message.\n         *\n         * @example\n         * error.message //=> 'Unclosed block'\n         */\n        this.reason = message;\n\n        if (file) {\n            /**\n             * @member {string} - Absolute path to the broken file.\n             *\n             * @example\n             * error.file       //=> 'a.sass'\n             * error.input.file //=> 'a.css'\n             */\n            this.file = file;\n        }\n        if (source) {\n            /**\n             * @member {string} - Source code of the broken file.\n             *\n             * @example\n             * error.source       //=> 'a { b {} }'\n             * error.input.column //=> 'a b { }'\n             */\n            this.source = source;\n        }\n        if (plugin) {\n            /**\n             * @member {string} - Plugin name, if error came from plugin.\n             *\n             * @example\n             * error.plugin //=> 'postcss-vars'\n             */\n            this.plugin = plugin;\n        }\n        if (typeof line !== 'undefined' && typeof column !== 'undefined') {\n            /**\n             * @member {number} - Source line of the error.\n             *\n             * @example\n             * error.line       //=> 2\n             * error.input.line //=> 4\n             */\n            this.line = line;\n            /**\n             * @member {number} - Source column of the error.\n             *\n             * @example\n             * error.column       //=> 1\n             * error.input.column //=> 4\n             */\n            this.column = column;\n        }\n\n        this.setMessage();\n\n        if (Error.captureStackTrace) {\n            Error.captureStackTrace(this, CssSyntaxError);\n        }\n    }\n\n    CssSyntaxError.prototype.setMessage = function setMessage() {\n        /**\n         * @member {string} - Full error text in the GNU error format\n         *                    with plugin, file, line and column.\n         *\n         * @example\n         * error.message //=> 'a.css:1:1: Unclosed block'\n         */\n        this.message = this.plugin ? this.plugin + ': ' : '';\n        this.message += this.file ? this.file : '<css input>';\n        if (typeof this.line !== 'undefined') {\n            this.message += ':' + this.line + ':' + this.column;\n        }\n        this.message += ': ' + this.reason;\n    };\n\n    /**\n     * Returns a few lines of CSS source that caused the error.\n     *\n     * If the CSS has an input source map without `sourceContent`,\n     * this method will return an empty string.\n     *\n     * @param {boolean} [color] whether arrow will be colored red by terminal\n     *                          color codes. By default, PostCSS will detect\n     *                          color support by `process.stdout.isTTY`\n     *                          and `process.env.NODE_DISABLE_COLORS`.\n     *\n     * @example\n     * error.showSourceCode() //=> \"  4 | }\n     *                        //      5 | a {\n     *                        //    > 6 |   bad\n     *                        //        |   ^\n     *                        //      7 | }\n     *                        //      8 | b {\"\n     *\n     * @return {string} few lines of CSS source that caused the error\n     */\n\n\n    CssSyntaxError.prototype.showSourceCode = function showSourceCode(color) {\n        var _this = this;\n\n        if (!this.source) return '';\n\n        var css = this.source;\n        if (typeof color === 'undefined') color = _supportsColor2.default;\n        if (color) css = (0, _terminalHighlight2.default)(css);\n\n        var lines = css.split(/\\r?\\n/);\n        var start = Math.max(this.line - 3, 0);\n        var end = Math.min(this.line + 2, lines.length);\n\n        var maxWidth = String(end).length;\n        var colors = new _chalk2.default.constructor({ enabled: true });\n\n        function mark(text) {\n            if (color) {\n                return colors.red.bold(text);\n            } else {\n                return text;\n            }\n        }\n        function aside(text) {\n            if (color) {\n                return colors.gray(text);\n            } else {\n                return text;\n            }\n        }\n\n        return lines.slice(start, end).map(function (line, index) {\n            var number = start + 1 + index;\n            var gutter = ' ' + (' ' + number).slice(-maxWidth) + ' | ';\n            if (number === _this.line) {\n                var spacing = aside(gutter.replace(/\\d/g, ' ')) + line.slice(0, _this.column - 1).replace(/[^\\t]/g, ' ');\n                return mark('>') + aside(gutter) + line + '\\n ' + spacing + mark('^');\n            } else {\n                return ' ' + aside(gutter) + line;\n            }\n        }).join('\\n');\n    };\n\n    /**\n     * Returns error position, message and source code of the broken part.\n     *\n     * @example\n     * error.toString() //=> \"CssSyntaxError: app.css:1:1: Unclosed block\n     *                  //    > 1 | a {\n     *                  //        | ^\"\n     *\n     * @return {string} error position, message and source code\n     */\n\n\n    CssSyntaxError.prototype.toString = function toString() {\n        var code = this.showSourceCode();\n        if (code) {\n            code = '\\n\\n' + code + '\\n';\n        }\n        return this.name + ': ' + this.message + code;\n    };\n\n    _createClass(CssSyntaxError, [{\n        key: 'generated',\n        get: function get() {\n            (0, _warnOnce2.default)('CssSyntaxError#generated is deprecated. Use input instead.');\n            return this.input;\n        }\n\n        /**\n         * @memberof CssSyntaxError#\n         * @member {Input} input - Input object with PostCSS internal information\n         *                         about input file. If input has source map\n         *                         from previous tool, PostCSS will use origin\n         *                         (for example, Sass) source. You can use this\n         *                         object to get PostCSS input source.\n         *\n         * @example\n         * error.input.file //=> 'a.css'\n         * error.file       //=> 'a.sass'\n         */\n\n    }]);\n\n    return CssSyntaxError;\n}();\n\nexports.default = CssSyntaxError;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; }; }();\n\nvar _warnOnce = __webpack_require__(3);\n\nvar _warnOnce2 = _interopRequireDefault(_warnOnce);\n\nvar _node = __webpack_require__(20);\n\nvar _node2 = _interopRequireDefault(_node);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * Represents a CSS declaration.\n *\n * @extends Node\n *\n * @example\n * const root = postcss.parse('a { color: black }');\n * const decl = root.first.first;\n * decl.type       //=> 'decl'\n * decl.toString() //=> ' color: black'\n */\nvar Declaration = function (_Node) {\n    _inherits(Declaration, _Node);\n\n    function Declaration(defaults) {\n        _classCallCheck(this, Declaration);\n\n        var _this = _possibleConstructorReturn(this, _Node.call(this, defaults));\n\n        _this.type = 'decl';\n        return _this;\n    }\n\n    _createClass(Declaration, [{\n        key: '_value',\n        get: function get() {\n            (0, _warnOnce2.default)('Node#_value was deprecated. Use Node#raws.value');\n            return this.raws.value;\n        },\n        set: function set(val) {\n            (0, _warnOnce2.default)('Node#_value was deprecated. Use Node#raws.value');\n            this.raws.value = val;\n        }\n    }, {\n        key: '_important',\n        get: function get() {\n            (0, _warnOnce2.default)('Node#_important was deprecated. Use Node#raws.important');\n            return this.raws.important;\n        },\n        set: function set(val) {\n            (0, _warnOnce2.default)('Node#_important was deprecated. Use Node#raws.important');\n            this.raws.important = val;\n        }\n\n        /**\n         * @memberof Declaration#\n         * @member {string} prop - the declaration’s property name\n         *\n         * @example\n         * const root = postcss.parse('a { color: black }');\n         * const decl = root.first.first;\n         * decl.prop //=> 'color'\n         */\n\n        /**\n         * @memberof Declaration#\n         * @member {string} value - the declaration’s value\n         *\n         * @example\n         * const root = postcss.parse('a { color: black }');\n         * const decl = root.first.first;\n         * decl.value //=> 'black'\n         */\n\n        /**\n         * @memberof Declaration#\n         * @member {boolean} important - `true` if the declaration\n         *                               has an !important annotation.\n         *\n         * @example\n         * const root = postcss.parse('a { color: black !important; color: red }');\n         * root.first.first.important //=> true\n         * root.first.last.important  //=> undefined\n         */\n\n        /**\n         * @memberof Declaration#\n         * @member {object} raws - Information to generate byte-to-byte equal\n         *                         node string as it was in the origin input.\n         *\n         * Every parser saves its own properties,\n         * but the default CSS parser uses:\n         *\n         * * `before`: the space symbols before the node. It also stores `*`\n         *   and `_` symbols before the declaration (IE hack).\n         * * `between`: the symbols between the property and value\n         *   for declarations.\n         * * `important`: the content of the important statement,\n         *   if it is not just `!important`.\n         *\n         * PostCSS cleans declaration from comments and extra spaces,\n         * but it stores origin content in raws properties.\n         * As such, if you don’t change a declaration’s value,\n         * PostCSS will use the raw value with comments.\n         *\n         * @example\n         * const root = postcss.parse('a {\\n  color:black\\n}')\n         * root.first.first.raws //=> { before: '\\n  ', between: ':' }\n         */\n\n    }]);\n\n    return Declaration;\n}(_node2.default);\n\nexports.default = Declaration;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; }; }();\n\nvar _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; };\n\nvar _mapGenerator = __webpack_require__(116);\n\nvar _mapGenerator2 = _interopRequireDefault(_mapGenerator);\n\nvar _stringify2 = __webpack_require__(42);\n\nvar _stringify3 = _interopRequireDefault(_stringify2);\n\nvar _warnOnce = __webpack_require__(3);\n\nvar _warnOnce2 = _interopRequireDefault(_warnOnce);\n\nvar _result = __webpack_require__(119);\n\nvar _result2 = _interopRequireDefault(_result);\n\nvar _parse = __webpack_require__(39);\n\nvar _parse2 = _interopRequireDefault(_parse);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction isPromise(obj) {\n    return (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && typeof obj.then === 'function';\n}\n\n/**\n * A Promise proxy for the result of PostCSS transformations.\n *\n * A `LazyResult` instance is returned by {@link Processor#process}.\n *\n * @example\n * const lazy = postcss([cssnext]).process(css);\n */\n\nvar LazyResult = function () {\n    function LazyResult(processor, css, opts) {\n        _classCallCheck(this, LazyResult);\n\n        this.stringified = false;\n        this.processed = false;\n\n        var root = void 0;\n        if ((typeof css === 'undefined' ? 'undefined' : _typeof(css)) === 'object' && css.type === 'root') {\n            root = css;\n        } else if (css instanceof LazyResult || css instanceof _result2.default) {\n            root = css.root;\n            if (css.map) {\n                if (typeof opts.map === 'undefined') opts.map = {};\n                if (!opts.map.inline) opts.map.inline = false;\n                opts.map.prev = css.map;\n            }\n        } else {\n            var parser = _parse2.default;\n            if (opts.syntax) parser = opts.syntax.parse;\n            if (opts.parser) parser = opts.parser;\n            if (parser.parse) parser = parser.parse;\n\n            try {\n                root = parser(css, opts);\n            } catch (error) {\n                this.error = error;\n            }\n        }\n\n        this.result = new _result2.default(processor, root, opts);\n    }\n\n    /**\n     * Returns a {@link Processor} instance, which will be used\n     * for CSS transformations.\n     * @type {Processor}\n     */\n\n\n    /**\n     * Processes input CSS through synchronous plugins\n     * and calls {@link Result#warnings()}.\n     *\n     * @return {Warning[]} warnings from plugins\n     */\n    LazyResult.prototype.warnings = function warnings() {\n        return this.sync().warnings();\n    };\n\n    /**\n     * Alias for the {@link LazyResult#css} property.\n     *\n     * @example\n     * lazy + '' === lazy.css;\n     *\n     * @return {string} output CSS\n     */\n\n\n    LazyResult.prototype.toString = function toString() {\n        return this.css;\n    };\n\n    /**\n     * Processes input CSS through synchronous and asynchronous plugins\n     * and calls `onFulfilled` with a Result instance. If a plugin throws\n     * an error, the `onRejected` callback will be executed.\n     *\n     * It implements standard Promise API.\n     *\n     * @param {onFulfilled} onFulfilled - callback will be executed\n     *                                    when all plugins will finish work\n     * @param {onRejected}  onRejected  - callback will be executed on any error\n     *\n     * @return {Promise} Promise API to make queue\n     *\n     * @example\n     * postcss([cssnext]).process(css).then(result => {\n     *   console.log(result.css);\n     * });\n     */\n\n\n    LazyResult.prototype.then = function then(onFulfilled, onRejected) {\n        return this.async().then(onFulfilled, onRejected);\n    };\n\n    /**\n     * Processes input CSS through synchronous and asynchronous plugins\n     * and calls onRejected for each error thrown in any plugin.\n     *\n     * It implements standard Promise API.\n     *\n     * @param {onRejected} onRejected - callback will be executed on any error\n     *\n     * @return {Promise} Promise API to make queue\n     *\n     * @example\n     * postcss([cssnext]).process(css).then(result => {\n     *   console.log(result.css);\n     * }).catch(error => {\n     *   console.error(error);\n     * });\n     */\n\n\n    LazyResult.prototype.catch = function _catch(onRejected) {\n        return this.async().catch(onRejected);\n    };\n\n    LazyResult.prototype.handleError = function handleError(error, plugin) {\n        try {\n            this.error = error;\n            if (error.name === 'CssSyntaxError' && !error.plugin) {\n                error.plugin = plugin.postcssPlugin;\n                error.setMessage();\n            } else if (plugin.postcssVersion) {\n                var pluginName = plugin.postcssPlugin;\n                var pluginVer = plugin.postcssVersion;\n                var runtimeVer = this.result.processor.version;\n                var a = pluginVer.split('.');\n                var b = runtimeVer.split('.');\n\n                if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {\n                    (0, _warnOnce2.default)('Your current PostCSS version ' + 'is ' + runtimeVer + ', but ' + pluginName + ' ' + 'uses ' + pluginVer + '. Perhaps this is ' + 'the source of the error below.');\n                }\n            }\n        } catch (err) {\n            if (console && console.error) console.error(err);\n        }\n    };\n\n    LazyResult.prototype.asyncTick = function asyncTick(resolve, reject) {\n        var _this = this;\n\n        if (this.plugin >= this.processor.plugins.length) {\n            this.processed = true;\n            return resolve();\n        }\n\n        try {\n            var plugin = this.processor.plugins[this.plugin];\n            var promise = this.run(plugin);\n            this.plugin += 1;\n\n            if (isPromise(promise)) {\n                promise.then(function () {\n                    _this.asyncTick(resolve, reject);\n                }).catch(function (error) {\n                    _this.handleError(error, plugin);\n                    _this.processed = true;\n                    reject(error);\n                });\n            } else {\n                this.asyncTick(resolve, reject);\n            }\n        } catch (error) {\n            this.processed = true;\n            reject(error);\n        }\n    };\n\n    LazyResult.prototype.async = function async() {\n        var _this2 = this;\n\n        if (this.processed) {\n            return new Promise(function (resolve, reject) {\n                if (_this2.error) {\n                    reject(_this2.error);\n                } else {\n                    resolve(_this2.stringify());\n                }\n            });\n        }\n        if (this.processing) {\n            return this.processing;\n        }\n\n        this.processing = new Promise(function (resolve, reject) {\n            if (_this2.error) return reject(_this2.error);\n            _this2.plugin = 0;\n            _this2.asyncTick(resolve, reject);\n        }).then(function () {\n            _this2.processed = true;\n            return _this2.stringify();\n        });\n\n        return this.processing;\n    };\n\n    LazyResult.prototype.sync = function sync() {\n        if (this.processed) return this.result;\n        this.processed = true;\n\n        if (this.processing) {\n            throw new Error('Use process(css).then(cb) to work with async plugins');\n        }\n\n        if (this.error) throw this.error;\n\n        for (var _iterator = this.result.processor.plugins, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n            var _ref;\n\n            if (_isArray) {\n                if (_i >= _iterator.length) break;\n                _ref = _iterator[_i++];\n            } else {\n                _i = _iterator.next();\n                if (_i.done) break;\n                _ref = _i.value;\n            }\n\n            var plugin = _ref;\n\n            var promise = this.run(plugin);\n            if (isPromise(promise)) {\n                throw new Error('Use process(css).then(cb) to work with async plugins');\n            }\n        }\n\n        return this.result;\n    };\n\n    LazyResult.prototype.run = function run(plugin) {\n        this.result.lastPlugin = plugin;\n\n        try {\n            return plugin(this.result.root, this.result);\n        } catch (error) {\n            this.handleError(error, plugin);\n            throw error;\n        }\n    };\n\n    LazyResult.prototype.stringify = function stringify() {\n        if (this.stringified) return this.result;\n        this.stringified = true;\n\n        this.sync();\n\n        var opts = this.result.opts;\n        var str = _stringify3.default;\n        if (opts.syntax) str = opts.syntax.stringify;\n        if (opts.stringifier) str = opts.stringifier;\n        if (str.stringify) str = str.stringify;\n\n        var map = new _mapGenerator2.default(str, this.result.root, this.result.opts);\n        var data = map.generate();\n        this.result.css = data[0];\n        this.result.map = data[1];\n\n        return this.result;\n    };\n\n    _createClass(LazyResult, [{\n        key: 'processor',\n        get: function get() {\n            return this.result.processor;\n        }\n\n        /**\n         * Options from the {@link Processor#process} call.\n         * @type {processOptions}\n         */\n\n    }, {\n        key: 'opts',\n        get: function get() {\n            return this.result.opts;\n        }\n\n        /**\n         * Processes input CSS through synchronous plugins, converts `Root`\n         * to a CSS string and returns {@link Result#css}.\n         *\n         * This property will only work with synchronous plugins.\n         * If the processor contains any asynchronous plugins\n         * it will throw an error. This is why this method is only\n         * for debug purpose, you should always use {@link LazyResult#then}.\n         *\n         * @type {string}\n         * @see Result#css\n         */\n\n    }, {\n        key: 'css',\n        get: function get() {\n            return this.stringify().css;\n        }\n\n        /**\n         * An alias for the `css` property. Use it with syntaxes\n         * that generate non-CSS output.\n         *\n         * This property will only work with synchronous plugins.\n         * If the processor contains any asynchronous plugins\n         * it will throw an error. This is why this method is only\n         * for debug purpose, you should always use {@link LazyResult#then}.\n         *\n         * @type {string}\n         * @see Result#content\n         */\n\n    }, {\n        key: 'content',\n        get: function get() {\n            return this.stringify().content;\n        }\n\n        /**\n         * Processes input CSS through synchronous plugins\n         * and returns {@link Result#map}.\n         *\n         * This property will only work with synchronous plugins.\n         * If the processor contains any asynchronous plugins\n         * it will throw an error. This is why this method is only\n         * for debug purpose, you should always use {@link LazyResult#then}.\n         *\n         * @type {SourceMapGenerator}\n         * @see Result#map\n         */\n\n    }, {\n        key: 'map',\n        get: function get() {\n            return this.stringify().map;\n        }\n\n        /**\n         * Processes input CSS through synchronous plugins\n         * and returns {@link Result#root}.\n         *\n         * This property will only work with synchronous plugins. If the processor\n         * contains any asynchronous plugins it will throw an error.\n         *\n         * This is why this method is only for debug purpose,\n         * you should always use {@link LazyResult#then}.\n         *\n         * @type {Root}\n         * @see Result#root\n         */\n\n    }, {\n        key: 'root',\n        get: function get() {\n            return this.sync().root;\n        }\n\n        /**\n         * Processes input CSS through synchronous plugins\n         * and returns {@link Result#messages}.\n         *\n         * This property will only work with synchronous plugins. If the processor\n         * contains any asynchronous plugins it will throw an error.\n         *\n         * This is why this method is only for debug purpose,\n         * you should always use {@link LazyResult#then}.\n         *\n         * @type {Message[]}\n         * @see Result#messages\n         */\n\n    }, {\n        key: 'messages',\n        get: function get() {\n            return this.sync().messages;\n        }\n    }]);\n\n    return LazyResult;\n}();\n\nexports.default = LazyResult;\n\n/**\n * @callback onFulfilled\n * @param {Result} result\n */\n\n/**\n * @callback onRejected\n * @param {Error} error\n */\n\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = parse;\n\nvar _parser = __webpack_require__(40);\n\nvar _parser2 = _interopRequireDefault(_parser);\n\nvar _input = __webpack_require__(19);\n\nvar _input2 = _interopRequireDefault(_input);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction parse(css, opts) {\n    if (opts && opts.safe) {\n        throw new Error('Option safe was removed. ' + 'Use parser: require(\"postcss-safe-parser\")');\n    }\n\n    var input = new _input2.default(css, opts);\n\n    var parser = new _parser2.default(input);\n    try {\n        parser.tokenize();\n        parser.loop();\n    } catch (e) {\n        if (e.name === 'CssSyntaxError' && opts && opts.from) {\n            if (/\\.scss$/i.test(opts.from)) {\n                e.message += '\\nYou tried to parse SCSS with ' + 'the standard CSS parser; ' + 'try again with the postcss-scss parser';\n            } else if (/\\.sass/i.test(opts.from)) {\n                e.message += '\\nYou tried to parse Sass with ' + 'the standard CSS parser; ' + 'try again with the postcss-sass parser';\n            } else if (/\\.less$/i.test(opts.from)) {\n                e.message += '\\nYou tried to parse Less with ' + 'the standard CSS parser; ' + 'try again with the postcss-less parser';\n            }\n        }\n        throw e;\n    }\n\n    return parser.root;\n}\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _declaration = __webpack_require__(37);\n\nvar _declaration2 = _interopRequireDefault(_declaration);\n\nvar _tokenize = __webpack_require__(43);\n\nvar _tokenize2 = _interopRequireDefault(_tokenize);\n\nvar _comment = __webpack_require__(17);\n\nvar _comment2 = _interopRequireDefault(_comment);\n\nvar _atRule = __webpack_require__(16);\n\nvar _atRule2 = _interopRequireDefault(_atRule);\n\nvar _root = __webpack_require__(41);\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _rule = __webpack_require__(9);\n\nvar _rule2 = _interopRequireDefault(_rule);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Parser = function () {\n    function Parser(input) {\n        _classCallCheck(this, Parser);\n\n        this.input = input;\n\n        this.pos = 0;\n        this.root = new _root2.default();\n        this.current = this.root;\n        this.spaces = '';\n        this.semicolon = false;\n\n        this.root.source = { input: input, start: { line: 1, column: 1 } };\n    }\n\n    Parser.prototype.tokenize = function tokenize() {\n        this.tokens = (0, _tokenize2.default)(this.input);\n    };\n\n    Parser.prototype.loop = function loop() {\n        var token = void 0;\n        while (this.pos < this.tokens.length) {\n            token = this.tokens[this.pos];\n\n            switch (token[0]) {\n\n                case 'space':\n                case ';':\n                    this.spaces += token[1];\n                    break;\n\n                case '}':\n                    this.end(token);\n                    break;\n\n                case 'comment':\n                    this.comment(token);\n                    break;\n\n                case 'at-word':\n                    this.atrule(token);\n                    break;\n\n                case '{':\n                    this.emptyRule(token);\n                    break;\n\n                default:\n                    this.other();\n                    break;\n            }\n\n            this.pos += 1;\n        }\n        this.endFile();\n    };\n\n    Parser.prototype.comment = function comment(token) {\n        var node = new _comment2.default();\n        this.init(node, token[2], token[3]);\n        node.source.end = { line: token[4], column: token[5] };\n\n        var text = token[1].slice(2, -2);\n        if (/^\\s*$/.test(text)) {\n            node.text = '';\n            node.raws.left = text;\n            node.raws.right = '';\n        } else {\n            var match = text.match(/^(\\s*)([^]*[^\\s])(\\s*)$/);\n            node.text = match[2];\n            node.raws.left = match[1];\n            node.raws.right = match[3];\n        }\n    };\n\n    Parser.prototype.emptyRule = function emptyRule(token) {\n        var node = new _rule2.default();\n        this.init(node, token[2], token[3]);\n        node.selector = '';\n        node.raws.between = '';\n        this.current = node;\n    };\n\n    Parser.prototype.other = function other() {\n        var token = void 0;\n        var end = false;\n        var type = null;\n        var colon = false;\n        var bracket = null;\n        var brackets = [];\n\n        var start = this.pos;\n        while (this.pos < this.tokens.length) {\n            token = this.tokens[this.pos];\n            type = token[0];\n\n            if (type === '(' || type === '[') {\n                if (!bracket) bracket = token;\n                brackets.push(type === '(' ? ')' : ']');\n            } else if (brackets.length === 0) {\n                if (type === ';') {\n                    if (colon) {\n                        this.decl(this.tokens.slice(start, this.pos + 1));\n                        return;\n                    } else {\n                        break;\n                    }\n                } else if (type === '{') {\n                    this.rule(this.tokens.slice(start, this.pos + 1));\n                    return;\n                } else if (type === '}') {\n                    this.pos -= 1;\n                    end = true;\n                    break;\n                } else if (type === ':') {\n                    colon = true;\n                }\n            } else if (type === brackets[brackets.length - 1]) {\n                brackets.pop();\n                if (brackets.length === 0) bracket = null;\n            }\n\n            this.pos += 1;\n        }\n        if (this.pos === this.tokens.length) {\n            this.pos -= 1;\n            end = true;\n        }\n\n        if (brackets.length > 0) this.unclosedBracket(bracket);\n\n        if (end && colon) {\n            while (this.pos > start) {\n                token = this.tokens[this.pos][0];\n                if (token !== 'space' && token !== 'comment') break;\n                this.pos -= 1;\n            }\n            this.decl(this.tokens.slice(start, this.pos + 1));\n            return;\n        }\n\n        this.unknownWord(start);\n    };\n\n    Parser.prototype.rule = function rule(tokens) {\n        tokens.pop();\n\n        var node = new _rule2.default();\n        this.init(node, tokens[0][2], tokens[0][3]);\n\n        node.raws.between = this.spacesAndCommentsFromEnd(tokens);\n        this.raw(node, 'selector', tokens);\n        this.current = node;\n    };\n\n    Parser.prototype.decl = function decl(tokens) {\n        var node = new _declaration2.default();\n        this.init(node);\n\n        var last = tokens[tokens.length - 1];\n        if (last[0] === ';') {\n            this.semicolon = true;\n            tokens.pop();\n        }\n        if (last[4]) {\n            node.source.end = { line: last[4], column: last[5] };\n        } else {\n            node.source.end = { line: last[2], column: last[3] };\n        }\n\n        while (tokens[0][0] !== 'word') {\n            node.raws.before += tokens.shift()[1];\n        }\n        node.source.start = { line: tokens[0][2], column: tokens[0][3] };\n\n        node.prop = '';\n        while (tokens.length) {\n            var type = tokens[0][0];\n            if (type === ':' || type === 'space' || type === 'comment') {\n                break;\n            }\n            node.prop += tokens.shift()[1];\n        }\n\n        node.raws.between = '';\n\n        var token = void 0;\n        while (tokens.length) {\n            token = tokens.shift();\n\n            if (token[0] === ':') {\n                node.raws.between += token[1];\n                break;\n            } else {\n                node.raws.between += token[1];\n            }\n        }\n\n        if (node.prop[0] === '_' || node.prop[0] === '*') {\n            node.raws.before += node.prop[0];\n            node.prop = node.prop.slice(1);\n        }\n        node.raws.between += this.spacesAndCommentsFromStart(tokens);\n        this.precheckMissedSemicolon(tokens);\n\n        for (var i = tokens.length - 1; i > 0; i--) {\n            token = tokens[i];\n            if (token[1] === '!important') {\n                node.important = true;\n                var string = this.stringFrom(tokens, i);\n                string = this.spacesFromEnd(tokens) + string;\n                if (string !== ' !important') node.raws.important = string;\n                break;\n            } else if (token[1] === 'important') {\n                var cache = tokens.slice(0);\n                var str = '';\n                for (var j = i; j > 0; j--) {\n                    var _type = cache[j][0];\n                    if (str.trim().indexOf('!') === 0 && _type !== 'space') {\n                        break;\n                    }\n                    str = cache.pop()[1] + str;\n                }\n                if (str.trim().indexOf('!') === 0) {\n                    node.important = true;\n                    node.raws.important = str;\n                    tokens = cache;\n                }\n            }\n\n            if (token[0] !== 'space' && token[0] !== 'comment') {\n                break;\n            }\n        }\n\n        this.raw(node, 'value', tokens);\n\n        if (node.value.indexOf(':') !== -1) this.checkMissedSemicolon(tokens);\n    };\n\n    Parser.prototype.atrule = function atrule(token) {\n        var node = new _atRule2.default();\n        node.name = token[1].slice(1);\n        if (node.name === '') {\n            this.unnamedAtrule(node, token);\n        }\n        this.init(node, token[2], token[3]);\n\n        var last = false;\n        var open = false;\n        var params = [];\n\n        this.pos += 1;\n        while (this.pos < this.tokens.length) {\n            token = this.tokens[this.pos];\n\n            if (token[0] === ';') {\n                node.source.end = { line: token[2], column: token[3] };\n                this.semicolon = true;\n                break;\n            } else if (token[0] === '{') {\n                open = true;\n                break;\n            } else if (token[0] === '}') {\n                this.end(token);\n                break;\n            } else {\n                params.push(token);\n            }\n\n            this.pos += 1;\n        }\n        if (this.pos === this.tokens.length) {\n            last = true;\n        }\n\n        node.raws.between = this.spacesAndCommentsFromEnd(params);\n        if (params.length) {\n            node.raws.afterName = this.spacesAndCommentsFromStart(params);\n            this.raw(node, 'params', params);\n            if (last) {\n                token = params[params.length - 1];\n                node.source.end = { line: token[4], column: token[5] };\n                this.spaces = node.raws.between;\n                node.raws.between = '';\n            }\n        } else {\n            node.raws.afterName = '';\n            node.params = '';\n        }\n\n        if (open) {\n            node.nodes = [];\n            this.current = node;\n        }\n    };\n\n    Parser.prototype.end = function end(token) {\n        if (this.current.nodes && this.current.nodes.length) {\n            this.current.raws.semicolon = this.semicolon;\n        }\n        this.semicolon = false;\n\n        this.current.raws.after = (this.current.raws.after || '') + this.spaces;\n        this.spaces = '';\n\n        if (this.current.parent) {\n            this.current.source.end = { line: token[2], column: token[3] };\n            this.current = this.current.parent;\n        } else {\n            this.unexpectedClose(token);\n        }\n    };\n\n    Parser.prototype.endFile = function endFile() {\n        if (this.current.parent) this.unclosedBlock();\n        if (this.current.nodes && this.current.nodes.length) {\n            this.current.raws.semicolon = this.semicolon;\n        }\n        this.current.raws.after = (this.current.raws.after || '') + this.spaces;\n    };\n\n    // Helpers\n\n    Parser.prototype.init = function init(node, line, column) {\n        this.current.push(node);\n\n        node.source = { start: { line: line, column: column }, input: this.input };\n        node.raws.before = this.spaces;\n        this.spaces = '';\n        if (node.type !== 'comment') this.semicolon = false;\n    };\n\n    Parser.prototype.raw = function raw(node, prop, tokens) {\n        var token = void 0,\n            type = void 0;\n        var length = tokens.length;\n        var value = '';\n        var clean = true;\n        for (var i = 0; i < length; i += 1) {\n            token = tokens[i];\n            type = token[0];\n            if (type === 'comment' || type === 'space' && i === length - 1) {\n                clean = false;\n            } else {\n                value += token[1];\n            }\n        }\n        if (!clean) {\n            var raw = tokens.reduce(function (all, i) {\n                return all + i[1];\n            }, '');\n            node.raws[prop] = { value: value, raw: raw };\n        }\n        node[prop] = value;\n    };\n\n    Parser.prototype.spacesAndCommentsFromEnd = function spacesAndCommentsFromEnd(tokens) {\n        var lastTokenType = void 0;\n        var spaces = '';\n        while (tokens.length) {\n            lastTokenType = tokens[tokens.length - 1][0];\n            if (lastTokenType !== 'space' && lastTokenType !== 'comment') break;\n            spaces = tokens.pop()[1] + spaces;\n        }\n        return spaces;\n    };\n\n    Parser.prototype.spacesAndCommentsFromStart = function spacesAndCommentsFromStart(tokens) {\n        var next = void 0;\n        var spaces = '';\n        while (tokens.length) {\n            next = tokens[0][0];\n            if (next !== 'space' && next !== 'comment') break;\n            spaces += tokens.shift()[1];\n        }\n        return spaces;\n    };\n\n    Parser.prototype.spacesFromEnd = function spacesFromEnd(tokens) {\n        var lastTokenType = void 0;\n        var spaces = '';\n        while (tokens.length) {\n            lastTokenType = tokens[tokens.length - 1][0];\n            if (lastTokenType !== 'space') break;\n            spaces = tokens.pop()[1] + spaces;\n        }\n        return spaces;\n    };\n\n    Parser.prototype.stringFrom = function stringFrom(tokens, from) {\n        var result = '';\n        for (var i = from; i < tokens.length; i++) {\n            result += tokens[i][1];\n        }\n        tokens.splice(from, tokens.length - from);\n        return result;\n    };\n\n    Parser.prototype.colon = function colon(tokens) {\n        var brackets = 0;\n        var token = void 0,\n            type = void 0,\n            prev = void 0;\n        for (var i = 0; i < tokens.length; i++) {\n            token = tokens[i];\n            type = token[0];\n\n            if (type === '(') {\n                brackets += 1;\n            } else if (type === ')') {\n                brackets -= 1;\n            } else if (brackets === 0 && type === ':') {\n                if (!prev) {\n                    this.doubleColon(token);\n                } else if (prev[0] === 'word' && prev[1] === 'progid') {\n                    continue;\n                } else {\n                    return i;\n                }\n            }\n\n            prev = token;\n        }\n        return false;\n    };\n\n    // Errors\n\n    Parser.prototype.unclosedBracket = function unclosedBracket(bracket) {\n        throw this.input.error('Unclosed bracket', bracket[2], bracket[3]);\n    };\n\n    Parser.prototype.unknownWord = function unknownWord(start) {\n        var token = this.tokens[start];\n        throw this.input.error('Unknown word', token[2], token[3]);\n    };\n\n    Parser.prototype.unexpectedClose = function unexpectedClose(token) {\n        throw this.input.error('Unexpected }', token[2], token[3]);\n    };\n\n    Parser.prototype.unclosedBlock = function unclosedBlock() {\n        var pos = this.current.source.start;\n        throw this.input.error('Unclosed block', pos.line, pos.column);\n    };\n\n    Parser.prototype.doubleColon = function doubleColon(token) {\n        throw this.input.error('Double colon', token[2], token[3]);\n    };\n\n    Parser.prototype.unnamedAtrule = function unnamedAtrule(node, token) {\n        throw this.input.error('At-rule without name', token[2], token[3]);\n    };\n\n    Parser.prototype.precheckMissedSemicolon = function precheckMissedSemicolon(tokens) {\n        // Hook for Safe Parser\n        tokens;\n    };\n\n    Parser.prototype.checkMissedSemicolon = function checkMissedSemicolon(tokens) {\n        var colon = this.colon(tokens);\n        if (colon === false) return;\n\n        var founded = 0;\n        var token = void 0;\n        for (var j = colon - 1; j >= 0; j--) {\n            token = tokens[j];\n            if (token[0] !== 'space') {\n                founded += 1;\n                if (founded === 2) break;\n            }\n        }\n        throw this.input.error('Missed semicolon', token[2], token[3]);\n    };\n\n    return Parser;\n}();\n\nexports.default = Parser;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _container = __webpack_require__(18);\n\nvar _container2 = _interopRequireDefault(_container);\n\nvar _warnOnce = __webpack_require__(3);\n\nvar _warnOnce2 = _interopRequireDefault(_warnOnce);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * Represents a CSS file and contains all its parsed nodes.\n *\n * @extends Container\n *\n * @example\n * const root = postcss.parse('a{color:black} b{z-index:2}');\n * root.type         //=> 'root'\n * root.nodes.length //=> 2\n */\nvar Root = function (_Container) {\n    _inherits(Root, _Container);\n\n    function Root(defaults) {\n        _classCallCheck(this, Root);\n\n        var _this = _possibleConstructorReturn(this, _Container.call(this, defaults));\n\n        _this.type = 'root';\n        if (!_this.nodes) _this.nodes = [];\n        return _this;\n    }\n\n    Root.prototype.removeChild = function removeChild(child) {\n        child = this.index(child);\n\n        if (child === 0 && this.nodes.length > 1) {\n            this.nodes[1].raws.before = this.nodes[child].raws.before;\n        }\n\n        return _Container.prototype.removeChild.call(this, child);\n    };\n\n    Root.prototype.normalize = function normalize(child, sample, type) {\n        var nodes = _Container.prototype.normalize.call(this, child);\n\n        if (sample) {\n            if (type === 'prepend') {\n                if (this.nodes.length > 1) {\n                    sample.raws.before = this.nodes[1].raws.before;\n                } else {\n                    delete sample.raws.before;\n                }\n            } else if (this.first !== sample) {\n                for (var _iterator = nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n                    var _ref;\n\n                    if (_isArray) {\n                        if (_i >= _iterator.length) break;\n                        _ref = _iterator[_i++];\n                    } else {\n                        _i = _iterator.next();\n                        if (_i.done) break;\n                        _ref = _i.value;\n                    }\n\n                    var node = _ref;\n\n                    node.raws.before = sample.raws.before;\n                }\n            }\n        }\n\n        return nodes;\n    };\n\n    /**\n     * Returns a {@link Result} instance representing the root’s CSS.\n     *\n     * @param {processOptions} [opts] - options with only `to` and `map` keys\n     *\n     * @return {Result} result with current root’s CSS\n     *\n     * @example\n     * const root1 = postcss.parse(css1, { from: 'a.css' });\n     * const root2 = postcss.parse(css2, { from: 'b.css' });\n     * root1.append(root2);\n     * const result = root1.toResult({ to: 'all.css', map: true });\n     */\n\n\n    Root.prototype.toResult = function toResult() {\n        var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n        var LazyResult = __webpack_require__(38);\n        var Processor = __webpack_require__(118);\n\n        var lazy = new LazyResult(new Processor(), this, opts);\n        return lazy.stringify();\n    };\n\n    Root.prototype.remove = function remove(child) {\n        (0, _warnOnce2.default)('Root#remove is deprecated. Use Root#removeChild');\n        this.removeChild(child);\n    };\n\n    Root.prototype.prevMap = function prevMap() {\n        (0, _warnOnce2.default)('Root#prevMap is deprecated. Use Root#source.input.map');\n        return this.source.input.map;\n    };\n\n    /**\n     * @memberof Root#\n     * @member {object} raws - Information to generate byte-to-byte equal\n     *                         node string as it was in the origin input.\n     *\n     * Every parser saves its own properties,\n     * but the default CSS parser uses:\n     *\n     * * `after`: the space symbols after the last child to the end of file.\n     * * `semicolon`: is the last child has an (optional) semicolon.\n     *\n     * @example\n     * postcss.parse('a {}\\n').raws //=> { after: '\\n' }\n     * postcss.parse('a {}').raws   //=> { after: '' }\n     */\n\n    return Root;\n}(_container2.default);\n\nexports.default = Root;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = stringify;\n\nvar _stringifier = __webpack_require__(21);\n\nvar _stringifier2 = _interopRequireDefault(_stringifier);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction stringify(node, builder) {\n    var str = new _stringifier2.default(builder);\n    str.stringify(node);\n}\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = tokenize;\nvar SINGLE_QUOTE = 39;\nvar DOUBLE_QUOTE = 34;\nvar BACKSLASH = 92;\nvar SLASH = 47;\nvar NEWLINE = 10;\nvar SPACE = 32;\nvar FEED = 12;\nvar TAB = 9;\nvar CR = 13;\nvar OPEN_SQUARE = 91;\nvar CLOSE_SQUARE = 93;\nvar OPEN_PARENTHESES = 40;\nvar CLOSE_PARENTHESES = 41;\nvar OPEN_CURLY = 123;\nvar CLOSE_CURLY = 125;\nvar SEMICOLON = 59;\nvar ASTERISK = 42;\nvar COLON = 58;\nvar AT = 64;\n\nvar RE_AT_END = /[ \\n\\t\\r\\f\\{\\(\\)'\"\\\\;/\\[\\]#]/g;\nvar RE_WORD_END = /[ \\n\\t\\r\\f\\(\\)\\{\\}:;@!'\"\\\\\\]\\[#]|\\/(?=\\*)/g;\nvar RE_BAD_BRACKET = /.[\\\\\\/\\(\"'\\n]/;\n\nfunction tokenize(input) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    var tokens = [];\n    var css = input.css.valueOf();\n\n    var ignore = options.ignoreErrors;\n\n    var code = void 0,\n        next = void 0,\n        quote = void 0,\n        lines = void 0,\n        last = void 0,\n        content = void 0,\n        escape = void 0,\n        nextLine = void 0,\n        nextOffset = void 0,\n        escaped = void 0,\n        escapePos = void 0,\n        prev = void 0,\n        n = void 0;\n\n    var length = css.length;\n    var offset = -1;\n    var line = 1;\n    var pos = 0;\n\n    function unclosed(what) {\n        throw input.error('Unclosed ' + what, line, pos - offset);\n    }\n\n    while (pos < length) {\n        code = css.charCodeAt(pos);\n\n        if (code === NEWLINE || code === FEED || code === CR && css.charCodeAt(pos + 1) !== NEWLINE) {\n            offset = pos;\n            line += 1;\n        }\n\n        switch (code) {\n            case NEWLINE:\n            case SPACE:\n            case TAB:\n            case CR:\n            case FEED:\n                next = pos;\n                do {\n                    next += 1;\n                    code = css.charCodeAt(next);\n                    if (code === NEWLINE) {\n                        offset = next;\n                        line += 1;\n                    }\n                } while (code === SPACE || code === NEWLINE || code === TAB || code === CR || code === FEED);\n\n                tokens.push(['space', css.slice(pos, next)]);\n                pos = next - 1;\n                break;\n\n            case OPEN_SQUARE:\n                tokens.push(['[', '[', line, pos - offset]);\n                break;\n\n            case CLOSE_SQUARE:\n                tokens.push([']', ']', line, pos - offset]);\n                break;\n\n            case OPEN_CURLY:\n                tokens.push(['{', '{', line, pos - offset]);\n                break;\n\n            case CLOSE_CURLY:\n                tokens.push(['}', '}', line, pos - offset]);\n                break;\n\n            case COLON:\n                tokens.push([':', ':', line, pos - offset]);\n                break;\n\n            case SEMICOLON:\n                tokens.push([';', ';', line, pos - offset]);\n                break;\n\n            case OPEN_PARENTHESES:\n                prev = tokens.length ? tokens[tokens.length - 1][1] : '';\n                n = css.charCodeAt(pos + 1);\n                if (prev === 'url' && n !== SINGLE_QUOTE && n !== DOUBLE_QUOTE && n !== SPACE && n !== NEWLINE && n !== TAB && n !== FEED && n !== CR) {\n                    next = pos;\n                    do {\n                        escaped = false;\n                        next = css.indexOf(')', next + 1);\n                        if (next === -1) {\n                            if (ignore) {\n                                next = pos;\n                                break;\n                            } else {\n                                unclosed('bracket');\n                            }\n                        }\n                        escapePos = next;\n                        while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n                            escapePos -= 1;\n                            escaped = !escaped;\n                        }\n                    } while (escaped);\n\n                    tokens.push(['brackets', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);\n                    pos = next;\n                } else {\n                    next = css.indexOf(')', pos + 1);\n                    content = css.slice(pos, next + 1);\n\n                    if (next === -1 || RE_BAD_BRACKET.test(content)) {\n                        tokens.push(['(', '(', line, pos - offset]);\n                    } else {\n                        tokens.push(['brackets', content, line, pos - offset, line, next - offset]);\n                        pos = next;\n                    }\n                }\n\n                break;\n\n            case CLOSE_PARENTHESES:\n                tokens.push([')', ')', line, pos - offset]);\n                break;\n\n            case SINGLE_QUOTE:\n            case DOUBLE_QUOTE:\n                quote = code === SINGLE_QUOTE ? '\\'' : '\"';\n                next = pos;\n                do {\n                    escaped = false;\n                    next = css.indexOf(quote, next + 1);\n                    if (next === -1) {\n                        if (ignore) {\n                            next = pos + 1;\n                            break;\n                        } else {\n                            unclosed('string');\n                        }\n                    }\n                    escapePos = next;\n                    while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n                        escapePos -= 1;\n                        escaped = !escaped;\n                    }\n                } while (escaped);\n\n                content = css.slice(pos, next + 1);\n                lines = content.split('\\n');\n                last = lines.length - 1;\n\n                if (last > 0) {\n                    nextLine = line + last;\n                    nextOffset = next - lines[last].length;\n                } else {\n                    nextLine = line;\n                    nextOffset = offset;\n                }\n\n                tokens.push(['string', css.slice(pos, next + 1), line, pos - offset, nextLine, next - nextOffset]);\n\n                offset = nextOffset;\n                line = nextLine;\n                pos = next;\n                break;\n\n            case AT:\n                RE_AT_END.lastIndex = pos + 1;\n                RE_AT_END.test(css);\n                if (RE_AT_END.lastIndex === 0) {\n                    next = css.length - 1;\n                } else {\n                    next = RE_AT_END.lastIndex - 2;\n                }\n                tokens.push(['at-word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);\n                pos = next;\n                break;\n\n            case BACKSLASH:\n                next = pos;\n                escape = true;\n                while (css.charCodeAt(next + 1) === BACKSLASH) {\n                    next += 1;\n                    escape = !escape;\n                }\n                code = css.charCodeAt(next + 1);\n                if (escape && code !== SLASH && code !== SPACE && code !== NEWLINE && code !== TAB && code !== CR && code !== FEED) {\n                    next += 1;\n                }\n                tokens.push(['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);\n                pos = next;\n                break;\n\n            default:\n                if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {\n                    next = css.indexOf('*/', pos + 2) + 1;\n                    if (next === 0) {\n                        if (ignore) {\n                            next = css.length;\n                        } else {\n                            unclosed('comment');\n                        }\n                    }\n\n                    content = css.slice(pos, next + 1);\n                    lines = content.split('\\n');\n                    last = lines.length - 1;\n\n                    if (last > 0) {\n                        nextLine = line + last;\n                        nextOffset = next - lines[last].length;\n                    } else {\n                        nextLine = line;\n                        nextOffset = offset;\n                    }\n\n                    tokens.push(['comment', content, line, pos - offset, nextLine, next - nextOffset]);\n\n                    offset = nextOffset;\n                    line = nextLine;\n                    pos = next;\n                } else {\n                    RE_WORD_END.lastIndex = pos + 1;\n                    RE_WORD_END.test(css);\n                    if (RE_WORD_END.lastIndex === 0) {\n                        next = css.length - 1;\n                    } else {\n                        next = RE_WORD_END.lastIndex - 2;\n                    }\n\n                    tokens.push(['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);\n                    pos = next;\n                }\n\n                break;\n        }\n\n        pos++;\n    }\n\n    return tokens;\n}\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(process) {\nvar escapeStringRegexp = __webpack_require__(31);\nvar ansiStyles = __webpack_require__(30);\nvar stripAnsi = __webpack_require__(82);\nvar hasAnsi = __webpack_require__(33);\nvar supportsColor = __webpack_require__(122);\nvar defineProps = Object.defineProperties;\nvar isSimpleWindowsTerm = process.platform === 'win32' && !/^xterm/i.test(process.env.TERM);\n\nfunction Chalk(options) {\n\t// detect mode if not set manually\n\tthis.enabled = !options || options.enabled === undefined ? supportsColor : options.enabled;\n}\n\n// use bright blue on Windows as the normal blue color is illegible\nif (isSimpleWindowsTerm) {\n\tansiStyles.blue.open = '\\u001b[94m';\n}\n\nvar styles = (function () {\n\tvar ret = {};\n\n\tObject.keys(ansiStyles).forEach(function (key) {\n\t\tansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');\n\n\t\tret[key] = {\n\t\t\tget: function () {\n\t\t\t\treturn build.call(this, this._styles.concat(key));\n\t\t\t}\n\t\t};\n\t});\n\n\treturn ret;\n})();\n\nvar proto = defineProps(function chalk() {}, styles);\n\nfunction build(_styles) {\n\tvar builder = function () {\n\t\treturn applyStyle.apply(builder, arguments);\n\t};\n\n\tbuilder._styles = _styles;\n\tbuilder.enabled = this.enabled;\n\t// __proto__ is used because we must return a function, but there is\n\t// no way to create a function with a different prototype.\n\t/* eslint-disable no-proto */\n\tbuilder.__proto__ = proto;\n\n\treturn builder;\n}\n\nfunction applyStyle() {\n\t// support varags, but simply cast to string in case there's only one arg\n\tvar args = arguments;\n\tvar argsLen = args.length;\n\tvar str = argsLen !== 0 && String(arguments[0]);\n\n\tif (argsLen > 1) {\n\t\t// don't slice `arguments`, it prevents v8 optimizations\n\t\tfor (var a = 1; a < argsLen; a++) {\n\t\t\tstr += ' ' + args[a];\n\t\t}\n\t}\n\n\tif (!this.enabled || !str) {\n\t\treturn str;\n\t}\n\n\tvar nestedStyles = this._styles;\n\tvar i = nestedStyles.length;\n\n\t// Turns out that on Windows dimmed gray text becomes invisible in cmd.exe,\n\t// see https://github.com/chalk/chalk/issues/58\n\t// If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop.\n\tvar originalDim = ansiStyles.dim.open;\n\tif (isSimpleWindowsTerm && (nestedStyles.indexOf('gray') !== -1 || nestedStyles.indexOf('grey') !== -1)) {\n\t\tansiStyles.dim.open = '';\n\t}\n\n\twhile (i--) {\n\t\tvar code = ansiStyles[nestedStyles[i]];\n\n\t\t// Replace any instances already present with a re-opening code\n\t\t// otherwise only the part of the string until said closing code\n\t\t// will be colored, and the rest will simply be 'plain'.\n\t\tstr = code.open + str.replace(code.closeRe, code.open) + code.close;\n\t}\n\n\t// Reset the original 'dim' if we changed it to work around the Windows dimmed gray issue.\n\tansiStyles.dim.open = originalDim;\n\n\treturn str;\n}\n\nfunction init() {\n\tvar ret = {};\n\n\tObject.keys(styles).forEach(function (name) {\n\t\tret[name] = {\n\t\t\tget: function () {\n\t\t\t\treturn build.call(this, [name]);\n\t\t\t}\n\t\t};\n\t});\n\n\treturn ret;\n}\n\ndefineProps(Chalk.prototype, init());\n\nmodule.exports = new Chalk();\nmodule.exports.styles = ansiStyles;\nmodule.exports.hasColor = hasAnsi;\nmodule.exports.stripColor = stripAnsi;\nmodule.exports.supportsColor = supportsColor;\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7)));\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Node = __webpack_require__(46);\n\nvar _Node2 = _interopRequireDefault(_Node);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction Container(opts) {\n  var _this = this;\n\n  this.constructor(opts);\n\n  this.nodes = opts.nodes;\n\n  if (this.after === undefined) {\n    this.after = this.nodes.length > 0 ? this.nodes[this.nodes.length - 1].after : '';\n  }\n\n  if (this.before === undefined) {\n    this.before = this.nodes.length > 0 ? this.nodes[0].before : '';\n  }\n\n  if (this.sourceIndex === undefined) {\n    this.sourceIndex = this.before.length;\n  }\n\n  this.nodes.forEach(function (node) {\n    node.parent = _this; // eslint-disable-line no-param-reassign\n  });\n} /**\r\n   * A node that contains other nodes and support traversing over them\r\n   */\n\nContainer.prototype = Object.create(_Node2.default.prototype);\nContainer.constructor = _Node2.default;\n\n/**\r\n * Iterate over descendant nodes of the node\r\n *\r\n * @param {RegExp|string} filter - Optional. Only nodes with node.type that\r\n *    satisfies the filter will be traversed over\r\n * @param {function} cb - callback to call on each node. Takes theese params:\r\n *    node - the node being processed, i - it's index, nodes - the array\r\n *    of all nodes\r\n *    If false is returned, the iteration breaks\r\n *\r\n * @return (boolean) false, if the iteration was broken\r\n */\nContainer.prototype.walk = function walk(filter, cb) {\n  var hasFilter = typeof filter === 'string' || filter instanceof RegExp;\n  var callback = hasFilter ? cb : filter;\n  var filterReg = typeof filter === 'string' ? new RegExp(filter) : filter;\n\n  for (var i = 0; i < this.nodes.length; i++) {\n    var node = this.nodes[i];\n    var filtered = hasFilter ? filterReg.test(node.type) : true;\n    if (filtered && callback && callback(node, i, this.nodes) === false) {\n      return false;\n    }\n    if (node.nodes && node.walk(filter, cb) === false) {\n      return false;\n    }\n  }\n  return true;\n};\n\n/**\r\n * Iterate over immediate children of the node\r\n *\r\n * @param {function} cb - callback to call on each node. Takes theese params:\r\n *    node - the node being processed, i - it's index, nodes - the array\r\n *    of all nodes\r\n *    If false is returned, the iteration breaks\r\n *\r\n * @return (boolean) false, if the iteration was broken\r\n */\nContainer.prototype.each = function each() {\n  var cb = arguments.length <= 0 || arguments[0] === undefined ? function () {} : arguments[0];\n\n  for (var i = 0; i < this.nodes.length; i++) {\n    var node = this.nodes[i];\n    if (cb(node, i, this.nodes) === false) {\n      return false;\n    }\n  }\n  return true;\n};\n\nexports.default = Container;\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n/**\r\n * A very generic node. Pretty much any element of a media query\r\n */\n\nfunction Node(opts) {\n  this.after = opts.after;\n  this.before = opts.before;\n  this.type = opts.type;\n  this.value = opts.value;\n  this.sourceIndex = opts.sourceIndex;\n}\n\nexports.default = Node;\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _namespace = __webpack_require__(10);\n\nvar _namespace2 = _interopRequireDefault(_namespace);\n\nvar _types = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Attribute = function (_Namespace) {\n    _inherits(Attribute, _Namespace);\n\n    function Attribute(opts) {\n        _classCallCheck(this, Attribute);\n\n        var _this = _possibleConstructorReturn(this, _Namespace.call(this, opts));\n\n        _this.type = _types.ATTRIBUTE;\n        _this.raws = {};\n        return _this;\n    }\n\n    Attribute.prototype.toString = function toString() {\n        var selector = [this.spaces.before, '[', this.ns, this.attribute];\n\n        if (this.operator) {\n            selector.push(this.operator);\n        }\n        if (this.value) {\n            selector.push(this.value);\n        }\n        if (this.raws.insensitive) {\n            selector.push(this.raws.insensitive);\n        } else if (this.insensitive) {\n            selector.push(' i');\n        }\n        selector.push(']');\n        return selector.concat(this.spaces.after).join('');\n    };\n\n    return Attribute;\n}(_namespace2.default);\n\nexports.default = Attribute;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _namespace = __webpack_require__(10);\n\nvar _namespace2 = _interopRequireDefault(_namespace);\n\nvar _types = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ClassName = function (_Namespace) {\n    _inherits(ClassName, _Namespace);\n\n    function ClassName(opts) {\n        _classCallCheck(this, ClassName);\n\n        var _this = _possibleConstructorReturn(this, _Namespace.call(this, opts));\n\n        _this.type = _types.CLASS;\n        return _this;\n    }\n\n    ClassName.prototype.toString = function toString() {\n        return [this.spaces.before, this.ns, String('.' + this.value), this.spaces.after].join('');\n    };\n\n    return ClassName;\n}(_namespace2.default);\n\nexports.default = ClassName;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _node = __webpack_require__(6);\n\nvar _node2 = _interopRequireDefault(_node);\n\nvar _types = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Combinator = function (_Node) {\n    _inherits(Combinator, _Node);\n\n    function Combinator(opts) {\n        _classCallCheck(this, Combinator);\n\n        var _this = _possibleConstructorReturn(this, _Node.call(this, opts));\n\n        _this.type = _types.COMBINATOR;\n        return _this;\n    }\n\n    return Combinator;\n}(_node2.default);\n\nexports.default = Combinator;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _node = __webpack_require__(6);\n\nvar _node2 = _interopRequireDefault(_node);\n\nvar _types = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Comment = function (_Node) {\n    _inherits(Comment, _Node);\n\n    function Comment(opts) {\n        _classCallCheck(this, Comment);\n\n        var _this = _possibleConstructorReturn(this, _Node.call(this, opts));\n\n        _this.type = _types.COMMENT;\n        return _this;\n    }\n\n    return Comment;\n}(_node2.default);\n\nexports.default = Comment;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _namespace = __webpack_require__(10);\n\nvar _namespace2 = _interopRequireDefault(_namespace);\n\nvar _types = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ID = function (_Namespace) {\n    _inherits(ID, _Namespace);\n\n    function ID(opts) {\n        _classCallCheck(this, ID);\n\n        var _this = _possibleConstructorReturn(this, _Namespace.call(this, opts));\n\n        _this.type = _types.ID;\n        return _this;\n    }\n\n    ID.prototype.toString = function toString() {\n        return [this.spaces.before, this.ns, String('#' + this.value), this.spaces.after].join('');\n    };\n\n    return ID;\n}(_namespace2.default);\n\nexports.default = ID;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _node = __webpack_require__(6);\n\nvar _node2 = _interopRequireDefault(_node);\n\nvar _types = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Nesting = function (_Node) {\n    _inherits(Nesting, _Node);\n\n    function Nesting(opts) {\n        _classCallCheck(this, Nesting);\n\n        var _this = _possibleConstructorReturn(this, _Node.call(this, opts));\n\n        _this.type = _types.NESTING;\n        _this.value = '&';\n        return _this;\n    }\n\n    return Nesting;\n}(_node2.default);\n\nexports.default = Nesting;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _container = __webpack_require__(22);\n\nvar _container2 = _interopRequireDefault(_container);\n\nvar _types = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Pseudo = function (_Container) {\n    _inherits(Pseudo, _Container);\n\n    function Pseudo(opts) {\n        _classCallCheck(this, Pseudo);\n\n        var _this = _possibleConstructorReturn(this, _Container.call(this, opts));\n\n        _this.type = _types.PSEUDO;\n        return _this;\n    }\n\n    Pseudo.prototype.toString = function toString() {\n        var params = this.length ? '(' + this.map(String).join(',') + ')' : '';\n        return [this.spaces.before, String(this.value), params, this.spaces.after].join('');\n    };\n\n    return Pseudo;\n}(_container2.default);\n\nexports.default = Pseudo;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _container = __webpack_require__(22);\n\nvar _container2 = _interopRequireDefault(_container);\n\nvar _types = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Root = function (_Container) {\n    _inherits(Root, _Container);\n\n    function Root(opts) {\n        _classCallCheck(this, Root);\n\n        var _this = _possibleConstructorReturn(this, _Container.call(this, opts));\n\n        _this.type = _types.ROOT;\n        return _this;\n    }\n\n    Root.prototype.toString = function toString() {\n        var str = this.reduce(function (memo, selector) {\n            var sel = String(selector);\n            return sel ? memo + sel + ',' : '';\n        }, '').slice(0, -1);\n        return this.trailingComma ? str + ',' : str;\n    };\n\n    return Root;\n}(_container2.default);\n\nexports.default = Root;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _container = __webpack_require__(22);\n\nvar _container2 = _interopRequireDefault(_container);\n\nvar _types = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Selector = function (_Container) {\n    _inherits(Selector, _Container);\n\n    function Selector(opts) {\n        _classCallCheck(this, Selector);\n\n        var _this = _possibleConstructorReturn(this, _Container.call(this, opts));\n\n        _this.type = _types.SELECTOR;\n        return _this;\n    }\n\n    return Selector;\n}(_container2.default);\n\nexports.default = Selector;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _node = __webpack_require__(6);\n\nvar _node2 = _interopRequireDefault(_node);\n\nvar _types = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar String = function (_Node) {\n    _inherits(String, _Node);\n\n    function String(opts) {\n        _classCallCheck(this, String);\n\n        var _this = _possibleConstructorReturn(this, _Node.call(this, opts));\n\n        _this.type = _types.STRING;\n        return _this;\n    }\n\n    return String;\n}(_node2.default);\n\nexports.default = String;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _namespace = __webpack_require__(10);\n\nvar _namespace2 = _interopRequireDefault(_namespace);\n\nvar _types = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Tag = function (_Namespace) {\n    _inherits(Tag, _Namespace);\n\n    function Tag(opts) {\n        _classCallCheck(this, Tag);\n\n        var _this = _possibleConstructorReturn(this, _Namespace.call(this, opts));\n\n        _this.type = _types.TAG;\n        return _this;\n    }\n\n    return Tag;\n}(_namespace2.default);\n\nexports.default = Tag;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _namespace = __webpack_require__(10);\n\nvar _namespace2 = _interopRequireDefault(_namespace);\n\nvar _types = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Universal = function (_Namespace) {\n    _inherits(Universal, _Namespace);\n\n    function Universal(opts) {\n        _classCallCheck(this, Universal);\n\n        var _this = _possibleConstructorReturn(this, _Namespace.call(this, opts));\n\n        _this.type = _types.UNIVERSAL;\n        _this.value = '*';\n        return _this;\n    }\n\n    return Universal;\n}(_namespace2.default);\n\nexports.default = Universal;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nconst Container = __webpack_require__(1);\n\nclass AtWord extends Container {\n  constructor (opts) {\n    super(opts);\n    this.type = 'atword';\n  }\n\n  toString () {\n    let quote = this.quoted ? this.raws.quote : '';\n    return [\n      this.raws.before,\n      '@',\n      // we can't use String() here because it'll try using itself\n      // as the constructor\n      String.prototype.toString.call(this.value),\n      this.raws.after\n    ].join('');\n  }\n}\n\nContainer.registerWalker(AtWord);\n\nmodule.exports = AtWord;\n\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nconst Container = __webpack_require__(1);\nconst Node = __webpack_require__(4);\n\nclass Colon extends Node {\n  constructor (opts) {\n    super(opts);\n    this.type = 'colon';\n  }\n}\n\nContainer.registerWalker(Colon);\n\nmodule.exports = Colon;\n\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nconst Container = __webpack_require__(1);\nconst Node = __webpack_require__(4);\n\nclass Comma extends Node {\n  constructor (opts) {\n    super(opts);\n    this.type = 'comma';\n  }\n}\n\nContainer.registerWalker(Comma);\n\nmodule.exports = Comma;\n\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nconst Container = __webpack_require__(1);\nconst Node = __webpack_require__(4);\n\nclass Comment extends Node {\n  constructor (opts) {\n    super(opts);\n    this.type = 'comment';\n  }\n\n  toString () {\n    return [\n      this.raws.before,\n      '/*',\n      String(this.value),\n      '*/',\n      this.raws.after\n    ].join('');\n  }\n}\n\nContainer.registerWalker(Comment);\n\nmodule.exports = Comment;\n\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nconst Container = __webpack_require__(1);\n\nclass FunctionNode extends Container {\n  constructor (opts) {\n    super(opts);\n    this.type = 'func';\n    // start off at -1 so we know there haven't been any parens added\n    this.unbalanced = -1;\n  }\n}\n\nContainer.registerWalker(FunctionNode);\n\nmodule.exports = FunctionNode;\n\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nconst Container = __webpack_require__(1);\nconst Node = __webpack_require__(4);\n\nclass NumberNode extends Node {\n  constructor (opts) {\n    super(opts);\n    this.type = 'number';\n    this.unit = opts.unit || '';\n  }\n\n  toString () {\n    return [\n      this.raws.before,\n      String(this.value),\n      this.unit,\n      this.raws.after\n    ].join('');\n  }\n}\n\nContainer.registerWalker(NumberNode);\n\nmodule.exports = NumberNode;\n\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nconst Container = __webpack_require__(1);\nconst Node = __webpack_require__(4);\n\nclass Operator extends Node {\n  constructor (opts) {\n    super(opts);\n    this.type = 'operator';\n  }\n}\n\nContainer.registerWalker(Operator);\n\nmodule.exports = Operator;\n\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nconst Container = __webpack_require__(1);\nconst Node = __webpack_require__(4);\n\nclass Parenthesis extends Node {\n  constructor (opts) {\n    super(opts);\n    this.type = 'paren';\n    this.parenType = '';\n  }\n}\n\nContainer.registerWalker(Parenthesis);\n\nmodule.exports = Parenthesis;\n\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nconst Container = __webpack_require__(1);\nconst Node = __webpack_require__(4);\n\nclass StringNode extends Node {\n  constructor (opts) {\n    super(opts);\n    this.type = 'string';\n  }\n\n  toString () {\n    let quote = this.quoted ? this.raws.quote : '';\n    return [\n      this.raws.before,\n      quote,\n      // we can't use String() here because it'll try using itself\n      // as the constructor\n      this.value + '',\n      quote,\n      this.raws.after\n    ].join('');\n  }\n}\n\nContainer.registerWalker(StringNode);\n\nmodule.exports = StringNode;\n\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nconst Container = __webpack_require__(1);\n\nmodule.exports = class Value extends Container {\n  constructor (opts) {\n    super(opts);\n    this.type = 'value';\n    this.unbalanced = 0;\n  }\n};\n\n\n/***/ }),\n/* 69 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nconst Container = __webpack_require__(1);\nconst Node = __webpack_require__(4);\n\nclass Word extends Node {\n  constructor (opts) {\n    super(opts);\n    this.type = 'word';\n  }\n}\n\nContainer.registerWalker(Word);\n\nmodule.exports = Word;\n\n\n/***/ }),\n/* 70 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _supportsColor = __webpack_require__(149);\n\nvar _supportsColor2 = _interopRequireDefault(_supportsColor);\n\nvar _chalk = __webpack_require__(78);\n\nvar _chalk2 = _interopRequireDefault(_chalk);\n\nvar _terminalHighlight = __webpack_require__(145);\n\nvar _terminalHighlight2 = _interopRequireDefault(_terminalHighlight);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * The CSS parser throws this error for broken CSS.\n *\n * Custom parsers can throw this error for broken custom syntax using\n * the {@link Node#error} method.\n *\n * PostCSS will use the input source map to detect the original error location.\n * If you wrote a Sass file, compiled it to CSS and then parsed it with PostCSS,\n * PostCSS will show the original position in the Sass file.\n *\n * If you need the position in the PostCSS input\n * (e.g., to debug the previous compiler), use `error.input.file`.\n *\n * @example\n * // Catching and checking syntax error\n * try {\n *   postcss.parse('a{')\n * } catch (error) {\n *   if ( error.name === 'CssSyntaxError' ) {\n *     error //=> CssSyntaxError\n *   }\n * }\n *\n * @example\n * // Raising error from plugin\n * throw node.error('Unknown variable', { plugin: 'postcss-vars' });\n */\nvar CssSyntaxError = function () {\n\n    /**\n     * @param {string} message  - error message\n     * @param {number} [line]   - source line of the error\n     * @param {number} [column] - source column of the error\n     * @param {string} [source] - source code of the broken file\n     * @param {string} [file]   - absolute path to the broken file\n     * @param {string} [plugin] - PostCSS plugin name, if error came from plugin\n     */\n    function CssSyntaxError(message, line, column, source, file, plugin) {\n        _classCallCheck(this, CssSyntaxError);\n\n        /**\n         * @member {string} - Always equal to `'CssSyntaxError'`. You should\n         *                    always check error type\n         *                    by `error.name === 'CssSyntaxError'` instead of\n         *                    `error instanceof CssSyntaxError`, because\n         *                    npm could have several PostCSS versions.\n         *\n         * @example\n         * if ( error.name === 'CssSyntaxError' ) {\n         *   error //=> CssSyntaxError\n         * }\n         */\n        this.name = 'CssSyntaxError';\n        /**\n         * @member {string} - Error message.\n         *\n         * @example\n         * error.message //=> 'Unclosed block'\n         */\n        this.reason = message;\n\n        if (file) {\n            /**\n             * @member {string} - Absolute path to the broken file.\n             *\n             * @example\n             * error.file       //=> 'a.sass'\n             * error.input.file //=> 'a.css'\n             */\n            this.file = file;\n        }\n        if (source) {\n            /**\n             * @member {string} - Source code of the broken file.\n             *\n             * @example\n             * error.source       //=> 'a { b {} }'\n             * error.input.column //=> 'a b { }'\n             */\n            this.source = source;\n        }\n        if (plugin) {\n            /**\n             * @member {string} - Plugin name, if error came from plugin.\n             *\n             * @example\n             * error.plugin //=> 'postcss-vars'\n             */\n            this.plugin = plugin;\n        }\n        if (typeof line !== 'undefined' && typeof column !== 'undefined') {\n            /**\n             * @member {number} - Source line of the error.\n             *\n             * @example\n             * error.line       //=> 2\n             * error.input.line //=> 4\n             */\n            this.line = line;\n            /**\n             * @member {number} - Source column of the error.\n             *\n             * @example\n             * error.column       //=> 1\n             * error.input.column //=> 4\n             */\n            this.column = column;\n        }\n\n        this.setMessage();\n\n        if (Error.captureStackTrace) {\n            Error.captureStackTrace(this, CssSyntaxError);\n        }\n    }\n\n    CssSyntaxError.prototype.setMessage = function setMessage() {\n        /**\n         * @member {string} - Full error text in the GNU error format\n         *                    with plugin, file, line and column.\n         *\n         * @example\n         * error.message //=> 'a.css:1:1: Unclosed block'\n         */\n        this.message = this.plugin ? this.plugin + ': ' : '';\n        this.message += this.file ? this.file : '<css input>';\n        if (typeof this.line !== 'undefined') {\n            this.message += ':' + this.line + ':' + this.column;\n        }\n        this.message += ': ' + this.reason;\n    };\n\n    /**\n     * Returns a few lines of CSS source that caused the error.\n     *\n     * If the CSS has an input source map without `sourceContent`,\n     * this method will return an empty string.\n     *\n     * @param {boolean} [color] whether arrow will be colored red by terminal\n     *                          color codes. By default, PostCSS will detect\n     *                          color support by `process.stdout.isTTY`\n     *                          and `process.env.NODE_DISABLE_COLORS`.\n     *\n     * @example\n     * error.showSourceCode() //=> \"  4 | }\n     *                        //      5 | a {\n     *                        //    > 6 |   bad\n     *                        //        |   ^\n     *                        //      7 | }\n     *                        //      8 | b {\"\n     *\n     * @return {string} few lines of CSS source that caused the error\n     */\n\n\n    CssSyntaxError.prototype.showSourceCode = function showSourceCode(color) {\n        var _this = this;\n\n        if (!this.source) return '';\n\n        var css = this.source;\n        if (typeof color === 'undefined') color = _supportsColor2.default;\n        if (color) css = (0, _terminalHighlight2.default)(css);\n\n        var lines = css.split(/\\r?\\n/);\n        var start = Math.max(this.line - 3, 0);\n        var end = Math.min(this.line + 2, lines.length);\n\n        var maxWidth = String(end).length;\n        var colors = new _chalk2.default.constructor({ enabled: true });\n\n        function mark(text) {\n            if (color) {\n                return colors.red.bold(text);\n            } else {\n                return text;\n            }\n        }\n        function aside(text) {\n            if (color) {\n                return colors.gray(text);\n            } else {\n                return text;\n            }\n        }\n\n        return lines.slice(start, end).map(function (line, index) {\n            var number = start + 1 + index;\n            var gutter = ' ' + (' ' + number).slice(-maxWidth) + ' | ';\n            if (number === _this.line) {\n                var spacing = aside(gutter.replace(/\\d/g, ' ')) + line.slice(0, _this.column - 1).replace(/[^\\t]/g, ' ');\n                return mark('>') + aside(gutter) + line + '\\n ' + spacing + mark('^');\n            } else {\n                return ' ' + aside(gutter) + line;\n            }\n        }).join('\\n');\n    };\n\n    /**\n     * Returns error position, message and source code of the broken part.\n     *\n     * @example\n     * error.toString() //=> \"CssSyntaxError: app.css:1:1: Unclosed block\n     *                  //    > 1 | a {\n     *                  //        | ^\"\n     *\n     * @return {string} error position, message and source code\n     */\n\n\n    CssSyntaxError.prototype.toString = function toString() {\n        var code = this.showSourceCode();\n        if (code) {\n            code = '\\n\\n' + code + '\\n';\n        }\n        return this.name + ': ' + this.message + code;\n    };\n\n    /**\n     * @memberof CssSyntaxError#\n     * @member {Input} input - Input object with PostCSS internal information\n     *                         about input file. If input has source map\n     *                         from previous tool, PostCSS will use origin\n     *                         (for example, Sass) source. You can use this\n     *                         object to get PostCSS input source.\n     *\n     * @example\n     * error.input.file //=> 'a.css'\n     * error.file       //=> 'a.sass'\n     */\n\n    return CssSyntaxError;\n}();\n\nexports.default = CssSyntaxError;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 71 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _node = __webpack_require__(26);\n\nvar _node2 = _interopRequireDefault(_node);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * Represents a CSS declaration.\n *\n * @extends Node\n *\n * @example\n * const root = postcss.parse('a { color: black }');\n * const decl = root.first.first;\n * decl.type       //=> 'decl'\n * decl.toString() //=> ' color: black'\n */\nvar Declaration = function (_Node) {\n  _inherits(Declaration, _Node);\n\n  function Declaration(defaults) {\n    _classCallCheck(this, Declaration);\n\n    var _this = _possibleConstructorReturn(this, _Node.call(this, defaults));\n\n    _this.type = 'decl';\n    return _this;\n  }\n\n  /**\n   * @memberof Declaration#\n   * @member {string} prop - the declaration’s property name\n   *\n   * @example\n   * const root = postcss.parse('a { color: black }');\n   * const decl = root.first.first;\n   * decl.prop //=> 'color'\n   */\n\n  /**\n   * @memberof Declaration#\n   * @member {string} value - the declaration’s value\n   *\n   * @example\n   * const root = postcss.parse('a { color: black }');\n   * const decl = root.first.first;\n   * decl.value //=> 'black'\n   */\n\n  /**\n   * @memberof Declaration#\n   * @member {boolean} important - `true` if the declaration\n   *                               has an !important annotation.\n   *\n   * @example\n   * const root = postcss.parse('a { color: black !important; color: red }');\n   * root.first.first.important //=> true\n   * root.first.last.important  //=> undefined\n   */\n\n  /**\n   * @memberof Declaration#\n   * @member {object} raws - Information to generate byte-to-byte equal\n   *                         node string as it was in the origin input.\n   *\n   * Every parser saves its own properties,\n   * but the default CSS parser uses:\n   *\n   * * `before`: the space symbols before the node. It also stores `*`\n   *   and `_` symbols before the declaration (IE hack).\n   * * `between`: the symbols between the property and value\n   *   for declarations.\n   * * `important`: the content of the important statement,\n   *   if it is not just `!important`.\n   *\n   * PostCSS cleans declaration from comments and extra spaces,\n   * but it stores origin content in raws properties.\n   * As such, if you don’t change a declaration’s value,\n   * PostCSS will use the raw value with comments.\n   *\n   * @example\n   * const root = postcss.parse('a {\\n  color:black\\n}')\n   * root.first.first.raws //=> { before: '\\n  ', between: ':' }\n   */\n\n  return Declaration;\n}(_node2.default);\n\nexports.default = Declaration;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 72 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; }; }();\n\nvar _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; };\n\nvar _mapGenerator = __webpack_require__(141);\n\nvar _mapGenerator2 = _interopRequireDefault(_mapGenerator);\n\nvar _stringify2 = __webpack_require__(76);\n\nvar _stringify3 = _interopRequireDefault(_stringify2);\n\nvar _result = __webpack_require__(144);\n\nvar _result2 = _interopRequireDefault(_result);\n\nvar _parse = __webpack_require__(73);\n\nvar _parse2 = _interopRequireDefault(_parse);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction isPromise(obj) {\n    return (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && typeof obj.then === 'function';\n}\n\n/**\n * A Promise proxy for the result of PostCSS transformations.\n *\n * A `LazyResult` instance is returned by {@link Processor#process}.\n *\n * @example\n * const lazy = postcss([cssnext]).process(css);\n */\n\nvar LazyResult = function () {\n    function LazyResult(processor, css, opts) {\n        _classCallCheck(this, LazyResult);\n\n        this.stringified = false;\n        this.processed = false;\n\n        var root = void 0;\n        if ((typeof css === 'undefined' ? 'undefined' : _typeof(css)) === 'object' && css.type === 'root') {\n            root = css;\n        } else if (css instanceof LazyResult || css instanceof _result2.default) {\n            root = css.root;\n            if (css.map) {\n                if (typeof opts.map === 'undefined') opts.map = {};\n                if (!opts.map.inline) opts.map.inline = false;\n                opts.map.prev = css.map;\n            }\n        } else {\n            var parser = _parse2.default;\n            if (opts.syntax) parser = opts.syntax.parse;\n            if (opts.parser) parser = opts.parser;\n            if (parser.parse) parser = parser.parse;\n\n            try {\n                root = parser(css, opts);\n            } catch (error) {\n                this.error = error;\n            }\n        }\n\n        this.result = new _result2.default(processor, root, opts);\n    }\n\n    /**\n     * Returns a {@link Processor} instance, which will be used\n     * for CSS transformations.\n     * @type {Processor}\n     */\n\n\n    /**\n     * Processes input CSS through synchronous plugins\n     * and calls {@link Result#warnings()}.\n     *\n     * @return {Warning[]} warnings from plugins\n     */\n    LazyResult.prototype.warnings = function warnings() {\n        return this.sync().warnings();\n    };\n\n    /**\n     * Alias for the {@link LazyResult#css} property.\n     *\n     * @example\n     * lazy + '' === lazy.css;\n     *\n     * @return {string} output CSS\n     */\n\n\n    LazyResult.prototype.toString = function toString() {\n        return this.css;\n    };\n\n    /**\n     * Processes input CSS through synchronous and asynchronous plugins\n     * and calls `onFulfilled` with a Result instance. If a plugin throws\n     * an error, the `onRejected` callback will be executed.\n     *\n     * It implements standard Promise API.\n     *\n     * @param {onFulfilled} onFulfilled - callback will be executed\n     *                                    when all plugins will finish work\n     * @param {onRejected}  onRejected  - callback will be executed on any error\n     *\n     * @return {Promise} Promise API to make queue\n     *\n     * @example\n     * postcss([cssnext]).process(css).then(result => {\n     *   console.log(result.css);\n     * });\n     */\n\n\n    LazyResult.prototype.then = function then(onFulfilled, onRejected) {\n        return this.async().then(onFulfilled, onRejected);\n    };\n\n    /**\n     * Processes input CSS through synchronous and asynchronous plugins\n     * and calls onRejected for each error thrown in any plugin.\n     *\n     * It implements standard Promise API.\n     *\n     * @param {onRejected} onRejected - callback will be executed on any error\n     *\n     * @return {Promise} Promise API to make queue\n     *\n     * @example\n     * postcss([cssnext]).process(css).then(result => {\n     *   console.log(result.css);\n     * }).catch(error => {\n     *   console.error(error);\n     * });\n     */\n\n\n    LazyResult.prototype.catch = function _catch(onRejected) {\n        return this.async().catch(onRejected);\n    };\n\n    LazyResult.prototype.handleError = function handleError(error, plugin) {\n        try {\n            this.error = error;\n            if (error.name === 'CssSyntaxError' && !error.plugin) {\n                error.plugin = plugin.postcssPlugin;\n                error.setMessage();\n            } else if (plugin.postcssVersion) {\n                var pluginName = plugin.postcssPlugin;\n                var pluginVer = plugin.postcssVersion;\n                var runtimeVer = this.result.processor.version;\n                var a = pluginVer.split('.');\n                var b = runtimeVer.split('.');\n\n                if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {\n                    console.error('Your current PostCSS version ' + 'is ' + runtimeVer + ', but ' + pluginName + ' ' + 'uses ' + pluginVer + '. Perhaps this is ' + 'the source of the error below.');\n                }\n            }\n        } catch (err) {\n            if (console && console.error) console.error(err);\n        }\n    };\n\n    LazyResult.prototype.asyncTick = function asyncTick(resolve, reject) {\n        var _this = this;\n\n        if (this.plugin >= this.processor.plugins.length) {\n            this.processed = true;\n            return resolve();\n        }\n\n        try {\n            var plugin = this.processor.plugins[this.plugin];\n            var promise = this.run(plugin);\n            this.plugin += 1;\n\n            if (isPromise(promise)) {\n                promise.then(function () {\n                    _this.asyncTick(resolve, reject);\n                }).catch(function (error) {\n                    _this.handleError(error, plugin);\n                    _this.processed = true;\n                    reject(error);\n                });\n            } else {\n                this.asyncTick(resolve, reject);\n            }\n        } catch (error) {\n            this.processed = true;\n            reject(error);\n        }\n    };\n\n    LazyResult.prototype.async = function async() {\n        var _this2 = this;\n\n        if (this.processed) {\n            return new Promise(function (resolve, reject) {\n                if (_this2.error) {\n                    reject(_this2.error);\n                } else {\n                    resolve(_this2.stringify());\n                }\n            });\n        }\n        if (this.processing) {\n            return this.processing;\n        }\n\n        this.processing = new Promise(function (resolve, reject) {\n            if (_this2.error) return reject(_this2.error);\n            _this2.plugin = 0;\n            _this2.asyncTick(resolve, reject);\n        }).then(function () {\n            _this2.processed = true;\n            return _this2.stringify();\n        });\n\n        return this.processing;\n    };\n\n    LazyResult.prototype.sync = function sync() {\n        if (this.processed) return this.result;\n        this.processed = true;\n\n        if (this.processing) {\n            throw new Error('Use process(css).then(cb) to work with async plugins');\n        }\n\n        if (this.error) throw this.error;\n\n        for (var _iterator = this.result.processor.plugins, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n            var _ref;\n\n            if (_isArray) {\n                if (_i >= _iterator.length) break;\n                _ref = _iterator[_i++];\n            } else {\n                _i = _iterator.next();\n                if (_i.done) break;\n                _ref = _i.value;\n            }\n\n            var plugin = _ref;\n\n            var promise = this.run(plugin);\n            if (isPromise(promise)) {\n                throw new Error('Use process(css).then(cb) to work with async plugins');\n            }\n        }\n\n        return this.result;\n    };\n\n    LazyResult.prototype.run = function run(plugin) {\n        this.result.lastPlugin = plugin;\n\n        try {\n            return plugin(this.result.root, this.result);\n        } catch (error) {\n            this.handleError(error, plugin);\n            throw error;\n        }\n    };\n\n    LazyResult.prototype.stringify = function stringify() {\n        if (this.stringified) return this.result;\n        this.stringified = true;\n\n        this.sync();\n\n        var opts = this.result.opts;\n        var str = _stringify3.default;\n        if (opts.syntax) str = opts.syntax.stringify;\n        if (opts.stringifier) str = opts.stringifier;\n        if (str.stringify) str = str.stringify;\n\n        var map = new _mapGenerator2.default(str, this.result.root, this.result.opts);\n        var data = map.generate();\n        this.result.css = data[0];\n        this.result.map = data[1];\n\n        return this.result;\n    };\n\n    _createClass(LazyResult, [{\n        key: 'processor',\n        get: function get() {\n            return this.result.processor;\n        }\n\n        /**\n         * Options from the {@link Processor#process} call.\n         * @type {processOptions}\n         */\n\n    }, {\n        key: 'opts',\n        get: function get() {\n            return this.result.opts;\n        }\n\n        /**\n         * Processes input CSS through synchronous plugins, converts `Root`\n         * to a CSS string and returns {@link Result#css}.\n         *\n         * This property will only work with synchronous plugins.\n         * If the processor contains any asynchronous plugins\n         * it will throw an error. This is why this method is only\n         * for debug purpose, you should always use {@link LazyResult#then}.\n         *\n         * @type {string}\n         * @see Result#css\n         */\n\n    }, {\n        key: 'css',\n        get: function get() {\n            return this.stringify().css;\n        }\n\n        /**\n         * An alias for the `css` property. Use it with syntaxes\n         * that generate non-CSS output.\n         *\n         * This property will only work with synchronous plugins.\n         * If the processor contains any asynchronous plugins\n         * it will throw an error. This is why this method is only\n         * for debug purpose, you should always use {@link LazyResult#then}.\n         *\n         * @type {string}\n         * @see Result#content\n         */\n\n    }, {\n        key: 'content',\n        get: function get() {\n            return this.stringify().content;\n        }\n\n        /**\n         * Processes input CSS through synchronous plugins\n         * and returns {@link Result#map}.\n         *\n         * This property will only work with synchronous plugins.\n         * If the processor contains any asynchronous plugins\n         * it will throw an error. This is why this method is only\n         * for debug purpose, you should always use {@link LazyResult#then}.\n         *\n         * @type {SourceMapGenerator}\n         * @see Result#map\n         */\n\n    }, {\n        key: 'map',\n        get: function get() {\n            return this.stringify().map;\n        }\n\n        /**\n         * Processes input CSS through synchronous plugins\n         * and returns {@link Result#root}.\n         *\n         * This property will only work with synchronous plugins. If the processor\n         * contains any asynchronous plugins it will throw an error.\n         *\n         * This is why this method is only for debug purpose,\n         * you should always use {@link LazyResult#then}.\n         *\n         * @type {Root}\n         * @see Result#root\n         */\n\n    }, {\n        key: 'root',\n        get: function get() {\n            return this.sync().root;\n        }\n\n        /**\n         * Processes input CSS through synchronous plugins\n         * and returns {@link Result#messages}.\n         *\n         * This property will only work with synchronous plugins. If the processor\n         * contains any asynchronous plugins it will throw an error.\n         *\n         * This is why this method is only for debug purpose,\n         * you should always use {@link LazyResult#then}.\n         *\n         * @type {Message[]}\n         * @see Result#messages\n         */\n\n    }, {\n        key: 'messages',\n        get: function get() {\n            return this.sync().messages;\n        }\n    }]);\n\n    return LazyResult;\n}();\n\nexports.default = LazyResult;\n\n/**\n * @callback onFulfilled\n * @param {Result} result\n */\n\n/**\n * @callback onRejected\n * @param {Error} error\n */\n\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 73 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = parse;\n\nvar _parser = __webpack_require__(74);\n\nvar _parser2 = _interopRequireDefault(_parser);\n\nvar _input = __webpack_require__(25);\n\nvar _input2 = _interopRequireDefault(_input);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction parse(css, opts) {\n    if (opts && opts.safe) {\n        throw new Error('Option safe was removed. ' + 'Use parser: require(\"postcss-safe-parser\")');\n    }\n\n    var input = new _input2.default(css, opts);\n    var parser = new _parser2.default(input);\n    try {\n        parser.parse();\n    } catch (e) {\n        if (e.name === 'CssSyntaxError' && opts && opts.from) {\n            if (/\\.scss$/i.test(opts.from)) {\n                e.message += '\\nYou tried to parse SCSS with ' + 'the standard CSS parser; ' + 'try again with the postcss-scss parser';\n            } else if (/\\.sass/i.test(opts.from)) {\n                e.message += '\\nYou tried to parse Sass with ' + 'the standard CSS parser; ' + 'try again with the postcss-sass parser';\n            } else if (/\\.less$/i.test(opts.from)) {\n                e.message += '\\nYou tried to parse Less with ' + 'the standard CSS parser; ' + 'try again with the postcss-less parser';\n            }\n        }\n        throw e;\n    }\n\n    return parser.root;\n}\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 74 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _declaration = __webpack_require__(71);\n\nvar _declaration2 = _interopRequireDefault(_declaration);\n\nvar _tokenize = __webpack_require__(77);\n\nvar _tokenize2 = _interopRequireDefault(_tokenize);\n\nvar _comment = __webpack_require__(24);\n\nvar _comment2 = _interopRequireDefault(_comment);\n\nvar _atRule = __webpack_require__(23);\n\nvar _atRule2 = _interopRequireDefault(_atRule);\n\nvar _root = __webpack_require__(75);\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _rule = __webpack_require__(27);\n\nvar _rule2 = _interopRequireDefault(_rule);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Parser = function () {\n    function Parser(input) {\n        _classCallCheck(this, Parser);\n\n        this.input = input;\n\n        this.root = new _root2.default();\n        this.current = this.root;\n        this.spaces = '';\n        this.semicolon = false;\n\n        this.createTokenizer();\n        this.root.source = { input: input, start: { line: 1, column: 1 } };\n    }\n\n    Parser.prototype.createTokenizer = function createTokenizer() {\n        this.tokenizer = (0, _tokenize2.default)(this.input);\n    };\n\n    Parser.prototype.parse = function parse() {\n        var token = void 0;\n        while (!this.tokenizer.endOfFile()) {\n            token = this.tokenizer.nextToken();\n\n            switch (token[0]) {\n\n                case 'space':\n                    this.spaces += token[1];\n                    break;\n\n                case ';':\n                    this.freeSemicolon(token);\n                    break;\n\n                case '}':\n                    this.end(token);\n                    break;\n\n                case 'comment':\n                    this.comment(token);\n                    break;\n\n                case 'at-word':\n                    this.atrule(token);\n                    break;\n\n                case '{':\n                    this.emptyRule(token);\n                    break;\n\n                default:\n                    this.other(token);\n                    break;\n            }\n        }\n        this.endFile();\n    };\n\n    Parser.prototype.comment = function comment(token) {\n        var node = new _comment2.default();\n        this.init(node, token[2], token[3]);\n        node.source.end = { line: token[4], column: token[5] };\n\n        var text = token[1].slice(2, -2);\n        if (/^\\s*$/.test(text)) {\n            node.text = '';\n            node.raws.left = text;\n            node.raws.right = '';\n        } else {\n            var match = text.match(/^(\\s*)([^]*[^\\s])(\\s*)$/);\n            node.text = match[2];\n            node.raws.left = match[1];\n            node.raws.right = match[3];\n        }\n    };\n\n    Parser.prototype.emptyRule = function emptyRule(token) {\n        var node = new _rule2.default();\n        this.init(node, token[2], token[3]);\n        node.selector = '';\n        node.raws.between = '';\n        this.current = node;\n    };\n\n    Parser.prototype.other = function other(start) {\n        var end = false;\n        var type = null;\n        var colon = false;\n        var bracket = null;\n        var brackets = [];\n\n        var tokens = [];\n        var token = start;\n        while (token) {\n            type = token[0];\n            tokens.push(token);\n\n            if (type === '(' || type === '[') {\n                if (!bracket) bracket = token;\n                brackets.push(type === '(' ? ')' : ']');\n            } else if (brackets.length === 0) {\n                if (type === ';') {\n                    if (colon) {\n                        this.decl(tokens);\n                        return;\n                    } else {\n                        break;\n                    }\n                } else if (type === '{') {\n                    this.rule(tokens);\n                    return;\n                } else if (type === '}') {\n                    this.tokenizer.back(tokens.pop());\n                    end = true;\n                    break;\n                } else if (type === ':') {\n                    colon = true;\n                }\n            } else if (type === brackets[brackets.length - 1]) {\n                brackets.pop();\n                if (brackets.length === 0) bracket = null;\n            }\n\n            token = this.tokenizer.nextToken();\n        }\n\n        if (this.tokenizer.endOfFile()) end = true;\n        if (brackets.length > 0) this.unclosedBracket(bracket);\n\n        if (end && colon) {\n            while (tokens.length) {\n                token = tokens[tokens.length - 1][0];\n                if (token !== 'space' && token !== 'comment') break;\n                this.tokenizer.back(tokens.pop());\n            }\n            this.decl(tokens);\n            return;\n        } else {\n            this.unknownWord(tokens);\n        }\n    };\n\n    Parser.prototype.rule = function rule(tokens) {\n        tokens.pop();\n\n        var node = new _rule2.default();\n        this.init(node, tokens[0][2], tokens[0][3]);\n\n        node.raws.between = this.spacesAndCommentsFromEnd(tokens);\n        this.raw(node, 'selector', tokens);\n        this.current = node;\n    };\n\n    Parser.prototype.decl = function decl(tokens) {\n        var node = new _declaration2.default();\n        this.init(node);\n\n        var last = tokens[tokens.length - 1];\n        if (last[0] === ';') {\n            this.semicolon = true;\n            tokens.pop();\n        }\n        if (last[4]) {\n            node.source.end = { line: last[4], column: last[5] };\n        } else {\n            node.source.end = { line: last[2], column: last[3] };\n        }\n\n        while (tokens[0][0] !== 'word') {\n            if (tokens.length === 1) this.unknownWord(tokens);\n            node.raws.before += tokens.shift()[1];\n        }\n        node.source.start = { line: tokens[0][2], column: tokens[0][3] };\n\n        node.prop = '';\n        while (tokens.length) {\n            var type = tokens[0][0];\n            if (type === ':' || type === 'space' || type === 'comment') {\n                break;\n            }\n            node.prop += tokens.shift()[1];\n        }\n\n        node.raws.between = '';\n\n        var token = void 0;\n        while (tokens.length) {\n            token = tokens.shift();\n\n            if (token[0] === ':') {\n                node.raws.between += token[1];\n                break;\n            } else {\n                node.raws.between += token[1];\n            }\n        }\n\n        if (node.prop[0] === '_' || node.prop[0] === '*') {\n            node.raws.before += node.prop[0];\n            node.prop = node.prop.slice(1);\n        }\n        node.raws.between += this.spacesAndCommentsFromStart(tokens);\n        this.precheckMissedSemicolon(tokens);\n\n        for (var i = tokens.length - 1; i > 0; i--) {\n            token = tokens[i];\n            if (token[1] === '!important') {\n                node.important = true;\n                var string = this.stringFrom(tokens, i);\n                string = this.spacesFromEnd(tokens) + string;\n                if (string !== ' !important') node.raws.important = string;\n                break;\n            } else if (token[1] === 'important') {\n                var cache = tokens.slice(0);\n                var str = '';\n                for (var j = i; j > 0; j--) {\n                    var _type = cache[j][0];\n                    if (str.trim().indexOf('!') === 0 && _type !== 'space') {\n                        break;\n                    }\n                    str = cache.pop()[1] + str;\n                }\n                if (str.trim().indexOf('!') === 0) {\n                    node.important = true;\n                    node.raws.important = str;\n                    tokens = cache;\n                }\n            }\n\n            if (token[0] !== 'space' && token[0] !== 'comment') {\n                break;\n            }\n        }\n\n        this.raw(node, 'value', tokens);\n\n        if (node.value.indexOf(':') !== -1) this.checkMissedSemicolon(tokens);\n    };\n\n    Parser.prototype.atrule = function atrule(token) {\n        var node = new _atRule2.default();\n        node.name = token[1].slice(1);\n        if (node.name === '') {\n            this.unnamedAtrule(node, token);\n        }\n        this.init(node, token[2], token[3]);\n\n        var last = false;\n        var open = false;\n        var params = [];\n\n        while (!this.tokenizer.endOfFile()) {\n            token = this.tokenizer.nextToken();\n\n            if (token[0] === ';') {\n                node.source.end = { line: token[2], column: token[3] };\n                this.semicolon = true;\n                break;\n            } else if (token[0] === '{') {\n                open = true;\n                break;\n            } else if (token[0] === '}') {\n                this.end(token);\n                break;\n            } else {\n                params.push(token);\n            }\n\n            if (this.tokenizer.endOfFile()) {\n                last = true;\n                break;\n            }\n        }\n\n        node.raws.between = this.spacesAndCommentsFromEnd(params);\n        if (params.length) {\n            node.raws.afterName = this.spacesAndCommentsFromStart(params);\n            this.raw(node, 'params', params);\n            if (last) {\n                token = params[params.length - 1];\n                node.source.end = { line: token[4], column: token[5] };\n                this.spaces = node.raws.between;\n                node.raws.between = '';\n            }\n        } else {\n            node.raws.afterName = '';\n            node.params = '';\n        }\n\n        if (open) {\n            node.nodes = [];\n            this.current = node;\n        }\n    };\n\n    Parser.prototype.end = function end(token) {\n        if (this.current.nodes && this.current.nodes.length) {\n            this.current.raws.semicolon = this.semicolon;\n        }\n        this.semicolon = false;\n\n        this.current.raws.after = (this.current.raws.after || '') + this.spaces;\n        this.spaces = '';\n\n        if (this.current.parent) {\n            this.current.source.end = { line: token[2], column: token[3] };\n            this.current = this.current.parent;\n        } else {\n            this.unexpectedClose(token);\n        }\n    };\n\n    Parser.prototype.endFile = function endFile() {\n        if (this.current.parent) this.unclosedBlock();\n        if (this.current.nodes && this.current.nodes.length) {\n            this.current.raws.semicolon = this.semicolon;\n        }\n        this.current.raws.after = (this.current.raws.after || '') + this.spaces;\n    };\n\n    Parser.prototype.freeSemicolon = function freeSemicolon(token) {\n        this.spaces += token[1];\n        if (this.current.nodes) {\n            var prev = this.current.nodes[this.current.nodes.length - 1];\n            if (prev && prev.type === 'rule') {\n                prev.raws.ownSemicolon = this.spaces;\n                this.spaces = '';\n            }\n        }\n    };\n\n    // Helpers\n\n    Parser.prototype.init = function init(node, line, column) {\n        this.current.push(node);\n\n        node.source = { start: { line: line, column: column }, input: this.input };\n        node.raws.before = this.spaces;\n        this.spaces = '';\n        if (node.type !== 'comment') this.semicolon = false;\n    };\n\n    Parser.prototype.raw = function raw(node, prop, tokens) {\n        var token = void 0,\n            type = void 0;\n        var length = tokens.length;\n        var value = '';\n        var clean = true;\n        for (var i = 0; i < length; i += 1) {\n            token = tokens[i];\n            type = token[0];\n            if (type === 'comment' || type === 'space' && i === length - 1) {\n                clean = false;\n            } else {\n                value += token[1];\n            }\n        }\n        if (!clean) {\n            var raw = tokens.reduce(function (all, i) {\n                return all + i[1];\n            }, '');\n            node.raws[prop] = { value: value, raw: raw };\n        }\n        node[prop] = value;\n    };\n\n    Parser.prototype.spacesAndCommentsFromEnd = function spacesAndCommentsFromEnd(tokens) {\n        var lastTokenType = void 0;\n        var spaces = '';\n        while (tokens.length) {\n            lastTokenType = tokens[tokens.length - 1][0];\n            if (lastTokenType !== 'space' && lastTokenType !== 'comment') break;\n            spaces = tokens.pop()[1] + spaces;\n        }\n        return spaces;\n    };\n\n    Parser.prototype.spacesAndCommentsFromStart = function spacesAndCommentsFromStart(tokens) {\n        var next = void 0;\n        var spaces = '';\n        while (tokens.length) {\n            next = tokens[0][0];\n            if (next !== 'space' && next !== 'comment') break;\n            spaces += tokens.shift()[1];\n        }\n        return spaces;\n    };\n\n    Parser.prototype.spacesFromEnd = function spacesFromEnd(tokens) {\n        var lastTokenType = void 0;\n        var spaces = '';\n        while (tokens.length) {\n            lastTokenType = tokens[tokens.length - 1][0];\n            if (lastTokenType !== 'space') break;\n            spaces = tokens.pop()[1] + spaces;\n        }\n        return spaces;\n    };\n\n    Parser.prototype.stringFrom = function stringFrom(tokens, from) {\n        var result = '';\n        for (var i = from; i < tokens.length; i++) {\n            result += tokens[i][1];\n        }\n        tokens.splice(from, tokens.length - from);\n        return result;\n    };\n\n    Parser.prototype.colon = function colon(tokens) {\n        var brackets = 0;\n        var token = void 0,\n            type = void 0,\n            prev = void 0;\n        for (var i = 0; i < tokens.length; i++) {\n            token = tokens[i];\n            type = token[0];\n\n            if (type === '(') {\n                brackets += 1;\n            } else if (type === ')') {\n                brackets -= 1;\n            } else if (brackets === 0 && type === ':') {\n                if (!prev) {\n                    this.doubleColon(token);\n                } else if (prev[0] === 'word' && prev[1] === 'progid') {\n                    continue;\n                } else {\n                    return i;\n                }\n            }\n\n            prev = token;\n        }\n        return false;\n    };\n\n    // Errors\n\n    Parser.prototype.unclosedBracket = function unclosedBracket(bracket) {\n        throw this.input.error('Unclosed bracket', bracket[2], bracket[3]);\n    };\n\n    Parser.prototype.unknownWord = function unknownWord(tokens) {\n        throw this.input.error('Unknown word', tokens[0][2], tokens[0][3]);\n    };\n\n    Parser.prototype.unexpectedClose = function unexpectedClose(token) {\n        throw this.input.error('Unexpected }', token[2], token[3]);\n    };\n\n    Parser.prototype.unclosedBlock = function unclosedBlock() {\n        var pos = this.current.source.start;\n        throw this.input.error('Unclosed block', pos.line, pos.column);\n    };\n\n    Parser.prototype.doubleColon = function doubleColon(token) {\n        throw this.input.error('Double colon', token[2], token[3]);\n    };\n\n    Parser.prototype.unnamedAtrule = function unnamedAtrule(node, token) {\n        throw this.input.error('At-rule without name', token[2], token[3]);\n    };\n\n    Parser.prototype.precheckMissedSemicolon = function precheckMissedSemicolon(tokens) {\n        // Hook for Safe Parser\n        tokens;\n    };\n\n    Parser.prototype.checkMissedSemicolon = function checkMissedSemicolon(tokens) {\n        var colon = this.colon(tokens);\n        if (colon === false) return;\n\n        var founded = 0;\n        var token = void 0;\n        for (var j = colon - 1; j >= 0; j--) {\n            token = tokens[j];\n            if (token[0] !== 'space') {\n                founded += 1;\n                if (founded === 2) break;\n            }\n        }\n        throw this.input.error('Missed semicolon', token[2], token[3]);\n    };\n\n    return Parser;\n}();\n\nexports.default = Parser;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 75 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _container = __webpack_require__(12);\n\nvar _container2 = _interopRequireDefault(_container);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * Represents a CSS file and contains all its parsed nodes.\n *\n * @extends Container\n *\n * @example\n * const root = postcss.parse('a{color:black} b{z-index:2}');\n * root.type         //=> 'root'\n * root.nodes.length //=> 2\n */\nvar Root = function (_Container) {\n    _inherits(Root, _Container);\n\n    function Root(defaults) {\n        _classCallCheck(this, Root);\n\n        var _this = _possibleConstructorReturn(this, _Container.call(this, defaults));\n\n        _this.type = 'root';\n        if (!_this.nodes) _this.nodes = [];\n        return _this;\n    }\n\n    Root.prototype.removeChild = function removeChild(child) {\n        child = this.index(child);\n\n        if (child === 0 && this.nodes.length > 1) {\n            this.nodes[1].raws.before = this.nodes[child].raws.before;\n        }\n\n        return _Container.prototype.removeChild.call(this, child);\n    };\n\n    Root.prototype.normalize = function normalize(child, sample, type) {\n        var nodes = _Container.prototype.normalize.call(this, child);\n\n        if (sample) {\n            if (type === 'prepend') {\n                if (this.nodes.length > 1) {\n                    sample.raws.before = this.nodes[1].raws.before;\n                } else {\n                    delete sample.raws.before;\n                }\n            } else if (this.first !== sample) {\n                for (var _iterator = nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n                    var _ref;\n\n                    if (_isArray) {\n                        if (_i >= _iterator.length) break;\n                        _ref = _iterator[_i++];\n                    } else {\n                        _i = _iterator.next();\n                        if (_i.done) break;\n                        _ref = _i.value;\n                    }\n\n                    var node = _ref;\n\n                    node.raws.before = sample.raws.before;\n                }\n            }\n        }\n\n        return nodes;\n    };\n\n    /**\n     * Returns a {@link Result} instance representing the root’s CSS.\n     *\n     * @param {processOptions} [opts] - options with only `to` and `map` keys\n     *\n     * @return {Result} result with current root’s CSS\n     *\n     * @example\n     * const root1 = postcss.parse(css1, { from: 'a.css' });\n     * const root2 = postcss.parse(css2, { from: 'b.css' });\n     * root1.append(root2);\n     * const result = root1.toResult({ to: 'all.css', map: true });\n     */\n\n\n    Root.prototype.toResult = function toResult() {\n        var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n        var LazyResult = __webpack_require__(72);\n        var Processor = __webpack_require__(143);\n\n        var lazy = new LazyResult(new Processor(), this, opts);\n        return lazy.stringify();\n    };\n\n    /**\n     * @memberof Root#\n     * @member {object} raws - Information to generate byte-to-byte equal\n     *                         node string as it was in the origin input.\n     *\n     * Every parser saves its own properties,\n     * but the default CSS parser uses:\n     *\n     * * `after`: the space symbols after the last child to the end of file.\n     * * `semicolon`: is the last child has an (optional) semicolon.\n     *\n     * @example\n     * postcss.parse('a {}\\n').raws //=> { after: '\\n' }\n     * postcss.parse('a {}').raws   //=> { after: '' }\n     */\n\n    return Root;\n}(_container2.default);\n\nexports.default = Root;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 76 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = stringify;\n\nvar _stringifier = __webpack_require__(28);\n\nvar _stringifier2 = _interopRequireDefault(_stringifier);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction stringify(node, builder) {\n    var str = new _stringifier2.default(builder);\n    str.stringify(node);\n}\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 77 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = tokenizer;\nvar SINGLE_QUOTE = 39;\nvar DOUBLE_QUOTE = 34;\nvar BACKSLASH = 92;\nvar SLASH = 47;\nvar NEWLINE = 10;\nvar SPACE = 32;\nvar FEED = 12;\nvar TAB = 9;\nvar CR = 13;\nvar OPEN_SQUARE = 91;\nvar CLOSE_SQUARE = 93;\nvar OPEN_PARENTHESES = 40;\nvar CLOSE_PARENTHESES = 41;\nvar OPEN_CURLY = 123;\nvar CLOSE_CURLY = 125;\nvar SEMICOLON = 59;\nvar ASTERISK = 42;\nvar COLON = 58;\nvar AT = 64;\n\nvar RE_AT_END = /[ \\n\\t\\r\\f\\{\\(\\)'\"\\\\;/\\[\\]#]/g;\nvar RE_WORD_END = /[ \\n\\t\\r\\f\\(\\)\\{\\}:;@!'\"\\\\\\]\\[#]|\\/(?=\\*)/g;\nvar RE_BAD_BRACKET = /.[\\\\\\/\\(\"'\\n]/;\n\nfunction tokenizer(input) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    var css = input.css.valueOf();\n    var ignore = options.ignoreErrors;\n\n    var code = void 0,\n        next = void 0,\n        quote = void 0,\n        lines = void 0,\n        last = void 0,\n        content = void 0,\n        escape = void 0,\n        nextLine = void 0,\n        nextOffset = void 0,\n        escaped = void 0,\n        escapePos = void 0,\n        prev = void 0,\n        n = void 0,\n        currentToken = void 0;\n\n    var length = css.length;\n    var offset = -1;\n    var line = 1;\n    var pos = 0;\n    var buffer = [];\n    var returned = [];\n\n    function unclosed(what) {\n        throw input.error('Unclosed ' + what, line, pos - offset);\n    }\n\n    function endOfFile() {\n        return returned.length === 0 && pos >= length;\n    }\n\n    function nextToken() {\n        if (returned.length) return returned.pop();\n        if (pos >= length) return;\n\n        code = css.charCodeAt(pos);\n        if (code === NEWLINE || code === FEED || code === CR && css.charCodeAt(pos + 1) !== NEWLINE) {\n            offset = pos;\n            line += 1;\n        }\n\n        switch (code) {\n            case NEWLINE:\n            case SPACE:\n            case TAB:\n            case CR:\n            case FEED:\n                next = pos;\n                do {\n                    next += 1;\n                    code = css.charCodeAt(next);\n                    if (code === NEWLINE) {\n                        offset = next;\n                        line += 1;\n                    }\n                } while (code === SPACE || code === NEWLINE || code === TAB || code === CR || code === FEED);\n\n                currentToken = ['space', css.slice(pos, next)];\n                pos = next - 1;\n                break;\n\n            case OPEN_SQUARE:\n                currentToken = ['[', '[', line, pos - offset];\n                break;\n\n            case CLOSE_SQUARE:\n                currentToken = [']', ']', line, pos - offset];\n                break;\n\n            case OPEN_CURLY:\n                currentToken = ['{', '{', line, pos - offset];\n                break;\n\n            case CLOSE_CURLY:\n                currentToken = ['}', '}', line, pos - offset];\n                break;\n\n            case COLON:\n                currentToken = [':', ':', line, pos - offset];\n                break;\n\n            case SEMICOLON:\n                currentToken = [';', ';', line, pos - offset];\n                break;\n\n            case OPEN_PARENTHESES:\n                prev = buffer.length ? buffer.pop()[1] : '';\n                n = css.charCodeAt(pos + 1);\n                if (prev === 'url' && n !== SINGLE_QUOTE && n !== DOUBLE_QUOTE && n !== SPACE && n !== NEWLINE && n !== TAB && n !== FEED && n !== CR) {\n                    next = pos;\n                    do {\n                        escaped = false;\n                        next = css.indexOf(')', next + 1);\n                        if (next === -1) {\n                            if (ignore) {\n                                next = pos;\n                                break;\n                            } else {\n                                unclosed('bracket');\n                            }\n                        }\n                        escapePos = next;\n                        while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n                            escapePos -= 1;\n                            escaped = !escaped;\n                        }\n                    } while (escaped);\n\n                    currentToken = ['brackets', css.slice(pos, next + 1), line, pos - offset, line, next - offset];\n\n                    pos = next;\n                } else {\n                    next = css.indexOf(')', pos + 1);\n                    content = css.slice(pos, next + 1);\n\n                    if (next === -1 || RE_BAD_BRACKET.test(content)) {\n                        currentToken = ['(', '(', line, pos - offset];\n                    } else {\n                        currentToken = ['brackets', content, line, pos - offset, line, next - offset];\n                        pos = next;\n                    }\n                }\n\n                break;\n\n            case CLOSE_PARENTHESES:\n                currentToken = [')', ')', line, pos - offset];\n                break;\n\n            case SINGLE_QUOTE:\n            case DOUBLE_QUOTE:\n                quote = code === SINGLE_QUOTE ? '\\'' : '\"';\n                next = pos;\n                do {\n                    escaped = false;\n                    next = css.indexOf(quote, next + 1);\n                    if (next === -1) {\n                        if (ignore) {\n                            next = pos + 1;\n                            break;\n                        } else {\n                            unclosed('string');\n                        }\n                    }\n                    escapePos = next;\n                    while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n                        escapePos -= 1;\n                        escaped = !escaped;\n                    }\n                } while (escaped);\n\n                content = css.slice(pos, next + 1);\n                lines = content.split('\\n');\n                last = lines.length - 1;\n\n                if (last > 0) {\n                    nextLine = line + last;\n                    nextOffset = next - lines[last].length;\n                } else {\n                    nextLine = line;\n                    nextOffset = offset;\n                }\n\n                currentToken = ['string', css.slice(pos, next + 1), line, pos - offset, nextLine, next - nextOffset];\n\n                offset = nextOffset;\n                line = nextLine;\n                pos = next;\n                break;\n\n            case AT:\n                RE_AT_END.lastIndex = pos + 1;\n                RE_AT_END.test(css);\n                if (RE_AT_END.lastIndex === 0) {\n                    next = css.length - 1;\n                } else {\n                    next = RE_AT_END.lastIndex - 2;\n                }\n\n                currentToken = ['at-word', css.slice(pos, next + 1), line, pos - offset, line, next - offset];\n\n                pos = next;\n                break;\n\n            case BACKSLASH:\n                next = pos;\n                escape = true;\n                while (css.charCodeAt(next + 1) === BACKSLASH) {\n                    next += 1;\n                    escape = !escape;\n                }\n                code = css.charCodeAt(next + 1);\n                if (escape && code !== SLASH && code !== SPACE && code !== NEWLINE && code !== TAB && code !== CR && code !== FEED) {\n                    next += 1;\n                }\n\n                currentToken = ['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset];\n\n                pos = next;\n                break;\n\n            default:\n                if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {\n                    next = css.indexOf('*/', pos + 2) + 1;\n                    if (next === 0) {\n                        if (ignore) {\n                            next = css.length;\n                        } else {\n                            unclosed('comment');\n                        }\n                    }\n\n                    content = css.slice(pos, next + 1);\n                    lines = content.split('\\n');\n                    last = lines.length - 1;\n\n                    if (last > 0) {\n                        nextLine = line + last;\n                        nextOffset = next - lines[last].length;\n                    } else {\n                        nextLine = line;\n                        nextOffset = offset;\n                    }\n\n                    currentToken = ['comment', content, line, pos - offset, nextLine, next - nextOffset];\n\n                    offset = nextOffset;\n                    line = nextLine;\n                    pos = next;\n                } else {\n                    RE_WORD_END.lastIndex = pos + 1;\n                    RE_WORD_END.test(css);\n                    if (RE_WORD_END.lastIndex === 0) {\n                        next = css.length - 1;\n                    } else {\n                        next = RE_WORD_END.lastIndex - 2;\n                    }\n\n                    currentToken = ['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset];\n\n                    buffer.push(currentToken);\n\n                    pos = next;\n                }\n\n                break;\n        }\n\n        pos++;\n        return currentToken;\n    }\n\n    function back(token) {\n        returned.push(token);\n    }\n\n    return {\n        back: back,\n        nextToken: nextToken,\n        endOfFile: endOfFile\n    };\n}\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 78 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(process) {\nvar escapeStringRegexp = __webpack_require__(31);\nvar ansiStyles = __webpack_require__(30);\nvar stripAnsi = __webpack_require__(82);\nvar hasAnsi = __webpack_require__(33);\nvar supportsColor = __webpack_require__(148);\nvar defineProps = Object.defineProperties;\nvar isSimpleWindowsTerm = process.platform === 'win32' && !/^xterm/i.test(process.env.TERM);\n\nfunction Chalk(options) {\n\t// detect mode if not set manually\n\tthis.enabled = !options || options.enabled === undefined ? supportsColor : options.enabled;\n}\n\n// use bright blue on Windows as the normal blue color is illegible\nif (isSimpleWindowsTerm) {\n\tansiStyles.blue.open = '\\u001b[94m';\n}\n\nvar styles = (function () {\n\tvar ret = {};\n\n\tObject.keys(ansiStyles).forEach(function (key) {\n\t\tansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');\n\n\t\tret[key] = {\n\t\t\tget: function () {\n\t\t\t\treturn build.call(this, this._styles.concat(key));\n\t\t\t}\n\t\t};\n\t});\n\n\treturn ret;\n})();\n\nvar proto = defineProps(function chalk() {}, styles);\n\nfunction build(_styles) {\n\tvar builder = function () {\n\t\treturn applyStyle.apply(builder, arguments);\n\t};\n\n\tbuilder._styles = _styles;\n\tbuilder.enabled = this.enabled;\n\t// __proto__ is used because we must return a function, but there is\n\t// no way to create a function with a different prototype.\n\t/* eslint-disable no-proto */\n\tbuilder.__proto__ = proto;\n\n\treturn builder;\n}\n\nfunction applyStyle() {\n\t// support varags, but simply cast to string in case there's only one arg\n\tvar args = arguments;\n\tvar argsLen = args.length;\n\tvar str = argsLen !== 0 && String(arguments[0]);\n\n\tif (argsLen > 1) {\n\t\t// don't slice `arguments`, it prevents v8 optimizations\n\t\tfor (var a = 1; a < argsLen; a++) {\n\t\t\tstr += ' ' + args[a];\n\t\t}\n\t}\n\n\tif (!this.enabled || !str) {\n\t\treturn str;\n\t}\n\n\tvar nestedStyles = this._styles;\n\tvar i = nestedStyles.length;\n\n\t// Turns out that on Windows dimmed gray text becomes invisible in cmd.exe,\n\t// see https://github.com/chalk/chalk/issues/58\n\t// If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop.\n\tvar originalDim = ansiStyles.dim.open;\n\tif (isSimpleWindowsTerm && (nestedStyles.indexOf('gray') !== -1 || nestedStyles.indexOf('grey') !== -1)) {\n\t\tansiStyles.dim.open = '';\n\t}\n\n\twhile (i--) {\n\t\tvar code = ansiStyles[nestedStyles[i]];\n\n\t\t// Replace any instances already present with a re-opening code\n\t\t// otherwise only the part of the string until said closing code\n\t\t// will be colored, and the rest will simply be 'plain'.\n\t\tstr = code.open + str.replace(code.closeRe, code.open) + code.close;\n\t}\n\n\t// Reset the original 'dim' if we changed it to work around the Windows dimmed gray issue.\n\tansiStyles.dim.open = originalDim;\n\n\treturn str;\n}\n\nfunction init() {\n\tvar ret = {};\n\n\tObject.keys(styles).forEach(function (name) {\n\t\tret[name] = {\n\t\t\tget: function () {\n\t\t\t\treturn build.call(this, [name]);\n\t\t\t}\n\t\t};\n\t});\n\n\treturn ret;\n}\n\ndefineProps(Chalk.prototype, init());\n\nmodule.exports = new Chalk();\nmodule.exports.styles = ansiStyles;\nmodule.exports.hasColor = hasAnsi;\nmodule.exports.stripColor = stripAnsi;\nmodule.exports.supportsColor = supportsColor;\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7)));\n\n/***/ }),\n/* 79 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = __webpack_require__(11);\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n  this._array = [];\n  this._set = Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n  var set = new ArraySet();\n  for (var i = 0, len = aArray.length; i < len; i++) {\n    set.add(aArray[i], aAllowDuplicates);\n  }\n  return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n  return Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n  var sStr = util.toSetString(aStr);\n  var isDuplicate = has.call(this._set, sStr);\n  var idx = this._array.length;\n  if (!isDuplicate || aAllowDuplicates) {\n    this._array.push(aStr);\n  }\n  if (!isDuplicate) {\n    this._set[sStr] = idx;\n  }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n  var sStr = util.toSetString(aStr);\n  return has.call(this._set, sStr);\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n  var sStr = util.toSetString(aStr);\n  if (has.call(this._set, sStr)) {\n    return this._set[sStr];\n  }\n  throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n  if (aIdx >= 0 && aIdx < this._array.length) {\n    return this._array[aIdx];\n  }\n  throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n  return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n\n\n/***/ }),\n/* 80 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above\n *    copyright notice, this list of conditions and the following\n *    disclaimer in the documentation and/or other materials provided\n *    with the distribution.\n *  * Neither the name of Google Inc. nor the names of its\n *    contributors may be used to endorse or promote products derived\n *    from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = __webpack_require__(150);\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n//   Continuation\n//   |    Sign\n//   |    |\n//   V    V\n//   101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n  return aValue < 0\n    ? ((-aValue) << 1) + 1\n    : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n  var isNegative = (aValue & 1) === 1;\n  var shifted = aValue >> 1;\n  return isNegative\n    ? -shifted\n    : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n  var encoded = \"\";\n  var digit;\n\n  var vlq = toVLQSigned(aValue);\n\n  do {\n    digit = vlq & VLQ_BASE_MASK;\n    vlq >>>= VLQ_BASE_SHIFT;\n    if (vlq > 0) {\n      // There are still more digits in this value, so we must make sure the\n      // continuation bit is marked.\n      digit |= VLQ_CONTINUATION_BIT;\n    }\n    encoded += base64.encode(digit);\n  } while (vlq > 0);\n\n  return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n  var strLen = aStr.length;\n  var result = 0;\n  var shift = 0;\n  var continuation, digit;\n\n  do {\n    if (aIndex >= strLen) {\n      throw new Error(\"Expected more digits in base 64 VLQ value.\");\n    }\n\n    digit = base64.decode(aStr.charCodeAt(aIndex++));\n    if (digit === -1) {\n      throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n    }\n\n    continuation = !!(digit & VLQ_CONTINUATION_BIT);\n    digit &= VLQ_BASE_MASK;\n    result = result + (digit << shift);\n    shift += VLQ_BASE_SHIFT;\n  } while (continuation);\n\n  aOutParam.value = fromVLQSigned(result);\n  aOutParam.rest = aIndex;\n};\n\n\n/***/ }),\n/* 81 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = __webpack_require__(80);\nvar util = __webpack_require__(11);\nvar ArraySet = __webpack_require__(79).ArraySet;\nvar MappingList = __webpack_require__(152).MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n *   - file: The filename of the generated source.\n *   - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n  if (!aArgs) {\n    aArgs = {};\n  }\n  this._file = util.getArg(aArgs, 'file', null);\n  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n  this._mappings = new MappingList();\n  this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n    var sourceRoot = aSourceMapConsumer.sourceRoot;\n    var generator = new SourceMapGenerator({\n      file: aSourceMapConsumer.file,\n      sourceRoot: sourceRoot\n    });\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      var newMapping = {\n        generated: {\n          line: mapping.generatedLine,\n          column: mapping.generatedColumn\n        }\n      };\n\n      if (mapping.source != null) {\n        newMapping.source = mapping.source;\n        if (sourceRoot != null) {\n          newMapping.source = util.relative(sourceRoot, newMapping.source);\n        }\n\n        newMapping.original = {\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        };\n\n        if (mapping.name != null) {\n          newMapping.name = mapping.name;\n        }\n      }\n\n      generator.addMapping(newMapping);\n    });\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        generator.setSourceContent(sourceFile, content);\n      }\n    });\n    return generator;\n  };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n *   - generated: An object with the generated line and column positions.\n *   - original: An object with the original line and column positions.\n *   - source: The original source file (relative to the sourceRoot).\n *   - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n  function SourceMapGenerator_addMapping(aArgs) {\n    var generated = util.getArg(aArgs, 'generated');\n    var original = util.getArg(aArgs, 'original', null);\n    var source = util.getArg(aArgs, 'source', null);\n    var name = util.getArg(aArgs, 'name', null);\n\n    if (!this._skipValidation) {\n      this._validateMapping(generated, original, source, name);\n    }\n\n    if (source != null) {\n      source = String(source);\n      if (!this._sources.has(source)) {\n        this._sources.add(source);\n      }\n    }\n\n    if (name != null) {\n      name = String(name);\n      if (!this._names.has(name)) {\n        this._names.add(name);\n      }\n    }\n\n    this._mappings.add({\n      generatedLine: generated.line,\n      generatedColumn: generated.column,\n      originalLine: original != null && original.line,\n      originalColumn: original != null && original.column,\n      source: source,\n      name: name\n    });\n  };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n    var source = aSourceFile;\n    if (this._sourceRoot != null) {\n      source = util.relative(this._sourceRoot, source);\n    }\n\n    if (aSourceContent != null) {\n      // Add the source content to the _sourcesContents map.\n      // Create a new _sourcesContents map if the property is null.\n      if (!this._sourcesContents) {\n        this._sourcesContents = Object.create(null);\n      }\n      this._sourcesContents[util.toSetString(source)] = aSourceContent;\n    } else if (this._sourcesContents) {\n      // Remove the source file from the _sourcesContents map.\n      // If the _sourcesContents map is empty, set the property to null.\n      delete this._sourcesContents[util.toSetString(source)];\n      if (Object.keys(this._sourcesContents).length === 0) {\n        this._sourcesContents = null;\n      }\n    }\n  };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n *        If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n *        to be applied. If relative, it is relative to the SourceMapConsumer.\n *        This parameter is needed when the two source maps aren't in the same\n *        directory, and the source map to be applied contains relative source\n *        paths. If so, those relative source paths need to be rewritten\n *        relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n    var sourceFile = aSourceFile;\n    // If aSourceFile is omitted, we will use the file property of the SourceMap\n    if (aSourceFile == null) {\n      if (aSourceMapConsumer.file == null) {\n        throw new Error(\n          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n          'or the source map\\'s \"file\" property. Both were omitted.'\n        );\n      }\n      sourceFile = aSourceMapConsumer.file;\n    }\n    var sourceRoot = this._sourceRoot;\n    // Make \"sourceFile\" relative if an absolute Url is passed.\n    if (sourceRoot != null) {\n      sourceFile = util.relative(sourceRoot, sourceFile);\n    }\n    // Applying the SourceMap can add and remove items from the sources and\n    // the names array.\n    var newSources = new ArraySet();\n    var newNames = new ArraySet();\n\n    // Find mappings for the \"sourceFile\"\n    this._mappings.unsortedForEach(function (mapping) {\n      if (mapping.source === sourceFile && mapping.originalLine != null) {\n        // Check if it can be mapped by the source map, then update the mapping.\n        var original = aSourceMapConsumer.originalPositionFor({\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        });\n        if (original.source != null) {\n          // Copy mapping\n          mapping.source = original.source;\n          if (aSourceMapPath != null) {\n            mapping.source = util.join(aSourceMapPath, mapping.source);\n          }\n          if (sourceRoot != null) {\n            mapping.source = util.relative(sourceRoot, mapping.source);\n          }\n          mapping.originalLine = original.line;\n          mapping.originalColumn = original.column;\n          if (original.name != null) {\n            mapping.name = original.name;\n          }\n        }\n      }\n\n      var source = mapping.source;\n      if (source != null && !newSources.has(source)) {\n        newSources.add(source);\n      }\n\n      var name = mapping.name;\n      if (name != null && !newNames.has(name)) {\n        newNames.add(name);\n      }\n\n    }, this);\n    this._sources = newSources;\n    this._names = newNames;\n\n    // Copy sourcesContents of applied map.\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aSourceMapPath != null) {\n          sourceFile = util.join(aSourceMapPath, sourceFile);\n        }\n        if (sourceRoot != null) {\n          sourceFile = util.relative(sourceRoot, sourceFile);\n        }\n        this.setSourceContent(sourceFile, content);\n      }\n    }, this);\n  };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n *   1. Just the generated position.\n *   2. The Generated position, original position, and original source.\n *   3. Generated and original position, original source, as well as a name\n *      token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n                                              aName) {\n    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n        && aGenerated.line > 0 && aGenerated.column >= 0\n        && !aOriginal && !aSource && !aName) {\n      // Case 1.\n      return;\n    }\n    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n             && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n             && aGenerated.line > 0 && aGenerated.column >= 0\n             && aOriginal.line > 0 && aOriginal.column >= 0\n             && aSource) {\n      // Cases 2 and 3.\n      return;\n    }\n    else {\n      throw new Error('Invalid mapping: ' + JSON.stringify({\n        generated: aGenerated,\n        source: aSource,\n        original: aOriginal,\n        name: aName\n      }));\n    }\n  };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n  function SourceMapGenerator_serializeMappings() {\n    var previousGeneratedColumn = 0;\n    var previousGeneratedLine = 1;\n    var previousOriginalColumn = 0;\n    var previousOriginalLine = 0;\n    var previousName = 0;\n    var previousSource = 0;\n    var result = '';\n    var next;\n    var mapping;\n    var nameIdx;\n    var sourceIdx;\n\n    var mappings = this._mappings.toArray();\n    for (var i = 0, len = mappings.length; i < len; i++) {\n      mapping = mappings[i];\n      next = '';\n\n      if (mapping.generatedLine !== previousGeneratedLine) {\n        previousGeneratedColumn = 0;\n        while (mapping.generatedLine !== previousGeneratedLine) {\n          next += ';';\n          previousGeneratedLine++;\n        }\n      }\n      else {\n        if (i > 0) {\n          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n            continue;\n          }\n          next += ',';\n        }\n      }\n\n      next += base64VLQ.encode(mapping.generatedColumn\n                                 - previousGeneratedColumn);\n      previousGeneratedColumn = mapping.generatedColumn;\n\n      if (mapping.source != null) {\n        sourceIdx = this._sources.indexOf(mapping.source);\n        next += base64VLQ.encode(sourceIdx - previousSource);\n        previousSource = sourceIdx;\n\n        // lines are stored 0-based in SourceMap spec version 3\n        next += base64VLQ.encode(mapping.originalLine - 1\n                                   - previousOriginalLine);\n        previousOriginalLine = mapping.originalLine - 1;\n\n        next += base64VLQ.encode(mapping.originalColumn\n                                   - previousOriginalColumn);\n        previousOriginalColumn = mapping.originalColumn;\n\n        if (mapping.name != null) {\n          nameIdx = this._names.indexOf(mapping.name);\n          next += base64VLQ.encode(nameIdx - previousName);\n          previousName = nameIdx;\n        }\n      }\n\n      result += next;\n    }\n\n    return result;\n  };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n    return aSources.map(function (source) {\n      if (!this._sourcesContents) {\n        return null;\n      }\n      if (aSourceRoot != null) {\n        source = util.relative(aSourceRoot, source);\n      }\n      var key = util.toSetString(source);\n      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n        ? this._sourcesContents[key]\n        : null;\n    }, this);\n  };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n  function SourceMapGenerator_toJSON() {\n    var map = {\n      version: this._version,\n      sources: this._sources.toArray(),\n      names: this._names.toArray(),\n      mappings: this._serializeMappings()\n    };\n    if (this._file != null) {\n      map.file = this._file;\n    }\n    if (this._sourceRoot != null) {\n      map.sourceRoot = this._sourceRoot;\n    }\n    if (this._sourcesContents) {\n      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n    }\n\n    return map;\n  };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n  function SourceMapGenerator_toString() {\n    return JSON.stringify(this.toJSON());\n  };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n\n\n/***/ }),\n/* 82 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ansiRegex = __webpack_require__(29)();\n\nmodule.exports = function (str) {\n\treturn typeof str === 'string' ? str.replace(ansiRegex, '') : str;\n};\n\n\n/***/ }),\n/* 83 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction unique_pred(list, compare) {\n  var ptr = 1\n    , len = list.length\n    , a=list[0], b=list[0];\n  for(var i=1; i<len; ++i) {\n    b = a;\n    a = list[i];\n    if(compare(a, b)) {\n      if(i === ptr) {\n        ptr++;\n        continue\n      }\n      list[ptr++] = a;\n    }\n  }\n  list.length = ptr;\n  return list\n}\n\nfunction unique_eq(list) {\n  var ptr = 1\n    , len = list.length\n    , a=list[0], b = list[0];\n  for(var i=1; i<len; ++i, b=a) {\n    b = a;\n    a = list[i];\n    if(a !== b) {\n      if(i === ptr) {\n        ptr++;\n        continue\n      }\n      list[ptr++] = a;\n    }\n  }\n  list.length = ptr;\n  return list\n}\n\nfunction unique(list, compare, sorted) {\n  if(list.length === 0) {\n    return list\n  }\n  if(compare) {\n    if(!sorted) {\n      list.sort(compare);\n    }\n    return unique_pred(list, compare)\n  }\n  if(!sorted) {\n    list.sort();\n  }\n  return unique_eq(list)\n}\n\nmodule.exports = unique;\n\n\n/***/ }),\n/* 84 */\n/***/ (function(module, exports) {\n\nvar g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n/***/ }),\n/* 85 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _lessParse = __webpack_require__(97);\n\nvar _lessParse2 = _interopRequireDefault(_lessParse);\n\nvar _lessStringify = __webpack_require__(15);\n\nvar _lessStringify2 = _interopRequireDefault(_lessStringify);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = { parse: _lessParse2.default, stringify: _lessStringify2.default };\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 86 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = parseMedia;\n\nvar _Container = __webpack_require__(45);\n\nvar _Container2 = _interopRequireDefault(_Container);\n\nvar _parsers = __webpack_require__(124);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\r\n * Parses a media query list into an array of nodes. A typical node signature:\r\n *  {string} node.type -- one of: 'media-query', 'media-type', 'keyword',\r\n *    'media-feature-expression', 'media-feature', 'colon', 'value'\r\n *  {string} node.value -- the contents of a particular element, trimmed\r\n *    e.g.: `screen`, `max-width`, `1024px`\r\n *  {string} node.after -- whitespaces that follow the element\r\n *  {string} node.before -- whitespaces that precede the element\r\n *  {string} node.sourceIndex -- the index of the element in a source media\r\n *    query list, 0-based\r\n *  {object} node.parent -- a link to the parent node (a container)\r\n *\r\n * Some nodes (media queries, media feature expressions) contain other nodes.\r\n * They additionally have:\r\n *  {array} node.nodes -- an array of nodes of the type described here\r\n *  {funciton} node.each -- traverses direct children of the node, calling\r\n *    a callback for each one\r\n *  {funciton} node.walk -- traverses ALL descendants of the node, calling\r\n *    a callback for each one\r\n */\n\nfunction parseMedia(value) {\n  return new _Container2.default({\n    nodes: (0, _parsers.parseMediaList)(value),\n    type: 'media-query-list',\n    value: value.trim()\n  });\n}\n\n/***/ }),\n/* 87 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _scssStringify = __webpack_require__(129);\n\nvar _scssStringify2 = _interopRequireDefault(_scssStringify);\n\nvar _scssParse = __webpack_require__(126);\n\nvar _scssParse2 = _interopRequireDefault(_scssParse);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = { parse: _scssParse2.default, stringify: _scssStringify2.default };\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 88 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _processor = __webpack_require__(132);\n\nvar _processor2 = _interopRequireDefault(_processor);\n\nvar _attribute = __webpack_require__(47);\n\nvar _attribute2 = _interopRequireDefault(_attribute);\n\nvar _className = __webpack_require__(48);\n\nvar _className2 = _interopRequireDefault(_className);\n\nvar _combinator = __webpack_require__(49);\n\nvar _combinator2 = _interopRequireDefault(_combinator);\n\nvar _comment = __webpack_require__(50);\n\nvar _comment2 = _interopRequireDefault(_comment);\n\nvar _id = __webpack_require__(51);\n\nvar _id2 = _interopRequireDefault(_id);\n\nvar _nesting = __webpack_require__(52);\n\nvar _nesting2 = _interopRequireDefault(_nesting);\n\nvar _pseudo = __webpack_require__(53);\n\nvar _pseudo2 = _interopRequireDefault(_pseudo);\n\nvar _root = __webpack_require__(54);\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _selector = __webpack_require__(55);\n\nvar _selector2 = _interopRequireDefault(_selector);\n\nvar _string = __webpack_require__(56);\n\nvar _string2 = _interopRequireDefault(_string);\n\nvar _tag = __webpack_require__(57);\n\nvar _tag2 = _interopRequireDefault(_tag);\n\nvar _universal = __webpack_require__(58);\n\nvar _universal2 = _interopRequireDefault(_universal);\n\nvar _types = __webpack_require__(0);\n\nvar types = _interopRequireWildcard(_types);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar parser = function parser(processor) {\n    return new _processor2.default(processor);\n};\n\nparser.attribute = function (opts) {\n    return new _attribute2.default(opts);\n};\nparser.className = function (opts) {\n    return new _className2.default(opts);\n};\nparser.combinator = function (opts) {\n    return new _combinator2.default(opts);\n};\nparser.comment = function (opts) {\n    return new _comment2.default(opts);\n};\nparser.id = function (opts) {\n    return new _id2.default(opts);\n};\nparser.nesting = function (opts) {\n    return new _nesting2.default(opts);\n};\nparser.pseudo = function (opts) {\n    return new _pseudo2.default(opts);\n};\nparser.root = function (opts) {\n    return new _root2.default(opts);\n};\nparser.selector = function (opts) {\n    return new _selector2.default(opts);\n};\nparser.string = function (opts) {\n    return new _string2.default(opts);\n};\nparser.tag = function (opts) {\n    return new _tag2.default(opts);\n};\nparser.universal = function (opts) {\n    return new _universal2.default(opts);\n};\n\nObject.keys(types).forEach(function (type) {\n    if (type === '__esModule') {\n        return;\n    }\n    parser[type] = types[type]; // eslint-disable-line\n});\n\nexports.default = parser;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 89 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nconst Parser = __webpack_require__(137);\nconst AtWord = __webpack_require__(59);\nconst Colon = __webpack_require__(60);\nconst Comma = __webpack_require__(61);\nconst Comment = __webpack_require__(62);\nconst Func = __webpack_require__(63);\nconst Num = __webpack_require__(64);\nconst Operator = __webpack_require__(65);\nconst Paren = __webpack_require__(66);\nconst Str = __webpack_require__(67);\nconst Value = __webpack_require__(68);\nconst Word = __webpack_require__(69);\n\nlet parser = function (source, options) {\n  return new Parser(source, options);\n};\n\nparser.atword = function (opts) {\n  return new AtWord(opts);\n};\n\nparser.colon = function (opts) {\n  opts.value = opts.value || ':';\n  return new Colon(opts);\n};\n\nparser.comma = function (opts) {\n  opts.value = opts.value || ',';\n  return new Comma(opts);\n};\n\nparser.comment = function (opts) {\n  return new Comment(opts);\n};\n\nparser.func = function (opts) {\n  return new Func(opts);\n};\n\nparser.number = function (opts) {\n  return new Num(opts);\n};\n\nparser.operator = function (opts) {\n  return new Operator(opts);\n};\n\nparser.paren = function (opts) {\n  opts.value = opts.value || '(';\n  return new Paren(opts);\n};\n\nparser.string = function (opts) {\n  opts.quote = opts.quote || '\\'';\n  return new Str(opts);\n};\n\nparser.value = function (opts) {\n  return new Value(opts);\n};\n\nparser.word = function (opts) {\n  return new Word(opts);\n};\n\nmodule.exports = parser;\n\n\n/***/ }),\n/* 90 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction createError(message, loc) {\n  // Construct an error similar to the ones thrown by Babylon.\n  const error = new SyntaxError(\n    message + \" (\" + loc.start.line + \":\" + loc.start.column + \")\"\n  );\n  error.loc = loc;\n  return error;\n}\n\nmodule.exports = createError;\n\n\n/***/ }),\n/* 91 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.byteLength = byteLength;\nexports.toByteArray = toByteArray;\nexports.fromByteArray = fromByteArray;\n\nvar lookup = [];\nvar revLookup = [];\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i];\n  revLookup[code.charCodeAt(i)] = i;\n}\n\nrevLookup['-'.charCodeAt(0)] = 62;\nrevLookup['_'.charCodeAt(0)] = 63;\n\nfunction placeHoldersCount (b64) {\n  var len = b64.length;\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // the number of equal signs (place holders)\n  // if there are two placeholders, than the two characters before it\n  // represent one byte\n  // if there is only one, then the three characters before it represent 2 bytes\n  // this is just a cheap hack to not do indexOf twice\n  return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n}\n\nfunction byteLength (b64) {\n  // base64 is 4/3 + up to two characters of the original data\n  return b64.length * 3 / 4 - placeHoldersCount(b64)\n}\n\nfunction toByteArray (b64) {\n  var i, j, l, tmp, placeHolders, arr;\n  var len = b64.length;\n  placeHolders = placeHoldersCount(b64);\n\n  arr = new Arr(len * 3 / 4 - placeHolders);\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  l = placeHolders > 0 ? len - 4 : len;\n\n  var L = 0;\n\n  for (i = 0, j = 0; i < l; i += 4, j += 3) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)];\n    arr[L++] = (tmp >> 16) & 0xFF;\n    arr[L++] = (tmp >> 8) & 0xFF;\n    arr[L++] = tmp & 0xFF;\n  }\n\n  if (placeHolders === 2) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4);\n    arr[L++] = tmp & 0xFF;\n  } else if (placeHolders === 1) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2);\n    arr[L++] = (tmp >> 8) & 0xFF;\n    arr[L++] = tmp & 0xFF;\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp;\n  var output = [];\n  for (var i = start; i < end; i += 3) {\n    tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]);\n    output.push(tripletToBase64(tmp));\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp;\n  var len = uint8.length;\n  var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes\n  var output = '';\n  var parts = [];\n  var maxChunkLength = 16383; // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)));\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1];\n    output += lookup[tmp >> 2];\n    output += lookup[(tmp << 4) & 0x3F];\n    output += '==';\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + (uint8[len - 1]);\n    output += lookup[tmp >> 10];\n    output += lookup[(tmp >> 4) & 0x3F];\n    output += lookup[(tmp << 2) & 0x3F];\n    output += '=';\n  }\n\n  parts.push(output);\n\n  return parts.join('')\n}\n\n\n/***/ }),\n/* 92 */\n/***/ (function(module, exports) {\n\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m;\n  var eLen = nBytes * 8 - mLen - 1;\n  var eMax = (1 << eLen) - 1;\n  var eBias = eMax >> 1;\n  var nBits = -7;\n  var i = isLE ? (nBytes - 1) : 0;\n  var d = isLE ? -1 : 1;\n  var s = buffer[offset + i];\n\n  i += d;\n\n  e = s & ((1 << (-nBits)) - 1);\n  s >>= (-nBits);\n  nBits += eLen;\n  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1);\n  e >>= (-nBits);\n  nBits += mLen;\n  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias;\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen);\n    e = e - eBias;\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n};\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c;\n  var eLen = nBytes * 8 - mLen - 1;\n  var eMax = (1 << eLen) - 1;\n  var eBias = eMax >> 1;\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0);\n  var i = isLE ? 0 : (nBytes - 1);\n  var d = isLE ? 1 : -1;\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;\n\n  value = Math.abs(value);\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0;\n    e = eMax;\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2);\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--;\n      c *= 2;\n    }\n    if (e + eBias >= 1) {\n      value += rt / c;\n    } else {\n      value += rt * Math.pow(2, 1 - eBias);\n    }\n    if (value * c >= 2) {\n      e++;\n      c /= 2;\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0;\n      e = eMax;\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * Math.pow(2, mLen);\n      e = e + eBias;\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\n      e = 0;\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m;\n  eLen += mLen;\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128;\n};\n\n\n/***/ }),\n/* 93 */\n/***/ (function(module, exports) {\n\nvar toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n/***/ }),\n/* 94 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = findExtendRule;\nvar extendRuleKeyWords = ['&', ':', 'extend'];\nvar extendRuleKeyWordsCount = extendRuleKeyWords.length;\n\nfunction findExtendRule(tokens) {\n  var start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n  var stack = [];\n  var len = tokens.length;\n  var end = start;\n\n  while (end < len) {\n    var token = tokens[end];\n\n    if (extendRuleKeyWords.indexOf(token[1]) >= 0) {\n      stack.push(token[1]);\n    } else if (token[0] !== 'space') {\n      break;\n    }\n\n    end++;\n  }\n\n  for (var index = 0; index < extendRuleKeyWordsCount; index++) {\n    if (stack[index] !== extendRuleKeyWords[index]) {\n      return null;\n    }\n  }\n\n  return tokens.slice(start, end);\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 95 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _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; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _rule = __webpack_require__(9);\n\nvar _rule2 = _interopRequireDefault(_rule);\n\nvar _lessStringify = __webpack_require__(15);\n\nvar _lessStringify2 = _interopRequireDefault(_lessStringify);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Import = function (_PostCssRule) {\n  _inherits(Import, _PostCssRule);\n\n  function Import(defaults) {\n    _classCallCheck(this, Import);\n\n    var _this = _possibleConstructorReturn(this, (Import.__proto__ || Object.getPrototypeOf(Import)).call(this, defaults));\n\n    _this.type = 'import';\n    return _this;\n  }\n\n  _createClass(Import, [{\n    key: 'toString',\n    value: function toString(stringifier) {\n      if (!stringifier) {\n        stringifier = {\n          stringify: _lessStringify2.default\n        };\n      }\n\n      return _get(Import.prototype.__proto__ || Object.getPrototypeOf(Import.prototype), 'toString', this).call(this, stringifier);\n    }\n  }]);\n\n  return Import;\n}(_rule2.default);\n\nexports.default = Import;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 96 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isMixinToken;\n\nvar _globals = __webpack_require__(2);\n\nvar unpaddedFractionalNumbersPattern = /\\.[0-9]/;\n\nfunction isMixinToken(token) {\n  var symbol = token[1];\n  var firstSymbolCode = symbol ? symbol[0].charCodeAt(0) : null;\n\n  return (firstSymbolCode === _globals.dot || firstSymbolCode === _globals.hash) &&\n  // ignore hashes used for colors\n  _globals.hashColorPattern.test(symbol) === false &&\n  // ignore dots used for unpadded fractional numbers\n  unpaddedFractionalNumbersPattern.test(symbol) === false;\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 97 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = lessParse;\n\nvar _input = __webpack_require__(19);\n\nvar _input2 = _interopRequireDefault(_input);\n\nvar _lessParser = __webpack_require__(98);\n\nvar _lessParser2 = _interopRequireDefault(_lessParser);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction lessParse(less, opts) {\n  var input = new _input2.default(less, opts);\n  var parser = new _lessParser2.default(input, opts);\n  // const parser = new Parser(input, opts);\n\n  parser.tokenize();\n  parser.loop();\n\n  return parser.root;\n}\n// import Parser from 'postcss/lib/parser';\n\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 98 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _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; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _comment = __webpack_require__(17);\n\nvar _comment2 = _interopRequireDefault(_comment);\n\nvar _import2 = __webpack_require__(95);\n\nvar _import3 = _interopRequireDefault(_import2);\n\nvar _parser = __webpack_require__(40);\n\nvar _parser2 = _interopRequireDefault(_parser);\n\nvar _rule = __webpack_require__(101);\n\nvar _rule2 = _interopRequireDefault(_rule);\n\nvar _findExtendRule = __webpack_require__(94);\n\nvar _findExtendRule2 = _interopRequireDefault(_findExtendRule);\n\nvar _isMixinToken = __webpack_require__(96);\n\nvar _isMixinToken2 = _interopRequireDefault(_isMixinToken);\n\nvar _lessTokenize = __webpack_require__(100);\n\nvar _lessTokenize2 = _interopRequireDefault(_lessTokenize);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar blockCommentEndPattern = /\\*\\/$/;\n\nvar LessParser = function (_Parser) {\n  _inherits(LessParser, _Parser);\n\n  function LessParser() {\n    _classCallCheck(this, LessParser);\n\n    return _possibleConstructorReturn(this, (LessParser.__proto__ || Object.getPrototypeOf(LessParser)).apply(this, arguments));\n  }\n\n  _createClass(LessParser, [{\n    key: 'atrule',\n    value: function atrule(token) {\n      if (token[1] === '@import') {\n        this.import(token);\n      } else {\n        _get(LessParser.prototype.__proto__ || Object.getPrototypeOf(LessParser.prototype), 'atrule', this).call(this, token);\n      }\n    }\n  }, {\n    key: 'comment',\n    value: function comment(token) {\n      var node = new _comment2.default();\n      var content = token[1];\n      var text = content.slice(2).replace(blockCommentEndPattern, '');\n\n      this.init(node, token[2], token[3]);\n      node.source.end = {\n        line: token[4],\n        column: token[5]\n      };\n\n      node.raws.content = content;\n      node.raws.begin = content[0] + content[1];\n      node.inline = token[6] === 'inline';\n      node.block = !node.inline;\n\n      if (/^\\s*$/.test(text)) {\n        node.text = '';\n        node.raws.left = text;\n        node.raws.right = '';\n      } else {\n        var match = text.match(/^(\\s*)([^]*[^\\s])(\\s*)$/);\n\n        node.text = match[2];\n\n        // Add extra spaces to generate a comment in a common style /*[space][text][space]*/\n        node.raws.left = match[1] || ' ';\n        node.raws.right = match[3] || ' ';\n      }\n    }\n\n    /**\n     * @description Create a Declaration\n     * @param options {{start: number}}\n     */\n\n  }, {\n    key: 'createDeclaration',\n    value: function createDeclaration(options) {\n      this.decl(this.tokens.slice(options.start, this.pos + 1));\n    }\n\n    /**\n     * @description Create a Rule node\n     * @param options {{start: number, params: Array}}\n     */\n\n  }, {\n    key: 'createRule',\n    value: function createRule(options) {\n\n      var semi = this.tokens[this.pos][0] === ';';\n      var end = this.pos + (options.empty && semi ? 2 : 1);\n      var tokens = this.tokens.slice(options.start, end);\n      var node = this.rule(tokens);\n\n      /**\n       * By default in PostCSS `Rule.params` is `undefined`.\n       * To preserve compability with PostCSS:\n       *  - Don't set empty params for a Rule.\n       *  - Set params for a Rule only if it can be a mixin or &:extend rule.\n       */\n      if (options.params[0] && (options.mixin || options.extend)) {\n        this.raw(node, 'params', options.params);\n      }\n\n      if (options.empty) {\n        // if it's an empty mixin or extend, it must have a semicolon\n        // (that's the only way we get to this point)\n        if (semi) {\n          node.raws.semicolon = this.semicolon = true;\n          node.selector = node.selector.replace(/;$/, '');\n        }\n\n        if (options.extend) {\n          node.extend = true;\n        }\n\n        if (options.mixin) {\n          node.mixin = true;\n        }\n\n        /**\n         * @description Mark mixin without declarations.\n         * @type {boolean}\n         */\n        node.empty = true;\n\n        // eslint-disable-next-line\n        delete this.current.nodes;\n\n        if (node.selector.indexOf('!important') >= 0) {\n          node.important = true;\n          node.selector = node.selector.replace(/\\s!important/, '');\n        }\n\n        // rules don't have trailing semicolons in vanilla css, so they get\n        // added to this.spaces by the parser loop, so don't step back.\n        if (!semi) {\n          this.pos--;\n        }\n\n        this.end(this.tokens[this.pos]);\n      }\n    }\n  }, {\n    key: 'end',\n    value: function end(token) {\n      var node = this.current;\n\n      // if a Rule contains other Rules (mixins, extends) and those have\n      // semicolons, assert that the parent Rule has a semicolon\n      if (node.nodes && node.nodes.length && node.last.raws.semicolon && !node.last.nodes) {\n        this.semicolon = true;\n      }\n\n      _get(LessParser.prototype.__proto__ || Object.getPrototypeOf(LessParser.prototype), 'end', this).call(this, token);\n    }\n  }, {\n    key: 'import',\n    value: function _import(token) {\n      /* eslint complexity: 0 */\n      var last = false,\n          open = false,\n          end = { line: 0, column: 0 };\n\n      var directives = [];\n      var node = new _import3.default();\n\n      node.name = token[1].slice(1);\n\n      this.init(node, token[2], token[3]);\n\n      this.pos += 1;\n\n      while (this.pos < this.tokens.length) {\n        var tokn = this.tokens[this.pos];\n\n        if (tokn[0] === ';') {\n          end = { line: tokn[2], column: tokn[3] };\n          node.raws.semicolon = true;\n          break;\n        } else if (tokn[0] === '{') {\n          open = true;\n          break;\n        } else if (tokn[0] === '}') {\n          this.end(tokn);\n          break;\n        } else if (tokn[0] === 'brackets') {\n          directives.push(tokn);\n        } else if (tokn[0] === 'space') {\n          if (directives.length) {\n            node.raws.between = tokn[1];\n          } else if (node.importPath) {\n            node.raws.after = tokn[1];\n          } else {\n            node.raws.afterName = tokn[1];\n          }\n        } else {\n          node.importPath = tokn[1];\n        }\n\n        if (this.pos === this.tokens.length) {\n          last = true;\n          break;\n        }\n\n        this.pos += 1;\n      }\n\n      if (node.raws.between && !node.raws.afterName) {\n        node.raws.afterName = node.raws.between;\n        node.raws.between = '';\n      }\n\n      node.source.end = end;\n\n      if (directives.length) {\n        this.raw(node, 'directives', directives);\n\n        if (last) {\n          token = directives[directives.length - 1];\n          node.source.end = { line: token[4], column: token[5] };\n          this.spaces = node.raws.between;\n          node.raws.between = '';\n        }\n      } else {\n        node.directives = '';\n      }\n\n      if (open) {\n        node.nodes = [];\n        this.current = node;\n      }\n    }\n\n    /* eslint-disable max-statements, complexity */\n\n  }, {\n    key: 'other',\n    value: function other() {\n      var brackets = [];\n      var params = [];\n      var start = this.pos;\n\n      var end = false,\n          colon = false,\n          bracket = null;\n\n      // we need pass \"()\" as spaces\n      // However we can override method Parser.loop, but it seems less maintainable\n      if (this.tokens[start][0] === 'brackets') {\n        this.spaces += this.tokens[start][1];\n        return;\n      }\n\n      var mixin = (0, _isMixinToken2.default)(this.tokens[start]);\n      var extend = Boolean((0, _findExtendRule2.default)(this.tokens, start));\n\n      while (this.pos < this.tokens.length) {\n        var token = this.tokens[this.pos];\n        var type = token[0];\n\n        if (type === '(' || type === '[') {\n          if (!bracket) {\n            bracket = token;\n          }\n\n          brackets.push(type === '(' ? ')' : ']');\n        } else if (brackets.length === 0) {\n          if (type === ';') {\n            var foundEndOfRule = this.ruleEnd({\n              start: start,\n              params: params,\n              colon: colon,\n              mixin: mixin,\n              extend: extend\n            });\n\n            if (foundEndOfRule) {\n              return;\n            }\n\n            break;\n          } else if (type === '{') {\n            this.createRule({ start: start, params: params, mixin: mixin });\n            return;\n          } else if (type === '}') {\n            this.pos -= 1;\n            end = true;\n            break;\n          } else if (type === ':') {\n            colon = true;\n          }\n        } else if (type === brackets[brackets.length - 1]) {\n          brackets.pop();\n          if (brackets.length === 0) {\n            bracket = null;\n          }\n        }\n\n        // we don't want to add params for pseudo-selectors that utilize parens (#56)\n        if ((extend || !colon) && (brackets.length > 0 || type === 'brackets' || params[0])) {\n          params.push(token);\n        }\n\n        this.pos += 1;\n      }\n\n      if (this.pos === this.tokens.length) {\n        this.pos -= 1;\n        end = true;\n      }\n\n      if (brackets.length > 0) {\n        this.unclosedBracket(bracket);\n      }\n\n      // dont process an end of rule if there's only one token and it's unknown (#64)\n      if (end && this.tokens.length > 1) {\n        var _foundEndOfRule = this.ruleEnd({\n          start: start,\n          params: params,\n          colon: colon,\n          mixin: mixin,\n          extend: extend,\n          isEndOfBlock: true\n        });\n\n        if (_foundEndOfRule) {\n          return;\n        }\n      }\n\n      this.unknownWord(start);\n    }\n  }, {\n    key: 'rule',\n    value: function rule(tokens) {\n      tokens.pop();\n\n      var node = new _rule2.default();\n\n      this.init(node, tokens[0][2], tokens[0][3]);\n\n      //node.raws.between = this.spacesFromEnd(tokens);\n      node.raws.between = this.spacesAndCommentsFromEnd(tokens);\n\n      this.raw(node, 'selector', tokens);\n      this.current = node;\n\n      return node;\n    }\n  }, {\n    key: 'ruleEnd',\n    value: function ruleEnd(options) {\n      var start = options.start;\n\n\n      if (options.extend || options.mixin) {\n        this.createRule(Object.assign(options, { empty: true }));\n        return true;\n      }\n\n      if (options.colon) {\n        if (options.isEndOfBlock) {\n          while (this.pos > start) {\n            var token = this.tokens[this.pos][0];\n\n            if (token !== 'space' && token !== 'comment') {\n              break;\n            }\n\n            this.pos -= 1;\n          }\n        }\n\n        this.createDeclaration({ start: start });\n        return true;\n      }\n\n      return false;\n    }\n  }, {\n    key: 'tokenize',\n    value: function tokenize() {\n      this.tokens = (0, _lessTokenize2.default)(this.input);\n    }\n\n    /* eslint-enable max-statements, complexity */\n\n  }]);\n\n  return LessParser;\n}(_parser2.default);\n\nexports.default = LessParser;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 99 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _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; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _stringifier = __webpack_require__(21);\n\nvar _stringifier2 = _interopRequireDefault(_stringifier);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar LessStringifier = function (_Stringifier) {\n  _inherits(LessStringifier, _Stringifier);\n\n  function LessStringifier() {\n    _classCallCheck(this, LessStringifier);\n\n    return _possibleConstructorReturn(this, (LessStringifier.__proto__ || Object.getPrototypeOf(LessStringifier)).apply(this, arguments));\n  }\n\n  _createClass(LessStringifier, [{\n    key: 'comment',\n    value: function comment(node) {\n      this.builder(node.raws.content, node);\n    }\n  }, {\n    key: 'import',\n    value: function _import(node) {\n      this.builder('@' + node.name);\n      this.builder((node.raws.afterName || '') + (node.directives || '') + (node.raws.between || '') + (node.importPath || '') + (node.raws.after || ''));\n\n      if (node.raws.semicolon) {\n        this.builder(';');\n      }\n    }\n  }, {\n    key: 'rule',\n    value: function rule(node) {\n      _get(LessStringifier.prototype.__proto__ || Object.getPrototypeOf(LessStringifier.prototype), 'rule', this).call(this, node);\n\n      if (node.empty && node.raws.semicolon) {\n        if (node.important) {\n          this.builder(' !important');\n        }\n\n        if (node.raws.semicolon) {\n          this.builder(';');\n        }\n      }\n    }\n  }, {\n    key: 'block',\n    value: function block(node, start) {\n      var empty = node.empty;\n\n      var between = this.raw(node, 'between', 'beforeOpen');\n      var after = '';\n\n      if (empty) {\n        this.builder(start + between, node, 'start');\n      } else {\n        this.builder(start + between + '{', node, 'start');\n      }\n\n      if (node.nodes && node.nodes.length) {\n        this.body(node);\n        after = this.raw(node, 'after');\n      } else {\n        after = this.raw(node, 'after', 'emptyBody');\n      }\n\n      if (after) {\n        this.builder(after);\n      }\n\n      if (!empty) {\n        this.builder('}', node, 'end');\n      }\n    }\n  }]);\n\n  return LessStringifier;\n}(_stringifier2.default);\n\nexports.default = LessStringifier;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 100 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = lessTokenize;\n\nvar _globals = __webpack_require__(2);\n\nvar _tokenizeSymbol = __webpack_require__(113);\n\nvar _tokenizeSymbol2 = _interopRequireDefault(_tokenizeSymbol);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction lessTokenize(input) {\n  var state = {\n    input: input,\n    tokens: [],\n    css: input.css.valueOf(),\n    offset: -1,\n    line: 1,\n    pos: 0\n  };\n\n  state.length = state.css.length;\n\n  while (state.pos < state.length) {\n    state.symbolCode = state.css.charCodeAt(state.pos);\n    state.symbol = state.css[state.pos];\n    state.nextPos = null;\n    state.escaped = null;\n    state.lines = null;\n    state.lastLine = null;\n    state.cssPart = null;\n    state.escape = null;\n    state.nextLine = null;\n    state.nextOffset = null;\n    state.escapePos = null;\n    state.token = null;\n\n    if (state.symbolCode === _globals.newline) {\n      state.offset = state.pos;\n      state.line += 1;\n    }\n\n    (0, _tokenizeSymbol2.default)(state);\n\n    state.pos++;\n  }\n\n  return state.tokens;\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 101 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _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; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _rule = __webpack_require__(9);\n\nvar _rule2 = _interopRequireDefault(_rule);\n\nvar _lessStringify = __webpack_require__(15);\n\nvar _lessStringify2 = _interopRequireDefault(_lessStringify);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Rule = function (_PostCssRule) {\n  _inherits(Rule, _PostCssRule);\n\n  function Rule() {\n    _classCallCheck(this, Rule);\n\n    return _possibleConstructorReturn(this, (Rule.__proto__ || Object.getPrototypeOf(Rule)).apply(this, arguments));\n  }\n\n  _createClass(Rule, [{\n    key: 'toString',\n    value: function toString(stringifier) {\n      if (!stringifier) {\n        stringifier = {\n          stringify: _lessStringify2.default\n        };\n      }\n\n      return _get(Rule.prototype.__proto__ || Object.getPrototypeOf(Rule.prototype), 'toString', this).call(this, stringifier);\n    }\n  }]);\n\n  return Rule;\n}(_rule2.default);\n\nexports.default = Rule;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 102 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = findEndOfEscaping;\n\nvar _globals = __webpack_require__(2);\n\n/**\n * @param state\n * @returns {number}\n */\nfunction findEndOfEscaping(state) {\n  var openQuotesCount = 0,\n      quoteCode = -1;\n\n  for (var i = state.pos + 1; i < state.length; i++) {\n    var symbolCode = state.css.charCodeAt(i);\n    var prevSymbolCode = state.css.charCodeAt(i - 1);\n\n    if (prevSymbolCode !== _globals.backslash && (symbolCode === _globals.singleQuote || symbolCode === _globals.doubleQuote || symbolCode === _globals.backTick)) {\n      if (quoteCode === -1) {\n        quoteCode = symbolCode;\n        openQuotesCount++;\n      } else if (symbolCode === quoteCode) {\n        openQuotesCount--;\n\n        if (!openQuotesCount) {\n          return i;\n        }\n      }\n    }\n  }\n\n  return -1;\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 103 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isEscaping;\n\nvar _globals = __webpack_require__(2);\n\nvar nextSymbolVariants = [_globals.backTick, _globals.doubleQuote, _globals.singleQuote];\n\nfunction isEscaping(state) {\n  var nextSymbolCode = state.css.charCodeAt(state.pos + 1);\n\n  return state.symbolCode === _globals.tilde && nextSymbolVariants.indexOf(nextSymbolCode) >= 0;\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 104 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = tokenizeAtRule;\n\nvar _globals = __webpack_require__(2);\n\nvar _unclosed = __webpack_require__(8);\n\nvar _unclosed2 = _interopRequireDefault(_unclosed);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction tokenizeAtRule(state) {\n  // it's an interpolation\n  if (state.css.charCodeAt(state.pos + 1) === _globals.openedCurlyBracket) {\n    state.nextPos = state.css.indexOf('}', state.pos + 2);\n\n    if (state.nextPos === -1) {\n      (0, _unclosed2.default)(state, 'interpolation');\n    }\n\n    state.cssPart = state.css.slice(state.pos, state.nextPos + 1);\n    state.lines = state.cssPart.split('\\n');\n    state.lastLine = state.lines.length - 1;\n\n    if (state.lastLine > 0) {\n      state.nextLine = state.line + state.lastLine;\n      state.nextOffset = state.nextPos - state.lines[state.lastLine].length;\n    } else {\n      state.nextLine = state.line;\n      state.nextOffset = state.offset;\n    }\n\n    state.tokens.push(['word', state.cssPart, state.line, state.pos - state.offset, state.nextLine, state.nextPos - state.nextOffset]);\n\n    state.offset = state.nextOffset;\n    state.line = state.nextLine;\n  } else {\n    _globals.atEndPattern.lastIndex = state.pos + 1;\n    _globals.atEndPattern.test(state.css);\n\n    if (_globals.atEndPattern.lastIndex === 0) {\n      state.nextPos = state.css.length - 1;\n    } else {\n      state.nextPos = _globals.atEndPattern.lastIndex - 2;\n    }\n\n    state.cssPart = state.css.slice(state.pos, state.nextPos + 1);\n    state.token = 'at-word';\n\n    // check if it's a variable\n    if (_globals.variablePattern.test(state.cssPart)) {\n      _globals.wordEndPattern.lastIndex = state.pos + 1;\n      _globals.wordEndPattern.test(state.css);\n      if (_globals.wordEndPattern.lastIndex === 0) {\n        state.nextPos = state.css.length - 1;\n      } else {\n        state.nextPos = _globals.wordEndPattern.lastIndex - 2;\n      }\n\n      state.cssPart = state.css.slice(state.pos, state.nextPos + 1);\n      state.token = 'word';\n    }\n\n    state.tokens.push([state.token, state.cssPart, state.line, state.pos - state.offset, state.line, state.nextPos - state.offset]);\n  }\n\n  state.pos = state.nextPos;\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 105 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = tokenizeBackslash;\n\nvar _globals = __webpack_require__(2);\n\nfunction tokenizeBackslash(state) {\n  state.nextPos = state.pos;\n  state.escape = true;\n\n  while (state.css.charCodeAt(state.nextPos + 1) === _globals.backslash) {\n    state.nextPos += 1;\n    state.escape = !state.escape;\n  }\n\n  state.symbolCode = state.css.charCodeAt(state.nextPos + 1);\n\n  if (state.escape && state.symbolCode !== _globals.slash && state.symbolCode !== _globals.space && state.symbolCode !== _globals.newline && state.symbolCode !== _globals.tab && state.symbolCode !== _globals.carriageReturn && state.symbolCode !== _globals.feed) {\n    state.nextPos += 1;\n  }\n\n  state.tokens.push(['word', state.css.slice(state.pos, state.nextPos + 1), state.line, state.pos - state.offset, state.line, state.nextPos - state.offset]);\n\n  state.pos = state.nextPos;\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 106 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = tokenizeBasicSymbol;\nfunction tokenizeBasicSymbol(state) {\n  state.tokens.push([state.symbol, state.symbol, state.line, state.pos - state.offset]);\n}\nmodule.exports = exports[\"default\"];\n\n/***/ }),\n/* 107 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = tokenizeComma;\nfunction tokenizeComma(state) {\n  state.tokens.push(['word', state.symbol, state.line, state.pos - state.offset, state.line, state.pos - state.offset + 1]);\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 108 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = tokenizeDefault;\n\nvar _globals = __webpack_require__(2);\n\nvar _findEndOfEscaping = __webpack_require__(102);\n\nvar _findEndOfEscaping2 = _interopRequireDefault(_findEndOfEscaping);\n\nvar _isEscaping = __webpack_require__(103);\n\nvar _isEscaping2 = _interopRequireDefault(_isEscaping);\n\nvar _tokenizeInlineComment = __webpack_require__(109);\n\nvar _tokenizeInlineComment2 = _interopRequireDefault(_tokenizeInlineComment);\n\nvar _tokenizeMultilineComment = __webpack_require__(110);\n\nvar _tokenizeMultilineComment2 = _interopRequireDefault(_tokenizeMultilineComment);\n\nvar _unclosed = __webpack_require__(8);\n\nvar _unclosed2 = _interopRequireDefault(_unclosed);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction tokenizeDefault(state) {\n  var nextSymbolCode = state.css.charCodeAt(state.pos + 1);\n\n  if (state.symbolCode === _globals.slash && nextSymbolCode === _globals.asterisk) {\n    (0, _tokenizeMultilineComment2.default)(state);\n  } else if (state.symbolCode === _globals.slash && nextSymbolCode === _globals.slash) {\n    (0, _tokenizeInlineComment2.default)(state);\n  } else {\n    if ((0, _isEscaping2.default)(state)) {\n      var pos = (0, _findEndOfEscaping2.default)(state);\n\n      if (pos < 0) {\n        (0, _unclosed2.default)(state, 'escaping');\n      } else {\n        state.nextPos = pos;\n      }\n    } else {\n      _globals.wordEndPattern.lastIndex = state.pos + 1;\n      _globals.wordEndPattern.test(state.css);\n\n      if (_globals.wordEndPattern.lastIndex === 0) {\n        state.nextPos = state.css.length - 1;\n      } else {\n        state.nextPos = _globals.wordEndPattern.lastIndex - 2;\n      }\n    }\n\n    state.cssPart = state.css.slice(state.pos, state.nextPos + 1);\n\n    state.tokens.push(['word', state.cssPart, state.line, state.pos - state.offset, state.line, state.nextPos - state.offset]);\n\n    state.pos = state.nextPos;\n  }\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 109 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = tokenizeInlineComment;\nfunction tokenizeInlineComment(state) {\n  state.nextPos = state.css.indexOf('\\n', state.pos + 2) - 1;\n\n  if (state.nextPos === -2) {\n    state.nextPos = state.css.length - 1;\n  }\n\n  state.tokens.push(['comment', state.css.slice(state.pos, state.nextPos + 1), state.line, state.pos - state.offset, state.line, state.nextPos - state.offset, 'inline']);\n\n  state.pos = state.nextPos;\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 110 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = tokenizeMultilineComment;\n\nvar _unclosed = __webpack_require__(8);\n\nvar _unclosed2 = _interopRequireDefault(_unclosed);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction tokenizeMultilineComment(state) {\n  state.nextPos = state.css.indexOf('*/', state.pos + 2) + 1;\n\n  if (state.nextPos === 0) {\n    (0, _unclosed2.default)(state, 'comment');\n  }\n\n  state.cssPart = state.css.slice(state.pos, state.nextPos + 1);\n  state.lines = state.cssPart.split('\\n');\n  state.lastLine = state.lines.length - 1;\n\n  if (state.lastLine > 0) {\n    state.nextLine = state.line + state.lastLine;\n    state.nextOffset = state.nextPos - state.lines[state.lastLine].length;\n  } else {\n    state.nextLine = state.line;\n    state.nextOffset = state.offset;\n  }\n\n  state.tokens.push(['comment', state.cssPart, state.line, state.pos - state.offset, state.nextLine, state.nextPos - state.nextOffset]);\n\n  state.offset = state.nextOffset;\n  state.line = state.nextLine;\n  state.pos = state.nextPos;\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 111 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = tokenizeOpenedParenthesis;\n\nvar _globals = __webpack_require__(2);\n\nvar _unclosed = __webpack_require__(8);\n\nvar _unclosed2 = _interopRequireDefault(_unclosed);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction findClosedParenthesisPosition(css, length, start) {\n  var openedParenthesisCount = 0;\n\n  for (var i = start; i < length; i++) {\n    var symbol = css[i];\n\n    if (symbol === '(') {\n      openedParenthesisCount++;\n    } else if (symbol === ')') {\n      openedParenthesisCount--;\n\n      if (!openedParenthesisCount) {\n        return i;\n      }\n    }\n  }\n\n  return -1;\n}\n\n// it is not very reasonable to reduce complexity beyond this level\n// eslint-disable-next-line complexity\nfunction tokenizeOpenedParenthesis(state) {\n  var nextSymbolCode = state.css.charCodeAt(state.pos + 1);\n  var tokensCount = state.tokens.length;\n  var prevTokenCssPart = tokensCount ? state.tokens[tokensCount - 1][1] : '';\n\n  if (prevTokenCssPart === 'url' && nextSymbolCode !== _globals.singleQuote && nextSymbolCode !== _globals.doubleQuote && nextSymbolCode !== _globals.space && nextSymbolCode !== _globals.newline && nextSymbolCode !== _globals.tab && nextSymbolCode !== _globals.feed && nextSymbolCode !== _globals.carriageReturn) {\n    state.nextPos = state.pos;\n\n    do {\n      state.escaped = false;\n      state.nextPos = state.css.indexOf(')', state.nextPos + 1);\n\n      if (state.nextPos === -1) {\n        (0, _unclosed2.default)(state, 'bracket');\n      }\n\n      state.escapePos = state.nextPos;\n\n      while (state.css.charCodeAt(state.escapePos - 1) === _globals.backslash) {\n        state.escapePos -= 1;\n        state.escaped = !state.escaped;\n      }\n    } while (state.escaped);\n\n    state.tokens.push(['brackets', state.css.slice(state.pos, state.nextPos + 1), state.line, state.pos - state.offset, state.line, state.nextPos - state.offset]);\n    state.pos = state.nextPos;\n  } else {\n    state.nextPos = findClosedParenthesisPosition(state.css, state.length, state.pos);\n    state.cssPart = state.css.slice(state.pos, state.nextPos + 1);\n\n    var foundParam = state.cssPart.indexOf('@') >= 0;\n    var foundString = /['\"]/.test(state.cssPart);\n\n    if (state.cssPart.length === 0 || state.cssPart === '...' || foundParam && !foundString) {\n      // we're dealing with a mixin param block\n      if (state.nextPos === -1) {\n        (0, _unclosed2.default)(state, 'bracket');\n      }\n\n      state.tokens.push([state.symbol, state.symbol, state.line, state.pos - state.offset]);\n    } else {\n      var badBracket = _globals.badBracketPattern.test(state.cssPart);\n\n      if (state.nextPos === -1 || badBracket) {\n        state.tokens.push([state.symbol, state.symbol, state.line, state.pos - state.offset]);\n      } else {\n        state.tokens.push(['brackets', state.cssPart, state.line, state.pos - state.offset, state.line, state.nextPos - state.offset]);\n        state.pos = state.nextPos;\n      }\n    }\n  }\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 112 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = tokenizeQuotes;\n\nvar _globals = __webpack_require__(2);\n\nvar _unclosed = __webpack_require__(8);\n\nvar _unclosed2 = _interopRequireDefault(_unclosed);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction tokenizeQuotes(state) {\n  state.nextPos = state.pos;\n\n  do {\n    state.escaped = false;\n    state.nextPos = state.css.indexOf(state.symbol, state.nextPos + 1);\n\n    if (state.nextPos === -1) {\n      (0, _unclosed2.default)(state, 'quote');\n    }\n\n    state.escapePos = state.nextPos;\n\n    while (state.css.charCodeAt(state.escapePos - 1) === _globals.backslash) {\n      state.escapePos -= 1;\n      state.escaped = !state.escaped;\n    }\n  } while (state.escaped);\n\n  state.tokens.push(['string', state.css.slice(state.pos, state.nextPos + 1), state.line, state.pos - state.offset, state.line, state.nextPos - state.offset]);\n\n  state.pos = state.nextPos;\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 113 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = tokenizeSymbol;\n\nvar _globals = __webpack_require__(2);\n\nvar _tokenizeAtRule = __webpack_require__(104);\n\nvar _tokenizeAtRule2 = _interopRequireDefault(_tokenizeAtRule);\n\nvar _tokenizeBackslash = __webpack_require__(105);\n\nvar _tokenizeBackslash2 = _interopRequireDefault(_tokenizeBackslash);\n\nvar _tokenizeBasicSymbol = __webpack_require__(106);\n\nvar _tokenizeBasicSymbol2 = _interopRequireDefault(_tokenizeBasicSymbol);\n\nvar _tokenizeComma = __webpack_require__(107);\n\nvar _tokenizeComma2 = _interopRequireDefault(_tokenizeComma);\n\nvar _tokenizeDefault = __webpack_require__(108);\n\nvar _tokenizeDefault2 = _interopRequireDefault(_tokenizeDefault);\n\nvar _tokenizeOpenedParenthesis = __webpack_require__(111);\n\nvar _tokenizeOpenedParenthesis2 = _interopRequireDefault(_tokenizeOpenedParenthesis);\n\nvar _tokenizeQuotes = __webpack_require__(112);\n\nvar _tokenizeQuotes2 = _interopRequireDefault(_tokenizeQuotes);\n\nvar _tokenizeWhitespace = __webpack_require__(114);\n\nvar _tokenizeWhitespace2 = _interopRequireDefault(_tokenizeWhitespace);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// we cannot reduce complexity beyond this level\n// eslint-disable-next-line complexity\nfunction tokenizeSymbol(state) {\n  switch (state.symbolCode) {\n    case _globals.newline:\n    case _globals.space:\n    case _globals.tab:\n    case _globals.carriageReturn:\n    case _globals.feed:\n      (0, _tokenizeWhitespace2.default)(state);\n      break;\n\n    case _globals.comma:\n      (0, _tokenizeComma2.default)(state);\n      break;\n\n    case _globals.colon:\n    case _globals.semicolon:\n    case _globals.openedCurlyBracket:\n    case _globals.closedCurlyBracket:\n    case _globals.closedParenthesis:\n    case _globals.openSquareBracket:\n    case _globals.closeSquareBracket:\n      (0, _tokenizeBasicSymbol2.default)(state);\n      break;\n\n    case _globals.openedParenthesis:\n      (0, _tokenizeOpenedParenthesis2.default)(state);\n      break;\n\n    case _globals.singleQuote:\n    case _globals.doubleQuote:\n      (0, _tokenizeQuotes2.default)(state);\n      break;\n\n    case _globals.atRule:\n      (0, _tokenizeAtRule2.default)(state);\n      break;\n\n    case _globals.backslash:\n      (0, _tokenizeBackslash2.default)(state);\n      break;\n\n    default:\n      (0, _tokenizeDefault2.default)(state);\n      break;\n  }\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 114 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = tokenizeWhitespace;\n\nvar _globals = __webpack_require__(2);\n\nfunction tokenizeWhitespace(state) {\n  state.nextPos = state.pos;\n\n  // collect all neighbour space symbols\n  do {\n    state.nextPos += 1;\n    state.symbolCode = state.css.charCodeAt(state.nextPos);\n    if (state.symbolCode === _globals.newline) {\n      state.offset = state.nextPos;\n      state.line += 1;\n    }\n  } while (state.symbolCode === _globals.space || state.symbolCode === _globals.newline || state.symbolCode === _globals.tab || state.symbolCode === _globals.carriageReturn || state.symbolCode === _globals.feed);\n\n  state.tokens.push(['space', state.css.slice(state.pos, state.nextPos)]);\n  state.pos = state.nextPos - 1;\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 115 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n/**\n * Contains helpers for safely splitting lists of CSS values,\n * preserving parentheses and quotes.\n *\n * @example\n * const list = postcss.list;\n *\n * @namespace list\n */\nvar list = {\n    split: function split(string, separators, last) {\n        var array = [];\n        var current = '';\n        var split = false;\n\n        var func = 0;\n        var quote = false;\n        var escape = false;\n\n        for (var i = 0; i < string.length; i++) {\n            var letter = string[i];\n\n            if (quote) {\n                if (escape) {\n                    escape = false;\n                } else if (letter === '\\\\') {\n                    escape = true;\n                } else if (letter === quote) {\n                    quote = false;\n                }\n            } else if (letter === '\"' || letter === '\\'') {\n                quote = letter;\n            } else if (letter === '(') {\n                func += 1;\n            } else if (letter === ')') {\n                if (func > 0) func -= 1;\n            } else if (func === 0) {\n                if (separators.indexOf(letter) !== -1) split = true;\n            }\n\n            if (split) {\n                if (current !== '') array.push(current.trim());\n                current = '';\n                split = false;\n            } else {\n                current += letter;\n            }\n        }\n\n        if (last || current !== '') array.push(current.trim());\n        return array;\n    },\n\n\n    /**\n     * Safely splits space-separated values (such as those for `background`,\n     * `border-radius`, and other shorthand properties).\n     *\n     * @param {string} string - space-separated values\n     *\n     * @return {string[]} split values\n     *\n     * @example\n     * postcss.list.space('1px calc(10% + 1px)') //=> ['1px', 'calc(10% + 1px)']\n     */\n    space: function space(string) {\n        var spaces = [' ', '\\n', '\\t'];\n        return list.split(string, spaces);\n    },\n\n\n    /**\n     * Safely splits comma-separated values (such as those for `transition-*`\n     * and `background` properties).\n     *\n     * @param {string} string - comma-separated values\n     *\n     * @return {string[]} split values\n     *\n     * @example\n     * postcss.list.comma('black, linear-gradient(white, black)')\n     * //=> ['black', 'linear-gradient(white, black)']\n     */\n    comma: function comma(string) {\n        var comma = ',';\n        return list.split(string, [comma], true);\n    }\n};\n\nexports.default = list;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 116 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _jsBase = __webpack_require__(35);\n\nvar _sourceMap = __webpack_require__(13);\n\nvar _sourceMap2 = _interopRequireDefault(_sourceMap);\n\nvar _path = __webpack_require__(5);\n\nvar _path2 = _interopRequireDefault(_path);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar MapGenerator = function () {\n    function MapGenerator(stringify, root, opts) {\n        _classCallCheck(this, MapGenerator);\n\n        this.stringify = stringify;\n        this.mapOpts = opts.map || {};\n        this.root = root;\n        this.opts = opts;\n    }\n\n    MapGenerator.prototype.isMap = function isMap() {\n        if (typeof this.opts.map !== 'undefined') {\n            return !!this.opts.map;\n        } else {\n            return this.previous().length > 0;\n        }\n    };\n\n    MapGenerator.prototype.previous = function previous() {\n        var _this = this;\n\n        if (!this.previousMaps) {\n            this.previousMaps = [];\n            this.root.walk(function (node) {\n                if (node.source && node.source.input.map) {\n                    var map = node.source.input.map;\n                    if (_this.previousMaps.indexOf(map) === -1) {\n                        _this.previousMaps.push(map);\n                    }\n                }\n            });\n        }\n\n        return this.previousMaps;\n    };\n\n    MapGenerator.prototype.isInline = function isInline() {\n        if (typeof this.mapOpts.inline !== 'undefined') {\n            return this.mapOpts.inline;\n        }\n\n        var annotation = this.mapOpts.annotation;\n        if (typeof annotation !== 'undefined' && annotation !== true) {\n            return false;\n        }\n\n        if (this.previous().length) {\n            return this.previous().some(function (i) {\n                return i.inline;\n            });\n        } else {\n            return true;\n        }\n    };\n\n    MapGenerator.prototype.isSourcesContent = function isSourcesContent() {\n        if (typeof this.mapOpts.sourcesContent !== 'undefined') {\n            return this.mapOpts.sourcesContent;\n        }\n        if (this.previous().length) {\n            return this.previous().some(function (i) {\n                return i.withContent();\n            });\n        } else {\n            return true;\n        }\n    };\n\n    MapGenerator.prototype.clearAnnotation = function clearAnnotation() {\n        if (this.mapOpts.annotation === false) return;\n\n        var node = void 0;\n        for (var i = this.root.nodes.length - 1; i >= 0; i--) {\n            node = this.root.nodes[i];\n            if (node.type !== 'comment') continue;\n            if (node.text.indexOf('# sourceMappingURL=') === 0) {\n                this.root.removeChild(i);\n            }\n        }\n    };\n\n    MapGenerator.prototype.setSourcesContent = function setSourcesContent() {\n        var _this2 = this;\n\n        var already = {};\n        this.root.walk(function (node) {\n            if (node.source) {\n                var from = node.source.input.from;\n                if (from && !already[from]) {\n                    already[from] = true;\n                    var relative = _this2.relative(from);\n                    _this2.map.setSourceContent(relative, node.source.input.css);\n                }\n            }\n        });\n    };\n\n    MapGenerator.prototype.applyPrevMaps = function applyPrevMaps() {\n        for (var _iterator = this.previous(), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n            var _ref;\n\n            if (_isArray) {\n                if (_i >= _iterator.length) break;\n                _ref = _iterator[_i++];\n            } else {\n                _i = _iterator.next();\n                if (_i.done) break;\n                _ref = _i.value;\n            }\n\n            var prev = _ref;\n\n            var from = this.relative(prev.file);\n            var root = prev.root || _path2.default.dirname(prev.file);\n            var map = void 0;\n\n            if (this.mapOpts.sourcesContent === false) {\n                map = new _sourceMap2.default.SourceMapConsumer(prev.text);\n                if (map.sourcesContent) {\n                    map.sourcesContent = map.sourcesContent.map(function () {\n                        return null;\n                    });\n                }\n            } else {\n                map = prev.consumer();\n            }\n\n            this.map.applySourceMap(map, from, this.relative(root));\n        }\n    };\n\n    MapGenerator.prototype.isAnnotation = function isAnnotation() {\n        if (this.isInline()) {\n            return true;\n        } else if (typeof this.mapOpts.annotation !== 'undefined') {\n            return this.mapOpts.annotation;\n        } else if (this.previous().length) {\n            return this.previous().some(function (i) {\n                return i.annotation;\n            });\n        } else {\n            return true;\n        }\n    };\n\n    MapGenerator.prototype.addAnnotation = function addAnnotation() {\n        var content = void 0;\n\n        if (this.isInline()) {\n            content = 'data:application/json;base64,' + _jsBase.Base64.encode(this.map.toString());\n        } else if (typeof this.mapOpts.annotation === 'string') {\n            content = this.mapOpts.annotation;\n        } else {\n            content = this.outputFile() + '.map';\n        }\n\n        var eol = '\\n';\n        if (this.css.indexOf('\\r\\n') !== -1) eol = '\\r\\n';\n\n        this.css += eol + '/*# sourceMappingURL=' + content + ' */';\n    };\n\n    MapGenerator.prototype.outputFile = function outputFile() {\n        if (this.opts.to) {\n            return this.relative(this.opts.to);\n        } else if (this.opts.from) {\n            return this.relative(this.opts.from);\n        } else {\n            return 'to.css';\n        }\n    };\n\n    MapGenerator.prototype.generateMap = function generateMap() {\n        this.generateString();\n        if (this.isSourcesContent()) this.setSourcesContent();\n        if (this.previous().length > 0) this.applyPrevMaps();\n        if (this.isAnnotation()) this.addAnnotation();\n\n        if (this.isInline()) {\n            return [this.css];\n        } else {\n            return [this.css, this.map];\n        }\n    };\n\n    MapGenerator.prototype.relative = function relative(file) {\n        if (file.indexOf('<') === 0) return file;\n        if (/^\\w+:\\/\\//.test(file)) return file;\n\n        var from = this.opts.to ? _path2.default.dirname(this.opts.to) : '.';\n\n        if (typeof this.mapOpts.annotation === 'string') {\n            from = _path2.default.dirname(_path2.default.resolve(from, this.mapOpts.annotation));\n        }\n\n        file = _path2.default.relative(from, file);\n        if (_path2.default.sep === '\\\\') {\n            return file.replace(/\\\\/g, '/');\n        } else {\n            return file;\n        }\n    };\n\n    MapGenerator.prototype.sourcePath = function sourcePath(node) {\n        if (this.mapOpts.from) {\n            return this.mapOpts.from;\n        } else {\n            return this.relative(node.source.input.from);\n        }\n    };\n\n    MapGenerator.prototype.generateString = function generateString() {\n        var _this3 = this;\n\n        this.css = '';\n        this.map = new _sourceMap2.default.SourceMapGenerator({ file: this.outputFile() });\n\n        var line = 1;\n        var column = 1;\n\n        var lines = void 0,\n            last = void 0;\n        this.stringify(this.root, function (str, node, type) {\n            _this3.css += str;\n\n            if (node && type !== 'end') {\n                if (node.source && node.source.start) {\n                    _this3.map.addMapping({\n                        source: _this3.sourcePath(node),\n                        generated: { line: line, column: column - 1 },\n                        original: {\n                            line: node.source.start.line,\n                            column: node.source.start.column - 1\n                        }\n                    });\n                } else {\n                    _this3.map.addMapping({\n                        source: '<no source>',\n                        original: { line: 1, column: 0 },\n                        generated: { line: line, column: column - 1 }\n                    });\n                }\n            }\n\n            lines = str.match(/\\n/g);\n            if (lines) {\n                line += lines.length;\n                last = str.lastIndexOf('\\n');\n                column = str.length - last;\n            } else {\n                column += str.length;\n            }\n\n            if (node && type !== 'start') {\n                if (node.source && node.source.end) {\n                    _this3.map.addMapping({\n                        source: _this3.sourcePath(node),\n                        generated: { line: line, column: column - 1 },\n                        original: {\n                            line: node.source.end.line,\n                            column: node.source.end.column\n                        }\n                    });\n                } else {\n                    _this3.map.addMapping({\n                        source: '<no source>',\n                        original: { line: 1, column: 0 },\n                        generated: { line: line, column: column - 1 }\n                    });\n                }\n            }\n        });\n    };\n\n    MapGenerator.prototype.generate = function generate() {\n        this.clearAnnotation();\n\n        if (this.isMap()) {\n            return this.generateMap();\n        } else {\n            var result = '';\n            this.stringify(this.root, function (i) {\n                result += i;\n            });\n            return [result];\n        }\n    };\n\n    return MapGenerator;\n}();\n\nexports.default = MapGenerator;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 117 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; };\n\nvar _jsBase = __webpack_require__(35);\n\nvar _sourceMap = __webpack_require__(13);\n\nvar _sourceMap2 = _interopRequireDefault(_sourceMap);\n\nvar _path = __webpack_require__(5);\n\nvar _path2 = _interopRequireDefault(_path);\n\nvar _fs = __webpack_require__(161);\n\nvar _fs2 = _interopRequireDefault(_fs);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Source map information from input CSS.\n * For example, source map after Sass compiler.\n *\n * This class will automatically find source map in input CSS or in file system\n * near input file (according `from` option).\n *\n * @example\n * const root = postcss.parse(css, { from: 'a.sass.css' });\n * root.input.map //=> PreviousMap\n */\nvar PreviousMap = function () {\n\n    /**\n     * @param {string}         css    - input CSS source\n     * @param {processOptions} [opts] - {@link Processor#process} options\n     */\n    function PreviousMap(css, opts) {\n        _classCallCheck(this, PreviousMap);\n\n        this.loadAnnotation(css);\n        /**\n         * @member {boolean} - Was source map inlined by data-uri to input CSS.\n         */\n        this.inline = this.startWith(this.annotation, 'data:');\n\n        var prev = opts.map ? opts.map.prev : undefined;\n        var text = this.loadMap(opts.from, prev);\n        if (text) this.text = text;\n    }\n\n    /**\n     * Create a instance of `SourceMapGenerator` class\n     * from the `source-map` library to work with source map information.\n     *\n     * It is lazy method, so it will create object only on first call\n     * and then it will use cache.\n     *\n     * @return {SourceMapGenerator} object with source map information\n     */\n\n\n    PreviousMap.prototype.consumer = function consumer() {\n        if (!this.consumerCache) {\n            this.consumerCache = new _sourceMap2.default.SourceMapConsumer(this.text);\n        }\n        return this.consumerCache;\n    };\n\n    /**\n     * Does source map contains `sourcesContent` with input source text.\n     *\n     * @return {boolean} Is `sourcesContent` present\n     */\n\n\n    PreviousMap.prototype.withContent = function withContent() {\n        return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);\n    };\n\n    PreviousMap.prototype.startWith = function startWith(string, start) {\n        if (!string) return false;\n        return string.substr(0, start.length) === start;\n    };\n\n    PreviousMap.prototype.loadAnnotation = function loadAnnotation(css) {\n        var match = css.match(/\\/\\*\\s*# sourceMappingURL=(.*)\\s*\\*\\//);\n        if (match) this.annotation = match[1].trim();\n    };\n\n    PreviousMap.prototype.decodeInline = function decodeInline(text) {\n        var utfd64 = 'data:application/json;charset=utf-8;base64,';\n        var utf64 = 'data:application/json;charset=utf8;base64,';\n        var b64 = 'data:application/json;base64,';\n        var uri = 'data:application/json,';\n\n        if (this.startWith(text, uri)) {\n            return decodeURIComponent(text.substr(uri.length));\n        } else if (this.startWith(text, b64)) {\n            return _jsBase.Base64.decode(text.substr(b64.length));\n        } else if (this.startWith(text, utf64)) {\n            return _jsBase.Base64.decode(text.substr(utf64.length));\n        } else if (this.startWith(text, utfd64)) {\n            return _jsBase.Base64.decode(text.substr(utfd64.length));\n        } else {\n            var encoding = text.match(/data:application\\/json;([^,]+),/)[1];\n            throw new Error('Unsupported source map encoding ' + encoding);\n        }\n    };\n\n    PreviousMap.prototype.loadMap = function loadMap(file, prev) {\n        if (prev === false) return false;\n\n        if (prev) {\n            if (typeof prev === 'string') {\n                return prev;\n            } else if (typeof prev === 'function') {\n                var prevPath = prev(file);\n                if (prevPath && _fs2.default.existsSync && _fs2.default.existsSync(prevPath)) {\n                    return _fs2.default.readFileSync(prevPath, 'utf-8').toString().trim();\n                } else {\n                    throw new Error('Unable to load previous source map: ' + prevPath.toString());\n                }\n            } else if (prev instanceof _sourceMap2.default.SourceMapConsumer) {\n                return _sourceMap2.default.SourceMapGenerator.fromSourceMap(prev).toString();\n            } else if (prev instanceof _sourceMap2.default.SourceMapGenerator) {\n                return prev.toString();\n            } else if (this.isMap(prev)) {\n                return JSON.stringify(prev);\n            } else {\n                throw new Error('Unsupported previous source map format: ' + prev.toString());\n            }\n        } else if (this.inline) {\n            return this.decodeInline(this.annotation);\n        } else if (this.annotation) {\n            var map = this.annotation;\n            if (file) map = _path2.default.join(_path2.default.dirname(file), map);\n\n            this.root = _path2.default.dirname(map);\n            if (_fs2.default.existsSync && _fs2.default.existsSync(map)) {\n                return _fs2.default.readFileSync(map, 'utf-8').toString().trim();\n            } else {\n                return false;\n            }\n        }\n    };\n\n    PreviousMap.prototype.isMap = function isMap(map) {\n        if ((typeof map === 'undefined' ? 'undefined' : _typeof(map)) !== 'object') return false;\n        return typeof map.mappings === 'string' || typeof map._mappings === 'string';\n    };\n\n    return PreviousMap;\n}();\n\nexports.default = PreviousMap;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 118 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; };\n\nvar _lazyResult = __webpack_require__(38);\n\nvar _lazyResult2 = _interopRequireDefault(_lazyResult);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Contains plugins to process CSS. Create one `Processor` instance,\n * initialize its plugins, and then use that instance on numerous CSS files.\n *\n * @example\n * const processor = postcss([autoprefixer, precss]);\n * processor.process(css1).then(result => console.log(result.css));\n * processor.process(css2).then(result => console.log(result.css));\n */\nvar Processor = function () {\n\n  /**\n   * @param {Array.<Plugin|pluginFunction>|Processor} plugins - PostCSS\n   *        plugins. See {@link Processor#use} for plugin format.\n   */\n  function Processor() {\n    var plugins = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n    _classCallCheck(this, Processor);\n\n    /**\n     * @member {string} - Current PostCSS version.\n     *\n     * @example\n     * if ( result.processor.version.split('.')[0] !== '5' ) {\n     *   throw new Error('This plugin works only with PostCSS 5');\n     * }\n     */\n    this.version = '5.2.17';\n    /**\n     * @member {pluginFunction[]} - Plugins added to this processor.\n     *\n     * @example\n     * const processor = postcss([autoprefixer, precss]);\n     * processor.plugins.length //=> 2\n     */\n    this.plugins = this.normalize(plugins);\n  }\n\n  /**\n   * Adds a plugin to be used as a CSS processor.\n   *\n   * PostCSS plugin can be in 4 formats:\n   * * A plugin created by {@link postcss.plugin} method.\n   * * A function. PostCSS will pass the function a @{link Root}\n   *   as the first argument and current {@link Result} instance\n   *   as the second.\n   * * An object with a `postcss` method. PostCSS will use that method\n   *   as described in #2.\n   * * Another {@link Processor} instance. PostCSS will copy plugins\n   *   from that instance into this one.\n   *\n   * Plugins can also be added by passing them as arguments when creating\n   * a `postcss` instance (see [`postcss(plugins)`]).\n   *\n   * Asynchronous plugins should return a `Promise` instance.\n   *\n   * @param {Plugin|pluginFunction|Processor} plugin - PostCSS plugin\n   *                                                   or {@link Processor}\n   *                                                   with plugins\n   *\n   * @example\n   * const processor = postcss()\n   *   .use(autoprefixer)\n   *   .use(precss);\n   *\n   * @return {Processes} current processor to make methods chain\n   */\n\n\n  Processor.prototype.use = function use(plugin) {\n    this.plugins = this.plugins.concat(this.normalize([plugin]));\n    return this;\n  };\n\n  /**\n   * Parses source CSS and returns a {@link LazyResult} Promise proxy.\n   * Because some plugins can be asynchronous it doesn’t make\n   * any transformations. Transformations will be applied\n   * in the {@link LazyResult} methods.\n   *\n   * @param {string|toString|Result} css - String with input CSS or\n   *                                       any object with a `toString()`\n   *                                       method, like a Buffer.\n   *                                       Optionally, send a {@link Result}\n   *                                       instance and the processor will\n   *                                       take the {@link Root} from it.\n   * @param {processOptions} [opts]      - options\n   *\n   * @return {LazyResult} Promise proxy\n   *\n   * @example\n   * processor.process(css, { from: 'a.css', to: 'a.out.css' })\n   *   .then(result => {\n   *      console.log(result.css);\n   *   });\n   */\n\n\n  Processor.prototype.process = function process(css) {\n    var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    return new _lazyResult2.default(this, css, opts);\n  };\n\n  Processor.prototype.normalize = function normalize(plugins) {\n    var normalized = [];\n    for (var _iterator = plugins, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n      var _ref;\n\n      if (_isArray) {\n        if (_i >= _iterator.length) break;\n        _ref = _iterator[_i++];\n      } else {\n        _i = _iterator.next();\n        if (_i.done) break;\n        _ref = _i.value;\n      }\n\n      var i = _ref;\n\n      if (i.postcss) i = i.postcss;\n\n      if ((typeof i === 'undefined' ? 'undefined' : _typeof(i)) === 'object' && Array.isArray(i.plugins)) {\n        normalized = normalized.concat(i.plugins);\n      } else if (typeof i === 'function') {\n        normalized.push(i);\n      } else if ((typeof i === 'undefined' ? 'undefined' : _typeof(i)) === 'object' && (i.parse || i.stringify)) {\n        throw new Error('PostCSS syntaxes cannot be used as plugins. ' + 'Instead, please use one of the ' + 'syntax/parser/stringifier options as ' + 'outlined in your PostCSS ' + 'runner documentation.');\n      } else {\n        throw new Error(i + ' is not a PostCSS plugin');\n      }\n    }\n    return normalized;\n  };\n\n  return Processor;\n}();\n\nexports.default = Processor;\n\n/**\n * @callback builder\n * @param {string} part          - part of generated CSS connected to this node\n * @param {Node}   node          - AST node\n * @param {\"start\"|\"end\"} [type] - node’s part type\n */\n\n/**\n * @callback parser\n *\n * @param {string|toString} css   - string with input CSS or any object\n *                                  with toString() method, like a Buffer\n * @param {processOptions} [opts] - options with only `from` and `map` keys\n *\n * @return {Root} PostCSS AST\n */\n\n/**\n * @callback stringifier\n *\n * @param {Node} node       - start node for stringifing. Usually {@link Root}.\n * @param {builder} builder - function to concatenate CSS from node’s parts\n *                            or generate string and source map\n *\n * @return {void}\n */\n\n/**\n * @typedef {object} syntax\n * @property {parser} parse          - function to generate AST by string\n * @property {stringifier} stringify - function to generate string by AST\n */\n\n/**\n * @typedef {object} toString\n * @property {function} toString\n */\n\n/**\n * @callback pluginFunction\n * @param {Root} root     - parsed input CSS\n * @param {Result} result - result to set warnings or check other plugins\n */\n\n/**\n * @typedef {object} Plugin\n * @property {function} postcss - PostCSS plugin function\n */\n\n/**\n * @typedef {object} processOptions\n * @property {string} from             - the path of the CSS source file.\n *                                       You should always set `from`,\n *                                       because it is used in source map\n *                                       generation and syntax error messages.\n * @property {string} to               - the path where you’ll put the output\n *                                       CSS file. You should always set `to`\n *                                       to generate correct source maps.\n * @property {parser} parser           - function to generate AST by string\n * @property {stringifier} stringifier - class to generate string by AST\n * @property {syntax} syntax           - object with `parse` and `stringify`\n * @property {object} map              - source map options\n * @property {boolean} map.inline                    - does source map should\n *                                                     be embedded in the output\n *                                                     CSS as a base64-encoded\n *                                                     comment\n * @property {string|object|false|function} map.prev - source map content\n *                                                     from a previous\n *                                                     processing step\n *                                                     (for example, Sass).\n *                                                     PostCSS will try to find\n *                                                     previous map\n *                                                     automatically, so you\n *                                                     could disable it by\n *                                                     `false` value.\n * @property {boolean} map.sourcesContent            - does PostCSS should set\n *                                                     the origin content to map\n * @property {string|false} map.annotation           - does PostCSS should set\n *                                                     annotation comment to map\n * @property {string} map.from                       - override `from` in map’s\n *                                                     `sources`\n */\n\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 119 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; }; }();\n\nvar _warning = __webpack_require__(121);\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Provides the result of the PostCSS transformations.\n *\n * A Result instance is returned by {@link LazyResult#then}\n * or {@link Root#toResult} methods.\n *\n * @example\n * postcss([cssnext]).process(css).then(function (result) {\n *    console.log(result.css);\n * });\n *\n * @example\n * var result2 = postcss.parse(css).toResult();\n */\nvar Result = function () {\n\n  /**\n   * @param {Processor} processor - processor used for this transformation.\n   * @param {Root}      root      - Root node after all transformations.\n   * @param {processOptions} opts - options from the {@link Processor#process}\n   *                                or {@link Root#toResult}\n   */\n  function Result(processor, root, opts) {\n    _classCallCheck(this, Result);\n\n    /**\n     * @member {Processor} - The Processor instance used\n     *                       for this transformation.\n     *\n     * @example\n     * for ( let plugin of result.processor.plugins) {\n     *   if ( plugin.postcssPlugin === 'postcss-bad' ) {\n     *     throw 'postcss-good is incompatible with postcss-bad';\n     *   }\n     * });\n     */\n    this.processor = processor;\n    /**\n     * @member {Message[]} - Contains messages from plugins\n     *                       (e.g., warnings or custom messages).\n     *                       Each message should have type\n     *                       and plugin properties.\n     *\n     * @example\n     * postcss.plugin('postcss-min-browser', () => {\n     *   return (root, result) => {\n     *     var browsers = detectMinBrowsersByCanIUse(root);\n     *     result.messages.push({\n     *       type:    'min-browser',\n     *       plugin:  'postcss-min-browser',\n     *       browsers: browsers\n     *     });\n     *   };\n     * });\n     */\n    this.messages = [];\n    /**\n     * @member {Root} - Root node after all transformations.\n     *\n     * @example\n     * root.toResult().root == root;\n     */\n    this.root = root;\n    /**\n     * @member {processOptions} - Options from the {@link Processor#process}\n     *                            or {@link Root#toResult} call\n     *                            that produced this Result instance.\n     *\n     * @example\n     * root.toResult(opts).opts == opts;\n     */\n    this.opts = opts;\n    /**\n     * @member {string} - A CSS string representing of {@link Result#root}.\n     *\n     * @example\n     * postcss.parse('a{}').toResult().css //=> \"a{}\"\n     */\n    this.css = undefined;\n    /**\n     * @member {SourceMapGenerator} - An instance of `SourceMapGenerator`\n     *                                class from the `source-map` library,\n     *                                representing changes\n     *                                to the {@link Result#root} instance.\n     *\n     * @example\n     * result.map.toJSON() //=> { version: 3, file: 'a.css', … }\n     *\n     * @example\n     * if ( result.map ) {\n     *   fs.writeFileSync(result.opts.to + '.map', result.map.toString());\n     * }\n     */\n    this.map = undefined;\n  }\n\n  /**\n   * Returns for @{link Result#css} content.\n   *\n   * @example\n   * result + '' === result.css\n   *\n   * @return {string} string representing of {@link Result#root}\n   */\n\n\n  Result.prototype.toString = function toString() {\n    return this.css;\n  };\n\n  /**\n   * Creates an instance of {@link Warning} and adds it\n   * to {@link Result#messages}.\n   *\n   * @param {string} text        - warning message\n   * @param {Object} [opts]      - warning options\n   * @param {Node}   opts.node   - CSS node that caused the warning\n   * @param {string} opts.word   - word in CSS source that caused the warning\n   * @param {number} opts.index  - index in CSS node string that caused\n   *                               the warning\n   * @param {string} opts.plugin - name of the plugin that created\n   *                               this warning. {@link Result#warn} fills\n   *                               this property automatically.\n   *\n   * @return {Warning} created warning\n   */\n\n\n  Result.prototype.warn = function warn(text) {\n    var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    if (!opts.plugin) {\n      if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n        opts.plugin = this.lastPlugin.postcssPlugin;\n      }\n    }\n\n    var warning = new _warning2.default(text, opts);\n    this.messages.push(warning);\n\n    return warning;\n  };\n\n  /**\n   * Returns warnings from plugins. Filters {@link Warning} instances\n   * from {@link Result#messages}.\n   *\n   * @example\n   * result.warnings().forEach(warn => {\n   *   console.warn(warn.toString());\n   * });\n   *\n   * @return {Warning[]} warnings from plugins\n   */\n\n\n  Result.prototype.warnings = function warnings() {\n    return this.messages.filter(function (i) {\n      return i.type === 'warning';\n    });\n  };\n\n  /**\n   * An alias for the {@link Result#css} property.\n   * Use it with syntaxes that generate non-CSS output.\n   * @type {string}\n   *\n   * @example\n   * result.css === result.content;\n   */\n\n\n  _createClass(Result, [{\n    key: 'content',\n    get: function get() {\n      return this.css;\n    }\n  }]);\n\n  return Result;\n}();\n\nexports.default = Result;\n\n/**\n * @typedef  {object} Message\n * @property {string} type   - message type\n * @property {string} plugin - source PostCSS plugin name\n */\n\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 120 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _chalk = __webpack_require__(44);\n\nvar _chalk2 = _interopRequireDefault(_chalk);\n\nvar _tokenize = __webpack_require__(43);\n\nvar _tokenize2 = _interopRequireDefault(_tokenize);\n\nvar _input = __webpack_require__(19);\n\nvar _input2 = _interopRequireDefault(_input);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar colors = new _chalk2.default.constructor({ enabled: true });\n\nvar HIGHLIGHT_THEME = {\n    'brackets': colors.cyan,\n    'at-word': colors.cyan,\n    'call': colors.cyan,\n    'comment': colors.gray,\n    'string': colors.green,\n    'class': colors.yellow,\n    'hash': colors.magenta,\n    '(': colors.cyan,\n    ')': colors.cyan,\n    '{': colors.yellow,\n    '}': colors.yellow,\n    '[': colors.yellow,\n    ']': colors.yellow,\n    ':': colors.yellow,\n    ';': colors.yellow\n};\n\nfunction getTokenType(_ref, index, tokens) {\n    var type = _ref[0],\n        value = _ref[1];\n\n    if (type === 'word') {\n        if (value[0] === '.') {\n            return 'class';\n        }\n        if (value[0] === '#') {\n            return 'hash';\n        }\n    }\n\n    var nextToken = tokens[index + 1];\n    if (nextToken && (nextToken[0] === 'brackets' || nextToken[0] === '(')) {\n        return 'call';\n    }\n\n    return type;\n}\n\nfunction terminalHighlight(css) {\n    var tokens = (0, _tokenize2.default)(new _input2.default(css), { ignoreErrors: true });\n    return tokens.map(function (token, index) {\n        var color = HIGHLIGHT_THEME[getTokenType(token, index, tokens)];\n        if (color) {\n            return token[1].split(/\\r?\\n/).map(function (i) {\n                return color(i);\n            }).join('\\n');\n        } else {\n            return token[1];\n        }\n    }).join('');\n}\n\nexports.default = terminalHighlight;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 121 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Represents a plugin’s warning. It can be created using {@link Node#warn}.\n *\n * @example\n * if ( decl.important ) {\n *     decl.warn(result, 'Avoid !important', { word: '!important' });\n * }\n */\nvar Warning = function () {\n\n  /**\n   * @param {string} text        - warning message\n   * @param {Object} [opts]      - warning options\n   * @param {Node}   opts.node   - CSS node that caused the warning\n   * @param {string} opts.word   - word in CSS source that caused the warning\n   * @param {number} opts.index  - index in CSS node string that caused\n   *                               the warning\n   * @param {string} opts.plugin - name of the plugin that created\n   *                               this warning. {@link Result#warn} fills\n   *                               this property automatically.\n   */\n  function Warning(text) {\n    var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Warning);\n\n    /**\n     * @member {string} - Type to filter warnings from\n     *                    {@link Result#messages}. Always equal\n     *                    to `\"warning\"`.\n     *\n     * @example\n     * const nonWarning = result.messages.filter(i => i.type !== 'warning')\n     */\n    this.type = 'warning';\n    /**\n     * @member {string} - The warning message.\n     *\n     * @example\n     * warning.text //=> 'Try to avoid !important'\n     */\n    this.text = text;\n\n    if (opts.node && opts.node.source) {\n      var pos = opts.node.positionBy(opts);\n      /**\n       * @member {number} - Line in the input file\n       *                    with this warning’s source\n       *\n       * @example\n       * warning.line //=> 5\n       */\n      this.line = pos.line;\n      /**\n       * @member {number} - Column in the input file\n       *                    with this warning’s source.\n       *\n       * @example\n       * warning.column //=> 6\n       */\n      this.column = pos.column;\n    }\n\n    for (var opt in opts) {\n      this[opt] = opts[opt];\n    }\n  }\n\n  /**\n   * Returns a warning position and message.\n   *\n   * @example\n   * warning.toString() //=> 'postcss-lint:a.css:10:14: Avoid !important'\n   *\n   * @return {string} warning position and message\n   */\n\n\n  Warning.prototype.toString = function toString() {\n    if (this.node) {\n      return this.node.error(this.text, {\n        plugin: this.plugin,\n        index: this.index,\n        word: this.word\n      }).message;\n    } else if (this.plugin) {\n      return this.plugin + ': ' + this.text;\n    } else {\n      return this.text;\n    }\n  };\n\n  /**\n   * @memberof Warning#\n   * @member {string} plugin - The name of the plugin that created\n   *                           it will fill this property automatically.\n   *                           this warning. When you call {@link Node#warn}\n   *\n   * @example\n   * warning.plugin //=> 'postcss-important'\n   */\n\n  /**\n   * @memberof Warning#\n   * @member {Node} node - Contains the CSS node that caused the warning.\n   *\n   * @example\n   * warning.node.toString() //=> 'color: white !important'\n   */\n\n  return Warning;\n}();\n\nexports.default = Warning;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 122 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(process) {\nvar argv = process.argv;\n\nvar terminator = argv.indexOf('--');\nvar hasFlag = function (flag) {\n\tflag = '--' + flag;\n\tvar pos = argv.indexOf(flag);\n\treturn pos !== -1 && (terminator !== -1 ? pos < terminator : true);\n};\n\nmodule.exports = (function () {\n\tif ('FORCE_COLOR' in process.env) {\n\t\treturn true;\n\t}\n\n\tif (hasFlag('no-color') ||\n\t\thasFlag('no-colors') ||\n\t\thasFlag('color=false')) {\n\t\treturn false;\n\t}\n\n\tif (hasFlag('color') ||\n\t\thasFlag('colors') ||\n\t\thasFlag('color=true') ||\n\t\thasFlag('color=always')) {\n\t\treturn true;\n\t}\n\n\tif (process.stdout && !process.stdout.isTTY) {\n\t\treturn false;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\treturn true;\n\t}\n\n\tif ('COLORTERM' in process.env) {\n\t\treturn true;\n\t}\n\n\tif (process.env.TERM === 'dumb') {\n\t\treturn false;\n\t}\n\n\tif (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) {\n\t\treturn true;\n\t}\n\n\treturn false;\n})();\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7)));\n\n/***/ }),\n/* 123 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nmodule.exports = false;\n\n\n/***/ }),\n/* 124 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.parseMediaFeature = parseMediaFeature;\nexports.parseMediaQuery = parseMediaQuery;\nexports.parseMediaList = parseMediaList;\n\nvar _Node = __webpack_require__(46);\n\nvar _Node2 = _interopRequireDefault(_Node);\n\nvar _Container = __webpack_require__(45);\n\nvar _Container2 = _interopRequireDefault(_Container);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\r\n * Parses a media feature expression, e.g. `max-width: 10px`, `(color)`\r\n *\r\n * @param {string} string - the source expression string, can be inside parens\r\n * @param {Number} index - the index of `string` in the overall input\r\n *\r\n * @return {Array} an array of Nodes, the first element being a media feature,\r\n *    the secont - its value (may be missing)\r\n */\n\nfunction parseMediaFeature(string) {\n  var index = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n\n  var modesEntered = [{\n    mode: 'normal',\n    character: null\n  }];\n  var result = [];\n  var lastModeIndex = 0;\n  var mediaFeature = '';\n  var colon = null;\n  var mediaFeatureValue = null;\n  var indexLocal = index;\n\n  var stringNormalized = string;\n  // Strip trailing parens (if any), and correct the starting index\n  if (string[0] === '(' && string[string.length - 1] === ')') {\n    stringNormalized = string.substring(1, string.length - 1);\n    indexLocal++;\n  }\n\n  for (var i = 0; i < stringNormalized.length; i++) {\n    var character = stringNormalized[i];\n\n    // If entering/exiting a string\n    if (character === '\\'' || character === '\"') {\n      if (modesEntered[lastModeIndex].isCalculationEnabled === true) {\n        modesEntered.push({\n          mode: 'string',\n          isCalculationEnabled: false,\n          character: character\n        });\n        lastModeIndex++;\n      } else if (modesEntered[lastModeIndex].mode === 'string' && modesEntered[lastModeIndex].character === character && stringNormalized[i - 1] !== '\\\\') {\n        modesEntered.pop();\n        lastModeIndex--;\n      }\n    }\n\n    // If entering/exiting interpolation\n    if (character === '{') {\n      modesEntered.push({\n        mode: 'interpolation',\n        isCalculationEnabled: true\n      });\n      lastModeIndex++;\n    } else if (character === '}') {\n      modesEntered.pop();\n      lastModeIndex--;\n    }\n\n    // If a : is met outside of a string, function call or interpolation, than\n    // this : separates a media feature and a value\n    if (modesEntered[lastModeIndex].mode === 'normal' && character === ':') {\n      var mediaFeatureValueStr = stringNormalized.substring(i + 1);\n      mediaFeatureValue = {\n        type: 'value',\n        before: /^(\\s*)/.exec(mediaFeatureValueStr)[1],\n        after: /(\\s*)$/.exec(mediaFeatureValueStr)[1],\n        value: mediaFeatureValueStr.trim()\n      };\n      // +1 for the colon\n      mediaFeatureValue.sourceIndex = mediaFeatureValue.before.length + i + 1 + indexLocal;\n      colon = {\n        type: 'colon',\n        sourceIndex: i + indexLocal,\n        after: mediaFeatureValue.before,\n        value: ':' };\n      break;\n    }\n\n    mediaFeature += character;\n  }\n\n  // Forming a media feature node\n  mediaFeature = {\n    type: 'media-feature',\n    before: /^(\\s*)/.exec(mediaFeature)[1],\n    after: /(\\s*)$/.exec(mediaFeature)[1],\n    value: mediaFeature.trim()\n  };\n  mediaFeature.sourceIndex = mediaFeature.before.length + indexLocal;\n  result.push(mediaFeature);\n\n  if (colon !== null) {\n    colon.before = mediaFeature.after;\n    result.push(colon);\n  }\n\n  if (mediaFeatureValue !== null) {\n    result.push(mediaFeatureValue);\n  }\n\n  return result;\n}\n\n/**\r\n * Parses a media query, e.g. `screen and (color)`, `only tv`\r\n *\r\n * @param {string} string - the source media query string\r\n * @param {Number} index - the index of `string` in the overall input\r\n *\r\n * @return {Array} an array of Nodes and Containers\r\n */\n\nfunction parseMediaQuery(string) {\n  var index = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n\n  var result = [];\n\n  // How many timies the parser entered parens/curly braces\n  var localLevel = 0;\n  // Has any keyword, media type, media feature expression or interpolation\n  // ('element' hereafter) started\n  var insideSomeValue = false;\n  var node = void 0;\n\n  function resetNode() {\n    return {\n      before: '',\n      after: '',\n      value: ''\n    };\n  }\n\n  node = resetNode();\n\n  for (var i = 0; i < string.length; i++) {\n    var character = string[i];\n    // If not yet entered any element\n    if (!insideSomeValue) {\n      if (character.search(/\\s/) !== -1) {\n        // A whitespace\n        // Don't form 'after' yet; will do it later\n        node.before += character;\n      } else {\n        // Not a whitespace - entering an element\n        // Expression start\n        if (character === '(') {\n          node.type = 'media-feature-expression';\n          localLevel++;\n        }\n        node.value = character;\n        node.sourceIndex = index + i;\n        insideSomeValue = true;\n      }\n    } else {\n      // Already in the middle of some alement\n      node.value += character;\n\n      // Here parens just increase localLevel and don't trigger a start of\n      // a media feature expression (since they can't be nested)\n      // Interpolation start\n      if (character === '{' || character === '(') {\n        localLevel++;\n      }\n      // Interpolation/function call/media feature expression end\n      if (character === ')' || character === '}') {\n        localLevel--;\n      }\n    }\n\n    // If exited all parens/curlies and the next symbol\n    if (insideSomeValue && localLevel === 0 && (character === ')' || i === string.length - 1 || string[i + 1].search(/\\s/) !== -1)) {\n      if (['not', 'only', 'and'].indexOf(node.value) !== -1) {\n        node.type = 'keyword';\n      }\n      // if it's an expression, parse its contents\n      if (node.type === 'media-feature-expression') {\n        node.nodes = parseMediaFeature(node.value, node.sourceIndex);\n      }\n      result.push(Array.isArray(node.nodes) ? new _Container2.default(node) : new _Node2.default(node));\n      node = resetNode();\n      insideSomeValue = false;\n    }\n  }\n\n  // Now process the result array - to specify undefined types of the nodes\n  // and specify the `after` prop\n  for (var _i = 0; _i < result.length; _i++) {\n    node = result[_i];\n    if (_i > 0) {\n      result[_i - 1].after = node.before;\n    }\n\n    // Node types. Might not be set because contains interpolation/function\n    // calls or fully consists of them\n    if (node.type === undefined) {\n      if (_i > 0) {\n        // only `and` can follow an expression\n        if (result[_i - 1].type === 'media-feature-expression') {\n          node.type = 'keyword';\n          continue;\n        }\n        // Anything after 'only|not' is a media type\n        if (result[_i - 1].value === 'not' || result[_i - 1].value === 'only') {\n          node.type = 'media-type';\n          continue;\n        }\n        // Anything after 'and' is an expression\n        if (result[_i - 1].value === 'and') {\n          node.type = 'media-feature-expression';\n          continue;\n        }\n\n        if (result[_i - 1].type === 'media-type') {\n          // if it is the last element - it might be an expression\n          // or 'and' depending on what is after it\n          if (!result[_i + 1]) {\n            node.type = 'media-feature-expression';\n          } else {\n            node.type = result[_i + 1].type === 'media-feature-expression' ? 'keyword' : 'media-feature-expression';\n          }\n        }\n      }\n\n      if (_i === 0) {\n        // `screen`, `fn( ... )`, `#{ ... }`. Not an expression, since then\n        // its type would have been set by now\n        if (!result[_i + 1]) {\n          node.type = 'media-type';\n          continue;\n        }\n\n        // `screen and` or `#{...} (max-width: 10px)`\n        if (result[_i + 1] && (result[_i + 1].type === 'media-feature-expression' || result[_i + 1].type === 'keyword')) {\n          node.type = 'media-type';\n          continue;\n        }\n        if (result[_i + 2]) {\n          // `screen and (color) ...`\n          if (result[_i + 2].type === 'media-feature-expression') {\n            node.type = 'media-type';\n            result[_i + 1].type = 'keyword';\n            continue;\n          }\n          // `only screen and ...`\n          if (result[_i + 2].type === 'keyword') {\n            node.type = 'keyword';\n            result[_i + 1].type = 'media-type';\n            continue;\n          }\n        }\n        if (result[_i + 3]) {\n          // `screen and (color) ...`\n          if (result[_i + 3].type === 'media-feature-expression') {\n            node.type = 'keyword';\n            result[_i + 1].type = 'media-type';\n            result[_i + 2].type = 'keyword';\n            continue;\n          }\n        }\n      }\n    }\n  }\n  return result;\n}\n\n/**\r\n * Parses a media query list. Takes a possible `url()` at the start into\r\n * account, and divides the list into media queries that are parsed separately\r\n *\r\n * @param {string} string - the source media query list string\r\n *\r\n * @return {Array} an array of Nodes/Containers\r\n */\n\nfunction parseMediaList(string) {\n  var result = [];\n  var interimIndex = 0;\n  var levelLocal = 0;\n\n  // Check for a `url(...)` part (if it is contents of an @import rule)\n  var doesHaveUrl = /^(\\s*)url\\s*\\(/.exec(string);\n  if (doesHaveUrl !== null) {\n    var i = doesHaveUrl[0].length;\n    var parenthesesLv = 1;\n    while (parenthesesLv > 0) {\n      var character = string[i];\n      if (character === '(') {\n        parenthesesLv++;\n      }\n      if (character === ')') {\n        parenthesesLv--;\n      }\n      i++;\n    }\n    result.unshift(new _Node2.default({\n      type: 'url',\n      value: string.substring(0, i).trim(),\n      sourceIndex: doesHaveUrl[1].length,\n      before: doesHaveUrl[1],\n      after: /^(\\s*)/.exec(string.substring(i))[1]\n    }));\n    interimIndex = i;\n  }\n\n  // Start processing the media query list\n  for (var _i2 = interimIndex; _i2 < string.length; _i2++) {\n    var _character = string[_i2];\n\n    // Dividing the media query list into comma-separated media queries\n    // Only count commas that are outside of any parens\n    // (i.e., not part of function call params list, etc.)\n    if (_character === '(') {\n      levelLocal++;\n    }\n    if (_character === ')') {\n      levelLocal--;\n    }\n    if (levelLocal === 0 && _character === ',') {\n      var _mediaQueryString = string.substring(interimIndex, _i2);\n      var _spaceBefore = /^(\\s*)/.exec(_mediaQueryString)[1];\n      result.push(new _Container2.default({\n        type: 'media-query',\n        value: _mediaQueryString.trim(),\n        sourceIndex: interimIndex + _spaceBefore.length,\n        nodes: parseMediaQuery(_mediaQueryString, interimIndex),\n        before: _spaceBefore,\n        after: /(\\s*)$/.exec(_mediaQueryString)[1]\n      }));\n      interimIndex = _i2 + 1;\n    }\n  }\n\n  var mediaQueryString = string.substring(interimIndex);\n  var spaceBefore = /^(\\s*)/.exec(mediaQueryString)[1];\n  result.push(new _Container2.default({\n    type: 'media-query',\n    value: mediaQueryString.trim(),\n    sourceIndex: interimIndex + spaceBefore.length,\n    nodes: parseMediaQuery(mediaQueryString, interimIndex),\n    before: spaceBefore,\n    after: /(\\s*)$/.exec(mediaQueryString)[1]\n  }));\n\n  return result;\n}\n\n/***/ }),\n/* 125 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _container = __webpack_require__(12);\n\nvar _container2 = _interopRequireDefault(_container);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar NestedDeclaration = function (_Container) {\n    _inherits(NestedDeclaration, _Container);\n\n    function NestedDeclaration(defaults) {\n        _classCallCheck(this, NestedDeclaration);\n\n        var _this = _possibleConstructorReturn(this, _Container.call(this, defaults));\n\n        _this.type = 'decl';\n        _this.isNested = true;\n        if (!_this.nodes) _this.nodes = [];\n        return _this;\n    }\n\n    return NestedDeclaration;\n}(_container2.default);\n\nexports.default = NestedDeclaration;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 126 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = scssParse;\n\nvar _input = __webpack_require__(25);\n\nvar _input2 = _interopRequireDefault(_input);\n\nvar _scssParser = __webpack_require__(127);\n\nvar _scssParser2 = _interopRequireDefault(_scssParser);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction scssParse(scss, opts) {\n    var input = new _input2.default(scss, opts);\n\n    var parser = new _scssParser2.default(input);\n    parser.parse();\n\n    return parser.root;\n}\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 127 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _comment = __webpack_require__(24);\n\nvar _comment2 = _interopRequireDefault(_comment);\n\nvar _parser = __webpack_require__(74);\n\nvar _parser2 = _interopRequireDefault(_parser);\n\nvar _nestedDeclaration = __webpack_require__(125);\n\nvar _nestedDeclaration2 = _interopRequireDefault(_nestedDeclaration);\n\nvar _scssTokenize = __webpack_require__(130);\n\nvar _scssTokenize2 = _interopRequireDefault(_scssTokenize);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ScssParser = function (_Parser) {\n    _inherits(ScssParser, _Parser);\n\n    function ScssParser() {\n        _classCallCheck(this, ScssParser);\n\n        return _possibleConstructorReturn(this, _Parser.apply(this, arguments));\n    }\n\n    ScssParser.prototype.createTokenizer = function createTokenizer() {\n        this.tokenizer = (0, _scssTokenize2.default)(this.input);\n    };\n\n    ScssParser.prototype.rule = function rule(tokens) {\n        var withColon = false;\n        var brackets = 0;\n        var value = '';\n        for (var _iterator = tokens, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n            var _ref;\n\n            if (_isArray) {\n                if (_i >= _iterator.length) break;\n                _ref = _iterator[_i++];\n            } else {\n                _i = _iterator.next();\n                if (_i.done) break;\n                _ref = _i.value;\n            }\n\n            var i = _ref;\n\n            if (withColon) {\n                if (i[0] !== 'comment' && i[0] !== '{') {\n                    value += i[1];\n                }\n            } else if (i[0] === 'space' && i[1].indexOf('\\n') !== -1) {\n                break;\n            } else if (i[0] === '(') {\n                brackets += 1;\n            } else if (i[0] === ')') {\n                brackets -= 1;\n            } else if (brackets === 0 && i[0] === ':') {\n                withColon = true;\n            }\n        }\n\n        if (!withColon || value.trim() === '' || /^[a-zA-Z-:#]/.test(value)) {\n            _Parser.prototype.rule.call(this, tokens);\n        } else {\n\n            tokens.pop();\n            var node = new _nestedDeclaration2.default();\n            this.init(node);\n\n            var last = tokens[tokens.length - 1];\n            if (last[4]) {\n                node.source.end = { line: last[4], column: last[5] };\n            } else {\n                node.source.end = { line: last[2], column: last[3] };\n            }\n\n            while (tokens[0][0] !== 'word') {\n                node.raws.before += tokens.shift()[1];\n            }\n            node.source.start = { line: tokens[0][2], column: tokens[0][3] };\n\n            node.prop = '';\n            while (tokens.length) {\n                var type = tokens[0][0];\n                if (type === ':' || type === 'space' || type === 'comment') {\n                    break;\n                }\n                node.prop += tokens.shift()[1];\n            }\n\n            node.raws.between = '';\n\n            var token = void 0;\n            while (tokens.length) {\n                token = tokens.shift();\n\n                if (token[0] === ':') {\n                    node.raws.between += token[1];\n                    break;\n                } else {\n                    node.raws.between += token[1];\n                }\n            }\n\n            if (node.prop[0] === '_' || node.prop[0] === '*') {\n                node.raws.before += node.prop[0];\n                node.prop = node.prop.slice(1);\n            }\n            node.raws.between += this.spacesAndCommentsFromStart(tokens);\n            this.precheckMissedSemicolon(tokens);\n\n            for (var _i2 = tokens.length - 1; _i2 > 0; _i2--) {\n                token = tokens[_i2];\n                if (token[1] === '!important') {\n                    node.important = true;\n                    var string = this.stringFrom(tokens, _i2);\n                    string = this.spacesFromEnd(tokens) + string;\n                    if (string !== ' !important') {\n                        node.raws.important = string;\n                    }\n                    break;\n                } else if (token[1] === 'important') {\n                    var cache = tokens.slice(0);\n                    var str = '';\n                    for (var j = _i2; j > 0; j--) {\n                        var _type = cache[j][0];\n                        if (str.trim().indexOf('!') === 0 && _type !== 'space') {\n                            break;\n                        }\n                        str = cache.pop()[1] + str;\n                    }\n                    if (str.trim().indexOf('!') === 0) {\n                        node.important = true;\n                        node.raws.important = str;\n                        tokens = cache;\n                    }\n                }\n\n                if (token[0] !== 'space' && token[0] !== 'comment') {\n                    break;\n                }\n            }\n\n            this.raw(node, 'value', tokens);\n\n            if (node.value.indexOf(':') !== -1) {\n                this.checkMissedSemicolon(tokens);\n            }\n\n            this.current = node;\n        }\n    };\n\n    ScssParser.prototype.comment = function comment(token) {\n        if (token[6] === 'inline') {\n            var node = new _comment2.default();\n            this.init(node, token[2], token[3]);\n            node.raws.inline = true;\n            node.source.end = { line: token[4], column: token[5] };\n\n            var text = token[1].slice(2);\n            if (/^\\s*$/.test(text)) {\n                node.text = '';\n                node.raws.left = text;\n                node.raws.right = '';\n            } else {\n                var match = text.match(/^(\\s*)([^]*[^\\s])(\\s*)$/);\n                var fixed = match[2].replace(/(\\*\\/|\\/\\*)/g, '*//*');\n                node.text = fixed;\n                node.raws.left = match[1];\n                node.raws.right = match[3];\n                node.raws.text = match[2];\n            }\n        } else {\n            _Parser.prototype.comment.call(this, token);\n        }\n    };\n\n    return ScssParser;\n}(_parser2.default);\n\nexports.default = ScssParser;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 128 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _stringifier = __webpack_require__(28);\n\nvar _stringifier2 = _interopRequireDefault(_stringifier);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ScssStringifier = function (_Stringifier) {\n    _inherits(ScssStringifier, _Stringifier);\n\n    function ScssStringifier() {\n        _classCallCheck(this, ScssStringifier);\n\n        return _possibleConstructorReturn(this, _Stringifier.apply(this, arguments));\n    }\n\n    ScssStringifier.prototype.comment = function comment(node) {\n        var left = this.raw(node, 'left', 'commentLeft');\n        var right = this.raw(node, 'right', 'commentRight');\n\n        if (node.raws.inline) {\n            var text = node.raws.text || node.text;\n            this.builder('//' + left + text + right, node);\n        } else {\n            this.builder('/*' + left + node.text + right + '*/', node);\n        }\n    };\n\n    ScssStringifier.prototype.decl = function decl(node, semicolon) {\n        if (!node.isNested) {\n            _Stringifier.prototype.decl.call(this, node, semicolon);\n        } else {\n\n            var between = this.raw(node, 'between', 'colon');\n            var string = node.prop + between + this.rawValue(node, 'value');\n            if (node.important) {\n                string += node.raws.important || ' !important';\n            }\n\n            this.builder(string + '{', node, 'start');\n\n            var after = void 0;\n            if (node.nodes && node.nodes.length) {\n                this.body(node);\n                after = this.raw(node, 'after');\n            } else {\n                after = this.raw(node, 'after', 'emptyBody');\n            }\n            if (after) this.builder(after);\n            this.builder('}', node, 'end');\n        }\n    };\n\n    return ScssStringifier;\n}(_stringifier2.default);\n\nexports.default = ScssStringifier;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 129 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = scssStringify;\n\nvar _scssStringifier = __webpack_require__(128);\n\nvar _scssStringifier2 = _interopRequireDefault(_scssStringifier);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction scssStringify(node, builder) {\n    var str = new _scssStringifier2.default(builder);\n    str.stringify(node);\n}\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 130 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = scssTokenize;\nvar SINGLE_QUOTE = 39;\nvar DOUBLE_QUOTE = 34;\nvar BACKSLASH = 92;\nvar SLASH = 47;\nvar NEWLINE = 10;\nvar SPACE = 32;\nvar FEED = 12;\nvar TAB = 9;\nvar CR = 13;\nvar OPEN_SQUARE = 91;\nvar CLOSE_SQUARE = 93;\nvar OPEN_PARENTHESES = 40;\nvar CLOSE_PARENTHESES = 41;\nvar OPEN_CURLY = 123;\nvar CLOSE_CURLY = 125;\nvar SEMICOLON = 59;\nvar ASTERISK = 42;\nvar COLON = 58;\nvar AT = 64;\n\n// SCSS PATCH {\nvar COMMA = 44;\nvar HASH = 35;\n// } SCSS PATCH\n\nvar RE_AT_END = /[ \\n\\t\\r\\f\\{\\(\\)'\"\\\\;/\\[\\]#]/g;\nvar RE_WORD_END = /[ \\n\\t\\r\\f\\(\\)\\{\\}:;@!'\"\\\\\\]\\[#]|\\/(?=\\*)/g;\nvar RE_BAD_BRACKET = /.[\\\\\\/\\(\"'\\n]/;\n\nvar RE_NEW_LINE = /[\\r\\f\\n]/g; // SCSS PATCH\n\n// SCSS PATCH function name was changed\nfunction scssTokenize(input) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    var css = input.css.valueOf();\n    var ignore = options.ignoreErrors;\n\n    var code = void 0,\n        next = void 0,\n        quote = void 0,\n        lines = void 0,\n        last = void 0,\n        content = void 0,\n        escape = void 0,\n        nextLine = void 0,\n        nextOffset = void 0,\n        escaped = void 0,\n        escapePos = void 0,\n        prev = void 0,\n        n = void 0,\n        currentToken = void 0;\n\n    var brackets = void 0; // SCSS PATCH\n\n    var length = css.length;\n    var offset = -1;\n    var line = 1;\n    var pos = 0;\n    var buffer = [];\n    var returned = [];\n\n    function unclosed(what) {\n        throw input.error('Unclosed ' + what, line, pos - offset);\n    }\n\n    function endOfFile() {\n        return returned.length === 0 && pos >= length;\n    }\n\n    function nextToken() {\n        if (returned.length) return returned.pop();\n        if (pos >= length) return;\n\n        code = css.charCodeAt(pos);\n        if (code === NEWLINE || code === FEED || code === CR && css.charCodeAt(pos + 1) !== NEWLINE) {\n            offset = pos;\n            line += 1;\n        }\n\n        switch (code) {\n            case NEWLINE:\n            case SPACE:\n            case TAB:\n            case CR:\n            case FEED:\n                next = pos;\n                do {\n                    next += 1;\n                    code = css.charCodeAt(next);\n                    if (code === NEWLINE) {\n                        offset = next;\n                        line += 1;\n                    }\n                } while (code === SPACE || code === NEWLINE || code === TAB || code === CR || code === FEED);\n\n                currentToken = ['space', css.slice(pos, next)];\n                pos = next - 1;\n                break;\n\n            case OPEN_SQUARE:\n                currentToken = ['[', '[', line, pos - offset];\n                break;\n\n            case CLOSE_SQUARE:\n                currentToken = [']', ']', line, pos - offset];\n                break;\n\n            case OPEN_CURLY:\n                currentToken = ['{', '{', line, pos - offset];\n                break;\n\n            case CLOSE_CURLY:\n                currentToken = ['}', '}', line, pos - offset];\n                break;\n\n            // SCSS PATCH {\n            case COMMA:\n                currentToken = ['word', ',', line, pos - offset, line, pos - offset + 1];\n                break;\n            // } SCSS PATCH\n\n            case COLON:\n                currentToken = [':', ':', line, pos - offset];\n                break;\n\n            case SEMICOLON:\n                currentToken = [';', ';', line, pos - offset];\n                break;\n\n            case OPEN_PARENTHESES:\n                prev = buffer.length ? buffer.pop()[1] : '';\n                n = css.charCodeAt(pos + 1);\n                if (prev === 'url' && n !== SINGLE_QUOTE && n !== DOUBLE_QUOTE && n !== SPACE && n !== NEWLINE && n !== TAB && n !== FEED && n !== CR) {\n                    // SCSS PATCH {\n                    brackets = 1;\n                    escaped = false;\n                    next = pos + 1;\n                    while (next <= css.length - 1) {\n                        n = css.charCodeAt(next);\n                        if (n === BACKSLASH) {\n                            escaped = !escaped;\n                        } else if (n === OPEN_PARENTHESES) {\n                            brackets += 1;\n                        } else if (n === CLOSE_PARENTHESES) {\n                            brackets -= 1;\n                            if (brackets === 0) break;\n                        }\n                        next += 1;\n                    }\n                    // } SCSS PATCH\n\n                    currentToken = ['brackets', css.slice(pos, next + 1), line, pos - offset, line, next - offset];\n\n                    pos = next;\n                } else {\n                    next = css.indexOf(')', pos + 1);\n                    content = css.slice(pos, next + 1);\n\n                    if (next === -1 || RE_BAD_BRACKET.test(content)) {\n                        currentToken = ['(', '(', line, pos - offset];\n                    } else {\n                        currentToken = ['brackets', content, line, pos - offset, line, next - offset];\n                        pos = next;\n                    }\n                }\n\n                break;\n\n            case CLOSE_PARENTHESES:\n                currentToken = [')', ')', line, pos - offset];\n                break;\n\n            case SINGLE_QUOTE:\n            case DOUBLE_QUOTE:\n                quote = code === SINGLE_QUOTE ? '\\'' : '\"';\n                next = pos;\n                do {\n                    escaped = false;\n                    next = css.indexOf(quote, next + 1);\n                    if (next === -1) {\n                        if (ignore) {\n                            next = pos + 1;\n                            break;\n                        } else {\n                            unclosed('string');\n                        }\n                    }\n                    escapePos = next;\n                    while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n                        escapePos -= 1;\n                        escaped = !escaped;\n                    }\n                } while (escaped);\n\n                content = css.slice(pos, next + 1);\n                lines = content.split('\\n');\n                last = lines.length - 1;\n\n                if (last > 0) {\n                    nextLine = line + last;\n                    nextOffset = next - lines[last].length;\n                } else {\n                    nextLine = line;\n                    nextOffset = offset;\n                }\n\n                currentToken = ['string', css.slice(pos, next + 1), line, pos - offset, nextLine, next - nextOffset];\n\n                offset = nextOffset;\n                line = nextLine;\n                pos = next;\n                break;\n\n            case AT:\n                RE_AT_END.lastIndex = pos + 1;\n                RE_AT_END.test(css);\n                if (RE_AT_END.lastIndex === 0) {\n                    next = css.length - 1;\n                } else {\n                    next = RE_AT_END.lastIndex - 2;\n                }\n\n                currentToken = ['at-word', css.slice(pos, next + 1), line, pos - offset, line, next - offset];\n\n                pos = next;\n                break;\n\n            case BACKSLASH:\n                next = pos;\n                escape = true;\n                while (css.charCodeAt(next + 1) === BACKSLASH) {\n                    next += 1;\n                    escape = !escape;\n                }\n                code = css.charCodeAt(next + 1);\n                if (escape && code !== SLASH && code !== SPACE && code !== NEWLINE && code !== TAB && code !== CR && code !== FEED) {\n                    next += 1;\n                }\n\n                currentToken = ['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset];\n\n                pos = next;\n                break;\n\n            default:\n                // SCSS PATCH {\n                n = css.charCodeAt(pos + 1);\n\n                if (code === HASH && n === OPEN_CURLY) {\n                    var deep = 1;\n                    next = pos;\n                    while (deep > 0) {\n                        next += 1;\n                        if (css.length <= next) unclosed('interpolation');\n\n                        code = css.charCodeAt(next);\n                        n = css.charCodeAt(next + 1);\n\n                        if (code === CLOSE_CURLY) {\n                            deep -= 1;\n                        } else if (code === HASH && n === OPEN_CURLY) {\n                            deep += 1;\n                        }\n                    }\n\n                    content = css.slice(pos, next + 1);\n                    lines = content.split('\\n');\n                    last = lines.length - 1;\n\n                    if (last > 0) {\n                        nextLine = line + last;\n                        nextOffset = next - lines[last].length;\n                    } else {\n                        nextLine = line;\n                        nextOffset = offset;\n                    }\n\n                    currentToken = ['word', content, line, pos - offset, nextLine, next - nextOffset];\n\n                    offset = nextOffset;\n                    line = nextLine;\n                    pos = next;\n                } else if (code === SLASH && n === ASTERISK) {\n                    // } SCSS PATCH\n                    next = css.indexOf('*/', pos + 2) + 1;\n                    if (next === 0) {\n                        if (ignore) {\n                            next = css.length;\n                        } else {\n                            unclosed('comment');\n                        }\n                    }\n\n                    content = css.slice(pos, next + 1);\n                    lines = content.split('\\n');\n                    last = lines.length - 1;\n\n                    if (last > 0) {\n                        nextLine = line + last;\n                        nextOffset = next - lines[last].length;\n                    } else {\n                        nextLine = line;\n                        nextOffset = offset;\n                    }\n\n                    currentToken = ['comment', content, line, pos - offset, nextLine, next - nextOffset];\n\n                    offset = nextOffset;\n                    line = nextLine;\n                    pos = next;\n\n                    // SCSS PATCH {\n                } else if (code === SLASH && n === SLASH) {\n                    RE_NEW_LINE.lastIndex = pos + 1;\n                    RE_NEW_LINE.test(css);\n                    if (RE_NEW_LINE.lastIndex === 0) {\n                        next = css.length - 1;\n                    } else {\n                        next = RE_NEW_LINE.lastIndex - 2;\n                    }\n\n                    content = css.slice(pos, next + 1);\n\n                    currentToken = ['comment', content, line, pos - offset, line, next - offset, 'inline'];\n\n                    pos = next;\n                    // } SCSS PATCH\n                } else {\n                    RE_WORD_END.lastIndex = pos + 1;\n                    RE_WORD_END.test(css);\n                    if (RE_WORD_END.lastIndex === 0) {\n                        next = css.length - 1;\n                    } else {\n                        next = RE_WORD_END.lastIndex - 2;\n                    }\n\n                    currentToken = ['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset];\n\n                    buffer.push(currentToken);\n\n                    pos = next;\n                }\n\n                break;\n        }\n\n        pos++;\n        return currentToken;\n    }\n\n    function back(token) {\n        returned.push(token);\n    }\n\n    return {\n        back: back,\n        nextToken: nextToken,\n        endOfFile: endOfFile\n    };\n}\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 131 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; }; }();\n\nvar _flatten = __webpack_require__(32);\n\nvar _flatten2 = _interopRequireDefault(_flatten);\n\nvar _indexesOf = __webpack_require__(34);\n\nvar _indexesOf2 = _interopRequireDefault(_indexesOf);\n\nvar _uniq = __webpack_require__(83);\n\nvar _uniq2 = _interopRequireDefault(_uniq);\n\nvar _root = __webpack_require__(54);\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _selector = __webpack_require__(55);\n\nvar _selector2 = _interopRequireDefault(_selector);\n\nvar _className = __webpack_require__(48);\n\nvar _className2 = _interopRequireDefault(_className);\n\nvar _comment = __webpack_require__(50);\n\nvar _comment2 = _interopRequireDefault(_comment);\n\nvar _id = __webpack_require__(51);\n\nvar _id2 = _interopRequireDefault(_id);\n\nvar _tag = __webpack_require__(57);\n\nvar _tag2 = _interopRequireDefault(_tag);\n\nvar _string = __webpack_require__(56);\n\nvar _string2 = _interopRequireDefault(_string);\n\nvar _pseudo = __webpack_require__(53);\n\nvar _pseudo2 = _interopRequireDefault(_pseudo);\n\nvar _attribute = __webpack_require__(47);\n\nvar _attribute2 = _interopRequireDefault(_attribute);\n\nvar _universal = __webpack_require__(58);\n\nvar _universal2 = _interopRequireDefault(_universal);\n\nvar _combinator = __webpack_require__(49);\n\nvar _combinator2 = _interopRequireDefault(_combinator);\n\nvar _nesting = __webpack_require__(52);\n\nvar _nesting2 = _interopRequireDefault(_nesting);\n\nvar _sortAscending = __webpack_require__(133);\n\nvar _sortAscending2 = _interopRequireDefault(_sortAscending);\n\nvar _tokenize = __webpack_require__(134);\n\nvar _tokenize2 = _interopRequireDefault(_tokenize);\n\nvar _types = __webpack_require__(0);\n\nvar types = _interopRequireWildcard(_types);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Parser = function () {\n    function Parser(input) {\n        _classCallCheck(this, Parser);\n\n        this.input = input;\n        this.lossy = input.options.lossless === false;\n        this.position = 0;\n        this.root = new _root2.default();\n\n        var selectors = new _selector2.default();\n        this.root.append(selectors);\n\n        this.current = selectors;\n        if (this.lossy) {\n            this.tokens = (0, _tokenize2.default)({ safe: input.safe, css: input.css.trim() });\n        } else {\n            this.tokens = (0, _tokenize2.default)(input);\n        }\n\n        return this.loop();\n    }\n\n    Parser.prototype.attribute = function attribute() {\n        var str = '';\n        var attr = void 0;\n        var startingToken = this.currToken;\n        this.position++;\n        while (this.position < this.tokens.length && this.currToken[0] !== ']') {\n            str += this.tokens[this.position][1];\n            this.position++;\n        }\n        if (this.position === this.tokens.length && !~str.indexOf(']')) {\n            this.error('Expected a closing square bracket.');\n        }\n        var parts = str.split(/((?:[*~^$|]?=))([^]*)/);\n        var namespace = parts[0].split(/(\\|)/g);\n        var attributeProps = {\n            operator: parts[1],\n            value: parts[2],\n            source: {\n                start: {\n                    line: startingToken[2],\n                    column: startingToken[3]\n                },\n                end: {\n                    line: this.currToken[2],\n                    column: this.currToken[3]\n                }\n            },\n            sourceIndex: startingToken[4]\n        };\n        if (namespace.length > 1) {\n            if (namespace[0] === '') {\n                namespace[0] = true;\n            }\n            attributeProps.attribute = this.parseValue(namespace[2]);\n            attributeProps.namespace = this.parseNamespace(namespace[0]);\n        } else {\n            attributeProps.attribute = this.parseValue(parts[0]);\n        }\n        attr = new _attribute2.default(attributeProps);\n\n        if (parts[2]) {\n            var insensitive = parts[2].split(/(\\s+i\\s*?)$/);\n            var trimmedValue = insensitive[0].trim();\n            attr.value = this.lossy ? trimmedValue : insensitive[0];\n            if (insensitive[1]) {\n                attr.insensitive = true;\n                if (!this.lossy) {\n                    attr.raws.insensitive = insensitive[1];\n                }\n            }\n            attr.quoted = trimmedValue[0] === '\\'' || trimmedValue[0] === '\"';\n            attr.raws.unquoted = attr.quoted ? trimmedValue.slice(1, -1) : trimmedValue;\n        }\n        this.newNode(attr);\n        this.position++;\n    };\n\n    Parser.prototype.combinator = function combinator() {\n        if (this.currToken[1] === '|') {\n            return this.namespace();\n        }\n        var node = new _combinator2.default({\n            value: '',\n            source: {\n                start: {\n                    line: this.currToken[2],\n                    column: this.currToken[3]\n                },\n                end: {\n                    line: this.currToken[2],\n                    column: this.currToken[3]\n                }\n            },\n            sourceIndex: this.currToken[4]\n        });\n        while (this.position < this.tokens.length && this.currToken && (this.currToken[0] === 'space' || this.currToken[0] === 'combinator')) {\n            if (this.nextToken && this.nextToken[0] === 'combinator') {\n                node.spaces.before = this.parseSpace(this.currToken[1]);\n                node.source.start.line = this.nextToken[2];\n                node.source.start.column = this.nextToken[3];\n                node.source.end.column = this.nextToken[3];\n                node.source.end.line = this.nextToken[2];\n                node.sourceIndex = this.nextToken[4];\n            } else if (this.prevToken && this.prevToken[0] === 'combinator') {\n                node.spaces.after = this.parseSpace(this.currToken[1]);\n            } else if (this.currToken[0] === 'combinator') {\n                node.value = this.currToken[1];\n            } else if (this.currToken[0] === 'space') {\n                node.value = this.parseSpace(this.currToken[1], ' ');\n            }\n            this.position++;\n        }\n        return this.newNode(node);\n    };\n\n    Parser.prototype.comma = function comma() {\n        if (this.position === this.tokens.length - 1) {\n            this.root.trailingComma = true;\n            this.position++;\n            return;\n        }\n        var selectors = new _selector2.default();\n        this.current.parent.append(selectors);\n        this.current = selectors;\n        this.position++;\n    };\n\n    Parser.prototype.comment = function comment() {\n        var node = new _comment2.default({\n            value: this.currToken[1],\n            source: {\n                start: {\n                    line: this.currToken[2],\n                    column: this.currToken[3]\n                },\n                end: {\n                    line: this.currToken[4],\n                    column: this.currToken[5]\n                }\n            },\n            sourceIndex: this.currToken[6]\n        });\n        this.newNode(node);\n        this.position++;\n    };\n\n    Parser.prototype.error = function error(message) {\n        throw new this.input.error(message); // eslint-disable-line new-cap\n    };\n\n    Parser.prototype.missingBackslash = function missingBackslash() {\n        return this.error('Expected a backslash preceding the semicolon.');\n    };\n\n    Parser.prototype.missingParenthesis = function missingParenthesis() {\n        return this.error('Expected opening parenthesis.');\n    };\n\n    Parser.prototype.missingSquareBracket = function missingSquareBracket() {\n        return this.error('Expected opening square bracket.');\n    };\n\n    Parser.prototype.namespace = function namespace() {\n        var before = this.prevToken && this.prevToken[1] || true;\n        if (this.nextToken[0] === 'word') {\n            this.position++;\n            return this.word(before);\n        } else if (this.nextToken[0] === '*') {\n            this.position++;\n            return this.universal(before);\n        }\n    };\n\n    Parser.prototype.nesting = function nesting() {\n        this.newNode(new _nesting2.default({\n            value: this.currToken[1],\n            source: {\n                start: {\n                    line: this.currToken[2],\n                    column: this.currToken[3]\n                },\n                end: {\n                    line: this.currToken[2],\n                    column: this.currToken[3]\n                }\n            },\n            sourceIndex: this.currToken[4]\n        }));\n        this.position++;\n    };\n\n    Parser.prototype.parentheses = function parentheses() {\n        var last = this.current.last;\n        if (last && last.type === types.PSEUDO) {\n            var selector = new _selector2.default();\n            var cache = this.current;\n            last.append(selector);\n            this.current = selector;\n            var balanced = 1;\n            this.position++;\n            while (this.position < this.tokens.length && balanced) {\n                if (this.currToken[0] === '(') {\n                    balanced++;\n                }\n                if (this.currToken[0] === ')') {\n                    balanced--;\n                }\n                if (balanced) {\n                    this.parse();\n                } else {\n                    selector.parent.source.end.line = this.currToken[2];\n                    selector.parent.source.end.column = this.currToken[3];\n                    this.position++;\n                }\n            }\n            if (balanced) {\n                this.error('Expected closing parenthesis.');\n            }\n            this.current = cache;\n        } else {\n            var _balanced = 1;\n            this.position++;\n            last.value += '(';\n            while (this.position < this.tokens.length && _balanced) {\n                if (this.currToken[0] === '(') {\n                    _balanced++;\n                }\n                if (this.currToken[0] === ')') {\n                    _balanced--;\n                }\n                last.value += this.parseParenthesisToken(this.currToken);\n                this.position++;\n            }\n            if (_balanced) {\n                this.error('Expected closing parenthesis.');\n            }\n        }\n    };\n\n    Parser.prototype.pseudo = function pseudo() {\n        var _this = this;\n\n        var pseudoStr = '';\n        var startingToken = this.currToken;\n        while (this.currToken && this.currToken[0] === ':') {\n            pseudoStr += this.currToken[1];\n            this.position++;\n        }\n        if (!this.currToken) {\n            return this.error('Expected pseudo-class or pseudo-element');\n        }\n        if (this.currToken[0] === 'word') {\n            var pseudo = void 0;\n            this.splitWord(false, function (first, length) {\n                pseudoStr += first;\n                pseudo = new _pseudo2.default({\n                    value: pseudoStr,\n                    source: {\n                        start: {\n                            line: startingToken[2],\n                            column: startingToken[3]\n                        },\n                        end: {\n                            line: _this.currToken[4],\n                            column: _this.currToken[5]\n                        }\n                    },\n                    sourceIndex: startingToken[4]\n                });\n                _this.newNode(pseudo);\n                if (length > 1 && _this.nextToken && _this.nextToken[0] === '(') {\n                    _this.error('Misplaced parenthesis.');\n                }\n            });\n        } else {\n            this.error('Unexpected \"' + this.currToken[0] + '\" found.');\n        }\n    };\n\n    Parser.prototype.space = function space() {\n        var token = this.currToken;\n        // Handle space before and after the selector\n        if (this.position === 0 || this.prevToken[0] === ',' || this.prevToken[0] === '(') {\n            this.spaces = this.parseSpace(token[1]);\n            this.position++;\n        } else if (this.position === this.tokens.length - 1 || this.nextToken[0] === ',' || this.nextToken[0] === ')') {\n            this.current.last.spaces.after = this.parseSpace(token[1]);\n            this.position++;\n        } else {\n            this.combinator();\n        }\n    };\n\n    Parser.prototype.string = function string() {\n        var token = this.currToken;\n        this.newNode(new _string2.default({\n            value: this.currToken[1],\n            source: {\n                start: {\n                    line: token[2],\n                    column: token[3]\n                },\n                end: {\n                    line: token[4],\n                    column: token[5]\n                }\n            },\n            sourceIndex: token[6]\n        }));\n        this.position++;\n    };\n\n    Parser.prototype.universal = function universal(namespace) {\n        var nextToken = this.nextToken;\n        if (nextToken && nextToken[1] === '|') {\n            this.position++;\n            return this.namespace();\n        }\n        this.newNode(new _universal2.default({\n            value: this.currToken[1],\n            source: {\n                start: {\n                    line: this.currToken[2],\n                    column: this.currToken[3]\n                },\n                end: {\n                    line: this.currToken[2],\n                    column: this.currToken[3]\n                }\n            },\n            sourceIndex: this.currToken[4]\n        }), namespace);\n        this.position++;\n    };\n\n    Parser.prototype.splitWord = function splitWord(namespace, firstCallback) {\n        var _this2 = this;\n\n        var nextToken = this.nextToken;\n        var word = this.currToken[1];\n        while (nextToken && nextToken[0] === 'word') {\n            this.position++;\n            var current = this.currToken[1];\n            word += current;\n            if (current.lastIndexOf('\\\\') === current.length - 1) {\n                var next = this.nextToken;\n                if (next && next[0] === 'space') {\n                    word += this.parseSpace(next[1], ' ');\n                    this.position++;\n                }\n            }\n            nextToken = this.nextToken;\n        }\n        var hasClass = (0, _indexesOf2.default)(word, '.');\n        var hasId = (0, _indexesOf2.default)(word, '#');\n        // Eliminate Sass interpolations from the list of id indexes\n        var interpolations = (0, _indexesOf2.default)(word, '#{');\n        if (interpolations.length) {\n            hasId = hasId.filter(function (hashIndex) {\n                return !~interpolations.indexOf(hashIndex);\n            });\n        }\n        var indices = (0, _sortAscending2.default)((0, _uniq2.default)((0, _flatten2.default)([[0], hasClass, hasId])));\n        indices.forEach(function (ind, i) {\n            var index = indices[i + 1] || word.length;\n            var value = word.slice(ind, index);\n            if (i === 0 && firstCallback) {\n                return firstCallback.call(_this2, value, indices.length);\n            }\n            var node = void 0;\n            if (~hasClass.indexOf(ind)) {\n                node = new _className2.default({\n                    value: value.slice(1),\n                    source: {\n                        start: {\n                            line: _this2.currToken[2],\n                            column: _this2.currToken[3] + ind\n                        },\n                        end: {\n                            line: _this2.currToken[4],\n                            column: _this2.currToken[3] + (index - 1)\n                        }\n                    },\n                    sourceIndex: _this2.currToken[6] + indices[i]\n                });\n            } else if (~hasId.indexOf(ind)) {\n                node = new _id2.default({\n                    value: value.slice(1),\n                    source: {\n                        start: {\n                            line: _this2.currToken[2],\n                            column: _this2.currToken[3] + ind\n                        },\n                        end: {\n                            line: _this2.currToken[4],\n                            column: _this2.currToken[3] + (index - 1)\n                        }\n                    },\n                    sourceIndex: _this2.currToken[6] + indices[i]\n                });\n            } else {\n                node = new _tag2.default({\n                    value: value,\n                    source: {\n                        start: {\n                            line: _this2.currToken[2],\n                            column: _this2.currToken[3] + ind\n                        },\n                        end: {\n                            line: _this2.currToken[4],\n                            column: _this2.currToken[3] + (index - 1)\n                        }\n                    },\n                    sourceIndex: _this2.currToken[6] + indices[i]\n                });\n            }\n            _this2.newNode(node, namespace);\n        });\n        this.position++;\n    };\n\n    Parser.prototype.word = function word(namespace) {\n        var nextToken = this.nextToken;\n        if (nextToken && nextToken[1] === '|') {\n            this.position++;\n            return this.namespace();\n        }\n        return this.splitWord(namespace);\n    };\n\n    Parser.prototype.loop = function loop() {\n        while (this.position < this.tokens.length) {\n            this.parse(true);\n        }\n        return this.root;\n    };\n\n    Parser.prototype.parse = function parse(throwOnParenthesis) {\n        switch (this.currToken[0]) {\n            case 'space':\n                this.space();\n                break;\n            case 'comment':\n                this.comment();\n                break;\n            case '(':\n                this.parentheses();\n                break;\n            case ')':\n                if (throwOnParenthesis) {\n                    this.missingParenthesis();\n                }\n                break;\n            case '[':\n                this.attribute();\n                break;\n            case ']':\n                this.missingSquareBracket();\n                break;\n            case 'at-word':\n            case 'word':\n                this.word();\n                break;\n            case ':':\n                this.pseudo();\n                break;\n            case ';':\n                this.missingBackslash();\n                break;\n            case ',':\n                this.comma();\n                break;\n            case '*':\n                this.universal();\n                break;\n            case '&':\n                this.nesting();\n                break;\n            case 'combinator':\n                this.combinator();\n                break;\n            case 'string':\n                this.string();\n                break;\n        }\n    };\n\n    /**\n     * Helpers\n     */\n\n    Parser.prototype.parseNamespace = function parseNamespace(namespace) {\n        if (this.lossy && typeof namespace === 'string') {\n            var trimmed = namespace.trim();\n            if (!trimmed.length) {\n                return true;\n            }\n\n            return trimmed;\n        }\n\n        return namespace;\n    };\n\n    Parser.prototype.parseSpace = function parseSpace(space, replacement) {\n        return this.lossy ? replacement || '' : space;\n    };\n\n    Parser.prototype.parseValue = function parseValue(value) {\n        return this.lossy && value && typeof value === 'string' ? value.trim() : value;\n    };\n\n    Parser.prototype.parseParenthesisToken = function parseParenthesisToken(token) {\n        if (!this.lossy) {\n            return token[1];\n        }\n\n        if (token[0] === 'space') {\n            return this.parseSpace(token[1], ' ');\n        }\n\n        return this.parseValue(token[1]);\n    };\n\n    Parser.prototype.newNode = function newNode(node, namespace) {\n        if (namespace) {\n            node.namespace = this.parseNamespace(namespace);\n        }\n        if (this.spaces) {\n            node.spaces.before = this.spaces;\n            this.spaces = '';\n        }\n        return this.current.append(node);\n    };\n\n    _createClass(Parser, [{\n        key: 'currToken',\n        get: function get() {\n            return this.tokens[this.position];\n        }\n    }, {\n        key: 'nextToken',\n        get: function get() {\n            return this.tokens[this.position + 1];\n        }\n    }, {\n        key: 'prevToken',\n        get: function get() {\n            return this.tokens[this.position - 1];\n        }\n    }]);\n\n    return Parser;\n}();\n\nexports.default = Parser;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 132 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; }; }();\n\nvar _parser = __webpack_require__(131);\n\nvar _parser2 = _interopRequireDefault(_parser);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Processor = function () {\n    function Processor(func) {\n        _classCallCheck(this, Processor);\n\n        this.func = func || function noop() {};\n        return this;\n    }\n\n    Processor.prototype.process = function process(selectors) {\n        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n        var input = new _parser2.default({\n            css: selectors,\n            error: function error(e) {\n                throw new Error(e);\n            },\n            options: options\n        });\n        this.res = input;\n        this.func(input);\n        return this;\n    };\n\n    _createClass(Processor, [{\n        key: 'result',\n        get: function get() {\n            return String(this.res);\n        }\n    }]);\n\n    return Processor;\n}();\n\nexports.default = Processor;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 133 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = sortAscending;\nfunction sortAscending(list) {\n    return list.sort(function (a, b) {\n        return a - b;\n    });\n}\nmodule.exports = exports[\"default\"];\n\n/***/ }),\n/* 134 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = tokenize;\nvar singleQuote = 39,\n    doubleQuote = 34,\n    backslash = 92,\n    slash = 47,\n    newline = 10,\n    space = 32,\n    feed = 12,\n    tab = 9,\n    cr = 13,\n    plus = 43,\n    gt = 62,\n    tilde = 126,\n    pipe = 124,\n    comma = 44,\n    openBracket = 40,\n    closeBracket = 41,\n    openSq = 91,\n    closeSq = 93,\n    semicolon = 59,\n    asterisk = 42,\n    colon = 58,\n    ampersand = 38,\n    at = 64,\n    atEnd = /[ \\n\\t\\r\\{\\(\\)'\"\\\\;/]/g,\n    wordEnd = /[ \\n\\t\\r\\(\\)\\*:;@!&'\"\\+\\|~>,\\[\\]\\\\]|\\/(?=\\*)/g;\n\nfunction tokenize(input) {\n    var tokens = [];\n    var css = input.css.valueOf();\n\n    var code = void 0,\n        next = void 0,\n        quote = void 0,\n        lines = void 0,\n        last = void 0,\n        content = void 0,\n        escape = void 0,\n        nextLine = void 0,\n        nextOffset = void 0,\n        escaped = void 0,\n        escapePos = void 0;\n\n    var length = css.length;\n    var offset = -1;\n    var line = 1;\n    var pos = 0;\n\n    var unclosed = function unclosed(what, end) {\n        if (input.safe) {\n            css += end;\n            next = css.length - 1;\n        } else {\n            throw input.error('Unclosed ' + what, line, pos - offset, pos);\n        }\n    };\n\n    while (pos < length) {\n        code = css.charCodeAt(pos);\n\n        if (code === newline) {\n            offset = pos;\n            line += 1;\n        }\n\n        switch (code) {\n            case newline:\n            case space:\n            case tab:\n            case cr:\n            case feed:\n                next = pos;\n                do {\n                    next += 1;\n                    code = css.charCodeAt(next);\n                    if (code === newline) {\n                        offset = next;\n                        line += 1;\n                    }\n                } while (code === space || code === newline || code === tab || code === cr || code === feed);\n\n                tokens.push(['space', css.slice(pos, next), line, pos - offset, pos]);\n                pos = next - 1;\n                break;\n\n            case plus:\n            case gt:\n            case tilde:\n            case pipe:\n                next = pos;\n                do {\n                    next += 1;\n                    code = css.charCodeAt(next);\n                } while (code === plus || code === gt || code === tilde || code === pipe);\n                tokens.push(['combinator', css.slice(pos, next), line, pos - offset, pos]);\n                pos = next - 1;\n                break;\n\n            case asterisk:\n                tokens.push(['*', '*', line, pos - offset, pos]);\n                break;\n\n            case ampersand:\n                tokens.push(['&', '&', line, pos - offset, pos]);\n                break;\n\n            case comma:\n                tokens.push([',', ',', line, pos - offset, pos]);\n                break;\n\n            case openSq:\n                tokens.push(['[', '[', line, pos - offset, pos]);\n                break;\n\n            case closeSq:\n                tokens.push([']', ']', line, pos - offset, pos]);\n                break;\n\n            case colon:\n                tokens.push([':', ':', line, pos - offset, pos]);\n                break;\n\n            case semicolon:\n                tokens.push([';', ';', line, pos - offset, pos]);\n                break;\n\n            case openBracket:\n                tokens.push(['(', '(', line, pos - offset, pos]);\n                break;\n\n            case closeBracket:\n                tokens.push([')', ')', line, pos - offset, pos]);\n                break;\n\n            case singleQuote:\n            case doubleQuote:\n                quote = code === singleQuote ? \"'\" : '\"';\n                next = pos;\n                do {\n                    escaped = false;\n                    next = css.indexOf(quote, next + 1);\n                    if (next === -1) {\n                        unclosed('quote', quote);\n                    }\n                    escapePos = next;\n                    while (css.charCodeAt(escapePos - 1) === backslash) {\n                        escapePos -= 1;\n                        escaped = !escaped;\n                    }\n                } while (escaped);\n\n                tokens.push(['string', css.slice(pos, next + 1), line, pos - offset, line, next - offset, pos]);\n                pos = next;\n                break;\n\n            case at:\n                atEnd.lastIndex = pos + 1;\n                atEnd.test(css);\n                if (atEnd.lastIndex === 0) {\n                    next = css.length - 1;\n                } else {\n                    next = atEnd.lastIndex - 2;\n                }\n                tokens.push(['at-word', css.slice(pos, next + 1), line, pos - offset, line, next - offset, pos]);\n                pos = next;\n                break;\n\n            case backslash:\n                next = pos;\n                escape = true;\n                while (css.charCodeAt(next + 1) === backslash) {\n                    next += 1;\n                    escape = !escape;\n                }\n                code = css.charCodeAt(next + 1);\n                if (escape && code !== slash && code !== space && code !== newline && code !== tab && code !== cr && code !== feed) {\n                    next += 1;\n                }\n                tokens.push(['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset, pos]);\n                pos = next;\n                break;\n\n            default:\n                if (code === slash && css.charCodeAt(pos + 1) === asterisk) {\n                    next = css.indexOf('*/', pos + 2) + 1;\n                    if (next === 0) {\n                        unclosed('comment', '*/');\n                    }\n\n                    content = css.slice(pos, next + 1);\n                    lines = content.split('\\n');\n                    last = lines.length - 1;\n\n                    if (last > 0) {\n                        nextLine = line + last;\n                        nextOffset = next - lines[last].length;\n                    } else {\n                        nextLine = line;\n                        nextOffset = offset;\n                    }\n\n                    tokens.push(['comment', content, line, pos - offset, nextLine, next - nextOffset, pos]);\n\n                    offset = nextOffset;\n                    line = nextLine;\n                    pos = next;\n                } else {\n                    wordEnd.lastIndex = pos + 1;\n                    wordEnd.test(css);\n                    if (wordEnd.lastIndex === 0) {\n                        next = css.length - 1;\n                    } else {\n                        next = wordEnd.lastIndex - 2;\n                    }\n\n                    tokens.push(['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset, pos]);\n                    pos = next;\n                }\n\n                break;\n        }\n\n        pos++;\n    }\n\n    return tokens;\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 135 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nclass ParserError extends Error {\n  constructor(message) {\n    super(message);\n\n    this.name = this.constructor.name;\n    this.message = message || 'An error ocurred while parsing.';\n\n    if (typeof Error.captureStackTrace === 'function') {\n      Error.captureStackTrace(this, this.constructor);\n    }\n    else {\n      this.stack = (new Error(message)).stack;\n    }\n  }\n}\n\nmodule.exports = ParserError;\n\n\n/***/ }),\n/* 136 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nclass TokenizeError extends Error {\n  constructor(message) {\n    super(message);\n\n    this.name = this.constructor.name;\n    this.message = message || 'An error ocurred while tokzenizing.';\n\n    if (typeof Error.captureStackTrace === 'function') {\n      Error.captureStackTrace(this, this.constructor);\n    }\n    else {\n      this.stack = (new Error(message)).stack;\n    }\n  }\n}\n\nmodule.exports = TokenizeError;\n\n\n/***/ }),\n/* 137 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nconst Root = __webpack_require__(138);\nconst Value = __webpack_require__(68);\n\nconst AtWord = __webpack_require__(59);\nconst Colon = __webpack_require__(60);\nconst Comma = __webpack_require__(61);\nconst Comment = __webpack_require__(62);\nconst Func = __webpack_require__(63);\nconst Numbr = __webpack_require__(64);\nconst Operator = __webpack_require__(65);\nconst Paren = __webpack_require__(66);\nconst Str = __webpack_require__(67);\nconst Word = __webpack_require__(69);\n\nconst tokenize = __webpack_require__(139);\n\nconst flatten = __webpack_require__(32);\nconst indexesOf = __webpack_require__(34);\nconst uniq = __webpack_require__(83);\nconst ParserError = __webpack_require__(135);\n\nfunction sortAscending (list) {\n  return list.sort((a, b) => a - b);\n}\n\nmodule.exports = class Parser {\n  constructor (input, options) {\n    const defaults = { loose: false };\n\n    // cache needs to be an array for values with more than 1 level of function nesting\n    this.cache = [];\n    this.input = input;\n    this.options = Object.assign({}, defaults, options);\n    this.position = 0;\n    // we'll use this to keep track of the paren balance\n    this.unbalanced = 0;\n    this.root = new Root();\n\n    let value = new Value();\n\n    this.root.append(value);\n\n    this.current = value;\n    this.tokens = tokenize(input, this.options);\n  }\n\n  parse () {\n    return this.loop();\n  }\n\n  colon () {\n    let token = this.currToken;\n\n    this.newNode(new Colon({\n      value: token[1],\n      source: {\n        start: {\n          line: token[2],\n          column: token[3]\n        },\n        end: {\n          line: token[4],\n          column: token[5]\n        }\n      },\n      sourceIndex: token[6]\n    }));\n\n    this.position ++;\n  }\n\n  comma () {\n    let token = this.currToken;\n\n    this.newNode(new Comma({\n      value: token[1],\n      source: {\n        start: {\n          line: token[2],\n          column: token[3]\n        },\n        end: {\n          line: token[4],\n          column: token[5]\n        }\n      },\n      sourceIndex: token[6]\n    }));\n\n    this.position ++;\n  }\n\n  comment () {\n    let node = new Comment({\n      value: this.currToken[1].replace(/\\/\\*|\\*\\//g, ''),\n      source: {\n        start: {\n          line: this.currToken[2],\n          column: this.currToken[3]\n        },\n        end: {\n          line: this.currToken[4],\n          column: this.currToken[5]\n        }\n      },\n      sourceIndex: this.currToken[6]\n    });\n\n    this.newNode(node);\n    this.position++;\n  }\n\n  error (message, token) {\n    throw new ParserError(message + ` at line: ${token[2]}, column ${token[3]}`);\n  }\n\n  loop () {\n    while (this.position < this.tokens.length) {\n      this.parseTokens();\n    }\n\n    if (!this.current.last && this.spaces) {\n      this.current.raws.before += this.spaces;\n    }\n    else if (this.spaces) {\n      this.current.last.raws.after += this.spaces;\n    }\n\n    this.spaces = '';\n\n    return this.root;\n  }\n\n  operator () {\n\n    // if a +|- operator is followed by a non-word character (. is allowed) and\n    // is preceded by a non-word character. (5+5)\n    let char = this.currToken[1],\n      node;\n\n    if (char === '+' || char === '-') {\n      // only inspect if the operator is not the first token, and we're only\n      // within a calc() function: the only spec-valid place for math expressions\n      if (!this.options.loose) {\n        if (this.position > 0) {\n          if (this.current.type === 'func' && this.current.value === 'calc') {\n            // allow operators to be proceeded by spaces and opening parens\n            if (this.prevToken[0] !== 'space' && this.prevToken[0] !== '(') {\n              this.error('Syntax Error', this.currToken);\n            }\n            // valid: calc(1 - +2)\n            // invalid: calc(1 -+2)\n            else if (this.nextToken[0] !== 'space' && this.nextToken[0] !== 'word') {\n              this.error('Syntax Error', this.currToken);\n            }\n            // valid: calc(1 - +2)\n            // valid: calc(-0.5 + 2)\n            // invalid: calc(1 -2)\n            else if (this.nextToken[0] === 'word' && this.current.last.type !== 'operator' &&\n                     this.current.last.value !== '(') {\n              this.error('Syntax Error', this.currToken);\n            }\n          }\n          // if we're not in a function and someone has doubled up on operators,\n          // or they're trying to perform a calc outside of a calc\n          // eg. +-4px or 5+ 5, throw an error\n          else if (this.nextToken[0] === 'space'\n                  || this.nextToken[0] === 'operator'\n                  || this.prevToken[0] === 'operator') {\n            this.error('Syntax Error', this.currToken);\n          }\n        }\n      }\n\n      if (!this.options.loose) {\n        if (this.nextToken[0] === 'word') {\n          return this.word();\n        }\n      }\n      else {\n        if ((!this.current.nodes.length || (this.current.last && this.current.last.type === 'operator')) && this.nextToken[0] === 'word') {\n          return this.word();\n        }\n      }\n    }\n\n    node = new Operator({\n      value: this.currToken[1],\n      source: {\n        start: {\n          line: this.currToken[2],\n          column: this.currToken[3]\n        },\n        end: {\n          line: this.currToken[2],\n          column: this.currToken[3]\n        }\n      },\n      sourceIndex: this.currToken[4]\n    });\n\n    this.position ++;\n\n    return this.newNode(node);\n  }\n\n  parseTokens () {\n    switch (this.currToken[0]) {\n      case 'space':\n        this.space();\n        break;\n      case 'colon':\n        this.colon();\n        break;\n      case 'comma':\n        this.comma();\n        break;\n      case 'comment':\n        this.comment();\n        break;\n      case '(':\n        this.parenOpen();\n        break;\n      case ')':\n        this.parenClose();\n        break;\n      case 'atword':\n      case 'word':\n        this.word();\n        break;\n      case 'operator':\n        this.operator();\n        break;\n      case 'string':\n        this.string();\n        break;\n      default:\n        this.word();\n        break;\n    }\n  }\n\n  parenOpen () {\n    let unbalanced = 1,\n      pos = this.position + 1,\n      token = this.currToken,\n      last;\n\n    // check for balanced parens\n    while (pos < this.tokens.length && unbalanced) {\n      let tkn = this.tokens[pos];\n\n      if (tkn[0] === '(') {\n        unbalanced++;\n      }\n      if (tkn[0] === ')') {\n        unbalanced--;\n      }\n      pos ++;\n    }\n\n    if (unbalanced) {\n      this.error('Expected closing parenthesis', token);\n    }\n\n    // ok, all parens are balanced. continue on\n\n    last = this.current.last;\n\n    if (last && last.type === 'func' && last.unbalanced < 0) {\n      last.unbalanced = 0; // ok we're ready to add parens now\n      this.current = last;\n    }\n\n    this.current.unbalanced ++;\n\n    this.newNode(new Paren({\n      value: token[1],\n      source: {\n        start: {\n          line: token[2],\n          column: token[3]\n        },\n        end: {\n          line: token[4],\n          column: token[5]\n        }\n      },\n      sourceIndex: token[6]\n    }));\n\n    this.position ++;\n\n    // url functions get special treatment, and anything between the function\n    // parens get treated as one word, if the contents aren't not a string.\n    if (this.current.type === 'func' && this.current.unbalanced &&\n        this.current.value === 'url' && this.currToken[0] !== 'string' &&\n        this.currToken[0] !== ')' && !this.options.loose) {\n\n      let nextToken = this.nextToken,\n        value = this.currToken[1],\n        start = {\n          line: this.currToken[2],\n          column: this.currToken[3]\n        };\n\n      while (nextToken && nextToken[0] !== ')' && this.current.unbalanced) {\n        this.position ++;\n        value += this.currToken[1];\n        nextToken = this.nextToken;\n      }\n\n      if (this.position !== this.tokens.length - 1) {\n        // skip the following word definition, or it'll be a duplicate\n        this.position ++;\n\n        this.newNode(new Word({\n          value,\n          source: {\n            start,\n            end: {\n              line: this.currToken[4],\n              column: this.currToken[5]\n            }\n          },\n          sourceIndex: this.currToken[6]\n        }));\n      }\n    }\n  }\n\n  parenClose () {\n    let token = this.currToken;\n\n    this.newNode(new Paren({\n      value: token[1],\n      source: {\n        start: {\n          line: token[2],\n          column: token[3]\n        },\n        end: {\n          line: token[4],\n          column: token[5]\n        }\n      },\n      sourceIndex: token[6]\n    }));\n\n    this.position ++;\n\n    if (this.position >= this.tokens.length - 1 && !this.current.unbalanced) {\n      return;\n    }\n\n    this.current.unbalanced --;\n\n    if (this.current.unbalanced < 0) {\n      this.error('Expected opening parenthesis', token);\n    }\n\n    if (!this.current.unbalanced && this.cache.length) {\n      this.current = this.cache.pop();\n    }\n  }\n\n  space () {\n    let token = this.currToken;\n    // Handle space before and after the selector\n    if (this.position === (this.tokens.length - 1) || this.nextToken[0] === ',' || this.nextToken[0] === ')') {\n      this.current.last.raws.after += token[1];\n      this.position ++;\n    }\n    else {\n      this.spaces = token[1];\n      this.position ++;\n    }\n  }\n\n  splitWord () {\n    let nextToken = this.nextToken,\n      word = this.currToken[1],\n      rNumber = /^[\\+\\-]?((\\d+(\\.\\d*)?)|(\\.\\d+))/,\n\n      // treat css-like groupings differently so they can be inspected,\n      // but don't address them as anything but a word, but allow hex values\n      // to pass through.\n      rNoFollow = /^(?!\\#([a-z0-9]+))[\\#\\{\\}]/gi,\n\n      hasAt, indices;\n\n    if (!rNoFollow.test(word)) {\n      while (nextToken && nextToken[0] === 'word') {\n        this.position ++;\n\n        let current = this.currToken[1];\n        word += current;\n\n        nextToken = this.nextToken;\n      }\n    }\n\n    hasAt = indexesOf(word, '@');\n    indices = sortAscending(uniq(flatten([[0], hasAt])));\n\n    indices.forEach((ind, i) => {\n      let index = indices[i + 1] || word.length,\n        value = word.slice(ind, index),\n        node;\n\n      if (~hasAt.indexOf(ind)) {\n        node = new AtWord({\n          value: value.slice(1),\n          source: {\n            start: {\n              line: this.currToken[2],\n              column: this.currToken[3] + ind\n            },\n            end: {\n              line: this.currToken[4],\n              column: this.currToken[3] + (index - 1)\n            }\n          },\n          sourceIndex: this.currToken[6] + indices[i]\n        });\n      }\n      else if (rNumber.test(this.currToken[1])) {\n        let unit = value.replace(rNumber, '');\n\n        node = new Numbr({\n          value: value.replace(unit, ''),\n          source: {\n            start: {\n              line: this.currToken[2],\n              column: this.currToken[3] + ind\n            },\n            end: {\n              line: this.currToken[4],\n              column: this.currToken[3] + (index - 1)\n            }\n          },\n          sourceIndex: this.currToken[6] + indices[i],\n          unit\n        });\n      }\n      else {\n        node = new (nextToken && nextToken[0] === '(' ? Func : Word)({\n          value,\n          source: {\n            start: {\n              line: this.currToken[2],\n              column: this.currToken[3] + ind\n            },\n            end: {\n              line: this.currToken[4],\n              column: this.currToken[3] + (index - 1)\n            }\n          },\n          sourceIndex: this.currToken[6] + indices[i]\n        });\n\n        if (node.constructor.name === 'Word') {\n          node.isHex = /^#(.+)/.test(value);\n          node.isColor = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(value);\n        }\n        else {\n          this.cache.push(this.current);\n        }\n      }\n\n      this.newNode(node);\n\n    });\n\n    this.position ++;\n  }\n\n  string () {\n    let token = this.currToken,\n      value = this.currToken[1],\n      rQuote = /^(\\\"|\\')/,\n      quoted = rQuote.test(value),\n      quote = '',\n      node;\n\n    if (quoted) {\n      quote = value.match(rQuote)[0];\n      // set value to the string within the quotes\n      // quotes are stored in raws\n      value = value.slice(1, value.length - 1);\n    }\n\n    node = new Str({\n      value,\n      source: {\n        start: {\n          line: token[2],\n          column: token[3]\n        },\n        end: {\n          line: token[4],\n          column: token[5]\n        }\n      },\n      sourceIndex: token[6],\n      quoted\n    });\n\n    node.raws.quote = quote;\n\n    this.newNode(node);\n    this.position++;\n  }\n\n  word () {\n    return this.splitWord();\n  }\n\n  newNode (node) {\n    if (this.spaces) {\n      node.raws.before += this.spaces;\n      this.spaces = '';\n    }\n\n    return this.current.append(node);\n  }\n\n  get currToken () {\n    return this.tokens[this.position];\n  }\n\n  get nextToken () {\n    return this.tokens[this.position + 1];\n  }\n\n  get prevToken () {\n    return this.tokens[this.position - 1];\n  }\n};\n\n\n/***/ }),\n/* 138 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nconst Container = __webpack_require__(1);\n\nmodule.exports = class Root extends Container {\n  constructor (opts) {\n    super(opts);\n    this.type = 'root';\n  }\n};\n\n\n/***/ }),\n/* 139 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nconst openBracket = '{'.charCodeAt(0);\nconst closeBracket = '}'.charCodeAt(0);\nconst openParen = '('.charCodeAt(0);\nconst closeParen = ')'.charCodeAt(0);\nconst singleQuote = '\\''.charCodeAt(0);\nconst doubleQuote = '\"'.charCodeAt(0);\nconst backslash = '\\\\'.charCodeAt(0);\nconst slash = '/'.charCodeAt(0);\nconst comma = ','.charCodeAt(0);\nconst colon = ':'.charCodeAt(0);\nconst asterisk = '*'.charCodeAt(0);\nconst minus = '-'.charCodeAt(0);\nconst plus = '+'.charCodeAt(0);\nconst pound = '#'.charCodeAt(0);\nconst newline = '\\n'.charCodeAt(0);\nconst space = ' '.charCodeAt(0);\nconst feed = '\\f'.charCodeAt(0);\nconst tab = '\\t'.charCodeAt(0);\nconst cr = '\\r'.charCodeAt(0);\nconst at = '@'.charCodeAt(0);\nconst atEnd = /[ \\n\\t\\r\\{\\(\\)'\"\\\\;,/]/g;\nconst wordEnd = /[ \\n\\t\\r\\(\\)\\{\\}\\*:;@!&'\"\\+\\|~>,\\[\\]\\\\]|\\/(?=\\*)/g;\nconst wordEndNum = /[ \\n\\t\\r\\(\\)\\{\\}\\*:;@!&'\"\\-\\+\\|~>,\\[\\]\\\\]|\\//g;\nconst alphaNum = /^[a-z0-9]/i;\n\nconst util = __webpack_require__(158);\nconst TokenizeError = __webpack_require__(136);\n\nmodule.exports = function tokenize (input, options) {\n\n  options = options || {};\n\n  let tokens = [],\n    css = input.valueOf(),\n    length = css.length,\n    offset = -1,\n    line =  1,\n    pos =  0,\n\n    code, next, quote, lines, last, content, escape, nextLine, nextOffset,\n    escaped, escapePos, nextChar;\n\n  function unclosed (what) {\n    let message = util.format('Unclosed %s at line: %d, column: %d, token: %d', what, line, pos - offset, pos);\n    throw new TokenizeError(message);\n  }\n\n  while (pos < length) {\n    code = css.charCodeAt(pos);\n\n    if (code === newline) {\n      offset = pos;\n      line  += 1;\n    }\n\n    switch (code) {\n      case newline:\n      case space:\n      case tab:\n      case cr:\n      case feed:\n        next = pos;\n        do {\n          next += 1;\n          code = css.charCodeAt(next);\n          if (code === newline) {\n            offset = next;\n            line  += 1;\n          }\n        } while (code === space   ||\n          code === newline ||\n          code === tab     ||\n          code === cr      ||\n          code === feed);\n\n        tokens.push(['space', css.slice(pos, next),\n          line, pos  - offset,\n          line, next - offset,\n          pos\n        ]);\n\n        pos = next - 1;\n        break;\n\n      case colon:\n        next = pos + 1;\n        tokens.push(['colon', css.slice(pos, next),\n          line, pos  - offset,\n          line, next - offset,\n          pos\n        ]);\n\n        pos = next - 1;\n        break;\n\n      case comma:\n        next = pos + 1;\n        tokens.push(['comma', css.slice(pos, next),\n          line, pos  - offset,\n          line, next - offset,\n          pos\n        ]);\n\n        pos = next - 1;\n        break;\n\n      case openBracket:\n        tokens.push(['{', '{',\n          line, pos  - offset,\n          line, next - offset,\n          pos\n        ]);\n        break;\n\n      case closeBracket:\n        tokens.push(['}', '}',\n          line, pos  - offset,\n          line, next - offset,\n          pos\n        ]);\n        break;\n\n      case openParen:\n        tokens.push(['(', '(',\n          line, pos  - offset,\n          line, next - offset,\n          pos\n        ]);\n        break;\n\n      case closeParen:\n        tokens.push([')', ')',\n          line, pos  - offset,\n          line, next - offset,\n          pos\n        ]);\n        break;\n\n      case singleQuote:\n      case doubleQuote:\n        quote = code === singleQuote ? '\\'' : '\"';\n        next  = pos;\n        do {\n          escaped = false;\n          next    = css.indexOf(quote, next + 1);\n          if (next === -1) {\n            unclosed('quote', quote);\n          }\n          escapePos = next;\n          while (css.charCodeAt(escapePos - 1) === backslash) {\n            escapePos -= 1;\n            escaped = !escaped;\n          }\n        } while (escaped);\n\n        tokens.push(['string', css.slice(pos, next + 1),\n          line, pos  - offset,\n          line, next - offset,\n          pos\n        ]);\n        pos = next;\n        break;\n\n      case at:\n        atEnd.lastIndex = pos + 1;\n        atEnd.test(css);\n\n        if (atEnd.lastIndex === 0) {\n          next = css.length - 1;\n        }\n        else {\n          next = atEnd.lastIndex - 2;\n        }\n\n        tokens.push(['atword', css.slice(pos, next + 1),\n          line, pos  - offset,\n          line, next - offset,\n          pos\n        ]);\n        pos = next;\n        break;\n\n      case backslash:\n        next   = pos;\n        code = css.charCodeAt(next + 1);\n\n        if (escape && (code !== slash && code !== space &&\n                        code !== newline && code !== tab &&\n                        code !== cr && code !== feed)) {\n          next += 1;\n        }\n\n        tokens.push(['word', css.slice(pos, next + 1),\n          line, pos  - offset,\n          line, next - offset,\n          pos\n        ]);\n\n        pos = next;\n        break;\n\n      case plus:\n      case minus:\n      case asterisk:\n        next = pos + 1;\n        nextChar = css.slice(pos + 1, next + 1);\n\n        let prevChar = css.slice(pos - 1, pos);\n\n        // if the operator is immediately followed by a word character, then we\n        // have a prefix of some kind, and should fall-through. eg. -webkit\n\n        // look for --* for custom variables\n        if (code === minus && nextChar.charCodeAt(0) === minus) {\n          next++;\n\n          tokens.push(['word', css.slice(pos, next),\n            line, pos  - offset,\n            line, next - offset,\n            pos\n          ]);\n\n          pos = next - 1;\n          break;\n        }\n\n        tokens.push(['operator', css.slice(pos, next),\n          line, pos  - offset,\n          line, next - offset,\n          pos\n        ]);\n\n        pos = next - 1;\n        break;\n\n      default:\n        if (code === slash && css.charCodeAt(pos + 1) === asterisk) {\n          next = css.indexOf('*/', pos + 2) + 1;\n          if (next === 0) {\n            unclosed('comment', '*/');\n          }\n\n          content = css.slice(pos, next + 1);\n          lines   = content.split('\\n');\n          last    = lines.length - 1;\n\n          if (last > 0) {\n            nextLine   = line + last;\n            nextOffset = next - lines[last].length;\n          }\n          else {\n            nextLine   = line;\n            nextOffset = offset;\n          }\n\n          tokens.push(['comment', content,\n            line,     pos  - offset,\n            nextLine, next - nextOffset,\n            pos\n          ]);\n\n          offset = nextOffset;\n          line   = nextLine;\n          pos    = next;\n\n        }\n        else if (code === pound && !alphaNum.test(css.slice(pos + 1, pos + 2))) {\n          next = pos + 1;\n\n          tokens.push(['#', css.slice(pos, next),\n            line, pos  - offset,\n            line, next - offset,\n            pos\n          ]);\n\n          pos = next - 1;\n        }\n        // catch a regular slash, that isn't a comment\n        else if (code === slash) {\n          next = pos + 1;\n\n          tokens.push(['operator', css.slice(pos, next),\n            line, pos  - offset,\n            line, next - offset,\n            pos\n          ]);\n\n          pos = next - 1;\n        }\n        else {\n          let regex = wordEnd;\n\n          // we're dealing with a word that starts with a number\n          // those get treated differently\n          if (code >= 48 && code <= 57) {\n            regex = wordEndNum;\n          }\n\n          regex.lastIndex = pos + 1;\n          regex.test(css);\n\n          if (regex.lastIndex === 0) {\n            next = css.length - 1;\n          }\n          else {\n            next = regex.lastIndex - 2;\n          }\n\n          tokens.push(['word', css.slice(pos, next + 1),\n            line, pos  - offset,\n            line, next - offset,\n            pos\n          ]);\n          pos = next;\n        }\n        break;\n    }\n\n    pos ++;\n  }\n\n  return tokens;\n};\n\n\n/***/ }),\n/* 140 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n/**\n * Contains helpers for safely splitting lists of CSS values,\n * preserving parentheses and quotes.\n *\n * @example\n * const list = postcss.list;\n *\n * @namespace list\n */\nvar list = {\n    split: function split(string, separators, last) {\n        var array = [];\n        var current = '';\n        var split = false;\n\n        var func = 0;\n        var quote = false;\n        var escape = false;\n\n        for (var i = 0; i < string.length; i++) {\n            var letter = string[i];\n\n            if (quote) {\n                if (escape) {\n                    escape = false;\n                } else if (letter === '\\\\') {\n                    escape = true;\n                } else if (letter === quote) {\n                    quote = false;\n                }\n            } else if (letter === '\"' || letter === '\\'') {\n                quote = letter;\n            } else if (letter === '(') {\n                func += 1;\n            } else if (letter === ')') {\n                if (func > 0) func -= 1;\n            } else if (func === 0) {\n                if (separators.indexOf(letter) !== -1) split = true;\n            }\n\n            if (split) {\n                if (current !== '') array.push(current.trim());\n                current = '';\n                split = false;\n            } else {\n                current += letter;\n            }\n        }\n\n        if (last || current !== '') array.push(current.trim());\n        return array;\n    },\n\n\n    /**\n     * Safely splits space-separated values (such as those for `background`,\n     * `border-radius`, and other shorthand properties).\n     *\n     * @param {string} string - space-separated values\n     *\n     * @return {string[]} split values\n     *\n     * @example\n     * postcss.list.space('1px calc(10% + 1px)') //=> ['1px', 'calc(10% + 1px)']\n     */\n    space: function space(string) {\n        var spaces = [' ', '\\n', '\\t'];\n        return list.split(string, spaces);\n    },\n\n\n    /**\n     * Safely splits comma-separated values (such as those for `transition-*`\n     * and `background` properties).\n     *\n     * @param {string} string - comma-separated values\n     *\n     * @return {string[]} split values\n     *\n     * @example\n     * postcss.list.comma('black, linear-gradient(white, black)')\n     * //=> ['black', 'linear-gradient(white, black)']\n     */\n    comma: function comma(string) {\n        var comma = ',';\n        return list.split(string, [comma], true);\n    }\n};\n\nexports.default = list;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 141 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Buffer) {\n\nexports.__esModule = true;\n\nvar _sourceMap = __webpack_require__(13);\n\nvar _sourceMap2 = _interopRequireDefault(_sourceMap);\n\nvar _path = __webpack_require__(5);\n\nvar _path2 = _interopRequireDefault(_path);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar MapGenerator = function () {\n    function MapGenerator(stringify, root, opts) {\n        _classCallCheck(this, MapGenerator);\n\n        this.stringify = stringify;\n        this.mapOpts = opts.map || {};\n        this.root = root;\n        this.opts = opts;\n    }\n\n    MapGenerator.prototype.isMap = function isMap() {\n        if (typeof this.opts.map !== 'undefined') {\n            return !!this.opts.map;\n        } else {\n            return this.previous().length > 0;\n        }\n    };\n\n    MapGenerator.prototype.previous = function previous() {\n        var _this = this;\n\n        if (!this.previousMaps) {\n            this.previousMaps = [];\n            this.root.walk(function (node) {\n                if (node.source && node.source.input.map) {\n                    var map = node.source.input.map;\n                    if (_this.previousMaps.indexOf(map) === -1) {\n                        _this.previousMaps.push(map);\n                    }\n                }\n            });\n        }\n\n        return this.previousMaps;\n    };\n\n    MapGenerator.prototype.isInline = function isInline() {\n        if (typeof this.mapOpts.inline !== 'undefined') {\n            return this.mapOpts.inline;\n        }\n\n        var annotation = this.mapOpts.annotation;\n        if (typeof annotation !== 'undefined' && annotation !== true) {\n            return false;\n        }\n\n        if (this.previous().length) {\n            return this.previous().some(function (i) {\n                return i.inline;\n            });\n        } else {\n            return true;\n        }\n    };\n\n    MapGenerator.prototype.isSourcesContent = function isSourcesContent() {\n        if (typeof this.mapOpts.sourcesContent !== 'undefined') {\n            return this.mapOpts.sourcesContent;\n        }\n        if (this.previous().length) {\n            return this.previous().some(function (i) {\n                return i.withContent();\n            });\n        } else {\n            return true;\n        }\n    };\n\n    MapGenerator.prototype.clearAnnotation = function clearAnnotation() {\n        if (this.mapOpts.annotation === false) return;\n\n        var node = void 0;\n        for (var i = this.root.nodes.length - 1; i >= 0; i--) {\n            node = this.root.nodes[i];\n            if (node.type !== 'comment') continue;\n            if (node.text.indexOf('# sourceMappingURL=') === 0) {\n                this.root.removeChild(i);\n            }\n        }\n    };\n\n    MapGenerator.prototype.setSourcesContent = function setSourcesContent() {\n        var _this2 = this;\n\n        var already = {};\n        this.root.walk(function (node) {\n            if (node.source) {\n                var from = node.source.input.from;\n                if (from && !already[from]) {\n                    already[from] = true;\n                    var relative = _this2.relative(from);\n                    _this2.map.setSourceContent(relative, node.source.input.css);\n                }\n            }\n        });\n    };\n\n    MapGenerator.prototype.applyPrevMaps = function applyPrevMaps() {\n        for (var _iterator = this.previous(), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n            var _ref;\n\n            if (_isArray) {\n                if (_i >= _iterator.length) break;\n                _ref = _iterator[_i++];\n            } else {\n                _i = _iterator.next();\n                if (_i.done) break;\n                _ref = _i.value;\n            }\n\n            var prev = _ref;\n\n            var from = this.relative(prev.file);\n            var root = prev.root || _path2.default.dirname(prev.file);\n            var map = void 0;\n\n            if (this.mapOpts.sourcesContent === false) {\n                map = new _sourceMap2.default.SourceMapConsumer(prev.text);\n                if (map.sourcesContent) {\n                    map.sourcesContent = map.sourcesContent.map(function () {\n                        return null;\n                    });\n                }\n            } else {\n                map = prev.consumer();\n            }\n\n            this.map.applySourceMap(map, from, this.relative(root));\n        }\n    };\n\n    MapGenerator.prototype.isAnnotation = function isAnnotation() {\n        if (this.isInline()) {\n            return true;\n        } else if (typeof this.mapOpts.annotation !== 'undefined') {\n            return this.mapOpts.annotation;\n        } else if (this.previous().length) {\n            return this.previous().some(function (i) {\n                return i.annotation;\n            });\n        } else {\n            return true;\n        }\n    };\n\n    MapGenerator.prototype.toBase64 = function toBase64(str) {\n        if (Buffer) {\n            return Buffer.from ? Buffer.from(str).toString('base64') : new Buffer(str).toString('base64');\n        } else {\n            return window.btoa(unescape(encodeURIComponent(str)));\n        }\n    };\n\n    MapGenerator.prototype.addAnnotation = function addAnnotation() {\n        var content = void 0;\n\n        if (this.isInline()) {\n\n            content = 'data:application/json;base64,' + this.toBase64(this.map.toString());\n        } else if (typeof this.mapOpts.annotation === 'string') {\n            content = this.mapOpts.annotation;\n        } else {\n            content = this.outputFile() + '.map';\n        }\n\n        var eol = '\\n';\n        if (this.css.indexOf('\\r\\n') !== -1) eol = '\\r\\n';\n\n        this.css += eol + '/*# sourceMappingURL=' + content + ' */';\n    };\n\n    MapGenerator.prototype.outputFile = function outputFile() {\n        if (this.opts.to) {\n            return this.relative(this.opts.to);\n        } else if (this.opts.from) {\n            return this.relative(this.opts.from);\n        } else {\n            return 'to.css';\n        }\n    };\n\n    MapGenerator.prototype.generateMap = function generateMap() {\n        this.generateString();\n        if (this.isSourcesContent()) this.setSourcesContent();\n        if (this.previous().length > 0) this.applyPrevMaps();\n        if (this.isAnnotation()) this.addAnnotation();\n\n        if (this.isInline()) {\n            return [this.css];\n        } else {\n            return [this.css, this.map];\n        }\n    };\n\n    MapGenerator.prototype.relative = function relative(file) {\n        if (file.indexOf('<') === 0) return file;\n        if (/^\\w+:\\/\\//.test(file)) return file;\n\n        var from = this.opts.to ? _path2.default.dirname(this.opts.to) : '.';\n\n        if (typeof this.mapOpts.annotation === 'string') {\n            from = _path2.default.dirname(_path2.default.resolve(from, this.mapOpts.annotation));\n        }\n\n        file = _path2.default.relative(from, file);\n        if (_path2.default.sep === '\\\\') {\n            return file.replace(/\\\\/g, '/');\n        } else {\n            return file;\n        }\n    };\n\n    MapGenerator.prototype.sourcePath = function sourcePath(node) {\n        if (this.mapOpts.from) {\n            return this.mapOpts.from;\n        } else {\n            return this.relative(node.source.input.from);\n        }\n    };\n\n    MapGenerator.prototype.generateString = function generateString() {\n        var _this3 = this;\n\n        this.css = '';\n        this.map = new _sourceMap2.default.SourceMapGenerator({ file: this.outputFile() });\n\n        var line = 1;\n        var column = 1;\n\n        var lines = void 0,\n            last = void 0;\n        this.stringify(this.root, function (str, node, type) {\n            _this3.css += str;\n\n            if (node && type !== 'end') {\n                if (node.source && node.source.start) {\n                    _this3.map.addMapping({\n                        source: _this3.sourcePath(node),\n                        generated: { line: line, column: column - 1 },\n                        original: {\n                            line: node.source.start.line,\n                            column: node.source.start.column - 1\n                        }\n                    });\n                } else {\n                    _this3.map.addMapping({\n                        source: '<no source>',\n                        original: { line: 1, column: 0 },\n                        generated: { line: line, column: column - 1 }\n                    });\n                }\n            }\n\n            lines = str.match(/\\n/g);\n            if (lines) {\n                line += lines.length;\n                last = str.lastIndexOf('\\n');\n                column = str.length - last;\n            } else {\n                column += str.length;\n            }\n\n            if (node && type !== 'start') {\n                if (node.source && node.source.end) {\n                    _this3.map.addMapping({\n                        source: _this3.sourcePath(node),\n                        generated: { line: line, column: column - 1 },\n                        original: {\n                            line: node.source.end.line,\n                            column: node.source.end.column\n                        }\n                    });\n                } else {\n                    _this3.map.addMapping({\n                        source: '<no source>',\n                        original: { line: 1, column: 0 },\n                        generated: { line: line, column: column - 1 }\n                    });\n                }\n            }\n        });\n    };\n\n    MapGenerator.prototype.generate = function generate() {\n        this.clearAnnotation();\n\n        if (this.isMap()) {\n            return this.generateMap();\n        } else {\n            var result = '';\n            this.stringify(this.root, function (i) {\n                result += i;\n            });\n            return [result];\n        }\n    };\n\n    return MapGenerator;\n}();\n\nexports.default = MapGenerator;\nmodule.exports = exports['default'];\n\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(14).Buffer));\n\n/***/ }),\n/* 142 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Buffer) {\n\nexports.__esModule = true;\n\nvar _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; };\n\nvar _sourceMap = __webpack_require__(13);\n\nvar _sourceMap2 = _interopRequireDefault(_sourceMap);\n\nvar _path = __webpack_require__(5);\n\nvar _path2 = _interopRequireDefault(_path);\n\nvar _fs = __webpack_require__(162);\n\nvar _fs2 = _interopRequireDefault(_fs);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Source map information from input CSS.\n * For example, source map after Sass compiler.\n *\n * This class will automatically find source map in input CSS or in file system\n * near input file (according `from` option).\n *\n * @example\n * const root = postcss.parse(css, { from: 'a.sass.css' });\n * root.input.map //=> PreviousMap\n */\nvar PreviousMap = function () {\n\n    /**\n     * @param {string}         css    - input CSS source\n     * @param {processOptions} [opts] - {@link Processor#process} options\n     */\n    function PreviousMap(css, opts) {\n        _classCallCheck(this, PreviousMap);\n\n        this.loadAnnotation(css);\n        /**\n         * @member {boolean} - Was source map inlined by data-uri to input CSS.\n         */\n        this.inline = this.startWith(this.annotation, 'data:');\n\n        var prev = opts.map ? opts.map.prev : undefined;\n        var text = this.loadMap(opts.from, prev);\n        if (text) this.text = text;\n    }\n\n    /**\n     * Create a instance of `SourceMapGenerator` class\n     * from the `source-map` library to work with source map information.\n     *\n     * It is lazy method, so it will create object only on first call\n     * and then it will use cache.\n     *\n     * @return {SourceMapGenerator} object with source map information\n     */\n\n\n    PreviousMap.prototype.consumer = function consumer() {\n        if (!this.consumerCache) {\n            this.consumerCache = new _sourceMap2.default.SourceMapConsumer(this.text);\n        }\n        return this.consumerCache;\n    };\n\n    /**\n     * Does source map contains `sourcesContent` with input source text.\n     *\n     * @return {boolean} Is `sourcesContent` present\n     */\n\n\n    PreviousMap.prototype.withContent = function withContent() {\n        return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);\n    };\n\n    PreviousMap.prototype.startWith = function startWith(string, start) {\n        if (!string) return false;\n        return string.substr(0, start.length) === start;\n    };\n\n    PreviousMap.prototype.loadAnnotation = function loadAnnotation(css) {\n        var match = css.match(/\\/\\*\\s*# sourceMappingURL=(.*)\\s*\\*\\//);\n        if (match) this.annotation = match[1].trim();\n    };\n\n    PreviousMap.prototype.decodeInline = function decodeInline(text) {\n        // data:application/json;charset=utf-8;base64,\n        // data:application/json;charset=utf8;base64,\n        // data:application/json;base64,\n        var baseUri = /^data:application\\/json;(?:charset=utf-?8;)?base64,/;\n        var uri = 'data:application/json,';\n\n        if (this.startWith(text, uri)) {\n            return decodeURIComponent(text.substr(uri.length));\n        } else if (baseUri.test(text)) {\n            return new Buffer(text.substr(RegExp.lastMatch.length), 'base64').toString();\n        } else {\n            var encoding = text.match(/data:application\\/json;([^,]+),/)[1];\n            throw new Error('Unsupported source map encoding ' + encoding);\n        }\n    };\n\n    PreviousMap.prototype.loadMap = function loadMap(file, prev) {\n        if (prev === false) return false;\n\n        if (prev) {\n            if (typeof prev === 'string') {\n                return prev;\n            } else if (typeof prev === 'function') {\n                var prevPath = prev(file);\n                if (prevPath && _fs2.default.existsSync && _fs2.default.existsSync(prevPath)) {\n                    return _fs2.default.readFileSync(prevPath, 'utf-8').toString().trim();\n                } else {\n                    throw new Error('Unable to load previous source map: ' + prevPath.toString());\n                }\n            } else if (prev instanceof _sourceMap2.default.SourceMapConsumer) {\n                return _sourceMap2.default.SourceMapGenerator.fromSourceMap(prev).toString();\n            } else if (prev instanceof _sourceMap2.default.SourceMapGenerator) {\n                return prev.toString();\n            } else if (this.isMap(prev)) {\n                return JSON.stringify(prev);\n            } else {\n                throw new Error('Unsupported previous source map format: ' + prev.toString());\n            }\n        } else if (this.inline) {\n            return this.decodeInline(this.annotation);\n        } else if (this.annotation) {\n            var map = this.annotation;\n            if (file) map = _path2.default.join(_path2.default.dirname(file), map);\n\n            this.root = _path2.default.dirname(map);\n            if (_fs2.default.existsSync && _fs2.default.existsSync(map)) {\n                return _fs2.default.readFileSync(map, 'utf-8').toString().trim();\n            } else {\n                return false;\n            }\n        }\n    };\n\n    PreviousMap.prototype.isMap = function isMap(map) {\n        if ((typeof map === 'undefined' ? 'undefined' : _typeof(map)) !== 'object') return false;\n        return typeof map.mappings === 'string' || typeof map._mappings === 'string';\n    };\n\n    return PreviousMap;\n}();\n\nexports.default = PreviousMap;\nmodule.exports = exports['default'];\n\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(14).Buffer));\n\n/***/ }),\n/* 143 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; };\n\nvar _lazyResult = __webpack_require__(72);\n\nvar _lazyResult2 = _interopRequireDefault(_lazyResult);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Contains plugins to process CSS. Create one `Processor` instance,\n * initialize its plugins, and then use that instance on numerous CSS files.\n *\n * @example\n * const processor = postcss([autoprefixer, precss]);\n * processor.process(css1).then(result => console.log(result.css));\n * processor.process(css2).then(result => console.log(result.css));\n */\nvar Processor = function () {\n\n  /**\n   * @param {Array.<Plugin|pluginFunction>|Processor} plugins - PostCSS\n   *        plugins. See {@link Processor#use} for plugin format.\n   */\n  function Processor() {\n    var plugins = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n    _classCallCheck(this, Processor);\n\n    /**\n     * @member {string} - Current PostCSS version.\n     *\n     * @example\n     * if ( result.processor.version.split('.')[0] !== '5' ) {\n     *   throw new Error('This plugin works only with PostCSS 5');\n     * }\n     */\n    this.version = '6.0.1';\n    /**\n     * @member {pluginFunction[]} - Plugins added to this processor.\n     *\n     * @example\n     * const processor = postcss([autoprefixer, precss]);\n     * processor.plugins.length //=> 2\n     */\n    this.plugins = this.normalize(plugins);\n  }\n\n  /**\n   * Adds a plugin to be used as a CSS processor.\n   *\n   * PostCSS plugin can be in 4 formats:\n   * * A plugin created by {@link postcss.plugin} method.\n   * * A function. PostCSS will pass the function a @{link Root}\n   *   as the first argument and current {@link Result} instance\n   *   as the second.\n   * * An object with a `postcss` method. PostCSS will use that method\n   *   as described in #2.\n   * * Another {@link Processor} instance. PostCSS will copy plugins\n   *   from that instance into this one.\n   *\n   * Plugins can also be added by passing them as arguments when creating\n   * a `postcss` instance (see [`postcss(plugins)`]).\n   *\n   * Asynchronous plugins should return a `Promise` instance.\n   *\n   * @param {Plugin|pluginFunction|Processor} plugin - PostCSS plugin\n   *                                                   or {@link Processor}\n   *                                                   with plugins\n   *\n   * @example\n   * const processor = postcss()\n   *   .use(autoprefixer)\n   *   .use(precss);\n   *\n   * @return {Processes} current processor to make methods chain\n   */\n\n\n  Processor.prototype.use = function use(plugin) {\n    this.plugins = this.plugins.concat(this.normalize([plugin]));\n    return this;\n  };\n\n  /**\n   * Parses source CSS and returns a {@link LazyResult} Promise proxy.\n   * Because some plugins can be asynchronous it doesn’t make\n   * any transformations. Transformations will be applied\n   * in the {@link LazyResult} methods.\n   *\n   * @param {string|toString|Result} css - String with input CSS or\n   *                                       any object with a `toString()`\n   *                                       method, like a Buffer.\n   *                                       Optionally, send a {@link Result}\n   *                                       instance and the processor will\n   *                                       take the {@link Root} from it.\n   * @param {processOptions} [opts]      - options\n   *\n   * @return {LazyResult} Promise proxy\n   *\n   * @example\n   * processor.process(css, { from: 'a.css', to: 'a.out.css' })\n   *   .then(result => {\n   *      console.log(result.css);\n   *   });\n   */\n\n\n  Processor.prototype.process = function process(css) {\n    var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    return new _lazyResult2.default(this, css, opts);\n  };\n\n  Processor.prototype.normalize = function normalize(plugins) {\n    var normalized = [];\n    for (var _iterator = plugins, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n      var _ref;\n\n      if (_isArray) {\n        if (_i >= _iterator.length) break;\n        _ref = _iterator[_i++];\n      } else {\n        _i = _iterator.next();\n        if (_i.done) break;\n        _ref = _i.value;\n      }\n\n      var i = _ref;\n\n      if (i.postcss) i = i.postcss;\n\n      if ((typeof i === 'undefined' ? 'undefined' : _typeof(i)) === 'object' && Array.isArray(i.plugins)) {\n        normalized = normalized.concat(i.plugins);\n      } else if (typeof i === 'function') {\n        normalized.push(i);\n      } else if ((typeof i === 'undefined' ? 'undefined' : _typeof(i)) === 'object' && (i.parse || i.stringify)) {\n        throw new Error('PostCSS syntaxes cannot be used as plugins. ' + 'Instead, please use one of the ' + 'syntax/parser/stringifier options as ' + 'outlined in your PostCSS ' + 'runner documentation.');\n      } else {\n        throw new Error(i + ' is not a PostCSS plugin');\n      }\n    }\n    return normalized;\n  };\n\n  return Processor;\n}();\n\nexports.default = Processor;\n\n/**\n * @callback builder\n * @param {string} part          - part of generated CSS connected to this node\n * @param {Node}   node          - AST node\n * @param {\"start\"|\"end\"} [type] - node’s part type\n */\n\n/**\n * @callback parser\n *\n * @param {string|toString} css   - string with input CSS or any object\n *                                  with toString() method, like a Buffer\n * @param {processOptions} [opts] - options with only `from` and `map` keys\n *\n * @return {Root} PostCSS AST\n */\n\n/**\n * @callback stringifier\n *\n * @param {Node} node       - start node for stringifing. Usually {@link Root}.\n * @param {builder} builder - function to concatenate CSS from node’s parts\n *                            or generate string and source map\n *\n * @return {void}\n */\n\n/**\n * @typedef {object} syntax\n * @property {parser} parse          - function to generate AST by string\n * @property {stringifier} stringify - function to generate string by AST\n */\n\n/**\n * @typedef {object} toString\n * @property {function} toString\n */\n\n/**\n * @callback pluginFunction\n * @param {Root} root     - parsed input CSS\n * @param {Result} result - result to set warnings or check other plugins\n */\n\n/**\n * @typedef {object} Plugin\n * @property {function} postcss - PostCSS plugin function\n */\n\n/**\n * @typedef {object} processOptions\n * @property {string} from             - the path of the CSS source file.\n *                                       You should always set `from`,\n *                                       because it is used in source map\n *                                       generation and syntax error messages.\n * @property {string} to               - the path where you’ll put the output\n *                                       CSS file. You should always set `to`\n *                                       to generate correct source maps.\n * @property {parser} parser           - function to generate AST by string\n * @property {stringifier} stringifier - class to generate string by AST\n * @property {syntax} syntax           - object with `parse` and `stringify`\n * @property {object} map              - source map options\n * @property {boolean} map.inline                    - does source map should\n *                                                     be embedded in the output\n *                                                     CSS as a base64-encoded\n *                                                     comment\n * @property {string|object|false|function} map.prev - source map content\n *                                                     from a previous\n *                                                     processing step\n *                                                     (for example, Sass).\n *                                                     PostCSS will try to find\n *                                                     previous map\n *                                                     automatically, so you\n *                                                     could disable it by\n *                                                     `false` value.\n * @property {boolean} map.sourcesContent            - does PostCSS should set\n *                                                     the origin content to map\n * @property {string|false} map.annotation           - does PostCSS should set\n *                                                     annotation comment to map\n * @property {string} map.from                       - override `from` in map’s\n *                                                     `sources`\n */\n\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 144 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _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; }; }();\n\nvar _warning = __webpack_require__(147);\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Provides the result of the PostCSS transformations.\n *\n * A Result instance is returned by {@link LazyResult#then}\n * or {@link Root#toResult} methods.\n *\n * @example\n * postcss([cssnext]).process(css).then(function (result) {\n *    console.log(result.css);\n * });\n *\n * @example\n * var result2 = postcss.parse(css).toResult();\n */\nvar Result = function () {\n\n  /**\n   * @param {Processor} processor - processor used for this transformation.\n   * @param {Root}      root      - Root node after all transformations.\n   * @param {processOptions} opts - options from the {@link Processor#process}\n   *                                or {@link Root#toResult}\n   */\n  function Result(processor, root, opts) {\n    _classCallCheck(this, Result);\n\n    /**\n     * @member {Processor} - The Processor instance used\n     *                       for this transformation.\n     *\n     * @example\n     * for ( let plugin of result.processor.plugins) {\n     *   if ( plugin.postcssPlugin === 'postcss-bad' ) {\n     *     throw 'postcss-good is incompatible with postcss-bad';\n     *   }\n     * });\n     */\n    this.processor = processor;\n    /**\n     * @member {Message[]} - Contains messages from plugins\n     *                       (e.g., warnings or custom messages).\n     *                       Each message should have type\n     *                       and plugin properties.\n     *\n     * @example\n     * postcss.plugin('postcss-min-browser', () => {\n     *   return (root, result) => {\n     *     var browsers = detectMinBrowsersByCanIUse(root);\n     *     result.messages.push({\n     *       type:    'min-browser',\n     *       plugin:  'postcss-min-browser',\n     *       browsers: browsers\n     *     });\n     *   };\n     * });\n     */\n    this.messages = [];\n    /**\n     * @member {Root} - Root node after all transformations.\n     *\n     * @example\n     * root.toResult().root == root;\n     */\n    this.root = root;\n    /**\n     * @member {processOptions} - Options from the {@link Processor#process}\n     *                            or {@link Root#toResult} call\n     *                            that produced this Result instance.\n     *\n     * @example\n     * root.toResult(opts).opts == opts;\n     */\n    this.opts = opts;\n    /**\n     * @member {string} - A CSS string representing of {@link Result#root}.\n     *\n     * @example\n     * postcss.parse('a{}').toResult().css //=> \"a{}\"\n     */\n    this.css = undefined;\n    /**\n     * @member {SourceMapGenerator} - An instance of `SourceMapGenerator`\n     *                                class from the `source-map` library,\n     *                                representing changes\n     *                                to the {@link Result#root} instance.\n     *\n     * @example\n     * result.map.toJSON() //=> { version: 3, file: 'a.css', … }\n     *\n     * @example\n     * if ( result.map ) {\n     *   fs.writeFileSync(result.opts.to + '.map', result.map.toString());\n     * }\n     */\n    this.map = undefined;\n  }\n\n  /**\n   * Returns for @{link Result#css} content.\n   *\n   * @example\n   * result + '' === result.css\n   *\n   * @return {string} string representing of {@link Result#root}\n   */\n\n\n  Result.prototype.toString = function toString() {\n    return this.css;\n  };\n\n  /**\n   * Creates an instance of {@link Warning} and adds it\n   * to {@link Result#messages}.\n   *\n   * @param {string} text        - warning message\n   * @param {Object} [opts]      - warning options\n   * @param {Node}   opts.node   - CSS node that caused the warning\n   * @param {string} opts.word   - word in CSS source that caused the warning\n   * @param {number} opts.index  - index in CSS node string that caused\n   *                               the warning\n   * @param {string} opts.plugin - name of the plugin that created\n   *                               this warning. {@link Result#warn} fills\n   *                               this property automatically.\n   *\n   * @return {Warning} created warning\n   */\n\n\n  Result.prototype.warn = function warn(text) {\n    var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    if (!opts.plugin) {\n      if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n        opts.plugin = this.lastPlugin.postcssPlugin;\n      }\n    }\n\n    var warning = new _warning2.default(text, opts);\n    this.messages.push(warning);\n\n    return warning;\n  };\n\n  /**\n   * Returns warnings from plugins. Filters {@link Warning} instances\n   * from {@link Result#messages}.\n   *\n   * @example\n   * result.warnings().forEach(warn => {\n   *   console.warn(warn.toString());\n   * });\n   *\n   * @return {Warning[]} warnings from plugins\n   */\n\n\n  Result.prototype.warnings = function warnings() {\n    return this.messages.filter(function (i) {\n      return i.type === 'warning';\n    });\n  };\n\n  /**\n   * An alias for the {@link Result#css} property.\n   * Use it with syntaxes that generate non-CSS output.\n   * @type {string}\n   *\n   * @example\n   * result.css === result.content;\n   */\n\n\n  _createClass(Result, [{\n    key: 'content',\n    get: function get() {\n      return this.css;\n    }\n  }]);\n\n  return Result;\n}();\n\nexports.default = Result;\n\n/**\n * @typedef  {object} Message\n * @property {string} type   - message type\n * @property {string} plugin - source PostCSS plugin name\n */\n\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 145 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _chalk = __webpack_require__(78);\n\nvar _chalk2 = _interopRequireDefault(_chalk);\n\nvar _tokenize = __webpack_require__(77);\n\nvar _tokenize2 = _interopRequireDefault(_tokenize);\n\nvar _input = __webpack_require__(25);\n\nvar _input2 = _interopRequireDefault(_input);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar colors = new _chalk2.default.constructor({ enabled: true });\n\nvar HIGHLIGHT_THEME = {\n    'brackets': colors.cyan,\n    'at-word': colors.cyan,\n    'call': colors.cyan,\n    'comment': colors.gray,\n    'string': colors.green,\n    'class': colors.yellow,\n    'hash': colors.magenta,\n    '(': colors.cyan,\n    ')': colors.cyan,\n    '{': colors.yellow,\n    '}': colors.yellow,\n    '[': colors.yellow,\n    ']': colors.yellow,\n    ':': colors.yellow,\n    ';': colors.yellow\n};\n\nfunction getTokenType(_ref, processor) {\n    var type = _ref[0],\n        value = _ref[1];\n\n    if (type === 'word') {\n        if (value[0] === '.') {\n            return 'class';\n        }\n        if (value[0] === '#') {\n            return 'hash';\n        }\n    }\n\n    if (!processor.endOfFile()) {\n        var next = processor.nextToken();\n        processor.back(next);\n        if (next[0] === 'brackets' || next[0] === '(') return 'call';\n    }\n\n    return type;\n}\n\nfunction terminalHighlight(css) {\n    var processor = (0, _tokenize2.default)(new _input2.default(css), { ignoreErrors: true });\n    var result = '';\n\n    var _loop = function _loop() {\n        var token = processor.nextToken();\n        var color = HIGHLIGHT_THEME[getTokenType(token, processor)];\n        if (color) {\n            result += token[1].split(/\\r?\\n/).map(function (i) {\n                return color(i);\n            }).join('\\n');\n        } else {\n            result += token[1];\n        }\n    };\n\n    while (!processor.endOfFile()) {\n        _loop();\n    }\n    return result;\n}\n\nexports.default = terminalHighlight;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 146 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = warnOnce;\nvar printed = {};\n\nfunction warnOnce(message) {\n    if (printed[message]) return;\n    printed[message] = true;\n\n    if (typeof console !== 'undefined' && console.warn) console.warn(message);\n}\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 147 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Represents a plugin’s warning. It can be created using {@link Node#warn}.\n *\n * @example\n * if ( decl.important ) {\n *     decl.warn(result, 'Avoid !important', { word: '!important' });\n * }\n */\nvar Warning = function () {\n\n  /**\n   * @param {string} text        - warning message\n   * @param {Object} [opts]      - warning options\n   * @param {Node}   opts.node   - CSS node that caused the warning\n   * @param {string} opts.word   - word in CSS source that caused the warning\n   * @param {number} opts.index  - index in CSS node string that caused\n   *                               the warning\n   * @param {string} opts.plugin - name of the plugin that created\n   *                               this warning. {@link Result#warn} fills\n   *                               this property automatically.\n   */\n  function Warning(text) {\n    var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Warning);\n\n    /**\n     * @member {string} - Type to filter warnings from\n     *                    {@link Result#messages}. Always equal\n     *                    to `\"warning\"`.\n     *\n     * @example\n     * const nonWarning = result.messages.filter(i => i.type !== 'warning')\n     */\n    this.type = 'warning';\n    /**\n     * @member {string} - The warning message.\n     *\n     * @example\n     * warning.text //=> 'Try to avoid !important'\n     */\n    this.text = text;\n\n    if (opts.node && opts.node.source) {\n      var pos = opts.node.positionBy(opts);\n      /**\n       * @member {number} - Line in the input file\n       *                    with this warning’s source\n       *\n       * @example\n       * warning.line //=> 5\n       */\n      this.line = pos.line;\n      /**\n       * @member {number} - Column in the input file\n       *                    with this warning’s source.\n       *\n       * @example\n       * warning.column //=> 6\n       */\n      this.column = pos.column;\n    }\n\n    for (var opt in opts) {\n      this[opt] = opts[opt];\n    }\n  }\n\n  /**\n   * Returns a warning position and message.\n   *\n   * @example\n   * warning.toString() //=> 'postcss-lint:a.css:10:14: Avoid !important'\n   *\n   * @return {string} warning position and message\n   */\n\n\n  Warning.prototype.toString = function toString() {\n    if (this.node) {\n      return this.node.error(this.text, {\n        plugin: this.plugin,\n        index: this.index,\n        word: this.word\n      }).message;\n    } else if (this.plugin) {\n      return this.plugin + ': ' + this.text;\n    } else {\n      return this.text;\n    }\n  };\n\n  /**\n   * @memberof Warning#\n   * @member {string} plugin - The name of the plugin that created\n   *                           it will fill this property automatically.\n   *                           this warning. When you call {@link Node#warn}\n   *\n   * @example\n   * warning.plugin //=> 'postcss-important'\n   */\n\n  /**\n   * @memberof Warning#\n   * @member {Node} node - Contains the CSS node that caused the warning.\n   *\n   * @example\n   * warning.node.toString() //=> 'color: white !important'\n   */\n\n  return Warning;\n}();\n\nexports.default = Warning;\nmodule.exports = exports['default'];\n\n\n\n/***/ }),\n/* 148 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(process) {\nvar argv = process.argv;\n\nvar terminator = argv.indexOf('--');\nvar hasFlag = function (flag) {\n\tflag = '--' + flag;\n\tvar pos = argv.indexOf(flag);\n\treturn pos !== -1 && (terminator !== -1 ? pos < terminator : true);\n};\n\nmodule.exports = (function () {\n\tif ('FORCE_COLOR' in process.env) {\n\t\treturn true;\n\t}\n\n\tif (hasFlag('no-color') ||\n\t\thasFlag('no-colors') ||\n\t\thasFlag('color=false')) {\n\t\treturn false;\n\t}\n\n\tif (hasFlag('color') ||\n\t\thasFlag('colors') ||\n\t\thasFlag('color=true') ||\n\t\thasFlag('color=always')) {\n\t\treturn true;\n\t}\n\n\tif (process.stdout && !process.stdout.isTTY) {\n\t\treturn false;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\treturn true;\n\t}\n\n\tif ('COLORTERM' in process.env) {\n\t\treturn true;\n\t}\n\n\tif (process.env.TERM === 'dumb') {\n\t\treturn false;\n\t}\n\n\tif (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) {\n\t\treturn true;\n\t}\n\n\treturn false;\n})();\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7)));\n\n/***/ }),\n/* 149 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nmodule.exports = false;\n\n\n/***/ }),\n/* 150 */\n/***/ (function(module, exports) {\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n  if (0 <= number && number < intToCharMap.length) {\n    return intToCharMap[number];\n  }\n  throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n  var bigA = 65;     // 'A'\n  var bigZ = 90;     // 'Z'\n\n  var littleA = 97;  // 'a'\n  var littleZ = 122; // 'z'\n\n  var zero = 48;     // '0'\n  var nine = 57;     // '9'\n\n  var plus = 43;     // '+'\n  var slash = 47;    // '/'\n\n  var littleOffset = 26;\n  var numberOffset = 52;\n\n  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n  if (bigA <= charCode && charCode <= bigZ) {\n    return (charCode - bigA);\n  }\n\n  // 26 - 51: abcdefghijklmnopqrstuvwxyz\n  if (littleA <= charCode && charCode <= littleZ) {\n    return (charCode - littleA + littleOffset);\n  }\n\n  // 52 - 61: 0123456789\n  if (zero <= charCode && charCode <= nine) {\n    return (charCode - zero + numberOffset);\n  }\n\n  // 62: +\n  if (charCode == plus) {\n    return 62;\n  }\n\n  // 63: /\n  if (charCode == slash) {\n    return 63;\n  }\n\n  // Invalid base64 digit.\n  return -1;\n};\n\n\n/***/ }),\n/* 151 */\n/***/ (function(module, exports) {\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n  // This function terminates when one of the following is true:\n  //\n  //   1. We find the exact element we are looking for.\n  //\n  //   2. We did not find the exact element, but we can return the index of\n  //      the next-closest element.\n  //\n  //   3. We did not find the exact element, and there is no next-closest\n  //      element than the one we are searching for, so we return -1.\n  var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n  var cmp = aCompare(aNeedle, aHaystack[mid], true);\n  if (cmp === 0) {\n    // Found the element we are looking for.\n    return mid;\n  }\n  else if (cmp > 0) {\n    // Our needle is greater than aHaystack[mid].\n    if (aHigh - mid > 1) {\n      // The element is in the upper half.\n      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // The exact needle element was not found in this haystack. Determine if\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return aHigh < aHaystack.length ? aHigh : -1;\n    } else {\n      return mid;\n    }\n  }\n  else {\n    // Our needle is less than aHaystack[mid].\n    if (mid - aLow > 1) {\n      // The element is in the lower half.\n      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return mid;\n    } else {\n      return aLow < 0 ? -1 : aLow;\n    }\n  }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n *     array and returns -1, 0, or 1 depending on whether the needle is less\n *     than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n  if (aHaystack.length === 0) {\n    return -1;\n  }\n\n  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n  if (index < 0) {\n    return -1;\n  }\n\n  // We have found either the exact element, or the next-closest element than\n  // the one we are searching for. However, there may be more than one such\n  // element. Make sure we always return the smallest of these.\n  while (index - 1 >= 0) {\n    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n      break;\n    }\n    --index;\n  }\n\n  return index;\n};\n\n\n/***/ }),\n/* 152 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = __webpack_require__(11);\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n  // Optimized for most common case\n  var lineA = mappingA.generatedLine;\n  var lineB = mappingB.generatedLine;\n  var columnA = mappingA.generatedColumn;\n  var columnB = mappingB.generatedColumn;\n  return lineB > lineA || lineB == lineA && columnB >= columnA ||\n         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n  this._array = [];\n  this._sorted = true;\n  // Serves as infimum\n  this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n  function MappingList_forEach(aCallback, aThisArg) {\n    this._array.forEach(aCallback, aThisArg);\n  };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n  if (generatedPositionAfter(this._last, aMapping)) {\n    this._last = aMapping;\n    this._array.push(aMapping);\n  } else {\n    this._sorted = false;\n    this._array.push(aMapping);\n  }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n  if (!this._sorted) {\n    this._array.sort(util.compareByGeneratedPositionsInflated);\n    this._sorted = true;\n  }\n  return this._array;\n};\n\nexports.MappingList = MappingList;\n\n\n/***/ }),\n/* 153 */\n/***/ (function(module, exports) {\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n *        The array.\n * @param {Number} x\n *        The index of the first item.\n * @param {Number} y\n *        The index of the second item.\n */\nfunction swap(ary, x, y) {\n  var temp = ary[x];\n  ary[x] = ary[y];\n  ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n *        The lower bound on the range.\n * @param {Number} high\n *        The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n  return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n * @param {Number} p\n *        Start index of the array\n * @param {Number} r\n *        End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n  // If our lower bound is less than our upper bound, we (1) partition the\n  // array into two pieces and (2) recurse on each half. If it is not, this is\n  // the empty array and our base case.\n\n  if (p < r) {\n    // (1) Partitioning.\n    //\n    // The partitioning chooses a pivot between `p` and `r` and moves all\n    // elements that are less than or equal to the pivot to the before it, and\n    // all the elements that are greater than it after it. The effect is that\n    // once partition is done, the pivot is in the exact place it will be when\n    // the array is put in sorted order, and it will not need to be moved\n    // again. This runs in O(n) time.\n\n    // Always choose a random pivot so that an input array which is reverse\n    // sorted does not cause O(n^2) running time.\n    var pivotIndex = randomIntInRange(p, r);\n    var i = p - 1;\n\n    swap(ary, pivotIndex, r);\n    var pivot = ary[r];\n\n    // Immediately after `j` is incremented in this loop, the following hold\n    // true:\n    //\n    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.\n    //\n    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n    for (var j = p; j < r; j++) {\n      if (comparator(ary[j], pivot) <= 0) {\n        i += 1;\n        swap(ary, i, j);\n      }\n    }\n\n    swap(ary, i + 1, j);\n    var q = i + 1;\n\n    // (2) Recurse on each half.\n\n    doQuickSort(ary, comparator, p, q - 1);\n    doQuickSort(ary, comparator, q + 1, r);\n  }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n  doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n\n\n/***/ }),\n/* 154 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = __webpack_require__(11);\nvar binarySearch = __webpack_require__(151);\nvar ArraySet = __webpack_require__(79).ArraySet;\nvar base64VLQ = __webpack_require__(80);\nvar quickSort = __webpack_require__(153).quickSort;\n\nfunction SourceMapConsumer(aSourceMap) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n  }\n\n  return sourceMap.sections != null\n    ? new IndexedSourceMapConsumer(sourceMap)\n    : new BasicSourceMapConsumer(sourceMap);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap) {\n  return BasicSourceMapConsumer.fromSourceMap(aSourceMap);\n};\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n//     {\n//       generatedLine: The line number in the generated code,\n//       generatedColumn: The column number in the generated code,\n//       source: The path to the original source file that generated this\n//               chunk of code,\n//       originalLine: The line number in the original source that\n//                     corresponds to this chunk of generated code,\n//       originalColumn: The column number in the original source that\n//                       corresponds to this chunk of generated code,\n//       name: The name of the original symbol which generated this chunk of\n//             code.\n//     }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n  get: function () {\n    if (!this.__generatedMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__generatedMappings;\n  }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n  get: function () {\n    if (!this.__originalMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__originalMappings;\n  }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n    var c = aStr.charAt(index);\n    return c === \";\" || c === \",\";\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    throw new Error(\"Subclasses must implement _parseMappings\");\n  };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n *        The function that is called with each mapping.\n * @param Object aContext\n *        Optional. If specified, this object will be the value of `this` every\n *        time that `aCallback` is called.\n * @param aOrder\n *        Either `SourceMapConsumer.GENERATED_ORDER` or\n *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n *        iterate over the mappings sorted by the generated file's line/column\n *        order or the original's source/line/column order, respectively. Defaults to\n *        `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n    var context = aContext || null;\n    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n    var mappings;\n    switch (order) {\n    case SourceMapConsumer.GENERATED_ORDER:\n      mappings = this._generatedMappings;\n      break;\n    case SourceMapConsumer.ORIGINAL_ORDER:\n      mappings = this._originalMappings;\n      break;\n    default:\n      throw new Error(\"Unknown order of iteration.\");\n    }\n\n    var sourceRoot = this.sourceRoot;\n    mappings.map(function (mapping) {\n      var source = mapping.source === null ? null : this._sources.at(mapping.source);\n      if (source != null && sourceRoot != null) {\n        source = util.join(sourceRoot, source);\n      }\n      return {\n        source: source,\n        generatedLine: mapping.generatedLine,\n        generatedColumn: mapping.generatedColumn,\n        originalLine: mapping.originalLine,\n        originalColumn: mapping.originalColumn,\n        name: mapping.name === null ? null : this._names.at(mapping.name)\n      };\n    }, this).forEach(aCallback, context);\n  };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.\n *   - column: Optional. the column number in the original source.\n *\n * and an array of objects is returned, each with the following properties:\n *\n *   - line: The line number in the generated source, or null.\n *   - column: The column number in the generated source, or null.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n    var line = util.getArg(aArgs, 'line');\n\n    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n    // returns the index of the closest mapping less than the needle. By\n    // setting needle.originalColumn to 0, we thus find the last mapping for\n    // the given line, provided such a mapping exists.\n    var needle = {\n      source: util.getArg(aArgs, 'source'),\n      originalLine: line,\n      originalColumn: util.getArg(aArgs, 'column', 0)\n    };\n\n    if (this.sourceRoot != null) {\n      needle.source = util.relative(this.sourceRoot, needle.source);\n    }\n    if (!this._sources.has(needle.source)) {\n      return [];\n    }\n    needle.source = this._sources.indexOf(needle.source);\n\n    var mappings = [];\n\n    var index = this._findMapping(needle,\n                                  this._originalMappings,\n                                  \"originalLine\",\n                                  \"originalColumn\",\n                                  util.compareByOriginalPositions,\n                                  binarySearch.LEAST_UPPER_BOUND);\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (aArgs.column === undefined) {\n        var originalLine = mapping.originalLine;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we found. Since\n        // mappings are sorted, this is guaranteed to find all mappings for\n        // the line we found.\n        while (mapping && mapping.originalLine === originalLine) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      } else {\n        var originalColumn = mapping.originalColumn;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we were searching for.\n        // Since mappings are sorted, this is guaranteed to find all mappings for\n        // the line we are searching for.\n        while (mapping &&\n               mapping.originalLine === line &&\n               mapping.originalColumn == originalColumn) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      }\n    }\n\n    return mappings;\n  };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The only parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - sources: An array of URLs to the original source files.\n *   - names: An array of identifiers which can be referrenced by individual mappings.\n *   - sourceRoot: Optional. The URL root from which all sources are relative.\n *   - sourcesContent: Optional. An array of contents of the original source files.\n *   - mappings: A string of base64 VLQs which contain the actual mappings.\n *   - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n *     {\n *       version : 3,\n *       file: \"out.js\",\n *       sourceRoot : \"\",\n *       sources: [\"foo.js\", \"bar.js\"],\n *       names: [\"src\", \"maps\", \"are\", \"fun\"],\n *       mappings: \"AA,AB;;ABCDE;\"\n *     }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sources = util.getArg(sourceMap, 'sources');\n  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n  // requires the array) to play nice here.\n  var names = util.getArg(sourceMap, 'names', []);\n  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n  var mappings = util.getArg(sourceMap, 'mappings');\n  var file = util.getArg(sourceMap, 'file', null);\n\n  // Once again, Sass deviates from the spec and supplies the version as a\n  // string rather than a number, so we use loose equality checking here.\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  sources = sources\n    .map(String)\n    // Some source maps produce relative source paths like \"./foo.js\" instead of\n    // \"foo.js\".  Normalize these first so that future comparisons will succeed.\n    // See bugzil.la/1090768.\n    .map(util.normalize)\n    // Always ensure that absolute sources are internally stored relative to\n    // the source root, if the source root is absolute. Not doing this would\n    // be particularly problematic when the source root is a prefix of the\n    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n    .map(function (source) {\n      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n        ? util.relative(sourceRoot, source)\n        : source;\n    });\n\n  // Pass `true` below to allow duplicate names and sources. While source maps\n  // are intended to be compressed and deduplicated, the TypeScript compiler\n  // sometimes generates source maps with duplicates in them. See Github issue\n  // #72 and bugzil.la/889492.\n  this._names = ArraySet.fromArray(names.map(String), true);\n  this._sources = ArraySet.fromArray(sources, true);\n\n  this.sourceRoot = sourceRoot;\n  this.sourcesContent = sourcesContent;\n  this._mappings = mappings;\n  this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n *        The source map that will be consumed.\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n  function SourceMapConsumer_fromSourceMap(aSourceMap) {\n    var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n    smc.sourceRoot = aSourceMap._sourceRoot;\n    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n                                                            smc.sourceRoot);\n    smc.file = aSourceMap._file;\n\n    // Because we are modifying the entries (by converting string sources and\n    // names to indices into the sources and names ArraySets), we have to make\n    // a copy of the entry or else bad things happen. Shared mutable state\n    // strikes again! See github issue #191.\n\n    var generatedMappings = aSourceMap._mappings.toArray().slice();\n    var destGeneratedMappings = smc.__generatedMappings = [];\n    var destOriginalMappings = smc.__originalMappings = [];\n\n    for (var i = 0, length = generatedMappings.length; i < length; i++) {\n      var srcMapping = generatedMappings[i];\n      var destMapping = new Mapping;\n      destMapping.generatedLine = srcMapping.generatedLine;\n      destMapping.generatedColumn = srcMapping.generatedColumn;\n\n      if (srcMapping.source) {\n        destMapping.source = sources.indexOf(srcMapping.source);\n        destMapping.originalLine = srcMapping.originalLine;\n        destMapping.originalColumn = srcMapping.originalColumn;\n\n        if (srcMapping.name) {\n          destMapping.name = names.indexOf(srcMapping.name);\n        }\n\n        destOriginalMappings.push(destMapping);\n      }\n\n      destGeneratedMappings.push(destMapping);\n    }\n\n    quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n    return smc;\n  };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    return this._sources.toArray().map(function (s) {\n      return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;\n    }, this);\n  }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n  this.generatedLine = 0;\n  this.generatedColumn = 0;\n  this.source = null;\n  this.originalLine = null;\n  this.originalColumn = null;\n  this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    var generatedLine = 1;\n    var previousGeneratedColumn = 0;\n    var previousOriginalLine = 0;\n    var previousOriginalColumn = 0;\n    var previousSource = 0;\n    var previousName = 0;\n    var length = aStr.length;\n    var index = 0;\n    var cachedSegments = {};\n    var temp = {};\n    var originalMappings = [];\n    var generatedMappings = [];\n    var mapping, str, segment, end, value;\n\n    while (index < length) {\n      if (aStr.charAt(index) === ';') {\n        generatedLine++;\n        index++;\n        previousGeneratedColumn = 0;\n      }\n      else if (aStr.charAt(index) === ',') {\n        index++;\n      }\n      else {\n        mapping = new Mapping();\n        mapping.generatedLine = generatedLine;\n\n        // Because each offset is encoded relative to the previous one,\n        // many segments often have the same encoding. We can exploit this\n        // fact by caching the parsed variable length fields of each segment,\n        // allowing us to avoid a second parse if we encounter the same\n        // segment again.\n        for (end = index; end < length; end++) {\n          if (this._charIsMappingSeparator(aStr, end)) {\n            break;\n          }\n        }\n        str = aStr.slice(index, end);\n\n        segment = cachedSegments[str];\n        if (segment) {\n          index += str.length;\n        } else {\n          segment = [];\n          while (index < end) {\n            base64VLQ.decode(aStr, index, temp);\n            value = temp.value;\n            index = temp.rest;\n            segment.push(value);\n          }\n\n          if (segment.length === 2) {\n            throw new Error('Found a source, but no line and column');\n          }\n\n          if (segment.length === 3) {\n            throw new Error('Found a source and line, but no column');\n          }\n\n          cachedSegments[str] = segment;\n        }\n\n        // Generated column.\n        mapping.generatedColumn = previousGeneratedColumn + segment[0];\n        previousGeneratedColumn = mapping.generatedColumn;\n\n        if (segment.length > 1) {\n          // Original source.\n          mapping.source = previousSource + segment[1];\n          previousSource += segment[1];\n\n          // Original line.\n          mapping.originalLine = previousOriginalLine + segment[2];\n          previousOriginalLine = mapping.originalLine;\n          // Lines are stored 0-based\n          mapping.originalLine += 1;\n\n          // Original column.\n          mapping.originalColumn = previousOriginalColumn + segment[3];\n          previousOriginalColumn = mapping.originalColumn;\n\n          if (segment.length > 4) {\n            // Original name.\n            mapping.name = previousName + segment[4];\n            previousName += segment[4];\n          }\n        }\n\n        generatedMappings.push(mapping);\n        if (typeof mapping.originalLine === 'number') {\n          originalMappings.push(mapping);\n        }\n      }\n    }\n\n    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n    this.__generatedMappings = generatedMappings;\n\n    quickSort(originalMappings, util.compareByOriginalPositions);\n    this.__originalMappings = originalMappings;\n  };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n                                         aColumnName, aComparator, aBias) {\n    // To return the position we are searching for, we must first find the\n    // mapping for the given position and then return the opposite position it\n    // points to. Because the mappings are sorted, we can use binary search to\n    // find the best mapping.\n\n    if (aNeedle[aLineName] <= 0) {\n      throw new TypeError('Line must be greater than or equal to 1, got '\n                          + aNeedle[aLineName]);\n    }\n    if (aNeedle[aColumnName] < 0) {\n      throw new TypeError('Column must be greater than or equal to 0, got '\n                          + aNeedle[aColumnName]);\n    }\n\n    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n  };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n  function SourceMapConsumer_computeColumnSpans() {\n    for (var index = 0; index < this._generatedMappings.length; ++index) {\n      var mapping = this._generatedMappings[index];\n\n      // Mappings do not contain a field for the last generated columnt. We\n      // can come up with an optimistic estimate, however, by assuming that\n      // mappings are contiguous (i.e. given two consecutive mappings, the\n      // first mapping ends where the second one starts).\n      if (index + 1 < this._generatedMappings.length) {\n        var nextMapping = this._generatedMappings[index + 1];\n\n        if (mapping.generatedLine === nextMapping.generatedLine) {\n          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n          continue;\n        }\n      }\n\n      // The last mapping for each line spans the entire line.\n      mapping.lastGeneratedColumn = Infinity;\n    }\n  };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.\n *   - column: The column number in the generated source.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.\n *   - column: The column number in the original source, or null.\n *   - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n  function SourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._generatedMappings,\n      \"generatedLine\",\n      \"generatedColumn\",\n      util.compareByGeneratedPositionsDeflated,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._generatedMappings[index];\n\n      if (mapping.generatedLine === needle.generatedLine) {\n        var source = util.getArg(mapping, 'source', null);\n        if (source !== null) {\n          source = this._sources.at(source);\n          if (this.sourceRoot != null) {\n            source = util.join(this.sourceRoot, source);\n          }\n        }\n        var name = util.getArg(mapping, 'name', null);\n        if (name !== null) {\n          name = this._names.at(name);\n        }\n        return {\n          source: source,\n          line: util.getArg(mapping, 'originalLine', null),\n          column: util.getArg(mapping, 'originalColumn', null),\n          name: name\n        };\n      }\n    }\n\n    return {\n      source: null,\n      line: null,\n      column: null,\n      name: null\n    };\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function BasicSourceMapConsumer_hasContentsOfAllSources() {\n    if (!this.sourcesContent) {\n      return false;\n    }\n    return this.sourcesContent.length >= this._sources.size() &&\n      !this.sourcesContent.some(function (sc) { return sc == null; });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    if (!this.sourcesContent) {\n      return null;\n    }\n\n    if (this.sourceRoot != null) {\n      aSource = util.relative(this.sourceRoot, aSource);\n    }\n\n    if (this._sources.has(aSource)) {\n      return this.sourcesContent[this._sources.indexOf(aSource)];\n    }\n\n    var url;\n    if (this.sourceRoot != null\n        && (url = util.urlParse(this.sourceRoot))) {\n      // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n      // many users. We can help them out when they expect file:// URIs to\n      // behave like it would if they were running a local HTTP server. See\n      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n      var fileUriAbsPath = aSource.replace(/^file:\\/\\//, \"\");\n      if (url.scheme == \"file\"\n          && this._sources.has(fileUriAbsPath)) {\n        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n      }\n\n      if ((!url.path || url.path == \"/\")\n          && this._sources.has(\"/\" + aSource)) {\n        return this.sourcesContent[this._sources.indexOf(\"/\" + aSource)];\n      }\n    }\n\n    // This function is used recursively from\n    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n    // don't want to throw if we can't find the source - we just want to\n    // return null, so we provide a flag to exit gracefully.\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.\n *   - column: The column number in the original source.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.\n *   - column: The column number in the generated source, or null.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n  function SourceMapConsumer_generatedPositionFor(aArgs) {\n    var source = util.getArg(aArgs, 'source');\n    if (this.sourceRoot != null) {\n      source = util.relative(this.sourceRoot, source);\n    }\n    if (!this._sources.has(source)) {\n      return {\n        line: null,\n        column: null,\n        lastColumn: null\n      };\n    }\n    source = this._sources.indexOf(source);\n\n    var needle = {\n      source: source,\n      originalLine: util.getArg(aArgs, 'line'),\n      originalColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._originalMappings,\n      \"originalLine\",\n      \"originalColumn\",\n      util.compareByOriginalPositions,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (mapping.source === needle.source) {\n        return {\n          line: util.getArg(mapping, 'generatedLine', null),\n          column: util.getArg(mapping, 'generatedColumn', null),\n          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n        };\n      }\n    }\n\n    return {\n      line: null,\n      column: null,\n      lastColumn: null\n    };\n  };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The only parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - file: Optional. The generated file this source map is associated with.\n *   - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n *   - offset: The offset into the original specified at which this section\n *       begins to apply, defined as an object with a \"line\" and \"column\"\n *       field.\n *   - map: A source map definition. This source map could also be indexed,\n *       but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n *  {\n *    version : 3,\n *    file: \"app.js\",\n *    sections: [{\n *      offset: {line:100, column:10},\n *      map: {\n *        version : 3,\n *        file: \"section.js\",\n *        sources: [\"foo.js\", \"bar.js\"],\n *        names: [\"src\", \"maps\", \"are\", \"fun\"],\n *        mappings: \"AAAA,E;;ABCDE;\"\n *      }\n *    }],\n *  }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sections = util.getArg(sourceMap, 'sections');\n\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n\n  var lastOffset = {\n    line: -1,\n    column: 0\n  };\n  this._sections = sections.map(function (s) {\n    if (s.url) {\n      // The url field will require support for asynchronicity.\n      // See https://github.com/mozilla/source-map/issues/16\n      throw new Error('Support for url field in sections not implemented.');\n    }\n    var offset = util.getArg(s, 'offset');\n    var offsetLine = util.getArg(offset, 'line');\n    var offsetColumn = util.getArg(offset, 'column');\n\n    if (offsetLine < lastOffset.line ||\n        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n      throw new Error('Section offsets must be ordered and non-overlapping.');\n    }\n    lastOffset = offset;\n\n    return {\n      generatedOffset: {\n        // The offset fields are 0-based, but we use 1-based indices when\n        // encoding/decoding from VLQ.\n        generatedLine: offsetLine + 1,\n        generatedColumn: offsetColumn + 1\n      },\n      consumer: new SourceMapConsumer(util.getArg(s, 'map'))\n    }\n  });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    var sources = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n        sources.push(this._sections[i].consumer.sources[j]);\n      }\n    }\n    return sources;\n  }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.\n *   - column: The column number in the generated source.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.\n *   - column: The column number in the original source, or null.\n *   - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    // Find the section containing the generated position we're trying to map\n    // to an original position.\n    var sectionIndex = binarySearch.search(needle, this._sections,\n      function(needle, section) {\n        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n        if (cmp) {\n          return cmp;\n        }\n\n        return (needle.generatedColumn -\n                section.generatedOffset.generatedColumn);\n      });\n    var section = this._sections[sectionIndex];\n\n    if (!section) {\n      return {\n        source: null,\n        line: null,\n        column: null,\n        name: null\n      };\n    }\n\n    return section.consumer.originalPositionFor({\n      line: needle.generatedLine -\n        (section.generatedOffset.generatedLine - 1),\n      column: needle.generatedColumn -\n        (section.generatedOffset.generatedLine === needle.generatedLine\n         ? section.generatedOffset.generatedColumn - 1\n         : 0),\n      bias: aArgs.bias\n    });\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n    return this._sections.every(function (s) {\n      return s.consumer.hasContentsOfAllSources();\n    });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      var content = section.consumer.sourceContentFor(aSource, true);\n      if (content) {\n        return content;\n      }\n    }\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.\n *   - column: The column number in the original source.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.\n *   - column: The column number in the generated source, or null.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      // Only consider this section if the requested source is in the list of\n      // sources of the consumer.\n      if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {\n        continue;\n      }\n      var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n      if (generatedPosition) {\n        var ret = {\n          line: generatedPosition.line +\n            (section.generatedOffset.generatedLine - 1),\n          column: generatedPosition.column +\n            (section.generatedOffset.generatedLine === generatedPosition.line\n             ? section.generatedOffset.generatedColumn - 1\n             : 0)\n        };\n        return ret;\n      }\n    }\n\n    return {\n      line: null,\n      column: null\n    };\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    this.__generatedMappings = [];\n    this.__originalMappings = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n      var sectionMappings = section.consumer._generatedMappings;\n      for (var j = 0; j < sectionMappings.length; j++) {\n        var mapping = sectionMappings[j];\n\n        var source = section.consumer._sources.at(mapping.source);\n        if (section.consumer.sourceRoot !== null) {\n          source = util.join(section.consumer.sourceRoot, source);\n        }\n        this._sources.add(source);\n        source = this._sources.indexOf(source);\n\n        var name = section.consumer._names.at(mapping.name);\n        this._names.add(name);\n        name = this._names.indexOf(name);\n\n        // The mappings coming from the consumer for the section have\n        // generated positions relative to the start of the section, so we\n        // need to offset them to be relative to the start of the concatenated\n        // generated file.\n        var adjustedMapping = {\n          source: source,\n          generatedLine: mapping.generatedLine +\n            (section.generatedOffset.generatedLine - 1),\n          generatedColumn: mapping.generatedColumn +\n            (section.generatedOffset.generatedLine === mapping.generatedLine\n            ? section.generatedOffset.generatedColumn - 1\n            : 0),\n          originalLine: mapping.originalLine,\n          originalColumn: mapping.originalColumn,\n          name: name\n        };\n\n        this.__generatedMappings.push(adjustedMapping);\n        if (typeof adjustedMapping.originalLine === 'number') {\n          this.__originalMappings.push(adjustedMapping);\n        }\n      }\n    }\n\n    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n    quickSort(this.__originalMappings, util.compareByOriginalPositions);\n  };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\n\n/***/ }),\n/* 155 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = __webpack_require__(81).SourceMapGenerator;\nvar util = __webpack_require__(11);\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n *        generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n  this.children = [];\n  this.sourceContents = {};\n  this.line = aLine == null ? null : aLine;\n  this.column = aColumn == null ? null : aColumn;\n  this.source = aSource == null ? null : aSource;\n  this.name = aName == null ? null : aName;\n  this[isSourceNode] = true;\n  if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n *        SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n    // The SourceNode we want to fill with the generated code\n    // and the SourceMap\n    var node = new SourceNode();\n\n    // All even indices of this array are one line of the generated code,\n    // while all odd indices are the newlines between two adjacent lines\n    // (since `REGEX_NEWLINE` captures its match).\n    // Processed fragments are removed from this array, by calling `shiftNextLine`.\n    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n    var shiftNextLine = function() {\n      var lineContents = remainingLines.shift();\n      // The last line of a file might not have a newline.\n      var newLine = remainingLines.shift() || \"\";\n      return lineContents + newLine;\n    };\n\n    // We need to remember the position of \"remainingLines\"\n    var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n    // The generate SourceNodes we need a code range.\n    // To extract it current and last mapping is used.\n    // Here we store the last mapping.\n    var lastMapping = null;\n\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      if (lastMapping !== null) {\n        // We add the code from \"lastMapping\" to \"mapping\":\n        // First check if there is a new line in between.\n        if (lastGeneratedLine < mapping.generatedLine) {\n          // Associate first line with \"lastMapping\"\n          addMappingWithCode(lastMapping, shiftNextLine());\n          lastGeneratedLine++;\n          lastGeneratedColumn = 0;\n          // The remaining code is added without mapping\n        } else {\n          // There is no new line in between.\n          // Associate the code between \"lastGeneratedColumn\" and\n          // \"mapping.generatedColumn\" with \"lastMapping\"\n          var nextLine = remainingLines[0];\n          var code = nextLine.substr(0, mapping.generatedColumn -\n                                        lastGeneratedColumn);\n          remainingLines[0] = nextLine.substr(mapping.generatedColumn -\n                                              lastGeneratedColumn);\n          lastGeneratedColumn = mapping.generatedColumn;\n          addMappingWithCode(lastMapping, code);\n          // No more remaining code, continue\n          lastMapping = mapping;\n          return;\n        }\n      }\n      // We add the generated code until the first mapping\n      // to the SourceNode without any mapping.\n      // Each line is added as separate string.\n      while (lastGeneratedLine < mapping.generatedLine) {\n        node.add(shiftNextLine());\n        lastGeneratedLine++;\n      }\n      if (lastGeneratedColumn < mapping.generatedColumn) {\n        var nextLine = remainingLines[0];\n        node.add(nextLine.substr(0, mapping.generatedColumn));\n        remainingLines[0] = nextLine.substr(mapping.generatedColumn);\n        lastGeneratedColumn = mapping.generatedColumn;\n      }\n      lastMapping = mapping;\n    }, this);\n    // We have processed all mappings.\n    if (remainingLines.length > 0) {\n      if (lastMapping) {\n        // Associate the remaining code in the current line with \"lastMapping\"\n        addMappingWithCode(lastMapping, shiftNextLine());\n      }\n      // and add the remaining lines without any mapping\n      node.add(remainingLines.join(\"\"));\n    }\n\n    // Copy sourcesContent into SourceNode\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aRelativePath != null) {\n          sourceFile = util.join(aRelativePath, sourceFile);\n        }\n        node.setSourceContent(sourceFile, content);\n      }\n    });\n\n    return node;\n\n    function addMappingWithCode(mapping, code) {\n      if (mapping === null || mapping.source === undefined) {\n        node.add(code);\n      } else {\n        var source = aRelativePath\n          ? util.join(aRelativePath, mapping.source)\n          : mapping.source;\n        node.add(new SourceNode(mapping.originalLine,\n                                mapping.originalColumn,\n                                source,\n                                code,\n                                mapping.name));\n      }\n    }\n  };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n  if (Array.isArray(aChunk)) {\n    aChunk.forEach(function (chunk) {\n      this.add(chunk);\n    }, this);\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    if (aChunk) {\n      this.children.push(aChunk);\n    }\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n  if (Array.isArray(aChunk)) {\n    for (var i = aChunk.length-1; i >= 0; i--) {\n      this.prepend(aChunk[i]);\n    }\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    this.children.unshift(aChunk);\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n  var chunk;\n  for (var i = 0, len = this.children.length; i < len; i++) {\n    chunk = this.children[i];\n    if (chunk[isSourceNode]) {\n      chunk.walk(aFn);\n    }\n    else {\n      if (chunk !== '') {\n        aFn(chunk, { source: this.source,\n                     line: this.line,\n                     column: this.column,\n                     name: this.name });\n      }\n    }\n  }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n  var newChildren;\n  var i;\n  var len = this.children.length;\n  if (len > 0) {\n    newChildren = [];\n    for (i = 0; i < len-1; i++) {\n      newChildren.push(this.children[i]);\n      newChildren.push(aSep);\n    }\n    newChildren.push(this.children[i]);\n    this.children = newChildren;\n  }\n  return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n  var lastChild = this.children[this.children.length - 1];\n  if (lastChild[isSourceNode]) {\n    lastChild.replaceRight(aPattern, aReplacement);\n  }\n  else if (typeof lastChild === 'string') {\n    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n  }\n  else {\n    this.children.push(''.replace(aPattern, aReplacement));\n  }\n  return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n  };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n  function SourceNode_walkSourceContents(aFn) {\n    for (var i = 0, len = this.children.length; i < len; i++) {\n      if (this.children[i][isSourceNode]) {\n        this.children[i].walkSourceContents(aFn);\n      }\n    }\n\n    var sources = Object.keys(this.sourceContents);\n    for (var i = 0, len = sources.length; i < len; i++) {\n      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n    }\n  };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n  var str = \"\";\n  this.walk(function (chunk) {\n    str += chunk;\n  });\n  return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n  var generated = {\n    code: \"\",\n    line: 1,\n    column: 0\n  };\n  var map = new SourceMapGenerator(aArgs);\n  var sourceMappingActive = false;\n  var lastOriginalSource = null;\n  var lastOriginalLine = null;\n  var lastOriginalColumn = null;\n  var lastOriginalName = null;\n  this.walk(function (chunk, original) {\n    generated.code += chunk;\n    if (original.source !== null\n        && original.line !== null\n        && original.column !== null) {\n      if(lastOriginalSource !== original.source\n         || lastOriginalLine !== original.line\n         || lastOriginalColumn !== original.column\n         || lastOriginalName !== original.name) {\n        map.addMapping({\n          source: original.source,\n          original: {\n            line: original.line,\n            column: original.column\n          },\n          generated: {\n            line: generated.line,\n            column: generated.column\n          },\n          name: original.name\n        });\n      }\n      lastOriginalSource = original.source;\n      lastOriginalLine = original.line;\n      lastOriginalColumn = original.column;\n      lastOriginalName = original.name;\n      sourceMappingActive = true;\n    } else if (sourceMappingActive) {\n      map.addMapping({\n        generated: {\n          line: generated.line,\n          column: generated.column\n        }\n      });\n      lastOriginalSource = null;\n      sourceMappingActive = false;\n    }\n    for (var idx = 0, length = chunk.length; idx < length; idx++) {\n      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n        generated.line++;\n        generated.column = 0;\n        // Mappings end at eol\n        if (idx + 1 === length) {\n          lastOriginalSource = null;\n          sourceMappingActive = false;\n        } else if (sourceMappingActive) {\n          map.addMapping({\n            source: original.source,\n            original: {\n              line: original.line,\n              column: original.column\n            },\n            generated: {\n              line: generated.line,\n              column: generated.column\n            },\n            name: original.name\n          });\n        }\n      } else {\n        generated.column++;\n      }\n    }\n  });\n  this.walkSourceContents(function (sourceFile, sourceContent) {\n    map.setSourceContent(sourceFile, sourceContent);\n  });\n\n  return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n\n\n/***/ }),\n/* 156 */\n/***/ (function(module, exports) {\n\nif (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  };\n}\n\n\n/***/ }),\n/* 157 */\n/***/ (function(module, exports) {\n\nmodule.exports = function isBuffer(arg) {\n  return arg && typeof arg === 'object'\n    && typeof arg.copy === 'function'\n    && typeof arg.fill === 'function'\n    && typeof arg.readUInt8 === 'function';\n};\n\n/***/ }),\n/* 158 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global, process) {// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n  // Allow for deprecating things in the process of starting up.\n  if (isUndefined(global.process)) {\n    return function() {\n      return exports.deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  if (process.noDeprecation === true) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n  if (isUndefined(debugEnviron))\n    debugEnviron = process.env.NODE_DEBUG || '';\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n      var pid = process.pid;\n      debugs[set] = function() {\n        var msg = exports.format.apply(exports, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n  // default options\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  // legacy...\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    // legacy...\n    ctx.showHidden = opts;\n  } else if (opts) {\n    // got an \"options\" object\n    exports._extend(ctx, opts);\n  }\n  // set default options\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  // \"name\": intentionally not styling\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  // Provide a hook for user-specified inspect functions.\n  // Check that value is an object with an inspect function on it\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      // Filter out the util module, it's inspect function is special\n      value.inspect !== exports.inspect &&\n      // Also filter out any prototype objects using the circular check.\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n\n  // Primitive types cannot have properties\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n\n  // Look up the keys of the object.\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n\n  // IE doesn't make error fields non-enumerable\n  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n\n  // Some type of object without properties can be shortcutted.\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n\n  // Make Array say that they are Array\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n\n  // Make functions say that they are functions\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n\n  // Make RegExps say that they are RegExps\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n\n  // Make dates with properties first say the date\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n\n  // Make error with message first say the error\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  // For some reason typeof null is \"object\", so special case here.\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').substr(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.substr(1, name.length - 2);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = __webpack_require__(157);\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n *     prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = __webpack_require__(156);\n\nexports._extend = function(origin, add) {\n  // Don't do anything if add isn't an object\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(84), __webpack_require__(7)));\n\n/***/ }),\n/* 159 */\n/***/ (function(module, exports) {\n\nmodule.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tif(!module.children) module.children = [];\r\n\t\tObject.defineProperty(module, \"loaded\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.l;\r\n\t\t\t}\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"id\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.i;\r\n\t\t\t}\r\n\t\t});\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n};\r\n\n\n/***/ }),\n/* 160 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nconst createError = __webpack_require__(90);\n\nfunction parseSelector(selector) {\n  const selectorParser = __webpack_require__(88);\n  let result;\n  selectorParser(result_ => {\n    result = result_;\n  }).process(selector);\n  return addTypePrefix(result, \"selector-\");\n}\n\nfunction parseValueNodes(nodes) {\n  let parenGroup = {\n    open: null,\n    close: null,\n    groups: [],\n    type: \"paren_group\"\n  };\n  const parenGroupStack = [parenGroup];\n  const rootParenGroup = parenGroup;\n  let commaGroup = {\n    groups: [],\n    type: \"comma_group\"\n  };\n  const commaGroupStack = [commaGroup];\n\n  for (let i = 0; i < nodes.length; ++i) {\n    const node = nodes[i];\n    if (node.type === \"paren\" && node.value === \"(\") {\n      parenGroup = {\n        open: node,\n        close: null,\n        groups: [],\n        type: \"paren_group\"\n      };\n      parenGroupStack.push(parenGroup);\n\n      commaGroup = {\n        groups: [],\n        type: \"comma_group\"\n      };\n      commaGroupStack.push(commaGroup);\n    } else if (node.type === \"paren\" && node.value === \")\") {\n      if (commaGroup.groups.length) {\n        parenGroup.groups.push(commaGroup);\n      }\n      parenGroup.close = node;\n\n      if (commaGroupStack.length === 1) {\n        throw new Error(\"Unbalanced parenthesis\");\n      }\n\n      commaGroupStack.pop();\n      commaGroup = commaGroupStack[commaGroupStack.length - 1];\n      commaGroup.groups.push(parenGroup);\n\n      parenGroupStack.pop();\n      parenGroup = parenGroupStack[parenGroupStack.length - 1];\n    } else if (node.type === \"comma\") {\n      parenGroup.groups.push(commaGroup);\n      commaGroup = {\n        groups: [],\n        type: \"comma_group\"\n      };\n      commaGroupStack[commaGroupStack.length - 1] = commaGroup;\n    } else {\n      commaGroup.groups.push(node);\n    }\n  }\n  if (commaGroup.groups.length > 0) {\n    parenGroup.groups.push(commaGroup);\n  }\n  return rootParenGroup;\n}\n\nfunction flattenGroups(node) {\n  if (\n    node.type === \"paren_group\" &&\n    !node.open &&\n    !node.close &&\n    node.groups.length === 1\n  ) {\n    return flattenGroups(node.groups[0]);\n  }\n\n  if (node.type === \"comma_group\" && node.groups.length === 1) {\n    return flattenGroups(node.groups[0]);\n  }\n\n  if (node.type === \"paren_group\" || node.type === \"comma_group\") {\n    return Object.assign({}, node, { groups: node.groups.map(flattenGroups) });\n  }\n\n  return node;\n}\n\nfunction addTypePrefix(node, prefix) {\n  if (node && typeof node === \"object\") {\n    delete node.parent;\n    for (const key in node) {\n      addTypePrefix(node[key], prefix);\n      if (key === \"type\" && typeof node[key] === \"string\") {\n        if (!node[key].startsWith(prefix)) {\n          node[key] = prefix + node[key];\n        }\n      }\n    }\n  }\n  return node;\n}\n\nfunction addMissingType(node) {\n  if (node && typeof node === \"object\") {\n    delete node.parent;\n    for (const key in node) {\n      addMissingType(node[key]);\n    }\n    if (!Array.isArray(node) && node.value && !node.type) {\n      node.type = \"unknown\";\n    }\n  }\n  return node;\n}\n\nfunction parseNestedValue(node) {\n  if (node && typeof node === \"object\") {\n    delete node.parent;\n    for (const key in node) {\n      parseNestedValue(node[key]);\n      if (key === \"nodes\") {\n        node.group = flattenGroups(parseValueNodes(node[key]));\n        delete node[key];\n      }\n    }\n  }\n  return node;\n}\n\nfunction parseValue(value) {\n  const valueParser = __webpack_require__(89);\n  const result = valueParser(value, { loose: true }).parse();\n  const parsedResult = parseNestedValue(result);\n  return addTypePrefix(parsedResult, \"value-\");\n}\n\nfunction parseMediaQuery(value) {\n  const mediaParser = __webpack_require__(86).default;\n  const result = addMissingType(mediaParser(value));\n  return addTypePrefix(result, \"media-\");\n}\n\nfunction parseNestedCSS(node) {\n  if (node && typeof node === \"object\") {\n    delete node.parent;\n    for (const key in node) {\n      parseNestedCSS(node[key]);\n    }\n    if (typeof node.selector === \"string\") {\n      const selector = node.raws.selector\n        ? node.raws.selector.raw\n        : node.selector;\n\n      try {\n        node.selector = parseSelector(selector);\n      } catch (e) {\n        // Fail silently. It's better to print it as is than to try and parse it\n        node.selector = selector;\n      }\n    }\n    if (node.type && typeof node.value === \"string\") {\n      try {\n        node.value = parseValue(node.value);\n      } catch (e) {\n        throw createError(\n          \"(postcss-values-parser) \" + e.toString(),\n          node.source\n        );\n      }\n    }\n    if (node.type === \"css-atrule\" && typeof node.params === \"string\") {\n      node.params = parseMediaQuery(node.params);\n    }\n  }\n  return node;\n}\n\nfunction parseWithParser(parser, text) {\n  let result;\n  try {\n    result = parser.parse(text);\n  } catch (e) {\n    if (typeof e.line !== \"number\") {\n      throw e;\n    }\n    throw createError(\"(postcss) \" + e.name + \" \" + e.reason, { start: e });\n  }\n  const prefixedResult = addTypePrefix(result, \"css-\");\n  const parsedResult = parseNestedCSS(prefixedResult);\n  return parsedResult;\n}\n\nfunction requireParser(isSCSS) {\n  if (isSCSS) {\n    return __webpack_require__(87);\n  }\n  return __webpack_require__(85);\n}\n\nfunction parse(text) {\n  const isLikelySCSS = !!text.match(/(\\w\\s*: [^}:]+|#){|@import[^\\n]+(url|,)/);\n  try {\n    return parseWithParser(requireParser(isLikelySCSS), text);\n  } catch (e) {\n    try {\n      return parseWithParser(requireParser(!isLikelySCSS), text);\n    } catch (e2) {\n      throw e;\n    }\n  }\n}\n\nmodule.exports = parse;\n\n\n/***/ }),\n/* 161 */\n/***/ (function(module, exports) {\n\n/* (ignored) */\n\n/***/ }),\n/* 162 */\n/***/ (function(module, exports) {\n\n/* (ignored) */\n\n/***/ })\n/******/ ]);\n});\n\nvar parserPostcss$1 = unwrapExports(parserPostcss);\n\nreturn parserPostcss$1;\n\n}());\n"
  },
  {
    "path": "website/static/lib/parser-typescript.js",
    "content": "var typescript = (function (fs,path,os,crypto,module$1) {\nfs = 'default' in fs ? fs['default'] : fs;\npath = 'default' in path ? path['default'] : path;\nos = 'default' in os ? os['default'] : os;\ncrypto = 'default' in crypto ? crypto['default'] : crypto;\nmodule$1 = 'default' in module$1 ? module$1['default'] : module$1;\n\nvar global$1 = typeof global !== \"undefined\" ? global :\n            typeof self !== \"undefined\" ? self :\n            typeof window !== \"undefined\" ? window : {};\n\n// shim for using process in browser\n// based off https://github.com/defunctzombie/node-process/blob/master/browser.js\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\nvar cachedSetTimeout = defaultSetTimout;\nvar cachedClearTimeout = defaultClearTimeout;\nif (typeof global$1.setTimeout === 'function') {\n    cachedSetTimeout = setTimeout;\n}\nif (typeof global$1.clearTimeout === 'function') {\n    cachedClearTimeout = clearTimeout;\n}\n\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // 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\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // 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.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\nfunction nextTick(fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n}\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nvar title = 'browser';\nvar platform = 'browser';\nvar browser = true;\nvar env = {};\nvar argv = [];\nvar version = ''; // empty string to avoid regexp issues\nvar versions = {};\nvar release = {};\nvar config = {};\n\nfunction noop() {}\n\nvar on = noop;\nvar addListener = noop;\nvar once = noop;\nvar off = noop;\nvar removeListener = noop;\nvar removeAllListeners = noop;\nvar emit = noop;\n\nfunction binding(name) {\n    throw new Error('process.binding is not supported');\n}\n\nfunction cwd () { return '/' }\nfunction chdir (dir) {\n    throw new Error('process.chdir is not supported');\n}\nfunction umask() { return 0; }\n\n// from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js\nvar performance$1 = global$1.performance || {};\nvar performanceNow =\n  performance$1.now        ||\n  performance$1.mozNow     ||\n  performance$1.msNow      ||\n  performance$1.oNow       ||\n  performance$1.webkitNow  ||\n  function(){ return (new Date()).getTime() };\n\n// generate timestamp or delta\n// see http://nodejs.org/api/process.html#process_process_hrtime\nfunction hrtime(previousTimestamp){\n  var clocktime = performanceNow.call(performance$1)*1e-3;\n  var seconds = Math.floor(clocktime);\n  var nanoseconds = Math.floor((clocktime%1)*1e9);\n  if (previousTimestamp) {\n    seconds = seconds - previousTimestamp[0];\n    nanoseconds = nanoseconds - previousTimestamp[1];\n    if (nanoseconds<0) {\n      seconds--;\n      nanoseconds += 1e9;\n    }\n  }\n  return [seconds,nanoseconds]\n}\n\nvar startTime = new Date();\nfunction uptime() {\n  var currentTime = new Date();\n  var dif = currentTime - startTime;\n  return dif / 1000;\n}\n\nvar process = {\n  nextTick: nextTick,\n  title: title,\n  browser: browser,\n  env: env,\n  argv: argv,\n  version: version,\n  versions: versions,\n  on: on,\n  addListener: addListener,\n  once: once,\n  off: off,\n  removeListener: removeListener,\n  removeAllListeners: removeAllListeners,\n  emit: emit,\n  binding: binding,\n  cwd: cwd,\n  chdir: chdir,\n  umask: umask,\n  hrtime: hrtime,\n  platform: platform,\n  release: release,\n  config: config,\n  uptime: uptime\n};\n\nvar __dirname = '/mnt/c/projects/my/prettier-with-tabs/dist';\n\nvar __filename = '/mnt/c/projects/my/prettier-with-tabs/dist/parser-typescript.js';\n\nvar browser$1 = true;\n\nvar lookup = [];\nvar revLookup = [];\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;\nvar inited = false;\nfunction init () {\n  inited = true;\n  var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n  for (var i = 0, len = code.length; i < len; ++i) {\n    lookup[i] = code[i];\n    revLookup[code.charCodeAt(i)] = i;\n  }\n\n  revLookup['-'.charCodeAt(0)] = 62;\n  revLookup['_'.charCodeAt(0)] = 63;\n}\n\nfunction toByteArray (b64) {\n  if (!inited) {\n    init();\n  }\n  var i, j, l, tmp, placeHolders, arr;\n  var len = b64.length;\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // the number of equal signs (place holders)\n  // if there are two placeholders, than the two characters before it\n  // represent one byte\n  // if there is only one, then the three characters before it represent 2 bytes\n  // this is just a cheap hack to not do indexOf twice\n  placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0;\n\n  // base64 is 4/3 + up to two characters of the original data\n  arr = new Arr(len * 3 / 4 - placeHolders);\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  l = placeHolders > 0 ? len - 4 : len;\n\n  var L = 0;\n\n  for (i = 0, j = 0; i < l; i += 4, j += 3) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)];\n    arr[L++] = (tmp >> 16) & 0xFF;\n    arr[L++] = (tmp >> 8) & 0xFF;\n    arr[L++] = tmp & 0xFF;\n  }\n\n  if (placeHolders === 2) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4);\n    arr[L++] = tmp & 0xFF;\n  } else if (placeHolders === 1) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2);\n    arr[L++] = (tmp >> 8) & 0xFF;\n    arr[L++] = tmp & 0xFF;\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp;\n  var output = [];\n  for (var i = start; i < end; i += 3) {\n    tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]);\n    output.push(tripletToBase64(tmp));\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  if (!inited) {\n    init();\n  }\n  var tmp;\n  var len = uint8.length;\n  var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes\n  var output = '';\n  var parts = [];\n  var maxChunkLength = 16383; // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)));\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1];\n    output += lookup[tmp >> 2];\n    output += lookup[(tmp << 4) & 0x3F];\n    output += '==';\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + (uint8[len - 1]);\n    output += lookup[tmp >> 10];\n    output += lookup[(tmp >> 4) & 0x3F];\n    output += lookup[(tmp << 2) & 0x3F];\n    output += '=';\n  }\n\n  parts.push(output);\n\n  return parts.join('')\n}\n\nfunction read (buffer, offset, isLE, mLen, nBytes) {\n  var e, m;\n  var eLen = nBytes * 8 - mLen - 1;\n  var eMax = (1 << eLen) - 1;\n  var eBias = eMax >> 1;\n  var nBits = -7;\n  var i = isLE ? (nBytes - 1) : 0;\n  var d = isLE ? -1 : 1;\n  var s = buffer[offset + i];\n\n  i += d;\n\n  e = s & ((1 << (-nBits)) - 1);\n  s >>= (-nBits);\n  nBits += eLen;\n  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1);\n  e >>= (-nBits);\n  nBits += mLen;\n  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias;\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen);\n    e = e - eBias;\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nfunction write (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c;\n  var eLen = nBytes * 8 - mLen - 1;\n  var eMax = (1 << eLen) - 1;\n  var eBias = eMax >> 1;\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0);\n  var i = isLE ? 0 : (nBytes - 1);\n  var d = isLE ? 1 : -1;\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;\n\n  value = Math.abs(value);\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0;\n    e = eMax;\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2);\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--;\n      c *= 2;\n    }\n    if (e + eBias >= 1) {\n      value += rt / c;\n    } else {\n      value += rt * Math.pow(2, 1 - eBias);\n    }\n    if (value * c >= 2) {\n      e++;\n      c /= 2;\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0;\n      e = eMax;\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * Math.pow(2, mLen);\n      e = e + eBias;\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\n      e = 0;\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m;\n  eLen += mLen;\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128;\n}\n\nvar toString = {}.toString;\n\nvar isArray = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n\nvar INSPECT_MAX_BYTES = 50;\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global$1.TYPED_ARRAY_SUPPORT !== undefined\n  ? global$1.TYPED_ARRAY_SUPPORT\n  : true;\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length);\n    that.__proto__ = Buffer.prototype;\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length);\n    }\n    that.length = length;\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192; // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype;\n  return arr\n};\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n};\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype;\n  Buffer.__proto__ = Uint8Array;\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    // Object.defineProperty(Buffer, Symbol.species, {\n    //   value: null,\n    //   configurable: true\n    // })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size);\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n};\n\nfunction allocUnsafe (that, size) {\n  assertSize(size);\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0);\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0;\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n};\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n};\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8';\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0;\n  that = createBuffer(that, length);\n\n  var actual = that.write(string, encoding);\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual);\n  }\n\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0;\n  that = createBuffer(that, length);\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255;\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength; // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array);\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset);\n  } else {\n    array = new Uint8Array(array, byteOffset, length);\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array;\n    that.__proto__ = Buffer.prototype;\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array);\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (internalIsBuffer(obj)) {\n    var len = checked(obj.length) | 0;\n    that = createBuffer(that, len);\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len);\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\n\nBuffer.isBuffer = isBuffer;\nfunction internalIsBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!internalIsBuffer(a) || !internalIsBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length;\n  var y = b.length;\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i];\n      y = b[i];\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n};\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n};\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i;\n  if (length === undefined) {\n    length = 0;\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length;\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length);\n  var pos = 0;\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i];\n    if (!internalIsBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos);\n    pos += buf.length;\n  }\n  return buffer\n};\n\nfunction byteLength (string, encoding) {\n  if (internalIsBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string;\n  }\n\n  var len = string.length;\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false;\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase();\n        loweredCase = true;\n    }\n  }\n}\nBuffer.byteLength = byteLength;\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false;\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0;\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length;\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0;\n  start >>>= 0;\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8';\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase();\n        loweredCase = true;\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true;\n\nfunction swap (b, n, m) {\n  var i = b[n];\n  b[n] = b[m];\n  b[m] = i;\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length;\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1);\n  }\n  return this\n};\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length;\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3);\n    swap(this, i + 1, i + 2);\n  }\n  return this\n};\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length;\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7);\n    swap(this, i + 1, i + 6);\n    swap(this, i + 2, i + 5);\n    swap(this, i + 3, i + 4);\n  }\n  return this\n};\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0;\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n};\n\nBuffer.prototype.equals = function equals (b) {\n  if (!internalIsBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n};\n\nBuffer.prototype.inspect = function inspect () {\n  var str = '';\n  var max = INSPECT_MAX_BYTES;\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ');\n    if (this.length > max) str += ' ... ';\n  }\n  return '<Buffer ' + str + '>'\n};\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!internalIsBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0;\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0;\n  }\n  if (thisStart === undefined) {\n    thisStart = 0;\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length;\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0;\n  end >>>= 0;\n  thisStart >>>= 0;\n  thisEnd >>>= 0;\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart;\n  var y = end - start;\n  var len = Math.min(x, y);\n\n  var thisCopy = this.slice(thisStart, thisEnd);\n  var targetCopy = target.slice(start, end);\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i];\n      y = targetCopy[i];\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n};\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset;\n    byteOffset = 0;\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff;\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000;\n  }\n  byteOffset = +byteOffset;  // Coerce to Number.\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1);\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1;\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0;\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding);\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (internalIsBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF; // Search for a byte value [0-255]\n    if (Buffer.TYPED_ARRAY_SUPPORT &&\n        typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1;\n  var arrLength = arr.length;\n  var valLength = val.length;\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase();\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2;\n      arrLength /= 2;\n      valLength /= 2;\n      byteOffset /= 2;\n    }\n  }\n\n  function read$$1 (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i;\n  if (dir) {\n    var foundIndex = -1;\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read$$1(arr, i) === read$$1(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i;\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex;\n        foundIndex = -1;\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true;\n      for (var j = 0; j < valLength; j++) {\n        if (read$$1(arr, i + j) !== read$$1(val, j)) {\n          found = false;\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n};\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n};\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n};\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0;\n  var remaining = buf.length - offset;\n  if (!length) {\n    length = remaining;\n  } else {\n    length = Number(length);\n    if (length > remaining) {\n      length = remaining;\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length;\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2;\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16);\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed;\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write$$1 (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8';\n    length = this.length;\n    offset = 0;\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset;\n    length = this.length;\n    offset = 0;\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0;\n    if (isFinite(length)) {\n      length = length | 0;\n      if (encoding === undefined) encoding = 'utf8';\n    } else {\n      encoding = length;\n      length = undefined;\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset;\n  if (length === undefined || length > remaining) length = remaining;\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8';\n\n  var loweredCase = false;\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase();\n        loweredCase = true;\n    }\n  }\n};\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n};\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return fromByteArray(buf)\n  } else {\n    return fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end);\n  var res = [];\n\n  var i = start;\n  while (i < end) {\n    var firstByte = buf[i];\n    var codePoint = null;\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1;\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint;\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte;\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1];\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F);\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint;\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1];\n          thirdByte = buf[i + 2];\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F);\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint;\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1];\n          thirdByte = buf[i + 2];\n          fourthByte = buf[i + 3];\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F);\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint;\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD;\n      bytesPerSequence = 1;\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000;\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800);\n      codePoint = 0xDC00 | codePoint & 0x3FF;\n    }\n\n    res.push(codePoint);\n    i += bytesPerSequence;\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000;\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length;\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = '';\n  var i = 0;\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    );\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = '';\n  end = Math.min(buf.length, end);\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F);\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = '';\n  end = Math.min(buf.length, end);\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i]);\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length;\n\n  if (!start || start < 0) start = 0;\n  if (!end || end < 0 || end > len) end = len;\n\n  var out = '';\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i]);\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end);\n  var res = '';\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length;\n  start = ~~start;\n  end = end === undefined ? len : ~~end;\n\n  if (start < 0) {\n    start += len;\n    if (start < 0) start = 0;\n  } else if (start > len) {\n    start = len;\n  }\n\n  if (end < 0) {\n    end += len;\n    if (end < 0) end = 0;\n  } else if (end > len) {\n    end = len;\n  }\n\n  if (end < start) end = start;\n\n  var newBuf;\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end);\n    newBuf.__proto__ = Buffer.prototype;\n  } else {\n    var sliceLen = end - start;\n    newBuf = new Buffer(sliceLen, undefined);\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start];\n    }\n  }\n\n  return newBuf\n};\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n  var val = this[offset];\n  var mul = 1;\n  var i = 0;\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul;\n  }\n\n  return val\n};\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length);\n  }\n\n  var val = this[offset + --byteLength];\n  var mul = 1;\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul;\n  }\n\n  return val\n};\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length);\n  return this[offset]\n};\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  return this[offset] | (this[offset + 1] << 8)\n};\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  return (this[offset] << 8) | this[offset + 1]\n};\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n};\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n};\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n  var val = this[offset];\n  var mul = 1;\n  var i = 0;\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul;\n  }\n  mul *= 0x80;\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\n  return val\n};\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n  var i = byteLength;\n  var mul = 1;\n  var val = this[offset + --i];\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul;\n  }\n  mul *= 0x80;\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\n  return val\n};\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length);\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n};\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  var val = this[offset] | (this[offset + 1] << 8);\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n};\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  var val = this[offset + 1] | (this[offset] << 8);\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n};\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n};\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n};\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return read(this, offset, true, 23, 4)\n};\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return read(this, offset, false, 23, 4)\n};\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length);\n  return read(this, offset, true, 52, 8)\n};\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length);\n  return read(this, offset, false, 52, 8)\n};\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!internalIsBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n    checkInt(this, value, offset, byteLength, maxBytes, 0);\n  }\n\n  var mul = 1;\n  var i = 0;\n  this[offset] = value & 0xFF;\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF;\n  }\n\n  return offset + byteLength\n};\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n    checkInt(this, value, offset, byteLength, maxBytes, 0);\n  }\n\n  var i = byteLength - 1;\n  var mul = 1;\n  this[offset + i] = value & 0xFF;\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF;\n  }\n\n  return offset + byteLength\n};\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n  this[offset] = (value & 0xff);\n  return offset + 1\n};\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1;\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8;\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff);\n    this[offset + 1] = (value >>> 8);\n  } else {\n    objectWriteUInt16(this, value, offset, true);\n  }\n  return offset + 2\n};\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8);\n    this[offset + 1] = (value & 0xff);\n  } else {\n    objectWriteUInt16(this, value, offset, false);\n  }\n  return offset + 2\n};\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1;\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff;\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24);\n    this[offset + 2] = (value >>> 16);\n    this[offset + 1] = (value >>> 8);\n    this[offset] = (value & 0xff);\n  } else {\n    objectWriteUInt32(this, value, offset, true);\n  }\n  return offset + 4\n};\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24);\n    this[offset + 1] = (value >>> 16);\n    this[offset + 2] = (value >>> 8);\n    this[offset + 3] = (value & 0xff);\n  } else {\n    objectWriteUInt32(this, value, offset, false);\n  }\n  return offset + 4\n};\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1);\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit);\n  }\n\n  var i = 0;\n  var mul = 1;\n  var sub = 0;\n  this[offset] = value & 0xFF;\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1;\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;\n  }\n\n  return offset + byteLength\n};\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1);\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit);\n  }\n\n  var i = byteLength - 1;\n  var mul = 1;\n  var sub = 0;\n  this[offset + i] = value & 0xFF;\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1;\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;\n  }\n\n  return offset + byteLength\n};\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n  if (value < 0) value = 0xff + value + 1;\n  this[offset] = (value & 0xff);\n  return offset + 1\n};\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff);\n    this[offset + 1] = (value >>> 8);\n  } else {\n    objectWriteUInt16(this, value, offset, true);\n  }\n  return offset + 2\n};\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8);\n    this[offset + 1] = (value & 0xff);\n  } else {\n    objectWriteUInt16(this, value, offset, false);\n  }\n  return offset + 2\n};\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff);\n    this[offset + 1] = (value >>> 8);\n    this[offset + 2] = (value >>> 16);\n    this[offset + 3] = (value >>> 24);\n  } else {\n    objectWriteUInt32(this, value, offset, true);\n  }\n  return offset + 4\n};\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n  if (value < 0) value = 0xffffffff + value + 1;\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24);\n    this[offset + 1] = (value >>> 16);\n    this[offset + 2] = (value >>> 8);\n    this[offset + 3] = (value & 0xff);\n  } else {\n    objectWriteUInt32(this, value, offset, false);\n  }\n  return offset + 4\n};\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38);\n  }\n  write(buf, value, offset, littleEndian, 23, 4);\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n};\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n};\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308);\n  }\n  write(buf, value, offset, littleEndian, 52, 8);\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n};\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n};\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0;\n  if (!end && end !== 0) end = this.length;\n  if (targetStart >= target.length) targetStart = target.length;\n  if (!targetStart) targetStart = 0;\n  if (end > 0 && end < start) end = start;\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length;\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start;\n  }\n\n  var len = end - start;\n  var i;\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start];\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start];\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    );\n  }\n\n  return len\n};\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start;\n      start = 0;\n      end = this.length;\n    } else if (typeof end === 'string') {\n      encoding = end;\n      end = this.length;\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0);\n      if (code < 256) {\n        val = code;\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255;\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0;\n  end = end === undefined ? this.length : end >>> 0;\n\n  if (!val) val = 0;\n\n  var i;\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val;\n    }\n  } else {\n    var bytes = internalIsBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString());\n    var len = bytes.length;\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len];\n    }\n  }\n\n  return this\n};\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g;\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '');\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '=';\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity;\n  var codePoint;\n  var length = string.length;\n  var leadSurrogate = null;\n  var bytes = [];\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i);\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint;\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n        leadSurrogate = codePoint;\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n    }\n\n    leadSurrogate = null;\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint);\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      );\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      );\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      );\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = [];\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF);\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo;\n  var byteArray = [];\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i);\n    hi = c >> 8;\n    lo = c % 256;\n    byteArray.push(lo);\n    byteArray.push(hi);\n  }\n\n  return byteArray\n}\n\n\nfunction base64ToBytes (str) {\n  return toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i];\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n\n\n// the following is from is-buffer, also by Feross Aboukhadijeh and with same lisence\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nfunction isBuffer(obj) {\n  return obj != null && (!!obj._isBuffer || isFastBuffer(obj) || isSlowBuffer(obj))\n}\n\nfunction isFastBuffer (obj) {\n  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isFastBuffer(obj.slice(0, 0))\n}\n\nvar commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n\n\nfunction unwrapExports (x) {\n\treturn x && x.__esModule ? x['default'] : x;\n}\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar parserTypescript_1 = createCommonjsModule(function (module) {\n\"use strict\";function _interopDefault(e){return e&&\"object\"==typeof e&&\"default\"in e?e.default:e}function createError$1(e,t){const n=new SyntaxError(e+\" (\"+t.start.line+\":\"+t.start.column+\")\");return n.loc=t,n}function includeShebang$1(e,t){if(!e.startsWith(\"#!\"))return;const n=e.indexOf(\"\\n\"),r={type:\"Line\",value:e.slice(2,n),range:[0,n],loc:{source:null,start:{line:1,column:0},end:{line:1,column:n}}};t.comments=[r].concat(t.comments);}function commonjsRequire$$1(){throw new Error(\"Dynamic requires are not currently supported by rollup-plugin-commonjs\")}function createCommonjsModule$$1(e,t){return t={exports:{}},e(t,t.exports),t.exports}function toVLQSigned(e){return e<0?1+(-e<<1):0+(e<<1)}function fromVLQSigned(e){var t=e>>1;return 1==(1&e)?-t:t}function ArraySet$1(){this._array=[],this._set=Object.create(null);}function generatedPositionAfter(e,t){var n=e.generatedLine,r=t.generatedLine,a=e.generatedColumn,i=t.generatedColumn;return r>n||r==n&&i>=a||util$4.compareByGeneratedPositionsInflated(e,t)<=0}function MappingList$1(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0};}function SourceMapGenerator$1(e){e||(e={}),this._file=util.getArg(e,\"file\",null),this._sourceRoot=util.getArg(e,\"sourceRoot\",null),this._skipValidation=util.getArg(e,\"skipValidation\",!1),this._sources=new ArraySet,this._names=new ArraySet,this._mappings=new MappingList,this._sourcesContents=null;}function swap(e,t,n){var r=e[t];e[t]=e[n],e[n]=r;}function randomIntInRange(e,t){return Math.round(e+Math.random()*(t-e))}function doQuickSort(e,t,n,r){if(n<r){var a=n-1;swap(e,randomIntInRange(n,r),r);for(var i=e[r],o=n;o<r;o++)t(e[o],i)<=0&&swap(e,a+=1,o);swap(e,a+1,o);var s=a+1;doQuickSort(e,t,n,s-1),doQuickSort(e,t,s+1,r);}}function SourceMapConsumer$2(e){var t=e;return\"string\"==typeof e&&(t=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=t.sections?new IndexedSourceMapConsumer(t):new BasicSourceMapConsumer(t)}function BasicSourceMapConsumer(e){var t=e;\"string\"==typeof e&&(t=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var n=util$5.getArg(t,\"version\"),r=util$5.getArg(t,\"sources\"),a=util$5.getArg(t,\"names\",[]),i=util$5.getArg(t,\"sourceRoot\",null),o=util$5.getArg(t,\"sourcesContent\",null),s=util$5.getArg(t,\"mappings\"),c=util$5.getArg(t,\"file\",null);if(n!=this._version)throw new Error(\"Unsupported version: \"+n);r=r.map(String).map(util$5.normalize).map(function(e){return i&&util$5.isAbsolute(i)&&util$5.isAbsolute(e)?util$5.relative(i,e):e}),this._names=ArraySet$2.fromArray(a.map(String),!0),this._sources=ArraySet$2.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=o,this._mappings=s,this.file=c;}function Mapping(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null;}function IndexedSourceMapConsumer(e){var t=e;\"string\"==typeof e&&(t=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var n=util$5.getArg(t,\"version\"),r=util$5.getArg(t,\"sections\");if(n!=this._version)throw new Error(\"Unsupported version: \"+n);this._sources=new ArraySet$2,this._names=new ArraySet$2;var a={line:-1,column:0};this._sections=r.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var t=util$5.getArg(e,\"offset\"),n=util$5.getArg(t,\"line\"),r=util$5.getArg(t,\"column\");if(n<a.line||n===a.line&&r<a.column)throw new Error(\"Section offsets must be ordered and non-overlapping.\");return a=t,{generatedOffset:{generatedLine:n+1,generatedColumn:r+1},consumer:new SourceMapConsumer$2(util$5.getArg(e,\"map\"))}});}function SourceNode$1(e,t,n,r,a){this.children=[],this.sourceContents={},this.line=null==e?null:e,this.column=null==t?null:t,this.source=null==n?null:n,this.name=null==a?null:a,this[isSourceNode]=!0,null!=r&&this.add(r);}function isInBrowser(){return\"browser\"===environment||\"node\"!==environment&&(\"undefined\"!=typeof window&&\"function\"==typeof XMLHttpRequest&&!(window.require&&window.module&&window.process&&\"renderer\"===window.process.type))}function hasGlobalProcessEventEmitter(){return\"object\"==typeof process&&null!==process&&\"function\"==typeof process.on}function handlerExec(e){return function(t){for(var n=0;n<e.length;n++){var r=e[n](t);if(r)return r}return null}}function supportRelativeURL(e,t){if(!e)return t;var n=path$1.dirname(e),r=/^\\w+:\\/\\/[^\\/]*/.exec(n),a=r?r[0]:\"\";return a+path$1.resolve(n.slice(a.length),t)}function retrieveSourceMapURL(e){var t;if(isInBrowser()){var n=new XMLHttpRequest;n.open(\"GET\",e,!1),n.send(null),t=4===n.readyState?n.responseText:null;var r=n.getResponseHeader(\"SourceMap\")||n.getResponseHeader(\"X-SourceMap\");if(r)return r}t=retrieveFile(e);for(var a,i,o=/(?:\\/\\/[@#][ \\t]+sourceMappingURL=([^\\s'\"]+?)[ \\t]*$)|(?:\\/\\*[@#][ \\t]+sourceMappingURL=([^\\*]+?)[ \\t]*(?:\\*\\/)[ \\t]*$)/gm;i=o.exec(t);)a=i;return a?a[1]:null}function mapSourcePosition(e){var t=sourceMapCache[e.source];if(!t){var n=retrieveSourceMap(e.source);n?(t=sourceMapCache[e.source]={url:n.url,map:new SourceMapConsumer(n.map)}).map.sourcesContent&&t.map.sources.forEach(function(e,n){var r=t.map.sourcesContent[n];if(r){var a=supportRelativeURL(t.url,e);fileContentsCache[a]=r;}}):t=sourceMapCache[e.source]={url:null,map:null};}if(t&&t.map){var r=t.map.originalPositionFor(e);if(null!==r.source)return r.source=supportRelativeURL(t.url,r.source),r}return e}function mapEvalOrigin(e){var t=/^eval at ([^(]+) \\((.+):(\\d+):(\\d+)\\)$/.exec(e);if(t){var n=mapSourcePosition({source:t[2],line:+t[3],column:t[4]-1});return\"eval at \"+t[1]+\" (\"+n.source+\":\"+n.line+\":\"+(n.column+1)+\")\"}return t=/^eval at ([^(]+) \\((.+)\\)$/.exec(e),t?\"eval at \"+t[1]+\" (\"+mapEvalOrigin(t[2])+\")\":e}function CallSiteToString(){var e,t=\"\";if(this.isNative())t=\"native\";else{!(e=this.getScriptNameOrSourceURL())&&this.isEval()&&(t=this.getEvalOrigin(),t+=\", \"),t+=e||\"<anonymous>\";var n=this.getLineNumber();if(null!=n){t+=\":\"+n;var r=this.getColumnNumber();r&&(t+=\":\"+r);}}var a=\"\",i=this.getFunctionName(),o=!0,s=this.isConstructor();if(!(this.isToplevel()||s)){var c=this.getTypeName();\"[object Object]\"===c&&(c=\"null\");var u=this.getMethodName();i?(c&&0!=i.indexOf(c)&&(a+=c+\".\"),a+=i,u&&i.indexOf(\".\"+u)!=i.length-u.length-1&&(a+=\" [as \"+u+\"]\")):a+=c+\".\"+(u||\"<anonymous>\");}else s?a+=\"new \"+(i||\"<anonymous>\"):i?a+=i:(a+=t,o=!1);return o&&(a+=\" (\"+t+\")\"),a}function cloneCallSite(e){var t={};return Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach(function(n){t[n]=/^(?:is|get)/.test(n)?function(){return e[n].call(e)}:e[n];}),t.toString=CallSiteToString,t}function wrapCallSite(e){if(e.isNative())return e;var t=e.getFileName()||e.getScriptNameOrSourceURL();if(t){var n=e.getLineNumber(),r=e.getColumnNumber()-1;1!==n||isInBrowser()||e.isEval()||(r-=62);var a=mapSourcePosition({source:t,line:n,column:r});return e=cloneCallSite(e),e.getFileName=function(){return a.source},e.getLineNumber=function(){return a.line},e.getColumnNumber=function(){return a.column+1},e.getScriptNameOrSourceURL=function(){return a.source},e}var i=e.isEval()&&e.getEvalOrigin();return i?(i=mapEvalOrigin(i),e=cloneCallSite(e),e.getEvalOrigin=function(){return i},e):e}function prepareStackTrace(e,t){return emptyCacheBetweenOperations&&(fileContentsCache={},sourceMapCache={}),e+t.map(function(e){return\"\\n    at \"+wrapCallSite(e)}).join(\"\")}function getErrorSource(e){var t=/\\n    at [^(]+ \\((.*):(\\d+):(\\d+)\\)/.exec(e.stack);if(t){var n=t[1],r=+t[2],a=+t[3],i=fileContentsCache[n];if(!i&&fs$1&&fs$1.existsSync(n)&&(i=fs$1.readFileSync(n,\"utf8\")),i){var o=i.split(/(?:\\r\\n|\\r|\\n)/)[r-1];if(o)return n+\":\"+r+\"\\n\"+o+\"\\n\"+new Array(a).join(\" \")+\"^\"}}return null}function printErrorAndExit(e){var t=getErrorSource(e);t&&(console.error(),console.error(t)),console.error(e.stack),process.exit(1);}function shimEmitUncaughtException(){var e=process.emit;process.emit=function(t){if(\"uncaughtException\"===t){var n=arguments[1]&&arguments[1].stack,r=this.listeners(t).length>0;if(n&&!r)return printErrorAndExit(arguments[1])}return e.apply(this,arguments)};}function basePropertyOf(e){return function(t){return null==e?void 0:e[t]}}function baseToString(e){if(\"string\"==typeof e)return e;if(isSymbol(e))return symbolToString?symbolToString.call(e):\"\";var t=e+\"\";return\"0\"==t&&1/e==-INFINITY?\"-0\":t}function isObjectLike(e){return!!e&&\"object\"==typeof e}function isSymbol(e){return\"symbol\"==typeof e||isObjectLike(e)&&objectToString.call(e)==symbolTag}function toString(e){return null==e?\"\":baseToString(e)}function unescape$1(e){return e=toString(e),e&&reHasEscapedHtml.test(e)?e.replace(reEscapedHtml,unescapeHtmlChar):e}function findFirstMatchingChild(e,t,n){const r=e.getChildren(t);for(let e=0;e<r.length;e++){const a=r[e];if(a&&n(a))return a;const i=findFirstMatchingChild(a,t,n);if(i)return i}}function isLet(e){return ts$1.isLet(e)}function isConst(e){return ts$1.isConst(e)}function isAssignmentOperator(e){return ASSIGNMENT_OPERATORS.indexOf(e.kind)>-1}function isLogicalOperator(e){return LOGICAL_OPERATORS.indexOf(e.kind)>-1}function getTextForTokenKind(e){return TOKEN_TO_TEXT[e]}function isESTreeClassMember(e){return e.kind!==SyntaxKind$1.SemicolonClassElement}function hasModifier(e,t){return!!t.modifiers&&!!t.modifiers.length&&t.modifiers.some(t=>t.kind===e)}function isComma(e){return e.kind===SyntaxKind$1.CommaToken}function getBinaryExpressionType(e){return isAssignmentOperator(e)?\"AssignmentExpression\":isLogicalOperator(e)?\"LogicalExpression\":\"BinaryExpression\"}function getLocFor(e,t,n){const r=n.getLineAndCharacterOfPosition(e),a=n.getLineAndCharacterOfPosition(t);return{start:{line:r.line+1,column:r.character},end:{line:a.line+1,column:a.character}}}function getLoc(e,t){return getLocFor(e.getStart(),e.end,t)}function isToken(e){return e.kind>=SyntaxKind$1.FirstToken&&e.kind<=SyntaxKind$1.LastToken}function isJSXToken(e){return e.kind>=SyntaxKind$1.JsxElement&&e.kind<=SyntaxKind$1.JsxAttribute}function getDeclarationKind(e){let t;switch(e.kind){case SyntaxKind$1.TypeAliasDeclaration:t=\"type\";break;case SyntaxKind$1.VariableDeclarationList:t=isLet(e)?\"let\":isConst(e)?\"const\":\"var\";break;default:throw\"Unable to determine declaration kind.\"}return t}function getTSNodeAccessibility(e){const t=e.modifiers;if(!t)return null;for(let e=0;e<t.length;e++){const n=t[e];switch(n.kind){case SyntaxKind$1.PublicKeyword:return\"public\";case SyntaxKind$1.ProtectedKeyword:return\"protected\";case SyntaxKind$1.PrivateKeyword:return\"private\";default:continue}}return null}function hasStaticModifierFlag(e){return Boolean(ts$1.getModifierFlags(e)&ts$1.ModifierFlags.Static)}function findNextToken(e,t){return ts$1.findNextToken(e,t)}function findChildOfKind(e,t,n){return findFirstMatchingChild(e,n,e=>e.kind===t)}function findFirstMatchingAncestor(e,t){for(;e;){if(t(e))return e;e=e.parent;}}function findAncestorOfKind(e,t){return findFirstMatchingAncestor(e,e=>e.kind===t)}function hasJSXAncestor(e){return!!findFirstMatchingAncestor(e,isJSXToken)}function unescapeIdentifier(e){return ts$1.unescapeIdentifier(e)}function unescapeStringLiteralText(e){return unescape(e)}function isComputedProperty(e){return e.kind===SyntaxKind$1.ComputedPropertyName}function isOptional(e){return!!e.questionToken&&e.questionToken.kind===SyntaxKind$1.QuestionToken}function isWithinTypeAnnotation(e){return e.parent.type===e||e.parent.types&&e.parent.types.indexOf(e)>-1}function fixExports(e,t,n){if(e.modifiers&&e.modifiers[0].kind===SyntaxKind$1.ExportKeyword){const r=e.modifiers[0],a=e.modifiers[1],i=e.modifiers[e.modifiers.length-1],o=a&&a.kind===SyntaxKind$1.DefaultKeyword,s=findNextToken(i,n);t.range[0]=s.getStart(),t.loc=getLocFor(t.range[0],t.range[1],n);const c=o?\"ExportDefaultDeclaration\":\"ExportNamedDeclaration\",u={type:c,declaration:t,range:[r.getStart(),t.range[1]],loc:getLocFor(r.getStart(),t.range[1],n)};return o||(u.specifiers=[],u.source=null),u}return t}function getTokenType(e){if(e.originalKeywordKind)switch(e.originalKeywordKind){case SyntaxKind$1.NullKeyword:return\"Null\";case SyntaxKind$1.GetKeyword:case SyntaxKind$1.SetKeyword:case SyntaxKind$1.TypeKeyword:case SyntaxKind$1.ModuleKeyword:return\"Identifier\";default:return\"Keyword\"}if(e.kind>=SyntaxKind$1.FirstKeyword&&e.kind<=SyntaxKind$1.LastFutureReservedWord)return e.kind===SyntaxKind$1.FalseKeyword||e.kind===SyntaxKind$1.TrueKeyword?\"Boolean\":\"Keyword\";if(e.kind>=SyntaxKind$1.FirstPunctuation&&e.kind<=SyntaxKind$1.LastBinaryOperator)return\"Punctuator\";if(e.kind>=SyntaxKind$1.NoSubstitutionTemplateLiteral&&e.kind<=SyntaxKind$1.TemplateTail)return\"Template\";switch(e.kind){case SyntaxKind$1.NumericLiteral:return\"Numeric\";case SyntaxKind$1.JsxText:return\"JSXText\";case SyntaxKind$1.StringLiteral:return!e.parent||e.parent.kind!==SyntaxKind$1.JsxAttribute&&e.parent.kind!==SyntaxKind$1.JsxElement?\"String\":\"JSXText\";case SyntaxKind$1.RegularExpressionLiteral:return\"RegularExpression\";case SyntaxKind$1.Identifier:case SyntaxKind$1.ConstructorKeyword:case SyntaxKind$1.GetKeyword:case SyntaxKind$1.SetKeyword:}if(e.parent){if(e.kind===SyntaxKind$1.Identifier&&e.parent.kind===SyntaxKind$1.PropertyAccessExpression&&hasJSXAncestor(e))return\"JSXIdentifier\";if(isJSXToken(e.parent)){if(e.kind===SyntaxKind$1.PropertyAccessExpression)return\"JSXMemberExpression\";if(e.kind===SyntaxKind$1.Identifier)return\"JSXIdentifier\"}}return\"Identifier\"}function convertToken(e,t){const n=e.kind===SyntaxKind$1.JsxText?e.getFullStart():e.getStart(),r=e.getEnd(),a=t.text.slice(n,r),i={type:getTokenType(e),value:a,start:n,end:r,range:[n,r],loc:getLocFor(n,r,t)};return\"RegularExpression\"===i.type&&(i.regex={pattern:a.slice(1,a.lastIndexOf(\"/\")),flags:a.slice(a.lastIndexOf(\"/\")+1)}),i}function convertTokens(e){function t(r){if(isToken(r)&&r.kind!==SyntaxKind$1.EndOfFileToken){const t=convertToken(r,e);t&&n.push(t);}else r.getChildren().forEach(t);}const n=[];return t(e),n}function getNodeContainer(e,t,n){function r(e){const i=e.pos,o=e.end;t>=i&&n<=o&&(isToken(e)?a=e:e.getChildren().forEach(r));}let a=null;return r(e),a}function convertTypeScriptCommentToEsprimaComment(e,t,n,r,a,i){const o={type:e?\"Block\":\"Line\",value:t};return\"number\"==typeof n&&(o.range=[n,r]),\"object\"==typeof a&&(o.loc={start:a,end:i}),o}function getCommentFromTriviaScanner(e,t,n){const r=e.getToken()===ts$2.SyntaxKind.MultiLineCommentTrivia,a={pos:e.getTokenPos(),end:e.getTextPos(),kind:e.getToken()},i=n.substring(a.pos,a.end),o=r?i.replace(/^\\/\\*/,\"\").replace(/\\*\\/$/,\"\"):i.replace(/^\\/\\//,\"\"),s=nodeUtils$4.getLocFor(a.pos,a.end,t);return convertTypeScriptCommentToEsprimaComment(r,o,a.pos,a.end,s.start,s.end)}function convertComments$1(e,t){const n=[],r=ts$2.createScanner(e.languageVersion,!1,0,t);let a=r.scan();for(;a!==ts$2.SyntaxKind.EndOfFileToken;){const i=r.getTokenPos(),o=r.getTextPos();let s=null;switch(a){case ts$2.SyntaxKind.SingleLineCommentTrivia:case ts$2.SyntaxKind.MultiLineCommentTrivia:{const a=getCommentFromTriviaScanner(r,e,t);n.push(a);break}case ts$2.SyntaxKind.CloseBraceToken:if((s=nodeUtils$4.getNodeContainer(e,i,o)).kind===ts$2.SyntaxKind.TemplateMiddle||s.kind===ts$2.SyntaxKind.TemplateTail){a=r.reScanTemplateToken();continue}break;case ts$2.SyntaxKind.SlashToken:case ts$2.SyntaxKind.SlashEqualsToken:if((s=nodeUtils$4.getNodeContainer(e,i,o)).kind===ts$2.SyntaxKind.RegularExpressionLiteral){a=r.reScanSlashToken();continue}}a=r.scan();}return n}function convertError(e){const t=e.file.getLineAndCharacterOfPosition(e.start);return{index:e.start,lineNumber:t.line+1,column:t.character,message:e.message||e.messageText}}function resetExtra(){extra={tokens:null,range:!1,loc:!1,comment:!1,comments:[],tolerant:!1,errors:[],strict:!1,ecmaFeatures:{},useJSXTextNode:!1,log:console.log};}function parse$1(e,t){const n=String;if(\"string\"==typeof e||e instanceof String||(e=n(e)),resetExtra(),void 0!==t&&(extra.range=\"boolean\"==typeof t.range&&t.range,extra.loc=\"boolean\"==typeof t.loc&&t.loc,extra.loc&&null!==t.source&&void 0!==t.source&&(extra.source=n(t.source)),\"boolean\"==typeof t.tokens&&t.tokens&&(extra.tokens=[]),\"boolean\"==typeof t.comment&&t.comment&&(extra.comment=!0,extra.comments=[]),\"boolean\"==typeof t.tolerant&&t.tolerant&&(extra.errors=[]),t.ecmaFeatures&&\"object\"==typeof t.ecmaFeatures&&(extra.ecmaFeatures.jsx=t.ecmaFeatures.jsx),t.errorOnUnknownASTType&&(extra.errorOnUnknownASTType=!0),\"boolean\"==typeof t.useJSXTextNode&&t.useJSXTextNode&&(extra.useJSXTextNode=!0),\"function\"==typeof t.loggerFn&&(extra.log=t.loggerFn)),!isRunningSupportedTypeScriptVersion){const e=\"=============\",t=[e,\"WARNING: You are currently running a version of TypeScript which is not officially supported by typescript-eslint-parser.\",\"You may find that it works just fine, or you may not.\",`SUPPORTED TYPESCRIPT VERSIONS: ${SUPPORTED_TYPESCRIPT_VERSIONS}`,`YOUR TYPESCRIPT VERSION: ${ACTIVE_TYPESCRIPT_VERSION}`,\"Please only submit bug reports when using the officially supported version.\",e];extra.log(t.join(\"\\n\\n\"));}const r=extra.ecmaFeatures.jsx?\"eslint.tsx\":\"eslint.ts\",a={fileExists(){return!0},getCanonicalFileName(){return r},getCurrentDirectory(){return\"\"},getDefaultLibFileName(){return\"lib.d.ts\"},getNewLine(){return\"\\n\"},getSourceFile(t){return ts.createSourceFile(t,e,ts.ScriptTarget.Latest,!0)},readFile(){return null},useCaseSensitiveFileNames(){return!0},writeFile(){return null}},i=ts.createProgram([r],{noResolve:!0,target:ts.ScriptTarget.Latest,jsx:extra.ecmaFeatures.jsx?\"preserve\":void 0},a).getSourceFile(r);return extra.code=e,convert(i,extra)}function parse(e){const t=isProbablyJsx(e);let n;try{try{n=tryParseTypeScript(e,t);}catch(r){n=tryParseTypeScript(e,!t);}}catch(e){if(void 0===e.lineNumber)throw e;throw createError(e.message,{start:{line:e.lineNumber,column:e.column+1}})}return delete n.tokens,includeShebang(e,n),n}function tryParseTypeScript(e,t){return parser.parse(e,{loc:!0,range:!0,tokens:!0,comment:!0,useJSXTextNode:!0,ecmaFeatures:{jsx:t},loggerFn:()=>{}})}function isProbablyJsx(e){return new RegExp([\"(^[^\\\"'`]*</)\",\"|\",\"(^[^/]{2}.*/>)\"].join(\"\"),\"m\").test(e)}var fs$$1=_interopDefault(fs),path$$1=_interopDefault(path),os$$1=_interopDefault(os),crypto$$1=_interopDefault(crypto),module$1$$1=_interopDefault(module$1),parserCreateError=createError$1,parserIncludeShebang=includeShebang$1,astNodeTypes$1={ArrayExpression:\"ArrayExpression\",ArrayPattern:\"ArrayPattern\",ArrowFunctionExpression:\"ArrowFunctionExpression\",AssignmentExpression:\"AssignmentExpression\",AssignmentPattern:\"AssignmentPattern\",AwaitExpression:\"AwaitExpression\",BinaryExpression:\"BinaryExpression\",BlockStatement:\"BlockStatement\",BreakStatement:\"BreakStatement\",CallExpression:\"CallExpression\",CatchClause:\"CatchClause\",ClassBody:\"ClassBody\",ClassDeclaration:\"ClassDeclaration\",ClassExpression:\"ClassExpression\",ClassImplements:\"ClassImplements\",ClassProperty:\"ClassProperty\",ConditionalExpression:\"ConditionalExpression\",ContinueStatement:\"ContinueStatement\",DebuggerStatement:\"DebuggerStatement\",DeclareFunction:\"DeclareFunction\",Decorator:\"Decorator\",DoWhileStatement:\"DoWhileStatement\",EmptyStatement:\"EmptyStatement\",ExperimentalRestProperty:\"ExperimentalRestProperty\",ExperimentalSpreadProperty:\"ExperimentalSpreadProperty\",ExportAllDeclaration:\"ExportAllDeclaration\",ExportDefaultDeclaration:\"ExportDefaultDeclaration\",ExportNamedDeclaration:\"ExportNamedDeclaration\",ExportSpecifier:\"ExportSpecifier\",ExpressionStatement:\"ExpressionStatement\",ForInStatement:\"ForInStatement\",ForOfStatement:\"ForOfStatement\",ForStatement:\"ForStatement\",FunctionDeclaration:\"FunctionDeclaration\",FunctionExpression:\"FunctionExpression\",GenericTypeAnnotation:\"GenericTypeAnnotation\",Identifier:\"Identifier\",IfStatement:\"IfStatement\",Import:\"Import\",ImportDeclaration:\"ImportDeclaration\",ImportDefaultSpecifier:\"ImportDefaultSpecifier\",ImportNamespaceSpecifier:\"ImportNamespaceSpecifier\",ImportSpecifier:\"ImportSpecifier\",JSXAttribute:\"JSXAttribute\",JSXClosingElement:\"JSXClosingElement\",JSXElement:\"JSXElement\",JSXEmptyExpression:\"JSXEmptyExpression\",JSXExpressionContainer:\"JSXExpressionContainer\",JSXIdentifier:\"JSXIdentifier\",JSXMemberExpression:\"JSXMemberExpression\",JSXNamespacedName:\"JSXNamespacedName\",JSXOpeningElement:\"JSXOpeningElement\",JSXSpreadAttribute:\"JSXSpreadAttribute\",JSXText:\"JSXText\",LabeledStatement:\"LabeledStatement\",Literal:\"Literal\",LogicalExpression:\"LogicalExpression\",MemberExpression:\"MemberExpression\",MetaProperty:\"MetaProperty\",MethodDefinition:\"MethodDefinition\",NewExpression:\"NewExpression\",ObjectExpression:\"ObjectExpression\",ObjectPattern:\"ObjectPattern\",Program:\"Program\",Property:\"Property\",RestElement:\"RestElement\",ReturnStatement:\"ReturnStatement\",SequenceExpression:\"SequenceExpression\",SpreadElement:\"SpreadElement\",Super:\"Super\",SwitchCase:\"SwitchCase\",SwitchStatement:\"SwitchStatement\",TaggedTemplateExpression:\"TaggedTemplateExpression\",TemplateElement:\"TemplateElement\",TemplateLiteral:\"TemplateLiteral\",ThisExpression:\"ThisExpression\",ThrowStatement:\"ThrowStatement\",TryStatement:\"TryStatement\",TSAbstractClassProperty:\"TSAbstractClassProperty\",TSAbstractMethodDefinition:\"TSAbstractMethodDefinition\",TSAnyKeyword:\"TSAnyKeyword\",TSArrayType:\"TSArrayType\",TSBooleanKeyword:\"TSBooleanKeyword\",TSConstructorType:\"TSConstructorType\",TSConstructSignature:\"TSConstructSignature\",TSDeclareKeyword:\"TSDeclareKeyword\",TSEnumDeclaration:\"TSEnumDeclaration\",TSExportAssignment:\"TSExportAssigment\",TSIndexSignature:\"TSIndexSignature\",TSInterfaceBody:\"TSInterfaceBody\",TSInterfaceDeclaration:\"TSInterfaceDeclaration\",TSInterfaceHeritage:\"TSInterfaceHeritage\",TSFunctionType:\"TSFunctionType\",TSMethodSignature:\"TSMethodSignature\",TSModuleBlock:\"TSModuleBlock\",TSModuleDeclaration:\"TSModuleDeclaration\",TSNamespaceFunctionDeclaration:\"TSNamespaceFunctionDeclaration\",TSNonNullExpression:\"TSNonNullExpression\",TSNullKeyword:\"TSNullKeyword\",TSNumberKeyword:\"TSNumberKeyword\",TSObjectKeyword:\"TSObjectKeyword\",TSParameterProperty:\"TSParameterProperty\",TSPropertySignature:\"TSPropertySignature\",TSQualifiedName:\"TSQualifiedName\",TSQuestionToken:\"TSQuestionToken\",TSStringKeyword:\"TSStringKeyword\",TSTypeLiteral:\"TSTypeLiteral\",TSTypePredicate:\"TSTypePredicate\",TSTypeReference:\"TSTypeReference\",TSUnionType:\"TSUnionType\",TSUndefinedKeyword:\"TSUndefinedKeyword\",TSVoidKeyword:\"TSVoidKeyword\",TypeAnnotation:\"TypeAnnotation\",TypeParameter:\"TypeParameter\",TypeParameterDeclaration:\"TypeParameterDeclaration\",TypeParameterInstantiation:\"TypeParameterInstantiation\",UnaryExpression:\"UnaryExpression\",UpdateExpression:\"UpdateExpression\",VariableDeclaration:\"VariableDeclaration\",VariableDeclarator:\"VariableDeclarator\",WhileStatement:\"WhileStatement\",WithStatement:\"WithStatement\",YieldExpression:\"YieldExpression\"},commonjsGlobal$$1=\"undefined\"!=typeof window?window:\"undefined\"!=typeof commonjsGlobal?commonjsGlobal:\"undefined\"!=typeof self?self:{},intToCharMap=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\".split(\"\"),encode$1=function(e){if(0<=e&&e<intToCharMap.length)return intToCharMap[e];throw new TypeError(\"Must be between 0 and 63: \"+e)},decode$1=function(e){return 65<=e&&e<=90?e-65:97<=e&&e<=122?e-97+26:48<=e&&e<=57?e-48+52:43==e?62:47==e?63:-1},base64$1={encode:encode$1,decode:decode$1},base64=base64$1,VLQ_BASE_SHIFT=5,VLQ_BASE=1<<VLQ_BASE_SHIFT,VLQ_BASE_MASK=VLQ_BASE-1,VLQ_CONTINUATION_BIT=VLQ_BASE,encode=function(e){var t,n=\"\",r=toVLQSigned(e);do{t=r&VLQ_BASE_MASK,(r>>>=VLQ_BASE_SHIFT)>0&&(t|=VLQ_CONTINUATION_BIT),n+=base64.encode(t);}while(r>0);return n},decode=function(e,t,n){var r,a,i=e.length,o=0,s=0;do{if(t>=i)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(-1===(a=base64.decode(e.charCodeAt(t++))))throw new Error(\"Invalid base64 digit: \"+e.charAt(t-1));r=!!(a&VLQ_CONTINUATION_BIT),o+=(a&=VLQ_BASE_MASK)<<s,s+=VLQ_BASE_SHIFT;}while(r);n.value=fromVLQSigned(o),n.rest=t;},base64Vlq={encode:encode,decode:decode},util$1=createCommonjsModule$$1(function(e,t){function n(e,t,n){if(t in e)return e[t];if(3===arguments.length)return n;throw new Error('\"'+t+'\" is a required argument.')}function r(e){var t=e.match(m);return t?{scheme:t[1],auth:t[2],host:t[3],port:t[4],path:t[5]}:null}function a(e){var t=\"\";return e.scheme&&(t+=e.scheme+\":\"),t+=\"//\",e.auth&&(t+=e.auth+\"@\"),e.host&&(t+=e.host),e.port&&(t+=\":\"+e.port),e.path&&(t+=e.path),t}function i(e){var n=e,i=r(e);if(i){if(!i.path)return e;n=i.path;}for(var o,s=t.isAbsolute(n),c=n.split(/\\/+/),u=0,l=c.length-1;l>=0;l--)\".\"===(o=c[l])?c.splice(l,1):\"..\"===o?u++:u>0&&(\"\"===o?(c.splice(l+1,u),u=0):(c.splice(l,2),u--));return\"\"===(n=c.join(\"/\"))&&(n=s?\"/\":\".\"),i?(i.path=n,a(i)):n}function o(e,t){\"\"===e&&(e=\".\"),\"\"===t&&(t=\".\");var n=r(t),o=r(e);if(o&&(e=o.path||\"/\"),n&&!n.scheme)return o&&(n.scheme=o.scheme),a(n);if(n||t.match(y))return t;if(o&&!o.host&&!o.path)return o.host=t,a(o);var s=\"/\"===t.charAt(0)?t:i(e.replace(/\\/+$/,\"\")+\"/\"+t);return o?(o.path=s,a(o)):s}function s(e,t){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var n=0;0!==t.indexOf(e+\"/\");){var r=e.lastIndexOf(\"/\");if(r<0)return t;if((e=e.slice(0,r)).match(/^([^\\/]+:\\/)?\\/*$/))return t;++n;}return Array(n+1).join(\"../\")+t.substr(e.length+1)}function c(e){return e}function u(e){return _(e)?\"$\"+e:e}function l(e){return _(e)?e.slice(1):e}function _(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function d(e,t,n){var r=e.source-t.source;return 0!==r?r:0!==(r=e.originalLine-t.originalLine)?r:0!==(r=e.originalColumn-t.originalColumn)||n?r:0!==(r=e.generatedColumn-t.generatedColumn)?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name)}function p(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:0!==(r=e.generatedColumn-t.generatedColumn)||n?r:0!==(r=e.source-t.source)?r:0!==(r=e.originalLine-t.originalLine)?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name)}function f(e,t){return e===t?0:e>t?1:-1}function g(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:0!==(n=e.generatedColumn-t.generatedColumn)?n:0!==(n=f(e.source,t.source))?n:0!==(n=e.originalLine-t.originalLine)?n:(n=e.originalColumn-t.originalColumn,0!==n?n:f(e.name,t.name))}t.getArg=n;var m=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,y=/^data:.+\\,.+$/;t.urlParse=r,t.urlGenerate=a,t.normalize=i,t.join=o,t.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(m)},t.relative=s;var h=function(){return!(\"__proto__\"in Object.create(null))}();t.toSetString=h?c:u,t.fromSetString=h?c:l,t.compareByOriginalPositions=d,t.compareByGeneratedPositionsDeflated=p,t.compareByGeneratedPositionsInflated=g;}),util$3=util$1,has=Object.prototype.hasOwnProperty;ArraySet$1.fromArray=function(e,t){for(var n=new ArraySet$1,r=0,a=e.length;r<a;r++)n.add(e[r],t);return n},ArraySet$1.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},ArraySet$1.prototype.add=function(e,t){var n=util$3.toSetString(e),r=has.call(this._set,n),a=this._array.length;r&&!t||this._array.push(e),r||(this._set[n]=a);},ArraySet$1.prototype.has=function(e){var t=util$3.toSetString(e);return has.call(this._set,t)},ArraySet$1.prototype.indexOf=function(e){var t=util$3.toSetString(e);if(has.call(this._set,t))return this._set[t];throw new Error('\"'+e+'\" is not in the set.')},ArraySet$1.prototype.at=function(e){if(e>=0&&e<this._array.length)return this._array[e];throw new Error(\"No element indexed by \"+e)},ArraySet$1.prototype.toArray=function(){return this._array.slice()};var ArraySet_1=ArraySet$1,arraySet={ArraySet:ArraySet_1},util$4=util$1;MappingList$1.prototype.unsortedForEach=function(e,t){this._array.forEach(e,t);},MappingList$1.prototype.add=function(e){generatedPositionAfter(this._last,e)?(this._last=e,this._array.push(e)):(this._sorted=!1,this._array.push(e));},MappingList$1.prototype.toArray=function(){return this._sorted||(this._array.sort(util$4.compareByGeneratedPositionsInflated),this._sorted=!0),this._array};var MappingList_1=MappingList$1,mappingList={MappingList:MappingList_1},base64VLQ=base64Vlq,util=util$1,ArraySet=arraySet.ArraySet,MappingList=mappingList.MappingList;SourceMapGenerator$1.prototype._version=3,SourceMapGenerator$1.fromSourceMap=function(e){var t=e.sourceRoot,n=new SourceMapGenerator$1({file:e.file,sourceRoot:t});return e.eachMapping(function(e){var r={generated:{line:e.generatedLine,column:e.generatedColumn}};null!=e.source&&(r.source=e.source,null!=t&&(r.source=util.relative(t,r.source)),r.original={line:e.originalLine,column:e.originalColumn},null!=e.name&&(r.name=e.name)),n.addMapping(r);}),e.sources.forEach(function(t){var r=e.sourceContentFor(t);null!=r&&n.setSourceContent(t,r);}),n},SourceMapGenerator$1.prototype.addMapping=function(e){var t=util.getArg(e,\"generated\"),n=util.getArg(e,\"original\",null),r=util.getArg(e,\"source\",null),a=util.getArg(e,\"name\",null);this._skipValidation||this._validateMapping(t,n,r,a),null!=r&&(r=String(r),this._sources.has(r)||this._sources.add(r)),null!=a&&(a=String(a),this._names.has(a)||this._names.add(a)),this._mappings.add({generatedLine:t.line,generatedColumn:t.column,originalLine:null!=n&&n.line,originalColumn:null!=n&&n.column,source:r,name:a});},SourceMapGenerator$1.prototype.setSourceContent=function(e,t){var n=e;null!=this._sourceRoot&&(n=util.relative(this._sourceRoot,n)),null!=t?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[util.toSetString(n)]=t):this._sourcesContents&&(delete this._sourcesContents[util.toSetString(n)],0===Object.keys(this._sourcesContents).length&&(this._sourcesContents=null));},SourceMapGenerator$1.prototype.applySourceMap=function(e,t,n){var r=t;if(null==t){if(null==e.file)throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\\'s \"file\" property. Both were omitted.');r=e.file;}var a=this._sourceRoot;null!=a&&(r=util.relative(a,r));var i=new ArraySet,o=new ArraySet;this._mappings.unsortedForEach(function(t){if(t.source===r&&null!=t.originalLine){var s=e.originalPositionFor({line:t.originalLine,column:t.originalColumn});null!=s.source&&(t.source=s.source,null!=n&&(t.source=util.join(n,t.source)),null!=a&&(t.source=util.relative(a,t.source)),t.originalLine=s.line,t.originalColumn=s.column,null!=s.name&&(t.name=s.name));}var c=t.source;null==c||i.has(c)||i.add(c);var u=t.name;null==u||o.has(u)||o.add(u);},this),this._sources=i,this._names=o,e.sources.forEach(function(t){var r=e.sourceContentFor(t);null!=r&&(null!=n&&(t=util.join(n,t)),null!=a&&(t=util.relative(a,t)),this.setSourceContent(t,r));},this);},SourceMapGenerator$1.prototype._validateMapping=function(e,t,n,r){if((!(e&&\"line\"in e&&\"column\"in e&&e.line>0&&e.column>=0)||t||n||r)&&!(e&&\"line\"in e&&\"column\"in e&&t&&\"line\"in t&&\"column\"in t&&e.line>0&&e.column>=0&&t.line>0&&t.column>=0&&n))throw new Error(\"Invalid mapping: \"+JSON.stringify({generated:e,source:n,original:t,name:r}))},SourceMapGenerator$1.prototype._serializeMappings=function(){for(var e,t,n,r,a=0,i=1,o=0,s=0,c=0,u=0,l=\"\",_=this._mappings.toArray(),d=0,p=_.length;d<p;d++){if(t=_[d],e=\"\",t.generatedLine!==i)for(a=0;t.generatedLine!==i;)e+=\";\",i++;else if(d>0){if(!util.compareByGeneratedPositionsInflated(t,_[d-1]))continue;e+=\",\";}e+=base64VLQ.encode(t.generatedColumn-a),a=t.generatedColumn,null!=t.source&&(r=this._sources.indexOf(t.source),e+=base64VLQ.encode(r-u),u=r,e+=base64VLQ.encode(t.originalLine-1-s),s=t.originalLine-1,e+=base64VLQ.encode(t.originalColumn-o),o=t.originalColumn,null!=t.name&&(n=this._names.indexOf(t.name),e+=base64VLQ.encode(n-c),c=n)),l+=e;}return l},SourceMapGenerator$1.prototype._generateSourcesContent=function(e,t){return e.map(function(e){if(!this._sourcesContents)return null;null!=t&&(e=util.relative(t,e));var n=util.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,n)?this._sourcesContents[n]:null},this)},SourceMapGenerator$1.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(e.file=this._file),null!=this._sourceRoot&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e},SourceMapGenerator$1.prototype.toString=function(){return JSON.stringify(this.toJSON())};var SourceMapGenerator_1=SourceMapGenerator$1,sourceMapGenerator={SourceMapGenerator:SourceMapGenerator_1},binarySearch$1=createCommonjsModule$$1(function(e,t){function n(e,r,a,i,o,s){var c=Math.floor((r-e)/2)+e,u=o(a,i[c],!0);return 0===u?c:u>0?r-c>1?n(c,r,a,i,o,s):s==t.LEAST_UPPER_BOUND?r<i.length?r:-1:c:c-e>1?n(e,c,a,i,o,s):s==t.LEAST_UPPER_BOUND?c:e<0?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,a,i){if(0===r.length)return-1;var o=n(-1,r.length,e,r,a,i||t.GREATEST_LOWER_BOUND);if(o<0)return-1;for(;o-1>=0&&0===a(r[o],r[o-1],!0);)--o;return o};}),quickSort_1=function(e,t){doQuickSort(e,t,0,e.length-1);},quickSort$1={quickSort:quickSort_1},util$5=util$1,binarySearch=binarySearch$1,ArraySet$2=arraySet.ArraySet,base64VLQ$1=base64Vlq,quickSort=quickSort$1.quickSort;SourceMapConsumer$2.fromSourceMap=function(e){return BasicSourceMapConsumer.fromSourceMap(e)},SourceMapConsumer$2.prototype._version=3,SourceMapConsumer$2.prototype.__generatedMappings=null,Object.defineProperty(SourceMapConsumer$2.prototype,\"_generatedMappings\",{get:function(){return this.__generatedMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__generatedMappings}}),SourceMapConsumer$2.prototype.__originalMappings=null,Object.defineProperty(SourceMapConsumer$2.prototype,\"_originalMappings\",{get:function(){return this.__originalMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__originalMappings}}),SourceMapConsumer$2.prototype._charIsMappingSeparator=function(e,t){var n=e.charAt(t);return\";\"===n||\",\"===n},SourceMapConsumer$2.prototype._parseMappings=function(e,t){throw new Error(\"Subclasses must implement _parseMappings\")},SourceMapConsumer$2.GENERATED_ORDER=1,SourceMapConsumer$2.ORIGINAL_ORDER=2,SourceMapConsumer$2.GREATEST_LOWER_BOUND=1,SourceMapConsumer$2.LEAST_UPPER_BOUND=2,SourceMapConsumer$2.prototype.eachMapping=function(e,t,n){var r,a=t||null;switch(n||SourceMapConsumer$2.GENERATED_ORDER){case SourceMapConsumer$2.GENERATED_ORDER:r=this._generatedMappings;break;case SourceMapConsumer$2.ORIGINAL_ORDER:r=this._originalMappings;break;default:throw new Error(\"Unknown order of iteration.\")}var i=this.sourceRoot;r.map(function(e){var t=null===e.source?null:this._sources.at(e.source);return null!=t&&null!=i&&(t=util$5.join(i,t)),{source:t,generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:null===e.name?null:this._names.at(e.name)}},this).forEach(e,a);},SourceMapConsumer$2.prototype.allGeneratedPositionsFor=function(e){var t=util$5.getArg(e,\"line\"),n={source:util$5.getArg(e,\"source\"),originalLine:t,originalColumn:util$5.getArg(e,\"column\",0)};if(null!=this.sourceRoot&&(n.source=util$5.relative(this.sourceRoot,n.source)),!this._sources.has(n.source))return[];n.source=this._sources.indexOf(n.source);var r=[],a=this._findMapping(n,this._originalMappings,\"originalLine\",\"originalColumn\",util$5.compareByOriginalPositions,binarySearch.LEAST_UPPER_BOUND);if(a>=0){var i=this._originalMappings[a];if(void 0===e.column)for(var o=i.originalLine;i&&i.originalLine===o;)r.push({line:util$5.getArg(i,\"generatedLine\",null),column:util$5.getArg(i,\"generatedColumn\",null),lastColumn:util$5.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++a];else for(var s=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==s;)r.push({line:util$5.getArg(i,\"generatedLine\",null),column:util$5.getArg(i,\"generatedColumn\",null),lastColumn:util$5.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++a];}return r};var SourceMapConsumer_1=SourceMapConsumer$2;BasicSourceMapConsumer.prototype=Object.create(SourceMapConsumer$2.prototype),BasicSourceMapConsumer.prototype.consumer=SourceMapConsumer$2,BasicSourceMapConsumer.fromSourceMap=function(e){var t=Object.create(BasicSourceMapConsumer.prototype),n=t._names=ArraySet$2.fromArray(e._names.toArray(),!0),r=t._sources=ArraySet$2.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),i=t.__generatedMappings=[],o=t.__originalMappings=[],s=0,c=a.length;s<c;s++){var u=a[s],l=new Mapping;l.generatedLine=u.generatedLine,l.generatedColumn=u.generatedColumn,u.source&&(l.source=r.indexOf(u.source),l.originalLine=u.originalLine,l.originalColumn=u.originalColumn,u.name&&(l.name=n.indexOf(u.name)),o.push(l)),i.push(l);}return quickSort(t.__originalMappings,util$5.compareByOriginalPositions),t},BasicSourceMapConsumer.prototype._version=3,Object.defineProperty(BasicSourceMapConsumer.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?util$5.join(this.sourceRoot,e):e},this)}}),BasicSourceMapConsumer.prototype._parseMappings=function(e,t){for(var n,r,a,i,o,s=1,c=0,u=0,l=0,_=0,d=0,p=e.length,f=0,g={},m={},y=[],h=[];f<p;)if(\";\"===e.charAt(f))s++,f++,c=0;else if(\",\"===e.charAt(f))f++;else{for((n=new Mapping).generatedLine=s,i=f;i<p&&!this._charIsMappingSeparator(e,i);i++);if(r=e.slice(f,i),a=g[r])f+=r.length;else{for(a=[];f<i;)base64VLQ$1.decode(e,f,m),o=m.value,f=m.rest,a.push(o);if(2===a.length)throw new Error(\"Found a source, but no line and column\");if(3===a.length)throw new Error(\"Found a source and line, but no column\");g[r]=a;}n.generatedColumn=c+a[0],c=n.generatedColumn,a.length>1&&(n.source=_+a[1],_+=a[1],n.originalLine=u+a[2],u=n.originalLine,n.originalLine+=1,n.originalColumn=l+a[3],l=n.originalColumn,a.length>4&&(n.name=d+a[4],d+=a[4])),h.push(n),\"number\"==typeof n.originalLine&&y.push(n);}quickSort(h,util$5.compareByGeneratedPositionsDeflated),this.__generatedMappings=h,quickSort(y,util$5.compareByOriginalPositions),this.__originalMappings=y;},BasicSourceMapConsumer.prototype._findMapping=function(e,t,n,r,a,i){if(e[n]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[n]);if(e[r]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[r]);return binarySearch.search(e,t,a,i)},BasicSourceMapConsumer.prototype.computeColumnSpans=function(){for(var e=0;e<this._generatedMappings.length;++e){var t=this._generatedMappings[e];if(e+1<this._generatedMappings.length){var n=this._generatedMappings[e+1];if(t.generatedLine===n.generatedLine){t.lastGeneratedColumn=n.generatedColumn-1;continue}}t.lastGeneratedColumn=1/0;}},BasicSourceMapConsumer.prototype.originalPositionFor=function(e){var t={generatedLine:util$5.getArg(e,\"line\"),generatedColumn:util$5.getArg(e,\"column\")},n=this._findMapping(t,this._generatedMappings,\"generatedLine\",\"generatedColumn\",util$5.compareByGeneratedPositionsDeflated,util$5.getArg(e,\"bias\",SourceMapConsumer$2.GREATEST_LOWER_BOUND));if(n>=0){var r=this._generatedMappings[n];if(r.generatedLine===t.generatedLine){var a=util$5.getArg(r,\"source\",null);null!==a&&(a=this._sources.at(a),null!=this.sourceRoot&&(a=util$5.join(this.sourceRoot,a)));var i=util$5.getArg(r,\"name\",null);return null!==i&&(i=this._names.at(i)),{source:a,line:util$5.getArg(r,\"originalLine\",null),column:util$5.getArg(r,\"originalColumn\",null),name:i}}}return{source:null,line:null,column:null,name:null}},BasicSourceMapConsumer.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},BasicSourceMapConsumer.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=util$5.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=util$5.urlParse(this.sourceRoot))){var r=e.replace(/^file:\\/\\//,\"\");if(\"file\"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||\"/\"==n.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(t)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},BasicSourceMapConsumer.prototype.generatedPositionFor=function(e){var t=util$5.getArg(e,\"source\");if(null!=this.sourceRoot&&(t=util$5.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};var n={source:t=this._sources.indexOf(t),originalLine:util$5.getArg(e,\"line\"),originalColumn:util$5.getArg(e,\"column\")},r=this._findMapping(n,this._originalMappings,\"originalLine\",\"originalColumn\",util$5.compareByOriginalPositions,util$5.getArg(e,\"bias\",SourceMapConsumer$2.GREATEST_LOWER_BOUND));if(r>=0){var a=this._originalMappings[r];if(a.source===n.source)return{line:util$5.getArg(a,\"generatedLine\",null),column:util$5.getArg(a,\"generatedColumn\",null),lastColumn:util$5.getArg(a,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}};var BasicSourceMapConsumer_1=BasicSourceMapConsumer;IndexedSourceMapConsumer.prototype=Object.create(SourceMapConsumer$2.prototype),IndexedSourceMapConsumer.prototype.constructor=SourceMapConsumer$2,IndexedSourceMapConsumer.prototype._version=3,Object.defineProperty(IndexedSourceMapConsumer.prototype,\"sources\",{get:function(){for(var e=[],t=0;t<this._sections.length;t++)for(var n=0;n<this._sections[t].consumer.sources.length;n++)e.push(this._sections[t].consumer.sources[n]);return e}}),IndexedSourceMapConsumer.prototype.originalPositionFor=function(e){var t={generatedLine:util$5.getArg(e,\"line\"),generatedColumn:util$5.getArg(e,\"column\")},n=binarySearch.search(t,this._sections,function(e,t){var n=e.generatedLine-t.generatedOffset.generatedLine;return n||e.generatedColumn-t.generatedOffset.generatedColumn}),r=this._sections[n];return r?r.consumer.originalPositionFor({line:t.generatedLine-(r.generatedOffset.generatedLine-1),column:t.generatedColumn-(r.generatedOffset.generatedLine===t.generatedLine?r.generatedOffset.generatedColumn-1:0),bias:e.bias}):{source:null,line:null,column:null,name:null}},IndexedSourceMapConsumer.prototype.hasContentsOfAllSources=function(){return this._sections.every(function(e){return e.consumer.hasContentsOfAllSources()})},IndexedSourceMapConsumer.prototype.sourceContentFor=function(e,t){for(var n=0;n<this._sections.length;n++){var r=this._sections[n].consumer.sourceContentFor(e,!0);if(r)return r}if(t)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},IndexedSourceMapConsumer.prototype.generatedPositionFor=function(e){for(var t=0;t<this._sections.length;t++){var n=this._sections[t];if(-1!==n.consumer.sources.indexOf(util$5.getArg(e,\"source\"))){var r=n.consumer.generatedPositionFor(e);if(r)return{line:r.line+(n.generatedOffset.generatedLine-1),column:r.column+(n.generatedOffset.generatedLine===r.line?n.generatedOffset.generatedColumn-1:0)}}}return{line:null,column:null}},IndexedSourceMapConsumer.prototype._parseMappings=function(e,t){this.__generatedMappings=[],this.__originalMappings=[];for(var n=0;n<this._sections.length;n++)for(var r=this._sections[n],a=r.consumer._generatedMappings,i=0;i<a.length;i++){var o=a[i],s=r.consumer._sources.at(o.source);null!==r.consumer.sourceRoot&&(s=util$5.join(r.consumer.sourceRoot,s)),this._sources.add(s),s=this._sources.indexOf(s);var c=r.consumer._names.at(o.name);this._names.add(c),c=this._names.indexOf(c);var u={source:s,generatedLine:o.generatedLine+(r.generatedOffset.generatedLine-1),generatedColumn:o.generatedColumn+(r.generatedOffset.generatedLine===o.generatedLine?r.generatedOffset.generatedColumn-1:0),originalLine:o.originalLine,originalColumn:o.originalColumn,name:c};this.__generatedMappings.push(u),\"number\"==typeof u.originalLine&&this.__originalMappings.push(u);}quickSort(this.__generatedMappings,util$5.compareByGeneratedPositionsDeflated),quickSort(this.__originalMappings,util$5.compareByOriginalPositions);};var IndexedSourceMapConsumer_1=IndexedSourceMapConsumer,sourceMapConsumer={SourceMapConsumer:SourceMapConsumer_1,BasicSourceMapConsumer:BasicSourceMapConsumer_1,IndexedSourceMapConsumer:IndexedSourceMapConsumer_1},SourceMapGenerator$2=sourceMapGenerator.SourceMapGenerator,util$6=util$1,REGEX_NEWLINE=/(\\r?\\n)/,NEWLINE_CODE=10,isSourceNode=\"$$$isSourceNode$$$\";SourceNode$1.fromStringWithSourceMap=function(e,t,n){function r(e,t){if(null===e||void 0===e.source)a.add(t);else{var r=n?util$6.join(n,e.source):e.source;a.add(new SourceNode$1(e.originalLine,e.originalColumn,r,t,e.name));}}var a=new SourceNode$1,i=e.split(REGEX_NEWLINE),o=function(){return i.shift()+(i.shift()||\"\")},s=1,c=0,u=null;return t.eachMapping(function(e){if(null!==u){if(!(s<e.generatedLine)){var t=(n=i[0]).substr(0,e.generatedColumn-c);return i[0]=n.substr(e.generatedColumn-c),c=e.generatedColumn,r(u,t),void(u=e)}r(u,o()),s++,c=0;}for(;s<e.generatedLine;)a.add(o()),s++;if(c<e.generatedColumn){var n=i[0];a.add(n.substr(0,e.generatedColumn)),i[0]=n.substr(e.generatedColumn),c=e.generatedColumn;}u=e;},this),i.length>0&&(u&&r(u,o()),a.add(i.join(\"\"))),t.sources.forEach(function(e){var r=t.sourceContentFor(e);null!=r&&(null!=n&&(e=util$6.join(n,e)),a.setSourceContent(e,r));}),a},SourceNode$1.prototype.add=function(e){if(Array.isArray(e))e.forEach(function(e){this.add(e);},this);else{if(!e[isSourceNode]&&\"string\"!=typeof e)throw new TypeError(\"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \"+e);e&&this.children.push(e);}return this},SourceNode$1.prototype.prepend=function(e){if(Array.isArray(e))for(var t=e.length-1;t>=0;t--)this.prepend(e[t]);else{if(!e[isSourceNode]&&\"string\"!=typeof e)throw new TypeError(\"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \"+e);this.children.unshift(e);}return this},SourceNode$1.prototype.walk=function(e){for(var t,n=0,r=this.children.length;n<r;n++)(t=this.children[n])[isSourceNode]?t.walk(e):\"\"!==t&&e(t,{source:this.source,line:this.line,column:this.column,name:this.name});},SourceNode$1.prototype.join=function(e){var t,n,r=this.children.length;if(r>0){for(t=[],n=0;n<r-1;n++)t.push(this.children[n]),t.push(e);t.push(this.children[n]),this.children=t;}return this},SourceNode$1.prototype.replaceRight=function(e,t){var n=this.children[this.children.length-1];return n[isSourceNode]?n.replaceRight(e,t):\"string\"==typeof n?this.children[this.children.length-1]=n.replace(e,t):this.children.push(\"\".replace(e,t)),this},SourceNode$1.prototype.setSourceContent=function(e,t){this.sourceContents[util$6.toSetString(e)]=t;},SourceNode$1.prototype.walkSourceContents=function(e){for(var t=0,n=this.children.length;t<n;t++)this.children[t][isSourceNode]&&this.children[t].walkSourceContents(e);for(var r=Object.keys(this.sourceContents),t=0,n=r.length;t<n;t++)e(util$6.fromSetString(r[t]),this.sourceContents[r[t]]);},SourceNode$1.prototype.toString=function(){var e=\"\";return this.walk(function(t){e+=t;}),e},SourceNode$1.prototype.toStringWithSourceMap=function(e){var t={code:\"\",line:1,column:0},n=new SourceMapGenerator$2(e),r=!1,a=null,i=null,o=null,s=null;return this.walk(function(e,c){t.code+=e,null!==c.source&&null!==c.line&&null!==c.column?(a===c.source&&i===c.line&&o===c.column&&s===c.name||n.addMapping({source:c.source,original:{line:c.line,column:c.column},generated:{line:t.line,column:t.column},name:c.name}),a=c.source,i=c.line,o=c.column,s=c.name,r=!0):r&&(n.addMapping({generated:{line:t.line,column:t.column}}),a=null,r=!1);for(var u=0,l=e.length;u<l;u++)e.charCodeAt(u)===NEWLINE_CODE?(t.line++,t.column=0,u+1===l?(a=null,r=!1):r&&n.addMapping({source:c.source,original:{line:c.line,column:c.column},generated:{line:t.line,column:t.column},name:c.name})):t.column++;}),this.walkSourceContents(function(e,t){n.setSourceContent(e,t);}),{code:t.code,map:n}};var SourceNode_1=SourceNode$1,sourceNode={SourceNode:SourceNode_1},SourceMapGenerator=sourceMapGenerator.SourceMapGenerator,SourceMapConsumer$1=sourceMapConsumer.SourceMapConsumer,SourceNode=sourceNode.SourceNode,sourceMap={SourceMapGenerator:SourceMapGenerator,SourceMapConsumer:SourceMapConsumer$1,SourceNode:SourceNode},SourceMapConsumer=sourceMap.SourceMapConsumer,path$1=path$$1,fs$1;try{(fs$1=fs$$1).existsSync&&fs$1.readFileSync||(fs$1=null);}catch(e){}var errorFormatterInstalled=!1,uncaughtShimInstalled=!1,emptyCacheBetweenOperations=!1,environment=\"auto\",fileContentsCache={},sourceMapCache={},reSourceMap=/^data:application\\/json[^,]+base64,/,retrieveFileHandlers=[],retrieveMapHandlers=[],retrieveFile=handlerExec(retrieveFileHandlers);retrieveFileHandlers.push(function(e){if((e=e.trim())in fileContentsCache)return fileContentsCache[e];n=null;if(fs$1)fs$1.existsSync(e)&&(n=fs$1.readFileSync(e,\"utf8\"));else{var t=new XMLHttpRequest;t.open(\"GET\",e,!1),t.send(null);var n=null;4===t.readyState&&200===t.status&&(n=t.responseText);}return fileContentsCache[e]=n});var retrieveSourceMap=handlerExec(retrieveMapHandlers);retrieveMapHandlers.push(function(e){var t=retrieveSourceMapURL(e);if(!t)return null;var n;if(reSourceMap.test(t)){var r=t.slice(t.indexOf(\",\")+1);n=new Buffer(r,\"base64\").toString(),t=e;}else t=supportRelativeURL(e,t),n=retrieveFile(t);return n?{url:t,map:n}:null});var wrapCallSite_1=wrapCallSite,getErrorSource_1=getErrorSource,mapSourcePosition_1=mapSourcePosition,retrieveSourceMap_1=retrieveSourceMap,install=function(e){if((e=e||{}).environment&&(environment=e.environment,-1===[\"node\",\"browser\",\"auto\"].indexOf(environment)))throw new Error(\"environment \"+environment+\" was unknown. Available options are {auto, browser, node}\");if(e.retrieveFile&&(e.overrideRetrieveFile&&(retrieveFileHandlers.length=0),retrieveFileHandlers.unshift(e.retrieveFile)),e.retrieveSourceMap&&(e.overrideRetrieveSourceMap&&(retrieveMapHandlers.length=0),retrieveMapHandlers.unshift(e.retrieveSourceMap)),e.hookRequire&&!isInBrowser()){var t;try{t=module$1$$1;}catch(e){}var n=t.prototype._compile;n.__sourceMapSupport||(t.prototype._compile=function(e,t){return fileContentsCache[t]=e,sourceMapCache[t]=void 0,n.call(this,e,t)},t.prototype._compile.__sourceMapSupport=!0);}emptyCacheBetweenOperations||(emptyCacheBetweenOperations=\"emptyCacheBetweenOperations\"in e&&e.emptyCacheBetweenOperations),errorFormatterInstalled||(errorFormatterInstalled=!0,Error.prepareStackTrace=prepareStackTrace),uncaughtShimInstalled||(!(\"handleUncaughtExceptions\"in e)||e.handleUncaughtExceptions)&&hasGlobalProcessEventEmitter()&&(uncaughtShimInstalled=!0,shimEmitUncaughtException());},sourceMapSupport={wrapCallSite:wrapCallSite_1,getErrorSource:getErrorSource_1,mapSourcePosition:mapSourcePosition_1,retrieveSourceMap:retrieveSourceMap_1,install:install},typescript=createCommonjsModule$$1(function(e){var t=commonjsGlobal$$1&&commonjsGlobal$$1.__assign||Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++){t=arguments[n];for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);}return e},n=commonjsGlobal$$1&&commonjsGlobal$$1.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t;}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);};return function(t,n){function r(){this.constructor=t;}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r);}}();!function(e){!function(e){e[e.Unknown=0]=\"Unknown\",e[e.EndOfFileToken=1]=\"EndOfFileToken\",e[e.SingleLineCommentTrivia=2]=\"SingleLineCommentTrivia\",e[e.MultiLineCommentTrivia=3]=\"MultiLineCommentTrivia\",e[e.NewLineTrivia=4]=\"NewLineTrivia\",e[e.WhitespaceTrivia=5]=\"WhitespaceTrivia\",e[e.ShebangTrivia=6]=\"ShebangTrivia\",e[e.ConflictMarkerTrivia=7]=\"ConflictMarkerTrivia\",e[e.NumericLiteral=8]=\"NumericLiteral\",e[e.StringLiteral=9]=\"StringLiteral\",e[e.JsxText=10]=\"JsxText\",e[e.JsxTextAllWhiteSpaces=11]=\"JsxTextAllWhiteSpaces\",e[e.RegularExpressionLiteral=12]=\"RegularExpressionLiteral\",e[e.NoSubstitutionTemplateLiteral=13]=\"NoSubstitutionTemplateLiteral\",e[e.TemplateHead=14]=\"TemplateHead\",e[e.TemplateMiddle=15]=\"TemplateMiddle\",e[e.TemplateTail=16]=\"TemplateTail\",e[e.OpenBraceToken=17]=\"OpenBraceToken\",e[e.CloseBraceToken=18]=\"CloseBraceToken\",e[e.OpenParenToken=19]=\"OpenParenToken\",e[e.CloseParenToken=20]=\"CloseParenToken\",e[e.OpenBracketToken=21]=\"OpenBracketToken\",e[e.CloseBracketToken=22]=\"CloseBracketToken\",e[e.DotToken=23]=\"DotToken\",e[e.DotDotDotToken=24]=\"DotDotDotToken\",e[e.SemicolonToken=25]=\"SemicolonToken\",e[e.CommaToken=26]=\"CommaToken\",e[e.LessThanToken=27]=\"LessThanToken\",e[e.LessThanSlashToken=28]=\"LessThanSlashToken\",e[e.GreaterThanToken=29]=\"GreaterThanToken\",e[e.LessThanEqualsToken=30]=\"LessThanEqualsToken\",e[e.GreaterThanEqualsToken=31]=\"GreaterThanEqualsToken\",e[e.EqualsEqualsToken=32]=\"EqualsEqualsToken\",e[e.ExclamationEqualsToken=33]=\"ExclamationEqualsToken\",e[e.EqualsEqualsEqualsToken=34]=\"EqualsEqualsEqualsToken\",e[e.ExclamationEqualsEqualsToken=35]=\"ExclamationEqualsEqualsToken\",e[e.EqualsGreaterThanToken=36]=\"EqualsGreaterThanToken\",e[e.PlusToken=37]=\"PlusToken\",e[e.MinusToken=38]=\"MinusToken\",e[e.AsteriskToken=39]=\"AsteriskToken\",e[e.AsteriskAsteriskToken=40]=\"AsteriskAsteriskToken\",e[e.SlashToken=41]=\"SlashToken\",e[e.PercentToken=42]=\"PercentToken\",e[e.PlusPlusToken=43]=\"PlusPlusToken\",e[e.MinusMinusToken=44]=\"MinusMinusToken\",e[e.LessThanLessThanToken=45]=\"LessThanLessThanToken\",e[e.GreaterThanGreaterThanToken=46]=\"GreaterThanGreaterThanToken\",e[e.GreaterThanGreaterThanGreaterThanToken=47]=\"GreaterThanGreaterThanGreaterThanToken\",e[e.AmpersandToken=48]=\"AmpersandToken\",e[e.BarToken=49]=\"BarToken\",e[e.CaretToken=50]=\"CaretToken\",e[e.ExclamationToken=51]=\"ExclamationToken\",e[e.TildeToken=52]=\"TildeToken\",e[e.AmpersandAmpersandToken=53]=\"AmpersandAmpersandToken\",e[e.BarBarToken=54]=\"BarBarToken\",e[e.QuestionToken=55]=\"QuestionToken\",e[e.ColonToken=56]=\"ColonToken\",e[e.AtToken=57]=\"AtToken\",e[e.EqualsToken=58]=\"EqualsToken\",e[e.PlusEqualsToken=59]=\"PlusEqualsToken\",e[e.MinusEqualsToken=60]=\"MinusEqualsToken\",e[e.AsteriskEqualsToken=61]=\"AsteriskEqualsToken\",e[e.AsteriskAsteriskEqualsToken=62]=\"AsteriskAsteriskEqualsToken\",e[e.SlashEqualsToken=63]=\"SlashEqualsToken\",e[e.PercentEqualsToken=64]=\"PercentEqualsToken\",e[e.LessThanLessThanEqualsToken=65]=\"LessThanLessThanEqualsToken\",e[e.GreaterThanGreaterThanEqualsToken=66]=\"GreaterThanGreaterThanEqualsToken\",e[e.GreaterThanGreaterThanGreaterThanEqualsToken=67]=\"GreaterThanGreaterThanGreaterThanEqualsToken\",e[e.AmpersandEqualsToken=68]=\"AmpersandEqualsToken\",e[e.BarEqualsToken=69]=\"BarEqualsToken\",e[e.CaretEqualsToken=70]=\"CaretEqualsToken\",e[e.Identifier=71]=\"Identifier\",e[e.BreakKeyword=72]=\"BreakKeyword\",e[e.CaseKeyword=73]=\"CaseKeyword\",e[e.CatchKeyword=74]=\"CatchKeyword\",e[e.ClassKeyword=75]=\"ClassKeyword\",e[e.ConstKeyword=76]=\"ConstKeyword\",e[e.ContinueKeyword=77]=\"ContinueKeyword\",e[e.DebuggerKeyword=78]=\"DebuggerKeyword\",e[e.DefaultKeyword=79]=\"DefaultKeyword\",e[e.DeleteKeyword=80]=\"DeleteKeyword\",e[e.DoKeyword=81]=\"DoKeyword\",e[e.ElseKeyword=82]=\"ElseKeyword\",e[e.EnumKeyword=83]=\"EnumKeyword\",e[e.ExportKeyword=84]=\"ExportKeyword\",e[e.ExtendsKeyword=85]=\"ExtendsKeyword\",e[e.FalseKeyword=86]=\"FalseKeyword\",e[e.FinallyKeyword=87]=\"FinallyKeyword\",e[e.ForKeyword=88]=\"ForKeyword\",e[e.FunctionKeyword=89]=\"FunctionKeyword\",e[e.IfKeyword=90]=\"IfKeyword\",e[e.ImportKeyword=91]=\"ImportKeyword\",e[e.InKeyword=92]=\"InKeyword\",e[e.InstanceOfKeyword=93]=\"InstanceOfKeyword\",e[e.NewKeyword=94]=\"NewKeyword\",e[e.NullKeyword=95]=\"NullKeyword\",e[e.ReturnKeyword=96]=\"ReturnKeyword\",e[e.SuperKeyword=97]=\"SuperKeyword\",e[e.SwitchKeyword=98]=\"SwitchKeyword\",e[e.ThisKeyword=99]=\"ThisKeyword\",e[e.ThrowKeyword=100]=\"ThrowKeyword\",e[e.TrueKeyword=101]=\"TrueKeyword\",e[e.TryKeyword=102]=\"TryKeyword\",e[e.TypeOfKeyword=103]=\"TypeOfKeyword\",e[e.VarKeyword=104]=\"VarKeyword\",e[e.VoidKeyword=105]=\"VoidKeyword\",e[e.WhileKeyword=106]=\"WhileKeyword\",e[e.WithKeyword=107]=\"WithKeyword\",e[e.ImplementsKeyword=108]=\"ImplementsKeyword\",e[e.InterfaceKeyword=109]=\"InterfaceKeyword\",e[e.LetKeyword=110]=\"LetKeyword\",e[e.PackageKeyword=111]=\"PackageKeyword\",e[e.PrivateKeyword=112]=\"PrivateKeyword\",e[e.ProtectedKeyword=113]=\"ProtectedKeyword\",e[e.PublicKeyword=114]=\"PublicKeyword\",e[e.StaticKeyword=115]=\"StaticKeyword\",e[e.YieldKeyword=116]=\"YieldKeyword\",e[e.AbstractKeyword=117]=\"AbstractKeyword\",e[e.AsKeyword=118]=\"AsKeyword\",e[e.AnyKeyword=119]=\"AnyKeyword\",e[e.AsyncKeyword=120]=\"AsyncKeyword\",e[e.AwaitKeyword=121]=\"AwaitKeyword\",e[e.BooleanKeyword=122]=\"BooleanKeyword\",e[e.ConstructorKeyword=123]=\"ConstructorKeyword\",e[e.DeclareKeyword=124]=\"DeclareKeyword\",e[e.GetKeyword=125]=\"GetKeyword\",e[e.IsKeyword=126]=\"IsKeyword\",e[e.KeyOfKeyword=127]=\"KeyOfKeyword\",e[e.ModuleKeyword=128]=\"ModuleKeyword\",e[e.NamespaceKeyword=129]=\"NamespaceKeyword\",e[e.NeverKeyword=130]=\"NeverKeyword\",e[e.ReadonlyKeyword=131]=\"ReadonlyKeyword\",e[e.RequireKeyword=132]=\"RequireKeyword\",e[e.NumberKeyword=133]=\"NumberKeyword\",e[e.ObjectKeyword=134]=\"ObjectKeyword\",e[e.SetKeyword=135]=\"SetKeyword\",e[e.StringKeyword=136]=\"StringKeyword\",e[e.SymbolKeyword=137]=\"SymbolKeyword\",e[e.TypeKeyword=138]=\"TypeKeyword\",e[e.UndefinedKeyword=139]=\"UndefinedKeyword\",e[e.FromKeyword=140]=\"FromKeyword\",e[e.GlobalKeyword=141]=\"GlobalKeyword\",e[e.OfKeyword=142]=\"OfKeyword\",e[e.QualifiedName=143]=\"QualifiedName\",e[e.ComputedPropertyName=144]=\"ComputedPropertyName\",e[e.TypeParameter=145]=\"TypeParameter\",e[e.Parameter=146]=\"Parameter\",e[e.Decorator=147]=\"Decorator\",e[e.PropertySignature=148]=\"PropertySignature\",e[e.PropertyDeclaration=149]=\"PropertyDeclaration\",e[e.MethodSignature=150]=\"MethodSignature\",e[e.MethodDeclaration=151]=\"MethodDeclaration\",e[e.Constructor=152]=\"Constructor\",e[e.GetAccessor=153]=\"GetAccessor\",e[e.SetAccessor=154]=\"SetAccessor\",e[e.CallSignature=155]=\"CallSignature\",e[e.ConstructSignature=156]=\"ConstructSignature\",e[e.IndexSignature=157]=\"IndexSignature\",e[e.TypePredicate=158]=\"TypePredicate\",e[e.TypeReference=159]=\"TypeReference\",e[e.FunctionType=160]=\"FunctionType\",e[e.ConstructorType=161]=\"ConstructorType\",e[e.TypeQuery=162]=\"TypeQuery\",e[e.TypeLiteral=163]=\"TypeLiteral\",e[e.ArrayType=164]=\"ArrayType\",e[e.TupleType=165]=\"TupleType\",e[e.UnionType=166]=\"UnionType\",e[e.IntersectionType=167]=\"IntersectionType\",e[e.ParenthesizedType=168]=\"ParenthesizedType\",e[e.ThisType=169]=\"ThisType\",e[e.TypeOperator=170]=\"TypeOperator\",e[e.IndexedAccessType=171]=\"IndexedAccessType\",e[e.MappedType=172]=\"MappedType\",e[e.LiteralType=173]=\"LiteralType\",e[e.ObjectBindingPattern=174]=\"ObjectBindingPattern\",e[e.ArrayBindingPattern=175]=\"ArrayBindingPattern\",e[e.BindingElement=176]=\"BindingElement\",e[e.ArrayLiteralExpression=177]=\"ArrayLiteralExpression\",e[e.ObjectLiteralExpression=178]=\"ObjectLiteralExpression\",e[e.PropertyAccessExpression=179]=\"PropertyAccessExpression\",e[e.ElementAccessExpression=180]=\"ElementAccessExpression\",e[e.CallExpression=181]=\"CallExpression\",e[e.NewExpression=182]=\"NewExpression\",e[e.TaggedTemplateExpression=183]=\"TaggedTemplateExpression\",e[e.TypeAssertionExpression=184]=\"TypeAssertionExpression\",e[e.ParenthesizedExpression=185]=\"ParenthesizedExpression\",e[e.FunctionExpression=186]=\"FunctionExpression\",e[e.ArrowFunction=187]=\"ArrowFunction\",e[e.DeleteExpression=188]=\"DeleteExpression\",e[e.TypeOfExpression=189]=\"TypeOfExpression\",e[e.VoidExpression=190]=\"VoidExpression\",e[e.AwaitExpression=191]=\"AwaitExpression\",e[e.PrefixUnaryExpression=192]=\"PrefixUnaryExpression\",e[e.PostfixUnaryExpression=193]=\"PostfixUnaryExpression\",e[e.BinaryExpression=194]=\"BinaryExpression\",e[e.ConditionalExpression=195]=\"ConditionalExpression\",e[e.TemplateExpression=196]=\"TemplateExpression\",e[e.YieldExpression=197]=\"YieldExpression\",e[e.SpreadElement=198]=\"SpreadElement\",e[e.ClassExpression=199]=\"ClassExpression\",e[e.OmittedExpression=200]=\"OmittedExpression\",e[e.ExpressionWithTypeArguments=201]=\"ExpressionWithTypeArguments\",e[e.AsExpression=202]=\"AsExpression\",e[e.NonNullExpression=203]=\"NonNullExpression\",e[e.MetaProperty=204]=\"MetaProperty\",e[e.TemplateSpan=205]=\"TemplateSpan\",e[e.SemicolonClassElement=206]=\"SemicolonClassElement\",e[e.Block=207]=\"Block\",e[e.VariableStatement=208]=\"VariableStatement\",e[e.EmptyStatement=209]=\"EmptyStatement\",e[e.ExpressionStatement=210]=\"ExpressionStatement\",e[e.IfStatement=211]=\"IfStatement\",e[e.DoStatement=212]=\"DoStatement\",e[e.WhileStatement=213]=\"WhileStatement\",e[e.ForStatement=214]=\"ForStatement\",e[e.ForInStatement=215]=\"ForInStatement\",e[e.ForOfStatement=216]=\"ForOfStatement\",e[e.ContinueStatement=217]=\"ContinueStatement\",e[e.BreakStatement=218]=\"BreakStatement\",e[e.ReturnStatement=219]=\"ReturnStatement\",e[e.WithStatement=220]=\"WithStatement\",e[e.SwitchStatement=221]=\"SwitchStatement\",e[e.LabeledStatement=222]=\"LabeledStatement\",e[e.ThrowStatement=223]=\"ThrowStatement\",e[e.TryStatement=224]=\"TryStatement\",e[e.DebuggerStatement=225]=\"DebuggerStatement\",e[e.VariableDeclaration=226]=\"VariableDeclaration\",e[e.VariableDeclarationList=227]=\"VariableDeclarationList\",e[e.FunctionDeclaration=228]=\"FunctionDeclaration\",e[e.ClassDeclaration=229]=\"ClassDeclaration\",e[e.InterfaceDeclaration=230]=\"InterfaceDeclaration\",e[e.TypeAliasDeclaration=231]=\"TypeAliasDeclaration\",e[e.EnumDeclaration=232]=\"EnumDeclaration\",e[e.ModuleDeclaration=233]=\"ModuleDeclaration\",e[e.ModuleBlock=234]=\"ModuleBlock\",e[e.CaseBlock=235]=\"CaseBlock\",e[e.NamespaceExportDeclaration=236]=\"NamespaceExportDeclaration\",e[e.ImportEqualsDeclaration=237]=\"ImportEqualsDeclaration\",e[e.ImportDeclaration=238]=\"ImportDeclaration\",e[e.ImportClause=239]=\"ImportClause\",e[e.NamespaceImport=240]=\"NamespaceImport\",e[e.NamedImports=241]=\"NamedImports\",e[e.ImportSpecifier=242]=\"ImportSpecifier\",e[e.ExportAssignment=243]=\"ExportAssignment\",e[e.ExportDeclaration=244]=\"ExportDeclaration\",e[e.NamedExports=245]=\"NamedExports\",e[e.ExportSpecifier=246]=\"ExportSpecifier\",e[e.MissingDeclaration=247]=\"MissingDeclaration\",e[e.ExternalModuleReference=248]=\"ExternalModuleReference\",e[e.JsxElement=249]=\"JsxElement\",e[e.JsxSelfClosingElement=250]=\"JsxSelfClosingElement\",e[e.JsxOpeningElement=251]=\"JsxOpeningElement\",e[e.JsxClosingElement=252]=\"JsxClosingElement\",e[e.JsxAttribute=253]=\"JsxAttribute\",e[e.JsxAttributes=254]=\"JsxAttributes\",e[e.JsxSpreadAttribute=255]=\"JsxSpreadAttribute\",e[e.JsxExpression=256]=\"JsxExpression\",e[e.CaseClause=257]=\"CaseClause\",e[e.DefaultClause=258]=\"DefaultClause\",e[e.HeritageClause=259]=\"HeritageClause\",e[e.CatchClause=260]=\"CatchClause\",e[e.PropertyAssignment=261]=\"PropertyAssignment\",e[e.ShorthandPropertyAssignment=262]=\"ShorthandPropertyAssignment\",e[e.SpreadAssignment=263]=\"SpreadAssignment\",e[e.EnumMember=264]=\"EnumMember\",e[e.SourceFile=265]=\"SourceFile\",e[e.Bundle=266]=\"Bundle\",e[e.JSDocTypeExpression=267]=\"JSDocTypeExpression\",e[e.JSDocAllType=268]=\"JSDocAllType\",e[e.JSDocUnknownType=269]=\"JSDocUnknownType\",e[e.JSDocArrayType=270]=\"JSDocArrayType\",e[e.JSDocUnionType=271]=\"JSDocUnionType\",e[e.JSDocTupleType=272]=\"JSDocTupleType\",e[e.JSDocNullableType=273]=\"JSDocNullableType\",e[e.JSDocNonNullableType=274]=\"JSDocNonNullableType\",e[e.JSDocRecordType=275]=\"JSDocRecordType\",e[e.JSDocRecordMember=276]=\"JSDocRecordMember\",e[e.JSDocTypeReference=277]=\"JSDocTypeReference\",e[e.JSDocOptionalType=278]=\"JSDocOptionalType\",e[e.JSDocFunctionType=279]=\"JSDocFunctionType\",e[e.JSDocVariadicType=280]=\"JSDocVariadicType\",e[e.JSDocConstructorType=281]=\"JSDocConstructorType\",e[e.JSDocThisType=282]=\"JSDocThisType\",e[e.JSDocComment=283]=\"JSDocComment\",e[e.JSDocTag=284]=\"JSDocTag\",e[e.JSDocAugmentsTag=285]=\"JSDocAugmentsTag\",e[e.JSDocClassTag=286]=\"JSDocClassTag\",e[e.JSDocParameterTag=287]=\"JSDocParameterTag\",e[e.JSDocReturnTag=288]=\"JSDocReturnTag\",e[e.JSDocTypeTag=289]=\"JSDocTypeTag\",e[e.JSDocTemplateTag=290]=\"JSDocTemplateTag\",e[e.JSDocTypedefTag=291]=\"JSDocTypedefTag\",e[e.JSDocPropertyTag=292]=\"JSDocPropertyTag\",e[e.JSDocTypeLiteral=293]=\"JSDocTypeLiteral\",e[e.JSDocLiteralType=294]=\"JSDocLiteralType\",e[e.SyntaxList=295]=\"SyntaxList\",e[e.NotEmittedStatement=296]=\"NotEmittedStatement\",e[e.PartiallyEmittedExpression=297]=\"PartiallyEmittedExpression\",e[e.CommaListExpression=298]=\"CommaListExpression\",e[e.MergeDeclarationMarker=299]=\"MergeDeclarationMarker\",e[e.EndOfDeclarationMarker=300]=\"EndOfDeclarationMarker\",e[e.Count=301]=\"Count\",e[e.FirstAssignment=58]=\"FirstAssignment\",e[e.LastAssignment=70]=\"LastAssignment\",e[e.FirstCompoundAssignment=59]=\"FirstCompoundAssignment\",e[e.LastCompoundAssignment=70]=\"LastCompoundAssignment\",e[e.FirstReservedWord=72]=\"FirstReservedWord\",e[e.LastReservedWord=107]=\"LastReservedWord\",e[e.FirstKeyword=72]=\"FirstKeyword\",e[e.LastKeyword=142]=\"LastKeyword\",e[e.FirstFutureReservedWord=108]=\"FirstFutureReservedWord\",e[e.LastFutureReservedWord=116]=\"LastFutureReservedWord\",e[e.FirstTypeNode=158]=\"FirstTypeNode\",e[e.LastTypeNode=173]=\"LastTypeNode\",e[e.FirstPunctuation=17]=\"FirstPunctuation\",e[e.LastPunctuation=70]=\"LastPunctuation\",e[e.FirstToken=0]=\"FirstToken\",e[e.LastToken=142]=\"LastToken\",e[e.FirstTriviaToken=2]=\"FirstTriviaToken\",e[e.LastTriviaToken=7]=\"LastTriviaToken\",e[e.FirstLiteralToken=8]=\"FirstLiteralToken\",e[e.LastLiteralToken=13]=\"LastLiteralToken\",e[e.FirstTemplateToken=13]=\"FirstTemplateToken\",e[e.LastTemplateToken=16]=\"LastTemplateToken\",e[e.FirstBinaryOperator=27]=\"FirstBinaryOperator\",e[e.LastBinaryOperator=70]=\"LastBinaryOperator\",e[e.FirstNode=143]=\"FirstNode\",e[e.FirstJSDocNode=267]=\"FirstJSDocNode\",e[e.LastJSDocNode=294]=\"LastJSDocNode\",e[e.FirstJSDocTagNode=284]=\"FirstJSDocTagNode\",e[e.LastJSDocTagNode=294]=\"LastJSDocTagNode\";}(e.SyntaxKind||(e.SyntaxKind={}));!function(e){e[e.None=0]=\"None\",e[e.Let=1]=\"Let\",e[e.Const=2]=\"Const\",e[e.NestedNamespace=4]=\"NestedNamespace\",e[e.Synthesized=8]=\"Synthesized\",e[e.Namespace=16]=\"Namespace\",e[e.ExportContext=32]=\"ExportContext\",e[e.ContainsThis=64]=\"ContainsThis\",e[e.HasImplicitReturn=128]=\"HasImplicitReturn\",e[e.HasExplicitReturn=256]=\"HasExplicitReturn\",e[e.GlobalAugmentation=512]=\"GlobalAugmentation\",e[e.HasAsyncFunctions=1024]=\"HasAsyncFunctions\",e[e.DisallowInContext=2048]=\"DisallowInContext\",e[e.YieldContext=4096]=\"YieldContext\",e[e.DecoratorContext=8192]=\"DecoratorContext\",e[e.AwaitContext=16384]=\"AwaitContext\",e[e.ThisNodeHasError=32768]=\"ThisNodeHasError\",e[e.JavaScriptFile=65536]=\"JavaScriptFile\",e[e.ThisNodeOrAnySubNodesHasError=131072]=\"ThisNodeOrAnySubNodesHasError\",e[e.HasAggregatedChildData=262144]=\"HasAggregatedChildData\",e[e.PossiblyContainsDynamicImport=524288]=\"PossiblyContainsDynamicImport\",e[e.BlockScoped=3]=\"BlockScoped\",e[e.ReachabilityCheckFlags=384]=\"ReachabilityCheckFlags\",e[e.ReachabilityAndEmitFlags=1408]=\"ReachabilityAndEmitFlags\",e[e.ContextFlags=96256]=\"ContextFlags\",e[e.TypeExcludesFlags=20480]=\"TypeExcludesFlags\";}(e.NodeFlags||(e.NodeFlags={}));!function(e){e[e.None=0]=\"None\",e[e.Export=1]=\"Export\",e[e.Ambient=2]=\"Ambient\",e[e.Public=4]=\"Public\",e[e.Private=8]=\"Private\",e[e.Protected=16]=\"Protected\",e[e.Static=32]=\"Static\",e[e.Readonly=64]=\"Readonly\",e[e.Abstract=128]=\"Abstract\",e[e.Async=256]=\"Async\",e[e.Default=512]=\"Default\",e[e.Const=2048]=\"Const\",e[e.HasComputedFlags=536870912]=\"HasComputedFlags\",e[e.AccessibilityModifier=28]=\"AccessibilityModifier\",e[e.ParameterPropertyModifier=92]=\"ParameterPropertyModifier\",e[e.NonPublicAccessibilityModifier=24]=\"NonPublicAccessibilityModifier\",e[e.TypeScriptModifier=2270]=\"TypeScriptModifier\",e[e.ExportDefault=513]=\"ExportDefault\";}(e.ModifierFlags||(e.ModifierFlags={}));!function(e){e[e.None=0]=\"None\",e[e.IntrinsicNamedElement=1]=\"IntrinsicNamedElement\",e[e.IntrinsicIndexedElement=2]=\"IntrinsicIndexedElement\",e[e.IntrinsicElement=3]=\"IntrinsicElement\";}(e.JsxFlags||(e.JsxFlags={}));!function(e){e[e.Succeeded=1]=\"Succeeded\",e[e.Failed=2]=\"Failed\",e[e.FailedAndReported=3]=\"FailedAndReported\";}(e.RelationComparisonResult||(e.RelationComparisonResult={}));!function(e){e[e.None=0]=\"None\",e[e.Auto=1]=\"Auto\",e[e.Loop=2]=\"Loop\",e[e.Unique=3]=\"Unique\",e[e.Node=4]=\"Node\";}(e.GeneratedIdentifierKind||(e.GeneratedIdentifierKind={}));!function(e){e[e.None=0]=\"None\",e[e.Scientific=2]=\"Scientific\",e[e.Octal=4]=\"Octal\",e[e.HexSpecifier=8]=\"HexSpecifier\",e[e.BinarySpecifier=16]=\"BinarySpecifier\",e[e.OctalSpecifier=32]=\"OctalSpecifier\",e[e.BinaryOrOctalSpecifier=48]=\"BinaryOrOctalSpecifier\";}(e.NumericLiteralFlags||(e.NumericLiteralFlags={}));!function(e){e[e.Unreachable=1]=\"Unreachable\",e[e.Start=2]=\"Start\",e[e.BranchLabel=4]=\"BranchLabel\",e[e.LoopLabel=8]=\"LoopLabel\",e[e.Assignment=16]=\"Assignment\",e[e.TrueCondition=32]=\"TrueCondition\",e[e.FalseCondition=64]=\"FalseCondition\",e[e.SwitchClause=128]=\"SwitchClause\",e[e.ArrayMutation=256]=\"ArrayMutation\",e[e.Referenced=512]=\"Referenced\",e[e.Shared=1024]=\"Shared\",e[e.PreFinally=2048]=\"PreFinally\",e[e.AfterFinally=4096]=\"AfterFinally\",e[e.Label=12]=\"Label\",e[e.Condition=96]=\"Condition\";}(e.FlowFlags||(e.FlowFlags={}));var t=function(){function e(){}return e}();e.OperationCanceledException=t;!function(e){e[e.Not=0]=\"Not\",e[e.SafeModules=1]=\"SafeModules\",e[e.Completely=2]=\"Completely\";}(e.StructureIsReused||(e.StructureIsReused={}));!function(e){e[e.Success=0]=\"Success\",e[e.DiagnosticsPresent_OutputsSkipped=1]=\"DiagnosticsPresent_OutputsSkipped\",e[e.DiagnosticsPresent_OutputsGenerated=2]=\"DiagnosticsPresent_OutputsGenerated\";}(e.ExitStatus||(e.ExitStatus={}));!function(e){e[e.None=0]=\"None\",e[e.NoTruncation=1]=\"NoTruncation\",e[e.WriteArrayAsGenericType=2]=\"WriteArrayAsGenericType\",e[e.WriteTypeArgumentsOfSignature=32]=\"WriteTypeArgumentsOfSignature\",e[e.UseFullyQualifiedType=64]=\"UseFullyQualifiedType\",e[e.SuppressAnyReturnType=256]=\"SuppressAnyReturnType\",e[e.WriteTypeParametersInQualifiedName=512]=\"WriteTypeParametersInQualifiedName\",e[e.AllowThisInObjectLiteral=1024]=\"AllowThisInObjectLiteral\",e[e.AllowQualifedNameInPlaceOfIdentifier=2048]=\"AllowQualifedNameInPlaceOfIdentifier\",e[e.AllowAnonymousIdentifier=8192]=\"AllowAnonymousIdentifier\",e[e.AllowEmptyUnionOrIntersection=16384]=\"AllowEmptyUnionOrIntersection\",e[e.AllowEmptyTuple=32768]=\"AllowEmptyTuple\",e[e.IgnoreErrors=60416]=\"IgnoreErrors\",e[e.InObjectTypeLiteral=1048576]=\"InObjectTypeLiteral\",e[e.InTypeAlias=8388608]=\"InTypeAlias\";}(e.NodeBuilderFlags||(e.NodeBuilderFlags={}));!function(e){e[e.None=0]=\"None\",e[e.WriteArrayAsGenericType=1]=\"WriteArrayAsGenericType\",e[e.UseTypeOfFunction=4]=\"UseTypeOfFunction\",e[e.NoTruncation=8]=\"NoTruncation\",e[e.WriteArrowStyleSignature=16]=\"WriteArrowStyleSignature\",e[e.WriteOwnNameForAnyLike=32]=\"WriteOwnNameForAnyLike\",e[e.WriteTypeArgumentsOfSignature=64]=\"WriteTypeArgumentsOfSignature\",e[e.InElementType=128]=\"InElementType\",e[e.UseFullyQualifiedType=256]=\"UseFullyQualifiedType\",e[e.InFirstTypeArgument=512]=\"InFirstTypeArgument\",e[e.InTypeAlias=1024]=\"InTypeAlias\",e[e.UseTypeAliasValue=2048]=\"UseTypeAliasValue\",e[e.SuppressAnyReturnType=4096]=\"SuppressAnyReturnType\",e[e.AddUndefined=8192]=\"AddUndefined\",e[e.WriteClassExpressionAsTypeLiteral=16384]=\"WriteClassExpressionAsTypeLiteral\";}(e.TypeFormatFlags||(e.TypeFormatFlags={}));!function(e){e[e.None=0]=\"None\",e[e.WriteTypeParametersOrArguments=1]=\"WriteTypeParametersOrArguments\",e[e.UseOnlyExternalAliasing=2]=\"UseOnlyExternalAliasing\";}(e.SymbolFormatFlags||(e.SymbolFormatFlags={}));!function(e){e[e.Accessible=0]=\"Accessible\",e[e.NotAccessible=1]=\"NotAccessible\",e[e.CannotBeNamed=2]=\"CannotBeNamed\";}(e.SymbolAccessibility||(e.SymbolAccessibility={}));!function(e){e[e.UnionOrIntersection=0]=\"UnionOrIntersection\",e[e.Spread=1]=\"Spread\";}(e.SyntheticSymbolKind||(e.SyntheticSymbolKind={}));!function(e){e[e.This=0]=\"This\",e[e.Identifier=1]=\"Identifier\";}(e.TypePredicateKind||(e.TypePredicateKind={}));!function(e){e[e.Unknown=0]=\"Unknown\",e[e.TypeWithConstructSignatureAndValue=1]=\"TypeWithConstructSignatureAndValue\",e[e.VoidNullableOrNeverType=2]=\"VoidNullableOrNeverType\",e[e.NumberLikeType=3]=\"NumberLikeType\",e[e.StringLikeType=4]=\"StringLikeType\",e[e.BooleanType=5]=\"BooleanType\",e[e.ArrayLikeType=6]=\"ArrayLikeType\",e[e.ESSymbolType=7]=\"ESSymbolType\",e[e.Promise=8]=\"Promise\",e[e.TypeWithCallSignature=9]=\"TypeWithCallSignature\",e[e.ObjectType=10]=\"ObjectType\";}(e.TypeReferenceSerializationKind||(e.TypeReferenceSerializationKind={}));!function(e){e[e.None=0]=\"None\",e[e.FunctionScopedVariable=1]=\"FunctionScopedVariable\",e[e.BlockScopedVariable=2]=\"BlockScopedVariable\",e[e.Property=4]=\"Property\",e[e.EnumMember=8]=\"EnumMember\",e[e.Function=16]=\"Function\",e[e.Class=32]=\"Class\",e[e.Interface=64]=\"Interface\",e[e.ConstEnum=128]=\"ConstEnum\",e[e.RegularEnum=256]=\"RegularEnum\",e[e.ValueModule=512]=\"ValueModule\",e[e.NamespaceModule=1024]=\"NamespaceModule\",e[e.TypeLiteral=2048]=\"TypeLiteral\",e[e.ObjectLiteral=4096]=\"ObjectLiteral\",e[e.Method=8192]=\"Method\",e[e.Constructor=16384]=\"Constructor\",e[e.GetAccessor=32768]=\"GetAccessor\",e[e.SetAccessor=65536]=\"SetAccessor\",e[e.Signature=131072]=\"Signature\",e[e.TypeParameter=262144]=\"TypeParameter\",e[e.TypeAlias=524288]=\"TypeAlias\",e[e.ExportValue=1048576]=\"ExportValue\",e[e.ExportType=2097152]=\"ExportType\",e[e.ExportNamespace=4194304]=\"ExportNamespace\",e[e.Alias=8388608]=\"Alias\",e[e.Prototype=16777216]=\"Prototype\",e[e.ExportStar=33554432]=\"ExportStar\",e[e.Optional=67108864]=\"Optional\",e[e.Transient=134217728]=\"Transient\",e[e.Enum=384]=\"Enum\",e[e.Variable=3]=\"Variable\",e[e.Value=107455]=\"Value\",e[e.Type=793064]=\"Type\",e[e.Namespace=1920]=\"Namespace\",e[e.Module=1536]=\"Module\",e[e.Accessor=98304]=\"Accessor\",e[e.FunctionScopedVariableExcludes=107454]=\"FunctionScopedVariableExcludes\",e[e.BlockScopedVariableExcludes=107455]=\"BlockScopedVariableExcludes\",e[e.ParameterExcludes=107455]=\"ParameterExcludes\",e[e.PropertyExcludes=0]=\"PropertyExcludes\",e[e.EnumMemberExcludes=900095]=\"EnumMemberExcludes\",e[e.FunctionExcludes=106927]=\"FunctionExcludes\",e[e.ClassExcludes=899519]=\"ClassExcludes\",e[e.InterfaceExcludes=792968]=\"InterfaceExcludes\",e[e.RegularEnumExcludes=899327]=\"RegularEnumExcludes\",e[e.ConstEnumExcludes=899967]=\"ConstEnumExcludes\",e[e.ValueModuleExcludes=106639]=\"ValueModuleExcludes\",e[e.NamespaceModuleExcludes=0]=\"NamespaceModuleExcludes\",e[e.MethodExcludes=99263]=\"MethodExcludes\",e[e.GetAccessorExcludes=41919]=\"GetAccessorExcludes\",e[e.SetAccessorExcludes=74687]=\"SetAccessorExcludes\",e[e.TypeParameterExcludes=530920]=\"TypeParameterExcludes\",e[e.TypeAliasExcludes=793064]=\"TypeAliasExcludes\",e[e.AliasExcludes=8388608]=\"AliasExcludes\",e[e.ModuleMember=8914931]=\"ModuleMember\",e[e.ExportHasLocal=944]=\"ExportHasLocal\",e[e.HasExports=1952]=\"HasExports\",e[e.HasMembers=6240]=\"HasMembers\",e[e.BlockScoped=418]=\"BlockScoped\",e[e.PropertyOrAccessor=98308]=\"PropertyOrAccessor\",e[e.Export=7340032]=\"Export\",e[e.ClassMember=106500]=\"ClassMember\",e[e.Classifiable=788448]=\"Classifiable\";}(e.SymbolFlags||(e.SymbolFlags={}));!function(e){e[e.Numeric=0]=\"Numeric\",e[e.Literal=1]=\"Literal\";}(e.EnumKind||(e.EnumKind={}));!function(e){e[e.Instantiated=1]=\"Instantiated\",e[e.SyntheticProperty=2]=\"SyntheticProperty\",e[e.SyntheticMethod=4]=\"SyntheticMethod\",e[e.Readonly=8]=\"Readonly\",e[e.Partial=16]=\"Partial\",e[e.HasNonUniformType=32]=\"HasNonUniformType\",e[e.ContainsPublic=64]=\"ContainsPublic\",e[e.ContainsProtected=128]=\"ContainsProtected\",e[e.ContainsPrivate=256]=\"ContainsPrivate\",e[e.ContainsStatic=512]=\"ContainsStatic\",e[e.Synthetic=6]=\"Synthetic\";}(e.CheckFlags||(e.CheckFlags={}));!function(e){e[e.TypeChecked=1]=\"TypeChecked\",e[e.LexicalThis=2]=\"LexicalThis\",e[e.CaptureThis=4]=\"CaptureThis\",e[e.CaptureNewTarget=8]=\"CaptureNewTarget\",e[e.SuperInstance=256]=\"SuperInstance\",e[e.SuperStatic=512]=\"SuperStatic\",e[e.ContextChecked=1024]=\"ContextChecked\",e[e.AsyncMethodWithSuper=2048]=\"AsyncMethodWithSuper\",e[e.AsyncMethodWithSuperBinding=4096]=\"AsyncMethodWithSuperBinding\",e[e.CaptureArguments=8192]=\"CaptureArguments\",e[e.EnumValuesComputed=16384]=\"EnumValuesComputed\",e[e.LexicalModuleMergesWithClass=32768]=\"LexicalModuleMergesWithClass\",e[e.LoopWithCapturedBlockScopedBinding=65536]=\"LoopWithCapturedBlockScopedBinding\",e[e.CapturedBlockScopedBinding=131072]=\"CapturedBlockScopedBinding\",e[e.BlockScopedBindingInLoop=262144]=\"BlockScopedBindingInLoop\",e[e.ClassWithBodyScopedClassBinding=524288]=\"ClassWithBodyScopedClassBinding\",e[e.BodyScopedClassBinding=1048576]=\"BodyScopedClassBinding\",e[e.NeedsLoopOutParameter=2097152]=\"NeedsLoopOutParameter\",e[e.AssignmentsMarked=4194304]=\"AssignmentsMarked\",e[e.ClassWithConstructorReference=8388608]=\"ClassWithConstructorReference\",e[e.ConstructorReferenceInClass=16777216]=\"ConstructorReferenceInClass\";}(e.NodeCheckFlags||(e.NodeCheckFlags={}));!function(e){e[e.Any=1]=\"Any\",e[e.String=2]=\"String\",e[e.Number=4]=\"Number\",e[e.Boolean=8]=\"Boolean\",e[e.Enum=16]=\"Enum\",e[e.StringLiteral=32]=\"StringLiteral\",e[e.NumberLiteral=64]=\"NumberLiteral\",e[e.BooleanLiteral=128]=\"BooleanLiteral\",e[e.EnumLiteral=256]=\"EnumLiteral\",e[e.ESSymbol=512]=\"ESSymbol\",e[e.Void=1024]=\"Void\",e[e.Undefined=2048]=\"Undefined\",e[e.Null=4096]=\"Null\",e[e.Never=8192]=\"Never\",e[e.TypeParameter=16384]=\"TypeParameter\",e[e.Object=32768]=\"Object\",e[e.Union=65536]=\"Union\",e[e.Intersection=131072]=\"Intersection\",e[e.Index=262144]=\"Index\",e[e.IndexedAccess=524288]=\"IndexedAccess\",e[e.FreshLiteral=1048576]=\"FreshLiteral\",e[e.ContainsWideningType=2097152]=\"ContainsWideningType\",e[e.ContainsObjectLiteral=4194304]=\"ContainsObjectLiteral\",e[e.ContainsAnyFunctionType=8388608]=\"ContainsAnyFunctionType\",e[e.NonPrimitive=16777216]=\"NonPrimitive\",e[e.JsxAttributes=33554432]=\"JsxAttributes\",e[e.Nullable=6144]=\"Nullable\",e[e.Literal=224]=\"Literal\",e[e.StringOrNumberLiteral=96]=\"StringOrNumberLiteral\",e[e.DefinitelyFalsy=7392]=\"DefinitelyFalsy\",e[e.PossiblyFalsy=7406]=\"PossiblyFalsy\",e[e.Intrinsic=16793231]=\"Intrinsic\",e[e.Primitive=8190]=\"Primitive\",e[e.StringLike=262178]=\"StringLike\",e[e.NumberLike=84]=\"NumberLike\",e[e.BooleanLike=136]=\"BooleanLike\",e[e.EnumLike=272]=\"EnumLike\",e[e.UnionOrIntersection=196608]=\"UnionOrIntersection\",e[e.StructuredType=229376]=\"StructuredType\",e[e.StructuredOrTypeVariable=1032192]=\"StructuredOrTypeVariable\",e[e.TypeVariable=540672]=\"TypeVariable\",e[e.Narrowable=17810175]=\"Narrowable\",e[e.NotUnionOrUnit=16810497]=\"NotUnionOrUnit\",e[e.RequiresWidening=6291456]=\"RequiresWidening\",e[e.PropagatingFlags=14680064]=\"PropagatingFlags\";}(e.TypeFlags||(e.TypeFlags={}));!function(e){e[e.Class=1]=\"Class\",e[e.Interface=2]=\"Interface\",e[e.Reference=4]=\"Reference\",e[e.Tuple=8]=\"Tuple\",e[e.Anonymous=16]=\"Anonymous\",e[e.Mapped=32]=\"Mapped\",e[e.Instantiated=64]=\"Instantiated\",e[e.ObjectLiteral=128]=\"ObjectLiteral\",e[e.EvolvingArray=256]=\"EvolvingArray\",e[e.ObjectLiteralPatternWithComputedProperties=512]=\"ObjectLiteralPatternWithComputedProperties\",e[e.ClassOrInterface=3]=\"ClassOrInterface\";}(e.ObjectFlags||(e.ObjectFlags={}));!function(e){e[e.Call=0]=\"Call\",e[e.Construct=1]=\"Construct\";}(e.SignatureKind||(e.SignatureKind={}));!function(e){e[e.String=0]=\"String\",e[e.Number=1]=\"Number\";}(e.IndexKind||(e.IndexKind={}));!function(e){e[e.NakedTypeVariable=1]=\"NakedTypeVariable\",e[e.MappedType=2]=\"MappedType\",e[e.ReturnType=4]=\"ReturnType\";}(e.InferencePriority||(e.InferencePriority={}));!function(e){e[e.InferUnionTypes=1]=\"InferUnionTypes\",e[e.NoDefault=2]=\"NoDefault\",e[e.AnyDefault=4]=\"AnyDefault\";}(e.InferenceFlags||(e.InferenceFlags={}));!function(e){e[e.None=0]=\"None\",e[e.ExportsProperty=1]=\"ExportsProperty\",e[e.ModuleExports=2]=\"ModuleExports\",e[e.PrototypeProperty=3]=\"PrototypeProperty\",e[e.ThisProperty=4]=\"ThisProperty\",e[e.Property=5]=\"Property\";}(e.SpecialPropertyAssignmentKind||(e.SpecialPropertyAssignmentKind={}));!function(e){e[e.Warning=0]=\"Warning\",e[e.Error=1]=\"Error\",e[e.Message=2]=\"Message\";}(e.DiagnosticCategory||(e.DiagnosticCategory={}));!function(e){e[e.Classic=1]=\"Classic\",e[e.NodeJs=2]=\"NodeJs\";}(e.ModuleResolutionKind||(e.ModuleResolutionKind={}));!function(e){e[e.None=0]=\"None\",e[e.CommonJS=1]=\"CommonJS\",e[e.AMD=2]=\"AMD\",e[e.UMD=3]=\"UMD\",e[e.System=4]=\"System\",e[e.ES2015=5]=\"ES2015\",e[e.ESNext=6]=\"ESNext\";}(e.ModuleKind||(e.ModuleKind={}));!function(e){e[e.None=0]=\"None\",e[e.Preserve=1]=\"Preserve\",e[e.React=2]=\"React\",e[e.ReactNative=3]=\"ReactNative\";}(e.JsxEmit||(e.JsxEmit={}));!function(e){e[e.CarriageReturnLineFeed=0]=\"CarriageReturnLineFeed\",e[e.LineFeed=1]=\"LineFeed\";}(e.NewLineKind||(e.NewLineKind={}));!function(e){e[e.Unknown=0]=\"Unknown\",e[e.JS=1]=\"JS\",e[e.JSX=2]=\"JSX\",e[e.TS=3]=\"TS\",e[e.TSX=4]=\"TSX\",e[e.External=5]=\"External\",e[e.JSON=6]=\"JSON\";}(e.ScriptKind||(e.ScriptKind={}));!function(e){e[e.ES3=0]=\"ES3\",e[e.ES5=1]=\"ES5\",e[e.ES2015=2]=\"ES2015\",e[e.ES2016=3]=\"ES2016\",e[e.ES2017=4]=\"ES2017\",e[e.ESNext=5]=\"ESNext\",e[e.Latest=5]=\"Latest\";}(e.ScriptTarget||(e.ScriptTarget={}));!function(e){e[e.Standard=0]=\"Standard\",e[e.JSX=1]=\"JSX\";}(e.LanguageVariant||(e.LanguageVariant={}));!function(e){e[e.Simple=0]=\"Simple\",e[e.Pretty=1]=\"Pretty\";}(e.DiagnosticStyle||(e.DiagnosticStyle={}));!function(e){e[e.None=0]=\"None\",e[e.Recursive=1]=\"Recursive\";}(e.WatchDirectoryFlags||(e.WatchDirectoryFlags={}));!function(e){e[e.nullCharacter=0]=\"nullCharacter\",e[e.maxAsciiCharacter=127]=\"maxAsciiCharacter\",e[e.lineFeed=10]=\"lineFeed\",e[e.carriageReturn=13]=\"carriageReturn\",e[e.lineSeparator=8232]=\"lineSeparator\",e[e.paragraphSeparator=8233]=\"paragraphSeparator\",e[e.nextLine=133]=\"nextLine\",e[e.space=32]=\"space\",e[e.nonBreakingSpace=160]=\"nonBreakingSpace\",e[e.enQuad=8192]=\"enQuad\",e[e.emQuad=8193]=\"emQuad\",e[e.enSpace=8194]=\"enSpace\",e[e.emSpace=8195]=\"emSpace\",e[e.threePerEmSpace=8196]=\"threePerEmSpace\",e[e.fourPerEmSpace=8197]=\"fourPerEmSpace\",e[e.sixPerEmSpace=8198]=\"sixPerEmSpace\",e[e.figureSpace=8199]=\"figureSpace\",e[e.punctuationSpace=8200]=\"punctuationSpace\",e[e.thinSpace=8201]=\"thinSpace\",e[e.hairSpace=8202]=\"hairSpace\",e[e.zeroWidthSpace=8203]=\"zeroWidthSpace\",e[e.narrowNoBreakSpace=8239]=\"narrowNoBreakSpace\",e[e.ideographicSpace=12288]=\"ideographicSpace\",e[e.mathematicalSpace=8287]=\"mathematicalSpace\",e[e.ogham=5760]=\"ogham\",e[e._=95]=\"_\",e[e.$=36]=\"$\",e[e._0=48]=\"_0\",e[e._1=49]=\"_1\",e[e._2=50]=\"_2\",e[e._3=51]=\"_3\",e[e._4=52]=\"_4\",e[e._5=53]=\"_5\",e[e._6=54]=\"_6\",e[e._7=55]=\"_7\",e[e._8=56]=\"_8\",e[e._9=57]=\"_9\",e[e.a=97]=\"a\",e[e.b=98]=\"b\",e[e.c=99]=\"c\",e[e.d=100]=\"d\",e[e.e=101]=\"e\",e[e.f=102]=\"f\",e[e.g=103]=\"g\",e[e.h=104]=\"h\",e[e.i=105]=\"i\",e[e.j=106]=\"j\",e[e.k=107]=\"k\",e[e.l=108]=\"l\",e[e.m=109]=\"m\",e[e.n=110]=\"n\",e[e.o=111]=\"o\",e[e.p=112]=\"p\",e[e.q=113]=\"q\",e[e.r=114]=\"r\",e[e.s=115]=\"s\",e[e.t=116]=\"t\",e[e.u=117]=\"u\",e[e.v=118]=\"v\",e[e.w=119]=\"w\",e[e.x=120]=\"x\",e[e.y=121]=\"y\",e[e.z=122]=\"z\",e[e.A=65]=\"A\",e[e.B=66]=\"B\",e[e.C=67]=\"C\",e[e.D=68]=\"D\",e[e.E=69]=\"E\",e[e.F=70]=\"F\",e[e.G=71]=\"G\",e[e.H=72]=\"H\",e[e.I=73]=\"I\",e[e.J=74]=\"J\",e[e.K=75]=\"K\",e[e.L=76]=\"L\",e[e.M=77]=\"M\",e[e.N=78]=\"N\",e[e.O=79]=\"O\",e[e.P=80]=\"P\",e[e.Q=81]=\"Q\",e[e.R=82]=\"R\",e[e.S=83]=\"S\",e[e.T=84]=\"T\",e[e.U=85]=\"U\",e[e.V=86]=\"V\",e[e.W=87]=\"W\",e[e.X=88]=\"X\",e[e.Y=89]=\"Y\",e[e.Z=90]=\"Z\",e[e.ampersand=38]=\"ampersand\",e[e.asterisk=42]=\"asterisk\",e[e.at=64]=\"at\",e[e.backslash=92]=\"backslash\",e[e.backtick=96]=\"backtick\",e[e.bar=124]=\"bar\",e[e.caret=94]=\"caret\",e[e.closeBrace=125]=\"closeBrace\",e[e.closeBracket=93]=\"closeBracket\",e[e.closeParen=41]=\"closeParen\",e[e.colon=58]=\"colon\",e[e.comma=44]=\"comma\",e[e.dot=46]=\"dot\",e[e.doubleQuote=34]=\"doubleQuote\",e[e.equals=61]=\"equals\",e[e.exclamation=33]=\"exclamation\",e[e.greaterThan=62]=\"greaterThan\",e[e.hash=35]=\"hash\",e[e.lessThan=60]=\"lessThan\",e[e.minus=45]=\"minus\",e[e.openBrace=123]=\"openBrace\",e[e.openBracket=91]=\"openBracket\",e[e.openParen=40]=\"openParen\",e[e.percent=37]=\"percent\",e[e.plus=43]=\"plus\",e[e.question=63]=\"question\",e[e.semicolon=59]=\"semicolon\",e[e.singleQuote=39]=\"singleQuote\",e[e.slash=47]=\"slash\",e[e.tilde=126]=\"tilde\",e[e.backspace=8]=\"backspace\",e[e.formFeed=12]=\"formFeed\",e[e.byteOrderMark=65279]=\"byteOrderMark\",e[e.tab=9]=\"tab\",e[e.verticalTab=11]=\"verticalTab\";}(e.CharacterCodes||(e.CharacterCodes={}));!function(e){e.Ts=\".ts\",e.Tsx=\".tsx\",e.Dts=\".d.ts\",e.Js=\".js\",e.Jsx=\".jsx\";}(e.Extension||(e.Extension={}));!function(e){e[e.None=0]=\"None\",e[e.TypeScript=1]=\"TypeScript\",e[e.ContainsTypeScript=2]=\"ContainsTypeScript\",e[e.ContainsJsx=4]=\"ContainsJsx\",e[e.ContainsESNext=8]=\"ContainsESNext\",e[e.ContainsES2017=16]=\"ContainsES2017\",e[e.ContainsES2016=32]=\"ContainsES2016\",e[e.ES2015=64]=\"ES2015\",e[e.ContainsES2015=128]=\"ContainsES2015\",e[e.Generator=256]=\"Generator\",e[e.ContainsGenerator=512]=\"ContainsGenerator\",e[e.DestructuringAssignment=1024]=\"DestructuringAssignment\",e[e.ContainsDestructuringAssignment=2048]=\"ContainsDestructuringAssignment\",e[e.ContainsDecorators=4096]=\"ContainsDecorators\",e[e.ContainsPropertyInitializer=8192]=\"ContainsPropertyInitializer\",e[e.ContainsLexicalThis=16384]=\"ContainsLexicalThis\",e[e.ContainsCapturedLexicalThis=32768]=\"ContainsCapturedLexicalThis\",e[e.ContainsLexicalThisInComputedPropertyName=65536]=\"ContainsLexicalThisInComputedPropertyName\",e[e.ContainsDefaultValueAssignments=131072]=\"ContainsDefaultValueAssignments\",e[e.ContainsParameterPropertyAssignments=262144]=\"ContainsParameterPropertyAssignments\",e[e.ContainsSpread=524288]=\"ContainsSpread\",e[e.ContainsObjectSpread=1048576]=\"ContainsObjectSpread\",e[e.ContainsRest=524288]=\"ContainsRest\",e[e.ContainsObjectRest=1048576]=\"ContainsObjectRest\",e[e.ContainsComputedPropertyName=2097152]=\"ContainsComputedPropertyName\",e[e.ContainsBlockScopedBinding=4194304]=\"ContainsBlockScopedBinding\",e[e.ContainsBindingPattern=8388608]=\"ContainsBindingPattern\",e[e.ContainsYield=16777216]=\"ContainsYield\",e[e.ContainsHoistedDeclarationOrCompletion=33554432]=\"ContainsHoistedDeclarationOrCompletion\",e[e.ContainsDynamicImport=67108864]=\"ContainsDynamicImport\",e[e.HasComputedFlags=536870912]=\"HasComputedFlags\",e[e.AssertTypeScript=3]=\"AssertTypeScript\",e[e.AssertJsx=4]=\"AssertJsx\",e[e.AssertESNext=8]=\"AssertESNext\",e[e.AssertES2017=16]=\"AssertES2017\",e[e.AssertES2016=32]=\"AssertES2016\",e[e.AssertES2015=192]=\"AssertES2015\",e[e.AssertGenerator=768]=\"AssertGenerator\",e[e.AssertDestructuringAssignment=3072]=\"AssertDestructuringAssignment\",e[e.NodeExcludes=536872257]=\"NodeExcludes\",e[e.ArrowFunctionExcludes=601249089]=\"ArrowFunctionExcludes\",e[e.FunctionExcludes=601281857]=\"FunctionExcludes\",e[e.ConstructorExcludes=601015617]=\"ConstructorExcludes\",e[e.MethodOrAccessorExcludes=601015617]=\"MethodOrAccessorExcludes\",e[e.ClassExcludes=539358529]=\"ClassExcludes\",e[e.ModuleExcludes=574674241]=\"ModuleExcludes\",e[e.TypeExcludes=-3]=\"TypeExcludes\",e[e.ObjectLiteralExcludes=540087617]=\"ObjectLiteralExcludes\",e[e.ArrayLiteralOrCallOrNewExcludes=537396545]=\"ArrayLiteralOrCallOrNewExcludes\",e[e.VariableDeclarationListExcludes=546309441]=\"VariableDeclarationListExcludes\",e[e.ParameterExcludes=536872257]=\"ParameterExcludes\",e[e.CatchClauseExcludes=537920833]=\"CatchClauseExcludes\",e[e.BindingPatternExcludes=537396545]=\"BindingPatternExcludes\",e[e.TypeScriptClassSyntaxMask=274432]=\"TypeScriptClassSyntaxMask\",e[e.ES2015FunctionSyntaxMask=163840]=\"ES2015FunctionSyntaxMask\";}(e.TransformFlags||(e.TransformFlags={}));!function(e){e[e.SingleLine=1]=\"SingleLine\",e[e.AdviseOnEmitNode=2]=\"AdviseOnEmitNode\",e[e.NoSubstitution=4]=\"NoSubstitution\",e[e.CapturesThis=8]=\"CapturesThis\",e[e.NoLeadingSourceMap=16]=\"NoLeadingSourceMap\",e[e.NoTrailingSourceMap=32]=\"NoTrailingSourceMap\",e[e.NoSourceMap=48]=\"NoSourceMap\",e[e.NoNestedSourceMaps=64]=\"NoNestedSourceMaps\",e[e.NoTokenLeadingSourceMaps=128]=\"NoTokenLeadingSourceMaps\",e[e.NoTokenTrailingSourceMaps=256]=\"NoTokenTrailingSourceMaps\",e[e.NoTokenSourceMaps=384]=\"NoTokenSourceMaps\",e[e.NoLeadingComments=512]=\"NoLeadingComments\",e[e.NoTrailingComments=1024]=\"NoTrailingComments\",e[e.NoComments=1536]=\"NoComments\",e[e.NoNestedComments=2048]=\"NoNestedComments\",e[e.HelperName=4096]=\"HelperName\",e[e.ExportName=8192]=\"ExportName\",e[e.LocalName=16384]=\"LocalName\",e[e.InternalName=32768]=\"InternalName\",e[e.Indented=65536]=\"Indented\",e[e.NoIndentation=131072]=\"NoIndentation\",e[e.AsyncFunctionBody=262144]=\"AsyncFunctionBody\",e[e.ReuseTempVariableScope=524288]=\"ReuseTempVariableScope\",e[e.CustomPrologue=1048576]=\"CustomPrologue\",e[e.NoHoisting=2097152]=\"NoHoisting\",e[e.HasEndOfDeclarationMarker=4194304]=\"HasEndOfDeclarationMarker\",e[e.Iterator=8388608]=\"Iterator\",e[e.NoAsciiEscaping=16777216]=\"NoAsciiEscaping\";}(e.EmitFlags||(e.EmitFlags={}));!function(e){e[e.Extends=1]=\"Extends\",e[e.Assign=2]=\"Assign\",e[e.Rest=4]=\"Rest\",e[e.Decorate=8]=\"Decorate\",e[e.Metadata=16]=\"Metadata\",e[e.Param=32]=\"Param\",e[e.Awaiter=64]=\"Awaiter\",e[e.Generator=128]=\"Generator\",e[e.Values=256]=\"Values\",e[e.Read=512]=\"Read\",e[e.Spread=1024]=\"Spread\",e[e.Await=2048]=\"Await\",e[e.AsyncGenerator=4096]=\"AsyncGenerator\",e[e.AsyncDelegator=8192]=\"AsyncDelegator\",e[e.AsyncValues=16384]=\"AsyncValues\",e[e.ExportStar=32768]=\"ExportStar\",e[e.ForOfIncludes=256]=\"ForOfIncludes\",e[e.ForAwaitOfIncludes=16384]=\"ForAwaitOfIncludes\",e[e.AsyncGeneratorIncludes=6144]=\"AsyncGeneratorIncludes\",e[e.AsyncDelegatorIncludes=26624]=\"AsyncDelegatorIncludes\",e[e.SpreadIncludes=1536]=\"SpreadIncludes\",e[e.FirstEmitHelper=1]=\"FirstEmitHelper\",e[e.LastEmitHelper=32768]=\"LastEmitHelper\";}(e.ExternalEmitHelpers||(e.ExternalEmitHelpers={}));!function(e){e[e.SourceFile=0]=\"SourceFile\",e[e.Expression=1]=\"Expression\",e[e.IdentifierName=2]=\"IdentifierName\",e[e.Unspecified=3]=\"Unspecified\";}(e.EmitHint||(e.EmitHint={}));}(r||(r={}));!function(e){e.timestamp=\"undefined\"!=typeof performance&&performance.now?function(){return performance.now()}:Date.now?Date.now:function(){return+new Date};}(r||(r={})),function(e){!function(t){function n(t){p&&(l.set(t,e.timestamp()),u.set(t,(u.get(t)||0)+1),d(t));}function r(t,n,r){if(p){var a=r&&l.get(r)||e.timestamp(),i=n&&l.get(n)||f;_.set(t,(_.get(t)||0)+(a-i));}}function a(e){return u&&u.get(e)||0}function i(e){return _&&_.get(e)||0}function o(e){_.forEach(function(t,n){e(n,t);});}function s(){u=e.createMap(),l=e.createMap(),_=e.createMap(),p=!0,f=e.timestamp();}function c(){p=!1;}var u,l,_,d=\"function\"==typeof onProfilerEvent&&!0===onProfilerEvent.profiler?onProfilerEvent:function(e){},p=!1,f=0;t.mark=n,t.measure=r,t.getCount=a,t.getDuration=i,t.forEachMeasure=o,t.enable=s,t.disable=c;}(e.performance||(e.performance={}));}(r||(r={}));!function(e){e.version=\"2.5.0-dev.20170617\";}(r||(r={})),function(e){function t(){var e=Object.create(null);return e.__=void 0,delete e.__,e}function n(){return new dn}function r(e){var t=new dn;for(var n in e)pn.call(e,n)&&t.set(n,e[n]);return t}function a(e){function t(e){l.forEach(function(t,n){e(n,t);});}function r(){return ne(l.keys())}function a(e){return l.get(u(e))}function i(e,t){l.set(u(e),t);}function o(e){return l.has(u(e))}function s(e){l.delete(u(e));}function c(){l.clear();}function u(t){return e?e(t):t}var l=n();return{get:a,set:i,contains:o,remove:s,forEachValue:t,getKeys:r,clear:c}}function i(e,t,n){return n(Qe(e)?Ue(e):nt(e,t))}function o(e){return e?e.length:0}function s(e,t){if(e)for(var n=0;n<e.length;n++){var r=t(e[n],n);if(r)return r}}function c(e,t){for(;e;){var n=t(e);if(\"quit\"===n)return;if(n)return e;e=e.parent;}}function u(e,t,n){xn.assert(e.length===t.length);for(var r=0;r<e.length;r++)n(e[r],t[r],r);}function l(e,t){xn.assert(e.length===t.length);for(var r=n(),a=0;a<e.length;++a)r.set(e[a],t[a]);return r}function _(e,t){if(e)for(var n=0;n<e.length;n++)if(!t(e[n],n))return!1;return!0}function d(e,t){for(var n=0;n<e.length;n++){var r=e[n];if(t(r,n))return r}}function p(e,t){for(var n=0;n<e.length;n++)if(t(e[n],n))return n;return-1}function f(e,t){for(var n=0;n<e.length;n++){var r=t(e[n],n);if(r)return r}xn.fail();}function g(e,t){if(e)for(var n=0,r=e;n<r.length;n++)if(r[n]===t)return!0;return!1}function m(e,t){if(e)for(var n=0;n<e.length;n++)if(e[n]===t)return n;return-1}function y(e,t,n){for(var r=n||0;r<e.length;r++)if(g(t,e.charCodeAt(r)))return r;return-1}function h(e,t){var n=0;if(e)for(var r=0;r<e.length;r++)t(e[r],r)&&n++;return n}function v(e,t){if(e){for(var n=e.length,r=0;r<n&&t(e[r]);)r++;if(r<n){var a=e.slice(0,r);for(r++;r<n;){var i=e[r];t(i)&&a.push(i),r++;}return a}}return e}function b(e,t){for(var n=0,r=0,a=e;r<a.length;r++){var i=a[r];t(i)||(e[n]=i,n++);}return n!==e.length&&(e.length=n,!0)}function x(e,t){for(var n=0,r=0,a=e;r<a.length;r++){var i=a[r];t(i)&&(e[n]=i,n++);}e.length=n;}function k(e,t){var n;if(e){n=[];for(var r=0;r<e.length;r++)n.push(t(e[r],r));}return n}function S(e,t){var n;if(e)for(var r=0;r<e.length;r++)if(n)n.push(t(e[r],r));else{var a=e[r],i=t(a,r);a!==i&&(n=e.slice(0,r)).push(i);}return n||e}function T(e){var t;if(e){t=[];for(var n=0,r=e;n<r.length;n++){var a=r[n];a&&(me(a)?J(t,a):t.push(a));}}return t}function C(e,t){var n;if(e){n=[];for(var r=0;r<e.length;r++){var a=t(e[r],r);a&&(me(a)?J(n,a):n.push(a));}}return n}function D(e,t){var n;if(e)for(var r=0;r<e.length;r++){var a=e[r],i=t(a,r);(n||a!==i||me(i))&&(n||(n=e.slice(0,r)),me(i)?J(n,i):n.push(i));}return n||e}function E(e,t){for(var n=[],r=0;r<e.length;r++){var a=t(e[r],r);void 0!==a&&n.push(a);}return n}function N(e,t){if(e){for(var n=0;n<e.length;n++)if(!t(e[n],n))return[e.slice(0,n),e.slice(n)];return[e.slice(0),[]]}}function A(e,t,n){var r;if(e){r=[];for(var a=e.length,i=void 0,o=void 0,s=0,c=0;s<a;){for(;c<a;){if(o=t(e[c],c),0===c)i=o;else if(o!==i)break;c++;}if(s<c){var u=n(e.slice(s,c),i,s,c);u&&r.push(u),s=c;}i=o,c++;}}return r}function w(e,t){if(e){var r=n();return e.forEach(function(e,n){var a=t(n,e),i=a[0],o=a[1];r.set(i,o);}),r}}function P(e,t){if(e){if(!t)return e.length>0;for(var n=0,r=e;n<r.length;n++)if(t(r[n]))return!0}return!1}function O(e,t){return P(t)?P(e)?e.concat(t):t:e}function F(e,t){var n;if(e){n=[];e:for(var r=0,a=e;r<a.length;r++){for(var i=a[r],o=0,s=n;o<s.length;o++){var c=s[o];if(t?t(c,i):c===i)continue e}n.push(i);}}return n}function I(e,t,n){if(!e||!t)return e===t;if(e.length!==t.length)return!1;for(var r=0;r<e.length;r++)if(!(n?n(e[r],t[r]):e[r]===t[r]))return!1;return!0}function M(e,t){return!(e&&e.module===t.module&&e.moduleResolution===t.moduleResolution&&e.noResolve===t.noResolve&&e.target===t.target&&e.noLib===t.noLib&&e.jsx===t.jsx&&e.allowJs===t.allowJs&&e.rootDir===t.rootDir&&e.configFilePath===t.configFilePath&&e.baseUrl===t.baseUrl&&e.maxNodeModuleJsDepth===t.maxNodeModuleJsDepth&&I(e.lib,t.lib)&&I(e.typeRoots,t.typeRoots)&&I(e.rootDirs,t.rootDirs)&&ce(e.paths,t.paths))}function R(e){var t;if(e)for(var n=0;n<e.length;n++){var r=e[n];!t&&r||(t||(t=e.slice(0,n)),r&&t.push(r));}return t||e}function L(e,t,n,r,a){if(void 0===n&&(n=Oe),void 0===r&&(r=0),void 0===a&&(a=0),!t||!e||0===t.length||0===e.length)return t;var i=[];e:for(;a<t.length;a++){t:for(;r<e.length;r++)switch(n(t[a],e[r])){case-1:break t;case 0:continue e;case 1:continue t}i.push(t[a]);}return i}function B(e,t){for(var n=0,r=0,a=e;r<a.length;r++)n+=a[r][t];return n}function K(e,t){return void 0===t?e:void 0===e?[t]:(e.push(t),e)}function j(e,t){return t<0?e.length+t:t}function J(e,t,n,r){if(void 0===t)return e;if(void 0===e)return t.slice(n,r);n=void 0===n?0:j(t,n),r=void 0===r?t.length:j(t,r);for(var a=n;a<r&&a<t.length;a++)void 0!==t[a]&&e.push(t[a]);return e}function z(e,t){return void 0===t&&(t=Oe),e.map(function(e,t){return t}).sort(function(n,r){return t(e[n],e[r])||Oe(n,r)}).map(function(t){return e[t]})}function U(e,t,n,r){for(;n<r;){if(e[n]!==t[n])return!1;n++;}return!0}function q(e,t){if(e&&(t=j(e,t))<e.length)return e[t]}function V(e){return q(e,0)}function $(e){return q(e,-1)}function W(e){return e&&1===e.length?e[0]:void 0}function H(e){return e&&1===e.length?e[0]:e}function G(e,t,n){var r=e.slice(0);return r[t]=n,r}function X(e,t,n,r){if(!e||0===e.length)return-1;var a=r||0,i=e.length-1;for(n=void 0!==n?n:function(e,t){return e<t?-1:e>t?1:0};a<=i;){var o=a+(i-a>>1),s=e[o];if(0===n(s,t))return o;n(s,t)>0?i=o-1:a=o+1;}return~a}function Y(e,t,n,r,a){if(e&&e.length>0){var i=e.length;if(i>0){var o=void 0===r||r<0?0:r,s=void 0===a||o+a>i-1?i-1:o+a,c=void 0;for(arguments.length<=2?(c=e[o],o++):c=n;o<=s;)c=t(c,e[o],o),o++;return c}}return n}function Q(e,t,n,r,a){if(e){var i=e.length;if(i>0){var o=void 0===r||r>i-1?i-1:r,s=void 0===a||o-a<0?0:o-a,c=void 0;for(arguments.length<=2?(c=e[o],o--):c=n;o>=s;)c=t(c,e[o],o),o--;return c}}return n}function Z(e,t){return pn.call(e,t)}function ee(e,t){return pn.call(e,t)?e[t]:void 0}function te(e){var t=[];for(var n in e)pn.call(e,n)&&t.push(n);return t}function ne(e,t){for(var n=[],r=e.next(),a=r.value,i=r.done;!i;o=e.next(),a=o.value,i=o.done,o)n.push(t?t(a):a);return n;var o;}function re(e,t){for(var n=[],r=e.next(),a=r.value,i=r.done;!i;o=e.next(),a=o.value,i=o.done,o)n.push(t(a));return n;var o;}function ae(e,t){for(var n=e.entries(),r=n.next(),a=r.value,i=r.done;!i;c=n.next(),a=c.value,i=c.done,c){var o=a[0],s=t(a[1],o);if(s)return s}return;var c;}function ie(e,t){for(var n=e.keys(),r=n.next(),a=r.value,i=r.done;!i;s=n.next(),a=s.value,i=s.done,s){var o=t(a);if(o)return o}return;var s;}function oe(e,t){e.forEach(function(e,n){t.set(n,e);});}function se(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];for(var r=0,a=t;r<a.length;r++){var i=a[r];for(var o in i)Z(i,o)&&(e[o]=i[o]);}return e}function ce(e,t,n){if(e===t)return!0;if(!e||!t)return!1;for(var r in e)if(pn.call(e,r)){if(void 0===!pn.call(t,r))return!1;if(n?!n(e[r],t[r]):e[r]!==t[r])return!1}for(var r in t)if(pn.call(t,r)&&!pn.call(e,r))return!1;return!0}function ue(e,t,r){for(var a=n(),i=0,o=e;i<o.length;i++){var s=o[i];a.set(t(s),r?r(s):s);}return a}function le(e){var t=n();return oe(e,t),t}function _e(e){var t={};for(var n in e)pn.call(e,n)&&(t[n]=e[n]);return t}function de(e,t){var n={};for(var r in t)pn.call(t,r)&&(n[r]=t[r]);for(var r in e)pn.call(e,r)&&(n[r]=e[r]);return n}function pe(){var e=n();return e.add=fe,e.remove=ge,e}function fe(e,t){var n=this.get(e);return n?n.push(t):this.set(e,n=[t]),n}function ge(e,t){var n=this.get(e);n&&(Yt(n,t),n.length||this.delete(e));}function me(e){return Array.isArray?Array.isArray(e):e instanceof Array}function ye(e,t){return void 0!==e&&t(e)?e:void 0}function he(e,t){if(void 0!==e&&t(e))return e;xn.fail(\"Invalid cast. The supplied value did not pass the test '\"+xn.getFunctionName(t)+\"'.\");}function ve(){}function be(){throw new Error(\"Not implemented\")}function xe(e){var t;return function(){return e&&(t=e(),e=void 0),t}}function ke(e,t,n,r,a){if(a){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];return function(e){return Se.apply(void 0,k(i,function(t){return t(e)}))}}return r?function(a){return Se(e(a),t(a),n(a),r(a))}:n?function(r){return Se(e(r),t(r),n(r))}:t?function(n){return Se(e(n),t(n))}:e?function(t){return Se(e(t))}:function(e){return function(e){return e}}}function Se(e,t,n,r,a){if(a){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];return function(e){return Y(i,function(e,t){return t(e)},e)}}return r?function(a){return r(n(t(e(a))))}:n?function(r){return n(t(e(r)))}:t?function(n){return t(e(n))}:e?function(t){return e(t)}:function(e){return e}}function Te(e,t,n){return n=n||0,e.replace(/{(\\d+)}/g,function(e,r){return t[+r+n]})}function Ce(t){return e.localizedDiagnosticMessages&&e.localizedDiagnosticMessages[t.key]||t.message}function De(e,t,n,r){var a=t+n;xn.assert(t>=0,\"start must be non-negative, is \"+t),xn.assert(n>=0,\"length must be non-negative, is \"+n),e&&(xn.assert(t<=e.text.length,\"start must be within the bounds of the file. \"+t+\" > \"+e.text.length),xn.assert(a<=e.text.length,\"end must be the bounds of the file. \"+a+\" > \"+e.text.length));var i=Ce(r);return arguments.length>4&&(i=Te(i,arguments,4)),{file:e,start:t,length:n,messageText:i,category:r.category,code:r.code}}function Ee(e,t){var n=Ce(t);return arguments.length>2&&(n=Te(n,arguments,2)),n}function Ne(e){var t=Ce(e);return arguments.length>1&&(t=Te(t,arguments,1)),{file:void 0,start:void 0,length:void 0,messageText:t,category:e.category,code:e.code}}function Ae(e){return{file:void 0,start:void 0,length:void 0,code:e.code,category:e.category,messageText:e.next?e:e.messageText}}function we(e,t){var n=Ce(t);return arguments.length>2&&(n=Te(n,arguments,2)),{messageText:n,category:t.category,code:t.code,next:e}}function Pe(e,t){for(var n=e;n.next;)n=n.next;return n.next=t,e}function Oe(e,t){return e===t?0:void 0===e?-1:void 0===t?1:e<t?-1:1}function Fe(t,n,r){if(t===n)return 0;if(void 0===t)return-1;if(void 0===n)return 1;if(r){if(e.collator){var a=e.localeCompareIsCorrect?e.collator.compare(t,n):t.localeCompare(n,void 0,{usage:\"sort\",sensitivity:\"accent\"});return a<0?-1:a>0?1:0}if(t=t.toUpperCase(),n=n.toUpperCase(),t===n)return 0}return t<n?-1:1}function Ie(e,t){return Fe(e,t,!0)}function Me(e){return e.file?e.file.fileName:void 0}function Re(e,t){return Oe(Me(e),Me(t))||Oe(e.start,t.start)||Oe(e.length,t.length)||Oe(e.code,t.code)||Le(e.messageText,t.messageText)||0}function Le(e,t){for(;e&&t;){var n=Oe(\"string\"==typeof e?e:e.messageText,\"string\"==typeof t?t:t.messageText);if(n)return n;e=\"string\"==typeof e?void 0:e.next,t=\"string\"==typeof t?void 0:t.next;}return e||t?e?1:-1:0}function Be(e){return Ke(e.sort(Re))}function Ke(e){if(e.length<2)return e;for(var t=[e[0]],n=e[0],r=1;r<e.length;r++){var a=e[r];0===Re(a,n)||(t.push(a),n=a);}return t}function je(e){return e.replace(/\\\\/g,\"/\")}function Je(e){if(47===e.charCodeAt(0)){if(47!==e.charCodeAt(1))return 1;var t=e.indexOf(\"/\",2);if(t<0)return 2;var n=e.indexOf(\"/\",t+1);return n<0?t+1:n+1}if(58===e.charCodeAt(1))return 47===e.charCodeAt(2)?3:2;if(0===e.lastIndexOf(\"file:///\",0))return\"file:///\".length;var r=e.indexOf(\"://\");return-1!==r?r+\"://\".length:0}function ze(t,n){for(var r=[],a=0,i=t.substr(n).split(e.directorySeparator);a<i.length;a++){var o=i[a];\".\"!==o&&(\"..\"===o&&r.length>0&&\"..\"!==$(r)?r.pop():o&&r.push(o));}return r}function Ue(t){var n=Je(t=je(t)),r=t.substr(0,n),a=ze(t,n);if(a.length){var i=r+a.join(e.directorySeparator);return qe(t)?i+e.directorySeparator:i}return r}function qe(e){return e.charCodeAt(e.length-1)===fn}function Ve(t){return t.substr(0,Math.max(Je(t),t.lastIndexOf(e.directorySeparator)))}function $e(e){return e&&!Qe(e)&&-1!==e.indexOf(\"://\")}function We(e){return/^\\.\\.?($|[\\\\/])/.test(e)}function He(e){return e.target||0}function Ge(t){return\"number\"==typeof t.module?t.module:He(t)>=2?e.ModuleKind.ES2015:e.ModuleKind.CommonJS}function Xe(t){var n=t.moduleResolution;return void 0===n&&(n=Ge(t)===e.ModuleKind.CommonJS?e.ModuleResolutionKind.NodeJs:e.ModuleResolutionKind.Classic),n}function Ye(e){for(var t=!1,n=0;n<e.length;n++)if(42===e.charCodeAt(n)){if(t)return!1;t=!0;}return!0}function Qe(e){return 0!==Je(e)}function Ze(e,t,n){return Qe(e)?ot(t,e,t,n,!1):e}function et(e,t){var n=ze(e,t);return[e.substr(0,t)].concat(n)}function tt(e,t){var n=Je(e=je(e));return 0===n&&(n=Je(e=ct(je(t),e))),et(e,n)}function nt(e,t){return rt(tt(e,t))}function rt(t){if(t&&t.length)return t[0]+t.slice(1).join(e.directorySeparator)}function at(t){for(var n=t.length,r=t.indexOf(\"://\")+\"://\".length;r<n&&47===t.charCodeAt(r);)r++;if(r===n)return[t];var a=t.indexOf(e.directorySeparator,r);return-1!==a?(r=a+1,et(t,r)):[t+e.directorySeparator]}function it(e,t){return $e(e)?at(e):tt(e,t)}function ot(t,n,r,a,i){var o=it(n,r),s=it(t,r);s.length>1&&\"\"===$(s)&&s.length--;var c;for(c=0;c<o.length&&c<s.length&&a(s[c])===a(o[c]);c++);if(c){for(var u=\"\",l=o.slice(c,o.length);c<s.length;c++)\"\"!==s[c]&&(u=u+\"..\"+e.directorySeparator);return u+l.join(e.directorySeparator)}var _=rt(o);return i&&Qe(_)&&(_=\"file:///\"+_),_}function st(t){if(void 0!==t){var n=t.lastIndexOf(e.directorySeparator);return n<0?t:t.substring(n+1)}}function ct(t,n){return t&&t.length?n&&n.length?0!==Je(n)?n:t.charAt(t.length-1)===e.directorySeparator?t+n:t+e.directorySeparator+n:t:n}function ut(t){return t.charAt(t.length-1)===e.directorySeparator?t.substr(0,t.length-1):t}function lt(t){return t.charAt(t.length-1)!==e.directorySeparator?t+e.directorySeparator:t}function _t(e,t,n,r){if(e===t)return 0;if(void 0===e)return-1;if(void 0===t)return 1;e=ut(e),t=ut(t);for(var a=tt(e,n),i=tt(t,n),o=Math.min(a.length,i.length),s=0;s<o;s++){var c=Fe(a[s],i[s],r);if(0!==c)return c}return Oe(a.length,i.length)}function dt(e,t,n,r){if(void 0===e||void 0===t)return!1;if(e===t)return!0;if(e=ut(e),t=ut(t),e===t)return!0;var a=tt(e,n),i=tt(t,n);if(i.length<a.length)return!1;for(var o=0;o<a.length;o++)if(0!==Fe(a[o],i[o],r))return!1;return!0}function pt(e,t){return 0===e.lastIndexOf(t,0)}function ft(e,t){return pt(e,t)?e.substr(t.length):e}function gt(e,t){var n=e.length-t.length;return n>=0&&e.indexOf(t,n)===n}function mt(e){return st(e).indexOf(\".\")>=0}function yt(e,t){return e.length>t.length&&gt(e,t)}function ht(e,t){for(var n=0,r=t;n<r.length;n++)if(yt(e,r[n]))return!0;return!1}function vt(e,t,n){var r=bt(e,t,n);if(r&&r.length)return\"^(\"+r.map(function(e){return\"(\"+e+\")\"}).join(\"|\")+\")\"+(\"exclude\"===n?\"($|/)\":\"$\")}function bt(e,t,n){if(void 0!==e&&0!==e.length){var r=\"files\"===n?St:Tt,a=\"files\"===n?yn:hn,i=\"exclude\"===n?\"(/.+?)?\":\"(/[^/.][^/]*)*?\";return C(e,function(e){return e&&kt(e,t,n,a,i,r)})}}function xt(e){return!/[.*?]/.test(e)}function kt(t,n,r,a,i,o){var s=\"\",c=!1,u=!1,l=tt(t,n),_=$(l);if(\"exclude\"===r||\"**\"!==_){l[0]=ut(l[0]),xt(_)&&l.push(\"**\",\"*\");for(var d=0,p=0,f=l;p<f.length;p++){var g=f[p];if(\"**\"===g){if(c)return;s+=i,c=!0;}else\"directories\"===r&&(s+=\"(\",d++),u&&(s+=e.directorySeparator),\"exclude\"!==r&&(42===g.charCodeAt(0)?(s+=\"([^./]\"+a+\")?\",g=g.substr(1)):63===g.charCodeAt(0)&&(s+=\"[^./]\",g=g.substr(1))),s+=g.replace(gn,o);u=!0;}for(;d>0;)s+=\")?\",d--;return s}}function St(e){return Ct(e,yn)}function Tt(e){return Ct(e,hn)}function Ct(e,t){return\"*\"===e?t:\"?\"===e?\"[^/]\":\"\\\\\"+e}function Dt(e,t,n,r,a){e=Ue(e);var i=ct(a=Ue(a),e);return{includeFilePatterns:k(bt(n,i,\"files\"),function(e){return\"^\"+e+\"$\"}),includeFilePattern:vt(n,i,\"files\"),includeDirectoryPattern:vt(n,i,\"directories\"),excludePattern:vt(t,i,\"exclude\"),basePaths:Nt(e,n,r)}}function Et(e,t,n,r,a,i,o){function s(e,n){var r=o(e),a=r.files,i=r.directories;a=a.slice().sort(g),i=i.slice().sort(g);for(var c=0,u=a;c<u.length;c++)!function(r){var a=ct(e,r),i=ct(n,r);if(t&&!ht(a,t))return\"continue\";if(d&&d.test(i))return\"continue\";if(l){var o=p(l,function(e){return e.test(i)});-1!==o&&f[o].push(a);}else f[0].push(a);}(h=u[c]);for(var m=0,y=i;m<y.length;m++){var h=y[m],v=ct(e,h),b=ct(n,h);_&&!_.test(b)||d&&d.test(b)||s(v,b);}}for(var c=Dt(e=Ue(e),n,r,a,i=Ue(i)),u=a?\"\":\"i\",l=c.includeFilePatterns&&c.includeFilePatterns.map(function(e){return new RegExp(e,u)}),_=c.includeDirectoryPattern&&new RegExp(c.includeDirectoryPattern,u),d=c.excludePattern&&new RegExp(c.excludePattern,u),f=l?l.map(function(){return[]}):[[]],g=a?Fe:Ie,m=0,y=c.basePaths;m<y.length;m++){var h=y[m];s(h,ct(i,h));}return T(f)}function Nt(t,n,r){var a=[t];if(n){for(var i=[],o=0,s=n;o<s.length;o++){var c=s[o],u=Qe(c)?c:Ue(ct(t,c));i.push(At(u));}i.sort(r?Fe:Ie);for(var l=0,_=i;l<_.length;l++)!function(n){e.every(a,function(e){return!dt(e,n,t,!r)})&&a.push(n);}(_[l]);}return a}function At(t){var n=y(t,mn);return n<0?mt(t)?ut(Ve(t)):t:t.substring(0,t.lastIndexOf(e.directorySeparator,n))}function wt(e,t){return t||Pt(e)||3}function Pt(e){switch(e.substr(e.lastIndexOf(\".\")).toLowerCase()){case\".js\":return 1;case\".jsx\":return 2;case\".ts\":return 3;case\".tsx\":return 4;case\".json\":return 6;default:return 0}}function Ot(t,n){var r=t&&t.allowJs;if(!n||0===n.length||!r)return r?vn:e.supportedTypeScriptExtensions;for(var a=vn.slice(0),i=0,o=n;i<o.length;i++){var s=o[i];-1===a.indexOf(s.extension)&&a.push(s.extension);}return a}function Ft(t){return s(e.supportedJavascriptExtensions,function(e){return yt(t,e)})}function It(t){return s(e.supportedTypeScriptExtensions,function(e){return yt(t,e)})}function Mt(e,t,n){if(!e)return!1;for(var r=0,a=Ot(t,n);r<a.length;r++)if(yt(e,a[r]))return!0;return!1}function Rt(e,t){for(var n=t.length-1;n>=0;n--)if(yt(e,t[n]))return Lt(n,t);return 0}function Lt(e,t){return e<2?0:e<t.length?2:t.length}function Bt(e,t){return e<2?2:t.length}function Kt(e){for(var t=0,n=bn;t<n.length;t++){var r=jt(e,n[t]);if(void 0!==r)return r}return e}function jt(e,t){return yt(e,t)?Jt(e,t):void 0}function Jt(e,t){return e.substring(0,e.length-t.length)}function zt(e,t){return Kt(e)+t}function Ut(e,t){this.flags=e,this.name=t,this.declarations=void 0;}function qt(e,t){this.flags=t,xn.isDebugging&&(this.checker=e);}function Vt(){}function $t(e,t,n){this.id=0,this.kind=e,this.pos=t,this.end=n,this.flags=0,this.modifierFlagsCache=0,this.transformFlags=0,this.parent=void 0,this.original=void 0;}function Wt(e,t,n){this.fileName=e,this.text=t,this.skipTrivia=n||function(e){return e};}function Ht(e,t){for(var n=0;n<e.length;n++)if(e[n]===t)return Gt(e,n),!0;return!1}function Gt(e,t){for(var n=t;n<e.length-1;n++)e[n]=e[n+1];e.pop();}function Xt(e,t){e[t]=e[e.length-1],e.pop();}function Yt(e,t){Qt(e,function(e){return e===t});}function Qt(e,t){for(var n=0;n<e.length;n++)if(t(e[n])){Xt(e,n);break}}function Zt(e){return e?function(e){return e}:function(e){return e.toLowerCase()}}function en(e,t){for(var n=[],r=0,a=e;r<a.length;r++){var i=a[r],o=on$$1(i);if(o)n.push(o);else if(i===t)return i}return rn(n,function(e){return e},t)}function tn(e){return e.prefix+\"*\"+e.suffix}function nn(e,t){return xn.assert(an(e,t)),t.substr(e.prefix.length,t.length-e.suffix.length)}function rn(e,t,n){for(var r=void 0,a=-1,i=0,o=e;i<o.length;i++){var s=o[i],c=t(s);an(c,n)&&c.prefix.length>a&&(a=c.prefix.length,r=s);}return r}function an(e,t){var n=e.prefix,r=e.suffix;return t.length>=n.length+r.length&&pt(t,n)&&gt(t,r)}function on$$1(e){xn.assert(Ye(e));var t=e.indexOf(\"*\");return-1===t?void 0:{prefix:e.substr(0,t),suffix:e.substr(t+1)}}function sn(e){return!(e>=0)}function cn(e){return\".ts\"===e||\".tsx\"===e||\".d.ts\"===e}function un(e){var t=ln(e);if(void 0!==t)return t;xn.fail(\"File \"+e+\" has unknown extension.\");}function ln(t){return d(e.supportedTypescriptExtensionsForExtractExtension,function(e){return yt(t,e)})||d(e.supportedJavascriptExtensions,function(e){return yt(t,e)})}function _n(e,t){return e.checkJsDirective?e.checkJsDirective.enabled:t.checkJs}!function(e){e[e.False=0]=\"False\",e[e.Maybe=1]=\"Maybe\",e[e.True=-1]=\"True\";}(e.Ternary||(e.Ternary={})),e.collator=\"object\"==typeof Intl&&\"function\"==typeof Intl.Collator?new Intl.Collator(void 0,{usage:\"sort\",sensitivity:\"accent\"}):void 0,e.localeCompareIsCorrect=e.collator&&e.collator.compare(\"a\",\"B\")<0,e.createMap=n,e.createMapFromTemplate=r;var dn=\"undefined\"!=typeof Map&&\"entries\"in Map.prototype?Map:function(){var e=function(){function e(e,t){this.index=0,this.data=e,this.selector=t,this.keys=Object.keys(e);}return e.prototype.next=function(){var e=this.index;return e<this.keys.length?(this.index++,{value:this.selector(this.data,this.keys[e]),done:!1}):{value:void 0,done:!0}},e}();return function(){function n(){this.data=t(),this.size=0;}return n.prototype.get=function(e){return this.data[e]},n.prototype.set=function(e,t){return this.has(e)||this.size++,this.data[e]=t,this},n.prototype.has=function(e){return e in this.data},n.prototype.delete=function(e){return!!this.has(e)&&(this.size--,delete this.data[e],!0)},n.prototype.clear=function(){this.data=t(),this.size=0;},n.prototype.keys=function(){return new e(this.data,function(e,t){return t})},n.prototype.values=function(){return new e(this.data,function(e,t){return e[t]})},n.prototype.entries=function(){return new e(this.data,function(e,t){return[t,e[t]]})},n.prototype.forEach=function(e){for(var t in this.data)e(this.data[t],t);},n}()}();e.createFileMap=a,e.toPath=i;!function(e){e[e.LessThan=-1]=\"LessThan\",e[e.EqualTo=0]=\"EqualTo\",e[e.GreaterThan=1]=\"GreaterThan\";}(e.Comparison||(e.Comparison={})),e.length=o,e.forEach=s,e.findAncestor=c,e.zipWith=u,e.zipToMap=l,e.every=_,e.find=d,e.findIndex=p,e.findMap=f,e.contains=g,e.indexOf=m,e.indexOfAnyCharCode=y,e.countWhere=h,e.filter=v,e.removeWhere=b,e.filterMutate=x,e.map=k,e.sameMap=S,e.flatten=T,e.flatMap=C,e.sameFlatMap=D,e.mapDefined=E,e.span=N,e.spanMap=A,e.mapEntries=w,e.some=P,e.concatenate=O,e.deduplicate=F,e.arrayIsEqualTo=I,e.changesAffectModuleResolution=M,e.compact=R,e.relativeComplement=L,e.sum=B,e.append=K,e.addRange=J,e.stableSort=z,e.rangeEquals=U,e.elementAt=q,e.firstOrUndefined=V,e.lastOrUndefined=$,e.singleOrUndefined=W,e.singleOrMany=H,e.replaceElement=G,e.binarySearch=X,e.reduceLeft=Y,e.reduceRight=Q;var pn=Object.prototype.hasOwnProperty;e.hasProperty=Z,e.getProperty=ee,e.getOwnKeys=te,e.arrayFrom=ne,e.convertToArray=re,e.forEachEntry=ae,e.forEachKey=ie,e.copyEntries=oe,e.assign=se,e.equalOwnProperties=ce,e.arrayToMap=ue,e.cloneMap=le,e.clone=_e,e.extend=de,e.createMultiMap=pe,e.isArray=me,e.tryCast=ye,e.cast=he,e.noop=ve,e.notImplemented=be,e.memoize=xe,e.chain=ke,e.compose=Se,e.formatStringFromArgs=Te,e.localizedDiagnosticMessages=void 0,e.getLocaleSpecificMessage=Ce,e.createFileDiagnostic=De,e.formatMessage=Ee,e.createCompilerDiagnostic=Ne,e.createCompilerDiagnosticFromMessageChain=Ae,e.chainDiagnosticMessages=we,e.concatenateDiagnosticMessageChains=Pe,e.compareValues=Oe,e.compareStrings=Fe,e.compareStringsCaseInsensitive=Ie,e.compareDiagnostics=Re,e.sortAndDeduplicateDiagnostics=Be,e.deduplicateSortedDiagnostics=Ke,e.normalizeSlashes=je,e.getRootLength=Je,e.directorySeparator=\"/\";var fn=47;e.normalizePath=Ue,e.pathEndsWithDirectorySeparator=qe,e.getDirectoryPath=Ve,e.isUrl=$e,e.isExternalModuleNameRelative=We,e.getEmitScriptTarget=He,e.getEmitModuleKind=Ge,e.getEmitModuleResolutionKind=Xe,e.hasZeroOrOneAsteriskCharacter=Ye,e.isRootedDiskPath=Qe,e.convertToRelativePath=Ze,e.getNormalizedPathComponents=tt,e.getNormalizedAbsolutePath=nt,e.getNormalizedPathFromPathComponents=rt,e.getRelativePathToDirectoryOrUrl=ot,e.getBaseFileName=st,e.combinePaths=ct,e.removeTrailingDirectorySeparator=ut,e.ensureTrailingDirectorySeparator=lt,e.comparePaths=_t,e.containsPath=dt,e.startsWith=pt,e.removePrefix=ft,e.endsWith=gt,e.hasExtension=mt,e.fileExtensionIs=yt,e.fileExtensionIsOneOf=ht;var gn=/[^\\w\\s\\/]/g,mn=[42,63],yn=\"([^./]|(\\\\.(?!min\\\\.js$))?)*\",hn=\"[^/]*\";e.getRegularExpressionForWildcard=vt,e.isImplicitGlob=xt,e.getFileMatcherPatterns=Dt,e.matchFiles=Et,e.ensureScriptKind=wt,e.getScriptKindFromFileName=Pt,e.supportedTypeScriptExtensions=[\".ts\",\".tsx\",\".d.ts\"],e.supportedTypescriptExtensionsForExtractExtension=[\".d.ts\",\".ts\",\".tsx\"],e.supportedJavascriptExtensions=[\".js\",\".jsx\"];var vn=e.supportedTypeScriptExtensions.concat(e.supportedJavascriptExtensions);e.getSupportedExtensions=Ot,e.hasJavaScriptFileExtension=Ft,e.hasTypeScriptFileExtension=It,e.isSupportedSourceFileName=Mt;!function(e){e[e.TypeScriptFiles=0]=\"TypeScriptFiles\",e[e.DeclarationAndJavaScriptFiles=2]=\"DeclarationAndJavaScriptFiles\",e[e.Highest=0]=\"Highest\",e[e.Lowest=2]=\"Lowest\";}(e.ExtensionPriority||(e.ExtensionPriority={})),e.getExtensionPriority=Rt,e.adjustExtensionPriority=Lt,e.getNextLowestExtensionPriority=Bt;var bn=[\".d.ts\",\".ts\",\".js\",\".tsx\",\".jsx\"];e.removeFileExtension=Kt,e.tryRemoveExtension=jt,e.removeExtension=Jt,e.changeExtension=zt,e.objectAllocator={getNodeConstructor:function(){return $t},getTokenConstructor:function(){return $t},getIdentifierConstructor:function(){return $t},getSourceFileConstructor:function(){return $t},getSymbolConstructor:function(){return Ut},getTypeConstructor:function(){return qt},getSignatureConstructor:function(){return Vt},getSourceMapSourceConstructor:function(){return Wt}};!function(e){e[e.None=0]=\"None\",e[e.Normal=1]=\"Normal\",e[e.Aggressive=2]=\"Aggressive\",e[e.VeryAggressive=3]=\"VeryAggressive\";}(e.AssertionLevel||(e.AssertionLevel={}));var xn;!function(e){function t(t){return e.currentAssertionLevel>=t}function n(e,t,a,i){e||(a&&(t+=\"\\r\\nVerbose Debug Information: \"+a()),r(t?\"False expression: \"+t:\"False expression.\",i||n));}function r(e,t){var n=new Error(e?\"Debug Failure. \":\"Debug Failure.\");throw Error.captureStackTrace&&Error.captureStackTrace(n,t||r),n}function a(e){if(\"function\"!=typeof e)return\"\";if(e.hasOwnProperty(\"name\"))return e.name;var t=Function.prototype.toString.call(e),n=/^function\\s+([\\w\\$]+)\\s*\\(/.exec(t);return n?n[1]:\"\"}e.currentAssertionLevel=0,e.isDebugging=!1,e.shouldAssert=t,e.assert=n,e.fail=r,e.getFunctionName=a;}(xn=e.Debug||(e.Debug={})),e.orderedRemoveItem=Ht,e.orderedRemoveItemAt=Gt,e.unorderedRemoveItemAt=Xt,e.unorderedRemoveItem=Yt,e.createGetCanonicalFileName=Zt,e.matchPatternOrExact=en,e.patternText=tn,e.matchedText=nn,e.findBestPatternMatch=rn,e.tryParsePattern=on$$1,e.positionIsSynthesized=sn,e.extensionIsTypeScript=cn,e.extensionFromPath=un,e.tryGetExtensionFromPath=ln,e.isCheckJsEnabledForFile=_n;}(r||(r={}));!function(e){function t(){if(\"undefined\"!=typeof process){var e=process.version;if(e){var t=e.indexOf(\".\");if(-1!==t)return parseInt(e.substring(1,t))}}}e.getNodeMajorVersion=t,e.sys=function(){function n(t,r){var a=e.getDirectoryPath(t),i=t!==a&&!r.directoryExists(a);i&&n(a,r),!i&&r.directoryExists(t)||r.createDirectory(t);}var r;if(\"undefined\"!=typeof ChakraHost?r=function(){var t=ChakraHost.realpath&&function(e){return ChakraHost.realpath(e)};return{newLine:ChakraHost.newLine||\"\\r\\n\",args:ChakraHost.args,useCaseSensitiveFileNames:!!ChakraHost.useCaseSensitiveFileNames,write:ChakraHost.echo,readFile:function(e,t){return ChakraHost.readFile(e)},writeFile:function(e,t,n){n&&(t=\"\\ufeff\"+t),ChakraHost.writeFile(e,t);},resolvePath:ChakraHost.resolvePath,fileExists:ChakraHost.fileExists,directoryExists:ChakraHost.directoryExists,createDirectory:ChakraHost.createDirectory,getExecutingFilePath:function(){return ChakraHost.executingFile},getCurrentDirectory:function(){return ChakraHost.currentDirectory},getDirectories:ChakraHost.getDirectories,getEnvironmentVariable:ChakraHost.getEnvironmentVariable||function(){return\"\"},readDirectory:function(t,n,r,a){var i=e.getFileMatcherPatterns(t,r,a,!!ChakraHost.useCaseSensitiveFileNames,ChakraHost.currentDirectory);return ChakraHost.readDirectory(t,n,i.basePaths,i.excludePattern,i.includeFilePattern,i.includeDirectoryPattern)},exit:ChakraHost.quit,realpath:t}}():\"undefined\"!=typeof process&&nextTick&&!browser$1&&void 0!==commonjsRequire$$1&&(r=function(){function n(e,t){if(s(e)){var n=_.readFileSync(e),r=n.length;if(r>=2&&254===n[0]&&255===n[1]){r&=-2;for(var a=0;a<r;a+=2){var i=n[a];n[a]=n[a+1],n[a+1]=i;}return n.toString(\"utf16le\",2)}return r>=2&&255===n[0]&&254===n[1]?n.toString(\"utf16le\",2):r>=3&&239===n[0]&&187===n[1]&&191===n[2]?n.toString(\"utf8\",3):n.toString(\"utf8\")}}function r(e,t,n){n&&(t=\"\\ufeff\"+t);var r;try{r=_.openSync(e,\"w\"),_.writeSync(r,t,void 0,\"utf8\");}finally{void 0!==r&&_.closeSync(r);}}function a(t){try{for(var n=[],r=[],a=0,i=_.readdirSync(t||\".\").sort();a<i.length;a++){var o=i[a];if(\".\"!==o&&\"..\"!==o){var s=e.combinePaths(t,o),c=void 0;try{c=_.statSync(s);}catch(e){continue}c.isFile()?n.push(o):c.isDirectory()&&r.push(o);}}return{files:n,directories:r}}catch(e){return{files:[],directories:[]}}}function i(t,n,r,i){return e.matchFiles(t,n,r,i,v,process.cwd(),a)}function o(e,t){try{var n=_.statSync(e);switch(t){case 0:return n.isFile();case 1:return n.isDirectory()}}catch(e){return!1}}function s(e){return o(e,0)}function c(e){return o(e,1)}function u(t){return e.filter(_.readdirSync(t),function(n){return o(e.combinePaths(t,n),1)})}var l,_=fs$$1,d=path$$1,p=os$$1,f=crypto$$1,g=process.env.TSC_NONPOLLING_WATCHER,m=function(){function t(t){var n=e.getDirectoryPath(t),r=c.get(n);r&&(r.referenceCount-=1,r.referenceCount<=0&&(r.close(),c.delete(n)));}function n(e){var t=c.get(e);t?t.referenceCount+=1:((t=_.watch(e,{persistent:!0},function(t,n){return s(t,n,e)})).referenceCount=1,c.set(e,t));}function r(e,t){u.add(e,t);}function a(t,a){return r(t,a),n(e.getDirectoryPath(t)),{fileName:t,callback:a}}function i(e){o(e.fileName,e.callback),t(e.fileName);}function o(e,t){u.remove(e,t);}function s(t,n,r){var a=\"string\"!=typeof n?void 0:e.getNormalizedAbsolutePath(n,r);if(\"change\"===t||\"rename\"===t){var i=u.get(a);if(i)for(var o=0,s=i;o<s.length;o++)(0,s[o])(a);}}var c=e.createMap(),u=e.createMultiMap();return{addFile:a,removeFile:i}}(),y=t()>=4,h=p.platform(),v=function(){return\"win32\"!==h&&\"win64\"!==h&&(!s(__filename.toUpperCase())||!s(__filename.toLowerCase()))}();!function(e){e[e.File=0]=\"File\",e[e.Directory=1]=\"Directory\";}(l||(l={}));var b={close:e.noop},x={args:process.argv.slice(2),newLine:p.EOL,useCaseSensitiveFileNames:v,write:function(e){process.stdout.write(e);},readFile:n,writeFile:r,watchFile:function(e,t,n){function r(n,r){+n.mtime<=+r.mtime||t(e);}if(g){var a=m.addFile(e,t);return{close:function(){return m.removeFile(a)}}}return _.watchFile(e,{persistent:!0,interval:n||250},r),{close:function(){return _.unwatchFile(e,r)}}},watchDirectory:function(t,n,r){var a;return c(t)?(a=!y||\"win32\"!==process.platform&&\"darwin\"!==process.platform?{persistent:!0}:{persistent:!0,recursive:!!r},_.watch(t,a,function(r,a){\"rename\"===r&&n(a?e.normalizePath(e.combinePaths(t,a)):a);})):b},resolvePath:function(e){return d.resolve(e)},fileExists:s,directoryExists:c,createDirectory:function(e){x.directoryExists(e)||_.mkdirSync(e);},getExecutingFilePath:function(){return __filename},getCurrentDirectory:function(){return process.cwd()},getDirectories:u,getEnvironmentVariable:function(e){return process.env[e]||\"\"},readDirectory:i,getModifiedTime:function(e){try{return _.statSync(e).mtime}catch(e){return}},createHash:function(e){var t=f.createHash(\"md5\");return t.update(e),t.digest(\"hex\")},getMemoryUsage:function(){return commonjsGlobal$$1.gc&&commonjsGlobal$$1.gc(),process.memoryUsage().heapUsed},getFileSize:function(e){try{var t=_.statSync(e);if(t.isFile())return t.size}catch(e){}return 0},exit:function(e){process.exit(e);},realpath:function(e){return _.realpathSync(e)},debugMode:e.some(process.execArgv,function(e){return/^--(inspect|debug)(-brk)?(=\\d+)?$/i.test(e)}),tryEnableSourceMapsForHost:function(){try{sourceMapSupport.install();}catch(e){}},setTimeout:setTimeout,clearTimeout:clearTimeout};return x}()),r){var a=r.writeFile;r.writeFile=function(t,i,o){var s=e.getDirectoryPath(e.normalizeSlashes(t));s&&!r.directoryExists(s)&&n(s,r),a.call(r,t,i,o);};}return r}(),e.sys&&e.sys.getEnvironmentVariable&&(e.Debug.currentAssertionLevel=/^development$/i.test(e.sys.getEnvironmentVariable(\"NODE_ENV\"))?1:0),e.sys&&e.sys.debugMode&&(e.Debug.isDebugging=!0);}(r||(r={}));!function(e){e.Diagnostics={Unterminated_string_literal:{code:1002,category:e.DiagnosticCategory.Error,key:\"Unterminated_string_literal_1002\",message:\"Unterminated string literal.\"},Identifier_expected:{code:1003,category:e.DiagnosticCategory.Error,key:\"Identifier_expected_1003\",message:\"Identifier expected.\"},_0_expected:{code:1005,category:e.DiagnosticCategory.Error,key:\"_0_expected_1005\",message:\"'{0}' expected.\"},A_file_cannot_have_a_reference_to_itself:{code:1006,category:e.DiagnosticCategory.Error,key:\"A_file_cannot_have_a_reference_to_itself_1006\",message:\"A file cannot have a reference to itself.\"},Trailing_comma_not_allowed:{code:1009,category:e.DiagnosticCategory.Error,key:\"Trailing_comma_not_allowed_1009\",message:\"Trailing comma not allowed.\"},Asterisk_Slash_expected:{code:1010,category:e.DiagnosticCategory.Error,key:\"Asterisk_Slash_expected_1010\",message:\"'*/' expected.\"},Unexpected_token:{code:1012,category:e.DiagnosticCategory.Error,key:\"Unexpected_token_1012\",message:\"Unexpected token.\"},A_rest_parameter_must_be_last_in_a_parameter_list:{code:1014,category:e.DiagnosticCategory.Error,key:\"A_rest_parameter_must_be_last_in_a_parameter_list_1014\",message:\"A rest parameter must be last in a parameter list.\"},Parameter_cannot_have_question_mark_and_initializer:{code:1015,category:e.DiagnosticCategory.Error,key:\"Parameter_cannot_have_question_mark_and_initializer_1015\",message:\"Parameter cannot have question mark and initializer.\"},A_required_parameter_cannot_follow_an_optional_parameter:{code:1016,category:e.DiagnosticCategory.Error,key:\"A_required_parameter_cannot_follow_an_optional_parameter_1016\",message:\"A required parameter cannot follow an optional parameter.\"},An_index_signature_cannot_have_a_rest_parameter:{code:1017,category:e.DiagnosticCategory.Error,key:\"An_index_signature_cannot_have_a_rest_parameter_1017\",message:\"An index signature cannot have a rest parameter.\"},An_index_signature_parameter_cannot_have_an_accessibility_modifier:{code:1018,category:e.DiagnosticCategory.Error,key:\"An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018\",message:\"An index signature parameter cannot have an accessibility modifier.\"},An_index_signature_parameter_cannot_have_a_question_mark:{code:1019,category:e.DiagnosticCategory.Error,key:\"An_index_signature_parameter_cannot_have_a_question_mark_1019\",message:\"An index signature parameter cannot have a question mark.\"},An_index_signature_parameter_cannot_have_an_initializer:{code:1020,category:e.DiagnosticCategory.Error,key:\"An_index_signature_parameter_cannot_have_an_initializer_1020\",message:\"An index signature parameter cannot have an initializer.\"},An_index_signature_must_have_a_type_annotation:{code:1021,category:e.DiagnosticCategory.Error,key:\"An_index_signature_must_have_a_type_annotation_1021\",message:\"An index signature must have a type annotation.\"},An_index_signature_parameter_must_have_a_type_annotation:{code:1022,category:e.DiagnosticCategory.Error,key:\"An_index_signature_parameter_must_have_a_type_annotation_1022\",message:\"An index signature parameter must have a type annotation.\"},An_index_signature_parameter_type_must_be_string_or_number:{code:1023,category:e.DiagnosticCategory.Error,key:\"An_index_signature_parameter_type_must_be_string_or_number_1023\",message:\"An index signature parameter type must be 'string' or 'number'.\"},readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature:{code:1024,category:e.DiagnosticCategory.Error,key:\"readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024\",message:\"'readonly' modifier can only appear on a property declaration or index signature.\"},Accessibility_modifier_already_seen:{code:1028,category:e.DiagnosticCategory.Error,key:\"Accessibility_modifier_already_seen_1028\",message:\"Accessibility modifier already seen.\"},_0_modifier_must_precede_1_modifier:{code:1029,category:e.DiagnosticCategory.Error,key:\"_0_modifier_must_precede_1_modifier_1029\",message:\"'{0}' modifier must precede '{1}' modifier.\"},_0_modifier_already_seen:{code:1030,category:e.DiagnosticCategory.Error,key:\"_0_modifier_already_seen_1030\",message:\"'{0}' modifier already seen.\"},_0_modifier_cannot_appear_on_a_class_element:{code:1031,category:e.DiagnosticCategory.Error,key:\"_0_modifier_cannot_appear_on_a_class_element_1031\",message:\"'{0}' modifier cannot appear on a class element.\"},super_must_be_followed_by_an_argument_list_or_member_access:{code:1034,category:e.DiagnosticCategory.Error,key:\"super_must_be_followed_by_an_argument_list_or_member_access_1034\",message:\"'super' must be followed by an argument list or member access.\"},Only_ambient_modules_can_use_quoted_names:{code:1035,category:e.DiagnosticCategory.Error,key:\"Only_ambient_modules_can_use_quoted_names_1035\",message:\"Only ambient modules can use quoted names.\"},Statements_are_not_allowed_in_ambient_contexts:{code:1036,category:e.DiagnosticCategory.Error,key:\"Statements_are_not_allowed_in_ambient_contexts_1036\",message:\"Statements are not allowed in ambient contexts.\"},A_declare_modifier_cannot_be_used_in_an_already_ambient_context:{code:1038,category:e.DiagnosticCategory.Error,key:\"A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038\",message:\"A 'declare' modifier cannot be used in an already ambient context.\"},Initializers_are_not_allowed_in_ambient_contexts:{code:1039,category:e.DiagnosticCategory.Error,key:\"Initializers_are_not_allowed_in_ambient_contexts_1039\",message:\"Initializers are not allowed in ambient contexts.\"},_0_modifier_cannot_be_used_in_an_ambient_context:{code:1040,category:e.DiagnosticCategory.Error,key:\"_0_modifier_cannot_be_used_in_an_ambient_context_1040\",message:\"'{0}' modifier cannot be used in an ambient context.\"},_0_modifier_cannot_be_used_with_a_class_declaration:{code:1041,category:e.DiagnosticCategory.Error,key:\"_0_modifier_cannot_be_used_with_a_class_declaration_1041\",message:\"'{0}' modifier cannot be used with a class declaration.\"},_0_modifier_cannot_be_used_here:{code:1042,category:e.DiagnosticCategory.Error,key:\"_0_modifier_cannot_be_used_here_1042\",message:\"'{0}' modifier cannot be used here.\"},_0_modifier_cannot_appear_on_a_data_property:{code:1043,category:e.DiagnosticCategory.Error,key:\"_0_modifier_cannot_appear_on_a_data_property_1043\",message:\"'{0}' modifier cannot appear on a data property.\"},_0_modifier_cannot_appear_on_a_module_or_namespace_element:{code:1044,category:e.DiagnosticCategory.Error,key:\"_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044\",message:\"'{0}' modifier cannot appear on a module or namespace element.\"},A_0_modifier_cannot_be_used_with_an_interface_declaration:{code:1045,category:e.DiagnosticCategory.Error,key:\"A_0_modifier_cannot_be_used_with_an_interface_declaration_1045\",message:\"A '{0}' modifier cannot be used with an interface declaration.\"},A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file:{code:1046,category:e.DiagnosticCategory.Error,key:\"A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file_1046\",message:\"A 'declare' modifier is required for a top level declaration in a .d.ts file.\"},A_rest_parameter_cannot_be_optional:{code:1047,category:e.DiagnosticCategory.Error,key:\"A_rest_parameter_cannot_be_optional_1047\",message:\"A rest parameter cannot be optional.\"},A_rest_parameter_cannot_have_an_initializer:{code:1048,category:e.DiagnosticCategory.Error,key:\"A_rest_parameter_cannot_have_an_initializer_1048\",message:\"A rest parameter cannot have an initializer.\"},A_set_accessor_must_have_exactly_one_parameter:{code:1049,category:e.DiagnosticCategory.Error,key:\"A_set_accessor_must_have_exactly_one_parameter_1049\",message:\"A 'set' accessor must have exactly one parameter.\"},A_set_accessor_cannot_have_an_optional_parameter:{code:1051,category:e.DiagnosticCategory.Error,key:\"A_set_accessor_cannot_have_an_optional_parameter_1051\",message:\"A 'set' accessor cannot have an optional parameter.\"},A_set_accessor_parameter_cannot_have_an_initializer:{code:1052,category:e.DiagnosticCategory.Error,key:\"A_set_accessor_parameter_cannot_have_an_initializer_1052\",message:\"A 'set' accessor parameter cannot have an initializer.\"},A_set_accessor_cannot_have_rest_parameter:{code:1053,category:e.DiagnosticCategory.Error,key:\"A_set_accessor_cannot_have_rest_parameter_1053\",message:\"A 'set' accessor cannot have rest parameter.\"},A_get_accessor_cannot_have_parameters:{code:1054,category:e.DiagnosticCategory.Error,key:\"A_get_accessor_cannot_have_parameters_1054\",message:\"A 'get' accessor cannot have parameters.\"},Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value:{code:1055,category:e.DiagnosticCategory.Error,key:\"Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Prom_1055\",message:\"Type '{0}' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value.\"},Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher:{code:1056,category:e.DiagnosticCategory.Error,key:\"Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056\",message:\"Accessors are only available when targeting ECMAScript 5 and higher.\"},An_async_function_or_method_must_have_a_valid_awaitable_return_type:{code:1057,category:e.DiagnosticCategory.Error,key:\"An_async_function_or_method_must_have_a_valid_awaitable_return_type_1057\",message:\"An async function or method must have a valid awaitable return type.\"},The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member:{code:1058,category:e.DiagnosticCategory.Error,key:\"The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058\",message:\"The return type of an async function must either be a valid promise or must not contain a callable 'then' member.\"},A_promise_must_have_a_then_method:{code:1059,category:e.DiagnosticCategory.Error,key:\"A_promise_must_have_a_then_method_1059\",message:\"A promise must have a 'then' method.\"},The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback:{code:1060,category:e.DiagnosticCategory.Error,key:\"The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060\",message:\"The first parameter of the 'then' method of a promise must be a callback.\"},Enum_member_must_have_initializer:{code:1061,category:e.DiagnosticCategory.Error,key:\"Enum_member_must_have_initializer_1061\",message:\"Enum member must have initializer.\"},Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method:{code:1062,category:e.DiagnosticCategory.Error,key:\"Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062\",message:\"Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method.\"},An_export_assignment_cannot_be_used_in_a_namespace:{code:1063,category:e.DiagnosticCategory.Error,key:\"An_export_assignment_cannot_be_used_in_a_namespace_1063\",message:\"An export assignment cannot be used in a namespace.\"},The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type:{code:1064,category:e.DiagnosticCategory.Error,key:\"The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1064\",message:\"The return type of an async function or method must be the global Promise<T> type.\"},In_ambient_enum_declarations_member_initializer_must_be_constant_expression:{code:1066,category:e.DiagnosticCategory.Error,key:\"In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066\",message:\"In ambient enum declarations member initializer must be constant expression.\"},Unexpected_token_A_constructor_method_accessor_or_property_was_expected:{code:1068,category:e.DiagnosticCategory.Error,key:\"Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068\",message:\"Unexpected token. A constructor, method, accessor, or property was expected.\"},_0_modifier_cannot_appear_on_a_type_member:{code:1070,category:e.DiagnosticCategory.Error,key:\"_0_modifier_cannot_appear_on_a_type_member_1070\",message:\"'{0}' modifier cannot appear on a type member.\"},_0_modifier_cannot_appear_on_an_index_signature:{code:1071,category:e.DiagnosticCategory.Error,key:\"_0_modifier_cannot_appear_on_an_index_signature_1071\",message:\"'{0}' modifier cannot appear on an index signature.\"},A_0_modifier_cannot_be_used_with_an_import_declaration:{code:1079,category:e.DiagnosticCategory.Error,key:\"A_0_modifier_cannot_be_used_with_an_import_declaration_1079\",message:\"A '{0}' modifier cannot be used with an import declaration.\"},Invalid_reference_directive_syntax:{code:1084,category:e.DiagnosticCategory.Error,key:\"Invalid_reference_directive_syntax_1084\",message:\"Invalid 'reference' directive syntax.\"},Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0:{code:1085,category:e.DiagnosticCategory.Error,key:\"Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0_1085\",message:\"Octal literals are not available when targeting ECMAScript 5 and higher. Use the syntax '{0}'.\"},An_accessor_cannot_be_declared_in_an_ambient_context:{code:1086,category:e.DiagnosticCategory.Error,key:\"An_accessor_cannot_be_declared_in_an_ambient_context_1086\",message:\"An accessor cannot be declared in an ambient context.\"},_0_modifier_cannot_appear_on_a_constructor_declaration:{code:1089,category:e.DiagnosticCategory.Error,key:\"_0_modifier_cannot_appear_on_a_constructor_declaration_1089\",message:\"'{0}' modifier cannot appear on a constructor declaration.\"},_0_modifier_cannot_appear_on_a_parameter:{code:1090,category:e.DiagnosticCategory.Error,key:\"_0_modifier_cannot_appear_on_a_parameter_1090\",message:\"'{0}' modifier cannot appear on a parameter.\"},Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement:{code:1091,category:e.DiagnosticCategory.Error,key:\"Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091\",message:\"Only a single variable declaration is allowed in a 'for...in' statement.\"},Type_parameters_cannot_appear_on_a_constructor_declaration:{code:1092,category:e.DiagnosticCategory.Error,key:\"Type_parameters_cannot_appear_on_a_constructor_declaration_1092\",message:\"Type parameters cannot appear on a constructor declaration.\"},Type_annotation_cannot_appear_on_a_constructor_declaration:{code:1093,category:e.DiagnosticCategory.Error,key:\"Type_annotation_cannot_appear_on_a_constructor_declaration_1093\",message:\"Type annotation cannot appear on a constructor declaration.\"},An_accessor_cannot_have_type_parameters:{code:1094,category:e.DiagnosticCategory.Error,key:\"An_accessor_cannot_have_type_parameters_1094\",message:\"An accessor cannot have type parameters.\"},A_set_accessor_cannot_have_a_return_type_annotation:{code:1095,category:e.DiagnosticCategory.Error,key:\"A_set_accessor_cannot_have_a_return_type_annotation_1095\",message:\"A 'set' accessor cannot have a return type annotation.\"},An_index_signature_must_have_exactly_one_parameter:{code:1096,category:e.DiagnosticCategory.Error,key:\"An_index_signature_must_have_exactly_one_parameter_1096\",message:\"An index signature must have exactly one parameter.\"},_0_list_cannot_be_empty:{code:1097,category:e.DiagnosticCategory.Error,key:\"_0_list_cannot_be_empty_1097\",message:\"'{0}' list cannot be empty.\"},Type_parameter_list_cannot_be_empty:{code:1098,category:e.DiagnosticCategory.Error,key:\"Type_parameter_list_cannot_be_empty_1098\",message:\"Type parameter list cannot be empty.\"},Type_argument_list_cannot_be_empty:{code:1099,category:e.DiagnosticCategory.Error,key:\"Type_argument_list_cannot_be_empty_1099\",message:\"Type argument list cannot be empty.\"},Invalid_use_of_0_in_strict_mode:{code:1100,category:e.DiagnosticCategory.Error,key:\"Invalid_use_of_0_in_strict_mode_1100\",message:\"Invalid use of '{0}' in strict mode.\"},with_statements_are_not_allowed_in_strict_mode:{code:1101,category:e.DiagnosticCategory.Error,key:\"with_statements_are_not_allowed_in_strict_mode_1101\",message:\"'with' statements are not allowed in strict mode.\"},delete_cannot_be_called_on_an_identifier_in_strict_mode:{code:1102,category:e.DiagnosticCategory.Error,key:\"delete_cannot_be_called_on_an_identifier_in_strict_mode_1102\",message:\"'delete' cannot be called on an identifier in strict mode.\"},A_for_await_of_statement_is_only_allowed_within_an_async_function_or_async_generator:{code:1103,category:e.DiagnosticCategory.Error,key:\"A_for_await_of_statement_is_only_allowed_within_an_async_function_or_async_generator_1103\",message:\"A 'for-await-of' statement is only allowed within an async function or async generator.\"},A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement:{code:1104,category:e.DiagnosticCategory.Error,key:\"A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104\",message:\"A 'continue' statement can only be used within an enclosing iteration statement.\"},A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement:{code:1105,category:e.DiagnosticCategory.Error,key:\"A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105\",message:\"A 'break' statement can only be used within an enclosing iteration or switch statement.\"},Jump_target_cannot_cross_function_boundary:{code:1107,category:e.DiagnosticCategory.Error,key:\"Jump_target_cannot_cross_function_boundary_1107\",message:\"Jump target cannot cross function boundary.\"},A_return_statement_can_only_be_used_within_a_function_body:{code:1108,category:e.DiagnosticCategory.Error,key:\"A_return_statement_can_only_be_used_within_a_function_body_1108\",message:\"A 'return' statement can only be used within a function body.\"},Expression_expected:{code:1109,category:e.DiagnosticCategory.Error,key:\"Expression_expected_1109\",message:\"Expression expected.\"},Type_expected:{code:1110,category:e.DiagnosticCategory.Error,key:\"Type_expected_1110\",message:\"Type expected.\"},A_default_clause_cannot_appear_more_than_once_in_a_switch_statement:{code:1113,category:e.DiagnosticCategory.Error,key:\"A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113\",message:\"A 'default' clause cannot appear more than once in a 'switch' statement.\"},Duplicate_label_0:{code:1114,category:e.DiagnosticCategory.Error,key:\"Duplicate_label_0_1114\",message:\"Duplicate label '{0}'.\"},A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement:{code:1115,category:e.DiagnosticCategory.Error,key:\"A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115\",message:\"A 'continue' statement can only jump to a label of an enclosing iteration statement.\"},A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement:{code:1116,category:e.DiagnosticCategory.Error,key:\"A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116\",message:\"A 'break' statement can only jump to a label of an enclosing statement.\"},An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode:{code:1117,category:e.DiagnosticCategory.Error,key:\"An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode_1117\",message:\"An object literal cannot have multiple properties with the same name in strict mode.\"},An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name:{code:1118,category:e.DiagnosticCategory.Error,key:\"An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118\",message:\"An object literal cannot have multiple get/set accessors with the same name.\"},An_object_literal_cannot_have_property_and_accessor_with_the_same_name:{code:1119,category:e.DiagnosticCategory.Error,key:\"An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119\",message:\"An object literal cannot have property and accessor with the same name.\"},An_export_assignment_cannot_have_modifiers:{code:1120,category:e.DiagnosticCategory.Error,key:\"An_export_assignment_cannot_have_modifiers_1120\",message:\"An export assignment cannot have modifiers.\"},Octal_literals_are_not_allowed_in_strict_mode:{code:1121,category:e.DiagnosticCategory.Error,key:\"Octal_literals_are_not_allowed_in_strict_mode_1121\",message:\"Octal literals are not allowed in strict mode.\"},A_tuple_type_element_list_cannot_be_empty:{code:1122,category:e.DiagnosticCategory.Error,key:\"A_tuple_type_element_list_cannot_be_empty_1122\",message:\"A tuple type element list cannot be empty.\"},Variable_declaration_list_cannot_be_empty:{code:1123,category:e.DiagnosticCategory.Error,key:\"Variable_declaration_list_cannot_be_empty_1123\",message:\"Variable declaration list cannot be empty.\"},Digit_expected:{code:1124,category:e.DiagnosticCategory.Error,key:\"Digit_expected_1124\",message:\"Digit expected.\"},Hexadecimal_digit_expected:{code:1125,category:e.DiagnosticCategory.Error,key:\"Hexadecimal_digit_expected_1125\",message:\"Hexadecimal digit expected.\"},Unexpected_end_of_text:{code:1126,category:e.DiagnosticCategory.Error,key:\"Unexpected_end_of_text_1126\",message:\"Unexpected end of text.\"},Invalid_character:{code:1127,category:e.DiagnosticCategory.Error,key:\"Invalid_character_1127\",message:\"Invalid character.\"},Declaration_or_statement_expected:{code:1128,category:e.DiagnosticCategory.Error,key:\"Declaration_or_statement_expected_1128\",message:\"Declaration or statement expected.\"},Statement_expected:{code:1129,category:e.DiagnosticCategory.Error,key:\"Statement_expected_1129\",message:\"Statement expected.\"},case_or_default_expected:{code:1130,category:e.DiagnosticCategory.Error,key:\"case_or_default_expected_1130\",message:\"'case' or 'default' expected.\"},Property_or_signature_expected:{code:1131,category:e.DiagnosticCategory.Error,key:\"Property_or_signature_expected_1131\",message:\"Property or signature expected.\"},Enum_member_expected:{code:1132,category:e.DiagnosticCategory.Error,key:\"Enum_member_expected_1132\",message:\"Enum member expected.\"},Variable_declaration_expected:{code:1134,category:e.DiagnosticCategory.Error,key:\"Variable_declaration_expected_1134\",message:\"Variable declaration expected.\"},Argument_expression_expected:{code:1135,category:e.DiagnosticCategory.Error,key:\"Argument_expression_expected_1135\",message:\"Argument expression expected.\"},Property_assignment_expected:{code:1136,category:e.DiagnosticCategory.Error,key:\"Property_assignment_expected_1136\",message:\"Property assignment expected.\"},Expression_or_comma_expected:{code:1137,category:e.DiagnosticCategory.Error,key:\"Expression_or_comma_expected_1137\",message:\"Expression or comma expected.\"},Parameter_declaration_expected:{code:1138,category:e.DiagnosticCategory.Error,key:\"Parameter_declaration_expected_1138\",message:\"Parameter declaration expected.\"},Type_parameter_declaration_expected:{code:1139,category:e.DiagnosticCategory.Error,key:\"Type_parameter_declaration_expected_1139\",message:\"Type parameter declaration expected.\"},Type_argument_expected:{code:1140,category:e.DiagnosticCategory.Error,key:\"Type_argument_expected_1140\",message:\"Type argument expected.\"},String_literal_expected:{code:1141,category:e.DiagnosticCategory.Error,key:\"String_literal_expected_1141\",message:\"String literal expected.\"},Line_break_not_permitted_here:{code:1142,category:e.DiagnosticCategory.Error,key:\"Line_break_not_permitted_here_1142\",message:\"Line break not permitted here.\"},or_expected:{code:1144,category:e.DiagnosticCategory.Error,key:\"or_expected_1144\",message:\"'{' or ';' expected.\"},Declaration_expected:{code:1146,category:e.DiagnosticCategory.Error,key:\"Declaration_expected_1146\",message:\"Declaration expected.\"},Import_declarations_in_a_namespace_cannot_reference_a_module:{code:1147,category:e.DiagnosticCategory.Error,key:\"Import_declarations_in_a_namespace_cannot_reference_a_module_1147\",message:\"Import declarations in a namespace cannot reference a module.\"},Cannot_use_imports_exports_or_module_augmentations_when_module_is_none:{code:1148,category:e.DiagnosticCategory.Error,key:\"Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148\",message:\"Cannot use imports, exports, or module augmentations when '--module' is 'none'.\"},File_name_0_differs_from_already_included_file_name_1_only_in_casing:{code:1149,category:e.DiagnosticCategory.Error,key:\"File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149\",message:\"File name '{0}' differs from already included file name '{1}' only in casing.\"},new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead:{code:1150,category:e.DiagnosticCategory.Error,key:\"new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead_1150\",message:\"'new T[]' cannot be used to create an array. Use 'new Array<T>()' instead.\"},const_declarations_must_be_initialized:{code:1155,category:e.DiagnosticCategory.Error,key:\"const_declarations_must_be_initialized_1155\",message:\"'const' declarations must be initialized.\"},const_declarations_can_only_be_declared_inside_a_block:{code:1156,category:e.DiagnosticCategory.Error,key:\"const_declarations_can_only_be_declared_inside_a_block_1156\",message:\"'const' declarations can only be declared inside a block.\"},let_declarations_can_only_be_declared_inside_a_block:{code:1157,category:e.DiagnosticCategory.Error,key:\"let_declarations_can_only_be_declared_inside_a_block_1157\",message:\"'let' declarations can only be declared inside a block.\"},Unterminated_template_literal:{code:1160,category:e.DiagnosticCategory.Error,key:\"Unterminated_template_literal_1160\",message:\"Unterminated template literal.\"},Unterminated_regular_expression_literal:{code:1161,category:e.DiagnosticCategory.Error,key:\"Unterminated_regular_expression_literal_1161\",message:\"Unterminated regular expression literal.\"},An_object_member_cannot_be_declared_optional:{code:1162,category:e.DiagnosticCategory.Error,key:\"An_object_member_cannot_be_declared_optional_1162\",message:\"An object member cannot be declared optional.\"},A_yield_expression_is_only_allowed_in_a_generator_body:{code:1163,category:e.DiagnosticCategory.Error,key:\"A_yield_expression_is_only_allowed_in_a_generator_body_1163\",message:\"A 'yield' expression is only allowed in a generator body.\"},Computed_property_names_are_not_allowed_in_enums:{code:1164,category:e.DiagnosticCategory.Error,key:\"Computed_property_names_are_not_allowed_in_enums_1164\",message:\"Computed property names are not allowed in enums.\"},A_computed_property_name_in_an_ambient_context_must_directly_refer_to_a_built_in_symbol:{code:1165,category:e.DiagnosticCategory.Error,key:\"A_computed_property_name_in_an_ambient_context_must_directly_refer_to_a_built_in_symbol_1165\",message:\"A computed property name in an ambient context must directly refer to a built-in symbol.\"},A_computed_property_name_in_a_class_property_declaration_must_directly_refer_to_a_built_in_symbol:{code:1166,category:e.DiagnosticCategory.Error,key:\"A_computed_property_name_in_a_class_property_declaration_must_directly_refer_to_a_built_in_symbol_1166\",message:\"A computed property name in a class property declaration must directly refer to a built-in symbol.\"},A_computed_property_name_in_a_method_overload_must_directly_refer_to_a_built_in_symbol:{code:1168,category:e.DiagnosticCategory.Error,key:\"A_computed_property_name_in_a_method_overload_must_directly_refer_to_a_built_in_symbol_1168\",message:\"A computed property name in a method overload must directly refer to a built-in symbol.\"},A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol:{code:1169,category:e.DiagnosticCategory.Error,key:\"A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol_1169\",message:\"A computed property name in an interface must directly refer to a built-in symbol.\"},A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol:{code:1170,category:e.DiagnosticCategory.Error,key:\"A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol_1170\",message:\"A computed property name in a type literal must directly refer to a built-in symbol.\"},A_comma_expression_is_not_allowed_in_a_computed_property_name:{code:1171,category:e.DiagnosticCategory.Error,key:\"A_comma_expression_is_not_allowed_in_a_computed_property_name_1171\",message:\"A comma expression is not allowed in a computed property name.\"},extends_clause_already_seen:{code:1172,category:e.DiagnosticCategory.Error,key:\"extends_clause_already_seen_1172\",message:\"'extends' clause already seen.\"},extends_clause_must_precede_implements_clause:{code:1173,category:e.DiagnosticCategory.Error,key:\"extends_clause_must_precede_implements_clause_1173\",message:\"'extends' clause must precede 'implements' clause.\"},Classes_can_only_extend_a_single_class:{code:1174,category:e.DiagnosticCategory.Error,key:\"Classes_can_only_extend_a_single_class_1174\",message:\"Classes can only extend a single class.\"},implements_clause_already_seen:{code:1175,category:e.DiagnosticCategory.Error,key:\"implements_clause_already_seen_1175\",message:\"'implements' clause already seen.\"},Interface_declaration_cannot_have_implements_clause:{code:1176,category:e.DiagnosticCategory.Error,key:\"Interface_declaration_cannot_have_implements_clause_1176\",message:\"Interface declaration cannot have 'implements' clause.\"},Binary_digit_expected:{code:1177,category:e.DiagnosticCategory.Error,key:\"Binary_digit_expected_1177\",message:\"Binary digit expected.\"},Octal_digit_expected:{code:1178,category:e.DiagnosticCategory.Error,key:\"Octal_digit_expected_1178\",message:\"Octal digit expected.\"},Unexpected_token_expected:{code:1179,category:e.DiagnosticCategory.Error,key:\"Unexpected_token_expected_1179\",message:\"Unexpected token. '{' expected.\"},Property_destructuring_pattern_expected:{code:1180,category:e.DiagnosticCategory.Error,key:\"Property_destructuring_pattern_expected_1180\",message:\"Property destructuring pattern expected.\"},Array_element_destructuring_pattern_expected:{code:1181,category:e.DiagnosticCategory.Error,key:\"Array_element_destructuring_pattern_expected_1181\",message:\"Array element destructuring pattern expected.\"},A_destructuring_declaration_must_have_an_initializer:{code:1182,category:e.DiagnosticCategory.Error,key:\"A_destructuring_declaration_must_have_an_initializer_1182\",message:\"A destructuring declaration must have an initializer.\"},An_implementation_cannot_be_declared_in_ambient_contexts:{code:1183,category:e.DiagnosticCategory.Error,key:\"An_implementation_cannot_be_declared_in_ambient_contexts_1183\",message:\"An implementation cannot be declared in ambient contexts.\"},Modifiers_cannot_appear_here:{code:1184,category:e.DiagnosticCategory.Error,key:\"Modifiers_cannot_appear_here_1184\",message:\"Modifiers cannot appear here.\"},Merge_conflict_marker_encountered:{code:1185,category:e.DiagnosticCategory.Error,key:\"Merge_conflict_marker_encountered_1185\",message:\"Merge conflict marker encountered.\"},A_rest_element_cannot_have_an_initializer:{code:1186,category:e.DiagnosticCategory.Error,key:\"A_rest_element_cannot_have_an_initializer_1186\",message:\"A rest element cannot have an initializer.\"},A_parameter_property_may_not_be_declared_using_a_binding_pattern:{code:1187,category:e.DiagnosticCategory.Error,key:\"A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187\",message:\"A parameter property may not be declared using a binding pattern.\"},Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement:{code:1188,category:e.DiagnosticCategory.Error,key:\"Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188\",message:\"Only a single variable declaration is allowed in a 'for...of' statement.\"},The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer:{code:1189,category:e.DiagnosticCategory.Error,key:\"The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189\",message:\"The variable declaration of a 'for...in' statement cannot have an initializer.\"},The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer:{code:1190,category:e.DiagnosticCategory.Error,key:\"The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190\",message:\"The variable declaration of a 'for...of' statement cannot have an initializer.\"},An_import_declaration_cannot_have_modifiers:{code:1191,category:e.DiagnosticCategory.Error,key:\"An_import_declaration_cannot_have_modifiers_1191\",message:\"An import declaration cannot have modifiers.\"},Module_0_has_no_default_export:{code:1192,category:e.DiagnosticCategory.Error,key:\"Module_0_has_no_default_export_1192\",message:\"Module '{0}' has no default export.\"},An_export_declaration_cannot_have_modifiers:{code:1193,category:e.DiagnosticCategory.Error,key:\"An_export_declaration_cannot_have_modifiers_1193\",message:\"An export declaration cannot have modifiers.\"},Export_declarations_are_not_permitted_in_a_namespace:{code:1194,category:e.DiagnosticCategory.Error,key:\"Export_declarations_are_not_permitted_in_a_namespace_1194\",message:\"Export declarations are not permitted in a namespace.\"},Catch_clause_variable_cannot_have_a_type_annotation:{code:1196,category:e.DiagnosticCategory.Error,key:\"Catch_clause_variable_cannot_have_a_type_annotation_1196\",message:\"Catch clause variable cannot have a type annotation.\"},Catch_clause_variable_cannot_have_an_initializer:{code:1197,category:e.DiagnosticCategory.Error,key:\"Catch_clause_variable_cannot_have_an_initializer_1197\",message:\"Catch clause variable cannot have an initializer.\"},An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive:{code:1198,category:e.DiagnosticCategory.Error,key:\"An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198\",message:\"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.\"},Unterminated_Unicode_escape_sequence:{code:1199,category:e.DiagnosticCategory.Error,key:\"Unterminated_Unicode_escape_sequence_1199\",message:\"Unterminated Unicode escape sequence.\"},Line_terminator_not_permitted_before_arrow:{code:1200,category:e.DiagnosticCategory.Error,key:\"Line_terminator_not_permitted_before_arrow_1200\",message:\"Line terminator not permitted before arrow.\"},Import_assignment_cannot_be_used_when_targeting_ECMAScript_2015_modules_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_import_d_from_mod_or_another_module_format_instead:{code:1202,category:e.DiagnosticCategory.Error,key:\"Import_assignment_cannot_be_used_when_targeting_ECMAScript_2015_modules_Consider_using_import_Asteri_1202\",message:\"Import assignment cannot be used when targeting ECMAScript 2015 modules. Consider using 'import * as ns from \\\"mod\\\"', 'import {a} from \\\"mod\\\"', 'import d from \\\"mod\\\"', or another module format instead.\"},Export_assignment_cannot_be_used_when_targeting_ECMAScript_2015_modules_Consider_using_export_default_or_another_module_format_instead:{code:1203,category:e.DiagnosticCategory.Error,key:\"Export_assignment_cannot_be_used_when_targeting_ECMAScript_2015_modules_Consider_using_export_defaul_1203\",message:\"Export assignment cannot be used when targeting ECMAScript 2015 modules. Consider using 'export default' or another module format instead.\"},Cannot_re_export_a_type_when_the_isolatedModules_flag_is_provided:{code:1205,category:e.DiagnosticCategory.Error,key:\"Cannot_re_export_a_type_when_the_isolatedModules_flag_is_provided_1205\",message:\"Cannot re-export a type when the '--isolatedModules' flag is provided.\"},Decorators_are_not_valid_here:{code:1206,category:e.DiagnosticCategory.Error,key:\"Decorators_are_not_valid_here_1206\",message:\"Decorators are not valid here.\"},Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name:{code:1207,category:e.DiagnosticCategory.Error,key:\"Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207\",message:\"Decorators cannot be applied to multiple get/set accessors of the same name.\"},Cannot_compile_namespaces_when_the_isolatedModules_flag_is_provided:{code:1208,category:e.DiagnosticCategory.Error,key:\"Cannot_compile_namespaces_when_the_isolatedModules_flag_is_provided_1208\",message:\"Cannot compile namespaces when the '--isolatedModules' flag is provided.\"},Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided:{code:1209,category:e.DiagnosticCategory.Error,key:\"Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided_1209\",message:\"Ambient const enums are not allowed when the '--isolatedModules' flag is provided.\"},Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode:{code:1210,category:e.DiagnosticCategory.Error,key:\"Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210\",message:\"Invalid use of '{0}'. Class definitions are automatically in strict mode.\"},A_class_declaration_without_the_default_modifier_must_have_a_name:{code:1211,category:e.DiagnosticCategory.Error,key:\"A_class_declaration_without_the_default_modifier_must_have_a_name_1211\",message:\"A class declaration without the 'default' modifier must have a name.\"},Identifier_expected_0_is_a_reserved_word_in_strict_mode:{code:1212,category:e.DiagnosticCategory.Error,key:\"Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212\",message:\"Identifier expected. '{0}' is a reserved word in strict mode.\"},Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode:{code:1213,category:e.DiagnosticCategory.Error,key:\"Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213\",message:\"Identifier expected. '{0}' is a reserved word in strict mode. Class definitions are automatically in strict mode.\"},Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode:{code:1214,category:e.DiagnosticCategory.Error,key:\"Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214\",message:\"Identifier expected. '{0}' is a reserved word in strict mode. Modules are automatically in strict mode.\"},Invalid_use_of_0_Modules_are_automatically_in_strict_mode:{code:1215,category:e.DiagnosticCategory.Error,key:\"Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215\",message:\"Invalid use of '{0}'. Modules are automatically in strict mode.\"},Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules:{code:1216,category:e.DiagnosticCategory.Error,key:\"Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216\",message:\"Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules.\"},Export_assignment_is_not_supported_when_module_flag_is_system:{code:1218,category:e.DiagnosticCategory.Error,key:\"Export_assignment_is_not_supported_when_module_flag_is_system_1218\",message:\"Export assignment is not supported when '--module' flag is 'system'.\"},Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_to_remove_this_warning:{code:1219,category:e.DiagnosticCategory.Error,key:\"Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219\",message:\"Experimental support for decorators is a feature that is subject to change in a future release. Set the 'experimentalDecorators' option to remove this warning.\"},Generators_are_only_available_when_targeting_ECMAScript_2015_or_higher:{code:1220,category:e.DiagnosticCategory.Error,key:\"Generators_are_only_available_when_targeting_ECMAScript_2015_or_higher_1220\",message:\"Generators are only available when targeting ECMAScript 2015 or higher.\"},Generators_are_not_allowed_in_an_ambient_context:{code:1221,category:e.DiagnosticCategory.Error,key:\"Generators_are_not_allowed_in_an_ambient_context_1221\",message:\"Generators are not allowed in an ambient context.\"},An_overload_signature_cannot_be_declared_as_a_generator:{code:1222,category:e.DiagnosticCategory.Error,key:\"An_overload_signature_cannot_be_declared_as_a_generator_1222\",message:\"An overload signature cannot be declared as a generator.\"},_0_tag_already_specified:{code:1223,category:e.DiagnosticCategory.Error,key:\"_0_tag_already_specified_1223\",message:\"'{0}' tag already specified.\"},Signature_0_must_have_a_type_predicate:{code:1224,category:e.DiagnosticCategory.Error,key:\"Signature_0_must_have_a_type_predicate_1224\",message:\"Signature '{0}' must have a type predicate.\"},Cannot_find_parameter_0:{code:1225,category:e.DiagnosticCategory.Error,key:\"Cannot_find_parameter_0_1225\",message:\"Cannot find parameter '{0}'.\"},Type_predicate_0_is_not_assignable_to_1:{code:1226,category:e.DiagnosticCategory.Error,key:\"Type_predicate_0_is_not_assignable_to_1_1226\",message:\"Type predicate '{0}' is not assignable to '{1}'.\"},Parameter_0_is_not_in_the_same_position_as_parameter_1:{code:1227,category:e.DiagnosticCategory.Error,key:\"Parameter_0_is_not_in_the_same_position_as_parameter_1_1227\",message:\"Parameter '{0}' is not in the same position as parameter '{1}'.\"},A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods:{code:1228,category:e.DiagnosticCategory.Error,key:\"A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228\",message:\"A type predicate is only allowed in return type position for functions and methods.\"},A_type_predicate_cannot_reference_a_rest_parameter:{code:1229,category:e.DiagnosticCategory.Error,key:\"A_type_predicate_cannot_reference_a_rest_parameter_1229\",message:\"A type predicate cannot reference a rest parameter.\"},A_type_predicate_cannot_reference_element_0_in_a_binding_pattern:{code:1230,category:e.DiagnosticCategory.Error,key:\"A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230\",message:\"A type predicate cannot reference element '{0}' in a binding pattern.\"},An_export_assignment_can_only_be_used_in_a_module:{code:1231,category:e.DiagnosticCategory.Error,key:\"An_export_assignment_can_only_be_used_in_a_module_1231\",message:\"An export assignment can only be used in a module.\"},An_import_declaration_can_only_be_used_in_a_namespace_or_module:{code:1232,category:e.DiagnosticCategory.Error,key:\"An_import_declaration_can_only_be_used_in_a_namespace_or_module_1232\",message:\"An import declaration can only be used in a namespace or module.\"},An_export_declaration_can_only_be_used_in_a_module:{code:1233,category:e.DiagnosticCategory.Error,key:\"An_export_declaration_can_only_be_used_in_a_module_1233\",message:\"An export declaration can only be used in a module.\"},An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file:{code:1234,category:e.DiagnosticCategory.Error,key:\"An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234\",message:\"An ambient module declaration is only allowed at the top level in a file.\"},A_namespace_declaration_is_only_allowed_in_a_namespace_or_module:{code:1235,category:e.DiagnosticCategory.Error,key:\"A_namespace_declaration_is_only_allowed_in_a_namespace_or_module_1235\",message:\"A namespace declaration is only allowed in a namespace or module.\"},The_return_type_of_a_property_decorator_function_must_be_either_void_or_any:{code:1236,category:e.DiagnosticCategory.Error,key:\"The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236\",message:\"The return type of a property decorator function must be either 'void' or 'any'.\"},The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any:{code:1237,category:e.DiagnosticCategory.Error,key:\"The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237\",message:\"The return type of a parameter decorator function must be either 'void' or 'any'.\"},Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression:{code:1238,category:e.DiagnosticCategory.Error,key:\"Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238\",message:\"Unable to resolve signature of class decorator when called as an expression.\"},Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression:{code:1239,category:e.DiagnosticCategory.Error,key:\"Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239\",message:\"Unable to resolve signature of parameter decorator when called as an expression.\"},Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression:{code:1240,category:e.DiagnosticCategory.Error,key:\"Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240\",message:\"Unable to resolve signature of property decorator when called as an expression.\"},Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression:{code:1241,category:e.DiagnosticCategory.Error,key:\"Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241\",message:\"Unable to resolve signature of method decorator when called as an expression.\"},abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration:{code:1242,category:e.DiagnosticCategory.Error,key:\"abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242\",message:\"'abstract' modifier can only appear on a class, method, or property declaration.\"},_0_modifier_cannot_be_used_with_1_modifier:{code:1243,category:e.DiagnosticCategory.Error,key:\"_0_modifier_cannot_be_used_with_1_modifier_1243\",message:\"'{0}' modifier cannot be used with '{1}' modifier.\"},Abstract_methods_can_only_appear_within_an_abstract_class:{code:1244,category:e.DiagnosticCategory.Error,key:\"Abstract_methods_can_only_appear_within_an_abstract_class_1244\",message:\"Abstract methods can only appear within an abstract class.\"},Method_0_cannot_have_an_implementation_because_it_is_marked_abstract:{code:1245,category:e.DiagnosticCategory.Error,key:\"Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245\",message:\"Method '{0}' cannot have an implementation because it is marked abstract.\"},An_interface_property_cannot_have_an_initializer:{code:1246,category:e.DiagnosticCategory.Error,key:\"An_interface_property_cannot_have_an_initializer_1246\",message:\"An interface property cannot have an initializer.\"},A_type_literal_property_cannot_have_an_initializer:{code:1247,category:e.DiagnosticCategory.Error,key:\"A_type_literal_property_cannot_have_an_initializer_1247\",message:\"A type literal property cannot have an initializer.\"},A_class_member_cannot_have_the_0_keyword:{code:1248,category:e.DiagnosticCategory.Error,key:\"A_class_member_cannot_have_the_0_keyword_1248\",message:\"A class member cannot have the '{0}' keyword.\"},A_decorator_can_only_decorate_a_method_implementation_not_an_overload:{code:1249,category:e.DiagnosticCategory.Error,key:\"A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249\",message:\"A decorator can only decorate a method implementation, not an overload.\"},Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5:{code:1250,category:e.DiagnosticCategory.Error,key:\"Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250\",message:\"Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'.\"},Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_definitions_are_automatically_in_strict_mode:{code:1251,category:e.DiagnosticCategory.Error,key:\"Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251\",message:\"Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Class definitions are automatically in strict mode.\"},Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_are_automatically_in_strict_mode:{code:1252,category:e.DiagnosticCategory.Error,key:\"Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252\",message:\"Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Modules are automatically in strict mode.\"},_0_tag_cannot_be_used_independently_as_a_top_level_JSDoc_tag:{code:1253,category:e.DiagnosticCategory.Error,key:\"_0_tag_cannot_be_used_independently_as_a_top_level_JSDoc_tag_1253\",message:\"'{0}' tag cannot be used independently as a top level JSDoc tag.\"},A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal:{code:1254,category:e.DiagnosticCategory.Error,key:\"A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_1254\",message:\"A 'const' initializer in an ambient context must be a string or numeric literal.\"},with_statements_are_not_allowed_in_an_async_function_block:{code:1300,category:e.DiagnosticCategory.Error,key:\"with_statements_are_not_allowed_in_an_async_function_block_1300\",message:\"'with' statements are not allowed in an async function block.\"},await_expression_is_only_allowed_within_an_async_function:{code:1308,category:e.DiagnosticCategory.Error,key:\"await_expression_is_only_allowed_within_an_async_function_1308\",message:\"'await' expression is only allowed within an async function.\"},can_only_be_used_in_an_object_literal_property_inside_a_destructuring_assignment:{code:1312,category:e.DiagnosticCategory.Error,key:\"can_only_be_used_in_an_object_literal_property_inside_a_destructuring_assignment_1312\",message:\"'=' can only be used in an object literal property inside a destructuring assignment.\"},The_body_of_an_if_statement_cannot_be_the_empty_statement:{code:1313,category:e.DiagnosticCategory.Error,key:\"The_body_of_an_if_statement_cannot_be_the_empty_statement_1313\",message:\"The body of an 'if' statement cannot be the empty statement.\"},Global_module_exports_may_only_appear_in_module_files:{code:1314,category:e.DiagnosticCategory.Error,key:\"Global_module_exports_may_only_appear_in_module_files_1314\",message:\"Global module exports may only appear in module files.\"},Global_module_exports_may_only_appear_in_declaration_files:{code:1315,category:e.DiagnosticCategory.Error,key:\"Global_module_exports_may_only_appear_in_declaration_files_1315\",message:\"Global module exports may only appear in declaration files.\"},Global_module_exports_may_only_appear_at_top_level:{code:1316,category:e.DiagnosticCategory.Error,key:\"Global_module_exports_may_only_appear_at_top_level_1316\",message:\"Global module exports may only appear at top level.\"},A_parameter_property_cannot_be_declared_using_a_rest_parameter:{code:1317,category:e.DiagnosticCategory.Error,key:\"A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317\",message:\"A parameter property cannot be declared using a rest parameter.\"},An_abstract_accessor_cannot_have_an_implementation:{code:1318,category:e.DiagnosticCategory.Error,key:\"An_abstract_accessor_cannot_have_an_implementation_1318\",message:\"An abstract accessor cannot have an implementation.\"},A_default_export_can_only_be_used_in_an_ECMAScript_style_module:{code:1319,category:e.DiagnosticCategory.Error,key:\"A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319\",message:\"A default export can only be used in an ECMAScript-style module.\"},Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member:{code:1320,category:e.DiagnosticCategory.Error,key:\"Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320\",message:\"Type of 'await' operand must either be a valid promise or must not contain a callable 'then' member.\"},Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member:{code:1321,category:e.DiagnosticCategory.Error,key:\"Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321\",message:\"Type of 'yield' operand in an async generator must either be a valid promise or must not contain a callable 'then' member.\"},Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member:{code:1322,category:e.DiagnosticCategory.Error,key:\"Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322\",message:\"Type of iterated elements of a 'yield*' operand must either be a valid promise or must not contain a callable 'then' member.\"},Dynamic_import_cannot_be_used_when_targeting_ECMAScript_2015_modules:{code:1323,category:e.DiagnosticCategory.Error,key:\"Dynamic_import_cannot_be_used_when_targeting_ECMAScript_2015_modules_1323\",message:\"Dynamic import cannot be used when targeting ECMAScript 2015 modules.\"},Dynamic_import_must_have_one_specifier_as_an_argument:{code:1324,category:e.DiagnosticCategory.Error,key:\"Dynamic_import_must_have_one_specifier_as_an_argument_1324\",message:\"Dynamic import must have one specifier as an argument.\"},Specifier_of_dynamic_import_cannot_be_spread_element:{code:1325,category:e.DiagnosticCategory.Error,key:\"Specifier_of_dynamic_import_cannot_be_spread_element_1325\",message:\"Specifier of dynamic import cannot be spread element.\"},Dynamic_import_cannot_have_type_arguments:{code:1326,category:e.DiagnosticCategory.Error,key:\"Dynamic_import_cannot_have_type_arguments_1326\",message:\"Dynamic import cannot have type arguments\"},String_literal_with_double_quotes_expected:{code:1327,category:e.DiagnosticCategory.Error,key:\"String_literal_with_double_quotes_expected_1327\",message:\"String literal with double quotes expected.\"},Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_literal:{code:1328,category:e.DiagnosticCategory.Error,key:\"Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328\",message:\"Property value can only be string literal, numeric literal, 'true', 'false', 'null', object literal or array literal.\"},Duplicate_identifier_0:{code:2300,category:e.DiagnosticCategory.Error,key:\"Duplicate_identifier_0_2300\",message:\"Duplicate identifier '{0}'.\"},Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor:{code:2301,category:e.DiagnosticCategory.Error,key:\"Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301\",message:\"Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor.\"},Static_members_cannot_reference_class_type_parameters:{code:2302,category:e.DiagnosticCategory.Error,key:\"Static_members_cannot_reference_class_type_parameters_2302\",message:\"Static members cannot reference class type parameters.\"},Circular_definition_of_import_alias_0:{code:2303,category:e.DiagnosticCategory.Error,key:\"Circular_definition_of_import_alias_0_2303\",message:\"Circular definition of import alias '{0}'.\"},Cannot_find_name_0:{code:2304,category:e.DiagnosticCategory.Error,key:\"Cannot_find_name_0_2304\",message:\"Cannot find name '{0}'.\"},Module_0_has_no_exported_member_1:{code:2305,category:e.DiagnosticCategory.Error,key:\"Module_0_has_no_exported_member_1_2305\",message:\"Module '{0}' has no exported member '{1}'.\"},File_0_is_not_a_module:{code:2306,category:e.DiagnosticCategory.Error,key:\"File_0_is_not_a_module_2306\",message:\"File '{0}' is not a module.\"},Cannot_find_module_0:{code:2307,category:e.DiagnosticCategory.Error,key:\"Cannot_find_module_0_2307\",message:\"Cannot find module '{0}'.\"},Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambiguity:{code:2308,category:e.DiagnosticCategory.Error,key:\"Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308\",message:\"Module {0} has already exported a member named '{1}'. Consider explicitly re-exporting to resolve the ambiguity.\"},An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements:{code:2309,category:e.DiagnosticCategory.Error,key:\"An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309\",message:\"An export assignment cannot be used in a module with other exported elements.\"},Type_0_recursively_references_itself_as_a_base_type:{code:2310,category:e.DiagnosticCategory.Error,key:\"Type_0_recursively_references_itself_as_a_base_type_2310\",message:\"Type '{0}' recursively references itself as a base type.\"},A_class_may_only_extend_another_class:{code:2311,category:e.DiagnosticCategory.Error,key:\"A_class_may_only_extend_another_class_2311\",message:\"A class may only extend another class.\"},An_interface_may_only_extend_a_class_or_another_interface:{code:2312,category:e.DiagnosticCategory.Error,key:\"An_interface_may_only_extend_a_class_or_another_interface_2312\",message:\"An interface may only extend a class or another interface.\"},Type_parameter_0_has_a_circular_constraint:{code:2313,category:e.DiagnosticCategory.Error,key:\"Type_parameter_0_has_a_circular_constraint_2313\",message:\"Type parameter '{0}' has a circular constraint.\"},Generic_type_0_requires_1_type_argument_s:{code:2314,category:e.DiagnosticCategory.Error,key:\"Generic_type_0_requires_1_type_argument_s_2314\",message:\"Generic type '{0}' requires {1} type argument(s).\"},Type_0_is_not_generic:{code:2315,category:e.DiagnosticCategory.Error,key:\"Type_0_is_not_generic_2315\",message:\"Type '{0}' is not generic.\"},Global_type_0_must_be_a_class_or_interface_type:{code:2316,category:e.DiagnosticCategory.Error,key:\"Global_type_0_must_be_a_class_or_interface_type_2316\",message:\"Global type '{0}' must be a class or interface type.\"},Global_type_0_must_have_1_type_parameter_s:{code:2317,category:e.DiagnosticCategory.Error,key:\"Global_type_0_must_have_1_type_parameter_s_2317\",message:\"Global type '{0}' must have {1} type parameter(s).\"},Cannot_find_global_type_0:{code:2318,category:e.DiagnosticCategory.Error,key:\"Cannot_find_global_type_0_2318\",message:\"Cannot find global type '{0}'.\"},Named_property_0_of_types_1_and_2_are_not_identical:{code:2319,category:e.DiagnosticCategory.Error,key:\"Named_property_0_of_types_1_and_2_are_not_identical_2319\",message:\"Named property '{0}' of types '{1}' and '{2}' are not identical.\"},Interface_0_cannot_simultaneously_extend_types_1_and_2:{code:2320,category:e.DiagnosticCategory.Error,key:\"Interface_0_cannot_simultaneously_extend_types_1_and_2_2320\",message:\"Interface '{0}' cannot simultaneously extend types '{1}' and '{2}'.\"},Excessive_stack_depth_comparing_types_0_and_1:{code:2321,category:e.DiagnosticCategory.Error,key:\"Excessive_stack_depth_comparing_types_0_and_1_2321\",message:\"Excessive stack depth comparing types '{0}' and '{1}'.\"},Type_0_is_not_assignable_to_type_1:{code:2322,category:e.DiagnosticCategory.Error,key:\"Type_0_is_not_assignable_to_type_1_2322\",message:\"Type '{0}' is not assignable to type '{1}'.\"},Cannot_redeclare_exported_variable_0:{code:2323,category:e.DiagnosticCategory.Error,key:\"Cannot_redeclare_exported_variable_0_2323\",message:\"Cannot redeclare exported variable '{0}'.\"},Property_0_is_missing_in_type_1:{code:2324,category:e.DiagnosticCategory.Error,key:\"Property_0_is_missing_in_type_1_2324\",message:\"Property '{0}' is missing in type '{1}'.\"},Property_0_is_private_in_type_1_but_not_in_type_2:{code:2325,category:e.DiagnosticCategory.Error,key:\"Property_0_is_private_in_type_1_but_not_in_type_2_2325\",message:\"Property '{0}' is private in type '{1}' but not in type '{2}'.\"},Types_of_property_0_are_incompatible:{code:2326,category:e.DiagnosticCategory.Error,key:\"Types_of_property_0_are_incompatible_2326\",message:\"Types of property '{0}' are incompatible.\"},Property_0_is_optional_in_type_1_but_required_in_type_2:{code:2327,category:e.DiagnosticCategory.Error,key:\"Property_0_is_optional_in_type_1_but_required_in_type_2_2327\",message:\"Property '{0}' is optional in type '{1}' but required in type '{2}'.\"},Types_of_parameters_0_and_1_are_incompatible:{code:2328,category:e.DiagnosticCategory.Error,key:\"Types_of_parameters_0_and_1_are_incompatible_2328\",message:\"Types of parameters '{0}' and '{1}' are incompatible.\"},Index_signature_is_missing_in_type_0:{code:2329,category:e.DiagnosticCategory.Error,key:\"Index_signature_is_missing_in_type_0_2329\",message:\"Index signature is missing in type '{0}'.\"},Index_signatures_are_incompatible:{code:2330,category:e.DiagnosticCategory.Error,key:\"Index_signatures_are_incompatible_2330\",message:\"Index signatures are incompatible.\"},this_cannot_be_referenced_in_a_module_or_namespace_body:{code:2331,category:e.DiagnosticCategory.Error,key:\"this_cannot_be_referenced_in_a_module_or_namespace_body_2331\",message:\"'this' cannot be referenced in a module or namespace body.\"},this_cannot_be_referenced_in_current_location:{code:2332,category:e.DiagnosticCategory.Error,key:\"this_cannot_be_referenced_in_current_location_2332\",message:\"'this' cannot be referenced in current location.\"},this_cannot_be_referenced_in_constructor_arguments:{code:2333,category:e.DiagnosticCategory.Error,key:\"this_cannot_be_referenced_in_constructor_arguments_2333\",message:\"'this' cannot be referenced in constructor arguments.\"},this_cannot_be_referenced_in_a_static_property_initializer:{code:2334,category:e.DiagnosticCategory.Error,key:\"this_cannot_be_referenced_in_a_static_property_initializer_2334\",message:\"'this' cannot be referenced in a static property initializer.\"},super_can_only_be_referenced_in_a_derived_class:{code:2335,category:e.DiagnosticCategory.Error,key:\"super_can_only_be_referenced_in_a_derived_class_2335\",message:\"'super' can only be referenced in a derived class.\"},super_cannot_be_referenced_in_constructor_arguments:{code:2336,category:e.DiagnosticCategory.Error,key:\"super_cannot_be_referenced_in_constructor_arguments_2336\",message:\"'super' cannot be referenced in constructor arguments.\"},Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors:{code:2337,category:e.DiagnosticCategory.Error,key:\"Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337\",message:\"Super calls are not permitted outside constructors or in nested functions inside constructors.\"},super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class:{code:2338,category:e.DiagnosticCategory.Error,key:\"super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338\",message:\"'super' property access is permitted only in a constructor, member function, or member accessor of a derived class.\"},Property_0_does_not_exist_on_type_1:{code:2339,category:e.DiagnosticCategory.Error,key:\"Property_0_does_not_exist_on_type_1_2339\",message:\"Property '{0}' does not exist on type '{1}'.\"},Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword:{code:2340,category:e.DiagnosticCategory.Error,key:\"Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340\",message:\"Only public and protected methods of the base class are accessible via the 'super' keyword.\"},Property_0_is_private_and_only_accessible_within_class_1:{code:2341,category:e.DiagnosticCategory.Error,key:\"Property_0_is_private_and_only_accessible_within_class_1_2341\",message:\"Property '{0}' is private and only accessible within class '{1}'.\"},An_index_expression_argument_must_be_of_type_string_number_symbol_or_any:{code:2342,category:e.DiagnosticCategory.Error,key:\"An_index_expression_argument_must_be_of_type_string_number_symbol_or_any_2342\",message:\"An index expression argument must be of type 'string', 'number', 'symbol', or 'any'.\"},This_syntax_requires_an_imported_helper_named_1_but_module_0_has_no_exported_member_1:{code:2343,category:e.DiagnosticCategory.Error,key:\"This_syntax_requires_an_imported_helper_named_1_but_module_0_has_no_exported_member_1_2343\",message:\"This syntax requires an imported helper named '{1}', but module '{0}' has no exported member '{1}'.\"},Type_0_does_not_satisfy_the_constraint_1:{code:2344,category:e.DiagnosticCategory.Error,key:\"Type_0_does_not_satisfy_the_constraint_1_2344\",message:\"Type '{0}' does not satisfy the constraint '{1}'.\"},Argument_of_type_0_is_not_assignable_to_parameter_of_type_1:{code:2345,category:e.DiagnosticCategory.Error,key:\"Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345\",message:\"Argument of type '{0}' is not assignable to parameter of type '{1}'.\"},Call_target_does_not_contain_any_signatures:{code:2346,category:e.DiagnosticCategory.Error,key:\"Call_target_does_not_contain_any_signatures_2346\",message:\"Call target does not contain any signatures.\"},Untyped_function_calls_may_not_accept_type_arguments:{code:2347,category:e.DiagnosticCategory.Error,key:\"Untyped_function_calls_may_not_accept_type_arguments_2347\",message:\"Untyped function calls may not accept type arguments.\"},Value_of_type_0_is_not_callable_Did_you_mean_to_include_new:{code:2348,category:e.DiagnosticCategory.Error,key:\"Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348\",message:\"Value of type '{0}' is not callable. Did you mean to include 'new'?\"},Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures:{code:2349,category:e.DiagnosticCategory.Error,key:\"Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatur_2349\",message:\"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.\"},Only_a_void_function_can_be_called_with_the_new_keyword:{code:2350,category:e.DiagnosticCategory.Error,key:\"Only_a_void_function_can_be_called_with_the_new_keyword_2350\",message:\"Only a void function can be called with the 'new' keyword.\"},Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature:{code:2351,category:e.DiagnosticCategory.Error,key:\"Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature_2351\",message:\"Cannot use 'new' with an expression whose type lacks a call or construct signature.\"},Type_0_cannot_be_converted_to_type_1:{code:2352,category:e.DiagnosticCategory.Error,key:\"Type_0_cannot_be_converted_to_type_1_2352\",message:\"Type '{0}' cannot be converted to type '{1}'.\"},Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1:{code:2353,category:e.DiagnosticCategory.Error,key:\"Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353\",message:\"Object literal may only specify known properties, and '{0}' does not exist in type '{1}'.\"},This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found:{code:2354,category:e.DiagnosticCategory.Error,key:\"This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354\",message:\"This syntax requires an imported helper but module '{0}' cannot be found.\"},A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value:{code:2355,category:e.DiagnosticCategory.Error,key:\"A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355\",message:\"A function whose declared type is neither 'void' nor 'any' must return a value.\"},An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type:{code:2356,category:e.DiagnosticCategory.Error,key:\"An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type_2356\",message:\"An arithmetic operand must be of type 'any', 'number' or an enum type.\"},The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access:{code:2357,category:e.DiagnosticCategory.Error,key:\"The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357\",message:\"The operand of an increment or decrement operator must be a variable or a property access.\"},The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter:{code:2358,category:e.DiagnosticCategory.Error,key:\"The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358\",message:\"The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter.\"},The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type:{code:2359,category:e.DiagnosticCategory.Error,key:\"The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359\",message:\"The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type.\"},The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol:{code:2360,category:e.DiagnosticCategory.Error,key:\"The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol_2360\",message:\"The left-hand side of an 'in' expression must be of type 'any', 'string', 'number', or 'symbol'.\"},The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter:{code:2361,category:e.DiagnosticCategory.Error,key:\"The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter_2361\",message:\"The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter.\"},The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type:{code:2362,category:e.DiagnosticCategory.Error,key:\"The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type_2362\",message:\"The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.\"},The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type:{code:2363,category:e.DiagnosticCategory.Error,key:\"The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type_2363\",message:\"The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.\"},The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access:{code:2364,category:e.DiagnosticCategory.Error,key:\"The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364\",message:\"The left-hand side of an assignment expression must be a variable or a property access.\"},Operator_0_cannot_be_applied_to_types_1_and_2:{code:2365,category:e.DiagnosticCategory.Error,key:\"Operator_0_cannot_be_applied_to_types_1_and_2_2365\",message:\"Operator '{0}' cannot be applied to types '{1}' and '{2}'.\"},Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined:{code:2366,category:e.DiagnosticCategory.Error,key:\"Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366\",message:\"Function lacks ending return statement and return type does not include 'undefined'.\"},Type_parameter_name_cannot_be_0:{code:2368,category:e.DiagnosticCategory.Error,key:\"Type_parameter_name_cannot_be_0_2368\",message:\"Type parameter name cannot be '{0}'.\"},A_parameter_property_is_only_allowed_in_a_constructor_implementation:{code:2369,category:e.DiagnosticCategory.Error,key:\"A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369\",message:\"A parameter property is only allowed in a constructor implementation.\"},A_rest_parameter_must_be_of_an_array_type:{code:2370,category:e.DiagnosticCategory.Error,key:\"A_rest_parameter_must_be_of_an_array_type_2370\",message:\"A rest parameter must be of an array type.\"},A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation:{code:2371,category:e.DiagnosticCategory.Error,key:\"A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371\",message:\"A parameter initializer is only allowed in a function or constructor implementation.\"},Parameter_0_cannot_be_referenced_in_its_initializer:{code:2372,category:e.DiagnosticCategory.Error,key:\"Parameter_0_cannot_be_referenced_in_its_initializer_2372\",message:\"Parameter '{0}' cannot be referenced in its initializer.\"},Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it:{code:2373,category:e.DiagnosticCategory.Error,key:\"Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it_2373\",message:\"Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it.\"},Duplicate_string_index_signature:{code:2374,category:e.DiagnosticCategory.Error,key:\"Duplicate_string_index_signature_2374\",message:\"Duplicate string index signature.\"},Duplicate_number_index_signature:{code:2375,category:e.DiagnosticCategory.Error,key:\"Duplicate_number_index_signature_2375\",message:\"Duplicate number index signature.\"},A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties:{code:2376,category:e.DiagnosticCategory.Error,key:\"A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376\",message:\"A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties.\"},Constructors_for_derived_classes_must_contain_a_super_call:{code:2377,category:e.DiagnosticCategory.Error,key:\"Constructors_for_derived_classes_must_contain_a_super_call_2377\",message:\"Constructors for derived classes must contain a 'super' call.\"},A_get_accessor_must_return_a_value:{code:2378,category:e.DiagnosticCategory.Error,key:\"A_get_accessor_must_return_a_value_2378\",message:\"A 'get' accessor must return a value.\"},Getter_and_setter_accessors_do_not_agree_in_visibility:{code:2379,category:e.DiagnosticCategory.Error,key:\"Getter_and_setter_accessors_do_not_agree_in_visibility_2379\",message:\"Getter and setter accessors do not agree in visibility.\"},get_and_set_accessor_must_have_the_same_type:{code:2380,category:e.DiagnosticCategory.Error,key:\"get_and_set_accessor_must_have_the_same_type_2380\",message:\"'get' and 'set' accessor must have the same type.\"},A_signature_with_an_implementation_cannot_use_a_string_literal_type:{code:2381,category:e.DiagnosticCategory.Error,key:\"A_signature_with_an_implementation_cannot_use_a_string_literal_type_2381\",message:\"A signature with an implementation cannot use a string literal type.\"},Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature:{code:2382,category:e.DiagnosticCategory.Error,key:\"Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature_2382\",message:\"Specialized overload signature is not assignable to any non-specialized signature.\"},Overload_signatures_must_all_be_exported_or_non_exported:{code:2383,category:e.DiagnosticCategory.Error,key:\"Overload_signatures_must_all_be_exported_or_non_exported_2383\",message:\"Overload signatures must all be exported or non-exported.\"},Overload_signatures_must_all_be_ambient_or_non_ambient:{code:2384,category:e.DiagnosticCategory.Error,key:\"Overload_signatures_must_all_be_ambient_or_non_ambient_2384\",message:\"Overload signatures must all be ambient or non-ambient.\"},Overload_signatures_must_all_be_public_private_or_protected:{code:2385,category:e.DiagnosticCategory.Error,key:\"Overload_signatures_must_all_be_public_private_or_protected_2385\",message:\"Overload signatures must all be public, private or protected.\"},Overload_signatures_must_all_be_optional_or_required:{code:2386,category:e.DiagnosticCategory.Error,key:\"Overload_signatures_must_all_be_optional_or_required_2386\",message:\"Overload signatures must all be optional or required.\"},Function_overload_must_be_static:{code:2387,category:e.DiagnosticCategory.Error,key:\"Function_overload_must_be_static_2387\",message:\"Function overload must be static.\"},Function_overload_must_not_be_static:{code:2388,category:e.DiagnosticCategory.Error,key:\"Function_overload_must_not_be_static_2388\",message:\"Function overload must not be static.\"},Function_implementation_name_must_be_0:{code:2389,category:e.DiagnosticCategory.Error,key:\"Function_implementation_name_must_be_0_2389\",message:\"Function implementation name must be '{0}'.\"},Constructor_implementation_is_missing:{code:2390,category:e.DiagnosticCategory.Error,key:\"Constructor_implementation_is_missing_2390\",message:\"Constructor implementation is missing.\"},Function_implementation_is_missing_or_not_immediately_following_the_declaration:{code:2391,category:e.DiagnosticCategory.Error,key:\"Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391\",message:\"Function implementation is missing or not immediately following the declaration.\"},Multiple_constructor_implementations_are_not_allowed:{code:2392,category:e.DiagnosticCategory.Error,key:\"Multiple_constructor_implementations_are_not_allowed_2392\",message:\"Multiple constructor implementations are not allowed.\"},Duplicate_function_implementation:{code:2393,category:e.DiagnosticCategory.Error,key:\"Duplicate_function_implementation_2393\",message:\"Duplicate function implementation.\"},Overload_signature_is_not_compatible_with_function_implementation:{code:2394,category:e.DiagnosticCategory.Error,key:\"Overload_signature_is_not_compatible_with_function_implementation_2394\",message:\"Overload signature is not compatible with function implementation.\"},Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local:{code:2395,category:e.DiagnosticCategory.Error,key:\"Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395\",message:\"Individual declarations in merged declaration '{0}' must be all exported or all local.\"},Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters:{code:2396,category:e.DiagnosticCategory.Error,key:\"Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396\",message:\"Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters.\"},Declaration_name_conflicts_with_built_in_global_identifier_0:{code:2397,category:e.DiagnosticCategory.Error,key:\"Declaration_name_conflicts_with_built_in_global_identifier_0_2397\",message:\"Declaration name conflicts with built-in global identifier '{0}'.\"},Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference:{code:2399,category:e.DiagnosticCategory.Error,key:\"Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399\",message:\"Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference.\"},Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference:{code:2400,category:e.DiagnosticCategory.Error,key:\"Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400\",message:\"Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference.\"},Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference:{code:2401,category:e.DiagnosticCategory.Error,key:\"Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference_2401\",message:\"Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference.\"},Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference:{code:2402,category:e.DiagnosticCategory.Error,key:\"Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402\",message:\"Expression resolves to '_super' that compiler uses to capture base class reference.\"},Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2:{code:2403,category:e.DiagnosticCategory.Error,key:\"Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403\",message:\"Subsequent variable declarations must have the same type.  Variable '{0}' must be of type '{1}', but here has type '{2}'.\"},The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation:{code:2404,category:e.DiagnosticCategory.Error,key:\"The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404\",message:\"The left-hand side of a 'for...in' statement cannot use a type annotation.\"},The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any:{code:2405,category:e.DiagnosticCategory.Error,key:\"The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405\",message:\"The left-hand side of a 'for...in' statement must be of type 'string' or 'any'.\"},The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access:{code:2406,category:e.DiagnosticCategory.Error,key:\"The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406\",message:\"The left-hand side of a 'for...in' statement must be a variable or a property access.\"},The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter:{code:2407,category:e.DiagnosticCategory.Error,key:\"The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_2407\",message:\"The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter.\"},Setters_cannot_return_a_value:{code:2408,category:e.DiagnosticCategory.Error,key:\"Setters_cannot_return_a_value_2408\",message:\"Setters cannot return a value.\"},Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class:{code:2409,category:e.DiagnosticCategory.Error,key:\"Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409\",message:\"Return type of constructor signature must be assignable to the instance type of the class.\"},The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any:{code:2410,category:e.DiagnosticCategory.Error,key:\"The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410\",message:\"The 'with' statement is not supported. All symbols in a 'with' block will have type 'any'.\"},Property_0_of_type_1_is_not_assignable_to_string_index_type_2:{code:2411,category:e.DiagnosticCategory.Error,key:\"Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411\",message:\"Property '{0}' of type '{1}' is not assignable to string index type '{2}'.\"},Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2:{code:2412,category:e.DiagnosticCategory.Error,key:\"Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412\",message:\"Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'.\"},Numeric_index_type_0_is_not_assignable_to_string_index_type_1:{code:2413,category:e.DiagnosticCategory.Error,key:\"Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413\",message:\"Numeric index type '{0}' is not assignable to string index type '{1}'.\"},Class_name_cannot_be_0:{code:2414,category:e.DiagnosticCategory.Error,key:\"Class_name_cannot_be_0_2414\",message:\"Class name cannot be '{0}'.\"},Class_0_incorrectly_extends_base_class_1:{code:2415,category:e.DiagnosticCategory.Error,key:\"Class_0_incorrectly_extends_base_class_1_2415\",message:\"Class '{0}' incorrectly extends base class '{1}'.\"},Class_static_side_0_incorrectly_extends_base_class_static_side_1:{code:2417,category:e.DiagnosticCategory.Error,key:\"Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417\",message:\"Class static side '{0}' incorrectly extends base class static side '{1}'.\"},Class_0_incorrectly_implements_interface_1:{code:2420,category:e.DiagnosticCategory.Error,key:\"Class_0_incorrectly_implements_interface_1_2420\",message:\"Class '{0}' incorrectly implements interface '{1}'.\"},A_class_may_only_implement_another_class_or_interface:{code:2422,category:e.DiagnosticCategory.Error,key:\"A_class_may_only_implement_another_class_or_interface_2422\",message:\"A class may only implement another class or interface.\"},Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor:{code:2423,category:e.DiagnosticCategory.Error,key:\"Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423\",message:\"Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor.\"},Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property:{code:2424,category:e.DiagnosticCategory.Error,key:\"Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_proper_2424\",message:\"Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property.\"},Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function:{code:2425,category:e.DiagnosticCategory.Error,key:\"Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425\",message:\"Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function.\"},Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function:{code:2426,category:e.DiagnosticCategory.Error,key:\"Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426\",message:\"Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function.\"},Interface_name_cannot_be_0:{code:2427,category:e.DiagnosticCategory.Error,key:\"Interface_name_cannot_be_0_2427\",message:\"Interface name cannot be '{0}'.\"},All_declarations_of_0_must_have_identical_type_parameters:{code:2428,category:e.DiagnosticCategory.Error,key:\"All_declarations_of_0_must_have_identical_type_parameters_2428\",message:\"All declarations of '{0}' must have identical type parameters.\"},Interface_0_incorrectly_extends_interface_1:{code:2430,category:e.DiagnosticCategory.Error,key:\"Interface_0_incorrectly_extends_interface_1_2430\",message:\"Interface '{0}' incorrectly extends interface '{1}'.\"},Enum_name_cannot_be_0:{code:2431,category:e.DiagnosticCategory.Error,key:\"Enum_name_cannot_be_0_2431\",message:\"Enum name cannot be '{0}'.\"},In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element:{code:2432,category:e.DiagnosticCategory.Error,key:\"In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432\",message:\"In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element.\"},A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged:{code:2433,category:e.DiagnosticCategory.Error,key:\"A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433\",message:\"A namespace declaration cannot be in a different file from a class or function with which it is merged.\"},A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged:{code:2434,category:e.DiagnosticCategory.Error,key:\"A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434\",message:\"A namespace declaration cannot be located prior to a class or function with which it is merged.\"},Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces:{code:2435,category:e.DiagnosticCategory.Error,key:\"Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435\",message:\"Ambient modules cannot be nested in other modules or namespaces.\"},Ambient_module_declaration_cannot_specify_relative_module_name:{code:2436,category:e.DiagnosticCategory.Error,key:\"Ambient_module_declaration_cannot_specify_relative_module_name_2436\",message:\"Ambient module declaration cannot specify relative module name.\"},Module_0_is_hidden_by_a_local_declaration_with_the_same_name:{code:2437,category:e.DiagnosticCategory.Error,key:\"Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437\",message:\"Module '{0}' is hidden by a local declaration with the same name.\"},Import_name_cannot_be_0:{code:2438,category:e.DiagnosticCategory.Error,key:\"Import_name_cannot_be_0_2438\",message:\"Import name cannot be '{0}'.\"},Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relative_module_name:{code:2439,category:e.DiagnosticCategory.Error,key:\"Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439\",message:\"Import or export declaration in an ambient module declaration cannot reference module through relative module name.\"},Import_declaration_conflicts_with_local_declaration_of_0:{code:2440,category:e.DiagnosticCategory.Error,key:\"Import_declaration_conflicts_with_local_declaration_of_0_2440\",message:\"Import declaration conflicts with local declaration of '{0}'.\"},Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module:{code:2441,category:e.DiagnosticCategory.Error,key:\"Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441\",message:\"Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module.\"},Types_have_separate_declarations_of_a_private_property_0:{code:2442,category:e.DiagnosticCategory.Error,key:\"Types_have_separate_declarations_of_a_private_property_0_2442\",message:\"Types have separate declarations of a private property '{0}'.\"},Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2:{code:2443,category:e.DiagnosticCategory.Error,key:\"Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443\",message:\"Property '{0}' is protected but type '{1}' is not a class derived from '{2}'.\"},Property_0_is_protected_in_type_1_but_public_in_type_2:{code:2444,category:e.DiagnosticCategory.Error,key:\"Property_0_is_protected_in_type_1_but_public_in_type_2_2444\",message:\"Property '{0}' is protected in type '{1}' but public in type '{2}'.\"},Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses:{code:2445,category:e.DiagnosticCategory.Error,key:\"Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445\",message:\"Property '{0}' is protected and only accessible within class '{1}' and its subclasses.\"},Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1:{code:2446,category:e.DiagnosticCategory.Error,key:\"Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_2446\",message:\"Property '{0}' is protected and only accessible through an instance of class '{1}'.\"},The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead:{code:2447,category:e.DiagnosticCategory.Error,key:\"The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447\",message:\"The '{0}' operator is not allowed for boolean types. Consider using '{1}' instead.\"},Block_scoped_variable_0_used_before_its_declaration:{code:2448,category:e.DiagnosticCategory.Error,key:\"Block_scoped_variable_0_used_before_its_declaration_2448\",message:\"Block-scoped variable '{0}' used before its declaration.\"},Class_0_used_before_its_declaration:{code:2449,category:e.DiagnosticCategory.Error,key:\"Class_0_used_before_its_declaration_2449\",message:\"Class '{0}' used before its declaration.\"},Enum_0_used_before_its_declaration:{code:2450,category:e.DiagnosticCategory.Error,key:\"Enum_0_used_before_its_declaration_2450\",message:\"Enum '{0}' used before its declaration.\"},Cannot_redeclare_block_scoped_variable_0:{code:2451,category:e.DiagnosticCategory.Error,key:\"Cannot_redeclare_block_scoped_variable_0_2451\",message:\"Cannot redeclare block-scoped variable '{0}'.\"},An_enum_member_cannot_have_a_numeric_name:{code:2452,category:e.DiagnosticCategory.Error,key:\"An_enum_member_cannot_have_a_numeric_name_2452\",message:\"An enum member cannot have a numeric name.\"},The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_type_arguments_explicitly:{code:2453,category:e.DiagnosticCategory.Error,key:\"The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_typ_2453\",message:\"The type argument for type parameter '{0}' cannot be inferred from the usage. Consider specifying the type arguments explicitly.\"},Variable_0_is_used_before_being_assigned:{code:2454,category:e.DiagnosticCategory.Error,key:\"Variable_0_is_used_before_being_assigned_2454\",message:\"Variable '{0}' is used before being assigned.\"},Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0:{code:2455,category:e.DiagnosticCategory.Error,key:\"Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0_2455\",message:\"Type argument candidate '{1}' is not a valid type argument because it is not a supertype of candidate '{0}'.\"},Type_alias_0_circularly_references_itself:{code:2456,category:e.DiagnosticCategory.Error,key:\"Type_alias_0_circularly_references_itself_2456\",message:\"Type alias '{0}' circularly references itself.\"},Type_alias_name_cannot_be_0:{code:2457,category:e.DiagnosticCategory.Error,key:\"Type_alias_name_cannot_be_0_2457\",message:\"Type alias name cannot be '{0}'.\"},An_AMD_module_cannot_have_multiple_name_assignments:{code:2458,category:e.DiagnosticCategory.Error,key:\"An_AMD_module_cannot_have_multiple_name_assignments_2458\",message:\"An AMD module cannot have multiple name assignments.\"},Type_0_has_no_property_1_and_no_string_index_signature:{code:2459,category:e.DiagnosticCategory.Error,key:\"Type_0_has_no_property_1_and_no_string_index_signature_2459\",message:\"Type '{0}' has no property '{1}' and no string index signature.\"},Type_0_has_no_property_1:{code:2460,category:e.DiagnosticCategory.Error,key:\"Type_0_has_no_property_1_2460\",message:\"Type '{0}' has no property '{1}'.\"},Type_0_is_not_an_array_type:{code:2461,category:e.DiagnosticCategory.Error,key:\"Type_0_is_not_an_array_type_2461\",message:\"Type '{0}' is not an array type.\"},A_rest_element_must_be_last_in_a_destructuring_pattern:{code:2462,category:e.DiagnosticCategory.Error,key:\"A_rest_element_must_be_last_in_a_destructuring_pattern_2462\",message:\"A rest element must be last in a destructuring pattern.\"},A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature:{code:2463,category:e.DiagnosticCategory.Error,key:\"A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463\",message:\"A binding pattern parameter cannot be optional in an implementation signature.\"},A_computed_property_name_must_be_of_type_string_number_symbol_or_any:{code:2464,category:e.DiagnosticCategory.Error,key:\"A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464\",message:\"A computed property name must be of type 'string', 'number', 'symbol', or 'any'.\"},this_cannot_be_referenced_in_a_computed_property_name:{code:2465,category:e.DiagnosticCategory.Error,key:\"this_cannot_be_referenced_in_a_computed_property_name_2465\",message:\"'this' cannot be referenced in a computed property name.\"},super_cannot_be_referenced_in_a_computed_property_name:{code:2466,category:e.DiagnosticCategory.Error,key:\"super_cannot_be_referenced_in_a_computed_property_name_2466\",message:\"'super' cannot be referenced in a computed property name.\"},A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type:{code:2467,category:e.DiagnosticCategory.Error,key:\"A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467\",message:\"A computed property name cannot reference a type parameter from its containing type.\"},Cannot_find_global_value_0:{code:2468,category:e.DiagnosticCategory.Error,key:\"Cannot_find_global_value_0_2468\",message:\"Cannot find global value '{0}'.\"},The_0_operator_cannot_be_applied_to_type_symbol:{code:2469,category:e.DiagnosticCategory.Error,key:\"The_0_operator_cannot_be_applied_to_type_symbol_2469\",message:\"The '{0}' operator cannot be applied to type 'symbol'.\"},Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object:{code:2470,category:e.DiagnosticCategory.Error,key:\"Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object_2470\",message:\"'Symbol' reference does not refer to the global Symbol constructor object.\"},A_computed_property_name_of_the_form_0_must_be_of_type_symbol:{code:2471,category:e.DiagnosticCategory.Error,key:\"A_computed_property_name_of_the_form_0_must_be_of_type_symbol_2471\",message:\"A computed property name of the form '{0}' must be of type 'symbol'.\"},Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher:{code:2472,category:e.DiagnosticCategory.Error,key:\"Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472\",message:\"Spread operator in 'new' expressions is only available when targeting ECMAScript 5 and higher.\"},Enum_declarations_must_all_be_const_or_non_const:{code:2473,category:e.DiagnosticCategory.Error,key:\"Enum_declarations_must_all_be_const_or_non_const_2473\",message:\"Enum declarations must all be const or non-const.\"},In_const_enum_declarations_member_initializer_must_be_constant_expression:{code:2474,category:e.DiagnosticCategory.Error,key:\"In_const_enum_declarations_member_initializer_must_be_constant_expression_2474\",message:\"In 'const' enum declarations member initializer must be constant expression.\"},const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment:{code:2475,category:e.DiagnosticCategory.Error,key:\"const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475\",message:\"'const' enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment.\"},A_const_enum_member_can_only_be_accessed_using_a_string_literal:{code:2476,category:e.DiagnosticCategory.Error,key:\"A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476\",message:\"A const enum member can only be accessed using a string literal.\"},const_enum_member_initializer_was_evaluated_to_a_non_finite_value:{code:2477,category:e.DiagnosticCategory.Error,key:\"const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477\",message:\"'const' enum member initializer was evaluated to a non-finite value.\"},const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN:{code:2478,category:e.DiagnosticCategory.Error,key:\"const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478\",message:\"'const' enum member initializer was evaluated to disallowed value 'NaN'.\"},Property_0_does_not_exist_on_const_enum_1:{code:2479,category:e.DiagnosticCategory.Error,key:\"Property_0_does_not_exist_on_const_enum_1_2479\",message:\"Property '{0}' does not exist on 'const' enum '{1}'.\"},let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations:{code:2480,category:e.DiagnosticCategory.Error,key:\"let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480\",message:\"'let' is not allowed to be used as a name in 'let' or 'const' declarations.\"},Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1:{code:2481,category:e.DiagnosticCategory.Error,key:\"Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481\",message:\"Cannot initialize outer scoped variable '{0}' in the same scope as block scoped declaration '{1}'.\"},The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation:{code:2483,category:e.DiagnosticCategory.Error,key:\"The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483\",message:\"The left-hand side of a 'for...of' statement cannot use a type annotation.\"},Export_declaration_conflicts_with_exported_declaration_of_0:{code:2484,category:e.DiagnosticCategory.Error,key:\"Export_declaration_conflicts_with_exported_declaration_of_0_2484\",message:\"Export declaration conflicts with exported declaration of '{0}'.\"},The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access:{code:2487,category:e.DiagnosticCategory.Error,key:\"The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487\",message:\"The left-hand side of a 'for...of' statement must be a variable or a property access.\"},Type_must_have_a_Symbol_iterator_method_that_returns_an_iterator:{code:2488,category:e.DiagnosticCategory.Error,key:\"Type_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488\",message:\"Type must have a '[Symbol.iterator]()' method that returns an iterator.\"},An_iterator_must_have_a_next_method:{code:2489,category:e.DiagnosticCategory.Error,key:\"An_iterator_must_have_a_next_method_2489\",message:\"An iterator must have a 'next()' method.\"},The_type_returned_by_the_next_method_of_an_iterator_must_have_a_value_property:{code:2490,category:e.DiagnosticCategory.Error,key:\"The_type_returned_by_the_next_method_of_an_iterator_must_have_a_value_property_2490\",message:\"The type returned by the 'next()' method of an iterator must have a 'value' property.\"},The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern:{code:2491,category:e.DiagnosticCategory.Error,key:\"The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491\",message:\"The left-hand side of a 'for...in' statement cannot be a destructuring pattern.\"},Cannot_redeclare_identifier_0_in_catch_clause:{code:2492,category:e.DiagnosticCategory.Error,key:\"Cannot_redeclare_identifier_0_in_catch_clause_2492\",message:\"Cannot redeclare identifier '{0}' in catch clause.\"},Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2:{code:2493,category:e.DiagnosticCategory.Error,key:\"Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2_2493\",message:\"Tuple type '{0}' with length '{1}' cannot be assigned to tuple with length '{2}'.\"},Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher:{code:2494,category:e.DiagnosticCategory.Error,key:\"Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494\",message:\"Using a string in a 'for...of' statement is only supported in ECMAScript 5 and higher.\"},Type_0_is_not_an_array_type_or_a_string_type:{code:2495,category:e.DiagnosticCategory.Error,key:\"Type_0_is_not_an_array_type_or_a_string_type_2495\",message:\"Type '{0}' is not an array type or a string type.\"},The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression:{code:2496,category:e.DiagnosticCategory.Error,key:\"The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496\",message:\"The 'arguments' object cannot be referenced in an arrow function in ES3 and ES5. Consider using a standard function expression.\"},Module_0_resolves_to_a_non_module_entity_and_cannot_be_imported_using_this_construct:{code:2497,category:e.DiagnosticCategory.Error,key:\"Module_0_resolves_to_a_non_module_entity_and_cannot_be_imported_using_this_construct_2497\",message:\"Module '{0}' resolves to a non-module entity and cannot be imported using this construct.\"},Module_0_uses_export_and_cannot_be_used_with_export_Asterisk:{code:2498,category:e.DiagnosticCategory.Error,key:\"Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498\",message:\"Module '{0}' uses 'export =' and cannot be used with 'export *'.\"},An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments:{code:2499,category:e.DiagnosticCategory.Error,key:\"An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499\",message:\"An interface can only extend an identifier/qualified-name with optional type arguments.\"},A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments:{code:2500,category:e.DiagnosticCategory.Error,key:\"A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500\",message:\"A class can only implement an identifier/qualified-name with optional type arguments.\"},A_rest_element_cannot_contain_a_binding_pattern:{code:2501,category:e.DiagnosticCategory.Error,key:\"A_rest_element_cannot_contain_a_binding_pattern_2501\",message:\"A rest element cannot contain a binding pattern.\"},_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation:{code:2502,category:e.DiagnosticCategory.Error,key:\"_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502\",message:\"'{0}' is referenced directly or indirectly in its own type annotation.\"},Cannot_find_namespace_0:{code:2503,category:e.DiagnosticCategory.Error,key:\"Cannot_find_namespace_0_2503\",message:\"Cannot find namespace '{0}'.\"},Type_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator:{code:2504,category:e.DiagnosticCategory.Error,key:\"Type_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504\",message:\"Type must have a '[Symbol.asyncIterator]()' method that returns an async iterator.\"},A_generator_cannot_have_a_void_type_annotation:{code:2505,category:e.DiagnosticCategory.Error,key:\"A_generator_cannot_have_a_void_type_annotation_2505\",message:\"A generator cannot have a 'void' type annotation.\"},_0_is_referenced_directly_or_indirectly_in_its_own_base_expression:{code:2506,category:e.DiagnosticCategory.Error,key:\"_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506\",message:\"'{0}' is referenced directly or indirectly in its own base expression.\"},Type_0_is_not_a_constructor_function_type:{code:2507,category:e.DiagnosticCategory.Error,key:\"Type_0_is_not_a_constructor_function_type_2507\",message:\"Type '{0}' is not a constructor function type.\"},No_base_constructor_has_the_specified_number_of_type_arguments:{code:2508,category:e.DiagnosticCategory.Error,key:\"No_base_constructor_has_the_specified_number_of_type_arguments_2508\",message:\"No base constructor has the specified number of type arguments.\"},Base_constructor_return_type_0_is_not_a_class_or_interface_type:{code:2509,category:e.DiagnosticCategory.Error,key:\"Base_constructor_return_type_0_is_not_a_class_or_interface_type_2509\",message:\"Base constructor return type '{0}' is not a class or interface type.\"},Base_constructors_must_all_have_the_same_return_type:{code:2510,category:e.DiagnosticCategory.Error,key:\"Base_constructors_must_all_have_the_same_return_type_2510\",message:\"Base constructors must all have the same return type.\"},Cannot_create_an_instance_of_the_abstract_class_0:{code:2511,category:e.DiagnosticCategory.Error,key:\"Cannot_create_an_instance_of_the_abstract_class_0_2511\",message:\"Cannot create an instance of the abstract class '{0}'.\"},Overload_signatures_must_all_be_abstract_or_non_abstract:{code:2512,category:e.DiagnosticCategory.Error,key:\"Overload_signatures_must_all_be_abstract_or_non_abstract_2512\",message:\"Overload signatures must all be abstract or non-abstract.\"},Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression:{code:2513,category:e.DiagnosticCategory.Error,key:\"Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513\",message:\"Abstract method '{0}' in class '{1}' cannot be accessed via super expression.\"},Classes_containing_abstract_methods_must_be_marked_abstract:{code:2514,category:e.DiagnosticCategory.Error,key:\"Classes_containing_abstract_methods_must_be_marked_abstract_2514\",message:\"Classes containing abstract methods must be marked abstract.\"},Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2:{code:2515,category:e.DiagnosticCategory.Error,key:\"Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515\",message:\"Non-abstract class '{0}' does not implement inherited abstract member '{1}' from class '{2}'.\"},All_declarations_of_an_abstract_method_must_be_consecutive:{code:2516,category:e.DiagnosticCategory.Error,key:\"All_declarations_of_an_abstract_method_must_be_consecutive_2516\",message:\"All declarations of an abstract method must be consecutive.\"},Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type:{code:2517,category:e.DiagnosticCategory.Error,key:\"Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517\",message:\"Cannot assign an abstract constructor type to a non-abstract constructor type.\"},A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard:{code:2518,category:e.DiagnosticCategory.Error,key:\"A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518\",message:\"A 'this'-based type guard is not compatible with a parameter-based type guard.\"},An_async_iterator_must_have_a_next_method:{code:2519,category:e.DiagnosticCategory.Error,key:\"An_async_iterator_must_have_a_next_method_2519\",message:\"An async iterator must have a 'next()' method.\"},Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions:{code:2520,category:e.DiagnosticCategory.Error,key:\"Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520\",message:\"Duplicate identifier '{0}'. Compiler uses declaration '{1}' to support async functions.\"},Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions:{code:2521,category:e.DiagnosticCategory.Error,key:\"Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions_2521\",message:\"Expression resolves to variable declaration '{0}' that compiler uses to support async functions.\"},The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_using_a_standard_function_or_method:{code:2522,category:e.DiagnosticCategory.Error,key:\"The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522\",message:\"The 'arguments' object cannot be referenced in an async function or method in ES3 and ES5. Consider using a standard function or method.\"},yield_expressions_cannot_be_used_in_a_parameter_initializer:{code:2523,category:e.DiagnosticCategory.Error,key:\"yield_expressions_cannot_be_used_in_a_parameter_initializer_2523\",message:\"'yield' expressions cannot be used in a parameter initializer.\"},await_expressions_cannot_be_used_in_a_parameter_initializer:{code:2524,category:e.DiagnosticCategory.Error,key:\"await_expressions_cannot_be_used_in_a_parameter_initializer_2524\",message:\"'await' expressions cannot be used in a parameter initializer.\"},Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value:{code:2525,category:e.DiagnosticCategory.Error,key:\"Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525\",message:\"Initializer provides no value for this binding element and the binding element has no default value.\"},A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface:{code:2526,category:e.DiagnosticCategory.Error,key:\"A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526\",message:\"A 'this' type is available only in a non-static member of a class or interface.\"},The_inferred_type_of_0_references_an_inaccessible_this_type_A_type_annotation_is_necessary:{code:2527,category:e.DiagnosticCategory.Error,key:\"The_inferred_type_of_0_references_an_inaccessible_this_type_A_type_annotation_is_necessary_2527\",message:\"The inferred type of '{0}' references an inaccessible 'this' type. A type annotation is necessary.\"},A_module_cannot_have_multiple_default_exports:{code:2528,category:e.DiagnosticCategory.Error,key:\"A_module_cannot_have_multiple_default_exports_2528\",message:\"A module cannot have multiple default exports.\"},Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions:{code:2529,category:e.DiagnosticCategory.Error,key:\"Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529\",message:\"Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module containing async functions.\"},Property_0_is_incompatible_with_index_signature:{code:2530,category:e.DiagnosticCategory.Error,key:\"Property_0_is_incompatible_with_index_signature_2530\",message:\"Property '{0}' is incompatible with index signature.\"},Object_is_possibly_null:{code:2531,category:e.DiagnosticCategory.Error,key:\"Object_is_possibly_null_2531\",message:\"Object is possibly 'null'.\"},Object_is_possibly_undefined:{code:2532,category:e.DiagnosticCategory.Error,key:\"Object_is_possibly_undefined_2532\",message:\"Object is possibly 'undefined'.\"},Object_is_possibly_null_or_undefined:{code:2533,category:e.DiagnosticCategory.Error,key:\"Object_is_possibly_null_or_undefined_2533\",message:\"Object is possibly 'null' or 'undefined'.\"},A_function_returning_never_cannot_have_a_reachable_end_point:{code:2534,category:e.DiagnosticCategory.Error,key:\"A_function_returning_never_cannot_have_a_reachable_end_point_2534\",message:\"A function returning 'never' cannot have a reachable end point.\"},Enum_type_0_has_members_with_initializers_that_are_not_literals:{code:2535,category:e.DiagnosticCategory.Error,key:\"Enum_type_0_has_members_with_initializers_that_are_not_literals_2535\",message:\"Enum type '{0}' has members with initializers that are not literals.\"},Type_0_cannot_be_used_to_index_type_1:{code:2536,category:e.DiagnosticCategory.Error,key:\"Type_0_cannot_be_used_to_index_type_1_2536\",message:\"Type '{0}' cannot be used to index type '{1}'.\"},Type_0_has_no_matching_index_signature_for_type_1:{code:2537,category:e.DiagnosticCategory.Error,key:\"Type_0_has_no_matching_index_signature_for_type_1_2537\",message:\"Type '{0}' has no matching index signature for type '{1}'.\"},Type_0_cannot_be_used_as_an_index_type:{code:2538,category:e.DiagnosticCategory.Error,key:\"Type_0_cannot_be_used_as_an_index_type_2538\",message:\"Type '{0}' cannot be used as an index type.\"},Cannot_assign_to_0_because_it_is_not_a_variable:{code:2539,category:e.DiagnosticCategory.Error,key:\"Cannot_assign_to_0_because_it_is_not_a_variable_2539\",message:\"Cannot assign to '{0}' because it is not a variable.\"},Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property:{code:2540,category:e.DiagnosticCategory.Error,key:\"Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property_2540\",message:\"Cannot assign to '{0}' because it is a constant or a read-only property.\"},The_target_of_an_assignment_must_be_a_variable_or_a_property_access:{code:2541,category:e.DiagnosticCategory.Error,key:\"The_target_of_an_assignment_must_be_a_variable_or_a_property_access_2541\",message:\"The target of an assignment must be a variable or a property access.\"},Index_signature_in_type_0_only_permits_reading:{code:2542,category:e.DiagnosticCategory.Error,key:\"Index_signature_in_type_0_only_permits_reading_2542\",message:\"Index signature in type '{0}' only permits reading.\"},Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_meta_property_reference:{code:2543,category:e.DiagnosticCategory.Error,key:\"Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543\",message:\"Duplicate identifier '_newTarget'. Compiler uses variable declaration '_newTarget' to capture 'new.target' meta-property reference.\"},Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta_property_reference:{code:2544,category:e.DiagnosticCategory.Error,key:\"Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544\",message:\"Expression resolves to variable declaration '_newTarget' that compiler uses to capture 'new.target' meta-property reference.\"},A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any:{code:2545,category:e.DiagnosticCategory.Error,key:\"A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545\",message:\"A mixin class must have a constructor with a single rest parameter of type 'any[]'.\"},Property_0_has_conflicting_declarations_and_is_inaccessible_in_type_1:{code:2546,category:e.DiagnosticCategory.Error,key:\"Property_0_has_conflicting_declarations_and_is_inaccessible_in_type_1_2546\",message:\"Property '{0}' has conflicting declarations and is inaccessible in type '{1}'.\"},The_type_returned_by_the_next_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_property:{code:2547,category:e.DiagnosticCategory.Error,key:\"The_type_returned_by_the_next_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value__2547\",message:\"The type returned by the 'next()' method of an async iterator must be a promise for a type with a 'value' property.\"},Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator:{code:2548,category:e.DiagnosticCategory.Error,key:\"Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548\",message:\"Type '{0}' is not an array type or does not have a '[Symbol.iterator]()' method that returns an iterator.\"},Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator:{code:2549,category:e.DiagnosticCategory.Error,key:\"Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549\",message:\"Type '{0}' is not an array type or a string type or does not have a '[Symbol.iterator]()' method that returns an iterator.\"},Generic_type_instantiation_is_excessively_deep_and_possibly_infinite:{code:2550,category:e.DiagnosticCategory.Error,key:\"Generic_type_instantiation_is_excessively_deep_and_possibly_infinite_2550\",message:\"Generic type instantiation is excessively deep and possibly infinite.\"},Property_0_does_not_exist_on_type_1_Did_you_mean_2:{code:2551,category:e.DiagnosticCategory.Error,key:\"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551\",message:\"Property '{0}' does not exist on type '{1}'. Did you mean '{2}'?\"},Cannot_find_name_0_Did_you_mean_1:{code:2552,category:e.DiagnosticCategory.Error,key:\"Cannot_find_name_0_Did_you_mean_1_2552\",message:\"Cannot find name '{0}'. Did you mean '{1}'?\"},Computed_values_are_not_permitted_in_an_enum_with_string_valued_members:{code:2553,category:e.DiagnosticCategory.Error,key:\"Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553\",message:\"Computed values are not permitted in an enum with string valued members.\"},Expected_0_arguments_but_got_1:{code:2554,category:e.DiagnosticCategory.Error,key:\"Expected_0_arguments_but_got_1_2554\",message:\"Expected {0} arguments, but got {1}.\"},Expected_at_least_0_arguments_but_got_1:{code:2555,category:e.DiagnosticCategory.Error,key:\"Expected_at_least_0_arguments_but_got_1_2555\",message:\"Expected at least {0} arguments, but got {1}.\"},Expected_0_arguments_but_got_a_minimum_of_1:{code:2556,category:e.DiagnosticCategory.Error,key:\"Expected_0_arguments_but_got_a_minimum_of_1_2556\",message:\"Expected {0} arguments, but got a minimum of {1}.\"},Expected_at_least_0_arguments_but_got_a_minimum_of_1:{code:2557,category:e.DiagnosticCategory.Error,key:\"Expected_at_least_0_arguments_but_got_a_minimum_of_1_2557\",message:\"Expected at least {0} arguments, but got a minimum of {1}.\"},Expected_0_type_arguments_but_got_1:{code:2558,category:e.DiagnosticCategory.Error,key:\"Expected_0_type_arguments_but_got_1_2558\",message:\"Expected {0} type arguments, but got {1}.\"},Type_0_has_no_properties_in_common_with_type_1:{code:2559,category:e.DiagnosticCategory.Error,key:\"Type_0_has_no_properties_in_common_with_type_1_2559\",message:\"Type '{0}' has no properties in common with type '{1}'.\"},JSX_element_attributes_type_0_may_not_be_a_union_type:{code:2600,category:e.DiagnosticCategory.Error,key:\"JSX_element_attributes_type_0_may_not_be_a_union_type_2600\",message:\"JSX element attributes type '{0}' may not be a union type.\"},The_return_type_of_a_JSX_element_constructor_must_return_an_object_type:{code:2601,category:e.DiagnosticCategory.Error,key:\"The_return_type_of_a_JSX_element_constructor_must_return_an_object_type_2601\",message:\"The return type of a JSX element constructor must return an object type.\"},JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist:{code:2602,category:e.DiagnosticCategory.Error,key:\"JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602\",message:\"JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist.\"},Property_0_in_type_1_is_not_assignable_to_type_2:{code:2603,category:e.DiagnosticCategory.Error,key:\"Property_0_in_type_1_is_not_assignable_to_type_2_2603\",message:\"Property '{0}' in type '{1}' is not assignable to type '{2}'.\"},JSX_element_type_0_does_not_have_any_construct_or_call_signatures:{code:2604,category:e.DiagnosticCategory.Error,key:\"JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604\",message:\"JSX element type '{0}' does not have any construct or call signatures.\"},JSX_element_type_0_is_not_a_constructor_function_for_JSX_elements:{code:2605,category:e.DiagnosticCategory.Error,key:\"JSX_element_type_0_is_not_a_constructor_function_for_JSX_elements_2605\",message:\"JSX element type '{0}' is not a constructor function for JSX elements.\"},Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property:{code:2606,category:e.DiagnosticCategory.Error,key:\"Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606\",message:\"Property '{0}' of JSX spread attribute is not assignable to target property.\"},JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property:{code:2607,category:e.DiagnosticCategory.Error,key:\"JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607\",message:\"JSX element class does not support attributes because it does not have a '{0}' property.\"},The_global_type_JSX_0_may_not_have_more_than_one_property:{code:2608,category:e.DiagnosticCategory.Error,key:\"The_global_type_JSX_0_may_not_have_more_than_one_property_2608\",message:\"The global type 'JSX.{0}' may not have more than one property.\"},JSX_spread_child_must_be_an_array_type:{code:2609,category:e.DiagnosticCategory.Error,key:\"JSX_spread_child_must_be_an_array_type_2609\",message:\"JSX spread child must be an array type.\"},Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity:{code:2649,category:e.DiagnosticCategory.Error,key:\"Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649\",message:\"Cannot augment module '{0}' with value exports because it resolves to a non-module entity.\"},A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums:{code:2651,category:e.DiagnosticCategory.Error,key:\"A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651\",message:\"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.\"},Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead:{code:2652,category:e.DiagnosticCategory.Error,key:\"Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652\",message:\"Merged declaration '{0}' cannot include a default export declaration. Consider adding a separate 'export default {0}' declaration instead.\"},Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1:{code:2653,category:e.DiagnosticCategory.Error,key:\"Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653\",message:\"Non-abstract class expression does not implement inherited abstract member '{0}' from class '{1}'.\"},Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_package_author_to_update_the_package_definition:{code:2654,category:e.DiagnosticCategory.Error,key:\"Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_pack_2654\",message:\"Exported external package typings file cannot contain tripleslash references. Please contact the package author to update the package definition.\"},Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_the_package_definition:{code:2656,category:e.DiagnosticCategory.Error,key:\"Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_2656\",message:\"Exported external package typings file '{0}' is not a module. Please contact the package author to update the package definition.\"},JSX_expressions_must_have_one_parent_element:{code:2657,category:e.DiagnosticCategory.Error,key:\"JSX_expressions_must_have_one_parent_element_2657\",message:\"JSX expressions must have one parent element.\"},Type_0_provides_no_match_for_the_signature_1:{code:2658,category:e.DiagnosticCategory.Error,key:\"Type_0_provides_no_match_for_the_signature_1_2658\",message:\"Type '{0}' provides no match for the signature '{1}'.\"},super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher:{code:2659,category:e.DiagnosticCategory.Error,key:\"super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659\",message:\"'super' is only allowed in members of object literal expressions when option 'target' is 'ES2015' or higher.\"},super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions:{code:2660,category:e.DiagnosticCategory.Error,key:\"super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660\",message:\"'super' can only be referenced in members of derived classes or object literal expressions.\"},Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module:{code:2661,category:e.DiagnosticCategory.Error,key:\"Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661\",message:\"Cannot export '{0}'. Only local declarations can be exported from a module.\"},Cannot_find_name_0_Did_you_mean_the_static_member_1_0:{code:2662,category:e.DiagnosticCategory.Error,key:\"Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662\",message:\"Cannot find name '{0}'. Did you mean the static member '{1}.{0}'?\"},Cannot_find_name_0_Did_you_mean_the_instance_member_this_0:{code:2663,category:e.DiagnosticCategory.Error,key:\"Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663\",message:\"Cannot find name '{0}'. Did you mean the instance member 'this.{0}'?\"},Invalid_module_name_in_augmentation_module_0_cannot_be_found:{code:2664,category:e.DiagnosticCategory.Error,key:\"Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664\",message:\"Invalid module name in augmentation, module '{0}' cannot be found.\"},Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augmented:{code:2665,category:e.DiagnosticCategory.Error,key:\"Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665\",message:\"Invalid module name in augmentation. Module '{0}' resolves to an untyped module at '{1}', which cannot be augmented.\"},Exports_and_export_assignments_are_not_permitted_in_module_augmentations:{code:2666,category:e.DiagnosticCategory.Error,key:\"Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666\",message:\"Exports and export assignments are not permitted in module augmentations.\"},Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module:{code:2667,category:e.DiagnosticCategory.Error,key:\"Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667\",message:\"Imports are not permitted in module augmentations. Consider moving them to the enclosing external module.\"},export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible:{code:2668,category:e.DiagnosticCategory.Error,key:\"export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668\",message:\"'export' modifier cannot be applied to ambient modules and module augmentations since they are always visible.\"},Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_declarations:{code:2669,category:e.DiagnosticCategory.Error,key:\"Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669\",message:\"Augmentations for the global scope can only be directly nested in external modules or ambient module declarations.\"},Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambient_context:{code:2670,category:e.DiagnosticCategory.Error,key:\"Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670\",message:\"Augmentations for the global scope should have 'declare' modifier unless they appear in already ambient context.\"},Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity:{code:2671,category:e.DiagnosticCategory.Error,key:\"Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671\",message:\"Cannot augment module '{0}' because it resolves to a non-module entity.\"},Cannot_assign_a_0_constructor_type_to_a_1_constructor_type:{code:2672,category:e.DiagnosticCategory.Error,key:\"Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672\",message:\"Cannot assign a '{0}' constructor type to a '{1}' constructor type.\"},Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration:{code:2673,category:e.DiagnosticCategory.Error,key:\"Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673\",message:\"Constructor of class '{0}' is private and only accessible within the class declaration.\"},Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration:{code:2674,category:e.DiagnosticCategory.Error,key:\"Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674\",message:\"Constructor of class '{0}' is protected and only accessible within the class declaration.\"},Cannot_extend_a_class_0_Class_constructor_is_marked_as_private:{code:2675,category:e.DiagnosticCategory.Error,key:\"Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675\",message:\"Cannot extend a class '{0}'. Class constructor is marked as private.\"},Accessors_must_both_be_abstract_or_non_abstract:{code:2676,category:e.DiagnosticCategory.Error,key:\"Accessors_must_both_be_abstract_or_non_abstract_2676\",message:\"Accessors must both be abstract or non-abstract.\"},A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type:{code:2677,category:e.DiagnosticCategory.Error,key:\"A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677\",message:\"A type predicate's type must be assignable to its parameter's type.\"},Type_0_is_not_comparable_to_type_1:{code:2678,category:e.DiagnosticCategory.Error,key:\"Type_0_is_not_comparable_to_type_1_2678\",message:\"Type '{0}' is not comparable to type '{1}'.\"},A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void:{code:2679,category:e.DiagnosticCategory.Error,key:\"A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679\",message:\"A function that is called with the 'new' keyword cannot have a 'this' type that is 'void'.\"},A_this_parameter_must_be_the_first_parameter:{code:2680,category:e.DiagnosticCategory.Error,key:\"A_this_parameter_must_be_the_first_parameter_2680\",message:\"A 'this' parameter must be the first parameter.\"},A_constructor_cannot_have_a_this_parameter:{code:2681,category:e.DiagnosticCategory.Error,key:\"A_constructor_cannot_have_a_this_parameter_2681\",message:\"A constructor cannot have a 'this' parameter.\"},get_and_set_accessor_must_have_the_same_this_type:{code:2682,category:e.DiagnosticCategory.Error,key:\"get_and_set_accessor_must_have_the_same_this_type_2682\",message:\"'get' and 'set' accessor must have the same 'this' type.\"},this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation:{code:2683,category:e.DiagnosticCategory.Error,key:\"this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683\",message:\"'this' implicitly has type 'any' because it does not have a type annotation.\"},The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1:{code:2684,category:e.DiagnosticCategory.Error,key:\"The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684\",message:\"The 'this' context of type '{0}' is not assignable to method's 'this' of type '{1}'.\"},The_this_types_of_each_signature_are_incompatible:{code:2685,category:e.DiagnosticCategory.Error,key:\"The_this_types_of_each_signature_are_incompatible_2685\",message:\"The 'this' types of each signature are incompatible.\"},_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead:{code:2686,category:e.DiagnosticCategory.Error,key:\"_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686\",message:\"'{0}' refers to a UMD global, but the current file is a module. Consider adding an import instead.\"},All_declarations_of_0_must_have_identical_modifiers:{code:2687,category:e.DiagnosticCategory.Error,key:\"All_declarations_of_0_must_have_identical_modifiers_2687\",message:\"All declarations of '{0}' must have identical modifiers.\"},Cannot_find_type_definition_file_for_0:{code:2688,category:e.DiagnosticCategory.Error,key:\"Cannot_find_type_definition_file_for_0_2688\",message:\"Cannot find type definition file for '{0}'.\"},Cannot_extend_an_interface_0_Did_you_mean_implements:{code:2689,category:e.DiagnosticCategory.Error,key:\"Cannot_extend_an_interface_0_Did_you_mean_implements_2689\",message:\"Cannot extend an interface '{0}'. Did you mean 'implements'?\"},An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead:{code:2691,category:e.DiagnosticCategory.Error,key:\"An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead_2691\",message:\"An import path cannot end with a '{0}' extension. Consider importing '{1}' instead.\"},_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible:{code:2692,category:e.DiagnosticCategory.Error,key:\"_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692\",message:\"'{0}' is a primitive, but '{1}' is a wrapper object. Prefer using '{0}' when possible.\"},_0_only_refers_to_a_type_but_is_being_used_as_a_value_here:{code:2693,category:e.DiagnosticCategory.Error,key:\"_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693\",message:\"'{0}' only refers to a type, but is being used as a value here.\"},Namespace_0_has_no_exported_member_1:{code:2694,category:e.DiagnosticCategory.Error,key:\"Namespace_0_has_no_exported_member_1_2694\",message:\"Namespace '{0}' has no exported member '{1}'.\"},Left_side_of_comma_operator_is_unused_and_has_no_side_effects:{code:2695,category:e.DiagnosticCategory.Error,key:\"Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695\",message:\"Left side of comma operator is unused and has no side effects.\"},The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead:{code:2696,category:e.DiagnosticCategory.Error,key:\"The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696\",message:\"The 'Object' type is assignable to very few other types. Did you mean to use the 'any' type instead?\"},An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option:{code:2697,category:e.DiagnosticCategory.Error,key:\"An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697\",message:\"An async function or method must return a 'Promise'. Make sure you have a declaration for 'Promise' or include 'ES2015' in your `--lib` option.\"},Spread_types_may_only_be_created_from_object_types:{code:2698,category:e.DiagnosticCategory.Error,key:\"Spread_types_may_only_be_created_from_object_types_2698\",message:\"Spread types may only be created from object types.\"},Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1:{code:2699,category:e.DiagnosticCategory.Error,key:\"Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699\",message:\"Static property '{0}' conflicts with built-in property 'Function.{0}' of constructor function '{1}'.\"},Rest_types_may_only_be_created_from_object_types:{code:2700,category:e.DiagnosticCategory.Error,key:\"Rest_types_may_only_be_created_from_object_types_2700\",message:\"Rest types may only be created from object types.\"},The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access:{code:2701,category:e.DiagnosticCategory.Error,key:\"The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701\",message:\"The target of an object rest assignment must be a variable or a property access.\"},_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here:{code:2702,category:e.DiagnosticCategory.Error,key:\"_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702\",message:\"'{0}' only refers to a type, but is being used as a namespace here.\"},The_operand_of_a_delete_operator_must_be_a_property_reference:{code:2703,category:e.DiagnosticCategory.Error,key:\"The_operand_of_a_delete_operator_must_be_a_property_reference_2703\",message:\"The operand of a delete operator must be a property reference.\"},The_operand_of_a_delete_operator_cannot_be_a_read_only_property:{code:2704,category:e.DiagnosticCategory.Error,key:\"The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704\",message:\"The operand of a delete operator cannot be a read-only property.\"},An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option:{code:2705,category:e.DiagnosticCategory.Error,key:\"An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705\",message:\"An async function or method in ES5/ES3 requires the 'Promise' constructor.  Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your `--lib` option.\"},Required_type_parameters_may_not_follow_optional_type_parameters:{code:2706,category:e.DiagnosticCategory.Error,key:\"Required_type_parameters_may_not_follow_optional_type_parameters_2706\",message:\"Required type parameters may not follow optional type parameters.\"},Generic_type_0_requires_between_1_and_2_type_arguments:{code:2707,category:e.DiagnosticCategory.Error,key:\"Generic_type_0_requires_between_1_and_2_type_arguments_2707\",message:\"Generic type '{0}' requires between {1} and {2} type arguments.\"},Cannot_use_namespace_0_as_a_value:{code:2708,category:e.DiagnosticCategory.Error,key:\"Cannot_use_namespace_0_as_a_value_2708\",message:\"Cannot use namespace '{0}' as a value.\"},Cannot_use_namespace_0_as_a_type:{code:2709,category:e.DiagnosticCategory.Error,key:\"Cannot_use_namespace_0_as_a_type_2709\",message:\"Cannot use namespace '{0}' as a type.\"},_0_are_specified_twice_The_attribute_named_0_will_be_overwritten:{code:2710,category:e.DiagnosticCategory.Error,key:\"_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710\",message:\"'{0}' are specified twice. The attribute named '{0}' will be overwritten.\"},A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option:{code:2711,category:e.DiagnosticCategory.Error,key:\"A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711\",message:\"A dynamic import call returns a 'Promise'. Make sure you have a declaration for 'Promise' or include 'ES2015' in your `--lib` option.\"},A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option:{code:2712,category:e.DiagnosticCategory.Error,key:\"A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712\",message:\"A dynamic import call in ES5/ES3 requires the 'Promise' constructor.  Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your `--lib` option.\"},Import_declaration_0_is_using_private_name_1:{code:4e3,category:e.DiagnosticCategory.Error,key:\"Import_declaration_0_is_using_private_name_1_4000\",message:\"Import declaration '{0}' is using private name '{1}'.\"},Type_parameter_0_of_exported_class_has_or_is_using_private_name_1:{code:4002,category:e.DiagnosticCategory.Error,key:\"Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002\",message:\"Type parameter '{0}' of exported class has or is using private name '{1}'.\"},Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1:{code:4004,category:e.DiagnosticCategory.Error,key:\"Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004\",message:\"Type parameter '{0}' of exported interface has or is using private name '{1}'.\"},Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1:{code:4006,category:e.DiagnosticCategory.Error,key:\"Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006\",message:\"Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'.\"},Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1:{code:4008,category:e.DiagnosticCategory.Error,key:\"Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008\",message:\"Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'.\"},Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1:{code:4010,category:e.DiagnosticCategory.Error,key:\"Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010\",message:\"Type parameter '{0}' of public static method from exported class has or is using private name '{1}'.\"},Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1:{code:4012,category:e.DiagnosticCategory.Error,key:\"Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012\",message:\"Type parameter '{0}' of public method from exported class has or is using private name '{1}'.\"},Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1:{code:4014,category:e.DiagnosticCategory.Error,key:\"Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014\",message:\"Type parameter '{0}' of method from exported interface has or is using private name '{1}'.\"},Type_parameter_0_of_exported_function_has_or_is_using_private_name_1:{code:4016,category:e.DiagnosticCategory.Error,key:\"Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016\",message:\"Type parameter '{0}' of exported function has or is using private name '{1}'.\"},Implements_clause_of_exported_class_0_has_or_is_using_private_name_1:{code:4019,category:e.DiagnosticCategory.Error,key:\"Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019\",message:\"Implements clause of exported class '{0}' has or is using private name '{1}'.\"},extends_clause_of_exported_class_0_has_or_is_using_private_name_1:{code:4020,category:e.DiagnosticCategory.Error,key:\"extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020\",message:\"'extends' clause of exported class '{0}' has or is using private name '{1}'.\"},extends_clause_of_exported_interface_0_has_or_is_using_private_name_1:{code:4022,category:e.DiagnosticCategory.Error,key:\"extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022\",message:\"'extends' clause of exported interface '{0}' has or is using private name '{1}'.\"},Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:{code:4023,category:e.DiagnosticCategory.Error,key:\"Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023\",message:\"Exported variable '{0}' has or is using name '{1}' from external module {2} but cannot be named.\"},Exported_variable_0_has_or_is_using_name_1_from_private_module_2:{code:4024,category:e.DiagnosticCategory.Error,key:\"Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024\",message:\"Exported variable '{0}' has or is using name '{1}' from private module '{2}'.\"},Exported_variable_0_has_or_is_using_private_name_1:{code:4025,category:e.DiagnosticCategory.Error,key:\"Exported_variable_0_has_or_is_using_private_name_1_4025\",message:\"Exported variable '{0}' has or is using private name '{1}'.\"},Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:{code:4026,category:e.DiagnosticCategory.Error,key:\"Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026\",message:\"Public static property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named.\"},Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:{code:4027,category:e.DiagnosticCategory.Error,key:\"Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027\",message:\"Public static property '{0}' of exported class has or is using name '{1}' from private module '{2}'.\"},Public_static_property_0_of_exported_class_has_or_is_using_private_name_1:{code:4028,category:e.DiagnosticCategory.Error,key:\"Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028\",message:\"Public static property '{0}' of exported class has or is using private name '{1}'.\"},Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:{code:4029,category:e.DiagnosticCategory.Error,key:\"Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029\",message:\"Public property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named.\"},Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:{code:4030,category:e.DiagnosticCategory.Error,key:\"Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030\",message:\"Public property '{0}' of exported class has or is using name '{1}' from private module '{2}'.\"},Public_property_0_of_exported_class_has_or_is_using_private_name_1:{code:4031,category:e.DiagnosticCategory.Error,key:\"Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031\",message:\"Public property '{0}' of exported class has or is using private name '{1}'.\"},Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2:{code:4032,category:e.DiagnosticCategory.Error,key:\"Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032\",message:\"Property '{0}' of exported interface has or is using name '{1}' from private module '{2}'.\"},Property_0_of_exported_interface_has_or_is_using_private_name_1:{code:4033,category:e.DiagnosticCategory.Error,key:\"Property_0_of_exported_interface_has_or_is_using_private_name_1_4033\",message:\"Property '{0}' of exported interface has or is using private name '{1}'.\"},Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2:{code:4034,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_4034\",message:\"Parameter '{0}' of public static property setter from exported class has or is using name '{1}' from private module '{2}'.\"},Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1:{code:4035,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1_4035\",message:\"Parameter '{0}' of public static property setter from exported class has or is using private name '{1}'.\"},Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2:{code:4036,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_4036\",message:\"Parameter '{0}' of public property setter from exported class has or is using name '{1}' from private module '{2}'.\"},Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1:{code:4037,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1_4037\",message:\"Parameter '{0}' of public property setter from exported class has or is using private name '{1}'.\"},Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named:{code:4038,category:e.DiagnosticCategory.Error,key:\"Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_externa_4038\",message:\"Return type of public static property getter from exported class has or is using name '{0}' from external module {1} but cannot be named.\"},Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1:{code:4039,category:e.DiagnosticCategory.Error,key:\"Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_4039\",message:\"Return type of public static property getter from exported class has or is using name '{0}' from private module '{1}'.\"},Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0:{code:4040,category:e.DiagnosticCategory.Error,key:\"Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0_4040\",message:\"Return type of public static property getter from exported class has or is using private name '{0}'.\"},Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named:{code:4041,category:e.DiagnosticCategory.Error,key:\"Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_modul_4041\",message:\"Return type of public property getter from exported class has or is using name '{0}' from external module {1} but cannot be named.\"},Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1:{code:4042,category:e.DiagnosticCategory.Error,key:\"Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_4042\",message:\"Return type of public property getter from exported class has or is using name '{0}' from private module '{1}'.\"},Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0:{code:4043,category:e.DiagnosticCategory.Error,key:\"Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0_4043\",message:\"Return type of public property getter from exported class has or is using private name '{0}'.\"},Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1:{code:4044,category:e.DiagnosticCategory.Error,key:\"Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044\",message:\"Return type of constructor signature from exported interface has or is using name '{0}' from private module '{1}'.\"},Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0:{code:4045,category:e.DiagnosticCategory.Error,key:\"Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045\",message:\"Return type of constructor signature from exported interface has or is using private name '{0}'.\"},Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1:{code:4046,category:e.DiagnosticCategory.Error,key:\"Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046\",message:\"Return type of call signature from exported interface has or is using name '{0}' from private module '{1}'.\"},Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0:{code:4047,category:e.DiagnosticCategory.Error,key:\"Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047\",message:\"Return type of call signature from exported interface has or is using private name '{0}'.\"},Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1:{code:4048,category:e.DiagnosticCategory.Error,key:\"Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048\",message:\"Return type of index signature from exported interface has or is using name '{0}' from private module '{1}'.\"},Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0:{code:4049,category:e.DiagnosticCategory.Error,key:\"Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049\",message:\"Return type of index signature from exported interface has or is using private name '{0}'.\"},Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named:{code:4050,category:e.DiagnosticCategory.Error,key:\"Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050\",message:\"Return type of public static method from exported class has or is using name '{0}' from external module {1} but cannot be named.\"},Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1:{code:4051,category:e.DiagnosticCategory.Error,key:\"Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051\",message:\"Return type of public static method from exported class has or is using name '{0}' from private module '{1}'.\"},Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0:{code:4052,category:e.DiagnosticCategory.Error,key:\"Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052\",message:\"Return type of public static method from exported class has or is using private name '{0}'.\"},Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named:{code:4053,category:e.DiagnosticCategory.Error,key:\"Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053\",message:\"Return type of public method from exported class has or is using name '{0}' from external module {1} but cannot be named.\"},Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1:{code:4054,category:e.DiagnosticCategory.Error,key:\"Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054\",message:\"Return type of public method from exported class has or is using name '{0}' from private module '{1}'.\"},Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0:{code:4055,category:e.DiagnosticCategory.Error,key:\"Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055\",message:\"Return type of public method from exported class has or is using private name '{0}'.\"},Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1:{code:4056,category:e.DiagnosticCategory.Error,key:\"Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056\",message:\"Return type of method from exported interface has or is using name '{0}' from private module '{1}'.\"},Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0:{code:4057,category:e.DiagnosticCategory.Error,key:\"Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057\",message:\"Return type of method from exported interface has or is using private name '{0}'.\"},Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named:{code:4058,category:e.DiagnosticCategory.Error,key:\"Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058\",message:\"Return type of exported function has or is using name '{0}' from external module {1} but cannot be named.\"},Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1:{code:4059,category:e.DiagnosticCategory.Error,key:\"Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059\",message:\"Return type of exported function has or is using name '{0}' from private module '{1}'.\"},Return_type_of_exported_function_has_or_is_using_private_name_0:{code:4060,category:e.DiagnosticCategory.Error,key:\"Return_type_of_exported_function_has_or_is_using_private_name_0_4060\",message:\"Return type of exported function has or is using private name '{0}'.\"},Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:{code:4061,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061\",message:\"Parameter '{0}' of constructor from exported class has or is using name '{1}' from external module {2} but cannot be named.\"},Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2:{code:4062,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062\",message:\"Parameter '{0}' of constructor from exported class has or is using name '{1}' from private module '{2}'.\"},Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1:{code:4063,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063\",message:\"Parameter '{0}' of constructor from exported class has or is using private name '{1}'.\"},Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2:{code:4064,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064\",message:\"Parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'.\"},Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1:{code:4065,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065\",message:\"Parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'.\"},Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2:{code:4066,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066\",message:\"Parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'.\"},Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1:{code:4067,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067\",message:\"Parameter '{0}' of call signature from exported interface has or is using private name '{1}'.\"},Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:{code:4068,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068\",message:\"Parameter '{0}' of public static method from exported class has or is using name '{1}' from external module {2} but cannot be named.\"},Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2:{code:4069,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069\",message:\"Parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'.\"},Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1:{code:4070,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070\",message:\"Parameter '{0}' of public static method from exported class has or is using private name '{1}'.\"},Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:{code:4071,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071\",message:\"Parameter '{0}' of public method from exported class has or is using name '{1}' from external module {2} but cannot be named.\"},Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2:{code:4072,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072\",message:\"Parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'.\"},Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1:{code:4073,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073\",message:\"Parameter '{0}' of public method from exported class has or is using private name '{1}'.\"},Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2:{code:4074,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074\",message:\"Parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'.\"},Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1:{code:4075,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075\",message:\"Parameter '{0}' of method from exported interface has or is using private name '{1}'.\"},Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:{code:4076,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076\",message:\"Parameter '{0}' of exported function has or is using name '{1}' from external module {2} but cannot be named.\"},Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2:{code:4077,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077\",message:\"Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'.\"},Parameter_0_of_exported_function_has_or_is_using_private_name_1:{code:4078,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078\",message:\"Parameter '{0}' of exported function has or is using private name '{1}'.\"},Exported_type_alias_0_has_or_is_using_private_name_1:{code:4081,category:e.DiagnosticCategory.Error,key:\"Exported_type_alias_0_has_or_is_using_private_name_1_4081\",message:\"Exported type alias '{0}' has or is using private name '{1}'.\"},Default_export_of_the_module_has_or_is_using_private_name_0:{code:4082,category:e.DiagnosticCategory.Error,key:\"Default_export_of_the_module_has_or_is_using_private_name_0_4082\",message:\"Default export of the module has or is using private name '{0}'.\"},Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1:{code:4083,category:e.DiagnosticCategory.Error,key:\"Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083\",message:\"Type parameter '{0}' of exported type alias has or is using private name '{1}'.\"},Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_library_to_resolve_the_conflict:{code:4090,category:e.DiagnosticCategory.Message,key:\"Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090\",message:\"Conflicting definitions for '{0}' found at '{1}' and '{2}'. Consider installing a specific version of this library to resolve the conflict.\"},Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2:{code:4091,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091\",message:\"Parameter '{0}' of index signature from exported interface has or is using name '{1}' from private module '{2}'.\"},Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1:{code:4092,category:e.DiagnosticCategory.Error,key:\"Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092\",message:\"Parameter '{0}' of index signature from exported interface has or is using private name '{1}'.\"},Property_0_of_exported_class_expression_may_not_be_private_or_protected:{code:4094,category:e.DiagnosticCategory.Error,key:\"Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094\",message:\"Property '{0}' of exported class expression may not be private or protected.\"},The_current_host_does_not_support_the_0_option:{code:5001,category:e.DiagnosticCategory.Error,key:\"The_current_host_does_not_support_the_0_option_5001\",message:\"The current host does not support the '{0}' option.\"},Cannot_find_the_common_subdirectory_path_for_the_input_files:{code:5009,category:e.DiagnosticCategory.Error,key:\"Cannot_find_the_common_subdirectory_path_for_the_input_files_5009\",message:\"Cannot find the common subdirectory path for the input files.\"},File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0:{code:5010,category:e.DiagnosticCategory.Error,key:\"File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010\",message:\"File specification cannot end in a recursive directory wildcard ('**'): '{0}'.\"},File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0:{code:5011,category:e.DiagnosticCategory.Error,key:\"File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0_5011\",message:\"File specification cannot contain multiple recursive directory wildcards ('**'): '{0}'.\"},Cannot_read_file_0_Colon_1:{code:5012,category:e.DiagnosticCategory.Error,key:\"Cannot_read_file_0_Colon_1_5012\",message:\"Cannot read file '{0}': {1}.\"},Failed_to_parse_file_0_Colon_1:{code:5014,category:e.DiagnosticCategory.Error,key:\"Failed_to_parse_file_0_Colon_1_5014\",message:\"Failed to parse file '{0}': {1}.\"},Unknown_compiler_option_0:{code:5023,category:e.DiagnosticCategory.Error,key:\"Unknown_compiler_option_0_5023\",message:\"Unknown compiler option '{0}'.\"},Compiler_option_0_requires_a_value_of_type_1:{code:5024,category:e.DiagnosticCategory.Error,key:\"Compiler_option_0_requires_a_value_of_type_1_5024\",message:\"Compiler option '{0}' requires a value of type {1}.\"},Could_not_write_file_0_Colon_1:{code:5033,category:e.DiagnosticCategory.Error,key:\"Could_not_write_file_0_Colon_1_5033\",message:\"Could not write file '{0}': {1}.\"},Option_project_cannot_be_mixed_with_source_files_on_a_command_line:{code:5042,category:e.DiagnosticCategory.Error,key:\"Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042\",message:\"Option 'project' cannot be mixed with source files on a command line.\"},Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES2015_or_higher:{code:5047,category:e.DiagnosticCategory.Error,key:\"Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047\",message:\"Option 'isolatedModules' can only be used when either option '--module' is provided or option 'target' is 'ES2015' or higher.\"},Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided:{code:5051,category:e.DiagnosticCategory.Error,key:\"Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051\",message:\"Option '{0} can only be used when either option '--inlineSourceMap' or option '--sourceMap' is provided.\"},Option_0_cannot_be_specified_without_specifying_option_1:{code:5052,category:e.DiagnosticCategory.Error,key:\"Option_0_cannot_be_specified_without_specifying_option_1_5052\",message:\"Option '{0}' cannot be specified without specifying option '{1}'.\"},Option_0_cannot_be_specified_with_option_1:{code:5053,category:e.DiagnosticCategory.Error,key:\"Option_0_cannot_be_specified_with_option_1_5053\",message:\"Option '{0}' cannot be specified with option '{1}'.\"},A_tsconfig_json_file_is_already_defined_at_Colon_0:{code:5054,category:e.DiagnosticCategory.Error,key:\"A_tsconfig_json_file_is_already_defined_at_Colon_0_5054\",message:\"A 'tsconfig.json' file is already defined at: '{0}'.\"},Cannot_write_file_0_because_it_would_overwrite_input_file:{code:5055,category:e.DiagnosticCategory.Error,key:\"Cannot_write_file_0_because_it_would_overwrite_input_file_5055\",message:\"Cannot write file '{0}' because it would overwrite input file.\"},Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files:{code:5056,category:e.DiagnosticCategory.Error,key:\"Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056\",message:\"Cannot write file '{0}' because it would be overwritten by multiple input files.\"},Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0:{code:5057,category:e.DiagnosticCategory.Error,key:\"Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057\",message:\"Cannot find a tsconfig.json file at the specified directory: '{0}'.\"},The_specified_path_does_not_exist_Colon_0:{code:5058,category:e.DiagnosticCategory.Error,key:\"The_specified_path_does_not_exist_Colon_0_5058\",message:\"The specified path does not exist: '{0}'.\"},Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier:{code:5059,category:e.DiagnosticCategory.Error,key:\"Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059\",message:\"Invalid value for '--reactNamespace'. '{0}' is not a valid identifier.\"},Option_paths_cannot_be_used_without_specifying_baseUrl_option:{code:5060,category:e.DiagnosticCategory.Error,key:\"Option_paths_cannot_be_used_without_specifying_baseUrl_option_5060\",message:\"Option 'paths' cannot be used without specifying '--baseUrl' option.\"},Pattern_0_can_have_at_most_one_Asterisk_character:{code:5061,category:e.DiagnosticCategory.Error,key:\"Pattern_0_can_have_at_most_one_Asterisk_character_5061\",message:\"Pattern '{0}' can have at most one '*' character.\"},Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character:{code:5062,category:e.DiagnosticCategory.Error,key:\"Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character_5062\",message:\"Substitution '{0}' in pattern '{1}' in can have at most one '*' character.\"},Substitutions_for_pattern_0_should_be_an_array:{code:5063,category:e.DiagnosticCategory.Error,key:\"Substitutions_for_pattern_0_should_be_an_array_5063\",message:\"Substitutions for pattern '{0}' should be an array.\"},Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2:{code:5064,category:e.DiagnosticCategory.Error,key:\"Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064\",message:\"Substitution '{0}' for pattern '{1}' has incorrect type, expected 'string', got '{2}'.\"},File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0:{code:5065,category:e.DiagnosticCategory.Error,key:\"File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065\",message:\"File specification cannot contain a parent directory ('..') that appears after a recursive directory wildcard ('**'): '{0}'.\"},Substitutions_for_pattern_0_shouldn_t_be_an_empty_array:{code:5066,category:e.DiagnosticCategory.Error,key:\"Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066\",message:\"Substitutions for pattern '{0}' shouldn't be an empty array.\"},Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name:{code:5067,category:e.DiagnosticCategory.Error,key:\"Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067\",message:\"Invalid value for 'jsxFactory'. '{0}' is not a valid identifier or qualified-name.\"},Concatenate_and_emit_output_to_single_file:{code:6001,category:e.DiagnosticCategory.Message,key:\"Concatenate_and_emit_output_to_single_file_6001\",message:\"Concatenate and emit output to single file.\"},Generates_corresponding_d_ts_file:{code:6002,category:e.DiagnosticCategory.Message,key:\"Generates_corresponding_d_ts_file_6002\",message:\"Generates corresponding '.d.ts' file.\"},Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations:{code:6003,category:e.DiagnosticCategory.Message,key:\"Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003\",message:\"Specify the location where debugger should locate map files instead of generated locations.\"},Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations:{code:6004,category:e.DiagnosticCategory.Message,key:\"Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004\",message:\"Specify the location where debugger should locate TypeScript files instead of source locations.\"},Watch_input_files:{code:6005,category:e.DiagnosticCategory.Message,key:\"Watch_input_files_6005\",message:\"Watch input files.\"},Redirect_output_structure_to_the_directory:{code:6006,category:e.DiagnosticCategory.Message,key:\"Redirect_output_structure_to_the_directory_6006\",message:\"Redirect output structure to the directory.\"},Do_not_erase_const_enum_declarations_in_generated_code:{code:6007,category:e.DiagnosticCategory.Message,key:\"Do_not_erase_const_enum_declarations_in_generated_code_6007\",message:\"Do not erase const enum declarations in generated code.\"},Do_not_emit_outputs_if_any_errors_were_reported:{code:6008,category:e.DiagnosticCategory.Message,key:\"Do_not_emit_outputs_if_any_errors_were_reported_6008\",message:\"Do not emit outputs if any errors were reported.\"},Do_not_emit_comments_to_output:{code:6009,category:e.DiagnosticCategory.Message,key:\"Do_not_emit_comments_to_output_6009\",message:\"Do not emit comments to output.\"},Do_not_emit_outputs:{code:6010,category:e.DiagnosticCategory.Message,key:\"Do_not_emit_outputs_6010\",message:\"Do not emit outputs.\"},Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typechecking:{code:6011,category:e.DiagnosticCategory.Message,key:\"Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011\",message:\"Allow default imports from modules with no default export. This does not affect code emit, just typechecking.\"},Skip_type_checking_of_declaration_files:{code:6012,category:e.DiagnosticCategory.Message,key:\"Skip_type_checking_of_declaration_files_6012\",message:\"Skip type checking of declaration files.\"},Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_or_ESNEXT:{code:6015,category:e.DiagnosticCategory.Message,key:\"Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_or_ESNEXT_6015\",message:\"Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', or 'ESNEXT'.\"},Specify_module_code_generation_Colon_commonjs_amd_system_umd_es2015_or_ESNext:{code:6016,category:e.DiagnosticCategory.Message,key:\"Specify_module_code_generation_Colon_commonjs_amd_system_umd_es2015_or_ESNext_6016\",message:\"Specify module code generation: 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'.\"},Print_this_message:{code:6017,category:e.DiagnosticCategory.Message,key:\"Print_this_message_6017\",message:\"Print this message.\"},Print_the_compiler_s_version:{code:6019,category:e.DiagnosticCategory.Message,key:\"Print_the_compiler_s_version_6019\",message:\"Print the compiler's version.\"},Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json:{code:6020,category:e.DiagnosticCategory.Message,key:\"Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020\",message:\"Compile the project given the path to its configuration file, or to a folder with a 'tsconfig.json'.\"},Syntax_Colon_0:{code:6023,category:e.DiagnosticCategory.Message,key:\"Syntax_Colon_0_6023\",message:\"Syntax: {0}\"},options:{code:6024,category:e.DiagnosticCategory.Message,key:\"options_6024\",message:\"options\"},file:{code:6025,category:e.DiagnosticCategory.Message,key:\"file_6025\",message:\"file\"},Examples_Colon_0:{code:6026,category:e.DiagnosticCategory.Message,key:\"Examples_Colon_0_6026\",message:\"Examples: {0}\"},Options_Colon:{code:6027,category:e.DiagnosticCategory.Message,key:\"Options_Colon_6027\",message:\"Options:\"},Version_0:{code:6029,category:e.DiagnosticCategory.Message,key:\"Version_0_6029\",message:\"Version {0}\"},Insert_command_line_options_and_files_from_a_file:{code:6030,category:e.DiagnosticCategory.Message,key:\"Insert_command_line_options_and_files_from_a_file_6030\",message:\"Insert command line options and files from a file.\"},File_change_detected_Starting_incremental_compilation:{code:6032,category:e.DiagnosticCategory.Message,key:\"File_change_detected_Starting_incremental_compilation_6032\",message:\"File change detected. Starting incremental compilation...\"},KIND:{code:6034,category:e.DiagnosticCategory.Message,key:\"KIND_6034\",message:\"KIND\"},FILE:{code:6035,category:e.DiagnosticCategory.Message,key:\"FILE_6035\",message:\"FILE\"},VERSION:{code:6036,category:e.DiagnosticCategory.Message,key:\"VERSION_6036\",message:\"VERSION\"},LOCATION:{code:6037,category:e.DiagnosticCategory.Message,key:\"LOCATION_6037\",message:\"LOCATION\"},DIRECTORY:{code:6038,category:e.DiagnosticCategory.Message,key:\"DIRECTORY_6038\",message:\"DIRECTORY\"},STRATEGY:{code:6039,category:e.DiagnosticCategory.Message,key:\"STRATEGY_6039\",message:\"STRATEGY\"},FILE_OR_DIRECTORY:{code:6040,category:e.DiagnosticCategory.Message,key:\"FILE_OR_DIRECTORY_6040\",message:\"FILE OR DIRECTORY\"},Compilation_complete_Watching_for_file_changes:{code:6042,category:e.DiagnosticCategory.Message,key:\"Compilation_complete_Watching_for_file_changes_6042\",message:\"Compilation complete. Watching for file changes.\"},Generates_corresponding_map_file:{code:6043,category:e.DiagnosticCategory.Message,key:\"Generates_corresponding_map_file_6043\",message:\"Generates corresponding '.map' file.\"},Compiler_option_0_expects_an_argument:{code:6044,category:e.DiagnosticCategory.Error,key:\"Compiler_option_0_expects_an_argument_6044\",message:\"Compiler option '{0}' expects an argument.\"},Unterminated_quoted_string_in_response_file_0:{code:6045,category:e.DiagnosticCategory.Error,key:\"Unterminated_quoted_string_in_response_file_0_6045\",message:\"Unterminated quoted string in response file '{0}'.\"},Argument_for_0_option_must_be_Colon_1:{code:6046,category:e.DiagnosticCategory.Error,key:\"Argument_for_0_option_must_be_Colon_1_6046\",message:\"Argument for '{0}' option must be: {1}.\"},Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1:{code:6048,category:e.DiagnosticCategory.Error,key:\"Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048\",message:\"Locale must be of the form <language> or <language>-<territory>. For example '{0}' or '{1}'.\"},Unsupported_locale_0:{code:6049,category:e.DiagnosticCategory.Error,key:\"Unsupported_locale_0_6049\",message:\"Unsupported locale '{0}'.\"},Unable_to_open_file_0:{code:6050,category:e.DiagnosticCategory.Error,key:\"Unable_to_open_file_0_6050\",message:\"Unable to open file '{0}'.\"},Corrupted_locale_file_0:{code:6051,category:e.DiagnosticCategory.Error,key:\"Corrupted_locale_file_0_6051\",message:\"Corrupted locale file {0}.\"},Raise_error_on_expressions_and_declarations_with_an_implied_any_type:{code:6052,category:e.DiagnosticCategory.Message,key:\"Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052\",message:\"Raise error on expressions and declarations with an implied 'any' type.\"},File_0_not_found:{code:6053,category:e.DiagnosticCategory.Error,key:\"File_0_not_found_6053\",message:\"File '{0}' not found.\"},File_0_has_unsupported_extension_The_only_supported_extensions_are_1:{code:6054,category:e.DiagnosticCategory.Error,key:\"File_0_has_unsupported_extension_The_only_supported_extensions_are_1_6054\",message:\"File '{0}' has unsupported extension. The only supported extensions are {1}.\"},Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures:{code:6055,category:e.DiagnosticCategory.Message,key:\"Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055\",message:\"Suppress noImplicitAny errors for indexing objects lacking index signatures.\"},Do_not_emit_declarations_for_code_that_has_an_internal_annotation:{code:6056,category:e.DiagnosticCategory.Message,key:\"Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056\",message:\"Do not emit declarations for code that has an '@internal' annotation.\"},Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir:{code:6058,category:e.DiagnosticCategory.Message,key:\"Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058\",message:\"Specify the root directory of input files. Use to control the output directory structure with --outDir.\"},File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files:{code:6059,category:e.DiagnosticCategory.Error,key:\"File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059\",message:\"File '{0}' is not under 'rootDir' '{1}'. 'rootDir' is expected to contain all source files.\"},Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix:{code:6060,category:e.DiagnosticCategory.Message,key:\"Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060\",message:\"Specify the end of line sequence to be used when emitting files: 'CRLF' (dos) or 'LF' (unix).\"},NEWLINE:{code:6061,category:e.DiagnosticCategory.Message,key:\"NEWLINE_6061\",message:\"NEWLINE\"},Option_0_can_only_be_specified_in_tsconfig_json_file:{code:6064,category:e.DiagnosticCategory.Error,key:\"Option_0_can_only_be_specified_in_tsconfig_json_file_6064\",message:\"Option '{0}' can only be specified in 'tsconfig.json' file.\"},Enables_experimental_support_for_ES7_decorators:{code:6065,category:e.DiagnosticCategory.Message,key:\"Enables_experimental_support_for_ES7_decorators_6065\",message:\"Enables experimental support for ES7 decorators.\"},Enables_experimental_support_for_emitting_type_metadata_for_decorators:{code:6066,category:e.DiagnosticCategory.Message,key:\"Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066\",message:\"Enables experimental support for emitting type metadata for decorators.\"},Enables_experimental_support_for_ES7_async_functions:{code:6068,category:e.DiagnosticCategory.Message,key:\"Enables_experimental_support_for_ES7_async_functions_6068\",message:\"Enables experimental support for ES7 async functions.\"},Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6:{code:6069,category:e.DiagnosticCategory.Message,key:\"Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069\",message:\"Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6).\"},Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file:{code:6070,category:e.DiagnosticCategory.Message,key:\"Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070\",message:\"Initializes a TypeScript project and creates a tsconfig.json file.\"},Successfully_created_a_tsconfig_json_file:{code:6071,category:e.DiagnosticCategory.Message,key:\"Successfully_created_a_tsconfig_json_file_6071\",message:\"Successfully created a tsconfig.json file.\"},Suppress_excess_property_checks_for_object_literals:{code:6072,category:e.DiagnosticCategory.Message,key:\"Suppress_excess_property_checks_for_object_literals_6072\",message:\"Suppress excess property checks for object literals.\"},Stylize_errors_and_messages_using_color_and_context_experimental:{code:6073,category:e.DiagnosticCategory.Message,key:\"Stylize_errors_and_messages_using_color_and_context_experimental_6073\",message:\"Stylize errors and messages using color and context (experimental).\"},Do_not_report_errors_on_unused_labels:{code:6074,category:e.DiagnosticCategory.Message,key:\"Do_not_report_errors_on_unused_labels_6074\",message:\"Do not report errors on unused labels.\"},Report_error_when_not_all_code_paths_in_function_return_a_value:{code:6075,category:e.DiagnosticCategory.Message,key:\"Report_error_when_not_all_code_paths_in_function_return_a_value_6075\",message:\"Report error when not all code paths in function return a value.\"},Report_errors_for_fallthrough_cases_in_switch_statement:{code:6076,category:e.DiagnosticCategory.Message,key:\"Report_errors_for_fallthrough_cases_in_switch_statement_6076\",message:\"Report errors for fallthrough cases in switch statement.\"},Do_not_report_errors_on_unreachable_code:{code:6077,category:e.DiagnosticCategory.Message,key:\"Do_not_report_errors_on_unreachable_code_6077\",message:\"Do not report errors on unreachable code.\"},Disallow_inconsistently_cased_references_to_the_same_file:{code:6078,category:e.DiagnosticCategory.Message,key:\"Disallow_inconsistently_cased_references_to_the_same_file_6078\",message:\"Disallow inconsistently-cased references to the same file.\"},Specify_library_files_to_be_included_in_the_compilation_Colon:{code:6079,category:e.DiagnosticCategory.Message,key:\"Specify_library_files_to_be_included_in_the_compilation_Colon_6079\",message:\"Specify library files to be included in the compilation: \"},Specify_JSX_code_generation_Colon_preserve_react_native_or_react:{code:6080,category:e.DiagnosticCategory.Message,key:\"Specify_JSX_code_generation_Colon_preserve_react_native_or_react_6080\",message:\"Specify JSX code generation: 'preserve', 'react-native', or 'react'.\"},File_0_has_an_unsupported_extension_so_skipping_it:{code:6081,category:e.DiagnosticCategory.Message,key:\"File_0_has_an_unsupported_extension_so_skipping_it_6081\",message:\"File '{0}' has an unsupported extension, so skipping it.\"},Only_amd_and_system_modules_are_supported_alongside_0:{code:6082,category:e.DiagnosticCategory.Error,key:\"Only_amd_and_system_modules_are_supported_alongside_0_6082\",message:\"Only 'amd' and 'system' modules are supported alongside --{0}.\"},Base_directory_to_resolve_non_absolute_module_names:{code:6083,category:e.DiagnosticCategory.Message,key:\"Base_directory_to_resolve_non_absolute_module_names_6083\",message:\"Base directory to resolve non-absolute module names.\"},Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react_JSX_emit:{code:6084,category:e.DiagnosticCategory.Message,key:\"Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084\",message:\"[Deprecated] Use '--jsxFactory' instead. Specify the object invoked for createElement when targeting 'react' JSX emit\"},Enable_tracing_of_the_name_resolution_process:{code:6085,category:e.DiagnosticCategory.Message,key:\"Enable_tracing_of_the_name_resolution_process_6085\",message:\"Enable tracing of the name resolution process.\"},Resolving_module_0_from_1:{code:6086,category:e.DiagnosticCategory.Message,key:\"Resolving_module_0_from_1_6086\",message:\"======== Resolving module '{0}' from '{1}'. ========\"},Explicitly_specified_module_resolution_kind_Colon_0:{code:6087,category:e.DiagnosticCategory.Message,key:\"Explicitly_specified_module_resolution_kind_Colon_0_6087\",message:\"Explicitly specified module resolution kind: '{0}'.\"},Module_resolution_kind_is_not_specified_using_0:{code:6088,category:e.DiagnosticCategory.Message,key:\"Module_resolution_kind_is_not_specified_using_0_6088\",message:\"Module resolution kind is not specified, using '{0}'.\"},Module_name_0_was_successfully_resolved_to_1:{code:6089,category:e.DiagnosticCategory.Message,key:\"Module_name_0_was_successfully_resolved_to_1_6089\",message:\"======== Module name '{0}' was successfully resolved to '{1}'. ========\"},Module_name_0_was_not_resolved:{code:6090,category:e.DiagnosticCategory.Message,key:\"Module_name_0_was_not_resolved_6090\",message:\"======== Module name '{0}' was not resolved. ========\"},paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0:{code:6091,category:e.DiagnosticCategory.Message,key:\"paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091\",message:\"'paths' option is specified, looking for a pattern to match module name '{0}'.\"},Module_name_0_matched_pattern_1:{code:6092,category:e.DiagnosticCategory.Message,key:\"Module_name_0_matched_pattern_1_6092\",message:\"Module name '{0}', matched pattern '{1}'.\"},Trying_substitution_0_candidate_module_location_Colon_1:{code:6093,category:e.DiagnosticCategory.Message,key:\"Trying_substitution_0_candidate_module_location_Colon_1_6093\",message:\"Trying substitution '{0}', candidate module location: '{1}'.\"},Resolving_module_name_0_relative_to_base_url_1_2:{code:6094,category:e.DiagnosticCategory.Message,key:\"Resolving_module_name_0_relative_to_base_url_1_2_6094\",message:\"Resolving module name '{0}' relative to base url '{1}' - '{2}'.\"},Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1:{code:6095,category:e.DiagnosticCategory.Message,key:\"Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095\",message:\"Loading module as file / folder, candidate module location '{0}', target file type '{1}'.\"},File_0_does_not_exist:{code:6096,category:e.DiagnosticCategory.Message,key:\"File_0_does_not_exist_6096\",message:\"File '{0}' does not exist.\"},File_0_exist_use_it_as_a_name_resolution_result:{code:6097,category:e.DiagnosticCategory.Message,key:\"File_0_exist_use_it_as_a_name_resolution_result_6097\",message:\"File '{0}' exist - use it as a name resolution result.\"},Loading_module_0_from_node_modules_folder_target_file_type_1:{code:6098,category:e.DiagnosticCategory.Message,key:\"Loading_module_0_from_node_modules_folder_target_file_type_1_6098\",message:\"Loading module '{0}' from 'node_modules' folder, target file type '{1}'.\"},Found_package_json_at_0:{code:6099,category:e.DiagnosticCategory.Message,key:\"Found_package_json_at_0_6099\",message:\"Found 'package.json' at '{0}'.\"},package_json_does_not_have_a_0_field:{code:6100,category:e.DiagnosticCategory.Message,key:\"package_json_does_not_have_a_0_field_6100\",message:\"'package.json' does not have a '{0}' field.\"},package_json_has_0_field_1_that_references_2:{code:6101,category:e.DiagnosticCategory.Message,key:\"package_json_has_0_field_1_that_references_2_6101\",message:\"'package.json' has '{0}' field '{1}' that references '{2}'.\"},Allow_javascript_files_to_be_compiled:{code:6102,category:e.DiagnosticCategory.Message,key:\"Allow_javascript_files_to_be_compiled_6102\",message:\"Allow javascript files to be compiled.\"},Option_0_should_have_array_of_strings_as_a_value:{code:6103,category:e.DiagnosticCategory.Error,key:\"Option_0_should_have_array_of_strings_as_a_value_6103\",message:\"Option '{0}' should have array of strings as a value.\"},Checking_if_0_is_the_longest_matching_prefix_for_1_2:{code:6104,category:e.DiagnosticCategory.Message,key:\"Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104\",message:\"Checking if '{0}' is the longest matching prefix for '{1}' - '{2}'.\"},Expected_type_of_0_field_in_package_json_to_be_string_got_1:{code:6105,category:e.DiagnosticCategory.Message,key:\"Expected_type_of_0_field_in_package_json_to_be_string_got_1_6105\",message:\"Expected type of '{0}' field in 'package.json' to be 'string', got '{1}'.\"},baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1:{code:6106,category:e.DiagnosticCategory.Message,key:\"baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106\",message:\"'baseUrl' option is set to '{0}', using this value to resolve non-relative module name '{1}'.\"},rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0:{code:6107,category:e.DiagnosticCategory.Message,key:\"rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107\",message:\"'rootDirs' option is set, using it to resolve relative module name '{0}'.\"},Longest_matching_prefix_for_0_is_1:{code:6108,category:e.DiagnosticCategory.Message,key:\"Longest_matching_prefix_for_0_is_1_6108\",message:\"Longest matching prefix for '{0}' is '{1}'.\"},Loading_0_from_the_root_dir_1_candidate_location_2:{code:6109,category:e.DiagnosticCategory.Message,key:\"Loading_0_from_the_root_dir_1_candidate_location_2_6109\",message:\"Loading '{0}' from the root dir '{1}', candidate location '{2}'.\"},Trying_other_entries_in_rootDirs:{code:6110,category:e.DiagnosticCategory.Message,key:\"Trying_other_entries_in_rootDirs_6110\",message:\"Trying other entries in 'rootDirs'.\"},Module_resolution_using_rootDirs_has_failed:{code:6111,category:e.DiagnosticCategory.Message,key:\"Module_resolution_using_rootDirs_has_failed_6111\",message:\"Module resolution using 'rootDirs' has failed.\"},Do_not_emit_use_strict_directives_in_module_output:{code:6112,category:e.DiagnosticCategory.Message,key:\"Do_not_emit_use_strict_directives_in_module_output_6112\",message:\"Do not emit 'use strict' directives in module output.\"},Enable_strict_null_checks:{code:6113,category:e.DiagnosticCategory.Message,key:\"Enable_strict_null_checks_6113\",message:\"Enable strict null checks.\"},Unknown_option_excludes_Did_you_mean_exclude:{code:6114,category:e.DiagnosticCategory.Error,key:\"Unknown_option_excludes_Did_you_mean_exclude_6114\",message:\"Unknown option 'excludes'. Did you mean 'exclude'?\"},Raise_error_on_this_expressions_with_an_implied_any_type:{code:6115,category:e.DiagnosticCategory.Message,key:\"Raise_error_on_this_expressions_with_an_implied_any_type_6115\",message:\"Raise error on 'this' expressions with an implied 'any' type.\"},Resolving_type_reference_directive_0_containing_file_1_root_directory_2:{code:6116,category:e.DiagnosticCategory.Message,key:\"Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116\",message:\"======== Resolving type reference directive '{0}', containing file '{1}', root directory '{2}'. ========\"},Resolving_using_primary_search_paths:{code:6117,category:e.DiagnosticCategory.Message,key:\"Resolving_using_primary_search_paths_6117\",message:\"Resolving using primary search paths...\"},Resolving_from_node_modules_folder:{code:6118,category:e.DiagnosticCategory.Message,key:\"Resolving_from_node_modules_folder_6118\",message:\"Resolving from node_modules folder...\"},Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2:{code:6119,category:e.DiagnosticCategory.Message,key:\"Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119\",message:\"======== Type reference directive '{0}' was successfully resolved to '{1}', primary: {2}. ========\"},Type_reference_directive_0_was_not_resolved:{code:6120,category:e.DiagnosticCategory.Message,key:\"Type_reference_directive_0_was_not_resolved_6120\",message:\"======== Type reference directive '{0}' was not resolved. ========\"},Resolving_with_primary_search_path_0:{code:6121,category:e.DiagnosticCategory.Message,key:\"Resolving_with_primary_search_path_0_6121\",message:\"Resolving with primary search path '{0}'.\"},Root_directory_cannot_be_determined_skipping_primary_search_paths:{code:6122,category:e.DiagnosticCategory.Message,key:\"Root_directory_cannot_be_determined_skipping_primary_search_paths_6122\",message:\"Root directory cannot be determined, skipping primary search paths.\"},Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set:{code:6123,category:e.DiagnosticCategory.Message,key:\"Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123\",message:\"======== Resolving type reference directive '{0}', containing file '{1}', root directory not set. ========\"},Type_declaration_files_to_be_included_in_compilation:{code:6124,category:e.DiagnosticCategory.Message,key:\"Type_declaration_files_to_be_included_in_compilation_6124\",message:\"Type declaration files to be included in compilation.\"},Looking_up_in_node_modules_folder_initial_location_0:{code:6125,category:e.DiagnosticCategory.Message,key:\"Looking_up_in_node_modules_folder_initial_location_0_6125\",message:\"Looking up in 'node_modules' folder, initial location '{0}'.\"},Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_modules_folder:{code:6126,category:e.DiagnosticCategory.Message,key:\"Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126\",message:\"Containing file is not specified and root directory cannot be determined, skipping lookup in 'node_modules' folder.\"},Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1:{code:6127,category:e.DiagnosticCategory.Message,key:\"Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127\",message:\"======== Resolving type reference directive '{0}', containing file not set, root directory '{1}'. ========\"},Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set:{code:6128,category:e.DiagnosticCategory.Message,key:\"Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128\",message:\"======== Resolving type reference directive '{0}', containing file not set, root directory not set. ========\"},The_config_file_0_found_doesn_t_contain_any_source_files:{code:6129,category:e.DiagnosticCategory.Error,key:\"The_config_file_0_found_doesn_t_contain_any_source_files_6129\",message:\"The config file '{0}' found doesn't contain any source files.\"},Resolving_real_path_for_0_result_1:{code:6130,category:e.DiagnosticCategory.Message,key:\"Resolving_real_path_for_0_result_1_6130\",message:\"Resolving real path for '{0}', result '{1}'.\"},Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system:{code:6131,category:e.DiagnosticCategory.Error,key:\"Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131\",message:\"Cannot compile modules using option '{0}' unless the '--module' flag is 'amd' or 'system'.\"},File_name_0_has_a_1_extension_stripping_it:{code:6132,category:e.DiagnosticCategory.Message,key:\"File_name_0_has_a_1_extension_stripping_it_6132\",message:\"File name '{0}' has a '{1}' extension - stripping it.\"},_0_is_declared_but_never_used:{code:6133,category:e.DiagnosticCategory.Error,key:\"_0_is_declared_but_never_used_6133\",message:\"'{0}' is declared but never used.\"},Report_errors_on_unused_locals:{code:6134,category:e.DiagnosticCategory.Message,key:\"Report_errors_on_unused_locals_6134\",message:\"Report errors on unused locals.\"},Report_errors_on_unused_parameters:{code:6135,category:e.DiagnosticCategory.Message,key:\"Report_errors_on_unused_parameters_6135\",message:\"Report errors on unused parameters.\"},The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files:{code:6136,category:e.DiagnosticCategory.Message,key:\"The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136\",message:\"The maximum dependency depth to search under node_modules and load JavaScript files.\"},Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1:{code:6137,category:e.DiagnosticCategory.Error,key:\"Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137\",message:\"Cannot import type declaration files. Consider importing '{0}' instead of '{1}'.\"},Property_0_is_declared_but_never_used:{code:6138,category:e.DiagnosticCategory.Error,key:\"Property_0_is_declared_but_never_used_6138\",message:\"Property '{0}' is declared but never used.\"},Import_emit_helpers_from_tslib:{code:6139,category:e.DiagnosticCategory.Message,key:\"Import_emit_helpers_from_tslib_6139\",message:\"Import emit helpers from 'tslib'.\"},Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using_cache_location_2:{code:6140,category:e.DiagnosticCategory.Error,key:\"Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140\",message:\"Auto discovery for typings is enabled in project '{0}'. Running extra resolution pass for module '{1}' using cache location '{2}'.\"},Parse_in_strict_mode_and_emit_use_strict_for_each_source_file:{code:6141,category:e.DiagnosticCategory.Message,key:\"Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141\",message:'Parse in strict mode and emit \"use strict\" for each source file.'},Module_0_was_resolved_to_1_but_jsx_is_not_set:{code:6142,category:e.DiagnosticCategory.Error,key:\"Module_0_was_resolved_to_1_but_jsx_is_not_set_6142\",message:\"Module '{0}' was resolved to '{1}', but '--jsx' is not set.\"},Module_0_was_resolved_to_1_but_allowJs_is_not_set:{code:6143,category:e.DiagnosticCategory.Error,key:\"Module_0_was_resolved_to_1_but_allowJs_is_not_set_6143\",message:\"Module '{0}' was resolved to '{1}', but '--allowJs' is not set.\"},Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1:{code:6144,category:e.DiagnosticCategory.Message,key:\"Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144\",message:\"Module '{0}' was resolved as locally declared ambient module in file '{1}'.\"},Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified:{code:6145,category:e.DiagnosticCategory.Message,key:\"Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified_6145\",message:\"Module '{0}' was resolved as ambient module declared in '{1}' since this file was not modified.\"},Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h:{code:6146,category:e.DiagnosticCategory.Message,key:\"Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146\",message:\"Specify the JSX factory function to use when targeting 'react' JSX emit, e.g. 'React.createElement' or 'h'.\"},Resolution_for_module_0_was_found_in_cache:{code:6147,category:e.DiagnosticCategory.Message,key:\"Resolution_for_module_0_was_found_in_cache_6147\",message:\"Resolution for module '{0}' was found in cache.\"},Directory_0_does_not_exist_skipping_all_lookups_in_it:{code:6148,category:e.DiagnosticCategory.Message,key:\"Directory_0_does_not_exist_skipping_all_lookups_in_it_6148\",message:\"Directory '{0}' does not exist, skipping all lookups in it.\"},Show_diagnostic_information:{code:6149,category:e.DiagnosticCategory.Message,key:\"Show_diagnostic_information_6149\",message:\"Show diagnostic information.\"},Show_verbose_diagnostic_information:{code:6150,category:e.DiagnosticCategory.Message,key:\"Show_verbose_diagnostic_information_6150\",message:\"Show verbose diagnostic information.\"},Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file:{code:6151,category:e.DiagnosticCategory.Message,key:\"Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151\",message:\"Emit a single file with source maps instead of having a separate file.\"},Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap_to_be_set:{code:6152,category:e.DiagnosticCategory.Message,key:\"Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152\",message:\"Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set.\"},Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule:{code:6153,category:e.DiagnosticCategory.Message,key:\"Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153\",message:\"Transpile each file as a separate module (similar to 'ts.transpileModule').\"},Print_names_of_generated_files_part_of_the_compilation:{code:6154,category:e.DiagnosticCategory.Message,key:\"Print_names_of_generated_files_part_of_the_compilation_6154\",message:\"Print names of generated files part of the compilation.\"},Print_names_of_files_part_of_the_compilation:{code:6155,category:e.DiagnosticCategory.Message,key:\"Print_names_of_files_part_of_the_compilation_6155\",message:\"Print names of files part of the compilation.\"},The_locale_used_when_displaying_messages_to_the_user_e_g_en_us:{code:6156,category:e.DiagnosticCategory.Message,key:\"The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156\",message:\"The locale used when displaying messages to the user (e.g. 'en-us')\"},Do_not_generate_custom_helper_functions_like_extends_in_compiled_output:{code:6157,category:e.DiagnosticCategory.Message,key:\"Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157\",message:\"Do not generate custom helper functions like '__extends' in compiled output.\"},Do_not_include_the_default_library_file_lib_d_ts:{code:6158,category:e.DiagnosticCategory.Message,key:\"Do_not_include_the_default_library_file_lib_d_ts_6158\",message:\"Do not include the default library file (lib.d.ts).\"},Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files:{code:6159,category:e.DiagnosticCategory.Message,key:\"Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159\",message:\"Do not add triple-slash references or imported modules to the list of compiled files.\"},Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files:{code:6160,category:e.DiagnosticCategory.Message,key:\"Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160\",message:\"[Deprecated] Use '--skipLibCheck' instead. Skip type checking of default library declaration files.\"},List_of_folders_to_include_type_definitions_from:{code:6161,category:e.DiagnosticCategory.Message,key:\"List_of_folders_to_include_type_definitions_from_6161\",message:\"List of folders to include type definitions from.\"},Disable_size_limitations_on_JavaScript_projects:{code:6162,category:e.DiagnosticCategory.Message,key:\"Disable_size_limitations_on_JavaScript_projects_6162\",message:\"Disable size limitations on JavaScript projects.\"},The_character_set_of_the_input_files:{code:6163,category:e.DiagnosticCategory.Message,key:\"The_character_set_of_the_input_files_6163\",message:\"The character set of the input files.\"},Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files:{code:6164,category:e.DiagnosticCategory.Message,key:\"Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6164\",message:\"Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files.\"},Do_not_truncate_error_messages:{code:6165,category:e.DiagnosticCategory.Message,key:\"Do_not_truncate_error_messages_6165\",message:\"Do not truncate error messages.\"},Output_directory_for_generated_declaration_files:{code:6166,category:e.DiagnosticCategory.Message,key:\"Output_directory_for_generated_declaration_files_6166\",message:\"Output directory for generated declaration files.\"},A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl:{code:6167,category:e.DiagnosticCategory.Message,key:\"A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167\",message:\"A series of entries which re-map imports to lookup locations relative to the 'baseUrl'.\"},List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime:{code:6168,category:e.DiagnosticCategory.Message,key:\"List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168\",message:\"List of root folders whose combined content represents the structure of the project at runtime.\"},Show_all_compiler_options:{code:6169,category:e.DiagnosticCategory.Message,key:\"Show_all_compiler_options_6169\",message:\"Show all compiler options.\"},Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file:{code:6170,category:e.DiagnosticCategory.Message,key:\"Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170\",message:\"[Deprecated] Use '--outFile' instead. Concatenate and emit output to single file\"},Command_line_Options:{code:6171,category:e.DiagnosticCategory.Message,key:\"Command_line_Options_6171\",message:\"Command-line Options\"},Basic_Options:{code:6172,category:e.DiagnosticCategory.Message,key:\"Basic_Options_6172\",message:\"Basic Options\"},Strict_Type_Checking_Options:{code:6173,category:e.DiagnosticCategory.Message,key:\"Strict_Type_Checking_Options_6173\",message:\"Strict Type-Checking Options\"},Module_Resolution_Options:{code:6174,category:e.DiagnosticCategory.Message,key:\"Module_Resolution_Options_6174\",message:\"Module Resolution Options\"},Source_Map_Options:{code:6175,category:e.DiagnosticCategory.Message,key:\"Source_Map_Options_6175\",message:\"Source Map Options\"},Additional_Checks:{code:6176,category:e.DiagnosticCategory.Message,key:\"Additional_Checks_6176\",message:\"Additional Checks\"},Experimental_Options:{code:6177,category:e.DiagnosticCategory.Message,key:\"Experimental_Options_6177\",message:\"Experimental Options\"},Advanced_Options:{code:6178,category:e.DiagnosticCategory.Message,key:\"Advanced_Options_6178\",message:\"Advanced Options\"},Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3:{code:6179,category:e.DiagnosticCategory.Message,key:\"Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179\",message:\"Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'.\"},Enable_all_strict_type_checking_options:{code:6180,category:e.DiagnosticCategory.Message,key:\"Enable_all_strict_type_checking_options_6180\",message:\"Enable all strict type-checking options.\"},List_of_language_service_plugins:{code:6181,category:e.DiagnosticCategory.Message,key:\"List_of_language_service_plugins_6181\",message:\"List of language service plugins.\"},Scoped_package_detected_looking_in_0:{code:6182,category:e.DiagnosticCategory.Message,key:\"Scoped_package_detected_looking_in_0_6182\",message:\"Scoped package detected, looking in '{0}'\"},Reusing_resolution_of_module_0_to_file_1_from_old_program:{code:6183,category:e.DiagnosticCategory.Message,key:\"Reusing_resolution_of_module_0_to_file_1_from_old_program_6183\",message:\"Reusing resolution of module '{0}' to file '{1}' from old program.\"},Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program:{code:6184,category:e.DiagnosticCategory.Message,key:\"Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program_6184\",message:\"Reusing module resolutions originating in '{0}' since resolutions are unchanged from old program.\"},Disable_strict_checking_of_generic_signatures_in_function_types:{code:6185,category:e.DiagnosticCategory.Message,key:\"Disable_strict_checking_of_generic_signatures_in_function_types_6185\",message:\"Disable strict checking of generic signatures in function types.\"},Variable_0_implicitly_has_an_1_type:{code:7005,category:e.DiagnosticCategory.Error,key:\"Variable_0_implicitly_has_an_1_type_7005\",message:\"Variable '{0}' implicitly has an '{1}' type.\"},Parameter_0_implicitly_has_an_1_type:{code:7006,category:e.DiagnosticCategory.Error,key:\"Parameter_0_implicitly_has_an_1_type_7006\",message:\"Parameter '{0}' implicitly has an '{1}' type.\"},Member_0_implicitly_has_an_1_type:{code:7008,category:e.DiagnosticCategory.Error,key:\"Member_0_implicitly_has_an_1_type_7008\",message:\"Member '{0}' implicitly has an '{1}' type.\"},new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type:{code:7009,category:e.DiagnosticCategory.Error,key:\"new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009\",message:\"'new' expression, whose target lacks a construct signature, implicitly has an 'any' type.\"},_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type:{code:7010,category:e.DiagnosticCategory.Error,key:\"_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010\",message:\"'{0}', which lacks return-type annotation, implicitly has an '{1}' return type.\"},Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type:{code:7011,category:e.DiagnosticCategory.Error,key:\"Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011\",message:\"Function expression, which lacks return-type annotation, implicitly has an '{0}' return type.\"},Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type:{code:7013,category:e.DiagnosticCategory.Error,key:\"Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013\",message:\"Construct signature, which lacks return-type annotation, implicitly has an 'any' return type.\"},Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number:{code:7015,category:e.DiagnosticCategory.Error,key:\"Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015\",message:\"Element implicitly has an 'any' type because index expression is not of type 'number'.\"},Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type:{code:7016,category:e.DiagnosticCategory.Error,key:\"Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016\",message:\"Could not find a declaration file for module '{0}'. '{1}' implicitly has an 'any' type.\"},Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature:{code:7017,category:e.DiagnosticCategory.Error,key:\"Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017\",message:\"Element implicitly has an 'any' type because type '{0}' has no index signature.\"},Object_literal_s_property_0_implicitly_has_an_1_type:{code:7018,category:e.DiagnosticCategory.Error,key:\"Object_literal_s_property_0_implicitly_has_an_1_type_7018\",message:\"Object literal's property '{0}' implicitly has an '{1}' type.\"},Rest_parameter_0_implicitly_has_an_any_type:{code:7019,category:e.DiagnosticCategory.Error,key:\"Rest_parameter_0_implicitly_has_an_any_type_7019\",message:\"Rest parameter '{0}' implicitly has an 'any[]' type.\"},Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type:{code:7020,category:e.DiagnosticCategory.Error,key:\"Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020\",message:\"Call signature, which lacks return-type annotation, implicitly has an 'any' return type.\"},_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer:{code:7022,category:e.DiagnosticCategory.Error,key:\"_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022\",message:\"'{0}' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.\"},_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions:{code:7023,category:e.DiagnosticCategory.Error,key:\"_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023\",message:\"'{0}' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions.\"},Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions:{code:7024,category:e.DiagnosticCategory.Error,key:\"Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024\",message:\"Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions.\"},Generator_implicitly_has_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type:{code:7025,category:e.DiagnosticCategory.Error,key:\"Generator_implicitly_has_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_typ_7025\",message:\"Generator implicitly has type '{0}' because it does not yield any values. Consider supplying a return type.\"},JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists:{code:7026,category:e.DiagnosticCategory.Error,key:\"JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026\",message:\"JSX element implicitly has type 'any' because no interface 'JSX.{0}' exists.\"},Unreachable_code_detected:{code:7027,category:e.DiagnosticCategory.Error,key:\"Unreachable_code_detected_7027\",message:\"Unreachable code detected.\"},Unused_label:{code:7028,category:e.DiagnosticCategory.Error,key:\"Unused_label_7028\",message:\"Unused label.\"},Fallthrough_case_in_switch:{code:7029,category:e.DiagnosticCategory.Error,key:\"Fallthrough_case_in_switch_7029\",message:\"Fallthrough case in switch.\"},Not_all_code_paths_return_a_value:{code:7030,category:e.DiagnosticCategory.Error,key:\"Not_all_code_paths_return_a_value_7030\",message:\"Not all code paths return a value.\"},Binding_element_0_implicitly_has_an_1_type:{code:7031,category:e.DiagnosticCategory.Error,key:\"Binding_element_0_implicitly_has_an_1_type_7031\",message:\"Binding element '{0}' implicitly has an '{1}' type.\"},Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation:{code:7032,category:e.DiagnosticCategory.Error,key:\"Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032\",message:\"Property '{0}' implicitly has type 'any', because its set accessor lacks a parameter type annotation.\"},Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation:{code:7033,category:e.DiagnosticCategory.Error,key:\"Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033\",message:\"Property '{0}' implicitly has type 'any', because its get accessor lacks a return type annotation.\"},Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined:{code:7034,category:e.DiagnosticCategory.Error,key:\"Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034\",message:\"Variable '{0}' implicitly has type '{1}' in some locations where its type cannot be determined.\"},Try_npm_install_types_Slash_0_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare_module_0:{code:7035,category:e.DiagnosticCategory.Error,key:\"Try_npm_install_types_Slash_0_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare_mod_7035\",message:\"Try `npm install @types/{0}` if it exists or add a new declaration (.d.ts) file containing `declare module '{0}';`\"},Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0:{code:7036,category:e.DiagnosticCategory.Error,key:\"Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036\",message:\"Dynamic import's specifier must be of type 'string', but here has type '{0}'.\"},You_cannot_rename_this_element:{code:8e3,category:e.DiagnosticCategory.Error,key:\"You_cannot_rename_this_element_8000\",message:\"You cannot rename this element.\"},You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library:{code:8001,category:e.DiagnosticCategory.Error,key:\"You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001\",message:\"You cannot rename elements that are defined in the standard TypeScript library.\"},import_can_only_be_used_in_a_ts_file:{code:8002,category:e.DiagnosticCategory.Error,key:\"import_can_only_be_used_in_a_ts_file_8002\",message:\"'import ... =' can only be used in a .ts file.\"},export_can_only_be_used_in_a_ts_file:{code:8003,category:e.DiagnosticCategory.Error,key:\"export_can_only_be_used_in_a_ts_file_8003\",message:\"'export=' can only be used in a .ts file.\"},type_parameter_declarations_can_only_be_used_in_a_ts_file:{code:8004,category:e.DiagnosticCategory.Error,key:\"type_parameter_declarations_can_only_be_used_in_a_ts_file_8004\",message:\"'type parameter declarations' can only be used in a .ts file.\"},implements_clauses_can_only_be_used_in_a_ts_file:{code:8005,category:e.DiagnosticCategory.Error,key:\"implements_clauses_can_only_be_used_in_a_ts_file_8005\",message:\"'implements clauses' can only be used in a .ts file.\"},interface_declarations_can_only_be_used_in_a_ts_file:{code:8006,category:e.DiagnosticCategory.Error,key:\"interface_declarations_can_only_be_used_in_a_ts_file_8006\",message:\"'interface declarations' can only be used in a .ts file.\"},module_declarations_can_only_be_used_in_a_ts_file:{code:8007,category:e.DiagnosticCategory.Error,key:\"module_declarations_can_only_be_used_in_a_ts_file_8007\",message:\"'module declarations' can only be used in a .ts file.\"},type_aliases_can_only_be_used_in_a_ts_file:{code:8008,category:e.DiagnosticCategory.Error,key:\"type_aliases_can_only_be_used_in_a_ts_file_8008\",message:\"'type aliases' can only be used in a .ts file.\"},_0_can_only_be_used_in_a_ts_file:{code:8009,category:e.DiagnosticCategory.Error,key:\"_0_can_only_be_used_in_a_ts_file_8009\",message:\"'{0}' can only be used in a .ts file.\"},types_can_only_be_used_in_a_ts_file:{code:8010,category:e.DiagnosticCategory.Error,key:\"types_can_only_be_used_in_a_ts_file_8010\",message:\"'types' can only be used in a .ts file.\"},type_arguments_can_only_be_used_in_a_ts_file:{code:8011,category:e.DiagnosticCategory.Error,key:\"type_arguments_can_only_be_used_in_a_ts_file_8011\",message:\"'type arguments' can only be used in a .ts file.\"},parameter_modifiers_can_only_be_used_in_a_ts_file:{code:8012,category:e.DiagnosticCategory.Error,key:\"parameter_modifiers_can_only_be_used_in_a_ts_file_8012\",message:\"'parameter modifiers' can only be used in a .ts file.\"},enum_declarations_can_only_be_used_in_a_ts_file:{code:8015,category:e.DiagnosticCategory.Error,key:\"enum_declarations_can_only_be_used_in_a_ts_file_8015\",message:\"'enum declarations' can only be used in a .ts file.\"},type_assertion_expressions_can_only_be_used_in_a_ts_file:{code:8016,category:e.DiagnosticCategory.Error,key:\"type_assertion_expressions_can_only_be_used_in_a_ts_file_8016\",message:\"'type assertion expressions' can only be used in a .ts file.\"},Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_class_extends_clause:{code:9002,category:e.DiagnosticCategory.Error,key:\"Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_clas_9002\",message:\"Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clause.\"},class_expressions_are_not_currently_supported:{code:9003,category:e.DiagnosticCategory.Error,key:\"class_expressions_are_not_currently_supported_9003\",message:\"'class' expressions are not currently supported.\"},Language_service_is_disabled:{code:9004,category:e.DiagnosticCategory.Error,key:\"Language_service_is_disabled_9004\",message:\"Language service is disabled.\"},JSX_attributes_must_only_be_assigned_a_non_empty_expression:{code:17e3,category:e.DiagnosticCategory.Error,key:\"JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000\",message:\"JSX attributes must only be assigned a non-empty 'expression'.\"},JSX_elements_cannot_have_multiple_attributes_with_the_same_name:{code:17001,category:e.DiagnosticCategory.Error,key:\"JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001\",message:\"JSX elements cannot have multiple attributes with the same name.\"},Expected_corresponding_JSX_closing_tag_for_0:{code:17002,category:e.DiagnosticCategory.Error,key:\"Expected_corresponding_JSX_closing_tag_for_0_17002\",message:\"Expected corresponding JSX closing tag for '{0}'.\"},JSX_attribute_expected:{code:17003,category:e.DiagnosticCategory.Error,key:\"JSX_attribute_expected_17003\",message:\"JSX attribute expected.\"},Cannot_use_JSX_unless_the_jsx_flag_is_provided:{code:17004,category:e.DiagnosticCategory.Error,key:\"Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004\",message:\"Cannot use JSX unless the '--jsx' flag is provided.\"},A_constructor_cannot_contain_a_super_call_when_its_class_extends_null:{code:17005,category:e.DiagnosticCategory.Error,key:\"A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005\",message:\"A constructor cannot contain a 'super' call when its class extends 'null'.\"},An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses:{code:17006,category:e.DiagnosticCategory.Error,key:\"An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006\",message:\"An unary expression with the '{0}' operator is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses.\"},A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses:{code:17007,category:e.DiagnosticCategory.Error,key:\"A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007\",message:\"A type assertion expression is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses.\"},JSX_element_0_has_no_corresponding_closing_tag:{code:17008,category:e.DiagnosticCategory.Error,key:\"JSX_element_0_has_no_corresponding_closing_tag_17008\",message:\"JSX element '{0}' has no corresponding closing tag.\"},super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class:{code:17009,category:e.DiagnosticCategory.Error,key:\"super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009\",message:\"'super' must be called before accessing 'this' in the constructor of a derived class.\"},Unknown_type_acquisition_option_0:{code:17010,category:e.DiagnosticCategory.Error,key:\"Unknown_type_acquisition_option_0_17010\",message:\"Unknown type acquisition option '{0}'.\"},super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class:{code:17011,category:e.DiagnosticCategory.Error,key:\"super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011\",message:\"'super' must be called before accessing a property of 'super' in the constructor of a derived class.\"},_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2:{code:17012,category:e.DiagnosticCategory.Error,key:\"_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012\",message:\"'{0}' is not a valid meta-property for keyword '{1}'. Did you mean '{2}'?\"},Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constructor:{code:17013,category:e.DiagnosticCategory.Error,key:\"Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013\",message:\"Meta-property '{0}' is only allowed in the body of a function declaration, function expression, or constructor.\"},Circularity_detected_while_resolving_configuration_Colon_0:{code:18e3,category:e.DiagnosticCategory.Error,key:\"Circularity_detected_while_resolving_configuration_Colon_0_18000\",message:\"Circularity detected while resolving configuration: {0}\"},A_path_in_an_extends_option_must_be_relative_or_rooted_but_0_is_not:{code:18001,category:e.DiagnosticCategory.Error,key:\"A_path_in_an_extends_option_must_be_relative_or_rooted_but_0_is_not_18001\",message:\"A path in an 'extends' option must be relative or rooted, but '{0}' is not.\"},The_files_list_in_config_file_0_is_empty:{code:18002,category:e.DiagnosticCategory.Error,key:\"The_files_list_in_config_file_0_is_empty_18002\",message:\"The 'files' list in config file '{0}' is empty.\"},No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2:{code:18003,category:e.DiagnosticCategory.Error,key:\"No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003\",message:\"No inputs were found in config file '{0}'. Specified 'include' paths were '{1}' and 'exclude' paths were '{2}'.\"},Add_missing_super_call:{code:90001,category:e.DiagnosticCategory.Message,key:\"Add_missing_super_call_90001\",message:\"Add missing 'super()' call.\"},Make_super_call_the_first_statement_in_the_constructor:{code:90002,category:e.DiagnosticCategory.Message,key:\"Make_super_call_the_first_statement_in_the_constructor_90002\",message:\"Make 'super()' call the first statement in the constructor.\"},Change_extends_to_implements:{code:90003,category:e.DiagnosticCategory.Message,key:\"Change_extends_to_implements_90003\",message:\"Change 'extends' to 'implements'.\"},Remove_declaration_for_Colon_0:{code:90004,category:e.DiagnosticCategory.Message,key:\"Remove_declaration_for_Colon_0_90004\",message:\"Remove declaration for: '{0}'.\"},Implement_interface_0:{code:90006,category:e.DiagnosticCategory.Message,key:\"Implement_interface_0_90006\",message:\"Implement interface '{0}'.\"},Implement_inherited_abstract_class:{code:90007,category:e.DiagnosticCategory.Message,key:\"Implement_inherited_abstract_class_90007\",message:\"Implement inherited abstract class.\"},Add_this_to_unresolved_variable:{code:90008,category:e.DiagnosticCategory.Message,key:\"Add_this_to_unresolved_variable_90008\",message:\"Add 'this.' to unresolved variable.\"},Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript_files_Learn_more_at_https_Colon_Slash_Slashaka_ms_Slashtsconfig:{code:90009,category:e.DiagnosticCategory.Error,key:\"Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__90009\",message:\"Adding a tsconfig.json file will help organize projects that contain both TypeScript and JavaScript files. Learn more at https://aka.ms/tsconfig.\"},Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated:{code:90010,category:e.DiagnosticCategory.Error,key:\"Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_90010\",message:\"Type '{0}' is not assignable to type '{1}'. Two different types with this name exist, but they are unrelated.\"},Import_0_from_1:{code:90013,category:e.DiagnosticCategory.Message,key:\"Import_0_from_1_90013\",message:\"Import {0} from {1}.\"},Change_0_to_1:{code:90014,category:e.DiagnosticCategory.Message,key:\"Change_0_to_1_90014\",message:\"Change {0} to {1}.\"},Add_0_to_existing_import_declaration_from_1:{code:90015,category:e.DiagnosticCategory.Message,key:\"Add_0_to_existing_import_declaration_from_1_90015\",message:\"Add {0} to existing import declaration from {1}.\"},Declare_property_0:{code:90016,category:e.DiagnosticCategory.Message,key:\"Declare_property_0_90016\",message:\"Declare property '{0}'.\"},Add_index_signature_for_property_0:{code:90017,category:e.DiagnosticCategory.Message,key:\"Add_index_signature_for_property_0_90017\",message:\"Add index signature for property '{0}'.\"},Disable_checking_for_this_file:{code:90018,category:e.DiagnosticCategory.Message,key:\"Disable_checking_for_this_file_90018\",message:\"Disable checking for this file.\"},Ignore_this_error_message:{code:90019,category:e.DiagnosticCategory.Message,key:\"Ignore_this_error_message_90019\",message:\"Ignore this error message.\"},Initialize_property_0_in_the_constructor:{code:90020,category:e.DiagnosticCategory.Message,key:\"Initialize_property_0_in_the_constructor_90020\",message:\"Initialize property '{0}' in the constructor.\"},Initialize_static_property_0:{code:90021,category:e.DiagnosticCategory.Message,key:\"Initialize_static_property_0_90021\",message:\"Initialize static property '{0}'.\"},Change_spelling_to_0:{code:90022,category:e.DiagnosticCategory.Message,key:\"Change_spelling_to_0_90022\",message:\"Change spelling to '{0}'.\"},Declare_method_0:{code:90023,category:e.DiagnosticCategory.Message,key:\"Declare_method_0_90023\",message:\"Declare method '{0}'.\"},Declare_static_method_0:{code:90024,category:e.DiagnosticCategory.Message,key:\"Declare_static_method_0_90024\",message:\"Declare static method '{0}'.\"},Prefix_0_with_an_underscore:{code:90025,category:e.DiagnosticCategory.Message,key:\"Prefix_0_with_an_underscore_90025\",message:\"Prefix '{0}' with an underscore.\"},Convert_function_to_an_ES2015_class:{code:95001,category:e.DiagnosticCategory.Message,key:\"Convert_function_to_an_ES2015_class_95001\",message:\"Convert function to an ES2015 class\"},Convert_function_0_to_class:{code:95002,category:e.DiagnosticCategory.Message,key:\"Convert_function_0_to_class_95002\",message:\"Convert function '{0}' to class\"},Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0:{code:8017,category:e.DiagnosticCategory.Error,key:\"Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0_8017\",message:\"Octal literal types must use ES2015 syntax. Use the syntax '{0}'.\"},Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0:{code:8018,category:e.DiagnosticCategory.Error,key:\"Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0_8018\",message:\"Octal literals are not allowed in enums members initializer. Use the syntax '{0}'.\"},Report_errors_in_js_files:{code:8019,category:e.DiagnosticCategory.Message,key:\"Report_errors_in_js_files_8019\",message:\"Report errors in .js files.\"}};}(r||(r={}));!function(e){function t(e){return e>=71}function n(e,t){if(e<t[0])return!1;for(var n,r=0,a=t.length;r+1<a;){if(n=r+(a-r)/2,n-=n%2,t[n]<=e&&e<=t[n+1])return!0;e<t[n]?a=n:r=n+2;}return!1}function r(e,t){return t>=1?n(e,j):n(e,B)}function a(e,t){return t>=1?n(e,J):n(e,K)}function i(e){return z[e]}function o(e){return L.get(e)}function s(e){for(var t=new Array,n=0,r=0;n<e.length;){var a=e.charCodeAt(n);switch(n++,a){case 13:10===e.charCodeAt(n)&&n++;case 10:t.push(r),r=n;break;default:a>127&&g(a)&&(t.push(r),r=n);}}return t.push(r),t}function c(e,t,n){return u(l(e),t,n)}function u(t,n,r){return e.Debug.assert(n>=0&&n<t.length),t[n]+r}function l(e){return e.lineMap||(e.lineMap=s(e.text))}function _(t,n){var r=e.binarySearch(t,n);return r<0&&(r=~r-1,e.Debug.assert(-1!==r,\"position cannot precede the beginning of the file\")),{line:r,character:n-t[r]}}function d(e,t){return _(l(e),t)}function p(e){return f(e)||g(e)}function f(e){return 32===e||9===e||11===e||12===e||160===e||133===e||5760===e||e>=8192&&e<=8203||8239===e||8287===e||12288===e||65279===e}function g(e){return 10===e||13===e||8232===e||8233===e}function m(e){return e>=48&&e<=57}function y(e){return e>=48&&e<=55}function h(e,t){var n=e.charCodeAt(t);switch(n){case 13:case 10:case 9:case 11:case 12:case 32:case 47:case 60:case 124:case 61:case 62:return!0;case 35:return 0===t;default:return n>127}}function v(t,n,r,a){if(void 0===a&&(a=!1),e.positionIsSynthesized(n))return n;for(;;){var i=t.charCodeAt(n);switch(i){case 13:10===t.charCodeAt(n+1)&&n++;case 10:if(n++,r)return n;continue;case 9:case 11:case 12:case 32:n++;continue;case 47:if(a)break;if(47===t.charCodeAt(n+1)){for(n+=2;n<t.length&&!g(t.charCodeAt(n));)n++;continue}if(42===t.charCodeAt(n+1)){for(n+=2;n<t.length;){if(42===t.charCodeAt(n)&&47===t.charCodeAt(n+1)){n+=2;break}n++;}continue}break;case 60:case 124:case 61:case 62:if(b(t,n)){n=x(t,n);continue}break;case 35:if(0===n&&k(t,n)){n=S(t,n);continue}break;default:if(i>127&&p(i)){n++;continue}}return n}}function b(t,n){if(e.Debug.assert(n>=0),0===n||g(t.charCodeAt(n-1))){var r=t.charCodeAt(n);if(n+U<t.length){for(var a=0;a<U;a++)if(t.charCodeAt(n+a)!==r)return!1;return 61===r||32===t.charCodeAt(n+U)}}return!1}function x(t,n,r){r&&r(e.Diagnostics.Merge_conflict_marker_encountered,U);var a=t.charCodeAt(n),i=t.length;if(60===a||62===a)for(;n<i&&!g(t.charCodeAt(n));)n++;else for(e.Debug.assert(124===a||61===a);n<i;){var o=t.charCodeAt(n);if((61===o||62===o)&&o!==a&&b(t,n))break;n++;}return n}function k(t,n){return e.Debug.assert(0===n),q.test(t)}function S(e,t){return t+=q.exec(e)[0].length}function T(e,t,n,r,a,i,o){var s,c,u,l,_=!1,d=r||0===n,f=o;e:for(;n>=0&&n<t.length;){var m=t.charCodeAt(n);switch(m){case 13:10===t.charCodeAt(n+1)&&n++;case 10:if(n++,r)break e;d=!0,_&&(l=!0);continue;case 9:case 11:case 12:case 32:n++;continue;case 47:var y=t.charCodeAt(n+1),h=!1;if(47===y||42===y){var v=47===y?2:3,b=n;if(n+=2,47===y)for(;n<t.length;){if(g(t.charCodeAt(n))){h=!0;break}n++;}else for(;n<t.length;){if(42===t.charCodeAt(n)&&47===t.charCodeAt(n+1)){n+=2;break}n++;}if(d){if(_){if(f=a(s,c,u,l,i,f),!e&&f)return f;_=!1;}s=b,c=n,u=v,l=h,_=!0;}continue}break e;default:if(m>127&&p(m)){_&&g(m)&&(l=!0),n++;continue}break e}}return _&&(f=a(s,c,u,l,i,f)),f}function C(e,t,n,r){return T(!1,e,t,!1,n,r)}function D(e,t,n,r){return T(!1,e,t,!0,n,r)}function E(e,t,n,r,a){return T(!0,e,t,!1,n,r,a)}function N(e,t,n,r,a){return T(!0,e,t,!0,n,r,a)}function A(e,t,n,r,a,i){return i||(i=[]),i.push({kind:n,pos:e,end:t,hasTrailingNewLine:r}),i}function w(e,t){return E(e,t,A,void 0,void 0)}function P(e,t){return N(e,t,A,void 0,void 0)}function O(e){var t=q.exec(e);if(t)return t[0]}function F(e,t){return e>=65&&e<=90||e>=97&&e<=122||36===e||95===e||e>127&&r(e,t)}function I(e,t){return e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||36===e||95===e||e>127&&a(e,t)}function M(e,t){if(!F(e.charCodeAt(0),t))return!1;for(var n=1;n<e.length;n++)if(!I(e.charCodeAt(n),t))return!1;return!0}function R(n,r,a,i,o,s,c){function u(e,t){o&&o(e,t||0);}function l(){for(var t=ne;m(i.charCodeAt(ne));)ne++;if(46===i.charCodeAt(ne))for(ne++;m(i.charCodeAt(ne));)ne++;var n=ne;if(69===i.charCodeAt(ne)||101===i.charCodeAt(ne))if(ne++,_e=2,43!==i.charCodeAt(ne)&&45!==i.charCodeAt(ne)||ne++,m(i.charCodeAt(ne))){for(ne++;m(i.charCodeAt(ne));)ne++;n=ne;}else u(e.Diagnostics.Digit_expected);return\"\"+ +i.substring(t,n)}function _(){for(var e=ne;y(i.charCodeAt(ne));)ne++;return+i.substring(e,ne)}function d(e){return v(e,!1)}function h(e){return v(e,!0)}function v(e,t){for(var n=0,r=0;n<e||t;){var a=i.charCodeAt(ne);if(a>=48&&a<=57)r=16*r+a-48;else if(a>=65&&a<=70)r=16*r+a-65+10;else{if(!(a>=97&&a<=102))break;r=16*r+a-97+10;}ne++,n++;}return n<e&&(r=-1),r}function T(t){void 0===t&&(t=!0);for(var n=i.charCodeAt(ne),r=\"\",a=++ne;;){if(ne>=re){r+=i.substring(a,ne),le=!0,u(e.Diagnostics.Unterminated_string_literal);break}var o=i.charCodeAt(ne);if(o===n){r+=i.substring(a,ne),ne++;break}if(92===o&&t)r+=i.substring(a,ne),r+=D(),a=ne;else{if(g(o)){r+=i.substring(a,ne),le=!0,u(e.Diagnostics.Unterminated_string_literal);break}ne++;}}return r}function C(){for(var t,n=96===i.charCodeAt(ne),r=++ne,a=\"\";;){if(ne>=re){a+=i.substring(r,ne),le=!0,u(e.Diagnostics.Unterminated_template_literal),t=n?13:16;break}var o=i.charCodeAt(ne);if(96===o){a+=i.substring(r,ne),ne++,t=n?13:16;break}if(36===o&&ne+1<re&&123===i.charCodeAt(ne+1)){a+=i.substring(r,ne),ne+=2,t=n?14:15;break}92!==o?13!==o?ne++:(a+=i.substring(r,ne),++ne<re&&10===i.charCodeAt(ne)&&ne++,a+=\"\\n\",r=ne):(a+=i.substring(r,ne),a+=D(),r=ne);}return e.Debug.assert(void 0!==t),se=a,t}function D(){if(++ne>=re)return u(e.Diagnostics.Unexpected_end_of_text),\"\";var t=i.charCodeAt(ne);switch(ne++,t){case 48:return\"\\0\";case 98:return\"\\b\";case 116:return\"\\t\";case 110:return\"\\n\";case 118:return\"\\v\";case 102:return\"\\f\";case 114:return\"\\r\";case 39:return\"'\";case 34:return'\"';case 117:return ne<re&&123===i.charCodeAt(ne)?(ue=!0,ne++,N()):E(4);case 120:return E(2);case 13:ne<re&&10===i.charCodeAt(ne)&&ne++;case 10:case 8232:case 8233:return\"\";default:return String.fromCharCode(t)}}function E(t){var n=d(t);return n>=0?String.fromCharCode(n):(u(e.Diagnostics.Hexadecimal_digit_expected),\"\")}function N(){var t=h(1),n=!1;return t<0?(u(e.Diagnostics.Hexadecimal_digit_expected),n=!0):t>1114111&&(u(e.Diagnostics.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive),n=!0),ne>=re?(u(e.Diagnostics.Unexpected_end_of_text),n=!0):125===i.charCodeAt(ne)?ne++:(u(e.Diagnostics.Unterminated_Unicode_escape_sequence),n=!0),n?\"\":A(t)}function A(t){if(e.Debug.assert(0<=t&&t<=1114111),t<=65535)return String.fromCharCode(t);var n=Math.floor((t-65536)/1024)+55296,r=(t-65536)%1024+56320;return String.fromCharCode(n,r)}function w(){if(ne+5<re&&117===i.charCodeAt(ne+1)){var e=ne;ne+=2;var t=d(4);return ne=e,t}return-1}function P(){for(var e=\"\",t=ne;ne<re;){var r=i.charCodeAt(ne);if(I(r,n))ne++;else{if(92!==r)break;if(!((r=w())>=0&&I(r,n)))break;e+=i.substring(t,ne),e+=String.fromCharCode(r),t=ne+=6;}}return e+=i.substring(t,ne)}function O(){var e=se.length;if(e>=2&&e<=11){var t=se.charCodeAt(0);if(t>=97&&t<=122&&void 0!==(oe=L.get(se)))return oe}return oe=71}function M(t){e.Debug.assert(2===t||8===t,\"Expected either base 2 or base 8\");for(var n=0,r=0;;){var a=i.charCodeAt(ne),o=a-48;if(!m(a)||o>=t)break;n=n*t+o,ne++,r++;}return 0===r?-1:n}function R(){for(ae=ne,ue=!1,ce=!1,le=!1,_e=0;;){if(ie=ne,ne>=re)return oe=1;var t=i.charCodeAt(ne);if(35===t&&0===ne&&k(i,ne)){if(ne=S(i,ne),r)continue;return oe=6}switch(t){case 10:case 13:if(ce=!0,r){ne++;continue}return 13===t&&ne+1<re&&10===i.charCodeAt(ne+1)?ne+=2:ne++,oe=4;case 9:case 11:case 12:case 32:if(r){ne++;continue}for(;ne<re&&f(i.charCodeAt(ne));)ne++;return oe=5;case 33:return 61===i.charCodeAt(ne+1)?61===i.charCodeAt(ne+2)?(ne+=3,oe=35):(ne+=2,oe=33):(ne++,oe=51);case 34:case 39:return se=T(),oe=9;case 96:return oe=C();case 37:return 61===i.charCodeAt(ne+1)?(ne+=2,oe=64):(ne++,oe=42);case 38:return 38===i.charCodeAt(ne+1)?(ne+=2,oe=53):61===i.charCodeAt(ne+1)?(ne+=2,oe=68):(ne++,oe=48);case 40:return ne++,oe=19;case 41:return ne++,oe=20;case 42:return 61===i.charCodeAt(ne+1)?(ne+=2,oe=61):42===i.charCodeAt(ne+1)?61===i.charCodeAt(ne+2)?(ne+=3,oe=62):(ne+=2,oe=40):(ne++,oe=39);case 43:return 43===i.charCodeAt(ne+1)?(ne+=2,oe=43):61===i.charCodeAt(ne+1)?(ne+=2,oe=59):(ne++,oe=37);case 44:return ne++,oe=26;case 45:return 45===i.charCodeAt(ne+1)?(ne+=2,oe=44):61===i.charCodeAt(ne+1)?(ne+=2,oe=60):(ne++,oe=38);case 46:return m(i.charCodeAt(ne+1))?(se=l(),oe=8):46===i.charCodeAt(ne+1)&&46===i.charCodeAt(ne+2)?(ne+=3,oe=24):(ne++,oe=23);case 47:if(47===i.charCodeAt(ne+1)){for(ne+=2;ne<re&&!g(i.charCodeAt(ne));)ne++;if(r)continue;return oe=2}if(42===i.charCodeAt(ne+1)){ne+=2;for(var o=!1;ne<re;){var s=i.charCodeAt(ne);if(42===s&&47===i.charCodeAt(ne+1)){ne+=2,o=!0;break}g(s)&&(ce=!0),ne++;}if(o||u(e.Diagnostics.Asterisk_Slash_expected),r)continue;return le=!o,oe=3}return 61===i.charCodeAt(ne+1)?(ne+=2,oe=63):(ne++,oe=41);case 48:if(ne+2<re&&(88===i.charCodeAt(ne+1)||120===i.charCodeAt(ne+1)))return ne+=2,(c=h(1))<0&&(u(e.Diagnostics.Hexadecimal_digit_expected),c=0),se=\"\"+c,_e=8,oe=8;if(ne+2<re&&(66===i.charCodeAt(ne+1)||98===i.charCodeAt(ne+1)))return ne+=2,(c=M(2))<0&&(u(e.Diagnostics.Binary_digit_expected),c=0),se=\"\"+c,_e=16,oe=8;if(ne+2<re&&(79===i.charCodeAt(ne+1)||111===i.charCodeAt(ne+1))){ne+=2;var c=M(8);return c<0&&(u(e.Diagnostics.Octal_digit_expected),c=0),se=\"\"+c,_e=32,oe=8}if(ne+1<re&&y(i.charCodeAt(ne+1)))return se=\"\"+_(),_e=4,oe=8;case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return se=l(),oe=8;case 58:return ne++,oe=56;case 59:return ne++,oe=25;case 60:if(b(i,ne)){if(ne=x(i,ne,u),r)continue;return oe=7}return 60===i.charCodeAt(ne+1)?61===i.charCodeAt(ne+2)?(ne+=3,oe=65):(ne+=2,oe=45):61===i.charCodeAt(ne+1)?(ne+=2,oe=30):1===a&&47===i.charCodeAt(ne+1)&&42!==i.charCodeAt(ne+2)?(ne+=2,oe=28):(ne++,oe=27);case 61:if(b(i,ne)){if(ne=x(i,ne,u),r)continue;return oe=7}return 61===i.charCodeAt(ne+1)?61===i.charCodeAt(ne+2)?(ne+=3,oe=34):(ne+=2,oe=32):62===i.charCodeAt(ne+1)?(ne+=2,oe=36):(ne++,oe=58);case 62:if(b(i,ne)){if(ne=x(i,ne,u),r)continue;return oe=7}return ne++,oe=29;case 63:return ne++,oe=55;case 91:return ne++,oe=21;case 93:return ne++,oe=22;case 94:return 61===i.charCodeAt(ne+1)?(ne+=2,oe=70):(ne++,oe=50);case 123:return ne++,oe=17;case 124:if(b(i,ne)){if(ne=x(i,ne,u),r)continue;return oe=7}return 124===i.charCodeAt(ne+1)?(ne+=2,oe=54):61===i.charCodeAt(ne+1)?(ne+=2,oe=69):(ne++,oe=49);case 125:return ne++,oe=18;case 126:return ne++,oe=52;case 64:return ne++,oe=57;case 92:var d=w();return d>=0&&F(d,n)?(ne+=6,se=String.fromCharCode(d)+P(),oe=O()):(u(e.Diagnostics.Invalid_character),ne++,oe=0);default:if(F(t,n)){for(ne++;ne<re&&I(t=i.charCodeAt(ne),n);)ne++;return se=i.substring(ie,ne),92===t&&(se+=P()),oe=O()}if(f(t)){ne++;continue}if(g(t)){ce=!0,ne++;continue}return u(e.Diagnostics.Invalid_character),ne++,oe=0}}}function B(){if(29===oe){if(62===i.charCodeAt(ne))return 62===i.charCodeAt(ne+1)?61===i.charCodeAt(ne+2)?(ne+=3,oe=67):(ne+=2,oe=47):61===i.charCodeAt(ne+1)?(ne+=2,oe=66):(ne++,oe=46);if(61===i.charCodeAt(ne))return ne++,oe=31}return oe}function K(){if(41===oe||63===oe){for(var t=ie+1,r=!1,a=!1;;){if(t>=re){le=!0,u(e.Diagnostics.Unterminated_regular_expression_literal);break}var o=i.charCodeAt(t);if(g(o)){le=!0,u(e.Diagnostics.Unterminated_regular_expression_literal);break}if(r)r=!1;else{if(47===o&&!a){t++;break}91===o?a=!0:92===o?r=!0:93===o&&(a=!1);}t++;}for(;t<re&&I(i.charCodeAt(t),n);)t++;ne=t,se=i.substring(ie,ne),oe=12;}return oe}function j(){return e.Debug.assert(18===oe,\"'reScanTemplateToken' should only be called on a '}'\"),ne=ie,oe=C()}function J(){return ne=ie=ae,oe=z()}function z(){if(ae=ie=ne,ne>=re)return oe=1;var e=i.charCodeAt(ne);if(60===e)return 47===i.charCodeAt(ne+1)?(ne+=2,oe=28):(ne++,oe=27);if(123===e)return ne++,oe=17;for(var t=0;ne<re&&123!==(e=i.charCodeAt(ne));){if(60===e){if(b(i,ne))return ne=x(i,ne,u),oe=7;break}g(e)&&0===t?t=-1:p(e)||(t=ne),ne++;}return-1===t?11:10}function U(){if(t(oe)){for(var e=ne;ne<re;){var r=i.charCodeAt(ne);if(45!==r&&(e===ne?!F(r,n):!I(r,n)))break;ne++;}se+=i.substr(e,ne-e);}return oe}function q(){switch(ae=ne,i.charCodeAt(ne)){case 34:case 39:return se=T(!1),oe=9;default:return R()}}function V(){if(ne>=re)return oe=1;ae=ne,ie=ne;var e=i.charCodeAt(ne);switch(e){case 9:case 11:case 12:case 32:for(;ne<re&&f(i.charCodeAt(ne));)ne++;return oe=5;case 64:return ne++,oe=57;case 10:case 13:return ne++,oe=4;case 42:return ne++,oe=39;case 123:return ne++,oe=17;case 125:return ne++,oe=18;case 91:return ne++,oe=21;case 93:return ne++,oe=22;case 61:return ne++,oe=58;case 44:return ne++,oe=26;case 46:return ne++,oe=23}if(F(e,5)){for(ne++;I(i.charCodeAt(ne),5)&&ne<re;)ne++;return oe=71}return ne+=1,oe=0}function $(e,t){var n=ne,r=ae,a=ie,i=oe,o=se,s=ce,c=e();return c&&!t||(ne=n,ae=r,ie=a,oe=i,se=o,ce=s),c}function W(e,t,n){var r=re,a=ne,o=ae,s=ie,c=oe,u=ce,l=se,_=ue,d=le;Y(i,e,t);var p=n();return re=r,ne=a,ae=o,ie=s,oe=c,ce=u,se=l,ue=_,le=d,p}function H(e){return $(e,!0)}function G(e){return $(e,!1)}function X(){return i}function Y(e,t,n){i=e||\"\",re=void 0===n?i.length:t+n,te(t||0);}function Q(e){o=e;}function Z(e){n=e;}function ee(e){a=e;}function te(t){e.Debug.assert(t>=0),ne=t,ae=t,ie=t,oe=0,ce=!1,se=void 0,ue=!1,le=!1;}void 0===a&&(a=0);var ne,re,ae,ie,oe,se,ce,ue,le,_e;return Y(i,s,c),{getStartPos:function(){return ae},getTextPos:function(){return ne},getToken:function(){return oe},getTokenPos:function(){return ie},getTokenText:function(){return i.substring(ie,ne)},getTokenValue:function(){return se},hasExtendedUnicodeEscape:function(){return ue},hasPrecedingLineBreak:function(){return ce},isIdentifier:function(){return 71===oe||oe>107},isReservedWord:function(){return oe>=72&&oe<=107},isUnterminated:function(){return le},getNumericLiteralFlags:function(){return _e},reScanGreaterToken:B,reScanSlashToken:K,reScanTemplateToken:j,scanJsxIdentifier:U,scanJsxAttributeValue:q,reScanJsxToken:J,scanJsxToken:z,scanJSDocToken:V,scan:R,getText:X,setText:Y,setScriptTarget:Z,setLanguageVariant:ee,setOnError:Q,setTextPos:te,tryScan:G,lookAhead:H,scanRange:W}}e.tokenIsIdentifierOrKeyword=t;var L=e.createMapFromTemplate({abstract:117,any:119,as:118,boolean:122,break:72,case:73,catch:74,class:75,continue:77,const:76,constructor:123,debugger:78,declare:124,default:79,delete:80,do:81,else:82,enum:83,export:84,extends:85,false:86,finally:87,for:88,from:140,function:89,get:125,if:90,implements:108,import:91,in:92,instanceof:93,interface:109,is:126,keyof:127,let:110,module:128,namespace:129,never:130,new:94,null:95,number:133,object:134,package:111,private:112,protected:113,public:114,readonly:131,require:132,global:141,return:96,set:135,static:115,string:136,super:97,switch:98,symbol:137,this:99,throw:100,true:101,try:102,type:138,typeof:103,undefined:139,var:104,void:105,while:106,with:107,yield:116,async:120,await:121,of:142,\"{\":17,\"}\":18,\"(\":19,\")\":20,\"[\":21,\"]\":22,\".\":23,\"...\":24,\";\":25,\",\":26,\"<\":27,\">\":29,\"<=\":30,\">=\":31,\"==\":32,\"!=\":33,\"===\":34,\"!==\":35,\"=>\":36,\"+\":37,\"-\":38,\"**\":40,\"*\":39,\"/\":41,\"%\":42,\"++\":43,\"--\":44,\"<<\":45,\"</\":28,\">>\":46,\">>>\":47,\"&\":48,\"|\":49,\"^\":50,\"!\":51,\"~\":52,\"&&\":53,\"||\":54,\"?\":55,\":\":56,\"=\":58,\"+=\":59,\"-=\":60,\"*=\":61,\"**=\":62,\"/=\":63,\"%=\":64,\"<<=\":65,\">>=\":66,\">>>=\":67,\"&=\":68,\"|=\":69,\"^=\":70,\"@\":57}),B=[170,170,181,181,186,186,192,214,216,246,248,543,546,563,592,685,688,696,699,705,720,721,736,740,750,750,890,890,902,902,904,906,908,908,910,929,931,974,976,983,986,1011,1024,1153,1164,1220,1223,1224,1227,1228,1232,1269,1272,1273,1329,1366,1369,1369,1377,1415,1488,1514,1520,1522,1569,1594,1600,1610,1649,1747,1749,1749,1765,1766,1786,1788,1808,1808,1810,1836,1920,1957,2309,2361,2365,2365,2384,2384,2392,2401,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2524,2525,2527,2529,2544,2545,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654,2674,2676,2693,2699,2701,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2749,2768,2768,2784,2784,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2870,2873,2877,2877,2908,2909,2911,2913,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,2997,2999,3001,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3168,3169,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3294,3294,3296,3297,3333,3340,3342,3344,3346,3368,3370,3385,3424,3425,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3585,3632,3634,3635,3648,3654,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3760,3762,3763,3773,3773,3776,3780,3782,3782,3804,3805,3840,3840,3904,3911,3913,3946,3976,3979,4096,4129,4131,4135,4137,4138,4176,4181,4256,4293,4304,4342,4352,4441,4447,4514,4520,4601,4608,4614,4616,4678,4680,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4742,4744,4744,4746,4749,4752,4782,4784,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4814,4816,4822,4824,4846,4848,4878,4880,4880,4882,4885,4888,4894,4896,4934,4936,4954,5024,5108,5121,5740,5743,5750,5761,5786,5792,5866,6016,6067,6176,6263,6272,6312,7680,7835,7840,7929,7936,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8319,8319,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8497,8499,8505,8544,8579,12293,12295,12321,12329,12337,12341,12344,12346,12353,12436,12445,12446,12449,12538,12540,12542,12549,12588,12593,12686,12704,12727,13312,19893,19968,40869,40960,42124,44032,55203,63744,64045,64256,64262,64275,64279,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65136,65138,65140,65140,65142,65276,65313,65338,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500],K=[170,170,181,181,186,186,192,214,216,246,248,543,546,563,592,685,688,696,699,705,720,721,736,740,750,750,768,846,864,866,890,890,902,902,904,906,908,908,910,929,931,974,976,983,986,1011,1024,1153,1155,1158,1164,1220,1223,1224,1227,1228,1232,1269,1272,1273,1329,1366,1369,1369,1377,1415,1425,1441,1443,1465,1467,1469,1471,1471,1473,1474,1476,1476,1488,1514,1520,1522,1569,1594,1600,1621,1632,1641,1648,1747,1749,1756,1759,1768,1770,1773,1776,1788,1808,1836,1840,1866,1920,1968,2305,2307,2309,2361,2364,2381,2384,2388,2392,2403,2406,2415,2433,2435,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2492,2492,2494,2500,2503,2504,2507,2509,2519,2519,2524,2525,2527,2531,2534,2545,2562,2562,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2620,2620,2622,2626,2631,2632,2635,2637,2649,2652,2654,2654,2662,2676,2689,2691,2693,2699,2701,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2748,2757,2759,2761,2763,2765,2768,2768,2784,2784,2790,2799,2817,2819,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2870,2873,2876,2883,2887,2888,2891,2893,2902,2903,2908,2909,2911,2913,2918,2927,2946,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,2997,2999,3001,3006,3010,3014,3016,3018,3021,3031,3031,3047,3055,3073,3075,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3134,3140,3142,3144,3146,3149,3157,3158,3168,3169,3174,3183,3202,3203,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3262,3268,3270,3272,3274,3277,3285,3286,3294,3294,3296,3297,3302,3311,3330,3331,3333,3340,3342,3344,3346,3368,3370,3385,3390,3395,3398,3400,3402,3405,3415,3415,3424,3425,3430,3439,3458,3459,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3530,3530,3535,3540,3542,3542,3544,3551,3570,3571,3585,3642,3648,3662,3664,3673,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3769,3771,3773,3776,3780,3782,3782,3784,3789,3792,3801,3804,3805,3840,3840,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897,3902,3911,3913,3946,3953,3972,3974,3979,3984,3991,3993,4028,4038,4038,4096,4129,4131,4135,4137,4138,4140,4146,4150,4153,4160,4169,4176,4185,4256,4293,4304,4342,4352,4441,4447,4514,4520,4601,4608,4614,4616,4678,4680,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4742,4744,4744,4746,4749,4752,4782,4784,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4814,4816,4822,4824,4846,4848,4878,4880,4880,4882,4885,4888,4894,4896,4934,4936,4954,4969,4977,5024,5108,5121,5740,5743,5750,5761,5786,5792,5866,6016,6099,6112,6121,6160,6169,6176,6263,6272,6313,7680,7835,7840,7929,7936,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8255,8256,8319,8319,8400,8412,8417,8417,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8497,8499,8505,8544,8579,12293,12295,12321,12335,12337,12341,12344,12346,12353,12436,12441,12442,12445,12446,12449,12542,12549,12588,12593,12686,12704,12727,13312,19893,19968,40869,40960,42124,44032,55203,63744,64045,64256,64262,64275,64279,64285,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65056,65059,65075,65076,65101,65103,65136,65138,65140,65140,65142,65276,65296,65305,65313,65338,65343,65343,65345,65370,65381,65470,65474,65479,65482,65487,65490,65495,65498,65500],j=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,880,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1162,1319,1329,1366,1369,1369,1377,1415,1488,1514,1520,1522,1568,1610,1646,1647,1649,1747,1749,1749,1765,1766,1774,1775,1786,1788,1791,1791,1808,1808,1810,1839,1869,1957,1969,1969,1994,2026,2036,2037,2042,2042,2048,2069,2074,2074,2084,2084,2088,2088,2112,2136,2208,2208,2210,2220,2308,2361,2365,2365,2384,2384,2392,2401,2417,2423,2425,2431,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2493,2493,2510,2510,2524,2525,2527,2529,2544,2545,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654,2674,2676,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2749,2768,2768,2784,2785,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2877,2877,2908,2909,2911,2913,2929,2929,2947,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3024,3024,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3133,3160,3161,3168,3169,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3261,3261,3294,3294,3296,3297,3313,3314,3333,3340,3342,3344,3346,3386,3389,3389,3406,3406,3424,3425,3450,3455,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3585,3632,3634,3635,3648,3654,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3760,3762,3763,3773,3773,3776,3780,3782,3782,3804,3807,3840,3840,3904,3911,3913,3948,3976,3980,4096,4138,4159,4159,4176,4181,4186,4189,4193,4193,4197,4198,4206,4208,4213,4225,4238,4238,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5905,5920,5937,5952,5969,5984,5996,5998,6e3,6016,6067,6103,6103,6108,6108,6176,6263,6272,6312,6314,6314,6320,6389,6400,6428,6480,6509,6512,6516,6528,6571,6593,6599,6656,6678,6688,6740,6823,6823,6917,6963,6981,6987,7043,7072,7086,7087,7098,7141,7168,7203,7245,7247,7258,7293,7401,7404,7406,7409,7413,7414,7424,7615,7680,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8305,8305,8319,8319,8336,8348,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11502,11506,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11648,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11823,11823,12293,12295,12321,12329,12337,12341,12344,12348,12353,12438,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42527,42538,42539,42560,42606,42623,42647,42656,42735,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43009,43011,43013,43015,43018,43020,43042,43072,43123,43138,43187,43250,43255,43259,43259,43274,43301,43312,43334,43360,43388,43396,43442,43471,43471,43520,43560,43584,43586,43588,43595,43616,43638,43642,43642,43648,43695,43697,43697,43701,43702,43705,43709,43712,43712,43714,43714,43739,43741,43744,43754,43762,43764,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44002,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65136,65140,65142,65276,65313,65338,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500],J=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,768,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1155,1159,1162,1319,1329,1366,1369,1369,1377,1415,1425,1469,1471,1471,1473,1474,1476,1477,1479,1479,1488,1514,1520,1522,1552,1562,1568,1641,1646,1747,1749,1756,1759,1768,1770,1788,1791,1791,1808,1866,1869,1969,1984,2037,2042,2042,2048,2093,2112,2139,2208,2208,2210,2220,2276,2302,2304,2403,2406,2415,2417,2423,2425,2431,2433,2435,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2492,2500,2503,2504,2507,2510,2519,2519,2524,2525,2527,2531,2534,2545,2561,2563,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2620,2620,2622,2626,2631,2632,2635,2637,2641,2641,2649,2652,2654,2654,2662,2677,2689,2691,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2748,2757,2759,2761,2763,2765,2768,2768,2784,2787,2790,2799,2817,2819,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2876,2884,2887,2888,2891,2893,2902,2903,2908,2909,2911,2915,2918,2927,2929,2929,2946,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3006,3010,3014,3016,3018,3021,3024,3024,3031,3031,3046,3055,3073,3075,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3140,3142,3144,3146,3149,3157,3158,3160,3161,3168,3171,3174,3183,3202,3203,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3260,3268,3270,3272,3274,3277,3285,3286,3294,3294,3296,3299,3302,3311,3313,3314,3330,3331,3333,3340,3342,3344,3346,3386,3389,3396,3398,3400,3402,3406,3415,3415,3424,3427,3430,3439,3450,3455,3458,3459,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3530,3530,3535,3540,3542,3542,3544,3551,3570,3571,3585,3642,3648,3662,3664,3673,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3769,3771,3773,3776,3780,3782,3782,3784,3789,3792,3801,3804,3807,3840,3840,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897,3902,3911,3913,3948,3953,3972,3974,3991,3993,4028,4038,4038,4096,4169,4176,4253,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4957,4959,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5908,5920,5940,5952,5971,5984,5996,5998,6e3,6002,6003,6016,6099,6103,6103,6108,6109,6112,6121,6155,6157,6160,6169,6176,6263,6272,6314,6320,6389,6400,6428,6432,6443,6448,6459,6470,6509,6512,6516,6528,6571,6576,6601,6608,6617,6656,6683,6688,6750,6752,6780,6783,6793,6800,6809,6823,6823,6912,6987,6992,7001,7019,7027,7040,7155,7168,7223,7232,7241,7245,7293,7376,7378,7380,7414,7424,7654,7676,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8204,8205,8255,8256,8276,8276,8305,8305,8319,8319,8336,8348,8400,8412,8417,8417,8421,8432,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11647,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11744,11775,11823,11823,12293,12295,12321,12335,12337,12341,12344,12348,12353,12438,12441,12442,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42539,42560,42607,42612,42621,42623,42647,42655,42737,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43047,43072,43123,43136,43204,43216,43225,43232,43255,43259,43259,43264,43309,43312,43347,43360,43388,43392,43456,43471,43481,43520,43574,43584,43597,43600,43609,43616,43638,43642,43643,43648,43714,43739,43741,43744,43759,43762,43766,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44010,44012,44013,44016,44025,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65024,65039,65056,65062,65075,65076,65101,65103,65136,65140,65142,65276,65296,65305,65313,65338,65343,65343,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500];e.isUnicodeIdentifierStart=r;var z=function(e){var t=[];return e.forEach(function(e,n){t[e]=n;}),t}(L);e.tokenToString=i,e.stringToToken=o,e.computeLineStarts=s,e.getPositionOfLineAndCharacter=c,e.computePositionOfLineAndCharacter=u,e.getLineStarts=l,e.computeLineAndCharacterOfPosition=_,e.getLineAndCharacterOfPosition=d,e.isWhiteSpaceLike=p,e.isWhiteSpaceSingleLine=f,e.isLineBreak=g,e.isOctalDigit=y,e.couldStartTrivia=h,e.skipTrivia=v;var U=\"<<<<<<<\".length,q=/^#!.*/;e.forEachLeadingCommentRange=C,e.forEachTrailingCommentRange=D,e.reduceEachLeadingCommentRange=E,e.reduceEachTrailingCommentRange=N,e.getLeadingCommentRanges=w,e.getTrailingCommentRanges=P,e.getShebang=O,e.isIdentifierStart=F,e.isIdentifierPart=I,e.isIdentifierText=M,e.createScanner=R;}(r||(r={}));!function(e){function t(e,t){var n=e.declarations;if(n)for(var r=0,a=n;r<a.length;r++){var i=a[r];if(i.kind===t)return i}}function n(e,t){var n=e.declarations;if(n)for(var r=0,a=n;r<a.length;r++){var i=a[r];if(t(i))return i}}function r(){if(0===aa.length){var t=\"\",n=function(e){return t+=e};return{string:function(){return t},writeKeyword:n,writeOperator:n,writePunctuation:n,writeSpace:n,writeStringLiteral:n,writeParameter:n,writeProperty:n,writeSymbol:n,writeLine:function(){return t+=\" \"},increaseIndent:e.noop,decreaseIndent:e.noop,clear:function(){return t=\"\"},trackSymbol:e.noop,reportInaccessibleThisError:e.noop,reportPrivateInBaseOfClassExpression:e.noop}}return aa.pop()}function a(e){e.clear(),aa.push(e);}function i(e){return e.end-e.pos}function o(e,t){return!!(e&&e.resolvedModules&&e.resolvedModules.get(t))}function s(e,t){return o(e,t)?e.resolvedModules.get(t):void 0}function c(t,n,r){t.resolvedModules||(t.resolvedModules=e.createMap()),t.resolvedModules.set(n,r);}function u(t,n,r){t.resolvedTypeReferenceDirectiveNames||(t.resolvedTypeReferenceDirectiveNames=e.createMap()),t.resolvedTypeReferenceDirectiveNames.set(n,r);}function l(e,t){return e.isExternalLibraryImport===t.isExternalLibraryImport&&e.extension===t.extension&&e.resolvedFileName===t.resolvedFileName}function _(e,t){return e.resolvedFileName===t.resolvedFileName&&e.primary===t.primary}function d(t,n,r,a){e.Debug.assert(t.length===n.length);for(var i=0;i<t.length;i++){var o=n[i],s=r&&r.get(t[i]);if(s?!o||!a(s,o):o)return!0}return!1}function p(e){return f(e),0!=(131072&e.flags)}function f(t){262144&t.flags||((0!=(32768&t.flags)||e.forEachChild(t,p))&&(t.flags|=131072),t.flags|=262144);}function g(e){for(;e&&265!==e.kind;)e=e.parent;return e}function m(e){switch(e.kind){case 207:case 235:case 214:case 215:case 216:return!0}return!1}function y(t,n){return e.Debug.assert(t>=0),e.getLineStarts(n)[t]}function h(t){var n=g(t),r=e.getLineAndCharacterOfPosition(n,t.pos);return n.fileName+\"(\"+(r.line+1)+\",\"+(r.character+1)+\")\"}function v(e){return e.pos}function b(e){return void 0!==e}function x(t,n){e.Debug.assert(t>=0);var r=e.getLineStarts(n),a=t,i=n.text;if(a+1===r.length)return i.length-1;var o=r[a],s=r[a+1]-1;for(e.Debug.assert(e.isLineBreak(i.charCodeAt(s)));o<=s&&e.isLineBreak(i.charCodeAt(s));)s--;return s}function k(e){return void 0===e||e.pos===e.end&&e.pos>=0&&1!==e.kind}function S(e){return!k(e)}function T(t,n,r){return k(t)?t.pos:e.isJSDocNode(t)?e.skipTrivia((n||g(t)).text,t.pos,!1,!0):r&&t.jsDoc&&t.jsDoc.length>0?T(t.jsDoc[0]):295===t.kind&&t._children.length>0?T(t._children[0],n,r):e.skipTrivia((n||g(t)).text,t.pos)}function C(t,n){return k(t)||!t.decorators?T(t,n):e.skipTrivia((n||g(t)).text,t.decorators.end)}function D(t,n,r){if(void 0===r&&(r=!1),k(n))return\"\";var a=t.text;return a.substring(r?n.pos:e.skipTrivia(a,n.pos),n.end)}function E(t,n){return k(n)?\"\":t.substring(e.skipTrivia(t,n.pos),n.end)}function N(e,t){return void 0===t&&(t=!1),D(g(e),e,t)}function A(e){var t=e.emitNode;return t&&t.flags}function w(t,n){if(!en(t)&&t.parent)return D(n,t);var r=16777216&A(t)?ln:fn;switch(t.kind){case 9:return'\"'+r(t.text)+'\"';case 13:return\"`\"+r(t.text)+\"`\";case 14:return\"`\"+r(t.text)+\"${\";case 15:return\"}\"+r(t.text)+\"${\";case 16:return\"}\"+r(t.text)+\"`\";case 8:return t.text}e.Debug.fail(\"Literal kind '\"+t.kind+\"' not accounted for.\");}function P(e){return\"string\"==typeof e?'\"'+fn(e)+'\"':\"\"+e}function O(e){return e.length>=2&&95===e.charCodeAt(0)&&95===e.charCodeAt(1)?\"_\"+e:e}function F(t){return e.getBaseFileName(t).replace(/^(\\d)/,\"_$1\").replace(/\\W/g,\"_\")}function I(t){return 0!=(3&e.getCombinedNodeFlags(t))||M(t)}function M(e){var t=Qt(e);return 226===t.kind&&260===t.parent.kind}function R(e){return e&&233===e.kind&&(9===e.name.kind||j(e))}function L(e){return B(e.valueDeclaration)}function B(e){return e&&233===e.kind&&!e.body}function K(t){return 265===t.kind||233===t.kind||e.isFunctionLike(t)}function j(e){return!!(512&e.flags)}function J(t){if(!t||!R(t))return!1;switch(t.parent.kind){case 265:return e.isExternalModule(t.parent);case 234:return R(t.parent.parent)&&!e.isExternalModule(t.parent.parent.parent)}return!1}function z(t,n){return e.isExternalModule(t)||n.isolatedModules}function U(t,n){switch(t.kind){case 265:case 235:case 260:case 233:case 214:case 215:case 216:case 152:case 151:case 153:case 154:case 228:case 186:case 187:return!0;case 207:return n&&!e.isFunctionLike(n)}return!1}function q(e){for(var t=e.parent;t;){if(U(t,t.parent))return t;t=t.parent;}}function V(e){return 0===i(e)?\"(Missing)\":N(e)}function $(e){return e.declaration?V(e.declaration.parameters[0].name):void 0}function W(e){switch(e.kind){case 71:return e.text;case 9:case 8:return e.text;case 144:if(Ut(e.expression))return e.expression.text}}function H(t){switch(t.kind){case 71:return 0===i(t)?e.unescapeIdentifier(t.text):N(t);case 143:return H(t.left)+\".\"+H(t.right);case 179:return H(t.expression)+\".\"+H(t.name)}}function G(e,t,n,r,a){return X(g(e),e,t,n,r,a)}function X(t,n,r,a,i,o){var s=ee(t,n);return e.createFileDiagnostic(t,s.start,s.length,r,a,i,o)}function Y(e,t){var n=g(e),r=ee(n,e);return{file:n,start:r.start,length:r.length,code:t.code,category:t.category,messageText:t.next?t:t.messageText}}function Q(t,n){var r=e.createScanner(t.languageVersion,!0,t.languageVariant,t.text,void 0,n);r.scan();var a=r.getTokenPos();return e.createTextSpanFromBounds(a,r.getTextPos())}function Z(t,n){var r=e.skipTrivia(t.text,n.pos);if(n.body&&207===n.body.kind){var a=e.getLineAndCharacterOfPosition(t,n.body.pos).line;if(a<e.getLineAndCharacterOfPosition(t,n.body.end).line)return e.createTextSpan(r,x(a,t)-r+1)}return e.createTextSpanFromBounds(r,n.end)}function ee(t,n){var r=n;switch(n.kind){case 265:var a=e.skipTrivia(t.text,0,!1);return a===t.text.length?e.createTextSpan(0,0):Q(t,a);case 226:case 176:case 229:case 199:case 230:case 233:case 232:case 264:case 228:case 186:case 151:case 153:case 154:case 231:r=n.name;break;case 187:return Z(t,n)}if(void 0===r)return Q(t,n.pos);var i=k(r)?r.pos:e.skipTrivia(t.text,r.pos);return e.createTextSpanFromBounds(i,r.end)}function te(e){return void 0!==(e.externalModuleIndicator||e.commonJsModuleIndicator)}function ne(e){return 232===e.kind&&re(e)}function re(t){return!!(2&e.getCombinedNodeFlags(t))||!!(2048&e.getCombinedModifierFlags(t))}function ae(t){return!!(1&e.getCombinedNodeFlags(t))}function ie(e){return 181===e.kind&&97===e.expression.kind}function oe(e){return 181===e.kind&&91===e.expression.kind}function se(e){return 210===e.kind&&9===e.expression.kind}function ce(t,n){return e.getLeadingCommentRanges(n.text,t.pos)}function ue(t,n){return e.getLeadingCommentRanges(n,t.pos)}function le(t,n){var r=146===t.kind||145===t.kind||186===t.kind||187===t.kind?e.concatenate(e.getTrailingCommentRanges(n,t.pos),e.getLeadingCommentRanges(n,t.pos)):ue(t,n);return e.filter(r,function(e){return 42===n.charCodeAt(e.pos+1)&&42===n.charCodeAt(e.pos+2)&&47!==n.charCodeAt(e.pos+3)})}function _e(t){if(158<=t.kind&&t.kind<=173)return!0;switch(t.kind){case 119:case 133:case 136:case 122:case 137:case 139:case 130:return!0;case 105:return 190!==t.parent.kind;case 201:return!sr(t);case 71:143===t.parent.kind&&t.parent.right===t?t=t.parent:179===t.parent.kind&&t.parent.name===t&&(t=t.parent),e.Debug.assert(71===t.kind||143===t.kind||179===t.kind,\"'node' was expected to be a qualified name, identifier or property access in 'isPartOfTypeNode'.\");case 143:case 179:case 99:var n=t.parent;if(162===n.kind)return!1;if(158<=n.kind&&n.kind<=173)return!0;switch(n.kind){case 201:return!sr(n);case 145:return t===n.constraint;case 149:case 148:case 146:case 226:return t===n.type;case 228:case 186:case 187:case 152:case 151:case 150:case 153:case 154:return t===n.type;case 155:case 156:case 157:case 184:return t===n.type;case 181:case 182:return n.typeArguments&&e.indexOf(n.typeArguments,t)>=0;case 183:return!1}}return!1}function de(e,t){for(;e;){if(e.kind===t)return!0;e=e.parent;}return!1}function pe(t,n){function r(t){switch(t.kind){case 219:return n(t);case 235:case 207:case 211:case 212:case 213:case 214:case 215:case 216:case 220:case 221:case 257:case 258:case 222:case 224:case 260:return e.forEachChild(t,r)}}return r(t)}function fe(t,n){function r(t){switch(t.kind){case 197:n(t);var a=t.expression;return void(a&&r(a));case 232:case 230:case 233:case 231:case 229:case 199:return;default:if(e.isFunctionLike(t)){var i=t.name;if(i&&144===i.kind)return void r(i.expression)}else _e(t)||e.forEachChild(t,r);}}return r(t)}function ge(t){return t&&164===t.kind?t.elementType:t&&159===t.kind?e.singleOrUndefined(t.typeArguments):void 0}function me(e){if(e)switch(e.kind){case 176:case 264:case 146:case 261:case 149:case 148:case 262:case 226:return!0}return!1}function ye(e){switch(e.kind){case 151:case 150:case 152:case 153:case 154:case 228:case 186:return!0}return!1}function he(e,t){for(;;){if(t&&t(e),222!==e.statement.kind)return e.statement;e=e.statement;}}function ve(t){return t&&207===t.kind&&e.isFunctionLike(t.parent)}function be(e){return e&&151===e.kind&&178===e.parent.kind}function xe(e){return 151===e.kind&&(178===e.parent.kind||199===e.parent.kind)}function ke(e){return e&&1===e.kind}function Se(e){return e&&0===e.kind}function Te(t,n,r){return e.filter(t.properties,function(e){if(261===e.kind){var t=W(e.name);return n===t||r&&r===t}})}function Ce(t){for(;;)if(!(t=t.parent)||e.isFunctionLike(t))return t}function De(t){for(;;)if(!(t=t.parent)||e.isClassLike(t))return t}function Ee(t,n){for(;;){if(!(t=t.parent))return;switch(t.kind){case 144:if(e.isClassLike(t.parent.parent))return t;t=t.parent;break;case 147:146===t.parent.kind&&e.isClassElement(t.parent.parent)?t=t.parent.parent:e.isClassElement(t.parent)&&(t=t.parent);break;case 187:if(!n)continue;case 228:case 186:case 233:case 149:case 148:case 151:case 150:case 152:case 153:case 154:case 155:case 156:case 157:case 232:case 265:return t}}}function Ne(e){var t=Ee(e,!1);if(t)switch(t.kind){case 152:case 228:case 186:return t}}function Ae(t,n){for(;;){if(!(t=t.parent))return t;switch(t.kind){case 144:t=t.parent;break;case 228:case 186:case 187:if(!n)continue;case 149:case 148:case 151:case 150:case 152:case 153:case 154:return t;case 147:146===t.parent.kind&&e.isClassElement(t.parent.parent)?t=t.parent.parent:e.isClassElement(t.parent)&&(t=t.parent);}}}function we(e){if(186===e.kind||187===e.kind){for(var t=e,n=e.parent;185===n.kind;)t=n,n=n.parent;if(181===n.kind&&n.expression===t)return n}}function Pe(e){var t=e.kind;return(179===t||180===t)&&97===e.expression.kind}function Oe(e){switch(e.kind){case 159:case 277:return e.typeName;case 201:return ur(e.expression)?e.expression:void 0;case 71:case 143:return e}}function Fe(t){return 183===t.kind?t.tag:e.isJsxOpeningLikeElement(t)?t.tagName:t.expression}function Ie(e){switch(e.kind){case 229:return!0;case 149:return 229===e.parent.kind;case 153:case 154:case 151:return void 0!==e.body&&229===e.parent.kind;case 146:return void 0!==e.parent.body&&(152===e.parent.kind||151===e.parent.kind||154===e.parent.kind)&&229===e.parent.parent.kind}return!1}function Me(e){return void 0!==e.decorators&&Ie(e)}function Re(e){return Me(e)||Le(e)}function Le(t){switch(t.kind){case 229:return e.forEach(t.members,Re);case 151:case 154:return e.forEach(t.parameters,Me)}}function Be(e){var t=e.parent;return(251===t.kind||250===t.kind||252===t.kind)&&t.tagName===e}function Ke(e){switch(e.kind){case 99:case 97:case 95:case 101:case 86:case 12:case 177:case 178:case 179:case 180:case 181:case 182:case 183:case 202:case 184:case 203:case 185:case 186:case 199:case 187:case 190:case 188:case 189:case 192:case 193:case 194:case 195:case 198:case 196:case 13:case 200:case 249:case 250:case 197:case 191:case 204:return!0;case 143:for(;143===e.parent.kind;)e=e.parent;return 162===e.parent.kind||Be(e);case 71:if(162===e.parent.kind||Be(e))return!0;case 8:case 9:case 99:var t=e.parent;switch(t.kind){case 226:case 146:case 149:case 148:case 264:case 261:case 176:return t.initializer===e;case 210:case 211:case 212:case 213:case 219:case 220:case 221:case 257:case 223:case 221:return t.expression===e;case 214:var n=t;return n.initializer===e&&227!==n.initializer.kind||n.condition===e||n.incrementor===e;case 215:case 216:var r=t;return r.initializer===e&&227!==r.initializer.kind||r.expression===e;case 184:case 202:case 205:case 144:return e===t.expression;case 147:case 256:case 255:case 263:return!0;case 201:return t.expression===e&&sr(t);default:if(Ke(t))return!0}}return!1}function je(e){return 237===e.kind&&248===e.moduleReference.kind}function Je(t){return e.Debug.assert(je(t)),t.moduleReference.expression}function ze(e){return 237===e.kind&&248!==e.moduleReference.kind}function Ue(e){return qe(e)}function qe(e){return e&&!!(65536&e.flags)}function Ve(e,t){if(181!==e.kind)return!1;var n=e,r=n.expression,a=n.arguments;if(71!==r.kind||\"require\"!==r.text)return!1;if(1!==a.length)return!1;var i=a[0];return!t||9===i.kind||13===i.kind}function $e(e){return 39===e||34===e}function We(e){if(e.valueDeclaration&&226===e.valueDeclaration.kind){var t=e.valueDeclaration;return t.initializer&&(186===t.initializer.kind||199===t.initializer.kind)}return!1}function He(e){for(;rr(e,!0);)e=e.right;return e}function Ge(t){return e.isIdentifier(t)&&\"exports\"===t.text}function Xe(t){return e.isPropertyAccessExpression(t)&&e.isIdentifier(t.expression)&&\"module\"===t.expression.text&&\"exports\"===t.name.text}function Ye(e){if(!qe(e))return 0;var t=e;if(58!==t.operatorToken.kind||179!==t.left.kind)return 0;var n=t.left;if(71===n.expression.kind){var r=n.expression;return\"exports\"===r.text?1:\"module\"===r.text&&\"exports\"===n.name.text?2:5}if(99===n.expression.kind)return 4;if(179===n.expression.kind){var a=n.expression;if(71===a.expression.kind){if(\"module\"===a.expression.text&&\"exports\"===a.name.text)return 1;if(\"prototype\"===a.name.text)return 3}}return 0}function Qe(e){if(238===e.kind)return e.moduleSpecifier;if(237===e.kind){var t=e.moduleReference;if(248===t.kind)return t.expression}return 244===e.kind?e.moduleSpecifier:233===e.kind&&9===e.name.kind?e.name:void 0}function Ze(e){if(237===e.kind)return e;var t=e.importClause;return t&&t.namedBindings&&240===t.namedBindings.kind?t.namedBindings:void 0}function et(e){return 238===e.kind&&e.importClause&&!!e.importClause.name}function tt(e){if(e)switch(e.kind){case 146:case 151:case 150:case 262:case 261:case 149:case 148:return void 0!==e.questionToken}return!1}function nt(e){return 279===e.kind&&e.parameters.length>0&&281===e.parameters[0].type.kind}function rt(t){return e.map(st(t),function(e){return e.comment})}function at(e){var t=it(e,287);return t&&t.length>0}function it(t,n){return e.flatMap(st(t),function(t){return 283===t.kind?e.filter(t.tags,function(e){return e.kind===n}):t.kind===n&&t})}function ot(t,n){return t&&e.firstOrUndefined(it(t,n))}function st(t){function n(t){var a=t.parent,i=me(a)&&a.initializer===t&&208===a.parent.parent.kind,o=me(t)&&208===a.parent.kind,s=i?a.parent.parent:o?a.parent:void 0;s&&n(s),a&&a.parent&&194===a.kind&&58===a.operatorToken.kind&&210===a.parent.kind&&n(a.parent);var c=233===t.kind&&a&&233===a.kind,u=a&&261===a.kind;(c||u)&&n(a),146===t.kind&&(r=e.concatenate(r,ct(t))),me(t)&&t.initializer&&(r=e.concatenate(r,t.initializer.jsDoc)),r=e.concatenate(r,t.jsDoc);}if(e.isJSDocTypedefTag(t))return[t.parent];var r=t.jsDocCache;return r||(n(t),t.jsDocCache=r),r}function ct(t){var n=t.parent,r=it(n,287);if(t.name){if(71===t.name.kind){var a=t.name.text;return e.filter(r,function(e){return 287===e.kind&&e.name.text===a})}}else{var i=n.parameters.indexOf(t),o=e.filter(r,function(e){return 287===e.kind});if(o&&0<=i&&i<o.length)return[o[i]]}}function ut(t){var n=t.name.text,r=t.parent.parent;if(e.Debug.assert(283===t.parent.kind),e.isFunctionLike(r))return e.find(r.parameters,function(e){return 71===e.name.kind&&e.name.text===n})}function lt(t){var n=t.name.text,r=t.parent.parent.parent.typeParameters;return e.find(r,function(e){return e.name.text===n})}function _t(t){var n=ot(t,289);if(!n&&146===t.kind){var r=ct(t);r&&(n=e.find(r,function(e){return!!e.typeExpression}));}return n&&n.typeExpression&&n.typeExpression.type}function dt(e){return ot(e,285)}function pt(e){return ot(e,286)}function ft(e){return ot(e,288)}function gt(e){var t=ft(e);return t&&t.typeExpression&&t.typeExpression.type}function mt(e){return ot(e,290)}function yt(t){return vt(e.lastOrUndefined(t.parameters))}function ht(t){return bt(e.lastOrUndefined(t.parameters))}function vt(t){return!!(t&&65536&t.flags&&(t.type&&280===t.type.kind||e.forEach(ct(t),function(e){return e.typeExpression&&280===e.typeExpression.type.kind})))||bt(t)}function bt(e){return e&&void 0!==e.dotDotDotToken}function xt(e){for(var t=e.parent;;){switch(t.kind){case 194:var n=t.operatorToken.kind;return tr(n)&&t.left===e?58===n?1:2:0;case 192:case 193:var r=t.operator;return 43===r||44===r?2:0;case 215:case 216:return t.initializer===e?1:0;case 185:case 177:case 198:e=t;break;case 262:if(t.name!==e)return 0;e=t.parent;break;case 261:if(t.name===e)return 0;e=t.parent;break;default:return 0}t=e.parent;}}function kt(e){return 0!==xt(e)}function St(e){if(179!==e.kind&&180!==e.kind)return!1;for(e=e.parent;e&&185===e.kind;)e=e.parent;return e&&188===e.kind}function Tt(e,t){for(;e;){if(e===t)return!0;e=e.parent;}return!1}function Ct(e){for(;e;){if(Xn(e,2)||265===e.kind&&e.isDeclarationFile)return!0;e=e.parent;}return!1}function Dt(t){switch(t.kind){case 71:case 9:case 8:return e.isDeclaration(t.parent)&&t.parent.name===t;default:return!1}}function Et(t){switch(t.kind){case 71:case 9:case 8:if(e.isDeclaration(t.parent))return t.parent.name===t;var n=t.parent.parent;return e.isBinaryExpression(n)&&0!==Ye(n)&&e.getNameOfDeclaration(n)===t;default:return!1}}function Nt(t){return(9===t.kind||8===t.kind)&&144===t.parent.kind&&e.isDeclaration(t.parent.parent)}function At(e){var t=e.parent;switch(t.kind){case 149:case 148:case 151:case 150:case 153:case 154:case 264:case 261:case 179:return t.name===e;case 143:if(t.right===e){for(;143===t.kind;)t=t.parent;return 162===t.kind}return!1;case 176:case 242:return t.propertyName===e;case 246:return!0}return!1}function wt(e){return 237===e.kind||236===e.kind||239===e.kind&&!!e.name||240===e.kind||242===e.kind||246===e.kind||243===e.kind&&Pt(e)}function Pt(e){return ur(e.expression)}function Ot(e){var t=Mt(e.heritageClauses,85);return t&&t.types.length>0?t.types[0]:void 0}function Ft(e){var t=Mt(e.heritageClauses,108);return t?t.types:void 0}function It(e){var t=Mt(e.heritageClauses,85);return t?t.types:void 0}function Mt(e,t){if(e)for(var n=0,r=e;n<r.length;n++){var a=r[n];if(a.token===t)return a}}function Rt(t,n,r){if(!t.getCompilerOptions().noResolve){var a=e.isRootedDiskPath(r.fileName)?r.fileName:e.combinePaths(e.getDirectoryPath(n.fileName),r.fileName);return t.getSourceFile(a)}}function Lt(e,t){for(;e;){if(e.kind===t)return e;e=e.parent;}}function Bt(t,n){var r=/^(\\/\\/\\/\\s*<reference\\s+no-default-lib\\s*=\\s*)('|\")(.+?)\\2\\s*\\/>/gim;if(/^\\/\\/\\/\\s*<reference\\s+/gim.test(t)){if(r.test(t))return{isNoDefaultLib:!0};var a=e.fullTripleSlashReferencePathRegEx.exec(t),i=!a&&e.fullTripleSlashReferenceTypeReferenceDirectiveRegEx.exec(t),o=a||i;if(o){var s=n.pos+o[1].length+o[2].length;return{fileReference:{pos:s,end:s+o[3].length,fileName:o[3]},isNoDefaultLib:!1,isTypeReferenceDirective:!!i}}return{diagnosticMessage:e.Diagnostics.Invalid_reference_directive_syntax,isNoDefaultLib:!1}}}function Kt(e){return 72<=e&&e<=142}function jt(e){return 2<=e&&e<=7}function Jt(e){if(!e)return 4;var t=0;switch(e.kind){case 228:case 186:case 151:e.asteriskToken&&(t|=1);case 187:Xn(e,256)&&(t|=2);}return e.body||(t|=4),t}function zt(e){switch(e.kind){case 228:case 186:case 187:case 151:return void 0!==e.body&&void 0===e.asteriskToken&&Xn(e,256)}return!1}function Ut(e){var t=e.kind;return 9===t||8===t}function qt(t){var n=e.getNameOfDeclaration(t);return n&&Vt(n)}function Vt(e){return 144===e.kind&&!Ut(e.expression)&&!$t(e.expression)}function $t(t){return e.isPropertyAccessExpression(t)&&Gt(t.expression)}function Wt(e){if(71===e.kind||9===e.kind||8===e.kind||146===e.kind)return e.text;if(144===e.kind){var t=e.expression;if($t(t))return Ht(t.name.text);if(9===t.kind||8===t.kind)return t.text}}function Ht(e){return\"__@\"+e}function Gt(e){return 71===e.kind&&\"Symbol\"===e.text}function Xt(e){return\"push\"===e.text||\"unshift\"===e.text}function Yt(e){return 146===Qt(e).kind}function Qt(e){for(;176===e.kind;)e=e.parent.parent;return e}function Zt(e){var t=e.kind;return 152===t||186===t||228===t||187===t||151===t||153===t||154===t||233===t||265===t}function en(t){return e.positionIsSynthesized(t.pos)||e.positionIsSynthesized(t.end)}function tn(t){return e.getParseTreeNode(t,e.isSourceFile)||t}function nn(t){return e.sameMap(t,tn)}function rn(e){var t=sn(e),n=182===e.kind&&void 0!==e.arguments;return an(e.kind,t,n)}function an(e,t,n){switch(e){case 182:return n?0:1;case 192:case 189:case 190:case 188:case 191:case 195:case 197:return 1;case 194:switch(t){case 40:case 58:case 59:case 60:case 62:case 61:case 63:case 64:case 65:case 66:case 67:case 68:case 70:case 69:return 1}}return 0}function on$$1(e){var t=sn(e),n=182===e.kind&&void 0!==e.arguments;return cn(e.kind,t,n)}function sn(e){return 194===e.kind?e.operatorToken.kind:192===e.kind||193===e.kind?e.operator:e.kind}function cn(e,t,n){switch(e){case 99:case 97:case 71:case 95:case 101:case 86:case 8:case 9:case 177:case 178:case 186:case 187:case 199:case 249:case 250:case 12:case 13:case 196:case 185:case 200:return 19;case 183:case 179:case 180:return 18;case 182:return n?18:17;case 181:return 17;case 193:return 16;case 192:case 189:case 190:case 188:case 191:return 15;case 194:switch(t){case 51:case 52:return 15;case 40:case 39:case 41:case 42:return 14;case 37:case 38:return 13;case 45:case 46:case 47:return 12;case 27:case 30:case 29:case 31:case 92:case 93:return 11;case 32:case 34:case 33:case 35:return 10;case 48:return 9;case 50:return 8;case 49:return 7;case 53:return 6;case 54:return 5;case 58:case 59:case 60:case 62:case 61:case 63:case 64:case 65:case 66:case 67:case 68:case 70:case 69:return 3;case 26:return 0;default:return-1}case 195:return 4;case 197:return 2;case 198:return 1;case 298:return 0;default:return-1}}function un(){function t(){return l}function n(t){e.forEach(c.get(t.fileName),function(e){return e.file=t});}function r(e){var t;e.file?(t=c.get(e.file.fileName))||(t=[],c.set(e.file.fileName,t)):t=s,t.push(e),u=!0,l++;}function a(){return o(),s}function i(t){function n(e){r.push(e);}if(o(),t)return c.get(t)||[];var r=[];return e.forEach(s,n),c.forEach(function(t){e.forEach(t,n);}),e.sortAndDeduplicateDiagnostics(r)}function o(){u&&(u=!1,s=e.sortAndDeduplicateDiagnostics(s),c.forEach(function(t,n){c.set(n,e.sortAndDeduplicateDiagnostics(t));}));}var s=[],c=e.createMap(),u=!1,l=0;return{add:r,getGlobalDiagnostics:a,getDiagnostics:i,getModificationCount:t,reattachFileDiagnostics:n}}function ln(e){return e.replace(ia,_n)}function _n(e){return oa.get(e)||pn(e.charCodeAt(0))}function dn(e){var t=e.substr(0,1);return t.toLowerCase()===t}function pn(e){return\"\\\\u\"+(\"0000\"+e.toString(16).toUpperCase()).slice(-4)}function fn(e){return e=ln(e),sa.test(e)?e.replace(sa,function(e){return pn(e.charCodeAt(0))}):e}function gn(e){return void 0===ca[e]&&(ca[e]=gn(e-1)+ca[1]),ca[e]}function mn(){return ca[1].length}function yn(t){function n(e){e&&e.length&&(l&&(c+=gn(u),l=!1),c+=e);}function r(){c=\"\",u=0,l=!0,_=0,d=0;}function a(e){void 0!==e&&(l&&(l=!1),c+=e);}function i(t){if(t&&t.length){n(t);var r=e.computeLineStarts(t);r.length>1&&(_=_+r.length-1,d=c.length-t.length+e.lastOrUndefined(r));}}function o(){l||(_++,d=(c+=t).length,l=!0);}function s(e,t){n(E(e,t));}var c,u,l,_,d;return r(),{write:n,rawWrite:a,writeTextOfNode:s,writeLiteral:i,writeLine:o,increaseIndent:function(){u++;},decreaseIndent:function(){u--;},getIndent:function(){return u},getTextPos:function(){return c.length},getLine:function(){return _+1},getColumn:function(){return l?u*mn()+1:c.length-d+1},getText:function(){return c},isAtStartOfLine:function(){return l},reset:r}}function hn(e,t){return t.moduleName||bn(e,t.fileName)}function vn(e,t,n){var r=t.getExternalModuleFileFromDeclaration(n);if(r&&!r.isDeclarationFile)return hn(e,r)}function bn(t,n){var r=function(e){return t.getCanonicalFileName(e)},a=e.toPath(t.getCommonSourceDirectory(),t.getCurrentDirectory(),r),i=e.getNormalizedAbsolutePath(n,t.getCurrentDirectory()),o=e.getRelativePathToDirectoryOrUrl(a,i,a,r,!1);return e.removeFileExtension(o)}function xn(t,n,r){var a=n.getCompilerOptions();return(a.outDir?e.removeFileExtension(Cn(t,n,a.outDir)):e.removeFileExtension(t.fileName))+r}function kn(t,n){var r=n.getCompilerOptions(),a=r.declarationDir||r.outDir,i=a?Cn(t,n,a):t.fileName;return e.removeFileExtension(i)+\".d.ts\"}function Sn(t,n){var r=t.getCompilerOptions(),a=function(e){return t.isSourceFileFromExternalLibrary(e)};if(r.outFile||r.out){var i=e.getEmitModuleKind(r),o=i===e.ModuleKind.AMD||i===e.ModuleKind.System;return e.filter(t.getSourceFiles(),function(t){return(o||!e.isExternalModule(t))&&Tn(t,r,a)})}var s=void 0===n?t.getSourceFiles():[n];return e.filter(s,function(e){return Tn(e,r,a)})}function Tn(e,t,n){return!(t.noEmitForJsFiles&&Ue(e)||e.isDeclarationFile||n(e))}function Cn(t,n,r){var a=e.getNormalizedAbsolutePath(t.fileName,n.getCurrentDirectory()),i=n.getCommonSourceDirectory();return a=0===n.getCanonicalFileName(a).indexOf(n.getCanonicalFileName(i))?a.substring(i.length):a,e.combinePaths(r,a)}function Dn(t,n,r,a,i,o){t.writeFile(r,a,i,function(t){n.add(e.createCompilerDiagnostic(e.Diagnostics.Could_not_write_file_0_Colon_1,r,t));},o);}function En(t,n){return e.getLineAndCharacterOfPosition(t,n).line}function Nn(t,n){return e.computeLineAndCharacterOfPosition(t,n).line}function An(t){return e.forEach(t.members,function(e){if(152===e.kind&&S(e.body))return e})}function wn(e){if(e&&e.parameters.length>0){var t=2===e.parameters.length&&Fn(e.parameters[0]);return e.parameters[t?1:0]}}function Pn(e){var t=wn(e);return t&&t.type}function On(e){if(e.parameters.length){var t=e.parameters[0];if(Fn(t))return t}}function Fn(e){return In(e.name)}function In(e){return e&&71===e.kind&&Mn(e)}function Mn(e){return 99===e.originalKeywordKind}function Rn(t,n){var r,a,i,o;return qt(n)?(r=n,153===n.kind?i=n:154===n.kind?o=n:e.Debug.fail(\"Accessor has wrong kind\")):e.forEach(t,function(e){153!==e.kind&&154!==e.kind||Xn(e,32)!==Xn(n,32)||Wt(e.name)===Wt(n.name)&&(r?a||(a=e):r=e,153!==e.kind||i||(i=e),154!==e.kind||o||(o=e));}),{firstAccessor:r,secondAccessor:a,getAccessor:i,setAccessor:o}}function Ln(e){return e.type?e.type:65536&e.flags?_t(e):void 0}function Bn(e){return e.type?e.type:65536&e.flags?gt(e):void 0}function Kn(e){if(e.typeParameters)return e.typeParameters;if(65536&e.flags){var t=mt(e);return t&&t.typeParameters}}function jn(e){var t=wn(e);return t&&Ln(t)}function Jn(e,t,n,r){zn(e,t,n.pos,r);}function zn(e,t,n,r){r&&r.length&&n!==r[0].pos&&Nn(e,n)!==Nn(e,r[0].pos)&&t.writeLine();}function Un(e,t,n,r){n!==r&&Nn(e,n)!==Nn(e,r)&&t.writeLine();}function qn(e,t,n,r,a,i,o,s){if(r&&r.length>0){a&&n.write(\" \");for(var c=!1,u=0,l=r;u<l.length;u++){var _=l[u];c&&(n.write(\" \"),c=!1),s(e,t,n,_.pos,_.end,o),_.hasTrailingNewLine?n.writeLine():c=!0;}c&&i&&n.write(\" \");}}function Vn(t,n,r,a,i,o,s){function c(e){return 42===t.charCodeAt(e.pos+1)&&33===t.charCodeAt(e.pos+2)}var u,l;if(s?0===i.pos&&(u=e.filter(e.getLeadingCommentRanges(t,i.pos),c)):u=e.getLeadingCommentRanges(t,i.pos),u){for(var _=[],d=void 0,p=0,f=u;p<f.length;p++){var g=f[p];if(d){m=Nn(n,d.end);if(Nn(n,g.pos)>=m+2)break}_.push(g),d=g;}if(_.length){var m=Nn(n,e.lastOrUndefined(_).end);Nn(n,e.skipTrivia(t,i.pos))>=m+2&&(Jn(n,r,i,u),qn(t,n,r,_,!1,!0,o,a),l={nodePos:i.pos,detachedCommentEndPos:e.lastOrUndefined(_).end});}}return l}function $n(t,n,r,a,i,o){if(42===t.charCodeAt(a+1))for(var s=e.computeLineAndCharacterOfPosition(n,a),c=n.length,u=void 0,l=a,_=s.line;l<i;_++){var d=_+1===c?t.length+1:n[_+1];if(l!==a){void 0===u&&(u=Hn(t,n[s.line],a));var p=r.getIndent()*mn()-u+Hn(t,l,d);if(p>0){var f=p%mn(),g=gn((p-f)/mn());for(r.rawWrite(g);f;)r.rawWrite(\" \"),f--;}else r.rawWrite(\"\");}Wn(t,i,r,o,l,d),l=d;}else r.write(t.substring(a,i));}function Wn(e,t,n,r,a,i){var o=Math.min(t,i-1),s=e.substring(a,o).replace(/^\\s+|\\s+$/g,\"\");s?(n.write(s),o!==t&&n.writeLine()):n.writeLiteral(r);}function Hn(t,n,r){for(var a=0;n<r&&e.isWhiteSpaceSingleLine(t.charCodeAt(n));n++)9===t.charCodeAt(n)?a+=mn()-a%mn():a++;return a}function Gn(e){return 0!==Yn(e)}function Xn(e,t){return 0!=(Yn(e)&t)}function Yn(e){if(536870912&e.modifierFlagsCache)return-536870913&e.modifierFlagsCache;var t=Qn(e);return e.modifierFlagsCache=536870912|t,t}function Qn(e){var t=0;if(e.modifiers)for(var n=0,r=e.modifiers;n<r.length;n++)t|=Zn(r[n].kind);return(4&e.flags||71===e.kind&&e.isInJSDocNamespace)&&(t|=1),t}function Zn(e){switch(e){case 115:return 32;case 114:return 4;case 113:return 16;case 112:return 8;case 117:return 128;case 84:return 1;case 124:return 2;case 76:return 2048;case 79:return 512;case 120:return 256;case 131:return 64}return 0}function er(e){return 54===e||53===e||51===e}function tr(e){return e>=58&&e<=70}function nr(t){if(201===t.kind&&85===t.parent.token&&e.isClassLike(t.parent.parent))return t.parent.parent}function rr(t,n){return e.isBinaryExpression(t)&&(n?58===t.operatorToken.kind:tr(t.operatorToken.kind))&&e.isLeftHandSideExpression(t.left)}function ar(e){if(rr(e,!0)){var t=e.left.kind;return 178===t||177===t}return!1}function ir(e){return or(e.expression)}function or(t){return 71===t.kind||!!e.isPropertyAccessExpression(t)&&or(t.expression)}function sr(e){return void 0!==nr(e)}function cr(t){return 201===t.kind&&ur(t.expression)&&t.parent&&108===t.parent.token&&t.parent.parent&&e.isClassLike(t.parent.parent)}function ur(e){return 71===e.kind||179===e.kind&&ur(e.expression)}function lr(e){return 143===e.parent.kind&&e.parent.right===e||179===e.parent.kind&&e.parent.name===e}function _r(e){return 178===e.kind&&0===e.properties.length}function dr(e){return 177===e.kind&&0===e.elements.length}function pr(e){return fr(e)?e.declarations[0].localSymbol:void 0}function fr(t){return t&&e.length(t.declarations)>0&&Xn(t.declarations[0],512)}function gr(t){return e.find(e.supportedTypescriptExtensionsForExtractExtension,function(n){return e.fileExtensionIs(t,n)})}function mr(t){for(var n=[],r=t.length,a=0;a<r;a++){var i=t.charCodeAt(a);i<128?n.push(i):i<2048?(n.push(i>>6|192),n.push(63&i|128)):i<65536?(n.push(i>>12|224),n.push(i>>6&63|128),n.push(63&i|128)):i<131072?(n.push(i>>18|240),n.push(i>>12&63|128),n.push(i>>6&63|128),n.push(63&i|128)):e.Debug.assert(!1,\"Unexpected code point\");}return n}function yr(e){for(var t,n,r,a,i=\"\",o=mr(e),s=0,c=o.length;s<c;)t=o[s]>>2,n=(3&o[s])<<4|o[s+1]>>4,r=(15&o[s+1])<<2|o[s+2]>>6,a=63&o[s+2],s+1>=c?r=a=64:s+2>=c&&(a=64),i+=ua.charAt(t)+ua.charAt(n)+ua.charAt(r)+ua.charAt(a),s+=3;return i}function hr(t){switch(t.newLine){case 0:return la;case 1:return _a}return e.sys?e.sys.newLine:la}function vr(e){return br(e,0)}function br(e,t){if(t<=5){var n=e.kind;if(9===n||8===n||12===n||13===n||71===n||99===n||97===n||101===n||86===n||95===n)return!0;if(179===n)return br(e.expression,t+1);if(180===n)return br(e.expression,t+1)&&br(e.argumentExpression,t+1);if(192===n||193===n)return br(e.operand,t+1);if(194===n)return 40!==e.operatorToken.kind&&br(e.left,t+1)&&br(e.right,t+1);if(195===n)return br(e.condition,t+1)&&br(e.whenTrue,t+1)&&br(e.whenFalse,t+1);if(190===n||189===n||188===n)return br(e.expression,t+1);if(177===n)return 0===e.elements.length;if(178===n)return 0===e.properties.length;if(181===n){if(!br(e.expression,t+1))return!1;for(var r=0,a=e.arguments;r<a.length;r++)if(!br(a[r],t+1))return!1;return!0}}return!1}function xr(e,t,n){void 0===e&&(e=0);var r=kr(t);if(0===e)return r.length>0&&0===r[0][0]?r[0][1]:\"0\";if(n){for(var a=\"\",i=e,o=r.length-1;o>=0&&0!==i;o--){var s=r[o],c=s[0],u=s[1];0!==c&&(i&c)===c&&(i&=~c,a=u+(a?\", \":\"\")+a);}if(0===i)return a}else for(var l=0,_=r;l<_.length;l++){var d=_[l],c=d[0],u=d[1];if(c===e)return u}return e.toString()}function kr(t){var n=[];for(var r in t){var a=t[r];\"number\"==typeof a&&n.push([a,r]);}return e.stableSort(n,function(t,n){return e.compareValues(t[0],n[0])})}function Sr(t){return xr(t,e.SyntaxKind,!1)}function Tr(t){return xr(t,e.ModifierFlags,!0)}function Cr(t){return xr(t,e.TransformFlags,!0)}function Dr(t){return xr(t,e.EmitFlags,!0)}function Er(t){return xr(t,e.SymbolFlags,!0)}function Nr(t){return xr(t,e.TypeFlags,!0)}function Ar(t){return xr(t,e.ObjectFlags,!0)}function wr(e){return e?e.pos:-1}function Pr(e){return e?e.end:-1}function Or(t,n){return e.positionIsSynthesized(t)?-1:t+n}function Fr(e,t){return{pos:e,end:t}}function Ir(e,t){return Fr(e.pos,t)}function Mr(e,t){return Fr(t,e.end)}function Rr(e){return e.decorators&&e.decorators.length>0?Mr(e,e.decorators.end):e}function Lr(e){return e.modifiers&&e.modifiers.length>0?Mr(e,e.modifiers.end):Rr(e)}function Br(e){return e.pos===e.end}function Kr(e){return Br(e)?e:Ir(e,e.pos)}function jr(e){return Br(e)?e:Mr(e,e.end)}function Jr(t,n){return Fr(t,t+e.tokenToString(n).length)}function zr(e,t){return Vr(e,e,t)}function Ur(e,t,n){return Wr(Hr(e,n),Hr(t,n),n)}function qr(e,t,n){return Wr(e.end,t.end,n)}function Vr(e,t,n){return Wr(Hr(e,n),t.end,n)}function $r(e,t,n){return Wr(e.end,Hr(t,n),n)}function Wr(e,t,n){return e===t||En(n,e)===En(n,t)}function Hr(t,n){return e.positionIsSynthesized(t.pos)?-1:e.skipTrivia(n.text,t.pos)}function Gr(t){var n=e.getParseTreeNode(t);if(n)switch(n.parent.kind){case 232:case 233:return n===n.parent.name}return!1}function Xr(t){return e.filter(t.declarations,Yr)}function Yr(e){return void 0!==e.initializer}function Qr(e){if(e.symbol)for(var t=0,n=e.symbol.declarations;t<n.length;t++){var r=n[t];if(229===r.kind&&r!==e)return!0}return!1}function Zr(e,n){return e.symbol&&t(e.symbol,n)===e}function ea(e){return e.watch&&e.hasOwnProperty(\"watch\")}function ta(e){return 134217728&e.flags?e.checkFlags:0}function na(t){if(t.valueDeclaration){var n=e.getCombinedModifierFlags(t.valueDeclaration);return t.parent&&32&t.parent.flags?n:-29&n}if(6&ta(t)){var r=t.checkFlags;return(256&r?8:64&r?4:16)|(512&r?32:0)}return 16777216&t.flags?36:0}function ra(e,t){for(var n=new Array(t.length+1),r=new Array(t.length+1),a=0;a<t.length+1;a++)n[a]=a,r[a]=-1;for(a=1;a<e.length+1;a++){r[0]=a;for(var i=1;i<t.length+1;i++)r[i]=Math.min(n[i]+1,r[i-1]+1,n[i-1]+(e[a-1]===t[i-1]?0:2));var o=n;n=r,r=o;}return n[n.length-1]}e.externalHelpersModuleNameText=\"tslib\",e.getDeclarationOfKind=t,e.findDeclaration=n;var aa=[];e.getSingleLineStringWriter=r,e.releaseStringWriter=a,e.getFullWidth=i,e.hasResolvedModule=o,e.getResolvedModule=s,e.setResolvedModule=c,e.setResolvedTypeReferenceDirective=u,e.moduleResolutionIsEqualTo=l,e.typeDirectiveIsEqualTo=_,e.hasChangesInResolutions=d,e.containsParseError=p,e.getSourceFileOfNode=g,e.isStatementWithLocals=m,e.getStartPositionOfLine=y,e.nodePosToString=h,e.getStartPosOfNode=v,e.isDefined=b,e.getEndLinePosition=x,e.nodeIsMissing=k,e.nodeIsPresent=S,e.getTokenPosOfNode=T,e.getNonDecoratorTokenPosOfNode=C,e.getSourceTextOfNodeFromSourceFile=D,e.getTextOfNodeFromSourceText=E,e.getTextOfNode=N,e.getEmitFlags=A,e.getLiteralText=w,e.getTextOfConstantValue=P,e.escapeIdentifier=O,e.makeIdentifierFromModuleName=F,e.isBlockOrCatchScoped=I,e.isCatchClauseVariableDeclarationOrBindingElement=M,e.isAmbientModule=R,e.isShorthandAmbientModuleSymbol=L,e.isBlockScopedContainerTopLevel=K,e.isGlobalScopeAugmentation=j,e.isExternalModuleAugmentation=J,e.isEffectiveExternalModule=z,e.isBlockScope=U,e.getEnclosingBlockScopeContainer=q,e.declarationNameToString=V,e.getNameFromIndexInfo=$,e.getTextOfPropertyName=W,e.entityNameToString=H,e.createDiagnosticForNode=G,e.createDiagnosticForNodeInSourceFile=X,e.createDiagnosticForNodeFromMessageChain=Y,e.getSpanOfTokenAtPosition=Q,e.getErrorSpanForNode=ee,e.isExternalOrCommonJsModule=te,e.isConstEnumDeclaration=ne,e.isConst=re,e.isLet=ae,e.isSuperCall=ie,e.isImportCall=oe,e.isPrologueDirective=se,e.getLeadingCommentRangesOfNode=ce,e.getLeadingCommentRangesOfNodeFromText=ue,e.getJSDocCommentRanges=le,e.fullTripleSlashReferencePathRegEx=/^(\\/\\/\\/\\s*<reference\\s+path\\s*=\\s*)('|\")(.+?)\\2.*?\\/>/,e.fullTripleSlashReferenceTypeReferenceDirectiveRegEx=/^(\\/\\/\\/\\s*<reference\\s+types\\s*=\\s*)('|\")(.+?)\\2.*?\\/>/,e.fullTripleSlashAMDReferencePathRegEx=/^(\\/\\/\\/\\s*<amd-dependency\\s+path\\s*=\\s*)('|\")(.+?)\\2.*?\\/>/,e.isPartOfTypeNode=_e,e.isChildOfNodeWithKind=de,e.forEachReturnStatement=pe,e.forEachYieldExpression=fe,e.getRestParameterElementType=ge,e.isVariableLike=me,e.introducesArgumentsExoticObject=ye,e.unwrapInnermostStatementOfLabel=he,e.isFunctionBlock=ve,e.isObjectLiteralMethod=be,e.isObjectLiteralOrClassExpressionMethod=xe,e.isIdentifierTypePredicate=ke,e.isThisTypePredicate=Se,e.getPropertyAssignment=Te,e.getContainingFunction=Ce,e.getContainingClass=De,e.getThisContainer=Ee,e.getNewTargetContainer=Ne,e.getSuperContainer=Ae,e.getImmediatelyInvokedFunctionExpression=we,e.isSuperProperty=Pe,e.getEntityNameFromTypeNode=Oe,e.getInvokedExpression=Fe,e.nodeCanBeDecorated=Ie,e.nodeIsDecorated=Me,e.nodeOrChildIsDecorated=Re,e.childIsDecorated=Le,e.isJSXTagName=Be,e.isPartOfExpression=Ke,e.isExternalModuleImportEqualsDeclaration=je,e.getExternalModuleImportEqualsDeclarationExpression=Je,e.isInternalModuleImportEqualsDeclaration=ze,e.isSourceFileJavaScript=Ue,e.isInJavaScriptFile=qe,e.isRequireCall=Ve,e.isSingleOrDoubleQuote=$e,e.isDeclarationOfFunctionOrClassExpression=We,e.getRightMostAssignedExpression=He,e.isExportsIdentifier=Ge,e.isModuleExportsPropertyAccessExpression=Xe,e.getSpecialPropertyAssignmentKind=Ye,e.getExternalModuleName=Qe,e.getNamespaceDeclarationNode=Ze,e.isDefaultImport=et,e.hasQuestionToken=tt,e.isJSDocConstructSignature=nt,e.getCommentsFromJSDoc=rt,e.hasJSDocParameterTags=at,e.getJSDocs=st,e.getJSDocParameterTags=ct,e.getParameterFromJSDoc=ut,e.getTypeParameterFromJsDoc=lt,e.getJSDocType=_t,e.getJSDocAugmentsTag=dt,e.getJSDocClassTag=pt,e.getJSDocReturnTag=ft,e.getJSDocReturnType=gt,e.getJSDocTemplateTag=mt,e.hasRestParameter=yt,e.hasDeclaredRestParameter=ht,e.isRestParameter=vt,e.isDeclaredRestParam=bt;!function(e){e[e.None=0]=\"None\",e[e.Definite=1]=\"Definite\",e[e.Compound=2]=\"Compound\";}(e.AssignmentKind||(e.AssignmentKind={})),e.getAssignmentTargetKind=xt,e.isAssignmentTarget=kt,e.isDeleteTarget=St,e.isNodeDescendantOf=Tt,e.isInAmbientContext=Ct,e.isDeclarationName=Dt,e.isAnyDeclarationName=Et,e.isLiteralComputedPropertyDeclarationName=Nt,e.isIdentifierName=At,e.isAliasSymbolDeclaration=wt,e.exportAssignmentIsAlias=Pt,e.getClassExtendsHeritageClauseElement=Ot,e.getClassImplementsHeritageClauseElements=Ft,e.getInterfaceBaseTypeNodes=It,e.getHeritageClause=Mt,e.tryResolveScriptReference=Rt,e.getAncestor=Lt,e.getFileReferenceFromReferencePath=Bt,e.isKeyword=Kt,e.isTrivia=jt;!function(e){e[e.Normal=0]=\"Normal\",e[e.Generator=1]=\"Generator\",e[e.Async=2]=\"Async\",e[e.Invalid=4]=\"Invalid\",e[e.AsyncGenerator=3]=\"AsyncGenerator\";}(e.FunctionFlags||(e.FunctionFlags={})),e.getFunctionFlags=Jt,e.isAsyncFunction=zt,e.isStringOrNumericLiteral=Ut,e.hasDynamicName=qt,e.isDynamicName=Vt,e.isWellKnownSymbolSyntactically=$t,e.getPropertyNameForPropertyNameNode=Wt,e.getPropertyNameForKnownSymbolName=Ht,e.isESSymbolIdentifier=Gt,e.isPushOrUnshiftIdentifier=Xt,e.isParameterDeclaration=Yt,e.getRootDeclaration=Qt,e.nodeStartsNewLexicalEnvironment=Zt,e.nodeIsSynthesized=en,e.getOriginalSourceFile=tn,e.getOriginalSourceFiles=nn;!function(e){e[e.Left=0]=\"Left\",e[e.Right=1]=\"Right\";}(e.Associativity||(e.Associativity={})),e.getExpressionAssociativity=rn,e.getOperatorAssociativity=an,e.getExpressionPrecedence=on$$1,e.getOperator=sn,e.getOperatorPrecedence=cn,e.createDiagnosticCollection=un;var ia=/[\\\\\\\"\\u0000-\\u001f\\t\\v\\f\\b\\r\\n\\u2028\\u2029\\u0085]/g,oa=e.createMapFromTemplate({\"\\0\":\"\\\\0\",\"\\t\":\"\\\\t\",\"\\v\":\"\\\\v\",\"\\f\":\"\\\\f\",\"\\b\":\"\\\\b\",\"\\r\":\"\\\\r\",\"\\n\":\"\\\\n\",\"\\\\\":\"\\\\\\\\\",'\"':'\\\\\"',\"\\u2028\":\"\\\\u2028\",\"\\u2029\":\"\\\\u2029\",\"\":\"\\\\u0085\"});e.escapeString=ln,e.isIntrinsicJsxName=dn;var sa=/[^\\u0000-\\u007F]/g;e.escapeNonAsciiString=fn;var ca=[\"\",\"    \"];e.getIndentString=gn,e.getIndentSize=mn,e.createTextWriter=yn,e.getResolvedExternalModuleName=hn,e.getExternalModuleNameFromDeclaration=vn,e.getExternalModuleNameFromPath=bn,e.getOwnEmitOutputFilePath=xn,e.getDeclarationEmitOutputFilePath=kn,e.getSourceFilesToEmit=Sn,e.sourceFileMayBeEmitted=Tn,e.getSourceFilePathInNewDir=Cn,e.writeFile=Dn,e.getLineOfLocalPosition=En,e.getLineOfLocalPositionFromLineMap=Nn,e.getFirstConstructorWithBody=An,e.getSetAccessorTypeAnnotationNode=Pn,e.getThisParameter=On,e.parameterIsThisKeyword=Fn,e.isThisIdentifier=In,e.identifierIsThisKeyword=Mn,e.getAllAccessorDeclarations=Rn,e.getEffectiveTypeAnnotationNode=Ln,e.getEffectiveReturnTypeNode=Bn,e.getEffectiveTypeParameterDeclarations=Kn,e.getEffectiveSetAccessorTypeAnnotationNode=jn,e.emitNewLineBeforeLeadingComments=Jn,e.emitNewLineBeforeLeadingCommentsOfPosition=zn,e.emitNewLineBeforeLeadingCommentOfPosition=Un,e.emitComments=qn,e.emitDetachedComments=Vn,e.writeCommentRange=$n,e.hasModifiers=Gn,e.hasModifier=Xn,e.getModifierFlags=Yn,e.getModifierFlagsNoCache=Qn,e.modifierToFlag=Zn,e.isLogicalOperator=er,e.isAssignmentOperator=tr,e.tryGetClassExtendingExpressionWithTypeArguments=nr,e.isAssignmentExpression=rr,e.isDestructuringAssignment=ar,e.isSupportedExpressionWithTypeArguments=ir,e.isExpressionWithTypeArgumentsInClassExtendsClause=sr,e.isExpressionWithTypeArgumentsInClassImplementsClause=cr,e.isEntityNameExpression=ur,e.isRightSideOfQualifiedNameOrPropertyAccess=lr,e.isEmptyObjectLiteral=_r,e.isEmptyArrayLiteral=dr,e.getLocalSymbolForExportDefault=pr,e.tryExtractTypeScriptExtension=gr;var ua=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";e.convertToBase64=yr;var la=\"\\r\\n\",_a=\"\\n\";e.getNewLineCharacter=hr,e.isSimpleExpression=vr,e.formatSyntaxKind=Sr,e.formatModifierFlags=Tr,e.formatTransformFlags=Cr,e.formatEmitFlags=Dr,e.formatSymbolFlags=Er,e.formatTypeFlags=Nr,e.formatObjectFlags=Ar,e.getRangePos=wr,e.getRangeEnd=Pr,e.movePos=Or,e.createRange=Fr,e.moveRangeEnd=Ir,e.moveRangePos=Mr,e.moveRangePastDecorators=Rr,e.moveRangePastModifiers=Lr,e.isCollapsedRange=Br,e.collapseRangeToStart=Kr,e.collapseRangeToEnd=jr,e.createTokenRange=Jr,e.rangeIsOnSingleLine=zr,e.rangeStartPositionsAreOnSameLine=Ur,e.rangeEndPositionsAreOnSameLine=qr,e.rangeStartIsOnSameLineAsRangeEnd=Vr,e.rangeEndIsOnSameLineAsRangeStart=$r,e.positionsAreOnSameLine=Wr,e.getStartPositionOfRange=Hr,e.isDeclarationNameOfEnumOrNamespace=Gr,e.getInitializedVariables=Xr,e.isMergedWithClass=Qr,e.isFirstDeclarationOfKind=Zr,e.isWatchSet=ea,e.getCheckFlags=ta,e.getDeclarationModifierFlagsFromSymbol=na,e.levenshtein=ra;}(r||(r={})),function(e){function t(e){switch(e.target){case 5:return\"lib.esnext.full.d.ts\";case 4:return\"lib.es2017.full.d.ts\";case 3:return\"lib.es2016.full.d.ts\";case 2:return\"lib.es6.d.ts\";default:return\"lib.d.ts\"}}function n(e){return e.start+e.length}function r(e){return 0===e.length}function a(e,t){return t>=e.start&&t<n(e)}function i(e,t){return t.start>=e.start&&n(t)<=n(e)}function o(e,t){return Math.max(e.start,t.start)<Math.min(n(e),n(t))}function s(e,t){var r=Math.max(e.start,t.start),a=Math.min(n(e),n(t));if(r<a)return f(r,a)}function c(e,t){return t.start<=n(e)&&n(t)>=e.start}function u(e,t,r){var a=t+r;return t<=n(e)&&a>=e.start}function l(e,t,n,r){var a=n+r;return n<=e+t&&a>=e}function _(e,t){return t<=n(e)&&t>=e.start}function d(e,t){var r=Math.max(e.start,t.start),a=Math.min(n(e),n(t));if(r<=a)return f(r,a)}function p(e,t){if(e<0)throw new Error(\"start < 0\");if(t<0)throw new Error(\"length < 0\");return{start:e,length:t}}function f(e,t){return p(e,t-e)}function g(e){return p(e.span.start,e.newLength)}function m(e){return r(e.span)&&0===e.newLength}function y(e,t){if(t<0)throw new Error(\"newLength < 0\");return{span:e,newLength:t}}function h(t){if(0===t.length)return e.unchangedTextChangeRange;if(1===t.length)return t[0];for(var r=t[0],a=r.span.start,i=n(r.span),o=a+r.newLength,s=1;s<t.length;s++){var c=t[s],u=a,l=i,_=o,d=c.span.start,p=n(c.span),g=d+c.newLength;a=Math.min(u,d),i=Math.max(l,l+(p-_)),o=Math.max(g,g+(_-p));}return y(f(a,i),o-a)}function v(t){if(t&&145===t.kind)for(var n=t;n;n=n.parent)if(e.isFunctionLike(n)||e.isClassLike(n)||230===n.kind)return n}function b(t){return e.hasModifier(t,92)&&152===t.parent.kind&&e.isClassLike(t.parent.parent)}function x(t){for(;t&&(176===t.kind||e.isBindingPattern(t));)t=t.parent;return t}function k(t){t=x(t);var n=e.getModifierFlags(t);return 226===t.kind&&(t=t.parent),t&&227===t.kind&&(n|=e.getModifierFlags(t),t=t.parent),t&&208===t.kind&&(n|=e.getModifierFlags(t)),n}function S(e){var t=(e=x(e)).flags;return 226===e.kind&&(e=e.parent),e&&227===e.kind&&(t|=e.flags,e=e.parent),e&&208===e.kind&&(t|=e.flags),t}function T(t,n,r){function a(t,r,a){var i=e.normalizePath(n.getExecutingFilePath()),o=e.getDirectoryPath(i),s=e.combinePaths(o,t);if(r&&(s=s+\"-\"+r),s=n.resolvePath(e.combinePaths(s,\"diagnosticMessages.generated.json\")),!n.fileExists(s))return!1;var c=\"\";try{c=n.readFile(s);}catch(t){return a&&a.push(e.createCompilerDiagnostic(e.Diagnostics.Unable_to_open_file_0,s)),!1}try{e.localizedDiagnosticMessages=JSON.parse(c);}catch(t){return a&&a.push(e.createCompilerDiagnostic(e.Diagnostics.Corrupted_locale_file_0,s)),!1}return!0}var i=/^([a-z]+)([_\\-]([a-z]+))?$/.exec(t.toLowerCase());if(i){var o=i[1];a(o,i[3],r)||a(o,void 0,r);}else r&&r.push(e.createCompilerDiagnostic(e.Diagnostics.Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1,\"en\",\"ja-jp\"));}function C(e,t){if(e)for(;void 0!==e.original;)e=e.original;return!t||t(e)?e:void 0}function D(e){return 0==(8&e.flags)}function E(e,t){return void 0===e||D(e)?e:(e=C(e),!D(e)||t&&!t(e)?void 0:e)}function N(e){return e.length>=3&&95===e.charCodeAt(0)&&95===e.charCodeAt(1)&&95===e.charCodeAt(2)?e.substr(1):e}function A(t){if(t){if(194!==t.kind)return t.name;var n=t;switch(e.getSpecialPropertyAssignmentKind(n)){case 1:case 4:case 5:case 3:return n.left.name;default:return}}}e.getDefaultLibFileName=t,e.textSpanEnd=n,e.textSpanIsEmpty=r,e.textSpanContainsPosition=a,e.textSpanContainsTextSpan=i,e.textSpanOverlapsWith=o,e.textSpanOverlap=s,e.textSpanIntersectsWithTextSpan=c,e.textSpanIntersectsWith=u,e.decodedTextSpanIntersectsWith=l,e.textSpanIntersectsWithPosition=_,e.textSpanIntersection=d,e.createTextSpan=p,e.createTextSpanFromBounds=f,e.textChangeRangeNewSpan=g,e.textChangeRangeIsUnchanged=m,e.createTextChangeRange=y,e.unchangedTextChangeRange=y(p(0,0),0),e.collapseTextChangeRangesAcrossMultipleVersions=h,e.getTypeParameterOwner=v,e.isParameterPropertyDeclaration=b,e.getCombinedModifierFlags=k,e.getCombinedNodeFlags=S,e.validateLocaleAndSetLanguage=T,e.getOriginalNode=C,e.isParseTreeNode=D,e.getParseTreeNode=E,e.unescapeIdentifier=N,e.getNameOfDeclaration=A;}(r||(r={})),function(e){function t(e){return 8===e.kind}function n(e){return 9===e.kind}function r(e){return 10===e.kind}function a(e){return 12===e.kind}function i(e){return 13===e.kind}function o(e){return 14===e.kind}function s(e){return 15===e.kind}function c(e){return 16===e.kind}function u(e){return 71===e.kind}function l(e){return 143===e.kind}function _(e){return 144===e.kind}function d(e){return 145===e.kind}function p(e){return 146===e.kind}function f(e){return 147===e.kind}function g(e){return 148===e.kind}function m(e){return 149===e.kind}function y(e){return 150===e.kind}function h(e){return 151===e.kind}function v(e){return 152===e.kind}function b(e){return 153===e.kind}function x(e){return 154===e.kind}function k(e){return 155===e.kind}function S(e){return 156===e.kind}function T(e){return 157===e.kind}function C(e){return 158===e.kind}function D(e){return 159===e.kind}function E(e){return 160===e.kind}function N(e){return 161===e.kind}function A(e){return 162===e.kind}function w(e){return 163===e.kind}function P(e){return 164===e.kind}function O(e){return 165===e.kind}function F(e){return 166===e.kind}function I(e){return 167===e.kind}function M(e){return 168===e.kind}function R(e){return 169===e.kind}function L(e){return 170===e.kind}function B(e){return 171===e.kind}function K(e){return 172===e.kind}function j(e){return 173===e.kind}function J(e){return 174===e.kind}function z(e){return 175===e.kind}function U(e){return 176===e.kind}function q(e){return 177===e.kind}function V(e){return 178===e.kind}function $(e){return 179===e.kind}function W(e){return 180===e.kind}function H(e){return 181===e.kind}function G(e){return 182===e.kind}function X(e){return 183===e.kind}function Y(e){return 184===e.kind}function Q(e){return 185===e.kind}function Z(e){for(;297===e.kind;)e=e.expression;return e}function ee(e){return 186===e.kind}function te(e){return 187===e.kind}function ne(e){return 188===e.kind}function re(e){return 191===e.kind}function ae(e){return 190===e.kind}function ie(e){return 191===e.kind}function oe(e){return 192===e.kind}function se(e){return 193===e.kind}function ce(e){return 194===e.kind}function ue(e){return 195===e.kind}function le(e){return 196===e.kind}function _e(e){return 197===e.kind}function de(e){return 198===e.kind}function pe(e){return 199===e.kind}function fe(e){return 200===e.kind}function ge(e){return 201===e.kind}function me(e){return 202===e.kind}function ye(e){return 203===e.kind}function he(e){return 204===e.kind}function ve(e){return 205===e.kind}function be(e){return 206===e.kind}function xe(e){return 207===e.kind}function ke(e){return 208===e.kind}function Se(e){return 209===e.kind}function Te(e){return 210===e.kind}function Ce(e){return 211===e.kind}function De(e){return 212===e.kind}function Ee(e){return 213===e.kind}function Ne(e){return 214===e.kind}function Ae(e){return 215===e.kind}function we(e){return 216===e.kind}function Pe(e){return 217===e.kind}function Oe(e){return 218===e.kind}function Fe(e){return 219===e.kind}function Ie(e){return 220===e.kind}function Me(e){return 221===e.kind}function Re(e){return 222===e.kind}function Le(e){return 223===e.kind}function Be(e){return 224===e.kind}function Ke(e){return 225===e.kind}function je(e){return 226===e.kind}function Je(e){return 227===e.kind}function ze(e){return 228===e.kind}function Ue(e){return 229===e.kind}function qe(e){return 230===e.kind}function Ve(e){return 231===e.kind}function $e(e){return 232===e.kind}function We(e){return 233===e.kind}function He(e){return 234===e.kind}function Ge(e){return 235===e.kind}function Xe(e){return 236===e.kind}function Ye(e){return 237===e.kind}function Qe(e){return 238===e.kind}function Ze(e){return 239===e.kind}function et(e){return 240===e.kind}function tt(e){return 241===e.kind}function nt(e){return 242===e.kind}function rt(e){return 243===e.kind}function at(e){return 244===e.kind}function it(e){return 245===e.kind}function ot(e){return 246===e.kind}function st(e){return 247===e.kind}function ct(e){return 248===e.kind}function ut(e){return 249===e.kind}function lt(e){return 250===e.kind}function _t(e){return 251===e.kind}function dt(e){return 252===e.kind}function pt(e){return 253===e.kind}function ft(e){return 254===e.kind}function gt(e){return 255===e.kind}function mt(e){return 256===e.kind}function yt(e){return 257===e.kind}function ht(e){return 258===e.kind}function vt(e){return 259===e.kind}function bt(e){return 260===e.kind}function xt(e){return 261===e.kind}function kt(e){return 262===e.kind}function St(e){return 263===e.kind}function Tt(e){return 264===e.kind}function Ct(e){return 265===e.kind}function Dt(e){return 266===e.kind}function Et(e){return 267===e.kind}function Nt(e){return 268===e.kind}function At(e){return 269===e.kind}function wt(e){return 270===e.kind}function Pt(e){return 271===e.kind}function Ot(e){return 272===e.kind}function Ft(e){return 273===e.kind}function It(e){return 274===e.kind}function Mt(e){return 275===e.kind}function Rt(e){return 276===e.kind}function Lt(e){return 277===e.kind}function Bt(e){return 278===e.kind}function Kt(e){return 279===e.kind}function jt(e){return 280===e.kind}function Jt(e){return 281===e.kind}function zt(e){return 282===e.kind}function Ut(e){return 283===e.kind}function qt(e){return 285===e.kind}function Vt(e){return 287===e.kind}function $t(e){return 288===e.kind}function Wt(e){return 289===e.kind}function Ht(e){return 290===e.kind}function Gt(e){return 291===e.kind}function Xt(e){return 292===e.kind}function Yt(e){return 293===e.kind}function Qt(e){return 294===e.kind}e.isNumericLiteral=t,e.isStringLiteral=n,e.isJsxText=r,e.isRegularExpressionLiteral=a,e.isNoSubstitutionTemplateLiteral=i,e.isTemplateHead=o,e.isTemplateMiddle=s,e.isTemplateTail=c,e.isIdentifier=u,e.isQualifiedName=l,e.isComputedPropertyName=_,e.isTypeParameterDeclaration=d,e.isParameter=p,e.isDecorator=f,e.isPropertySignature=g,e.isPropertyDeclaration=m,e.isMethodSignature=y,e.isMethodDeclaration=h,e.isConstructorDeclaration=v,e.isGetAccessorDeclaration=b,e.isSetAccessorDeclaration=x,e.isCallSignatureDeclaration=k,e.isConstructSignatureDeclaration=S,e.isIndexSignatureDeclaration=T,e.isTypePredicateNode=C,e.isTypeReferenceNode=D,e.isFunctionTypeNode=E,e.isConstructorTypeNode=N,e.isTypeQueryNode=A,e.isTypeLiteralNode=w,e.isArrayTypeNode=P,e.isTupleTypeNode=O,e.isUnionTypeNode=F,e.isIntersectionTypeNode=I,e.isParenthesizedTypeNode=M,e.isThisTypeNode=R,e.isTypeOperatorNode=L,e.isIndexedAccessTypeNode=B,e.isMappedTypeNode=K,e.isLiteralTypeNode=j,e.isObjectBindingPattern=J,e.isArrayBindingPattern=z,e.isBindingElement=U,e.isArrayLiteralExpression=q,e.isObjectLiteralExpression=V,e.isPropertyAccessExpression=$,e.isElementAccessExpression=W,e.isCallExpression=H,e.isNewExpression=G,e.isTaggedTemplateExpression=X,e.isTypeAssertion=Y,e.isParenthesizedExpression=Q,e.skipPartiallyEmittedExpressions=Z,e.isFunctionExpression=ee,e.isArrowFunction=te,e.isDeleteExpression=ne,e.isTypeOfExpression=re,e.isVoidExpression=ae,e.isAwaitExpression=ie,e.isPrefixUnaryExpression=oe,e.isPostfixUnaryExpression=se,e.isBinaryExpression=ce,e.isConditionalExpression=ue,e.isTemplateExpression=le,e.isYieldExpression=_e,e.isSpreadElement=de,e.isClassExpression=pe,e.isOmittedExpression=fe,e.isExpressionWithTypeArguments=ge,e.isAsExpression=me,e.isNonNullExpression=ye,e.isMetaProperty=he,e.isTemplateSpan=ve,e.isSemicolonClassElement=be,e.isBlock=xe,e.isVariableStatement=ke,e.isEmptyStatement=Se,e.isExpressionStatement=Te,e.isIfStatement=Ce,e.isDoStatement=De,e.isWhileStatement=Ee,e.isForStatement=Ne,e.isForInStatement=Ae,e.isForOfStatement=we,e.isContinueStatement=Pe,e.isBreakStatement=Oe,e.isReturnStatement=Fe,e.isWithStatement=Ie,e.isSwitchStatement=Me,e.isLabeledStatement=Re,e.isThrowStatement=Le,e.isTryStatement=Be,e.isDebuggerStatement=Ke,e.isVariableDeclaration=je,e.isVariableDeclarationList=Je,e.isFunctionDeclaration=ze,e.isClassDeclaration=Ue,e.isInterfaceDeclaration=qe,e.isTypeAliasDeclaration=Ve,e.isEnumDeclaration=$e,e.isModuleDeclaration=We,e.isModuleBlock=He,e.isCaseBlock=Ge,e.isNamespaceExportDeclaration=Xe,e.isImportEqualsDeclaration=Ye,e.isImportDeclaration=Qe,e.isImportClause=Ze,e.isNamespaceImport=et,e.isNamedImports=tt,e.isImportSpecifier=nt,e.isExportAssignment=rt,e.isExportDeclaration=at,e.isNamedExports=it,e.isExportSpecifier=ot,e.isMissingDeclaration=st,e.isExternalModuleReference=ct,e.isJsxElement=ut,e.isJsxSelfClosingElement=lt,e.isJsxOpeningElement=_t,e.isJsxClosingElement=dt,e.isJsxAttribute=pt,e.isJsxAttributes=ft,e.isJsxSpreadAttribute=gt,e.isJsxExpression=mt,e.isCaseClause=yt,e.isDefaultClause=ht,e.isHeritageClause=vt,e.isCatchClause=bt,e.isPropertyAssignment=xt,e.isShorthandPropertyAssignment=kt,e.isSpreadAssignment=St,e.isEnumMember=Tt,e.isSourceFile=Ct,e.isBundle=Dt,e.isJSDocTypeExpression=Et,e.isJSDocAllType=Nt,e.isJSDocUnknownType=At,e.isJSDocArrayType=wt,e.isJSDocUnionType=Pt,e.isJSDocTupleType=Ot,e.isJSDocNullableType=Ft,e.isJSDocNonNullableType=It,e.isJSDocRecordType=Mt,e.isJSDocRecordMember=Rt,e.isJSDocTypeReference=Lt,e.isJSDocOptionalType=Bt,e.isJSDocFunctionType=Kt,e.isJSDocVariadicType=jt,e.isJSDocConstructorType=Jt,e.isJSDocThisType=zt,e.isJSDoc=Ut,e.isJSDocAugmentsTag=qt,e.isJSDocParameterTag=Vt,e.isJSDocReturnTag=$t,e.isJSDocTypeTag=Wt,e.isJSDocTemplateTag=Ht,e.isJSDocTypedefTag=Gt,e.isJSDocPropertyTag=Xt,e.isJSDocTypeLiteral=Yt,e.isJSDocLiteralType=Qt;}(r||(r={})),function(e){function t(e){return n(e.kind)}function n(e){return e>=143}function r(e){return e.kind>=0&&e.kind<=142}function a(e){return e.hasOwnProperty(\"pos\")&&e.hasOwnProperty(\"end\")}function i(e){return 8<=e&&e<=13}function o(e){return i(e.kind)}function s(e){return 13<=e&&e<=16}function c(e){var t=e.kind;return 15===t||16===t}function u(t){return e.isIdentifier(t)&&t.autoGenerateKind>0}function l(e){switch(e){case 117:case 120:case 76:case 124:case 79:case 84:case 114:case 112:case 113:case 131:case 115:return!0}return!1}function _(e){return l(e.kind)}function d(e){var t=e.kind;return 143===t||71===t}function p(e){var t=e.kind;return 71===t||9===t||8===t||144===t}function f(e){var t=e.kind;return 71===t||174===t||175===t}function g(e){return e&&m(e.kind)}function m(e){switch(e){case 152:case 186:case 228:case 187:case 151:case 150:case 153:case 154:case 155:case 156:case 157:case 160:case 161:return!0}return!1}function y(e){var t=e.kind;return 152===t||149===t||151===t||153===t||154===t||157===t||206===t||247===t}function h(e){return e&&(229===e.kind||199===e.kind)}function v(e){return e&&(153===e.kind||154===e.kind)}function b(e){var t=e.kind;return 156===t||155===t||148===t||150===t||157===t||247===t}function x(e){var t=e.kind;return 261===t||262===t||263===t||151===t||153===t||154===t||247===t}function k(e){return e>=158&&e<=173||119===e||133===e||134===e||122===e||136===e||137===e||99===e||105===e||139===e||95===e||130===e||201===e}function S(e){return k(e.kind)}function T(e){switch(e.kind){case 160:case 161:return!0}return!1}function C(e){if(e){var t=e.kind;return 175===t||174===t}return!1}function D(e){var t=e.kind;return 177===t||178===t}function E(e){var t=e.kind;return 176===t||200===t}function N(e){switch(e.kind){case 226:case 146:case 176:return!0}return!1}function A(e){return w(e)||P(e)}function w(e){switch(e.kind){case 174:case 178:return!0}return!1}function P(e){switch(e.kind){case 175:case 177:return!0}return!1}function O(e){var t=e.kind;return 179===t||143===t}function F(e){switch(e.kind){case 251:case 250:case 181:case 182:case 183:case 147:return!0;default:return!1}}function I(e){return 181===e.kind||182===e.kind}function M(e){var t=e.kind;return 196===t||13===t}function R(e){return 179===e||180===e||182===e||181===e||249===e||250===e||183===e||177===e||185===e||178===e||199===e||186===e||71===e||12===e||8===e||9===e||13===e||196===e||86===e||95===e||99===e||101===e||97===e||203===e||204===e}function L(t){return R(e.skipPartiallyEmittedExpressions(t).kind)}function B(e){return 192===e||193===e||188===e||189===e||190===e||191===e||184===e||R(e)}function K(t){return B(e.skipPartiallyEmittedExpressions(t).kind)}function j(e){return 195===e||197===e||187===e||194===e||198===e||202===e||200===e||298===e||B(e)}function J(t){return j(e.skipPartiallyEmittedExpressions(t).kind)}function z(e){var t=e.kind;return 184===t||202===t}function U(e){return 297===e.kind}function q(e){return 296===e.kind}function V(e){return q(e)||U(e)}function $(e,t){switch(e.kind){case 214:case 215:case 216:case 212:case 213:return!0;case 222:return t&&$(e.statement,t)}return!1}function W(e){return 215===e.kind||216===e.kind}function H(t){return e.isBlock(t)||J(t)}function G(t){return e.isBlock(t)}function X(t){return e.isVariableDeclarationList(t)||J(t)}function Y(e){var t=e.kind;return 234===t||233===t||71===t}function Q(e){var t=e.kind;return 234===t||233===t}function Z(e){var t=e.kind;return 71===t||233===t}function ee(e){var t=e.kind;return 241===t||240===t}function te(e){return 233===e.kind||232===e.kind}function ne(e){return 187===e||176===e||229===e||199===e||152===e||232===e||264===e||246===e||228===e||186===e||153===e||239===e||237===e||242===e||230===e||253===e||151===e||150===e||233===e||236===e||240===e||146===e||261===e||149===e||148===e||154===e||262===e||231===e||145===e||226===e||291===e}function re(e){return 228===e||247===e||229===e||230===e||231===e||232===e||233===e||238===e||237===e||244===e||243===e||236===e}function ae(e){return 218===e||217===e||225===e||212===e||210===e||209===e||215===e||216===e||214===e||211===e||222===e||219===e||221===e||223===e||224===e||208===e||213===e||220===e||296===e||300===e||299===e}function ie(t){return 145===t.kind?290!==t.parent.kind||e.isInJavaScriptFile(t):ne(t.kind)}function oe(e){return re(e.kind)}function se(e){return ae(e.kind)}function ce(e){var t=e.kind;return ae(t)||re(t)||207===t}function ue(e){var t=e.kind;return 248===t||143===t||71===t}function le(e){var t=e.kind;return 99===t||71===t||179===t}function _e(e){var t=e.kind;return 249===t||256===t||250===t||10===t}function de(e){var t=e.kind;return 253===t||255===t}function pe(e){var t=e.kind;return 9===t||256===t}function fe(e){var t=e.kind;return 251===t||250===t}function ge(e){var t=e.kind;return 257===t||258===t}function me(e){return e.kind>=267&&e.kind<=294}function ye(e){return 283===e.kind||he(e)}function he(e){return e.kind>=284&&e.kind<=294}e.isNode=t,e.isNodeKind=n,e.isToken=r,e.isNodeArray=a,e.isLiteralKind=i,e.isLiteralExpression=o,e.isTemplateLiteralKind=s,e.isTemplateMiddleOrTemplateTail=c,e.isGeneratedIdentifier=u,e.isModifierKind=l,e.isModifier=_,e.isEntityName=d,e.isPropertyName=p,e.isBindingName=f,e.isFunctionLike=g,e.isFunctionLikeKind=m,e.isClassElement=y,e.isClassLike=h,e.isAccessor=v,e.isTypeElement=b,e.isObjectLiteralElementLike=x,e.isTypeNode=S,e.isFunctionOrConstructorTypeNode=T,e.isBindingPattern=C,e.isAssignmentPattern=D,e.isArrayBindingElement=E,e.isDeclarationBindingElement=N,e.isBindingOrAssignmentPattern=A,e.isObjectBindingOrAssignmentPattern=w,e.isArrayBindingOrAssignmentPattern=P,e.isPropertyAccessOrQualifiedName=O,e.isCallLikeExpression=F,e.isCallOrNewExpression=I,e.isTemplateLiteral=M,e.isLeftHandSideExpression=L,e.isUnaryExpression=K,e.isExpression=J,e.isAssertionExpression=z,e.isPartiallyEmittedExpression=U,e.isNotEmittedStatement=q,e.isNotEmittedOrPartiallyEmittedNode=V,e.isIterationStatement=$,e.isForInOrOfStatement=W,e.isConciseBody=H,e.isFunctionBody=G,e.isForInitializer=X,e.isModuleBody=Y,e.isNamespaceBody=Q,e.isJSDocNamespaceBody=Z,e.isNamedImportBindings=ee,e.isModuleOrEnumDeclaration=te,e.isDeclaration=ie,e.isDeclarationStatement=oe,e.isStatementButNotDeclaration=se,e.isStatement=ce,e.isModuleReference=ue,e.isJsxTagNameExpression=le,e.isJsxChild=_e,e.isJsxAttributeLike=de,e.isStringLiteralOrJsxExpression=pe,e.isJsxOpeningLikeElement=fe,e.isCaseOrDefaultClause=ge,e.isJSDocNode=me,e.isJSDocCommentContainingNode=ye,e.isJSDocTag=he;}(r||(r={}));!function(e){function t(t,n,r){return 265===t?new(m||(m=e.objectAllocator.getSourceFileConstructor()))(t,n,r):71===t?new(g||(g=e.objectAllocator.getIdentifierConstructor()))(t,n,r):e.isNodeKind(t)?new(p||(p=e.objectAllocator.getNodeConstructor()))(t,n,r):new(f||(f=e.objectAllocator.getTokenConstructor()))(t,n,r)}function n(e,t){if(t)return e(t)}function r(e,t){if(t)return e(t)}function a(e,t){if(t)for(var n=0,r=t;n<r.length;n++){var a=e(r[n]);if(a)return a}}function i(e,t,i){if(e){var o=i?r:a,s=i||t;switch(e.kind){case 143:return n(t,e.left)||n(t,e.right);case 145:return n(t,e.name)||n(t,e.constraint)||n(t,e.default)||n(t,e.expression);case 262:return o(s,e.decorators)||o(s,e.modifiers)||n(t,e.name)||n(t,e.questionToken)||n(t,e.equalsToken)||n(t,e.objectAssignmentInitializer);case 263:return n(t,e.expression);case 146:case 149:case 148:case 261:case 226:case 176:return o(s,e.decorators)||o(s,e.modifiers)||n(t,e.propertyName)||n(t,e.dotDotDotToken)||n(t,e.name)||n(t,e.questionToken)||n(t,e.type)||n(t,e.initializer);case 160:case 161:case 155:case 156:case 157:return o(s,e.decorators)||o(s,e.modifiers)||o(s,e.typeParameters)||o(s,e.parameters)||n(t,e.type);case 151:case 150:case 152:case 153:case 154:case 186:case 228:case 187:return o(s,e.decorators)||o(s,e.modifiers)||n(t,e.asteriskToken)||n(t,e.name)||n(t,e.questionToken)||o(s,e.typeParameters)||o(s,e.parameters)||n(t,e.type)||n(t,e.equalsGreaterThanToken)||n(t,e.body);case 159:return n(t,e.typeName)||o(s,e.typeArguments);case 158:return n(t,e.parameterName)||n(t,e.type);case 162:return n(t,e.exprName);case 163:return o(s,e.members);case 164:return n(t,e.elementType);case 165:return o(s,e.elementTypes);case 166:case 167:return o(s,e.types);case 168:case 170:return n(t,e.type);case 171:return n(t,e.objectType)||n(t,e.indexType);case 172:return n(t,e.readonlyToken)||n(t,e.typeParameter)||n(t,e.questionToken)||n(t,e.type);case 173:return n(t,e.literal);case 174:case 175:case 177:return o(s,e.elements);case 178:return o(s,e.properties);case 179:return n(t,e.expression)||n(t,e.name);case 180:return n(t,e.expression)||n(t,e.argumentExpression);case 181:case 182:return n(t,e.expression)||o(s,e.typeArguments)||o(s,e.arguments);case 183:return n(t,e.tag)||n(t,e.template);case 184:return n(t,e.type)||n(t,e.expression);case 185:case 188:case 189:case 190:return n(t,e.expression);case 192:return n(t,e.operand);case 197:return n(t,e.asteriskToken)||n(t,e.expression);case 191:return n(t,e.expression);case 193:return n(t,e.operand);case 194:return n(t,e.left)||n(t,e.operatorToken)||n(t,e.right);case 202:return n(t,e.expression)||n(t,e.type);case 203:return n(t,e.expression);case 204:return n(t,e.name);case 195:return n(t,e.condition)||n(t,e.questionToken)||n(t,e.whenTrue)||n(t,e.colonToken)||n(t,e.whenFalse);case 198:return n(t,e.expression);case 207:case 234:return o(s,e.statements);case 265:return o(s,e.statements)||n(t,e.endOfFileToken);case 208:return o(s,e.decorators)||o(s,e.modifiers)||n(t,e.declarationList);case 227:return o(s,e.declarations);case 210:return n(t,e.expression);case 211:return n(t,e.expression)||n(t,e.thenStatement)||n(t,e.elseStatement);case 212:return n(t,e.statement)||n(t,e.expression);case 213:return n(t,e.expression)||n(t,e.statement);case 214:return n(t,e.initializer)||n(t,e.condition)||n(t,e.incrementor)||n(t,e.statement);case 215:return n(t,e.initializer)||n(t,e.expression)||n(t,e.statement);case 216:return n(t,e.awaitModifier)||n(t,e.initializer)||n(t,e.expression)||n(t,e.statement);case 217:case 218:return n(t,e.label);case 219:return n(t,e.expression);case 220:return n(t,e.expression)||n(t,e.statement);case 221:return n(t,e.expression)||n(t,e.caseBlock);case 235:return o(s,e.clauses);case 257:return n(t,e.expression)||o(s,e.statements);case 258:return o(s,e.statements);case 222:return n(t,e.label)||n(t,e.statement);case 223:return n(t,e.expression);case 224:return n(t,e.tryBlock)||n(t,e.catchClause)||n(t,e.finallyBlock);case 260:return n(t,e.variableDeclaration)||n(t,e.block);case 147:return n(t,e.expression);case 229:case 199:case 230:return o(s,e.decorators)||o(s,e.modifiers)||n(t,e.name)||o(s,e.typeParameters)||o(s,e.heritageClauses)||o(s,e.members);case 231:return o(s,e.decorators)||o(s,e.modifiers)||n(t,e.name)||o(s,e.typeParameters)||n(t,e.type);case 232:return o(s,e.decorators)||o(s,e.modifiers)||n(t,e.name)||o(s,e.members);case 264:return n(t,e.name)||n(t,e.initializer);case 233:return o(s,e.decorators)||o(s,e.modifiers)||n(t,e.name)||n(t,e.body);case 237:return o(s,e.decorators)||o(s,e.modifiers)||n(t,e.name)||n(t,e.moduleReference);case 238:return o(s,e.decorators)||o(s,e.modifiers)||n(t,e.importClause)||n(t,e.moduleSpecifier);case 239:return n(t,e.name)||n(t,e.namedBindings);case 236:case 240:return n(t,e.name);case 241:case 245:return o(s,e.elements);case 244:return o(s,e.decorators)||o(s,e.modifiers)||n(t,e.exportClause)||n(t,e.moduleSpecifier);case 242:case 246:return n(t,e.propertyName)||n(t,e.name);case 243:return o(s,e.decorators)||o(s,e.modifiers)||n(t,e.expression);case 196:return n(t,e.head)||o(s,e.templateSpans);case 205:return n(t,e.expression)||n(t,e.literal);case 144:return n(t,e.expression);case 259:return o(s,e.types);case 201:return n(t,e.expression)||o(s,e.typeArguments);case 248:return n(t,e.expression);case 247:return o(s,e.decorators);case 298:return o(s,e.elements);case 249:return n(t,e.openingElement)||o(s,e.children)||n(t,e.closingElement);case 250:case 251:return n(t,e.tagName)||n(t,e.attributes);case 254:return o(s,e.properties);case 253:return n(t,e.name)||n(t,e.initializer);case 255:return n(t,e.expression);case 256:return n(t,e.dotDotDotToken)||n(t,e.expression);case 252:return n(t,e.tagName);case 267:return n(t,e.type);case 271:case 272:return o(s,e.types);case 270:return n(t,e.elementType);case 274:case 273:return n(t,e.type);case 275:return n(t,e.literal);case 277:return n(t,e.name)||o(s,e.typeArguments);case 278:return n(t,e.type);case 279:return o(s,e.parameters)||n(t,e.type);case 280:case 281:case 282:return n(t,e.type);case 276:return n(t,e.name)||n(t,e.type);case 283:return o(s,e.tags);case 287:return n(t,e.preParameterName)||n(t,e.typeExpression)||n(t,e.postParameterName);case 288:case 289:case 285:return n(t,e.typeExpression);case 290:return o(s,e.typeParameters);case 291:return n(t,e.typeExpression)||n(t,e.fullName)||n(t,e.name)||n(t,e.jsDocTypeLiteral);case 293:return o(s,e.jsDocPropertyTags);case 292:return n(t,e.typeExpression)||n(t,e.name);case 297:return n(t,e.expression);case 294:return n(t,e.literal)}}}function o(t,n,r,a,i){void 0===a&&(a=!1),e.performance.mark(\"beforeParse\");var o=y.parseSourceFile(t,n,r,void 0,a,i);return e.performance.mark(\"afterParse\"),e.performance.measure(\"Parse\",\"beforeParse\",\"afterParse\"),o}function s(e,t){return y.parseIsolatedEntityName(e,t)}function c(e,t){return y.parseJsonText(e,t)}function u(e){return void 0!==e.externalModuleIndicator}function l(e,t,n,r){var a=h.updateSourceFile(e,t,n,r);return a.flags|=524288&e.flags,a}function _(e,t,n){var r=y.JSDocParser.parseIsolatedJSDocComment(e,t,n);return r&&r.jsDoc&&y.fixupParentReferences(r.jsDoc),r}function d(e,t,n){return y.JSDocParser.parseJSDocTypeExpressionForTests(e,t,n)}var p,f,g,m;e.createNode=t,e.forEachChild=i,e.createSourceFile=o,e.parseIsolatedEntityName=s,e.parseJsonText=c,e.isExternalModule=u,e.updateSourceFile=l,e.parseIsolatedJSDocComment=_,e.parseJSDocTypeExpressionForTests=d;var y;!function(t){function n(t,n,r,a,i,o){s(n,r,a,o=e.ensureScriptKind(t,o));var l=u(t,r,i,o);return c(),l}function r(e,t){s(e,t,void 0,1),B();var n=He(!0),r=1===L()&&!ri.length;return c(),r?n:void 0}function a(t,n){s(n,2,void 0,6);var r=ni=d(t,2,6);return B(),1===L()?ni.endOfFileToken=Z():17===L()||$(function(){return 9===L()})?(r.jsonObject=lr(),ni.endOfFileToken=Q(1,!1,e.Diagnostics.Unexpected_token)):G(17),ni.parseDiagnostics=ri,c(),r}function o(e){return 4===e||2===e||1===e||6===e?1:0}function s(t,n,r,a){Qa=e.objectAllocator.getNodeConstructor(),Za=e.objectAllocator.getTokenConstructor(),ei=e.objectAllocator.getIdentifierConstructor(),ti=e.objectAllocator.getSourceFileConstructor(),oi=t,ai=r,ri=[],li=0,ci=e.createMap(),ui=0,si=0,_i=1===a||2===a||6===a?65536:0,fi=!1,di.setText(oi),di.setOnError(I),di.setScriptTarget(n),di.setLanguageVariant(o(a));}function c(){di.setText(\"\"),di.setOnError(void 0),ri=void 0,ni=void 0,ci=void 0,ai=void 0,oi=void 0;}function u(t,n,r,a){return ni=d(t,n,a),ni.flags=_i,B(),Xa(ni),ni.statements=Pe(0,zr),e.Debug.assert(1===L()),ni.endOfFileToken=l(Z()),Ya(ni),ni.nodeCount=si,ni.identifierCount=ui,ni.identifiers=ci,ni.parseDiagnostics=ri,r&&_(ni),ni}function l(t){var n=e.getJSDocCommentRanges(t,ni.text);if(n)for(var r=0,a=n;r<a.length;r++){var i=a[r],o=yi.parseJSDocComment(t,i.pos,i.end-i.pos);o&&(t.jsDoc||(t.jsDoc=[]),t.jsDoc.push(o));}return t}function _(e){function t(e){if(e.parent!==n){e.parent=n;var r=n;if(n=e,i(e,t),e.jsDoc)for(var a=0,o=e.jsDoc;a<o.length;a++){var s=o[a];s.parent=e,n=s,i(s,t);}n=r;}}var n=e;i(e,t);}function d(t,n,r){var a=new ti(265,0,oi.length);return si++,a.text=oi,a.bindDiagnostics=[],a.languageVersion=n,a.fileName=e.normalizePath(t),a.languageVariant=o(r),a.isDeclarationFile=e.fileExtensionIs(a.fileName,\".d.ts\"),a.scriptKind=r,a}function p(e,t){e?_i|=t:_i&=~t;}function f(e){p(e,2048);}function g(e){p(e,4096);}function m(e){p(e,8192);}function y(e){p(e,16384);}function h(e,t){var n=e&_i;if(n){p(!1,n);var r=t();return p(!0,n),r}return t()}function v(e,t){var n=e&~_i;if(n){p(!0,n);var r=t();return p(!1,n),r}return t()}function b(e){return h(2048,e)}function x(e){return v(2048,e)}function k(e){return v(4096,e)}function S(e){return v(8192,e)}function T(e){return v(16384,e)}function C(e){return h(16384,e)}function D(e){return v(20480,e)}function E(e){return 0!=(_i&e)}function N(){return E(4096)}function A(){return E(2048)}function w(){return E(8192)}function P(){return E(16384)}function O(e,t){var n=di.getTokenPos();F(n,di.getTextPos()-n,e,t);}function F(t,n,r,a){var i=e.lastOrUndefined(ri);i&&t===i.start||ri.push(e.createFileDiagnostic(ni,t,n,r,a)),fi=!0;}function I(e,t){F(di.getTextPos(),t||0,e);}function M(){return di.getStartPos()}function R(){return di.getStartPos()}function L(){return ii}function B(){return ii=di.scan()}function K(){return ii=di.reScanGreaterToken()}function j(){return ii=di.reScanSlashToken()}function J(){return ii=di.reScanTemplateToken()}function z(){return ii=di.scanJsxIdentifier()}function U(){return ii=di.scanJsxToken()}function q(){return ii=di.scanJsxAttributeValue()}function V(t,n){var r=ii,a=ri.length,i=fi,o=_i,s=n?di.lookAhead(t):di.tryScan(t);return e.Debug.assert(o===_i),s&&!n||(ii=r,ri.length=a,fi=i),s}function $(e){return V(e,!0)}function W(e){return V(e,!1)}function H(){return 71===L()||(116!==L()||!N())&&((121!==L()||!P())&&L()>107)}function G(t,n,r){return void 0===r&&(r=!0),L()===t?(r&&B(),!0):(n?O(n):O(e.Diagnostics._0_expected,e.tokenToString(t)),!1)}function X(e){return L()===e&&(B(),!0)}function Y(e){if(L()===e)return Z()}function Q(e,t,n,r){return Y(e)||ie(e,t,n,r)}function Z(){var e=ne(L());return B(),ae(e)}function ee(){return 25===L()||(18===L()||1===L()||di.hasPrecedingLineBreak())}function te(){return ee()?(25===L()&&B(),!0):G(25)}function ne(t,n){return si++,n>=0||(n=di.getStartPos()),e.isNodeKind(t)?new Qa(t,n,n):71===t?new ei(t,n,n):new Za(t,n,n)}function re(e,t){var n=e||[];return t>=0||(t=M()),n.pos=t,n.end=t,n}function ae(e,t){return e.end=void 0===t?di.getStartPos():t,_i&&(e.flags|=_i),fi&&(fi=!1,e.flags|=32768),e}function ie(e,t,n,r){t?F(di.getStartPos(),0,n,r):O(n,r);var a=ne(e,di.getStartPos());return a.text=\"\",ae(a)}function oe(t){t=e.escapeIdentifier(t);var n=ci.get(t);return void 0===n&&ci.set(t,n=t),n}function se(t,n){if(ui++,t){var r=ne(71);return 71!==L()&&(r.originalKeywordKind=L()),r.text=oe(di.getTokenValue()),B(),ae(r)}return ie(71,!1,n||e.Diagnostics.Identifier_expected)}function ce(e){return se(H(),e)}function ue(){return se(e.tokenIsIdentifierOrKeyword(L()))}function le(){return e.tokenIsIdentifierOrKeyword(L())||9===L()||8===L()}function _e(e){return 9===L()||8===L()?Qe(!0):e&&21===L()?ge():ue()}function de(){return _e(!0)}function pe(){return _e(!1)}function fe(){return 9===L()||8===L()||e.tokenIsIdentifierOrKeyword(L())}function ge(){var e=ne(144);return G(21),e.expression=b(tn),G(22),ae(e)}function me(e){return L()===e&&W(he)}function ye(){return B(),!di.hasPrecedingLineBreak()&&be()}function he(){return 76===L()?83===B():84===L()?(B(),79===L()?$(xe):39!==L()&&118!==L()&&17!==L()&&be()):79===L()?xe():115===L()?(B(),be()):ye()}function ve(){return e.isModifierKind(L())&&W(he)}function be(){return 21===L()||17===L()||39===L()||24===L()||le()}function xe(){return B(),75===L()||89===L()||109===L()||117===L()&&$(Ir)||120===L()&&$(Mr)}function ke(t,n){if(Fe(t))return!0;switch(t){case 0:case 1:case 3:return!(25===L()&&n)&&Kr();case 2:return 73===L()||79===L();case 4:return $(xt);case 5:return $(la)||25===L()&&!n;case 6:return 21===L()||le();case 12:return 21===L()||39===L()||24===L()||le();case 17:return le();case 9:return 21===L()||24===L()||le();case 7:return 17===L()?$(Se):n?H()&&!De():Qt()&&!De();case 8:return Xr();case 10:return 26===L()||24===L()||Xr();case 18:return H();case 11:case 15:return 26===L()||24===L()||Zt();case 16:return ut();case 19:case 20:return 26===L()||Rt();case 21:return Sa();case 22:return e.tokenIsIdentifierOrKeyword(L());case 13:return e.tokenIsIdentifierOrKeyword(L())||17===L();case 14:return!0;case 23:case 24:case 26:return yi.isJSDocType();case 25:return fe()}e.Debug.fail(\"Non-exhaustive case in 'isListElement'.\");}function Se(){if(e.Debug.assert(17===L()),18===B()){var t=B();return 26===t||17===t||85===t||108===t}return!0}function Te(){return B(),H()}function Ce(){return B(),e.tokenIsIdentifierOrKeyword(L())}function De(){return(108===L()||85===L())&&$(Ee)}function Ee(){return B(),Zt()}function Ne(e){if(1===L())return!0;switch(e){case 1:case 2:case 4:case 5:case 6:case 12:case 9:case 22:return 18===L();case 3:return 18===L()||73===L()||79===L();case 7:return 17===L()||85===L()||108===L();case 8:return Ae();case 18:return 29===L()||19===L()||17===L()||85===L()||108===L();case 11:return 20===L()||25===L();case 15:case 20:case 10:return 22===L();case 16:case 17:return 20===L()||22===L();case 19:return 26!==L();case 21:return 17===L()||18===L();case 13:return 29===L()||41===L();case 14:return 27===L()&&$(Ma);case 23:return 20===L()||56===L()||18===L();case 24:return 29===L()||18===L();case 26:return 22===L()||18===L();case 25:return 18===L()}}function Ae(){return!!ee()||(!!vn(L())||36===L())}function we(){for(var e=0;e<27;e++)if(li&1<<e&&(ke(e,!0)||Ne(e)))return!0;return!1}function Pe(e,t){var n=li;li|=1<<e;for(var r=re();!Ne(e);)if(ke(e,!1)){var a=Oe(e,t);r.push(a);}else if(Ue(e))break;return r.end=R(),li=n,r}function Oe(e,t){var n=Fe(e);return n?Ie(n):t()}function Fe(t){if(!fi&&ai){var n=ai.currentNode(di.getStartPos());if(!e.nodeIsMissing(n)&&!n.intersectsChange&&!e.containsParseError(n)&&(96256&n.flags)===_i&&Me(n,t))return n}}function Ie(e){return di.setTextPos(e.end),B(),e}function Me(e,t){switch(t){case 5:return Re(e);case 2:return Le(e);case 0:case 1:case 3:return Be(e);case 6:return Ke(e);case 4:return je(e);case 8:return Je(e);case 16:return ze(e);case 17:return!1}return!1}function Re(e){if(e)switch(e.kind){case 152:case 157:case 153:case 154:case 149:case 206:return!0;case 151:var t=e;return!(71===t.name.kind&&123===t.name.originalKeywordKind)}return!1}function Le(e){if(e)switch(e.kind){case 257:case 258:return!0}return!1}function Be(e){if(e)switch(e.kind){case 228:case 208:case 207:case 211:case 210:case 223:case 219:case 221:case 218:case 217:case 215:case 216:case 214:case 213:case 220:case 209:case 224:case 222:case 212:case 225:case 238:case 237:case 244:case 243:case 233:case 229:case 230:case 232:case 231:return!0}return!1}function Ke(e){return 264===e.kind}function je(e){if(e)switch(e.kind){case 156:case 150:case 157:case 148:case 155:return!0}return!1}function Je(e){return 226===e.kind&&void 0===e.initializer}function ze(e){return 146===e.kind&&void 0===e.initializer}function Ue(e){return O(qe(e)),!!we()||(B(),!1)}function qe(t){switch(t){case 0:case 1:return e.Diagnostics.Declaration_or_statement_expected;case 2:return e.Diagnostics.case_or_default_expected;case 3:return e.Diagnostics.Statement_expected;case 17:case 4:return e.Diagnostics.Property_or_signature_expected;case 5:return e.Diagnostics.Unexpected_token_A_constructor_method_accessor_or_property_was_expected;case 6:return e.Diagnostics.Enum_member_expected;case 7:return e.Diagnostics.Expression_expected;case 8:return e.Diagnostics.Variable_declaration_expected;case 9:return e.Diagnostics.Property_destructuring_pattern_expected;case 10:return e.Diagnostics.Array_element_destructuring_pattern_expected;case 11:return e.Diagnostics.Argument_expression_expected;case 12:return e.Diagnostics.Property_assignment_expected;case 15:return e.Diagnostics.Expression_or_comma_expected;case 16:return e.Diagnostics.Parameter_declaration_expected;case 18:return e.Diagnostics.Type_parameter_declaration_expected;case 19:return e.Diagnostics.Type_argument_expected;case 20:return e.Diagnostics.Type_expected;case 21:return e.Diagnostics.Unexpected_token_expected;case 22:case 13:case 14:return e.Diagnostics.Identifier_expected;case 23:return e.Diagnostics.Parameter_declaration_expected;case 24:return e.Diagnostics.Type_argument_expected;case 26:return e.Diagnostics.Type_expected;case 25:return e.Diagnostics.Property_assignment_expected}}function Ve(e,t,n){var r=li;li|=1<<e;for(var a=re(),i=-1;;)if(ke(e,!1)){if(a.push(Oe(e,t)),i=di.getTokenPos(),X(26))continue;if(i=-1,Ne(e))break;G(26),n&&25===L()&&!di.hasPrecedingLineBreak()&&B();}else{if(Ne(e))break;if(Ue(e))break}return i>=0&&(a.hasTrailingComma=!0),a.end=R(),li=r,a}function $e(){return re()}function We(e,t,n,r){if(G(n)){var a=Ve(e,t);return G(r),a}return $e()}function He(e,t){for(var n=ce(t);X(23);){var r=ne(143,n.pos);r.left=n,r.right=Ge(e),n=ae(r);}return n}function Ge(t){return di.hasPrecedingLineBreak()&&e.tokenIsIdentifierOrKeyword(L())&&$(Fr)?ie(71,!0,e.Diagnostics.Identifier_expected):t?ue():ce()}function Xe(){var t=ne(196);t.head=Ze(),e.Debug.assert(14===t.head.kind,\"Template head has wrong token kind\");var n=re();do{n.push(Ye());}while(15===e.lastOrUndefined(n).literal.kind);return n.end=R(),t.templateSpans=n,ae(t)}function Ye(){var t=ne(205);t.expression=b(tn);var n;return 18===L()?(J(),n=et()):n=Q(16,!1,e.Diagnostics._0_expected,e.tokenToString(18)),t.literal=n,ae(t)}function Qe(e){return tt(L(),e)}function Ze(){var t=tt(L(),!1);return e.Debug.assert(14===t.kind,\"Template head has wrong token kind\"),t}function et(){var t=tt(L(),!1);return e.Debug.assert(15===t.kind||16===t.kind,\"Template fragment has wrong token kind\"),t}function tt(e,t){var n=ne(e),r=di.getTokenValue();return n.text=t?oe(r):r,di.hasExtendedUnicodeEscape()&&(n.hasExtendedUnicodeEscape=!0),di.isUnterminated()&&(n.isUnterminated=!0),8===n.kind&&(n.numericLiteralFlags=di.getNumericLiteralFlags()),B(),ae(n),n}function nt(){var t=ne(159);return t.typeName=He(!1,e.Diagnostics.Type_expected),di.hasPrecedingLineBreak()||27!==L()||(t.typeArguments=We(19,Gt,27,29)),ae(t)}function rt(e){B();var t=ne(158,e.pos);return t.parameterName=e,t.type=Gt(),ae(t)}function at(){var e=ne(169);return B(),ae(e)}function it(){var e=ne(162);return G(103),e.exprName=He(!0),ae(e)}function ot(){var e=ne(145);return e.name=ce(),X(85)&&(Rt()||!Zt()?e.constraint=Gt():e.expression=Pn()),X(58)&&(e.default=Gt()),ae(e)}function st(){if(27===L())return We(18,ot,27,29)}function ct(){if(X(56))return Gt()}function ut(){return 24===L()||Xr()||e.isModifierKind(L())||57===L()||99===L()}function lt(){var t=ne(146);return 99===L()?(t.name=se(!0),t.type=ct(),ae(t)):(t.decorators=_a(),t.modifiers=da(),t.dotDotDotToken=Y(24),t.name=Yr(),0===e.getFullWidth(t.name)&&!e.hasModifiers(t)&&e.isModifierKind(L())&&B(),t.questionToken=Y(55),t.type=ct(),t.initializer=_t(!0),l(ae(t)))}function _t(e){return e?dt():sa()}function dt(){return nn(!0)}function pt(e,t,n,r,a){var i=36===e;a.typeParameters=st(),a.parameters=ft(t,n,r),i?(G(e),a.type=Wt()):X(e)&&(a.type=Wt());}function ft(e,t,n){if(G(19)){var r=N(),a=P();g(e),y(t);var i=Ve(16,lt);if(g(r),y(a),!G(20)&&n)return;return i}return n?void 0:$e()}function gt(){X(26)||te();}function mt(e){var t=ne(e);return 156===e&&G(94),pt(56,!1,!1,!1,t),gt(),l(ae(t))}function yt(){return 21===L()&&$(ht)}function ht(){if(B(),24===L()||22===L())return!0;if(e.isModifierKind(L())){if(B(),H())return!0}else{if(!H())return!1;B();}return 56===L()||26===L()||55===L()&&(B(),56===L()||26===L()||22===L())}function vt(e,t,n){var r=ne(157,e);return r.decorators=t,r.modifiers=n,r.parameters=We(16,lt,21,22),r.type=Yt(),gt(),ae(r)}function bt(e,t){var n=de(),r=Y(55);if(19===L()||27===L()){var a=ne(150,e);return a.modifiers=t,a.name=n,a.questionToken=r,pt(56,!1,!1,!1,a),gt(),l(ae(a))}var i=ne(148,e);return i.modifiers=t,i.name=n,i.questionToken=r,i.type=Yt(),58===L()&&(i.initializer=sa()),gt(),l(ae(i))}function xt(){if(19===L()||27===L())return!0;for(var t;e.isModifierKind(L());)t=!0,B();return 21===L()||(le()&&(t=!0,B()),!!t&&(19===L()||27===L()||55===L()||56===L()||26===L()||ee()))}function kt(){if(19===L()||27===L())return mt(155);if(94===L()&&$(St))return mt(156);var e=M(),t=da();return yt()?vt(e,void 0,t):bt(e,t)}function St(){return B(),19===L()||27===L()}function Tt(){var e=ne(163);return e.members=Ct(),ae(e)}function Ct(){var e;return G(17)?(e=Pe(4,kt),G(18)):e=$e(),e}function Dt(){return B(),131===L()&&B(),21===L()&&Te()&&92===B()}function Et(){var e=ne(145);return e.name=ce(),G(92),e.constraint=Gt(),ae(e)}function Nt(){var e=ne(172);return G(17),e.readonlyToken=Y(131),G(21),e.typeParameter=Et(),G(22),e.questionToken=Y(55),e.type=Yt(),te(),G(18),ae(e)}function At(){var e=ne(165);return e.elementTypes=We(20,Gt,21,22),ae(e)}function wt(){var e=ne(168);return G(19),e.type=Gt(),G(20),ae(e)}function Pt(e){var t=ne(e);return 161===e&&G(94),pt(36,!1,!1,!1,t),ae(t)}function Ot(){var e=Z();return 23===L()?void 0:e}function Ft(){var e=ne(173);return e.literal=On(),ae(e),e}function It(){return 8===B()}function Mt(){switch(L()){case 119:case 136:case 133:case 122:case 137:case 139:case 130:case 134:return W(Ot)||nt();case 9:case 8:case 101:case 86:return Ft();case 38:return $(It)?Ft():nt();case 105:case 95:return Z();case 99:var e=at();return 126!==L()||di.hasPrecedingLineBreak()?e:rt(e);case 103:return it();case 17:return $(Dt)?Nt():Tt();case 21:return At();case 19:return wt();default:return nt()}}function Rt(){switch(L()){case 119:case 136:case 133:case 122:case 137:case 105:case 139:case 95:case 99:case 103:case 130:case 17:case 21:case 27:case 49:case 48:case 94:case 9:case 8:case 101:case 86:case 134:return!0;case 38:return $(It);case 19:return $(Lt);default:return H()}}function Lt(){return B(),20===L()||ut()||Rt()}function Bt(){for(var e=Mt();!di.hasPrecedingLineBreak()&&X(21);)if(Rt())(t=ne(171,e.pos)).objectType=e,t.indexType=Gt(),G(22),e=ae(t);else{var t=ne(164,e.pos);t.elementType=e,G(22),e=ae(t);}return e}function Kt(e){var t=ne(170);return G(e),t.operator=e,t.type=jt(),ae(t)}function jt(){switch(L()){case 127:return Kt(127)}return Bt()}function Jt(e,t,n){X(n);var r=t();if(L()===n){for(var a=re([r],r.pos);X(n);)a.push(t());a.end=R();var i=ne(e,r.pos);i.types=a,r=ae(i);}return r}function zt(){return Jt(167,jt,48)}function Ut(){return Jt(166,zt,49)}function qt(){return 27===L()||19===L()&&$($t)}function Vt(){if(e.isModifierKind(L())&&da(),H()||99===L())return B(),!0;if(21===L()||17===L()){var t=ri.length;return Yr(),t===ri.length}return!1}function $t(){if(B(),20===L()||24===L())return!0;if(Vt()){if(56===L()||26===L()||55===L()||58===L())return!0;if(20===L()&&(B(),36===L()))return!0}return!1}function Wt(){var e=H()&&W(Ht),t=Gt();if(e){var n=ne(158,e.pos);return n.parameterName=e,n.type=t,ae(n)}return t}function Ht(){var e=ce();if(126===L()&&!di.hasPrecedingLineBreak())return B(),e}function Gt(){return h(20480,Xt)}function Xt(){return qt()?Pt(160):94===L()?Pt(161):Ut()}function Yt(){return X(56)?Gt():void 0}function Qt(){switch(L()){case 99:case 97:case 95:case 101:case 86:case 8:case 9:case 13:case 14:case 19:case 21:case 17:case 89:case 75:case 94:case 41:case 63:case 71:return!0;case 91:return $(St);default:return H()}}function Zt(){if(Qt())return!0;switch(L()){case 37:case 38:case 52:case 51:case 80:case 103:case 105:case 43:case 44:case 27:case 121:case 116:return!0;default:return!!xn()||H()}}function en(){return 17!==L()&&89!==L()&&75!==L()&&57!==L()&&Zt()}function tn(){var e=w();e&&m(!1);for(var t,n=rn();t=Y(26);)n=Sn(n,t,rn());return e&&m(!0),n}function nn(e){if(58===L()||!(di.hasPrecedingLineBreak()||e&&17===L())&&Zt())return G(58),rn()}function rn(){if(an())return sn();var t=un()||pn();if(t)return t;var n=hn(0);return 71===n.kind&&36===L()?cn(n):e.isLeftHandSideExpression(n)&&e.isAssignmentOperator(K())?Sn(n,Z(),rn()):yn(n)}function an(){return 116===L()&&(!!N()||$(Rr))}function on$$1(){return B(),!di.hasPrecedingLineBreak()&&H()}function sn(){var e=ne(197);return B(),di.hasPrecedingLineBreak()||39!==L()&&!Zt()?ae(e):(e.asteriskToken=Y(39),e.expression=rn(),ae(e))}function cn(t,n){e.Debug.assert(36===L(),\"parseSimpleArrowFunctionExpression should only have been called if we had a =>\");var r;n?(r=ne(187,n.pos)).modifiers=n:r=ne(187,t.pos);var a=ne(146,t.pos);return a.name=t,ae(a),r.parameters=re([a],a.pos),r.parameters.end=a.end,r.equalsGreaterThanToken=Q(36,!1,e.Diagnostics._0_expected,\"=>\"),r.body=mn(!!n),l(ae(r))}function un(){var t=ln();if(0!==t){var n=1===t?gn(!0):W(dn);if(n){var r=!!(256&e.getModifierFlags(n)),a=L();return n.equalsGreaterThanToken=Q(36,!1,e.Diagnostics._0_expected,\"=>\"),n.body=36===a||17===a?mn(r):ce(),l(ae(n))}}}function ln(){return 19===L()||27===L()||120===L()?$(_n):36===L()?1:0}function _n(){if(120===L()){if(B(),di.hasPrecedingLineBreak())return 0;if(19!==L()&&27!==L())return 0}var t=L(),n=B();if(19===t){if(20===n)switch(B()){case 36:case 56:case 17:return 1;default:return 0}return 21===n||17===n?2:24===n?1:H()?56===B()?1:2:0}return e.Debug.assert(27===t),H()?1===ni.languageVariant?$(function(){var e=B();if(85===e)switch(B()){case 58:case 29:return!1;default:return!0}else if(26===e)return!0;return!1})?1:0:2:0}function dn(){return gn(!1)}function pn(){if(120===L()&&1===$(fn)){var e=pa();return cn(hn(0),e)}}function fn(){if(120===L()){if(B(),di.hasPrecedingLineBreak()||36===L())return 0;var e=hn(0);if(!di.hasPrecedingLineBreak()&&71===e.kind&&36===L())return 1}return 0}function gn(t){var n=ne(187);if(n.modifiers=pa(),pt(56,!1,!!(256&e.getModifierFlags(n)),!t,n),n.parameters&&(t||36===L()||17===L()))return n}function mn(e){return 17===L()?gr(!1,e,!1):25!==L()&&89!==L()&&75!==L()&&Kr()&&!en()?gr(!1,e,!0):e?T(rn):C(rn)}function yn(t){var n=Y(55);if(!n)return t;var r=ne(195,t.pos);return r.condition=t,r.questionToken=n,r.whenTrue=h(pi,rn),r.colonToken=Q(56,!1,e.Diagnostics._0_expected,e.tokenToString(56)),r.whenFalse=rn(),ae(r)}function hn(e){return bn(e,Pn())}function vn(e){return 92===e||142===e}function bn(e,t){for(;;){K();var n=kn();if(!(40===L()?n>=e:n>e))break;if(92===L()&&A())break;if(118===L()){if(di.hasPrecedingLineBreak())break;B(),t=Tn(t,Gt());}else t=Sn(t,Z(),hn(n));}return t}function xn(){return(!A()||92!==L())&&kn()>0}function kn(){switch(L()){case 54:return 1;case 53:return 2;case 49:return 3;case 50:return 4;case 48:return 5;case 32:case 33:case 34:case 35:return 6;case 27:case 29:case 30:case 31:case 93:case 92:case 118:return 7;case 45:case 46:case 47:return 8;case 37:case 38:return 9;case 39:case 41:case 42:return 10;case 40:return 11}return-1}function Sn(e,t,n){var r=ne(194,e.pos);return r.left=e,r.operatorToken=t,r.right=n,ae(r)}function Tn(e,t){var n=ne(202,e.pos);return n.expression=e,n.type=t,ae(n)}function Cn(){var e=ne(192);return e.operator=L(),B(),e.operand=On(),ae(e)}function Dn(){var e=ne(188);return B(),e.expression=On(),ae(e)}function En(){var e=ne(189);return B(),e.expression=On(),ae(e)}function Nn(){var e=ne(190);return B(),e.expression=On(),ae(e)}function An(){return 121===L()&&(!!P()||$(Rr))}function wn(){var e=ne(191);return B(),e.expression=On(),ae(e)}function Pn(){if(Fn()){var t=In();return 40===L()?bn(kn(),t):t}var n=L(),r=On();if(40===L()){var a=e.skipTrivia(oi,r.pos);184===r.kind?F(a,r.end-a,e.Diagnostics.A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses):F(a,r.end-a,e.Diagnostics.An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses,e.tokenToString(n));}return r}function On(){switch(L()){case 37:case 38:case 52:case 51:return Cn();case 80:return Dn();case 103:return En();case 105:return Nn();case 27:return Xn();case 121:if(An())return wn();default:return In()}}function Fn(){switch(L()){case 37:case 38:case 52:case 51:case 80:case 103:case 105:case 121:return!1;case 27:if(1!==ni.languageVariant)return!1;default:return!0}}function In(){if(43===L()||44===L())return(n=ne(192)).operator=L(),B(),n.operand=Mn(),ae(n);if(1===ni.languageVariant&&27===L()&&$(Ce))return Kn(!0);var t=Mn();if(e.Debug.assert(e.isLeftHandSideExpression(t)),(43===L()||44===L())&&!di.hasPrecedingLineBreak()){var n=ne(193,t.pos);return n.operand=t,n.operator=L(),B(),ae(n)}return t}function Mn(){var e;return 91===L()?(ni.flags|=524288,e=Z()):e=97===L()?Ln():Rn(),Qn(e)}function Rn(){return Yn(nr())}function Ln(){var t=Z();if(19===L()||23===L()||21===L())return t;var n=ne(179,t.pos);return n.expression=t,Q(23,!1,e.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access),n.name=Ge(!0),ae(n)}function Bn(e,t){return e.kind===t.kind&&(71===e.kind?e.text===t.text:99===e.kind||e.name.text===t.name.text&&Bn(e.expression,t.expression))}function Kn(t){var n,r=qn(t);if(251===r.kind){var a=ne(249,r.pos);a.openingElement=r,a.children=zn(a.openingElement.tagName),a.closingElement=Gn(t),Bn(a.openingElement.tagName,a.closingElement.tagName)||F(a.closingElement.pos,a.closingElement.end-a.closingElement.pos,e.Diagnostics.Expected_corresponding_JSX_closing_tag_for_0,e.getTextOfNodeFromSourceText(oi,a.openingElement.tagName)),n=ae(a);}else e.Debug.assert(250===r.kind),n=r;if(t&&27===L()){var i=W(function(){return Kn(!0)});if(i){O(e.Diagnostics.JSX_expressions_must_have_one_parent_element);var o=ne(194,n.pos);return o.end=i.end,o.left=n,o.right=i,o.operatorToken=ie(26,!1,void 0),o.operatorToken.pos=o.operatorToken.end=o.right.pos,o}}return n}function jn(){var e=ne(10,di.getStartPos());return e.containsOnlyWhiteSpaces=11===ii,ii=di.scanJsxToken(),ae(e)}function Jn(){switch(L()){case 10:case 11:return jn();case 17:return $n(!1);case 27:return Kn(!1)}e.Debug.fail(\"Unknown JSX child kind \"+L());}function zn(t){var n=re(),r=li;for(li|=16384;;){if(ii=di.reScanJsxToken(),28===L())break;if(1===L()){F(t.pos,t.end-t.pos,e.Diagnostics.JSX_element_0_has_no_corresponding_closing_tag,e.getTextOfNodeFromSourceText(oi,t));break}if(7===L())break;var a=Jn();a&&n.push(a);}return n.end=di.getTokenPos(),li=r,n}function Un(){var e=ne(254);return e.properties=Pe(13,Wn),ae(e)}function qn(e){var t=di.getStartPos();G(27);var n,r=Vn(),a=Un();return 29===L()?(n=ne(251,t),U()):(G(41),e?G(29):(G(29,void 0,!1),U()),n=ne(250,t)),n.tagName=r,n.attributes=a,ae(n)}function Vn(){z();for(var e=99===L()?Z():ue();X(23);){var t=ne(179,e.pos);t.expression=e,t.name=Ge(!0),e=ae(t);}return e}function $n(e){var t=ne(256);return G(17),18!==L()&&(t.dotDotDotToken=Y(24),t.expression=rn()),e?G(18):(G(18,void 0,!1),U()),ae(t)}function Wn(){if(17===L())return Hn();z();var e=ne(253);if(e.name=ue(),58===L())switch(q()){case 9:e.initializer=Qe();break;default:e.initializer=$n(!0);}return ae(e)}function Hn(){var e=ne(255);return G(17),G(24),e.expression=tn(),G(18),ae(e)}function Gn(e){var t=ne(252);return G(28),t.tagName=Vn(),e?G(29):(G(29,void 0,!1),U()),ae(t)}function Xn(){var e=ne(184);return G(27),e.type=Gt(),G(29),e.expression=On(),ae(e)}function Yn(e){for(;;)if(Y(23)){var t=ne(179,e.pos);t.expression=e,t.name=Ge(!0),e=ae(t);}else if(51!==L()||di.hasPrecedingLineBreak())if(w()||!X(21)){if(13!==L()&&14!==L())return e;var n=ne(183,e.pos);n.tag=e,n.template=13===L()?Qe():Xe(),e=ae(n);}else{var r=ne(180,e.pos);if(r.expression=e,22!==L()&&(r.argumentExpression=b(tn),9===r.argumentExpression.kind||8===r.argumentExpression.kind)){var a=r.argumentExpression;a.text=oe(a.text);}G(22),e=ae(r);}else{B();var i=ne(203,e.pos);i.expression=e,e=ae(i);}}function Qn(e){for(;;)if(e=Yn(e),27!==L()){if(19!==L())return e;var t=ne(181,e.pos);t.expression=e,t.arguments=Zn(),e=ae(t);}else{var n=W(er);if(!n)return e;(t=ne(181,e.pos)).expression=e,t.typeArguments=n,t.arguments=Zn(),e=ae(t);}}function Zn(){G(19);var e=Ve(11,or);return G(20),e}function er(){if(X(27)){var e=Ve(19,Gt);if(G(29))return e&&tr()?e:void 0}}function tr(){switch(L()){case 19:case 23:case 20:case 22:case 56:case 25:case 55:case 32:case 34:case 33:case 35:case 53:case 54:case 50:case 48:case 49:case 18:case 1:return!0;case 26:case 17:default:return!1}}function nr(){switch(L()){case 8:case 9:case 13:return Qe();case 99:case 97:case 95:case 101:case 86:return Z();case 19:return rr();case 21:return sr();case 17:return lr();case 120:if(!$(Mr))break;return _r();case 75:return ga();case 89:return _r();case 94:return pr();case 41:case 63:if(12===j())return Qe();break;case 14:return Xe()}return ce(e.Diagnostics.Expression_expected)}function rr(){var e=ne(185);return G(19),e.expression=b(tn),G(20),ae(e)}function ar(){var e=ne(198);return G(24),e.expression=rn(),ae(e)}function ir(){return 24===L()?ar():26===L()?ne(200):rn()}function or(){return h(pi,ir)}function sr(){var e=ne(177);return G(21),di.hasPrecedingLineBreak()&&(e.multiLine=!0),e.elements=Ve(15,ir),G(22),ae(e)}function cr(e,t,n){return me(125)?ca(153,e,t,n):me(135)?ca(154,e,t,n):void 0}function ur(){var e=di.getStartPos();if(Y(24)){var t=ne(263,e);return t.expression=rn(),l(ae(t))}var n=_a(),r=da(),a=cr(e,n,r);if(a)return a;var i=Y(39),o=H(),s=de(),c=Y(55);if(i||19===L()||27===L())return aa(e,n,r,i,s,c);if(o&&(26===L()||18===L()||58===L())){var u=ne(262,e);u.name=s,u.questionToken=c;var _=Y(58);return _&&(u.equalsToken=_,u.objectAssignmentInitializer=b(rn)),l(ae(u))}var d=ne(261,e);return d.modifiers=r,d.name=s,d.questionToken=c,G(56),d.initializer=b(rn),l(ae(d))}function lr(){var e=ne(178);return G(17),di.hasPrecedingLineBreak()&&(e.multiLine=!0),e.properties=Ve(12,ur,!0),G(18),ae(e)}function _r(){var t=w();t&&m(!1);var n=ne(186);n.modifiers=da(),G(89),n.asteriskToken=Y(39);var r=!!n.asteriskToken,a=!!(256&e.getModifierFlags(n));return n.name=r&&a?D(dr):r?k(dr):a?T(dr):dr(),pt(56,r,a,!1,n),n.body=gr(r,a,!1),t&&m(!0),l(ae(n))}function dr(){return H()?ce():void 0}function pr(){var e=di.getStartPos();if(G(94),X(23)){var t=ne(204,e);return t.keywordToken=94,t.name=ue(),ae(t)}var n=ne(182,e);return n.expression=Rn(),n.typeArguments=W(er),(n.typeArguments||19===L())&&(n.arguments=Zn()),ae(n)}function fr(e,t){var n=ne(207);return G(17,t)||e?(di.hasPrecedingLineBreak()&&(n.multiLine=!0),n.statements=Pe(1,zr),G(18)):n.statements=$e(),ae(n)}function gr(e,t,n,r){var a=N();g(e);var i=P();y(t);var o=w();o&&m(!1);var s=fr(n,r);return o&&m(!0),g(a),y(i),s}function mr(){var e=ne(209);return G(25),ae(e)}function yr(){var e=ne(211);return G(90),G(19),e.expression=b(tn),G(20),e.thenStatement=zr(),e.elseStatement=X(82)?zr():void 0,ae(e)}function hr(){var e=ne(212);return G(81),e.statement=zr(),G(106),G(19),e.expression=b(tn),G(20),X(25),ae(e)}function vr(){var e=ne(213);return G(106),G(19),e.expression=b(tn),G(20),e.statement=zr(),ae(e)}function br(){var e=M();G(88);var t=Y(121);G(19);var n=void 0;25!==L()&&(n=104===L()||110===L()||76===L()?Zr(!0):x(tn));var r;if(t?G(142):X(142)){var a=ne(216,e);a.awaitModifier=t,a.initializer=n,a.expression=b(rn),G(20),r=a;}else if(X(92)){var i=ne(215,e);i.initializer=n,i.expression=b(tn),G(20),r=i;}else{var o=ne(214,e);o.initializer=n,G(25),25!==L()&&20!==L()&&(o.condition=b(tn)),G(25),20!==L()&&(o.incrementor=b(tn)),G(20),r=o;}return r.statement=zr(),ae(r)}function xr(e){var t=ne(e);return G(218===e?72:77),ee()||(t.label=ce()),te(),ae(t)}function kr(){var e=ne(219);return G(96),ee()||(e.expression=b(tn)),te(),ae(e)}function Sr(){var e=ne(220);return G(107),G(19),e.expression=b(tn),G(20),e.statement=zr(),ae(e)}function Tr(){var e=ne(257);return G(73),e.expression=b(tn),G(56),e.statements=Pe(3,zr),ae(e)}function Cr(){var e=ne(258);return G(79),G(56),e.statements=Pe(3,zr),ae(e)}function Dr(){return 73===L()?Tr():Cr()}function Er(){var e=ne(221);G(98),G(19),e.expression=b(tn),G(20);var t=ne(235,di.getStartPos());return G(17),t.clauses=Pe(2,Dr),G(18),e.caseBlock=ae(t),ae(e)}function Nr(){var e=ne(223);return G(100),e.expression=di.hasPrecedingLineBreak()?void 0:b(tn),te(),ae(e)}function Ar(){var e=ne(224);return G(102),e.tryBlock=fr(!1),e.catchClause=74===L()?wr():void 0,e.catchClause&&87!==L()||(G(87),e.finallyBlock=fr(!1)),ae(e)}function wr(){var e=ne(260);return G(74),G(19)&&(e.variableDeclaration=Qr()),G(20),e.block=fr(!1),ae(e)}function Pr(){var e=ne(225);return G(78),te(),ae(e)}function Or(){var e=di.getStartPos(),t=b(tn);if(71===t.kind&&X(56)){var n=ne(222,e);return n.label=t,n.statement=zr(),l(ae(n))}var r=ne(210,e);return r.expression=t,te(),l(ae(r))}function Fr(){return B(),e.tokenIsIdentifierOrKeyword(L())&&!di.hasPrecedingLineBreak()}function Ir(){return B(),75===L()&&!di.hasPrecedingLineBreak()}function Mr(){return B(),89===L()&&!di.hasPrecedingLineBreak()}function Rr(){return B(),(e.tokenIsIdentifierOrKeyword(L())||8===L()||9===L())&&!di.hasPrecedingLineBreak()}function Lr(){for(;;)switch(L()){case 104:case 110:case 76:case 89:case 75:case 83:return!0;case 109:case 138:return on$$1();case 128:case 129:return qr();case 117:case 120:case 124:case 112:case 113:case 114:case 131:if(B(),di.hasPrecedingLineBreak())return!1;continue;case 141:return B(),17===L()||71===L()||84===L();case 91:return B(),9===L()||39===L()||17===L()||e.tokenIsIdentifierOrKeyword(L());case 84:if(B(),58===L()||39===L()||17===L()||79===L()||118===L())return!0;continue;case 115:B();continue;default:return!1}}function Br(){return $(Lr)}function Kr(){switch(L()){case 57:case 25:case 17:case 104:case 110:case 89:case 75:case 83:case 90:case 81:case 106:case 88:case 77:case 72:case 96:case 107:case 98:case 100:case 102:case 78:case 74:case 87:return!0;case 91:return Br()||$(St);case 76:case 84:return Br();case 120:case 124:case 109:case 128:case 129:case 138:case 141:return!0;case 114:case 112:case 113:case 115:case 131:return Br()||!$(Fr);default:return Zt()}}function jr(){return B(),H()||17===L()||21===L()}function Jr(){return $(jr)}function zr(){switch(L()){case 25:return mr();case 17:return fr(!1);case 104:return ta(di.getStartPos(),void 0,void 0);case 110:if(Jr())return ta(di.getStartPos(),void 0,void 0);break;case 89:return na(di.getStartPos(),void 0,void 0);case 75:return ma(di.getStartPos(),void 0,void 0);case 90:return yr();case 81:return hr();case 106:return vr();case 88:return br();case 77:return xr(217);case 72:return xr(218);case 96:return kr();case 107:return Sr();case 98:return Er();case 100:return Nr();case 102:case 74:case 87:return Ar();case 78:return Pr();case 57:return Ur();case 120:case 109:case 138:case 128:case 129:case 124:case 76:case 83:case 84:case 91:case 112:case 113:case 114:case 117:case 115:case 131:case 141:if(Br())return Ur()}return Or()}function Ur(){var t=M(),n=_a(),r=da();switch(L()){case 104:case 110:case 76:return ta(t,n,r);case 89:return na(t,n,r);case 75:return ma(t,n,r);case 109:return Ca(t,n,r);case 138:return Da(t,n,r);case 83:return Na(t,n,r);case 141:case 128:case 129:return Oa(t,n,r);case 91:return La(t,n,r);case 84:switch(B(),L()){case 79:case 58:return Ga(t,n,r);case 118:return Ra(t,n,r);default:return Ha(t,n,r)}default:if(n||r){var a=ie(247,!0,e.Diagnostics.Declaration_expected);return a.pos=t,a.decorators=n,a.modifiers=r,ae(a)}}}function qr(){return B(),!di.hasPrecedingLineBreak()&&(H()||9===L())}function Vr(e,t,n){if(17===L()||!ee())return gr(e,t,!1,n);te();}function $r(){if(26===L())return ne(200);var e=ne(176);return e.dotDotDotToken=Y(24),e.name=Yr(),e.initializer=_t(!1),ae(e)}function Wr(){var e=ne(176);e.dotDotDotToken=Y(24);var t=H(),n=de();return t&&56!==L()?e.name=n:(G(56),e.propertyName=n,e.name=Yr()),e.initializer=_t(!1),ae(e)}function Hr(){var e=ne(174);return G(17),e.elements=Ve(9,Wr),G(18),ae(e)}function Gr(){var e=ne(175);return G(21),e.elements=Ve(10,$r),G(22),ae(e)}function Xr(){return 17===L()||21===L()||H()}function Yr(){return 21===L()?Gr():17===L()?Hr():ce()}function Qr(){var e=ne(226);return e.name=Yr(),e.type=Yt(),vn(L())||(e.initializer=nn(!1)),ae(e)}function Zr(t){var n=ne(227);switch(L()){case 104:break;case 110:n.flags|=1;break;case 76:n.flags|=2;break;default:e.Debug.fail();}if(B(),142===L()&&$(ea))n.declarations=$e();else{var r=A();f(t),n.declarations=Ve(8,Qr),f(r);}return ae(n)}function ea(){return Te()&&20===B()}function ta(e,t,n){var r=ne(208,e);return r.decorators=t,r.modifiers=n,r.declarationList=Zr(!1),te(),l(ae(r))}function na(t,n,r){var a=ne(228,t);a.decorators=n,a.modifiers=r,G(89),a.asteriskToken=Y(39),a.name=e.hasModifier(a,512)?dr():ce();var i=!!a.asteriskToken,o=e.hasModifier(a,256);return pt(56,i,o,!1,a),a.body=Vr(i,o,e.Diagnostics.or_expected),l(ae(a))}function ra(t,n,r){var a=ne(152,t);return a.decorators=n,a.modifiers=r,G(123),pt(56,!1,!1,!1,a),a.body=Vr(!1,!1,e.Diagnostics.or_expected),l(ae(a))}function aa(t,n,r,a,i,o,s){var c=ne(151,t);c.decorators=n,c.modifiers=r,c.asteriskToken=a,c.name=i,c.questionToken=o;var u=!!a,_=e.hasModifier(c,256);return pt(56,u,_,!1,c),c.body=Vr(u,_,s),l(ae(c))}function ia(t,n,r,a,i){var o=ne(149,t);return o.decorators=n,o.modifiers=r,o.name=a,o.questionToken=i,o.type=Yt(),o.initializer=e.hasModifier(o,32)?b(sa):h(6144,sa),te(),l(ae(o))}function oa(t,n,r){var a=Y(39),i=de(),o=Y(55);return a||19===L()||27===L()?aa(t,n,r,a,i,o,e.Diagnostics.or_expected):ia(t,n,r,i,o)}function sa(){return nn(!1)}function ca(e,t,n,r){var a=ne(e,t);return a.decorators=n,a.modifiers=r,a.name=de(),pt(56,!1,!1,!1,a),a.body=Vr(!1,!1),l(ae(a))}function ua(e){switch(e){case 114:case 112:case 113:case 115:case 131:return!0;default:return!1}}function la(){var t;if(57===L())return!0;for(;e.isModifierKind(L());){if(t=L(),ua(t))return!0;B();}if(39===L())return!0;if(le()&&(t=L(),B()),21===L())return!0;if(void 0!==t){if(!e.isKeyword(t)||135===t||125===t)return!0;switch(L()){case 19:case 27:case 56:case 58:case 55:return!0;default:return ee()}}return!1}function _a(){for(var e;;){var t=M();if(!X(57))break;var n=ne(147,t);n.expression=S(Mn),ae(n),e?e.push(n):e=re([n],t);}return e&&(e.end=R()),e}function da(e){for(var t;;){var n=di.getStartPos(),r=L();if(76===L()&&e){if(!W(ye))break}else if(!ve())break;var a=ae(ne(r,n));t?t.push(a):t=re([a],n);}return t&&(t.end=di.getStartPos()),t}function pa(){var e;if(120===L()){var t=di.getStartPos(),n=L();B(),(e=re([ae(ne(n,t))],t)).end=di.getStartPos();}return e}function fa(){if(25===L()){var t=ne(206);return B(),ae(t)}var n=M(),r=_a(),a=da(!0),i=cr(n,r,a);return i||(123===L()?ra(n,r,a):yt()?vt(n,r,a):e.tokenIsIdentifierOrKeyword(L())||9===L()||8===L()||39===L()||21===L()?oa(n,r,a):r||a?ia(n,r,a,ie(71,!0,e.Diagnostics.Declaration_expected),void 0):void e.Debug.fail(\"Should not have attempted to parse class member declaration.\"))}function ga(){return ya(di.getStartPos(),void 0,void 0,199)}function ma(e,t,n){return ya(e,t,n,229)}function ya(e,t,n,r){var a=ne(r,e);return a.decorators=t,a.modifiers=n,G(75),a.name=ha(),a.typeParameters=st(),a.heritageClauses=ba(),G(17)?(a.members=Ta(),G(18)):a.members=$e(),l(ae(a))}function ha(){return H()&&!va()?ce():void 0}function va(){return 108===L()&&$(Ce)}function ba(){if(Sa())return Pe(21,xa)}function xa(){var e=L();if(85===e||108===e){var t=ne(259);return t.token=e,B(),t.types=Ve(7,ka),ae(t)}}function ka(){var e=ne(201);return e.expression=Mn(),27===L()&&(e.typeArguments=We(19,Gt,27,29)),ae(e)}function Sa(){return 85===L()||108===L()}function Ta(){return Pe(5,fa)}function Ca(e,t,n){var r=ne(230,e);return r.decorators=t,r.modifiers=n,G(109),r.name=ce(),r.typeParameters=st(),r.heritageClauses=ba(),r.members=Ct(),l(ae(r))}function Da(e,t,n){var r=ne(231,e);return r.decorators=t,r.modifiers=n,G(138),r.name=ce(),r.typeParameters=st(),G(58),r.type=Gt(),te(),l(ae(r))}function Ea(){var e=ne(264,di.getStartPos());return e.name=de(),e.initializer=b(sa),l(ae(e))}function Na(e,t,n){var r=ne(232,e);return r.decorators=t,r.modifiers=n,G(83),r.name=ce(),G(17)?(r.members=Ve(6,Ea),G(18)):r.members=$e(),l(ae(r))}function Aa(){var e=ne(234,di.getStartPos());return G(17)?(e.statements=Pe(1,zr),G(18)):e.statements=$e(),ae(e)}function wa(e,t,n,r){var a=ne(233,e),i=16&r;return a.decorators=t,a.modifiers=n,a.flags|=r,a.name=ce(),a.body=X(23)?wa(M(),void 0,void 0,4|i):Aa(),l(ae(a))}function Pa(e,t,n){var r=ne(233,e);return r.decorators=t,r.modifiers=n,141===L()?(r.name=ce(),r.flags|=512):r.name=Qe(!0),17===L()?r.body=Aa():te(),ae(r)}function Oa(e,t,n){var r=0;if(141===L())return Pa(e,t,n);if(X(129))r|=16;else if(G(128),9===L())return Pa(e,t,n);return wa(e,t,n,r)}function Fa(){return 132===L()&&$(Ia)}function Ia(){return 19===B()}function Ma(){return 41===B()}function Ra(e,t,n){var r=ne(236,e);return r.decorators=t,r.modifiers=n,G(118),G(129),r.name=ce(),te(),ae(r)}function La(e,t,n){G(91);var r,a=di.getStartPos();if(H()&&(r=ce(),26!==L()&&140!==L()))return Ba(e,t,n,r);var i=ne(238,e);return i.decorators=t,i.modifiers=n,(r||39===L()||17===L())&&(i.importClause=Ka(r,a),G(140)),i.moduleSpecifier=za(),te(),ae(i)}function Ba(e,t,n,r){var a=ne(237,e);return a.decorators=t,a.modifiers=n,a.name=r,G(58),a.moduleReference=ja(),te(),l(ae(a))}function Ka(e,t){var n=ne(239,t);return e&&(n.name=e),n.name&&!X(26)||(n.namedBindings=39===L()?Ua():qa(241)),ae(n)}function ja(){return Fa()?Ja():He(!1)}function Ja(){var e=ne(248);return G(132),G(19),e.expression=za(),G(20),ae(e)}function za(){if(9===L()){var e=Qe();return oe(e.text),e}return tn()}function Ua(){var e=ne(240);return G(39),G(118),e.name=ce(),ae(e)}function qa(e){var t=ne(e);return t.elements=We(22,241===e?$a:Va,17,18),ae(t)}function Va(){return Wa(246)}function $a(){return Wa(242)}function Wa(t){var n=ne(t),r=e.isKeyword(L())&&!H(),a=di.getTokenPos(),i=di.getTextPos(),o=ue();return 118===L()?(n.propertyName=o,G(118),r=e.isKeyword(L())&&!H(),a=di.getTokenPos(),i=di.getTextPos(),n.name=ue()):n.name=o,242===t&&r&&F(a,i-a,e.Diagnostics.Identifier_expected),ae(n)}function Ha(e,t,n){var r=ne(244,e);return r.decorators=t,r.modifiers=n,X(39)?(G(140),r.moduleSpecifier=za()):(r.exportClause=qa(245),(140===L()||9===L()&&!di.hasPrecedingLineBreak())&&(G(140),r.moduleSpecifier=za())),te(),ae(r)}function Ga(e,t,n){var r=ne(243,e);return r.decorators=t,r.modifiers=n,X(58)?r.isExportEquals=!0:G(79),r.expression=rn(),te(),ae(r)}function Xa(t){for(var n,r=e.createScanner(t.languageVersion,!1,0,oi),a=[],i=[],o=[],s=void 0;;){var c=r.scan();if(2!==c){if(e.isTrivia(c))continue;break}var u={kind:r.getToken(),pos:r.getTokenPos(),end:r.getTextPos()},l=oi.substring(u.pos,u.end),_=e.getFileReferenceFromReferencePath(l,u);if(_){var d=_.fileReference;t.hasNoDefaultLib=_.isNoDefaultLib;var p=_.diagnosticMessage;d&&(_.isTypeReferenceDirective?i.push(d):a.push(d)),p&&ri.push(e.createFileDiagnostic(t,u.pos,u.end-u.pos,p));}else{var f=/^\\/\\/\\/\\s*<amd-module\\s+name\\s*=\\s*('|\")(.+?)\\1/gim.exec(l);f&&(n&&ri.push(e.createFileDiagnostic(t,u.pos,u.end-u.pos,e.Diagnostics.An_AMD_module_cannot_have_multiple_name_assignments)),n=f[2]);var g=/\\spath\\s*=\\s*('|\")(.+?)\\1/gim,m=/\\sname\\s*=\\s*('|\")(.+?)\\1/gim;if(/^\\/\\/\\/\\s*<amd-dependency\\s/gim.exec(l)){var y=g.exec(l),h=m.exec(l);if(y){var v={path:y[2],name:h?h[2]:void 0};o.push(v);}}var b=/^\\/\\/\\/?\\s*(@ts-check|@ts-nocheck)\\s*$/gim.exec(l);b&&(s={enabled:0===e.compareStrings(b[1],\"@ts-check\",!0),end:u.end,pos:u.pos});}}t.referencedFiles=a,t.typeReferenceDirectives=i,t.amdDependencies=o,t.moduleName=n,t.checkJsDirective=s;}function Ya(t){t.externalModuleIndicator=e.forEach(t.statements,function(t){return e.hasModifier(t,1)||237===t.kind&&248===t.moduleReference.kind||238===t.kind||243===t.kind||244===t.kind?t:void 0});}var Qa,Za,ei,ti,ni,ri,ai,ii,oi,si,ci,ui,li,_i,di=e.createScanner(5,!0),pi=10240,fi=!1;t.parseSourceFile=n,t.parseIsolatedEntityName=r,t.parseJsonText=a,t.fixupParentReferences=_;var gi;!function(e){e[e.SourceElements=0]=\"SourceElements\",e[e.BlockStatements=1]=\"BlockStatements\",e[e.SwitchClauses=2]=\"SwitchClauses\",e[e.SwitchClauseStatements=3]=\"SwitchClauseStatements\",e[e.TypeMembers=4]=\"TypeMembers\",e[e.ClassMembers=5]=\"ClassMembers\",e[e.EnumMembers=6]=\"EnumMembers\",e[e.HeritageClauseElement=7]=\"HeritageClauseElement\",e[e.VariableDeclarations=8]=\"VariableDeclarations\",e[e.ObjectBindingElements=9]=\"ObjectBindingElements\",e[e.ArrayBindingElements=10]=\"ArrayBindingElements\",e[e.ArgumentExpressions=11]=\"ArgumentExpressions\",e[e.ObjectLiteralMembers=12]=\"ObjectLiteralMembers\",e[e.JsxAttributes=13]=\"JsxAttributes\",e[e.JsxChildren=14]=\"JsxChildren\",e[e.ArrayLiteralMembers=15]=\"ArrayLiteralMembers\",e[e.Parameters=16]=\"Parameters\",e[e.RestProperties=17]=\"RestProperties\",e[e.TypeParameters=18]=\"TypeParameters\",e[e.TypeArguments=19]=\"TypeArguments\",e[e.TupleElementTypes=20]=\"TupleElementTypes\",e[e.HeritageClauses=21]=\"HeritageClauses\",e[e.ImportOrExportSpecifiers=22]=\"ImportOrExportSpecifiers\",e[e.JSDocFunctionParameters=23]=\"JSDocFunctionParameters\",e[e.JSDocTypeArguments=24]=\"JSDocTypeArguments\",e[e.JSDocRecordMembers=25]=\"JSDocRecordMembers\",e[e.JSDocTupleTypes=26]=\"JSDocTupleTypes\",e[e.Count=27]=\"Count\";}(gi||(gi={}));var mi;!function(e){e[e.False=0]=\"False\",e[e.True=1]=\"True\",e[e.Unknown=2]=\"Unknown\";}(mi||(mi={}));var yi;!function(t){function n(){switch(L()){case 39:case 55:case 19:case 21:case 51:case 17:case 89:case 24:case 94:case 99:return!0}return e.tokenIsIdentifierOrKeyword(L())}function r(e,t,n){s(e,5,void 0,1),ni=d(\"file.js\",5,1),di.setText(e,t,n),ii=di.scan();var r=a(),i=ri;return c(),r?{jsDocTypeExpression:r,diagnostics:i}:void 0}function a(){var e=ne(267,di.getTokenPos());return G(17),e.type=i(),G(18),_(e),ae(e)}function i(){var e=o();if(49===L()){var t=ne(271,e.pos);t.types=D(e),e=ae(t);}if(58===L()){var n=ne(278,e.pos);B(),n.type=e,e=ae(n);}return e}function o(){for(var e=u();;)if(21===L()){var t=ne(270,e.pos);t.elementType=e,B(),G(22),e=ae(t);}else if(55===L()){var n=ne(273,e.pos);n.type=e,B(),e=ae(n);}else{if(51!==L())break;var r=ne(274,e.pos);r.type=e,B(),e=ae(r);}return e}function u(){switch(L()){case 39:return E();case 55:return A();case 19:return C();case 21:return S();case 51:return k();case 17:return x();case 89:if($(Ia))return g();break;case 24:return f();case 94:return p();case 99:return l();case 119:case 136:case 133:case 122:case 137:case 105:case 95:case 139:case 130:return Z();case 9:case 8:case 101:case 86:return N()}return y()}function l(){var e=ne(282);return B(),G(56),e.type=o(),ae(e)}function p(){var e=ne(281);return B(),G(56),e.type=o(),ae(e)}function f(){var e=ne(280);return B(),e.type=o(),ae(e)}function g(){var e=ne(279);return B(),G(19),e.parameters=Ve(23,m),T(e.parameters),G(20),56===L()&&(B(),e.type=o()),ae(e)}function m(){var e=ne(146);return e.type=o(),X(58)&&(e.questionToken=ne(58)),ae(e)}function y(){var e=ne(277);if(e.name=pe(),27===L())e.typeArguments=h();else for(;X(23);){if(27===L()){e.typeArguments=h();break}e.name=b(e.name);}return ae(e)}function h(){B();var e=Ve(24,o);return T(e),v(e),G(29),e}function v(t){if(0===ri.length&&t&&0===t.length){var n=t.pos-\"<\".length;return F(n,e.skipTrivia(oi,t.end)+\">\".length-n,e.Diagnostics.Type_argument_list_cannot_be_empty)}}function b(e){var t=ne(143,e.pos);return t.left=e,t.right=ue(),ae(t)}function x(){var e=ne(275);return e.literal=Tt(),ae(e)}function k(){var e=ne(274);return B(),e.type=o(),ae(e)}function S(){var e=ne(272);return B(),e.types=Ve(26,o),T(e.types),G(22),ae(e)}function T(t){0===ri.length&&t.hasTrailingComma&&F(t.end-\",\".length,\",\".length,e.Diagnostics.Trailing_comma_not_allowed);}function C(){var e=ne(271);return B(),e.types=D(o()),G(20),ae(e)}function D(t){e.Debug.assert(!!t);for(var n=re([t],t.pos);X(49);)n.push(o());return n.end=di.getStartPos(),n}function E(){var e=ne(268);return B(),ae(e)}function N(){var e=ne(294);return e.literal=Ft(),ae(e)}function A(){var e=di.getStartPos();if(B(),26===L()||18===L()||20===L()||29===L()||58===L()||49===L())return ae(t=ne(269,e));var t=ne(273,e);return t.type=o(),ae(t)}function w(e,t,n){s(e,5,void 0,1),ni={languageVariant:0,text:e};var r=I(t,n),a=ri;return c(),r?{jsDoc:r,diagnostics:a}:void 0}function P(t,n,r){var a=ii,i=ri.length,o=fi,s=I(n,r);return s&&(s.parent=t),e.isInJavaScriptFile(t)&&(ni.jsDocDiagnostics||(ni.jsDocDiagnostics=[]),(c=ni.jsDocDiagnostics).push.apply(c,ri)),ii=a,ri.length=i,fi=o,s;var c;}function I(t,n){function r(e){for(;e.length&&(\"\\n\"===e[0]||\"\\r\"===e[0]);)e.shift();}function i(e){for(;e.length&&(\"\\n\"===e[e.length-1]||\"\\r\"===e[e.length-1]);)e.pop();}function o(){var e=ne(283,t);return e.tags=E,e.comment=A.length?A.join(\"\"):void 0,ae(e,D)}function s(){for(;5===L()||4===L();)k();}function c(t){e.Debug.assert(57===L());var n=ne(57,di.getTokenPos());n.end=di.getTextPos(),k();var r=S();if(s(),r){var a;if(r)switch(r.text){case\"augments\":a=y(n,r);break;case\"class\":case\"constructor\":a=h(n,r);break;case\"arg\":case\"argument\":case\"param\":a=f(n,r,!0);break;case\"return\":case\"returns\":a=g(n,r);break;case\"template\":a=x(n,r);break;case\"type\":a=m(n,r);break;case\"typedef\":a=v(n,r);break;default:a=l(n,r);}else a=l(n,r);a&&_(a,u(t+a.end-a.pos));}}function u(e){function t(t){n||(n=e),a.push(t),e+=t.length;}for(var n,a=[],o=0;57!==L()&&1!==L();){switch(L()){case 4:o>=1&&(o=0,a.push(di.getTokenText())),e=0;break;case 57:break;case 5:if(2===o)t(di.getTokenText());else{var s=di.getTokenText();void 0!==n&&e+s.length>n&&a.push(s.slice(n-e-1)),e+=s.length;}break;case 39:if(0===o){o=1,e+=di.getTokenText().length;break}default:o=2,t(di.getTokenText());}if(57===L())break;k();}return r(a),i(a),a}function l(e,t){var n=ne(284,e.pos);return n.atToken=e,n.tagName=t,ae(n)}function _(e,t){e.comment=t.join(\"\"),E?E.push(e):E=re([e],e.pos),E.end=e.end;}function d(){return W(function(){if(s(),17===L())return a()})}function p(){var e=X(21),t=S(!0);return e&&(s(),Y(58)&&tn(),G(22)),{name:t,isBracketed:e}}function f(e,t,n){var r=d();s();var a=p(),i=a.name,o=a.isBracketed;s();var c,u;r?u=i:(c=i,r=d());var l=n?ne(287,e.pos):ne(292,e.pos);return l.atToken=e,l.tagName=t,l.preParameterName=c,l.typeExpression=r,l.postParameterName=u,l.name=u||c,l.isBracketed=o,ae(l)}function g(t,n){e.forEach(E,function(e){return 288===e.kind})&&F(n.pos,di.getTokenPos()-n.pos,e.Diagnostics._0_tag_already_specified,n.text);var r=ne(288,t.pos);return r.atToken=t,r.tagName=n,r.typeExpression=d(),ae(r)}function m(t,n){e.forEach(E,function(e){return 289===e.kind})&&F(n.pos,di.getTokenPos()-n.pos,e.Diagnostics._0_tag_already_specified,n.text);var r=ne(289,t.pos);return r.atToken=t,r.tagName=n,r.typeExpression=d(),ae(r)}function y(e,t){var n=d(),r=ne(285,e.pos);return r.atToken=e,r.tagName=t,r.typeExpression=n,ae(r)}function h(e,t){var n=ne(286,e.pos);return n.atToken=e,n.tagName=t,ae(n)}function v(e,t){function n(){for(var e=ne(293,di.getStartPos()),t=di.getStartPos(),n=!0,r=!1,a=!1;1!==L()&&!a;)switch(k(),L()){case 57:n&&((a=!b(e))||(t=di.getStartPos())),r=!1;break;case 4:t=di.getStartPos()-1,n=!0,r=!1;break;case 39:r&&(n=!1),r=!0;break;case 71:n=!1;}return di.setTextPos(t),ae(e)}function r(e){var t=di.getTokenPos(),n=S();if(n&&X(23)){var a=ne(233,t);return a.flags|=e,a.name=n,a.body=r(4),ae(a)}return n&&4&e&&(n.isInJSDocNamespace=!0),n}var a=d();s();var i=ne(291,e.pos);if(i.atToken=e,i.tagName=t,i.fullName=r(0),i.fullName)for(var o=i.fullName;;){if(71===o.kind||!o.body){i.name=71===o.kind?o:o.name;break}o=o.body;}if(i.typeExpression=a,s(),a){if(277===a.type.kind){var c=a.type;if(71===c.name.kind){var u=c.name;\"Object\"!==u.text&&\"object\"!==u.text||(i.jsDocTypeLiteral=n());}}i.jsDocTypeLiteral||(i.jsDocTypeLiteral=a.type);}else i.jsDocTypeLiteral=n();return ae(i)}function b(t){e.Debug.assert(57===L());var n=ne(57,di.getStartPos());n.end=di.getTextPos(),k();var r=S();if(s(),!r)return!1;switch(r.text){case\"type\":return!t.jsDocTypeTag&&(t.jsDocTypeTag=m(n,r),!0);case\"prop\":case\"property\":var a=f(n,r,!1);return!!a&&(t.jsDocPropertyTags||(t.jsDocPropertyTags=[]),t.jsDocPropertyTags.push(a),!0)}return!1}function x(t,n){e.forEach(E,function(e){return 290===e.kind})&&F(n.pos,di.getTokenPos()-n.pos,e.Diagnostics._0_tag_already_specified,n.text);for(var r=re();;){var a=S();if(s(),!a)return void F(di.getStartPos(),0,e.Diagnostics.Identifier_expected);var i=ne(145,a.pos);if(i.name=a,ae(i),r.push(i),26!==L())break;k(),s();}var o=ne(290,t.pos);return o.atToken=t,o.tagName=n,o.typeParameters=r,ae(o),r.end=o.end,o}function k(){return ii=di.scanJSDocToken()}function S(t){return void 0===t&&(t=!1),T(e.tokenIsIdentifierOrKeyword(L()),t)}function T(t,n){if(!t)return n?ie(71,!0,e.Diagnostics.Identifier_expected):void O(e.Diagnostics.Identifier_expected);var r=di.getTokenPos(),a=di.getTextPos(),i=ne(71,r);return i.text=C.substring(r,a),ae(i,a),k(),i}var C=oi;t=t||0;var D=void 0===n?C.length:t+n;n=D-t,e.Debug.assert(t>=0),e.Debug.assert(t<=D),e.Debug.assert(D<=C.length);var E,N,A=[];return function(e,t){return 47===e.charCodeAt(t)&&42===e.charCodeAt(t+1)&&42===e.charCodeAt(t+2)&&42!==e.charCodeAt(t+3)}(C,t)?(di.scanRange(t+3,n-5,function(){function e(e){s||(s=u),A.push(e),u+=e.length;}var n=!0,a=1,s=void 0,u=t-Math.max(C.lastIndexOf(\"\\n\",t),0)+4;for(k();5===L();)k();for(4===L()&&(a=0,u=0,k());1!==L();){switch(L()){case 57:0===a||1===a?(i(A),c(u),a=0,n=!1,s=void 0,u++):e(di.getTokenText());break;case 4:A.push(di.getTokenText()),a=0,u=0;break;case 39:var l=di.getTokenText();1===a||2===a?(a=2,e(l)):(a=1,u+=l.length);break;case 71:e(di.getTokenText()),a=2;break;case 5:var _=di.getTokenText();2===a?A.push(_):void 0!==s&&u+_.length>s&&A.push(_.slice(s-u-1)),u+=_.length;break;case 1:break;default:a=2,e(di.getTokenText());}n?k():n=!0;}r(A),i(A),N=o();}),N):N}t.isJSDocType=n,t.parseJSDocTypeExpressionForTests=r,t.parseJSDocTypeExpression=a,t.parseIsolatedJSDocComment=w,t.parseJSDocComment=P;var M;!function(e){e[e.BeginningOfLine=0]=\"BeginningOfLine\",e[e.SawAsterisk=1]=\"SawAsterisk\",e[e.SavingComments=2]=\"SavingComments\";}(M||(M={})),t.parseJSDocCommentWorker=I;}(yi=t.JSDocParser||(t.JSDocParser={}));}(y||(y={}));var h;!function(t){function n(t,n,r,a){if(a=a||e.Debug.shouldAssert(2),_(t,n,r,a),e.textChangeRangeIsUnchanged(r))return t;if(0===t.statements.length)return y.parseSourceFile(t.fileName,n,t.languageVersion,void 0,!0,t.scriptKind);var i=t;e.Debug.assert(!i.hasBeenIncrementallyParsed),i.hasBeenIncrementallyParsed=!0;var o=t.text,s=d(t),l=u(t,r);_(t,n,l,a),e.Debug.assert(l.span.start<=r.span.start),e.Debug.assert(e.textSpanEnd(l.span)===e.textSpanEnd(r.span)),e.Debug.assert(e.textSpanEnd(e.textChangeRangeNewSpan(l))===e.textSpanEnd(e.textChangeRangeNewSpan(r)));var p=e.textChangeRangeNewSpan(l).length-l.span.length;return c(i,l.span.start,e.textSpanEnd(l.span),e.textSpanEnd(e.textChangeRangeNewSpan(l)),p,o,n,a),y.parseSourceFile(t.fileName,n,t.languageVersion,s,!0,t.scriptKind)}function r(t,n,r,o,c,u){function l(t){var n=\"\";if(u&&a(t)&&(n=o.substring(t.pos,t.end)),t._children&&(t._children=void 0),t.pos+=r,t.end+=r,u&&a(t)&&e.Debug.assert(n===c.substring(t.pos,t.end)),i(t,l,_),t.jsDoc)for(var d=0,p=t.jsDoc;d<p.length;d++)i(p[d],l,_);s(t,u);}function _(e){e._children=void 0,e.pos+=r,e.end+=r;for(var t=0,n=e;t<n.length;t++)l(n[t]);}n?_(t):l(t);}function a(e){switch(e.kind){case 9:case 8:case 71:return!0}return!1}function o(t,n,r,a,i){e.Debug.assert(t.end>=n,\"Adjusting an element that was entirely before the change range\"),e.Debug.assert(t.pos<=r,\"Adjusting an element that was entirely after the change range\"),e.Debug.assert(t.pos<=t.end),t.pos=Math.min(t.pos,a),t.end>=r?t.end+=i:t.end=Math.min(t.end,a),e.Debug.assert(t.pos<=t.end),t.parent&&(e.Debug.assert(t.pos>=t.parent.pos),e.Debug.assert(t.end<=t.parent.end));}function s(t,n){if(n){var r=t.pos;i(t,function(t){e.Debug.assert(t.pos>=r),r=t.end;}),e.Debug.assert(r<=t.end);}}function c(t,n,a,c,u,l,_,d){function p(t){if(e.Debug.assert(t.pos<=t.end),t.pos>a)r(t,!1,u,l,_,d);else{var g=t.end;if(g>=n)return t.intersectsChange=!0,t._children=void 0,o(t,n,a,c,u),i(t,p,f),void s(t,d);e.Debug.assert(g<n);}}function f(t){if(e.Debug.assert(t.pos<=t.end),t.pos>a)r(t,!0,u,l,_,d);else{var i=t.end;if(i>=n){t.intersectsChange=!0,t._children=void 0,o(t,n,a,c,u);for(var s=0,f=t;s<f.length;s++)p(f[s]);}else e.Debug.assert(i<n);}}p(t);}function u(t,n){for(var r=n.span.start,a=0;r>0&&a<=1;a++){var i=l(t,r);e.Debug.assert(i.pos<=r);var o=i.pos;r=Math.max(0,o-1);}var s=e.createTextSpanFromBounds(r,e.textSpanEnd(n.span)),c=n.newLength+(n.span.start-r);return e.createTextChangeRange(s,c)}function l(t,n){function r(t){var n=void 0;return i(t,function(t){e.nodeIsPresent(t)&&(n=t);}),n}function a(t){if(!e.nodeIsMissing(t))return t.pos<=n?(t.pos>=s.pos&&(s=t),n<t.end?(i(t,a),!0):(e.Debug.assert(t.end<=n),void(o=t))):(e.Debug.assert(t.pos>n),!0)}var o,s=t;if(i(t,a),o){var c=function(e){for(;;){var t=r(e);if(!t)return e;e=t;}}(o);c.pos>s.pos&&(s=c);}return s}function _(t,n,r,a){var i=t.text;if(r&&(e.Debug.assert(i.length-r.span.length+r.newLength===n.length),a||e.Debug.shouldAssert(3))){var o=i.substr(0,r.span.start),s=n.substr(0,r.span.start);e.Debug.assert(o===s);var c=i.substring(e.textSpanEnd(r.span),i.length),u=n.substring(e.textSpanEnd(e.textChangeRangeNewSpan(r)),n.length);e.Debug.assert(c===u);}}function d(t){function n(e){function n(t){return e>=t.pos&&e<t.end&&(i(t,n,s),!0)}function s(t){if(e>=t.pos&&e<t.end)for(var c=0;c<t.length;c++){var u=t[c];if(u){if(u.pos===e)return r=t,a=c,o=u,!0;if(u.pos<e&&e<u.end)return i(u,n,s),!0}}return!1}r=void 0,a=-1,o=void 0,i(t,n,s);}var r=t.statements,a=0;e.Debug.assert(a<r.length);var o=r[a],s=-1;return{currentNode:function(t){return t!==s&&(o&&o.end===t&&a<r.length-1&&(o=r[++a]),o&&o.pos===t||n(t)),s=t,e.Debug.assert(!o||o.pos===t),o}}}t.updateSourceFile=n;var p;!function(e){e[e.Value=-1]=\"Value\";}(p||(p={}));}(h||(h={}));}(r||(r={}));!function(e){function t(n){if(230===n.kind||231===n.kind)return 0;if(e.isConstEnumDeclaration(n))return 2;if(238!==n.kind&&237!==n.kind||e.hasModifier(n,1)){if(234===n.kind){var r=0;return e.forEachChild(n,function(e){switch(t(e)){case 0:return!1;case 2:return r=2,!1;case 1:return r=1,!0}}),r}if(233===n.kind){var a=n.body;return a?t(a):1}return 71===n.kind&&n.isInJSDocNamespace?0:1}return 0}function n(t,n){e.performance.mark(\"beforeBind\"),I(t,n),e.performance.mark(\"afterBind\"),e.performance.measure(\"Bind\",\"beforeBind\",\"afterBind\");}function r(e,t){var n=e.kind;switch(n){case 181:return a(e,t);case 182:return o(e,t);case 233:return N(e,t);case 185:return u(e,t);case 194:return s(e,t);case 210:return E(e,t);case 146:return c(e,t);case 187:return x(e,t);case 186:return b(e,t);case 228:return v(e,t);case 226:return S(e,t);case 227:return A(e,t);case 208:return T(e,t);case 222:return C(e,t);case 229:return l(e,t);case 199:return _(e,t);case 259:return d(e,t);case 260:return p(e,t);case 201:return f(e,t);case 152:return g(e,t);case 149:return h(e,t);case 151:return m(e,t);case 153:case 154:return y(e,t);case 237:return D(e,t);case 179:return k(e,t);default:return w(e,n,t)}}function a(e,t){var n=t,r=e.expression,a=r.kind;return e.typeArguments&&(n|=3),(524288&t||i(r,a))&&(n|=192),91===r.kind&&(n|=67108864),e.transformFlags=536870912|n,-537396546&n}function i(e,t){switch(t){case 97:return!0;case 179:case 180:return 97===e.expression.kind}return!1}function o(e,t){var n=t;return e.typeArguments&&(n|=3),524288&t&&(n|=192),e.transformFlags=536870912|n,-537396546&n}function s(e,t){var n=t,r=e.operatorToken.kind,a=e.left.kind;return 58===r&&178===a?n|=3272:58===r&&177===a?n|=3264:40!==r&&62!==r||(n|=32),e.transformFlags=536870912|n,-536872258&n}function c(t,n){var r=n,a=e.getModifierFlags(t),i=t.name,o=t.initializer,s=t.dotDotDotToken;return(t.questionToken||t.type||4096&n||e.isThisIdentifier(i))&&(r|=3),92&a&&(r|=262147),1048576&n&&(r|=8),(8388608&n||o||s)&&(r|=131264),t.transformFlags=536870912|r,-536872258&r}function u(e,t){var n=t,r=e.expression,a=r.kind,i=r.transformFlags;return 202!==a&&184!==a||(n|=3),1024&i&&(n|=1024),e.transformFlags=536870912|n,-536872258&n}function l(t,n){var r;return 2&e.getModifierFlags(t)?r=3:(r=192|n,(274432&n||t.typeParameters)&&(r|=3),65536&n&&(r|=16384)),t.transformFlags=536870912|r,-539358530&r}function _(e,t){var n=192|t;return(274432&t||e.typeParameters)&&(n|=3),65536&t&&(n|=16384),e.transformFlags=536870912|n,-539358530&n}function d(t,n){var r=n;switch(t.token){case 85:r|=192;break;case 108:r|=3;break;default:e.Debug.fail(\"Unexpected token for heritage clause\");}return t.transformFlags=536870912|r,-536872258&r}function p(t,n){var r=n;return t.variableDeclaration&&e.isBindingPattern(t.variableDeclaration.name)&&(r|=192),t.transformFlags=536870912|r,-537920834&r}function f(e,t){var n=192|t;return e.typeArguments&&(n|=3),e.transformFlags=536870912|n,-536872258&n}function g(t,n){var r=n;return!e.hasModifier(t,2270)&&t.body||(r|=3),1048576&n&&(r|=8),t.transformFlags=536870912|r,-601015618&r}function m(t,n){var r=192|n;return(t.decorators||e.hasModifier(t,2270)||t.typeParameters||t.type||!t.body)&&(r|=3),1048576&n&&(r|=8),e.hasModifier(t,256)&&(r|=t.asteriskToken?8:16),t.asteriskToken&&(r|=768),t.transformFlags=536870912|r,-601015618&r}function y(t,n){var r=n;return(t.decorators||e.hasModifier(t,2270)||t.type||!t.body)&&(r|=3),1048576&n&&(r|=8),t.transformFlags=536870912|r,-601015618&r}function h(e,t){var n=3|t;return e.initializer&&(n|=8192),e.transformFlags=536870912|n,-536872258&n}function v(t,n){var r,a=e.getModifierFlags(t);return!t.body||2&a?r=3:(r=33554432|n,(2270&a||t.typeParameters||t.type)&&(r|=3),256&a&&(r|=t.asteriskToken?8:16),1048576&n&&(r|=8),163840&n&&(r|=192),t.asteriskToken&&(r|=768)),t.transformFlags=536870912|r,-601281858&r}function b(t,n){var r=n;return(e.hasModifier(t,2270)||t.typeParameters||t.type)&&(r|=3),e.hasModifier(t,256)&&(r|=t.asteriskToken?8:16),1048576&n&&(r|=8),163840&n&&(r|=192),t.asteriskToken&&(r|=768),t.transformFlags=536870912|r,-601281858&r}function x(t,n){var r=192|n;return(e.hasModifier(t,2270)||t.typeParameters||t.type)&&(r|=3),e.hasModifier(t,256)&&(r|=16),1048576&n&&(r|=8),16384&n&&(r|=32768),t.transformFlags=536870912|r,-601249090&r}function k(e,t){var n=t;return 97===e.expression.kind&&(n|=16384),e.transformFlags=536870912|n,-536872258&n}function S(e,t){var n=t;return n|=8388800,1048576&t&&(n|=8),e.type&&(n|=3),e.transformFlags=536870912|n,-536872258&n}function T(t,n){var r,a=e.getModifierFlags(t),i=t.declarationList.transformFlags;return 2&a?r=3:(r=n,8388608&i&&(r|=192)),t.transformFlags=536870912|r,-536872258&r}function C(t,n){var r=n;return 4194304&n&&e.isIterationStatement(t,!0)&&(r|=192),t.transformFlags=536870912|r,-536872258&r}function D(t,n){var r=n;return e.isExternalModuleImportEqualsDeclaration(t)||(r|=3),t.transformFlags=536870912|r,-536872258&r}function E(e,t){var n=t;return 1024&e.expression.transformFlags&&(n|=192),e.transformFlags=536870912|n,-536872258&n}function N(t,n){var r=3;return 0==(2&e.getModifierFlags(t))&&(r|=n),t.transformFlags=536870912|r,-574674242&r}function A(e,t){var n=33554432|t;return 8388608&t&&(n|=192),3&e.flags&&(n|=4194496),e.transformFlags=536870912|n,-546309442&n}function w(e,t,n){var r=n,a=536872257;switch(t){case 120:case 191:r|=24;break;case 114:case 112:case 113:case 117:case 124:case 76:case 232:case 264:case 184:case 202:case 203:case 131:r|=3;break;case 249:case 250:case 251:case 10:case 252:case 253:case 254:case 255:case 256:r|=4;break;case 13:case 14:case 15:case 16:case 196:case 183:case 262:case 115:case 204:r|=192;break;case 9:e.hasExtendedUnicodeEscape&&(r|=192);break;case 8:48&e.numericLiteralFlags&&(r|=192);break;case 216:e.awaitModifier&&(r|=8),r|=192;break;case 197:r|=16777416;break;case 119:case 133:case 130:case 134:case 136:case 122:case 137:case 105:case 145:case 148:case 150:case 155:case 156:case 157:case 158:case 159:case 160:case 161:case 162:case 163:case 164:case 165:case 166:case 167:case 168:case 230:case 231:case 169:case 170:case 171:case 172:case 173:case 236:r=3,a=-3;break;case 144:r|=2097152,16384&n&&(r|=65536);break;case 198:r|=524480;break;case 263:r|=1048584;break;case 97:r|=192;break;case 99:r|=16384;break;case 174:r|=8388800,524288&n&&(r|=1048584),a=537396545;break;case 175:r|=8388800,a=537396545;break;case 176:r|=192,e.dotDotDotToken&&(r|=524288);break;case 147:r|=4099;break;case 178:a=540087617,2097152&n&&(r|=192),65536&n&&(r|=16384),1048576&n&&(r|=8);break;case 177:case 182:a=537396545,524288&n&&(r|=192);break;case 212:case 213:case 214:case 215:4194304&n&&(r|=192);break;case 265:32768&n&&(r|=192);break;case 219:case 217:case 218:r|=33554432;}return e.transformFlags=536870912|r,r&~a}function P(e){if(e>=158&&e<=173)return-3;switch(e){case 181:case 182:case 177:return 537396545;case 233:return 574674241;case 146:return 536872257;case 187:return 601249089;case 186:case 228:return 601281857;case 227:return 546309441;case 229:case 199:return 539358529;case 152:return 601015617;case 151:case 153:case 154:return 601015617;case 119:case 133:case 130:case 136:case 134:case 122:case 137:case 105:case 145:case 148:case 150:case 155:case 156:case 157:case 230:case 231:return-3;case 178:return 540087617;case 260:return 537920833;case 174:case 175:return 537396545;default:return 536872257}}function O(t,n){n.parent=t,e.forEachChild(n,function(e){return O(n,e)});}!function(e){e[e.NonInstantiated=0]=\"NonInstantiated\",e[e.Instantiated=1]=\"Instantiated\",e[e.ConstEnumOnly=2]=\"ConstEnumOnly\";}(e.ModuleInstanceState||(e.ModuleInstanceState={})),e.getModuleInstanceState=t;var F;!function(e){e[e.None=0]=\"None\",e[e.IsContainer=1]=\"IsContainer\",e[e.IsBlockScopedContainer=2]=\"IsBlockScopedContainer\",e[e.IsControlFlowContainer=4]=\"IsControlFlowContainer\",e[e.IsFunctionLike=8]=\"IsFunctionLike\",e[e.IsFunctionExpression=16]=\"IsFunctionExpression\",e[e.HasLocals=32]=\"HasLocals\",e[e.IsInterface=64]=\"IsInterface\",e[e.IsObjectLiteralOrClassExpressionMethod=128]=\"IsObjectLiteralOrClassExpressionMethod\";}(F||(F={}));var I=function(){function n(t,n){Nt=t,At=n,wt=e.getEmitScriptTarget(At),$t=a(Nt,n),Ht=e.createMap(),Xt=0,Gt=Nt.isDeclarationFile,Wt=e.objectAllocator.getSymbolConstructor(),Nt.locals||(We(Nt),Nt.symbolCount=Xt,Nt.classifiableNames=Ht),Nt=void 0,At=void 0,wt=void 0,Pt=void 0,Ot=void 0,Ft=void 0,It=void 0,Mt=!1,Rt=void 0,Lt=void 0,Bt=void 0,Kt=void 0,jt=void 0,Jt=void 0,Ut=void 0,qt=!1,Vt=0,Zt=0;}function a(e,t){return!((void 0===t.alwaysStrict?!t.strict:!t.alwaysStrict)||e.isDeclarationFile)||!!e.externalModuleIndicator}function i(e,t){return Xt++,new Wt(e,t)}function o(t,n,r){if(t.flags|=r,n.symbol=t,t.declarations||(t.declarations=[]),t.declarations.push(n),1952&r&&!t.exports&&(t.exports=e.createMap()),6240&r&&!t.members&&(t.members=e.createMap()),107455&r){var a=t.valueDeclaration;(!a||a.kind!==n.kind&&233===a.kind)&&(t.valueDeclaration=n);}}function s(t){var n=e.getNameOfDeclaration(t);if(n){if(e.isAmbientModule(t))return e.isGlobalScopeAugmentation(t)?\"__global\":'\"'+n.text+'\"';if(144===n.kind){var r=n.expression;return e.isStringOrNumericLiteral(r)?r.text:(e.Debug.assert(e.isWellKnownSymbolSyntactically(r)),e.getPropertyNameForKnownSymbolName(r.name.text))}return n.text}switch(t.kind){case 152:return\"__constructor\";case 160:case 155:return\"__call\";case 161:case 156:return\"__new\";case 157:return\"__index\";case 244:return\"__export\";case 243:return t.isExportEquals?\"export=\":\"default\";case 194:if(2===e.getSpecialPropertyAssignmentKind(t))return\"export=\";e.Debug.fail(\"Unknown binary declaration kind\");break;case 228:case 229:return e.hasModifier(t,512)?\"default\":void 0;case 279:return e.isJSDocConstructSignature(t)?\"__new\":\"__call\";case 146:e.Debug.assert(279===t.parent.kind);var a=t.parent;return\"arg\"+e.indexOf(a.parameters,t);case 291:var i=t.parent&&t.parent.parent,o=void 0;if(i&&208===i.kind&&i.declarationList.declarations.length>0){var s=i.declarationList.declarations[0].name;71===s.kind&&(o=s.text);}return o}}function c(t){return t.name?e.declarationNameToString(t.name):s(t)}function u(t,n,r,a,u){e.Debug.assert(!e.hasDynamicName(r));var l,_=e.hasModifier(r,512),d=_&&n?\"default\":s(r);if(void 0===d)l=i(0,\"__missing\");else if((l=t.get(d))||t.set(d,l=i(0,d)),d&&788448&a&&Ht.set(d,d),l.flags&u)if(l.isReplaceableByMethod)t.set(d,l=i(0,d));else{r.name&&(r.name.parent=r);var p=2&l.flags?e.Diagnostics.Cannot_redeclare_block_scoped_variable_0:e.Diagnostics.Duplicate_identifier_0;l.declarations&&l.declarations.length&&(_?p=e.Diagnostics.A_module_cannot_have_multiple_default_exports:l.declarations&&l.declarations.length&&(_||243===r.kind&&!r.isExportEquals)&&(p=e.Diagnostics.A_module_cannot_have_multiple_default_exports)),e.forEach(l.declarations,function(t){Nt.bindDiagnostics.push(e.createDiagnosticForNode(e.getNameOfDeclaration(t)||t,p,c(t)));}),Nt.bindDiagnostics.push(e.createDiagnosticForNode(e.getNameOfDeclaration(r)||r,p,c(r))),l=i(0,d);}return o(l,r,a),l.parent=n,l}function l(t,n,r){var a=1&e.getCombinedModifierFlags(t);if(8388608&n)return 246===t.kind||237===t.kind&&a?u(Ot.symbol.exports,Ot.symbol,t,n,r):u(Ot.locals,void 0,t,n,r);291===t.kind&&e.Debug.assert(e.isInJavaScriptFile(t));var i=291===t.kind&&t.name&&71===t.name.kind&&t.name.isInJSDocNamespace;if(!e.isAmbientModule(t)&&(a||32&Ot.flags)||i){var o=(107455&n?1048576:0)|(793064&n?2097152:0)|(1920&n?4194304:0),s=u(Ot.locals,void 0,t,o,r);return s.exportSymbol=u(Ot.symbol.exports,Ot.symbol,t,n,r),t.localSymbol=s,s}return u(Ot.locals,void 0,t,n,r)}function _(t,n){var r=Ot,a=Ft;if(1&n?(Ot=Ft=t,32&n&&(Ot.locals=e.createMap()),fe(Ot)):2&n&&((Ft=t).locals=void 0),4&n){var i=Rt,o=Lt,s=Bt,c=Kt,u=Ut,l=qt,_=16&n&&!e.hasModifier(t,256)&&!!e.getImmediatelyInvokedFunctionExpression(t);_?Kt=k():(Rt={flags:2},144&n&&(Rt.container=t),Kt=void 0),Lt=void 0,Bt=void 0,Ut=void 0,qt=!1,d(t),t.flags&=-1409,!(1&Rt.flags)&&8&n&&e.nodeIsPresent(t.body)&&(t.flags|=128,qt&&(t.flags|=256)),265===t.kind&&(t.flags|=Vt),_?(C(Kt,Rt),Rt=w(Kt)):Rt=i,Lt=o,Bt=s,Kt=c,Ut=u,qt=l;}else 64&n?(Mt=!1,d(t),t.flags=Mt?64|t.flags:-65&t.flags):d(t);Ot=r,Ft=a;}function d(e){if(Gt)g(e);else if(536870912&e.transformFlags)Gt=!0,g(e),Gt=!1,Zt|=e.transformFlags&~P(e.kind);else{var t=Zt;Zt=0,g(e),Zt=t|r(e,Zt);}}function p(t){if(void 0!==t)if(Gt)e.forEach(t,We);else{var n=Zt;Zt=0;for(var r=0,a=0,i=t;a<i.length;a++){var o=i[a];We(o),r|=-536870913&o.transformFlags;}t.transformFlags=536870912|r,Zt|=n;}}function f(t){e.forEachChild(t,We,p);}function g(t){if(t.jsDoc)if(e.isInJavaScriptFile(t))for(var n=0,r=t.jsDoc;n<r.length;n++)We(o=r[n]);else for(var a=0,i=t.jsDoc;a<i.length;a++){var o=i[a];O(t,o);}if(Et(t))f(t);else switch(t.kind){case 213:B(t);break;case 212:K(t);break;case 214:j(t);break;case 215:case 216:J(t);break;case 211:z(t);break;case 219:case 223:U(t);break;case 218:case 217:$(t);break;case 224:W(t);break;case 221:H(t);break;case 235:G(t);break;case 257:X(t);break;case 222:Z(t);break;case 192:re(t);break;case 193:ae(t);break;case 194:ie(t);break;case 188:oe(t);break;case 195:se(t);break;case 226:ue(t);break;case 181:de(t);break;case 283:le(t);break;case 291:_e(t);break;default:f(t);}}function m(e){switch(e.kind){case 71:case 99:case 179:return y(e);case 181:return h(e);case 185:return m(e.expression);case 194:return b(e);case 192:return 51===e.operator&&m(e.operand)}return!1}function y(e){return 71===e.kind||99===e.kind||97===e.kind||179===e.kind&&y(e.expression)}function h(e){if(e.arguments)for(var t=0,n=e.arguments;t<n.length;t++)if(y(n[t]))return!0;return!(179!==e.expression.kind||!y(e.expression.expression))}function v(e,t){return 189===e.kind&&x(e.expression)&&9===t.kind}function b(e){switch(e.operatorToken.kind){case 58:return y(e.left);case 32:case 33:case 34:case 35:return x(e.left)||x(e.right)||v(e.right,e.left)||v(e.left,e.right);case 93:return x(e.left);case 26:return m(e.right)}return!1}function x(e){switch(e.kind){case 185:return x(e.expression);case 194:switch(e.operatorToken.kind){case 58:return x(e.left);case 26:return x(e.right)}}return y(e)}function k(){return{flags:4,antecedents:void 0}}function S(){return{flags:8,antecedents:void 0}}function T(e){e.flags|=512&e.flags?1024:512;}function C(t,n){1&n.flags||e.contains(t.antecedents,n)||((t.antecedents||(t.antecedents=[])).push(n),T(n));}function D(e,t,n){return 1&t.flags?t:n?101===n.kind&&64&e||86===n.kind&&32&e?Yt:m(n)?(T(t),{flags:e,expression:n,antecedent:t}):t:32&e?t:Yt}function E(e,t,n,r){return m(t.expression)?(T(e),{flags:128,switchStatement:t,clauseStart:n,clauseEnd:r,antecedent:e}):e}function N(e,t){return T(e),{flags:16,antecedent:e,node:t}}function A(e,t){return T(e),{flags:256,antecedent:e,node:t}}function w(e){var t=e.antecedents;return t?1===t.length?t[0]:e:Yt}function F(e){var t=e.parent;switch(t.kind){case 211:case 213:case 212:return t.expression===e;case 214:case 195:return t.condition===e}return!1}function I(e){for(;;)if(185===e.kind)e=e.expression;else{if(192!==e.kind||51!==e.operator)return 194===e.kind&&(53===e.operatorToken.kind||54===e.operatorToken.kind);e=e.operand;}}function M(e){for(;185===e.parent.kind||192===e.parent.kind&&51===e.parent.operator;)e=e.parent;return!F(e)&&!I(e.parent)}function R(e,t,n){var r=jt,a=Jt;jt=t,Jt=n,We(e),jt=r,Jt=a,e&&I(e)||(C(t,D(32,Rt,e)),C(n,D(64,Rt,e)));}function L(e,t,n){var r=Lt,a=Bt;Lt=t,Bt=n,We(e),Lt=r,Bt=a;}function B(e){var t=S(),n=k(),r=k();C(t,Rt),Rt=t,R(e.expression,n,r),Rt=w(n),L(e.statement,r,t),C(t,Rt),Rt=w(r);}function K(t){var n=S(),r=222===t.parent.kind?e.lastOrUndefined(Ut):void 0,a=r?r.continueTarget:k(),i=r?r.breakTarget:k();C(n,Rt),Rt=n,L(t.statement,i,a),C(a,Rt),Rt=w(a),R(t.expression,n,i),Rt=w(i);}function j(e){var t=S(),n=k(),r=k();We(e.initializer),C(t,Rt),Rt=t,R(e.condition,n,r),Rt=w(n),L(e.statement,r,t),We(e.incrementor),C(t,Rt),Rt=w(r);}function J(e){var t=S(),n=k();C(t,Rt),Rt=t,216===e.kind&&We(e.awaitModifier),We(e.expression),C(n,Rt),We(e.initializer),227!==e.initializer.kind&&te(e.initializer),L(e.statement,n,t),C(t,Rt),Rt=w(n);}function z(e){var t=k(),n=k(),r=k();R(e.expression,t,n),Rt=w(t),We(e.thenStatement),C(r,Rt),Rt=w(n),We(e.elseStatement),C(r,Rt),Rt=w(r);}function U(e){We(e.expression),219===e.kind&&(qt=!0,Kt&&C(Kt,Rt)),Rt=Yt;}function q(e){if(Ut)for(var t=0,n=Ut;t<n.length;t++){var r=n[t];if(r.name===e)return r}}function V(e,t,n){var r=218===e.kind?t:n;r&&(C(r,Rt),Rt=Yt);}function $(e){if(We(e.label),e.label){var t=q(e.label.text);t&&(t.referenced=!0,V(e,t.breakTarget,t.continueTarget));}else V(e,Lt,Bt);}function W(e){var t=k(),n=Rt;We(e.tryBlock),C(t,Rt);var r=Rt,a=Yt;if(e.catchClause&&(Rt=n,We(e.catchClause),C(t,Rt),a=Rt),e.finallyBlock){var i={flags:2048,antecedent:n,lock:{}};if(C(t,i),Rt=w(t),We(e.finallyBlock),1&Rt.flags||1&r.flags&&1&a.flags&&(Rt=r===Qt||a===Qt?Qt:Yt),!(1&Rt.flags)){var o={flags:4096,antecedent:Rt};i.lock=o,Rt=o;}}else Rt=w(t);}function H(t){var n=k();We(t.expression);var r=Lt,a=zt;Lt=n,zt=Rt,We(t.caseBlock),C(n,Rt);var i=e.forEach(t.caseBlock.clauses,function(e){return 258===e.kind});t.possiblyExhaustive=!i&&!n.antecedents,i||C(n,E(zt,t,0,0)),Lt=r,zt=a,Rt=w(n);}function G(t){var n=Zt;Zt=0;for(var r=t.clauses,a=Yt,i=0;i<r.length;i++){for(var o=i;!r[i].statements.length&&i+1<r.length;)We(r[i]),i++;var s=k();C(s,E(zt,t.parent,o,i+1)),C(s,a),Rt=w(s);var c=r[i];We(c),a=Rt,1&Rt.flags||i===r.length-1||!At.noFallthroughCasesInSwitch||Ve(c,e.Diagnostics.Fallthrough_case_in_switch);}r.transformFlags=536870912|Zt,Zt|=n;}function X(e){var t=Rt;Rt=zt,We(e.expression),Rt=t,p(e.statements);}function Y(e,t,n){var r={name:e,breakTarget:t,continueTarget:n,referenced:!1};return(Ut||(Ut=[])).push(r),r}function Q(){Ut.pop();}function Z(t){var n=S(),r=k();We(t.label),C(n,Rt);var a=Y(t.label.text,r,n);We(t.statement),Q(),a.referenced||At.allowUnusedLabels||Nt.bindDiagnostics.push(e.createDiagnosticForNode(t.label,e.Diagnostics.Unused_label)),t.statement&&212===t.statement.kind||(C(r,Rt),Rt=w(r));}function ee(e){te(194===e.kind&&58===e.operatorToken.kind?e.left:e);}function te(e){if(y(e))Rt=N(Rt,e);else if(177===e.kind)for(var t=0,n=e.elements;t<n.length;t++){var r=n[t];198===r.kind?te(r.expression):ee(r);}else if(178===e.kind)for(var a=0,i=e.properties;a<i.length;a++){var o=i[a];261===o.kind?ee(o.initializer):262===o.kind?te(o.name):263===o.kind&&te(o.expression);}}function ne(e,t,n){var r=k();53===e.operatorToken.kind?R(e.left,r,n):R(e.left,t,r),Rt=w(r),We(e.operatorToken),R(e.right,t,n);}function re(e){if(51===e.operator){var t=jt;jt=Jt,Jt=t,f(e),Jt=jt,jt=t;}else f(e),43!==e.operator&&44!==e.operator||te(e.operand);}function ae(e){f(e),43!==e.operator&&44!==e.operator||te(e.operand);}function ie(t){var n=t.operatorToken.kind;if(53===n||54===n)if(M(t)){var r=k();ne(t,r,r),Rt=w(r);}else ne(t,jt,Jt);else f(t),e.isAssignmentOperator(n)&&!e.isAssignmentTarget(t)&&(te(t.left),58===n&&180===t.left.kind&&x(t.left.expression)&&(Rt=A(Rt,t)));}function oe(e){f(e),179===e.expression.kind&&te(e.expression);}function se(e){var t=k(),n=k(),r=k();R(e.condition,t,n),Rt=w(t),We(e.questionToken),We(e.whenTrue),C(r,Rt),Rt=w(n),We(e.colonToken),We(e.whenFalse),C(r,Rt),Rt=w(r);}function ce(t){var n=e.isOmittedExpression(t)?void 0:t.name;if(e.isBindingPattern(n))for(var r=0,a=n.elements;r<a.length;r++)ce(a[r]);else Rt=N(Rt,t);}function ue(t){f(t),(t.initializer||e.isForInOrOfStatement(t.parent.parent))&&ce(t);}function le(t){e.forEachChild(t,function(e){291!==e.kind&&We(e);});}function _e(t){e.forEachChild(t,function(e){t.fullName&&e===t.name&&71!==t.fullName.kind||We(e);});}function de(t){for(var n=t.expression;185===n.kind;)n=n.expression;if(186===n.kind||187===n.kind?(p(t.typeArguments),p(t.arguments),We(t.expression)):f(t),179===t.expression.kind){var r=t.expression;x(r.expression)&&e.isPushOrUnshiftIdentifier(r.name)&&(Rt=A(Rt,t));}}function pe(t){switch(t.kind){case 199:case 229:case 232:case 178:case 163:case 293:case 275:case 254:return 1;case 230:return 65;case 279:case 233:case 231:case 172:return 33;case 265:return 37;case 151:if(e.isObjectLiteralOrClassExpressionMethod(t))return 173;case 152:case 228:case 150:case 153:case 154:case 155:case 156:case 157:case 160:case 161:return 45;case 186:case 187:return 61;case 234:return 4;case 149:return t.initializer?4:0;case 260:case 214:case 215:case 216:case 235:return 2;case 207:return e.isFunctionLike(t.parent)?0:2}return 0}function fe(e){It&&(It.nextContainer=e),It=e;}function ge(e,t,n){return me(e,t,n)}function me(e,t,n){switch(Ot.kind){case 233:return l(e,t,n);case 265:return he(e,t,n);case 199:case 229:return ye(e,t,n);case 232:return u(Ot.symbol.exports,Ot.symbol,e,t,n);case 163:case 178:case 230:case 275:case 293:case 254:return u(Ot.symbol.members,Ot.symbol,e,t,n);case 160:case 161:case 155:case 156:case 157:case 151:case 150:case 152:case 153:case 154:case 228:case 186:case 187:case 279:case 231:case 172:return u(Ot.locals,void 0,e,t,n)}}function ye(t,n,r){return e.hasModifier(t,32)?u(Ot.symbol.exports,Ot.symbol,t,n,r):u(Ot.symbol.members,Ot.symbol,t,n,r)}function he(t,n,r){return e.isExternalModule(Nt)?l(t,n,r):u(Nt.locals,void 0,t,n,r)}function ve(e){var t=265===e.kind?e:e.body;if(t&&(265===t.kind||234===t.kind))for(var n=0,r=t.statements;n<r.length;n++){var a=r[n];if(244===a.kind||243===a.kind)return!0}return!1}function be(t){e.isInAmbientContext(t)&&!ve(t)?t.flags|=32:t.flags&=-33;}function xe(t){if(be(t),e.isAmbientModule(t))if(e.hasModifier(t,1)&&Ve(t,e.Diagnostics.export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible),e.isExternalModuleAugmentation(t))ke(t);else{var n=void 0;if(9===t.name.kind){var r=t.name.text;e.hasZeroOrOneAsteriskCharacter(r)?n=e.tryParsePattern(r):Ve(t.name,e.Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character,r);}var a=ge(t,512,106639);n&&(Nt.patternAmbientModules||(Nt.patternAmbientModules=[])).push({pattern:n,symbol:a});}else{var i=ke(t);if(0!==i)if(304&t.symbol.flags)t.symbol.constEnumOnlyModule=!1;else{var o=2===i;void 0===t.symbol.constEnumOnlyModule?t.symbol.constEnumOnlyModule=o:t.symbol.constEnumOnlyModule=t.symbol.constEnumOnlyModule&&o;}}}function ke(e){var n=t(e),r=0!==n;return ge(e,r?512:1024,r?106639:0),n}function Se(t){var n=i(131072,s(t));o(n,t,131072);var r=i(2048,\"__type\");o(r,t,2048),r.members=e.createMap(),r.members.set(n.name,n);}function Te(t){var n;if(function(e){e[e.Property=1]=\"Property\",e[e.Accessor=2]=\"Accessor\";}(n||(n={})),$t)for(var r=e.createMap(),a=0,i=t.properties;a<i.length;a++){var o=i[a];if(263!==o.kind&&71===o.name.kind){var s=o.name,c=261===o.kind||262===o.kind||151===o.kind?1:2,u=r.get(s.text);if(u){if(1===c&&1===u){var l=e.getErrorSpanForNode(Nt,s);Nt.bindDiagnostics.push(e.createFileDiagnostic(Nt,l.start,l.length,e.Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode));}}else r.set(s.text,c);}}return Ee(t,4096,\"__object\")}function Ce(e){return Ee(e,4096,\"__jsxAttributes\")}function De(e,t,n){return ge(e,t,n)}function Ee(e,t,n){o(i(t,n),e,t);}function Ne(t,n,r){switch(Ft.kind){case 233:l(t,n,r);break;case 265:if(e.isExternalModule(Ot)){l(t,n,r);break}default:Ft.locals||(Ft.locals=e.createMap(),fe(Ft)),u(Ft.locals,void 0,t,n,r);}}function Ae(e){Ne(e,2,107455);}function we(t){$t&&t.originalKeywordKind>=108&&t.originalKeywordKind<=116&&!e.isIdentifierName(t)&&!e.isInAmbientContext(t)&&(Nt.parseDiagnostics.length||Nt.bindDiagnostics.push(e.createDiagnosticForNode(t,Pe(t),e.declarationNameToString(t))));}function Pe(t){return e.getContainingClass(t)?e.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode:Nt.externalModuleIndicator?e.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode:e.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode}function Oe(t){$t&&e.isLeftHandSideExpression(t.left)&&e.isAssignmentOperator(t.operatorToken.kind)&&Re(t,t.left);}function Fe(e){$t&&e.variableDeclaration&&Re(e,e.variableDeclaration.name);}function Ie(t){if($t&&71===t.expression.kind){var n=e.getErrorSpanForNode(Nt,t.expression);Nt.bindDiagnostics.push(e.createFileDiagnostic(Nt,n.start,n.length,e.Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode));}}function Me(e){return 71===e.kind&&(\"eval\"===e.text||\"arguments\"===e.text)}function Re(t,n){if(n&&71===n.kind){var r=n;if(Me(r)){var a=e.getErrorSpanForNode(Nt,n);Nt.bindDiagnostics.push(e.createFileDiagnostic(Nt,a.start,a.length,Le(t),r.text));}}}function Le(t){return e.getContainingClass(t)?e.Diagnostics.Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode:Nt.externalModuleIndicator?e.Diagnostics.Invalid_use_of_0_Modules_are_automatically_in_strict_mode:e.Diagnostics.Invalid_use_of_0_in_strict_mode}function Be(e){$t&&Re(e,e.name);}function Ke(t){return e.getContainingClass(t)?e.Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_definitions_are_automatically_in_strict_mode:Nt.externalModuleIndicator?e.Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_are_automatically_in_strict_mode:e.Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5}function je(t){if(wt<2&&265!==Ft.kind&&233!==Ft.kind&&!e.isFunctionLike(Ft)){var n=e.getErrorSpanForNode(Nt,t);Nt.bindDiagnostics.push(e.createFileDiagnostic(Nt,n.start,n.length,Ke(t)));}}function Je(t){$t&&4&t.numericLiteralFlags&&Nt.bindDiagnostics.push(e.createDiagnosticForNode(t,e.Diagnostics.Octal_literals_are_not_allowed_in_strict_mode));}function ze(e){$t&&Re(e,e.operand);}function Ue(e){$t&&(43!==e.operator&&44!==e.operator||Re(e,e.operand));}function qe(t){$t&&Ve(t,e.Diagnostics.with_statements_are_not_allowed_in_strict_mode);}function Ve(t,n,r,a,i){var o=e.getSpanOfTokenAtPosition(Nt,t.pos);Nt.bindDiagnostics.push(e.createFileDiagnostic(Nt,o.start,o.length,n,r,a,i));}function $e(t){return\"__\"+e.indexOf(t.parent.parameters,t)}function We(t){if(t){t.parent=Pt;var n=$t;if(e.isInJavaScriptFile(t)&&He(t),Ye(t),t.kind>142){var a=Pt;Pt=t;var i=pe(t);0===i?d(t):_(t,i),Pt=a;}else Gt||0!=(536870912&t.transformFlags)||(Zt|=r(t,0));$t=n;}}function He(e){if(e.jsDoc)for(var t=0,n=e.jsDoc;t<n.length;t++){var r=n[t];if(r.tags)for(var a=0,i=r.tags;a<i.length;a++){var o=i[a];if(291===o.kind){var s=Pt;Pt=r,We(o),Pt=s;}}}}function Ge(t){if(!$t)for(var n=0,r=t;n<r.length;n++){var a=r[n];if(!e.isPrologueDirective(a))return;if(Xe(a))return void($t=!0)}}function Xe(t){var n=e.getTextOfNodeFromSourceText(Nt.text,t.expression);return'\"use strict\"'===n||\"'use strict'\"===n}function Ye(t){switch(t.kind){case 71:if(t.isInJSDocNamespace){for(var n=t.parent;n&&291!==n.kind;)n=n.parent;Ne(n,524288,793064);break}case 99:return Rt&&(e.isExpression(t)||262===Pt.kind)&&(t.flowNode=Rt),we(t);case 179:Rt&&y(t)&&(t.flowNode=Rt);break;case 194:switch(e.getSpecialPropertyAssignmentKind(t)){case 1:ct(t);break;case 2:dt(t);break;case 3:ft(t);break;case 4:pt(t);break;case 5:gt(t);break;case 0:break;default:e.Debug.fail(\"Unknown special property assignment kind\");}return Oe(t);case 260:return Fe(t);case 188:return Ie(t);case 8:return Je(t);case 193:return ze(t);case 192:return Ue(t);case 220:return qe(t);case 169:return void(Mt=!0);case 158:return et(t);case 145:return ge(t,262144,530920);case 146:return kt(t);case 226:case 176:return xt(t);case 149:case 148:return Qe(t);case 261:case 262:return Ct(t,4,0);case 264:return Ct(t,8,900095);case 263:case 255:for(var r=Ot;r.parent;){if(178===r.kind&&194===r.parent.kind&&58===r.parent.operatorToken.kind&&r.parent.left===r){!0;break}r=r.parent;}return;case 155:case 156:case 157:return ge(t,131072,0);case 151:case 150:return Ct(t,8192|(t.questionToken?67108864:0),e.isObjectLiteralMethod(t)?0:99263);case 228:return St(t);case 152:return ge(t,16384,0);case 153:return Ct(t,32768,41919);case 154:return Ct(t,65536,74687);case 160:case 161:return Se(t);case 163:case 172:return Ze(t);case 178:return Te(t);case 186:case 187:return Tt(t);case 181:e.isInJavaScriptFile(t)&&ht(t);break;case 199:case 229:return $t=!0,vt(t);case 230:return Ne(t,64,792968);case 231:return Ne(t,524288,793064);case 232:return bt(t);case 233:return xe(t);case 254:return Ce(t);case 253:return De(t,4,0);case 237:case 240:case 242:case 246:return ge(t,8388608,8388608);case 236:return at(t);case 239:return ot(t);case 244:return it(t);case 243:return rt(t);case 265:return Ge(t.statements),tt();case 207:if(!e.isFunctionLike(t.parent))return;case 234:return Ge(t.statements);case 276:return Qe(t);case 292:return ge(t,t.isBracketed||t.typeExpression&&278===t.typeExpression.type.kind?67108868:4,0);case 279:return Se(t);case 293:case 275:return Ze(t);case 291:var a=t.fullName;if(!a||71===a.kind)return Ne(t,524288,793064)}}function Qe(e){return Ct(e,4|(e.questionToken?67108864:0),0)}function Ze(e){return Ee(e,2048,\"__type\")}function et(e){var t=e.parameterName,n=e.type;t&&71===t.kind&&we(t),t&&169===t.kind&&(Mt=!0),We(n);}function tt(){be(Nt),e.isExternalModule(Nt)&&nt();}function nt(){Ee(Nt,512,'\"'+e.removeFileExtension(Nt.fileName)+'\"');}function rt(t){if(Ot.symbol&&Ot.symbol.exports){var n=243===t.kind&&e.exportAssignmentIsAlias(t)?8388608:4;u(Ot.symbol.exports,Ot.symbol,t,n,8388660);}else Ee(t,8388608,s(t));}function at(t){if(t.modifiers&&t.modifiers.length&&Nt.bindDiagnostics.push(e.createDiagnosticForNode(t,e.Diagnostics.Modifiers_cannot_appear_here)),265===t.parent.kind){var n=t.parent;e.isExternalModule(n)?n.isDeclarationFile?(Nt.symbol.globalExports=Nt.symbol.globalExports||e.createMap(),u(Nt.symbol.globalExports,Nt.symbol,t,8388608,8388608)):Nt.bindDiagnostics.push(e.createDiagnosticForNode(t,e.Diagnostics.Global_module_exports_may_only_appear_in_declaration_files)):Nt.bindDiagnostics.push(e.createDiagnosticForNode(t,e.Diagnostics.Global_module_exports_may_only_appear_in_module_files));}else Nt.bindDiagnostics.push(e.createDiagnosticForNode(t,e.Diagnostics.Global_module_exports_may_only_appear_at_top_level));}function it(e){Ot.symbol&&Ot.symbol.exports?e.exportClause||u(Ot.symbol.exports,Ot.symbol,e,33554432,0):Ee(e,33554432,s(e));}function ot(e){e.name&&ge(e,8388608,8388608);}function st(e){Nt.commonJsModuleIndicator||(Nt.commonJsModuleIndicator=e,Nt.externalModuleIndicator||nt());}function ct(e){st(e),u(Nt.symbol.exports,Nt.symbol,e.left,7340036,0);}function ut(t){return e.isExportsIdentifier(t)||e.isModuleExportsPropertyAccessExpression(t)||lt(t)}function lt(e){if(71===e.kind){var t=mt(e.text);if(t&&t.valueDeclaration&&226===t.valueDeclaration.kind){var n=t.valueDeclaration;if(n.initializer)return _t(n.initializer)}}return!1}function _t(t){return ut(t)||e.isAssignmentExpression(t,!0)&&(_t(t.left)||_t(t.right))}function dt(t){var n=e.getRightMostAssignedExpression(t.right);e.isEmptyObjectLiteral(n)||ut(n)?st(t):(st(t),u(Nt.symbol.exports,Nt.symbol,t,7340548,0));}function pt(t){e.Debug.assert(e.isInJavaScriptFile(t));var n=e.getThisContainer(t,!1);switch(n.kind){case 228:case 186:n.symbol.members=n.symbol.members||e.createMap(),u(n.symbol.members,n.symbol,t,4,0);break;case 152:case 149:case 151:case 153:case 154:var r=n.parent,a=u(e.hasModifier(n,32)?r.symbol.exports:r.symbol.members,r.symbol,t,4,0);a&&(a.isReplaceableByMethod=!0);}}function ft(e){var t=e.left,n=t.expression,r=n.expression;t.parent=e,r.parent=n,n.parent=t,yt(r.text,t,!0);}function gt(e){var t=e.left,n=t.expression;t.parent=e,n.parent=t,lt(n)?ct(e):yt(n.text,t,!1);}function mt(e){return Ot.symbol&&Ot.symbol.exports&&Ot.symbol.exports.get(e)||Ot.locals&&Ot.locals.get(e)}function yt(t,n,r){var a=mt(t);a&&e.isDeclarationOfFunctionOrClassExpression(a)&&(a=a.valueDeclaration.initializer.symbol),a&&48&a.flags&&u(r?a.members||(a.members=e.createMap()):a.exports||(a.exports=e.createMap()),a,n,4,0);}function ht(t){!Nt.commonJsModuleIndicator&&e.isRequireCall(t,!1)&&st(t);}function vt(t){229===t.kind?Ne(t,32,899519):(Ee(t,32,t.name?t.name.text:\"__class\"),t.name&&Ht.set(t.name.text,t.name.text));var n=t.symbol,r=i(16777220,\"prototype\"),a=n.exports.get(r.name);a&&(t.name&&(t.name.parent=t),Nt.bindDiagnostics.push(e.createDiagnosticForNode(a.declarations[0],e.Diagnostics.Duplicate_identifier_0,r.name))),n.exports.set(r.name,r),r.parent=n;}function bt(t){return e.isConst(t)?Ne(t,128,899967):Ne(t,256,899327)}function xt(t){$t&&Re(t,t.name),e.isBindingPattern(t.name)||(e.isBlockOrCatchScoped(t)?Ae(t):e.isParameterDeclaration(t)?ge(t,1,107455):ge(t,1,107454));}function kt(t){if($t&&!e.isInAmbientContext(t)&&Re(t,t.name),e.isBindingPattern(t.name)?Ee(t,1,$e(t)):ge(t,1,107455),e.isParameterPropertyDeclaration(t)){var n=t.parent.parent;u(n.symbol.members,n.symbol,t,4|(t.questionToken?67108864:0),0);}}function St(t){Nt.isDeclarationFile||e.isInAmbientContext(t)||e.isAsyncFunction(t)&&(Vt|=1024),Be(t),$t?(je(t),Ne(t,16,106927)):ge(t,16,106927);}function Tt(t){return Nt.isDeclarationFile||e.isInAmbientContext(t)||e.isAsyncFunction(t)&&(Vt|=1024),Rt&&(t.flowNode=Rt),Be(t),Ee(t,16,t.name?t.name.text:\"__function\")}function Ct(t,n,r){return Nt.isDeclarationFile||e.isInAmbientContext(t)||!e.isAsyncFunction(t)||(Vt|=1024),Rt&&e.isObjectLiteralOrClassExpressionMethod(t)&&(t.flowNode=Rt),e.hasDynamicName(t)?Ee(t,n,\"__computed\"):ge(t,n,r)}function Dt(e){var n=t(e);return 1===n||2===n&&At.preserveConstEnums}function Et(t){return!!(1&Rt.flags)&&(Rt===Yt&&(e.isStatementButNotDeclaration(t)&&209!==t.kind||229===t.kind||233===t.kind&&Dt(t)||232===t.kind&&(!e.isConstEnumDeclaration(t)||At.preserveConstEnums))&&(Rt=Qt,!At.allowUnreachableCode&&!e.isInAmbientContext(t)&&(208!==t.kind||3&e.getCombinedNodeFlags(t.declarationList)||e.forEach(t.declarationList.declarations,function(e){return e.initializer}))&&Ve(t,e.Diagnostics.Unreachable_code_detected)),!0)}var Nt,At,wt,Pt,Ot,Ft,It,Mt,Rt,Lt,Bt,Kt,jt,Jt,zt,Ut,qt,Vt,$t,Wt,Ht,Gt,Xt=0,Yt={flags:1},Qt={flags:1},Zt=0;return n}();e.bindSourceFile=n,e.computeTransformFlagsForNode=r,e.getTransformFlagsSubtreeExclusions=P;}(r||(r={}));!function(e){function t(t){t.trace(e.formatMessage.apply(void 0,arguments));}function n(e,t){return e.traceResolution&&void 0!==t.trace}function r(t){if(t)return e.Debug.assert(e.extensionIsTypeScript(t.extension)),t.path}function a(e,t,n){return{resolvedModule:e&&{resolvedFileName:e.path,extension:e.extension,isExternalLibraryImport:t},failedLookupLocations:n}}function i(t){return!(e.isRootedDiskPath(t)||e.isExternalModuleNameRelative(t))}function o(n,r,a,i){function o(n){if(e.hasProperty(c,n)){var r=c[n];if(\"string\"==typeof r){var o=e.normalizePath(e.combinePaths(a,r));return i.traceEnabled&&t(i.host,e.Diagnostics.package_json_has_0_field_1_that_references_2,n,r,o),o}i.traceEnabled&&t(i.host,e.Diagnostics.Expected_type_of_0_field_in_package_json_to_be_string_got_1,n,typeof r);}else i.traceEnabled&&t(i.host,e.Diagnostics.package_json_does_not_have_a_0_field,n);}var c=s(r,i.host);return n?o(\"typings\")||o(\"types\"):o(\"main\")}function s(e,t){try{var n=t.readFile(e);return n?JSON.parse(n):{}}catch(e){return{}}}function c(t,n){if(t.typeRoots)return t.typeRoots;var r;return t.configFilePath?r=e.getDirectoryPath(t.configFilePath):n.getCurrentDirectory&&(r=n.getCurrentDirectory()),void 0!==r?u(r,n):void 0}function u(t,n){if(!n.directoryExists)return[e.combinePaths(t,q)];var r;return z(e.normalizePath(t),function(t){var a=e.combinePaths(t,q);n.directoryExists(a)&&(r||(r=[])).push(a);}),r}function l(a,i,o,s){var u=n(o,s),l={compilerOptions:o,host:s,traceEnabled:u},_=c(o,s);u&&(void 0===i?void 0===_?t(s,e.Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set,a):t(s,e.Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1,a,_):void 0===_?t(s,e.Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set,a,i):t(s,e.Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_2,a,i,_));var d=[],p=function(){if(_&&_.length)return u&&t(s,e.Diagnostics.Resolving_with_primary_search_path_0,_.join(\", \")),e.forEach(_,function(n){var i=e.combinePaths(n,a),o=e.getDirectoryPath(i),c=k(o,s);return!c&&u&&t(s,e.Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it,o),r(D(U.DtsOnly,i,d,!c,l))});u&&t(s,e.Diagnostics.Root_directory_cannot_be_determined_skipping_primary_search_paths);}(),f=!0;p||(p=function(){var n,o=i&&e.getDirectoryPath(i);if(void 0!==o){u&&t(s,e.Diagnostics.Looking_up_in_node_modules_folder_initial_location_0,o);var c=O(U.DtsOnly,a,o,d,l,void 0);return!(n=r(c&&c.value))&&u&&t(s,e.Diagnostics.Type_reference_directive_0_was_not_resolved,a),n}u&&t(s,e.Diagnostics.Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_modules_folder);}(),f=!1);var g;return p&&(p=b(p,s,u),u&&t(s,e.Diagnostics.Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2,a,p,f),g={primary:f,resolvedFileName:p}),{resolvedTypeReferenceDirective:g,failedLookupLocations:d}}function _(t,n){if(t.types)return t.types;var r=[];if(n.directoryExists&&n.getDirectories){var a=c(t,n);if(a)for(var i=0,o=a;i<o.length;i++){var u=o[i];if(n.directoryExists(u))for(var l=0,_=n.getDirectories(u);l<_.length;l++){var d=_[l],p=e.normalizePath(d),f=w(e.combinePaths(u,p));n.fileExists(f)&&null===s(f,n).typings||r.push(e.getBaseFileName(p));}}}return r}function d(t,n){function r(r){var a=e.toPath(r,t,n),i=s.get(a);return i||(i=e.createMap(),s.set(a,i)),i}function a(e){if(i(e)){var t=c.get(e);return t||(t=o(),c.set(e,t)),t}}function o(){function r(r){return o.get(e.toPath(r,t,n))}function a(r,a){var s=e.toPath(r,t,n);if(!o.contains(s)){o.set(s,a);for(var c=i(s,a.resolvedModule&&a.resolvedModule.resolvedFileName),u=s;;){var l=e.getDirectoryPath(u);if(l===u||o.contains(l))break;if(o.set(l,a),(u=l)===c)break}}}function i(r,a){if(void 0!==a){for(var i=e.toPath(e.getDirectoryPath(a),t,n),o=0;o<Math.min(r.length,i.length)&&r.charCodeAt(o)===i.charCodeAt(o);)o++;var s=r.lastIndexOf(e.directorySeparator,o);if(!(s<0))return r.substr(0,s)}}var o=e.createFileMap();return{get:r,set:a}}var s=e.createFileMap(),c=e.createMap();return{getOrCreateCacheForDirectory:r,getOrCreateCacheForModuleName:a}}function p(r,a,i,o,s){var c=n(i,o);c&&t(o,e.Diagnostics.Resolving_module_0_from_1,r,a);var u=e.getDirectoryPath(a),l=s&&s.getOrCreateCacheForDirectory(u),_=l&&l.get(r);if(_)c&&t(o,e.Diagnostics.Resolution_for_module_0_was_found_in_cache,r);else{var d=i.moduleResolution;switch(void 0===d?(d=e.getEmitModuleKind(i)===e.ModuleKind.CommonJS?e.ModuleResolutionKind.NodeJs:e.ModuleResolutionKind.Classic,c&&t(o,e.Diagnostics.Module_resolution_kind_is_not_specified_using_0,e.ModuleResolutionKind[d])):c&&t(o,e.Diagnostics.Explicitly_specified_module_resolution_kind_Colon_0,e.ModuleResolutionKind[d]),d){case e.ModuleResolutionKind.NodeJs:_=y(r,a,i,o,s);break;case e.ModuleResolutionKind.Classic:_=K(r,a,i,o,s);break;default:e.Debug.fail(\"Unexpected moduleResolution: \"+d);}if(l){l.set(r,_);var p=s.getOrCreateCacheForModuleName(r);p&&p.set(u,_);}}return c&&(_.resolvedModule?t(o,e.Diagnostics.Module_name_0_was_successfully_resolved_to_1,r,_.resolvedModule.resolvedFileName):t(o,e.Diagnostics.Module_name_0_was_not_resolved,r)),_}function f(e,t,n,r,a,o){return i(t)?m(e,t,r,a,o):g(e,t,n,r,a,o)}function g(n,r,a,i,o,s){if(s.compilerOptions.rootDirs){s.traceEnabled&&t(s.host,e.Diagnostics.rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0,r);for(var c,u,l=e.normalizePath(e.combinePaths(a,r)),_=0,d=s.compilerOptions.rootDirs;_<d.length;_++){var p=d[_],f=e.normalizePath(p);e.endsWith(f,e.directorySeparator)||(f+=e.directorySeparator);var g=e.startsWith(l,f)&&(void 0===u||u.length<f.length);s.traceEnabled&&t(s.host,e.Diagnostics.Checking_if_0_is_the_longest_matching_prefix_for_1_2,f,l,g),g&&(u=f,c=p);}if(u){s.traceEnabled&&t(s.host,e.Diagnostics.Longest_matching_prefix_for_0_is_1,l,u);var m=l.substr(u.length);s.traceEnabled&&t(s.host,e.Diagnostics.Loading_0_from_the_root_dir_1_candidate_location_2,m,u,l);var y=i(n,l,o,!k(a,s.host),s);if(y)return y;s.traceEnabled&&t(s.host,e.Diagnostics.Trying_other_entries_in_rootDirs);for(var h=0,v=s.compilerOptions.rootDirs;h<v.length;h++)if((p=v[h])!==c){var b=e.combinePaths(e.normalizePath(p),m);s.traceEnabled&&t(s.host,e.Diagnostics.Loading_0_from_the_root_dir_1_candidate_location_2,m,p,b);var x=i(n,b,o,!k(e.getDirectoryPath(b),s.host),s);if(x)return x}s.traceEnabled&&t(s.host,e.Diagnostics.Module_resolution_using_rootDirs_has_failed);}}}function m(n,r,a,i,o){if(o.compilerOptions.baseUrl){o.traceEnabled&&t(o.host,e.Diagnostics.baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1,o.compilerOptions.baseUrl,r);var s=void 0;if(o.compilerOptions.paths&&(o.traceEnabled&&t(o.host,e.Diagnostics.paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0,r),s=e.matchPatternOrExact(e.getOwnKeys(o.compilerOptions.paths),r)),s){var c=\"string\"==typeof s?void 0:e.matchedText(s,r),u=\"string\"==typeof s?s:e.patternText(s);return o.traceEnabled&&t(o.host,e.Diagnostics.Module_name_0_matched_pattern_1,r,u),e.forEach(o.compilerOptions.paths[u],function(r){var s=c?r.replace(\"*\",c):r,u=e.normalizePath(e.combinePaths(o.compilerOptions.baseUrl,s));o.traceEnabled&&t(o.host,e.Diagnostics.Trying_substitution_0_candidate_module_location_Colon_1,r,s);var l=e.tryGetExtensionFromPath(u);if(void 0!==l){var _=C(u,i,!1,o);if(void 0!==_)return{path:_,extension:l}}return a(n,u,i,!k(e.getDirectoryPath(u),o.host),o)})}var l=e.normalizePath(e.combinePaths(o.compilerOptions.baseUrl,r));return o.traceEnabled&&t(o.host,e.Diagnostics.Resolving_module_name_0_relative_to_base_url_1_2,r,o.compilerOptions.baseUrl,l),a(n,l,i,!k(e.getDirectoryPath(l),o.host),o)}}function y(t,n,r,a,i){return v(t,e.getDirectoryPath(n),r,a,i,!1)}function h(t,n,r){var a=v(t,n,{moduleResolution:e.ModuleResolutionKind.NodeJs,allowJs:!0},r,void 0,!0),i=a.resolvedModule,o=a.failedLookupLocations;if(!i)throw new Error(\"Could not resolve JS module \"+t+\" starting at \"+n+\". Looked in: \"+o.join(\", \"));return i.resolvedFileName}function v(r,o,s,c,u,l){function _(n){var a=f(n,r,o,function(e,t,n,r,a){return x(e,t,n,r,a,!0)},p,g);if(a)return J({resolved:a,isExternalLibraryImport:!1});if(i(r)){d&&t(c,e.Diagnostics.Loading_module_0_from_node_modules_folder_target_file_type_1,r,U[n]);var s=O(n,r,o,p,g,u);return s&&{value:s.value&&{resolved:{path:b(s.value.path,c,d),extension:s.value.extension},isExternalLibraryImport:!0}}}var l=x(n,e.normalizePath(e.combinePaths(o,r)),p,!1,g,!0);return l&&J({resolved:l,isExternalLibraryImport:!1})}var d=n(s,c),p=[],g={compilerOptions:s,host:c,traceEnabled:d},m=l?_(U.JavaScript):_(U.TypeScript)||_(U.JavaScript);if(m&&m.value){var y=m.value;return a(y.resolved,y.isExternalLibraryImport,p)}return{resolvedModule:void 0,failedLookupLocations:p}}function b(n,r,a){if(!r.realpath)return n;var i=e.normalizePath(r.realpath(n));return a&&t(r,e.Diagnostics.Resolving_real_path_for_0_result_1,n,i),i}function x(n,r,a,i,o,s){if(o.traceEnabled&&t(o.host,e.Diagnostics.Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1,r,U[n]),!e.pathEndsWithDirectorySeparator(r)){if(!i){var c=e.getDirectoryPath(r);k(c,o.host)||(o.traceEnabled&&t(o.host,e.Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it,c),i=!0);}var u=S(n,r,a,i,o);if(u)return u}return i||k(r,o.host)||(o.traceEnabled&&t(o.host,e.Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it,r),i=!0),D(n,r,a,i,o,s)}function k(e,t){return!t.directoryExists||t.directoryExists(e)}function S(n,r,a,i,o){var s=T(r,n,a,i,o);if(s)return s;if(e.hasJavaScriptFileExtension(r)){var c=e.removeFileExtension(r);if(o.traceEnabled){var u=r.substring(c.length);t(o.host,e.Diagnostics.File_name_0_has_a_1_extension_stripping_it,r,u);}return T(c,n,a,i,o)}}function T(t,n,r,a,i){function o(e){var n=C(t+e,r,a,i);return n&&{path:n,extension:e}}if(!a){var s=e.getDirectoryPath(t);s&&(a=!k(s,i.host));}switch(n){case U.DtsOnly:return o(\".d.ts\");case U.TypeScript:return o(\".ts\")||o(\".tsx\")||o(\".d.ts\");case U.JavaScript:return o(\".js\")||o(\".jsx\")}}function C(n,r,a,i){if(!a){if(i.host.fileExists(n))return i.traceEnabled&&t(i.host,e.Diagnostics.File_0_exist_use_it_as_a_name_resolution_result,n),n;i.traceEnabled&&t(i.host,e.Diagnostics.File_0_does_not_exist,n);}r.push(n);}function D(n,r,a,i,o,s){void 0===s&&(s=!0);var c=!i&&k(r,o.host);if(s){var u=w(r);if(c&&o.host.fileExists(u)){var l=E(u,n,r,a,o);if(l)return l}else c&&o.traceEnabled&&t(o.host,e.Diagnostics.File_0_does_not_exist,u),a.push(u);}return S(n,e.combinePaths(r,\"index\"),a,!c,o)}function E(n,r,a,i,s){s.traceEnabled&&t(s.host,e.Diagnostics.Found_package_json_at_0,n);var c=o(r!==U.JavaScript,n,a,s);if(c){var u=!k(e.getDirectoryPath(c),s.host),l=C(c,i,u,s);if(l){var _=l&&N(r,l);if(_)return _;s.traceEnabled&&t(s.host,e.Diagnostics.File_0_has_an_unsupported_extension_so_skipping_it,l);}return x(r===U.DtsOnly?U.TypeScript:r,c,i,u,s,!1)}}function N(t,n){var r=e.tryGetExtensionFromPath(n);return void 0!==r&&A(t,r)?{path:n,extension:r}:void 0}function A(e,t){switch(e){case U.JavaScript:return\".js\"===t||\".jsx\"===t;case U.TypeScript:return\".ts\"===t||\".tsx\"===t||\".d.ts\"===t;case U.DtsOnly:return\".d.ts\"===t}}function w(t){return e.combinePaths(t,\"package.json\")}function P(t,n,r,a,i,o){var s=e.normalizePath(e.combinePaths(r,n));return S(t,s,i,!a,o)||D(t,s,i,!a,o)}function O(e,t,n,r,a,i){return I(e,t,n,r,a,!1,i)}function F(e,t,n,r){return I(U.DtsOnly,e,t,n,r,!0,void 0)}function I(t,n,r,a,i,o,s){var c=s&&s.getOrCreateCacheForModuleName(n);return z(e.normalizeSlashes(r),function(r){if(\"node_modules\"!==e.getBaseFileName(r)){var s=B(c,n,r,i.traceEnabled,i.host);return s||J(M(t,n,r,a,i,o))}})}function M(n,r,a,i,o,s){void 0===s&&(s=!1);var c=e.combinePaths(a,\"node_modules\"),u=k(c,o.host);!u&&o.traceEnabled&&t(o.host,e.Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it,c);var l=s?void 0:P(n,r,c,u,i,o);if(l)return l;if(n!==U.JavaScript){var _=e.combinePaths(c,\"@types\"),d=u;return u&&!k(_,o.host)&&(o.traceEnabled&&t(o.host,e.Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it,_),d=!1),P(U.DtsOnly,R(r,o),_,d,i,o)}}function R(n,r){if(e.startsWith(n,\"@\")){var a=n.replace(e.directorySeparator,V);if(a!==n){var i=a.slice(1);return r.traceEnabled&&t(r.host,e.Diagnostics.Scoped_package_detected_looking_in_0,i),i}}return n}function L(t){var n=e.removePrefix(t,\"@types/\");return n!==t?-1!==n.indexOf(\"__\")?\"@\"+n.replace(V,e.directorySeparator):n:t}function B(n,r,a,i,o){var s=n&&n.get(a);if(s)return i&&t(o,e.Diagnostics.Resolution_for_module_0_was_found_in_cache,r),{value:s.resolvedModule&&{path:s.resolvedModule.resolvedFileName,extension:s.resolvedModule.extension}}}function K(t,r,o,s,c){function u(n){var r=f(n,t,p,S,d,_);if(r)return{value:r};var a=c&&c.getOrCreateCacheForModuleName(t);if(!i(t)){var o=e.normalizePath(e.combinePaths(p,t));return J(S(n,o,d,!1,_))}var u=z(p,function(r){var i=B(a,t,r,l,s);if(i)return i;var o=e.normalizePath(e.combinePaths(r,t));return J(S(n,o,d,!1,_))});return u||(n===U.TypeScript?F(t,p,d,_):void 0)}var l=n(o,s),_={compilerOptions:o,host:s,traceEnabled:l},d=[],p=e.getDirectoryPath(r),g=u(U.TypeScript)||u(U.JavaScript);return a(g&&g.value,!1,d)}function j(r,i,o,s,c){var u=n(o,s);u&&t(s,e.Diagnostics.Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using_cache_location_2,i,r,c);var l={compilerOptions:o,host:s,traceEnabled:u},_=[];return a(M(U.DtsOnly,r,c,_,l),!0,_)}function J(e){return void 0!==e?{value:e}:void 0}function z(t,n){for(;;){var r=n(t);if(void 0!==r)return r;var a=e.getDirectoryPath(t);if(a===t)return;t=a;}}e.trace=t,e.isTraceEnabled=n;var U;!function(e){e[e.TypeScript=0]=\"TypeScript\",e[e.JavaScript=1]=\"JavaScript\",e[e.DtsOnly=2]=\"DtsOnly\";}(U||(U={})),e.moduleHasNonRelativeName=i,e.getEffectiveTypeRoots=c;var q=e.combinePaths(\"node_modules\",\"@types\");e.resolveTypeReferenceDirective=l,e.getAutomaticTypeDirectiveNames=_,e.createModuleResolutionCache=d,e.resolveModuleName=p,e.nodeModuleNameResolver=y,e.resolveJavaScriptModule=h,e.directoryProbablyExists=k;var V=\"__\";e.getPackageNameFromAtTypesDirectory=L,e.classicNameResolver=K,e.loadModuleFromGlobalCache=j;}(r||(r={}));!function(e){function t(e){return e.id||(e.id=c,c++),e.id}function n(e){return e.id||(e.id=s,s++),e.id}function r(t,n){var r=e.getModuleInstanceState(t);return 1===r||n&&2===r}function a(a,s){function c(){return nb||(nb=\"React\",rh.jsxFactory?(rb=e.parseIsolatedEntityName(rh.jsxFactory,ah))&&(nb=hg(rb).text):rh.reactNamespace&&(nb=rh.reactNamespace)),nb}function _(e,t){return Mg(e,t),_h}function d(t,n,r,a,i){var o=t?e.createDiagnosticForNode(t,n,r,a,i):e.createCompilerDiagnostic(n,r,a,i);tb.add(o);}function p(e,t){Qy++;var n=new Hy(134217728|e,t);return n.checkFlags=0,n}function f(e){return 0!=(134217728&e.flags)}function g(e){var t=0;return 2&e&&(t|=107455),1&e&&(t|=107454),4&e&&(t|=0),8&e&&(t|=900095),16&e&&(t|=106927),32&e&&(t|=899519),64&e&&(t|=792968),256&e&&(t|=899327),128&e&&(t|=899967),512&e&&(t|=106639),8192&e&&(t|=99263),32768&e&&(t|=41919),65536&e&&(t|=74687),262144&e&&(t|=530920),524288&e&&(t|=793064),8388608&e&&(t|=8388608),t}function m(e,t){t.mergeId||(t.mergeId=u,u++),Uv[t.mergeId]=e;}function y(t){var n=p(t.flags,t.name);return n.declarations=t.declarations.slice(0),n.parent=t.parent,t.valueDeclaration&&(n.valueDeclaration=t.valueDeclaration),t.constEnumOnlyModule&&(n.constEnumOnlyModule=!0),t.members&&(n.members=e.cloneMap(t.members)),t.exports&&(n.exports=e.cloneMap(t.exports)),m(n,t),n}function h(t,n){if(t.flags&g(n.flags))if(1024&t.flags)d(e.getNameOfDeclaration(n.declarations[0]),e.Diagnostics.Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity,$e(t));else{var r=2&t.flags||2&n.flags?e.Diagnostics.Cannot_redeclare_block_scoped_variable_0:e.Diagnostics.Duplicate_identifier_0;e.forEach(n.declarations,function(t){d(e.getNameOfDeclaration(t)||t,r,$e(n));}),e.forEach(t.declarations,function(t){d(e.getNameOfDeclaration(t)||t,r,$e(n));});}else 512&n.flags&&512&t.flags&&t.constEnumOnlyModule&&!n.constEnumOnlyModule&&(t.constEnumOnlyModule=!1),t.flags|=n.flags,n.valueDeclaration&&(!t.valueDeclaration||233===t.valueDeclaration.kind&&233!==n.valueDeclaration.kind)&&(t.valueDeclaration=n.valueDeclaration),e.addRange(t.declarations,n.declarations),n.members&&(t.members||(t.members=e.createMap()),v(t.members,n.members)),n.exports&&(t.exports||(t.exports=e.createMap()),v(t.exports,n.exports)),m(t,n);}function v(e,t){t.forEach(function(t,n){var r=e.get(n);r?(134217728&r.flags||(r=y(r),e.set(n,r)),h(r,t)):e.set(n,t);});}function b(t){var n=t.parent;if(n.symbol.declarations[0]===n)if(e.isGlobalScopeAugmentation(n))v(Ov,n.symbol.exports);else{var r=ue(t,t,e.isInAmbientContext(t.parent.parent)?void 0:e.Diagnostics.Invalid_module_name_in_augmentation_module_0_cannot_be_found,!0);if(!r)return;1920&(r=_e(r)).flags?h(r=134217728&r.flags?r:y(r),n.symbol):d(t,e.Diagnostics.Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity,t.text);}else e.Debug.assert(n.symbol.declarations.length>1);}function x(t,n,r){function a(t,n){return function(r){return tb.add(e.createDiagnosticForNode(r,n,t))}}n.forEach(function(n,i){var o=t.get(i);o?e.forEach(o.declarations,a(i,r)):t.set(i,n);});}function k(e){if(134217728&e.flags)return e;var t=n(e);return qv[t]||(qv[t]={})}function S(e){var n=t(e);return Vv[n]||(Vv[n]={flags:0})}function T(e){return 32768&e.flags?e.objectFlags:0}function C(t){return 265===t.kind&&!e.isExternalOrCommonJsModule(t)}function D(t,n,r){if(r){var a=t.get(n);if(a){if(e.Debug.assert(0==(1&e.getCheckFlags(a)),\"Should never get an instantiated symbol here.\"),a.flags&r)return a;if(8388608&a.flags){var i=ne(a);if(i===kh||i.flags&r)return a}}}}function E(t,n){var r=t.parent,a=t.parent.parent,i=D(r.locals,n,107455),o=D(a.symbol.members,n,107455);if(i&&o)return[i,o];e.Debug.fail(\"There should exist two symbols, one as property declaration and one as parameter declaration\");}function N(t,n){function r(t,n,r){return!!e.findAncestor(t,function(a){if(a===r)return\"quit\";if(e.isFunctionLike(a))return!0;if(a.parent&&149===a.parent.kind&&a.parent.initializer===a)if(32&e.getModifierFlags(a.parent)){if(151===n.kind)return!0}else if(!(149===n.kind&&!(32&e.getModifierFlags(n)))||e.getContainingClass(t)!==e.getContainingClass(n))return!0})}var i=e.getSourceFileOfNode(t),o=e.getSourceFileOfNode(n);if(i!==o){if(ih&&(i.externalModuleIndicator||o.externalModuleIndicator)||!rh.outFile&&!rh.out||Ks(n)||e.isInAmbientContext(t))return!0;if(r(n,t))return!0;var s=a.getSourceFiles();return e.indexOf(s,i)<=e.indexOf(s,o)}if(t.pos<=n.pos){if(176===t.kind){var c=e.getAncestor(n,176);return c?e.findAncestor(c,e.isBindingElement)!==e.findAncestor(t,e.isBindingElement)||t.pos<c.pos:N(e.getAncestor(t,226),n)}return 226!==t.kind||!function(t,n){var r=e.getEnclosingBlockScopeContainer(t);switch(t.parent.parent.kind){case 208:case 214:case 216:if(K(n,t,r))return!0}return e.isForInOrOfStatement(t.parent.parent)&&K(n,t.parent.parent.expression,r)}(t,n)}if(246===n.parent.kind)return!0;var u=e.getEnclosingBlockScopeContainer(t);return Ks(n)||r(n,t,u)}function A(e,t,n,r,a,i){return w(e,t,n,r,a,D,i)}function w(t,n,r,a,i,o,s){var c,u,l,_,p=t,f=t,g=!1;e:for(;t;){if(t.locals&&!C(t)&&(c=o(t.locals,n,r))){var m=!0;if(e.isFunctionLike(t)&&u&&u!==t.body&&(r&c.flags&793064&&283!==u.kind&&(m=!!(262144&c.flags)&&(u===t.type||146===u.kind||145===u.kind)),107455&r&&1&c.flags&&(m=146===u.kind||u===t.type&&146===c.valueDeclaration.kind)),m)break e;c=void 0;}switch(t.kind){case 265:if(!e.isExternalOrCommonJsModule(t))break;g=!0;case 233:var y=ke(t).exports;if(265===t.kind||e.isAmbientModule(t)){if(c=y.get(\"default\")){var h=e.getLocalSymbolForExportDefault(c);if(h&&c.flags&r&&h.name===n)break e;c=void 0;}var v=y.get(n);if(v&&8388608===v.flags&&e.getDeclarationOfKind(v,246))break}if(c=o(y,n,8914931&r))break e;break;case 232:if(c=o(ke(t).exports,n,8&r))break e;break;case 149:case 148:if(e.isClassLike(t.parent)&&!(32&e.getModifierFlags(t))){var b=De(t.parent);b&&b.locals&&o(b.locals,n,107455&r)&&(l=t);}break;case 229:case 199:case 230:if(c=o(ke(t).members,n,793064&r)){if(!P(c,t)){c=void 0;break}if(u&&32&e.getModifierFlags(u))return void d(f,e.Diagnostics.Static_members_cannot_reference_class_type_parameters);break e}if(199===t.kind&&32&r){var x=t.name;if(x&&n===x.text){c=t.symbol;break e}}break;case 144:if(_=t.parent.parent,(e.isClassLike(_)||230===_.kind)&&(c=o(ke(_).members,n,793064&r)))return void d(f,e.Diagnostics.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type);break;case 151:case 150:case 152:case 153:case 154:case 228:case 187:if(3&r&&\"arguments\"===n){c=fh;break e}break;case 186:if(3&r&&\"arguments\"===n){c=fh;break e}if(16&r){var k=t.name;if(k&&n===k.text){c=t.symbol;break e}}break;case 147:t.parent&&146===t.parent.kind&&(t=t.parent),t.parent&&e.isClassElement(t.parent)&&(t=t.parent);}u=t,t=t.parent;}if(c&&a&&oh&&(c.isReferenced=!0),c||(c=o(Ov,n,r)),c){if(a){if(l){var S=l.name;return void d(f,e.Diagnostics.Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor,e.declarationNameToString(S),\"string\"==typeof i?i:e.declarationNameToString(i))}if(2&r||(32&r||384&r)&&107455==(107455&r)){var T=Te(c);(2&T.flags||32&T.flags||384&T.flags)&&B(T,f);}if(c&&g&&107455==(107455&r)){var D=c.declarations;D&&1===D.length&&236===D[0].kind&&d(f,e.Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead,n);}}return c}if(a&&!(f&&(O(f,n,i)||F(f)||M(f,n,r)||R(f,n,r)||L(f,n,r)))){var E=void 0;s&&Jv<zv&&(E=Vl(p,n,r))&&d(f,s,\"string\"==typeof i?i:e.declarationNameToString(i),E),E||d(f,a,\"string\"==typeof i?i:e.declarationNameToString(i)),Jv++;}}function P(e,t){for(var n=0,r=e.declarations;n<r.length;n++){var a=r[n];if(145===a.kind&&a.parent===t)return!0}return!1}function O(t,n,r){if(71===t.kind&&Ug(t)||Ks(t))return!1;for(var a=e.getThisContainer(t,!0),i=a;i;){if(e.isClassLike(i.parent)){var o=ke(i.parent);if(!o)break;if(gr(jt(o),n))return d(t,e.Diagnostics.Cannot_find_name_0_Did_you_mean_the_static_member_1_0,\"string\"==typeof r?r:e.declarationNameToString(r),$e(o)),!0;if(i===a&&!(32&e.getModifierFlags(i))&&gr(yn(o).thisType,n))return d(t,e.Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0,\"string\"==typeof r?r:e.declarationNameToString(r)),!0}i=i.parent;}return!1}function F(t){var n=I(t),r=!(!n||!se(n,64,!0));return r&&d(t,e.Diagnostics.Cannot_extend_an_interface_0_Did_you_mean_implements,e.getTextOfNode(n)),r}function I(t){switch(t.kind){case 71:case 179:return t.parent?I(t.parent):void 0;case 201:return e.Debug.assert(e.isEntityNameExpression(t.expression)),t.expression;default:return}}function M(t,n,r){return!(1920!==r||!te(A(t,n,792640,void 0,void 0)))&&(d(t,e.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here,n),!0)}function R(t,n,r){if(107455&r){if(\"any\"===n||\"string\"===n||\"number\"===n||\"boolean\"===n||\"never\"===n)return d(t,e.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here,n),!0;var a=te(A(t,n,792640,void 0,void 0));if(a&&!(1024&a.flags))return d(t,e.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here,n),!0}return!1}function L(t,n,r){if(107031&r){if(a=te(A(t,n,1024,void 0,void 0)))return d(t,e.Diagnostics.Cannot_use_namespace_0_as_a_value,n),!0}else if(792640&r){var a=te(A(t,n,1024,void 0,void 0));if(a)return d(t,e.Diagnostics.Cannot_use_namespace_0_as_a_type,n),!0}return!1}function B(t,n){e.Debug.assert(!!(2&t.flags||32&t.flags||384&t.flags));var r=e.forEach(t.declarations,function(t){return e.isBlockOrCatchScoped(t)||e.isClassLike(t)||232===t.kind?t:void 0});e.Debug.assert(void 0!==r,\"Declaration to checkResolvedBlockScopedVariable is undefined\"),e.isInAmbientContext(r)||N(r,n)||(2&t.flags?d(n,e.Diagnostics.Block_scoped_variable_0_used_before_its_declaration,e.declarationNameToString(e.getNameOfDeclaration(r))):32&t.flags?d(n,e.Diagnostics.Class_0_used_before_its_declaration,e.declarationNameToString(e.getNameOfDeclaration(r))):256&t.flags&&d(n,e.Diagnostics.Enum_0_used_before_its_declaration,e.declarationNameToString(e.getNameOfDeclaration(r))));}function K(t,n,r){return n&&!!e.findAncestor(t,function(t){return t===r||e.isFunctionLike(t)?\"quit\":t===n})}function j(t){if(e.isAliasSymbolDeclaration(t))return 237===t.kind?t:e.findAncestor(t,e.isImportDeclaration)}function J(t){return e.find(t.declarations,e.isAliasSymbolDeclaration)}function z(t,n){return 248===t.moduleReference.kind?_e(ce(t,e.getExternalModuleImportEqualsDeclarationExpression(t))):ie(t.moduleReference,n)}function U(t,n){var r=ce(t,t.parent.moduleSpecifier);if(r){var a=void 0;if(e.isShorthandAmbientModuleSymbol(r))a=r;else{var i=r.exports.get(\"export=\");a=i?gr(jt(i),\"default\"):te(r.exports.get(\"default\"),n);}if(a||sh){if(!a&&sh)return _e(r,n)||te(r,n)}else d(t.name,e.Diagnostics.Module_0_has_no_default_export,$e(r));return a}}function q(e,t){var n=e.parent.parent.moduleSpecifier;return de(ce(e,n),n,t)}function V(t,n){if(t===kh&&n===kh)return kh;if(794600&t.flags)return t;var r=p(t.flags|n.flags,t.name);return r.declarations=e.concatenate(t.declarations,n.declarations),r.parent=t.parent||n.parent,t.valueDeclaration&&(r.valueDeclaration=t.valueDeclaration),n.members&&(r.members=n.members),t.exports&&(r.exports=t.exports),r}function $(e,t,n){if(1536&e.flags)return te(ye(e).get(t),n)}function W(e,t){if(3&e.flags){var n=e.valueDeclaration.type;if(n)return te(gr(Mi(n),t))}}function H(t,n,r){var a=ce(t,t.moduleSpecifier),i=de(a,t.moduleSpecifier,r);if(i){var o=n.propertyName||n.name;if(o.text){if(e.isShorthandAmbientModuleSymbol(a))return a;var s=void 0;s=te(s=a&&a.exports&&a.exports.get(\"export=\")?gr(jt(i),o.text):W(i,o.text),r);var c=$(i,o.text,r);!c&&sh&&\"default\"===o.text&&(c=_e(a,r)||te(a,r));var u=c&&s?V(s,c):c||s;return u||d(o,e.Diagnostics.Module_0_has_no_exported_member_1,oe(a),e.declarationNameToString(o)),u}}}function G(e,t){return H(e.parent.parent.parent,e,t)}function X(e,t){return _e(e.parent.symbol,t)}function Y(e,t,n){return e.parent.parent.moduleSpecifier?H(e.parent.parent,e,n):se(e.propertyName||e.name,t,!1,n)}function Q(e,t){return se(e.expression,901119,!1,t)}function Z(e,t){switch(e.kind){case 237:return z(e,t);case 239:return U(e,t);case 240:return q(e,t);case 242:return G(e,t);case 246:return Y(e,901119,t);case 243:return Q(e,t);case 236:return X(e,t)}}function ee(e,t){return void 0===t&&(t=901119),e&&8388608==(e.flags&(8388608|t))}function te(e,t){return!t&&ee(e)?ne(e):e}function ne(t){e.Debug.assert(0!=(8388608&t.flags),\"Should only get Alias here.\");var n=k(t);if(n.target)n.target===Sh&&(n.target=kh);else{n.target=Sh;var r=J(t);e.Debug.assert(!!r);var a=Z(r);n.target===Sh?n.target=a||kh:d(r,e.Diagnostics.Circular_definition_of_import_alias_0,$e(t));}return n.target}function re(e){var t=ke(e),n=ne(t);n&&(n===kh||107455&n.flags&&!hm(n))&&ae(t);}function ae(t){var n=k(t);if(!n.referenced){n.referenced=!0;var r=J(t);e.Debug.assert(!!r),243===r.kind?qd(r.expression):246===r.kind?qd(r.propertyName||r.name):e.isInternalModuleImportEqualsDeclaration(r)&&qd(r.moduleReference);}}function ie(t,n){return 71===t.kind&&e.isRightSideOfQualifiedNameOrPropertyAccess(t)&&(t=t.parent),71===t.kind||143===t.parent.kind?se(t,1920,!1,n):(e.Debug.assert(237===t.parent.kind),se(t,901119,!1,n))}function oe(e){return e.parent?oe(e.parent)+\".\"+$e(e):$e(e)}function se(t,n,r,a,i){if(!e.nodeIsMissing(t)){var o;if(71===t.kind){var s=1920===n?e.Diagnostics.Cannot_find_namespace_0:e.Diagnostics.Cannot_find_name_0;if(!(o=A(i||t,t.text,n,r?void 0:s,t)))return}else if(143===t.kind||179===t.kind){var c=void 0;if(143===t.kind)c=t.left;else{if(179!==t.kind||185!==t.expression.kind&&!e.isEntityNameExpression(t.expression))return;c=t.expression;}var u=143===t.kind?t.right:t.name,l=se(c,1920,r,!1,i);if(!l||e.nodeIsMissing(u))return;if(l===kh)return l;if(!(o=D(ye(l),u.text,n)))return void(r||d(u,e.Diagnostics.Namespace_0_has_no_exported_member_1,oe(l),e.declarationNameToString(u)))}else{if(185===t.kind)return e.isEntityNameExpression(t.expression)?se(t.expression,n,r,a,i):void 0;e.Debug.fail(\"Unknown entity name kind.\");}return e.Debug.assert(0==(1&e.getCheckFlags(o)),\"Should never get an instantiated symbol here.\"),o.flags&n||a?o:ne(o)}}function ce(t,n){return ue(t,n,e.Diagnostics.Cannot_find_module_0)}function ue(e,t,n,r){if(void 0===r&&(r=!1),9===t.kind||13===t.kind){var a=t;return le(e,a.text,n,a,r)}}function le(t,n,r,i,o){void 0===o&&(o=!1);var s=e.escapeIdentifier(n);if(void 0!==s){e.startsWith(n,\"@types/\")&&d(i,m=e.Diagnostics.Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1,e.removePrefix(n,\"@types/\"),n);var c=Dr(s,!0);if(c)return c;var u=e.isExternalModuleNameRelative(s),l=e.getResolvedModule(e.getSourceFileOfNode(t),n),_=l&&e.getResolutionDiagnostic(rh,l),p=l&&!_&&a.getSourceFile(l.resolvedFileName);if(p)return p.symbol?xe(p.symbol):void(r&&d(i,e.Diagnostics.File_0_is_not_a_module,p.fileName));if($h){var f=e.findBestPatternMatch($h,function(e){return e.pattern},s);if(f)return xe(f.symbol)}if(u||!l||e.extensionIsTypeScript(l.extension)){if(r)if(_)d(i,_,s,l.resolvedFileName);else{var g=e.tryExtractTypeScriptExtension(s);if(g){var m=e.Diagnostics.An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead;d(i,m,g,e.removeExtension(s,g));}else d(i,r,s);}}else if(o)d(i,m=e.Diagnostics.Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augmented,n,l.resolvedFileName);else if(uh&&r){var y=e.chainDiagnosticMessages(void 0,e.Diagnostics.Try_npm_install_types_Slash_0_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare_module_0,n);y=e.chainDiagnosticMessages(y,e.Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type,n,l.resolvedFileName),tb.add(e.createDiagnosticForNodeFromMessageChain(i,y));}}}function _e(e,t){return e&&xe(te(e.exports.get(\"export=\"),t))||e}function de(t,n,r){var a=_e(t,r);return r||!a||1539&a.flags||d(n,e.Diagnostics.Module_0_resolves_to_a_non_module_entity_and_cannot_be_imported_using_this_construct,$e(t)),a}function pe(e){return void 0!==e.exports.get(\"export=\")}function fe(e){return Tr(he(e))}function ge(t){var n=fe(t),r=_e(t);return r!==t&&e.addRange(n,tr(jt(r))),n}function me(e,t){var n=he(t);if(n)return n.get(e)}function ye(e){return 1536&e.flags?he(e):e.exports||nh}function he(e){var t=k(e);return t.resolvedExports||(t.resolvedExports=be(e))}function ve(t,n,r,a){n&&n.forEach(function(n,i){if(\"default\"!==i){var o=t.get(i);if(o){if(r&&a&&o&&te(o)!==te(n)){var s=r.get(i);s.exportsWithDuplicate?s.exportsWithDuplicate.push(a):s.exportsWithDuplicate=[a];}}else t.set(i,n),r&&a&&r.set(i,{specifierText:e.getTextOfNode(a.moduleSpecifier)});}});}function be(t){function n(t){if(t&&1952&t.flags&&!e.contains(r,t)){r.push(t);var a=e.cloneMap(t.exports),i=t.exports.get(\"__export\");if(i){for(var o=e.createMap(),s=e.createMap(),c=0,u=i.declarations;c<u.length;c++){var l=u[c];ve(o,n(ce(l,l.moduleSpecifier)),s,l);}s.forEach(function(t,n){var r=t.exportsWithDuplicate;if(\"export=\"!==n&&r&&r.length&&!a.has(n))for(var i=0,o=r;i<o.length;i++){var c=o[i];tb.add(e.createDiagnosticForNode(c,e.Diagnostics.Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambiguity,s.get(n).specifierText,n));}}),ve(a,o);}return a}}var r=[];return t=_e(t),n(t)||t.exports}function xe(e){var t;return e&&e.mergeId&&(t=Uv[e.mergeId])?t:e}function ke(e){return xe(e.symbol)}function Se(e){return xe(e.parent)}function Te(e){return e&&0!=(1048576&e.flags)?xe(e.exportSymbol):e}function Ce(e){return!!(107455&e.flags||8388608&e.flags&&107455&ne(e).flags)}function De(t){for(var n=0,r=t.members;n<r.length;n++){var a=r[n];if(152===a.kind&&e.nodeIsPresent(a.body))return a}}function Ee(e){var t=new Gy(gh,e);return Yy++,t.id=Yy,t}function Ne(e,t){var n=Ee(e);return n.intrinsicName=t,n}function Ae(e,t){var n=Ee(32768);return n.objectFlags=e,n.symbol=t,n}function we(e){return 95===e.charCodeAt(0)&&95===e.charCodeAt(1)&&95!==e.charCodeAt(2)&&64!==e.charCodeAt(2)}function Pe(e){var t;return e.forEach(function(e,n){we(n)||(t||(t=[]),Ce(e)&&t.push(e));}),t||th}function Oe(e,t,n,r,a,i){return e.members=t,e.properties=Pe(t),e.callSignatures=n,e.constructSignatures=r,a&&(e.stringIndexInfo=a),i&&(e.numberIndexInfo=i),e}function Fe(e,t,n,r,a,i){return Oe(Ae(16,e),t,n,r,a,i)}function Ie(t,n){for(var r,a=t;a;a=a.parent){if(a.locals&&!C(a)&&(r=n(a.locals)))return r;switch(a.kind){case 265:if(!e.isExternalOrCommonJsModule(a))break;case 233:if(r=n(ke(a).exports))return r}}return n(Ov)}function Me(e){return 107455===e?107455:1920}function Re(t,n,r,a){function i(e){return o(e,[])}function o(i,s){function c(e,t){return!Le(e,n,t)||!!Re(e.parent,n,Me(t),a)}function u(n,a){if(t===(a||n))return!e.forEach(n.declarations,je)&&c(n,r)}if(!e.contains(s,i)){s.push(i);var l=function(n){return u(n.get(t.name))?[t]:e.forEachEntry(n,function(t){if(8388608&t.flags&&\"export=\"!==t.name&&!e.getDeclarationOfKind(t,246)&&(!a||e.forEach(t.declarations,e.isExternalModuleImportEqualsDeclaration))){var n=ne(t);if(u(t,n))return[t];var i=n.exports?o(n.exports,s):void 0;if(i&&c(t,Me(r)))return[t].concat(i)}})}(i);return s.pop(),l}}if(t&&!Be(t))return Ie(n,i)}function Le(t,n,r){var a=!1;return Ie(n,function(n){var i=n.get(t.name);return!!i&&(i===t||!!((i=8388608&i.flags&&!e.getDeclarationOfKind(i,246)?ne(i):i).flags&r)&&(a=!0,!0))}),a}function Be(e){if(e.declarations&&e.declarations.length){for(var t=0,n=e.declarations;t<n.length;t++)switch(n[t].kind){case 149:case 151:case 153:case 154:continue;default:return!1}return!0}return!1}function Ke(t,n,r,a){function i(t){var n=e.findAncestor(t,je);return n&&ke(n)}if(t&&n&&!(262144&t.flags)){for(var o=t,s=r;t;){var c=Re(t,n,s,!1);if(c){var u=Je(c[0],a);return u||{accessibility:1,errorSymbolName:$e(o,n,r),errorModuleName:t!==o?$e(t,n,1920):void 0}}s=Me(r),t=Se(t);}var l=e.forEach(o.declarations,i);return l&&l!==i(n)?{accessibility:2,errorSymbolName:$e(o,n,r),errorModuleName:$e(l)}:{accessibility:1,errorSymbolName:$e(o,n,r)}}return{accessibility:0}}function je(t){return e.isAmbientModule(t)||265===t.kind&&e.isExternalOrCommonJsModule(t)}function Je(t,n){function r(t){if(!rt(t)){var r=j(t);return!(!r||1&e.getModifierFlags(r)||!rt(r.parent))&&(n&&(S(t).isVisible=!0,a?e.contains(a,r)||a.push(r):a=[r]),!0)}return!0}var a;if(!e.forEach(t.declarations,function(e){return!r(e)}))return{accessibility:0,aliasesToMakeVisible:a}}function ze(t,n){var r;r=162===t.parent.kind||e.isExpressionWithTypeArgumentsInClassExtendsClause(t.parent)?1156031:143===t.kind||179===t.kind||237===t.parent.kind?1920:793064;var a=hg(t),i=A(n,a.text,r,void 0,void 0);return i&&Je(i,!0)||{accessibility:1,errorSymbolName:e.getTextOfNode(a),errorNode:a}}function Ue(t,n){t.writeKeyword(e.tokenToString(n));}function qe(t,n){t.writePunctuation(e.tokenToString(n));}function Ve(e){e.writeSpace(\" \");}function $e(t,n,r){var a=e.getSingleLineStringWriter();nt().buildSymbolDisplay(t,a,n,r);var i=a.string();return e.releaseStringWriter(a),i}function We(t,n,r,a){var i=e.getSingleLineStringWriter();nt().buildSignatureDisplay(t,i,n,r,a);var o=i.string();return e.releaseStringWriter(i),o}function He(t,n,r){var a=dh.typeToTypeNode(t,n,function(t){var n=e.NodeBuilderFlags.None;return t?(8&t&&(n|=e.NodeBuilderFlags.NoTruncation),256&t&&(n|=e.NodeBuilderFlags.UseFullyQualifiedType),4096&t&&(n|=e.NodeBuilderFlags.SuppressAnyReturnType),1&t&&(n|=e.NodeBuilderFlags.WriteArrayAsGenericType),64&t&&(n|=e.NodeBuilderFlags.WriteTypeArgumentsOfSignature),n):n}(r)|e.NodeBuilderFlags.IgnoreErrors|e.NodeBuilderFlags.WriteTypeParametersInQualifiedName);e.Debug.assert(void 0!==a,\"should always get typenode\");var i={removeComments:!0},o=e.createTextWriter(\"\"),s=e.createPrinter(i),c=n&&e.getSourceFileOfNode(n);s.writeNode(3,a,c,o);var u=o.getText(),l=rh.noErrorTruncation||8&r?void 0:100;return l&&u.length>=l?u.substr(0,l-\"...\".length)+\"...\":u}function Ge(t,n,r){var a=e.getSingleLineStringWriter();nt().buildTypePredicateDisplay(t,a,n,r);var i=a.string();return e.releaseStringWriter(a),i}function Xe(e){for(var t=[],n=0,r=0;r<e.length;r++){var a=e[r];if(n|=a.flags,!(6144&a.flags)){if(384&a.flags){var i=128&a.flags?Mh:dn(a);if(65536&i.flags){var o=i.types.length;if(r+o<=e.length&&e[r+o-1]===i.types[o-1]){t.push(i),r+=o-1;continue}}}t.push(a);}}return 4096&n&&t.push(Ah),2048&n&&t.push(Eh),t||e}function Ye(e){return 8===e?\"private\":16===e?\"protected\":\"public\"}function Qe(t){if(t.symbol&&2048&t.symbol.flags){var n=e.findAncestor(t.symbol.declarations[0].parent,function(e){return 168!==e.kind});if(231===n.kind)return ke(n)}}function Ze(t){return t&&t.parent&&234===t.parent.kind&&e.isExternalModuleAugmentation(t.parent.parent)}function et(t){return 32&t.flags?'\"'+e.escapeString(t.value)+'\"':\"\"+t.value}function tt(t){if(t.declarations&&t.declarations.length){var n=t.declarations[0],r=e.getNameOfDeclaration(n);if(r)return e.declarationNameToString(r);if(n.parent&&226===n.parent.kind)return e.declarationNameToString(n.parent.name);switch(n.kind){case 199:return\"(Anonymous class)\";case 186:case 187:return\"(Anonymous function)\"}}return t.name}function nt(){function t(e,t){t.writeSymbol(tt(e),e);}function n(t,n){var r=tt(t),a=r.charCodeAt(0);!e.isIdentifierStart(a,ah)?(qe(n,21),e.isSingleOrDoubleQuote(a)?n.writeStringLiteral(r):n.writeSymbol(r,t),qe(n,22)):(qe(n,23),n.writeSymbol(r,t));}function r(r,a,o,s,c,u){function l(r){p?(1&c&&(1&e.getCheckFlags(r)?d(Ht(8388608&p.flags?ne(p):p),r.mapper,a,o):i(p,a,o)),n(r,a)):t(r,a),p=r;}function _(t,n,r){var a=Re(t,o,n,!!(2&c));if(!a||Le(a[0],o,1===a.length?n:Me(n))){var i=Se(a?a[0]:t);i&&_(i,Me(n),!1);}if(a)for(var s=0,u=a;s<u.length;s++)l(u[s]);else!r&&(!p&&e.forEach(t.declarations,je)||6144&t.flags)||l(t);}var p;a.trackSymbol(r,o,s);var f=256&u;262144&r.flags||!o&&!f?l(r):_(r,s,!0);}function a(n,a,i,o,s){function c(n,s){var u=-1025&s;if(16793231&n.flags)a.writeKeyword(32&o||!dt(n)?n.intrinsicName:\"any\");else if(16384&n.flags&&n.isThisType)S&&a.reportInaccessibleThisError(),a.writeKeyword(\"this\");else if(4&T(n))_(n,u);else if(256&n.flags&&!(65536&n.flags)){var f=Se(n.symbol);r(f,a,i,793064,0,u),yn(f)!==n&&(qe(a,23),t(n.symbol,a));}else if(3&T(n)||16656&n.flags)r(n.symbol,a,i,793064,0,u);else if(1024&s||!n.aliasSymbol||0!==Ke(n.aliasSymbol,i,793064,!1).accessibility)196608&n.flags?d(n,u):48&T(n)?p(n,u):96&n.flags?a.writeStringLiteral(et(n)):262144&n.flags?(128&s&&qe(a,19),a.writeKeyword(\"keyof\"),Ve(a),c(n.type,128),128&s&&qe(a,20)):524288&n.flags?(c(n.objectType,128),qe(a,21),c(n.indexType,0),qe(a,22)):(qe(a,17),Ve(a),qe(a,24),Ve(a),qe(a,18));else{var g=n.aliasTypeArguments;l(n.aliasSymbol,g,0,e.length(g),u);}}function u(e,t){for(var n=0;n<e.length;n++)n>0&&(26!==t&&Ve(a),qe(a,t),Ve(a)),c(e[n],26===t?0:128);}function l(e,t,n,o,s){if((32&e.flags||!we(e.name))&&r(e,a,i,793064,0,s),n<o){for(qe(a,27),c(t[n],512),n++;n<o;)qe(a,26),Ve(a),c(t[n],0),n++;qe(a,29);}}function _(t,n){var r=t.typeArguments||th;if(t.target!==Gh||1&n)if(8&t.target.objectFlags)qe(a,21),u(t.typeArguments.slice(0,ea(t)),26),qe(a,22);else if(16384&n&&t.symbol.valueDeclaration&&199===t.symbol.valueDeclaration.kind)p(cn(t.symbol),n);else{var i=t.target.outerTypeParameters,o=0;if(i)for(var s=i.length;o<s;){var _=o,d=Gr(i[o]);do{o++;}while(o<s&&Gr(i[o])===d);e.rangeEquals(i,r,_,o)||(l(d,r,_,o,n),qe(a,23));}var f=(t.target.typeParameters||th).length;l(t.symbol,r,o,f,n);}else c(r[0],128),qe(a,21),qe(a,22);}function d(e,t){128&t&&qe(a,19),65536&e.flags?u(Xe(e.types),49):u(e.types,48),128&t&&qe(a,20);}function p(t,n){var o=t.symbol;if(o)if(32&o.flags&&!It(o)&&!(199===o.valueDeclaration.kind&&16384&n)||896&o.flags)f(t,n);else if(function(){var t=!!(8192&o.flags&&e.forEach(o.declarations,function(t){return 32&e.getModifierFlags(t)})),r=!!(16&o.flags)&&(o.parent||e.forEach(o.declarations,function(e){return 265===e.parent.kind||234===e.parent.kind}));if(t||r)return!!(4&n)||e.contains(s,o)}())f(t,n);else if(e.contains(s,o)){var c=Qe(t);c?r(c,a,i,793064,0,n):Ue(a,119);}else s||(s=[]),32768&t.flags&&16&T(t)&&t.symbol&&32&t.symbol.flags?v(t,n):(s.push(o),v(t,n),s.pop());else v(t,n);}function f(e,t){Ue(a,103),Ve(a),r(e.symbol,a,i,107455,0,t);}function g(e){_d(e)&&(Ue(a,131),Ve(a)),r(e,a),67108864&e.flags&&qe(a,55);}function m(e,t){if(128&t)return!0;if(512&t){var n=e.target&&64&t?e.target.typeParameters:e.typeParameters;return n&&0!==n.length}return!1}function v(e,t){if(32&e.objectFlags&&278528&Wn(e).flags)x(e);else{var n=Yn(e);if(!n.properties.length&&!n.stringIndexInfo&&!n.numberIndexInfo){if(!n.callSignatures.length&&!n.constructSignatures.length)return qe(a,17),void qe(a,18);if(1===n.callSignatures.length&&!n.constructSignatures.length){var r=m(n.callSignatures[0],t);return r&&qe(a,19),y(n.callSignatures[0],a,i,16|k,void 0,s),void(r&&qe(a,20))}if(1===n.constructSignatures.length&&!n.callSignatures.length)return 128&t&&qe(a,19),Ue(a,94),Ve(a),y(n.constructSignatures[0],a,i,16|k,void 0,s),void(128&t&&qe(a,20))}var o=S;S=!0,qe(a,17),a.writeLine(),a.increaseIndent(),b(n),a.decreaseIndent(),qe(a,18),S=o;}}function b(t){for(var n=0,r=t.callSignatures;n<r.length;n++)y(b=r[n],a,i,k,void 0,s),qe(a,25),a.writeLine();for(var u=0,l=t.constructSignatures;u<l.length;u++)y(b=l[u],a,i,k,1,s),qe(a,25),a.writeLine();h(t.stringIndexInfo,a,0,i,o,s),h(t.numberIndexInfo,a,1,i,o,s);for(var _=0,d=t.properties;_<d.length;_++){var p=d[_];if(16384&o){if(16777216&p.flags)continue;24&e.getDeclarationModifierFlagsFromSymbol(p)&&a.reportPrivateInBaseOfClassExpression(p.name);}var f=jt(p);if(8208&p.flags&&!Qn(f).length)for(var m=0,v=yr(f,0);m<v.length;m++){var b=v[m];g(p),y(b,a,i,k,void 0,s),qe(a,25),a.writeLine();}else g(p),qe(a,56),Ve(a),c(f,16384&o),qe(a,25),a.writeLine();}}function x(e){qe(a,17),a.writeLine(),a.increaseIndent(),e.declaration.readonlyToken&&(Ue(a,131),Ve(a)),qe(a,21),t($n(e).symbol,a),Ve(a),Ue(a,92),Ve(a),c(Wn(e),0),qe(a,22),e.declaration.questionToken&&qe(a,55),qe(a,56),Ve(a),c(Hn(e),0),qe(a,25),a.writeLine(),a.decreaseIndent(),qe(a,18);}var k=16416&o,S=!1;return c(n,o)}function i(e,t,n,r){var a=ng(e);(32&a.flags||64&a.flags||524288&a.flags)&&l(Wt(e),t,n,r);}function o(e,n,r,i,o){t(e.symbol,n);var s=ar(e);s&&(Ve(n),Ue(n,85),Ve(n),a(s,n,r,i,o));var c=lr(e);c&&(Ve(n),qe(n,58),Ve(n),a(c,n,r,i,o));}function s(n,r,i,o,s){var u=n.valueDeclaration;(u?e.isRestParameter(u):f(n)&&n.isRestParameter)&&qe(r,24),u&&e.isBindingPattern(u.name)?c(u.name,r,i,o,s):t(n,r),u&&Er(u)&&qe(r,55),qe(r,56),Ve(r);var l=jt(n);u&&xm(u)&&(l=_s(l,2048)),a(l,r,i,o,s);}function c(e,t,n,r,a){if(174===e.kind)qe(t,17),_(e.elements,t,function(e){return u(e,t,n,r,a)}),qe(t,18);else if(175===e.kind){qe(t,21);var i=e.elements;_(i,t,function(e){return u(e,t,n,r,a)}),i&&i.hasTrailingComma&&qe(t,26),qe(t,22);}}function u(n,r,a,i,o){e.isOmittedExpression(n)||(e.Debug.assert(176===n.kind),n.propertyName&&(r.writeProperty(e.getTextOfNode(n.propertyName)),qe(r,56),Ve(r)),e.isBindingPattern(n.name)?c(n.name,r,a,i,o):(n.dotDotDotToken&&qe(r,24),t(n.symbol,r)));}function l(e,t,n,r,a){e&&e.length&&(qe(t,27),_(e,t,function(e){return o(e,t,n,r,a)}),qe(t,29));}function _(e,t,n){for(var r=0;r<e.length;r++)r>0&&(qe(t,26),Ve(t)),n(e[r]);}function d(e,t,n,r){if(e&&e.length){qe(n,27);for(var i=512,o=0;o<e.length;o++)o>0&&(qe(n,26),Ve(n),i=0),a(t(e[o]),n,r,i);qe(n,29);}}function p(e,t,n,r,a,i){qe(n,19),e&&s(e,n,r,a,i);for(var o=0;o<t.length;o++)(o>0||e)&&(qe(n,26),Ve(n)),s(t[o],n,r,a,i);qe(n,20);}function g(t,n,r,i,o){e.isIdentifierTypePredicate(t)?n.writeParameter(t.parameterName):Ue(n,99),Ve(n),Ue(n,126),Ve(n),a(t.type,n,r,i,o);}function m(e,t,n,r,i){var o=Lr(e);4096&r&&dt(o)||(16&r?(Ve(t),qe(t,36)):qe(t,56),Ve(t),e.typePredicate?g(e.typePredicate,t,n,r,i):a(o,t,n,r,i));}function y(e,t,n,r,a,i){1===a&&(Ue(t,94),Ve(t)),e.target&&64&r?d(e.target.typeParameters,e.mapper,t,n):l(e.typeParameters,t,n,r,i),p(e.thisParameter,e.parameters,t,n,r,i),m(e,t,n,r,i);}function h(t,n,r,i,o,s){if(t){switch(t.isReadonly&&(Ue(n,131),Ve(n)),qe(n,21),n.writeParameter(t.declaration?e.declarationNameToString(t.declaration.parameters[0].name):\"x\"),qe(n,56),Ve(n),r){case 1:Ue(n,133);break;case 0:Ue(n,136);}qe(n,22),qe(n,56),Ve(n),a(t.type,n,i,o,s),qe(n,25),n.writeLine();}}return ob||(ob={buildSymbolDisplay:r,buildTypeDisplay:a,buildTypeParameterDisplay:o,buildTypePredicateDisplay:g,buildParameterDisplay:s,buildDisplayForParametersAndDelimiters:p,buildDisplayForTypeParametersAndDelimiters:l,buildTypeParameterDisplayFromSymbol:i,buildSignatureDisplay:y,buildIndexSignatureDisplay:h,buildReturnTypeDisplay:m})}function rt(t){if(t){var n=S(t);return void 0===n.isVisible&&(n.isVisible=!!function(){switch(t.kind){case 176:return rt(t.parent.parent);case 226:if(e.isBindingPattern(t.name)&&!t.name.elements.length)return!1;case 233:case 229:case 230:case 231:case 228:case 232:case 237:if(e.isExternalModuleAugmentation(t))return!0;var n=ut(t);return 1&e.getCombinedModifierFlags(t)||237!==t.kind&&265!==n.kind&&e.isInAmbientContext(n)?rt(n):C(n);case 149:case 148:case 153:case 154:case 151:case 150:if(24&e.getModifierFlags(t))return!1;case 152:case 156:case 155:case 157:case 146:case 234:case 160:case 161:case 163:case 159:case 164:case 165:case 166:case 167:case 168:return rt(t.parent);case 239:case 240:case 242:return!1;case 145:case 265:case 236:return!0;case 243:default:return!1}}()),n.isVisible}return!1}function at(t){function n(t){e.forEach(t,function(t){S(t).isVisible=!0;var r=j(t)||t;if(e.contains(a,r)||a.push(r),e.isInternalModuleImportEqualsDeclaration(t)){var i=A(t,hg(t.moduleReference).text,901119,void 0,void 0);i&&n(i.declarations);}});}var r;t.parent&&243===t.parent.kind?r=A(t.parent,t.text,9289727,e.Diagnostics.Cannot_find_name_0,t):246===t.parent.kind&&(r=Y(t.parent,9289727));var a=[];return r&&n(r.declarations),a}function it(e,t){var n=ot(e,t);if(n>=0){for(var r=Bv.length,a=n;a<r;a++)Kv[a]=!1;return!1}return Bv.push(e),Kv.push(!0),jv.push(t),!0}function ot(e,t){for(var n=Bv.length-1;n>=0;n--){if(st(Bv[n],jv[n]))return-1;if(Bv[n]===e&&jv[n]===t)return n}return-1}function st(t,n){return 0===n?k(t).type:2===n?k(t).declaredType:1===n?t.resolvedBaseConstructorType:3===n?t.resolvedReturnType:void e.Debug.fail(\"Unhandled TypeSystemPropertyName \"+n)}function ct(){return Bv.pop(),jv.pop(),Kv.pop()}function ut(t){return(t=e.findAncestor(e.getRootDeclaration(t),function(e){switch(e.kind){case 226:case 227:case 242:case 241:case 240:case 239:return!1;default:return!0}}))&&t.parent}function lt(t){var n=yn(Se(t));return n.typeParameters?Qr(n,e.map(n.typeParameters,function(e){return Th})):n}function _t(e,t){var n=gr(e,t);return n?jt(n):void 0}function dt(e){return e&&0!=(1&e.flags)}function pt(e){var t=ke(e);return t&&k(t).type||xt(e,!1)}function ft(t){return 144===t.kind&&!e.isStringOrNumericLiteral(t.expression)}function gt(t,n,r){if(8192&(t=Dc(t,function(e){return!(6144&e.flags)})).flags)return Jh;if(65536&t.flags)return Ec(t,function(e){return gt(e,n,r)});for(var a=e.createMap(),i=e.createMap(),o=0,s=n;o<s.length;o++){var c=s[o];i.set(e.getTextOfPropertyName(c),!0);}for(var u=0,l=tr(t);u<l.length;u++){var _=l[u],d=i.has(_.name),p=24&e.getDeclarationModifierFlagsFromSymbol(_),f=65536&_.flags&&!(32768&_.flags);d||p||Ci(_)||f||a.set(_.name,_);}var g=br(t,0),m=br(t,1);return Fe(r,a,th,th,g,m)}function mt(t){var n=t.parent,r=pt(n.parent);if(r===Dh)return Dh;if(!r||dt(r))return t.initializer?$d(t):r;var a;if(174===n.kind)if(t.dotDotDotToken){if(!rl(r))return d(t,e.Diagnostics.Rest_types_may_only_be_created_from_object_types),Dh;for(var i=[],o=0,s=n.elements;o<s.length;o++){var c=s[o];c.dotDotDotToken||i.push(c.propertyName||c.name);}a=gt(r,i,t.symbol);}else{var u=t.propertyName||t.name;if(ft(u))return Th;t.initializer&&Bu(t.initializer);var l=e.getTextOfPropertyName(u);if(!(a=_t(r,l)||Zu(l)&&xr(r,1)||xr(r,0)))return d(u,e.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature,He(r),e.declarationNameToString(u)),Dh}else{var _=Of(r,n,!1,!1);if(t.dotDotDotToken)a=ja(_);else{var p=\"\"+e.indexOf(n.elements,t);if(!(a=es(r)?_t(r,p):_))return is(r)?d(t,e.Diagnostics.Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2,He(r),ea(r),n.elements.length):d(t,e.Diagnostics.Type_0_has_no_property_1,He(r),p),Dh}}return!ch||!t.initializer||2048&ss(qd(t.initializer))||(a=ec(a,131072)),t.initializer?ti([a,qd(t.initializer)],!0):a}function yt(t){var n=e.getJSDocType(t);if(n)return Mi(n)}function ht(t){var n=e.skipParentheses(t);return 95===n.kind||71===n.kind&&Bs(n)===ph}function vt(t){var n=e.skipParentheses(t);return 177===n.kind&&0===n.elements.length}function bt(e,t){return ch&&t?_s(e,2048):e}function xt(t,n){if(215===t.parent.parent.kind){var r=_i(Bl(t.parent.parent.expression));return 278528&r.flags?r:Ph}if(216===t.parent.parent.kind){var a=t.parent.parent;return Pf(a.expression,a.awaitModifier)||Th}if(e.isBindingPattern(t.parent))return mt(t);var i=e.getEffectiveTypeAnnotationNode(t);if(i)return bt(Mi(i),t.questionToken&&n);if((uh||65536&t.flags)&&226===t.kind&&!e.isBindingPattern(t.name)&&!(1&e.getCombinedModifierFlags(t))&&!e.isInAmbientContext(t)){if(!(2&e.getCombinedNodeFlags(t))&&(!t.initializer||ht(t.initializer)))return Ch;if(t.initializer&&vt(t.initializer))return rv}if(146===t.kind){var o=t.parent;if(154===o.kind&&!e.hasDynamicName(o)){var s=e.getDeclarationOfKind(t.parent.symbol,153);if(s){var c=Pr(s),u=yy(o);return u&&t===u?(e.Debug.assert(!u.type),jt(c.thisParameter)):Lr(c)}}var l=void 0;if(l=\"this\"===t.symbol.name?hu(o):vu(t))return bt(l,t.questionToken&&n)}return t.initializer?bt(l=$d(t),t.questionToken&&n):e.isJsxAttribute(t)?Fh:262===t.kind?nu(t.name):e.isBindingPattern(t.name)?Dt(t.name,!1,!0):void 0}function kt(t){for(var n,r=[],a=!1,i=!1,o=0,s=t.declarations;o<s.length;o++){var c=s[o],u=194===c.kind?c:179===c.kind?e.getAncestor(c,194):void 0;if(!u)return Dh;e.isPropertyAccessExpression(u.left)&&99===u.left.expression.kind&&(152===e.getThisContainer(u,!1).kind?a=!0:i=!0);var l=yt(u.parent);if(l){var _=bs(l);if(n){if(n!==Dh&&_!==Dh&&!go(n,_)){var p=e.getNameOfDeclaration(c);d(p,e.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2,e.declarationNameToString(p),He(n),He(_));}}else n=_;}else n||r.push(as(qd(u.right)));}return bs(bt(n||ti(r,!0),i&&!a))}function St(t,n,r){return t.initializer?$d(t):e.isBindingPattern(t.name)?Dt(t.name,n,r):(r&&uh&&!Nt(t)&&ks(t,Th),Th)}function Tt(t,n,r){var a,i=e.createMap(),o=!1;e.forEach(t.elements,function(t){var s=t.propertyName||t.name;if(ft(s))o=!0;else if(t.dotDotDotToken)a=Vr(Th,!1);else{var c=e.getTextOfPropertyName(s),u=p(4|(t.initializer?67108864:0),c);u.type=St(t,n,r),u.bindingElement=t,i.set(u.name,u);}});var s=Fe(void 0,i,th,th,a,void 0);return n&&(s.pattern=t),o&&(s.objectFlags|=512),s}function Ct(t,n,r){var a=t.elements,i=e.lastOrUndefined(a);if(0===a.length||!e.isOmittedExpression(i)&&i.dotDotDotToken)return ah>=2?Ba(Th):nv;var o=qa(e.map(a,function(t){return e.isOmittedExpression(t)?Th:St(t,n,r)}));return n&&((o=Zr(o)).pattern=t),o}function Dt(e,t,n){return 174===e.kind?Tt(e,t,n):Ct(e,t,n)}function Et(e,t){var n=xt(e,!0);return n?(t&&Ss(e,n),261===e.kind?n:bs(n)):(n=e.dotDotDotToken?nv:Th,t&&uh&&(Nt(e)||ks(e,n)),n)}function Nt(t){var n=e.getRootDeclaration(t);return Ap(146===n.kind?n.parent:n)}function At(t){var n=k(t);if(!n.type){if(16777216&t.flags)return n.type=lt(t);var r=t.valueDeclaration;if(e.isCatchClauseVariableDeclarationOrBindingElement(r))return n.type=Th;if(243===r.kind)return n.type=ep(r.expression);if(65536&r.flags&&292===r.kind&&r.typeExpression)return n.type=Mi(r.typeExpression.type);if(!it(t,0))return Dh;var a=void 0;a=194===r.kind||179===r.kind&&194===r.parent.kind?kt(t):Et(r,!0),ct()||(a=Kt(t)),n.type=a;}return n.type}function wt(t){if(t){if(153===t.kind){var n=e.getEffectiveReturnTypeNode(t);return n&&Mi(n)}var r=e.getEffectiveSetAccessorTypeAnnotationNode(t);return r&&Mi(r)}}function Pt(e){var t=yy(e);return t&&t.symbol}function Ot(e){return Rr(Pr(e))}function Ft(t){var n=k(t);if(!n.type){var r=e.getDeclarationOfKind(t,153),a=e.getDeclarationOfKind(t,154);if(r&&65536&r.flags){var i=yt(r);if(i)return n.type=i}if(!it(t,0))return Dh;var o=void 0,s=wt(r);if(s)o=s;else{var c=wt(a);c?o=c:r&&r.body?o=nd(r):(uh&&(a?d(a,e.Diagnostics.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation,$e(t)):(e.Debug.assert(!!r,\"there must existed getter as we are current checking either setter or getter in this function\"),d(r,e.Diagnostics.Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation,$e(t)))),o=Th);}ct()||(o=Th,uh&&d(e.getDeclarationOfKind(t,153),e.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions,$e(t))),n.type=o;}return n.type}function It(e){var t=en(cn(e));return 540672&t.flags?t:void 0}function Mt(t){var n=k(t);if(!n.type)if(1536&t.flags&&e.isShorthandAmbientModuleSymbol(t))n.type=Th;else{var r=Ae(16,t);if(32&t.flags){var a=It(t);n.type=a?oi([r,a]):r;}else n.type=ch&&67108864&t.flags?_s(r,2048):r;}return n.type}function Rt(e){var t=k(e);return t.type||(t.type=fn(e)),t.type}function Lt(e){var t=k(e);if(!t.type){var n=ne(e);t.type=107455&n.flags?jt(n):Dh;}return t.type}function Bt(t){var n=k(t);if(!n.type)if(100===eh)d(t.valueDeclaration,e.Diagnostics.Generic_type_instantiation_is_excessively_deep_and_possibly_infinite),n.type=Dh;else{if(!it(t,0))return Dh;eh++;var r=so(jt(n.target),n.mapper);eh--,ct()||(r=Kt(t)),n.type=r;}return n.type}function Kt(t){return e.getEffectiveTypeAnnotationNode(t.valueDeclaration)?(d(t.valueDeclaration,e.Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation,$e(t)),Dh):(uh&&d(t.valueDeclaration,e.Diagnostics._0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer,$e(t)),Th)}function jt(t){return 1&e.getCheckFlags(t)?Bt(t):7&t.flags?At(t):9136&t.flags?Mt(t):8&t.flags?Rt(t):98304&t.flags?Ft(t):8388608&t.flags?Lt(t):Dh}function Jt(e,t){return void 0!==e&&void 0!==t&&0!=(4&T(e))&&e.target===t}function zt(e){return 4&T(e)?e.target:e}function Ut(t,n){function r(t){if(7&T(t)){var a=zt(t);return a===n||e.forEach(tn(a),r)}if(131072&t.flags)return e.forEach(t.types,r)}return r(t)}function qt(t,n){for(var r=0,a=n;r<a.length;r++){var i=gn(ke(a[r]));t?e.contains(t,i)||t.push(i):t=[i];}return t}function Vt(e,t){for(;;){if(!(t=t.parent))return e;if(229===t.kind||199===t.kind||228===t.kind||186===t.kind||151===t.kind||187===t.kind){var n=t.typeParameters;if(n)return qt(Vt(e,t),n)}}}function $t(t){return Vt(void 0,32&t.flags?t.valueDeclaration:e.getDeclarationOfKind(t,230))}function Wt(e){for(var t,n=0,r=e.declarations;n<r.length;n++){var a=r[n];if(230===a.kind||229===a.kind||199===a.kind||231===a.kind){var i=a;i.typeParameters&&(t=qt(t,i.typeParameters));}}return t}function Ht(t){return e.concatenate($t(t),Wt(t))}function Gt(e){var t=yr(e,1);if(1===t.length){var n=t[0];return!n.typeParameters&&1===n.parameters.length&&n.hasRestParameter&&W_(n.parameters[0])===nv}return!1}function Xt(e){if(an(e)&&yr(e,1).length>0)return!0;if(540672&e.flags){var t=or(e);return t&&an(t)&&Gt(t)}return!1}function Yt(t){return e.getClassExtendsHeritageClauseElement(t.symbol.valueDeclaration)}function Qt(t,n,r){var a=e.length(n),i=e.isInJavaScriptFile(r);return e.filter(yr(t,1),function(t){return(i||a>=Ar(t.typeParameters))&&a<=e.length(t.typeParameters)})}function Zt(t,n,r){var a=Qt(t,n,r),i=e.map(n,Mi);return e.sameMap(a,function(t){return e.some(t.typeParameters)?Kr(t,i):t})}function en(t){if(!t.resolvedBaseConstructorType){var n=Yt(t);if(!n)return t.resolvedBaseConstructorType=Eh;if(!it(t,1))return Dh;var r=ep(n.expression);if(163840&r.flags&&Yn(r),!ct())return d(t.symbol.valueDeclaration,e.Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_base_expression,$e(t.symbol)),t.resolvedBaseConstructorType=Dh;if(!(1&r.flags||r===wh||Xt(r)))return d(n.expression,e.Diagnostics.Type_0_is_not_a_constructor_function_type,He(r)),t.resolvedBaseConstructorType=Dh;t.resolvedBaseConstructorType=r;}return t.resolvedBaseConstructorType}function tn(t){return t.resolvedBaseTypes||(8&t.objectFlags?t.resolvedBaseTypes=[ja(ti(t.typeParameters))]:96&t.symbol.flags?(32&t.symbol.flags&&nn(t),64&t.symbol.flags&&on$$1(t)):e.Debug.fail(\"type must be class or interface\")),t.resolvedBaseTypes}function nn(t){t.resolvedBaseTypes=t.resolvedBaseTypes||th;var n=_r(en(t));if(163841&n.flags){var r,a=Yt(t),i=da(a),o=n&&n.symbol?yn(n.symbol):void 0;if(n.symbol&&32&n.symbol.flags&&rn(o))r=ta(a,n.symbol,i);else if(1&n.flags)r=n;else{var s=Zt(n,a.typeArguments,a);if(!s.length)return void d(a.expression,e.Diagnostics.No_base_constructor_has_the_specified_number_of_type_arguments);r=Lr(s[0]);}var c=t.symbol.valueDeclaration;if(c&&e.isInJavaScriptFile(c)){var u=e.getJSDocAugmentsTag(t.symbol.valueDeclaration);u&&(r=Mi(u.typeExpression.type));}r!==Dh&&(an(r)?t===r||Ut(r,t)?d(c,e.Diagnostics.Type_0_recursively_references_itself_as_a_base_type,He(t,void 0,1)):t.resolvedBaseTypes===th?t.resolvedBaseTypes=[r]:t.resolvedBaseTypes.push(r):d(a.expression,e.Diagnostics.Base_constructor_return_type_0_is_not_a_class_or_interface_type,He(r)));}}function rn(e){var t=e.outerTypeParameters;if(t){var n=t.length-1,r=e.typeArguments;return t[n].symbol!==r[n].symbol}return!0}function an(t){return 16809985&t.flags&&!Xn(t)||131072&t.flags&&!e.forEach(t.types,function(e){return!an(e)})}function on$$1(t){t.resolvedBaseTypes=t.resolvedBaseTypes||th;for(var n=0,r=t.symbol.declarations;n<r.length;n++){var a=r[n];if(230===a.kind&&e.getInterfaceBaseTypeNodes(a))for(var i=0,o=e.getInterfaceBaseTypeNodes(a);i<o.length;i++){var s=o[i],c=Mi(s);c!==Dh&&(an(c)?t===c||Ut(c,t)?d(a,e.Diagnostics.Type_0_recursively_references_itself_as_a_base_type,He(t,void 0,1)):t.resolvedBaseTypes===th?t.resolvedBaseTypes=[c]:t.resolvedBaseTypes.push(c):d(s,e.Diagnostics.An_interface_may_only_extend_a_class_or_another_interface));}}}function sn(t){for(var n=0,r=t.declarations;n<r.length;n++){var a=r[n];if(230===a.kind){if(64&a.flags)return!1;var i=e.getInterfaceBaseTypeNodes(a);if(i)for(var o=0,s=i;o<s.length;o++){var c=s[o];if(e.isEntityNameExpression(c.expression)){var u=se(c.expression,793064,!0);if(!u||!(64&u.flags)||cn(u).thisType)return!1}}}}return!0}function cn(t){var n=k(t);if(!n.declaredType){var r=32&t.flags?1:2,a=n.declaredType=Ae(r,t),i=$t(t),o=Wt(t);(i||o||1===r||!sn(t))&&(a.objectFlags|=4,a.typeParameters=e.concatenate(i,o),a.outerTypeParameters=i,a.localTypeParameters=o,a.instantiations=e.createMap(),a.instantiations.set(Xr(a.typeParameters),a),a.target=a,a.typeArguments=a.typeParameters,a.thisType=Ee(16384),a.thisType.isThisType=!0,a.thisType.symbol=t,a.thisType.constraint=a);}return n.declaredType}function un(t){var n=k(t);if(!n.declaredType){if(!it(t,2))return Dh;var r=e.getDeclarationOfKind(t,291),a=void 0;if(a=Mi(r?r.jsDocTypeLiteral?r.jsDocTypeLiteral:r.typeExpression.type:(r=e.getDeclarationOfKind(t,231)).type),ct()){var i=Wt(t);i&&(n.typeParameters=i,n.instantiations=e.createMap(),n.instantiations.set(Xr(i),a));}else a=Dh,d(r.name,e.Diagnostics.Type_alias_0_circularly_references_itself,$e(t));n.declaredType=a;}return n.declaredType}function ln(t){var n=t.initializer;return n?9===n.kind||8===n.kind||192===n.kind&&38===n.operator&&8===n.operand.kind||71===n.kind&&(e.nodeIsMissing(n)||!!ke(t.parent).exports.get(n.text)):!e.isInAmbientContext(t)}function _n(e){var t=k(e);if(void 0!==t.enumKind)return t.enumKind;for(var n=!1,r=0,a=e.declarations;r<a.length;r++){var i=a[r];if(232===i.kind)for(var o=0,s=i.members;o<s.length;o++){var c=s[o];if(c.initializer&&9===c.initializer.kind)return t.enumKind=1;ln(c)||(n=!0);}}return t.enumKind=n?0:1}function dn(e){return 256&e.flags&&!(65536&e.flags)?yn(Se(e.symbol)):e}function pn(e){var t=k(e);if(t.declaredType)return t.declaredType;if(1===_n(e)){Zy++;for(var n=[],r=0,a=e.declarations;r<a.length;r++){var i=a[r];if(232===i.kind)for(var o=0,s=i.members;o<s.length;o++){var c=s[o],u=Ai(Tm(c),Zy,ke(c));k(ke(c)).declaredType=u,n.push(u);}}if(n.length){var l=ti(n,!1,e,void 0);return 65536&l.flags&&(l.flags|=256,l.symbol=e),t.declaredType=l}}var _=Ee(16);return _.symbol=e,t.declaredType=_}function fn(e){var t=k(e);if(!t.declaredType){var n=pn(Se(e));t.declaredType||(t.declaredType=n);}return t.declaredType}function gn(e){var t=k(e);if(!t.declaredType){var n=Ee(16384);n.symbol=e,t.declaredType=n;}return t.declaredType}function mn(e){var t=k(e);return t.declaredType||(t.declaredType=yn(ne(e))),t.declaredType}function yn(e){return 96&e.flags?cn(e):524288&e.flags?un(e):262144&e.flags?gn(e):384&e.flags?pn(e):8&e.flags?fn(e):8388608&e.flags?mn(e):Dh}function hn(e){if(e.typeArguments)for(var t=0,n=e.typeArguments;t<n.length;t++)if(!vn(n[t]))return!1;return!0}function vn(e){switch(e.kind){case 119:case 136:case 133:case 122:case 137:case 134:case 105:case 139:case 95:case 130:case 173:return!0;case 164:return vn(e.elementType);case 159:return hn(e)}return!1}function bn(t){var n=e.getEffectiveTypeAnnotationNode(t);return n?vn(n):!t.initializer}function xn(t){if(152!==t.kind){var n=e.getEffectiveReturnTypeNode(t);if(!n||!vn(n))return!1}for(var r=0,a=t.parameters;r<a.length;r++)if(!bn(a[r]))return!1;return!0}function kn(e){if(e.declarations&&1===e.declarations.length){var t=e.declarations[0];if(t)switch(t.kind){case 149:case 148:return bn(t);case 151:case 150:case 152:return xn(t)}}return!1}function Sn(t){for(var n=e.createMap(),r=0,a=t;r<a.length;r++){var i=a[r];n.set(i.name,i);}return n}function Tn(t,n,r){for(var a=e.createMap(),i=0,o=t;i<o.length;i++){var s=o[i];a.set(s.name,r&&kn(s)?s:eo(s,n));}return a}function Cn(e,t){for(var n=0,r=t;n<r.length;n++){var a=r[n];e.has(a.name)||e.set(a.name,a);}}function Dn(e){if(!e.declaredProperties){var t=e.symbol;e.declaredProperties=Pe(t.members),e.declaredCallSignatures=Ir(t.members.get(\"__call\")),e.declaredConstructSignatures=Ir(t.members.get(\"__new\")),e.declaredStringIndexInfo=$r(t,0),e.declaredNumberIndexInfo=$r(t,1);}return e}function En(t,n){if(4&T(t)){var r=t.target,a=t.typeArguments;if(e.length(r.typeParameters)===e.length(a))return Qr(r,e.concatenate(a,[n||r.thisType]))}else if(131072&t.flags)return oi(e.map(t.types,function(e){return En(e,n)}));return t}function Nn(t,n,r,a){var i,o,s,c,u,l;e.rangeEquals(r,a,0,r.length)?(i=Hi,o=n.symbol?n.symbol.members:Sn(n.declaredProperties),s=n.declaredCallSignatures,c=n.declaredConstructSignatures,u=n.declaredStringIndexInfo,l=n.declaredNumberIndexInfo):(i=Ui(r,a),o=Tn(n.declaredProperties,i,1===r.length),s=Bi(n.declaredCallSignatures,i),c=Bi(n.declaredConstructSignatures,i),u=uo(n.declaredStringIndexInfo,i),l=uo(n.declaredNumberIndexInfo,i));var _=tn(n);if(_.length){n.symbol&&o===n.symbol.members&&(o=Sn(n.declaredProperties));for(var d=e.lastOrUndefined(a),p=0,f=_;p<f.length;p++){var g=f[p],m=d?En(so(g,i),d):g;Cn(o,tr(m)),s=e.concatenate(s,yr(m,0)),c=e.concatenate(c,yr(m,1)),u||(u=m===Th?Vr(Th,!1):br(m,0)),l=l||br(m,1);}}Oe(t,o,s,c,u,l);}function An(e){Nn(e,Dn(e),th,th);}function wn(t){var n=Dn(t.target),r=e.concatenate(n.typeParameters,[n.thisType]);Nn(t,n,r,t.typeArguments&&t.typeArguments.length===r.length?t.typeArguments:e.concatenate(t.typeArguments,[t]));}function Pn(e,t,n,r,a,i,o,s,c){var u=new Xy(gh);return u.declaration=e,u.typeParameters=t,u.parameters=r,u.thisParameter=n,u.resolvedReturnType=a,u.typePredicate=i,u.minArgumentCount=o,u.hasRestParameter=s,u.hasLiteralTypes=c,u}function On(e){return Pn(e.declaration,e.typeParameters,e.thisParameter,e.parameters,e.resolvedReturnType,e.typePredicate,e.minArgumentCount,e.hasRestParameter,e.hasLiteralTypes)}function Fn(t){var n=yr(en(t),1);if(0===n.length)return[Pn(void 0,t.localTypeParameters,void 0,th,t,void 0,0,!1,!1)];for(var r=Yt(t),a=e.isInJavaScriptFile(r),i=da(r),o=e.length(i),s=[],c=0,u=n;c<u.length;c++){var l=u[c],_=Ar(l.typeParameters),d=e.length(l.typeParameters);if((a||o>=_)&&o<=d){var p=d?jr(l,wr(i,l.typeParameters,_,r)):On(l);p.typeParameters=t.localTypeParameters,p.resolvedReturnType=t,s.push(p);}}return s}function In(e,t,n,r,a){for(var i=0,o=e;i<o.length;i++){var s=o[i];if(Wo(s,t,n,r,a,mo))return s}}function Mn(t,n,r){if(n.typeParameters){if(r>0)return;for(i=1;i<t.length;i++)if(!In(t[i],n,!1,!1,!1))return;return[n]}for(var a=void 0,i=0;i<t.length;i++){var o=i===r?n:In(t[i],n,!0,!0,!0);if(!o)return;e.contains(a,o)||(a||(a=[])).push(o);}return a}function Rn(t,n){for(var r=e.map(t,function(e){return yr(e,n)}),a=void 0,i=0;i<r.length;i++)for(var o=0,s=r[i];o<s.length;o++){var c=s[o];if(!a||!In(a,c,!1,!0,!0)){var u=Mn(r,c,i);if(u){var l=c;if(u.length>1){if(l=On(c),e.forEach(u,function(e){return e.thisParameter})){var _=ti(e.map(u,function(e){return jt(e.thisParameter)||Th}),!0);l.thisParameter=fs$$1(c.thisParameter,_);}l.resolvedReturnType=void 0,l.unionSignatures=u;}(a||(a=[])).push(l);}}}return a||th}function Ln(e,t){for(var n=[],r=!1,a=0,i=e;a<i.length;a++){var o=br(i[a],t);if(!o)return;n.push(o.type),r=r||o.isReadonly;}return Vr(ti(n,!0),r)}function Bn(e){var t=Rn(e.types,0),n=Rn(e.types,1),r=Ln(e.types,0),a=Ln(e.types,1);Oe(e,nh,t,n,r,a);}function Kn(e,t){return e?t?oi([e,t]):e:t}function jn(e,t){return e?t?Vr(oi([e.type,t.type]),e.isReadonly&&t.isReadonly):e:t}function Jn(e,t){return e&&t&&Vr(ti([e.type,t.type]),e.isReadonly||t.isReadonly)}function zn(e,t,n){for(var r=[],a=0;a<t.length;a++)a===n?r.push(e):Gt(t[a])&&r.push(Lr(yr(t[a],1)[0]));return oi(r)}function Un(t){for(var n,r,a=th,i=th,o=t.types,s=e.countWhere(o,Gt),c=0;c<o.length;c++)!function(c){var u=t.types[c];if(0===s||s===o.length&&0===c||!Gt(u)){var l=yr(u,1);l.length&&s>0&&(l=e.map(l,function(e){var t=On(e);return t.resolvedReturnType=zn(Lr(e),o,c),t})),i=e.concatenate(i,l);}a=e.concatenate(a,yr(u,0)),n=jn(n,br(u,0)),r=jn(r,br(u,1));}(c);Oe(t,nh,a,i,n,r);}function qn(e){var t=e.symbol;if(e.target)Oe(e,r=Tn(Qn(e.target),e.mapper,!1),n=Bi(yr(e.target,0),e.mapper),a=Bi(yr(e.target,1),e.mapper),i=uo(br(e.target,0),e.mapper),c=uo(br(e.target,1),e.mapper));else if(2048&t.flags){var n=Ir((r=t.members).get(\"__call\"));Oe(e,r,n,a=Ir(r.get(\"__new\")),i=$r(t,0),c=$r(t,1));}else{var r=nh,a=th,i=void 0;if(t.exports&&(r=ye(t)),32&t.flags){var o=cn(t);(a=Ir(t.members.get(\"__constructor\"))).length||(a=Fn(o));var s=en(o);704512&s.flags?Cn(r=Sn(Pe(r)),tr(s)):s===Th&&(i=Vr(Th,!1));}var c=384&t.flags?wv:void 0;Oe(e,r,th,a,i,c),8208&t.flags&&(e.callSignatures=Ir(t));}}function Vn(t){function n(e,n){var o=Ui([i],[e]),_=t.mapper?Gi(t.mapper,o):o,d=so(s,_);if(32&e.flags){var f=e.value,g=gr(c,f),m=p(4|(l||!!(g&&67108864&g.flags)?67108864:0),f);m.checkFlags=u||g&&_d(g)?8:0,m.type=d,n&&(m.syntheticOrigin=n,m.declarations=n.declarations),a.set(f,m);}else 2&e.flags&&(r=Vr(d,u));}var r,a=e.createMap();Oe(t,nh,th,th,void 0,void 0);var i=$n(t),o=Wn(t),s=Hn(t),c=_r(Gn(t)),u=!!t.declaration.readonlyToken,l=!!t.declaration.questionToken;if(170===t.declaration.typeParameter.constraint.kind){for(var _=0,d=tr(c);_<d.length;_++){var f=d[_];n(ui(f),f);}br(c,0)&&n(Ph);}else{var g=540672&o.flags?_r(o):o;Cc(262144&g.flags?_i(_r(g.type)):g,n);}Oe(t,a,th,th,r,void 0);}function $n(e){return e.typeParameter||(e.typeParameter=gn(ke(e.declaration.typeParameter)))}function Wn(e){return e.constraintType||(e.constraintType=so(ar($n(e)),e.mapper||Hi)||Dh)}function Hn(e){return e.templateType||(e.templateType=e.declaration.type?so(bt(Mi(e.declaration.type),!!e.declaration.questionToken),e.mapper||Hi):Dh)}function Gn(e){if(!e.modifiersType){var t=e.declaration.typeParameter.constraint;if(170===t.kind)e.modifiersType=so(Mi(t.type),e.mapper||Hi);else{var n=Wn(vi(e.declaration)),r=n&&16384&n.flags?ar(n):n;e.modifiersType=r&&262144&r.flags?so(r.type,e.mapper||Hi):Jh;}}return e.modifiersType}function Xn(e){return!!(32&T(e))&&xd(Wn(e),802816)}function Yn(e){return e.members||(32768&e.flags?4&e.objectFlags?wn(e):3&e.objectFlags?An(e):16&e.objectFlags?qn(e):32&e.objectFlags&&Vn(e):65536&e.flags?Bn(e):131072&e.flags&&Un(e)),e}function Qn(e){return 32768&e.flags?Yn(e).properties:th}function Zn(e,t){if(32768&e.flags){var n=Yn(e).members.get(t);if(n&&Ce(n))return n}}function er(t){if(!t.resolvedProperties){for(var n=e.createMap(),r=0,a=t.types;r<a.length;r++){for(var i=0,o=tr(a[r]);i<o.length;i++){var s=o[i];if(!n.has(s.name)){var c=fr(t,s.name);c&&n.set(s.name,c);}}if(65536&t.flags)break}t.resolvedProperties=Pe(n);}return t.resolvedProperties}function tr(e){return e=_r(e),196608&e.flags?er(e):Qn(e)}function nr(t){if(65536&t.flags){for(var n=e.createMap(),r=0,a=t.types;r<a.length;r++){var i=a[r];if(!(8190&i.flags))for(var o=0,s=tr(i);o<s.length;o++){var c=s[o].name;n.has(c)||n.set(c,dr(t,c));}}return e.arrayFrom(n.values())}return tr(t)}function rr(e){return 16384&e.flags?ar(e):524288&e.flags?ir(e):or(e)}function ar(e){return sr(e)?Hr(e):void 0}function ir(e){var t=or(e.objectType),n=or(e.indexType);return t||n?yi(t||e.objectType,n||e.indexType):void 0}function or(e){if(737280&e.flags){var t=cr(e);if(t!==Tv&&t!==Cv)return t}else if(262144&e.flags)return Ph}function sr(e){return cr(e)!==Cv}function cr(t){function n(t){if(!e.contains(a,t)){a.push(t);var n=r(t);return a.pop(),n}i=!0;}function r(e){if(16384&e.flags){var t=Hr(e);return e.isThisType?t:t?n(t):void 0}if(196608&e.flags){for(var r=e.types,a=[],i=0,o=r;i<o.length;i++){var s=n(o[i]);s&&a.push(s);}return 65536&e.flags&&a.length===r.length?ti(a):131072&e.flags&&a.length?oi(a):void 0}if(262144&e.flags)return Ph;if(524288&e.flags){var c=n(e.objectType),u=n(e.indexType),l=c&&u?yi(c,u):void 0;return l&&l!==Dh?n(l):void 0}return e}var a,i;if(!t.resolvedBaseConstraint){a=[];var o=n(t);t.resolvedBaseConstraint=i?Cv:En(o||Tv,t);}return t.resolvedBaseConstraint}function ur(e){return e.resolvedApparentType||(e.resolvedApparentType=En(e,e))}function lr(t){if(!t.default)if(t.target){var n=lr(t.target);t.default=n?so(n,t.mapper):Tv;}else{var r=t.symbol&&e.forEach(t.symbol.declarations,function(t){return e.isTypeParameterDeclaration(t)&&t.default});t.default=r?Mi(r):Tv;}return t.default===Tv?void 0:t.default}function _r(e){var t=540672&e.flags?or(e)||Jh:e;return 131072&t.flags?ur(t):262178&t.flags?Yh:84&t.flags?Qh:136&t.flags?Zh:512&t.flags?ka(ah>=2):16777216&t.flags?Jh:t}function dr(t,n){for(var r,a=t.types,i=65536&t.flags,o=i?24:0,s=i?0:67108864,c=4,u=0,l=0,_=a;l<_.length;l++)if((b=_r(_[l]))!==Dh){var d=(v=gr(b,n))?e.getDeclarationModifierFlagsFromSymbol(v):0;!v||d&o?i&&(u|=16):(s&=v.flags,r?e.contains(r,v)||r.push(v):r=[v],u|=(_d(v)?8:0)|(24&d?0:64)|(16&d?128:0)|(8&d?256:0)|(32&d?512:0),Rl(v)||(c=2));}if(r){if(1===r.length&&!(16&u))return r[0];for(var f=[],g=[],m=void 0,y=0,h=r;y<h.length;y++){var v=h[y];v.declarations&&e.addRange(g,v.declarations);var b=jt(v);m?b!==m&&(u|=32):m=b,f.push(b);}var x=p(4|s,n);return x.checkFlags=c|u,x.containingType=t,x.declarations=g,x.type=i?ti(f):oi(f),x}}function pr(t,n){var r=t.propertyCache||(t.propertyCache=e.createMap()),a=r.get(n);return a||(a=dr(t,n))&&r.set(n,a),a}function fr(t,n){var r=pr(t,n);return!r||16&e.getCheckFlags(r)?void 0:r}function gr(e,t){if(32768&(e=_r(e)).flags){var n=Yn(e),r=n.members.get(t);if(r&&Ce(r))return r;if(n===Vh||n.callSignatures.length||n.constructSignatures.length){var a=Zn(Hh,t);if(a)return a}return Zn(Wh,t)}if(196608&e.flags)return fr(e,t)}function mr(e,t){if(229376&e.flags){var n=Yn(e);return 0===t?n.callSignatures:n.constructSignatures}return th}function yr(e,t){return mr(_r(e),t)}function hr(e,t){if(229376&e.flags){var n=Yn(e);return 0===t?n.stringIndexInfo:n.numberIndexInfo}}function vr(e,t){var n=hr(e,t);return n&&n.type}function br(e,t){return hr(_r(e),t)}function xr(e,t){return vr(_r(e),t)}function kr(e,t){if(ps(e)){for(var n=[],r=0,a=tr(e);r<a.length;r++){var i=a[r];(0===t||Zu(i.name))&&n.push(jt(i));}if(n.length)return ti(n,!0)}}function Sr(t){var n;return e.forEach(e.getEffectiveTypeParameterDeclarations(t),function(t){var r=gn(t.symbol);e.contains(n,r)||(n||(n=[]),n.push(r));}),n}function Tr(e){var t=[];return e.forEach(function(e,n){we(n)||t.push(e);}),t}function Cr(t){if(65536&t.flags){if(t.type&&278===t.type.kind)return!0;var n=e.getJSDocParameterTags(t);if(n)for(var r=0,a=n;r<a.length;r++){var i=a[r];if(i.isBracketed)return!0;if(i.typeExpression)return 278===i.typeExpression.type.kind}}}function Dr(t,n){if(!e.isExternalModuleNameRelative(t)){var r=D(Ov,'\"'+t+'\"',512);return r&&n?xe(r):r}}function Er(t){if(e.hasQuestionToken(t)||Cr(t))return!0;if(t.initializer){var n=t.parent,r=Pr(n),a=e.indexOf(n.parameters,t);return e.Debug.assert(a>=0),a>=r.minArgumentCount}var i=e.getImmediatelyInvokedFunctionExpression(t.parent);return!!i&&(!t.type&&!t.dotDotDotToken&&e.indexOf(t.parent.parameters,t)>=i.arguments.length)}function Nr(e){if(71===e.parameterName.kind){var t=e.parameterName;return{kind:1,parameterName:t?t.text:void 0,parameterIndex:t?ap(e.parent.parameters,t):void 0,type:Mi(e.type)}}return{kind:0,type:Mi(e.type)}}function Ar(e){var t=0;if(e)for(var n=0;n<e.length;n++)lr(e[n])||(t=n+1);return t}function wr(t,n,r,a){var i=e.length(n);if(i){var o=e.length(t),s=e.isInJavaScriptFile(a);if((s||o>=r)&&o<=i){t||(t=[]);for(c=o;c<i;c++)t[c]=s?Th:Jh;for(var c=o;c<i;c++){var u=Ui(n,t),l=lr(n[c]);t[c]=l?so(l,u):s?Th:Jh;}}}return t}function Pr(t){var n=S(t);if(!n.resolvedSignature){for(var r=[],a=!1,i=0,o=void 0,s=void 0,c=e.getImmediatelyInvokedFunctionExpression(t),u=e.isJSDocConstructSignature(t),l=!c&&!u&&e.isInJavaScriptFile(t)&&!e.hasJSDocParameterTags(t),_=u?1:0;_<t.parameters.length;_++){var d=t.parameters[_],f=d.symbol;f&&4&f.flags&&!e.isBindingPattern(d.name)&&(f=A(d,f.name,107455,void 0,void 0)),0===_&&\"this\"===f.name?(s=!0,o=d.symbol):r.push(f),d.type&&173===d.type.kind&&(a=!0),d.initializer||d.questionToken||d.dotDotDotToken||c&&r.length>c.arguments.length&&!d.type||Cr(d)||l||(i=r.length);}if(!(153!==t.kind&&154!==t.kind||e.hasDynamicName(t)||s&&o)){var g=153===t.kind?154:153,m=e.getDeclarationOfKind(t.symbol,g);m&&(o=Pt(m));}var y=152===t.kind?cn(xe(t.parent.symbol)):void 0,h=y?y.localTypeParameters:Sr(t),v=Or(t,u,y),b=t.type&&158===t.type.kind?Nr(t.type):void 0,x=e.hasRestParameter(t);if(!x&&e.isInJavaScriptFile(t)&&!e.hasJSDocParameterTags(t)&&Fr(t)){x=!0;var k=p(3,\"args\");k.type=nv,k.isRestParameter=!0,r.push(k);}n.resolvedSignature=Pn(t,h,o,r,v,b,i,x,a);}return n.resolvedSignature}function Or(t,n,r){if(n)return Mi(t.parameters[0].type);if(r)return r;var a=e.getEffectiveReturnTypeNode(t);return a?Mi(a):153!==t.kind||e.hasDynamicName(t)?e.nodeIsMissing(t.body)?Th:void 0:wt(e.getDeclarationOfKind(t.symbol,154))}function Fr(t){function n(t){if(!t)return!1;switch(t.kind){case 71:return\"arguments\"===t.text&&e.isPartOfExpression(t);case 149:case 151:case 153:case 154:return 144===t.name.kind&&n(t.name);default:return!e.nodeStartsNewLexicalEnvironment(t)&&!e.isPartOfTypeNode(t)&&e.forEachChild(t,n)}}var r=S(t);return void 0===r.containsArgumentsReference&&(8192&r.flags?r.containsArgumentsReference=!0:r.containsArgumentsReference=n(t.body)),r.containsArgumentsReference}function Ir(e){if(!e)return th;for(var t=[],n=0;n<e.declarations.length;n++){var r=e.declarations[n];switch(r.kind){case 160:case 161:case 228:case 151:case 150:case 152:case 155:case 156:case 157:case 153:case 154:case 186:case 187:case 279:if(n>0&&r.body){var a=e.declarations[n-1];if(r.parent===a.parent&&r.kind===a.kind&&r.pos===a.end)break}t.push(Pr(r));}}return t}function Mr(e){var t=ce(e,e);if(t){var n=_e(t);if(n)return jt(n)}return Th}function Rr(e){if(e.thisParameter)return jt(e.thisParameter)}function Lr(t){if(!t.resolvedReturnType){if(!it(t,3))return Dh;var n=void 0;if(n=t.target?so(Lr(t.target),t.mapper):t.unionSignatures?ti(e.map(t.unionSignatures,Lr),!0):nd(t.declaration),!ct()&&(n=Th,uh)){var r=t.declaration,a=e.getNameOfDeclaration(r);a?d(a,e.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions,e.declarationNameToString(a)):d(r,e.Diagnostics.Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions);}t.resolvedReturnType=n;}return t.resolvedReturnType}function Br(t){if(t.hasRestParameter){var n=jt(e.lastOrUndefined(t.parameters));if(4&T(n)&&n.target===Gh)return n.typeArguments[0]}return Th}function Kr(t,n){n=wr(n,t.typeParameters,Ar(t.typeParameters));var r=t.instantiations||(t.instantiations=e.createMap()),a=Xr(n),i=r.get(a);return i||r.set(a,i=jr(t,n)),i}function jr(e,t){return Zi(e,Ui(e.typeParameters,t),!0)}function Jr(e){return e.typeParameters?(e.erasedSignatureCache||(e.erasedSignatureCache=Zi(e,qi(e.typeParameters),!0)),e.erasedSignatureCache):e}function zr(e){if(!e.isolatedSignatureType){var t=152===e.declaration.kind||156===e.declaration.kind,n=Ae(16);n.members=nh,n.properties=th,n.callSignatures=t?th:[e],n.constructSignatures=t?[e]:th,e.isolatedSignatureType=n;}return e.isolatedSignatureType}function Ur(e){return e.members.get(\"__index\")}function qr(e,t){var n=1===t?133:136,r=Ur(e);if(r)for(var a=0,i=r.declarations;a<i.length;a++){var o=i[a];if(1===o.parameters.length){var s=o.parameters[0];if(s&&s.type&&s.type.kind===n)return o}}}function Vr(e,t,n){return{type:e,isReadonly:t,declaration:n}}function $r(t,n){var r=qr(t,n);if(r)return Vr(r.type?Mi(r.type):Th,0!=(64&e.getModifierFlags(r)),r)}function Wr(t){return e.getDeclarationOfKind(t.symbol,145).constraint}function Hr(e){if(!e.constraint)if(e.target){var t=ar(e.target);e.constraint=t?so(t,e.mapper):Tv;}else{var n=Wr(e);e.constraint=n?Mi(n):Tv;}return e.constraint===Tv?void 0:e.constraint}function Gr(t){return ke(e.getDeclarationOfKind(t.symbol,145).parent)}function Xr(e){var t=\"\";if(e)for(var n=e.length,r=0;r<n;){for(var a=e[r].id,i=1;r+i<n&&e[r+i].id===a+i;)i++;t.length&&(t+=\",\"),t+=a,i>1&&(t+=\":\"+i),r+=i;}return t}function Yr(e,t){for(var n=0,r=0,a=e;r<a.length;r++){var i=a[r];i.flags&t||(n|=i.flags);}return 14680064&n}function Qr(e,t){var n=Xr(t),r=e.instantiations.get(n);return r||(r=Ae(4,e.symbol),e.instantiations.set(n,r),r.flags|=t?Yr(t,0):0,r.target=e,r.typeArguments=t),r}function Zr(e){var t=Ee(e.flags);return t.symbol=e.symbol,t.objectFlags=e.objectFlags,t.target=e.target,t.typeArguments=e.typeArguments,t}function ea(t){return e.length(t.target.typeParameters)}function ta(t,n,r){var a=yn(xe(n)),i=a.localTypeParameters;if(i){var o=e.length(t.typeArguments),s=Ar(i);return!e.isInJavaScriptFile(t)&&(o<s||o>i.length)?(d(t,s===i.length?e.Diagnostics.Generic_type_0_requires_1_type_argument_s:e.Diagnostics.Generic_type_0_requires_between_1_and_2_type_arguments,He(a,void 0,1),s,i.length),Dh):Qr(a,e.concatenate(a.outerTypeParameters,wr(r,i,s,t)))}return t.typeArguments?(d(t,e.Diagnostics.Type_0_is_not_generic,He(a)),Dh):a}function na(e,t){var n=yn(e),r=k(e),a=r.typeParameters,i=Xr(t),o=r.instantiations.get(i);return o||r.instantiations.set(i,o=co(n,Ui(a,wr(t,a,Ar(a))))),o}function ra(t,n,r){var a=yn(n),i=k(n).typeParameters;if(i){var o=e.length(t.typeArguments),s=Ar(i);return o<s||o>i.length?(d(t,s===i.length?e.Diagnostics.Generic_type_0_requires_1_type_argument_s:e.Diagnostics.Generic_type_0_requires_between_1_and_2_type_arguments,$e(n),s,i.length),Dh):na(n,r)}return t.typeArguments?(d(t,e.Diagnostics.Type_0_is_not_generic,$e(n)),Dh):a}function aa(t,n){return t.typeArguments?(d(t,e.Diagnostics.Type_0_is_not_generic,$e(n)),Dh):yn(n)}function ia(t){switch(t.kind){case 159:return t.typeName;case 277:return t.name;case 201:var n=t.expression;if(e.isEntityNameExpression(n))return n}}function oa(e,t){return e?se(e,t)||kh:kh}function sa(e,t){var n=da(e);if(t===kh)return Dh;var r=ca(e,t,n);if(r)return r;if(107455&t.flags&&277===e.kind){var a=jt(t);if(a.symbol&&!K_(a)){var i=ca(e,a.symbol,n);if(i)return i}return oa(ia(e),793064),a}return aa(e,t)}function ca(t,n,r){return 96&n.flags?ta(t,n,r):524288&n.flags?ra(t,n,r):16&n.flags&&277===t.kind&&(n.members||e.getJSDocClassTag(n.valueDeclaration))?B_(n):void 0}function ua(t){if(e.isIdentifier(t.name))switch(t.name.text){case\"String\":return Ph;case\"Number\":return Oh;case\"Boolean\":return Mh;case\"Void\":return Lh;case\"Undefined\":return Eh;case\"Null\":return Ah;case\"Object\":return Th;case\"Function\":case\"function\":return Hh;case\"Array\":case\"array\":return t.typeArguments&&t.typeArguments.length?void 0:ja(Th);case\"Promise\":case\"promise\":return t.typeArguments&&t.typeArguments.length?void 0:ed(Th)}}function la(e){var t=Mi(e.type);return ch?ti([t,Ah]):t}function _a(e){var t=S(e);if(!t.resolvedType){var n=void 0,r=void 0,a=793064;277===e.kind&&(r=ua(e),a|=107455),r||(r=sa(e,n=oa(ia(e),a))),t.resolvedSymbol=n,t.resolvedType=r;}return t.resolvedType}function da(t){return e.map(t.typeArguments,Mi)}function pa(e){var t=S(e);return t.resolvedType||(t.resolvedType=bs(ep(e.exprName))),t.resolvedType}function fa(t,n){function r(e){for(var t=0,n=e.declarations;t<n.length;t++){var r=n[t];switch(r.kind){case 229:case 230:case 232:return r}}}if(!t)return n?qh:Jh;var a=yn(t);return 32768&a.flags?e.length(a.typeParameters)!==n?(d(r(t),e.Diagnostics.Global_type_0_must_have_1_type_parameter_s,t.name,n),n?qh:Jh):a:(d(r(t),e.Diagnostics.Global_type_0_must_be_a_class_or_interface_type,t.name),n?qh:Jh)}function ga(t,n){return ya(t,107455,n?e.Diagnostics.Cannot_find_global_value_0:void 0)}function ma(t,n){return ya(t,793064,n?e.Diagnostics.Cannot_find_global_type_0:void 0)}function ya(e,t,n){return A(void 0,e,t,n,e)}function ha(e,t,n){var r=ma(e,n);return r||n?fa(r,t):void 0}function va(){return sv||(sv=ha(\"TypedPropertyDescriptor\",1,!0))||qh}function ba(){return yv||(yv=ha(\"TemplateStringsArray\",0,!0))||Jh}function xa(e){return iv||(iv=ga(\"Symbol\",e))}function ka(e){return ov||(ov=ha(\"Symbol\",0,e))||Jh}function Sa(e){return cv||(cv=ha(\"Promise\",1,e))||qh}function Ta(e){return uv||(uv=ga(\"Promise\",e))}function Ca(e){return lv||(lv=ha(\"PromiseConstructorLike\",0,e))||Jh}function Da(e){return fv||(fv=ha(\"AsyncIterable\",1,e))||qh}function Ea(e){return gv||(gv=ha(\"AsyncIterator\",1,e))||qh}function Na(e){return mv||(mv=ha(\"AsyncIterableIterator\",1,e))||qh}function Aa(e){return _v||(_v=ha(\"Iterable\",1,e))||qh}function wa(e){return dv||(dv=ha(\"Iterator\",1,e))||qh}function Pa(e){return pv||(pv=ha(\"IterableIterator\",1,e))||qh}function Oa(e,t){void 0===t&&(t=0);var n=ya(e,793064,void 0);return n&&fa(n,t)}function Fa(e,t){var n=ya(e,1920,void 0),r=n&&D(n.exports,t,793064);return r&&yn(r)}function Ia(e,t){return e!==qh?Qr(e,t):Jh}function Ma(e){return Ia(va(),[e])}function Ra(e){return Ia(Da(!0),[e])}function La(e){return Ia(Na(!0),[e])}function Ba(e){return Ia(Aa(!0),[e])}function Ka(e){return Ia(Pa(!0),[e])}function ja(e){return Ia(Gh,[e])}function Ja(e){var t=S(e);return t.resolvedType||(t.resolvedType=ja(Mi(e.elementType))),t.resolvedType}function za(t){for(var n=[],r=[],a=0;a<t;a++){var i=Ee(16384);n.push(i);var o=p(4,\"\"+a);o.type=i,r.push(o);}var s=Ae(12);return s.typeParameters=n,s.outerTypeParameters=void 0,s.localTypeParameters=n,s.instantiations=e.createMap(),s.instantiations.set(Xr(s.typeParameters),s),s.target=s,s.typeArguments=s.typeParameters,s.thisType=Ee(16384),s.thisType.isThisType=!0,s.thisType.constraint=s,s.declaredProperties=r,s.declaredCallSignatures=th,s.declaredConstructSignatures=th,s.declaredStringIndexInfo=void 0,s.declaredNumberIndexInfo=void 0,s}function Ua(e){return mh[e]||(mh[e]=za(e))}function qa(e){return Qr(Ua(e.length),e)}function Va(t){var n=S(t);return n.resolvedType||(n.resolvedType=qa(e.map(t.elementTypes,Mi))),n.resolvedType}function $a(e,t){for(var n=0,r=e.length-1,a=t.id;n<=r;){var i=n+(r-n>>1),o=e[i].id;if(o===a)return i;o>a?r=i-1:n=i+1;}return~n}function Wa(e,t){return $a(e,t)>=0}function Ha(e,t){var n=t.flags;if(65536&n)Ga(e,t.types);else if(1&n)e.containsAny=!0;else if(!ch&&6144&n)2048&n&&(e.containsUndefined=!0),4096&n&&(e.containsNull=!0),2097152&n||(e.containsNonWideningType=!0);else if(!(8192&n)){2&n&&(e.containsString=!0),4&n&&(e.containsNumber=!0),96&n&&(e.containsStringOrNumberLiteral=!0);var r=e.length,a=r&&t.id>e[r-1].id?~r:$a(e,t);a<0&&(32768&n&&16&t.objectFlags&&t.symbol&&8208&t.symbol.flags&&Xa(e,t)||e.splice(~a,0,t));}}function Ga(e,t){for(var n=0,r=t;n<r.length;n++)Ha(e,r[n]);}function Xa(e,t){for(var n=0,r=e;n<r.length;n++)if(go(r[n],t))return!0;return!1}function Ya(e,t){for(var n=0,r=t;n<r.length;n++){var a=r[n];if(e!==a&&ho(e,a))return!0}return!1}function Qa(e){var t=e[0];if(256&t.flags){for(var n=Se(t.symbol),r=1;r<e.length;r++){var a=e[r];if(!(256&a.flags)||n!==Se(a.symbol))return!1}return!0}return!1}function Za(t){if(0!==t.length&&!Qa(t))for(var n=t.length;n>0;)Ya(t[--n],t)&&e.orderedRemoveItemAt(t,n);}function ei(t){for(var n=t.length;n>0;){var r=t[--n];(32&r.flags&&t.containsString||64&r.flags&&t.containsNumber||96&r.flags&&1048576&r.flags&&Wa(t,r.regularType))&&e.orderedRemoveItemAt(t,n);}}function ti(e,t,n,r){if(0===e.length)return Bh;if(1===e.length)return e[0];var a=[];return Ga(a,e),a.containsAny?Th:(t?Za(a):a.containsStringOrNumberLiteral&&ei(a),0===a.length?a.containsNull?a.containsNonWideningType?Ah:wh:a.containsUndefined?a.containsNonWideningType?Eh:Nh:Bh:ni(a,n,r))}function ni(e,t,n){if(0===e.length)return Bh;if(1===e.length)return e[0];var r=Xr(e),a=yh.get(r);return a||(a=Ee(65536|Yr(e,6144)),yh.set(r,a),a.types=e,a.aliasSymbol=t,a.aliasTypeArguments=n),a}function ri(t){var n=S(t);return n.resolvedType||(n.resolvedType=ti(e.map(t.types,Mi),!1,xi(t),ki(t))),n.resolvedType}function ai(t,n){131072&n.flags?ii(t,n.types):1&n.flags?t.containsAny=!0:8192&n.flags?t.containsNever=!0:16&T(n)&&Oo(n)?t.containsEmptyObject=!0:!ch&&6144&n.flags||e.contains(t,n)||(32768&n.flags&&(t.containsObjectType=!0),65536&n.flags&&void 0===t.unionIndex&&(t.unionIndex=t.length),32768&n.flags&&16&n.objectFlags&&n.symbol&&8208&n.symbol.flags&&Xa(t,n)||t.push(n));}function ii(e,t){for(var n=0,r=t;n<r.length;n++)ai(e,r[n]);}function oi(t,n,r){if(0===t.length)return Jh;var a=[];if(ii(a,t),a.containsNever)return Bh;if(a.containsAny)return Th;if(a.containsEmptyObject&&!a.containsObjectType&&a.push(Jh),1===a.length)return a[0];var i=a.unionIndex;if(void 0!==i){var o=a[i];return ti(e.map(o.types,function(t){return oi(e.replaceElement(a,i,t))}),!1,n,r)}var s=Xr(a),c=hh.get(s);return c||(c=Ee(131072|Yr(a,6144)),hh.set(s,c),c.types=a,c.aliasSymbol=n,c.aliasTypeArguments=r),c}function si(t){var n=S(t);return n.resolvedType||(n.resolvedType=oi(e.map(t.types,Mi),xi(t),ki(t))),n.resolvedType}function ci(e){return e.resolvedIndexType||(e.resolvedIndexType=Ee(262144),e.resolvedIndexType.type=e),e.resolvedIndexType}function ui(t){return 24&e.getDeclarationModifierFlagsFromSymbol(t)||e.startsWith(t.name,\"__@\")?Bh:Ai(e.unescapeIdentifier(t.name))}function li(t){return ti(e.map(tr(t),ui))}function _i(e){return xd(e,540672)?ci(e):32&T(e)?Wn(e):1&e.flags||br(e,0)?Ph:li(e)}function di(e){var t=_i(e);return t!==Bh?t:Ph}function pi(e){var t=S(e);return t.resolvedType||(t.resolvedType=_i(Mi(e.type))),t.resolvedType}function fi(e,t){var n=Ee(524288);return n.objectType=e,n.indexType=t,n}function gi(t,n,r,a){var i=r&&180===r.kind?r:void 0,o=96&n.flags?\"\"+n.value:i&&t_(i.argumentExpression,n,!1)?e.getPropertyNameForKnownSymbolName(i.argumentExpression.name.text):void 0;if(void 0!==o){var s=gr(t,o);if(s){if(i){if(e.isAssignmentTarget(i)&&(dd(i,s)||pd(i)))return d(i.argumentExpression,e.Diagnostics.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,$e(s)),Dh;a&&(S(r).resolvedSymbol=s);}return jt(s)}}if(Yu(n,262774)){if(dt(t))return Th;var c=Yu(n,84)&&br(t,1)||br(t,0)||void 0;if(c)return i&&c.isReadonly&&(e.isAssignmentTarget(i)||e.isDeleteTarget(i))?(d(i,e.Diagnostics.Index_signature_in_type_0_only_permits_reading,He(t)),Dh):c.type;if(i&&!Sd(t))return uh&&!rh.suppressImplicitAnyIndexErrors&&(xr(t,1)?d(i.argumentExpression,e.Diagnostics.Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number):d(i,e.Diagnostics.Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature,He(t))),Th}if(r){var u=180===r.kind?r.argumentExpression:r.indexType;return 96&n.flags?d(u,e.Diagnostics.Property_0_does_not_exist_on_type_1,\"\"+n.value,He(t)):6&n.flags?d(u,e.Diagnostics.Type_0_has_no_matching_index_signature_for_type_1,He(t),He(n)):d(u,e.Diagnostics.Type_0_cannot_be_used_as_an_index_type,He(n)),Dh}return Th}function mi(t,n,r){var a=r&&180===r.kind?r:void 0;if(a&&e.isAssignmentTarget(a)&&t.declaration.readonlyToken)return d(a,e.Diagnostics.Index_signature_in_type_0_only_permits_reading,He(t)),Dh;var i=Ui([$n(t)],[n]),o=t.mapper?Gi(t.mapper,i):i;return so(Hn(t),o)}function yi(e,t,n){if(xd(t,802816)||xd(e,540672)&&(!n||180!==n.kind)||Xn(e)){if(1&e.flags)return e;if(Xn(e))return mi(e,t,n);var r=e.id+\",\"+t.id,a=bh.get(r);return a||bh.set(r,a=fi(e,t)),a}var i=_r(e);if(65536&t.flags&&!(8190&t.flags)){for(var o=[],s=0,c=t.types;s<c.length;s++){var u=gi(i,c[s],n,!1);if(u===Dh)return Dh;o.push(u);}return ti(o)}return gi(i,t,n,!0)}function hi(e){var t=S(e);return t.resolvedType||(t.resolvedType=yi(Mi(e.objectType),Mi(e.indexType),e)),t.resolvedType}function vi(e){var t=S(e);if(!t.resolvedType){var n=Ae(32,e.symbol);n.declaration=e,n.aliasSymbol=xi(e),n.aliasTypeArguments=ki(e),t.resolvedType=n,Wn(n);}return t.resolvedType}function bi(e){var t=S(e);if(!t.resolvedType){var n=xi(e);if(0!==e.symbol.members.size||n){var r=Ae(16,e.symbol);r.aliasSymbol=n,r.aliasTypeArguments=ki(e),t.resolvedType=r;}else t.resolvedType=Uh;}return t.resolvedType}function xi(e){return 231===e.parent.kind?ke(e.parent):void 0}function ki(e){var t=xi(e);return t?Wt(t):void 0}function Si(t,n){if(1&t.flags||1&n.flags)return Th;if(8192&t.flags)return n;if(8192&n.flags)return t;if(65536&t.flags)return Ec(t,function(e){return Si(e,n)});if(65536&n.flags)return Ec(n,function(e){return Si(t,e)});if(16777216&n.flags)return Jh;var r,a,i=e.createMap(),o=e.createMap();t===Jh?(r=br(n,0),a=br(n,1)):(r=Jn(br(t,0),br(n,0)),a=Jn(br(t,1),br(n,1)));for(var s=0,c=tr(n);s<c.length;s++){var u=65536&(f=c[s]).flags&&!(32768&f.flags);24&e.getDeclarationModifierFlagsFromSymbol(f)?o.set(f.name,!0):Ci(f)||u||i.set(f.name,Ti(f));}for(var l=0,_=tr(t);l<_.length;l++){var d=_[l];if(!(65536&d.flags&&!(32768&d.flags)||o.has(d.name)||Ci(d)))if(i.has(d.name)){var f=i.get(d.name),g=jt(f);if(67108864&f.flags){var m=e.concatenate(d.declarations,f.declarations),y=p(4|67108864&d.flags,d.name);y.type=ti([jt(d),ec(g,131072)]),y.leftSpread=d,y.rightSpread=f,y.declarations=m,i.set(d.name,y);}}else i.set(d.name,Ti(d));}return Fe(void 0,i,th,th,r,a)}function Ti(e){if(!_d(e))return e;var t=p(4|67108864&e.flags,e.name);return t.type=jt(e),t.declarations=e.declarations,t.syntheticOrigin=e,t}function Ci(t){return 8192&t.flags&&e.find(t.declarations,function(t){return e.isClassLike(t.parent)})}function Di(e,t,n){var r=Ee(e);return r.symbol=n,r.value=t,r}function Ei(e){if(96&e.flags&&!(1048576&e.flags)){if(!e.freshType){var t=Di(1048576|e.flags,e.value,e.symbol);t.regularType=e,e.freshType=t;}return e.freshType}return e}function Ni(e){return 96&e.flags&&1048576&e.flags?e.regularType:e}function Ai(e,t,n){var r=\"number\"==typeof e?\"#\":\"@\",a=t?t+r+e:r+e,i=vh.get(a);if(!i){var o=(\"number\"==typeof e?64:32)|(t?256:0);vh.set(a,i=Di(o,e,n));}return i}function wi(e){var t=S(e);return t.resolvedType||(t.resolvedType=Ni(ep(e.literal))),t.resolvedType}function Pi(e){var t=S(e);if(!t.resolvedType){var n=Mi(e.type);t.resolvedType=n?ja(n):Dh;}return t.resolvedType}function Oi(t){var n=S(t);if(!n.resolvedType){var r=e.map(t.types,Mi);n.resolvedType=qa(r);}return n.resolvedType}function Fi(t){var n=e.getThisContainer(t,!1),r=n&&n.parent;return!r||!e.isClassLike(r)&&230!==r.kind||32&e.getModifierFlags(n)||152===n.kind&&!e.isNodeDescendantOf(t,n.body)?(d(t,e.Diagnostics.A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface),Dh):cn(ke(r)).thisType}function Ii(e){var t=S(e);return t.resolvedType||(t.resolvedType=Fi(e)),t.resolvedType}function Mi(e){switch(e.kind){case 119:case 268:case 269:return Th;case 136:return Ph;case 133:return Oh;case 122:return Mh;case 137:return Rh;case 105:return Lh;case 139:return Eh;case 95:return Ah;case 130:return Bh;case 134:return jh;case 169:case 99:return Ii(e);case 173:return wi(e);case 294:return wi(e.literal);case 159:case 277:return _a(e);case 158:return Mh;case 201:return _a(e);case 162:return pa(e);case 164:case 270:return Ja(e);case 165:return Va(e);case 166:case 271:return ri(e);case 167:return si(e);case 273:return la(e);case 168:case 274:case 281:case 282:case 278:return Mi(e.type);case 275:return Mi(e.literal);case 160:case 161:case 163:case 293:case 279:return bi(e);case 170:return pi(e);case 171:return hi(e);case 172:return vi(e);case 71:case 143:var t=Yg(e);return t&&yn(t);case 272:return Oi(e);case 280:return Pi(e);default:return Dh}}function Ri(e,t,n){if(e&&e.length){for(var r=[],a=0,i=e;a<i.length;a++){var o=i[a];r.push(n(o,t));}return r}return e}function Li(e,t){return Ri(e,t,so)}function Bi(e,t){return Ri(e,t,Zi)}function Ki(e,t,n){var r=t.instantiations||(t.instantiations=[]);return r[e.id]||(r[e.id]=n(e,t))}function ji(e,t){return function(n){return n===e?t:n}}function Ji(e,t,n,r){return function(a){return a===e?t:a===n?r:a}}function zi(e,t){return function(n){for(var r=0;r<e.length;r++)if(n===e[r])return t?t[r]:Th;return n}}function Ui(e,t){var n=1===e.length?ji(e[0],t?t[0]:Th):2===e.length?Ji(e[0],t?t[0]:Th,e[1],t?t[1]:Th):zi(e,t);return n.mappedTypes=e,n}function qi(e){return Ui(e,void 0)}function Vi(t,n){var r=function(r){return e.indexOf(t,r)>=n?Jh:r};return r.mappedTypes=t,r}function $i(e){return!!e.signature}function Wi(e){return e&&$i(e)?Cs(e.signature,2|e.flags,e.inferences):e}function Hi(e){return e}function Gi(t,n){var r=function(e){return so(t(e),n)};return r.mappedTypes=e.concatenate(t.mappedTypes,n.mappedTypes),r}function Xi(e,t,n){var r=function(r){return r===e?t:n(r)};return r.mappedTypes=n.mappedTypes,r}function Yi(e){var t=Ee(16384);return t.symbol=e.symbol,t.target=e,t}function Qi(t,n){return e.isIdentifierTypePredicate(t)?{kind:1,parameterName:t.parameterName,parameterIndex:t.parameterIndex,type:so(t.type,n)}:{kind:0,type:so(t.type,n)}}function Zi(t,n,r){var a,i;if(t.typeParameters&&!r){a=e.map(t.typeParameters,Yi),n=Gi(Ui(t.typeParameters,a),n);for(var o=0,s=a;o<s.length;o++)s[o].mapper=n;}t.typePredicate&&(i=Qi(t.typePredicate,n));var c=Pn(t.declaration,a,t.thisParameter&&eo(t.thisParameter,n),Ri(t.parameters,n,eo),void 0,i,t.minArgumentCount,t.hasRestParameter,t.hasLiteralTypes);return c.target=t,c.mapper=n,c}function eo(t,n){if(1&e.getCheckFlags(t)){var r=k(t);t=r.target,n=Gi(r.mapper,n);}var a=p(t.flags,t.name);return a.checkFlags=1,a.declarations=t.declarations,a.parent=t.parent,a.target=t,a.mapper=n,t.valueDeclaration&&(a.valueDeclaration=t.valueDeclaration),a}function to(e,t){var n=Ae(80,e.symbol);return n.target=64&e.objectFlags?e.target:e,n.mapper=64&e.objectFlags?Gi(e.mapper,t):t,n.aliasSymbol=e.aliasSymbol,n.aliasTypeArguments=Li(e.aliasTypeArguments,t),n}function no(e,t){var n=Wn(e);if(262144&n.flags){var r=n.type;if(16384&r.flags){var a=so(r,t);if(r!==a)return Ec(a,function(n){return ro(n)?ao(e,Xi(r,n,t)):n})}}return ao(e,t)}function ro(e){return 704512&e.flags}function ao(e,t){var n=Ae(96,e.symbol);return n.declaration=e.declaration,n.mapper=e.mapper?Gi(e.mapper,t):t,n.aliasSymbol=e.aliasSymbol,n.aliasTypeArguments=Li(e.aliasTypeArguments,t),n}function io(t,n){if(!t.declarations||!t.declarations.length)return!1;var r=n.mappedTypes;return!!e.findAncestor(t.declarations[0],function(t){if(233===t.kind||265===t.kind)return\"quit\";switch(t.kind){case 160:case 161:case 228:case 151:case 150:case 152:case 155:case 156:case 157:case 153:case 154:case 186:case 187:case 229:case 199:case 230:case 231:var n=e.getEffectiveTypeParameterDeclarations(t);if(n)for(var a=0,i=n;a<i.length;a++){var o=i[a];if(e.contains(r,gn(ke(o))))return!0}if(e.isClassLike(t)||230===t.kind){var s=cn(ke(t)).thisType;if(s&&e.contains(r,s))return!0}break;case 172:if(e.contains(r,gn(ke(t.typeParameter))))return!0;break;case 279:for(var c=0,u=t.parameters;c<u.length;c++){var l=u[c];if(e.contains(r,em(l)))return!0}}})}function oo(e){if(e.declarations&&e.declarations.length){var t=e.declarations[0].parent.kind;return 265===t||234===t}return!1}function so(e,t){return e&&t!==Hi?e.aliasSymbol&&oo(e.aliasSymbol)?e.aliasTypeArguments?na(e.aliasSymbol,Li(e.aliasTypeArguments,t)):e:co(e,t):e}function co(e,t){if(16384&e.flags)return t(e);if(32768&e.flags){if(16&e.objectFlags)return e.symbol&&14384&e.symbol.flags&&(64&e.objectFlags||io(e.symbol,t))?Ki(e,t,to):e;if(32&e.objectFlags)return Ki(e,t,no);if(4&e.objectFlags)return Qr(e.target,Li(e.typeArguments,t))}return 65536&e.flags&&!(8190&e.flags)?ti(Li(e.types,t),!1,e.aliasSymbol,Li(e.aliasTypeArguments,t)):131072&e.flags?oi(Li(e.types,t),e.aliasSymbol,Li(e.aliasTypeArguments,t)):262144&e.flags?_i(so(e.type,t)):524288&e.flags?yi(so(e.objectType,t),so(e.indexType,t)):e}function uo(e,t){return e&&Vr(so(e.type,t),e.isReadonly,e.declaration)}function lo(t){switch(e.Debug.assert(151!==t.kind||e.isObjectLiteralMethod(t)),t.kind){case 186:case 187:return _o(t);case 178:return e.forEach(t.properties,lo);case 177:return e.forEach(t.elements,lo);case 195:return lo(t.whenTrue)||lo(t.whenFalse);case 194:return 54===t.operatorToken.kind&&(lo(t.left)||lo(t.right));case 261:return lo(t.initializer);case 151:case 150:return _o(t);case 185:return lo(t.expression);case 254:return e.forEach(t.properties,lo);case 253:return t.initializer&&lo(t.initializer);case 256:return t.expression&&lo(t.expression)}return!1}function _o(t){if(t.typeParameters)return!1;if(e.forEach(t.parameters,function(t){return!e.getEffectiveTypeAnnotationNode(t)}))return!0;if(187===t.kind)return!1;var n=e.firstOrUndefined(t.parameters);return!(n&&e.parameterIsThisKeyword(n))}function po(t){return(zu(t)||e.isObjectLiteralMethod(t))&&_o(t)}function fo(t){if(32768&t.flags){var n=Yn(t);if(n.constructSignatures.length){var r=Ae(16,t.symbol);return r.members=n.members,r.properties=n.properties,r.callSignatures=th,r.constructSignatures=th,r}}else if(131072&t.flags)return oi(e.map(t.types,fo));return t}function go(e,t){return Mo(e,t,vb)}function mo(e,t){return Mo(e,t,vb)?-1:0}function yo(e,t){return Mo(e,t,yb)?-1:0}function ho(e,t){return Mo(e,t,mb)}function vo(e,t){return Mo(e,t,yb)}function bo(e,t){return zt(e)===zt(t)||ho(e,t)&&!go(e,t)}function xo(e,t){return Mo(e,t,hb)}function ko(e,t){return xo(e,t)||xo(t,e)}function So(e,t,n,r,a){return Ro(e,t,yb,n,r,a)}function To(e,t,n,r,a){return Ro(e,t,hb,n,r,a)}function Co(e,t,n){return 0!==Do(e,t,!1,n,!1,void 0,yo)}function Do(t,n,r,a,i,o,s){if(t===n)return-1;if(!n.hasRestParameter&&t.minArgumentCount>n.parameters.length)return 0;t.typeParameters&&(t=u_(t,n));var c=-1,u=Rr(t);if(u&&u!==Lh){var l=Rr(n);if(l){if(!(x=s(u,l,!1)||s(l,u,i)))return i&&o(e.Diagnostics.The_this_types_of_each_signature_are_incompatible),0;c&=x;}}for(var _=Ao(t),d=Ao(n),p=wo(t,_,n,d),f=t.parameters,g=n.parameters,m=0;m<p;m++){var y=m<_?W_(f[m]):Br(t),h=m<d?W_(g[m]):Br(n),v=c_(ds(y)),b=c_(ds(h)),x=v&&b&&!v.typePredicate&&!b.typePredicate&&(6144&ss(y))==(6144&ss(h))?Do(b,v,!0,!1,i,o,s):!r&&s(y,h,!1)||s(h,y,i);if(!x)return i&&o(e.Diagnostics.Types_of_parameters_0_and_1_are_incompatible,f[m<_?m:_].name,g[m<d?m:d].name),0;c&=x;}if(!a){var k=Lr(n);if(k===Lh)return c;var S=Lr(t);if(n.typePredicate){if(t.typePredicate)c&=Eo(t.typePredicate,n.typePredicate,i,o,s);else if(e.isIdentifierTypePredicate(n.typePredicate))return i&&o(e.Diagnostics.Signature_0_must_have_a_type_predicate,We(t)),0}else c&=r&&s(k,S,!1)||s(S,k,i);}return c}function Eo(t,n,r,a,i){if(t.kind!==n.kind)return r&&(a(e.Diagnostics.A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard),a(e.Diagnostics.Type_predicate_0_is_not_assignable_to_1,Ge(t),Ge(n))),0;if(1===t.kind){var o=t,s=n;if(o.parameterIndex!==s.parameterIndex)return r&&(a(e.Diagnostics.Parameter_0_is_not_in_the_same_position_as_parameter_1,o.parameterName,s.parameterName),a(e.Diagnostics.Type_predicate_0_is_not_assignable_to_1,Ge(t),Ge(n))),0}var c=i(t.type,n.type,r);return 0===c&&r&&a(e.Diagnostics.Type_predicate_0_is_not_assignable_to_1,Ge(t),Ge(n)),c}function No(e,t){var n=Jr(e),r=Jr(t),a=Lr(n),i=Lr(r);return!(i!==Lh&&!Mo(i,a,yb)&&!Mo(a,i,yb))&&Co(n,r,!0)}function Ao(e){var t=e.parameters.length;return e.hasRestParameter?t-1:t}function wo(e,t,n,r){return e.hasRestParameter===n.hasRestParameter?e.hasRestParameter?Math.max(t,r)+1:Math.min(t,r):e.hasRestParameter?r:t}function Po(e){return 0===e.properties.length&&0===e.callSignatures.length&&0===e.constructSignatures.length&&!e.stringIndexInfo&&!e.numberIndexInfo}function Oo(t){return 32768&t.flags?Po(Yn(t)):!!(16777216&t.flags)||(65536&t.flags?e.forEach(t.types,Oo):!!(131072&t.flags)&&!e.forEach(t.types,function(e){return!Oo(e)}))}function Fo(t,r,a){if(t===r)return!0;var i=n(t)+\",\"+n(r),o=bb.get(i);if(void 0!==o)return o;if(!(t.name===r.name&&256&t.flags&&256&r.flags))return bb.set(i,!1),!1;for(var s=jt(r),c=0,u=tr(jt(t));c<u.length;c++){var l=u[c];if(8&l.flags){var _=gr(s,l.name);if(!(_&&8&_.flags))return a&&a(e.Diagnostics.Property_0_is_missing_in_type_1,l.name,He(yn(r),void 0,256)),bb.set(i,!1),!1}}return bb.set(i,!0),!0}function Io(e,t,n,r){var a=e.flags,i=t.flags;if(8192&i)return!1;if(1&i||8192&a)return!0;if(262178&a&&2&i)return!0;if(32&a&&256&a&&32&i&&!(256&i)&&e.value===t.value)return!0;if(84&a&&4&i)return!0;if(64&a&&256&a&&64&i&&!(256&i)&&e.value===t.value)return!0;if(136&a&&8&i)return!0;if(16&a&&16&i&&Fo(e.symbol,t.symbol,r))return!0;if(256&a&&256&i){if(65536&a&&65536&i&&Fo(e.symbol,t.symbol,r))return!0;if(224&a&&224&i&&e.value===t.value&&Fo(Se(e.symbol),Se(t.symbol),r))return!0}if(2048&a&&(!ch||3072&i))return!0;if(4096&a&&(!ch||4096&i))return!0;if(32768&a&&16777216&i)return!0;if(n===yb||n===hb){if(1&a)return!0;if(68&a&&!(256&a)&&(16&i||64&i&&256&i))return!0}return!1}function Mo(e,t,n){if(96&e.flags&&1048576&e.flags&&(e=e.regularType),96&t.flags&&1048576&t.flags&&(t=t.regularType),e===t||n!==vb&&Io(e,t,n))return!0;if(32768&e.flags&&32768&t.flags){var r=n!==vb||e.id<t.id?e.id+\",\"+t.id:t.id+\",\"+e.id,a=n.get(r);if(void 0!==a)return 1===a}return!!(1032192&e.flags||1032192&t.flags)&&Ro(e,t,n,void 0)}function Ro(t,n,r,a,i,o){function s(t,n,r,i){e.Debug.assert(!!a),B=e.chainDiagnosticMessages(B,t,n,r,i);}function c(t,n,a){var i=He(n),o=He(a);i===o&&(i=He(n,void 0,256),o=He(a,void 0,256)),t||(t=r===hb?e.Diagnostics.Type_0_is_not_comparable_to_type_1:i===o?e.Diagnostics.Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated:e.Diagnostics.Type_0_is_not_assignable_to_type_1),s(t,i,o);}function u(t,n){var r=He(t),a=He(n);(Yh===t&&Ph===n||Qh===t&&Oh===n||Zh===t&&Mh===n||ka(!1)===t&&Rh===n)&&s(e.Diagnostics._0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible,a,r);}function l(e){if(!(196608&e.flags))return!1;for(var t=!1,n=0,r=e.types;n<r.length;n++)if(!(6144&r[n].flags)){if(t)return!0;t=!0;}return!1}function _(t,n,a,i){if(96&t.flags&&1048576&t.flags&&(t=t.regularType),96&n.flags&&1048576&n.flags&&(n=n.regularType),t===n)return-1;if(r===vb)return p(t,n);if(Io(t,n,r,a?s:void 0))return-1;if(128&T(t)&&1048576&t.flags){if(f(t,n,a))return a&&c(i,t,n),0;l(n)&&(t=ms(t));}if(r!==hb&&!(196608&t.flags)&&!(65536&n.flags)&&!V&&t!==Wh&&tr(t).length>0&&E(n)&&!N(t,n))return a&&s(e.Diagnostics.Type_0_has_no_properties_in_common_with_type_1,He(t),He(n)),0;var o=0,_=B,d=V;return V=!1,65536&t.flags?o=r===hb?v(t,n,a&&!(8190&t.flags)):b(t,n,a&&!(8190&t.flags)):(65536&n.flags?o=m(t,n,a&&!(8190&t.flags)&&!(8190&n.flags)):131072&n.flags?(V=!0,o=h(t,n,a)):131072&t.flags&&(o=v(t,n,!1)),!o&&(1032192&t.flags||1032192&n.flags)&&(o=k(t,n,a))&&(B=_)),V=d,!o&&a&&(32768&t.flags&&8190&n.flags?u(t,n):t.symbol&&32768&t.flags&&Wh===t&&s(e.Diagnostics.The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead),c(i,t,n)),o}function p(e,t){var n;return 32768&e.flags&&32768&t.flags?k(e,t,!1):(65536&e.flags&&65536&t.flags||131072&e.flags&&131072&t.flags)&&(n=g(e,t))&&(n&=g(t,e))?n:0}function f(t,n,i){if(xd(n,32768)&&!(512&T(n))){var o=!!(33554432&t.flags);if((r===yb||r===hb)&&(Sc(Wh,n)||!o&&Oo(n)))return!1;for(var c=0,u=Qn(t);c<u.length;c++){var l=function(r){if(!Pl(n,r.name,o)){if(i)if(e.Debug.assert(!!a),e.isJsxAttributes(a)||e.isJsxOpeningLikeElement(a))s(e.Diagnostics.Property_0_does_not_exist_on_type_1,$e(r),He(n));else{var c=t.symbol&&e.firstOrUndefined(t.symbol.declarations);r.valueDeclaration&&e.findAncestor(r.valueDeclaration,function(e){return e===c})&&(a=r.valueDeclaration),s(e.Diagnostics.Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1,$e(r),He(n));}return{value:!0}}}(u[c]);if(\"object\"==typeof l)return l.value}}return!1}function g(e,t){for(var n=-1,r=0,a=e.types;r<a.length;r++){var i=m(a[r],t,!1);if(!i)return 0;n&=i;}return n}function m(e,t,n){var r=t.types;if(65536&t.flags&&Wa(r,e))return-1;for(var a=0,i=r;a<i.length;a++){var o=_(e,i[a],!1);if(o)return o}return n&&_(e,y(e,t)||r[r.length-1],!0),0}function y(e,t){var n=Qn(e);if(n)for(var r=0,a=n;r<a.length;r++){var i=a[r];if(Vs(t,i.name))for(var o=jt(i),s=0,c=t.types;s<c.length;s++){var u=c[s],l=_t(u,i.name);if(l&&_(o,l))return u}}}function h(e,t,n){for(var r=-1,a=0,i=t.types;a<i.length;a++){var o=_(e,i[a],n);if(!o)return 0;r&=o;}return r}function v(e,t,n){var r=e.types;if(65536&e.flags&&Wa(r,t))return-1;for(var a=r.length,i=0;i<a;i++){var o=_(r[i],t,n&&i===a-1);if(o)return o}return 0}function b(e,t,n){for(var r=-1,a=0,i=e.types;a<i.length;a++){var o=_(i[a],t,n);if(!o)return 0;r&=o;}return r}function x(e,t,n){var a=e.typeArguments||th,i=t.typeArguments||th;if(a.length!==i.length&&r===vb)return 0;for(var o=a.length<=i.length?a.length:i.length,s=-1,c=0;c<o;c++){var u=_(a[c],i[c],n);if(!u)return 0;s&=u;}return s}function k(t,n,a){if(q)return 0;var i=r!==vb||t.id<n.id?t.id+\",\"+n.id:n.id+\",\"+t.id,o=r.get(i);if(void 0!==o){if(!a||2!==o)return 1===o?-1:0;r.set(i,3);}if(U>0){for(var s=0;s<U;s++)if(J[s].get(i))return 1;if(100===U)return q=!0,0}else K=[],j=[],J=[],z=0;K[U]=t,j[U]=n,J[U]=e.createMap(),J[U].set(i,1),U++;var c=z;1&z||!Uo(t,K,U)||(z|=1),2&z||!Uo(n,j,U)||(z|=2);var u=3!==z?S(t,n,a):1;if(z=c,U--,u){var l=J[U],_=-1===u||0===U?r:J[U-1];e.copyEntries(l,_);}else r.set(i,a?3:2);return u}function S(e,t,n){var a,i=B;if(16384&t.flags){if(32&T(e)&&Wn(e)===_i(t)&&!e.declaration.questionToken&&(a=_(s=Hn(e),o=yi(t,$n(e)),n)))return a}else if(262144&t.flags){if(262144&e.flags&&(a=_(t.type,e.type,!1)))return a;if((c=rr(t.type))&&(a=_(e,_i(c),n)))return a}else if(524288&t.flags&&(c=rr(t))&&(a=_(e,c,n)))return B=i,a;if(16384&e.flags){if(32&T(t)&&Wn(t)===_i(e)){var o=yi(e,$n(t)),s=Hn(t);if(a=_(o,s,n))return B=i,a}else if(((c=ar(e))||!(16777216&t.flags))&&((!c||1&c.flags)&&(c=Jh),a=_(c=En(c,e),t,n&&c!==Jh)))return B=i,a}else if(524288&e.flags){var c=rr(e);if(c){if(a=_(c,t,n))return B=i,a}else if(524288&t.flags&&e.indexType===t.indexType&&(a=_(e.objectType,t.objectType,n)))return a}else{if(4&T(e)&&4&T(t)&&e.target===t.target&&(a=x(e,t,n)))return a;var u=!!(8190&e.flags);if(r!==vb&&(e=_r(e)),163840&e.flags&&32768&t.flags){var l=n&&B===i&&!u;if(Xn(e)||Xn(t)?a=C(e,t,l):(a=D(e,t,l))&&(a&=w(e,t,0,l))&&(a&=w(e,t,1,l))&&(a&=M(e,t,0,u,l))&&(a&=M(e,t,1,u,l)),a)return B=i,a}}return 0}function C(e,t,n){if(Xn(t)){if(Xn(e)){var a=!!e.declaration.readonlyToken,i=!!e.declaration.questionToken,o=!!t.declaration.readonlyToken,s=!!t.declaration.questionToken;if(r===vb?a===o&&i===s:r===hb||!i||s){var c;if(c=_(Wn(t),Wn(e),n)){var u=Ui([$n(e)],[$n(t)]);return c&_(so(Hn(e),u),Hn(t),n)}}}else if(t.declaration.questionToken&&Oo(e))return-1}else if(r!==vb){var l=Yn(t);if(Po(l)||l.stringIndexInfo&&1&l.stringIndexInfo.type.flags)return-1}return 0}function D(t,n,a){if(r===vb)return A(t,n);for(var i=-1,o=Qn(n),c=r===mb&&!(128&T(t)),u=0,l=o;u<l.length;u++){var d=l[u],p=gr(t,d.name);if(p!==d)if(p){if(!(16777216&d.flags)){var f=e.getDeclarationModifierFlagsFromSymbol(p),g=e.getDeclarationModifierFlagsFromSymbol(d);if(8&f||8&g){if(256&e.getCheckFlags(p))return a&&s(e.Diagnostics.Property_0_has_conflicting_declarations_and_is_inaccessible_in_type_1,$e(p),He(t)),0;if(p.valueDeclaration!==d.valueDeclaration)return a&&(8&f&&8&g?s(e.Diagnostics.Types_have_separate_declarations_of_a_private_property_0,$e(d)):s(e.Diagnostics.Property_0_is_private_in_type_1_but_not_in_type_2,$e(d),He(8&f?t:n),He(8&f?n:t))),0}else if(16&g){if(!jo(p,d))return a&&s(e.Diagnostics.Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2,$e(d),He(Bo(p)||t),He(Bo(d)||n)),0}else if(16&f)return a&&s(e.Diagnostics.Property_0_is_protected_in_type_1_but_public_in_type_2,$e(d),He(t),He(n)),0;var m=_(jt(p),jt(d),a);if(!m)return a&&s(e.Diagnostics.Types_of_property_0_are_incompatible,$e(d)),0;if(i&=m,r!==hb&&67108864&p.flags&&!(67108864&d.flags))return a&&s(e.Diagnostics.Property_0_is_optional_in_type_1_but_required_in_type_2,$e(d),He(t),He(n)),0}}else if(!(67108864&d.flags)||c)return a&&s(e.Diagnostics.Property_0_is_missing_in_type_1,$e(d),He(t)),0}return i}function E(t){if(32768&t.flags){var n=Yn(t);return 0===n.callSignatures.length&&0===n.constructSignatures.length&&!n.stringIndexInfo&&!n.numberIndexInfo&&n.properties.length>0&&e.every(n.properties,function(e){return!!(67108864&e.flags)})}return!!(131072&t.flags)&&e.every(t.types,E)}function N(e,t){for(var n=!!(33554432&e.flags),r=0,a=tr(e);r<a.length;r++)if(Pl(t,a[r].name,n))return!0;return!1}function A(e,t){if(!(32768&e.flags&&32768&t.flags))return 0;var n=Qn(e),r=Qn(t);if(n.length!==r.length)return 0;for(var a=-1,i=0,o=n;i<o.length;i++){var s=o[i],c=Zn(t,s.name);if(!c)return 0;var u=Vo(s,c,_);if(!u)return 0;a&=u;}return a}function w(t,n,a,i){if(r===vb)return O(t,n,a);if(n===Vh||t===Vh)return-1;var o=yr(t,a),c=yr(n,a);if(1===a&&o.length&&c.length){if(zo(t)&&!zo(n))return i&&s(e.Diagnostics.Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type),0;if(!L(o[0],c[0],i))return 0}var u=-1,l=B;if(64&T(t)&&64&T(n)&&t.symbol===n.symbol)for(var _=0;_<c.length;_++){if(!(v=P(o[_],c[_],!0,i)))return 0;u&=v;}else if(1===o.length&&1===c.length){var d=r===hb||rh.noStrictGenericChecks;u=P(o[0],c[0],d,i);}else e:for(var p=0,f=c;p<f.length;p++){for(var g=f[p],m=i,y=0,h=o;y<h.length;y++){var v=P(h[y],g,!0,m);if(v){u&=v,B=l;continue e}m=!1;}return m&&s(e.Diagnostics.Type_0_provides_no_match_for_the_signature_1,He(t),We(g,void 0,void 0,a)),0}return u}function P(e,t,n,r){return Do(n?Jr(e):e,n?Jr(t):t,!1,!1,r,s,_)}function O(e,t,n){var r=yr(e,n),a=yr(t,n);if(r.length!==a.length)return 0;for(var i=-1,o=0;o<r.length;o++){var s=Wo(r[o],a[o],!1,!1,!1,_);if(!s)return 0;i&=s;}return i}function F(t,n,r,a){for(var i=-1,o=0,c=Qn(t);o<c.length;o++){var u=c[o];if(0===r||Zu(u.name)){var l=_(jt(u),n,a);if(!l)return a&&s(e.Diagnostics.Property_0_is_incompatible_with_index_signature,$e(u)),0;i&=l;}}return i}function I(t,n,r){var a=_(t.type,n.type,r);return!a&&r&&s(e.Diagnostics.Index_signatures_are_incompatible),a}function M(t,n,a,i,o){if(r===vb)return R(t,n,a);var c=br(n,a);if(!c||1&c.type.flags&&!i)return-1;var u=br(t,a)||1===a&&br(t,0);if(u)return I(u,c,o);if(ps(t)){var l=-1;if(0===a){var _=br(t,1);_&&(l=I(_,c,o));}return l&&(l&=F(t,c.type,a,o)),l}return o&&s(e.Diagnostics.Index_signature_is_missing_in_type_0,He(t)),0}function R(e,t,n){var r=br(t,n),a=br(e,n);return a||r?a&&r&&a.isReadonly===r.isReadonly?_(a.type,r.type):0:-1}function L(t,n,r){if(!t.declaration||!n.declaration)return!0;var a=24&e.getModifierFlags(t.declaration),i=24&e.getModifierFlags(n.declaration);return 8===i||(16===i&&8!==a||(16!==i&&!a||(r&&s(e.Diagnostics.Cannot_assign_a_0_constructor_type_to_a_1_constructor_type,Ye(a),Ye(i)),!1)))}var B,K,j,J,z,U=0,q=!1,V=!1;e.Debug.assert(r!==vb||!a,\"no error reporting in identity checking\");var $=_(t,n,!!a,i);return q?d(a,e.Diagnostics.Excessive_stack_depth_comparing_types_0_and_1,He(t),He(n)):B&&(o&&(B=e.concatenateDiagnosticMessageChains(o,B)),tb.add(e.createDiagnosticForNodeFromMessageChain(a,B))),0!==$}function Lo(t,n){if(!(6&e.getCheckFlags(t)))return n(t);for(var r=0,a=t.containingType.types;r<a.length;r++){var i=gr(a[r],t.name),o=i&&Lo(i,n);if(o)return o}}function Bo(e){return e.parent&&32&e.parent.flags?yn(Se(e)):void 0}function Ko(e,t){return Lo(e,function(e){var n=Bo(e);return!!n&&Ut(n,t)})}function jo(t,n){return!Lo(n,function(n){return!!(16&e.getDeclarationModifierFlagsFromSymbol(n))&&!Ko(t,Bo(n))})}function Jo(t,n){return Lo(n,function(n){return!!(16&e.getDeclarationModifierFlagsFromSymbol(n))&&!Ut(t,Bo(n))})?void 0:t}function zo(t){if(16&T(t)){var n=t.symbol;if(n&&32&n.flags){var r=rg(n);if(r&&128&e.getModifierFlags(r))return!0}}return!1}function Uo(e,t,n){if(n>=5&&32768&e.flags){var r=e.symbol;if(r)for(var a=0,i=0;i<n;i++){var o=t[i];if(32768&o.flags&&o.symbol===r&&++a>=5)return!0}}return!1}function qo(e,t){return 0!==Vo(e,t,mo)}function Vo(t,n,r){if(t===n)return-1;var a=24&e.getDeclarationModifierFlagsFromSymbol(t);if(a!==(24&e.getDeclarationModifierFlagsFromSymbol(n)))return 0;if(a){if(ng(t)!==ng(n))return 0}else if((67108864&t.flags)!=(67108864&n.flags))return 0;return _d(t)!==_d(n)?0:r(jt(t),jt(n))}function $o(e,t,n){if(e.parameters.length===t.parameters.length&&e.minArgumentCount===t.minArgumentCount&&e.hasRestParameter===t.hasRestParameter)return!0;var r=e.hasRestParameter?1:0,a=t.hasRestParameter?1:0;return!!(n&&e.minArgumentCount<=t.minArgumentCount&&(r>a||r===a&&e.parameters.length>=t.parameters.length))}function Wo(t,n,r,a,i,o){if(t===n)return-1;if(!$o(t,n,r))return 0;if(e.length(t.typeParameters)!==e.length(n.typeParameters))return 0;t=Jr(t),n=Jr(n);var s=-1;if(!a){var c=Rr(t);if(c){var u=Rr(n);if(u){if(!(d=o(c,u)))return 0;s&=d;}}}for(var l=n.parameters.length,_=0;_<l;_++){var d=o(Ho(t,_)?Br(t):W_(t.parameters[_]),Ho(n,_)?Br(n):W_(n.parameters[_]));if(!d)return 0;s&=d;}return i||(s&=o(Lr(t),Lr(n))),s}function Ho(e,t){return e.hasRestParameter&&t>=e.parameters.length-1}function Go(e){for(var t,n=0,r=e;n<r.length;n++){var a=r[n],i=rs(a);if(t||(t=i),i===a||i!==t)return!1}return!0}function Xo(t){return Go(t)?ti(t):e.reduceLeft(t,function(e,t){return ho(e,t)?t:e})}function Yo(t){if(!ch)return Xo(t);var n=e.filter(t,function(e){return!(6144&e.flags)});return n.length?_s(Xo(n),6144&os$$1(t)):ti(t,!0)}function Qo(e){return 4&T(e)&&e.target===Gh}function Zo(e){return 4&T(e)&&(e.target===Gh||e.target===Xh)||!(6144&e.flags)&&vo(e,av)}function es(e){return!!gr(e,\"0\")}function ts(e){return 0!=(6368&e.flags)}function ns(t){return!!(8&t.flags)||(65536&t.flags?!!(256&t.flags)||!e.forEach(t.types,function(e){return!ts(e)}):ts(t))}function rs(t){return 256&t.flags?dn(t):32&t.flags?Ph:64&t.flags?Oh:128&t.flags?Mh:65536&t.flags?ti(e.sameMap(t.types,rs)):t}function as(t){return 256&t.flags?dn(t):32&t.flags&&1048576&t.flags?Ph:64&t.flags&&1048576&t.flags?Oh:128&t.flags?Mh:65536&t.flags?ti(e.sameMap(t.types,as)):t}function is(e){return!!(4&T(e)&&8&e.target.objectFlags)}function os$$1(e){for(var t=0,n=0,r=e;n<r.length;n++)t|=ss(r[n]);return t}function ss(e){return 65536&e.flags?os$$1(e.types):32&e.flags?\"\"===e.value?32:0:64&e.flags?0===e.value?64:0:128&e.flags?e===Ih?128:0:7406&e.flags}function cs(e){return 7392&ss(e)?Dc(e,function(e){return!(7392&ss(e))}):e}function us(e){return Ec(e,ls)}function ls(e){return 2&e.flags?Rv:4&e.flags?Lv:8&e.flags||e===Ih?Ih:7168&e.flags||32&e.flags&&\"\"===e.value||64&e.flags&&0===e.value?e:Bh}function _s(e,t){var n=t&~e.flags&6144;return 0===n?e:ti(2048===n?[e,Eh]:4096===n?[e,Ah]:[e,Eh,Ah])}function ds(e){return ch?ec(e,524288):e}function ps(e){return e.symbol&&0!=(6144&e.symbol.flags)&&0===yr(e,0).length&&0===yr(e,1).length}function fs$$1(e,t){var n=p(e.flags,e.name);return n.declarations=e.declarations,n.parent=e.parent,n.type=t,n.target=e,e.valueDeclaration&&(n.valueDeclaration=e.valueDeclaration),n}function gs(t,n){for(var r=e.createMap(),a=0,i=Qn(t);a<i.length;a++){var o=i[a],s=jt(o),c=n(s);r.set(o.name,c===s?o:fs$$1(o,c));}return r}function ms(e){if(!(128&T(e)&&1048576&e.flags))return e;var t=e.regularType;if(t)return t;var n=e,r=gs(e,ms),a=Fe(n.symbol,r,n.callSignatures,n.constructSignatures,n.stringIndexInfo,n.numberIndexInfo);return a.flags=-1048577&n.flags,a.objectFlags|=128,e.regularType=a,a}function ys(e){var t=jt(e),n=bs(t);return n===t?e:fs$$1(e,n)}function hs(t){for(var n=e.createMap(),r=0,a=Qn(t);r<a.length;r++){var i=a[r];n.set(i.name,4&i.flags?ys(i):i);}var o=br(t,0),s=br(t,1);return Fe(t.symbol,n,th,th,o&&Vr(bs(o.type),o.isReadonly),s&&Vr(bs(s.type),s.isReadonly))}function vs(e){return 6144&e.flags?e:bs(e)}function bs(t){if(6291456&t.flags){if(6144&t.flags)return Th;if(128&T(t))return hs(t);if(65536&t.flags)return ti(e.sameMap(t.types,vs));if(Qo(t)||is(t))return Qr(t.target,e.sameMap(t.typeArguments,bs))}return t}function xs(t){var n=!1;if(65536&t.flags)for(var r=0,a=t.types;r<a.length;r++)xs(l=a[r])&&(n=!0);if(Qo(t)||is(t))for(var i=0,o=t.typeArguments;i<o.length;i++)xs(l=o[i])&&(n=!0);if(128&T(t))for(var s=0,c=Qn(t);s<c.length;s++){var u=c[s],l=jt(u);2097152&l.flags&&(xs(l)||d(u.valueDeclaration,e.Diagnostics.Object_literal_s_property_0_implicitly_has_an_1_type,u.name,He(bs(l))),n=!0);}return n}function ks(t,n){var r,a=He(bs(n));switch(t.kind){case 149:case 148:r=e.Diagnostics.Member_0_implicitly_has_an_1_type;break;case 146:r=t.dotDotDotToken?e.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type:e.Diagnostics.Parameter_0_implicitly_has_an_1_type;break;case 176:r=e.Diagnostics.Binding_element_0_implicitly_has_an_1_type;break;case 228:case 151:case 150:case 153:case 154:case 186:case 187:if(!t.name)return void d(t,e.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type,a);r=e.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type;break;default:r=e.Diagnostics.Variable_0_implicitly_has_an_1_type;}d(t,r,e.declarationNameToString(e.getNameOfDeclaration(t)),a);}function Ss(e,t){s&&uh&&2097152&t.flags&&(xs(t)||ks(e,t));}function Ts(e,t,n){var r,a=e.parameters.length,i=t.parameters.length;r=e.hasRestParameter&&t.hasRestParameter?Math.max(a,i):e.hasRestParameter?i:t.hasRestParameter?a:Math.min(a,i);for(var o=0;o<r;o++)n(H_(e,o),H_(t,o));}function Cs(t,n,r){function a(e){for(var t=0;t<i.length;t++)if(e===i[t].typeParameter)return i[t].isFixed=!0,Rs(o,t);return e}var i=r?e.map(r,Es):e.map(t.typeParameters,Ds),o=a;return o.mappedTypes=t.typeParameters,o.signature=t,o.inferences=i,o.flags=n,o}function Ds(e){return{typeParameter:e,candidates:void 0,inferredType:void 0,priority:void 0,topLevel:!0,isFixed:!1}}function Es(e){return{typeParameter:e.typeParameter,candidates:e.candidates&&e.candidates.slice(),inferredType:e.inferredType,priority:e.priority,topLevel:e.topLevel,isFixed:e.isFixed}}function Ns(t){var n=T(t);return!!(540672&t.flags||4&n&&e.forEach(t.typeArguments,Ns)||16&n&&t.symbol&&10288&t.symbol.flags||32&n||196608&t.flags&&As(t))}function As(t){return void 0===t.couldContainTypeVariables&&(t.couldContainTypeVariables=e.forEach(t.types,Ns)),t.couldContainTypeVariables}function ws(t,n){return t===n||196608&t.flags&&e.forEach(t.types,function(e){return ws(e,n)})}function Ps(t,n){function r(e){return o.candidates=void 0,Os(s,e,c),o.candidates&&ti(o.candidates,!0)}var a=tr(t),i=br(t,0);if(0!==a.length||i){for(var o=Ds(yi(Wn(n).type,$n(n))),s=[o],c=Hn(n),u=!n.declaration.readonlyToken,l=n.declaration.questionToken?0:67108864,_=e.createMap(),d=0,f=a;d<f.length;d++){var g=f[d],m=r(jt(g));if(!m)return;var y=p(4|g.flags&l,g.name);y.checkFlags=u&&_d(g)?8:0,y.declarations=g.declarations,y.type=m,_.set(g.name,y);}if(i){var h=r(i.type);if(!h)return;i=Vr(h,u&&i.isReadonly);}return Fe(void 0,_,th,th,i,void 0)}}function Os(t,n,r,a){function i(t,n){if(Ns(n))if(t.aliasSymbol&&t.aliasTypeArguments&&t.aliasSymbol===n.aliasSymbol)for(var c=t.aliasTypeArguments,u=n.aliasTypeArguments,l=0;l<c.length;l++)i(c[l],u[l]);else{if(65536&t.flags&&65536&n.flags&&!(256&t.flags&&256&n.flags)||131072&t.flags&&131072&n.flags){if(t===n){for(var _=0,d=t.types;_<d.length;_++)i(D=d[_],D);return}for(var g=void 0,m=0,y=t.types;m<y.length;m++)if(Fs(D=y[m],n.types))(g||(g=[])).push(D),i(D,D);else if(96&D.flags){var h=rs(D);Fs(h,n.types)&&(g||(g=[])).push(D,h);}g&&(t=Is(t,g),n=Is(n,g));}if(540672&n.flags){if(8388608&t.flags||t===Kh)return;var v=o(n);if(v)return void(v.isFixed||(!v.candidates||a<v.priority?(v.candidates=[t],v.priority=a):a===v.priority&&v.candidates.push(t),4&a||!(16384&n.flags)||ws(r,n)||(v.topLevel=!1)))}else if(4&T(t)&&4&T(n)&&t.target===n.target)for(var c=t.typeArguments||th,u=n.typeArguments||th,b=c.length<u.length?c.length:u.length,l=0;l<b;l++)i(c[l],u[l]);else if(196608&n.flags){for(var x=0,k=void 0,S=0,C=u=n.types;S<C.length;S++){var D=C[S];o(D)?(k=D,x++):i(t,D);}if(1===x){var E=a;a|=1,i(t,k),a=E;}}else if(196608&t.flags)for(var N=0,A=c=t.types;N<A.length;N++)i(A[N],n);else if(32768&(t=_r(t)).flags){var w=t.id+\",\"+n.id;if(f&&f.get(w))return;(f||(f=e.createMap())).set(w,!0);var P=32768&n.flags&&!(16&T(n)&&n.symbol&&32&n.symbol.flags)?n.symbol:void 0;if(P){if(e.contains(p,P))return;(p||(p=[])).push(P),s(t,n),p.pop();}else s(t,n);}}}function o(e){if(540672&e.flags)for(var n=0,r=t;n<r.length;n++){var a=r[n];if(e===a.typeParameter)return a}}function s(t,n){if(32&T(n)){var r=Wn(n);if(262144&r.flags){var s=o(r.type);if(s&&!s.isFixed){var l=Ps(t,n);if(l){var _=a;a|=2,i(l,s.typeParameter),a=_;}}return}if(16384&r.flags)return i(_i(t),r),void i(ti(e.map(tr(t),jt)),Hn(n))}c(t,n),u(t,n,0),u(t,n,1),d(t,n);}function c(e,t){for(var n=0,r=Qn(t);n<r.length;n++){var a=r[n],o=Zn(e,a.name);o&&i(jt(o),jt(a));}}function u(e,t,n){for(var r=yr(e,n),a=yr(t,n),i=r.length,o=a.length,s=i<o?i:o,c=0;c<s;c++)_(Jr(r[i-s+c]),Jr(a[o-s+c]));}function l(e,t){return i(e,t)}function _(e,t){Ts(e,t,l),e.typePredicate&&t.typePredicate&&e.typePredicate.kind===t.typePredicate.kind?i(e.typePredicate.type,t.typePredicate.type):i(Lr(e),Lr(t));}function d(e,t){var n=xr(t,0);n&&(a=xr(e,0)||kr(e,0))&&i(a,n);var r=xr(t,1);if(r){var a=xr(e,1)||xr(e,0)||kr(e,1);a&&i(a,r);}}void 0===a&&(a=0);var p,f;i(n,r);}function Fs(e,t){for(var n=0,r=t;n<r.length;n++)if(go(r[n],e))return!0;return!1}function Is(e,t){for(var n=[],r=0,a=e.types;r<a.length;r++){var i=a[r];Fs(i,t)||n.push(i);}return 65536&e.flags?ti(n):oi(n)}function Ms(e){var t=ar(e);return t&&xd(t,270334)}function Rs(t,n){var r=t.inferences[n],a=r.inferredType;if(!a){if(r.candidates){var i=t.signature,o=r.topLevel&&!Ms(r.typeParameter)&&(r.isFixed||!ws(Lr(i),r.typeParameter))?e.sameMap(r.candidates,as):r.candidates;a=bs(1&t.flags||4&r.priority?ti(o,!0):Yo(o));}else if(2&t.flags)a=Kh;else{var s=lr(r.typeParameter);a=s?so(s,Gi(Vi(t.signature.typeParameters,n),t)):4&t.flags?Th:Jh;}r.inferredType=a;var c=ar(t.signature.typeParameters[n]);if(c){var u=so(c,t);vo(a,En(u,a))||(r.inferredType=a=u);}}return a}function Ls(e){for(var t=[],n=0;n<e.inferences.length;n++)t.push(Rs(e,n));return t}function Bs(t){var n=S(t);return n.resolvedSymbol||(n.resolvedSymbol=!e.nodeIsMissing(t)&&A(t,t.text,1156031,e.Diagnostics.Cannot_find_name_0,t,e.Diagnostics.Cannot_find_name_0_Did_you_mean_1)||kh),n.resolvedSymbol}function Ks(t){return!!e.findAncestor(t,function(e){return 162===e.kind||71!==e.kind&&143!==e.kind&&\"quit\"})}function js(e){if(71===e.kind){var t=Bs(e);return t!==kh?(Zc(e)?\"@\":\"\")+n(t):void 0}if(99===e.kind)return\"0\";if(179===e.kind){var r=js(e.expression);return r&&r+\".\"+e.name.text}}function Js(e,t){switch(e.kind){case 71:return 71===t.kind&&Bs(e)===Bs(t)||(226===t.kind||176===t.kind)&&Te(Bs(e))===ke(t);case 99:return 99===t.kind;case 97:return 97===t.kind;case 179:return 179===t.kind&&e.name.text===t.name.text&&Js(e.expression,t.expression)}return!1}function zs(e,t){for(;179===e.kind;)if(e=e.expression,Js(e,t))return!0;return!1}function Us(e,t){return 179===t.kind&&zs(e,t.expression)&&Vs(qs(t.expression),t.name.text)}function qs(e){if(71===e.kind)return jt(Bs(e));if(179===e.kind){var t=qs(e.expression);return t&&_t(t,e.name.text)}}function Vs(t,n){if(t&&65536&t.flags){var r=pr(t,n);if(r&&2&e.getCheckFlags(r))return void 0===r.isDiscriminantProperty&&(r.isDiscriminantProperty=32&r.checkFlags&&ns(jt(r))),r.isDiscriminantProperty}return!1}function $s(e,t){return Js(e,t)||zs(e,t)}function Ws(e,t){if(e.arguments)for(var n=0,r=e.arguments;n<r.length;n++)if($s(t,r[n]))return!0;return!(179!==e.expression.kind||!$s(t,e.expression.expression))}function Hs(e){return e.id||(e.id=l,l++),e.id}function Gs(e,t){if(!(65536&e.flags))return vo(e,t);for(var n=0,r=e.types;n<r.length;n++)if(vo(r[n],t))return!0;return!1}function Xs(e,t){if(e!==t){if(8192&t.flags)return t;var n=Dc(e,function(e){return Gs(t,e)});if(!(8192&n.flags))return n}return e}function Ys(e){for(var t=0,n=0,r=e;n<r.length;n++)t|=Zs(r[n]);return t}function Qs(e){var t=Yn(e);return!!(t.callSignatures.length||t.constructSignatures.length||t.members.get(\"bind\")&&ho(e,Hh))}function Zs(e){var t=e.flags;if(2&t)return ch?4079361:4194049;if(32&t){var n=\"\"===e.value;return ch?n?3030785:1982209:n?3145473:4194049}if(20&t)return ch?4079234:4193922;if(64&t){var r=0===e.value;return ch?r?3030658:1982082:r?3145346:4193922}return 8&t?ch?4078980:4193668:136&t?ch?e===Ih?3030404:1981828:e===Ih?3145092:4193668:32768&t?Qs(e)?ch?6164448:8376288:ch?6166480:8378320:3072&t?2457472:4096&t?2340752:512&t?ch?1981320:4193160:16777216&t?ch?6166480:8378320:540672&t?Zs(or(e)||Jh):196608&t?Ys(e.types):8388607}function ec(e,t){return Dc(e,function(e){return 0!=(Zs(e)&t)})}function tc(e,t){if(t){var n=Qd(t);return ti([ec(e,131072),n])}return e}function nc(t,n){var r=e.getTextOfPropertyName(n);return _t(t,r)||Zu(r)&&xr(t,1)||xr(t,0)||Dh}function rc(e,t){return es(e)&&_t(e,\"\"+t)||Of(e,void 0,!1,!1)||Dh}function ac(e){return ja(Of(e,void 0,!1,!1)||Dh)}function ic(e){return 177===e.parent.kind&&oc(e.parent)||261===e.parent.kind&&oc(e.parent.parent)?tc(_c(e),e.right):Qd(e.right)}function oc(e){return 194===e.parent.kind&&e.parent.left===e||216===e.parent.kind&&e.parent.initializer===e}function sc(t,n){return rc(_c(t),e.indexOf(t.elements,n))}function cc(e){return ac(_c(e.parent))}function uc(e){return nc(_c(e.parent),e.name)}function lc(e){return tc(uc(e),e.objectAssignmentInitializer)}function _c(e){var t=e.parent;switch(t.kind){case 215:return Ph;case 216:return Pf(t.expression,t.awaitModifier)||Dh;case 194:return ic(t);case 188:return Eh;case 177:return sc(t,e);case 198:return cc(t);case 261:return uc(t);case 262:return lc(t)}return Dh}function dc(t){var n=t.parent,r=gc(n.parent);return tc(174===n.kind?nc(r,t.propertyName||t.name):t.dotDotDotToken?ac(r):rc(r,e.indexOf(n.elements,t)),t.initializer)}function pc(e){return S(e).resolvedType||Qd(e)}function fc(e){return e.initializer?pc(e.initializer):215===e.parent.parent.kind?Ph:216===e.parent.parent.kind?Pf(e.parent.parent.expression,e.parent.parent.awaitModifier)||Dh:Dh}function gc(e){return 226===e.kind?fc(e):dc(e)}function mc(e){return 226===e.kind||176===e.kind?gc(e):_c(e)}function yc(e){return 226===e.kind&&e.initializer&&vt(e.initializer)||176!==e.kind&&194===e.parent.kind&&vt(e.parent.right)}function hc(e){switch(e.kind){case 185:return hc(e.expression);case 194:switch(e.operatorToken.kind){case 58:return hc(e.left);case 26:return hc(e.right)}}return e}function vc(e){var t=e.parent;return 185===t.kind||194===t.kind&&58===t.operatorToken.kind&&t.left===e||194===t.kind&&26===t.operatorToken.kind&&t.right===e?vc(t):e}function bc(e){if(257===e.kind){var t=Ni(Qd(e.expression));return ts(t)?t:void 0}return Bh}function xc(t){var n=S(t);if(!n.switchTypes){var r=e.map(t.caseBlock.clauses,bc);n.switchTypes=e.contains(r,void 0)?th:r;}return n.switchTypes}function kc(t,n){return 65536&t.flags?!e.forEach(t.types,function(t){return!e.contains(n,t)}):e.contains(n,t)}function Sc(e,t){return e===t||65536&t.flags&&Tc(e,t)}function Tc(e,t){if(65536&e.flags){for(var n=0,r=e.types;n<r.length;n++){var a=r[n];if(!Wa(t.types,a))return!1}return!0}return!!(256&e.flags&&dn(e)===t)||Wa(t.types,e)}function Cc(t,n){return 65536&t.flags?e.forEach(t.types,n):n(t)}function Dc(t,n){if(65536&t.flags){var r=t.types,a=e.filter(r,n);return a===r?t:ni(a)}return n(t)?t:Bh}function Ec(e,t){if(!(65536&e.flags))return t(e);for(var n,r,a=0,i=e.types;a<i.length;a++){var o=t(i[a]);o&&(n?r?r.push(o):r=[n,o]:n=o);}return r?ti(r):n}function Nc(e,t){return Dc(e,function(e){return 0!=(e.flags&t)})}function Ac(e,t){return Sc(Ph,e)&&xd(t,32)||Sc(Oh,e)&&xd(t,64)?Ec(e,function(e){return 2&e.flags?Nc(t,34):4&e.flags?Nc(t,68):e}):e}function wc(e){return 0===e.flags}function Pc(e){return 0===e.flags?e.type:e}function Oc(e,t){return t?{flags:0,type:e}:e}function Fc(e){var t=Ae(256);return t.elementType=e,t}function Ic(e){return xh[e.id]||(xh[e.id]=Fc(e))}function Mc(e,t){var n=rs(Zd(t));return Sc(n,e.elementType)?e:Ic(ti([e.elementType,n]))}function Rc(e){return 8192&e.flags?rv:ja(65536&e.flags?ti(e.types,!0):e)}function Lc(e){return e.finalArrayType||(e.finalArrayType=Rc(e.elementType))}function Bc(e){return 256&T(e)?Lc(e):e}function Kc(e){return 256&T(e)?e.elementType:Bh}function jc(e){for(var t=!1,n=0,r=e;n<r.length;n++){var a=r[n];if(!(8192&a.flags)){if(!(256&T(a)))return!1;t=!0;}}return t}function Jc(t,n){return jc(t)?Ic(ti(e.map(t,Kc))):ti(e.sameMap(t,Bc),n)}function zc(t){var n=vc(t),r=n.parent,a=179===r.kind&&(\"length\"===r.name.text||181===r.parent.kind&&e.isPushOrUnshiftIdentifier(r.name)),i=180===r.kind&&r.expression===n&&194===r.parent.kind&&58===r.parent.operatorToken.kind&&r.parent.left===r&&!e.isAssignmentTarget(r.parent)&&Yu(Qd(r.argumentExpression),2132);return a||i}function Uc(e){var t=S(e);return void 0===t.maybeTypePredicate&&(t.maybeTypePredicate=qc(e)),t.maybeTypePredicate}function qc(t){if(97!==t.expression.kind){var n=Bl(t.expression);if(n!==Kh){var r=_r(n);if(r!==Dh){var a=yr(r,0);return!!e.forEach(a,function(e){return e.typePredicate})}}}return!1}function Vc(t,n,r,a,i){function o(e){for(;;){if(1024&e.flags)for(var i=D;i<Mv;i++)if(Xv[i]===e)return Yv[i];var p=void 0;if(4096&e.flags)e.locked=!0,p=o(e.antecedent),e.locked=!1;else{if(2048&e.flags){e=e.antecedent;continue}if(16&e.flags){if(!(p=s(e))){e=e.antecedent;continue}}else if(96&e.flags)p=u(e);else if(128&e.flags)p=l(e);else if(12&e.flags){if(1===e.antecedents.length){e=e.antecedents[0];continue}p=4&e.flags?_(e):d(e);}else if(256&e.flags){if(!(p=c(e))){e=e.antecedent;continue}}else if(2&e.flags){var f=e.container;if(f&&f!==a&&179!==t.kind&&99!==t.kind){e=f.flowNode;continue}p=r;}else p=mf(n);}return 1024&e.flags&&(Xv[Mv]=e,Yv[Mv]=p,Mv++),p}}function s(r){var a=r.node;if(Js(t,a)){if(2===e.getAssignmentTargetKind(a)){var i=o(r.antecedent);return Oc(rs(Pc(i)),wc(i))}if(n===Ch||n===rv){if(yc(a))return Ic(Bh);var s=rs(mc(a));return vo(s,n)?s:nv}return 65536&n.flags?Xs(n,mc(a)):n}if(zs(t,a))return n}function c(e){var n=e.node,r=181===n.kind?n.expression.expression:n.left.expression;if(Js(t,hc(r))){var a=o(e.antecedent),i=Pc(a);if(256&T(i)){var s=i;if(181===n.kind)for(var c=0,u=n.arguments;c<u.length;c++)s=Mc(s,u[c]);else Yu(Qd(n.left.argumentExpression),2132)&&(s=Mc(s,n.right));return s===i?a:Oc(s,wc(a))}return a}}function u(e){var t=o(e.antecedent),n=Pc(t);if(8192&n.flags)return t;var r=0!=(32&e.flags),a=Bc(n),i=S(a,e.expression,r);if(i===a)return t;var s=wc(t);return Oc(s&&8192&i.flags?Kh:i,s)}function l(e){var n=o(e.antecedent),r=Pc(n),a=e.switchStatement.expression;return Js(t,a)?r=v(r,e.switchStatement,e.clauseStart,e.clauseEnd):p(a)&&(r=f(r,a,function(t){return v(t,e.switchStatement,e.clauseStart,e.clauseEnd)})),Oc(r,wc(n))}function _(t){for(var a=[],i=!1,s=!1,c=0,u=t.antecedents;c<u.length;c++){var l=u[c];if(!(2048&l.flags&&l.lock.locked)){var _=o(l),d=Pc(_);if(d===n&&n===r)return d;e.contains(a,d)||a.push(d),Sc(d,n)||(i=!0),wc(_)&&(s=!0);}}return Oc(Jc(a,i),s)}function d(r){var a=Hs(r),i=$v[a]||($v[a]=e.createMap());C||(C=js(t));var s=i.get(C);if(s)return s;for(var c=Fv;c<Iv;c++)if(Wv[c]===r&&Hv[c]===C&&Gv[c].length)return Oc(Jc(Gv[c],!1),!0);var u,l=[],_=!1;Wv[Iv]=r,Hv[Iv]=C,Gv[Iv]=l;for(var d=0,p=r.antecedents;d<p.length;d++){var f=p[d];Iv++;var g=o(f);Iv--,u||(u=g);var m=Pc(g),y=i.get(C);if(y)return y;if(e.contains(l,m)||l.push(m),Sc(m,n)||(_=!0),m===n)break}var h=Jc(l,_);return wc(u)?Oc(h,!0):(i.set(C,h),h)}function p(e){return 179===e.kind&&65536&n.flags&&Js(t,e.expression)&&Vs(n,e.name.text)}function f(e,t,n){var r=t.name.text,a=_t(e,r),i=a&&n(a);return a===i?e:Dc(e,function(e){return xo(_t(e,r),i)})}function g(e,r,a){return Js(t,r)?ec(e,a?1048576:2097152):p(r)?f(e,r,function(e){return ec(e,a?1048576:2097152)}):Us(t,r)?n:e}function m(e,r,a){switch(r.operatorToken.kind){case 58:return g(e,r.left,a);case 32:case 33:case 34:case 35:var i=r.operatorToken.kind,o=hc(r.left),s=hc(r.right);if(189===o.kind&&9===s.kind)return h(e,o,i,s,a);if(189===s.kind&&9===o.kind)return h(e,s,i,o,a);if(Js(t,o))return y(e,i,s,a);if(Js(t,s))return y(e,i,o,a);if(p(o))return f(e,o,function(e){return y(e,i,s,a)});if(p(s))return f(e,s,function(e){return y(e,i,o,a)});if(Us(t,o)||Us(t,s))return n;break;case 93:return b(e,r,a);case 26:return S(e,r.right,a)}return e}function y(e,t,n,r){if(1&e.flags)return e;33!==t&&35!==t||(r=!r);var a=Qd(n);if(6144&a.flags)return ch?ec(e,32===t||33===t?r?65536:524288:95===n.kind?r?32768:262144:r?16384:131072):e;if(16810497&e.flags)return e;if(r){var i=Dc(e,function(e){return ko(e,a)});return 8192&i.flags?e:Ac(i,a)}if(ts(a)){var o=Ni(a);return Dc(e,function(e){return Ni(e)!==o})}return e}function h(e,r,a,i,o){var s=hc(r.expression);if(!Js(t,s))return zs(t,s)?n:e;if(33!==a&&35!==a||(o=!o),o&&!(65536&e.flags)){var c=lb.get(i.text);if(c){if(ho(c,e))return c;if(540672&e.flags&&ho(c,or(e)||Th))return oi([e,c])}}return ec(e,o?cb.get(i.text)||64:ub.get(i.text)||8192)}function v(t,n,r,a){var i=xc(n);if(!i.length)return t;var o=i.slice(r,a),s=r===a||e.contains(o,Bh),c=ti(o),u=8192&c.flags?Bh:Ac(Dc(t,function(e){return xo(c,e)}),c);if(!s)return u;var l=Dc(t,function(t){return!(ts(t)&&e.contains(i,Ni(t)))});return 8192&u.flags?l:ti([u,l])}function b(r,a,i){var o=hc(a.left);if(!Js(t,o))return zs(t,o)?n:r;var s=Qd(a.right);if(!ho(s,Hh))return r;var c,u=gr(s,\"prototype\");if(u){var l=jt(u);dt(l)||(c=l);}if(dt(r)&&(c===Wh||c===Hh))return r;if(!c){var _=void 0;2&T(s)?_=Dn(s).declaredConstructSignatures:16&T(s)&&(_=yr(s,1)),_&&_.length&&(c=ti(e.map(_,function(e){return Lr(Jr(e))})));}return c?x(r,c,i,bo):r}function x(e,t,n,r){if(!n)return Dc(e,function(e){return!r(e,t)});if(65536&e.flags){var a=Dc(e,function(e){return r(e,t)});if(!(8192&a.flags))return a}return ho(t,e)?t:vo(e,t)?e:vo(t,e)?t:oi([e,t])}function k(r,a,i){if(!Ws(a,t)||!Uc(a))return r;var o=M_(a),s=o.typePredicate;if(!s)return r;if(dt(r)&&(s.type===Wh||s.type===Hh))return r;if(e.isIdentifierTypePredicate(s)){var c=a.arguments[s.parameterIndex-(o.thisParameter?1:0)];if(c){if(Js(t,c))return x(r,s.type,i,ho);if(zs(t,c))return n}}else{var u=e.skipParentheses(a.expression);if(180===u.kind||179===u.kind){var l=u,_=e.skipParentheses(l.expression);if(Js(t,_))return x(r,s.type,i,ho);if(zs(t,_))return n}}return r}function S(e,t,n){switch(t.kind){case 71:case 99:case 97:case 179:return g(e,t,n);case 181:return k(e,t,n);case 185:return S(e,t.expression,n);case 194:return m(e,t,n);case 192:if(51===t.operator)return S(e,t.operand,!n)}return e}void 0===r&&(r=n);var C;if(!t.flowNode||!i&&!(17810175&n.flags))return n;var D=Mv,E=Pc(o(t.flowNode));Mv=D;var N=256&T(E)&&zc(t)?nv:Bc(E);return 203===t.parent.kind&&8192&ec(N,524288).flags?n:N}function $c(t,n){if(71===n.kind&&(e.isRightSideOfQualifiedNameOrPropertyAccess(n)&&(n=n.parent),e.isPartOfExpression(n)&&!e.isAssignmentTarget(n))){var r=Qd(n);if(Te(S(n).resolvedSymbol)===t)return r}return jt(t)}function Wc(t){return e.findAncestor(t.parent,function(t){return e.isFunctionLike(t)&&!e.getImmediatelyInvokedFunctionExpression(t)||234===t.kind||265===t.kind||149===t.kind})}function Hc(t){var n=e.getRootDeclaration(t.valueDeclaration).parent,r=S(n);return 4194304&r.flags||(r.flags|=4194304,Gc(n)||Xc(n)),t.isAssigned||!1}function Gc(t){return!!e.findAncestor(t.parent,function(t){return e.isFunctionLike(t)&&!!(4194304&S(t).flags)})}function Xc(t){if(71===t.kind){if(e.isAssignmentTarget(t)){var n=Bs(t);n.valueDeclaration&&146===e.getRootDeclaration(n.valueDeclaration).kind&&(n.isAssigned=!0);}}else e.forEachChild(t,Xc);}function Yc(e){return 3&e.flags&&0!=(2&Ml(e))&&jt(e)!==rv}function Qc(e,t){return ch&&146===t.kind&&t.initializer&&2048&ss(e)&&!(2048&ss(ep(t.initializer)))?ec(e,131072):e}function Zc(e){var t=e.parent;return 179===t.kind||181===t.kind&&t.expression===e||180===t.kind&&t.expression===e}function eu(e){return 540672&e.flags&&xd(or(e)||Jh,6144)}function tu(e,t){var n=jt(e);return Zc(t)&&Cc(n,eu)?Ec(bs(n),_r):n}function nu(t){var n=Bs(t);if(n===kh)return Dh;if(n===fh){i=e.getContainingFunction(t);return ah<2&&(187===i.kind?d(t,e.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression):e.hasModifier(i,256)&&d(t,e.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_using_a_standard_function_or_method)),S(i).flags|=8192,jt(n)}!ee(n,107455)||Ks(t)||hm(ne(n))||ae(n);var r=Te(n);if(32&r.flags){var a=r.valueDeclaration;if(229===a.kind&&e.nodeIsDecorated(a))for(i=e.getContainingClass(t);void 0!==i;){if(i===a&&i.name!==t){S(a).flags|=8388608,S(t).flags|=16777216;break}i=e.getContainingClass(i);}else if(199===a.kind)for(var i=e.getThisContainer(t,!1);void 0!==i;){if(i.parent===a){149===i.kind&&e.hasModifier(i,32)&&(S(a).flags|=8388608,S(t).flags|=16777216);break}i=e.getThisContainer(i,!1);}}_f(t,t),sf(t,t),cf(t,t),au(t,n);var o=tu(r,t),s=r.valueDeclaration,c=e.getAssignmentTargetKind(t);if(c){if(!(3&r.flags))return d(t,e.Diagnostics.Cannot_assign_to_0_because_it_is_not_a_variable,$e(n)),Dh;if(_d(r))return d(t,e.Diagnostics.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,$e(n)),Dh}if(!(3&r.flags&&1!==c&&s))return o;for(var u=146===e.getRootDeclaration(s).kind,l=Wc(s),_=Wc(t),p=_!==l;_!==l&&(186===_.kind||187===_.kind||e.isObjectLiteralOrClassExpressionMethod(_))&&(Yc(r)||u&&!Hc(r));)_=Wc(_);var f=u||p||o!==Ch&&o!==rv&&(!ch||0!=(1&o.flags)||Ks(t)||246===t.parent.kind)||203===t.parent.kind||e.isInAmbientContext(s),g=Vc(t,o,f?u?Qc(o,e.getRootDeclaration(s)):o:o===Ch||o===rv?Eh:_s(o,2048),_,!f);if(o===Ch||o===rv){if(g===Ch||g===rv)return uh&&(d(e.getNameOfDeclaration(s),e.Diagnostics.Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined,$e(n),He(g)),d(t,e.Diagnostics.Variable_0_implicitly_has_an_1_type,$e(n),He(g))),mf(g)}else if(!f&&!(2048&ss(o))&&2048&ss(g))return d(t,e.Diagnostics.Variable_0_is_used_before_being_assigned,$e(n)),o;return c?rs(g):g}function ru(t,n){return!!e.findAncestor(t,function(t){return t===n?\"quit\":e.isFunctionLike(t)})}function au(t,n){if(!(ah>=2||0==(34&n.flags)||260===n.valueDeclaration.parent.kind)){for(var r=e.getEnclosingBlockScopeContainer(n.valueDeclaration),a=ru(t.parent,r),i=r,o=!1;i&&!e.nodeStartsNewLexicalEnvironment(i);){if(e.isIterationStatement(i,!1)){o=!0;break}i=i.parent;}o&&(a&&(S(i).flags|=65536),214===r.kind&&e.getAncestor(n.valueDeclaration,227).parent===r&&iu(t,r)&&(S(n.valueDeclaration).flags|=2097152),S(n.valueDeclaration).flags|=262144),a&&(S(n.valueDeclaration).flags|=131072);}}function iu(t,n){for(var r=t;185===r.parent.kind;)r=r.parent;var a=!1;if(e.isAssignmentTarget(r))a=!0;else if(192===r.parent.kind||193===r.parent.kind){var i=r.parent;a=43===i.operator||44===i.operator;}return!!a&&!!e.findAncestor(r,function(e){return e===n?\"quit\":e===n.statement})}function ou(e,t){S(e).flags|=2,149===t.kind||152===t.kind?S(t.parent).flags|=4:S(t).flags|=4;}function su(t){if(e.isSuperCall(t))return t;if(!e.isFunctionLike(t))return e.forEachChild(t,su)}function cu(e){var t=S(e);return void 0===t.hasSuperCall&&(t.superCall=su(e.body),t.hasSuperCall=!!t.superCall),t.superCall}function uu(e){return en(yn(ke(e)))===wh}function lu(t,n,r){var a=n.parent;if(e.getClassExtendsHeritageClauseElement(a)&&!uu(a)){var i=cu(n);(!i||i.end>t.pos)&&d(t,r);}}function _u(t){var n=e.getThisContainer(t,!0),r=!1;switch(152===n.kind&&lu(t,n,e.Diagnostics.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class),187===n.kind&&(n=e.getThisContainer(n,!1),r=ah<2),n.kind){case 233:d(t,e.Diagnostics.this_cannot_be_referenced_in_a_module_or_namespace_body);break;case 232:d(t,e.Diagnostics.this_cannot_be_referenced_in_current_location);break;case 152:pu(t,n)&&d(t,e.Diagnostics.this_cannot_be_referenced_in_constructor_arguments);break;case 149:case 148:32&e.getModifierFlags(n)&&d(t,e.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer);break;case 144:d(t,e.Diagnostics.this_cannot_be_referenced_in_a_computed_property_name);}if(r&&ou(t,n),e.isFunctionLike(n)&&(!Su(t)||e.getThisParameter(n))){if(186===n.kind&&194===n.parent.kind&&3===e.getSpecialPropertyAssignmentKind(n.parent)){var a=ep(n.parent.left.expression.expression).symbol;if(a&&a.members&&16&a.flags)return B_(a)}var i=Ot(n)||hu(n);if(i)return i}if(e.isClassLike(n.parent)){var o=ke(n.parent);return Vc(t,s=e.hasModifier(n,32)?jt(o):yn(o).thisType)}if(e.isInJavaScriptFile(t)){var s=du(n);if(s&&s!==Dh)return s}return lh&&d(t,e.Diagnostics.this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation),Th}function du(t){var n=e.getJSDocType(t);if(n&&279===n.kind){var r=n;if(r.parameters.length>0&&282===r.parameters[0].type.kind)return Mi(r.parameters[0].type)}}function pu(t,n){return!!e.findAncestor(t,function(e){return e===n?\"quit\":146===e.kind})}function fu(t){var n=181===t.parent.kind&&t.parent.expression===t,r=e.getSuperContainer(t,!0),a=!1;if(!n)for(;r&&187===r.kind;)r=e.getSuperContainer(r,!0),a=ah<2;var i=0;if(!function(t){return!!t&&(n?152===t.kind:!(!e.isClassLike(t.parent)&&178!==t.parent.kind)&&(32&e.getModifierFlags(t)?151===t.kind||150===t.kind||153===t.kind||154===t.kind:151===t.kind||150===t.kind||153===t.kind||154===t.kind||149===t.kind||148===t.kind||152===t.kind))}(r)){var o=e.findAncestor(t,function(e){return e===r?\"quit\":144===e.kind});return o&&144===o.kind?d(t,e.Diagnostics.super_cannot_be_referenced_in_a_computed_property_name):n?d(t,e.Diagnostics.Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors):r&&r.parent&&(e.isClassLike(r.parent)||178===r.parent.kind)?d(t,e.Diagnostics.super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class):d(t,e.Diagnostics.super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions),Dh}if(n||152!==r.kind||lu(t,r,e.Diagnostics.super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class),i=32&e.getModifierFlags(r)||n?512:256,S(t).flags|=i,151===r.kind&&256&e.getModifierFlags(r)&&(e.isSuperProperty(t.parent)&&e.isAssignmentTarget(t.parent)?S(r).flags|=4096:S(r).flags|=2048),a&&ou(t.parent,r),178===r.parent.kind)return ah<2?(d(t,e.Diagnostics.super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher),Dh):Th;var s=r.parent,c=yn(ke(s)),u=c&&tn(c)[0];return u?152===r.kind&&pu(t,r)?(d(t,e.Diagnostics.super_cannot_be_referenced_in_constructor_arguments),Dh):512===i?en(c):En(u,c.thisType):(e.getClassExtendsHeritageClauseElement(s)||d(t,e.Diagnostics.super_can_only_be_referenced_in_a_derived_class),Dh)}function gu(e){return 151!==e.kind&&153!==e.kind&&154!==e.kind||178!==e.parent.kind?186===e.kind&&261===e.parent.kind?e.parent.parent:void 0:e.parent}function mu(e){return 4&T(e)&&e.target===tv?e.typeArguments[0]:void 0}function yu(t){return Ec(t,function(t){return 131072&t.flags?e.forEach(t.types,mu):mu(t)})}function hu(e){if(187!==e.kind){if(po(e)){var t=Vu(e);if(t){var n=t.thisParameter;if(n)return jt(n)}}if(lh){var r=gu(e);if(r){for(var a=Lu(r),i=r,o=a;o;){var s=yu(o);if(s)return so(s,Ku(r));if(261!==i.parent.kind)break;o=Lu(i=i.parent.parent);}return a?ds(a):qd(r)}if(194===e.parent.kind&&58===e.parent.operatorToken.kind){var c=e.parent.left;if(179===c.kind||180===c.kind)return qd(c.expression)}}}}function vu(t){var n=t.parent;if(po(n)){var r=e.getImmediatelyInvokedFunctionExpression(n);if(r&&r.arguments){var a=e.indexOf(n.parameters,t);if(t.dotDotDotToken){for(var i=[],o=a;o<r.arguments.length;o++)i.push(as(ep(r.arguments[o])));return i.length?ja(ti(i)):void 0}var s=S(r),c=s.resolvedSignature;s.resolvedSignature=Dv;var u=a<r.arguments.length?as(ep(r.arguments[a])):t.initializer?void 0:Nh;return s.resolvedSignature=c,u}var l=Vu(n);if(l){var _=e.hasRestParameter(n),d=n.parameters.length-(_?1:0);if((a=e.indexOf(n.parameters,t))<d)return H_(l,a);if(_&&a===n.parameters.length-1&&Ho(l,n.parameters.length-1))return jt(e.lastOrUndefined(l.parameters))}}}function bu(t){var n=t.parent;if(t===n.initializer){var r=e.getEffectiveTypeAnnotationNode(n);if(r)return Mi(r);if(e.isInJavaScriptFile(n)){var a=yt(n);if(a)return a}if(146===n.kind){var i=vu(n);if(i)return i}if(e.isBindingPattern(n.name))return Dt(n.name,!0,!1);if(e.isBindingPattern(n.parent)){var o=n.parent.parent,s=n.propertyName||n.name;if(176!==o.kind){var c=e.getEffectiveTypeAnnotationNode(o);if(c&&!e.isBindingPattern(s)){var u=e.getTextOfPropertyName(s);if(u)return _t(Mi(c),u)}}}}}function xu(t){var n=e.getContainingFunction(t);if(n){var r=e.getFunctionFlags(n);if(1&r)return;var a=Tu(n);return 2&r?a&&Fp(a):a}}function ku(t){var n=e.getContainingFunction(t);if(n){var r=e.getFunctionFlags(n),a=Tu(n);if(a)return t.asteriskToken?a:Rf(a,0!=(2&r))}}function Su(t){for(;t.parent&&!e.isFunctionLike(t.parent);){if(146===t.parent.kind&&t.parent.initializer===t)return!0;t=t.parent;}return!1}function Tu(t){if(152===t.kind||e.getEffectiveReturnTypeNode(t)||Bf(t))return Lr(Pr(t));var n=Uu(t);return n?Lr(n):void 0}function Cu(t,n){var r=g_(t),a=e.indexOf(r,n);if(a>=0)return H_(R_(t),a)}function Du(e,t){if(183===e.parent.kind)return Cu(e.parent,t)}function Eu(t){var n=t.parent,r=n.operatorToken.kind;if(e.isAssignmentOperator(r)){if(0!==e.getSpecialPropertyAssignmentKind(n))return;if(t===n.right)return Qd(n.left)}else{if(54===r){var a=Bu(n);return a||t!==n.right||(a=Qd(n.left)),a}if((53===r||26===r)&&t===n.right)return Bu(n)}}function Nu(e,t){return Ec(e,function(e){var n=229376&e.flags?gr(e,t):void 0;return n?jt(n):void 0})}function Au(e,t){return Ec(e,function(e){return vr(e,t)})}function wu(t){return!!(65536&t.flags?e.forEach(t.types,es):es(t))}function Pu(t){if(e.Debug.assert(e.isObjectLiteralMethod(t)),!Kg(t))return Ou(t)}function Ou(t){var n=Lu(t.parent);if(n){if(!e.hasDynamicName(t)){var r=Nu(n,ke(t).name);if(r)return r}return Gu(t.name)&&Au(n,1)||Au(n,0)}}function Fu(t){var n=t.parent,r=Lu(n);if(r)return Nu(r,\"\"+e.indexOf(n.elements,t))||Au(r,1)||Ff(r,void 0,!1,!1,!1)}function Iu(e){var t=e.parent;return e===t.whenTrue||e===t.whenFalse?Bu(t):void 0}function Mu(t){var n=Bu(e.isJsxAttributeLike(t.parent)?t.parent.parent:t.parent.openingElement.attributes);if(n&&!dt(n)){if(e.isJsxAttribute(t.parent))return _t(n,t.parent.name.text);if(249===t.parent.kind){var r=gl();return r&&\"\"!==r?_t(n,r):Th}return n}}function Ru(t){var n=Bu(t.parent);if(e.isJsxAttribute(t)){if(!n||dt(n))return;return _t(n,t.name.text)}return n}function Lu(e){var t=Bu(e);return t&&_r(t)}function Bu(t){if(!Kg(t)){if(t.contextualType)return t.contextualType;var n=t.parent;switch(n.kind){case 226:case 146:case 149:case 148:case 176:return bu(t);case 187:case 219:return xu(t);case 197:return ku(n);case 181:case 182:return Cu(n,t);case 184:case 202:return Mi(n.type);case 194:return Eu(t);case 261:case 262:return Ou(n);case 263:return Lu(n.parent);case 177:return Fu(t);case 195:return Iu(t);case 205:return e.Debug.assert(196===n.parent.kind),Du(n.parent,t);case 185:return Bu(n);case 256:return Mu(n);case 253:case 255:return Ru(n);case 251:case 250:return Sl(n)}}}function Ku(t){return t=e.findAncestor(t,function(e){return!!e.contextualMapper}),t?t.contextualMapper:Hi}function ju(e,t){var n=mr(e,0);if(1===n.length){var r=n[0];if(!Ju(r,t))return r}}function Ju(t,n){for(var r=0;r<n.parameters.length;r++){var a=n.parameters[r];if(a.initializer||a.questionToken||a.dotDotDotToken||Cr(a))break}return n.parameters.length&&e.parameterIsThisKeyword(n.parameters[0])&&r--,(t.hasRestParameter?Number.MAX_VALUE:t.parameters.length)<r}function zu(e){return 186===e.kind||187===e.kind}function Uu(t){return zu(t)||e.isObjectLiteralMethod(t)?Vu(t):void 0}function qu(t){return e.isObjectLiteralMethod(t)?Pu(t):Lu(t)}function Vu(t){e.Debug.assert(151!==t.kind||e.isObjectLiteralMethod(t));var n=qu(t);if(n){if(!(65536&n.flags))return ju(n,t);for(var r,a=0,i=n.types;a<i.length;a++){var o=ju(i[a],t);if(o)if(r){if(!Wo(r[0],o,!1,!0,!0,mo))return;r.push(o);}else r=[o];}var s;return r&&((s=On(r[0])).resolvedReturnType=void 0,s.unionSignatures=r),s}}function $u(e,t){return ah<2&&rh.downlevelIteration&&Bm(e,1536),Of(ep(e.expression,t),e.expression,!1,!1)}function Wu(e){return 176===e.kind&&!!e.initializer||194===e.kind&&58===e.operatorToken.kind}function Hu(t,n){for(var r=t.elements,a=!1,i=[],o=e.isAssignmentTarget(t),s=0,c=r;s<c.length;s++){var u=c[s];if(o&&198===u.kind){var l=ep(u.expression,n),_=xr(l,1)||Ff(l,void 0,!1,!1,!1);_&&i.push(_);}else{var p=Hd(u,n);i.push(p);}a=a||198===u.kind;}if(!a){if(o&&i.length)return(p=Zr(qa(i))).pattern=t,p;var f=Lu(t);if(f&&wu(f)){var g=f.pattern;if(g&&(175===g.kind||177===g.kind))for(var m=g.elements,y=i.length;y<m.length;y++){var h=m[y];Wu(h)?i.push(f.typeArguments[y]):(200!==h.kind&&d(h,e.Diagnostics.Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value),i.push(Dh));}if(i.length)return qa(i)}}return ja(i.length?ti(i,!0):ch?Bh:Nh)}function Gu(e){return 144===e.kind?Xu(e):Zu(e.text)}function Xu(e){return Yu(el(e),84)}function Yu(e,t){return dt(e)||kd(e,t)}function Qu(e){return\"Infinity\"===e||\"-Infinity\"===e||\"NaN\"===e}function Zu(e){return(+e).toString()===e}function el(t){var n=S(t.expression);return n.resolvedType||(n.resolvedType=ep(t.expression),Yu(n.resolvedType,262774)?t_(t.expression,n.resolvedType,!0):d(t,e.Diagnostics.A_computed_property_name_must_be_of_type_string_number_symbol_or_any)),n.resolvedType}function tl(e,t,n,r){for(var a=[],i=0;i<n.length;i++)(0===r||Gu(e[i+t].name))&&a.push(jt(n[i]));return Vr(a.length?ti(a,!0):Eh,!1)}function nl(t,n){function r(){var e=_?Pv:m?tl(t.properties,h,o,0):void 0,n=y&&!_?tl(t.properties,h,o,1):void 0,r=Fe(t.symbol,i,th,th,e,n),s=rh.suppressExcessPropertyErrors?0:1048576;return r.flags|=4194304|s|14680064&f,r.objectFlags|=128,g&&(r.objectFlags|=512),a&&(r.pattern=t),6144&r.flags||(c|=14680064&r.flags),r}var a=e.isAssignmentTarget(t);dy(t,a);for(var i=e.createMap(),o=[],s=Jh,c=0,u=Lu(t),l=u&&u.pattern&&(174===u.pattern.kind||178===u.pattern.kind),_=!u&&e.isInJavaScriptFile(t),f=0,g=!1,m=!1,y=!1,h=0,v=0;v<t.properties.length;v++){var b=t.properties[v],x=b.symbol;if(261===b.kind||262===b.kind||e.isObjectLiteralMethod(b)){var k=void 0;261===b.kind?k=Gd(b,n):151===b.kind?k=Xd(b,n):(e.Debug.assert(262===b.kind),k=Hd(b.name,n)),f|=k.flags;E=p(4|x.flags,x.name);if(a)(261===b.kind&&Wu(b.initializer)||262===b.kind&&b.objectAssignmentInitializer)&&(E.flags|=67108864),e.hasDynamicName(b)&&(g=!0);else if(l&&!(512&T(u))){var S=gr(u,x.name);S?E.flags|=67108864&S.flags:rh.suppressExcessPropertyErrors||br(u,0)||d(b.name,e.Diagnostics.Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1,$e(x),He(u));}E.declarations=x.declarations,E.parent=x.parent,x.valueDeclaration&&(E.valueDeclaration=x.valueDeclaration),E.type=k,E.target=x,x=E;}else{if(263===b.kind){if(ah<2&&Bm(b,2),o.length>0&&(s=Si(s,r()),o=[],i=e.createMap(),m=!1,y=!1,f=0),!rl(k=ep(b.expression)))return d(b,e.Diagnostics.Spread_types_may_only_be_created_from_object_types),Dh;s=Si(s,k),h=v+1;continue}e.Debug.assert(153===b.kind||154===b.kind),Pg(b);}e.hasDynamicName(b)?Gu(b.name)?y=!0:m=!0:i.set(x.name,x),o.push(x);}if(l)for(var C=0,D=tr(u);C<D.length;C++){var E=D[C];i.get(E.name)||(67108864&E.flags||d(E.valueDeclaration||E.bindingElement,e.Diagnostics.Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value),i.set(E.name,E),o.push(E));}return s!==Jh?(o.length>0&&(s=Si(s,r())),32768&s.flags&&(s.flags|=c,s.flags|=1048576,s.objectFlags|=128,s.symbol=t.symbol),s):r()}function rl(t){return!!(16783361&t.flags||32768&t.flags&&!Xn(t)||196608&t.flags&&!e.forEach(t.types,function(e){return!rl(e)}))}function al(e){return wl(e),Dl()||Th}function il(e){return wl(e.openingElement),sl(e.closingElement.tagName)?_l(e.closingElement):ep(e.closingElement.tagName),Dl()||Th}function ol(e){return e.indexOf(\"-\")<0}function sl(t){return 179!==t.kind&&99!==t.kind&&e.isIntrinsicJsxName(t.text)}function cl(t,n,r){function a(e,t){var n=Fe(e,t,th,th,void 0,void 0);return n.flags|=37748736,n.objectFlags|=128,n}for(var i,o=t.attributes,s=e.createMap(),c=Jh,u=[],l=!1,_=!1,f=gl(),g=0,m=o.properties;g<m.length;g++){var y=m[g],h=y.symbol;if(e.isJsxAttribute(y)){var v=y.initializer?ep(y.initializer,r):Fh,b=p(134217732|h.flags,h.name);b.declarations=h.declarations,b.parent=h.parent,h.valueDeclaration&&(b.valueDeclaration=h.valueDeclaration),b.type=v,b.target=h,s.set(b.name,b),u.push(b),y.name.text===f&&(_=!0);}else e.Debug.assert(255===y.kind),u.length>0&&(c=Si(c,a(o.symbol,s)),u=[],s=e.createMap()),dt(v=ep(y.expression))&&(l=!0),rl(v)?c=Si(c,v):i=i?oi([i,v]):v;}if(!l){c!==Jh&&(u.length>0&&(c=Si(c,a(o.symbol,s))),u=tr(c)),s=e.createMap();for(var x=0,k=u;x<k.length;x++){var S=k[x];n&&!n(S)||s.set(S.name,S);}}var T=249===t.parent.kind?t.parent:void 0;if(T&&T.openingElement===t&&T.children.length>0){for(var C=[],D=0,E=T.children;D<E.length;D++){var N=E[D];10===N.kind?N.containsOnlyWhiteSpaces||C.push(Ph):C.push(ep(N,r));}if(!l&&f&&\"\"!==f){_&&d(o,e.Diagnostics._0_are_specified_twice_The_attribute_named_0_will_be_overwritten,f);var A=p(134217732,f);A.type=1===C.length?C[0]:ja(ti(C,!1)),s.set(f,A);}}if(l)return Th;var w=a(o.symbol,s);return i&&s.size?oi([i,w]):i||w}function ul(e,t){return cl(e.parent,void 0,t)}function ll(e){var t=fb.get(e);return void 0===t&&fb.set(e,t=Fa(gb.JSX,e)||Dh),t}function _l(t){var n=S(t);if(!n.resolvedSymbol){var r=ll(gb.IntrinsicElements);if(r!==Dh){var a=gr(r,t.tagName.text);return a?(n.jsxFlags|=1,n.resolvedSymbol=a):xr(r,0)?(n.jsxFlags|=2,n.resolvedSymbol=r.symbol):(d(t,e.Diagnostics.Property_0_does_not_exist_on_type_1,t.tagName.text,\"JSX.\"+gb.IntrinsicElements),n.resolvedSymbol=kh)}return uh&&d(t,e.Diagnostics.JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists,gb.IntrinsicElements),n.resolvedSymbol=kh}return n.resolvedSymbol}function dl(t,n){if(e.Debug.assert(!(65536&n.flags)),dt(n))return Th;var r=yr(n,1);if(0===r.length&&0===(r=yr(n,0)).length)return d(t.tagName,e.Diagnostics.JSX_element_type_0_does_not_have_any_construct_or_call_signatures,e.getTextOfNode(t.tagName)),Dh;for(var a=[],i=0,o=r;i<o.length;i++){var s=o[i];if(s.typeParameters){var c=wr(void 0,s.typeParameters,0);a.push(Kr(s,c));}else a.push(s);}return ti(e.map(a,Lr),!0)}function pl(t){var n=ya(gb.JSX,1920,void 0),r=n&&D(n.exports,t,793064),a=r&&yn(r),i=a&&tr(a);if(i){if(0===i.length)return\"\";if(1===i.length)return i[0].name;i.length>1&&d(r.declarations[0],e.Diagnostics.The_global_type_JSX_0_may_not_have_more_than_one_property,t);}}function fl(){return db||(db=!0,ab=pl(gb.ElementAttributesPropertyNameContainer)),ab}function gl(){return pb||(pb=!0,ib=pl(gb.ElementChildrenAttributeNameContainer)),ib}function ml(e){if(e){if(131072&e.flags){for(var t=[],n=0,r=e.types;n<r.length;n++){var a=r[n];t.push(_r(a));}return oi(t)}return _r(e)}}function yl(t,n,r,a){if(e.Debug.assert(!(65536&n.flags)),!a||!vo(r,a)){var i=El();if(i){var o=O_(t,n,void 0);if(o!==Ev){var s=o&&Lr(o),c=s&&(0===o.parameters.length?Jh:jt(o.parameters[0]));if(c=ml(c),s&&vo(s,i)){var u=ll(gb.IntrinsicAttributes);return u!==Dh&&(c=Kn(u,c)),c}}}}}function hl(t,n,r,a){if(e.Debug.assert(!(65536&n.flags)),!a||!vo(r,a)){var i=El();if(i){var o=[];O_(t,n,o);for(var s=void 0,c=void 0,u=0,l=o;u<l.length;u++){var _=l[u],d=Lr(_),p=d&&(0===_.parameters.length?Jh:jt(_.parameters[0]));if(p=ml(p),d&&vo(d,i)){for(var f=!0,g=0,m=t.attributes.properties;g<m.length;g++){var y=m[g];if(e.isJsxAttribute(y)&&ol(y.name.text)&&!gr(p,y.name.text)){f=!1;break}}f&&(s=Kn(s,p)),c=Kn(c,p);}}s||(s=c);var h=ll(gb.IntrinsicAttributes);return h!==Dh&&(s=Kn(h,s)),s}}}function vl(t,n,r,a){if(r||(r=ep(t.tagName)),65536&r.flags)return ti(r.types.map(function(e){return vl(t,n,e,a)}),!0);if(2&r.flags)return Th;if(32&r.flags){var i=ll(gb.IntrinsicElements);if(i!==Dh){var o=r.value,s=gr(i,o);if(s)return jt(s);var c=xr(i,0);if(c)return c;d(t,e.Diagnostics.Property_0_does_not_exist_on_type_1,o,\"JSX.\"+gb.IntrinsicElements);}return Th}var u=dl(t,r),l=n?hl(t,r,u,a):yl(t,r,u,a);if(l)return l;if(a&&Ro(u,a,yb,t,e.Diagnostics.JSX_element_type_0_is_not_a_constructor_function_for_JSX_elements),dt(u))return u;var _=fl();if(void 0===_)return Th;if(\"\"===_)return u;var p=_t(u,_);if(p){if(dt(p)||p===Dh)return p;var f=p,g=ll(gb.IntrinsicClassAttributes);if(g!==Dh){var m=Wt(g.symbol);m?1===m.length&&(f=Kn(Qr(g,[u]),f)):f=Kn(p,g);}var y=ll(gb.IntrinsicAttributes);return y!==Dh&&(f=Kn(y,f)),f}return Jh}function bl(t){e.Debug.assert(sl(t.tagName));var n=S(t);if(!n.resolvedJsxElementAttributesType){var r=_l(t);return 1&n.jsxFlags?n.resolvedJsxElementAttributesType=jt(r):2&n.jsxFlags?n.resolvedJsxElementAttributesType=$r(r,0).type:n.resolvedJsxElementAttributesType=Dh}return n.resolvedJsxElementAttributesType}function xl(e,t){var n=S(e);if(!n.resolvedJsxElementAttributesType){var r=Cl();return n.resolvedJsxElementAttributesType=vl(e,t,void 0,r)}return n.resolvedJsxElementAttributesType}function kl(e){return sl(e.tagName)?bl(e):xl(e,!0)}function Sl(e){return sl(e.tagName)?bl(e):xl(e,!1)}function Tl(e){return gr(Sl(e.parent.parent),e.name.text)||kh}function Cl(){return hv||(hv=Fa(gb.JSX,gb.ElementClass)),hv}function Dl(){return vv||(vv=Fa(gb.JSX,gb.Element)),vv}function El(){if(!bv){var e=Dl();e&&(bv=ti([e,Ah]));}return bv}function Nl(){var e=ll(gb.IntrinsicElements);return e?tr(e):th}function Al(t){0===(rh.jsx||0)&&d(t,e.Diagnostics.Cannot_use_JSX_unless_the_jsx_flag_is_provided),void 0===Dl()&&uh&&d(t,e.Diagnostics.JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist);}function wl(t){py(t),Al(t);var n=tb&&2===rh.jsx?e.Diagnostics.Cannot_find_name_0:void 0,r=c(),a=A(t.tagName,r,107455,n,r);a&&(a.isReferenced=!0,8388608&a.flags&&!hm(ne(a))&&ae(a)),Ol(t);}function Pl(e,t,n){if(32768&e.flags){var r=Yn(e);if(r.stringIndexInfo||r.numberIndexInfo&&Zu(t)||Zn(e,t)||n&&!ol(t))return!0}else if(196608&e.flags)for(var a=0,i=e.types;a<i.length;a++)if(Pl(i[a],t,n))return!0;return!1}function Ol(t){var n=sl(t.tagName)?bl(t):xl(t,!1),r=cl(t,function(e){return ol(e.name)||!!gr(n,e.name)});if(n===Jh&&(dt(r)||r.properties.length>0))d(t,e.Diagnostics.JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property,fl());else if(So(r,n,t.attributes.properties.length>0?t.attributes:t)&&!dt(r)&&!dt(n))for(var a=0,i=t.attributes.properties;a<i.length;a++){var o=i[a];if(e.isJsxAttribute(o)&&!Pl(n,o.name.text,!0)){d(o,e.Diagnostics.Property_0_does_not_exist_on_type_1,o.name.text,He(n));break}}}function Fl(t,n){if(t.expression){var r=ep(t.expression,n);return t.dotDotDotToken&&r!==Th&&!Qo(r)&&d(t,e.Diagnostics.JSX_spread_child_must_be_an_array_type,t.toString(),He(r)),r}return Dh}function Il(e){return e.valueDeclaration?e.valueDeclaration.kind:149}function Ml(t){return t.valueDeclaration?e.getCombinedNodeFlags(t.valueDeclaration):0}function Rl(t){return!!(8192&t.flags||4&e.getCheckFlags(t))}function Ll(t,n,r,a){var i=e.getDeclarationModifierFlagsFromSymbol(a),o=179===t.kind||226===t.kind?t.name:t.right;if(256&e.getCheckFlags(a))return d(o,e.Diagnostics.Property_0_has_conflicting_declarations_and_is_inaccessible_in_type_1,$e(a),He(r)),!1;if(97===n.kind){if(ah<2&&Lo(a,function(e){var t=Il(e);return 151!==t&&150!==t}))return d(o,e.Diagnostics.Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword),!1;if(128&i)return d(o,e.Diagnostics.Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression,$e(a),He(Bo(a))),!1}if(!(24&i))return!0;if(8&i)return!!$g(t,rg(Se(a)))||(d(o,e.Diagnostics.Property_0_is_private_and_only_accessible_within_class_1,$e(a),He(Bo(a))),!1);if(97===n.kind)return!0;var s=Vg(t,function(e){var t=yn(ke(e));return Jo(t,a)?t:void 0});return s?!!(32&i)||(16384&r.flags&&r.isThisType&&(r=ar(r)),!!(3&T(zt(r))&&Ut(r,s))||(d(o,e.Diagnostics.Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1,$e(a),He(s)),!1)):(d(o,e.Diagnostics.Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses,$e(a),He(Bo(a)||r)),!1)}function Bl(e){return Kl(ep(e),e)}function Kl(t,n){var r=6144&(ch?ss(t):t.flags);if(r){d(n,2048&r?4096&r?e.Diagnostics.Object_is_possibly_null_or_undefined:e.Diagnostics.Object_is_possibly_undefined:e.Diagnostics.Object_is_possibly_null);var a=ds(t);return 14336&a.flags?Dh:a}return t}function jl(e){return zl(e,e.expression,e.name)}function Jl(e){return zl(e,e.left,e.right)}function zl(t,n,r){var a=Bl(n);if(dt(a)||a===Kh)return a;var i=_r(bs(a));if(i===Dh||16384&a.flags&&dt(i))return i;var o=gr(i,r.text);if(!o){var s=xr(i,0);return s||(r.text&&!F(t)&&Ul(r,16384&a.flags&&a.isThisType?i:a),Dh)}o.valueDeclaration&&(Hl(t)&&!N(o.valueDeclaration,r)&&d(r,e.Diagnostics.Block_scoped_variable_0_used_before_its_declaration,r.text),229!==o.valueDeclaration.kind||!t.parent||159===t.parent.kind||e.isInAmbientContext(o.valueDeclaration)||N(o.valueDeclaration,r)||d(r,e.Diagnostics.Class_0_used_before_its_declaration,r.text)),Wl(o),S(t).resolvedSymbol=o,Ll(t,n,i,o);var c=tu(o,t),u=e.getAssignmentTargetKind(t);if(u&&(dd(t,o)||pd(t)))return d(r,e.Diagnostics.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,r.text),Dh;if(!(179===t.kind&&1!==u&&(98311&o.flags||8192&o.flags&&65536&c.flags)))return c;var l=Vc(t,c);return u?rs(l):l}function Ul(t,n){var r;if(65536&n.flags&&!(8190&n.flags))for(var a=0,i=n.types;a<i.length;a++){var o=i[a];if(!gr(o,t.text)){r=e.chainDiagnosticMessages(r,e.Diagnostics.Property_0_does_not_exist_on_type_1,e.declarationNameToString(t),He(o));break}}var s=ql(t,n);r=s?e.chainDiagnosticMessages(r,e.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2,e.declarationNameToString(t),He(n),s):e.chainDiagnosticMessages(r,e.Diagnostics.Property_0_does_not_exist_on_type_1,e.declarationNameToString(t),He(n)),tb.add(e.createDiagnosticForNodeFromMessageChain(t,r));}function ql(e,t){var n=$l(e.text,Qn(t),107455);return n&&n.name}function Vl(t,n,r){var a=w(t,n,r,void 0,n,function(t,n,r){var a=D(t,n,r);return a||$l(n,e.arrayFrom(t.values()),r)});if(a)return a.name}function $l(t,n,r){var a=.4*t.length,i=Math.min(3,.34*t.length),o=Number.MAX_VALUE,s=void 0,c=!1;if(!(t.length>30)){t=t.toLowerCase();for(var u=0,l=n;u<l.length;u++){var _=l[u];if(_.flags&r&&_.name&&Math.abs(_.name.length-t.length)<i){var d=_.name.toLowerCase();if(d===t)return _;if(c)continue;if(d.length<3||t.length<3||\"eval\"===d||\"intl\"===d||\"undefined\"===d||\"map\"===d||\"nan\"===d||\"set\"===d)continue;var p=e.levenshtein(t,d);if(p>a)continue;p<3?(c=!0,s=_):p<o&&(o=p,s=_);}}return s}}function Wl(t){t&&oh&&106500&t.flags&&t.valueDeclaration&&8&e.getModifierFlags(t.valueDeclaration)&&(1&e.getCheckFlags(t)?k(t).target.isReferenced=!0:t.isReferenced=!0);}function Hl(e){for(;e;){if(e.parent&&149===e.parent.kind&&e.parent.initializer===e)return!0;e=e.parent;}return!1}function Gl(e,t){var n=179===e.kind?e.expression:e.left;return Xl(e,n,t,bs(ep(n)))}function Xl(t,n,r,a){if(a!==Dh&&!dt(a)){var i=gr(a,r);if(i)return Ll(t,n,a,i);if(e.isInJavaScriptFile(n)&&65536&a.flags)for(var o=0,s=a.types;o<s.length;o++)if(Xl(t,n,r,s[o]))return!0;return!1}return!0}function Yl(t){var n=t.initializer;if(227===n.kind){var r=n.declarations[0];if(r&&!e.isBindingPattern(r.name))return ke(r)}else if(71===n.kind)return Bs(n)}function Ql(e){return xr(e,1)&&!xr(e,0)}function Zl(t){var n=e.skipParentheses(t);if(71===n.kind){var r=Bs(n);if(3&r.flags)for(var a=t,i=t.parent;i;){if(215===i.kind&&a===i.statement&&Yl(i)===r&&Ql(Qd(i.expression)))return!0;a=i,i=i.parent;}}return!1}function e_(t){var n=Bl(t.expression),r=t.argumentExpression;if(!r){var a=e.getSourceFileOfNode(t);if(182===t.parent.kind&&t.parent.expression===t)Oy(a,i=e.skipTrivia(a.text,t.expression.end),(o=t.end)-i,e.Diagnostics.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead);else{var i=t.end-\"]\".length,o=t.end;Oy(a,i,o-i,e.Diagnostics.Expression_expected);}return Dh}var s=Zl(r)?Oh:ep(r);return n===Dh||n===Kh?n:Sd(n)&&9!==r.kind?(d(r,e.Diagnostics.A_const_enum_member_can_only_be_accessed_using_a_string_literal),Dh):Dp(yi(n,s,t),t)}function t_(t,n,r){if(n===Dh)return!1;if(!e.isWellKnownSymbolSyntactically(t))return!1;if(0==(512&n.flags))return r&&d(t,e.Diagnostics.A_computed_property_name_of_the_form_0_must_be_of_type_symbol,e.getTextOfNode(t)),!1;var a=t.expression,i=Bs(a);if(!i)return!1;var o=xa(!0);return!!o&&(i===o||(r&&d(a,e.Diagnostics.Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object),!1))}function n_(t){return e.isCallOrNewExpression(t)}function r_(t){return n_(t)&&e.forEach(t.typeArguments,wg),183===t.kind?ep(t.template):147!==t.kind&&e.forEach(t.arguments,function(e){ep(e);}),Dv}function a_(e){return r_(e),Ev}function i_(t,n){var r,a,i,o,s=0,c=-1;e.Debug.assert(!n.length);for(var u=0,l=t;u<l.length;u++){var _=l[u],d=_.declaration&&ke(_.declaration),p=_.declaration&&_.declaration.parent;a&&d!==a?(i=s=n.length,r=p):r&&p===r?i++:(r=p,i=s),a=d,_.hasLiteralTypes?(o=++c,s++):o=i,n.splice(o,0,_);}}function o_(e){for(var t=0;t<e.length;t++){var n=e[t];if(n&&198===n.kind)return t}return-1}function s_(t,n,r,a){void 0===a&&(a=!1);var i,o,s,c=-1;if(e.isJsxOpeningLikeElement(t))return!0;if(183===t.kind){var u=t;if(i=n.length,o=void 0,196===u.template.kind){var l=u.template,_=e.lastOrUndefined(l.templateSpans);e.Debug.assert(void 0!==_),s=e.nodeIsMissing(_.literal)||!!_.literal.isUnterminated;}else{var d=u.template;e.Debug.assert(13===d.kind),s=!!d.isUnterminated;}}else if(147===t.kind)!0,o=void 0,i=m_(t,void 0,r);else{var p=t;if(!p.arguments)return e.Debug.assert(182===p.kind),0===r.minArgumentCount;i=a?n.length+1:n.length,s=p.arguments.end===p.end,o=p.typeArguments,c=o_(n);}var f=e.length(r.typeParameters),g=Ar(r.typeParameters);if(!(!o||o.length>=g&&o.length<=f))return!1;if(c>=0)return Ho(r,c)||c>=r.minArgumentCount;if(!r.hasRestParameter&&i>r.parameters.length)return!1;var m=i>=r.minArgumentCount;return s||m}function c_(e){if(32768&e.flags){var t=Yn(e);if(1===t.callSignatures.length&&0===t.constructSignatures.length&&0===t.properties.length&&!t.stringIndexInfo&&!t.numberIndexInfo)return t.callSignatures[0]}}function u_(e,t,n){var r=Cs(e,1);return Ts(t,e,function(e,t){Os(r.inferences,so(e,n||Hi),t);}),n||Os(r.inferences,Lr(t),Lr(e),4),Kr(e,Ls(r))}function l_(t,n,r,a,i){for(var o=i.inferences,s=0;s<o.length;s++)o[s].isFixed||(o[s].inferredType=void 0);if(e.isExpression(t)){var c=Bu(t);if(c){var u=so(c,Wi(Ku(t))),l=c_(u),_=l&&l.typeParameters?zr(Kr(l,l.typeParameters)):u,d=Lr(n);Os(i.inferences,_,d,4);}}var p=Rr(n);if(p){var f=f_(t),g=f?ep(f):Lh;Os(i.inferences,g,p);}for(var m=m_(t,r,n),s=0;s<m;s++)if(void 0===(v=k_(t,r,s))||200!==v.kind){var y=H_(n,s),h=x_(t,s);void 0===h&&(h=Ud(v,y,a&&void 0!==a[s]?Hi:i)),Os(i.inferences,h,y);}if(a)for(s=0;s<m;s++)if(!1===a[s]){var v=r[s],y=H_(n,s);Os(i.inferences,Ud(v,y,i),y);}return Ls(i)}function __(t,n,r,a,i){for(var o,s=t.typeParameters,c=!0,u=0;u<n.length;u++)if(c){var l=ar(s[u]);if(l){var _=void 0,d=e.Diagnostics.Type_0_does_not_satisfy_the_constraint_1;a&&i&&(_=e.chainDiagnosticMessages(_,d),d=i),o||(o=Ui(s,r));var p=r[u];c=So(p,En(so(l,o),p),a?n[u]:void 0,d,_);}}return c}function d_(t,n,r){if(t.attributes.end===t.end)return!0;for(var a=e.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1,i=H_(n,0),o=Ud(t.attributes,i,void 0),s=0,c=tr(o);s<c.length;s++){var u=c[s];if(!gr(i,u.name)&&ol(u.name))return!1}return Ro(o,i,r,void 0,a)}function p_(t,n,r,a,i,o){if(e.isJsxOpeningLikeElement(t))return d_(t,r,a);var s=Rr(r);if(s&&s!==Lh&&182!==t.kind){var c=f_(t),u=c?ep(c):Lh,l=o?c||t:void 0,_=e.Diagnostics.The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1;if(!Ro(u,Rr(r),a,l,_))return!1}for(var d=e.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1,p=m_(t,n,r),f=0;f<p;f++){var g=k_(t,n,f);if(void 0===g||200!==g.kind){var m=H_(r,f),y=x_(t,f);if(void 0===y&&(y=Ud(g,m,i&&i[f]?Hi:void 0)),!Ro(y,m,a,l=o?S_(t,f,g):void 0,d))return!1}}return!0}function f_(e){if(181===e.kind){var t=e.expression;if(179===t.kind)return t.expression;if(180===t.kind)return t.expression}}function g_(t){var n;if(183===t.kind){var r=t.template;n=[void 0],196===r.kind&&e.forEach(r.templateSpans,function(e){n.push(e.expression);});}else{if(147===t.kind)return;n=e.isJsxOpeningLikeElement(t)?t.attributes.properties.length>0?[t.attributes]:th:t.arguments||th;}return n}function m_(e,t,n){if(147!==e.kind)return t.length;switch(e.parent.kind){case 229:case 199:return 1;case 149:return 2;case 151:case 153:case 154:return 0===ah?2:n.parameters.length>=3?3:2;case 146:return 3}}function y_(t){if(229===t.kind)return jt(n=ke(t));if(146===t.kind&&152===(t=t.parent).kind){var n=ke(t);return jt(n)}return 149===t.kind||151===t.kind||153===t.kind||154===t.kind?am(t):(e.Debug.fail(\"Unsupported decorator target.\"),Dh)}function h_(t){if(229===t.kind)return e.Debug.fail(\"Class decorators should not have a second synthetic argument.\"),Dh;if(146===t.kind&&152===(t=t.parent).kind)return Th;if(149===t.kind||151===t.kind||153===t.kind||154===t.kind){var n=t;switch(n.name.kind){case 71:case 8:case 9:return Ai(n.name.text);case 144:var r=el(n.name);return kd(r,512)?r:Ph;default:return e.Debug.fail(\"Unsupported property name.\"),Dh}}return e.Debug.fail(\"Unsupported decorator target.\"),Dh}function v_(t){return 229===t.kind?(e.Debug.fail(\"Class decorators should not have a third synthetic argument.\"),Dh):146===t.kind?Oh:149===t.kind?(e.Debug.fail(\"Property decorators should not have a third synthetic argument.\"),Dh):151===t.kind||153===t.kind||154===t.kind?Ma(em(t)):(e.Debug.fail(\"Unsupported decorator target.\"),Dh)}function b_(t,n){return 0===n?y_(t.parent):1===n?h_(t.parent):2===n?v_(t.parent):(e.Debug.fail(\"Decorators should not have a fourth synthetic argument.\"),Dh)}function x_(e,t){return 147===e.kind?b_(e,t):0===t&&183===e.kind?ba():void 0}function k_(e,t,n){if(147!==e.kind&&(0!==n||183!==e.kind))return t[n]}function S_(e,t,n){return 147===e.kind?e.expression:0===t&&183===e.kind?e.template:n}function T_(t,n,r,a){function i(n,r,a){void 0===a&&(a=!1),g=void 0,m=void 0;for(var i=0,s=n;i<s.length;i++){var c=s[i];if(s_(t,p,c,a))for(var u=void 0,l=c.typeParameters?Cs(c,e.isInJavaScriptFile(t)?4:0):void 0;;){if((u=c).typeParameters){var _=void 0;if(o){if(_=wr(e.map(o,Mi),u.typeParameters,Ar(u.typeParameters)),!__(u,o,_,!1)){m=c;break}}else _=l_(t,u,p,d,l);u=Kr(u,_);}if(!p_(t,p,u,r,d,!1)){g=u;break}var f=d?e.indexOf(d,!0):-1;if(f<0)return u;d[f]=!1;}}}var o,c=183===t.kind,u=147===t.kind,l=e.isJsxOpeningLikeElement(t);c||u||l||(o=t.typeArguments,97!==t.expression.kind&&e.forEach(o,wg));var _=r||[];if(i_(n,_),!_.length)return tb.add(e.createDiagnosticForNode(t,e.Diagnostics.Call_target_does_not_contain_any_signatures)),a_(t);var d,p=g_(t);if(!u)for(var f=c?1:0;f<p.length;f++)lo(p[f])&&(d||(d=new Array(p.length)),d[f]=!0);var g,m,y,h=r&&181===t.kind&&t.arguments.hasTrailingComma;if(_.length>1&&(y=i(_,mb,h)),y||(y=i(_,yb,h)),y)return y;if(g){if(l)return g;p_(t,p,g,yb,void 0,!0);}else if(m){var v=t.typeArguments;__(m,v,e.map(v,Mi),!0,a);}else if(o&&e.every(n,function(t){return e.length(t.typeParameters)!==o.length})){for(var b=Number.POSITIVE_INFINITY,x=Number.NEGATIVE_INFINITY,k=0,S=n;k<S.length;k++){D=S[k];b=Math.min(b,Ar(D.typeParameters)),x=Math.max(x,e.length(D.typeParameters));}A=b<x?b+\"-\"+x:b;tb.add(e.createDiagnosticForNode(t,e.Diagnostics.Expected_0_type_arguments_but_got_1,A,o.length));}else if(p){for(var b=Number.POSITIVE_INFINITY,x=Number.NEGATIVE_INFINITY,T=0,C=n;T<C.length;T++){var D=C[T];b=Math.min(b,D.minArgumentCount),x=Math.max(x,D.parameters.length);}var E=e.some(n,function(e){return e.hasRestParameter}),N=o_(p)>-1,A=E?b:b<x?b+\"-\"+x:b,w=p.length-(N?1:0),P=E&&N?e.Diagnostics.Expected_at_least_0_arguments_but_got_a_minimum_of_1:E?e.Diagnostics.Expected_at_least_0_arguments_but_got_1:N?e.Diagnostics.Expected_0_arguments_but_got_a_minimum_of_1:e.Diagnostics.Expected_0_arguments_but_got_1;tb.add(e.createDiagnosticForNode(t,P,A,w));}else a&&tb.add(e.createDiagnosticForNode(t,a));if(!s)for(var O=0,F=_;O<F.length;O++){var I=F[O];if(s_(t,p,I))return I.typeParameters&&o&&(I=Kr(I,e.map(o,Mi))),I}return a_(t)}function C_(t,n){if(97===t.expression.kind){var r=fu(t.expression);if(r!==Dh){var a=e.getClassExtendsHeritageClauseElement(e.getContainingClass(t));if(a)return T_(t,Zt(r,a.typeArguments,a),n)}return r_(t)}var i=Bl(t.expression);if(i===Kh)return Av;var o=_r(i);if(o===Dh)return a_(t);var s=yr(o,0),c=yr(o,1);return D_(i,o,s.length,c.length)?(i!==Dh&&t.typeArguments&&d(t,e.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments),r_(t)):s.length?T_(t,s,n):(c.length?d(t,e.Diagnostics.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new,He(i)):d(t,e.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,He(o)),a_(t))}function D_(e,t,n,r){return!!dt(e)||(!!(dt(t)&&16384&e.flags)||!n&&!r&&(!(65536&e.flags)&&vo(e,Hh)))}function E_(t,n){if(t.arguments&&ah<1){var r=o_(t.arguments);r>=0&&d(t.arguments[r],e.Diagnostics.Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher);}var a=Bl(t.expression);if(a===Kh)return Av;if((a=_r(a))===Dh)return a_(t);var i=a.symbol&&rg(a.symbol);if(i&&128&e.getModifierFlags(i))return d(t,e.Diagnostics.Cannot_create_an_instance_of_the_abstract_class_0,e.declarationNameToString(e.getNameOfDeclaration(i))),a_(t);if(dt(a))return t.typeArguments&&d(t,e.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments),r_(t);var o=yr(a,1);if(o.length)return N_(t,o[0])?T_(t,o,n):a_(t);var s=yr(a,0);if(s.length){var c=T_(t,s,n);return L_(c.declaration)||Lr(c)===Lh||d(t,e.Diagnostics.Only_a_void_function_can_be_called_with_the_new_keyword),Rr(c)===Lh&&d(t,e.Diagnostics.A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void),c}return d(t,e.Diagnostics.Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature),a_(t)}function N_(t,n){if(!n||!n.declaration)return!0;var r=n.declaration,a=e.getModifierFlags(r);if(!(24&a))return!0;var i=rg(r.parent.symbol),o=yn(r.parent.symbol);if(!$g(t,i)){var s=e.getContainingClass(t);if(s)for(var c=tn(em(s));c.length;){var u=c[0];if(16&a&&u.symbol===r.parent.symbol)return!0;c=tn(u);}return 8&a&&d(t,e.Diagnostics.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration,He(o)),16&a&&d(t,e.Diagnostics.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration,He(o)),!1}return!0}function A_(t,n){var r=ep(t.tag),a=_r(r);if(a===Dh)return a_(t);var i=yr(a,0),o=yr(a,1);return D_(r,a,i.length,o.length)?r_(t):i.length?T_(t,i,n):(d(t,e.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,He(a)),a_(t))}function w_(t){switch(t.parent.kind){case 229:case 199:return e.Diagnostics.Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression;case 146:return e.Diagnostics.Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression;case 149:return e.Diagnostics.Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression;case 151:case 153:case 154:return e.Diagnostics.Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression}}function P_(t,n){var r=ep(t.expression),a=_r(r);if(a===Dh)return a_(t);var i=yr(a,0),o=yr(a,1);if(D_(r,a,i.length,o.length))return r_(t);var s=w_(t);if(!i.length){var c=void 0;return c=e.chainDiagnosticMessages(c,e.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,He(a)),c=e.chainDiagnosticMessages(c,s),tb.add(e.createDiagnosticForNodeFromMessageChain(t,c)),a_(t)}return T_(t,i,n,s)}function O_(t,n,r){return e.Debug.assert(!(65536&n.flags)),F_(t,n,r)}function F_(e,t,n){if(65536&t.flags){for(var r=void 0,a=0,i=t.types;a<i.length;a++){var o=i[a];r=r||F_(e,o,n);}return r}var s=t&&yr(t,0);if(s&&s.length>0){return T_(e,s,n)}}function I_(t,n){switch(t.kind){case 181:return C_(t,n);case 182:return E_(t,n);case 183:return A_(t,n);case 147:return P_(t,n);case 251:case 250:return F_(t,ep(t.tagName),n)}e.Debug.fail(\"Branch in 'resolveSignature' should be unreachable.\");}function M_(e,t){var n=S(e),r=n.resolvedSignature;if(r&&r!==Nv&&!t)return r;n.resolvedSignature=Nv;var a=I_(e,t);return n.resolvedSignature=Fv===Iv?a:r,a}function R_(e){return S(e).resolvedSignature===Nv?Nv:M_(e)}function L_(t){if(e.isInJavaScriptFile(t)){if(e.getJSDocClassTag(t))return!0;var n=e.isFunctionDeclaration(t)||e.isFunctionExpression(t)?ke(t):e.isVariableDeclaration(t)&&e.isFunctionExpression(t.initializer)?ke(t.initializer):void 0;return n&&void 0!==n.members}return!1}function B_(e){var t=k(e);return t.inferredClassType||(t.inferredClassType=Fe(e,e.members||nh,th,th,void 0,void 0)),t.inferredClassType}function K_(e){return e.symbol&&16&T(e)&&k(e.symbol).inferredClassType===e}function j_(t){ny(t,t.typeArguments)||ay(t,t.arguments);var n=M_(t);if(97===t.expression.kind)return Lh;if(182===t.kind){var r=n.declaration;if(r&&152!==r.kind&&156!==r.kind&&161!==r.kind&&!e.isJSDocConstructSignature(r)){var a=71===t.expression.kind?Bs(t.expression):ep(t.expression).symbol;return a&&e.isDeclarationOfFunctionOrClassExpression(a)&&(a=ke(a.valueDeclaration.initializer)),a&&16&a.flags&&(a.members||e.getJSDocClassTag(a.valueDeclaration))?B_(a):(uh&&d(t,e.Diagnostics.new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type),Th)}}return e.isInJavaScriptFile(t)&&z_(t)?Mr(t.arguments[0]):Lr(n)}function J_(t){if(ay(t,t.arguments)||qy(t),0===t.arguments.length)return td(t,Th);for(var n=t.arguments[0],r=qd(n),a=1;a<t.arguments.length;++a)qd(t.arguments[a]);(2048&r.flags||4096&r.flags||!vo(r,Ph))&&d(n,e.Diagnostics.Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0,He(r));var i=ce(t,n);if(i){var o=de(i,n,!0);if(o)return td(t,jt(o))}return td(t,Th)}function z_(t){if(!e.isRequireCall(t,!0))return!1;var n=A(t.expression,t.expression.text,107455,void 0,void 0);if(!n)return!0;if(8388608&n.flags)return!1;var r=16&n.flags?228:3&n.flags?226:0;if(0!==r){var a=e.getDeclarationOfKind(n,r);return e.isInAmbientContext(a)}return!1}function U_(e){return Lr(M_(e))}function q_(t){var n=ms(rs(ep(t.expression)));wg(t.type);var r=Mi(t.type);return s&&r!==Dh&&(xo(r,bs(n))||To(n,r,t,e.Diagnostics.Type_0_cannot_be_converted_to_type_1)),r}function V_(e){return ds(ep(e.expression))}function $_(t){Ay(t);var n=e.getNewTargetContainer(t);if(n){if(152===n.kind)return jt(r=ke(n.parent));var r=ke(n);return jt(r)}return d(t,e.Diagnostics.Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constructor,\"new.target\"),Dh}function W_(e){var t=jt(e);if(ch){var n=e.valueDeclaration;if(n&&n.initializer)return _s(t,2048)}return t}function H_(e,t){return e.hasRestParameter?t<e.parameters.length-1?W_(e.parameters[t]):Br(e):t<e.parameters.length?W_(e.parameters[t]):Th}function G_(e){return e.parameters.length>0?H_(e,0):Bh}function X_(t,n,r){for(var a=t.parameters.length-(t.hasRestParameter?1:0),i=0;i<a;i++){var o=t.parameters[i].valueDeclaration;if(o.type){var s=e.getEffectiveTypeAnnotationNode(o);s&&Os(r.inferences,Mi(s),H_(n,i));}}}function Y_(t,n){t.typeParameters=n.typeParameters,n.thisParameter&&(!(i=t.thisParameter)||i.valueDeclaration&&!i.valueDeclaration.type)&&(i||(t.thisParameter=fs$$1(n.thisParameter,void 0)),Z_(t.thisParameter,jt(n.thisParameter)));for(var r=t.parameters.length-(t.hasRestParameter?1:0),a=0;a<r;a++){i=t.parameters[a];e.getEffectiveTypeAnnotationNode(i.valueDeclaration)||Z_(i,o=H_(n,a));}if(t.hasRestParameter&&Ho(n,t.parameters.length-1)){var i=e.lastOrUndefined(t.parameters);if(!e.getEffectiveTypeAnnotationNode(i.valueDeclaration)){var o=jt(e.lastOrUndefined(n.parameters));Z_(i,o);}}}function Q_(t){if(e.isBindingPattern(t.name))for(var n=0,r=t.name.elements;n<r.length;n++){var a=r[n];e.isOmittedExpression(a)||(71===a.name.kind&&(k(ke(a)).type=mt(a)),Q_(a));}}function Z_(t,n){var r=k(t);if(!r.type){r.type=n;var a=e.getNameOfDeclaration(t.valueDeclaration);r.type!==Jh||174!==a.kind&&175!==a.kind||(r.type=Dt(a)),Q_(t.valueDeclaration);}}function ed(e){var t=Sa(!0);return t!==qh?(e=Rp(e)||Jh,Qr(t,[e])):Jh}function td(t,n){var r=ed(n);return r===Jh?(d(t,e.isImportCall(t)?e.Diagnostics.A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option:e.Diagnostics.An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option),Dh):(Ta(!0)||d(t,e.isImportCall(t)?e.Diagnostics.A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option:e.Diagnostics.An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option),r)}function nd(t,n){var r=Uu(t);if(!t.body)return Dh;var a,i=e.getFunctionFlags(t);if(207!==t.body.kind)a=qd(t.body,n),2&i&&(a=Mp(a,t,e.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member));else{var o=void 0;if(1&i){if(!(o=e.concatenate(rd(t,n),od(t,n)))||0===o.length){var s=2&i?La(Th):Ka(Th);return uh&&d(t.asteriskToken,e.Diagnostics.Generator_implicitly_has_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type,He(s)),s}}else{if(!(o=od(t,n)))return 2&i?td(t,Bh):Bh;if(0===o.length)return 2&i?td(t,Lh):Lh}a=ti(o,!0),1&i&&(a=2&i?La(a):Ka(a));}r||Ss(t,a),!ts(a)||r&&Wd(r===Pr(t)?a:Lr(r))||(a=as(a));var c=bs(a);return 2==(3&i)?td(t,c):c}function rd(t,n){var r=[],a=e.getFunctionFlags(t);return e.forEachYieldExpression(t.body,function(t){var i=t.expression;if(i){var o=qd(i,n);t.asteriskToken&&(o=Of(o,t.expression,!1,0!=(2&a))),2&a&&(o=Mp(o,i,t.asteriskToken?e.Diagnostics.Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member:e.Diagnostics.Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member)),e.contains(r,o)||r.push(o);}}),r}function ad(e){if(!e.possiblyExhaustive)return!1;var t=Qd(e.expression);if(!ns(t))return!1;var n=xc(e);return!!n.length&&kc(Ec(t,Ni),n)}function id(t){if(!(128&t.flags))return!1;var n=e.lastOrUndefined(t.body.statements);return!n||221!==n.kind||!ad(n)}function od(t,n){var r=e.getFunctionFlags(t),a=[],i=id(t),o=!1;if(e.forEachReturnStatement(t.body,function(s){var c=s.expression;if(c){var u=qd(c,n);2&r&&(u=Mp(u,t,e.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member)),8192&u.flags?o=!0:e.contains(a,u)||a.push(u);}else i=!0;}),0!==a.length||i||!o&&186!==t.kind&&187!==t.kind)return ch&&a.length&&i&&(e.contains(a,Eh)||a.push(Eh)),a}function sd(t,n){if(s&&(!n||!xd(n,1025))&&!e.nodeIsMissing(t.body)&&207===t.body.kind&&id(t)){var r=256&t.flags;if(n&&8192&n.flags)d(e.getEffectiveReturnTypeNode(t),e.Diagnostics.A_function_returning_never_cannot_have_a_reachable_end_point);else if(n&&!r)d(e.getEffectiveReturnTypeNode(t),e.Diagnostics.A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value);else if(n&&ch&&!vo(Eh,n))d(e.getEffectiveReturnTypeNode(t),e.Diagnostics.Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined);else if(rh.noImplicitReturns){if(!n){if(!r)return;if(Kf(t,Lr(Pr(t))))return}d(e.getEffectiveReturnTypeNode(t)||t,e.Diagnostics.Not_all_code_paths_return_a_value);}}}function cd(t,n){if(e.Debug.assert(151!==t.kind||e.isObjectLiteralMethod(t)),Xm(t)||186!==t.kind||ly(t),1===n&&lo(t))return Pg(t),Vh;var r=S(t),a=jt(t.symbol);if(!(1024&r.flags)){var i=Vu(t);if(!(1024&r.flags)){if(r.flags|=1024,i){var o=yr(a,0)[0];if(lo(t)){var c=Ku(t);2===n&&X_(o,i,c),Y_(o,c===Hi?i:Zi(i,c));}if(!e.getEffectiveReturnTypeNode(t)&&!o.resolvedReturnType){var u=nd(t,n);o.resolvedReturnType||(o.resolvedReturnType=u);}}cp(t),Pg(t);}}return s&&151!==t.kind&&(_f(t,t.name),sf(t,t.name),cf(t,t.name)),a}function ud(t){e.Debug.assert(151!==t.kind||e.isObjectLiteralMethod(t));var n=e.getFunctionFlags(t),r=e.getEffectiveReturnTypeNode(t),a=r&&(2==(3&n)?Lp(t):Mi(r));if(0==(1&n)&&sd(t,a),t.body){if(r||Lr(Pr(t)),207===t.body.kind)wg(t.body);else{var i=ep(t.body);a&&(2==(3&n)?So(Mp(i,t.body,e.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member),a,t.body):So(i,a,t.body));}Wp(t);}}function ld(e,t,n){return!!Yu(t,84)||(d(e,n),!1)}function _d(t){return!!(8&e.getCheckFlags(t)||4&t.flags&&64&e.getDeclarationModifierFlagsFromSymbol(t)||3&t.flags&&2&Ml(t)||98304&t.flags&&!(65536&t.flags)||8&t.flags)}function dd(t,n){if(_d(n)){if(4&n.flags&&(179===t.kind||180===t.kind)&&99===t.expression.kind){var r=e.getContainingFunction(t);return!r||152!==r.kind||!(r.parent===n.valueDeclaration.parent||r===n.valueDeclaration.parent)}return!0}return!1}function pd(t){if(179===t.kind||180===t.kind){var n=e.skipParentheses(t.expression);if(71===n.kind){var r=S(n).resolvedSymbol;if(8388608&r.flags){var a=J(r);return a&&240===a.kind}}}return!1}function fd(t,n){var r=e.skipOuterExpressions(t,3);return 71===r.kind||179===r.kind||180===r.kind||(d(t,n),!1)}function gd(t){ep(t.expression);var n=e.skipParentheses(t.expression);if(179!==n.kind&&180!==n.kind)return d(n,e.Diagnostics.The_operand_of_a_delete_operator_must_be_a_property_reference),Mh;var r=Te(S(n).resolvedSymbol);return r&&_d(r)&&d(n,e.Diagnostics.The_operand_of_a_delete_operator_cannot_be_a_read_only_property),Mh}function md(e){return ep(e.expression),_b}function yd(e){return ep(e.expression),Nh}function hd(t){return s&&(16384&t.flags||Py(t,e.Diagnostics.await_expression_is_only_allowed_within_an_async_function),Su(t)&&d(t,e.Diagnostics.await_expressions_cannot_be_used_in_a_parameter_initializer)),Mp(ep(t.expression),t,e.Diagnostics.Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member)}function vd(t){var n=ep(t.operand);if(n===Kh)return Kh;if(38===t.operator&&8===t.operand.kind)return Ei(Ai(-t.operand.text));switch(t.operator){case 37:case 38:case 52:return Kl(n,t.operand),xd(n,512)&&d(t.operand,e.Diagnostics.The_0_operator_cannot_be_applied_to_type_symbol,e.tokenToString(t.operator)),Oh;case 51:var r=3145728&Zs(n);return 1048576===r?Ih:2097152===r?Fh:Mh;case 43:case 44:return ld(t.operand,Kl(n,t.operand),e.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type)&&fd(t.operand,e.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access),Oh}return Dh}function bd(t){var n=ep(t.operand);return n===Kh?Kh:(ld(t.operand,Kl(n,t.operand),e.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type)&&fd(t.operand,e.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access),Oh)}function xd(e,t){if(e.flags&t)return!0;if(196608&e.flags)for(var n=0,r=e.types;n<r.length;n++)if(xd(r[n],t))return!0;return!1}function kd(e,t){if(e.flags&t)return!0;if(65536&e.flags){for(var n=0,r=a=e.types;n<r.length;n++)if(!kd(s=r[n],t))return!1;return!0}if(131072&e.flags)for(var a=e.types,i=0,o=a;i<o.length;i++){var s=o[i];if(kd(s,t))return!0}return!1}function Sd(e){return 16&T(e)&&e.symbol&&Td(e.symbol)}function Td(e){return 0!=(128&e.flags)}function Cd(t,n,r,a){return r===Kh||a===Kh?Kh:(kd(r,8190)&&d(t,e.Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter),dt(a)||yr(a,0).length||yr(a,1).length||ho(a,Hh)||d(n,e.Diagnostics.The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type),Mh)}function Dd(t,n,r,a){return r===Kh||a===Kh?Kh:(r=Kl(r,t),a=Kl(a,n),xo(r,Ph)||kd(r,596)||d(t,e.Diagnostics.The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol),Yu(a,17350656)||d(n,e.Diagnostics.The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter),Mh)}function Ed(e,t){for(var n=e.properties,r=0,a=n;r<a.length;r++)Nd(t,a[r],n);return t}function Nd(t,n,r){if(261===n.kind||262===n.kind){var a=n.name;if(144===a.kind&&el(a),ft(a))return;var i=e.getTextOfPropertyName(a);if(c=dt(t)?t:_t(t,i)||Zu(i)&&xr(t,1)||xr(t,0))return 262===n.kind?Pd(n,c):Pd(n.initializer,c);d(a,e.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature,He(t),e.declarationNameToString(a));}else{if(263===n.kind){ah<5&&Bm(n,4);var o=[];if(r)for(var s=0;s<r.length-1;s++)o.push(r[s].name);var c=gt(t,o,t.symbol);return Pd(n.expression,c)}d(n,e.Diagnostics.Property_assignment_expected);}}function Ad(e,t,n){ah<2&&rh.downlevelIteration&&Bm(e,512);for(var r=Of(t,e,!1,!1)||Dh,a=e.elements,i=0;i<a.length;i++)wd(e,t,i,r,n);return t}function wd(t,n,r,a,i){var o=t.elements,s=o[r];if(200!==s.kind)if(198!==s.kind){var c=\"\"+r,u=dt(n)?n:es(n)?_t(n,c):a;if(u)return Pd(s,u,i);ep(s),is(n)?d(s,e.Diagnostics.Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2,He(n),ea(n),o.length):d(s,e.Diagnostics.Type_0_has_no_property_1,He(n),c);}else if(r<o.length-1)d(s,e.Diagnostics.A_rest_element_must_be_last_in_a_destructuring_pattern);else{var l=s.expression;if(194!==l.kind||58!==l.operatorToken.kind)return Pd(l,ja(a),i);d(l.operatorToken,e.Diagnostics.A_rest_element_cannot_have_an_initializer);}}function Pd(e,t,n){var r;if(262===e.kind){var a=e;a.objectAssignmentInitializer&&(!ch||2048&ss(ep(a.objectAssignmentInitializer))||(t=ec(t,131072)),Ld(a.name,a.equalsToken,a.objectAssignmentInitializer,n)),r=e.name;}else r=e;return 194===r.kind&&58===r.operatorToken.kind&&(Rd(r,n),r=r.left),178===r.kind?Ed(r,t):177===r.kind?Ad(r,t,n):Od(r,t,n)}function Od(t,n,r){var a=ep(t,r);return fd(t,263===t.parent.kind?e.Diagnostics.The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access:e.Diagnostics.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access)&&So(n,a,t,void 0),n}function Fd(t){switch((t=e.skipParentheses(t)).kind){case 71:case 9:case 12:case 183:case 196:case 13:case 8:case 101:case 86:case 95:case 139:case 186:case 199:case 187:case 177:case 178:case 189:case 203:case 250:case 249:return!0;case 195:return Fd(t.whenTrue)&&Fd(t.whenFalse);case 194:return!e.isAssignmentOperator(t.operatorToken.kind)&&(Fd(t.left)&&Fd(t.right));case 192:case 193:switch(t.operator){case 51:case 37:case 38:case 52:return!0}return!1;case 190:case 184:case 202:default:return!1}}function Id(e,t){return 0!=(6144&t.flags)||xo(e,t)}function Md(e,t){var n=vo(e,t),r=vo(t,e);return r&&!n?e:n&&!r?t:ti([e,t],!0)}function Rd(e,t){return Ld(e.left,e.operatorToken,e.right,t,e)}function Ld(t,n,r,a,i){function o(n){var a=xd(_,512)?t:xd(p,512)?r:void 0;return!a||(d(a,e.Diagnostics.The_0_operator_cannot_be_applied_to_type_symbol,e.tokenToString(n)),!1)}function c(n){s&&e.isAssignmentOperator(l)&&fd(t,e.Diagnostics.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access)&&So(n,_,t,void 0);}function u(){d(i||n,e.Diagnostics.Operator_0_cannot_be_applied_to_types_1_and_2,e.tokenToString(n.kind),He(_),He(p));}var l=n.kind;if(58===l&&(178===t.kind||177===t.kind))return Pd(t,ep(r,a),a);var _=ep(t,a),p=ep(r,a);switch(l){case 39:case 40:case 61:case 62:case 41:case 63:case 42:case 64:case 38:case 60:case 45:case 65:case 46:case 66:case 47:case 67:case 49:case 69:case 50:case 70:case 48:case 68:if(_===Kh||p===Kh)return Kh;_=Kl(_,t),p=Kl(p,r);var f=void 0;if(136&_.flags&&136&p.flags&&void 0!==(f=function(e){switch(e){case 49:case 69:return 54;case 50:case 70:return 35;case 48:case 68:return 53;default:return}}(n.kind)))d(i||n,e.Diagnostics.The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead,e.tokenToString(n.kind),e.tokenToString(f));else{var g=ld(t,_,e.Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type),m=ld(r,p,e.Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type);g&&m&&c(Oh);}return Oh;case 37:case 59:if(_===Kh||p===Kh)return Kh;kd(_,262179)||kd(p,262179)||(_=Kl(_,t),p=Kl(p,r));var y=void 0;if(kd(_,84)&&kd(p,84))y=Oh;else if(kd(_,262178)||kd(p,262178)?y=Ph:(dt(_)||dt(p))&&(y=_===Dh||p===Dh?Dh:Th),y&&!o(l))return y;return y?(59===l&&c(y),y):(u(),Th);case 27:case 29:case 30:case 31:return o(l)&&(_=rs(Kl(_,t)),p=rs(Kl(p,r)),xo(_,p)||xo(p,_)||u()),Mh;case 32:case 33:case 34:case 35:var h=ns(_),v=ns(p);return h&&v||(_=h?rs(_):_,p=v?rs(p):p),Id(_,p)||Id(p,_)||u(),Mh;case 93:return Cd(t,r,_,p);case 92:return Dd(t,r,_,p);case 53:return 1048576&Zs(_)?ti([us(ch?_:rs(p)),p]):_;case 54:return 2097152&Zs(_)?Md(cs(_),p):_;case 58:return c(p),ms(p);case 26:return rh.allowUnreachableCode||!Fd(t)||function(e){return 71===e.kind&&\"eval\"===e.text}(r)||d(t,e.Diagnostics.Left_side_of_comma_operator_is_unused_and_has_no_side_effects),p}}function Bd(t){for(var n=t,r=t.parent;r;){if(e.isFunctionLike(r)&&n===r.body)return!1;if(e.isClassLike(n))return!0;n=r,r=r.parent;}return!1}function Kd(t){if(s&&(4096&t.flags&&!Bd(t)||Py(t,e.Diagnostics.A_yield_expression_is_only_allowed_in_a_generator_body),Su(t)&&d(t,e.Diagnostics.yield_expressions_cannot_be_used_in_a_parameter_initializer)),t.expression){var n=e.getContainingFunction(t),r=n&&e.getFunctionFlags(n);if(t.asteriskToken&&(3==(3&r)&&ah<5&&Bm(t,26624),1==(3&r)&&ah<2&&rh.downlevelIteration&&Bm(t,256)),1&r){var a=qd(t.expression,void 0),i=void 0,o=!!t.asteriskToken;o&&(i=Of(a,t.expression,!1,0!=(2&r)));var c=e.getEffectiveReturnTypeNode(n);if(c){var u=Rf(Mi(c),0!=(2&r))||Th;o?So(2&r?Rp(i,t.expression,e.Diagnostics.Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member):i,u,t.expression,void 0):So(2&r?Rp(a,t.expression,e.Diagnostics.Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member):a,u,t.expression,void 0);}}}return Th}function jd(e,t){return ep(e.condition),Md(ep(e.whenTrue,t),ep(e.whenFalse,t))}function Jd(e){switch(8===e.kind&&Jy(e),e.kind){case 9:return Ei(Ai(e.text));case 8:return Ei(Ai(+e.text));case 101:return Fh;case 86:return Ih}}function zd(t){return e.forEach(t.templateSpans,function(e){ep(e.expression);}),Ph}function Ud(e,t,n){var r=e.contextualType,a=e.contextualMapper;e.contextualType=t,e.contextualMapper=n;var i=ep(e,n===Hi?1:n?2:0);return e.contextualType=r,e.contextualMapper=a,i}function qd(e,t){var n=S(e);if(!n.resolvedType){var r=Fv;Fv=Iv,n.resolvedType=ep(e,t),Fv=r;}return n.resolvedType}function Vd(t){return 184===(t=e.skipParentheses(t)).kind||202===t.kind}function $d(t){var n=Qd(t.initializer,!0);return 2&e.getCombinedNodeFlags(t)||64&e.getCombinedModifierFlags(t)&&!e.isParameterPropertyDeclaration(t)||Vd(t.initializer)?n:as(n)}function Wd(e){if(e){if(540672&e.flags){var t=or(e)||Jh;if(30&t.flags)return!0;e=t;}return xd(e,262368)}return!1}function Hd(e,t){var n=ep(e,t);return Vd(e)||Wd(Bu(e))?n:as(n)}function Gd(e,t){return 144===e.name.kind&&el(e.name),Hd(e.initializer,t)}function Xd(e,t){return vy(e),144===e.name.kind&&el(e.name),Yd(e,cd(e,t),t)}function Yd(e,t,n){if(2===n){var r=c_(t);if(r&&r.typeParameters){var a=Lu(e);if(a){var i=c_(ds(a));if(i&&!i.typeParameters)return zr(u_(r,i,Ku(e)))}}}return t}function Qd(t,n){if(181===t.kind&&97!==t.expression.kind&&!e.isRequireCall(t,!0)){var r=c_(Bl(t.expression));if(r&&!r.typeParameters)return Lr(r)}return n?qd(t):ep(t)}function Zd(e){var t=e.contextualType;e.contextualType=Th;var n=Qd(e);return e.contextualType=t,n}function ep(t,n){var r;return r=143===t.kind?Jl(t):Yd(t,tp(t,n),n),Sd(r)&&(179===t.parent.kind&&t.parent.expression===t||180===t.parent.kind&&t.parent.expression===t||(71===t.kind||143===t.kind)&&Hg(t)||d(t,e.Diagnostics.const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment)),r}function tp(t,n){switch(t.kind){case 71:return nu(t);case 99:return _u(t);case 97:return fu(t);case 95:return wh;case 9:case 8:case 101:case 86:return Jd(t);case 196:return zd(t);case 13:return Ph;case 12:return ev;case 177:return Hu(t,n);case 178:return nl(t,n);case 179:return jl(t);case 180:return e_(t);case 181:if(91===t.expression.kind)return J_(t);case 182:return j_(t);case 183:return U_(t);case 185:return ep(t.expression,n);case 199:return Yf(t);case 186:case 187:return cd(t,n);case 189:return md(t);case 184:case 202:return q_(t);case 203:return V_(t);case 204:return $_(t);case 188:return gd(t);case 190:return yd(t);case 191:return hd(t);case 192:return vd(t);case 193:return bd(t);case 194:return Rd(t,n);case 195:return jd(t,n);case 198:return $u(t,n);case 200:return Nh;case 197:return Kd(t);case 256:return Fl(t,n);case 249:return il(t);case 250:return al(t);case 254:return ul(t,n);case 251:e.Debug.fail(\"Shouldn't ever directly check a JsxOpeningElement\");}return Dh}function np(t){t.expression&&Py(t.expression,e.Diagnostics.Type_expected),wg(t.constraint),wg(t.default);var n=gn(ke(t));sr(n)||d(t.constraint,e.Diagnostics.Type_parameter_0_has_a_circular_constraint,He(n));var r=ar(n),a=lr(n);r&&a&&So(a,En(r,a),t.default,e.Diagnostics.Type_0_does_not_satisfy_the_constraint_1),s&&Wf(t.name,e.Diagnostics.Type_parameter_name_cannot_be_0);}function rp(t){Jm(t)||zm(t),yf(t);var n=e.getContainingFunction(t);92&e.getModifierFlags(t)&&(152===(n=e.getContainingFunction(t)).kind&&e.nodeIsPresent(n.body)||d(t,e.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation)),t.questionToken&&e.isBindingPattern(t.name)&&n.body&&d(t,e.Diagnostics.A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature),\"this\"===t.name.text&&(0!==e.indexOf(n.parameters,t)&&d(t,e.Diagnostics.A_this_parameter_must_be_the_first_parameter),152!==n.kind&&156!==n.kind&&161!==n.kind||d(t,e.Diagnostics.A_constructor_cannot_have_a_this_parameter)),!t.dotDotDotToken||e.isBindingPattern(t.name)||Qo(jt(t.symbol))||d(t,e.Diagnostics.A_rest_parameter_must_be_of_an_array_type);}function ap(e,t){if(e)for(var n=0;n<e.length;n++){var r=e[n];if(71===r.name.kind&&r.name.text===t.text)return n}return-1}function ip(t){var n=op(t);if(n){var r=Pr(n).typePredicate;if(r){var a=t.parameterName;if(e.isThisTypePredicate(r))Ii(a);else if(r.parameterIndex>=0)if(n.parameters[r.parameterIndex].dotDotDotToken)d(a,e.Diagnostics.A_type_predicate_cannot_reference_a_rest_parameter);else{var i=e.chainDiagnosticMessages(void 0,e.Diagnostics.A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type);So(r.type,em(n.parameters[r.parameterIndex]),t.type,void 0,i);}else if(a){for(var o=!1,s=0,c=n.parameters;s<c.length;s++){var u=c[s].name;if(e.isBindingPattern(u)&&sp(u,a,r.parameterName)){o=!0;break}}o||d(t.parameterName,e.Diagnostics.Cannot_find_parameter_0,r.parameterName);}}}else d(t,e.Diagnostics.A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods);}function op(e){switch(e.parent.kind){case 187:case 155:case 228:case 186:case 160:case 151:case 150:var t=e.parent;if(e===t.type)return t}}function sp(t,n,r){for(var a=0,i=t.elements;a<i.length;a++){var o=i[a];if(!e.isOmittedExpression(o)){var s=o.name;if(71===s.kind&&s.text===r)return d(n,e.Diagnostics.A_type_predicate_cannot_reference_element_0_in_a_binding_pattern,r),!0;if((175===s.kind||174===s.kind)&&sp(s,n,r))return!0}}}function cp(t){157===t.kind?ey(t):160!==t.kind&&228!==t.kind&&161!==t.kind&&155!==t.kind&&152!==t.kind&&156!==t.kind||Xm(t);var n=e.getFunctionFlags(t);if(4&n||(3==(3&n)&&ah<5&&Bm(t,6144),2==(3&n)&&ah<4&&Bm(t,64),0!=(3&n)&&ah<2&&Bm(t,128)),Hf(t.typeParameters),e.forEach(t.parameters,rp),t.type&&wg(t.type),s){af(t);var r=e.getEffectiveReturnTypeNode(t);if(uh&&!r)switch(t.kind){case 156:d(t,e.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);break;case 155:d(t,e.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);}if(r){var a=e.getFunctionFlags(t);if(1==(5&a)){var i=Mi(r);if(i===Lh)d(r,e.Diagnostics.A_generator_cannot_have_a_void_type_annotation);else{var o=Rf(i,0!=(2&a))||Th;So(2&a?La(o):Ka(o),i,r);}}else 2==(3&a)&&Lp(t);}oh&&!t.body&&tf(t);}}function up(t){function n(t,n,r,a){var i=t.get(r);i?4&i?4!==a&&d(n,e.Diagnostics.Duplicate_identifier_0,e.getTextOfNode(n)):i&a?d(n,e.Diagnostics.Duplicate_identifier_0,e.getTextOfNode(n)):t.set(r,i|a):t.set(r,a);}var r;!function(e){e[e.Getter=1]=\"Getter\",e[e.Setter=2]=\"Setter\",e[e.Method=4]=\"Method\",e[e.Property=3]=\"Property\";}(r||(r={}));for(var a=e.createMap(),i=e.createMap(),o=0,s=t.members;o<s.length;o++){var c=s[o];if(152===c.kind)for(var u=0,l=c.parameters;u<l.length;u++){var _=l[u];e.isParameterPropertyDeclaration(_)&&n(a,_.name,_.name.text,3);}else{var p=32&e.getModifierFlags(c)?i:a,f=c.name&&e.getPropertyNameForPropertyNameNode(c.name);if(f)switch(c.kind){case 153:n(p,c.name,f,1);break;case 154:n(p,c.name,f,2);break;case 149:n(p,c.name,f,3);break;case 151:n(p,c.name,f,4);}}}}function lp(t){for(var n=0,r=t.members;n<r.length;n++){var a=r[n],i=a.name;if(32&e.getModifierFlags(a)&&i){var o=e.getPropertyNameForPropertyNameNode(i);switch(o){case\"name\":case\"length\":case\"caller\":case\"arguments\":case\"prototype\":d(i,e.Diagnostics.Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1,o,tt(ke(t)));}}}}function _p(t){for(var n=e.createMap(),r=0,a=t.members;r<a.length;r++){var i=a[r];if(148===i.kind){var o=void 0;switch(i.name.kind){case 9:case 8:case 71:o=i.name.text;break;default:continue}n.get(o)?(d(e.getNameOfDeclaration(i.symbol.valueDeclaration),e.Diagnostics.Duplicate_identifier_0,o),d(i.name,e.Diagnostics.Duplicate_identifier_0,o)):n.set(o,!0);}}}function dp(t){if(230===t.kind){var n=ke(t);if(n.declarations.length>0&&n.declarations[0]!==t)return}var r=Ur(ke(t));if(r)for(var a=!1,i=!1,o=0,s=r.declarations;o<s.length;o++){var c=s[o];if(1===c.parameters.length&&c.parameters[0].type)switch(c.parameters[0].type.kind){case 136:i?d(c,e.Diagnostics.Duplicate_string_index_signature):i=!0;break;case 133:a?d(c,e.Diagnostics.Duplicate_number_index_signature):a=!0;}}}function pp(e){Jm(e)||zm(e)||Ry(e)||uy(e.name),yf(e);}function fp(t){vy(t)||uy(t.name),$p(t),128&e.getModifierFlags(t)&&t.body&&d(t,e.Diagnostics.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract,e.declarationNameToString(t.name));}function gp(t){function n(t){return!(149!==t.kind||32&e.getModifierFlags(t)||!t.initializer)}cp(t),Iy(t)||My(t),wg(t.body),Wp(t);var r=ke(t);if(t===e.getDeclarationOfKind(r,t.kind)&&Pp(r),!e.nodeIsMissing(t.body)&&s){var a=t.parent;if(e.getClassExtendsHeritageClauseElement(a)){ou(t.parent,a);var i=uu(a),o=cu(t);if(o){if(i&&d(o,e.Diagnostics.A_constructor_cannot_contain_a_super_call_when_its_class_extends_null),e.forEach(t.parent.members,n)||e.forEach(t.parameters,function(t){return 92&e.getModifierFlags(t)})){for(var c=void 0,u=0,l=t.body.statements;u<l.length;u++){var _=l[u];if(210===_.kind&&e.isSuperCall(_.expression)){c=_;break}if(!e.isPrologueDirective(_))break}c||d(t,e.Diagnostics.A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties);}}else i||d(t,e.Diagnostics.Constructors_for_derived_classes_must_contain_a_super_call);}}}function mp(t){if(s){if(Xm(t)||gy(t)||uy(t.name),qp(t),cp(t),153===t.kind&&!e.isInAmbientContext(t)&&e.nodeIsPresent(t.body)&&128&t.flags&&(256&t.flags||d(t.name,e.Diagnostics.A_get_accessor_must_return_a_value)),144===t.name.kind&&el(t.name),!e.hasDynamicName(t)){var n=153===t.kind?154:153,r=e.getDeclarationOfKind(t.symbol,n);r&&((28&e.getModifierFlags(t))!=(28&e.getModifierFlags(r))&&d(t.name,e.Diagnostics.Getter_and_setter_accessors_do_not_agree_in_visibility),e.hasModifier(t,128)!==e.hasModifier(r,128)&&d(t.name,e.Diagnostics.Accessors_must_both_be_abstract_or_non_abstract),yp(t,r,wt,e.Diagnostics.get_and_set_accessor_must_have_the_same_type),yp(t,r,Ot,e.Diagnostics.get_and_set_accessor_must_have_the_same_this_type));}var a=Ft(ke(t));153===t.kind&&sd(t,a);}wg(t.body),Wp(t);}function yp(e,t,n,r){var a=n(e),i=n(t);a&&i&&!go(a,i)&&d(e,r);}function hp(e){qp(e);}function vp(t,n){for(var r,a,i=Ar(t),o=!0,s=0;s<t.length;s++){var c=ar(t[s]);if(c){r||(a=Ui(t,r=wr(e.map(n,Mi),t,i)));var u=r[s];o=o&&So(u,En(so(c,a),u),n[s],e.Diagnostics.Type_0_does_not_satisfy_the_constraint_1);}}return o}function bp(t){ny(t,t.typeArguments);var n=_a(t);if(n!==Dh){if(t.typeArguments&&(e.forEach(t.typeArguments,wg),s)){var r=S(t).resolvedSymbol;vp(524288&r.flags?k(r).typeParameters:n.target.localTypeParameters,t.typeArguments);}16&n.flags&&8&S(t).resolvedSymbol.flags&&d(t,e.Diagnostics.Enum_type_0_has_members_with_initializers_that_are_not_literals,He(n));}}function xp(e){pa(e);}function kp(t){e.forEach(t.members,wg),s&&($f(bi(t)),dp(t),_p(t));}function Sp(e){wg(e.elementType);}function Tp(t){Wm(t.elementTypes)||0!==t.elementTypes.length||Fy(t,e.Diagnostics.A_tuple_type_element_list_cannot_be_empty),e.forEach(t.elementTypes,wg);}function Cp(t){e.forEach(t.types,wg);}function Dp(t,n){if(!(524288&t.flags))return t;var r=t.objectType,a=t.indexType;if(vo(a,_i(r)))return t;if(xd(r,540672)&&kd(a,84)){var i=or(r);if(i&&br(i,1))return t}return d(n,e.Diagnostics.Type_0_cannot_be_used_to_index_type_1,He(a),He(r)),t}function Ep(e){Dp(hi(e),e);}function Np(e){wg(e.typeParameter),wg(e.type),So(Wn(vi(e)),Ph,e.typeParameter.constraint);}function Ap(t){return 8&e.getModifierFlags(t)&&e.isInAmbientContext(t)}function wp(t,n){var r=e.getCombinedModifierFlags(t);return 230!==t.parent.kind&&229!==t.parent.kind&&199!==t.parent.kind&&e.isInAmbientContext(t)&&(2&r||(r|=1),r|=2),r&n}function Pp(t){function n(e,t){return void 0!==t&&t.parent===e[0].parent?t:e[0]}function r(t){if(!t.name||!e.nodeIsMissing(t.name)){var n=!1,r=e.forEachChild(t.parent,function(e){if(n)return e;n=e===t;});if(r&&r.pos===t.end&&r.kind===t.kind){var a=r.name||r;if(t.name&&r.name&&t.name.text===r.name.text)return void((151===t.kind||150===t.kind)&&(32&e.getModifierFlags(t))!=(32&e.getModifierFlags(r))&&d(a,32&e.getModifierFlags(t)?e.Diagnostics.Function_overload_must_be_static:e.Diagnostics.Function_overload_must_not_be_static));if(e.nodeIsPresent(r.body))return void d(a,e.Diagnostics.Function_implementation_name_must_be_0,e.declarationNameToString(t.name))}var i=t.name||t;g?d(i,e.Diagnostics.Constructor_implementation_is_missing):128&e.getModifierFlags(t)?d(i,e.Diagnostics.All_declarations_of_an_abstract_method_must_be_consecutive):d(i,e.Diagnostics.Function_implementation_is_missing_or_not_immediately_following_the_declaration);}}if(s){for(var a,i,o,c=0,u=155,l=!1,_=!0,p=!1,f=t.declarations,g=0!=(16384&t.flags),m=!1,y=!1,h=0,v=f;h<v.length;h++){var b=v[h],x=e.isInAmbientContext(b),k=230===b.parent.kind||163===b.parent.kind||x;if(k&&(o=void 0),228===b.kind||151===b.kind||150===b.kind||152===b.kind){var S=wp(b,155);c|=S,u&=S,l=l||e.hasQuestionToken(b),_=_&&e.hasQuestionToken(b),e.nodeIsPresent(b.body)&&a?g?y=!0:m=!0:o&&o.parent===b.parent&&o.end!==b.pos&&r(o),e.nodeIsPresent(b.body)?a||(a=b):p=!0,o=b,k||(i=b);}}if(y&&e.forEach(f,function(t){d(t,e.Diagnostics.Multiple_constructor_implementations_are_not_allowed);}),m&&e.forEach(f,function(t){d(e.getNameOfDeclaration(t),e.Diagnostics.Duplicate_function_implementation);}),!i||i.body||128&e.getModifierFlags(i)||i.questionToken||r(i),p&&(function(t,r,a,i,o){if(0!=(i^o)){var s=wp(n(t,r),a);e.forEach(t,function(t){var n=wp(t,a)^s;1&n?d(e.getNameOfDeclaration(t),e.Diagnostics.Overload_signatures_must_all_be_exported_or_non_exported):2&n?d(e.getNameOfDeclaration(t),e.Diagnostics.Overload_signatures_must_all_be_ambient_or_non_ambient):24&n?d(e.getNameOfDeclaration(t)||t,e.Diagnostics.Overload_signatures_must_all_be_public_private_or_protected):128&n&&d(e.getNameOfDeclaration(t),e.Diagnostics.Overload_signatures_must_all_be_abstract_or_non_abstract);});}}(f,a,155,c,u),function(t,r,a,i){if(a!==i){var o=e.hasQuestionToken(n(t,r));e.forEach(t,function(t){e.hasQuestionToken(t)!==o&&d(e.getNameOfDeclaration(t),e.Diagnostics.Overload_signatures_must_all_be_optional_or_required);});}}(f,a,l,_),a))for(var T=Ir(t),C=Pr(a),D=0,E=T;D<E.length;D++){var N=E[D];if(!No(C,N)){d(N.declaration,e.Diagnostics.Overload_signature_is_not_compatible_with_function_implementation);break}}}}function Op(t){function n(t){switch(t.kind){case 230:return 2097152;case 233:return e.isAmbientModule(t)||0!==e.getModuleInstanceState(t)?5242880:4194304;case 229:case 232:return 3145728;case 237:var r=0,a=ne(ke(t));return e.forEach(a.declarations,function(e){r|=n(e);}),r;default:return 1048576}}if(s){var r=t.localSymbol;if((r||7340032&(r=ke(t)).flags)&&e.getDeclarationOfKind(r,t.kind)===t){for(var a=0,i=0,o=0,c=0,u=r.declarations;c<u.length;c++){var l=n(y=u[c]),_=wp(y,513);1&_?512&_?o|=l:a|=l:i|=l;}var p=a&i,f=o&(a|i);if(p||f)for(var g=0,m=r.declarations;g<m.length;g++){var y=m[g],l=n(y),h=e.getNameOfDeclaration(y);l&f?d(h,e.Diagnostics.Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead,e.declarationNameToString(h)):l&p&&d(h,e.Diagnostics.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local,e.declarationNameToString(h));}}}}function Fp(e,t,n){var r=Ip(e,t);return r&&Rp(r,t,n)}function Ip(t,n){if(!dt(t)){var r=t;if(r.promisedTypeOfPromise)return r.promisedTypeOfPromise;if(Jt(t,Sa(!1)))return r.promisedTypeOfPromise=t.typeArguments[0];var a=_t(t,\"then\");if(!dt(a)){var i=a?yr(a,0):th;if(0!==i.length){var o=ec(ti(e.map(i,G_)),524288);if(!dt(o)){var s=yr(o,0);if(0!==s.length)return r.promisedTypeOfPromise=ti(e.map(s,G_),!0);n&&d(n,e.Diagnostics.The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback);}}else n&&d(n,e.Diagnostics.A_promise_must_have_a_then_method);}}}function Mp(e,t,n){return Rp(e,t,n)||Dh}function Rp(t,n,r){var a=t;if(a.awaitedTypeOfType)return a.awaitedTypeOfType;if(dt(t))return a.awaitedTypeOfType=t;if(65536&t.flags){for(var i=void 0,o=0,s=t.types;o<s.length;o++){var c=s[o];i=e.append(i,Rp(c,n,r));}if(!i)return;return a.awaitedTypeOfType=ti(i,!0)}var u=Ip(t);if(u){if(t.id===u.id||e.indexOf(eb,u.id)>=0)return void(n&&d(n,e.Diagnostics.Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method));eb.push(t.id);var l=Rp(u,n,r);if(eb.pop(),!l)return;return a.awaitedTypeOfType=l}var _=_t(t,\"then\");if(!(_&&yr(_,0).length>0))return a.awaitedTypeOfType=t;n&&(e.Debug.assert(!!r),d(n,r));}function Lp(t){var n=e.getEffectiveReturnTypeNode(t),r=Mi(n);if(ah>=2){if(r===Dh)return Dh;var a=Sa(!0);if(a!==qh&&!Jt(r,a))return d(n,e.Diagnostics.The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type),Dh}else{if(Kp(n),r===Dh)return Dh;var i=e.getEntityNameFromTypeNode(n);if(void 0===i)return d(n,e.Diagnostics.Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value,He(r)),Dh;var o=se(i,107455,!0),s=o?jt(o):Dh;if(s===Dh)return 71===i.kind&&\"Promise\"===i.text&&zt(r)===Sa(!1)?d(n,e.Diagnostics.An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option):d(n,e.Diagnostics.Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value,e.entityNameToString(i)),Dh;var c=Ca(!0);if(c===Jh)return d(n,e.Diagnostics.Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value,e.entityNameToString(i)),Dh;if(!So(s,c,n,e.Diagnostics.Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value))return Dh;var u=i&&hg(i),l=D(t.locals,u.text,107455);if(l)return d(l.valueDeclaration,e.Diagnostics.Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions,u.text,e.entityNameToString(i)),Dh}return Mp(r,t,e.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member)}function Bp(t){var n=Lr(M_(t));if(!(1&n.flags)){var r,a,i=w_(t);switch(t.parent.kind){case 229:r=ti([jt(ke(t.parent)),Lh]);break;case 146:r=Lh,a=e.chainDiagnosticMessages(a,e.Diagnostics.The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any);break;case 149:r=Lh,a=e.chainDiagnosticMessages(a,e.Diagnostics.The_return_type_of_a_property_decorator_function_must_be_either_void_or_any);break;case 151:case 153:case 154:r=ti([Ma(em(t.parent)),Lh]);}So(n,r,t,i,a);}}function Kp(t){jp(t&&e.getEntityNameFromTypeNode(t));}function jp(e){var t=e&&hg(e),n=t&&A(t,t.text,8388608|(71===e.kind?793064:1920),void 0,void 0);n&&8388608&n.flags&&Ce(n)&&!hm(ne(n))&&ae(n);}function Jp(t){var n=zp(t);n&&e.isEntityName(n)&&jp(n);}function zp(t){if(t)switch(t.kind){case 167:case 166:for(var n=void 0,r=0,a=t.types;r<a.length;r++){var i=zp(a[r]);if(!i)return;if(n){if(!e.isIdentifier(n)||!e.isIdentifier(i)||n.text!==i.text)return}else n=i;}return n;case 168:return zp(t.type);case 159:return t.typeName}}function Up(t){var n=e.getEffectiveTypeAnnotationNode(t);return e.isRestParameter(t)?e.getRestParameterElementType(n):n}function qp(t){if(t.decorators&&e.nodeCanBeDecorated(t)){rh.experimentalDecorators||d(t,e.Diagnostics.Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_to_remove_this_warning);var n=t.decorators[0];if(Bm(n,8),146===t.kind&&Bm(n,32),rh.emitDecoratorMetadata)switch(Bm(n,16),t.kind){case 229:var r=e.getFirstConstructorWithBody(t);if(r)for(var a=0,i=r.parameters;a<i.length;a++)Jp(Up(c=i[a]));break;case 151:case 153:case 154:for(var o=0,s=t.parameters;o<s.length;o++){var c=s[o];Jp(Up(c));}Jp(e.getEffectiveReturnTypeNode(t));break;case 149:Jp(e.getEffectiveTypeAnnotationNode(t));break;case 146:Jp(Up(t));}e.forEach(t.decorators,Bp);}}function Vp(e){s&&($p(e),ly(e),_f(e,e.name),sf(e,e.name),cf(e,e.name),df(e,e.name),pf(e,e.name));}function $p(t){qp(t),cp(t);var n=e.getFunctionFlags(t);if(t.name&&144===t.name.kind&&el(t.name),!e.hasDynamicName(t)){var r=ke(t),a=t.localSymbol||r,i=e.forEach(a.declarations,function(n){return n.kind!==t.kind||e.isSourceFileJavaScript(e.getSourceFileOfNode(n))?void 0:n});t===i&&Pp(a),r.parent&&e.getDeclarationOfKind(r,t.kind)===t&&Pp(r);}wg(t.body);var o=e.getEffectiveReturnTypeNode(t);if(0==(1&n)){var c=o&&(2&n?Lp(t):Mi(o));sd(t,c);}s&&!o&&(uh&&e.nodeIsMissing(t.body)&&!Ap(t)&&ks(t,Th),1&n&&e.nodeIsPresent(t.body)&&Lr(Pr(t))),Wp(t);}function Wp(e){kv&&kv.push(e);}function Hp(){if(kv)for(var e=0,t=kv;e<t.length;e++){var n=t[e];switch(n.kind){case 265:case 233:nf(n);break;case 229:case 199:ef(n),tf(n);break;case 230:tf(n);break;case 207:case 235:case 214:case 215:case 216:Gp(n);break;case 152:case 186:case 228:case 187:case 151:case 153:case 154:n.body&&Gp(n),tf(n);break;case 150:case 155:case 156:case 157:case 160:case 161:tf(n);}}}function Gp(t){230!==t.parent.kind&&oh&&!e.isInAmbientContext(t)&&t.locals.forEach(function(t){if(!t.isReferenced)if(t.valueDeclaration&&146===e.getRootDeclaration(t.valueDeclaration).kind){var n=e.getRootDeclaration(t.valueDeclaration),r=e.getNameOfDeclaration(t.valueDeclaration);!rh.noUnusedParameters||e.isParameterPropertyDeclaration(n)||e.parameterIsThisKeyword(n)||Qp(r)||d(r,e.Diagnostics._0_is_declared_but_never_used,t.name);}else rh.noUnusedLocals&&e.forEach(t.declarations,function(n){return Yp(e.getNameOfDeclaration(n)||n,t.name)});});}function Xp(t){if(e.isBindingElement(t)&&e.isObjectBindingPattern(t.parent)){var n=e.lastOrUndefined(t.parent.elements);return n!==t&&!!n.dotDotDotToken}return!1}function Yp(t,n){if(Zp(t)){var r=e.getRootDeclaration(t.parent);if(226===r.kind&&e.isForInOrOfStatement(r.parent.parent))return}Xp(71===t.kind?t.parent:t)||d(t,e.Diagnostics._0_is_declared_but_never_used,n);}function Qp(e){return e&&Zp(e)}function Zp(e){return 71===e.kind&&95===e.text.charCodeAt(0)}function ef(t){if(rh.noUnusedLocals&&!e.isInAmbientContext(t)&&t.members)for(var n=0,r=t.members;n<r.length;n++){var a=r[n];if(151===a.kind||149===a.kind)!a.symbol.isReferenced&&8&e.getModifierFlags(a)&&d(a.name,e.Diagnostics._0_is_declared_but_never_used,a.symbol.name);else if(152===a.kind)for(var i=0,o=a.parameters;i<o.length;i++){var s=o[i];!s.symbol.isReferenced&&8&e.getModifierFlags(s)&&d(s.name,e.Diagnostics.Property_0_is_declared_but_never_used,s.symbol.name);}}}function tf(t){if(rh.noUnusedLocals&&!e.isInAmbientContext(t)&&t.typeParameters){var n=ke(t);if((n&&n.declarations&&e.lastOrUndefined(n.declarations))!==t)return;for(var r=0,a=t.typeParameters;r<a.length;r++){var i=a[r];xe(i.symbol).isReferenced||d(i.name,e.Diagnostics._0_is_declared_but_never_used,i.symbol.name);}}}function nf(t){rh.noUnusedLocals&&!e.isInAmbientContext(t)&&t.locals.forEach(function(t){if(!t.isReferenced&&!t.exportSymbol)for(var n=0,r=t.declarations;n<r.length;n++){var a=r[n];e.isAmbientModule(a)||Yp(e.getNameOfDeclaration(a),t.name);}});}function rf(t){207===t.kind&&jy(t),e.forEach(t.statements,wg),t.locals&&Wp(t);}function af(t){!e.hasDeclaredRestParameter(t)||e.isInAmbientContext(t)||e.nodeIsMissing(t.body)||e.forEach(t.parameters,function(t){t.name&&!e.isBindingPattern(t.name)&&t.name.text===fh.name&&d(t,e.Diagnostics.Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters);});}function of(t,n,r){if(!n||n.text!==r)return!1;if(149===t.kind||148===t.kind||151===t.kind||150===t.kind||153===t.kind||154===t.kind)return!1;if(e.isInAmbientContext(t))return!1;var a=e.getRootDeclaration(t);return 146!==a.kind||!e.nodeIsMissing(a.parent.body)}function sf(e,t){of(e,t,\"_this\")&&Qv.push(e);}function cf(e,t){of(e,t,\"_newTarget\")&&Zv.push(e);}function uf(t){e.findAncestor(t,function(n){if(4&Sm(n))return 71!==t.kind?d(e.getNameOfDeclaration(t),e.Diagnostics.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference):d(t,e.Diagnostics.Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference),!0});}function lf(t){e.findAncestor(t,function(n){if(8&Sm(n))return 71!==t.kind?d(e.getNameOfDeclaration(t),e.Diagnostics.Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_meta_property_reference):d(t,e.Diagnostics.Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta_property_reference),!0});}function _f(t,n){if(of(t,n,\"_super\")){var r=e.getContainingClass(t);r&&!e.isInAmbientContext(r)&&e.getClassExtendsHeritageClauseElement(r)&&(71!==t.kind?d(t,e.Diagnostics.Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference):d(t,e.Diagnostics.Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference));}}function df(t,n){if(!(ih>=e.ModuleKind.ES2015)&&(of(t,n,\"require\")||of(t,n,\"exports\"))&&(233!==t.kind||1===e.getModuleInstanceState(t))){var r=ut(t);265===r.kind&&e.isExternalOrCommonJsModule(r)&&d(n,e.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module,e.declarationNameToString(n),e.declarationNameToString(n));}}function pf(t,n){if(!(ah>=4)&&of(t,n,\"Promise\")&&(233!==t.kind||1===e.getModuleInstanceState(t))){var r=ut(t);265===r.kind&&e.isExternalOrCommonJsModule(r)&&1024&r.flags&&d(n,e.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions,e.declarationNameToString(n),e.declarationNameToString(n));}}function ff(t){if(0==(3&e.getCombinedNodeFlags(t))&&!e.isParameterDeclaration(t)&&(226!==t.kind||t.initializer)){var n=ke(t);if(1&n.flags){var r=A(t,t.name.text,3,void 0,void 0);if(r&&r!==n&&2&r.flags&&3&Ml(r)){var a=e.getAncestor(r.valueDeclaration,227),i=208===a.parent.kind&&a.parent.parent?a.parent.parent:void 0;if(!(i&&(207===i.kind&&e.isFunctionLike(i.parent)||234===i.kind||233===i.kind||265===i.kind))){var o=$e(r);d(t,e.Diagnostics.Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1,o,o);}}}}}function gf(t){function n(a){if(!e.isTypeNode(a)&&!e.isDeclarationName(a)){if(179===a.kind)return n(a.expression);if(71!==a.kind)return e.forEachChild(a,n);var i=A(a,a.text,8496063,void 0,void 0);if(i&&i!==kh&&i.valueDeclaration)if(i.valueDeclaration!==t){if(e.getEnclosingBlockScopeContainer(i.valueDeclaration)===r){if(146===i.valueDeclaration.kind||176===i.valueDeclaration.kind){if(i.valueDeclaration.pos<t.pos)return;if(e.findAncestor(a,function(n){return n===t.initializer?\"quit\":e.isFunctionLike(n.parent)||149===n.parent.kind&&!e.hasModifier(n.parent,32)&&e.isClassLike(n.parent.parent)}))return}d(a,e.Diagnostics.Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it,e.declarationNameToString(t.name),e.declarationNameToString(a));}}else d(a,e.Diagnostics.Parameter_0_cannot_be_referenced_in_its_initializer,e.declarationNameToString(t.name));}}if(146===e.getRootDeclaration(t).kind){var r=e.getContainingFunction(t);n(t.initializer);}}function mf(e){return e===Ch?Th:e===rv?nv:e}function yf(t){if(qp(t),wg(t.type),144===t.name.kind&&(el(t.name),t.initializer&&qd(t.initializer)),176===t.kind){174===t.parent.kind&&ah<5&&Bm(t,4),t.propertyName&&144===t.propertyName.kind&&el(t.propertyName);var n=t.parent.parent,r=pt(n),a=t.propertyName||t.name,i=gr(r,e.getTextOfPropertyName(a));Wl(i),n.initializer&&i&&Ll(n,n.initializer,r,i);}if(e.isBindingPattern(t.name)&&(175===t.name.kind&&ah<2&&rh.downlevelIteration&&Bm(t,512),e.forEach(t.name.elements,wg)),t.initializer&&146===e.getRootDeclaration(t).kind&&e.nodeIsMissing(e.getContainingFunction(t).body))d(t,e.Diagnostics.A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation);else if(e.isBindingPattern(t.name))t.initializer&&215!==t.parent.parent.kind&&(So(qd(t.initializer),Et(t),t,void 0),gf(t));else{var o=ke(t),s=mf(At(o));if(t===o.valueDeclaration)t.initializer&&215!==t.parent.parent.kind&&(So(qd(t.initializer),s,t,void 0),gf(t));else{var c=mf(Et(t));s===Dh||c===Dh||go(s,c)||d(t.name,e.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2,e.declarationNameToString(t.name),He(s),He(c)),t.initializer&&So(qd(t.initializer),c,t,void 0),hf(t,o.valueDeclaration)||(d(e.getNameOfDeclaration(o.valueDeclaration),e.Diagnostics.All_declarations_of_0_must_have_identical_modifiers,e.declarationNameToString(t.name)),d(t.name,e.Diagnostics.All_declarations_of_0_must_have_identical_modifiers,e.declarationNameToString(t.name)));}149!==t.kind&&148!==t.kind&&(Op(t),226!==t.kind&&176!==t.kind||ff(t),_f(t,t.name),sf(t,t.name),cf(t,t.name),df(t,t.name),pf(t,t.name));}}function hf(t,n){if(146===t.kind&&226===n.kind||226===t.kind&&146===n.kind)return!0;if(e.hasQuestionToken(t)!==e.hasQuestionToken(n))return!1;return(504&e.getModifierFlags(t))==(504&e.getModifierFlags(n))}function vf(e){return Sy(e),yf(e)}function bf(e){return xy(e),yf(e)}function xf(t){Jm(t)||zm(t)||Dy(t.declarationList)||Ny(t),e.forEach(t.declarationList.declarations,wg);}function kf(t){if(t.modifiers&&178===t.parent.kind){if(!(2&e.getFunctionFlags(t)))return Py(t,e.Diagnostics.Modifiers_cannot_appear_here);if(t.modifiers.length>1)return Py(t,e.Diagnostics.Modifiers_cannot_appear_here)}}function Sf(e){jy(e),ep(e.expression);}function Tf(t){jy(t),ep(t.expression),wg(t.thenStatement),209===t.thenStatement.kind&&d(t.thenStatement,e.Diagnostics.The_body_of_an_if_statement_cannot_be_the_empty_statement),wg(t.elseStatement);}function Cf(e){jy(e),wg(e.statement),ep(e.expression);}function Df(e){jy(e),ep(e.expression),wg(e.statement);}function Ef(t){jy(t)||t.initializer&&227===t.initializer.kind&&Dy(t.initializer),t.initializer&&(227===t.initializer.kind?e.forEach(t.initializer.declarations,vf):ep(t.initializer)),t.condition&&ep(t.condition),t.incrementor&&ep(t.incrementor),wg(t.statement),t.locals&&Wp(t);}function Nf(t){if(fy(t),216===t.kind&&(t.awaitModifier?2==(6&e.getFunctionFlags(e.getContainingFunction(t)))&&ah<5&&Bm(t,16384):rh.downlevelIteration&&ah<2&&Bm(t,256)),227===t.initializer.kind)wf(t);else{var n=t.initializer,r=Pf(t.expression,t.awaitModifier);if(177===n.kind||178===n.kind)Pd(n,r||Dh);else{var a=ep(n);fd(n,e.Diagnostics.The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access),r&&So(r,a,n,void 0);}}wg(t.statement),t.locals&&Wp(t);}function Af(t){fy(t);var n=Bl(t.expression);if(227===t.initializer.kind){var r=t.initializer.declarations[0];r&&e.isBindingPattern(r.name)&&d(r.name,e.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern),wf(t);}else{var a=t.initializer,i=ep(a);177===a.kind||178===a.kind?d(a,e.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern):vo(di(n),i)?fd(a,e.Diagnostics.The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access):d(a,e.Diagnostics.The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any);}Yu(n,17350656)||d(t.expression,e.Diagnostics.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter),wg(t.statement),t.locals&&Wp(t);}function wf(e){var t=e.initializer;t.declarations.length>=1&&vf(t.declarations[0]);}function Pf(e,t){return Of(Bl(e),e,!0,void 0!==t)}function Of(e,t,n,r){return dt(e)?e:Ff(e,t,n,r,!0)||Th}function Ff(t,n,r,a,i){var o=ah>=2,s=!o&&rh.downlevelIteration;if(o||s||a){var c=If(t,o?n:void 0,a,!0,i);if(c||o)return c}var u=t,l=!1,_=!1;if(r){if(65536&u.flags){var p=t.types,f=e.filter(p,function(e){return!(262178&e.flags)});f!==p&&(u=ti(f,!0));}else 262178&u.flags&&(u=Bh);if((_=u!==t)&&(ah<1&&n&&(d(n,e.Diagnostics.Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher),l=!0),8192&u.flags))return Ph}if(!Zo(u))return n&&!l&&d(n,!r||_?s?e.Diagnostics.Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator:e.Diagnostics.Type_0_is_not_an_array_type:s?e.Diagnostics.Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator:e.Diagnostics.Type_0_is_not_an_array_type_or_a_string_type,He(u)),_?Ph:void 0;var g=xr(u,1);return _&&g?262178&g.flags?Ph:ti([g,Ph],!0):g}function If(t,n,r,a,i){function o(t){var o=t;if(r){if(o.iteratedTypeOfAsyncIterable)return o.iteratedTypeOfAsyncIterable;if(Jt(t,Da(!1))||Jt(t,Na(!1)))return o.iteratedTypeOfAsyncIterable=t.typeArguments[0]}if(a){if(o.iteratedTypeOfIterable)return o.iteratedTypeOfIterable;if(Jt(t,Aa(!1))||Jt(t,Pa(!1)))return o.iteratedTypeOfIterable=t.typeArguments[0]}var s=r&&_t(t,e.getPropertyNameForKnownSymbolName(\"asyncIterator\")),c=s||a&&_t(t,e.getPropertyNameForKnownSymbolName(\"iterator\"));if(!dt(c)){var u=c&&yr(c,0);if(e.some(u)){var l=Mf(ti(e.map(u,Lr),!0),n,!!s);return i&&n&&l&&So(t,s?Ra(l):Ba(l),n),s?o.iteratedTypeOfAsyncIterable=l:o.iteratedTypeOfIterable=l}n&&(d(n,r?e.Diagnostics.Type_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator:e.Diagnostics.Type_must_have_a_Symbol_iterator_method_that_returns_an_iterator),n=void 0);}}if(!dt(t))return Ec(t,o)}function Mf(t,n,r){if(!dt(t)){var a=t;if(r?a.iteratedTypeOfAsyncIterator:a.iteratedTypeOfIterator)return r?a.iteratedTypeOfAsyncIterator:a.iteratedTypeOfIterator;if(Jt(t,(r?Ea:wa)(!1)))return r?a.iteratedTypeOfAsyncIterator=t.typeArguments[0]:a.iteratedTypeOfIterator=t.typeArguments[0];var i=_t(t,\"next\");if(!dt(i)){var o=i?yr(i,0):th;if(0!==o.length){var s=ti(e.map(o,Lr),!0);if(!(dt(s)||r&&(s=Fp(s,n,e.Diagnostics.The_type_returned_by_the_next_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_property),dt(s)))){var c=s&&_t(s,\"value\");if(c)return r?a.iteratedTypeOfAsyncIterator=c:a.iteratedTypeOfIterator=c;n&&d(n,r?e.Diagnostics.The_type_returned_by_the_next_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_property:e.Diagnostics.The_type_returned_by_the_next_method_of_an_iterator_must_have_a_value_property);}}else n&&d(n,r?e.Diagnostics.An_async_iterator_must_have_a_next_method:e.Diagnostics.An_iterator_must_have_a_next_method);}}}function Rf(e,t){if(!dt(e))return If(e,void 0,t,!t,!1)||Mf(e,void 0,t)}function Lf(e){jy(e)||by(e);}function Bf(t){return 153===t.kind&&void 0!==e.getEffectiveSetAccessorTypeAnnotationNode(e.getDeclarationOfKind(t.symbol,154))}function Kf(t,n){var r=2==(3&e.getFunctionFlags(t))?Ip(n):n;return r&&xd(r,1025)}function jf(t){jy(t)||e.getContainingFunction(t)||Py(t,e.Diagnostics.A_return_statement_can_only_be_used_within_a_function_body);var n=e.getContainingFunction(t);if(n){var r=Lr(Pr(n));if(ch||t.expression||8192&r.flags){var a=t.expression?qd(t.expression):Eh,i=e.getFunctionFlags(n);if(1&i)return;if(154===n.kind)t.expression&&d(t,e.Diagnostics.Setters_cannot_return_a_value);else if(152===n.kind)t.expression&&!So(a,r,t)&&d(t,e.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class);else if(e.getEffectiveReturnTypeNode(n)||Bf(n))if(2&i){var o=Ip(r),s=Mp(a,t,e.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member);o&&So(s,o,t);}else So(a,r,t);}else 152!==n.kind&&rh.noImplicitReturns&&!Kf(n,r)&&d(t,e.Diagnostics.Not_all_code_paths_return_a_value);}}function Jf(t){jy(t)||16384&t.flags&&Py(t,e.Diagnostics.with_statements_are_not_allowed_in_an_async_function_block),ep(t.expression);var n=e.getSourceFileOfNode(t);if(!wy(n)){var r=e.getSpanOfTokenAtPosition(n,t.pos).start;Oy(n,r,t.statement.pos-r,e.Diagnostics.The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any);}}function zf(t){jy(t);var n,r=!1,a=ep(t.expression),i=ns(a);e.forEach(t.caseBlock.clauses,function(o){if(258===o.kind&&!r)if(void 0===n)n=o;else{var c=e.getSourceFileOfNode(t),u=e.skipTrivia(c.text,o.pos);Oy(c,u,(o.statements.length>0?o.statements[0].pos:o.end)-u,e.Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement),r=!0;}if(s&&257===o.kind){var l=o,_=ep(l.expression),d=ns(_),p=a;d&&i||(_=d?rs(_):_,p=rs(a)),Id(p,_)||To(_,p,l.expression,void 0);}e.forEach(o.statements,wg);}),t.caseBlock.locals&&Wp(t.caseBlock);}function Uf(t){jy(t)||e.findAncestor(t.parent,function(n){if(e.isFunctionLike(n))return\"quit\";if(222===n.kind&&n.label.text===t.label.text){var r=e.getSourceFileOfNode(t);return Fy(t.label,e.Diagnostics.Duplicate_label_0,e.getTextOfNodeFromSourceText(r.text,t.label)),!0}}),wg(t.statement);}function qf(t){jy(t)||void 0===t.expression&&zy(t,e.Diagnostics.Line_break_not_permitted_here),t.expression&&ep(t.expression);}function Vf(t){jy(t),rf(t.tryBlock);var n=t.catchClause;if(n){if(n.variableDeclaration)if(n.variableDeclaration.type)Py(n.variableDeclaration.type,e.Diagnostics.Catch_clause_variable_cannot_have_a_type_annotation);else if(n.variableDeclaration.initializer)Py(n.variableDeclaration.initializer,e.Diagnostics.Catch_clause_variable_cannot_have_an_initializer);else{var r=n.block.locals;r&&e.forEachKey(n.locals,function(t){var n=r.get(t);n&&0!=(2&n.flags)&&Fy(n.valueDeclaration,e.Diagnostics.Cannot_redeclare_identifier_0_in_catch_clause,t);});}rf(n.block);}t.finallyBlock&&rf(t.finallyBlock);}function $f(t){function n(t,n,r,a,i,o){if(i){var s=t.valueDeclaration;if(1!==o||(s?Gu(e.getNameOfDeclaration(s)):Zu(t.name))){var c;!s||194!==s.kind&&144!==e.getNameOfDeclaration(s).kind&&t.parent!==r.symbol?a?c=a:2&T(r)&&(c=e.forEach(tn(r),function(e){return Zn(e,t.name)&&xr(e,o)})?void 0:r.symbol.declarations[0]):c=s,c&&!vo(n,i)&&d(c,0===o?e.Diagnostics.Property_0_of_type_1_is_not_assignable_to_string_index_type_2:e.Diagnostics.Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2,$e(t),He(n),He(i));}}}var r=qr(t.symbol,1),a=qr(t.symbol,0),i=xr(t,0),o=xr(t,1);if((i||o)&&(e.forEach(Qn(t),function(e){var s=jt(e);n(e,s,t,a,i,0),n(e,s,t,r,o,1);}),1&T(t)&&e.isClassLike(t.symbol.valueDeclaration)))for(var s=0,c=t.symbol.valueDeclaration.members;s<c.length;s++){var u=c[s];if(!(32&e.getModifierFlags(u))&&e.hasDynamicName(u)){var l=jt(u.symbol);n(u.symbol,l,t,a,i,0),n(u.symbol,l,t,r,o,1);}}var _;i&&o&&!(_=r||a)&&2&T(t)&&(_=e.forEach(tn(t),function(e){return xr(e,0)&&xr(e,1)})?void 0:t.symbol.declarations[0]),_&&!vo(o,i)&&d(_,e.Diagnostics.Numeric_index_type_0_is_not_assignable_to_string_index_type_1,He(o),He(i));}function Wf(e,t){switch(e.text){case\"any\":case\"number\":case\"boolean\":case\"string\":case\"symbol\":case\"void\":case\"object\":d(e,t,e.text);}}function Hf(t){if(t)for(var n=!1,r=0;r<t.length;r++){var a=t[r];if(np(a),s){a.default?n=!0:n&&d(a,e.Diagnostics.Required_type_parameters_may_not_follow_optional_type_parameters);for(var i=0;i<r;i++)t[i].symbol===a.symbol&&d(a.name,e.Diagnostics.Duplicate_identifier_0,e.declarationNameToString(a.name));}}}function Gf(t){if(1!==t.declarations.length){var n=k(t);if(!n.typeParametersChecked){n.typeParametersChecked=!0;var r=ag(t);if(r.length<=1)return;if(!Xf(r,yn(t).localTypeParameters))for(var a=$e(t),i=0,o=r;i<o.length;i++)d(o[i].name,e.Diagnostics.All_declarations_of_0_must_have_identical_type_parameters,a);}}}function Xf(t,n){for(var r=e.length(n),a=Ar(n),i=0,o=t;i<o.length;i++){var s=o[i],c=e.length(s.typeParameters);if(c<a||c>r)return!1;for(var u=0;u<c;u++){var l=s.typeParameters[u],_=n[u];if(l.name.text!==_.symbol.name)return!1;var d=l.constraint&&Mi(l.constraint),p=Hr(_);if((d||p)&&(!d||!p||!go(d,p)))return!1;var f=l.default&&Mi(l.default),g=lr(_);if(f&&g&&!go(f,g))return!1}}return!0}function Yf(e){return eg(e),Pg(e),jt(ke(e))}function Qf(t){e.forEach(t.members,wg),Wp(t);}function Zf(t){t.name||512&e.getModifierFlags(t)||Py(t,e.Diagnostics.A_class_declaration_without_the_default_modifier_must_have_a_name),eg(t),e.forEach(t.members,wg),Wp(t);}function eg(t){Ym(t),qp(t),t.name&&(Wf(t.name,e.Diagnostics.Class_name_cannot_be_0),sf(t,t.name),cf(t,t.name),df(t,t.name),pf(t,t.name)),Hf(t.typeParameters),Op(t);var n=ke(t),r=yn(n),a=En(r),i=jt(n);Gf(n),up(t),e.isInAmbientContext(t)||lp(t);var o=e.getClassExtendsHeritageClauseElement(t);if(o){ah<2&&Bm(o.parent,1);var c=tn(r);if(c.length&&s){var u=c[0],l=en(r),_=_r(l);if(tg(_,o),wg(o.expression),e.some(o.typeArguments)){e.forEach(o.typeArguments,wg);for(var p=0,f=Qt(_,o.typeArguments,o);p<f.length&&vp(f[p].typeParameters,o.typeArguments);p++);}if(So(a,En(u,r.thisType),t.name||t,e.Diagnostics.Class_0_incorrectly_extends_base_class_1),So(i,fo(_),t.name||t,e.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1),540672&l.flags&&!Gt(i)&&d(t.name||t,e.Diagnostics.A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any),!(_.symbol&&32&_.symbol.flags||540672&l.flags)){var g=Zt(_,o.typeArguments,o);e.forEach(g,function(e){return Lr(e)!==u})&&d(o.expression,e.Diagnostics.Base_constructors_must_all_have_the_same_return_type);}ig(r,u);}}var m=e.getClassImplementsHeritageClauseElements(t);if(m)for(var y=0,h=m;y<h.length;y++){var v=h[y];if(e.isEntityNameExpression(v.expression)||d(v.expression,e.Diagnostics.A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments),bp(v),s){var b=Mi(v);b!==Dh&&(an(b)?So(a,En(b,r.thisType),t.name||t,e.Diagnostics.Class_0_incorrectly_implements_interface_1):d(v,e.Diagnostics.A_class_may_only_implement_another_class_or_interface));}}s&&($f(r),dp(t));}function tg(t,n){var r=yr(t,1);if(r.length){var a=r[0].declaration;a&&8&e.getModifierFlags(a)&&($g(n,rg(t.symbol))||d(n,e.Diagnostics.Cannot_extend_a_class_0_Class_constructor_is_marked_as_private,oe(t.symbol)));}}function ng(t){return 1&e.getCheckFlags(t)?t.target:t}function rg(t){return e.forEach(t.declarations,function(t){return e.isClassLike(t)?t:void 0})}function ag(t){return e.filter(t.declarations,function(e){return 229===e.kind||230===e.kind})}function ig(t,n){for(var r=0,a=tr(n);r<a.length;r++){var i=a[r],o=ng(i);if(!(16777216&o.flags)){var s=ng(Zn(t,o.name)),c=e.getDeclarationModifierFlagsFromSymbol(o);if(e.Debug.assert(!!s,\"derived should point to something, even if it is the base class' declaration.\"),s)if(s===o){var u=rg(t.symbol);!(128&c)||u&&128&e.getModifierFlags(u)||(199===u.kind?d(u,e.Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1,$e(i),He(n)):d(u,e.Diagnostics.Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2,He(t),$e(i),He(n)));}else{var l=e.getDeclarationModifierFlagsFromSymbol(s);if(8&c||8&l)continue;if(Rl(o)&&Rl(s)||98308&o.flags&&98308&s.flags)continue;var _=void 0;_=Rl(o)?98304&s.flags?e.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor:e.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property:4&o.flags?e.Diagnostics.Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function:e.Diagnostics.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function,d(e.getNameOfDeclaration(s.valueDeclaration)||s.valueDeclaration,_,He(n),$e(o),He(t));}}}}function og(t,n){var r=tn(t);if(r.length<2)return!0;var a=e.createMap();e.forEach(Dn(t).declaredProperties,function(e){a.set(e.name,{prop:e,containingType:t});});for(var i=!0,o=0,s=r;o<s.length;o++)for(var c=s[o],u=0,l=tr(En(c,t.thisType));u<l.length;u++){var _=l[u],d=a.get(_.name);if(d){if(d.containingType!==t&&!qo(d.prop,_)){i=!1;var p=He(d.containingType),f=He(c),g=e.chainDiagnosticMessages(void 0,e.Diagnostics.Named_property_0_of_types_1_and_2_are_not_identical,$e(_),p,f);g=e.chainDiagnosticMessages(g,e.Diagnostics.Interface_0_cannot_simultaneously_extend_types_1_and_2,He(t),p,f),tb.add(e.createDiagnosticForNodeFromMessageChain(n,g));}}else a.set(_.name,{prop:_,containingType:c});}return i}function sg(t){if(Jm(t)||zm(t)||cy(t),Hf(t.typeParameters),s){Wf(t.name,e.Diagnostics.Interface_name_cannot_be_0),Op(t);var n=ke(t);if(Gf(n),t===e.getDeclarationOfKind(n,230)){var r=yn(n),a=En(r);if(og(r,t.name)){for(var i=0,o=tn(r);i<o.length;i++)So(a,En(o[i],r.thisType),t.name,e.Diagnostics.Interface_0_incorrectly_extends_interface_1);$f(r);}}_p(t);}e.forEach(e.getInterfaceBaseTypeNodes(t),function(t){e.isEntityNameExpression(t.expression)||d(t.expression,e.Diagnostics.An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments),bp(t);}),e.forEach(t.members,wg),s&&(dp(t),Wp(t));}function cg(t){Jm(t)||zm(t),Wf(t.name,e.Diagnostics.Type_alias_name_cannot_be_0),Hf(t.typeParameters),wg(t.type);}function ug(e){var t=S(e);if(!(16384&t.flags)){t.flags|=16384;for(var n=0,r=0,a=e.members;r<a.length;r++){var i=a[r],o=lg(i,n);S(i).enumMemberValue=o,n=\"number\"==typeof o?o+1:void 0;}}}function lg(t,n){if(ft(t.name))d(t.name,e.Diagnostics.Computed_property_names_are_not_allowed_in_enums);else{var r=e.getTextOfPropertyName(t.name);Zu(r)&&!Qu(r)&&d(t.name,e.Diagnostics.An_enum_member_cannot_have_a_numeric_name);}if(t.initializer)return _g(t);if(!e.isInAmbientContext(t.parent)||e.isConst(t.parent))return void 0!==n?n:void d(t.name,e.Diagnostics.Enum_member_must_have_initializer)}function _g(t){function n(a){switch(a.kind){case 192:var i=n(a.operand);if(\"number\"==typeof i)switch(a.operator){case 37:return i;case 38:return-i;case 52:return~i}break;case 194:var o=n(a.left),s=n(a.right);if(\"number\"==typeof o&&\"number\"==typeof s)switch(a.operatorToken.kind){case 49:return o|s;case 48:return o&s;case 46:return o>>s;case 47:return o>>>s;case 45:return o<<s;case 50:return o^s;case 39:return o*s;case 41:return o/s;case 37:return o+s;case 38:return o-s;case 42:return o%s}break;case 9:return a.text;case 8:return Jy(a),+a.text;case 185:return n(a.expression);case 71:return e.nodeIsMissing(a)?0:r(a,ke(t.parent),a.text);case 180:case 179:if(dg(a)){var c=Qd(a.expression);if(c.symbol&&384&c.symbol.flags){var u=179===a.kind?a.name.text:a.argumentExpression.text;return r(a,c.symbol,u)}}}}function r(n,r,a){var i=r.exports.get(a);if(i){var o=i.valueDeclaration;if(o!==t)return N(o,t)?S(o).enumMemberValue:(d(n,e.Diagnostics.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums),0)}}var a=_n(ke(t.parent)),i=e.isConst(t.parent),o=t.initializer,s=1!==a||ln(t)?n(o):void 0;if(void 0!==s)i&&\"number\"==typeof s&&!isFinite(s)&&d(o,isNaN(s)?e.Diagnostics.const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN:e.Diagnostics.const_enum_member_initializer_was_evaluated_to_a_non_finite_value);else{if(1===a)return d(o,e.Diagnostics.Computed_values_are_not_permitted_in_an_enum_with_string_valued_members),0;i?d(o,e.Diagnostics.In_const_enum_declarations_member_initializer_must_be_constant_expression):e.isInAmbientContext(t.parent)?d(o,e.Diagnostics.In_ambient_enum_declarations_member_initializer_must_be_constant_expression):So(ep(o),yn(ke(t.parent)),o,void 0);}return s}function dg(e){return 71===e.kind||179===e.kind&&dg(e.expression)||180===e.kind&&dg(e.expression)&&9===e.argumentExpression.kind}function pg(t){if(s){Jm(t)||zm(t),Wf(t.name,e.Diagnostics.Enum_name_cannot_be_0),sf(t,t.name),cf(t,t.name),df(t,t.name),pf(t,t.name),Op(t),ug(t);var n=e.isConst(t);rh.isolatedModules&&n&&e.isInAmbientContext(t)&&d(t.name,e.Diagnostics.Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided);var r=ke(t);if(t===e.getDeclarationOfKind(r,t.kind)){r.declarations.length>1&&e.forEach(r.declarations,function(t){e.isConstEnumDeclaration(t)!==n&&d(e.getNameOfDeclaration(t),e.Diagnostics.Enum_declarations_must_all_be_const_or_non_const);});var a=!1;e.forEach(r.declarations,function(t){if(232!==t.kind)return!1;var n=t;if(!n.members.length)return!1;var r=n.members[0];r.initializer||(a?d(r.name,e.Diagnostics.In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element):a=!0);});}}}function fg(t){for(var n=0,r=t.declarations;n<r.length;n++){var a=r[n];if((229===a.kind||228===a.kind&&e.nodeIsPresent(a.body))&&!e.isInAmbientContext(a))return a}}function gg(t,n){var r=e.getEnclosingBlockScopeContainer(t),a=e.getEnclosingBlockScopeContainer(n);return C(r)?C(a):!C(a)&&r===a}function mg(t){if(s){var n=e.isGlobalScopeAugmentation(t),a=e.isInAmbientContext(t);n&&!a&&d(t.name,e.Diagnostics.Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambient_context);var i=e.isAmbientModule(t);if(Cg(t,i?e.Diagnostics.An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file:e.Diagnostics.A_namespace_declaration_is_only_allowed_in_a_namespace_or_module))return;Jm(t)||zm(t)||a||9!==t.name.kind||Fy(t.name,e.Diagnostics.Only_ambient_modules_can_use_quoted_names),e.isIdentifier(t.name)&&(sf(t,t.name),df(t,t.name),pf(t,t.name)),Op(t);var o=ke(t);if(512&o.flags&&o.declarations.length>1&&!a&&r(t,rh.preserveConstEnums||rh.isolatedModules)){var c=fg(o);c&&(e.getSourceFileOfNode(t)!==e.getSourceFileOfNode(c)?d(t.name,e.Diagnostics.A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged):t.pos<c.pos&&d(t.name,e.Diagnostics.A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged));var u=e.getDeclarationOfKind(o,229);u&&gg(t,u)&&(S(t).flags|=32768);}if(i)if(e.isExternalModuleAugmentation(t)){if((n||134217728&ke(t).flags)&&t.body)for(var l=0,_=t.body.statements;l<_.length;l++)yg(_[l],n);}else C(t.parent)?n?d(t.name,e.Diagnostics.Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_declarations):e.isExternalModuleNameRelative(t.name.text)&&d(t.name,e.Diagnostics.Ambient_module_declaration_cannot_specify_relative_module_name):n?d(t.name,e.Diagnostics.Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_declarations):d(t.name,e.Diagnostics.Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces);}t.body&&(wg(t.body),e.isGlobalScopeAugmentation(t)||Wp(t));}function yg(t,n){switch(t.kind){case 208:for(var r=0,a=t.declarationList.declarations;r<a.length;r++)yg(a[r],n);break;case 243:case 244:Py(t,e.Diagnostics.Exports_and_export_assignments_are_not_permitted_in_module_augmentations);break;case 237:case 238:Py(t,e.Diagnostics.Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module);break;case 176:case 226:var i=t.name;if(e.isBindingPattern(i)){for(var o=0,s=i.elements;o<s.length;o++)yg(s[o],n);break}case 229:case 232:case 228:case 230:case 233:case 231:if(n)return;var c=ke(t);if(c){var u=!(134217728&c.flags);u||(u=e.isExternalModuleAugmentation(c.parent.declarations[0]));}}}function hg(e){switch(e.kind){case 71:return e;case 143:do{e=e.left;}while(71!==e.kind);return e;case 179:do{e=e.expression;}while(71!==e.kind);return e}}function vg(t){var n=e.getExternalModuleName(t);if(!e.nodeIsMissing(n)&&9!==n.kind)return d(n,e.Diagnostics.String_literal_expected),!1;var r=234===t.parent.kind&&e.isAmbientModule(t.parent.parent);return 265===t.parent.kind||r?!(r&&e.isExternalModuleNameRelative(n.text)&&!Ze(t))||(d(t,e.Diagnostics.Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relative_module_name),!1):(d(n,244===t.kind?e.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace:e.Diagnostics.Import_declarations_in_a_namespace_cannot_reference_a_module),!1)}function bg(t){var n=ke(t),r=ne(n);if(r!==kh){var a=(1156031&n.flags?107455:0)|(793064&n.flags?793064:0)|(1920&n.flags?1920:0);r.flags&a&&d(t,246===t.kind?e.Diagnostics.Export_declaration_conflicts_with_exported_declaration_of_0:e.Diagnostics.Import_declaration_conflicts_with_local_declaration_of_0,$e(n)),!rh.isolatedModules||246!==t.kind||107455&r.flags||e.isInAmbientContext(t)||d(t,e.Diagnostics.Cannot_re_export_a_type_when_the_isolatedModules_flag_is_provided);}}function xg(e){sf(e,e.name),df(e,e.name),pf(e,e.name),bg(e);}function kg(t){if(!Cg(t,e.Diagnostics.An_import_declaration_can_only_be_used_in_a_namespace_or_module)&&(Jm(t)||zm(t)||0===e.getModifierFlags(t)||Py(t,e.Diagnostics.An_import_declaration_cannot_have_modifiers),vg(t))){var n=t.importClause;n&&(n.name&&xg(n),n.namedBindings&&(240===n.namedBindings.kind?xg(n.namedBindings):e.forEach(n.namedBindings.elements,xg)));}}function Sg(t){if(!Cg(t,e.Diagnostics.An_import_declaration_can_only_be_used_in_a_namespace_or_module)&&(Jm(t)||zm(t),e.isInternalModuleImportEqualsDeclaration(t)||vg(t)))if(xg(t),1&e.getModifierFlags(t)&&re(t),e.isInternalModuleImportEqualsDeclaration(t)){var n=ne(ke(t));if(n!==kh){if(107455&n.flags){var r=hg(t.moduleReference);1920&se(r,108479).flags||d(r,e.Diagnostics.Module_0_is_hidden_by_a_local_declaration_with_the_same_name,e.declarationNameToString(r));}793064&n.flags&&Wf(t.name,e.Diagnostics.Import_name_cannot_be_0);}}else ih!==e.ModuleKind.ES2015||e.isInAmbientContext(t)||Fy(t,e.Diagnostics.Import_assignment_cannot_be_used_when_targeting_ECMAScript_2015_modules_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_import_d_from_mod_or_another_module_format_instead);}function Tg(t){if(!Cg(t,e.Diagnostics.An_export_declaration_can_only_be_used_in_a_module)&&(Jm(t)||zm(t)||0===e.getModifierFlags(t)||Py(t,e.Diagnostics.An_export_declaration_cannot_have_modifiers),!t.moduleSpecifier||vg(t)))if(t.exportClause){e.forEach(t.exportClause.elements,Dg);var n=234===t.parent.kind&&e.isAmbientModule(t.parent.parent),r=!n&&234===t.parent.kind&&!t.moduleSpecifier&&e.isInAmbientContext(t);265===t.parent.kind||n||r||d(t,e.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace);}else{var a=ce(t,t.moduleSpecifier);a&&pe(a)&&d(t.moduleSpecifier,e.Diagnostics.Module_0_uses_export_and_cannot_be_used_with_export_Asterisk,$e(a)),ih!==e.ModuleKind.System&&ih!==e.ModuleKind.ES2015&&Bm(t,32768);}}function Cg(e,t){var n=265===e.parent.kind||234===e.parent.kind||233===e.parent.kind;return n||Py(e,t),!n}function Dg(t){if(bg(t),!t.parent.parent.moduleSpecifier){var n=t.propertyName||t.name,r=A(n,n.text,9289727,void 0,void 0);r&&(r===ph||C(ut(r.declarations[0])))?d(n,e.Diagnostics.Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module,n.text):re(t);}}function Eg(t){if(!Cg(t,e.Diagnostics.An_export_assignment_can_only_be_used_in_a_module)){var n=265===t.parent.kind?t.parent:t.parent.parent;233!==n.kind||e.isAmbientModule(n)?(Jm(t)||zm(t)||0===e.getModifierFlags(t)||Py(t,e.Diagnostics.An_export_assignment_cannot_have_modifiers),71===t.expression.kind?re(t):qd(t.expression),Ag(n),t.isExportEquals&&!e.isInAmbientContext(t)&&(ih===e.ModuleKind.ES2015?Fy(t,e.Diagnostics.Export_assignment_cannot_be_used_when_targeting_ECMAScript_2015_modules_Consider_using_export_default_or_another_module_format_instead):ih===e.ModuleKind.System&&Fy(t,e.Diagnostics.Export_assignment_is_not_supported_when_module_flag_is_system))):t.isExportEquals?d(t,e.Diagnostics.An_export_assignment_cannot_be_used_in_a_namespace):d(t,e.Diagnostics.A_default_export_can_only_be_used_in_an_ECMAScript_style_module);}}function Ng(t){return e.forEachEntry(t.exports,function(e,t){return\"export=\"!==t})}function Ag(t){function n(e){return 228!==e.kind&&151!==e.kind||!!e.body}var r=ke(t),a=k(r);if(!a.exportsChecked){var i=r.exports.get(\"export=\");if(i&&Ng(r)){var o=J(i)||i.valueDeclaration;Ze(o)||d(o,e.Diagnostics.An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements);}var s=he(r);s&&s.forEach(function(t,r){var a=t.declarations,i=t.flags;if(\"__export\"!==r&&!(1984&i)){var o=e.countWhere(a,n);if(!(524288&i&&o<=2)&&o>1)for(var s=0,c=a;s<c.length;s++){var u=c[s];n(u)&&tb.add(e.createDiagnosticForNode(u,e.Diagnostics.Cannot_redeclare_exported_variable_0,r));}}}),a.exportsChecked=!0;}}function wg(e){if(e){var t=e.kind;if(Vy)switch(t){case 233:case 229:case 230:case 228:Vy.throwIfCancellationRequested();}switch(t){case 145:return np(e);case 146:return rp(e);case 149:case 148:return pp(e);case 160:case 161:case 155:case 156:case 157:return cp(e);case 151:case 150:return fp(e);case 152:return gp(e);case 153:case 154:return mp(e);case 159:return bp(e);case 158:return ip(e);case 162:return xp(e);case 163:return kp(e);case 164:return Sp(e);case 165:return Tp(e);case 166:case 167:return Cp(e);case 168:case 170:return wg(e.type);case 171:return Ep(e);case 172:return Np(e);case 228:return Vp(e);case 207:case 234:return rf(e);case 208:return xf(e);case 210:return Sf(e);case 211:return Tf(e);case 212:return Cf(e);case 213:return Df(e);case 214:return Ef(e);case 215:return Af(e);case 216:return Nf(e);case 217:case 218:return Lf(e);case 219:return jf(e);case 220:return Jf(e);case 221:return zf(e);case 222:return Uf(e);case 223:return qf(e);case 224:return Vf(e);case 226:return vf(e);case 176:return bf(e);case 229:return Zf(e);case 230:return sg(e);case 231:return cg(e);case 232:return pg(e);case 233:return mg(e);case 238:return kg(e);case 237:return Sg(e);case 244:return Tg(e);case 243:return Eg(e);case 209:case 225:return void jy(e);case 247:return hp(e)}}}function Pg(e){xv&&xv.push(e);}function Og(){for(var e=0,t=xv;e<t.length;e++){var n=t[e];switch(n.kind){case 186:case 187:case 151:case 150:ud(n);break;case 153:case 154:mp(n);break;case 199:Qf(n);}}}function Fg(t){e.performance.mark(\"beforeCheck\"),Ig(t),e.performance.mark(\"afterCheck\"),e.performance.measure(\"Check\",\"beforeCheck\",\"afterCheck\");}function Ig(t){var n=S(t);if(!(1&n.flags)){if(rh.skipLibCheck&&t.isDeclarationFile||rh.skipDefaultLibCheck&&t.hasNoDefaultLib)return;Ky(t),Qv.length=0,Zv.length=0,xv=[],kv=s&&oh?[]:void 0,e.forEach(t.statements,wg),Og(),e.isExternalModule(t)&&Wp(t),t.isDeclarationFile||Hp(),xv=void 0,kv=void 0,e.isExternalOrCommonJsModule(t)&&Ag(t),Qv.length&&(e.forEach(Qv,uf),Qv.length=0),Zv.length&&(e.forEach(Zv,lf),Zv.length=0),n.flags|=1;}}function Mg(e,t){try{return Vy=t,Rg(e)}finally{Vy=void 0;}}function Rg(t){if(Bg(),t){var n=tb.getGlobalDiagnostics(),r=n.length;Fg(t);var i=tb.getDiagnostics(t.fileName),o=tb.getGlobalDiagnostics();if(o!==n){var s=e.relativeComplement(n,o,e.compareDiagnostics);return e.concatenate(s,i)}return 0===r&&o.length>0?e.concatenate(o,i):i}return e.forEach(a.getSourceFiles(),Fg),tb.getDiagnostics()}function Lg(){return Bg(),tb.getGlobalDiagnostics()}function Bg(){if(!s)throw new Error(\"Trying to get diagnostics from a type checker that does not produce them.\")}function Kg(e){if(e)for(;e.parent;){if(220===e.parent.kind&&e.parent.statement===e)return!0;e=e.parent;}return!1}function jg(t,n){function r(e,t){if(e.flags&t){var n=e.name;i.has(n)||i.set(n,e);}}function a(e,t){t&&e.forEach(function(e){r(e,t);});}if(Kg(t))return[];var i=e.createMap(),o=0;return function(){for(;t;){switch(t.locals&&!C(t)&&a(t.locals,n),t.kind){case 265:if(!e.isExternalOrCommonJsModule(t))break;case 233:a(ke(t).exports,8914931&n);break;case 232:a(ke(t).exports,8&n);break;case 199:t.name&&r(t.symbol,n);case 229:case 230:32&o||a(ke(t).members,793064&n);break;case 186:t.name&&r(t.symbol,n);}e.introducesArgumentsExoticObject(t)&&r(fh,n),o=e.getModifierFlags(t),t=t.parent;}a(Ov,n);}(),Tr(i)}function Jg(e){return 71===e.kind&&zg(e.parent)&&e.parent.name===e}function zg(e){switch(e.kind){case 145:case 229:case 230:case 231:case 232:return!0}}function Ug(e){for(var t=e;t.parent&&143===t.parent.kind;)t=t.parent;return t.parent&&(159===t.parent.kind||277===t.parent.kind)}function qg(e){for(var t=e;t.parent&&179===t.parent.kind;)t=t.parent;return t.parent&&201===t.parent.kind}function Vg(t,n){for(var r;;){if(!(t=e.getContainingClass(t)))break;if(r=n(t))break}return r}function $g(e,t){return!!Vg(e,function(e){return e===t})}function Wg(e){for(;143===e.parent.kind;)e=e.parent;return 237===e.parent.kind?e.parent.moduleReference===e&&e.parent:243===e.parent.kind?e.parent.expression===e&&e.parent:void 0}function Hg(e){return void 0!==Wg(e)}function Gg(t){switch(e.getSpecialPropertyAssignmentKind(t.parent.parent)){case 1:case 3:return ke(t.parent);case 4:case 2:case 5:return ke(t.parent.parent)}}function Xg(t){if(e.isDeclarationName(t))return ke(t.parent);if(e.isInJavaScriptFile(t)&&179===t.parent.kind&&t.parent===t.parent.parent.left){var n=Gg(t);if(n)return n}if(243===t.parent.kind&&e.isEntityNameExpression(t))return se(t,9289727);if(179!==t.kind&&Hg(t)){var r=e.getAncestor(t,237);return e.Debug.assert(void 0!==r),ie(t,!0)}if(e.isRightSideOfQualifiedNameOrPropertyAccess(t)&&(t=t.parent),qg(t)){var a=0;201===t.parent.kind?(a=793064,e.isExpressionWithTypeArgumentsInClassExtendsClause(t.parent)&&(a|=107455)):a=1920;var i=se(t,a|=8388608);if(i)return i}if(287===t.parent.kind){var o=e.getParameterFromJSDoc(t.parent);return o&&o.symbol}if(145===t.parent.kind&&290===t.parent.parent.kind){e.Debug.assert(!e.isInJavaScriptFile(t));var s=e.getTypeParameterFromJsDoc(t.parent);return s&&s.symbol}if(e.isPartOfExpression(t)){if(e.nodeIsMissing(t))return;if(71===t.kind)return e.isJSXTagName(t)&&sl(t)?_l(t.parent):se(t,107455,!1,!0);if(179===t.kind)return(c=S(t).resolvedSymbol)||jl(t),S(t).resolvedSymbol;if(143===t.kind){var c=S(t).resolvedSymbol;return c||Jl(t),S(t).resolvedSymbol}}else{if(Ug(t))return se(t,a=159===t.parent.kind||277===t.parent.kind?793064:1920,!1,!0);if(253===t.parent.kind)return Tl(t.parent)}return 158===t.parent.kind?se(t,1):void 0}function Yg(t){if(265===t.kind)return e.isExternalModule(t)?xe(t.symbol):void 0;if(!Kg(t)){if(i(t))return ke(t.parent);if(e.isLiteralComputedPropertyDeclarationName(t))return ke(t.parent.parent);if(71===t.kind){if(Hg(t))return Xg(t);if(176===t.parent.kind&&174===t.parent.parent.kind&&t===t.parent.propertyName){var n=em(t.parent.parent),r=n&&gr(n,t.text);if(r)return r}}switch(t.kind){case 71:case 179:case 143:return Xg(t);case 99:var a=e.getThisContainer(t,!1);if(e.isFunctionLike(a)){var o=Pr(a);if(o.thisParameter)return o.thisParameter}case 97:return(e.isPartOfExpression(t)?Qd(t):Mi(t)).symbol;case 169:return Mi(t).symbol;case 123:var s=t.parent;if(s&&152===s.kind)return s.parent.symbol;return;case 9:if(e.isExternalModuleImportEqualsDeclaration(t.parent.parent)&&e.getExternalModuleImportEqualsDeclarationExpression(t.parent.parent)===t||(238===t.parent.kind||244===t.parent.kind)&&t.parent.moduleSpecifier===t||e.isInJavaScriptFile(t)&&e.isRequireCall(t.parent,!1)||e.isImportCall(t.parent))return ce(t,t);case 8:if(180===t.parent.kind&&t.parent.argumentExpression===t){var c=Qd(t.parent.expression);if(c===Dh)return;var u=_r(c);if(u===Dh)return;return gr(u,t.text)}}}}function Qg(e){if(e&&262===e.kind)return se(e.name,8496063)}function Zg(e){return e.parent.parent.moduleSpecifier?H(e.parent.parent,e):se(e.propertyName||e.name,9289727)}function em(t){if(Kg(t))return Dh;if(e.isPartOfTypeNode(t)){var n=Mi(t);return n&&e.isExpressionWithTypeArgumentsInClassImplementsClause(t)&&(n=En(n,(r=em(e.getContainingClass(t))).thisType)),n}if(e.isPartOfExpression(t))return rm(t);if(e.isExpressionWithTypeArgumentsInClassExtendsClause(t)){var r=yn(ke(e.getContainingClass(t))),a=tn(r)[0];return a&&En(a,r.thisType)}if(zg(t))return yn(o=ke(t));if(Jg(t))return(o=Yg(t))&&yn(o);if(e.isDeclaration(t))return jt(o=ke(t));if(i(t))return(o=Yg(t))&&jt(o);if(e.isBindingPattern(t))return xt(t.parent,!0);if(Hg(t)){var o=Yg(t),s=o&&yn(o);return s!==Dh?s:jt(o)}return Dh}function tm(t){if(e.Debug.assert(178===t.kind||177===t.kind),216===t.parent.kind)return Pd(t,(n=Pf(t.parent.expression,t.parent.awaitModifier))||Dh);if(194===t.parent.kind){var n=Qd(t.parent.right);return Pd(t,n||Dh)}if(261===t.parent.kind)return Nd(tm(t.parent.parent)||Dh,t.parent);e.Debug.assert(177===t.parent.kind);var r=tm(t.parent),a=Of(r||Dh,t.parent,!1,!1)||Dh;return wd(t.parent,r,e.indexOf(t.parent.elements,t),a||Dh)}function nm(e){var t=tm(e.parent.parent);return t&&gr(t,e.text)}function rm(t){return e.isRightSideOfQualifiedNameOrPropertyAccess(t)&&(t=t.parent),Ni(Qd(t))}function am(t){var n=ke(t.parent);return 32&e.getModifierFlags(t)?jt(n):yn(n)}function im(t){var n=Sn(tr(t=_r(t)));return(yr(t,0).length||yr(t,1).length)&&e.forEach(tr(Hh),function(e){n.has(e.name)||n.set(e.name,e);}),Pe(n)}function om(t){if(6&e.getCheckFlags(t)){var n=[],r=t.name;return e.forEach(k(t).containingType.types,function(e){var t=gr(e,r);t&&n.push(t);}),n}if(134217728&t.flags){var a=t;if(a.leftSpread)return om(a.leftSpread).concat(om(a.rightSpread));if(a.syntheticOrigin)return om(a.syntheticOrigin);for(var i=void 0,o=t;o=k(o).target;)i=o;if(i)return[i]}return[t]}function sm(t){return!(e.isGeneratedIdentifier(t)||!(t=e.getParseTreeNode(t,e.isIdentifier)))&&(!(179===t.parent.kind&&t.parent.name===t)&&Fm(t)===fh)}function cm(t){function n(e){return(e=te(e))&&!!(107455&e.flags)}var r=ce(t.parent,t);if(!r||e.isShorthandAmbientModuleSymbol(r))return!0;var a=pe(r),i=k(r=_e(r));return void 0===i.exportsSomeValue&&(i.exportsSomeValue=a?!!(107455&r.flags):e.forEachEntry(he(r),n)),i.exportsSomeValue}function um(t){var n=t.parent;return n&&e.isModuleOrEnumDeclaration(n)&&t===n.name}function lm(t,n){if(t=e.getParseTreeNode(t,e.isIdentifier)){var r=Fm(t,um(t));if(r){if(1048576&r.flags){var a=xe(r.exportSymbol);if(!n&&944&a.flags)return;r=a;}var i=Se(r);if(i){if(512&i.flags&&265===i.valueDeclaration.kind){var o=i.valueDeclaration;return o!==e.getSourceFileOfNode(t)?void 0:o}return e.findAncestor(t.parent,function(t){return e.isModuleOrEnumDeclaration(t)&&ke(t)===i})}}}}function _m(t){if(t=e.getParseTreeNode(t,e.isIdentifier)){var n=Fm(t);if(ee(n,107455))return J(n)}}function dm(t){if(418&t.flags){var n=k(t);if(void 0===n.isDeclarationWithCollidingName){var r=e.getEnclosingBlockScopeContainer(t.valueDeclaration);if(e.isStatementWithLocals(r)){var a=S(t.valueDeclaration);if(A(r.parent,t.name,107455,void 0,void 0))n.isDeclarationWithCollidingName=!0;else if(131072&a.flags){var i=262144&a.flags,o=e.isIterationStatement(r,!1),s=207===r.kind&&e.isIterationStatement(r.parent,!1);n.isDeclarationWithCollidingName=!(e.isBlockScopedContainerTopLevel(r)||i&&(o||s));}else n.isDeclarationWithCollidingName=!1;}}return n.isDeclarationWithCollidingName}return!1}function pm(t){if(!e.isGeneratedIdentifier(t)&&(t=e.getParseTreeNode(t,e.isIdentifier))){var n=Fm(t);if(n&&dm(n))return n.valueDeclaration}}function fm(t){if(t=e.getParseTreeNode(t,e.isDeclaration)){var n=ke(t);if(n)return dm(n)}return!1}function gm(t){switch(t.kind){case 237:case 239:case 240:case 242:case 246:return ym(ke(t)||kh);case 244:var n=t.exportClause;return n&&e.forEach(n.elements,gm);case 243:return!t.expression||71!==t.expression.kind||ym(ke(t)||kh)}return!1}function mm(t){return!(void 0===(t=e.getParseTreeNode(t,e.isImportEqualsDeclaration))||265!==t.parent.kind||!e.isInternalModuleImportEqualsDeclaration(t))&&(ym(ke(t))&&t.moduleReference&&!e.nodeIsMissing(t.moduleReference))}function ym(e){var t=ne(e);return t===kh||107455&t.flags&&(rh.preserveConstEnums||!hm(t))}function hm(e){return Td(e)||e.constEnumOnlyModule}function vm(t,n){if(e.isAliasSymbolDeclaration(t)){var r=ke(t);if(r&&k(r).referenced)return!0}return!!n&&e.forEachChild(t,function(e){return vm(e,n)})}function bm(t){if(e.nodeIsPresent(t.body)){var n=Ir(ke(t));return n.length>1||1===n.length&&n[0].declaration!==t}return!1}function xm(t){return ch&&!Er(t)&&t.initializer&&!(92&e.getModifierFlags(t))}function km(t){return ch&&Er(t)&&!t.initializer&&!!(92&e.getModifierFlags(t))}function Sm(e){return S(e).flags}function Tm(e){return ug(e.parent),S(e).enumMemberValue}function Cm(e){switch(e.kind){case 264:case 179:case 180:return!0}return!1}function Dm(t){if(264===t.kind)return Tm(t);var n=S(t).resolvedSymbol;return n&&8&n.flags&&e.isConstEnumDeclaration(n.valueDeclaration.parent)?Tm(n.valueDeclaration):void 0}function Em(e){return 32768&e.flags&&yr(e,0).length>0}function Nm(t,n){var r=se(t,107455,!0,!1,n),a=se(t,793064,!0,!1,n);if(r&&r===a){var i=Ta(!1);if(i&&r===i)return e.TypeReferenceSerializationKind.Promise;var o=jt(r);if(o&&Xt(o))return e.TypeReferenceSerializationKind.TypeWithConstructSignatureAndValue}if(!a)return e.TypeReferenceSerializationKind.ObjectType;var s=yn(a);return s===Dh?e.TypeReferenceSerializationKind.Unknown:1&s.flags?e.TypeReferenceSerializationKind.ObjectType:kd(s,15360)?e.TypeReferenceSerializationKind.VoidNullableOrNeverType:kd(s,136)?e.TypeReferenceSerializationKind.BooleanType:kd(s,84)?e.TypeReferenceSerializationKind.NumberLikeType:kd(s,262178)?e.TypeReferenceSerializationKind.StringLikeType:is(s)?e.TypeReferenceSerializationKind.ArrayLikeType:kd(s,512)?e.TypeReferenceSerializationKind.ESSymbolType:Em(s)?e.TypeReferenceSerializationKind.TypeWithCallSignature:Qo(s)?e.TypeReferenceSerializationKind.ArrayLikeType:e.TypeReferenceSerializationKind.ObjectType}function Am(e,t,n,r){var a=ke(e),i=!a||133120&a.flags?Dh:as(jt(a));8192&n&&(i=_s(i,2048)),nt().buildTypeDisplay(i,r,t,n);}function wm(e,t,n,r){var a=Pr(e);nt().buildTypeDisplay(Lr(a),r,t,n);}function Pm(e,t,n,r){var a=bs(rm(e));nt().buildTypeDisplay(a,r,t,n);}function Om(e){return Ov.has(e)}function Fm(t,n){var r=S(t).resolvedSymbol;if(r)return r;var a=t;if(n){var i=t.parent;e.isDeclaration(i)&&t===i.name&&(a=ut(i));}return A(a,t.text,9544639,void 0,void 0)}function Im(t){if(!e.isGeneratedIdentifier(t)&&(t=e.getParseTreeNode(t,e.isIdentifier))){var n=Fm(t);if(n)return Te(n).valueDeclaration}}function Mm(t){if(e.isConst(t)){var n=jt(ke(t));return!!(96&n.flags&&1048576&n.flags)}return!1}function Rm(e,t){var n=jt(ke(e));t.writeStringLiteral(et(n));}function Lm(t){var n=e.getExternalModuleName(t),r=ue(n,n,void 0);if(r)return e.getDeclarationOfKind(r,265)}function Bm(t,n){if(($y&n)!==n&&rh.importHelpers){var r=e.getSourceFileOfNode(t);if(e.isEffectiveExternalModule(r,rh)&&!e.isInAmbientContext(t)){var a=jm(r,t);if(a!==kh)for(var i=n&~$y,o=1;o<=32768;o<<=1)if(i&o){var s=Km(o);D(a.exports,e.escapeIdentifier(s),107455)||d(t,e.Diagnostics.This_syntax_requires_an_imported_helper_named_1_but_module_0_has_no_exported_member_1,e.externalHelpersModuleNameText,s);}$y|=n;}}}function Km(t){switch(t){case 1:return\"__extends\";case 2:return\"__assign\";case 4:return\"__rest\";case 8:return\"__decorate\";case 16:return\"__metadata\";case 32:return\"__param\";case 64:return\"__awaiter\";case 128:return\"__generator\";case 256:return\"__values\";case 512:return\"__read\";case 1024:return\"__spread\";case 2048:return\"__await\";case 4096:return\"__asyncGenerator\";case 8192:return\"__asyncDelegator\";case 16384:return\"__asyncValues\";case 32768:return\"__exportStar\";default:e.Debug.fail(\"Unrecognized helper\");}}function jm(t,n){return Wy||(Wy=le(t,e.externalHelpersModuleNameText,e.Diagnostics.This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found,n)||kh),Wy}function Jm(t){if(!t.decorators)return!1;if(!e.nodeCanBeDecorated(t))return 151!==t.kind||e.nodeIsPresent(t.body)?Py(t,e.Diagnostics.Decorators_are_not_valid_here):Py(t,e.Diagnostics.A_decorator_can_only_decorate_a_method_implementation_not_an_overload);if(153===t.kind||154===t.kind){var n=e.getAllAccessorDeclarations(t.parent.members,t);if(n.firstAccessor.decorators&&t===n.secondAccessor)return Py(t,e.Diagnostics.Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name)}return!1}function zm(t){var n=Um(t);if(void 0!==n)return n;for(var r,a,i,o,s=0,c=0,u=t.modifiers;c<u.length;c++){var l=u[c];if(131!==l.kind){if(148===t.kind||150===t.kind)return Fy(l,e.Diagnostics._0_modifier_cannot_appear_on_a_type_member,e.tokenToString(l.kind));if(157===t.kind)return Fy(l,e.Diagnostics._0_modifier_cannot_appear_on_an_index_signature,e.tokenToString(l.kind))}switch(l.kind){case 76:if(232!==t.kind&&229===t.parent.kind)return Fy(t,e.Diagnostics.A_class_member_cannot_have_the_0_keyword,e.tokenToString(76));break;case 114:case 113:case 112:var _=Ye(e.modifierToFlag(l.kind));if(113===l.kind?l:112===l.kind&&l,28&s)return Fy(l,e.Diagnostics.Accessibility_modifier_already_seen);if(32&s)return Fy(l,e.Diagnostics._0_modifier_must_precede_1_modifier,_,\"static\");if(64&s)return Fy(l,e.Diagnostics._0_modifier_must_precede_1_modifier,_,\"readonly\");if(256&s)return Fy(l,e.Diagnostics._0_modifier_must_precede_1_modifier,_,\"async\");if(234===t.parent.kind||265===t.parent.kind)return Fy(l,e.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element,_);if(128&s)return 112===l.kind?Fy(l,e.Diagnostics._0_modifier_cannot_be_used_with_1_modifier,_,\"abstract\"):Fy(l,e.Diagnostics._0_modifier_must_precede_1_modifier,_,\"abstract\");s|=e.modifierToFlag(l.kind);break;case 115:if(32&s)return Fy(l,e.Diagnostics._0_modifier_already_seen,\"static\");if(64&s)return Fy(l,e.Diagnostics._0_modifier_must_precede_1_modifier,\"static\",\"readonly\");if(256&s)return Fy(l,e.Diagnostics._0_modifier_must_precede_1_modifier,\"static\",\"async\");if(234===t.parent.kind||265===t.parent.kind)return Fy(l,e.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element,\"static\");if(146===t.kind)return Fy(l,e.Diagnostics._0_modifier_cannot_appear_on_a_parameter,\"static\");if(128&s)return Fy(l,e.Diagnostics._0_modifier_cannot_be_used_with_1_modifier,\"static\",\"abstract\");s|=32,r=l;break;case 131:if(64&s)return Fy(l,e.Diagnostics._0_modifier_already_seen,\"readonly\");if(149!==t.kind&&148!==t.kind&&157!==t.kind&&146!==t.kind)return Fy(l,e.Diagnostics.readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature);s|=64,o=l;break;case 84:if(1&s)return Fy(l,e.Diagnostics._0_modifier_already_seen,\"export\");if(2&s)return Fy(l,e.Diagnostics._0_modifier_must_precede_1_modifier,\"export\",\"declare\");if(128&s)return Fy(l,e.Diagnostics._0_modifier_must_precede_1_modifier,\"export\",\"abstract\");if(256&s)return Fy(l,e.Diagnostics._0_modifier_must_precede_1_modifier,\"export\",\"async\");if(229===t.parent.kind)return Fy(l,e.Diagnostics._0_modifier_cannot_appear_on_a_class_element,\"export\");if(146===t.kind)return Fy(l,e.Diagnostics._0_modifier_cannot_appear_on_a_parameter,\"export\");s|=1;break;case 124:if(2&s)return Fy(l,e.Diagnostics._0_modifier_already_seen,\"declare\");if(256&s)return Fy(l,e.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context,\"async\");if(229===t.parent.kind)return Fy(l,e.Diagnostics._0_modifier_cannot_appear_on_a_class_element,\"declare\");if(146===t.kind)return Fy(l,e.Diagnostics._0_modifier_cannot_appear_on_a_parameter,\"declare\");if(e.isInAmbientContext(t.parent)&&234===t.parent.kind)return Fy(l,e.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context);s|=2,a=l;break;case 117:if(128&s)return Fy(l,e.Diagnostics._0_modifier_already_seen,\"abstract\");if(229!==t.kind){if(151!==t.kind&&149!==t.kind&&153!==t.kind&&154!==t.kind)return Fy(l,e.Diagnostics.abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration);if(!(229===t.parent.kind&&128&e.getModifierFlags(t.parent)))return Fy(l,e.Diagnostics.Abstract_methods_can_only_appear_within_an_abstract_class);if(32&s)return Fy(l,e.Diagnostics._0_modifier_cannot_be_used_with_1_modifier,\"static\",\"abstract\");if(8&s)return Fy(l,e.Diagnostics._0_modifier_cannot_be_used_with_1_modifier,\"private\",\"abstract\")}s|=128;break;case 120:if(256&s)return Fy(l,e.Diagnostics._0_modifier_already_seen,\"async\");if(2&s||e.isInAmbientContext(t.parent))return Fy(l,e.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context,\"async\");if(146===t.kind)return Fy(l,e.Diagnostics._0_modifier_cannot_appear_on_a_parameter,\"async\");s|=256,i=l;}}return 152!==t.kind?(238===t.kind||237===t.kind)&&2&s?Fy(a,e.Diagnostics.A_0_modifier_cannot_be_used_with_an_import_declaration,\"declare\"):146===t.kind&&92&s&&e.isBindingPattern(t.name)?Fy(t,e.Diagnostics.A_parameter_property_may_not_be_declared_using_a_binding_pattern):146===t.kind&&92&s&&t.dotDotDotToken?Fy(t,e.Diagnostics.A_parameter_property_cannot_be_declared_using_a_rest_parameter):256&s?$m(t,i):void 0:32&s?Fy(r,e.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration,\"static\"):128&s?Fy(r,e.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration,\"abstract\"):256&s?Fy(i,e.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration,\"async\"):64&s?Fy(o,e.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration,\"readonly\"):void 0}function Um(t){return!!t.modifiers&&(qm(t)?Py(t,e.Diagnostics.Modifiers_cannot_appear_here):void 0)}function qm(t){switch(t.kind){case 153:case 154:case 152:case 149:case 148:case 151:case 150:case 157:case 233:case 238:case 237:case 244:case 243:case 186:case 187:case 146:return!1;default:if(234===t.parent.kind||265===t.parent.kind)return!1;switch(t.kind){case 228:return Vm(t,120);case 229:return Vm(t,117);case 230:case 208:case 231:return!0;case 232:return Vm(t,76);default:return e.Debug.fail(),!1}}}function Vm(e,t){return e.modifiers.length>1||e.modifiers[0].kind!==t}function $m(t,n){switch(t.kind){case 151:case 228:case 186:case 187:return!1}return Fy(n,e.Diagnostics._0_modifier_cannot_be_used_here,\"async\")}function Wm(t){if(t&&t.hasTrailingComma){var n=t.end-\",\".length,r=t.end;return Oy(e.getSourceFileOfNode(t[0]),n,r-n,e.Diagnostics.Trailing_comma_not_allowed)}}function Hm(t,n){if(Wm(t))return!0;if(t&&0===t.length){var r=t.pos-\"<\".length;return Oy(n,r,e.skipTrivia(n.text,t.end)+\">\".length-r,e.Diagnostics.Type_parameter_list_cannot_be_empty)}}function Gm(t){for(var n=!1,r=t.length,a=0;a<r;a++){var i=t[a];if(i.dotDotDotToken){if(a!==r-1)return Fy(i.dotDotDotToken,e.Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list);if(e.isBindingPattern(i.name))return Fy(i.name,e.Diagnostics.A_rest_element_cannot_contain_a_binding_pattern);if(i.questionToken)return Fy(i.questionToken,e.Diagnostics.A_rest_parameter_cannot_be_optional);if(i.initializer)return Fy(i.name,e.Diagnostics.A_rest_parameter_cannot_have_an_initializer)}else if(i.questionToken){if(n=!0,i.initializer)return Fy(i.name,e.Diagnostics.Parameter_cannot_have_question_mark_and_initializer)}else if(n&&!i.initializer)return Fy(i.name,e.Diagnostics.A_required_parameter_cannot_follow_an_optional_parameter)}}function Xm(t){var n=e.getSourceFileOfNode(t);return Jm(t)||zm(t)||Hm(t.typeParameters,n)||Gm(t.parameters)||Qm(t,n)}function Ym(t){var n=e.getSourceFileOfNode(t);return sy(t)||Hm(t.typeParameters,n)}function Qm(t,n){if(187===t.kind){var r=t;if(e.getLineAndCharacterOfPosition(n,r.equalsGreaterThanToken.pos).line!==e.getLineAndCharacterOfPosition(n,r.equalsGreaterThanToken.end).line)return Fy(r.equalsGreaterThanToken,e.Diagnostics.Line_terminator_not_permitted_before_arrow)}return!1}function Zm(t){var n=t.parameters[0];return 1!==t.parameters.length?n?Fy(n.name,e.Diagnostics.An_index_signature_must_have_exactly_one_parameter):Fy(t,e.Diagnostics.An_index_signature_must_have_exactly_one_parameter):n.dotDotDotToken?Fy(n.dotDotDotToken,e.Diagnostics.An_index_signature_cannot_have_a_rest_parameter):0!==e.getModifierFlags(n)?Fy(n.name,e.Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier):n.questionToken?Fy(n.questionToken,e.Diagnostics.An_index_signature_parameter_cannot_have_a_question_mark):n.initializer?Fy(n.name,e.Diagnostics.An_index_signature_parameter_cannot_have_an_initializer):n.type?136!==n.type.kind&&133!==n.type.kind?Fy(n.name,e.Diagnostics.An_index_signature_parameter_type_must_be_string_or_number):t.type?void 0:Fy(t,e.Diagnostics.An_index_signature_must_have_a_type_annotation):Fy(n.name,e.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation)}function ey(e){return Jm(e)||zm(e)||Zm(e)}function ty(t,n){if(n&&0===n.length){var r=e.getSourceFileOfNode(t),a=n.pos-\"<\".length;return Oy(r,a,e.skipTrivia(r.text,n.end)+\">\".length-a,e.Diagnostics.Type_argument_list_cannot_be_empty)}}function ny(e,t){return Wm(t)||ty(e,t)}function ry(t,n){if(n)for(var r=e.getSourceFileOfNode(t),a=0,i=n;a<i.length;a++){var o=i[a];if(200===o.kind)return Oy(r,o.pos,0,e.Diagnostics.Argument_expression_expected)}}function ay(e,t){return ry(e,t)}function iy(t){var n=t.types;if(Wm(n))return!0;if(n&&0===n.length){var r=e.tokenToString(t.token);return Oy(e.getSourceFileOfNode(t),n.pos,0,e.Diagnostics._0_list_cannot_be_empty,r)}return e.forEach(n,oy)}function oy(e){return ny(e,e.typeArguments)}function sy(t){var n=!1,r=!1;if(!Jm(t)&&!zm(t)&&t.heritageClauses)for(var a=0,i=t.heritageClauses;a<i.length;a++){var o=i[a];if(85===o.token){if(n)return Py(o,e.Diagnostics.extends_clause_already_seen);if(r)return Py(o,e.Diagnostics.extends_clause_must_precede_implements_clause);if(o.types.length>1)return Py(o.types[1],e.Diagnostics.Classes_can_only_extend_a_single_class);n=!0;}else{if(e.Debug.assert(108===o.token),r)return Py(o,e.Diagnostics.implements_clause_already_seen);r=!0;}iy(o);}}function cy(t){var n=!1;if(t.heritageClauses)for(var r=0,a=t.heritageClauses;r<a.length;r++){var i=a[r];if(85!==i.token)return e.Debug.assert(108===i.token),Py(i,e.Diagnostics.Interface_declaration_cannot_have_implements_clause);if(n)return Py(i,e.Diagnostics.extends_clause_already_seen);n=!0,iy(i);}return!1}function uy(t){if(144!==t.kind)return!1;var n=t;return 194===n.expression.kind&&26===n.expression.operatorToken.kind?Fy(n.expression,e.Diagnostics.A_comma_expression_is_not_allowed_in_a_computed_property_name):void 0}function ly(t){if(t.asteriskToken){if(e.Debug.assert(228===t.kind||186===t.kind||151===t.kind),e.isInAmbientContext(t))return Fy(t.asteriskToken,e.Diagnostics.Generators_are_not_allowed_in_an_ambient_context);if(!t.body)return Fy(t.asteriskToken,e.Diagnostics.An_overload_signature_cannot_be_declared_as_a_generator)}}function _y(e,t){if(e)return Fy(e,t)}function dy(t,n){for(var r=e.createMap(),a=0,i=t.properties;a<i.length;a++){var o=i[a];if(263!==o.kind){var s=o.name;if(144===s.kind&&uy(s),262===o.kind&&!n&&o.objectAssignmentInitializer)return Fy(o.equalsToken,e.Diagnostics.can_only_be_used_in_an_object_literal_property_inside_a_destructuring_assignment);if(o.modifiers)for(var c=0,u=o.modifiers;c<u.length;c++){var l=u[c];120===l.kind&&151===o.kind||Fy(l,e.Diagnostics._0_modifier_cannot_be_used_here,e.getTextOfNode(l));}var _=void 0;261===o.kind||262===o.kind?(_y(o.questionToken,e.Diagnostics.An_object_member_cannot_be_declared_optional),8===s.kind&&Jy(s),_=1):151===o.kind?_=1:153===o.kind?_=2:154===o.kind?_=4:e.Debug.fail(\"Unexpected syntax kind:\"+o.kind);var d=e.getPropertyNameForPropertyNameNode(s);if(void 0!==d){var p=r.get(d);if(p)if(1===_&&1===p)Fy(s,e.Diagnostics.Duplicate_identifier_0,e.getTextOfNode(s));else{if(!(6&_&&6&p))return Fy(s,e.Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name);if(6===p||_===p)return Fy(s,e.Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name);r.set(d,_|p);}else r.set(d,_);}}}}function py(t){for(var n=e.createMap(),r=0,a=t.attributes.properties;r<a.length;r++){var i=a[r];if(255!==i.kind){var o=i,s=o.name;if(n.get(s.text))return Fy(s,e.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name);n.set(s.text,!0);var c=o.initializer;if(c&&256===c.kind&&!c.expression)return Fy(o.initializer,e.Diagnostics.JSX_attributes_must_only_be_assigned_a_non_empty_expression)}}}function fy(t){if(jy(t))return!0;if(216===t.kind&&t.awaitModifier&&0==(16384&t.flags))return Fy(t.awaitModifier,e.Diagnostics.A_for_await_of_statement_is_only_allowed_within_an_async_function_or_async_generator);if(227===t.initializer.kind){var n=t.initializer;if(!Dy(n)){var r=n.declarations;if(!r.length)return!1;if(r.length>1){i=215===t.kind?e.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement:e.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement;return Py(n.declarations[1],i)}var a=r[0];if(a.initializer){var i=215===t.kind?e.Diagnostics.The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer:e.Diagnostics.The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer;return Fy(a.name,i)}if(a.type)return Fy(a,i=215===t.kind?e.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation:e.Diagnostics.The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation)}}return!1}function gy(t){var n=t.kind;if(ah<1)return Fy(t.name,e.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher);if(e.isInAmbientContext(t))return Fy(t.name,e.Diagnostics.An_accessor_cannot_be_declared_in_an_ambient_context);if(!(void 0!==t.body||128&e.getModifierFlags(t)))return Oy(e.getSourceFileOfNode(t),t.end-1,\";\".length,e.Diagnostics._0_expected,\"{\");if(t.body&&128&e.getModifierFlags(t))return Fy(t,e.Diagnostics.An_abstract_accessor_cannot_have_an_implementation);if(t.typeParameters)return Fy(t.name,e.Diagnostics.An_accessor_cannot_have_type_parameters);if(!my(t))return Fy(t.name,153===n?e.Diagnostics.A_get_accessor_cannot_have_parameters:e.Diagnostics.A_set_accessor_must_have_exactly_one_parameter);if(154===n){if(t.type)return Fy(t.name,e.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation);var r=t.parameters[0];if(r.dotDotDotToken)return Fy(r.dotDotDotToken,e.Diagnostics.A_set_accessor_cannot_have_rest_parameter);if(r.questionToken)return Fy(r.questionToken,e.Diagnostics.A_set_accessor_cannot_have_an_optional_parameter);if(r.initializer)return Fy(t.name,e.Diagnostics.A_set_accessor_parameter_cannot_have_an_initializer)}}function my(e){return yy(e)||e.parameters.length===(153===e.kind?0:1)}function yy(t){if(t.parameters.length===(153===t.kind?1:2))return e.getThisParameter(t)}function hy(t,n){if(e.isDynamicName(t))return Fy(t,n)}function vy(t){if(kf(t)||Xm(t)||ly(t))return!0;if(178===t.parent.kind){if(_y(t.questionToken,e.Diagnostics.An_object_member_cannot_be_declared_optional))return!0;if(void 0===t.body)return Oy(e.getSourceFileOfNode(t),t.end-1,\";\".length,e.Diagnostics._0_expected,\"{\")}if(e.isClassLike(t.parent)){if(e.isInAmbientContext(t))return hy(t.name,e.Diagnostics.A_computed_property_name_in_an_ambient_context_must_directly_refer_to_a_built_in_symbol);if(!t.body)return hy(t.name,e.Diagnostics.A_computed_property_name_in_a_method_overload_must_directly_refer_to_a_built_in_symbol)}else{if(230===t.parent.kind)return hy(t.name,e.Diagnostics.A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol);if(163===t.parent.kind)return hy(t.name,e.Diagnostics.A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol)}}function by(t){for(var n=t;n;){if(e.isFunctionLike(n))return Fy(t,e.Diagnostics.Jump_target_cannot_cross_function_boundary);switch(n.kind){case 222:if(t.label&&n.label.text===t.label.text)return!(217!==t.kind||e.isIterationStatement(n.statement,!0))&&Fy(t,e.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement);break;case 221:if(218===t.kind&&!t.label)return!1;break;default:if(e.isIterationStatement(n,!1)&&!t.label)return!1}n=n.parent;}if(t.label)return Fy(t,r=218===t.kind?e.Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement:e.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement);var r=218===t.kind?e.Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement:e.Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement;return Fy(t,r)}function xy(t){if(t.dotDotDotToken){var n=t.parent.elements;if(t!==e.lastOrUndefined(n))return Fy(t,e.Diagnostics.A_rest_element_must_be_last_in_a_destructuring_pattern);if(175===t.name.kind||174===t.name.kind)return Fy(t.name,e.Diagnostics.A_rest_element_cannot_contain_a_binding_pattern);if(t.initializer)return Oy(e.getSourceFileOfNode(t),t.initializer.pos-1,1,e.Diagnostics.A_rest_element_cannot_have_an_initializer)}}function ky(e){return 9===e.kind||8===e.kind||192===e.kind&&38===e.operator&&8===e.operand.kind}function Sy(t){if(215!==t.parent.parent.kind&&216!==t.parent.parent.kind)if(e.isInAmbientContext(t)){if(t.initializer){if(!e.isConst(t)||t.type){n=\"=\".length;return Oy(e.getSourceFileOfNode(t),t.initializer.pos-n,n,e.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts)}if(!ky(t.initializer))return Fy(t.initializer,e.Diagnostics.A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal)}if(t.initializer&&(!e.isConst(t)||!ky(t.initializer))){var n=\"=\".length;return Oy(e.getSourceFileOfNode(t),t.initializer.pos-n,n,e.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts)}}else if(!t.initializer){if(e.isBindingPattern(t.name)&&!e.isBindingPattern(t.parent))return Fy(t,e.Diagnostics.A_destructuring_declaration_must_have_an_initializer);if(e.isConst(t))return Fy(t,e.Diagnostics.const_declarations_must_be_initialized)}return rh.module===e.ModuleKind.ES2015||rh.module===e.ModuleKind.System||rh.noEmit||e.isInAmbientContext(t.parent.parent)||!e.hasModifier(t.parent.parent,1)||Ty(t.name),(e.isLet(t)||e.isConst(t))&&Cy(t.name)}function Ty(t){if(71===t.kind){if(\"__esModule\"===e.unescapeIdentifier(t.text))return Fy(t,e.Diagnostics.Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules)}else for(var n=0,r=t.elements;n<r.length;n++){var a=r[n];if(!e.isOmittedExpression(a))return Ty(a.name)}}function Cy(t){if(71===t.kind){if(110===t.originalKeywordKind)return Fy(t,e.Diagnostics.let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations)}else for(var n=0,r=t.elements;n<r.length;n++){var a=r[n];e.isOmittedExpression(a)||Cy(a.name);}}function Dy(t){var n=t.declarations;return!!Wm(t.declarations)||(t.declarations.length?void 0:Oy(e.getSourceFileOfNode(t),n.pos,n.end-n.pos,e.Diagnostics.Variable_declaration_list_cannot_be_empty))}function Ey(e){switch(e.kind){case 211:case 212:case 213:case 220:case 214:case 215:case 216:return!1;case 222:return Ey(e.parent)}return!0}function Ny(t){if(!Ey(t.parent)){if(e.isLet(t.declarationList))return Fy(t,e.Diagnostics.let_declarations_can_only_be_declared_inside_a_block);if(e.isConst(t.declarationList))return Fy(t,e.Diagnostics.const_declarations_can_only_be_declared_inside_a_block)}}function Ay(t){if(94===t.keywordToken&&\"target\"!==t.name.text)return Fy(t.name,e.Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2,t.name.text,e.tokenToString(t.keywordToken),\"target\")}function wy(e){return e.parseDiagnostics.length>0}function Py(t,n,r,a,i){var o=e.getSourceFileOfNode(t);if(!wy(o)){var s=e.getSpanOfTokenAtPosition(o,t.pos);return tb.add(e.createFileDiagnostic(o,s.start,s.length,n,r,a,i)),!0}}function Oy(t,n,r,a,i,o,s){if(!wy(t))return tb.add(e.createFileDiagnostic(t,n,r,a,i,o,s)),!0}function Fy(t,n,r,a,i){if(!wy(e.getSourceFileOfNode(t)))return tb.add(e.createDiagnosticForNode(t,n,r,a,i)),!0}function Iy(t){if(t.typeParameters)return Oy(e.getSourceFileOfNode(t),t.typeParameters.pos,t.typeParameters.end-t.typeParameters.pos,e.Diagnostics.Type_parameters_cannot_appear_on_a_constructor_declaration)}function My(t){if(t.type)return Fy(t.type,e.Diagnostics.Type_annotation_cannot_appear_on_a_constructor_declaration)}function Ry(t){if(e.isClassLike(t.parent)){if(hy(t.name,e.Diagnostics.A_computed_property_name_in_a_class_property_declaration_must_directly_refer_to_a_built_in_symbol))return!0}else if(230===t.parent.kind){if(hy(t.name,e.Diagnostics.A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol))return!0;if(t.initializer)return Fy(t.initializer,e.Diagnostics.An_interface_property_cannot_have_an_initializer)}else if(163===t.parent.kind){if(hy(t.name,e.Diagnostics.A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol))return!0;if(t.initializer)return Fy(t.initializer,e.Diagnostics.A_type_literal_property_cannot_have_an_initializer)}if(e.isInAmbientContext(t)&&t.initializer)return Py(t.initializer,e.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts)}function Ly(t){return!(230===t.kind||231===t.kind||238===t.kind||237===t.kind||244===t.kind||243===t.kind||236===t.kind||515&e.getModifierFlags(t))&&Py(t,e.Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file)}function By(t){for(var n=0,r=t.statements;n<r.length;n++){var a=r[n];if((e.isDeclaration(a)||208===a.kind)&&Ly(a))return!0}}function Ky(t){return e.isInAmbientContext(t)&&By(t)}function jy(t){if(e.isInAmbientContext(t)){if(e.isAccessor(t.parent))return S(t).hasReportedStatementInAmbientContext=!0;if(!S(t).hasReportedStatementInAmbientContext&&e.isFunctionLike(t.parent))return S(t).hasReportedStatementInAmbientContext=Py(t,e.Diagnostics.An_implementation_cannot_be_declared_in_ambient_contexts);if(207===t.parent.kind||234===t.parent.kind||265===t.parent.kind){var n=S(t.parent);if(!n.hasReportedStatementInAmbientContext)return n.hasReportedStatementInAmbientContext=Py(t,e.Diagnostics.Statements_are_not_allowed_in_ambient_contexts)}}}function Jy(t){if(4&t.numericLiteralFlags){var n=void 0;if(ah>=1?n=e.Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0:e.isChildOfNodeWithKind(t,173)?n=e.Diagnostics.Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0:e.isChildOfNodeWithKind(t,264)&&(n=e.Diagnostics.Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0),n){var r=e.isPrefixUnaryExpression(t.parent)&&38===t.parent.operator,a=(r?\"-\":\"\")+\"0o\"+t.text;return Fy(r?t.parent:t,n,a)}}}function zy(t,n,r,a,i){var o=e.getSourceFileOfNode(t);if(!wy(o)){var s=e.getSpanOfTokenAtPosition(o,t.pos);return tb.add(e.createFileDiagnostic(o,e.textSpanEnd(s),0,n,r,a,i)),!0}}function Uy(){var e=[];return Ov.forEach(function(t,n){o.test(n)&&e.push(t);}),e}function qy(t){if(ih===e.ModuleKind.ES2015)return Fy(t,e.Diagnostics.Dynamic_import_cannot_be_used_when_targeting_ECMAScript_2015_modules);if(t.typeArguments)return Fy(t,e.Diagnostics.Dynamic_import_cannot_have_type_arguments);var n=t.arguments;return 1!==n.length?Fy(t,e.Diagnostics.Dynamic_import_must_have_one_specifier_as_an_argument):e.isSpreadElement(n[0])?Fy(n[0],e.Diagnostics.Specifier_of_dynamic_import_cannot_be_spread_element):void 0}var Vy,$y,Wy,Hy=e.objectAllocator.getSymbolConstructor(),Gy=e.objectAllocator.getTypeConstructor(),Xy=e.objectAllocator.getSignatureConstructor(),Yy=0,Qy=0,Zy=0,eh=0,th=[],nh=e.createMap(),rh=a.getCompilerOptions(),ah=e.getEmitScriptTarget(rh),ih=e.getEmitModuleKind(rh),oh=!!rh.noUnusedLocals||!!rh.noUnusedParameters,sh=void 0!==rh.allowSyntheticDefaultImports?rh.allowSyntheticDefaultImports:ih===e.ModuleKind.System,ch=void 0===rh.strictNullChecks?rh.strict:rh.strictNullChecks,uh=void 0===rh.noImplicitAny?rh.strict:rh.noImplicitAny,lh=void 0===rh.noImplicitThis?rh.strict:rh.noImplicitThis,_h=function(){function t(e){if(i){var t=179===e.kind||71===e.kind&&Ks(e)?1156031:794600,r=se(e,t,!0);return r&&r!==kh?n(r,t):void 0}}function n(t,n){if(i&&r(t)){for(var a,o=0,s=t.declarations;o<s.length;o++){var c=s[o];if(c.symbol&&c.symbol.flags&n){var u=e.getSourceFileOfNode(c),l=i.get(u.path);if(!l)return;(a||(a=[])).push(l);}}return a}}function r(t){if(!t.declarations)return!1;for(var n=t;;){var r=Se(n);if(!r)break;n=r;}if(n.valueDeclaration&&265===n.valueDeclaration.kind&&512&n.flags)return!1;for(var a=0,o=t.declarations;a<o.length;a++){var s=o[a],c=e.getSourceFileOfNode(s);if(i.contains(c.path))return!0}return!1}var i,o=a.getResolvedTypeReferenceDirectives();return o&&(i=e.createFileMap(),o.forEach(function(e,t){if(e){var n=a.getSourceFile(e.resolvedFileName);i.set(n.path,t);}})),{getReferencedExportContainer:lm,getReferencedImportDeclaration:_m,getReferencedDeclarationWithCollidingName:pm,isDeclarationWithCollidingName:fm,isValueAliasDeclaration:function(t){return!(t=e.getParseTreeNode(t))||gm(t)},hasGlobalName:Om,isReferencedAliasDeclaration:function(t,n){return!(t=e.getParseTreeNode(t))||vm(t,n)},getNodeCheckFlags:function(t){return t=e.getParseTreeNode(t),t?Sm(t):void 0},isTopLevelValueImportEqualsWithEntityName:mm,isDeclarationVisible:rt,isImplementationOfOverload:bm,isRequiredInitializedParameter:xm,isOptionalUninitializedParameterProperty:km,writeTypeOfDeclaration:Am,writeReturnTypeOfSignatureDeclaration:wm,writeTypeOfExpression:Pm,isSymbolAccessible:Ke,isEntityNameVisible:ze,getConstantValue:function(t){return t=e.getParseTreeNode(t,Cm),t?Dm(t):void 0},collectLinkedAliases:at,getReferencedValueDeclaration:Im,getTypeReferenceSerializationKind:Nm,isOptionalParameter:Er,moduleExportsSomeValue:cm,isArgumentsLocalBinding:sm,getExternalModuleFileFromDeclaration:Lm,getTypeReferenceDirectivesForEntityName:t,getTypeReferenceDirectivesForSymbol:n,isLiteralConstDeclaration:Mm,writeLiteralConstValue:Rm,getJsxFactoryEntity:function(){return rb}}}(),dh=function(){function t(e,t){return{enclosingDeclaration:e,flags:t,encounteredError:!1,symbolStack:void 0}}function n(t,s){function l(t){e.Debug.assert(!!(32768&t.flags));var r=t.declaration&&t.declaration.readonlyToken?e.createToken(131):void 0,a=t.declaration&&t.declaration.questionToken?e.createToken(55):void 0,i=o($n(t),s),c=n(Hn(t),s),u=e.createMappedTypeNode(r,i,a,c);return e.setEmitFlags(u,1)}function _(t){if(32&t.objectFlags&&278528&Wn(t).flags)return l(t);var n=Yn(t);if(!n.properties.length&&!n.stringIndexInfo&&!n.numberIndexInfo){if(!n.callSignatures.length&&!n.constructSignatures.length)return e.setEmitFlags(e.createTypeLiteralNode(void 0),1);if(1===n.callSignatures.length&&!n.constructSignatures.length)return a=i(r=n.callSignatures[0],160,s);if(1===n.constructSignatures.length&&!n.callSignatures.length){var r=n.constructSignatures[0],a=i(r,161,s);return a}}var o=s.flags;s.flags|=e.NodeBuilderFlags.InObjectTypeLiteral;var c=g(n);s.flags=o;var u=e.createTypeLiteralNode(c);return e.setEmitFlags(u,1)}function d(t,n){var r=c(t,s,n,!1);return e.createTypeQueryNode(r)}function p(t){return 32&t.flags||!we(t.name)?c(t,s,793064,!1):e.createIdentifier(\"\")}function f(t,n){if(e.Debug.assert(void 0===t.right),71===n.kind)return t.right=n,t;for(var r=n;71!==r.left.kind;)r=r.left;return t.right=r.left,r.left=t,n}function g(t){for(var r=[],o=0,u=t.callSignatures;o<u.length;o++){d=u[o];r.push(i(d,155,s));}for(var l=0,_=t.constructSignatures;l<_.length;l++){var d=_[l];r.push(i(d,156,s));}t.stringIndexInfo&&r.push(a(t.stringIndexInfo,0,s)),t.numberIndexInfo&&r.push(a(t.numberIndexInfo,1,s));var p=t.properties;if(!p)return r;for(var f=0,g=p;f<g.length;f++){var m=g[f],y=jt(m),h=s.enclosingDeclaration;s.enclosingDeclaration=void 0;var v=c(m,s,107455,!0);s.enclosingDeclaration=h;var b=67108864&m.flags?e.createToken(55):void 0;if(8208&m.flags&&!Qn(y).length)for(var x=0,k=yr(y,0);x<k.length;x++){var S=i(d=k[x],150,s);S.name=v,S.questionToken=b,r.push(S);}else{var T=y?n(y,s):e.createKeywordTypeNode(119),C=_d(m)?[e.createToken(131)]:void 0,D=e.createPropertySignature(C,v,b,T,void 0);r.push(D);}}return r.length?r:void 0}var m=s.flags&e.NodeBuilderFlags.InTypeAlias;if(s.flags&=~e.NodeBuilderFlags.InTypeAlias,t){if(1&t.flags)return e.createKeywordTypeNode(119);if(2&t.flags)return e.createKeywordTypeNode(136);if(4&t.flags)return e.createKeywordTypeNode(133);if(8&t.flags)return e.createKeywordTypeNode(122);if(256&t.flags&&!(65536&t.flags)){var y=Se(t.symbol),h=c(y,s,793064,!1),v=yn(y)===t?h:e.createQualifiedName(h,u(t.symbol,s));return e.createTypeReferenceNode(v,void 0)}if(272&t.flags){x=c(t.symbol,s,793064,!1);return e.createTypeReferenceNode(x,void 0)}if(32&t.flags)return e.createLiteralTypeNode(e.setEmitFlags(e.createLiteral(t.value),16777216));if(64&t.flags)return e.createLiteralTypeNode(e.createLiteral(t.value));if(128&t.flags)return\"true\"===t.intrinsicName?e.createTrue():e.createFalse();if(1024&t.flags)return e.createKeywordTypeNode(105);if(2048&t.flags)return e.createKeywordTypeNode(139);if(4096&t.flags)return e.createKeywordTypeNode(95);if(8192&t.flags)return e.createKeywordTypeNode(130);if(512&t.flags)return e.createKeywordTypeNode(137);if(16777216&t.flags)return e.createKeywordTypeNode(134);if(16384&t.flags&&t.isThisType)return s.flags&e.NodeBuilderFlags.InObjectTypeLiteral&&(s.encounteredError||s.flags&e.NodeBuilderFlags.AllowThisInObjectLiteral||(s.encounteredError=!0)),e.createThis();var b=T(t);if(4&b)return e.Debug.assert(!!(32768&t.flags)),function(t){var a=t.typeArguments||th;if(t.target===Gh){if(s.flags&e.NodeBuilderFlags.WriteArrayAsGenericType){var i=n(a[0],s);return e.createTypeReferenceNode(\"Array\",[i])}var o=n(a[0],s);return e.createArrayTypeNode(o)}if(!(8&t.target.objectFlags)){var c=t.target.outerTypeParameters,u=0,l=void 0;if(c)for(var _=c.length;u<_;){var d=u,g=Gr(c[u]);do{u++;}while(u<_&&Gr(c[u])===g);if(!e.rangeEquals(c,a,d,u)){var m=r(a.slice(d,u),s),y=m&&e.createNodeArray(m),h=p(g);(71===h.kind?h:h.right).typeArguments=y,l?(e.Debug.assert(!l.right),l=f(l,h),l=e.createQualifiedName(l,void 0)):l=e.createQualifiedName(h,void 0);}}var v=void 0,b=p(t.symbol);l?(e.Debug.assert(!l.right),v=l=f(l,b)):v=b;var x=void 0;if(a.length>0){var k=(t.target.typeParameters||th).length;x=r(a.slice(u,k),s);}return x&&((71===v.kind?v:v.right).typeArguments=void 0),e.createTypeReferenceNode(v,x)}if(a.length>0){var S=r(a.slice(0,ea(t)),s);if(S&&S.length>0)return e.createTupleTypeNode(S)}s.encounteredError||s.flags&e.NodeBuilderFlags.AllowEmptyTuple||(s.encounteredError=!0);}(t);if(16384&t.flags||3&b){x=c(t.symbol,s,793064,!1);return e.createTypeReferenceNode(x,void 0)}if(!m&&t.aliasSymbol&&0===Ke(t.aliasSymbol,s.enclosingDeclaration,793064,!1).accessibility){var x=p(t.aliasSymbol),k=r(t.aliasTypeArguments,s);return e.createTypeReferenceNode(x,k)}if(196608&t.flags){var S=r(65536&t.flags?Xe(t.types):t.types,s);return S&&S.length>0?e.createUnionOrIntersectionTypeNode(65536&t.flags?166:167,S):void(s.encounteredError||s.flags&e.NodeBuilderFlags.AllowEmptyUnionOrIntersection||(s.encounteredError=!0))}if(48&b)return e.Debug.assert(!!(32768&t.flags)),function(t){var n=t.symbol;if(n){if(32&n.flags&&!It(n)||896&n.flags||function(){var t=!!(8192&n.flags&&e.forEach(n.declarations,function(t){return 32&e.getModifierFlags(t)})),r=!!(16&n.flags)&&(n.parent||e.forEach(n.declarations,function(e){return 265===e.parent.kind||234===e.parent.kind}));if(t||r)return e.contains(s.symbolStack,n)}())return d(n,107455);if(e.contains(s.symbolStack,n)){var r=Qe(t);if(r){var a=c(r,s,793064,!1);return e.createTypeReferenceNode(a,void 0)}return e.createKeywordTypeNode(119)}s.symbolStack||(s.symbolStack=[]),s.symbolStack.push(n);var i=_(t);return s.symbolStack.pop(),i}return _(t)}(t);if(262144&t.flags){D=n(t.type,s);return e.createTypeOperatorNode(D)}if(524288&t.flags){var C=n(t.objectType,s),D=n(t.indexType,s);return e.createIndexedAccessTypeNode(C,D)}e.Debug.fail(\"Should be unreachable.\");}else s.encounteredError=!0;}function r(t,r){if(e.some(t)){for(var a=[],i=0;i<t.length;++i){var o=n(t[i],r);o&&a.push(o);}return a}}function a(t,r,a){var i=e.getNameFromIndexInfo(t)||\"x\",o=e.createKeywordTypeNode(0===r?136:133),s=e.createParameter(void 0,void 0,void 0,i,void 0,o,void 0),c=n(t.type,a);return e.createIndexSignature(void 0,t.isReadonly?[e.createToken(131)]:void 0,[s],c)}function i(t,r,a){var i=t.typeParameters&&t.typeParameters.map(function(e){return o(e,a)}),c=t.parameters.map(function(e){return s(e,a)});if(t.thisParameter){var u=s(t.thisParameter,a);c.unshift(u);}var l;if(t.typePredicate){var _=t.typePredicate,d=1===_.kind?e.setEmitFlags(e.createIdentifier(_.parameterName),16777216):e.createThisTypeNode(),p=n(_.type,a);l=e.createTypePredicateNode(d,p);}else{var f=Lr(t);l=f&&n(f,a);}return a.flags&e.NodeBuilderFlags.SuppressAnyReturnType?l&&119===l.kind&&(l=void 0):l||(l=e.createKeywordTypeNode(119)),e.createSignatureDeclaration(r,i,c,l)}function o(t,r){var a=c(t.symbol,r,793064,!0),i=Hr(t),o=i&&n(i,r),s=lr(t),u=s&&n(s,r);return e.createTypeParameterDeclaration(a,o,u)}function s(t,r){var a=e.getDeclarationOfKind(t,146);if(f(t)&&t.isRestParameter)return e.createParameter(void 0,void 0,t.isRestParameter?e.createToken(24):void 0,\"args\",void 0,n(nv,r),void 0);var i=a.modifiers&&a.modifiers.map(e.getSynthesizedClone),o=e.isRestParameter(a)?e.createToken(24):void 0,s=a.name?71===a.name.kind?e.setEmitFlags(e.getSynthesizedClone(a.name),16777216):function(t){function n(t){var r=e.visitEachChild(t,n,e.nullTransformationContext,void 0,n),a=e.nodeIsSynthesized(r)?r:e.getSynthesizedClone(r);return 176===a.kind&&(a.initializer=void 0),e.setEmitFlags(a,16777217)}return n(t)}(a.name):t.name,c=Er(a)?e.createToken(55):void 0,u=jt(t);xm(a)&&(u=_s(u,2048));var l=n(u,r);return e.createParameter(void 0,i,o,s,c,l,void 0)}function c(t,n,a,i){function o(t,a){e.Debug.assert(t&&0<=a&&a<t.length);var i,s=t[a];if(n.flags&e.NodeBuilderFlags.WriteTypeParametersInQualifiedName&&a>0){var c=t[a-1],l=void 0;1&e.getCheckFlags(s)?l=Ht(c):524384&ng(c).flags&&(l=Wt(s)),i=r(l,n);}var _=u(s,n),d=e.setEmitFlags(e.createIdentifier(_,i),16777216);return a>0?e.createQualifiedName(o(t,a-1),d):d}function s(t,r,a){var i,o=Re(t,n.enclosingDeclaration,r,!1);if(!o||Le(o[0],n.enclosingDeclaration,1===o.length?r:Me(r))){var c=Se(o?o[0]:t);if(c){var u=s(c,Me(r),!1);u&&(i=c,o=u.concat(o||[t]));}}return o||(!a&&(!i&&e.forEach(t.declarations,je)||6144&t.flags)?void 0:[t])}var c;return!(262144&t.flags)&&(n.enclosingDeclaration||n.flags&e.NodeBuilderFlags.UseFullyQualifiedType)?(c=s(t,a,!0),e.Debug.assert(c&&c.length>0)):c=[t],!i||1===c.length||n.encounteredError||n.flags&e.NodeBuilderFlags.AllowQualifedNameInPlaceOfIdentifier||(n.encounteredError=!0),o(c,c.length-1)}function u(t,n){var r=e.firstOrUndefined(t.declarations);if(r){var a=e.getNameOfDeclaration(r);if(a)return e.declarationNameToString(a);if(r.parent&&226===r.parent.kind)return e.declarationNameToString(r.parent.name);switch(n.encounteredError||n.flags&e.NodeBuilderFlags.AllowAnonymousIdentifier||(n.encounteredError=!0),r.kind){case 199:return\"(Anonymous class)\";case 186:case 187:return\"(Anonymous function)\"}}return t.name}return{typeToTypeNode:function(e,r,a){var i=t(r,a),o=n(e,i);return i.encounteredError?void 0:o},indexInfoToIndexSignatureDeclaration:function(e,n,r,i){var o=t(r,i),s=a(e,n,o);return o.encounteredError?void 0:s},signatureToSignatureDeclaration:function(e,n,r,a){var o=t(r,a),s=i(e,n,o);return o.encounteredError?void 0:s}}}(),ph=p(4,\"undefined\");ph.declarations=[];var fh=p(4,\"arguments\"),gh={getNodeCount:function(){return e.sum(a.getSourceFiles(),\"nodeCount\")},getIdentifierCount:function(){return e.sum(a.getSourceFiles(),\"identifierCount\")},getSymbolCount:function(){return e.sum(a.getSourceFiles(),\"symbolCount\")+Qy},getTypeCount:function(){return Yy},isUndefinedSymbol:function(e){return e===ph},isArgumentsSymbol:function(e){return e===fh},isUnknownSymbol:function(e){return e===kh},getMergedSymbol:xe,getDiagnostics:Mg,getGlobalDiagnostics:Lg,getTypeOfSymbolAtLocation:function(t,n){return n=e.getParseTreeNode(n),n?$c(t,n):Dh},getSymbolsOfParameterPropertyDeclaration:function(t,n){return t=e.getParseTreeNode(t,e.isParameter),e.Debug.assert(void 0!==t,\"Cannot get symbols of a synthetic parameter that cannot be resolved to a parse-tree node.\"),E(t,n)},getDeclaredTypeOfSymbol:yn,getPropertiesOfType:tr,getPropertyOfType:gr,getIndexInfoOfType:br,getSignaturesOfType:yr,getIndexTypeOfType:xr,getBaseTypes:tn,getBaseTypeOfLiteralType:rs,getWidenedType:bs,getTypeFromTypeNode:function(t){return t=e.getParseTreeNode(t,e.isTypeNode),t?Mi(t):Dh},getParameterType:H_,getReturnTypeOfSignature:Lr,getNonNullableType:ds,typeToTypeNode:dh.typeToTypeNode,indexInfoToIndexSignatureDeclaration:dh.indexInfoToIndexSignatureDeclaration,signatureToSignatureDeclaration:dh.signatureToSignatureDeclaration,getSymbolsInScope:function(t,n){return t=e.getParseTreeNode(t),t?jg(t,n):[]},getSymbolAtLocation:function(t){return t=e.getParseTreeNode(t),t?Yg(t):void 0},getShorthandAssignmentValueSymbol:function(t){return t=e.getParseTreeNode(t),t?Qg(t):void 0},getExportSpecifierLocalTargetSymbol:function(t){return t=e.getParseTreeNode(t,e.isExportSpecifier),t?Zg(t):void 0},getTypeAtLocation:function(t){return t=e.getParseTreeNode(t),t?em(t):Dh},getPropertySymbolOfDestructuringAssignment:function(t){return t=e.getParseTreeNode(t,e.isIdentifier),t?nm(t):void 0},signatureToString:function(t,n,r,a){return We(t,e.getParseTreeNode(n),r,a)},typeToString:function(t,n,r){return He(t,e.getParseTreeNode(n),r)},getSymbolDisplayBuilder:nt,symbolToString:function(t,n,r){return $e(t,e.getParseTreeNode(n),r)},getAugmentedPropertiesOfType:im,getRootSymbols:om,getContextualType:function(t){return t=e.getParseTreeNode(t,e.isExpression),t?Bu(t):void 0},getFullyQualifiedName:oe,getResolvedSignature:function(t,n){return t=e.getParseTreeNode(t,e.isCallLikeExpression),t?M_(t,n):void 0},getConstantValue:function(t){return t=e.getParseTreeNode(t,Cm),t?Dm(t):void 0},isValidPropertyAccess:function(t,n){return!!(t=e.getParseTreeNode(t,e.isPropertyAccessOrQualifiedName))&&Gl(t,n)},getSignatureFromDeclaration:function(t){return t=e.getParseTreeNode(t,e.isFunctionLike),t?Pr(t):void 0},isImplementationOfOverload:function(t){return t=e.getParseTreeNode(t,e.isFunctionLike),t?bm(t):void 0},getImmediateAliasedSymbol:function(t){e.Debug.assert(0!=(8388608&t.flags),\"Should only get Alias here.\");var n=k(t);if(!n.immediateTarget){var r=J(t);e.Debug.assert(!!r),n.immediateTarget=Z(r,!0);}return n.immediateTarget},getAliasedSymbol:ne,getEmitResolver:_,getExportsOfModule:fe,getExportsAndPropertiesOfModule:ge,getAmbientModules:Uy,getAllAttributesTypeFromJsxOpeningLikeElement:function(t){return t=e.getParseTreeNode(t,e.isJsxOpeningLikeElement),t?kl(t):void 0},getJsxIntrinsicTagNames:Nl,isOptionalParameter:function(t){return!!(t=e.getParseTreeNode(t,e.isParameter))&&Er(t)},tryGetMemberInModuleExports:me,tryFindAmbientModuleWithoutAugmentations:function(e){return Dr(e,!1)},getApparentType:_r,getAllPossiblePropertiesOfType:nr,getSuggestionForNonexistentProperty:ql,getSuggestionForNonexistentSymbol:Vl,getBaseConstraintOfType:or,getJsxNamespace:c,resolveNameAtLocation:function(t,n,r){return t=e.getParseTreeNode(t),A(t,n,r,void 0,n)}},mh=[],yh=e.createMap(),hh=e.createMap(),vh=e.createMap(),bh=e.createMap(),xh=[],kh=p(4,\"unknown\"),Sh=p(0,\"__resolving__\"),Th=Ne(1,\"any\"),Ch=Ne(1,\"any\"),Dh=Ne(1,\"unknown\"),Eh=Ne(2048,\"undefined\"),Nh=ch?Eh:Ne(2099200,\"undefined\"),Ah=Ne(4096,\"null\"),wh=ch?Ah:Ne(2101248,\"null\"),Ph=Ne(2,\"string\"),Oh=Ne(4,\"number\"),Fh=Ne(128,\"true\"),Ih=Ne(128,\"false\"),Mh=function(e){var t=ti(e);return t.flags|=8,t.intrinsicName=\"boolean\",t}([Fh,Ih]),Rh=Ne(512,\"symbol\"),Lh=Ne(1024,\"void\"),Bh=Ne(8192,\"never\"),Kh=Ne(8192,\"never\"),jh=Ne(16777216,\"object\"),Jh=Fe(void 0,nh,th,th,void 0,void 0),zh=p(2048,\"__type\");zh.members=e.createMap();var Uh=Fe(zh,nh,th,th,void 0,void 0),qh=Fe(void 0,nh,th,th,void 0,void 0);qh.instantiations=e.createMap();var Vh=Fe(void 0,nh,th,th,void 0,void 0);Vh.flags|=8388608;var $h,Wh,Hh,Gh,Xh,Yh,Qh,Zh,ev,tv,nv,rv,av,iv,ov,sv,cv,uv,lv,_v,dv,pv,fv,gv,mv,yv,hv,vv,bv,xv,kv,Sv,Tv=Fe(void 0,nh,th,th,void 0,void 0),Cv=Fe(void 0,nh,th,th,void 0,void 0),Dv=Pn(void 0,void 0,void 0,th,Th,void 0,0,!1,!1),Ev=Pn(void 0,void 0,void 0,th,Dh,void 0,0,!1,!1),Nv=Pn(void 0,void 0,void 0,th,Th,void 0,0,!1,!1),Av=Pn(void 0,void 0,void 0,th,Kh,void 0,0,!1,!1),wv=Vr(Ph,!0),Pv=Vr(Th,!1),Ov=e.createMap(),Fv=0,Iv=0,Mv=0,Rv=Ai(\"\"),Lv=Ai(0),Bv=[],Kv=[],jv=[],Jv=0,zv=10,Uv=[],qv=[],Vv=[],$v=[],Wv=[],Hv=[],Gv=[],Xv=[],Yv=[],Qv=[],Zv=[],eb=[],tb=e.createDiagnosticCollection();!function(e){e[e.None=0]=\"None\",e[e.TypeofEQString=1]=\"TypeofEQString\",e[e.TypeofEQNumber=2]=\"TypeofEQNumber\",e[e.TypeofEQBoolean=4]=\"TypeofEQBoolean\",e[e.TypeofEQSymbol=8]=\"TypeofEQSymbol\",e[e.TypeofEQObject=16]=\"TypeofEQObject\",e[e.TypeofEQFunction=32]=\"TypeofEQFunction\",e[e.TypeofEQHostObject=64]=\"TypeofEQHostObject\",e[e.TypeofNEString=128]=\"TypeofNEString\",e[e.TypeofNENumber=256]=\"TypeofNENumber\",e[e.TypeofNEBoolean=512]=\"TypeofNEBoolean\",e[e.TypeofNESymbol=1024]=\"TypeofNESymbol\",e[e.TypeofNEObject=2048]=\"TypeofNEObject\",e[e.TypeofNEFunction=4096]=\"TypeofNEFunction\",e[e.TypeofNEHostObject=8192]=\"TypeofNEHostObject\",e[e.EQUndefined=16384]=\"EQUndefined\",e[e.EQNull=32768]=\"EQNull\",e[e.EQUndefinedOrNull=65536]=\"EQUndefinedOrNull\",e[e.NEUndefined=131072]=\"NEUndefined\",e[e.NENull=262144]=\"NENull\",e[e.NEUndefinedOrNull=524288]=\"NEUndefinedOrNull\",e[e.Truthy=1048576]=\"Truthy\",e[e.Falsy=2097152]=\"Falsy\",e[e.Discriminatable=4194304]=\"Discriminatable\",e[e.All=8388607]=\"All\",e[e.BaseStringStrictFacts=933633]=\"BaseStringStrictFacts\",e[e.BaseStringFacts=3145473]=\"BaseStringFacts\",e[e.StringStrictFacts=4079361]=\"StringStrictFacts\",e[e.StringFacts=4194049]=\"StringFacts\",e[e.EmptyStringStrictFacts=3030785]=\"EmptyStringStrictFacts\",e[e.EmptyStringFacts=3145473]=\"EmptyStringFacts\",e[e.NonEmptyStringStrictFacts=1982209]=\"NonEmptyStringStrictFacts\",e[e.NonEmptyStringFacts=4194049]=\"NonEmptyStringFacts\",e[e.BaseNumberStrictFacts=933506]=\"BaseNumberStrictFacts\",e[e.BaseNumberFacts=3145346]=\"BaseNumberFacts\",e[e.NumberStrictFacts=4079234]=\"NumberStrictFacts\",e[e.NumberFacts=4193922]=\"NumberFacts\",e[e.ZeroStrictFacts=3030658]=\"ZeroStrictFacts\",e[e.ZeroFacts=3145346]=\"ZeroFacts\",e[e.NonZeroStrictFacts=1982082]=\"NonZeroStrictFacts\",e[e.NonZeroFacts=4193922]=\"NonZeroFacts\",e[e.BaseBooleanStrictFacts=933252]=\"BaseBooleanStrictFacts\",e[e.BaseBooleanFacts=3145092]=\"BaseBooleanFacts\",e[e.BooleanStrictFacts=4078980]=\"BooleanStrictFacts\",e[e.BooleanFacts=4193668]=\"BooleanFacts\",e[e.FalseStrictFacts=3030404]=\"FalseStrictFacts\",e[e.FalseFacts=3145092]=\"FalseFacts\",e[e.TrueStrictFacts=1981828]=\"TrueStrictFacts\",e[e.TrueFacts=4193668]=\"TrueFacts\",e[e.SymbolStrictFacts=1981320]=\"SymbolStrictFacts\",e[e.SymbolFacts=4193160]=\"SymbolFacts\",e[e.ObjectStrictFacts=6166480]=\"ObjectStrictFacts\",e[e.ObjectFacts=8378320]=\"ObjectFacts\",e[e.FunctionStrictFacts=6164448]=\"FunctionStrictFacts\",e[e.FunctionFacts=8376288]=\"FunctionFacts\",e[e.UndefinedFacts=2457472]=\"UndefinedFacts\",e[e.NullFacts=2340752]=\"NullFacts\";}(Sv||(Sv={}));var nb,rb,ab,ib,ob,sb,cb=e.createMapFromTemplate({string:1,number:2,boolean:4,symbol:8,undefined:16384,object:16,function:32}),ub=e.createMapFromTemplate({string:128,number:256,boolean:512,symbol:1024,undefined:131072,object:2048,function:4096}),lb=e.createMapFromTemplate({string:Ph,number:Oh,boolean:Mh,symbol:Rh,undefined:Eh}),_b=function(){return ti(e.convertToArray(cb.keys(),Ai))}(),db=!1,pb=!1,fb=e.createMap(),gb={JSX:\"JSX\",IntrinsicElements:\"IntrinsicElements\",ElementClass:\"ElementClass\",ElementAttributesPropertyNameContainer:\"ElementAttributesProperty\",ElementChildrenAttributeNameContainer:\"ElementChildrenAttribute\",Element:\"Element\",IntrinsicAttributes:\"IntrinsicAttributes\",IntrinsicClassAttributes:\"IntrinsicClassAttributes\"},mb=e.createMap(),yb=e.createMap(),hb=e.createMap(),vb=e.createMap(),bb=e.createMap();!function(e){e[e.Type=0]=\"Type\",e[e.ResolvedBaseConstructorType=1]=\"ResolvedBaseConstructorType\",e[e.DeclaredType=2]=\"DeclaredType\",e[e.ResolvedReturnType=3]=\"ResolvedReturnType\";}(sb||(sb={}));var xb;!function(e){e[e.Normal=0]=\"Normal\",e[e.SkipContextSensitive=1]=\"SkipContextSensitive\",e[e.Inferential=2]=\"Inferential\";}(xb||(xb={}));var kb=e.createMap();return kb.set(ph.name,ph),function(){for(var t=0,n=a.getSourceFiles();t<n.length;t++)s=n[t],e.bindSourceFile(s,rh);for(var r,i=0,o=a.getSourceFiles();i<o.length;i++){var s=o[i];e.isExternalOrCommonJsModule(s)||v(Ov,s.locals),s.patternAmbientModules&&s.patternAmbientModules.length&&($h=e.concatenate($h,s.patternAmbientModules)),s.moduleAugmentations.length&&(r||(r=[])).push(s.moduleAugmentations),s.symbol&&s.symbol.globalExports&&s.symbol.globalExports.forEach(function(e,t){Ov.has(t)||Ov.set(t,e);});}if(r)for(var c=0,u=r;c<u.length;c++)for(var l=0,_=u[c];l<_.length;l++)b(_[l]);x(Ov,kb,e.Diagnostics.Declaration_name_conflicts_with_built_in_global_identifier_0),k(ph).type=Nh,k(fh).type=ha(\"IArguments\",0,!0),k(kh).type=Dh,Gh=ha(\"Array\",1,!0),Wh=ha(\"Object\",0,!0),Hh=ha(\"Function\",0,!0),Yh=ha(\"String\",0,!0),Qh=ha(\"Number\",0,!0),Zh=ha(\"Boolean\",0,!0),ev=ha(\"RegExp\",0,!0),nv=ja(Th),rv=ja(Ch),Xh=Oa(\"ReadonlyArray\",1),av=Xh?Ia(Xh,[Th]):nv,tv=Oa(\"ThisType\",1);}(),gh}function i(t){switch(t.parent.kind){case 242:case 246:return!0;default:return e.isDeclarationName(t)}}var o=/^\".+\"$/,s=1,c=1,u=1,l=1;e.getNodeId=t,e.getSymbolId=n,e.isInstantiatedModule=r,e.createTypeChecker=a;}(r||(r={}));!function(e){function t(t){var n=e.createNode(t,-1,-1);return n.flags|=8,n}function n(t,n){return t!==n&&(Xa(t,n),Ea(t,n),n.startsOnNewLine&&(t.startsOnNewLine=!0),e.aggregateTransformFlags(t)),t}function r(t,n){if(t){if(e.isNodeArray(t))return t}else t=[];var r=t;return r.pos=-1,r.end=-1,r.hasTrailingComma=n,r}function a(e){var n=t(e.kind);n.flags|=e.flags,Xa(n,e);for(var r in e)!n.hasOwnProperty(r)&&e.hasOwnProperty(r)&&(n[r]=e[r]);return n}function i(e){return\"number\"==typeof e?o(e+\"\"):\"boolean\"==typeof e?e?v():b():\"string\"==typeof e?s(e):c(e)}function o(e){var n=t(8);return n.text=e,n.numericLiteralFlags=0,n}function s(e){var n=t(9);return n.text=e,n}function c(e){var t=s(e.text);return t.textSourceNode=e,t}function u(n,a){var i=t(71);return i.text=e.escapeIdentifier(n),i.originalKeywordKind=n?e.stringToToken(n):0,i.autoGenerateKind=0,i.autoGenerateId=0,a&&(i.typeArguments=r(a)),i}function l(e,t){return e.typeArguments!==t?n(u(e.text,t),e):e}function _(e){var t=u(\"\");return t.autoGenerateKind=1,t.autoGenerateId=Za,Za++,e&&e(t),t}function d(){var e=u(\"\");return e.autoGenerateKind=2,e.autoGenerateId=Za,Za++,e}function p(e){var t=u(e);return t.autoGenerateKind=3,t.autoGenerateId=Za,Za++,t}function f(e){var t=u(\"\");return t.autoGenerateKind=4,t.autoGenerateId=Za,t.original=e,Za++,t}function g(e){return t(e)}function m(){return t(97)}function y(){return t(99)}function h(){return t(95)}function v(){return t(101)}function b(){return t(86)}function x(e,n){var r=t(143);return r.left=e,r.right=xa(n),r}function k(e,t,r){return e.left!==t||e.right!==r?n(x(t,r),e):e}function S(e){var n=t(144);return n.expression=e,n}function T(e,t){return e.expression!==t?n(S(t),e):e}function C(e,n,r){var a=t(145);return a.name=xa(e),a.constraint=n,a.default=r,a}function D(e,t,r,a){return e.name!==t||e.constraint!==r||e.default!==a?n(C(t,r,a),e):e}function E(n,r,a,i,o,s,c){var u=t(146);return u.decorators=Sa(n),u.modifiers=Sa(r),u.dotDotDotToken=a,u.name=xa(i),u.questionToken=o,u.type=s,u.initializer=c?e.parenthesizeExpressionForList(c):void 0,u}function N(e,t,r,a,i,o,s,c){return e.decorators!==t||e.modifiers!==r||e.dotDotDotToken!==a||e.name!==i||e.questionToken!==o||e.type!==s||e.initializer!==c?n(E(t,r,a,i,e.questionToken,s,c),e):e}function A(n){var r=t(147);return r.expression=e.parenthesizeForAccess(n),r}function w(e,t){return e.expression!==t?n(A(t),e):e}function P(e,n,r,a,i){var o=t(148);return o.modifiers=Sa(e),o.name=xa(n),o.questionToken=r,o.type=a,o.initializer=i,o}function O(e,t,r,a,i,o){return e.modifiers!==t||e.name!==r||e.questionToken!==a||e.type!==i||e.initializer!==o?n(P(t,r,a,i,o),e):e}function F(e,n,r,a,i,o){var s=t(149);return s.decorators=Sa(e),s.modifiers=Sa(n),s.name=xa(r),s.questionToken=a,s.type=i,s.initializer=o,s}function I(e,t,r,a,i,o){return e.decorators!==t||e.modifiers!==r||e.name!==a||e.type!==i||e.initializer!==o?n(F(t,r,a,e.questionToken,i,o),e):e}function M(e,t,n,r,a){var i=Y(150,e,t,n);return i.name=xa(r),i.questionToken=a,i}function R(e,t,r,a,i,o){return e.typeParameters!==t||e.parameters!==r||e.type!==a||e.name!==i||e.questionToken!==o?n(M(t,r,a,i,o),e):e}function L(e,n,a,i,o,s,c,u,l){var _=t(151);return _.decorators=Sa(e),_.modifiers=Sa(n),_.asteriskToken=a,_.name=xa(i),_.questionToken=o,_.typeParameters=Sa(s),_.parameters=r(c),_.type=u,_.body=l,_}function B(e,t,r,a,i,o,s,c,u,l){return e.decorators!==t||e.modifiers!==r||e.asteriskToken!==a||e.name!==i||e.typeParameters!==s||e.parameters!==c||e.type!==u||e.body!==l?n(L(t,r,a,i,o,s,c,u,l),e):e}function K(e,n,a,i){var o=t(152);return o.decorators=Sa(e),o.modifiers=Sa(n),o.typeParameters=void 0,o.parameters=r(a),o.type=void 0,o.body=i,o}function j(e,t,r,a,i){return e.decorators!==t||e.modifiers!==r||e.parameters!==a||e.body!==i?n(K(t,r,a,i),e):e}function J(e,n,a,i,o,s){var c=t(153);return c.decorators=Sa(e),c.modifiers=Sa(n),c.name=xa(a),c.typeParameters=void 0,c.parameters=r(i),c.type=o,c.body=s,c}function z(e,t,r,a,i,o,s){return e.decorators!==t||e.modifiers!==r||e.name!==a||e.parameters!==i||e.type!==o||e.body!==s?n(J(t,r,a,i,o,s),e):e}function U(e,n,a,i,o){var s=t(154);return s.decorators=Sa(e),s.modifiers=Sa(n),s.name=xa(a),s.typeParameters=void 0,s.parameters=r(i),s.body=o,s}function q(e,t,r,a,i,o){return e.decorators!==t||e.modifiers!==r||e.name!==a||e.parameters!==i||e.body!==o?n(U(t,r,a,i,o),e):e}function V(e,t,n){return Y(155,e,t,n)}function $(e,t,n,r){return Q(e,t,n,r)}function W(e,t,n){return Y(156,e,t,n)}function H(e,t,n,r){return Q(e,t,n,r)}function G(e,n,a,i){var o=t(157);return o.decorators=Sa(e),o.modifiers=Sa(n),o.parameters=r(a),o.type=i,o}function X(e,t,r,a,i){return e.parameters!==a||e.type!==i||e.decorators!==t||e.modifiers!==r?n(G(t,r,a,i),e):e}function Y(e,n,r,a){var i=t(e);return i.typeParameters=Sa(n),i.parameters=Sa(r),i.type=a,i}function Q(e,t,r,a){return e.typeParameters!==t||e.parameters!==r||e.type!==a?n(Y(e.kind,t,r,a),e):e}function Z(e){return t(e)}function ee(e,n){var r=t(158);return r.parameterName=xa(e),r.type=n,r}function te(e,t,r){return e.parameterName!==t||e.type!==r?n(ee(t,r),e):e}function ne(n,r){var a=t(159);return a.typeName=xa(n),a.typeArguments=r&&e.parenthesizeTypeParameters(r),a}function re(e,t,r){return e.typeName!==t||e.typeArguments!==r?n(ne(t,r),e):e}function ae(e,t,n){return Y(160,e,t,n)}function ie(e,t,n,r){return Q(e,t,n,r)}function oe(e,t,n){return Y(161,e,t,n)}function se(e,t,n,r){return Q(e,t,n,r)}function ce(e){var n=t(162);return n.exprName=e,n}function ue(e,t){return e.exprName!==t?n(ce(t),e):e}function le(e){var n=t(163);return n.members=r(e),n}function _e(e,t){return e.members!==t?n(le(t),e):e}function de(n){var r=t(164);return r.elementType=e.parenthesizeElementTypeMember(n),r}function pe(e,t){return e.elementType!==t?n(de(t),e):e}function fe(e){var n=t(165);return n.elementTypes=r(e),n}function ge(e,t){return e.elementTypes!==t?n(fe(t),e):e}function me(e){return be(166,e)}function ye(e,t){return xe(e,t)}function he(e){return be(167,e)}function ve(e,t){return xe(e,t)}function be(n,r){var a=t(n);return a.types=e.parenthesizeElementTypeMembers(r),a}function xe(e,t){return e.types!==t?n(be(e.kind,t),e):e}function ke(e){var n=t(168);return n.type=e,n}function Se(e,t){return e.type!==t?n(ke(t),e):e}function Te(){return t(169)}function Ce(n){var r=t(170);return r.operator=127,r.type=e.parenthesizeElementTypeMember(n),r}function De(e,t){return e.type!==t?n(Ce(t),e):e}function Ee(n,r){var a=t(171);return a.objectType=e.parenthesizeElementTypeMember(n),a.indexType=r,a}function Ne(e,t,r){return e.objectType!==t||e.indexType!==r?n(Ee(t,r),e):e}function Ae(e,n,r,a){var i=t(172);return i.readonlyToken=e,i.typeParameter=n,i.questionToken=r,i.type=a,i}function we(e,t,r,a,i){return e.readonlyToken!==t||e.typeParameter!==r||e.questionToken!==a||e.type!==i?n(Ae(t,r,a,i),e):e}function Pe(e){var n=t(173);return n.literal=e,n}function Oe(e,t){return e.literal!==t?n(Pe(t),e):e}function Fe(e){var n=t(174);return n.elements=r(e),n}function Ie(e,t){return e.elements!==t?n(Fe(t),e):e}function Me(e){var n=t(175);return n.elements=r(e),n}function Re(e,t){return e.elements!==t?n(Me(t),e):e}function Le(e,n,r,a){var i=t(176);return i.dotDotDotToken=e,i.propertyName=xa(n),i.name=xa(r),i.initializer=a,i}function Be(e,t,r,a,i){return e.propertyName!==r||e.dotDotDotToken!==t||e.name!==a||e.initializer!==i?n(Le(t,r,a,i),e):e}function Ke(n,a){var i=t(177);return i.elements=e.parenthesizeListElements(r(n)),a&&(i.multiLine=!0),i}function je(e,t){return e.elements!==t?n(Ke(t,e.multiLine),e):e}function Je(e,n){var a=t(178);return a.properties=r(e),n&&(a.multiLine=!0),a}function ze(e,t){return e.properties!==t?n(Je(t,e.multiLine),e):e}function Ue(n,r){var a=t(179);return a.expression=e.parenthesizeForAccess(n),a.name=xa(r),Na(a,131072),a}function qe(t,r,a){return t.expression!==r||t.name!==a?n(Na(Ue(r,a),e.getEmitFlags(t)),t):t}function Ve(n,r){var a=t(180);return a.expression=e.parenthesizeForAccess(n),a.argumentExpression=ka(r),a}function $e(e,t,r){return e.expression!==t||e.argumentExpression!==r?n(Ve(t,r),e):e}function We(n,a,i){var o=t(181);return o.expression=e.parenthesizeForAccess(n),o.typeArguments=Sa(a),o.arguments=e.parenthesizeListElements(r(i)),o}function He(e,t,r,a){return e.expression!==t||e.typeArguments!==r||e.arguments!==a?n(We(t,r,a),e):e}function Ge(n,a,i){var o=t(182);return o.expression=e.parenthesizeForNew(n),o.typeArguments=Sa(a),o.arguments=i?e.parenthesizeListElements(r(i)):void 0,o}function Xe(e,t,r,a){return e.expression!==t||e.typeArguments!==r||e.arguments!==a?n(Ge(t,r,a),e):e}function Ye(n,r){var a=t(183);return a.tag=e.parenthesizeForAccess(n),a.template=r,a}function Qe(e,t,r){return e.tag!==t||e.template!==r?n(Ye(t,r),e):e}function Ze(n,r){var a=t(184);return a.type=n,a.expression=e.parenthesizePrefixOperand(r),a}function et(e,t,r){return e.type!==t||e.expression!==r?n(Ze(t,r),e):e}function tt(e){var n=t(185);return n.expression=e,n}function nt(e,t){return e.expression!==t?n(tt(t),e):e}function rt(e,n,a,i,o,s,c){var u=t(186);return u.modifiers=Sa(e),u.asteriskToken=n,u.name=xa(a),u.typeParameters=Sa(i),u.parameters=r(o),u.type=s,u.body=c,u}function at(e,t,r,a,i,o,s,c){return e.name!==a||e.modifiers!==t||e.asteriskToken!==r||e.typeParameters!==i||e.parameters!==o||e.type!==s||e.body!==c?n(rt(t,r,a,i,o,s,c),e):e}function it(n,a,i,o,s,c){var u=t(187);return u.modifiers=Sa(n),u.typeParameters=Sa(a),u.parameters=r(i),u.type=o,u.equalsGreaterThanToken=s||g(36),u.body=e.parenthesizeConciseBody(c),u}function ot(e,t,r,a,i,o){return e.modifiers!==t||e.typeParameters!==r||e.parameters!==a||e.type!==i||e.body!==o?n(it(t,r,a,i,e.equalsGreaterThanToken,o),e):e}function st(n){var r=t(188);return r.expression=e.parenthesizePrefixOperand(n),r}function ct(e,t){return e.expression!==t?n(st(t),e):e}function ut(n){var r=t(189);return r.expression=e.parenthesizePrefixOperand(n),r}function lt(e,t){return e.expression!==t?n(ut(t),e):e}function _t(n){var r=t(190);return r.expression=e.parenthesizePrefixOperand(n),r}function dt(e,t){return e.expression!==t?n(_t(t),e):e}function pt(n){var r=t(191);return r.expression=e.parenthesizePrefixOperand(n),r}function ft(e,t){return e.expression!==t?n(pt(t),e):e}function gt(n,r){var a=t(192);return a.operator=n,a.operand=e.parenthesizePrefixOperand(r),a}function mt(e,t){return e.operand!==t?n(gt(e.operator,t),e):e}function yt(n,r){var a=t(193);return a.operand=e.parenthesizePostfixOperand(n),a.operator=r,a}function ht(e,t){return e.operand!==t?n(yt(t,e.operator),e):e}function vt(n,r,a){var i=t(194),o=Ta(r),s=o.kind;return i.left=e.parenthesizeBinaryOperand(s,n,!0,void 0),i.operatorToken=o,i.right=e.parenthesizeBinaryOperand(s,a,!1,i.left),i}function bt(e,t,r,a){return e.left!==t||e.right!==r?n(vt(t,a||e.operatorToken,r),e):e}function xt(n,r,a,i,o){var s=t(195);return s.condition=e.parenthesizeForConditionalHead(n),s.questionToken=o?r:g(55),s.whenTrue=e.parenthesizeSubexpressionOfConditionalExpression(o?a:r),s.colonToken=o?i:g(56),s.whenFalse=e.parenthesizeSubexpressionOfConditionalExpression(o||a),s}function kt(e,t,r,a){return e.condition!==t||e.whenTrue!==r||e.whenFalse!==a?n(xt(t,e.questionToken,r,e.colonToken,a),e):e}function St(e,n){var a=t(196);return a.head=e,a.templateSpans=r(n),a}function Tt(e,t,r){return e.head!==t||e.templateSpans!==r?n(St(t,r),e):e}function Ct(e,n){var r=t(197);return r.asteriskToken=e&&39===e.kind?e:void 0,r.expression=e&&39!==e.kind?e:n,r}function Dt(e,t,r){return e.expression!==r||e.asteriskToken!==t?n(Ct(t,r),e):e}function Et(n){var r=t(198);return r.expression=e.parenthesizeExpressionForList(n),r}function Nt(e,t){return e.expression!==t?n(Et(t),e):e}function At(e,n,a,i,o){var s=t(199);return s.decorators=void 0,s.modifiers=Sa(e),s.name=xa(n),s.typeParameters=Sa(a),s.heritageClauses=Sa(i),s.members=r(o),s}function wt(e,t,r,a,i,o){return e.modifiers!==t||e.name!==r||e.typeParameters!==a||e.heritageClauses!==i||e.members!==o?n(At(t,r,a,i,o),e):e}function Pt(){return t(200)}function Ot(n,r){var a=t(201);return a.expression=e.parenthesizeForAccess(r),a.typeArguments=Sa(n),a}function Ft(e,t,r){return e.typeArguments!==t||e.expression!==r?n(Ot(t,r),e):e}function It(e,n){var r=t(202);return r.expression=e,r.type=n,r}function Mt(e,t,r){return e.expression!==t||e.type!==r?n(It(t,r),e):e}function Rt(n){var r=t(203);return r.expression=e.parenthesizeForAccess(n),r}function Lt(e,t){return e.expression!==t?n(Rt(t),e):e}function Bt(e,n){var r=t(204);return r.keywordToken=e,r.name=n,r}function Kt(e,t){return e.name!==t?n(Bt(e.keywordToken,t),e):e}function jt(e,n){var r=t(205);return r.expression=e,r.literal=n,r}function Jt(e,t,r){return e.expression!==t||e.literal!==r?n(jt(t,r),e):e}function zt(){return t(206)}function Ut(e,n){var a=t(207);return a.statements=r(e),n&&(a.multiLine=n),a}function qt(e,t){return e.statements!==t?n(Ut(t,e.multiLine),e):e}function Vt(n,r){var a=t(208);return a.decorators=void 0,a.modifiers=Sa(n),a.declarationList=e.isArray(r)?Nn(r):r,a}function $t(e,t,r){return e.modifiers!==t||e.declarationList!==r?n(Vt(t,r),e):e}function Wt(){return t(209)}function Ht(n){var r=t(210);return r.expression=e.parenthesizeExpressionForExpressionStatement(n),r}function Gt(e,t){return e.expression!==t?n(Ht(t),e):e}function Xt(e,n,r){var a=t(211);return a.expression=e,a.thenStatement=n,a.elseStatement=r,a}function Yt(e,t,r,a){return e.expression!==t||e.thenStatement!==r||e.elseStatement!==a?n(Xt(t,r,a),e):e}function Qt(e,n){var r=t(212);return r.statement=e,r.expression=n,r}function Zt(e,t,r){return e.statement!==t||e.expression!==r?n(Qt(t,r),e):e}function en(e,n){var r=t(213);return r.expression=e,r.statement=n,r}function tn(e,t,r){return e.expression!==t||e.statement!==r?n(en(t,r),e):e}function nn(e,n,r,a){var i=t(214);return i.initializer=e,i.condition=n,i.incrementor=r,i.statement=a,i}function rn(e,t,r,a,i){return e.initializer!==t||e.condition!==r||e.incrementor!==a||e.statement!==i?n(nn(t,r,a,i),e):e}function an(e,n,r){var a=t(215);return a.initializer=e,a.expression=n,a.statement=r,a}function on$$1(e,t,r,a){return e.initializer!==t||e.expression!==r||e.statement!==a?n(an(t,r,a),e):e}function sn(e,n,r,a){var i=t(216);return i.awaitModifier=e,i.initializer=n,i.expression=r,i.statement=a,i}function cn(e,t,r,a,i){return e.awaitModifier!==t||e.initializer!==r||e.expression!==a||e.statement!==i?n(sn(t,r,a,i),e):e}function un(e){var n=t(217);return n.label=xa(e),n}function ln(e,t){return e.label!==t?n(un(t),e):e}function _n(e){var n=t(218);return n.label=xa(e),n}function dn(e,t){return e.label!==t?n(_n(t),e):e}function pn(e){var n=t(219);return n.expression=e,n}function fn(e,t){return e.expression!==t?n(pn(t),e):e}function gn(e,n){var r=t(220);return r.expression=e,r.statement=n,r}function mn(e,t,r){return e.expression!==t||e.statement!==r?n(gn(t,r),e):e}function yn(n,r){var a=t(221);return a.expression=e.parenthesizeExpressionForList(n),a.caseBlock=r,a}function hn(e,t,r){return e.expression!==t||e.caseBlock!==r?n(yn(t,r),e):e}function vn(e,n){var r=t(222);return r.label=xa(e),r.statement=n,r}function bn(e,t,r){return e.label!==t||e.statement!==r?n(vn(t,r),e):e}function xn(e){var n=t(223);return n.expression=e,n}function kn(e,t){return e.expression!==t?n(xn(t),e):e}function Sn(e,n,r){var a=t(224);return a.tryBlock=e,a.catchClause=n,a.finallyBlock=r,a}function Tn(e,t,r,a){return e.tryBlock!==t||e.catchClause!==r||e.finallyBlock!==a?n(Sn(t,r,a),e):e}function Cn(){return t(225)}function Dn(n,r,a){var i=t(226);return i.name=xa(n),i.type=r,i.initializer=void 0!==a?e.parenthesizeExpressionForList(a):void 0,i}function En(e,t,r,a){return e.name!==t||e.type!==r||e.initializer!==a?n(Dn(t,r,a),e):e}function Nn(e,n){var a=t(227);return a.flags|=3&n,a.declarations=r(e),a}function An(e,t){return e.declarations!==t?n(Nn(t,e.flags),e):e}function wn(e,n,a,i,o,s,c,u){var l=t(228);return l.decorators=Sa(e),l.modifiers=Sa(n),l.asteriskToken=a,l.name=xa(i),l.typeParameters=Sa(o),l.parameters=r(s),l.type=c,l.body=u,l}function Pn(e,t,r,a,i,o,s,c,u){return e.decorators!==t||e.modifiers!==r||e.asteriskToken!==a||e.name!==i||e.typeParameters!==o||e.parameters!==s||e.type!==c||e.body!==u?n(wn(t,r,a,i,o,s,c,u),e):e}function On(e,n,a,i,o,s){var c=t(229);return c.decorators=Sa(e),c.modifiers=Sa(n),c.name=xa(a),c.typeParameters=Sa(i),c.heritageClauses=Sa(o),c.members=r(s),c}function Fn(e,t,r,a,i,o,s){return e.decorators!==t||e.modifiers!==r||e.name!==a||e.typeParameters!==i||e.heritageClauses!==o||e.members!==s?n(On(t,r,a,i,o,s),e):e}function In(e,n,a,i,o,s){var c=t(230);return c.decorators=Sa(e),c.modifiers=Sa(n),c.name=xa(a),c.typeParameters=Sa(i),c.heritageClauses=Sa(o),c.members=r(s),c}function Mn(e,t,r,a,i,o,s){return e.decorators!==t||e.modifiers!==r||e.name!==a||e.typeParameters!==i||e.heritageClauses!==o||e.members!==s?n(In(t,r,a,i,o,s),e):e}function Rn(e,n,r,a,i){var o=t(231);return o.decorators=Sa(e),o.modifiers=Sa(n),o.name=xa(r),o.typeParameters=Sa(a),o.type=i,o}function Ln(e,t,r,a,i,o){return e.decorators!==t||e.modifiers!==r||e.name!==a||e.typeParameters!==i||e.type!==o?n(Rn(t,r,a,i,o),e):e}function Bn(e,n,a,i){var o=t(232);return o.decorators=Sa(e),o.modifiers=Sa(n),o.name=xa(a),o.members=r(i),o}function Kn(e,t,r,a,i){return e.decorators!==t||e.modifiers!==r||e.name!==a||e.members!==i?n(Bn(t,r,a,i),e):e}function jn(e,n,r,a,i){var o=t(233);return o.flags|=532&i,o.decorators=Sa(e),o.modifiers=Sa(n),o.name=r,o.body=a,o}function Jn(e,t,r,a,i){return e.decorators!==t||e.modifiers!==r||e.name!==a||e.body!==i?n(jn(t,r,a,i,e.flags),e):e}function zn(e){var n=t(234);return n.statements=r(e),n}function Un(e,t){return e.statements!==t?n(zn(t),e):e}function qn(e){var n=t(235);return n.clauses=r(e),n}function Vn(e,t){return e.clauses!==t?n(qn(t),e):e}function $n(e){var n=t(236);return n.name=xa(e),n}function Wn(e,t){return e.name!==t?n($n(t),e):e}function Hn(e,n,r,a){var i=t(237);return i.decorators=Sa(e),i.modifiers=Sa(n),i.name=xa(r),i.moduleReference=a,i}function Gn(e,t,r,a,i){return e.decorators!==t||e.modifiers!==r||e.name!==a||e.moduleReference!==i?n(Hn(t,r,a,i),e):e}function Xn(e,n,r,a){var i=t(238);return i.decorators=Sa(e),i.modifiers=Sa(n),i.importClause=r,i.moduleSpecifier=a,i}function Yn(e,t,r,a,i){return e.decorators!==t||e.modifiers!==r||e.importClause!==a||e.moduleSpecifier!==i?n(Xn(t,r,a,i),e):e}function Qn(e,n){var r=t(239);return r.name=e,r.namedBindings=n,r}function Zn(e,t,r){return e.name!==t||e.namedBindings!==r?n(Qn(t,r),e):e}function er(e){var n=t(240);return n.name=e,n}function tr(e,t){return e.name!==t?n(er(t),e):e}function nr(e){var n=t(241);return n.elements=r(e),n}function rr(e,t){return e.elements!==t?n(nr(t),e):e}function ar(e,n){var r=t(242);return r.propertyName=e,r.name=n,r}function ir(e,t,r){return e.propertyName!==t||e.name!==r?n(ar(t,r),e):e}function or(e,n,r,a){var i=t(243);return i.decorators=Sa(e),i.modifiers=Sa(n),i.isExportEquals=r,i.expression=a,i}function sr(e,t,r,a){return e.decorators!==t||e.modifiers!==r||e.expression!==a?n(or(t,r,e.isExportEquals,a),e):e}function cr(e,n,r,a){var i=t(244);return i.decorators=Sa(e),i.modifiers=Sa(n),i.exportClause=r,i.moduleSpecifier=a,i}function ur(e,t,r,a,i){return e.decorators!==t||e.modifiers!==r||e.exportClause!==a||e.moduleSpecifier!==i?n(cr(t,r,a,i),e):e}function lr(e){var n=t(245);return n.elements=r(e),n}function _r(e,t){return e.elements!==t?n(lr(t),e):e}function dr(e,n){var r=t(246);return r.propertyName=xa(e),r.name=xa(n),r}function pr(e,t,r){return e.propertyName!==t||e.name!==r?n(dr(t,r),e):e}function fr(e){var n=t(248);return n.expression=e,n}function gr(e,t){return e.expression!==t?n(fr(t),e):e}function mr(e,n,a){var i=t(249);return i.openingElement=e,i.children=r(n),i.closingElement=a,i}function yr(e,t,r,a){return e.openingElement!==t||e.children!==r||e.closingElement!==a?n(mr(t,r,a),e):e}function hr(e,n){var r=t(250);return r.tagName=e,r.attributes=n,r}function vr(e,t,r){return e.tagName!==t||e.attributes!==r?n(hr(t,r),e):e}function br(e,n){var r=t(251);return r.tagName=e,r.attributes=n,r}function xr(e,t,r){return e.tagName!==t||e.attributes!==r?n(br(t,r),e):e}function kr(e){var n=t(252);return n.tagName=e,n}function Sr(e,t){return e.tagName!==t?n(kr(t),e):e}function Tr(e,n){var r=t(253);return r.name=e,r.initializer=n,r}function Cr(e,t,r){return e.name!==t||e.initializer!==r?n(Tr(t,r),e):e}function Dr(e){var n=t(254);return n.properties=r(e),n}function Er(e,t){return e.properties!==t?n(Dr(t),e):e}function Nr(e){var n=t(255);return n.expression=e,n}function Ar(e,t){return e.expression!==t?n(Nr(t),e):e}function wr(e,n){var r=t(256);return r.dotDotDotToken=e,r.expression=n,r}function Pr(e,t){return e.expression!==t?n(wr(e.dotDotDotToken,t),e):e}function Or(n,a){var i=t(257);return i.expression=e.parenthesizeExpressionForList(n),i.statements=r(a),i}function Fr(e,t,r){return e.expression!==t||e.statements!==r?n(Or(t,r),e):e}function Ir(e){var n=t(258);return n.statements=r(e),n}function Mr(e,t){return e.statements!==t?n(Ir(t),e):e}function Rr(e,n){var a=t(259);return a.token=e,a.types=r(n),a}function Lr(e,t){return e.types!==t?n(Rr(e.token,t),e):e}function Br(e,n){var r=t(260);return r.variableDeclaration=\"string\"==typeof e?Dn(e):e,r.block=n,r}function Kr(e,t,r){return e.variableDeclaration!==t||e.block!==r?n(Br(t,r),e):e}function jr(n,r){var a=t(261);return a.name=xa(n),a.questionToken=void 0,a.initializer=void 0!==r?e.parenthesizeExpressionForList(r):void 0,a}function Jr(e,t,r){return e.name!==t||e.initializer!==r?n(jr(t,r),e):e}function zr(n,r){var a=t(262);return a.name=xa(n),a.objectAssignmentInitializer=void 0!==r?e.parenthesizeExpressionForList(r):void 0,a}function Ur(e,t,r){return e.name!==t||e.objectAssignmentInitializer!==r?n(zr(t,r),e):e}function qr(n){var r=t(263);return r.expression=void 0!==n?e.parenthesizeExpressionForList(n):void 0,r}function Vr(e,t){return e.expression!==t?n(qr(t),e):e}function $r(n,r){var a=t(264);return a.name=xa(n),a.initializer=r&&e.parenthesizeExpressionForList(r),a}function Wr(e,t,r){return e.name!==t||e.initializer!==r?n($r(t,r),e):e}function Hr(e,a){if(e.statements!==a){var i=t(265);return i.flags|=e.flags,i.statements=r(a),i.endOfFileToken=e.endOfFileToken,i.fileName=e.fileName,i.path=e.path,i.text=e.text,void 0!==e.amdDependencies&&(i.amdDependencies=e.amdDependencies),void 0!==e.moduleName&&(i.moduleName=e.moduleName),void 0!==e.referencedFiles&&(i.referencedFiles=e.referencedFiles),void 0!==e.typeReferenceDirectives&&(i.typeReferenceDirectives=e.typeReferenceDirectives),void 0!==e.languageVariant&&(i.languageVariant=e.languageVariant),void 0!==e.isDeclarationFile&&(i.isDeclarationFile=e.isDeclarationFile),void 0!==e.renamedDependencies&&(i.renamedDependencies=e.renamedDependencies),void 0!==e.hasNoDefaultLib&&(i.hasNoDefaultLib=e.hasNoDefaultLib),void 0!==e.languageVersion&&(i.languageVersion=e.languageVersion),void 0!==e.scriptKind&&(i.scriptKind=e.scriptKind),void 0!==e.externalModuleIndicator&&(i.externalModuleIndicator=e.externalModuleIndicator),void 0!==e.commonJsModuleIndicator&&(i.commonJsModuleIndicator=e.commonJsModuleIndicator),void 0!==e.identifiers&&(i.identifiers=e.identifiers),void 0!==e.nodeCount&&(i.nodeCount=e.nodeCount),void 0!==e.identifierCount&&(i.identifierCount=e.identifierCount),void 0!==e.symbolCount&&(i.symbolCount=e.symbolCount),void 0!==e.parseDiagnostics&&(i.parseDiagnostics=e.parseDiagnostics),void 0!==e.bindDiagnostics&&(i.bindDiagnostics=e.bindDiagnostics),void 0!==e.lineMap&&(i.lineMap=e.lineMap),void 0!==e.classifiableNames&&(i.classifiableNames=e.classifiableNames),void 0!==e.resolvedModules&&(i.resolvedModules=e.resolvedModules),void 0!==e.resolvedTypeReferenceDirectiveNames&&(i.resolvedTypeReferenceDirectiveNames=e.resolvedTypeReferenceDirectiveNames),void 0!==e.imports&&(i.imports=e.imports),void 0!==e.moduleAugmentations&&(i.moduleAugmentations=e.moduleAugmentations),n(i,e)}return e}function Gr(e){var t=a(e);return t.pos=e.pos,t.end=e.end,t.parent=e.parent,t}function Xr(e){var n=t(296);return n.original=e,Ea(n,e),n}function Yr(e){var n=t(300);return n.emitNode={},n.original=e,n}function Qr(e){var n=t(299);return n.emitNode={},n.original=e,n}function Zr(e,n){var r=t(297);return r.expression=e,r.original=n,Ea(r,n),r}function ea(e,t){return e.expression!==t?n(Zr(t,e.original),e):e}function ta(t){if(e.nodeIsSynthesized(t)&&!e.isParseTreeNode(t)&&!t.original&&!t.emitNode&&!t.id){if(298===t.kind)return t.elements;if(e.isBinaryExpression(t)&&26===t.operatorToken.kind)return[t.left,t.right]}return t}function na(n){var a=t(298);return a.elements=r(e.sameFlatMap(n,ta)),a}function ra(e,t){return e.elements!==t?n(na(t),e):e}function aa(t){var n=e.createNode(266);return n.sourceFiles=t,n}function ia(e,t){return e.sourceFiles!==t?aa(t):e}function oa(e,t,n){return We(rt(void 0,void 0,void 0,void 0,t?[t]:[],void 0,Ut(e,!0)),void 0,n?[n]:[])}function sa(e,t){return vt(e,26,t)}function ca(e,t){return vt(e,27,t)}function ua(e,t){return vt(e,58,t)}function la(e,t){return vt(e,34,t)}function _a(e,t){return vt(e,35,t)}function da(e,t){return vt(e,37,t)}function pa(e,t){return vt(e,38,t)}function fa(e){return yt(e,43)}function ga(e,t){return vt(e,53,t)}function ma(e,t){return vt(e,54,t)}function ya(e){return gt(51,e)}function ha(){return _t(i(0))}function va(e){return or(void 0,void 0,!1,e)}function ba(e){return cr(void 0,void 0,lr([dr(void 0,e)]))}function xa(e){return\"string\"==typeof e?u(e):e}function ka(e){return\"string\"==typeof e||\"number\"==typeof e?i(e):e}function Sa(e){return e?r(e):void 0}function Ta(e){return\"number\"==typeof e?g(e):e}function Ca(t){var n=(t=e.getSourceFileOfNode(e.getParseTreeNode(t)))&&t.emitNode,r=n&&n.annotatedNodes;if(r)for(var a=0,i=r;a<i.length;a++)i[a].emitNode=void 0;}function Da(t){if(!t.emitNode){if(e.isParseTreeNode(t)){if(265===t.kind)return t.emitNode={annotatedNodes:[t]};Da(e.getSourceFileOfNode(t)).annotatedNodes.push(t);}t.emitNode={};}return t.emitNode}function Ea(e,t){return t&&(e.pos=t.pos,e.end=t.end),e}function Na(e,t){return Da(e).flags=t,e}function Aa(e){var t=e.emitNode;return t&&t.sourceMapRange||e}function wa(e,t){return Da(e).sourceMapRange=t,e}function Pa(t,n,r){return new(ei||(ei=e.objectAllocator.getSourceMapSourceConstructor()))(t,n,r)}function Oa(e,t){var n=e.emitNode,r=n&&n.tokenSourceMapRanges;return r&&r[t]}function Fa(e,t,n){var r=Da(e);return(r.tokenSourceMapRanges||(r.tokenSourceMapRanges=[]))[t]=n,e}function Ia(e){var t=e.emitNode;return t&&t.commentRange||e}function Ma(e,t){return Da(e).commentRange=t,e}function Ra(e){var t=e.emitNode;return t&&t.leadingComments}function La(e,t){return Da(e).leadingComments=t,e}function Ba(t,n,r,a){return La(t,e.append(Ra(t),{kind:n,pos:-1,end:-1,hasTrailingNewLine:a,text:r}))}function Ka(e){var t=e.emitNode;return t&&t.trailingComments}function ja(e,t){return Da(e).trailingComments=t,e}function Ja(t,n,r,a){return ja(t,e.append(Ka(t),{kind:n,pos:-1,end:-1,hasTrailingNewLine:a,text:r}))}function za(e){var t=e.emitNode;return t&&t.constantValue}function Ua(e,t){return Da(e).constantValue=t,e}function qa(t,n){var r=Da(t);return r.helpers=e.append(r.helpers,n),t}function Va(t,n){if(e.some(n))for(var r=Da(t),a=0,i=n;a<i.length;a++){var o=i[a];e.contains(r.helpers,o)||(r.helpers=e.append(r.helpers,o));}return t}function $a(t,n){var r=t.emitNode;if(r){var a=r.helpers;if(a)return e.orderedRemoveItem(a,n)}return!1}function Wa(e){var t=e.emitNode;return t&&t.helpers}function Ha(t,n,r){var a=t.emitNode,i=a&&a.helpers;if(e.some(i)){for(var o=Da(n),s=0,c=0;c<i.length;c++){var u=i[c];r(u)?(s++,e.contains(o.helpers,u)||(o.helpers=e.append(o.helpers,u))):s>0&&(i[c-s]=u);}s>0&&(i.length-=s);}}function Ga(t,n){return t===n?0:t.priority===n.priority?0:void 0===t.priority?1:void 0===n.priority?-1:e.compareValues(t.priority,n.priority)}function Xa(e,t){if(e.original=t,t){var n=t.emitNode;n&&(e.emitNode=Ya(n,e.emitNode));}return e}function Ya(t,n){var r=t.flags,a=t.leadingComments,i=t.trailingComments,o=t.commentRange,s=t.sourceMapRange,c=t.tokenSourceMapRanges,u=t.constantValue,l=t.helpers;return n||(n={}),a&&(n.leadingComments=e.addRange(a.slice(),n.leadingComments)),i&&(n.trailingComments=e.addRange(i.slice(),n.trailingComments)),r&&(n.flags=r),o&&(n.commentRange=o),s&&(n.sourceMapRange=s),c&&(n.tokenSourceMapRanges=Qa(c,n.tokenSourceMapRanges)),void 0!==u&&(n.constantValue=u),l&&(n.helpers=e.addRange(n.helpers,l)),n}function Qa(e,t){t||(t=[]);for(var n in e)t[n]=e[n];return t}e.updateNode=n,e.createNodeArray=r,e.getSynthesizedClone=a,e.createLiteral=i,e.createNumericLiteral=o,e.createIdentifier=u,e.updateIdentifier=l;var Za=0;e.createTempVariable=_,e.createLoopVariable=d,e.createUniqueName=p,e.getGeneratedNameForNode=f,e.createToken=g,e.createSuper=m,e.createThis=y,e.createNull=h,e.createTrue=v,e.createFalse=b,e.createQualifiedName=x,e.updateQualifiedName=k,e.createComputedPropertyName=S,e.updateComputedPropertyName=T,e.createTypeParameterDeclaration=C,e.updateTypeParameterDeclaration=D,e.createParameter=E,e.updateParameter=N,e.createDecorator=A,e.updateDecorator=w,e.createPropertySignature=P,e.updatePropertySignature=O,e.createProperty=F,e.updateProperty=I,e.createMethodSignature=M,e.updateMethodSignature=R,e.createMethod=L,e.updateMethod=B,e.createConstructor=K,e.updateConstructor=j,e.createGetAccessor=J,e.updateGetAccessor=z,e.createSetAccessor=U,e.updateSetAccessor=q,e.createCallSignature=V,e.updateCallSignature=$,e.createConstructSignature=W,e.updateConstructSignature=H,e.createIndexSignature=G,e.updateIndexSignature=X,e.createSignatureDeclaration=Y,e.createKeywordTypeNode=Z,e.createTypePredicateNode=ee,e.updateTypePredicateNode=te,e.createTypeReferenceNode=ne,e.updateTypeReferenceNode=re,e.createFunctionTypeNode=ae,e.updateFunctionTypeNode=ie,e.createConstructorTypeNode=oe,e.updateConstructorTypeNode=se,e.createTypeQueryNode=ce,e.updateTypeQueryNode=ue,e.createTypeLiteralNode=le,e.updateTypeLiteralNode=_e,e.createArrayTypeNode=de,e.updateArrayTypeNode=pe,e.createTupleTypeNode=fe,e.updateTypleTypeNode=ge,e.createUnionTypeNode=me,e.updateUnionTypeNode=ye,e.createIntersectionTypeNode=he,e.updateIntersectionTypeNode=ve,e.createUnionOrIntersectionTypeNode=be,e.createParenthesizedType=ke,e.updateParenthesizedType=Se,e.createThisTypeNode=Te,e.createTypeOperatorNode=Ce,e.updateTypeOperatorNode=De,e.createIndexedAccessTypeNode=Ee,e.updateIndexedAccessTypeNode=Ne,e.createMappedTypeNode=Ae,e.updateMappedTypeNode=we,e.createLiteralTypeNode=Pe,e.updateLiteralTypeNode=Oe,e.createObjectBindingPattern=Fe,e.updateObjectBindingPattern=Ie,e.createArrayBindingPattern=Me,e.updateArrayBindingPattern=Re,e.createBindingElement=Le,e.updateBindingElement=Be,e.createArrayLiteral=Ke,e.updateArrayLiteral=je,e.createObjectLiteral=Je,e.updateObjectLiteral=ze,e.createPropertyAccess=Ue,e.updatePropertyAccess=qe,e.createElementAccess=Ve,e.updateElementAccess=$e,e.createCall=We,e.updateCall=He,e.createNew=Ge,e.updateNew=Xe,e.createTaggedTemplate=Ye,e.updateTaggedTemplate=Qe,e.createTypeAssertion=Ze,e.updateTypeAssertion=et,e.createParen=tt,e.updateParen=nt,e.createFunctionExpression=rt,e.updateFunctionExpression=at,e.createArrowFunction=it,e.updateArrowFunction=ot,e.createDelete=st,e.updateDelete=ct,e.createTypeOf=ut,e.updateTypeOf=lt,e.createVoid=_t,e.updateVoid=dt,e.createAwait=pt,e.updateAwait=ft,e.createPrefix=gt,e.updatePrefix=mt,e.createPostfix=yt,e.updatePostfix=ht,e.createBinary=vt,e.updateBinary=bt,e.createConditional=xt,e.updateConditional=kt,e.createTemplateExpression=St,e.updateTemplateExpression=Tt,e.createYield=Ct,e.updateYield=Dt,e.createSpread=Et,e.updateSpread=Nt,e.createClassExpression=At,e.updateClassExpression=wt,e.createOmittedExpression=Pt,e.createExpressionWithTypeArguments=Ot,e.updateExpressionWithTypeArguments=Ft,e.createAsExpression=It,e.updateAsExpression=Mt,e.createNonNullExpression=Rt,e.updateNonNullExpression=Lt,e.createMetaProperty=Bt,e.updateMetaProperty=Kt,e.createTemplateSpan=jt,e.updateTemplateSpan=Jt,e.createSemicolonClassElement=zt,e.createBlock=Ut,e.updateBlock=qt,e.createVariableStatement=Vt,e.updateVariableStatement=$t,e.createEmptyStatement=Wt,e.createStatement=Ht,e.updateStatement=Gt,e.createIf=Xt,e.updateIf=Yt,e.createDo=Qt,e.updateDo=Zt,e.createWhile=en,e.updateWhile=tn,e.createFor=nn,e.updateFor=rn,e.createForIn=an,e.updateForIn=on$$1,e.createForOf=sn,e.updateForOf=cn,e.createContinue=un,e.updateContinue=ln,e.createBreak=_n,e.updateBreak=dn,e.createReturn=pn,e.updateReturn=fn,e.createWith=gn,e.updateWith=mn,e.createSwitch=yn,e.updateSwitch=hn,e.createLabel=vn,e.updateLabel=bn,e.createThrow=xn,e.updateThrow=kn,e.createTry=Sn,e.updateTry=Tn,e.createDebuggerStatement=Cn,e.createVariableDeclaration=Dn,e.updateVariableDeclaration=En,e.createVariableDeclarationList=Nn,e.updateVariableDeclarationList=An,e.createFunctionDeclaration=wn,e.updateFunctionDeclaration=Pn,e.createClassDeclaration=On,e.updateClassDeclaration=Fn,e.createInterfaceDeclaration=In,e.updateInterfaceDeclaration=Mn,e.createTypeAliasDeclaration=Rn,e.updateTypeAliasDeclaration=Ln,e.createEnumDeclaration=Bn,e.updateEnumDeclaration=Kn,e.createModuleDeclaration=jn,e.updateModuleDeclaration=Jn,e.createModuleBlock=zn,e.updateModuleBlock=Un,e.createCaseBlock=qn,e.updateCaseBlock=Vn,e.createNamespaceExportDeclaration=$n,e.updateNamespaceExportDeclaration=Wn,e.createImportEqualsDeclaration=Hn,e.updateImportEqualsDeclaration=Gn,e.createImportDeclaration=Xn,e.updateImportDeclaration=Yn,e.createImportClause=Qn,e.updateImportClause=Zn,e.createNamespaceImport=er,e.updateNamespaceImport=tr,e.createNamedImports=nr,e.updateNamedImports=rr,e.createImportSpecifier=ar,e.updateImportSpecifier=ir,e.createExportAssignment=or,e.updateExportAssignment=sr,e.createExportDeclaration=cr,e.updateExportDeclaration=ur,e.createNamedExports=lr,e.updateNamedExports=_r,e.createExportSpecifier=dr,e.updateExportSpecifier=pr,e.createExternalModuleReference=fr,e.updateExternalModuleReference=gr,e.createJsxElement=mr,e.updateJsxElement=yr,e.createJsxSelfClosingElement=hr,e.updateJsxSelfClosingElement=vr,e.createJsxOpeningElement=br,e.updateJsxOpeningElement=xr,e.createJsxClosingElement=kr,e.updateJsxClosingElement=Sr,e.createJsxAttribute=Tr,e.updateJsxAttribute=Cr,e.createJsxAttributes=Dr,e.updateJsxAttributes=Er,e.createJsxSpreadAttribute=Nr,e.updateJsxSpreadAttribute=Ar,e.createJsxExpression=wr,e.updateJsxExpression=Pr,e.createCaseClause=Or,e.updateCaseClause=Fr,e.createDefaultClause=Ir,e.updateDefaultClause=Mr,e.createHeritageClause=Rr,e.updateHeritageClause=Lr,e.createCatchClause=Br,e.updateCatchClause=Kr,e.createPropertyAssignment=jr,e.updatePropertyAssignment=Jr,e.createShorthandPropertyAssignment=zr,e.updateShorthandPropertyAssignment=Ur,e.createSpreadAssignment=qr,e.updateSpreadAssignment=Vr,e.createEnumMember=$r,e.updateEnumMember=Wr,e.updateSourceFileNode=Hr,e.getMutableClone=Gr,e.createNotEmittedStatement=Xr,e.createEndOfDeclarationMarker=Yr,e.createMergeDeclarationMarker=Qr,e.createPartiallyEmittedExpression=Zr,e.updatePartiallyEmittedExpression=ea,e.createCommaList=na,e.updateCommaList=ra,e.createBundle=aa,e.updateBundle=ia,e.createImmediatelyInvokedFunctionExpression=oa,e.createComma=sa,e.createLessThan=ca,e.createAssignment=ua,e.createStrictEquality=la,e.createStrictInequality=_a,e.createAdd=da,e.createSubtract=pa,e.createPostfixIncrement=fa,e.createLogicalAnd=ga,e.createLogicalOr=ma,e.createLogicalNot=ya,e.createVoidZero=ha,e.createExportDefault=va,e.createExternalModuleExport=ba,e.disposeEmitNodes=Ca,e.getOrCreateEmitNode=Da,e.setTextRange=Ea,e.setEmitFlags=Na,e.getSourceMapRange=Aa,e.setSourceMapRange=wa;var ei;e.createSourceMapSource=Pa,e.getTokenSourceMapRange=Oa,e.setTokenSourceMapRange=Fa,e.getCommentRange=Ia,e.setCommentRange=Ma,e.getSyntheticLeadingComments=Ra,e.setSyntheticLeadingComments=La,e.addSyntheticLeadingComment=Ba,e.getSyntheticTrailingComments=Ka,e.setSyntheticTrailingComments=ja,e.addSyntheticTrailingComment=Ja,e.getConstantValue=za,e.setConstantValue=Ua,e.addEmitHelper=qa,e.addEmitHelpers=Va,e.removeEmitHelper=$a,e.getEmitHelpers=Wa,e.moveEmitHelpers=Ha,e.compareEmitHelpers=Ga,e.setOriginalNode=Xa;}(r||(r={})),function(e){function t(t,n){return\"undefined\"===n?e.createStrictEquality(t,e.createVoidZero()):e.createStrictEquality(e.createTypeOf(t),e.createLiteral(n))}function n(t,n,r){if(e.isComputedPropertyName(n))return e.setTextRange(e.createElementAccess(t,n.expression),r);var a=e.setTextRange(e.isIdentifier(n)?e.createPropertyAccess(t,n):e.createElementAccess(t,n),n);return e.getOrCreateEmitNode(a).flags|=64,a}function r(t,n,r,a){return e.setTextRange(e.createCall(e.createPropertyAccess(t,\"call\"),void 0,[n].concat(r)),a)}function a(t,n,r,a){return e.setTextRange(e.createCall(e.createPropertyAccess(t,\"apply\"),void 0,[n,r]),a)}function i(t,n){var r=[];return void 0!==n&&r.push(\"number\"==typeof n?e.createLiteral(n):n),e.createCall(e.createPropertyAccess(t,\"slice\"),void 0,r)}function o(t,n){return e.createCall(e.createPropertyAccess(t,\"concat\"),void 0,n)}function s(t,n,r){return e.setTextRange(e.createCall(e.createPropertyAccess(e.createIdentifier(\"Math\"),\"pow\"),void 0,[t,n]),r)}function c(t,n){var r=e.createIdentifier(t||\"React\");return r.flags&=-9,r.parent=e.getParseTreeNode(n),r}function u(t,n){if(e.isQualifiedName(t)){var r=u(t.left,n),a=e.createIdentifier(t.right.text);return a.text=t.right.text,e.createPropertyAccess(r,a)}return c(t.text,n)}function l(t,n,r){return t?u(t,r):e.createPropertyAccess(c(n,r),\"createElement\")}function _(t,n,r,a,i,o,s){var c=[r];if(a&&c.push(a),i&&i.length>0)if(a||c.push(e.createNull()),i.length>1)for(var u=0,_=i;u<_.length;u++){var d=_[u];d.startsOnNewLine=!0,c.push(d);}else c.push(i[0]);return e.setTextRange(e.createCall(l(t,n,o),void 0,c),s)}function d(t){return e.setEmitFlags(e.createIdentifier(t),4098)}function p(t,n,r){return t.requestEmitHelper(Re),e.setTextRange(e.createCall(d(\"__values\"),void 0,[n]),r)}function f(t,n,r,a){return t.requestEmitHelper(Le),e.setTextRange(e.createCall(d(\"__read\"),void 0,void 0!==r?[n,e.createLiteral(r)]:[n]),a)}function g(t,n,r){return t.requestEmitHelper(Le),t.requestEmitHelper(Be),e.setTextRange(e.createCall(d(\"__spread\"),void 0,n),r)}function m(t,n){if(e.isVariableDeclarationList(t)){var r=e.firstOrUndefined(t.declarations),a=e.updateVariableDeclaration(r,r.name,void 0,n);return e.setTextRange(e.createVariableStatement(void 0,e.updateVariableDeclarationList(t,[a])),t)}var i=e.setTextRange(e.createAssignment(t,n),t);return e.setTextRange(e.createStatement(i),t)}function y(t,n){return e.isBlock(t)?e.updateBlock(t,e.setTextRange(e.createNodeArray([n].concat(t.statements)),t.statements)):e.createBlock(e.createNodeArray([t,n]),!0)}function h(t,n,r){if(!n)return t;var a=e.updateLabel(n,n.label,222===n.statement.kind?h(t,n.statement):t);return r&&r(n),a}function v(e,t){var n=pe(e);switch(n.kind){case 71:return t;case 99:case 8:case 9:return!1;case 177:return 0!==n.elements.length;case 178:return n.properties.length>0;default:return!0}}function b(t,n,r,a){var i,o,s=de(t,7);if(e.isSuperProperty(s))i=e.createThis(),o=s;else if(97===s.kind)i=e.createThis(),o=r<2?e.setTextRange(e.createIdentifier(\"_super\"),s):s;else if(4096&e.getEmitFlags(s))i=e.createVoidZero(),o=ee(s);else switch(s.kind){case 179:v(s.expression,a)?(i=e.createTempVariable(n),o=e.createPropertyAccess(e.setTextRange(e.createAssignment(i,s.expression),s.expression),s.name),e.setTextRange(o,s)):(i=s.expression,o=s);break;case 180:v(s.expression,a)?(i=e.createTempVariable(n),o=e.createElementAccess(e.setTextRange(e.createAssignment(i,s.expression),s.expression),s.argumentExpression),e.setTextRange(o,s)):(i=s.expression,o=s);break;default:i=e.createVoidZero(),o=ee(t);}return{target:o,thisArg:i}}function x(t){return t.length>10?e.createCommaList(t):e.reduceLeft(t,e.createComma)}function k(t){if(e.isQualifiedName(t)){var n=k(t.left),r=e.getMutableClone(t.right);return e.setTextRange(e.createPropertyAccess(n,r),t)}return e.getMutableClone(t)}function S(t){return e.isIdentifier(t)?e.createLiteral(t):e.isComputedPropertyName(t)?e.getMutableClone(t.expression):e.getMutableClone(t)}function T(e,t,n){switch(t.kind){case 153:case 154:return C(e.properties,t,n,e.multiLine);case 261:return D(t,n);case 262:return E(t,n);case 151:return N(t,n)}}function C(t,n,r,a){var i=e.getAllAccessorDeclarations(t,n),o=i.firstAccessor,s=i.getAccessor,c=i.setAccessor;if(n===o){var u=[];if(s){var l=e.createFunctionExpression(s.modifiers,void 0,void 0,void 0,s.parameters,void 0,s.body);e.setTextRange(l,s),e.setOriginalNode(l,s);var _=e.createPropertyAssignment(\"get\",l);u.push(_);}if(c){var d=e.createFunctionExpression(c.modifiers,void 0,void 0,void 0,c.parameters,void 0,c.body);e.setTextRange(d,c),e.setOriginalNode(d,c);var p=e.createPropertyAssignment(\"set\",d);u.push(p);}u.push(e.createPropertyAssignment(\"enumerable\",e.createTrue())),u.push(e.createPropertyAssignment(\"configurable\",e.createTrue()));var f=e.setTextRange(e.createCall(e.createPropertyAccess(e.createIdentifier(\"Object\"),\"defineProperty\"),void 0,[r,S(n.name),e.createObjectLiteral(u,a)]),o);return e.aggregateTransformFlags(f)}}function D(t,r){return e.aggregateTransformFlags(e.setOriginalNode(e.setTextRange(e.createAssignment(n(r,t.name,t.name),t.initializer),t),t))}function E(t,r){return e.aggregateTransformFlags(e.setOriginalNode(e.setTextRange(e.createAssignment(n(r,t.name,t.name),e.getSynthesizedClone(t.name)),t),t))}function N(t,r){return e.aggregateTransformFlags(e.setOriginalNode(e.setTextRange(e.createAssignment(n(r,t.name,t.name),e.setOriginalNode(e.setTextRange(e.createFunctionExpression(t.modifiers,t.asteriskToken,void 0,void 0,t.parameters,void 0,t.body),t),t)),t),t))}function A(e,t,n){return R(e,t,n,49152)}function w(t){return 0!=(32768&e.getEmitFlags(t))}function P(e,t,n){return R(e,t,n,16384)}function O(t){return 0!=(16384&e.getEmitFlags(t))}function F(e,t,n){return R(e,t,n,8192)}function I(t){return 0!=(8192&e.getEmitFlags(t))}function M(e,t,n){return R(e,t,n)}function R(t,n,r,a){var i=e.getNameOfDeclaration(t);if(i&&e.isIdentifier(i)&&!e.isGeneratedIdentifier(i)){var o=e.getMutableClone(i);return a|=e.getEmitFlags(i),r||(a|=48),n||(a|=1536),a&&e.setEmitFlags(o,a),o}return e.getGeneratedNameForNode(t)}function L(t,n,r,a){return t&&e.hasModifier(n,1)?B(t,R(n),r,a):F(n,r,a)}function B(t,n,r,a){var i=e.createPropertyAccess(t,e.nodeIsSynthesized(n)?n:e.getSynthesizedClone(n));e.setTextRange(i,n);var o;return a||(o|=48),r||(o|=1536),o&&e.setEmitFlags(i,o),i}function K(t,n){return e.isBlock(t)?t:e.setTextRange(e.createBlock([e.setTextRange(e.createReturn(t),t)],n),t)}function j(t){e.Debug.assert(!!t.body);var n=e.createFunctionExpression(t.modifiers,t.asteriskToken,t.name,t.typeParameters,t.parameters,t.type,t.body);return e.setOriginalNode(n,t),e.setTextRange(n,t),t.startsOnNewLine&&(n.startsOnNewLine=!0),e.aggregateTransformFlags(n),n}function J(e){return\"use strict\"===e.expression.text}function z(e,t,n,r){return q(e,t,U(e,t,n),r)}function U(t,n,r){e.Debug.assert(0===t.length,\"Prologue directives should be at the first statement in the target statements array\");for(var a=!1,i=0,o=n.length;i<o;){var s=n[i];if(!e.isPrologueDirective(s))break;J(s)&&(a=!0),t.push(s),i++;}return r&&!a&&t.push(ye(e.createStatement(e.createLiteral(\"use strict\")))),i}function q(t,n,r,a){for(var i=n.length;r<i;){var o=n[r];if(!(1048576&e.getEmitFlags(o)))break;t.push(a?e.visitNode(o,a,e.isStatement):o),r++;}return r}function V(t){var n=e.firstOrUndefined(t);return void 0!==n&&e.isPrologueDirective(n)&&J(n)}function $(t){for(var n=!1,r=0,a=t;r<a.length;r++){var i=a[r];if(!e.isPrologueDirective(i))break;if(J(i)){n=!0;break}}return n?t:e.setTextRange(e.createNodeArray([ye(e.createStatement(e.createLiteral(\"use strict\")))].concat(t)),t)}function W(t,n,r,a){return 185===e.skipPartiallyEmittedExpressions(n).kind?n:H(t,n,r,a)?e.createParen(n):n}function H(t,n,r,a){var i=e.getOperatorPrecedence(194,t),o=e.getOperatorAssociativity(194,t),s=e.skipPartiallyEmittedExpressions(n),c=e.getExpressionPrecedence(s);switch(e.compareValues(c,i)){case-1:return!(!r&&1===o&&197===n.kind);case 1:return!1;case 0:if(r)return 1===o;if(e.isBinaryExpression(s)&&s.operatorToken.kind===t){if(G(t))return!1;if(37===t){var u=a?X(a):0;if(e.isLiteralKind(u)&&u===X(s))return!1}}return 0===e.getExpressionAssociativity(s)}}function G(e){return 39===e||49===e||48===e||50===e}function X(t){if(t=e.skipPartiallyEmittedExpressions(t),e.isLiteralKind(t.kind))return t.kind;if(194===t.kind&&37===t.operatorToken.kind){if(void 0!==t.cachedLiteralKind)return t.cachedLiteralKind;var n=X(t.left),r=e.isLiteralKind(n)&&n===X(t.right)?n:0;return t.cachedLiteralKind=r,r}return 0}function Y(t){var n=e.getOperatorPrecedence(195,55),r=e.skipPartiallyEmittedExpressions(t),a=e.getExpressionPrecedence(r);return-1===e.compareValues(a,n)?e.createParen(t):t}function Q(t){return 194===t.kind&&26===t.operatorToken.kind?e.createParen(t):t}function Z(t){var n=e.skipPartiallyEmittedExpressions(t);switch(n.kind){case 181:return e.createParen(t);case 182:return n.arguments?t:e.createParen(t)}return ee(t)}function ee(t){var n=e.skipPartiallyEmittedExpressions(t);return e.isLeftHandSideExpression(n)&&(182!==n.kind||n.arguments)?t:e.setTextRange(e.createParen(t),t)}function te(t){return e.isLeftHandSideExpression(t)?t:e.setTextRange(e.createParen(t),t)}function ne(t){return e.isUnaryExpression(t)?t:e.setTextRange(e.createParen(t),t)}function re(t){for(var n,r=0;r<t.length;r++){var a=ae(t[r]);void 0===n&&a===t[r]||(void 0===n&&(n=t.slice(0,r)),n.push(a));}return void 0!==n?e.setTextRange(e.createNodeArray(n,t.hasTrailingComma),t):t}function ae(t){var n=e.skipPartiallyEmittedExpressions(t);return e.getExpressionPrecedence(n)>e.getOperatorPrecedence(194,26)?t:e.setTextRange(e.createParen(t),t)}function ie(t){var n=e.skipPartiallyEmittedExpressions(t);if(e.isCallExpression(n)){var r=n.expression,a=e.skipPartiallyEmittedExpressions(r).kind;if(186===a||187===a){var i=e.getMutableClone(n);return i.expression=e.setTextRange(e.createParen(r),r),me(t,i,4)}}else{var o=ue(n).kind;if(178===o||186===o)return e.setTextRange(e.createParen(t),t)}return t}function oe(t){switch(t.kind){case 166:case 167:case 160:case 161:return e.createParenthesizedType(t)}return t}function se(t){return e.createNodeArray(e.sameMap(t,oe))}function ce(t){if(e.some(t)){for(var n=e.createNodeArray(),r=0;r<t.length;++r){var a=t[r];n.push(0===r&&e.isFunctionOrConstructorTypeNode(a)&&a.typeParameters?e.createParenthesizedType(a):a);}return n}}function ue(e){for(;;){switch(e.kind){case 193:e=e.operand;continue;case 194:e=e.left;continue;case 195:e=e.condition;continue;case 181:case 180:case 179:case 297:e=e.expression;continue}return e}}function le(t){return e.isBlock(t)||178!==ue(t).kind?t:e.setTextRange(e.createParen(t),t)}function _e(e,t){switch(void 0===t&&(t=7),e.kind){case 185:return 0!=(1&t);case 184:case 202:case 203:return 0!=(2&t);case 297:return 0!=(4&t)}return!1}function de(t,n){void 0===n&&(n=7);var r;do{r=t,1&n&&(t=pe(t)),2&n&&(t=fe(t)),4&n&&(t=e.skipPartiallyEmittedExpressions(t));}while(r!==t);return t}function pe(e){for(;185===e.kind;)e=e.expression;return e}function fe(t){for(;e.isAssertionExpression(t)||203===t.kind;)t=t.expression;return t}function ge(t,n){switch(t.kind){case 185:return e.updateParen(t,n);case 184:return e.updateTypeAssertion(t,t.type,n);case 202:return e.updateAsExpression(t,n,t.type);case 203:return e.updateNonNullExpression(t,n);case 297:return e.updatePartiallyEmittedExpression(t,n)}}function me(e,t,n){return void 0===n&&(n=7),e&&_e(e,n)?ge(e,me(e.expression,t)):t}function ye(e){return e.startsOnNewLine=!0,e}function he(t){var n=e.getOriginalNode(t,e.isSourceFile),r=n&&n.emitNode;return r&&r.externalHelpersModuleName}function ve(t,n,r){if(n.importHelpers&&e.isEffectiveExternalModule(t,n)){var a=he(t);if(a)return a;var i=e.getEmitModuleKind(n),o=r&&i!==e.ModuleKind.System&&i!==e.ModuleKind.ES2015;if(!o){var s=e.getEmitHelpers(t);if(s)for(var c=0,u=s;c<u.length;c++)if(!u[c].scoped){o=!0;break}}if(o){var l=e.getOriginalNode(t,e.isSourceFile),_=e.getOrCreateEmitNode(l);return _.externalHelpersModuleName||(_.externalHelpersModuleName=e.createUniqueName(e.externalHelpersModuleNameText))}}}function be(t,n){var r=e.getNamespaceDeclarationNode(t);if(r&&!e.isDefaultImport(t)){var a=r.name;return e.isGeneratedIdentifier(a)?a:e.createIdentifier(e.getSourceTextOfNodeFromSourceFile(n,r.name))}return 238===t.kind&&t.importClause?e.getGeneratedNameForNode(t):244===t.kind&&t.moduleSpecifier?e.getGeneratedNameForNode(t):void 0}function xe(t,n,r,a,i){var o=e.getExternalModuleName(t);if(9===o.kind)return Te(t,r,a,i)||ke(o,n)||e.getSynthesizedClone(o)}function ke(t,n){var r=n.renamedDependencies&&n.renamedDependencies.get(t.text);return r&&e.createLiteral(r)}function Se(t,n,r){if(t)return t.moduleName?e.createLiteral(t.moduleName):t.isDeclarationFile||!r.out&&!r.outFile?void 0:e.createLiteral(e.getExternalModuleNameFromPath(n,t.fileName))}function Te(e,t,n,r){return Se(n.getExternalModuleFileFromDeclaration(e),t,r)}function Ce(t){return e.isDeclarationBindingElement(t)?t.initializer:e.isPropertyAssignment(t)?e.isAssignmentExpression(t.initializer,!0)?t.initializer.right:void 0:e.isShorthandPropertyAssignment(t)?t.objectAssignmentInitializer:e.isAssignmentExpression(t,!0)?t.right:e.isSpreadElement(t)?Ce(t.expression):void 0}function De(t){if(e.isDeclarationBindingElement(t))return t.name;if(!e.isObjectLiteralElementLike(t))return e.isAssignmentExpression(t,!0)?De(t.left):e.isSpreadElement(t)?De(t.expression):t;switch(t.kind){case 261:return De(t.initializer);case 262:return t.name;case 263:return De(t.expression)}}function Ee(e){switch(e.kind){case 146:case 176:return e.dotDotDotToken;case 198:case 263:return e}}function Ne(t){switch(t.kind){case 176:if(t.propertyName){n=t.propertyName;return e.isComputedPropertyName(n)&&e.isStringOrNumericLiteral(n.expression)?n.expression:n}break;case 261:if(t.name){var n=t.name;return e.isComputedPropertyName(n)&&e.isStringOrNumericLiteral(n.expression)?n.expression:n}break;case 263:return t.name}var r=De(t);if(r&&e.isPropertyName(r))return e.isComputedPropertyName(r)&&e.isStringOrNumericLiteral(r.expression)?r.expression:r;e.Debug.fail(\"Invalid property name for binding element.\");}function Ae(e){switch(e.kind){case 174:case 175:case 177:return e.elements;case 178:return e.properties}}function we(t){if(e.isBindingElement(t)){if(t.dotDotDotToken)return e.Debug.assertNode(t.name,e.isIdentifier),e.setOriginalNode(e.setTextRange(e.createSpread(t.name),t),t);var n=Me(t.name);return t.initializer?e.setOriginalNode(e.setTextRange(e.createAssignment(n,t.initializer),t),t):n}return e.Debug.assertNode(t,e.isExpression),t}function Pe(t){if(e.isBindingElement(t)){if(t.dotDotDotToken)return e.Debug.assertNode(t.name,e.isIdentifier),e.setOriginalNode(e.setTextRange(e.createSpreadAssignment(t.name),t),t);if(t.propertyName){var n=Me(t.name);return e.setOriginalNode(e.setTextRange(e.createPropertyAssignment(t.propertyName,t.initializer?e.createAssignment(n,t.initializer):n),t),t)}return e.Debug.assertNode(t.name,e.isIdentifier),e.setOriginalNode(e.setTextRange(e.createShorthandPropertyAssignment(t.name,t.initializer),t),t)}return e.Debug.assertNode(t,e.isObjectLiteralElementLike),t}function Oe(e){switch(e.kind){case 175:case 177:return Ie(e);case 174:case 178:return Fe(e)}}function Fe(t){return e.isObjectBindingPattern(t)?e.setOriginalNode(e.setTextRange(e.createObjectLiteral(e.map(t.elements,Pe)),t),t):(e.Debug.assertNode(t,e.isObjectLiteralExpression),t)}function Ie(t){return e.isArrayBindingPattern(t)?e.setOriginalNode(e.setTextRange(e.createArrayLiteral(e.map(t.elements,we)),t),t):(e.Debug.assertNode(t,e.isArrayLiteralExpression),t)}function Me(t){return e.isBindingPattern(t)?Oe(t):(e.Debug.assertNode(t,e.isExpression),t)}e.nullTransformationContext={enableEmitNotification:e.noop,enableSubstitution:e.noop,endLexicalEnvironment:function(){},getCompilerOptions:e.notImplemented,getEmitHost:e.notImplemented,getEmitResolver:e.notImplemented,hoistFunctionDeclaration:e.noop,hoistVariableDeclaration:e.noop,isEmitNotificationEnabled:e.notImplemented,isSubstitutionEnabled:e.notImplemented,onEmitNode:e.noop,onSubstituteNode:e.notImplemented,readEmitHelpers:e.notImplemented,requestEmitHelper:e.noop,resumeLexicalEnvironment:e.noop,startLexicalEnvironment:e.noop,suspendLexicalEnvironment:e.noop},e.createTypeCheck=t,e.createMemberAccessForPropertyName=n,e.createFunctionCall=r,e.createFunctionApply=a,e.createArraySlice=i,e.createArrayConcat=o,e.createMathPow=s,e.createExpressionForJsxElement=_,e.getHelperName=d;var Re={name:\"typescript:values\",scoped:!1,text:'\\n            var __values = (this && this.__values) || function (o) {\\n                var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\\n                if (m) return m.call(o);\\n                return {\\n                    next: function () {\\n                        if (o && i >= o.length) o = void 0;\\n                        return { value: o && o[i++], done: !o };\\n                    }\\n                };\\n            };\\n        '};e.createValuesHelper=p;var Le={name:\"typescript:read\",scoped:!1,text:'\\n            var __read = (this && this.__read) || function (o, n) {\\n                var m = typeof Symbol === \"function\" && o[Symbol.iterator];\\n                if (!m) return o;\\n                var i = m.call(o), r, ar = [], e;\\n                try {\\n                    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\\n                }\\n                catch (error) { e = { error: error }; }\\n                finally {\\n                    try {\\n                        if (r && !r.done && (m = i[\"return\"])) m.call(i);\\n                    }\\n                    finally { if (e) throw e.error; }\\n                }\\n                return ar;\\n            };\\n        '};e.createReadHelper=f;var Be={name:\"typescript:spread\",scoped:!1,text:\"\\n            var __spread = (this && this.__spread) || function () {\\n                for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\\n                return ar;\\n            };\"};e.createSpreadHelper=g,e.createForOfBindingStatement=m,e.insertLeadingStatement=y,e.restoreEnclosingLabel=h,e.createCallBinding=b,e.inlineExpressions=x,e.createExpressionFromEntityName=k,e.createExpressionForPropertyName=S,e.createExpressionForObjectLiteralElementLike=T,e.getInternalName=A,e.isInternalName=w,e.getLocalName=P,e.isLocalName=O,e.getExportName=F,e.isExportName=I,e.getDeclarationName=M,e.getExternalModuleOrNamespaceExportName=L,e.getNamespaceMemberName=B,e.convertToFunctionBody=K,e.convertFunctionDeclarationToExpression=j,e.addPrologue=z,e.addStandardPrologue=U,e.addCustomPrologue=q,e.startsWithUseStrict=V,e.ensureUseStrict=$,e.parenthesizeBinaryOperand=W,e.parenthesizeForConditionalHead=Y,e.parenthesizeSubexpressionOfConditionalExpression=Q,e.parenthesizeForNew=Z,e.parenthesizeForAccess=ee,e.parenthesizePostfixOperand=te,e.parenthesizePrefixOperand=ne,e.parenthesizeListElements=re,e.parenthesizeExpressionForList=ae,e.parenthesizeExpressionForExpressionStatement=ie,e.parenthesizeElementTypeMember=oe,e.parenthesizeElementTypeMembers=se,e.parenthesizeTypeParameters=ce,e.parenthesizeConciseBody=le;!function(e){e[e.Parentheses=1]=\"Parentheses\",e[e.Assertions=2]=\"Assertions\",e[e.PartiallyEmittedExpressions=4]=\"PartiallyEmittedExpressions\",e[e.All=7]=\"All\";}(e.OuterExpressionKinds||(e.OuterExpressionKinds={})),e.isOuterExpression=_e,e.skipOuterExpressions=de,e.skipParentheses=pe,e.skipAssertions=fe,e.recreateOuterExpressions=me,e.startOnNewLine=ye,e.getExternalHelpersModuleName=he,e.getOrCreateExternalHelpersModuleNameIfNeeded=ve,e.getLocalNameForExternalImport=be,e.getExternalModuleNameLiteral=xe,e.tryGetModuleNameFromFile=Se,e.getInitializerOfBindingOrAssignmentElement=Ce,e.getTargetOfBindingOrAssignmentElement=De,e.getRestIndicatorOfBindingOrAssignmentElement=Ee,e.getPropertyNameOfBindingOrAssignmentElement=Ne,e.getElementsOfBindingOrAssignmentPattern=Ae,e.convertToArrayAssignmentElement=we,e.convertToObjectAssignmentElement=Pe,e.convertToAssignmentPattern=Oe,e.convertToObjectAssignmentPattern=Fe,e.convertToArrayAssignmentPattern=Ie,e.convertToAssignmentElementTarget=Me;}(r||(r={}));!function(e){function t(t,n,r,a){if(void 0===t||void 0===n)return t;e.aggregateTransformFlags(t);var i=n(t);if(i===t)return t;var o;if(void 0!==i)return o=e.isArray(i)?(a||s)(i):i,e.Debug.assertNode(o,r),e.aggregateTransformFlags(o),o}function n(t,n,r,a,i){if(void 0===t||void 0===n)return t;var o,s=t.length;(void 0===a||a<0)&&(a=0),(void 0===i||i>s-a)&&(i=s-a),(a>0||i<s)&&(o=e.createNodeArray([],t.hasTrailingComma&&a+i===s));for(var c=0;c<i;c++){var u=t[c+a];e.aggregateTransformFlags(u);var l=void 0!==u?n(u):void 0;if((void 0!==o||void 0===l||l!==u)&&(void 0===o&&(o=e.createNodeArray(t.slice(0,c),t.hasTrailingComma),e.setTextRange(o,t)),l))if(e.isArray(l))for(var _=0,d=l;_<d.length;_++){var p=d[_];e.Debug.assertNode(p,r),e.aggregateTransformFlags(p),o.push(p);}else e.Debug.assertNode(l,r),e.aggregateTransformFlags(l),o.push(l);}return o||t}function r(t,r,a,i,o){a.startLexicalEnvironment(),t=n(t,r,e.isStatement,i),o&&!e.startsWithUseStrict(t)&&(t=e.setTextRange(e.createNodeArray([e.createStatement(e.createLiteral(\"use strict\"))].concat(t)),t));var s=a.endLexicalEnvironment();return e.setTextRange(e.createNodeArray(e.concatenate(t,s)),t)}function a(t,r,a,i){void 0===i&&(i=n),a.startLexicalEnvironment();var o=i(t,r,e.isParameterDeclaration);return a.suspendLexicalEnvironment(),o}function i(n,r,a){a.resumeLexicalEnvironment();var i=t(n,r,e.isConciseBody),o=a.endLexicalEnvironment();if(e.some(o)){var s=e.convertToFunctionBody(i),c=e.mergeLexicalEnvironment(s.statements,o);return e.updateBlock(s,c)}return i}function o(o,s,c,u,l){if(void 0===u&&(u=n),void 0!==o){var _=o.kind;if(_>0&&_<=142||169===_)return o;switch(_){case 71:return e.updateIdentifier(o,u(o.typeArguments,s,e.isTypeNode));case 143:return e.updateQualifiedName(o,t(o.left,s,e.isEntityName),t(o.right,s,e.isIdentifier));case 144:return e.updateComputedPropertyName(o,t(o.expression,s,e.isExpression));case 145:return e.updateTypeParameterDeclaration(o,t(o.name,s,e.isIdentifier),t(o.constraint,s,e.isTypeNode),t(o.default,s,e.isTypeNode));case 146:return e.updateParameter(o,u(o.decorators,s,e.isDecorator),u(o.modifiers,s,e.isModifier),t(o.dotDotDotToken,l,e.isToken),t(o.name,s,e.isBindingName),t(o.questionToken,l,e.isToken),t(o.type,s,e.isTypeNode),t(o.initializer,s,e.isExpression));case 147:return e.updateDecorator(o,t(o.expression,s,e.isExpression));case 148:return e.updatePropertySignature(o,u(o.modifiers,s,e.isToken),t(o.name,s,e.isPropertyName),t(o.questionToken,l,e.isToken),t(o.type,s,e.isTypeNode),t(o.initializer,s,e.isExpression));case 149:return e.updateProperty(o,u(o.decorators,s,e.isDecorator),u(o.modifiers,s,e.isModifier),t(o.name,s,e.isPropertyName),t(o.type,s,e.isTypeNode),t(o.initializer,s,e.isExpression));case 150:return e.updateMethodSignature(o,u(o.typeParameters,s,e.isTypeParameterDeclaration),u(o.parameters,s,e.isParameterDeclaration),t(o.type,s,e.isTypeNode),t(o.name,s,e.isPropertyName),t(o.questionToken,l,e.isToken));case 151:return e.updateMethod(o,u(o.decorators,s,e.isDecorator),u(o.modifiers,s,e.isModifier),t(o.asteriskToken,l,e.isToken),t(o.name,s,e.isPropertyName),t(o.questionToken,l,e.isToken),u(o.typeParameters,s,e.isTypeParameterDeclaration),a(o.parameters,s,c,u),t(o.type,s,e.isTypeNode),i(o.body,s,c));case 152:return e.updateConstructor(o,u(o.decorators,s,e.isDecorator),u(o.modifiers,s,e.isModifier),a(o.parameters,s,c,u),i(o.body,s,c));case 153:return e.updateGetAccessor(o,u(o.decorators,s,e.isDecorator),u(o.modifiers,s,e.isModifier),t(o.name,s,e.isPropertyName),a(o.parameters,s,c,u),t(o.type,s,e.isTypeNode),i(o.body,s,c));case 154:return e.updateSetAccessor(o,u(o.decorators,s,e.isDecorator),u(o.modifiers,s,e.isModifier),t(o.name,s,e.isPropertyName),a(o.parameters,s,c,u),i(o.body,s,c));case 155:return e.updateCallSignature(o,u(o.typeParameters,s,e.isTypeParameterDeclaration),u(o.parameters,s,e.isParameterDeclaration),t(o.type,s,e.isTypeNode));case 156:return e.updateConstructSignature(o,u(o.typeParameters,s,e.isTypeParameterDeclaration),u(o.parameters,s,e.isParameterDeclaration),t(o.type,s,e.isTypeNode));case 157:return e.updateIndexSignature(o,u(o.decorators,s,e.isDecorator),u(o.modifiers,s,e.isModifier),u(o.parameters,s,e.isParameterDeclaration),t(o.type,s,e.isTypeNode));case 158:return e.updateTypePredicateNode(o,t(o.parameterName,s),t(o.type,s,e.isTypeNode));case 159:return e.updateTypeReferenceNode(o,t(o.typeName,s,e.isEntityName),u(o.typeArguments,s,e.isTypeNode));case 160:return e.updateFunctionTypeNode(o,u(o.typeParameters,s,e.isTypeParameterDeclaration),u(o.parameters,s,e.isParameterDeclaration),t(o.type,s,e.isTypeNode));case 161:return e.updateConstructorTypeNode(o,u(o.typeParameters,s,e.isTypeParameterDeclaration),u(o.parameters,s,e.isParameterDeclaration),t(o.type,s,e.isTypeNode));case 162:return e.updateTypeQueryNode(o,t(o.exprName,s,e.isEntityName));case 163:return e.updateTypeLiteralNode(o,u(o.members,s,e.isTypeElement));case 164:return e.updateArrayTypeNode(o,t(o.elementType,s,e.isTypeNode));case 165:return e.updateTypleTypeNode(o,u(o.elementTypes,s,e.isTypeNode));case 166:return e.updateUnionTypeNode(o,u(o.types,s,e.isTypeNode));case 167:return e.updateIntersectionTypeNode(o,u(o.types,s,e.isTypeNode));case 168:return e.updateParenthesizedType(o,t(o.type,s,e.isTypeNode));case 170:return e.updateTypeOperatorNode(o,t(o.type,s,e.isTypeNode));case 171:return e.updateIndexedAccessTypeNode(o,t(o.objectType,s,e.isTypeNode),t(o.indexType,s,e.isTypeNode));case 172:return e.updateMappedTypeNode(o,t(o.readonlyToken,l,e.isToken),t(o.typeParameter,s,e.isTypeParameterDeclaration),t(o.questionToken,l,e.isToken),t(o.type,s,e.isTypeNode));case 173:return e.updateLiteralTypeNode(o,t(o.literal,s,e.isExpression));case 174:return e.updateObjectBindingPattern(o,u(o.elements,s,e.isBindingElement));case 175:return e.updateArrayBindingPattern(o,u(o.elements,s,e.isArrayBindingElement));case 176:return e.updateBindingElement(o,t(o.dotDotDotToken,l,e.isToken),t(o.propertyName,s,e.isPropertyName),t(o.name,s,e.isBindingName),t(o.initializer,s,e.isExpression));case 177:return e.updateArrayLiteral(o,u(o.elements,s,e.isExpression));case 178:return e.updateObjectLiteral(o,u(o.properties,s,e.isObjectLiteralElementLike));case 179:return e.updatePropertyAccess(o,t(o.expression,s,e.isExpression),t(o.name,s,e.isIdentifier));case 180:return e.updateElementAccess(o,t(o.expression,s,e.isExpression),t(o.argumentExpression,s,e.isExpression));case 181:return e.updateCall(o,t(o.expression,s,e.isExpression),u(o.typeArguments,s,e.isTypeNode),u(o.arguments,s,e.isExpression));case 182:return e.updateNew(o,t(o.expression,s,e.isExpression),u(o.typeArguments,s,e.isTypeNode),u(o.arguments,s,e.isExpression));case 183:return e.updateTaggedTemplate(o,t(o.tag,s,e.isExpression),t(o.template,s,e.isTemplateLiteral));case 184:return e.updateTypeAssertion(o,t(o.type,s,e.isTypeNode),t(o.expression,s,e.isExpression));case 185:return e.updateParen(o,t(o.expression,s,e.isExpression));case 186:return e.updateFunctionExpression(o,u(o.modifiers,s,e.isModifier),t(o.asteriskToken,l,e.isToken),t(o.name,s,e.isIdentifier),u(o.typeParameters,s,e.isTypeParameterDeclaration),a(o.parameters,s,c,u),t(o.type,s,e.isTypeNode),i(o.body,s,c));case 187:return e.updateArrowFunction(o,u(o.modifiers,s,e.isModifier),u(o.typeParameters,s,e.isTypeParameterDeclaration),a(o.parameters,s,c,u),t(o.type,s,e.isTypeNode),i(o.body,s,c));case 188:return e.updateDelete(o,t(o.expression,s,e.isExpression));case 189:return e.updateTypeOf(o,t(o.expression,s,e.isExpression));case 190:return e.updateVoid(o,t(o.expression,s,e.isExpression));case 191:return e.updateAwait(o,t(o.expression,s,e.isExpression));case 192:return e.updatePrefix(o,t(o.operand,s,e.isExpression));case 193:return e.updatePostfix(o,t(o.operand,s,e.isExpression));case 194:return e.updateBinary(o,t(o.left,s,e.isExpression),t(o.right,s,e.isExpression),t(o.operatorToken,s,e.isToken));case 195:return e.updateConditional(o,t(o.condition,s,e.isExpression),t(o.whenTrue,s,e.isExpression),t(o.whenFalse,s,e.isExpression));case 196:return e.updateTemplateExpression(o,t(o.head,s,e.isTemplateHead),u(o.templateSpans,s,e.isTemplateSpan));case 197:return e.updateYield(o,t(o.asteriskToken,l,e.isToken),t(o.expression,s,e.isExpression));case 198:return e.updateSpread(o,t(o.expression,s,e.isExpression));case 199:return e.updateClassExpression(o,u(o.modifiers,s,e.isModifier),t(o.name,s,e.isIdentifier),u(o.typeParameters,s,e.isTypeParameterDeclaration),u(o.heritageClauses,s,e.isHeritageClause),u(o.members,s,e.isClassElement));case 201:return e.updateExpressionWithTypeArguments(o,u(o.typeArguments,s,e.isTypeNode),t(o.expression,s,e.isExpression));case 202:return e.updateAsExpression(o,t(o.expression,s,e.isExpression),t(o.type,s,e.isTypeNode));case 203:return e.updateNonNullExpression(o,t(o.expression,s,e.isExpression));case 204:return e.updateMetaProperty(o,t(o.name,s,e.isIdentifier));case 205:return e.updateTemplateSpan(o,t(o.expression,s,e.isExpression),t(o.literal,s,e.isTemplateMiddleOrTemplateTail));case 207:return e.updateBlock(o,u(o.statements,s,e.isStatement));case 208:return e.updateVariableStatement(o,u(o.modifiers,s,e.isModifier),t(o.declarationList,s,e.isVariableDeclarationList));case 210:return e.updateStatement(o,t(o.expression,s,e.isExpression));case 211:return e.updateIf(o,t(o.expression,s,e.isExpression),t(o.thenStatement,s,e.isStatement,e.liftToBlock),t(o.elseStatement,s,e.isStatement,e.liftToBlock));case 212:return e.updateDo(o,t(o.statement,s,e.isStatement,e.liftToBlock),t(o.expression,s,e.isExpression));case 213:return e.updateWhile(o,t(o.expression,s,e.isExpression),t(o.statement,s,e.isStatement,e.liftToBlock));case 214:return e.updateFor(o,t(o.initializer,s,e.isForInitializer),t(o.condition,s,e.isExpression),t(o.incrementor,s,e.isExpression),t(o.statement,s,e.isStatement,e.liftToBlock));case 215:return e.updateForIn(o,t(o.initializer,s,e.isForInitializer),t(o.expression,s,e.isExpression),t(o.statement,s,e.isStatement,e.liftToBlock));case 216:return e.updateForOf(o,o.awaitModifier,t(o.initializer,s,e.isForInitializer),t(o.expression,s,e.isExpression),t(o.statement,s,e.isStatement,e.liftToBlock));case 217:return e.updateContinue(o,t(o.label,s,e.isIdentifier));case 218:return e.updateBreak(o,t(o.label,s,e.isIdentifier));case 219:return e.updateReturn(o,t(o.expression,s,e.isExpression));case 220:return e.updateWith(o,t(o.expression,s,e.isExpression),t(o.statement,s,e.isStatement,e.liftToBlock));case 221:return e.updateSwitch(o,t(o.expression,s,e.isExpression),t(o.caseBlock,s,e.isCaseBlock));case 222:return e.updateLabel(o,t(o.label,s,e.isIdentifier),t(o.statement,s,e.isStatement,e.liftToBlock));case 223:return e.updateThrow(o,t(o.expression,s,e.isExpression));case 224:return e.updateTry(o,t(o.tryBlock,s,e.isBlock),t(o.catchClause,s,e.isCatchClause),t(o.finallyBlock,s,e.isBlock));case 226:return e.updateVariableDeclaration(o,t(o.name,s,e.isBindingName),t(o.type,s,e.isTypeNode),t(o.initializer,s,e.isExpression));case 227:return e.updateVariableDeclarationList(o,u(o.declarations,s,e.isVariableDeclaration));case 228:return e.updateFunctionDeclaration(o,u(o.decorators,s,e.isDecorator),u(o.modifiers,s,e.isModifier),t(o.asteriskToken,l,e.isToken),t(o.name,s,e.isIdentifier),u(o.typeParameters,s,e.isTypeParameterDeclaration),a(o.parameters,s,c,u),t(o.type,s,e.isTypeNode),i(o.body,s,c));case 229:return e.updateClassDeclaration(o,u(o.decorators,s,e.isDecorator),u(o.modifiers,s,e.isModifier),t(o.name,s,e.isIdentifier),u(o.typeParameters,s,e.isTypeParameterDeclaration),u(o.heritageClauses,s,e.isHeritageClause),u(o.members,s,e.isClassElement));case 230:return e.updateInterfaceDeclaration(o,u(o.decorators,s,e.isDecorator),u(o.modifiers,s,e.isModifier),t(o.name,s,e.isIdentifier),u(o.typeParameters,s,e.isTypeParameterDeclaration),u(o.heritageClauses,s,e.isHeritageClause),u(o.members,s,e.isTypeElement));case 231:return e.updateTypeAliasDeclaration(o,u(o.decorators,s,e.isDecorator),u(o.modifiers,s,e.isModifier),t(o.name,s,e.isIdentifier),u(o.typeParameters,s,e.isTypeParameterDeclaration),t(o.type,s,e.isTypeNode));case 232:return e.updateEnumDeclaration(o,u(o.decorators,s,e.isDecorator),u(o.modifiers,s,e.isModifier),t(o.name,s,e.isIdentifier),u(o.members,s,e.isEnumMember));case 233:return e.updateModuleDeclaration(o,u(o.decorators,s,e.isDecorator),u(o.modifiers,s,e.isModifier),t(o.name,s,e.isIdentifier),t(o.body,s,e.isModuleBody));case 234:return e.updateModuleBlock(o,u(o.statements,s,e.isStatement));case 235:return e.updateCaseBlock(o,u(o.clauses,s,e.isCaseOrDefaultClause));case 236:return e.updateNamespaceExportDeclaration(o,t(o.name,s,e.isIdentifier));case 237:return e.updateImportEqualsDeclaration(o,u(o.decorators,s,e.isDecorator),u(o.modifiers,s,e.isModifier),t(o.name,s,e.isIdentifier),t(o.moduleReference,s,e.isModuleReference));case 238:return e.updateImportDeclaration(o,u(o.decorators,s,e.isDecorator),u(o.modifiers,s,e.isModifier),t(o.importClause,s,e.isImportClause),t(o.moduleSpecifier,s,e.isExpression));case 239:return e.updateImportClause(o,t(o.name,s,e.isIdentifier),t(o.namedBindings,s,e.isNamedImportBindings));case 240:return e.updateNamespaceImport(o,t(o.name,s,e.isIdentifier));case 241:return e.updateNamedImports(o,u(o.elements,s,e.isImportSpecifier));case 242:return e.updateImportSpecifier(o,t(o.propertyName,s,e.isIdentifier),t(o.name,s,e.isIdentifier));case 243:return e.updateExportAssignment(o,u(o.decorators,s,e.isDecorator),u(o.modifiers,s,e.isModifier),t(o.expression,s,e.isExpression));case 244:return e.updateExportDeclaration(o,u(o.decorators,s,e.isDecorator),u(o.modifiers,s,e.isModifier),t(o.exportClause,s,e.isNamedExports),t(o.moduleSpecifier,s,e.isExpression));case 245:return e.updateNamedExports(o,u(o.elements,s,e.isExportSpecifier));case 246:return e.updateExportSpecifier(o,t(o.propertyName,s,e.isIdentifier),t(o.name,s,e.isIdentifier));case 248:return e.updateExternalModuleReference(o,t(o.expression,s,e.isExpression));case 249:return e.updateJsxElement(o,t(o.openingElement,s,e.isJsxOpeningElement),u(o.children,s,e.isJsxChild),t(o.closingElement,s,e.isJsxClosingElement));case 250:return e.updateJsxSelfClosingElement(o,t(o.tagName,s,e.isJsxTagNameExpression),t(o.attributes,s,e.isJsxAttributes));case 251:return e.updateJsxOpeningElement(o,t(o.tagName,s,e.isJsxTagNameExpression),t(o.attributes,s,e.isJsxAttributes));case 252:return e.updateJsxClosingElement(o,t(o.tagName,s,e.isJsxTagNameExpression));case 253:return e.updateJsxAttribute(o,t(o.name,s,e.isIdentifier),t(o.initializer,s,e.isStringLiteralOrJsxExpression));case 254:return e.updateJsxAttributes(o,u(o.properties,s,e.isJsxAttributeLike));case 255:return e.updateJsxSpreadAttribute(o,t(o.expression,s,e.isExpression));case 256:return e.updateJsxExpression(o,t(o.expression,s,e.isExpression));case 257:return e.updateCaseClause(o,t(o.expression,s,e.isExpression),u(o.statements,s,e.isStatement));case 258:return e.updateDefaultClause(o,u(o.statements,s,e.isStatement));case 259:return e.updateHeritageClause(o,u(o.types,s,e.isExpressionWithTypeArguments));case 260:return e.updateCatchClause(o,t(o.variableDeclaration,s,e.isVariableDeclaration),t(o.block,s,e.isBlock));case 261:return e.updatePropertyAssignment(o,t(o.name,s,e.isPropertyName),t(o.initializer,s,e.isExpression));case 262:return e.updateShorthandPropertyAssignment(o,t(o.name,s,e.isIdentifier),t(o.objectAssignmentInitializer,s,e.isExpression));case 263:return e.updateSpreadAssignment(o,t(o.expression,s,e.isExpression));case 264:return e.updateEnumMember(o,t(o.name,s,e.isPropertyName),t(o.initializer,s,e.isExpression));case 265:return e.updateSourceFileNode(o,r(o.statements,s,c));case 297:return e.updatePartiallyEmittedExpression(o,t(o.expression,s,e.isExpression));case 298:return e.updateCommaList(o,u(o.elements,s,e.isExpression));default:return o}}}function s(t){return e.Debug.assert(t.length<=1,\"Too many nodes written to output.\"),e.singleOrUndefined(t)}e.visitNode=t,e.visitNodes=n,e.visitLexicalEnvironment=r,e.visitParameterList=a,e.visitFunctionBody=i,e.visitEachChild=o;}(r||(r={})),function(e){function t(e,t,n){return e?t(n,e):n}function n(e,t,n){return e?t(n,e):n}function r(r,a,i,o){if(void 0===r)return a;var s=o?n:e.reduceLeft,c=o||i,u=r.kind;if(u>0&&u<=142)return a;if(u>=158&&u<=173)return a;var l=a;switch(r.kind){case 206:case 209:case 200:case 225:case 296:break;case 143:l=t(r.left,i,l),l=t(r.right,i,l);break;case 144:l=t(r.expression,i,l);break;case 146:l=s(r.decorators,c,l),l=s(r.modifiers,c,l),l=t(r.name,i,l),l=t(r.type,i,l),l=t(r.initializer,i,l);break;case 147:l=t(r.expression,i,l);break;case 148:l=s(r.modifiers,c,l),l=t(r.name,i,l),l=t(r.questionToken,i,l),l=t(r.type,i,l),l=t(r.initializer,i,l);break;case 149:l=s(r.decorators,c,l),l=s(r.modifiers,c,l),l=t(r.name,i,l),l=t(r.type,i,l),l=t(r.initializer,i,l);break;case 151:l=s(r.decorators,c,l),l=s(r.modifiers,c,l),l=t(r.name,i,l),l=s(r.typeParameters,c,l),l=s(r.parameters,c,l),l=t(r.type,i,l),l=t(r.body,i,l);break;case 152:l=s(r.modifiers,c,l),l=s(r.parameters,c,l),l=t(r.body,i,l);break;case 153:l=s(r.decorators,c,l),l=s(r.modifiers,c,l),l=t(r.name,i,l),l=s(r.parameters,c,l),l=t(r.type,i,l),l=t(r.body,i,l);break;case 154:l=s(r.decorators,c,l),l=s(r.modifiers,c,l),l=t(r.name,i,l),l=s(r.parameters,c,l),l=t(r.body,i,l);break;case 174:case 175:l=s(r.elements,c,l);break;case 176:l=t(r.propertyName,i,l),l=t(r.name,i,l),l=t(r.initializer,i,l);break;case 177:l=s(r.elements,c,l);break;case 178:l=s(r.properties,c,l);break;case 179:l=t(r.expression,i,l),l=t(r.name,i,l);break;case 180:l=t(r.expression,i,l),l=t(r.argumentExpression,i,l);break;case 181:case 182:l=t(r.expression,i,l),l=s(r.typeArguments,c,l),l=s(r.arguments,c,l);break;case 183:l=t(r.tag,i,l),l=t(r.template,i,l);break;case 184:l=t(r.type,i,l),l=t(r.expression,i,l);break;case 186:l=s(r.modifiers,c,l),l=t(r.name,i,l),l=s(r.typeParameters,c,l),l=s(r.parameters,c,l),l=t(r.type,i,l),l=t(r.body,i,l);break;case 187:l=s(r.modifiers,c,l),l=s(r.typeParameters,c,l),l=s(r.parameters,c,l),l=t(r.type,i,l),l=t(r.body,i,l);break;case 185:case 188:case 189:case 190:case 191:case 197:case 198:case 203:l=t(r.expression,i,l);break;case 192:case 193:l=t(r.operand,i,l);break;case 194:l=t(r.left,i,l),l=t(r.right,i,l);break;case 195:l=t(r.condition,i,l),l=t(r.whenTrue,i,l),l=t(r.whenFalse,i,l);break;case 196:l=t(r.head,i,l),l=s(r.templateSpans,c,l);break;case 199:l=s(r.modifiers,c,l),l=t(r.name,i,l),l=s(r.typeParameters,c,l),l=s(r.heritageClauses,c,l),l=s(r.members,c,l);break;case 201:l=t(r.expression,i,l),l=s(r.typeArguments,c,l);break;case 202:l=t(r.expression,i,l),l=t(r.type,i,l);break;case 203:l=t(r.expression,i,l);break;case 205:l=t(r.expression,i,l),l=t(r.literal,i,l);break;case 207:l=s(r.statements,c,l);break;case 208:l=s(r.modifiers,c,l),l=t(r.declarationList,i,l);break;case 210:l=t(r.expression,i,l);break;case 211:l=t(r.expression,i,l),l=t(r.thenStatement,i,l),l=t(r.elseStatement,i,l);break;case 212:l=t(r.statement,i,l),l=t(r.expression,i,l);break;case 213:case 220:l=t(r.expression,i,l),l=t(r.statement,i,l);break;case 214:l=t(r.initializer,i,l),l=t(r.condition,i,l),l=t(r.incrementor,i,l),l=t(r.statement,i,l);break;case 215:case 216:l=t(r.initializer,i,l),l=t(r.expression,i,l),l=t(r.statement,i,l);break;case 219:case 223:l=t(r.expression,i,l);break;case 221:l=t(r.expression,i,l),l=t(r.caseBlock,i,l);break;case 222:l=t(r.label,i,l),l=t(r.statement,i,l);break;case 224:l=t(r.tryBlock,i,l),l=t(r.catchClause,i,l),l=t(r.finallyBlock,i,l);break;case 226:l=t(r.name,i,l),l=t(r.type,i,l),l=t(r.initializer,i,l);break;case 227:l=s(r.declarations,c,l);break;case 228:l=s(r.decorators,c,l),l=s(r.modifiers,c,l),l=t(r.name,i,l),l=s(r.typeParameters,c,l),l=s(r.parameters,c,l),l=t(r.type,i,l),l=t(r.body,i,l);break;case 229:l=s(r.decorators,c,l),l=s(r.modifiers,c,l),l=t(r.name,i,l),l=s(r.typeParameters,c,l),l=s(r.heritageClauses,c,l),l=s(r.members,c,l);break;case 232:l=s(r.decorators,c,l),l=s(r.modifiers,c,l),l=t(r.name,i,l),l=s(r.members,c,l);break;case 233:l=s(r.decorators,c,l),l=s(r.modifiers,c,l),l=t(r.name,i,l),l=t(r.body,i,l);break;case 234:l=s(r.statements,c,l);break;case 235:l=s(r.clauses,c,l);break;case 237:l=s(r.decorators,c,l),l=s(r.modifiers,c,l),l=t(r.name,i,l),l=t(r.moduleReference,i,l);break;case 238:l=s(r.decorators,c,l),l=s(r.modifiers,c,l),l=t(r.importClause,i,l),l=t(r.moduleSpecifier,i,l);break;case 239:l=t(r.name,i,l),l=t(r.namedBindings,i,l);break;case 240:l=t(r.name,i,l);break;case 241:case 245:l=s(r.elements,c,l);break;case 242:case 246:l=t(r.propertyName,i,l),l=t(r.name,i,l);break;case 243:l=e.reduceLeft(r.decorators,i,l),l=e.reduceLeft(r.modifiers,i,l),l=t(r.expression,i,l);break;case 244:l=e.reduceLeft(r.decorators,i,l),l=e.reduceLeft(r.modifiers,i,l),l=t(r.exportClause,i,l),l=t(r.moduleSpecifier,i,l);break;case 248:l=t(r.expression,i,l);break;case 249:l=t(r.openingElement,i,l),l=e.reduceLeft(r.children,i,l),l=t(r.closingElement,i,l);break;case 250:case 251:l=t(r.tagName,i,l),l=t(r.attributes,i,l);break;case 254:l=s(r.properties,c,l);break;case 252:l=t(r.tagName,i,l);break;case 253:l=t(r.name,i,l),l=t(r.initializer,i,l);break;case 255:case 256:l=t(r.expression,i,l);break;case 257:l=t(r.expression,i,l);case 258:l=s(r.statements,c,l);break;case 259:l=s(r.types,c,l);break;case 260:l=t(r.variableDeclaration,i,l),l=t(r.block,i,l);break;case 261:l=t(r.name,i,l),l=t(r.initializer,i,l);break;case 262:l=t(r.name,i,l),l=t(r.objectAssignmentInitializer,i,l);break;case 263:l=t(r.expression,i,l);break;case 264:l=t(r.name,i,l),l=t(r.initializer,i,l);break;case 265:l=s(r.statements,c,l);break;case 297:l=t(r.expression,i,l);break;case 298:l=s(r.elements,c,l);}return l}function a(t,n){return e.some(n)?e.isNodeArray(t)?e.setTextRange(e.createNodeArray(e.concatenate(t,n)),t):e.addRange(t,n):t}function i(t){return d.assert(e.every(t,e.isStatement),\"Cannot lift nodes to a Block.\"),e.singleOrUndefined(t)||e.createBlock(t)}function o(e){return s(e),e}function s(t){if(void 0===t)return 0;if(536870912&t.transformFlags)return t.transformFlags&~e.getTransformFlagsSubtreeExclusions(t.kind);var n=u(t);return e.computeTransformFlagsForNode(t,n)}function c(e){if(void 0===e)return 0;for(var t=0,n=0,r=0,a=e;r<a.length;r++){var i=a[r];t|=s(i),n|=-536870913&i.transformFlags;}return e.transformFlags=536870912|n,t}function u(t){return e.hasModifier(t,2)||e.isTypeNode(t)&&201!==t.kind?0:r(t,0,l,_)}function l(e,t){return e|s(t)}function _(e,t){return e|c(t)}e.reduceEachChild=r,e.mergeLexicalEnvironment=a,e.liftToBlock=i,e.aggregateTransformFlags=o;var d;!function(t){function n(){if(!r){Object.defineProperties(e.objectAllocator.getSymbolConstructor().prototype,{__debugFlags:{get:function(){return e.formatSymbolFlags(this.flags)}}}),Object.defineProperties(e.objectAllocator.getTypeConstructor().prototype,{__debugFlags:{get:function(){return e.formatTypeFlags(this.flags)}},__debugObjectFlags:{get:function(){return 32768&this.flags?e.formatObjectFlags(this.objectFlags):\"\"}},__debugTypeToString:{value:function(){return this.checker.typeToString(this)}}});for(var t=0,n=[e.objectAllocator.getNodeConstructor(),e.objectAllocator.getIdentifierConstructor(),e.objectAllocator.getTokenConstructor(),e.objectAllocator.getSourceFileConstructor()];t<n.length;t++){var a=n[t];a.prototype.hasOwnProperty(\"__debugKind\")||Object.defineProperties(a.prototype,{__debugKind:{get:function(){return e.formatSyntaxKind(this.kind)}},__debugModifierFlags:{get:function(){return e.formatModifierFlags(e.getModifierFlagsNoCache(this))}},__debugTransformFlags:{get:function(){return e.formatTransformFlags(this.transformFlags)}},__debugEmitFlags:{get:function(){return e.formatEmitFlags(e.getEmitFlags(this))}},__debugGetText:{value:function(t){if(e.nodeIsSynthesized(this))return\"\";var n=e.getParseTreeNode(this),r=n&&e.getSourceFileOfNode(n);return r?e.getSourceTextOfNodeFromSourceFile(r,n,t):\"\"}}});}r=!0;}}var r=!1;t.failBadSyntaxKind=t.shouldAssert(1)?function(n,r){return t.fail((r||\"Unexpected node.\")+\"\\r\\nNode \"+e.formatSyntaxKind(n.kind)+\" was unexpected.\",t.failBadSyntaxKind)}:e.noop,t.assertEachNode=t.shouldAssert(1)?function(n,r,a){return t.assert(void 0===r||e.every(n,r),a||\"Unexpected node.\",function(){return\"Node array did not pass test '\"+t.getFunctionName(r)+\"'.\"},t.assertEachNode)}:e.noop,t.assertNode=t.shouldAssert(1)?function(n,r,a){return t.assert(void 0===r||r(n),a||\"Unexpected node.\",function(){return\"Node \"+e.formatSyntaxKind(n.kind)+\" did not pass test '\"+t.getFunctionName(r)+\"'.\"},t.assertNode)}:e.noop,t.assertOptionalNode=t.shouldAssert(1)?function(n,r,a){return t.assert(void 0===r||void 0===n||r(n),a||\"Unexpected node.\",function(){return\"Node \"+e.formatSyntaxKind(n.kind)+\" did not pass test '\"+t.getFunctionName(r)+\"'.\"},t.assertOptionalNode)}:e.noop,t.assertOptionalToken=t.shouldAssert(1)?function(n,r,a){return t.assert(void 0===r||void 0===n||n.kind===r,a||\"Unexpected node.\",function(){return\"Node \"+e.formatSyntaxKind(n.kind)+\" was not a '\"+e.formatSyntaxKind(r)+\"' token.\"},t.assertOptionalToken)}:e.noop,t.assertMissingNode=t.shouldAssert(1)?function(n,r){return t.assert(void 0===n,r||\"Unexpected node.\",function(){return\"Node \"+e.formatSyntaxKind(n.kind)+\" was unexpected'.\"},t.assertMissingNode)}:e.noop,t.enableDebugInfo=n;}(d=e.Debug||(e.Debug={}));}(r||(r={}));!function(e){function t(t){return t=e.getOriginalNode(t),t?e.getNodeId(t):0}function n(n,i,o){for(var s,c=[],u=e.createMultiMap(),l=[],_=e.createMap(),d=!1,p=void 0,f=!1,g=0,m=n.statements;g<m.length;g++){var y=m[g];switch(y.kind){case 238:c.push(y);break;case 237:248===y.moduleReference.kind&&c.push(y);break;case 244:if(y.moduleSpecifier)y.exportClause?c.push(y):(c.push(y),f=!0);else for(var h=0,v=y.exportClause.elements;h<v.length;h++){var b=v[h];if(!_.get(b.name.text)){T=b.propertyName||b.name;u.add(T.text,b),(S=i.getReferencedImportDeclaration(T)||i.getReferencedValueDeclaration(T))&&a(l,t(S),b.name),_.set(b.name.text,!0),s=e.append(s,b.name);}}break;case 243:y.isExportEquals&&!p&&(p=y);break;case 208:if(e.hasModifier(y,1))for(var x=0,k=y.declarationList.declarations;x<k.length;x++){var S=k[x];s=r(S,_,s);}break;case 228:case 229:if(e.hasModifier(y,1))if(e.hasModifier(y,512))d||(a(l,t(y),e.getDeclarationName(y)),d=!0);else{var T=y.name;_.get(T.text)||(a(l,t(y),T),_.set(T.text,!0),s=e.append(s,T));}}}var C=e.getOrCreateExternalHelpersModuleNameIfNeeded(n,o,f),D=C&&e.createImportDeclaration(void 0,void 0,e.createImportClause(void 0,e.createNamespaceImport(C)),e.createLiteral(e.externalHelpersModuleNameText));return D&&c.unshift(D),{externalImports:c,exportSpecifiers:u,exportEquals:p,hasExportStarsToExportValues:f,exportedBindings:l,exportedNames:s,externalHelpersImportDeclaration:D}}function r(t,n,a){if(e.isBindingPattern(t.name))for(var i=0,o=t.name.elements;i<o.length;i++){var s=o[i];e.isOmittedExpression(s)||(a=r(s,n,a));}else e.isGeneratedIdentifier(t.name)||n.get(t.name.text)||(n.set(t.name.text,!0),a=e.append(a,t.name));return a}function a(e,t,n){var r=e[t];return r?r.push(n):e[t]=r=[n],r}e.getOriginalNodeId=t,e.collectExternalModuleInfo=n;}(r||(r={}));!function(e){function t(t,n,a,i,o,s){function u(t){e.setEmitFlags(t,64),e.aggregateTransformFlags(t),m=e.append(m,t);}function _(t,r,a,i){e.Debug.assertNode(t,s?e.isIdentifier:e.isExpression);var o=s?s(t,r,a):e.setTextRange(e.createAssignment(e.visitNode(t,n,e.isExpression),r),a);o.original=i,u(o);}var p,g=t;if(e.isDestructuringAssignment(t))for(p=t.right;e.isEmptyArrayLiteral(t.left)||e.isEmptyObjectLiteral(t.left);){if(!e.isDestructuringAssignment(p))return p;g=t=p,p=t.right;}var m,y={context:a,level:i,downlevelIteration:a.getCompilerOptions().downlevelIteration,hoistTempVariables:!0,emitExpression:u,emitBindingOrAssignment:_,createArrayBindingOrAssignmentPattern:l,createObjectBindingOrAssignmentPattern:d,createArrayBindingOrAssignmentElement:f,visitor:n};if(p&&(p=e.visitNode(p,n,e.isExpression),o?p=c(y,p,!0,g):e.nodeIsSynthesized(t)&&(g=p)),r(y,t,p,g,e.isDestructuringAssignment(t)),p&&o){if(!e.some(m))return p;m.push(p);}return e.aggregateTransformFlags(e.inlineExpressions(m))||e.createOmittedExpression()}function n(t,n,a,i,o,s,c){function l(t){f=e.append(f,t);}function d(t,n,r,a){e.Debug.assertNode(t,e.isBindingName),f&&(n=e.inlineExpressions(e.append(f,n)),f=void 0),g.push({pendingExpressions:f,name:t,value:n,location:r,original:a});}var f,g=[],m=[];if(r({context:a,level:i,downlevelIteration:a.getCompilerOptions().downlevelIteration,hoistTempVariables:s,emitExpression:l,emitBindingOrAssignment:d,createArrayBindingOrAssignmentPattern:u,createObjectBindingOrAssignmentPattern:_,createArrayBindingOrAssignmentElement:p,visitor:n},t,o,t,c),f){var y=e.createTempVariable(void 0);if(s){T=e.inlineExpressions(f);f=void 0,d(y,T,void 0,void 0);}else{a.hoistVariableDeclaration(y);var h=e.lastOrUndefined(g);h.pendingExpressions=e.append(h.pendingExpressions,e.createAssignment(y,h.value)),e.addRange(h.pendingExpressions,f),h.value=y;}}for(var v=0,b=g;v<b.length;v++){var x=b[v],k=x.pendingExpressions,S=x.name,T=x.value,C=x.location,D=x.original,E=e.createVariableDeclaration(S,void 0,k?e.inlineExpressions(e.append(k,T)):T);E.original=D,e.setTextRange(E,C),e.isIdentifier(S)&&e.setEmitFlags(E,64),e.aggregateTransformFlags(E),m.push(E);}return m}function r(t,n,r,s,c){if(!c){var u=e.visitNode(e.getInitializerOfBindingOrAssignmentElement(n),t.visitor,e.isExpression);u?r=r?o(t,r,u,s):u:r||(r=e.createVoidZero());}var l=e.getTargetOfBindingOrAssignmentElement(n);e.isObjectBindingOrAssignmentPattern(l)?a(t,n,l,r,s):e.isArrayBindingOrAssignmentPattern(l)?i(t,n,l,r,s):t.emitBindingOrAssignment(l,r,s,n);}function a(t,n,a,i,o){var u=e.getElementsOfBindingOrAssignmentPattern(a),l=u.length;1!==l&&(i=c(t,i,!e.isDeclarationBindingElement(n)||0!==l,o));for(var _,d,p=0;p<l;p++){var f=u[p];if(e.getRestIndicatorOfBindingOrAssignmentElement(f))p===l-1&&(_&&(t.emitBindingOrAssignment(t.createObjectBindingOrAssignmentPattern(_),i,o,a),_=void 0),r(t,f,y=g(t.context,i,u,d,a),f));else{var m=e.getPropertyNameOfBindingOrAssignmentElement(f);if(!(t.level>=1)||1572864&f.transformFlags||1572864&e.getTargetOfBindingOrAssignmentElement(f).transformFlags||e.isComputedPropertyName(m)){_&&(t.emitBindingOrAssignment(t.createObjectBindingOrAssignmentPattern(_),i,o,a),_=void 0);var y=s(t,i,m);e.isComputedPropertyName(m)&&(d=e.append(d,y.argumentExpression)),r(t,f,y,f);}else _=e.append(_,f);}}_&&t.emitBindingOrAssignment(t.createObjectBindingOrAssignmentPattern(_),i,o,a);}function i(t,n,a,i,o){var s=e.getElementsOfBindingOrAssignmentPattern(a),u=s.length;t.level<1&&t.downlevelIteration?i=c(t,e.createReadHelper(t.context,i,u>0&&e.getRestIndicatorOfBindingOrAssignmentElement(s[u-1])?void 0:u,o),!1,o):1!==u&&(t.level<1||0===u)&&(i=c(t,i,!e.isDeclarationBindingElement(n)||0!==u,o));for(var l,_,d=0;d<u;d++){var p=s[d];if(t.level>=1)if(1048576&p.transformFlags){var f=e.createTempVariable(void 0);t.hoistTempVariables&&t.context.hoistVariableDeclaration(f),_=e.append(_,[f,p]),l=e.append(l,t.createArrayBindingOrAssignmentElement(f));}else l=e.append(l,p);else{if(e.isOmittedExpression(p))continue;if(e.getRestIndicatorOfBindingOrAssignmentElement(p)){if(d===u-1){var g=e.createArraySlice(i,d);r(t,p,g,p);}}else r(t,p,g=e.createElementAccess(i,d),p);}}if(l&&t.emitBindingOrAssignment(t.createArrayBindingOrAssignmentPattern(l),i,o,a),_)for(var m=0,y=_;m<y.length;m++){var h=y[m],v=h[0];r(t,p=h[1],v,p);}}function o(t,n,r,a){return n=c(t,n,!0,a),e.createConditional(e.createTypeCheck(n,\"undefined\"),r,n)}function s(t,n,r){if(e.isComputedPropertyName(r)){var a=c(t,r.expression,!1,r);return e.createElementAccess(n,a)}if(e.isStringOrNumericLiteral(r))return(a=e.getSynthesizedClone(r)).text=e.unescapeIdentifier(a.text),e.createElementAccess(n,a);var i=e.createIdentifier(e.unescapeIdentifier(r.text));return e.createPropertyAccess(n,i)}function c(t,n,r,a){if(e.isIdentifier(n)&&r)return n;var i=e.createTempVariable(void 0);return t.hoistTempVariables?(t.context.hoistVariableDeclaration(i),t.emitExpression(e.setTextRange(e.createAssignment(i,n),a))):t.emitBindingOrAssignment(i,n,a,void 0),i}function u(t){return e.Debug.assertEachNode(t,e.isArrayBindingElement),e.createArrayBindingPattern(t)}function l(t){return e.createArrayLiteral(e.map(t,e.convertToArrayAssignmentElement))}function _(t){return e.Debug.assertEachNode(t,e.isBindingElement),e.createObjectBindingPattern(t)}function d(t){return e.createObjectLiteral(e.map(t,e.convertToObjectAssignmentElement))}function p(t){return e.createBindingElement(void 0,void 0,t)}function f(e){return e}function g(t,n,r,a,i){t.requestEmitHelper(m);for(var o=[],s=0,c=0;c<r.length-1;c++){var u=e.getPropertyNameOfBindingOrAssignmentElement(r[c]);if(u)if(e.isComputedPropertyName(u)){var l=a[s];s++,o.push(e.createConditional(e.createTypeCheck(l,\"symbol\"),l,e.createAdd(l,e.createLiteral(\"\"))));}else o.push(e.createLiteral(u));}return e.createCall(e.getHelperName(\"__rest\"),void 0,[n,e.setTextRange(e.createArrayLiteral(o),i)])}!function(e){e[e.All=0]=\"All\",e[e.ObjectRest=1]=\"ObjectRest\";}(e.FlattenLevel||(e.FlattenLevel={})),e.flattenDestructuringAssignment=t,e.flattenDestructuringBinding=n;var m={name:\"typescript:rest\",scoped:!1,text:'\\n            var __rest = (this && this.__rest) || function (s, e) {\\n                var t = {};\\n                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\\n                    t[p] = s[p];\\n                if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\\n                    for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\\n                        t[p[i]] = s[p[i]];\\n                return t;\\n            };'};}(r||(r={}));!function(e){function t(t){function i(n){if(n.isDeclarationFile)return n;Zt=n;var r=s(n,v);return e.addEmitHelpers(r,t.readEmitHelpers()),Zt=void 0,r}function s(e,t){var n=nn,r=rn;c(e);var a=t(e);return nn!==n&&(rn=r),nn=n,a}function c(t){switch(t.kind){case 265:case 235:case 234:case 207:nn=t,rn=void 0;break;case 229:case 228:if(e.hasModifier(t,2))break;Ye(t);}}function u(e){return s(e,l)}function l(n){return 1&n.transformFlags?h(n):2&n.transformFlags?e.visitEachChild(n,u,t):n}function _(e){return s(e,d)}function d(e){switch(e.kind){case 238:return rt(e);case 237:return dt(e);case 243:return st(e);case 244:return ct(e);default:return l(e)}}function p(e){return s(e,f)}function f(n){if(244!==n.kind&&238!==n.kind&&239!==n.kind&&(237!==n.kind||248!==n.moduleReference.kind))return 1&n.transformFlags||e.hasModifier(n,1)?h(n):2&n.transformFlags?e.visitEachChild(n,u,t):n}function g(e){return s(e,m)}function m(t){switch(t.kind){case 152:return;case 149:case 157:case 153:case 154:case 151:return l(t);case 206:return t;default:return void e.Debug.failBadSyntaxKind(t)}}function y(t){if(!(2270&e.modifierToFlag(t.kind)||en&&84===t.kind))return t}function h(n){if(e.hasModifier(n,2)&&e.isStatement(n))return e.createNotEmittedStatement(n);switch(n.kind){case 84:case 79:return en?void 0:n;case 114:case 112:case 113:case 117:case 76:case 124:case 131:case 164:case 165:case 163:case 158:case 145:case 119:case 122:case 136:case 133:case 130:case 105:case 137:case 161:case 160:case 162:case 159:case 166:case 167:case 168:case 169:case 170:case 171:case 172:case 173:case 157:case 147:case 231:case 149:case 236:return;case 152:return Ee(n);case 230:return e.createNotEmittedStatement(n);case 229:return S(n);case 199:return D(n);case 259:return Te(n);case 201:return Ce(n);case 151:return Ne(n);case 153:return we(n);case 154:return Pe(n);case 228:return Oe(n);case 186:return Fe(n);case 187:return Ie(n);case 146:return Me(n);case 185:return Ke(n);case 184:case 202:return je(n);case 181:return ze(n);case 182:return Ue(n);case 203:return Je(n);case 232:return Ve(n);case 208:return Re(n);case 226:return Be(n);case 233:return et(n);case 237:return dt(n);default:return e.Debug.failBadSyntaxKind(n),e.visitEachChild(n,u,t)}}function v(n){var r=(void 0===Ht.alwaysStrict?Ht.strict:Ht.alwaysStrict)&&!(e.isExternalModule(n)&&Xt===e.ModuleKind.ES2015);return e.updateSourceFileNode(n,e.visitLexicalEnvironment(n.statements,_,t,0,r))}function b(t){if(t.decorators&&t.decorators.length>0)return!0;var n=e.getFirstConstructorWithBody(t);return!!n&&e.forEach(n.parameters,x)}function x(e){return void 0!==e.decorators&&e.decorators.length>0}function k(t,n){var r=0;return e.some(n)&&(r|=1),e.getClassExtendsHeritageClauseElement(t)&&(r|=64),b(t)&&(r|=2),e.childIsDecorated(t)&&(r|=4),pt(t)?r|=8:mt(t)?r|=32:gt(t)&&(r|=16),Gt<=1&&7&r&&(r|=128),r}function S(n){var r=M(n,!0),a=k(n,r);128&a&&t.startLexicalEnvironment();var i=n.name||(5&a?e.getGeneratedNameForNode(n):void 0),o=2&a?C(n,i,a):T(n,i,a),s=[o];if(1&a&&K(s,r,128&a?e.getInternalName(n):e.getLocalName(n)),Z(s,n,!1),Z(s,n,!0),ne(s,n),128&a){var c=e.createTokenRange(e.skipTrivia(Zt.text,n.members.end),18),u=e.getInternalName(n),l=e.createPartiallyEmittedExpression(u);l.end=c.end,e.setEmitFlags(l,1536);var _=e.createReturn(l);_.pos=c.pos,e.setEmitFlags(_,1920),s.push(_),e.addRange(s,t.endLexicalEnvironment());var d=e.createVariableStatement(void 0,e.createVariableDeclarationList([e.createVariableDeclaration(e.getLocalName(n,!1,!1),void 0,e.createImmediatelyInvokedFunctionExpression(s))]));e.setOriginalNode(d,n),e.setCommentRange(d,n),e.setSourceMapRange(d,e.moveRangePastDecorators(n)),e.startOnNewLine(d),s=[d];}return 8&a?ht(s,n):(128&a||2&a)&&(32&a?s.push(e.createExportDefault(e.getLocalName(n,!1,!0))):16&a&&s.push(e.createExternalModuleExport(e.getLocalName(n,!1,!0)))),s.length>1&&(s.push(e.createEndOfDeclarationMarker(n)),e.setEmitFlags(o,4194304|e.getEmitFlags(o))),e.singleOrMany(s)}function T(t,n,r){var a=128&r?void 0:e.visitNodes(t.modifiers,y,e.isModifier),i=e.createClassDeclaration(void 0,a,n,void 0,e.visitNodes(t.heritageClauses,u,e.isHeritageClause),E(t,0!=(64&r))),o=e.getEmitFlags(t);return 1&r&&(o|=32),e.setTextRange(i,t),e.setOriginalNode(i,t),e.setEmitFlags(i,o),i}function C(t,n,r){var a=e.moveRangePastDecorators(t),i=Tt(t),o=e.getLocalName(t,!1,!0),s=e.visitNodes(t.heritageClauses,u,e.isHeritageClause),c=E(t,0!=(64&r)),l=e.createClassExpression(void 0,n,void 0,s,c);e.setOriginalNode(l,t),e.setTextRange(l,a);var _=e.createVariableStatement(void 0,e.createVariableDeclarationList([e.createVariableDeclaration(o,void 0,i?e.createAssignment(i,l):l)],1));return e.setOriginalNode(_,t),e.setTextRange(_,a),e.setCommentRange(_,t),_}function D(t){var n=M(t,!0),r=e.visitNodes(t.heritageClauses,u,e.isHeritageClause),a=E(t,e.some(r,function(e){return 85===e.token})),i=e.createClassExpression(void 0,t.name,void 0,r,a);if(e.setOriginalNode(i,t),e.setTextRange(i,t),n.length>0){var o=[],s=e.createTempVariable($t);return 8388608&Wt.getNodeCheckFlags(t)&&(Nt(),on$$1[e.getOriginalNodeId(t)]=e.getSynthesizedClone(s)),e.setEmitFlags(i,65536|e.getEmitFlags(i)),o.push(e.startOnNewLine(e.createAssignment(s,i))),e.addRange(o,j(n,s)),o.push(e.startOnNewLine(s)),e.inlineExpressions(o)}return i}function E(t,n){var r=[],a=N(t,n);return a&&r.push(a),e.addRange(r,e.visitNodes(t.members,g,e.isClassElement)),e.setTextRange(e.createNodeArray(r),t.members)}function N(n,r){var a=e.forEach(n.members,L),i=262144&n.transformFlags,o=e.getFirstConstructorWithBody(n);if(!a&&!i)return e.visitEachChild(o,u,t);var s=A(o),c=w(n,o,r);return e.startOnNewLine(e.setOriginalNode(e.setTextRange(e.createConstructor(void 0,void 0,s,c),o||n),o))}function A(n){return e.visitParameterList(n&&n.parameters,u,t)||[]}function w(t,n,r){var a=[],i=0;if(qt(),n){i=P(n,a);var o=O(n);e.addRange(a,e.map(o,I));}else r&&a.push(e.createStatement(e.createCall(e.createSuper(),void 0,[e.createSpread(e.createIdentifier(\"arguments\"))])));return K(a,M(t,!1),e.createThis()),n&&e.addRange(a,e.visitNodes(n.body.statements,u,e.isStatement,i)),a=e.mergeLexicalEnvironment(a,Vt()),e.setTextRange(e.createBlock(e.setTextRange(e.createNodeArray(a),n?n.body.statements:t.members),!0),n?n.body:void 0)}function P(t,n){if(t.body){var r=t.body.statements,a=e.addPrologue(n,r,!1,u);if(a===r.length)return a;var i=r[a];return 210===i.kind&&e.isSuperCall(i.expression)?(n.push(e.visitNode(i,u,e.isStatement)),a+1):a}return 0}function O(t){return e.filter(t.parameters,F)}function F(t){return e.hasModifier(t,92)&&e.isIdentifier(t.name)}function I(t){e.Debug.assert(e.isIdentifier(t.name));var n=t.name,r=e.getMutableClone(n);e.setEmitFlags(r,1584);var a=e.getMutableClone(n);return e.setEmitFlags(a,1536),e.startOnNewLine(e.setTextRange(e.createStatement(e.createAssignment(e.setTextRange(e.createPropertyAccess(e.createThis(),r),t.name),a)),e.moveRangePos(t,-1)))}function M(t,n){return e.filter(t.members,n?R:L)}function R(e){return B(e,!0)}function L(e){return B(e,!1)}function B(t,n){return 149===t.kind&&n===e.hasModifier(t,32)&&void 0!==t.initializer}function K(t,n,r){for(var a=0,i=n;a<i.length;a++){var o=i[a],s=e.createStatement(J(o,r));e.setSourceMapRange(s,e.moveRangePastModifiers(o)),e.setCommentRange(s,o),t.push(s);}}function j(t,n){for(var r=[],a=0,i=t;a<i.length;a++){var o=i[a],s=J(o,n);s.startsOnNewLine=!0,e.setSourceMapRange(s,e.moveRangePastModifiers(o)),e.setCommentRange(s,o),r.push(s);}return r}function J(t,n){var r=Se(t),a=e.visitNode(t.initializer,u,e.isExpression),i=e.createMemberAccessForPropertyName(n,r,r);return e.createAssignment(i,a)}function z(t,n){return e.filter(t.members,n?U:q)}function U(e){return V(e,!0)}function q(e){return V(e,!1)}function V(t,n){return e.nodeOrChildIsDecorated(t)&&n===e.hasModifier(t,32)}function $(e){var t;if(e)for(var n=e.parameters,r=0;r<n.length;r++){var a=n[r];(t||a.decorators)&&(t||(t=new Array(n.length)),t[r]=a.decorators);}return t}function W(t){var n=t.decorators,r=$(e.getFirstConstructorWithBody(t));if(n||r)return{decorators:n,parameters:r}}function H(e,t){switch(t.kind){case 153:case 154:return G(e,t);case 151:return X(t);case 149:return Y(t);default:return}}function G(t,n){if(n.body){var r=e.getAllAccessorDeclarations(t.members,n),a=r.firstAccessor,i=r.secondAccessor,o=r.setAccessor,s=a.decorators?a:i&&i.decorators?i:void 0;if(s&&n===s){var c=s.decorators,u=$(o);if(c||u)return{decorators:c,parameters:u}}}}function X(e){if(e.body){var t=e.decorators,n=$(e);if(t||n)return{decorators:t,parameters:n}}}function Y(e){var t=e.decorators;if(t)return{decorators:t}}function Q(t,n,r){if(r){var a=[];return e.addRange(a,e.map(r.decorators,ae)),e.addRange(a,e.flatMap(r.parameters,ie)),oe(t,n,a),a}}function Z(t,n,r){e.addRange(t,e.map(ee(n,r),yt));}function ee(e,t){for(var n,r=0,a=z(e,t);r<a.length;r++){var i=te(e,a[r]);i&&(n?n.push(i):n=[i]);}return n}function te(r,a){var i=Q(a,r,H(r,a));if(i){var o=Dt(r,a),s=ke(a,!0),c=Gt>0?149===a.kind?e.createVoidZero():e.createNull():void 0,u=n(t,i,o,s,c,e.moveRangePastDecorators(a));return e.setEmitFlags(u,1536),u}}function ne(t,n){var r=re(n);r&&t.push(e.setOriginalNode(e.createStatement(r),n));}function re(r){var a=Q(r,r,W(r));if(a){var i=on$$1&&on$$1[e.getOriginalNodeId(r)],o=e.getLocalName(r,!1,!0),s=n(t,a,o),c=e.createAssignment(o,i?e.createAssignment(i,s):s);return e.setEmitFlags(c,1536),e.setSourceMapRange(c,e.moveRangePastDecorators(r)),c}}function ae(t){return e.visitNode(t.expression,u,e.isExpression)}function ie(n,r){var i;if(n){i=[];for(var o=0,s=n;o<s.length;o++){var c=s[o],u=a(t,ae(c),r,c.expression);e.setEmitFlags(u,1536),i.push(u);}}return i}function oe(e,t,n){o?ce(e,t,n):se(e,t,n);}function se(e,n,a){Ht.emitDecoratorMetadata&&(ue(e)&&a.push(r(t,\"design:type\",de(e))),_e(e)&&a.push(r(t,\"design:paramtypes\",pe(e,n))),le(e)&&a.push(r(t,\"design:returntype\",ge(e))));}function ce(n,a,i){if(Ht.emitDecoratorMetadata){var o=void 0;ue(n)&&(o||(o=[])).push(e.createPropertyAssignment(\"type\",e.createArrowFunction(void 0,void 0,[],void 0,e.createToken(36),de(n)))),_e(n)&&(o||(o=[])).push(e.createPropertyAssignment(\"paramTypes\",e.createArrowFunction(void 0,void 0,[],void 0,e.createToken(36),pe(n,a)))),le(n)&&(o||(o=[])).push(e.createPropertyAssignment(\"returnType\",e.createArrowFunction(void 0,void 0,[],void 0,e.createToken(36),ge(n)))),o&&i.push(r(t,\"design:typeinfo\",e.createObjectLiteral(o,!0)));}}function ue(e){var t=e.kind;return 151===t||153===t||154===t||149===t}function le(e){return 151===e.kind}function _e(t){switch(t.kind){case 229:case 199:return void 0!==e.getFirstConstructorWithBody(t);case 151:case 153:case 154:return!0}return!1}function de(t){switch(t.kind){case 149:case 146:case 153:return me(t.type);case 154:return me(e.getSetAccessorTypeAnnotationNode(t));case 229:case 199:case 151:return e.createIdentifier(\"Function\");default:return e.createVoidZero()}}function pe(t,n){var r=e.isClassLike(t)?e.getFirstConstructorWithBody(t):e.isFunctionLike(t)&&e.nodeIsPresent(t.body)?t:void 0,a=[];if(r)for(var i=fe(r,n),o=i.length,s=0;s<o;s++){var c=i[s];0===s&&e.isIdentifier(c.name)&&\"this\"===c.name.text||(c.dotDotDotToken?a.push(me(e.getRestParameterElementType(c.type))):a.push(de(c)));}return e.createArrayLiteral(a)}function fe(t,n){if(n&&153===t.kind){var r=e.getAllAccessorDeclarations(n.members,t).setAccessor;if(r)return r.parameters}return t.parameters}function ge(t){return e.isFunctionLike(t)&&t.type?me(t.type):e.isAsyncFunction(t)?e.createIdentifier(\"Promise\"):e.createVoidZero()}function me(t){if(void 0===t)return e.createIdentifier(\"Object\");switch(t.kind){case 105:case 139:case 95:case 130:return e.createVoidZero();case 168:return me(t.type);case 160:case 161:return e.createIdentifier(\"Function\");case 164:case 165:return e.createIdentifier(\"Array\");case 158:case 122:return e.createIdentifier(\"Boolean\");case 136:return e.createIdentifier(\"String\");case 134:return e.createIdentifier(\"Object\");case 173:switch(t.literal.kind){case 9:return e.createIdentifier(\"String\");case 8:return e.createIdentifier(\"Number\");case 101:case 86:return e.createIdentifier(\"Boolean\");default:e.Debug.failBadSyntaxKind(t.literal);}break;case 133:return e.createIdentifier(\"Number\");case 137:return Gt<2?xe():e.createIdentifier(\"Symbol\");case 159:return he(t);case 167:case 166:return ye(t);case 162:case 170:case 171:case 172:case 163:case 119:case 169:break;default:e.Debug.failBadSyntaxKind(t);}return e.createIdentifier(\"Object\")}function ye(t){for(var n,r=0,a=t.types;r<a.length;r++){var i=me(a[r]);if(e.isIdentifier(i)&&\"Object\"===i.text)return i;if(n){if(!e.isIdentifier(n)||!e.isIdentifier(i)||n.text!==i.text)return e.createIdentifier(\"Object\")}else n=i;}return n}function he(t){switch(Wt.getTypeReferenceSerializationKind(t.typeName,nn)){case e.TypeReferenceSerializationKind.Unknown:var n=ve(t.typeName,!0),r=e.createTempVariable($t);return e.createLogicalOr(e.createLogicalAnd(e.createTypeCheck(e.createAssignment(r,n),\"function\"),r),e.createIdentifier(\"Object\"));case e.TypeReferenceSerializationKind.TypeWithConstructSignatureAndValue:return ve(t.typeName,!1);case e.TypeReferenceSerializationKind.VoidNullableOrNeverType:return e.createVoidZero();case e.TypeReferenceSerializationKind.BooleanType:return e.createIdentifier(\"Boolean\");case e.TypeReferenceSerializationKind.NumberLikeType:return e.createIdentifier(\"Number\");case e.TypeReferenceSerializationKind.StringLikeType:return e.createIdentifier(\"String\");case e.TypeReferenceSerializationKind.ArrayLikeType:return e.createIdentifier(\"Array\");case e.TypeReferenceSerializationKind.ESSymbolType:return Gt<2?xe():e.createIdentifier(\"Symbol\");case e.TypeReferenceSerializationKind.TypeWithCallSignature:return e.createIdentifier(\"Function\");case e.TypeReferenceSerializationKind.Promise:return e.createIdentifier(\"Promise\");case e.TypeReferenceSerializationKind.ObjectType:default:return e.createIdentifier(\"Object\")}}function ve(t,n){switch(t.kind){case 71:var r=e.getMutableClone(t);return r.flags&=-9,r.original=void 0,r.parent=nn,n?e.createLogicalAnd(e.createStrictInequality(e.createTypeOf(r),e.createLiteral(\"undefined\")),r):r;case 143:return be(t,n)}}function be(t,n){var r;if(71===t.left.kind)r=ve(t.left,n);else if(n){var a=e.createTempVariable($t);r=e.createLogicalAnd(e.createAssignment(a,ve(t.left,!0)),a);}else r=ve(t.left,!1);return e.createPropertyAccess(r,t.right)}function xe(){return e.createConditional(e.createTypeCheck(e.createIdentifier(\"Symbol\"),\"function\"),e.createIdentifier(\"Symbol\"),e.createIdentifier(\"Object\"))}function ke(t,n){var r=t.name;return e.isComputedPropertyName(r)?n?e.getGeneratedNameForNode(r):r.expression:e.isIdentifier(r)?e.createLiteral(e.unescapeIdentifier(r.text)):e.getSynthesizedClone(r)}function Se(t){var n=t.name;if(e.isComputedPropertyName(n)){var r=e.visitNode(n.expression,u,e.isExpression);if(t.decorators){var a=e.getGeneratedNameForNode(n);$t(a),r=e.createAssignment(a,r);}return e.updateComputedPropertyName(n,r)}return n}function Te(t){if(85===t.token){var n=e.visitNodes(t.types,u,e.isExpressionWithTypeArguments,0,1);return e.setTextRange(e.createHeritageClause(85,n),t)}}function Ce(t){return e.updateExpressionWithTypeArguments(t,void 0,e.visitNode(t.expression,u,e.isLeftHandSideExpression))}function De(t){return!e.nodeIsMissing(t.body)}function Ee(n){if(De(n))return e.updateConstructor(n,e.visitNodes(n.decorators,u,e.isDecorator),e.visitNodes(n.modifiers,u,e.isModifier),e.visitParameterList(n.parameters,u,t),e.visitFunctionBody(n.body,u,t))}function Ne(n){if(De(n)){var r=e.updateMethod(n,void 0,e.visitNodes(n.modifiers,y,e.isModifier),n.asteriskToken,Se(n),void 0,void 0,e.visitParameterList(n.parameters,u,t),void 0,e.visitFunctionBody(n.body,u,t));return r!==n&&(e.setCommentRange(r,n),e.setSourceMapRange(r,e.moveRangePastDecorators(n))),r}}function Ae(t){return!(e.nodeIsMissing(t.body)&&e.hasModifier(t,128))}function we(n){if(Ae(n)){var r=e.updateGetAccessor(n,void 0,e.visitNodes(n.modifiers,y,e.isModifier),Se(n),e.visitParameterList(n.parameters,u,t),void 0,e.visitFunctionBody(n.body,u,t)||e.createBlock([]));return r!==n&&(e.setCommentRange(r,n),e.setSourceMapRange(r,e.moveRangePastDecorators(n))),r}}function Pe(n){if(Ae(n)){var r=e.updateSetAccessor(n,void 0,e.visitNodes(n.modifiers,y,e.isModifier),Se(n),e.visitParameterList(n.parameters,u,t),e.visitFunctionBody(n.body,u,t)||e.createBlock([]));return r!==n&&(e.setCommentRange(r,n),e.setSourceMapRange(r,e.moveRangePastDecorators(n))),r}}function Oe(n){if(!De(n))return e.createNotEmittedStatement(n);var r=e.updateFunctionDeclaration(n,void 0,e.visitNodes(n.modifiers,y,e.isModifier),n.asteriskToken,n.name,void 0,e.visitParameterList(n.parameters,u,t),void 0,e.visitFunctionBody(n.body,u,t)||e.createBlock([]));if(pt(n)){var a=[r];return ht(a,n),a}return r}function Fe(n){return De(n)?e.updateFunctionExpression(n,e.visitNodes(n.modifiers,y,e.isModifier),n.asteriskToken,n.name,void 0,e.visitParameterList(n.parameters,u,t),void 0,e.visitFunctionBody(n.body,u,t)||e.createBlock([])):e.createOmittedExpression()}function Ie(n){return e.updateArrowFunction(n,e.visitNodes(n.modifiers,y,e.isModifier),void 0,e.visitParameterList(n.parameters,u,t),void 0,e.visitFunctionBody(n.body,u,t))}function Me(t){if(!e.parameterIsThisKeyword(t)){var n=e.createParameter(void 0,void 0,t.dotDotDotToken,e.visitNode(t.name,u,e.isBindingName),void 0,void 0,e.visitNode(t.initializer,u,e.isExpression));return e.setOriginalNode(n,t),e.setTextRange(n,e.moveRangePastModifiers(t)),e.setCommentRange(n,t),e.setSourceMapRange(n,e.moveRangePastModifiers(t)),e.setEmitFlags(n.name,32),n}}function Re(n){if(pt(n)){var r=e.getInitializedVariables(n.declarationList);if(0===r.length)return;return e.setTextRange(e.createStatement(e.inlineExpressions(e.map(r,Le))),n)}return e.visitEachChild(n,u,t)}function Le(n){var r=n.name;return e.isBindingPattern(r)?e.flattenDestructuringAssignment(n,u,t,0,!1,bt):e.setTextRange(e.createAssignment(xt(r),e.visitNode(n.initializer,u,e.isExpression)),n)}function Be(t){return e.updateVariableDeclaration(t,e.visitNode(t.name,u,e.isBindingName),void 0,e.visitNode(t.initializer,u,e.isExpression))}function Ke(n){var r=e.skipOuterExpressions(n.expression,-3);if(e.isAssertionExpression(r)){var a=e.visitNode(n.expression,u,e.isExpression);return e.createPartiallyEmittedExpression(a,n)}return e.visitEachChild(n,u,t)}function je(t){var n=e.visitNode(t.expression,u,e.isExpression);return e.createPartiallyEmittedExpression(n,t)}function Je(t){var n=e.visitNode(t.expression,u,e.isLeftHandSideExpression);return e.createPartiallyEmittedExpression(n,t)}function ze(t){return e.updateCall(t,e.visitNode(t.expression,u,e.isExpression),void 0,e.visitNodes(t.arguments,u,e.isExpression))}function Ue(t){return e.updateNew(t,e.visitNode(t.expression,u,e.isExpression),void 0,e.visitNodes(t.arguments,u,e.isExpression))}function qe(t){return!e.isConst(t)||Ht.preserveConstEnums||Ht.isolatedModules}function Ve(t){if(qe(t)){var n=[],r=2;Ze(n,t)&&(Xt===e.ModuleKind.System&&nn===Zt||(r|=512));var a=kt(t),i=St(t),o=e.hasModifier(t,1)?e.getExternalModuleOrNamespaceExportName(tn,t,!1,!0):e.getLocalName(t,!1,!0),s=e.createLogicalOr(o,e.createAssignment(o,e.createObjectLiteral()));if(Xe(t)){var c=e.getLocalName(t,!1,!0);s=e.createAssignment(c,s);}var u=e.createStatement(e.createCall(e.createFunctionExpression(void 0,void 0,void 0,void 0,[e.createParameter(void 0,void 0,void 0,a)],void 0,$e(t,i)),void 0,[s]));return e.setOriginalNode(u,t),e.setTextRange(u,t),e.setEmitFlags(u,r),n.push(u),n.push(e.createEndOfDeclarationMarker(t)),n}}function $e(t,n){var r=tn;tn=n;var a=[];return Ut(),e.addRange(a,e.map(t.members,We)),e.addRange(a,Vt()),tn=r,e.createBlock(e.setTextRange(e.createNodeArray(a),t.members),!0)}function We(t){var n=ke(t,!1),r=He(t),a=e.createAssignment(e.createElementAccess(tn,n),r),i=9===r.kind?a:e.createAssignment(e.createElementAccess(tn,a),n);return e.setTextRange(e.createStatement(e.setTextRange(i,t)),t)}function He(t){var n=Wt.getConstantValue(t);return void 0!==n?e.createLiteral(n):(Et(),t.initializer?e.visitNode(t.initializer,u,e.isExpression):e.createVoidZero())}function Ge(t){return e.isInstantiatedModule(t,Ht.preserveConstEnums||Ht.isolatedModules)}function Xe(t){return pt(t)||ft(t)&&Xt!==e.ModuleKind.ES2015&&Xt!==e.ModuleKind.System}function Ye(t){var n=t.symbol&&t.symbol.name;n&&(rn||(rn=e.createMap()),rn.has(n)||rn.set(n,t));}function Qe(e){if(rn){var t=e.symbol&&e.symbol.name;if(t)return rn.get(t)===e}return!1}function Ze(t,n){var r=e.createVariableStatement(e.visitNodes(n.modifiers,y,e.isModifier),e.createVariableDeclarationList([e.createVariableDeclaration(e.getLocalName(n,!1,!0))],265===nn.kind?0:1));if(e.setOriginalNode(r,n),Ye(n),Qe(n))return 232===n.kind?e.setSourceMapRange(r.declarationList,n):e.setSourceMapRange(r,n),e.setCommentRange(r,n),e.setEmitFlags(r,4195328),t.push(r),!0;var a=e.createMergeDeclarationMarker(r);return e.setEmitFlags(a,4195840),t.push(a),!1}function et(t){if(!Ge(t))return e.createNotEmittedStatement(t);e.Debug.assert(e.isIdentifier(t.name),\"TypeScript module should have an Identifier name.\"),At();var n=[],r=2;Ze(n,t)&&(Xt===e.ModuleKind.System&&nn===Zt||(r|=512));var a=kt(t),i=St(t),o=e.hasModifier(t,1)?e.getExternalModuleOrNamespaceExportName(tn,t,!1,!0):e.getLocalName(t,!1,!0),s=e.createLogicalOr(o,e.createAssignment(o,e.createObjectLiteral()));if(Xe(t)){var c=e.getLocalName(t,!1,!0);s=e.createAssignment(c,s);}var u=e.createStatement(e.createCall(e.createFunctionExpression(void 0,void 0,void 0,void 0,[e.createParameter(void 0,void 0,void 0,a)],void 0,tt(t,i)),void 0,[s]));return e.setOriginalNode(u,t),e.setTextRange(u,t),e.setEmitFlags(u,r),n.push(u),n.push(e.createEndOfDeclarationMarker(t)),n}function tt(t,n){var r=tn,a=en,i=rn;tn=n,en=t,rn=void 0;var o=[];Ut();var c,u,l=t.body;if(234===l.kind)s(l,function(t){return e.addRange(o,e.visitNodes(t.statements,p,e.isStatement))}),c=l.statements,u=l;else{var _=et(l);_&&(e.isArray(_)?e.addRange(o,_):o.push(_));var d=nt(t).body;c=e.moveRangePos(d.statements,-1);}e.addRange(o,Vt()),tn=r,en=a,rn=i;var f=e.createBlock(e.setTextRange(e.createNodeArray(o),c),!0);return e.setTextRange(f,u),234!==l.kind&&e.setEmitFlags(f,1536|e.getEmitFlags(f)),f}function nt(e){if(233===e.body.kind)return nt(e.body)||e.body}function rt(t){if(!t.importClause)return t;var n=e.visitNode(t.importClause,at,e.isImportClause);return n?e.updateImportDeclaration(t,void 0,void 0,n,t.moduleSpecifier):void 0}function at(t){var n=Wt.isReferencedAliasDeclaration(t)?t.name:void 0,r=e.visitNode(t.namedBindings,it,e.isNamedImportBindings);return n||r?e.updateImportClause(t,n,r):void 0}function it(t){if(240===t.kind)return Wt.isReferencedAliasDeclaration(t)?t:void 0;var n=e.visitNodes(t.elements,ot,e.isImportSpecifier);return e.some(n)?e.updateNamedImports(t,n):void 0}function ot(e){return Wt.isReferencedAliasDeclaration(e)?e:void 0}function st(n){return Wt.isValueAliasDeclaration(n)?e.visitEachChild(n,u,t):void 0}function ct(t){if(!t.exportClause)return Ht.isolatedModules||Wt.moduleExportsSomeValue(t.moduleSpecifier)?t:void 0;if(Wt.isValueAliasDeclaration(t)){var n=e.visitNode(t.exportClause,ut,e.isNamedExports);return n?e.updateExportDeclaration(t,void 0,void 0,n,t.moduleSpecifier):void 0}}function ut(t){var n=e.visitNodes(t.elements,lt,e.isExportSpecifier);return e.some(n)?e.updateNamedExports(t,n):void 0}function lt(e){return Wt.isValueAliasDeclaration(e)?e:void 0}function _t(t){return Wt.isReferencedAliasDeclaration(t)||!e.isExternalModule(Zt)&&Wt.isTopLevelValueImportEqualsWithEntityName(t)}function dt(n){if(e.isExternalModuleImportEqualsDeclaration(n))return Wt.isReferencedAliasDeclaration(n)?e.visitEachChild(n,u,t):void 0;if(_t(n)){var r=e.createExpressionFromEntityName(n.moduleReference);return e.setEmitFlags(r,3584),gt(n)||!pt(n)?e.setOriginalNode(e.setTextRange(e.createVariableStatement(e.visitNodes(n.modifiers,y,e.isModifier),e.createVariableDeclarationList([e.setOriginalNode(e.createVariableDeclaration(n.name,void 0,r),n)])),n),n):e.setOriginalNode(vt(n.name,r,n),n)}}function pt(t){return void 0!==en&&e.hasModifier(t,1)}function ft(t){return void 0===en&&e.hasModifier(t,1)}function gt(t){return ft(t)&&!e.hasModifier(t,512)}function mt(t){return ft(t)&&e.hasModifier(t,512)}function yt(t){return e.createStatement(t)}function ht(t,n){var r=e.createAssignment(e.getExternalModuleOrNamespaceExportName(tn,n,!1,!0),e.getLocalName(n));e.setSourceMapRange(r,e.createRange(n.name.pos,n.end));var a=e.createStatement(r);e.setSourceMapRange(a,e.createRange(-1,n.end)),t.push(a);}function vt(t,n,r){return e.setTextRange(e.createStatement(e.createAssignment(e.getNamespaceMemberName(tn,t,!1,!0),n)),r)}function bt(t,n,r){return e.setTextRange(e.createAssignment(xt(t),n),r)}function xt(t){return e.getNamespaceMemberName(tn,t,!1,!0)}function kt(t){var n=e.getGeneratedNameForNode(t);return e.setSourceMapRange(n,t.name),n}function St(t){return e.getGeneratedNameForNode(t)}function Tt(t){if(8388608&Wt.getNodeCheckFlags(t)){Nt();var n=e.createUniqueName(t.name&&!e.isGeneratedIdentifier(t.name)?e.unescapeIdentifier(t.name.text):\"default\");return on$$1[e.getOriginalNodeId(t)]=n,$t(n),n}}function Ct(t){return e.createPropertyAccess(e.getDeclarationName(t),\"prototype\")}function Dt(t,n){return e.hasModifier(n,32)?e.getDeclarationName(t):Ct(t)}function Et(){0==(8&an)&&(an|=8,t.enableSubstitution(71));}function Nt(){0==(1&an)&&(an|=1,t.enableSubstitution(71),on$$1=[]);}function At(){0==(2&an)&&(an|=2,t.enableSubstitution(71),t.enableSubstitution(262),t.enableEmitNotification(233));}function wt(t){return 233===e.getOriginalNode(t).kind}function Pt(t){return 232===e.getOriginalNode(t).kind}function Ot(t,n,r){var a=sn,i=Zt;e.isSourceFile(n)&&(Zt=n),2&an&&wt(n)&&(sn|=2),8&an&&Pt(n)&&(sn|=8),Yt(t,n,r),sn=a,Zt=i;}function Ft(t,n){return n=Qt(t,n),1===t?Mt(n):e.isShorthandPropertyAssignment(n)?It(n):n}function It(t){if(2&an){var n=t.name,r=Bt(n);if(r){if(t.objectAssignmentInitializer){var a=e.createAssignment(r,t.objectAssignmentInitializer);return e.setTextRange(e.createPropertyAssignment(n,a),t)}return e.setTextRange(e.createPropertyAssignment(n,r),t)}}return t}function Mt(e){switch(e.kind){case 71:return Rt(e);case 179:return Kt(e);case 180:return jt(e)}return e}function Rt(e){return Lt(e)||Bt(e)||e}function Lt(t){if(1&an&&16777216&Wt.getNodeCheckFlags(t)){var n=Wt.getReferencedValueDeclaration(t);if(n){var r=on$$1[n.id];if(r){var a=e.getSynthesizedClone(r);return e.setSourceMapRange(a,t),e.setCommentRange(a,t),a}}}}function Bt(t){if(an&sn&&!e.isGeneratedIdentifier(t)&&!e.isLocalName(t)){var n=Wt.getReferencedExportContainer(t,!1);if(n&&265!==n.kind&&(2&sn&&233===n.kind||8&sn&&232===n.kind))return e.setTextRange(e.createPropertyAccess(e.getGeneratedNameForNode(n),t),t)}}function Kt(e){return Jt(e)}function jt(e){return Jt(e)}function Jt(t){var n=zt(t);if(void 0!==n){e.setConstantValue(t,n);var r=e.createLiteral(n);if(!Ht.removeComments){var a=e.isPropertyAccessExpression(t)?e.declarationNameToString(t.name):e.getTextOfNode(t.argumentExpression);e.addSyntheticTrailingComment(r,3,\" \"+a+\" \");}return r}return t}function zt(t){if(!Ht.isolatedModules)return e.isPropertyAccessExpression(t)||e.isElementAccessExpression(t)?Wt.getConstantValue(t):void 0}var Ut=t.startLexicalEnvironment,qt=t.resumeLexicalEnvironment,Vt=t.endLexicalEnvironment,$t=t.hoistVariableDeclaration,Wt=t.getEmitResolver(),Ht=t.getCompilerOptions(),Gt=e.getEmitScriptTarget(Ht),Xt=e.getEmitModuleKind(Ht),Yt=t.onEmitNode,Qt=t.onSubstituteNode;t.onEmitNode=Ot,t.onSubstituteNode=Ft,t.enableSubstitution(179),t.enableSubstitution(180);var Zt,en,tn,nn,rn,an,on$$1,sn;return i}function n(t,n,r,a,i,o){var s=[];return s.push(e.createArrayLiteral(n,!0)),s.push(r),a&&(s.push(a),i&&s.push(i)),t.requestEmitHelper(c),e.setTextRange(e.createCall(e.getHelperName(\"__decorate\"),void 0,s),o)}function r(t,n,r){return t.requestEmitHelper(u),e.createCall(e.getHelperName(\"__metadata\"),void 0,[e.createLiteral(n),r])}function a(t,n,r,a){return t.requestEmitHelper(l),e.setTextRange(e.createCall(e.getHelperName(\"__param\"),void 0,[e.createLiteral(r),n]),a)}var i,o=!1;!function(e){e[e.ClassAliases=1]=\"ClassAliases\",e[e.NamespaceExports=2]=\"NamespaceExports\",e[e.NonQualifiedEnumMembers=8]=\"NonQualifiedEnumMembers\";}(i||(i={}));var s;!function(e){e[e.None=0]=\"None\",e[e.HasStaticInitializedProperties=1]=\"HasStaticInitializedProperties\",e[e.HasConstructorDecorators=2]=\"HasConstructorDecorators\",e[e.HasMemberDecorators=4]=\"HasMemberDecorators\",e[e.IsExportOfNamespace=8]=\"IsExportOfNamespace\",e[e.IsNamedExternalExport=16]=\"IsNamedExternalExport\",e[e.IsDefaultExternalExport=32]=\"IsDefaultExternalExport\",e[e.HasExtendsClause=64]=\"HasExtendsClause\",e[e.UseImmediatelyInvokedFunctionExpression=128]=\"UseImmediatelyInvokedFunctionExpression\",e[e.HasAnyDecorators=6]=\"HasAnyDecorators\",e[e.NeedsName=5]=\"NeedsName\",e[e.MayNeedImmediatelyInvokedFunctionExpression=7]=\"MayNeedImmediatelyInvokedFunctionExpression\",e[e.IsExported=56]=\"IsExported\";}(s||(s={})),e.transformTypeScript=t;var c={name:\"typescript:decorate\",scoped:!1,priority:2,text:'\\n            var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\\n                var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\\n                else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\\n            };'},u={name:\"typescript:metadata\",scoped:!1,priority:3,text:'\\n            var __metadata = (this && this.__metadata) || function (k, v) {\\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\\n            };'},l={name:\"typescript:param\",scoped:!1,priority:4,text:\"\\n            var __param = (this && this.__param) || function (paramIndex, decorator) {\\n                return function (target, key) { decorator(target, key, paramIndex); }\\n            };\"};}(r||(r={}));!function(e){function t(t){function r(n){if(n.isDeclarationFile)return n;k=n;var r=e.visitEachChild(n,a,t);return e.addEmitHelpers(r,t.readEmitHelpers()),k=void 0,r}function a(n){if(0==(16&n.transformFlags))return n;switch(n.kind){case 120:return;case 191:return i(n);case 151:return o(n);case 228:return s(n);case 186:return c(n);case 187:return u(n);default:return e.visitEachChild(n,a,t)}}function i(t){return e.setOriginalNode(e.setTextRange(e.createYield(void 0,e.visitNode(t.expression,a,e.isExpression)),t),t)}function o(n){return e.updateMethod(n,void 0,e.visitNodes(n.modifiers,a,e.isModifier),n.asteriskToken,n.name,void 0,void 0,e.visitParameterList(n.parameters,a,t),void 0,2&e.getFunctionFlags(n)?l(n):e.visitFunctionBody(n.body,a,t))}function s(n){return e.updateFunctionDeclaration(n,void 0,e.visitNodes(n.modifiers,a,e.isModifier),n.asteriskToken,n.name,void 0,e.visitParameterList(n.parameters,a,t),void 0,2&e.getFunctionFlags(n)?l(n):e.visitFunctionBody(n.body,a,t))}function c(n){return e.updateFunctionExpression(n,e.visitNodes(n.modifiers,a,e.isModifier),n.asteriskToken,n.name,void 0,e.visitParameterList(n.parameters,a,t),void 0,2&e.getFunctionFlags(n)?l(n):e.visitFunctionBody(n.body,a,t))}function u(n){return e.updateArrowFunction(n,e.visitNodes(n.modifiers,a,e.isModifier),void 0,e.visitParameterList(n.parameters,a,t),void 0,2&e.getFunctionFlags(n)?l(n):e.visitFunctionBody(n.body,a,t))}function l(r){C();var i=e.getOriginalNode(r,e.isFunctionLike).type,o=A<2?d(i):void 0,s=187===r.kind,c=0!=(8192&E.getNodeCheckFlags(r));if(s){var u=n(t,c,o,_(r.body)),l=D();if(e.some(l)){m=e.convertToFunctionBody(u);return e.updateBlock(m,e.setTextRange(e.createNodeArray(e.concatenate(m.statements,l)),m.statements))}return u}var f=[],g=e.addPrologue(f,r.body.statements,!1,a);f.push(e.createReturn(n(t,c,o,_(r.body,g)))),e.addRange(f,D());var m=e.createBlock(f,!0);return e.setTextRange(m,r.body),A>=2&&(4096&E.getNodeCheckFlags(r)?(p(),e.addEmitHelper(m,e.advancedAsyncSuperHelper)):2048&E.getNodeCheckFlags(r)&&(p(),e.addEmitHelper(m,e.asyncSuperHelper))),m}function _(n,r){if(e.isBlock(n))return e.updateBlock(n,e.visitLexicalEnvironment(n.statements,a,t,r));T();var i=e.convertToFunctionBody(e.visitNode(n,a,e.isConciseBody)),o=D();return e.updateBlock(i,e.setTextRange(e.createNodeArray(e.concatenate(i.statements,o)),i.statements))}function d(t){var n=t&&e.getEntityNameFromTypeNode(t);if(n&&e.isEntityName(n)){var r=E.getTypeReferenceSerializationKind(n);if(r===e.TypeReferenceSerializationKind.TypeWithConstructSignatureAndValue||r===e.TypeReferenceSerializationKind.Unknown)return n}}function p(){0==(1&S)&&(S|=1,t.enableSubstitution(181),t.enableSubstitution(179),t.enableSubstitution(180),t.enableEmitNotification(229),t.enableEmitNotification(151),t.enableEmitNotification(153),t.enableEmitNotification(154),t.enableEmitNotification(152));}function f(e,t,n){if(1&S&&b(t)){var r=6144&E.getNodeCheckFlags(t);if(r!==w){var a=w;return w=r,P(e,t,n),void(w=a)}}P(e,t,n);}function g(e,t){return t=O(e,t),1===e&&w?m(t):t}function m(e){switch(e.kind){case 179:return y(e);case 180:return h(e);case 181:return v(e)}return e}function y(t){return 97===t.expression.kind?x(e.createLiteral(t.name.text),t):t}function h(e){return 97===e.expression.kind?x(e.argumentExpression,e):e}function v(t){var n=t.expression;if(e.isSuperProperty(n)){var r=e.isPropertyAccessExpression(n)?y(n):h(n);return e.createCall(e.createPropertyAccess(r,\"call\"),void 0,[e.createThis()].concat(t.arguments))}return t}function b(e){var t=e.kind;return 229===t||152===t||151===t||153===t||154===t}function x(t,n){return 4096&w?e.setTextRange(e.createPropertyAccess(e.createCall(e.createIdentifier(\"_super\"),void 0,[t]),\"value\"),n):e.setTextRange(e.createCall(e.createIdentifier(\"_super\"),void 0,[t]),n)}var k,S,T=t.startLexicalEnvironment,C=t.resumeLexicalEnvironment,D=t.endLexicalEnvironment,E=t.getEmitResolver(),N=t.getCompilerOptions(),A=e.getEmitScriptTarget(N),w=0,P=t.onEmitNode,O=t.onSubstituteNode;return t.onEmitNode=f,t.onSubstituteNode=g,r}function n(t,n,r,i){t.requestEmitHelper(a);var o=e.createFunctionExpression(void 0,e.createToken(39),void 0,void 0,[],void 0,i);return(o.emitNode||(o.emitNode={})).flags|=262144,e.createCall(e.getHelperName(\"__awaiter\"),void 0,[e.createThis(),n?e.createIdentifier(\"arguments\"):e.createVoidZero(),r?e.createExpressionFromEntityName(r):e.createVoidZero(),o])}var r;!function(e){e[e.AsyncMethodsWithSuper=1]=\"AsyncMethodsWithSuper\";}(r||(r={})),e.transformES2017=t;var a={name:\"typescript:awaiter\",scoped:!1,priority:5,text:'\\n            var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\\n                return new (P || (P = Promise))(function (resolve, reject) {\\n                    function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\\n                    function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\\n                    function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\\n                    step((generator = generator.apply(thisArg, _arguments || [])).next());\\n                });\\n            };'};e.asyncSuperHelper={name:\"typescript:async-super\",scoped:!0,text:\"\\n            const _super = name => super[name];\\n        \"},e.advancedAsyncSuperHelper={name:\"typescript:advanced-async-super\",scoped:!0,text:\"\\n            const _super = (function (geti, seti) {\\n                const cache = Object.create(null);\\n                return name => cache[name] || (cache[name] = { get value() { return geti(name); }, set value(v) { seti(name, v); } });\\n            })(name => super[name], (name, value) => super[name] = value);\\n        \"};}(r||(r={}));!function(e){function t(t){function s(n){if(n.isDeclarationFile)return n;var r=e.visitEachChild(n,c,t);return e.addEmitHelpers(r,t.readEmitHelpers()),r}function c(e){return _(e,!1)}function u(e){return _(e,!0)}function l(e){if(120!==e.kind)return e}function _(n,r){if(0==(8&n.transformFlags))return n;switch(n.kind){case 191:return d(n);case 197:return p(n);case 222:return f(n);case 178:return m(n);case 194:return v(n,r);case 226:return b(n);case 216:return S(n,void 0);case 214:return x(n);case 190:return k(n);case 152:return A(n);case 151:return O(n);case 153:return w(n);case 154:return P(n);case 228:return F(n);case 186:return M(n);case 187:return I(n);case 146:return N(n);case 210:return y(n);case 185:return h(n,r);default:return e.visitEachChild(n,c,t)}}function d(n){return 2&re&&1&re?e.setOriginalNode(e.setTextRange(e.createYield(r(t,e.visitNode(n.expression,c,e.isExpression))),n),n):e.visitEachChild(n,c,t)}function p(n){if(2&re&&1&re&&n.asteriskToken){var a=e.visitNode(n.expression,c,e.isExpression);return e.setOriginalNode(e.setTextRange(e.createYield(r(t,e.updateYield(n,n.asteriskToken,i(t,o(t,a,a),a)))),n),n)}return e.visitEachChild(n,c,t)}function f(n){if(2&re&&1&re){var r=e.unwrapInnermostStatementOfLabel(n);return 216===r.kind&&r.awaitModifier?S(r,n):e.restoreEnclosingLabel(e.visitEachChild(n,c,t),n)}return e.visitEachChild(n,c,t)}function g(t){for(var n,r=[],a=0,i=t;a<i.length;a++){var o=i[a];if(263===o.kind){n&&(r.push(e.createObjectLiteral(n)),n=void 0);var s=o.expression;r.push(e.visitNode(s,c,e.isExpression));}else if(n||(n=[]),261===o.kind){var u=o;n.push(e.createPropertyAssignment(u.name,e.visitNode(u.initializer,c,e.isExpression)));}else n.push(o);}return n&&r.push(e.createObjectLiteral(n)),r}function m(r){if(1048576&r.transformFlags){var a=g(r.properties);return a.length&&178!==a[0].kind&&a.unshift(e.createObjectLiteral()),n(t,a)}return e.visitEachChild(r,c,t)}function y(n){return e.visitEachChild(n,u,t)}function h(n,r){return e.visitEachChild(n,r?u:c,t)}function v(n,r){return e.isDestructuringAssignment(n)&&1048576&n.left.transformFlags?e.flattenDestructuringAssignment(n,c,t,1,!r):26===n.operatorToken.kind?e.updateBinary(n,e.visitNode(n.left,u,e.isExpression),e.visitNode(n.right,r?u:c,e.isExpression)):e.visitEachChild(n,c,t)}function b(n){return e.isBindingPattern(n.name)&&1048576&n.name.transformFlags?e.flattenDestructuringBinding(n,c,t,1):e.visitEachChild(n,c,t)}function x(t){return e.updateFor(t,e.visitNode(t.initializer,u,e.isForInitializer),e.visitNode(t.condition,c,e.isExpression),e.visitNode(t.incrementor,c,e.isExpression),e.visitNode(t.statement,c,e.isStatement))}function k(n){return e.visitEachChild(n,u,t)}function S(n,r){return 1048576&n.initializer.transformFlags&&(n=T(n)),n.awaitModifier?E(n,r):e.restoreEnclosingLabel(e.visitEachChild(n,c,t),r)}function T(t){var n=e.skipParentheses(t.initializer);if(e.isVariableDeclarationList(n)||e.isAssignmentPattern(n)){var r=void 0,a=void 0,i=e.createTempVariable(void 0),o=[e.createForOfBindingStatement(n,i)];return e.isBlock(t.statement)&&(e.addRange(o,t.statement.statements),r=t.statement,a=t.statement.statements),e.updateForOf(t,t.awaitModifier,e.setTextRange(e.createVariableDeclarationList([e.setTextRange(e.createVariableDeclaration(i),t.initializer)],1),t.initializer),t.expression,e.setTextRange(e.createBlock(e.setTextRange(e.createNodeArray(o),a),!0),r))}return t}function C(t,n){var r,a,i=e.createForOfBindingStatement(t.initializer,n),o=[e.visitNode(i,c,e.isStatement)],s=e.visitNode(t.statement,c,e.isStatement);return e.isBlock(s)?(e.addRange(o,s.statements),r=s,a=s.statements):o.push(s),e.setEmitFlags(e.setTextRange(e.createBlock(e.setTextRange(e.createNodeArray(o),a),!0),r),432)}function D(n){return 1&re?e.createYield(void 0,r(t,n)):e.createAwait(n)}function E(n,r){var a=e.visitNode(n.expression,c,e.isExpression),i=e.isIdentifier(a)?e.getGeneratedNameForNode(a):e.createTempVariable(void 0),s=e.isIdentifier(a)?e.getGeneratedNameForNode(i):e.createTempVariable(void 0),u=e.createUniqueName(\"e\"),l=e.getGeneratedNameForNode(u),_=e.createTempVariable(void 0),d=o(t,a,n.expression),p=e.createCall(e.createPropertyAccess(i,\"next\"),void 0,[]),f=e.createPropertyAccess(s,\"done\"),g=e.createPropertyAccess(s,\"value\"),m=e.createFunctionCall(_,i,[]);X(u),X(_);var y=e.setEmitFlags(e.setTextRange(e.createFor(e.setEmitFlags(e.setTextRange(e.createVariableDeclarationList([e.setTextRange(e.createVariableDeclaration(i,void 0,d),n.expression),e.createVariableDeclaration(s)]),n.expression),2097152),e.createComma(e.createAssignment(s,D(p)),e.createLogicalNot(f)),void 0,C(n,D(g))),n),256);return e.createTry(e.createBlock([e.restoreEnclosingLabel(y,r)]),e.createCatchClause(e.createVariableDeclaration(l),e.setEmitFlags(e.createBlock([e.createStatement(e.createAssignment(u,e.createObjectLiteral([e.createPropertyAssignment(\"error\",l)])))]),1)),e.createBlock([e.createTry(e.createBlock([e.setEmitFlags(e.createIf(e.createLogicalAnd(e.createLogicalAnd(s,e.createLogicalNot(f)),e.createAssignment(_,e.createPropertyAccess(i,\"return\"))),e.createStatement(D(m))),1)]),void 0,e.setEmitFlags(e.createBlock([e.setEmitFlags(e.createIf(u,e.createThrow(e.createPropertyAccess(u,\"error\"))),1)]),1))]))}function N(n){return 1048576&n.transformFlags?e.updateParameter(n,void 0,void 0,n.dotDotDotToken,e.getGeneratedNameForNode(n),void 0,void 0,e.visitNode(n.initializer,c,e.isExpression)):e.visitEachChild(n,c,t)}function A(n){var r=re;re=0;var a=e.updateConstructor(n,void 0,n.modifiers,e.visitParameterList(n.parameters,c,t),L(n));return re=r,a}function w(n){var r=re;re=0;var a=e.updateGetAccessor(n,void 0,n.modifiers,e.visitNode(n.name,c,e.isPropertyName),e.visitParameterList(n.parameters,c,t),void 0,L(n));return re=r,a}function P(n){var r=re;re=0;var a=e.updateSetAccessor(n,void 0,n.modifiers,e.visitNode(n.name,c,e.isPropertyName),e.visitParameterList(n.parameters,c,t),L(n));return re=r,a}function O(n){var r=re;re=e.getFunctionFlags(n);var a=e.updateMethod(n,void 0,1&re?e.visitNodes(n.modifiers,l,e.isModifier):n.modifiers,2&re?void 0:n.asteriskToken,e.visitNode(n.name,c,e.isPropertyName),e.visitNode(void 0,c,e.isToken),void 0,e.visitParameterList(n.parameters,c,t),void 0,2&re&&1&re?R(n):L(n));return re=r,a}function F(n){var r=re;re=e.getFunctionFlags(n);var a=e.updateFunctionDeclaration(n,void 0,1&re?e.visitNodes(n.modifiers,l,e.isModifier):n.modifiers,2&re?void 0:n.asteriskToken,n.name,void 0,e.visitParameterList(n.parameters,c,t),void 0,2&re&&1&re?R(n):L(n));return re=r,a}function I(n){var r=re;re=e.getFunctionFlags(n);var a=e.updateArrowFunction(n,n.modifiers,void 0,e.visitParameterList(n.parameters,c,t),void 0,L(n));return re=r,a}function M(n){var r=re;re=e.getFunctionFlags(n);var a=e.updateFunctionExpression(n,1&re?e.visitNodes(n.modifiers,l,e.isModifier):n.modifiers,2&re?void 0:n.asteriskToken,n.name,void 0,e.visitParameterList(n.parameters,c,t),void 0,2&re&&1&re?R(n):L(n));return re=r,a}function R(n){H();var r=[],i=e.addPrologue(r,n.body.statements,!1,c);B(r,n),r.push(e.createReturn(a(t,e.createFunctionExpression(void 0,e.createToken(39),n.name&&e.getGeneratedNameForNode(n.name),void 0,[],void 0,e.updateBlock(n.body,e.visitLexicalEnvironment(n.body.statements,c,t,i)))))),e.addRange(r,G());var o=e.updateBlock(n.body,r);return Z>=2&&(4096&Y.getNodeCheckFlags(n)?(K(),e.addEmitHelper(o,e.advancedAsyncSuperHelper)):2048&Y.getNodeCheckFlags(n)&&(K(),e.addEmitHelper(o,e.asyncSuperHelper))),o}function L(t){H();var n=0,r=[],a=e.visitNode(t.body,c,e.isConciseBody);e.isBlock(a)&&(n=e.addPrologue(r,a.statements,!1,c)),e.addRange(r,B(void 0,t));var i=G();if(n>0||e.some(r)||e.some(i)){var o=e.convertToFunctionBody(a,!0);return e.addRange(r,o.statements.slice(n)),e.addRange(r,i),e.updateBlock(o,e.setTextRange(e.createNodeArray(r),o.statements))}return a}function B(n,r){for(var a=0,i=r.parameters;a<i.length;a++){var o=i[a];if(1048576&o.transformFlags){var s=e.getGeneratedNameForNode(o),u=e.flattenDestructuringBinding(o,c,t,1,s,!1,!0);if(e.some(u)){var l=e.createVariableStatement(void 0,e.createVariableDeclarationList(u));e.setEmitFlags(l,1048576),n=e.append(n,l);}}}return n}function K(){0==(1&ne)&&(ne|=1,t.enableSubstitution(181),t.enableSubstitution(179),t.enableSubstitution(180),t.enableEmitNotification(229),t.enableEmitNotification(151),t.enableEmitNotification(153),t.enableEmitNotification(154),t.enableEmitNotification(152));}function j(e,t,n){if(1&ne&&$(t)){var r=6144&Y.getNodeCheckFlags(t);if(r!==ae){var a=ae;return ae=r,ee(e,t,n),void(ae=a)}}ee(e,t,n);}function J(e,t){return t=te(e,t),1===e&&ae?z(t):t}function z(e){switch(e.kind){case 179:return U(e);case 180:return q(e);case 181:return V(e)}return e}function U(t){return 97===t.expression.kind?W(e.createLiteral(t.name.text),t):t}function q(e){return 97===e.expression.kind?W(e.argumentExpression,e):e}function V(t){var n=t.expression;if(e.isSuperProperty(n)){var r=e.isPropertyAccessExpression(n)?U(n):q(n);return e.createCall(e.createPropertyAccess(r,\"call\"),void 0,[e.createThis()].concat(t.arguments))}return t}function $(e){var t=e.kind;return 229===t||152===t||151===t||153===t||154===t}function W(t,n){return 4096&ae?e.setTextRange(e.createPropertyAccess(e.createCall(e.createIdentifier(\"_super\"),void 0,[t]),\"value\"),n):e.setTextRange(e.createCall(e.createIdentifier(\"_super\"),void 0,[t]),n)}var H=t.resumeLexicalEnvironment,G=t.endLexicalEnvironment,X=t.hoistVariableDeclaration,Y=t.getEmitResolver(),Q=t.getCompilerOptions(),Z=e.getEmitScriptTarget(Q),ee=t.onEmitNode;t.onEmitNode=j;var te=t.onSubstituteNode;t.onSubstituteNode=J;var ne,re,ae=0;return s}function n(t,n){return t.getCompilerOptions().target>=2?e.createCall(e.createPropertyAccess(e.createIdentifier(\"Object\"),\"assign\"),void 0,n):(t.requestEmitHelper(c),e.createCall(e.getHelperName(\"__assign\"),void 0,n))}function r(t,n){return t.requestEmitHelper(u),e.createCall(e.getHelperName(\"__await\"),void 0,[n])}function a(t,n){return t.requestEmitHelper(u),t.requestEmitHelper(l),(n.emitNode||(n.emitNode={})).flags|=262144,e.createCall(e.getHelperName(\"__asyncGenerator\"),void 0,[e.createThis(),e.createIdentifier(\"arguments\"),n])}function i(t,n,r){return t.requestEmitHelper(u),t.requestEmitHelper(_),e.setTextRange(e.createCall(e.getHelperName(\"__asyncDelegator\"),void 0,[n]),r)}function o(t,n,r){return t.requestEmitHelper(d),e.setTextRange(e.createCall(e.getHelperName(\"__asyncValues\"),void 0,[n]),r)}var s;!function(e){e[e.AsyncMethodsWithSuper=1]=\"AsyncMethodsWithSuper\";}(s||(s={})),e.transformESNext=t;var c={name:\"typescript:assign\",scoped:!1,priority:1,text:\"\\n            var __assign = (this && this.__assign) || Object.assign || function(t) {\\n                for (var s, i = 1, n = arguments.length; i < n; i++) {\\n                    s = arguments[i];\\n                    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\\n                        t[p] = s[p];\\n                }\\n                return t;\\n            };\"};e.createAssignHelper=n;var u={name:\"typescript:await\",scoped:!1,text:\"\\n            var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }\\n        \"},l={name:\"typescript:asyncGenerator\",scoped:!1,text:'\\n            var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {\\n                if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\\n                var g = generator.apply(thisArg, _arguments || []), i, q = [];\\n                return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\\n                function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\\n                function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\\n                function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);  }\\n                function fulfill(value) { resume(\"next\", value); }\\n                function reject(value) { resume(\"throw\", value); }\\n                function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\\n            };\\n        '},_={name:\"typescript:asyncDelegator\",scoped:!1,text:'\\n            var __asyncDelegator = (this && this.__asyncDelegator) || function (o) {\\n                var i, p;\\n                return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\\n                function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; }; }\\n            };\\n        '},d={name:\"typescript:asyncValues\",scoped:!1,text:'\\n            var __asyncValues = (this && this.__asyncIterator) || function (o) {\\n                if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\\n                var m = o[Symbol.asyncIterator];\\n                return m ? m.call(o) : typeof __values === \"function\" ? __values(o) : o[Symbol.iterator]();\\n            };\\n        '};}(r||(r={}));!function(e){function t(t){function r(n){if(n.isDeclarationFile)return n;var r=e.visitEachChild(n,a,t);return e.addEmitHelpers(r,t.readEmitHelpers()),r}function a(e){return 4&e.transformFlags?i(e):e}function i(n){switch(n.kind){case 249:return s(n,!1);case 250:return c(n,!1);case 256:return b(n);default:return e.visitEachChild(n,a,t)}}function o(t){switch(t.kind){case 10:return p(t);case 256:return b(t);case 249:return s(t,!0);case 250:return c(t,!0);default:return void e.Debug.failBadSyntaxKind(t)}}function s(e,t){return u(e.openingElement,e.children,t,e)}function c(e,t){return u(e,void 0,t,e)}function u(n,r,a,i){var s,c=h(n),u=n.attributes.properties;if(0===u.length)s=e.createNull();else{var d=e.flatten(e.spanMap(u,e.isJsxSpreadAttribute,function(t,n){return n?e.map(t,l):e.createObjectLiteral(e.map(t,_))}));e.isJsxSpreadAttribute(u[0])&&d.unshift(e.createObjectLiteral()),(s=e.singleOrUndefined(d))||(s=e.createAssignHelper(t,d));}var p=e.createExpressionForJsxElement(t.getEmitResolver().getJsxFactoryEntity(),x.reactNamespace,c,s,e.filter(e.map(r,o),e.isDefined),n,i);return a&&e.startOnNewLine(p),p}function l(t){return e.visitNode(t.expression,a,e.isExpression)}function _(t){var n=v(t),r=d(t.initializer);return e.createPropertyAssignment(n,r)}function d(t){if(void 0===t)return e.createTrue();if(9===t.kind){var n=y(t.text);return n?e.setTextRange(e.createLiteral(n),t):t}if(256===t.kind)return void 0===t.expression?e.createTrue():b(t);e.Debug.failBadSyntaxKind(t);}function p(t){var n=f(e.getTextOfNode(t,!0));return void 0===n?void 0:e.createLiteral(n)}function f(t){for(var n,r=0,a=-1,i=0;i<t.length;i++){var o=t.charCodeAt(i);e.isLineBreak(o)?(-1!==r&&-1!==a&&(n=g(n,t.substr(r,a-r+1))),r=-1):e.isWhiteSpaceSingleLine(o)||(a=i,-1===r&&(r=i));}return-1!==r?g(n,t.substr(r)):n}function g(e,t){var n=m(t);return void 0===e?n:e+\" \"+n}function m(e){return e.replace(/&((#((\\d+)|x([\\da-fA-F]+)))|(\\w+));/g,function(e,t,r,a,i,o,s){if(i)return String.fromCharCode(parseInt(i,10));if(o)return String.fromCharCode(parseInt(o,16));var c=n.get(s);return c?String.fromCharCode(c):e})}function y(e){var t=m(e);return t===e?void 0:t}function h(t){if(249===t.kind)return h(t.openingElement);var n=t.tagName;return e.isIdentifier(n)&&e.isIntrinsicJsxName(n.text)?e.createLiteral(n.text):e.createExpressionFromEntityName(n)}function v(t){var n=t.name;return/^[A-Za-z_]\\w*$/.test(n.text)?n:e.createLiteral(n.text)}function b(t){return e.visitNode(t.expression,a,e.isExpression)}var x=t.getCompilerOptions();return r}e.transformJsx=t;var n=e.createMapFromTemplate({quot:34,amp:38,apos:39,lt:60,gt:62,nbsp:160,iexcl:161,cent:162,pound:163,curren:164,yen:165,brvbar:166,sect:167,uml:168,copy:169,ordf:170,laquo:171,not:172,shy:173,reg:174,macr:175,deg:176,plusmn:177,sup2:178,sup3:179,acute:180,micro:181,para:182,middot:183,cedil:184,sup1:185,ordm:186,raquo:187,frac14:188,frac12:189,frac34:190,iquest:191,Agrave:192,Aacute:193,Acirc:194,Atilde:195,Auml:196,Aring:197,AElig:198,Ccedil:199,Egrave:200,Eacute:201,Ecirc:202,Euml:203,Igrave:204,Iacute:205,Icirc:206,Iuml:207,ETH:208,Ntilde:209,Ograve:210,Oacute:211,Ocirc:212,Otilde:213,Ouml:214,times:215,Oslash:216,Ugrave:217,Uacute:218,Ucirc:219,Uuml:220,Yacute:221,THORN:222,szlig:223,agrave:224,aacute:225,acirc:226,atilde:227,auml:228,aring:229,aelig:230,ccedil:231,egrave:232,eacute:233,ecirc:234,euml:235,igrave:236,iacute:237,icirc:238,iuml:239,eth:240,ntilde:241,ograve:242,oacute:243,ocirc:244,otilde:245,ouml:246,divide:247,oslash:248,ugrave:249,uacute:250,ucirc:251,uuml:252,yacute:253,thorn:254,yuml:255,OElig:338,oelig:339,Scaron:352,scaron:353,Yuml:376,fnof:402,circ:710,tilde:732,Alpha:913,Beta:914,Gamma:915,Delta:916,Epsilon:917,Zeta:918,Eta:919,Theta:920,Iota:921,Kappa:922,Lambda:923,Mu:924,Nu:925,Xi:926,Omicron:927,Pi:928,Rho:929,Sigma:931,Tau:932,Upsilon:933,Phi:934,Chi:935,Psi:936,Omega:937,alpha:945,beta:946,gamma:947,delta:948,epsilon:949,zeta:950,eta:951,theta:952,iota:953,kappa:954,lambda:955,mu:956,nu:957,xi:958,omicron:959,pi:960,rho:961,sigmaf:962,sigma:963,tau:964,upsilon:965,phi:966,chi:967,psi:968,omega:969,thetasym:977,upsih:978,piv:982,ensp:8194,emsp:8195,thinsp:8201,zwnj:8204,zwj:8205,lrm:8206,rlm:8207,ndash:8211,mdash:8212,lsquo:8216,rsquo:8217,sbquo:8218,ldquo:8220,rdquo:8221,bdquo:8222,dagger:8224,Dagger:8225,bull:8226,hellip:8230,permil:8240,prime:8242,Prime:8243,lsaquo:8249,rsaquo:8250,oline:8254,frasl:8260,euro:8364,image:8465,weierp:8472,real:8476,trade:8482,alefsym:8501,larr:8592,uarr:8593,rarr:8594,darr:8595,harr:8596,crarr:8629,lArr:8656,uArr:8657,rArr:8658,dArr:8659,hArr:8660,forall:8704,part:8706,exist:8707,empty:8709,nabla:8711,isin:8712,notin:8713,ni:8715,prod:8719,sum:8721,minus:8722,lowast:8727,radic:8730,prop:8733,infin:8734,ang:8736,and:8743,or:8744,cap:8745,cup:8746,int:8747,there4:8756,sim:8764,cong:8773,asymp:8776,ne:8800,equiv:8801,le:8804,ge:8805,sub:8834,sup:8835,nsub:8836,sube:8838,supe:8839,oplus:8853,otimes:8855,perp:8869,sdot:8901,lceil:8968,rceil:8969,lfloor:8970,rfloor:8971,lang:9001,rang:9002,loz:9674,spades:9824,clubs:9827,hearts:9829,diams:9830});}(r||(r={}));!function(e){function t(t){function n(n){return n.isDeclarationFile?n:e.visitEachChild(n,r,t)}function r(n){if(0==(32&n.transformFlags))return n;switch(n.kind){case 194:return a(n);default:return e.visitEachChild(n,r,t)}}function a(n){switch(n.operatorToken.kind){case 62:return i(n);case 40:return o(n);default:return e.visitEachChild(n,r,t)}}function i(t){var n,a,i=e.visitNode(t.left,r,e.isExpression),o=e.visitNode(t.right,r,e.isExpression);if(e.isElementAccessExpression(i)){var c=e.createTempVariable(s),u=e.createTempVariable(s);n=e.setTextRange(e.createElementAccess(e.setTextRange(e.createAssignment(c,i.expression),i.expression),e.setTextRange(e.createAssignment(u,i.argumentExpression),i.argumentExpression)),i),a=e.setTextRange(e.createElementAccess(c,u),i);}else if(e.isPropertyAccessExpression(i)){c=e.createTempVariable(s);n=e.setTextRange(e.createPropertyAccess(e.setTextRange(e.createAssignment(c,i.expression),i.expression),i.name),i),a=e.setTextRange(e.createPropertyAccess(c,i.name),i);}else n=i,a=i;return e.setTextRange(e.createAssignment(n,e.createMathPow(a,o,t)),t)}function o(t){var n=e.visitNode(t.left,r,e.isExpression),a=e.visitNode(t.right,r,e.isExpression);return e.createMathPow(n,a,t)}var s=t.hoistVariableDeclaration;return n}e.transformES2016=t;}(r||(r={}));!function(e){function t(t){function r(n){if(n.isDeclarationFile)return n;Ot=n,Ft=n.text;var r=f(n);return e.addEmitHelpers(r,t.readEmitHelpers()),Ot=void 0,Ft=void 0,It=0,r}function a(e,t){var n=It;return It=16383&(It&~e|t),n}function i(e,t,n){It=-16384&(It&~t|n)|e;}function o(e){return 4096&It&&219===e.kind&&!e.expression}function s(t){if(!e.isVariableStatement(t))return!1;var n=e.singleOrUndefined(t.declarationList.declarations);return n&&n.initializer&&e.isIdentifier(n.name)&&(e.isClassLike(n.initializer)||e.isAssignmentExpression(n.initializer)&&e.isIdentifier(n.initializer.left)&&e.isClassLike(n.initializer.right))}function c(t){var n=e.tryCast(t,e.isCallExpression);if(!n||e.isParseTreeNode(n)||e.some(n.typeArguments)||e.some(n.arguments))return!1;var r=e.tryCast(e.skipOuterExpressions(n.expression),e.isFunctionExpression);if(!r||e.isParseTreeNode(r)||e.some(r.typeParameters)||e.some(r.parameters)||r.type||!r.body)return!1;var a=r.body.statements;if(a.length<2)return!1;var i=a[0];if(e.isParseTreeNode(i)||!e.isClassLike(i)&&!s(i))return!1;var o=e.elementAt(a,-1),c=e.tryCast(e.isVariableStatement(o)?e.elementAt(a,-2):o,e.isReturnStatement);return!!(c&&c.expression&&e.isIdentifier(e.skipOuterExpressions(c.expression)))}function u(t){return 0!=(128&t.transformFlags)||void 0!==Mt||4096&It&&e.isStatement(t)||e.isIterationStatement(t,!1)&&Se(t)||c(t)}function l(e){return u(e)?p(e):e}function _(e){return u(e)?te(e,!0):e}function d(e){return 97===e.kind?lt(!0):l(e)}function p(n){switch(n.kind){case 115:return;case 229:return k(n);case 199:return S(n);case 146:return I(n);case 228:return Y(n);case 187:return G(n);case 186:return X(n);case 226:return ue(n);case 71:return b(n);case 227:return oe(n);case 221:return g(n);case 235:return m(n);case 207:return te(n,!1);case 218:case 217:return x(n);case 222:return de(n);case 212:case 213:return ge(n,void 0);case 214:return me(n,void 0);case 215:return ye(n,void 0);case 216:return he(n,void 0);case 210:return ne(n);case 178:return ke(n);case 260:return Re(n);case 262:return je(n);case 144:return Je(n);case 177:return Ue(n);case 181:return qe(n);case 182:return He(n);case 185:return re(n,!0);case 194:return ae(n,!0);case 13:case 14:case 15:case 16:return tt(n);case 9:return nt(n);case 8:return rt(n);case 183:return at(n);case 196:return ot(n);case 197:return ze(n);case 198:return Ze(n);case 97:return lt(!1);case 99:return v(n);case 204:return _t(n);case 151:return Be(n);case 153:case 154:return Ke(n);case 208:return ie(n);case 219:return h(n);default:return e.visitEachChild(n,l,t)}}function f(t){var n=a(3968,64),r=[];Tt();var o=e.addStandardPrologue(r,t.statements,!1);return J(r,t),o=e.addCustomPrologue(r,t.statements,o,l),e.addRange(r,e.visitNodes(t.statements,l,e.isStatement,o)),e.addRange(r,Dt()),i(n,0,0),e.updateSourceFileNode(t,e.setTextRange(e.createNodeArray(r),t.statements))}function g(n){if(void 0!==Mt){var r=Mt.allowedNonLabeledJumps;Mt.allowedNonLabeledJumps|=2;var a=e.visitEachChild(n,l,t);return Mt.allowedNonLabeledJumps=r,a}return e.visitEachChild(n,l,t)}function m(n){var r=a(4032,0),o=e.visitEachChild(n,l,t);return i(r,0,0),o}function y(t){return e.setOriginalNode(e.createReturn(e.createIdentifier(\"_this\")),t)}function h(n){return Mt?(Mt.nonLocalJumps|=8,o(n)&&(n=y(n)),e.createReturn(e.createObjectLiteral([e.createPropertyAssignment(e.createIdentifier(\"value\"),n.expression?e.visitNode(n.expression,l,e.isExpression):e.createVoidZero())]))):o(n)?y(n):e.visitEachChild(n,l,t)}function v(t){return Mt?2&It?(Mt.containsLexicalThis=!0,t):Mt.thisName||(Mt.thisName=e.createUniqueName(\"this\")):t}function b(t){return Mt?e.isGeneratedIdentifier(t)?t:\"arguments\"===t.text&&At.isArgumentsLocalBinding(t)?Mt.argumentsName||(Mt.argumentsName=e.createUniqueName(\"arguments\")):t:t}function x(n){if(Mt){var r=218===n.kind?2:4;if(!(n.label&&Mt.labels&&Mt.labels.get(n.label.text)||!n.label&&Mt.allowedNonLabeledJumps&r)){var a=void 0;n.label?218===n.kind?(a=\"break-\"+n.label.text,Ae(Mt,!0,n.label.text,a)):(a=\"continue-\"+n.label.text,Ae(Mt,!1,n.label.text,a)):218===n.kind?(Mt.nonLocalJumps|=2,a=\"break\"):(Mt.nonLocalJumps|=4,a=\"continue\");var i=e.createLiteral(a);if(Mt.loopOutParameters.length){for(var o=Mt.loopOutParameters,s=void 0,c=0;c<o.length;c++){var u=De(o[c],1);s=0===c?u:e.createBinary(s,26,u);}i=e.createBinary(s,26,i);}return e.createReturn(i)}}return e.visitEachChild(n,l,t)}function k(t){var n=e.createVariableDeclaration(e.getLocalName(t,!0),void 0,T(t));e.setOriginalNode(n,t);var r=[],a=e.createVariableStatement(void 0,e.createVariableDeclarationList([n]));if(e.setOriginalNode(a,t),e.setTextRange(a,t),e.startOnNewLine(a),r.push(a),e.hasModifier(t,1)){var i=e.hasModifier(t,512)?e.createExportDefault(e.getLocalName(t)):e.createExternalModuleExport(e.getLocalName(t));e.setOriginalNode(i,a),r.push(i);}var o=e.getEmitFlags(t);return 0==(4194304&o)&&(r.push(e.createEndOfDeclarationMarker(t)),e.setEmitFlags(a,4194304|o)),e.singleOrMany(r)}function S(e){return T(e)}function T(t){t.name&&pt();var n=e.getClassExtendsHeritageClauseElement(t),r=e.createFunctionExpression(void 0,void 0,void 0,void 0,n?[e.createParameter(void 0,void 0,void 0,\"_super\")]:[],void 0,C(t,n));65536&e.getEmitFlags(t)&&e.setEmitFlags(r,65536);var a=e.createPartiallyEmittedExpression(r);a.end=t.end,e.setEmitFlags(a,1536);var i=e.createPartiallyEmittedExpression(a);return i.end=e.skipTrivia(Ft,t.pos),e.setEmitFlags(i,1536),e.createParen(e.createCall(i,void 0,n?[e.visitNode(n.expression,l,e.isExpression)]:[]))}function C(t,n){var r=[];Tt(),D(r,t,n),E(r,t,n),q(r,t);var a=e.createTokenRange(e.skipTrivia(Ft,t.members.end),18),i=e.getInternalName(t),o=e.createPartiallyEmittedExpression(i);o.end=a.end,e.setEmitFlags(o,1536);var s=e.createReturn(o);s.pos=a.pos,e.setEmitFlags(s,1920),r.push(s),e.addRange(r,Dt());var c=e.createBlock(e.setTextRange(e.createNodeArray(r),t.members),!0);return e.setEmitFlags(c,1536),c}function D(r,a,i){i&&r.push(e.setTextRange(e.createStatement(n(t,e.getLocalName(a))),i));}function E(t,n,r){var o=Mt;Mt=void 0;var s=a(16278,73),c=e.getFirstConstructorWithBody(n),u=St(c,void 0!==r),l=e.createFunctionDeclaration(void 0,void 0,void 0,e.getInternalName(n),void 0,N(c,u),void 0,A(c,n,r,u));e.setTextRange(l,c||n),r&&e.setEmitFlags(l,8),t.push(l),i(s,49152,0),Mt=o;}function N(n,r){return e.visitParameterList(n&&!r&&n.parameters,l,t)||[]}function A(t,n,r,a){var i=[];Ct();var o=-1;a?o=0:t&&(o=e.addStandardPrologue(i,t.body.statements,!1)),t&&(R(i,t),j(i,t,a),a||(o=e.addCustomPrologue(i,t.body.statements,o,l)),e.Debug.assert(o>=0,\"statementOffset not initialized correctly!\"));var s=r&&95!==e.skipOuterExpressions(r.expression).kind,c=P(i,t,s,a,o);1!==c&&2!==c||o++,t&&(1===c&&(It|=4096),e.addRange(i,e.visitNodes(t.body.statements,l,e.isStatement,o))),!s||2===c||t&&w(t.body)||i.push(e.createReturn(e.createIdentifier(\"_this\"))),e.addRange(i,Dt()),t&&U(i,t,!1);var u=e.createBlock(e.setTextRange(e.createNodeArray(i),t?t.body.statements:n.members),!0);return e.setTextRange(u,t?t.body:n),t||e.setEmitFlags(u,1536),u}function w(t){if(219===t.kind)return!0;if(211===t.kind){var n=t;if(n.elseStatement)return w(n.thenStatement)&&w(n.elseStatement)}else if(207===t.kind){var r=e.lastOrUndefined(t.statements);if(r&&w(r))return!0}return!1}function P(t,n,r,a,i){if(!r)return n&&J(t,n),0;if(!n)return t.push(e.createReturn(F())),2;if(a)return z(t,n,F()),ft(),1;var o,s,c=n.body.statements;if(i<c.length&&210===(o=c[i]).kind&&e.isSuperCall(o.expression)&&(s=$e(o.expression)),s&&i===c.length-1&&!(49152&n.transformFlags)){var u=e.createReturn(s);return 194===s.kind&&181===s.left.kind||e.Debug.fail(\"Assumed generated super call would have form 'super.call(...) || this'.\"),e.setCommentRange(u,e.getCommentRange(e.setEmitFlags(s.left,1536))),t.push(u),2}return z(t,n,s||O(),o),s?1:0}function O(){return e.setEmitFlags(e.createThis(),4)}function F(){return e.createLogicalOr(e.createLogicalAnd(e.createStrictInequality(e.createIdentifier(\"_super\"),e.createNull()),e.createFunctionApply(e.createIdentifier(\"_super\"),O(),e.createIdentifier(\"arguments\"))),O())}function I(t){return t.dotDotDotToken?void 0:e.isBindingPattern(t.name)?e.setOriginalNode(e.setTextRange(e.createParameter(void 0,void 0,void 0,e.getGeneratedNameForNode(t),void 0,void 0,void 0),t),t):t.initializer?e.setOriginalNode(e.setTextRange(e.createParameter(void 0,void 0,void 0,t.name,void 0,void 0,void 0),t),t):t}function M(e){return 0!=(131072&e.transformFlags)}function R(t,n){if(M(n))for(var r=0,a=n.parameters;r<a.length;r++){var i=a[r],o=i.name,s=i.initializer;i.dotDotDotToken||(e.isBindingPattern(o)?L(t,i,o,s):s&&B(t,i,o,s));}}function L(n,r,a,i){var o=e.getGeneratedNameForNode(r);a.elements.length>0?n.push(e.setEmitFlags(e.createVariableStatement(void 0,e.createVariableDeclarationList(e.flattenDestructuringBinding(r,l,t,0,o))),1048576)):i&&n.push(e.setEmitFlags(e.createStatement(e.createAssignment(o,e.visitNode(i,l,e.isExpression))),1048576));}function B(t,n,r,a){a=e.visitNode(a,l,e.isExpression);var i=e.createIf(e.createTypeCheck(e.getSynthesizedClone(r),\"undefined\"),e.setEmitFlags(e.setTextRange(e.createBlock([e.createStatement(e.setTextRange(e.createAssignment(e.setEmitFlags(e.getMutableClone(r),48),e.setEmitFlags(a,48|e.getEmitFlags(a))),n))]),n),417));i.startsOnNewLine=!0,e.setTextRange(i,n),e.setEmitFlags(i,1048992),t.push(i);}function K(e,t){return e&&e.dotDotDotToken&&71===e.name.kind&&!t}function j(t,n,r){var a=e.lastOrUndefined(n.parameters);if(K(a,r)){var i=e.getMutableClone(a.name);e.setEmitFlags(i,48);var o=e.getSynthesizedClone(a.name),s=n.parameters.length-1,c=e.createLoopVariable();t.push(e.setEmitFlags(e.setTextRange(e.createVariableStatement(void 0,e.createVariableDeclarationList([e.createVariableDeclaration(i,void 0,e.createArrayLiteral([]))])),a),1048576));var u=e.createFor(e.setTextRange(e.createVariableDeclarationList([e.createVariableDeclaration(c,void 0,e.createLiteral(s))]),a),e.setTextRange(e.createLessThan(c,e.createPropertyAccess(e.createIdentifier(\"arguments\"),\"length\")),a),e.setTextRange(e.createPostfixIncrement(c),a),e.createBlock([e.startOnNewLine(e.setTextRange(e.createStatement(e.createAssignment(e.createElementAccess(o,0===s?c:e.createSubtract(c,e.createLiteral(s))),e.createElementAccess(e.createIdentifier(\"arguments\"),c))),a))]));e.setEmitFlags(u,1048576),e.startOnNewLine(u),t.push(u);}}function J(t,n){32768&n.transformFlags&&187!==n.kind&&z(t,n,e.createThis());}function z(t,n,r,a){ft();var i=e.createVariableStatement(void 0,e.createVariableDeclarationList([e.createVariableDeclaration(\"_this\",void 0,r)]));e.setEmitFlags(i,1050112),e.setTextRange(i,a),e.setSourceMapRange(i,n),t.push(i);}function U(t,n,r){if(16384&It){var a=void 0;switch(n.kind){case 187:return t;case 151:case 153:case 154:a=e.createVoidZero();break;case 152:a=e.createPropertyAccess(e.setEmitFlags(e.createThis(),4),\"constructor\");break;case 228:case 186:a=e.createConditional(e.createLogicalAnd(e.setEmitFlags(e.createThis(),4),e.createBinary(e.setEmitFlags(e.createThis(),4),93,e.getLocalName(n))),e.createPropertyAccess(e.setEmitFlags(e.createThis(),4),\"constructor\"),e.createVoidZero());break;default:e.Debug.failBadSyntaxKind(n);}var i=e.createVariableStatement(void 0,e.createVariableDeclarationList([e.createVariableDeclaration(\"_newTarget\",void 0,a)]));if(r)return[i].concat(t);t.unshift(i);}return t}function q(t,n){for(var r=0,a=n.members;r<a.length;r++){var i=a[r];switch(i.kind){case 206:t.push(V(i));break;case 151:t.push($(kt(n,i),i,n));break;case 153:case 154:var o=e.getAllAccessorDeclarations(n.members,i);i===o.firstAccessor&&t.push(W(kt(n,i),o,n));break;case 152:break;default:e.Debug.failBadSyntaxKind(n);}}}function V(t){return e.setTextRange(e.createEmptyStatement(),t)}function $(t,n,r){var o=a(0,0),s=e.getCommentRange(n),c=e.getSourceMapRange(n),u=e.createMemberAccessForPropertyName(t,e.visitNode(n.name,l,e.isPropertyName),n.name),_=Q(n,n,void 0,r);e.setEmitFlags(_,1536),e.setSourceMapRange(_,c);var d=e.setTextRange(e.createStatement(e.createAssignment(u,_)),n);return e.setOriginalNode(d,n),e.setCommentRange(d,s),e.setEmitFlags(d,48),i(o,49152,49152&It?16384:0),d}function W(t,n,r){var a=e.createStatement(H(t,n,r,!1));return e.setEmitFlags(a,1536),e.setSourceMapRange(a,e.getSourceMapRange(n.firstAccessor)),a}function H(t,n,r,o){var s=n.firstAccessor,c=n.getAccessor,u=n.setAccessor,_=a(0,0),d=e.getMutableClone(t);e.setEmitFlags(d,1568),e.setSourceMapRange(d,s.name);var p=e.createExpressionForPropertyName(e.visitNode(s.name,l,e.isPropertyName));e.setEmitFlags(p,1552),e.setSourceMapRange(p,s.name);var f=[];if(c){var g=Q(c,void 0,void 0,r);e.setSourceMapRange(g,e.getSourceMapRange(c)),e.setEmitFlags(g,512);var m=e.createPropertyAssignment(\"get\",g);e.setCommentRange(m,e.getCommentRange(c)),f.push(m);}if(u){var y=Q(u,void 0,void 0,r);e.setSourceMapRange(y,e.getSourceMapRange(u)),e.setEmitFlags(y,512);var h=e.createPropertyAssignment(\"set\",y);e.setCommentRange(h,e.getCommentRange(u)),f.push(h);}f.push(e.createPropertyAssignment(\"enumerable\",e.createTrue()),e.createPropertyAssignment(\"configurable\",e.createTrue()));var v=e.createCall(e.createPropertyAccess(e.createIdentifier(\"Object\"),\"defineProperty\"),void 0,[d,p,e.createObjectLiteral(f,!0)]);return o&&(v.startsOnNewLine=!0),i(_,49152,49152&It?16384:0),v}function G(n){16384&n.transformFlags&&ft();var r=Mt;Mt=void 0;var o=a(16256,66),s=e.createFunctionExpression(void 0,void 0,void 0,void 0,e.visitParameterList(n.parameters,l,t),void 0,Z(n));return e.setTextRange(s,n),e.setOriginalNode(s,n),e.setEmitFlags(s,8),i(o,0,0),Mt=r,s}function X(n){var r=262144&e.getEmitFlags(n)?a(16278,69):a(16286,65),o=Mt;Mt=void 0;var s=e.visitParameterList(n.parameters,l,t),c=64&n.transformFlags?Z(n):ee(n),u=16384&It?e.getLocalName(n):n.name;return i(r,49152,0),Mt=o,e.updateFunctionExpression(n,void 0,n.asteriskToken,u,void 0,s,void 0,c)}function Y(n){var r=Mt;Mt=void 0;var o=a(16286,65),s=e.visitParameterList(n.parameters,l,t),c=64&n.transformFlags?Z(n):ee(n),u=16384&It?e.getLocalName(n):n.name;return i(o,49152,0),Mt=r,e.updateFunctionDeclaration(n,void 0,e.visitNodes(n.modifiers,l,e.isModifier),n.asteriskToken,u,void 0,s,void 0,c)}function Q(n,r,o,s){var c=Mt;Mt=void 0;var u=s&&e.isClassLike(s)&&!e.hasModifier(n,32)?a(16286,73):a(16286,65),_=e.visitParameterList(n.parameters,l,t),d=Z(n);return 16384&It&&!o&&(228===n.kind||186===n.kind)&&(o=e.getGeneratedNameForNode(n)),i(u,49152,0),Mt=c,e.setOriginalNode(e.setTextRange(e.createFunctionExpression(void 0,n.asteriskToken,o,void 0,_,void 0,d),r),n)}function Z(n){var r,a,i,o=!1,s=!1,c=[],u=n.body;if(Ct(),e.isBlock(u)&&(i=e.addStandardPrologue(c,u.statements,!1)),J(c,n),R(c,n),j(c,n,!1),!o&&c.length>0&&(o=!0),e.isBlock(u))i=e.addCustomPrologue(c,u.statements,i,l),r=u.statements,e.addRange(c,e.visitNodes(u.statements,l,e.isStatement,i)),!o&&u.multiLine&&(o=!0);else{e.Debug.assert(187===n.kind),r=e.moveRangeEnd(u,-1);var _=n.equalsGreaterThanToken;e.nodeIsSynthesized(_)||e.nodeIsSynthesized(u)||(e.rangeEndIsOnSameLineAsRangeStart(_,u,Ot)?s=!0:o=!0);var d=e.visitNode(u,l,e.isExpression),p=e.createReturn(d);e.setTextRange(p,u),e.setEmitFlags(p,1440),c.push(p),a=u;}var f=t.endLexicalEnvironment();e.addRange(c,f),U(c,n,!1),!o&&f&&f.length&&(o=!0);var g=e.createBlock(e.setTextRange(e.createNodeArray(c),r),o);return e.setTextRange(g,n.body),!o&&s&&e.setEmitFlags(g,1),a&&e.setTokenSourceMapRange(g,18,a),e.setOriginalNode(g,n.body),g}function ee(n){var r=e.visitFunctionBody(n.body,_,t);return e.updateBlock(r,e.setTextRange(e.createNodeArray(U(r.statements,n,!0)),r.statements))}function te(n,r){if(r)return e.visitEachChild(n,l,t);var o=256&It?a(4032,512):a(3904,128),s=e.visitEachChild(n,l,t);return i(o,0,0),s}function ne(n){switch(n.expression.kind){case 185:return e.updateStatement(n,re(n.expression,!1));case 194:return e.updateStatement(n,ae(n.expression,!1))}return e.visitEachChild(n,l,t)}function re(n,r){if(!r)switch(n.expression.kind){case 185:return e.updateParen(n,re(n.expression,!1));case 194:return e.updateParen(n,ae(n.expression,!1))}return e.visitEachChild(n,l,t)}function ae(n,r){return e.isDestructuringAssignment(n)?e.flattenDestructuringAssignment(n,l,t,0,r):e.visitEachChild(n,l,t)}function ie(n){var r,o=a(0,e.hasModifier(n,1)?32:0);if(Mt&&0==(3&n.declarationList.flags)){for(var s=void 0,c=0,u=n.declarationList.declarations;c<u.length;c++){var _=u[c];if(Te(Mt,_),_.initializer){var d=void 0;e.isBindingPattern(_.name)?d=e.flattenDestructuringAssignment(_,l,t,0):(d=e.createBinary(_.name,58,e.visitNode(_.initializer,l,e.isExpression)),e.setTextRange(d,_)),s=e.append(s,d);}}r=s?e.setTextRange(e.createStatement(e.inlineExpressions(s)),n):void 0;}else r=e.visitEachChild(n,l,t);return i(o,0,0),r}function oe(n){if(64&n.transformFlags){3&n.flags&&pt();var r=e.flatMap(n.declarations,1&n.flags?ce:ue),a=e.createVariableDeclarationList(r);if(e.setOriginalNode(a,n),e.setTextRange(a,n),e.setCommentRange(a,n),8388608&n.transformFlags&&(e.isBindingPattern(n.declarations[0].name)||e.isBindingPattern(e.lastOrUndefined(n.declarations).name))){var i=e.firstOrUndefined(r),o=e.lastOrUndefined(r);e.setSourceMapRange(a,e.createRange(i.pos,o.end));}return a}return e.visitEachChild(n,l,t)}function se(e){var t=At.getNodeCheckFlags(e),n=131072&t,r=262144&t;return!(0!=(64&It)||n&&r&&0!=(512&It))&&0==(2048&It)&&(!At.isDeclarationWithCollidingName(e)||r&&!n&&0==(3072&It))}function ce(n){var r=n.name;if(e.isBindingPattern(r))return ue(n);if(!n.initializer&&se(n)){var a=e.getMutableClone(n);return a.initializer=e.createVoidZero(),a}return e.visitEachChild(n,l,t)}function ue(n){var r,o=a(32,0);return r=e.isBindingPattern(n.name)?e.flattenDestructuringBinding(n,l,t,0,void 0,0!=(32&o)):e.visitEachChild(n,l,t),i(o,0,0),r}function le(e){Mt.labels.set(e.label.text,e.label.text);}function _e(e){Mt.labels.set(e.label.text,void 0);}function de(t){Mt&&!Mt.labels&&(Mt.labels=e.createMap());var n=e.unwrapInnermostStatementOfLabel(t,Mt&&le);return e.isIterationStatement(n,!1)?pe(n,t):e.restoreEnclosingLabel(e.visitNode(n,l,e.isStatement),t,Mt&&_e)}function pe(e,t){switch(e.kind){case 212:case 213:return ge(e,t);case 214:return me(e,t);case 215:return ye(e,t);case 216:return he(e,t)}}function fe(e,t,n,r,o){var s=a(e,t),c=Ce(n,r,o);return i(s,0,0),c}function ge(e,t){return fe(0,256,e,t)}function me(e,t){return fe(3008,1280,e,t)}function ye(e,t){return fe(1984,2304,e,t)}function he(e,t){return fe(1984,2304,e,t,Nt.downlevelIteration?xe:be)}function ve(n,r,a){var i=[];if(e.isVariableDeclarationList(n.initializer)){3&n.initializer.flags&&pt();var o=e.firstOrUndefined(n.initializer.declarations);if(o&&e.isBindingPattern(o.name)){var s=e.flattenDestructuringBinding(o,l,t,0,r),c=e.setTextRange(e.createVariableDeclarationList(s),n.initializer);e.setOriginalNode(c,n.initializer);var u=s[0],_=e.lastOrUndefined(s);e.setSourceMapRange(c,e.createRange(u.pos,_.end)),i.push(e.createVariableStatement(void 0,c));}else i.push(e.setTextRange(e.createVariableStatement(void 0,e.setOriginalNode(e.setTextRange(e.createVariableDeclarationList([e.createVariableDeclaration(o?o.name:e.createTempVariable(void 0),void 0,r)]),e.moveRangePos(n.initializer,-1)),n.initializer)),e.moveRangeEnd(n.initializer,-1)));}else{var d=e.createAssignment(n.initializer,r);e.isDestructuringAssignment(d)?(e.aggregateTransformFlags(d),i.push(e.createStatement(ae(d,!1)))):(d.end=n.initializer.end,i.push(e.setTextRange(e.createStatement(e.visitNode(d,l,e.isExpression)),e.moveRangeEnd(n.initializer,-1))));}var p,f;if(a)e.addRange(i,a);else{var g=e.visitNode(n.statement,l,e.isStatement,e.liftToBlock);e.isBlock(g)?(e.addRange(i,g.statements),p=g,f=g.statements):i.push(g);}return e.setEmitFlags(e.setTextRange(e.createBlock(e.setTextRange(e.createNodeArray(i),f),!0),p),432)}function be(t,n,r){var a=e.visitNode(t.expression,l,e.isExpression),i=e.createLoopVariable(),o=e.isIdentifier(a)?e.getGeneratedNameForNode(a):e.createTempVariable(void 0);e.setEmitFlags(a,48|e.getEmitFlags(a));var s=e.setTextRange(e.createFor(e.setEmitFlags(e.setTextRange(e.createVariableDeclarationList([e.setTextRange(e.createVariableDeclaration(i,void 0,e.createLiteral(0)),e.moveRangePos(t.expression,-1)),e.setTextRange(e.createVariableDeclaration(o,void 0,a),t.expression)]),t.expression),2097152),e.setTextRange(e.createLessThan(i,e.createPropertyAccess(o,\"length\")),t.expression),e.setTextRange(e.createPostfixIncrement(i),t.expression),ve(t,e.createElementAccess(o,i),r)),t);return e.setEmitFlags(s,256),e.setTextRange(s,t),e.restoreEnclosingLabel(s,n,Mt&&_e)}function xe(n,r,a){var i=e.visitNode(n.expression,l,e.isExpression),o=e.isIdentifier(i)?e.getGeneratedNameForNode(i):e.createTempVariable(void 0),s=e.isIdentifier(i)?e.getGeneratedNameForNode(o):e.createTempVariable(void 0),c=e.createUniqueName(\"e\"),u=e.getGeneratedNameForNode(c),_=e.createTempVariable(void 0),d=e.createValuesHelper(t,i,n.expression),p=e.createCall(e.createPropertyAccess(o,\"next\"),void 0,[]);Et(c),Et(_);var f=e.setEmitFlags(e.setTextRange(e.createFor(e.setEmitFlags(e.setTextRange(e.createVariableDeclarationList([e.setTextRange(e.createVariableDeclaration(o,void 0,d),n.expression),e.createVariableDeclaration(s,void 0,p)]),n.expression),2097152),e.createLogicalNot(e.createPropertyAccess(s,\"done\")),e.createAssignment(s,p),ve(n,e.createPropertyAccess(s,\"value\"),a)),n),256);return e.createTry(e.createBlock([e.restoreEnclosingLabel(f,r,Mt&&_e)]),e.createCatchClause(e.createVariableDeclaration(u),e.setEmitFlags(e.createBlock([e.createStatement(e.createAssignment(c,e.createObjectLiteral([e.createPropertyAssignment(\"error\",u)])))]),1)),e.createBlock([e.createTry(e.createBlock([e.setEmitFlags(e.createIf(e.createLogicalAnd(e.createLogicalAnd(s,e.createLogicalNot(e.createPropertyAccess(s,\"done\"))),e.createAssignment(_,e.createPropertyAccess(o,\"return\"))),e.createStatement(e.createFunctionCall(_,o,[]))),1)]),void 0,e.setEmitFlags(e.createBlock([e.setEmitFlags(e.createIf(c,e.createThrow(e.createPropertyAccess(c,\"error\"))),1)]),1))]))}function ke(n){for(var r=n.properties,a=r.length,i=a,o=a,s=0;s<a;s++){var c=r[s];if(16777216&c.transformFlags&&4&It&&s<o&&(o=s),144===c.name.kind){i=s;break}}if(i!==a){o<i&&(i=o);var u=e.createTempVariable(Et),_=[],d=e.createAssignment(u,e.setEmitFlags(e.createObjectLiteral(e.visitNodes(r,l,e.isObjectLiteralElementLike,0,i),n.multiLine),65536));return n.multiLine&&(d.startsOnNewLine=!0),_.push(d),Oe(_,n,u,i),_.push(n.multiLine?e.startOnNewLine(e.getMutableClone(u)):u),e.inlineExpressions(_)}return e.visitEachChild(n,l,t)}function Se(e){return 0!=(65536&At.getNodeCheckFlags(e))}function Te(t,n){function r(n){if(71===n.kind)t.hoistedLocalVariables.push(n);else for(var a=0,i=n.elements;a<i.length;a++){var o=i[a];e.isOmittedExpression(o)||r(o.name);}}t.hoistedLocalVariables||(t.hoistedLocalVariables=[]),r(n.name);}function Ce(n,r,a){if(!Se(n)){var i=void 0;Mt&&(i=Mt.allowedNonLabeledJumps,Mt.allowedNonLabeledJumps=6);var o=a?a(n,r,void 0):e.restoreEnclosingLabel(e.visitEachChild(n,l,t),r,Mt&&_e);return Mt&&(Mt.allowedNonLabeledJumps=i),o}var s,c=e.createUniqueName(\"_loop\");switch(n.kind){case 214:case 215:case 216:var u=n.initializer;u&&227===u.kind&&(s=u);}var _=[],d=[];if(s&&3&e.getCombinedNodeFlags(s))for(var p=0,f=s.declarations;p<f.length;p++)Pe(f[p],_,d);var g=Mt;Mt={loopOutParameters:d},g&&(g.argumentsName&&(Mt.argumentsName=g.argumentsName),g.thisName&&(Mt.thisName=g.thisName),g.hoistedLocalVariables&&(Mt.hoistedLocalVariables=g.hoistedLocalVariables)),Tt();var m=e.visitNode(n.statement,l,e.isStatement,e.liftToBlock),y=Dt(),h=Mt;if(Mt=g,d.length||y){var v=e.isBlock(m)?m.statements.slice():[m];d.length&&Ee(d,1,v),e.addRange(v,y),m=e.createBlock(v,!0);}e.isBlock(m)?m.multiLine=!0:m=e.createBlock([m],!0);var b=0!=(16777216&n.statement.transformFlags),x=b&&0!=(4&It),k=0;h.containsLexicalThis&&(k|=8),x&&(k|=262144);var S,T=[e.createVariableStatement(void 0,e.setEmitFlags(e.createVariableDeclarationList([e.createVariableDeclaration(c,void 0,e.setEmitFlags(e.createFunctionExpression(void 0,b?e.createToken(39):void 0,void 0,void 0,_,void 0,m),k))]),2097152))];if(h.argumentsName&&(g?g.argumentsName=h.argumentsName:(S||(S=[])).push(e.createVariableDeclaration(h.argumentsName,void 0,e.createIdentifier(\"arguments\")))),h.thisName&&(g?g.thisName=h.thisName:(S||(S=[])).push(e.createVariableDeclaration(h.thisName,void 0,e.createIdentifier(\"this\")))),h.hoistedLocalVariables)if(g)g.hoistedLocalVariables=h.hoistedLocalVariables;else{S||(S=[]);for(var C=0,D=h.hoistedLocalVariables;C<D.length;C++){var E=D[C];S.push(e.createVariableDeclaration(E));}}if(d.length){S||(S=[]);for(var N=0,A=d;N<A.length;N++){var w=A[N];S.push(e.createVariableDeclaration(w.outParamName));}}S&&T.push(e.createVariableStatement(void 0,e.createVariableDeclarationList(S)));var P,O=Ne(c,_,h,b);if(a)P=a(n,r,O);else{var F=e.getMutableClone(n);F.statement=void 0,(F=e.visitEachChild(F,l,t)).statement=e.createBlock(O,!0),F.transformFlags=0,e.aggregateTransformFlags(F),P=e.restoreEnclosingLabel(F,r,Mt&&_e);}return T.push(P),T}function De(t,n){var r=0===n?t.outParamName:t.originalName,a=0===n?t.originalName:t.outParamName;return e.createBinary(a,58,r)}function Ee(t,n,r){for(var a=0,i=t;a<i.length;a++){var o=i[a];r.push(e.createStatement(De(o,n)));}}function Ne(t,n,r,a){var i=Mt,o=[],s=!(-5&r.nonLocalJumps||r.labeledNonLocalBreaks||r.labeledNonLocalContinues),c=e.createCall(t,void 0,e.map(n,function(e){return e.name})),u=a?e.createYield(e.createToken(39),e.setEmitFlags(c,8388608)):c;if(s)o.push(e.createStatement(u)),Ee(r.loopOutParameters,0,o);else{var l=e.createUniqueName(\"state\"),_=e.createVariableStatement(void 0,e.createVariableDeclarationList([e.createVariableDeclaration(l,void 0,u)]));if(o.push(_),Ee(r.loopOutParameters,0,o),8&r.nonLocalJumps){var d=void 0;i?(i.nonLocalJumps|=8,d=e.createReturn(l)):d=e.createReturn(e.createPropertyAccess(l,\"value\")),o.push(e.createIf(e.createBinary(e.createTypeOf(l),34,e.createLiteral(\"object\")),d));}if(2&r.nonLocalJumps&&o.push(e.createIf(e.createBinary(l,34,e.createLiteral(\"break\")),e.createBreak())),r.labeledNonLocalBreaks||r.labeledNonLocalContinues){var p=[];we(r.labeledNonLocalBreaks,!0,l,i,p),we(r.labeledNonLocalContinues,!1,l,i,p),o.push(e.createSwitch(l,e.createCaseBlock(p)));}}return o}function Ae(t,n,r,a){n?(t.labeledNonLocalBreaks||(t.labeledNonLocalBreaks=e.createMap()),t.labeledNonLocalBreaks.set(r,a)):(t.labeledNonLocalContinues||(t.labeledNonLocalContinues=e.createMap()),t.labeledNonLocalContinues.set(r,a));}function we(t,n,r,a,i){t&&t.forEach(function(t,o){var s=[];if(!a||a.labels&&a.labels.get(o)){var c=e.createIdentifier(o);s.push(n?e.createBreak(c):e.createContinue(c));}else Ae(a,n,o,t),s.push(e.createReturn(r));i.push(e.createCaseClause(e.createLiteral(t),s));});}function Pe(t,n,r){var a=t.name;if(e.isBindingPattern(a))for(var i=0,o=a.elements;i<o.length;i++){var s=o[i];e.isOmittedExpression(s)||Pe(s,n,r);}else if(n.push(e.createParameter(void 0,void 0,void 0,a)),2097152&At.getNodeCheckFlags(t)){var c=e.createUniqueName(\"out_\"+e.unescapeIdentifier(a.text));r.push({originalName:a,outParamName:c});}}function Oe(t,n,r,a){for(var i=n.properties,o=i.length,s=a;s<o;s++){var c=i[s];switch(c.kind){case 153:case 154:var u=e.getAllAccessorDeclarations(n.properties,c);c===u.firstAccessor&&t.push(H(r,u,n,n.multiLine));break;case 151:t.push(Me(c,r,n,n.multiLine));break;case 261:t.push(Fe(c,r,n.multiLine));break;case 262:t.push(Ie(c,r,n.multiLine));break;default:e.Debug.failBadSyntaxKind(n);}}}function Fe(t,n,r){var a=e.createAssignment(e.createMemberAccessForPropertyName(n,e.visitNode(t.name,l,e.isPropertyName)),e.visitNode(t.initializer,l,e.isExpression));return e.setTextRange(a,t),r&&(a.startsOnNewLine=!0),a}function Ie(t,n,r){var a=e.createAssignment(e.createMemberAccessForPropertyName(n,e.visitNode(t.name,l,e.isPropertyName)),e.getSynthesizedClone(t.name));return e.setTextRange(a,t),r&&(a.startsOnNewLine=!0),a}function Me(t,n,r,o){var s=a(0,0),c=e.createAssignment(e.createMemberAccessForPropertyName(n,e.visitNode(t.name,l,e.isPropertyName)),Q(t,t,void 0,r));return e.setTextRange(c,t),o&&(c.startsOnNewLine=!0),i(s,49152,49152&It?16384:0),c}function Re(n){var r,o=a(4032,0);if(e.isBindingPattern(n.variableDeclaration.name)){var s=e.createTempVariable(void 0),c=e.createVariableDeclaration(s);e.setTextRange(c,n.variableDeclaration);var u=e.flattenDestructuringBinding(n.variableDeclaration,l,t,0,s),_=e.createVariableDeclarationList(u);e.setTextRange(_,n.variableDeclaration);var d=e.createVariableStatement(void 0,_);r=e.updateCatchClause(n,c,Le(n.block,d));}else r=e.visitEachChild(n,l,t);return i(o,0,0),r}function Le(t,n){var r=e.visitNodes(t.statements,l,e.isStatement);return e.updateBlock(t,[n].concat(r))}function Be(t){e.Debug.assert(!e.isComputedPropertyName(t.name));var n=Q(t,e.moveRangePos(t,-1),void 0,void 0);return e.setEmitFlags(n,512|e.getEmitFlags(n)),e.setTextRange(e.createPropertyAssignment(t.name,n),t)}function Ke(n){e.Debug.assert(!e.isComputedPropertyName(n.name));var r=Mt;Mt=void 0;var o,s=a(16286,65);if(32768&n.transformFlags){var c=e.visitParameterList(n.parameters,l,t),u=Z(n);o=153===n.kind?e.updateGetAccessor(n,n.decorators,n.modifiers,n.name,c,n.type,u):e.updateSetAccessor(n,n.decorators,n.modifiers,n.name,c,u);}else o=e.visitEachChild(n,l,t);return i(s,49152,0),Mt=r,o}function je(t){return e.setTextRange(e.createPropertyAssignment(t.name,e.getSynthesizedClone(t.name)),t)}function Je(n){var r=a(0,8192),o=e.visitEachChild(n,l,t);return i(r,49152,49152&It?32768:0),o}function ze(n){return e.visitEachChild(n,l,t)}function Ue(n){return 64&n.transformFlags?Ge(n.elements,!0,n.multiLine,n.elements.hasTrailingComma):e.visitEachChild(n,l,t)}function qe(t){return c(t)?Ve(t):64&t.transformFlags?We(t,!0):e.updateCall(t,e.visitNode(t.expression,d,e.isExpression),void 0,e.visitNodes(t.arguments,l,e.isExpression))}function Ve(t){var n=e.cast(e.skipOuterExpressions(t.expression),e.isFunctionExpression).body,r=e.visitNodes(n.statements,l,e.isStatement,0,1),a=e.visitNodes(n.statements,l,e.isStatement,1,n.statements.length-1),i=e.cast(e.firstOrUndefined(r),e.isVariableStatement).declarationList.declarations[0],o=e.skipOuterExpressions(i.initializer),s=e.tryCast(o,e.isAssignmentExpression),c=e.cast(s?e.skipOuterExpressions(s.right):o,e.isCallExpression),u=e.cast(e.skipOuterExpressions(c.expression),e.isFunctionExpression),_=u.body.statements,d=0,p=-1,f=[];if(s){var g=e.tryCast(_[d],e.isExpressionStatement);g&&(f.push(g),d++),f.push(_[d]),d++,f.push(e.createStatement(e.createAssignment(s.left,e.cast(i.name,e.isIdentifier))));}for(;!e.isReturnStatement(e.elementAt(_,p));)p--;return e.addRange(f,_,d,p),p<-1&&e.addRange(f,_,p+1),e.addRange(f,a),e.addRange(f,r,1),e.recreateOuterExpressions(t.expression,e.recreateOuterExpressions(i.initializer,e.recreateOuterExpressions(s&&s.right,e.updateCall(c,e.recreateOuterExpressions(c.expression,e.updateFunctionExpression(u,void 0,void 0,void 0,void 0,u.parameters,void 0,e.updateBlock(u.body,f))),void 0,c.arguments))))}function $e(e){return We(e,!1)}function We(t,n){var r=e.createCallBinding(t.expression,Et),a=r.target,i=r.thisArg;97===t.expression.kind&&e.setEmitFlags(i,4);var o;if(o=524288&t.transformFlags?e.createFunctionApply(e.visitNode(a,d,e.isExpression),e.visitNode(i,l,e.isExpression),Ge(t.arguments,!1,!1,!1)):e.createFunctionCall(e.visitNode(a,d,e.isExpression),e.visitNode(i,l,e.isExpression),e.visitNodes(t.arguments,l,e.isExpression),t),97===t.expression.kind){var s=e.createThis();e.setEmitFlags(s,4);var c=e.createLogicalOr(o,s);o=n?e.createAssignment(e.createIdentifier(\"_this\"),c):c;}return e.setOriginalNode(o,t)}function He(n){if(524288&n.transformFlags){var r=e.createCallBinding(e.createPropertyAccess(n.expression,\"bind\"),Et),a=r.target,i=r.thisArg;return e.createNew(e.createFunctionApply(e.visitNode(a,l,e.isExpression),i,Ge(e.createNodeArray([e.createVoidZero()].concat(n.arguments)),!1,!1,!1)),void 0,[])}return e.visitEachChild(n,l,t)}function Ge(n,r,a,i){var o=n.length,s=e.flatten(e.spanMap(n,Xe,function(e,t,n,r){return t(e,a,i&&r===o)}));if(Nt.downlevelIteration){if(1===s.length){var c=s[0];if(e.isCallExpression(c)&&e.isIdentifier(c.expression)&&4096&e.getEmitFlags(c.expression)&&\"___spread\"===c.expression.text)return s[0]}return e.createSpreadHelper(t,s)}if(1===s.length){var u=n[0];return r&&e.isSpreadElement(u)&&177!==u.expression.kind?e.createArraySlice(s[0]):s[0]}return e.createArrayConcat(s.shift(),s)}function Xe(t){return e.isSpreadElement(t)?Ye:Qe}function Ye(t){return e.map(t,et)}function Qe(t,n,r){return e.createArrayLiteral(e.visitNodes(e.createNodeArray(t,r),l,e.isExpression),n)}function Ze(t){return e.visitNode(t.expression,l,e.isExpression)}function et(t){return e.visitNode(t.expression,l,e.isExpression)}function tt(t){return e.setTextRange(e.createLiteral(t.text),t)}function nt(t){return t.hasExtendedUnicodeEscape?e.setTextRange(e.createLiteral(t.text),t):t}function rt(t){return 48&t.numericLiteralFlags?e.setTextRange(e.createNumericLiteral(t.text),t):t}function at(t){var n=e.visitNode(t.tag,l,e.isExpression),r=e.createTempVariable(Et),a=[r],i=[],o=[],s=t.template;if(e.isNoSubstitutionTemplateLiteral(s))i.push(e.createLiteral(s.text)),o.push(it(s));else{i.push(e.createLiteral(s.head.text)),o.push(it(s.head));for(var c=0,u=s.templateSpans;c<u.length;c++){var _=u[c];i.push(e.createLiteral(_.literal.text)),o.push(it(_.literal)),a.push(e.visitNode(_.expression,l,e.isExpression));}}return e.createParen(e.inlineExpressions([e.createAssignment(r,e.createArrayLiteral(i)),e.createAssignment(e.createPropertyAccess(r,\"raw\"),e.createArrayLiteral(o)),e.createCall(n,void 0,a)]))}function it(t){var n=e.getSourceTextOfNodeFromSourceFile(Ot,t),r=13===t.kind||16===t.kind;return n=n.substring(1,n.length-(r?1:2)),n=n.replace(/\\r\\n?/g,\"\\n\"),e.setTextRange(e.createLiteral(n),t)}function ot(t){var n=[];ct(n,t),ut(n,t);var r=e.reduceLeft(n,e.createAdd);return e.nodeIsSynthesized(r)&&(r.pos=t.pos,r.end=t.end),r}function st(t){return e.Debug.assert(0!==t.templateSpans.length),0!==t.head.text.length||0===t.templateSpans[0].literal.text.length}function ct(t,n){st(n)&&t.push(e.createLiteral(n.head.text));}function ut(t,n){for(var r=0,a=n.templateSpans;r<a.length;r++){var i=a[r];t.push(e.visitNode(i.expression,l,e.isExpression)),0!==i.literal.text.length&&t.push(e.createLiteral(i.literal.text));}}function lt(t){return 8&It&&!t?e.createPropertyAccess(e.createIdentifier(\"_super\"),\"prototype\"):e.createIdentifier(\"_super\")}function _t(t){return 94===t.keywordToken&&\"target\"===t.name.text?(It|=8192&It?32768:16384,e.createIdentifier(\"_newTarget\")):t}function dt(t,n,r){if(1&Rt&&e.isFunctionLike(n)){var o=a(16286,8&e.getEmitFlags(n)?81:65);return Pt(t,n,r),void i(o,0,0)}Pt(t,n,r);}function pt(){0==(2&Rt)&&(Rt|=2,t.enableSubstitution(71));}function ft(){0==(1&Rt)&&(Rt|=1,t.enableSubstitution(99),t.enableEmitNotification(152),t.enableEmitNotification(151),t.enableEmitNotification(153),t.enableEmitNotification(154),t.enableEmitNotification(187),t.enableEmitNotification(186),t.enableEmitNotification(228));}function gt(t,n){return n=wt(t,n),1===t?ht(n):e.isIdentifier(n)?mt(n):n}function mt(t){if(2&Rt&&!e.isInternalName(t)){var n=e.getParseTreeNode(t,e.isIdentifier);if(n&&yt(n))return e.setTextRange(e.getGeneratedNameForNode(n),t)}return t}function yt(e){var t=e.parent;switch(t.kind){case 176:case 229:case 232:case 226:return t.name===e&&At.isDeclarationWithCollidingName(t)}return!1}function ht(e){switch(e.kind){case 71:return vt(e);case 99:return xt(e)}return e}function vt(t){if(2&Rt&&!e.isInternalName(t)){var n=At.getReferencedDeclarationWithCollidingName(t);if(n&&(!e.isClassLike(n)||!bt(n,t)))return e.setTextRange(e.getGeneratedNameForNode(e.getNameOfDeclaration(n)),t)}return t}function bt(t,n){var r=e.getParseTreeNode(n);if(!r||r===t||r.end<=t.pos||r.pos>=t.end)return!1;for(var a=e.getEnclosingBlockScopeContainer(t);r;){if(r===a||r===t)return!1;if(e.isClassElement(r)&&r.parent===t)return!0;r=r.parent;}return!1}function xt(t){return 1&Rt&&16&It?e.setTextRange(e.createIdentifier(\"_this\"),t):t}function kt(t,n){return e.hasModifier(n,32)?e.getInternalName(t):e.createPropertyAccess(e.getInternalName(t),\"prototype\")}function St(t,n){if(!t||!n)return!1;if(e.some(t.parameters))return!1;var r=e.firstOrUndefined(t.body.statements);if(!r||!e.nodeIsSynthesized(r)||210!==r.kind)return!1;var a=r.expression;if(!e.nodeIsSynthesized(a)||181!==a.kind)return!1;var i=a.expression;if(!e.nodeIsSynthesized(i)||97!==i.kind)return!1;var o=e.singleOrUndefined(a.arguments);if(!o||!e.nodeIsSynthesized(o)||198!==o.kind)return!1;var s=o.expression;return e.isIdentifier(s)&&\"arguments\"===s.text}var Tt=t.startLexicalEnvironment,Ct=t.resumeLexicalEnvironment,Dt=t.endLexicalEnvironment,Et=t.hoistVariableDeclaration,Nt=t.getCompilerOptions(),At=t.getEmitResolver(),wt=t.onSubstituteNode,Pt=t.onEmitNode;t.onEmitNode=dt,t.onSubstituteNode=gt;var Ot,Ft,It,Mt,Rt;return r}function n(t,n){return t.requestEmitHelper(c),e.createCall(e.getHelperName(\"__extends\"),void 0,[n,e.createIdentifier(\"_super\")])}var r;!function(e){e[e.CapturedThis=1]=\"CapturedThis\",e[e.BlockScopedBindings=2]=\"BlockScopedBindings\";}(r||(r={}));var a;!function(e){e[e.ToOriginal=0]=\"ToOriginal\",e[e.ToOutParameter=1]=\"ToOutParameter\";}(a||(a={}));var i;!function(e){e[e.Break=2]=\"Break\",e[e.Continue=4]=\"Continue\",e[e.Return=8]=\"Return\";}(i||(i={}));var o;!function(e){e[e.NoReplacement=0]=\"NoReplacement\",e[e.ReplaceSuperCapture=1]=\"ReplaceSuperCapture\",e[e.ReplaceWithReturn=2]=\"ReplaceWithReturn\";}(o||(o={}));var s;!function(e){e[e.None=0]=\"None\",e[e.Function=1]=\"Function\",e[e.ArrowFunction=2]=\"ArrowFunction\",e[e.AsyncFunctionBody=4]=\"AsyncFunctionBody\",e[e.NonStaticClassElement=8]=\"NonStaticClassElement\",e[e.CapturesThis=16]=\"CapturesThis\",e[e.ExportedVariableStatement=32]=\"ExportedVariableStatement\",e[e.TopLevel=64]=\"TopLevel\",e[e.Block=128]=\"Block\",e[e.IterationStatement=256]=\"IterationStatement\",e[e.IterationStatementBlock=512]=\"IterationStatementBlock\",e[e.ForStatement=1024]=\"ForStatement\",e[e.ForInOrForOfStatement=2048]=\"ForInOrForOfStatement\",e[e.ConstructorWithCapturedSuper=4096]=\"ConstructorWithCapturedSuper\",e[e.ComputedPropertyName=8192]=\"ComputedPropertyName\",e[e.AncestorFactsMask=16383]=\"AncestorFactsMask\",e[e.BlockScopeIncludes=0]=\"BlockScopeIncludes\",e[e.BlockScopeExcludes=4032]=\"BlockScopeExcludes\",e[e.SourceFileIncludes=64]=\"SourceFileIncludes\",e[e.SourceFileExcludes=3968]=\"SourceFileExcludes\",e[e.FunctionIncludes=65]=\"FunctionIncludes\",e[e.FunctionExcludes=16286]=\"FunctionExcludes\",e[e.AsyncFunctionBodyIncludes=69]=\"AsyncFunctionBodyIncludes\",e[e.AsyncFunctionBodyExcludes=16278]=\"AsyncFunctionBodyExcludes\",e[e.ArrowFunctionIncludes=66]=\"ArrowFunctionIncludes\",e[e.ArrowFunctionExcludes=16256]=\"ArrowFunctionExcludes\",e[e.ConstructorIncludes=73]=\"ConstructorIncludes\",e[e.ConstructorExcludes=16278]=\"ConstructorExcludes\",e[e.DoOrWhileStatementIncludes=256]=\"DoOrWhileStatementIncludes\",e[e.DoOrWhileStatementExcludes=0]=\"DoOrWhileStatementExcludes\",e[e.ForStatementIncludes=1280]=\"ForStatementIncludes\",e[e.ForStatementExcludes=3008]=\"ForStatementExcludes\",e[e.ForInOrForOfStatementIncludes=2304]=\"ForInOrForOfStatementIncludes\",e[e.ForInOrForOfStatementExcludes=1984]=\"ForInOrForOfStatementExcludes\",e[e.BlockIncludes=128]=\"BlockIncludes\",e[e.BlockExcludes=3904]=\"BlockExcludes\",e[e.IterationStatementBlockIncludes=512]=\"IterationStatementBlockIncludes\",e[e.IterationStatementBlockExcludes=4032]=\"IterationStatementBlockExcludes\",e[e.ComputedPropertyNameIncludes=8192]=\"ComputedPropertyNameIncludes\",e[e.ComputedPropertyNameExcludes=0]=\"ComputedPropertyNameExcludes\",e[e.NewTarget=16384]=\"NewTarget\",e[e.NewTargetInComputedPropertyName=32768]=\"NewTargetInComputedPropertyName\",e[e.SubtreeFactsMask=-16384]=\"SubtreeFactsMask\",e[e.PropagateNewTargetMask=49152]=\"PropagateNewTargetMask\";}(s||(s={})),e.transformES2015=t;var c={name:\"typescript:extends\",scoped:!1,priority:0,text:\"\\n            var __extends = (this && this.__extends) || (function () {\\n                var extendStatics = Object.setPrototypeOf ||\\n                    ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\\n                    function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\\n                return function (d, b) {\\n                    extendStatics(d, b);\\n                    function __() { this.constructor = d; }\\n                    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\\n                };\\n            })();\"};}(r||(r={}));!function(e){function t(t){function n(e){return e}function r(t,n,r){switch(n.kind){case 251:case 252:case 250:var a=n.tagName;u[e.getOriginalNodeId(a)]=!0;}c(t,n,r);}function a(t,n){return n.id&&u&&u[n.id]?_(t,n):(n=_(t,n),e.isPropertyAccessExpression(n)?i(n):e.isPropertyAssignment(n)?o(n):n)}function i(t){var n=s(t.name);return n?e.setTextRange(e.createElementAccess(t.expression,n),t):t}function o(t){var n=e.isIdentifier(t.name)&&s(t.name);return n?e.updatePropertyAssignment(t,n,t.initializer):t}function s(t){var n=t.originalKeywordKind||(e.nodeIsSynthesized(t)?e.stringToToken(t.text):void 0);if(n>=72&&n<=107)return e.setTextRange(e.createLiteral(t),t)}var c,u,l=t.getCompilerOptions();1!==l.jsx&&3!==l.jsx||(c=t.onEmitNode,t.onEmitNode=r,t.enableEmitNotification(251),t.enableEmitNotification(252),t.enableEmitNotification(250),u=[]);var _=t.onSubstituteNode;return t.onSubstituteNode=a,t.enableSubstitution(179),t.enableSubstitution(261),n}e.transformES5=t;}(r||(r={}));!function(e){function t(e){switch(e){case 2:return\"return\";case 3:return\"break\";case 4:return\"yield\";case 5:return\"yield*\";case 7:return\"endfinally\"}}function n(n){function a(t){if(t.isDeclarationFile||0==(512&t.transformFlags))return t;Ft=t;var r=e.visitEachChild(t,i,n);return e.addEmitHelpers(r,n.readEmitHelpers()),Ft=void 0,r}function i(t){var r=t.transformFlags;return Lt?o(t):Rt?s(t):256&r?u(t):512&r?e.visitEachChild(t,i,n):t}function o(e){switch(e.kind){case 212:return j(e);case 213:return z(e);case 221:return te(e);case 222:return re(e);default:return s(e)}}function s(t){switch(t.kind){case 228:return l(t);case 186:return _(t);case 153:case 154:return d(t);case 208:return f(t);case 214:return q(t);case 215:return $(t);case 218:return X(t);case 217:return H(t);case 219:return Q(t);default:return 16777216&t.transformFlags?c(t):33554944&t.transformFlags?e.visitEachChild(t,i,n):t}}function c(t){switch(t.kind){case 194:return g(t);case 195:return k(t);case 197:return S(t);case 177:return T(t);case 178:return D(t);case 180:return E(t);case 181:return N(t);case 182:return A(t);default:return e.visitEachChild(t,i,n)}}function u(t){switch(t.kind){case 228:return l(t);case 186:return _(t);default:return e.Debug.failBadSyntaxKind(t),e.visitEachChild(t,i,n)}}function l(t){if(t.asteriskToken)t=e.setOriginalNode(e.setTextRange(e.createFunctionDeclaration(void 0,t.modifiers,void 0,t.name,void 0,e.visitParameterList(t.parameters,i,n),void 0,p(t.body)),t),t);else{var r=Rt,a=Lt;Rt=!1,Lt=!1,t=e.visitEachChild(t,i,n),Rt=r,Lt=a;}return Rt?void Et(t):t}function _(t){if(t.asteriskToken)t=e.setOriginalNode(e.setTextRange(e.createFunctionExpression(void 0,void 0,t.name,void 0,e.visitParameterList(t.parameters,i,n),void 0,p(t.body)),t),t);else{var r=Rt,a=Lt;Rt=!1,Lt=!1,t=e.visitEachChild(t,i,n),Rt=r,Lt=a;}return t}function d(t){var r=Rt,a=Lt;return Rt=!1,Lt=!1,t=e.visitEachChild(t,i,n),Rt=r,Lt=a,t}function p(t){var n=[],r=Rt,a=Lt,o=Bt,s=Kt,c=jt,u=Jt,l=zt,_=Ut,d=nn,p=qt,f=Vt,g=$t,m=Wt;Rt=!0,Lt=!1,Bt=void 0,Kt=void 0,jt=void 0,Jt=void 0,zt=void 0,Ut=void 0,nn=1,qt=void 0,Vt=void 0,$t=void 0,Wt=e.createTempVariable(void 0),Ct();var y=e.addPrologue(n,t.statements,!1,i);w(t.statements,y);var h=it();return e.addRange(n,Dt()),n.push(e.createReturn(h)),Rt=r,Lt=a,Bt=o,Kt=s,jt=c,Jt=u,zt=l,Ut=_,nn=d,qt=p,Vt=f,$t=g,Wt=m,e.setTextRange(e.createBlock(n,t.multiLine),t)}function f(t){if(16777216&t.transformFlags)R(t.declarationList);else{if(1048576&e.getEmitFlags(t))return t;for(var n=0,r=t.declarationList.declarations;n<r.length;n++){var a=r[n];Nt(a.name);}var i=e.getInitializedVariables(t.declarationList);if(0!==i.length)return e.setSourceMapRange(e.createStatement(e.inlineExpressions(e.map(i,L))),t)}}function g(t){switch(e.getExpressionAssociativity(t)){case 0:return v(t);case 1:return h(t);default:e.Debug.fail(\"Unknown associativity.\");}}function m(e){return e>=59&&e<=70}function y(e){switch(e){case 59:return 37;case 60:return 38;case 61:return 39;case 62:return 40;case 63:return 41;case 64:return 42;case 65:return 45;case 66:return 46;case 67:return 47;case 68:return 48;case 69:return 49;case 70:return 50}}function h(t){var r=t.left,a=t.right;if(oe(a)){var o=void 0;switch(r.kind){case 179:o=e.updatePropertyAccess(r,_e(e.visitNode(r.expression,i,e.isLeftHandSideExpression)),r.name);break;case 180:o=e.updateElementAccess(r,_e(e.visitNode(r.expression,i,e.isLeftHandSideExpression)),_e(e.visitNode(r.argumentExpression,i,e.isExpression)));break;default:o=e.visitNode(r,i,e.isExpression);}var s=t.operatorToken.kind;return m(s)?e.setTextRange(e.createAssignment(o,e.setTextRange(e.createBinary(_e(o),y(s),e.visitNode(a,i,e.isExpression)),t)),t):e.updateBinary(t,o,e.visitNode(a,i,e.isExpression))}return e.visitEachChild(t,i,n)}function v(t){if(oe(t.right)){if(e.isLogicalOperator(t.operatorToken.kind))return b(t);if(26===t.operatorToken.kind)return x(t);var r=e.getMutableClone(t);return r.left=_e(e.visitNode(t.left,i,e.isExpression)),r.right=e.visitNode(t.right,i,e.isExpression),r}return e.visitEachChild(t,i,n)}function b(t){var n=pe(),r=de();return Ge(r,e.visitNode(t.left,i,e.isExpression),t.left),53===t.operatorToken.kind?Qe(n,r,t.left):Ye(n,r,t.left),Ge(r,e.visitNode(t.right,i,e.isExpression),t.right),fe(n),r}function x(t){function n(t){e.isBinaryExpression(t)&&26===t.operatorToken.kind?(n(t.left),n(t.right)):(oe(t)&&r.length>0&&(at(1,[e.createStatement(e.inlineExpressions(r))]),r=[]),r.push(e.visitNode(t,i,e.isExpression)));}var r=[];return n(t.left),n(t.right),e.inlineExpressions(r)}function k(t){if(oe(t.whenTrue)||oe(t.whenFalse)){var r=pe(),a=pe(),o=de();return Qe(r,e.visitNode(t.condition,i,e.isExpression),t.condition),Ge(o,e.visitNode(t.whenTrue,i,e.isExpression),t.whenTrue),Xe(a),fe(r),Ge(o,e.visitNode(t.whenFalse,i,e.isExpression),t.whenFalse),fe(a),o}return e.visitEachChild(t,i,n)}function S(t){var r=pe(),a=e.visitNode(t.expression,i,e.isExpression);return t.asteriskToken?Ze(0==(8388608&e.getEmitFlags(t.expression))?e.createValuesHelper(n,a,t):a,t):et(a,t),fe(r),$e(t)}function T(e){return C(e.elements,void 0,void 0,e.multiLine)}function C(t,n,r,a){function o(t,r){if(oe(r)&&t.length>0){var o=void 0!==s;s||(s=de()),Ge(s,o?e.createArrayConcat(s,[e.createArrayLiteral(t,a)]):e.createArrayLiteral(n?[n].concat(t):t,a)),n=void 0,t=[];}return t.push(e.visitNode(r,i,e.isExpression)),t}var s,c=se(t);if(c>0){s=de();var u=e.visitNodes(t,i,e.isExpression,0,c);Ge(s,e.createArrayLiteral(n?[n].concat(u):u)),n=void 0;}var l=e.reduceLeft(t,o,[],c);return s?e.createArrayConcat(s,[e.createArrayLiteral(l,a)]):e.setTextRange(e.createArrayLiteral(n?[n].concat(l):l,a),r)}function D(t){function n(n,r){oe(r)&&n.length>0&&(He(e.createStatement(e.inlineExpressions(n))),n=[]);var o=e.createExpressionForObjectLiteralElementLike(t,r,s),c=e.visitNode(o,i,e.isExpression);return c&&(a&&(c.startsOnNewLine=!0),n.push(c)),n}var r=t.properties,a=t.multiLine,o=se(r),s=de();Ge(s,e.createObjectLiteral(e.visitNodes(r,i,e.isObjectLiteralElementLike,0,o),a));var c=e.reduceLeft(r,n,[],o);return c.push(a?e.startOnNewLine(e.getMutableClone(s)):s),e.inlineExpressions(c)}function E(t){if(oe(t.argumentExpression)){var r=e.getMutableClone(t);return r.expression=_e(e.visitNode(t.expression,i,e.isLeftHandSideExpression)),r.argumentExpression=e.visitNode(t.argumentExpression,i,e.isExpression),r}return e.visitEachChild(t,i,n)}function N(t){if(e.forEach(t.arguments,oe)){var r=e.createCallBinding(t.expression,Nt,wt,!0),a=r.target,o=r.thisArg;return e.setOriginalNode(e.createFunctionApply(_e(e.visitNode(a,i,e.isLeftHandSideExpression)),o,C(t.arguments),t),t)}return e.visitEachChild(t,i,n)}function A(t){if(e.forEach(t.arguments,oe)){var r=e.createCallBinding(e.createPropertyAccess(t.expression,\"bind\"),Nt),a=r.target,o=r.thisArg;return e.setOriginalNode(e.setTextRange(e.createNew(e.createFunctionApply(_e(e.visitNode(a,i,e.isExpression)),o,C(t.arguments,e.createVoidZero())),void 0,[]),t),t)}return e.visitEachChild(t,i,n)}function w(e,t){void 0===t&&(t=0);for(var n=e.length,r=t;r<n;r++)O(e[r]);}function P(t){e.isBlock(t)?w(t.statements):O(t);}function O(e){var t=Lt;Lt||(Lt=oe(e)),F(e),Lt=t;}function F(t){switch(t.kind){case 207:return I(t);case 210:return M(t);case 211:return B(t);case 212:return K(t);case 213:return J(t);case 214:return U(t);case 215:return V(t);case 217:return W(t);case 218:return G(t);case 219:return Y(t);case 220:return Z(t);case 221:return ee(t);case 222:return ne(t);case 223:return ae(t);case 224:return ie(t);default:return He(e.visitNode(t,i,e.isStatement))}}function I(t){oe(t)?w(t.statements):He(e.visitNode(t,i,e.isStatement));}function M(t){He(e.visitNode(t,i,e.isStatement));}function R(t){for(var n=0,r=t.declarations;n<r.length;n++){var a=r[n],i=e.getSynthesizedClone(a.name);e.setCommentRange(i,a.name),Nt(i);}for(var o=e.getInitializedVariables(t),s=o.length,c=0,u=[];c<s;){for(var l=c;l<s&&!(oe((a=o[l]).initializer)&&u.length>0);l++)u.push(L(a));u.length&&(He(e.createStatement(e.inlineExpressions(u))),c+=u.length,u=[]);}}function L(t){return e.setSourceMapRange(e.createAssignment(e.setSourceMapRange(e.getSynthesizedClone(t.name),t.name),e.visitNode(t.initializer,i,e.isExpression)),t)}function B(t){if(oe(t))if(oe(t.thenStatement)||oe(t.elseStatement)){var n=pe(),r=t.elseStatement?pe():void 0;Qe(t.elseStatement?r:n,e.visitNode(t.expression,i,e.isExpression),t.expression),P(t.thenStatement),t.elseStatement&&(Xe(n),fe(r),P(t.elseStatement)),fe(n);}else He(e.visitNode(t,i,e.isStatement));else He(e.visitNode(t,i,e.isStatement));}function K(t){if(oe(t)){var n=pe(),r=pe();Ne(n),fe(r),P(t.statement),fe(n),Ye(r,e.visitNode(t.expression,i,e.isExpression)),Ae();}else He(e.visitNode(t,i,e.isStatement));}function j(t){return Lt?(Ee(),t=e.visitEachChild(t,i,n),Ae(),t):e.visitEachChild(t,i,n)}function J(t){if(oe(t)){var n=pe(),r=Ne(n);fe(n),Qe(r,e.visitNode(t.expression,i,e.isExpression)),P(t.statement),Xe(n),Ae();}else He(e.visitNode(t,i,e.isStatement));}function z(t){return Lt?(Ee(),t=e.visitEachChild(t,i,n),Ae(),t):e.visitEachChild(t,i,n)}function U(t){if(oe(t)){var n=pe(),r=pe(),a=Ne(r);if(t.initializer){var o=t.initializer;e.isVariableDeclarationList(o)?R(o):He(e.setTextRange(e.createStatement(e.visitNode(o,i,e.isExpression)),o));}fe(n),t.condition&&Qe(a,e.visitNode(t.condition,i,e.isExpression)),P(t.statement),fe(r),t.incrementor&&He(e.setTextRange(e.createStatement(e.visitNode(t.incrementor,i,e.isExpression)),t.incrementor)),Xe(n),Ae();}else He(e.visitNode(t,i,e.isStatement));}function q(t){Lt&&Ee();var r=t.initializer;if(r&&e.isVariableDeclarationList(r)){for(var a=0,o=r.declarations;a<o.length;a++){var s=o[a];Nt(s.name);}var c=e.getInitializedVariables(r);t=e.updateFor(t,c.length>0?e.inlineExpressions(e.map(c,L)):void 0,e.visitNode(t.condition,i,e.isExpression),e.visitNode(t.incrementor,i,e.isExpression),e.visitNode(t.statement,i,e.isStatement,e.liftToBlock));}else t=e.visitEachChild(t,i,n);return Lt&&Ae(),t}function V(t){if(oe(t)){var n=de(),r=de(),a=e.createLoopVariable(),o=t.initializer;Nt(a),Ge(n,e.createArrayLiteral()),He(e.createForIn(r,e.visitNode(t.expression,i,e.isExpression),e.createStatement(e.createCall(e.createPropertyAccess(n,\"push\"),void 0,[r])))),Ge(a,e.createLiteral(0));var s=pe(),c=pe(),u=Ne(c);fe(s),Qe(u,e.createLessThan(a,e.createPropertyAccess(n,\"length\")));var l=void 0;if(e.isVariableDeclarationList(o)){for(var _=0,d=o.declarations;_<d.length;_++){var p=d[_];Nt(p.name);}l=e.getSynthesizedClone(o.declarations[0].name);}else l=e.visitNode(o,i,e.isExpression),e.Debug.assert(e.isLeftHandSideExpression(l));Ge(l,e.createElementAccess(n,a)),P(t.statement),fe(c),He(e.createStatement(e.createPostfixIncrement(a))),Xe(s),Ae();}else He(e.visitNode(t,i,e.isStatement));}function $(t){Lt&&Ee();var r=t.initializer;if(e.isVariableDeclarationList(r)){for(var a=0,o=r.declarations;a<o.length;a++){var s=o[a];Nt(s.name);}t=e.updateForIn(t,r.declarations[0].name,e.visitNode(t.expression,i,e.isExpression),e.visitNode(t.statement,i,e.isStatement,e.liftToBlock));}else t=e.visitEachChild(t,i,n);return Lt&&Ae(),t}function W(t){var n=Je(t.label?t.label.text:void 0);e.Debug.assert(n>0,\"Expected continue statment to point to a valid Label.\"),Xe(n,t);}function H(t){if(Lt){var r=Je(t.label&&t.label.text);if(r>0)return qe(r,t)}return e.visitEachChild(t,i,n)}function G(t){var n=je(t.label?t.label.text:void 0);e.Debug.assert(n>0,\"Expected break statment to point to a valid Label.\"),Xe(n,t);}function X(t){if(Lt){var r=je(t.label&&t.label.text);if(r>0)return qe(r,t)}return e.visitEachChild(t,i,n)}function Y(t){tt(e.visitNode(t.expression,i,e.isExpression),t);}function Q(t){return Ve(e.visitNode(t.expression,i,e.isExpression),t)}function Z(t){oe(t)?(ve(_e(e.visitNode(t.expression,i,e.isExpression))),P(t.statement),be()):He(e.visitNode(t,i,e.isStatement));}function ee(t){if(oe(t.caseBlock)){for(var n=t.caseBlock,r=n.clauses.length,a=Pe(),o=_e(e.visitNode(t.expression,i,e.isExpression)),s=[],c=-1,u=0;u<r;u++){var l=n.clauses[u];s.push(pe()),258===l.kind&&-1===c&&(c=u);}for(var _=0,d=[];_<r;){for(var p=0,u=_;u<r;u++)if(257===(l=n.clauses[u]).kind){var f=l;if(oe(f.expression)&&d.length>0)break;d.push(e.createCaseClause(e.visitNode(f.expression,i,e.isExpression),[qe(s[u],f.expression)]));}else p++;d.length&&(He(e.createSwitch(o,e.createCaseBlock(d))),_+=d.length,d=[]),p>0&&(_+=p,p=0);}Xe(c>=0?s[c]:a);for(u=0;u<r;u++)fe(s[u]),w(n.clauses[u].statements);Oe();}else He(e.visitNode(t,i,e.isStatement));}function te(t){return Lt&&we(),t=e.visitEachChild(t,i,n),Lt&&Oe(),t}function ne(t){oe(t)?(Ie(t.label.text),P(t.statement),Me()):He(e.visitNode(t,i,e.isStatement));}function re(t){return Lt&&Fe(t.label.text),t=e.visitEachChild(t,i,n),Lt&&Me(),t}function ae(t){nt(e.visitNode(t.expression,i,e.isExpression),t);}function ie(t){oe(t)?(ke(),P(t.tryBlock),t.catchClause&&(Se(t.catchClause.variableDeclaration),P(t.catchClause.block)),t.finallyBlock&&(Te(),P(t.finallyBlock)),Ce()):He(e.visitEachChild(t,i,n));}function oe(e){return e&&0!=(16777216&e.transformFlags)}function se(e){for(var t=e.length,n=0;n<t;n++)if(oe(e[n]))return n;return-1}function ce(e,t){return t=Ot(e,t),1===e?ue(t):t}function ue(t){return e.isIdentifier(t)?le(t):t}function le(t){if(!e.isGeneratedIdentifier(t)&&It&&It.has(t.text)){var n=e.getOriginalNode(t);if(e.isIdentifier(n)&&n.parent){var r=Pt.getReferencedValueDeclaration(n);if(r){var a=Mt[e.getOriginalNodeId(r)];if(a){var i=e.getMutableClone(a);return e.setSourceMapRange(i,t),e.setCommentRange(i,t),i}}}}return t}function _e(t){var n;return e.isGeneratedIdentifier(t)||4096&e.getEmitFlags(t)?t:(n=e.createTempVariable(Nt),Ge(n,t,t),n)}function de(t){var n=t?e.createUniqueName(t):e.createTempVariable(void 0);return Nt(n),n}function pe(){zt||(zt=[]);var e=nn;return nn++,zt[e]=-1,e}function fe(t){e.Debug.assert(void 0!==zt,\"No labels were defined.\"),zt[t]=qt?qt.length:0;}function ge(e){Bt||(Bt=[],jt=[],Kt=[],Jt=[]);var t=jt.length;return jt[t]=0,Kt[t]=qt?qt.length:0,Bt[t]=e,Jt.push(e),t}function me(){var t=ye();e.Debug.assert(void 0!==t,\"beginBlock was never called.\");var n=jt.length;return jt[n]=1,Kt[n]=qt?qt.length:0,Bt[n]=t,Jt.pop(),t}function ye(){return e.lastOrUndefined(Jt)}function he(){var e=ye();return e&&e.kind}function ve(e){var t=pe(),n=pe();fe(t),ge({kind:1,expression:e,startLabel:t,endLabel:n});}function be(){e.Debug.assert(1===he()),fe(me().endLabel);}function xe(e){return 1===e.kind}function ke(){var e=pe(),t=pe();return fe(e),ge({kind:0,state:0,startLabel:e,endLabel:t}),We(),t}function Se(t){e.Debug.assert(0===he());var r;if(e.isGeneratedIdentifier(t.name))r=t.name,Nt(t.name);else{var a=t.name.text;r=de(a),It||(It=e.createMap(),Mt=[],n.enableSubstitution(71)),It.set(a,!0),Mt[e.getOriginalNodeId(t)]=r;}var i=ye();e.Debug.assert(i.state<1),Xe(i.endLabel);var o=pe();fe(o),i.state=1,i.catchVariable=r,i.catchLabel=o,Ge(r,e.createCall(e.createPropertyAccess(Wt,\"sent\"),void 0,[])),We();}function Te(){e.Debug.assert(0===he());var t=ye();e.Debug.assert(t.state<2),Xe(t.endLabel);var n=pe();fe(n),t.state=2,t.finallyLabel=n;}function Ce(){e.Debug.assert(0===he());var t=me();t.state<2?Xe(t.endLabel):rt(),fe(t.endLabel),We(),t.state=3;}function De(e){return 0===e.kind}function Ee(){ge({kind:3,isScript:!0,breakLabel:-1,continueLabel:-1});}function Ne(e){var t=pe();return ge({kind:3,isScript:!1,breakLabel:t,continueLabel:e}),t}function Ae(){e.Debug.assert(3===he());var t=me(),n=t.breakLabel;t.isScript||fe(n);}function we(){ge({kind:2,isScript:!0,breakLabel:-1});}function Pe(){var e=pe();return ge({kind:2,isScript:!1,breakLabel:e}),e}function Oe(){e.Debug.assert(2===he());var t=me(),n=t.breakLabel;t.isScript||fe(n);}function Fe(e){ge({kind:4,isScript:!0,labelText:e,breakLabel:-1});}function Ie(e){ge({kind:4,isScript:!1,labelText:e,breakLabel:pe()});}function Me(){e.Debug.assert(4===he());var t=me();t.isScript||fe(t.breakLabel);}function Re(e){return 2===e.kind||3===e.kind}function Le(e){return 4===e.kind}function Be(e){return 3===e.kind}function Ke(e,t){for(var n=t;n>=0;n--){var r=Jt[n];if(!Le(r))break;if(r.labelText===e)return!0}return!1}function je(t){if(e.Debug.assert(void 0!==Bt),t)for(n=Jt.length-1;n>=0;n--){if(Le(r=Jt[n])&&r.labelText===t)return r.breakLabel;if(Re(r)&&Ke(t,n-1))return r.breakLabel}else for(var n=Jt.length-1;n>=0;n--){var r=Jt[n];if(Re(r))return r.breakLabel}return 0}function Je(t){if(e.Debug.assert(void 0!==Bt),t){for(n=Jt.length-1;n>=0;n--)if(Be(r=Jt[n])&&Ke(t,n-1))return r.continueLabel}else for(var n=Jt.length-1;n>=0;n--){var r=Jt[n];if(Be(r))return r.continueLabel}return 0}function ze(t){if(t>0){void 0===Ut&&(Ut=[]);var n=e.createLiteral(-1);return void 0===Ut[t]?Ut[t]=[n]:Ut[t].push(n),n}return e.createOmittedExpression()}function Ue(n){var r=e.createLiteral(n);return e.addSyntheticTrailingComment(r,3,t(n)),r}function qe(t,n){return e.Debug.assert(t>0,\"Invalid label: \"+t),e.setTextRange(e.createReturn(e.createArrayLiteral([Ue(3),ze(t)])),n)}function Ve(t,n){return e.setTextRange(e.createReturn(e.createArrayLiteral(t?[Ue(2),t]:[Ue(2)])),n)}function $e(t){return e.setTextRange(e.createCall(e.createPropertyAccess(Wt,\"sent\"),void 0,[]),t)}function We(){at(0);}function He(e){e?at(1,[e]):We();}function Ge(e,t,n){at(2,[e,t],n);}function Xe(e,t){at(3,[e],t);}function Ye(e,t,n){at(4,[e,t],n);}function Qe(e,t,n){at(5,[e,t],n);}function Ze(e,t){at(7,[e],t);}function et(e,t){at(6,[e],t);}function tt(e,t){at(8,[e],t);}function nt(e,t){at(9,[e],t);}function rt(){at(10);}function at(e,t,n){void 0===qt&&(qt=[],Vt=[],$t=[]),void 0===zt&&fe(pe());var r=qt.length;qt[r]=e,Vt[r]=t,$t[r]=n;}function it(){rn=0,an=0,Ht=void 0,Gt=!1,Xt=!1,Yt=void 0,Qt=void 0,Zt=void 0,en=void 0,tn=void 0;var t=ot();return r(n,e.setEmitFlags(e.createFunctionExpression(void 0,void 0,void 0,void 0,[e.createParameter(void 0,void 0,void 0,Wt)],void 0,e.createBlock(t,t.length>0)),524288))}function ot(){if(qt){for(var t=0;t<qt.length;t++)ft(t);ct(qt.length);}else ct(0);if(Yt){var n=e.createPropertyAccess(Wt,\"label\"),r=e.createSwitch(n,e.createCaseBlock(Yt));return r.startsOnNewLine=!0,[r]}return Qt||[]}function st(){Qt&&(lt(!Gt),Gt=!1,Xt=!1,an++);}function ct(e){ut(e)&&(_t(e),tn=void 0,ht(void 0,void 0)),Qt&&Yt&&lt(!1),dt();}function ut(e){if(!Xt)return!0;if(!zt||!Ut)return!1;for(var t=0;t<zt.length;t++)if(zt[t]===e&&Ut[t])return!0;return!1}function lt(t){if(Yt||(Yt=[]),Qt){if(tn)for(var n=tn.length-1;n>=0;n--){var r=tn[n];Qt=[e.createWith(r.expression,e.createBlock(Qt))];}if(en){var a=en.startLabel,i=en.catchLabel,o=en.finallyLabel,s=en.endLabel;Qt.unshift(e.createStatement(e.createCall(e.createPropertyAccess(e.createPropertyAccess(Wt,\"trys\"),\"push\"),void 0,[e.createArrayLiteral([ze(a),ze(i),ze(o),ze(s)])]))),en=void 0;}t&&Qt.push(e.createStatement(e.createAssignment(e.createPropertyAccess(Wt,\"label\"),e.createLiteral(an+1))));}Yt.push(e.createCaseClause(e.createLiteral(an),Qt||[])),Qt=void 0;}function _t(e){if(zt)for(var t=0;t<zt.length;t++)zt[t]===e&&(st(),void 0===Ht&&(Ht=[]),void 0===Ht[an]?Ht[an]=[t]:Ht[an].push(t));}function dt(){if(void 0!==Ut&&void 0!==Ht)for(var e=0;e<Ht.length;e++){var t=Ht[e];if(void 0!==t)for(var n=0,r=t;n<r.length;n++){var a=r[n],i=Ut[a];if(void 0!==i)for(var o=0,s=i;o<s.length;o++)s[o].text=String(e);}}}function pt(e){if(Bt)for(;rn<jt.length&&Kt[rn]<=e;rn++){var t=Bt[rn],n=jt[rn];De(t)?0===n?(Zt||(Zt=[]),Qt||(Qt=[]),Zt.push(en),en=t):1===n&&(en=Zt.pop()):xe(t)&&(0===n?(tn||(tn=[]),tn.push(t)):1===n&&tn.pop());}}function ft(e){if(_t(e),pt(e),!Gt){Gt=!1,Xt=!1;var t=qt[e];if(0!==t){if(10===t)return Tt();var n=Vt[e];if(1===t)return gt(n[0]);var r=$t[e];switch(t){case 2:return mt(n[0],n[1],r);case 3:return vt(n[0],r);case 4:return bt(n[0],n[1],r);case 5:return xt(n[0],n[1],r);case 6:return kt(n[0],r);case 7:return St(n[0],r);case 8:return ht(n[0],r);case 9:return yt(n[0],r)}}}}function gt(e){e&&(Qt?Qt.push(e):Qt=[e]);}function mt(t,n,r){gt(e.setTextRange(e.createStatement(e.createAssignment(t,n)),r));}function yt(t,n){Gt=!0,Xt=!0,gt(e.setTextRange(e.createThrow(t),n));}function ht(t,n){Gt=!0,Xt=!0,gt(e.setEmitFlags(e.setTextRange(e.createReturn(e.createArrayLiteral(t?[Ue(2),t]:[Ue(2)])),n),384));}function vt(t,n){Gt=!0,gt(e.setEmitFlags(e.setTextRange(e.createReturn(e.createArrayLiteral([Ue(3),ze(t)])),n),384));}function bt(t,n,r){gt(e.setEmitFlags(e.createIf(n,e.setEmitFlags(e.setTextRange(e.createReturn(e.createArrayLiteral([Ue(3),ze(t)])),r),384)),1));}function xt(t,n,r){gt(e.setEmitFlags(e.createIf(e.createLogicalNot(n),e.setEmitFlags(e.setTextRange(e.createReturn(e.createArrayLiteral([Ue(3),ze(t)])),r),384)),1));}function kt(t,n){Gt=!0,gt(e.setEmitFlags(e.setTextRange(e.createReturn(e.createArrayLiteral(t?[Ue(4),t]:[Ue(4)])),n),384));}function St(t,n){Gt=!0,gt(e.setEmitFlags(e.setTextRange(e.createReturn(e.createArrayLiteral([Ue(5),t])),n),384));}function Tt(){Gt=!0,gt(e.createReturn(e.createArrayLiteral([Ue(7)])));}var Ct=n.resumeLexicalEnvironment,Dt=n.endLexicalEnvironment,Et=n.hoistFunctionDeclaration,Nt=n.hoistVariableDeclaration,At=n.getCompilerOptions(),wt=e.getEmitScriptTarget(At),Pt=n.getEmitResolver(),Ot=n.onSubstituteNode;n.onSubstituteNode=ce;var Ft,It,Mt,Rt,Lt,Bt,Kt,jt,Jt,zt,Ut,qt,Vt,$t,Wt,Ht,Gt,Xt,Yt,Qt,Zt,en,tn,nn=1,rn=0,an=0;return a}function r(t,n){return t.requestEmitHelper(u),e.createCall(e.getHelperName(\"__generator\"),void 0,[e.createThis(),n])}var a;!function(e){e[e.Nop=0]=\"Nop\",e[e.Statement=1]=\"Statement\",e[e.Assign=2]=\"Assign\",e[e.Break=3]=\"Break\",e[e.BreakWhenTrue=4]=\"BreakWhenTrue\",e[e.BreakWhenFalse=5]=\"BreakWhenFalse\",e[e.Yield=6]=\"Yield\",e[e.YieldStar=7]=\"YieldStar\",e[e.Return=8]=\"Return\",e[e.Throw=9]=\"Throw\",e[e.Endfinally=10]=\"Endfinally\";}(a||(a={}));var i;!function(e){e[e.Open=0]=\"Open\",e[e.Close=1]=\"Close\";}(i||(i={}));var o;!function(e){e[e.Exception=0]=\"Exception\",e[e.With=1]=\"With\",e[e.Switch=2]=\"Switch\",e[e.Loop=3]=\"Loop\",e[e.Labeled=4]=\"Labeled\";}(o||(o={}));var s;!function(e){e[e.Try=0]=\"Try\",e[e.Catch=1]=\"Catch\",e[e.Finally=2]=\"Finally\",e[e.Done=3]=\"Done\";}(s||(s={}));var c;!function(e){e[e.Next=0]=\"Next\",e[e.Throw=1]=\"Throw\",e[e.Return=2]=\"Return\",e[e.Break=3]=\"Break\",e[e.Yield=4]=\"Yield\",e[e.YieldStar=5]=\"YieldStar\",e[e.Catch=6]=\"Catch\",e[e.Endfinally=7]=\"Endfinally\";}(c||(c={})),e.transformGenerators=n;var u={name:\"typescript:generator\",scoped:!1,priority:6,text:'\\n            var __generator = (this && this.__generator) || function (thisArg, body) {\\n                var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\\n                return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\\n                function verb(n) { return function (v) { return step([n, v]); }; }\\n                function step(op) {\\n                    if (f) throw new TypeError(\"Generator is already executing.\");\\n                    while (_) try {\\n                        if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\\n                        if (y = 0, t) op = [0, t.value];\\n                        switch (op[0]) {\\n                            case 0: case 1: t = op; break;\\n                            case 4: _.label++; return { value: op[1], done: false };\\n                            case 5: _.label++; y = op[1]; op = [0]; continue;\\n                            case 7: op = _.ops.pop(); _.trys.pop(); continue;\\n                            default:\\n                                if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\\n                                if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\\n                                if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\\n                                if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\\n                                if (t[2]) _.ops.pop();\\n                                _.trys.pop(); continue;\\n                        }\\n                        op = body.call(thisArg, _);\\n                    } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\\n                    if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\\n                }\\n            };'};}(r||(r={}));!function(e){function t(t){function i(t){switch(t){case e.ModuleKind.AMD:return u;case e.ModuleKind.UMD:return l;default:return c}}function o(t){if(t.isDeclarationFile||!(e.isExternalModule(t)||Z.isolatedModules||67108864&t.transformFlags))return t;oe=t,se=e.collectExternalModuleInfo(t,ee,Z),le[e.getOriginalNodeId(t)]=se;var n=i(re)(t);return oe=void 0,se=void 0,ue=!1,e.aggregateTransformFlags(n)}function s(){return!(se.exportEquals||!e.isExternalModule(oe))}function c(n){Y();var a=[],i=Z.alwaysStrict||!Z.noImplicitUseStrict&&e.isExternalModule(oe),o=e.addPrologue(a,n.statements,i,f);s()&&e.append(a,K()),e.append(a,e.visitNode(se.externalHelpersImportDeclaration,f,e.isStatement)),e.addRange(a,e.visitNodes(n.statements,f,e.isStatement,o)),p(a,!1),e.addRange(a,Q());var c=e.updateSourceFileNode(n,e.setTextRange(e.createNodeArray(a),n.statements));return se.hasExportStarsToExportValues&&!Z.importHelpers&&e.addEmitHelper(c,r),e.addEmitHelpers(c,t.readEmitHelpers()),c}function u(t){var n=e.createIdentifier(\"define\"),r=e.tryGetModuleNameFromFile(t,te,Z),a=_(t,!0),i=a.aliasedModuleNames,o=a.unaliasedModuleNames,s=a.importAliasNames;return e.updateSourceFileNode(t,e.setTextRange(e.createNodeArray([e.createStatement(e.createCall(n,void 0,(r?[r]:[]).concat([e.createArrayLiteral([e.createLiteral(\"require\"),e.createLiteral(\"exports\")].concat(i,o)),e.createFunctionExpression(void 0,void 0,void 0,void 0,[e.createParameter(void 0,void 0,void 0,\"require\"),e.createParameter(void 0,void 0,void 0,\"exports\")].concat(s),void 0,d(t))])))]),t.statements))}function l(t){var n=_(t,!1),r=n.aliasedModuleNames,a=n.unaliasedModuleNames,i=n.importAliasNames,o=e.createFunctionExpression(void 0,void 0,void 0,void 0,[e.createParameter(void 0,void 0,void 0,\"factory\")],void 0,e.setTextRange(e.createBlock([e.createIf(e.createLogicalAnd(e.createTypeCheck(e.createIdentifier(\"module\"),\"object\"),e.createTypeCheck(e.createPropertyAccess(e.createIdentifier(\"module\"),\"exports\"),\"object\")),e.createBlock([e.createVariableStatement(void 0,[e.createVariableDeclaration(\"v\",void 0,e.createCall(e.createIdentifier(\"factory\"),void 0,[e.createIdentifier(\"require\"),e.createIdentifier(\"exports\")]))]),e.setEmitFlags(e.createIf(e.createStrictInequality(e.createIdentifier(\"v\"),e.createIdentifier(\"undefined\")),e.createStatement(e.createAssignment(e.createPropertyAccess(e.createIdentifier(\"module\"),\"exports\"),e.createIdentifier(\"v\")))),1)]),e.createIf(e.createLogicalAnd(e.createTypeCheck(e.createIdentifier(\"define\"),\"function\"),e.createPropertyAccess(e.createIdentifier(\"define\"),\"amd\")),e.createBlock([e.createStatement(e.createCall(e.createIdentifier(\"define\"),void 0,[e.createArrayLiteral([e.createLiteral(\"require\"),e.createLiteral(\"exports\")].concat(r,a)),e.createIdentifier(\"factory\")]))])))],!0),void 0));return e.updateSourceFileNode(t,e.setTextRange(e.createNodeArray([e.createStatement(e.createCall(o,void 0,[e.createFunctionExpression(void 0,void 0,void 0,void 0,[e.createParameter(void 0,void 0,void 0,\"require\"),e.createParameter(void 0,void 0,void 0,\"exports\")].concat(i),void 0,d(t))]))]),t.statements))}function _(t,n){for(var r=[],a=[],i=[],o=0,s=t.amdDependencies;o<s.length;o++){var c=s[o];c.name?(r.push(e.createLiteral(c.path)),i.push(e.createParameter(void 0,void 0,void 0,c.name))):a.push(e.createLiteral(c.path));}for(var u=0,l=se.externalImports;u<l.length;u++){var _=l[u],d=e.getExternalModuleNameLiteral(_,oe,te,ee,Z),p=e.getLocalNameForExternalImport(_,oe);d&&(n&&p?(e.setEmitFlags(p,4),r.push(d),i.push(e.createParameter(void 0,void 0,void 0,p))):a.push(d));}return{aliasedModuleNames:r,unaliasedModuleNames:a,importAliasNames:i}}function d(t){Y();var n=[],i=e.addPrologue(n,t.statements,!Z.noImplicitUseStrict,f);s()&&e.append(n,K()),e.append(n,e.visitNode(se.externalHelpersImportDeclaration,f,e.isStatement)),e.addRange(n,e.visitNodes(t.statements,f,e.isStatement,i)),p(n,!0),e.addRange(n,Q());var o=e.createBlock(n,!0);return se.hasExportStarsToExportValues&&!Z.importHelpers&&e.addEmitHelper(o,r),ue&&e.addEmitHelper(o,a),o}function p(t,n){if(se.exportEquals)if(n){r=e.createReturn(se.exportEquals.expression);e.setTextRange(r,se.exportEquals),e.setEmitFlags(r,1920),t.push(r);}else{var r=e.createStatement(e.createAssignment(e.createPropertyAccess(e.createIdentifier(\"module\"),\"exports\"),se.exportEquals.expression));e.setTextRange(r,se.exportEquals),e.setEmitFlags(r,1536),t.push(r);}}function f(n){switch(n.kind){case 238:return b(n);case 237:return k(n);case 244:return S(n);case 243:return T(n);case 208:return E(n);case 228:return C(n);case 229:return D(n);case 299:return A(n);case 300:return P(n);default:return e.visitEachChild(n,g,t)}}function g(n){return 67108864&n.transformFlags?e.isImportCall(n)?m(n):e.visitEachChild(n,g,t):n}function m(t){switch(Z.module){case e.ModuleKind.AMD:return h(t);case e.ModuleKind.UMD:return y(t);case e.ModuleKind.CommonJS:default:return v(t)}}function y(t){return ue=!0,e.createConditional(e.createIdentifier(\"__syncRequire\"),v(t),h(t))}function h(t){var n=e.createUniqueName(\"resolve\"),r=e.createUniqueName(\"reject\");return e.createNew(e.createIdentifier(\"Promise\"),void 0,[e.createFunctionExpression(void 0,void 0,void 0,void 0,[e.createParameter(void 0,void 0,void 0,n),e.createParameter(void 0,void 0,void 0,r)],void 0,e.createBlock([e.createStatement(e.createCall(e.createIdentifier(\"require\"),void 0,[e.createArrayLiteral([e.firstOrUndefined(t.arguments)||e.createOmittedExpression()]),n,r]))]))])}function v(t){return e.createCall(e.createPropertyAccess(e.createCall(e.createPropertyAccess(e.createIdentifier(\"Promise\"),\"resolve\"),void 0,[]),\"then\"),void 0,[e.createFunctionExpression(void 0,void 0,void 0,void 0,void 0,void 0,e.createBlock([e.createReturn(e.createCall(e.createIdentifier(\"require\"),void 0,t.arguments))]))])}function b(t){var n,r=e.getNamespaceDeclarationNode(t);if(re!==e.ModuleKind.AMD){if(!t.importClause)return e.setTextRange(e.createStatement(x(t)),t);var a=[];r&&!e.isDefaultImport(t)?a.push(e.createVariableDeclaration(e.getSynthesizedClone(r.name),void 0,x(t))):(a.push(e.createVariableDeclaration(e.getGeneratedNameForNode(t),void 0,x(t))),r&&e.isDefaultImport(t)&&a.push(e.createVariableDeclaration(e.getSynthesizedClone(r.name),void 0,e.getGeneratedNameForNode(t)))),n=e.append(n,e.setTextRange(e.createVariableStatement(void 0,e.createVariableDeclarationList(a,ne>=2?2:0)),t));}else r&&e.isDefaultImport(t)&&(n=e.append(n,e.createVariableStatement(void 0,e.createVariableDeclarationList([e.setTextRange(e.createVariableDeclaration(e.getSynthesizedClone(r.name),void 0,e.getGeneratedNameForNode(t)),t)],ne>=2?2:0))));if(w(t)){var i=e.getOriginalNodeId(t);_e[i]=O(_e[i],t);}else n=O(n,t);return e.singleOrMany(n)}function x(t){var n=e.getExternalModuleNameLiteral(t,oe,te,ee,Z),r=[];return n&&r.push(n),e.createCall(e.createIdentifier(\"require\"),void 0,r)}function k(t){e.Debug.assert(e.isExternalModuleImportEqualsDeclaration(t),\"import= for internal module references should be handled in an earlier transformer.\");var n;if(re!==e.ModuleKind.AMD?n=e.hasModifier(t,1)?e.append(n,e.setTextRange(e.createStatement(J(t.name,x(t))),t)):e.append(n,e.setTextRange(e.createVariableStatement(void 0,e.createVariableDeclarationList([e.createVariableDeclaration(e.getSynthesizedClone(t.name),void 0,x(t))],ne>=2?2:0)),t)):e.hasModifier(t,1)&&(n=e.append(n,e.setTextRange(e.createStatement(J(e.getExportName(t),e.getLocalName(t))),t))),w(t)){var r=e.getOriginalNodeId(t);_e[r]=F(_e[r],t);}else n=F(n,t);return e.singleOrMany(n)}function S(r){if(r.moduleSpecifier){var a=e.getGeneratedNameForNode(r);if(r.exportClause){var i=[];re!==e.ModuleKind.AMD&&i.push(e.setTextRange(e.createVariableStatement(void 0,e.createVariableDeclarationList([e.createVariableDeclaration(a,void 0,x(r))])),r));for(var o=0,s=r.exportClause.elements;o<s.length;o++){var c=s[o],u=e.createPropertyAccess(a,c.propertyName||c.name);i.push(e.setTextRange(e.createStatement(J(e.getExportName(c),u)),c));}return e.singleOrMany(i)}return e.setTextRange(e.createStatement(n(t,re!==e.ModuleKind.AMD?x(r):a)),r)}}function T(t){if(!t.isExportEquals){var n,r=t.original;if(r&&w(r)){var a=e.getOriginalNodeId(t);_e[a]=B(_e[a],e.createIdentifier(\"default\"),t.expression,t,!0);}else n=B(n,e.createIdentifier(\"default\"),t.expression,t,!0);return e.singleOrMany(n)}}function C(n){var r;if(r=e.hasModifier(n,1)?e.append(r,e.setOriginalNode(e.setTextRange(e.createFunctionDeclaration(void 0,e.visitNodes(n.modifiers,z,e.isModifier),n.asteriskToken,e.getDeclarationName(n,!0,!0),void 0,e.visitNodes(n.parameters,g),void 0,e.visitEachChild(n.body,g,t)),n),n)):e.append(r,e.visitEachChild(n,g,t)),w(n)){var a=e.getOriginalNodeId(n);_e[a]=R(_e[a],n);}else r=R(r,n);return e.singleOrMany(r)}function D(n){var r;if(r=e.hasModifier(n,1)?e.append(r,e.setOriginalNode(e.setTextRange(e.createClassDeclaration(void 0,e.visitNodes(n.modifiers,z,e.isModifier),e.getDeclarationName(n,!0,!0),void 0,e.visitNodes(n.heritageClauses,g),n.members),n),n)):e.append(r,e.visitEachChild(n,g,t)),w(n)){var a=e.getOriginalNodeId(n);_e[a]=R(_e[a],n);}else r=R(r,n);return e.singleOrMany(r)}function E(n){var r,a,i;if(e.hasModifier(n,1)){for(var o=void 0,s=0,c=n.declarationList.declarations;s<c.length;s++){var u=c[s];e.isIdentifier(u.name)&&e.isLocalName(u.name)?(o||(o=e.visitNodes(n.modifiers,z,e.isModifier)),a=e.append(a,u)):u.initializer&&(i=e.append(i,N(u)));}a&&(r=e.append(r,e.updateVariableStatement(n,o,e.updateVariableDeclarationList(n.declarationList,a)))),i&&(r=e.append(r,e.setTextRange(e.createStatement(e.inlineExpressions(i)),n)));}else r=e.append(r,e.visitEachChild(n,g,t));if(w(n)){var l=e.getOriginalNodeId(n);_e[l]=I(_e[l],n);}else r=I(r,n);return e.singleOrMany(r)}function N(n){return e.isBindingPattern(n.name)?e.flattenDestructuringAssignment(e.visitNode(n,g),void 0,t,0,!1,J):e.createAssignment(e.setTextRange(e.createPropertyAccess(e.createIdentifier(\"exports\"),n.name),n.name),e.visitNode(n.initializer,g))}function A(t){if(w(t)&&208===t.original.kind){var n=e.getOriginalNodeId(t);_e[n]=I(_e[n],t.original);}return t}function w(t){return 0!=(4194304&e.getEmitFlags(t))}function P(t){var n=e.getOriginalNodeId(t),r=_e[n];return r?(delete _e[n],e.append(r,t)):t}function O(e,t){if(se.exportEquals)return e;var n=t.importClause;if(!n)return e;n.name&&(e=L(e,n));var r=n.namedBindings;if(r)switch(r.kind){case 240:e=L(e,r);break;case 241:for(var a=0,i=r.elements;a<i.length;a++)e=L(e,i[a]);}return e}function F(e,t){return se.exportEquals?e:L(e,t)}function I(e,t){if(se.exportEquals)return e;for(var n=0,r=t.declarationList.declarations;n<r.length;n++)e=M(e,r[n]);return e}function M(t,n){if(se.exportEquals)return t;if(e.isBindingPattern(n.name))for(var r=0,a=n.name.elements;r<a.length;r++){var i=a[r];e.isOmittedExpression(i)||(t=M(t,i));}else e.isGeneratedIdentifier(n.name)||(t=L(t,n));return t}function R(t,n){return se.exportEquals?t:(e.hasModifier(n,1)&&(t=B(t,e.hasModifier(n,512)?e.createIdentifier(\"default\"):n.name,e.getLocalName(n),n)),n.name&&(t=L(t,n)),t)}function L(t,n){var r=e.getDeclarationName(n),a=se.exportSpecifiers.get(r.text);if(a)for(var i=0,o=a;i<o.length;i++){var s=o[i];t=B(t,s.name,r,s.name);}return t}function B(t,n,r,a,i){return t=e.append(t,j(n,r,a,i))}function K(){var t;return t=0===ne?e.createStatement(J(e.createIdentifier(\"__esModule\"),e.createLiteral(!0))):e.createStatement(e.createCall(e.createPropertyAccess(e.createIdentifier(\"Object\"),\"defineProperty\"),void 0,[e.createIdentifier(\"exports\"),e.createLiteral(\"__esModule\"),e.createObjectLiteral([e.createPropertyAssignment(\"value\",e.createLiteral(!0))])])),e.setEmitFlags(t,1048576),t}function j(t,n,r,a){var i=e.setTextRange(e.createStatement(J(t,n)),r);return e.startOnNewLine(i),a||e.setEmitFlags(i,1536),i}function J(t,n,r){return e.setTextRange(e.createAssignment(e.createPropertyAccess(e.createIdentifier(\"exports\"),e.getSynthesizedClone(t)),n),r)}function z(e){switch(e.kind){case 84:case 79:return}return e}function U(t,n,r){265===n.kind?(oe=n,se=le[e.getOriginalNodeId(oe)],ce=[],ie(t,n,r),oe=void 0,se=void 0,ce=void 0):ie(t,n,r);}function q(t,n){return n=ae(t,n),n.id&&ce[n.id]?n:1===t?$(n):e.isShorthandPropertyAssignment(n)?V(n):n}function V(t){var n=t.name,r=W(n);if(r!==n){if(t.objectAssignmentInitializer){var a=e.createAssignment(r,t.objectAssignmentInitializer);return e.setTextRange(e.createPropertyAssignment(n,a),t)}return e.setTextRange(e.createPropertyAssignment(n,r),t)}return t}function $(e){switch(e.kind){case 71:return W(e);case 194:return H(e);case 193:case 192:return G(e)}return e}function W(t){if(4096&e.getEmitFlags(t)){var n=e.getExternalHelpersModuleName(oe);return n?e.createPropertyAccess(n,t):t}if(!e.isGeneratedIdentifier(t)&&!e.isLocalName(t)){var r=ee.getReferencedExportContainer(t,e.isExportName(t));if(r&&265===r.kind)return e.setTextRange(e.createPropertyAccess(e.createIdentifier(\"exports\"),e.getSynthesizedClone(t)),t);var a=ee.getReferencedImportDeclaration(t);if(a){if(e.isImportClause(a))return e.setTextRange(e.createPropertyAccess(e.getGeneratedNameForNode(a.parent),e.createIdentifier(\"default\")),t);if(e.isImportSpecifier(a)){var i=a.propertyName||a.name;return e.setTextRange(e.createPropertyAccess(e.getGeneratedNameForNode(a.parent.parent.parent),e.getSynthesizedClone(i)),t)}}}return t}function H(t){if(e.isAssignmentOperator(t.operatorToken.kind)&&e.isIdentifier(t.left)&&!e.isGeneratedIdentifier(t.left)&&!e.isLocalName(t.left)&&!e.isDeclarationNameOfEnumOrNamespace(t.left)){var n=X(t.left);if(n){for(var r=t,a=0,i=n;a<i.length;a++){var o=i[a];ce[e.getNodeId(r)]=!0,r=J(o,r,t);}return r}}return t}function G(t){if((43===t.operator||44===t.operator)&&e.isIdentifier(t.operand)&&!e.isGeneratedIdentifier(t.operand)&&!e.isLocalName(t.operand)&&!e.isDeclarationNameOfEnumOrNamespace(t.operand)){var n=X(t.operand);if(n){for(var r=193===t.kind?e.setTextRange(e.createBinary(t.operand,e.createToken(43===t.operator?59:60),e.createLiteral(1)),t):t,a=0,i=n;a<i.length;a++){var o=i[a];ce[e.getNodeId(r)]=!0,r=J(o,r);}return r}}return t}function X(t){if(!e.isGeneratedIdentifier(t)){var n=ee.getReferencedImportDeclaration(t)||ee.getReferencedValueDeclaration(t);if(n)return se&&se.exportedBindings[e.getOriginalNodeId(n)]}}var Y=t.startLexicalEnvironment,Q=t.endLexicalEnvironment,Z=t.getCompilerOptions(),ee=t.getEmitResolver(),te=t.getEmitHost(),ne=e.getEmitScriptTarget(Z),re=e.getEmitModuleKind(Z),ae=t.onSubstituteNode,ie=t.onEmitNode;t.onSubstituteNode=q,t.onEmitNode=U,t.enableSubstitution(71),t.enableSubstitution(194),t.enableSubstitution(192),t.enableSubstitution(193),t.enableSubstitution(262),t.enableEmitNotification(265);var oe,se,ce,ue,le=[],_e=[];return o}function n(t,n){return t.getCompilerOptions().importHelpers?e.createCall(e.getHelperName(\"__exportStar\"),void 0,[n,e.createIdentifier(\"exports\")]):e.createCall(e.createIdentifier(\"__export\"),void 0,[n])}e.transformModule=t;var r={name:\"typescript:export-star\",scoped:!0,text:\"\\n            function __export(m) {\\n                for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\\n            }\\n        \"},a={name:\"typescript:dynamicimport-sync-require\",scoped:!0,text:'\\n            var __syncRequire = typeof module === \"object\" && typeof module.exports === \"object\";'};}(r||(r={}));!function(e){function t(t){function n(t){if(t.isDeclarationFile||!(e.isEffectiveExternalModule(t,pe)||67108864&t.transformFlags))return t;var n=e.getOriginalNodeId(t);he=t,Se=t,ve=Ce[n]=e.collectExternalModuleInfo(t,fe,pe),be=e.createUniqueName(\"exports\"),Ee[n]=be,xe=e.createUniqueName(\"context\");var i=r(ve.externalImports),o=a(t,i),s=e.createFunctionExpression(void 0,void 0,void 0,void 0,[e.createParameter(void 0,void 0,void 0,be),e.createParameter(void 0,void 0,void 0,xe)],void 0,o),c=e.tryGetModuleNameFromFile(t,ge,pe),u=e.createArrayLiteral(e.map(i,function(e){return e.name})),l=e.setEmitFlags(e.updateSourceFileNode(t,e.setTextRange(e.createNodeArray([e.createStatement(e.createCall(e.createPropertyAccess(e.createIdentifier(\"System\"),\"register\"),void 0,c?[c,u,s]:[u,s]))]),t.statements)),1024);return pe.outFile||pe.out||e.moveEmitHelpers(l,o,function(e){return!e.scoped}),Te&&(Ne[n]=Te,Te=void 0),he=void 0,ve=void 0,be=void 0,xe=void 0,ke=void 0,Se=void 0,e.aggregateTransformFlags(l)}function r(t){for(var n=e.createMap(),r=[],a=0;a<t.length;a++){var i=t[a],o=e.getExternalModuleNameLiteral(i,he,ge,fe,pe);if(o){var s=o.text,c=n.get(s);void 0!==c?r[c].externalImports.push(i):(n.set(s,r.length),r.push({name:o,externalImports:[i]}));}}return r}function a(t,n){var r=[];le();var a=pe.alwaysStrict||!pe.noImplicitUseStrict&&e.isExternalModule(he),o=e.addPrologue(r,t.statements,a,c);r.push(e.createVariableStatement(void 0,e.createVariableDeclarationList([e.createVariableDeclaration(\"__moduleName\",void 0,e.createLogicalAnd(xe,e.createPropertyAccess(xe,\"id\")))]))),e.visitNode(ve.externalHelpersImportDeclaration,c,e.isStatement);var u=e.visitNodes(t.statements,c,e.isStatement,o);e.addRange(r,ke),e.addRange(r,_e());var l=i(r),_=e.createObjectLiteral([e.createPropertyAssignment(\"setters\",s(l,n)),e.createPropertyAssignment(\"execute\",e.createFunctionExpression(void 0,void 0,void 0,void 0,[],void 0,e.createBlock(u,!0)))]);return _.multiLine=!0,r.push(e.createReturn(_)),e.createBlock(r,!0)}function i(t){if(ve.hasExportStarsToExportValues){if(!ve.exportedNames&&0===ve.exportSpecifiers.size){for(var n=!1,r=0,a=ve.externalImports;r<a.length;r++)if(244===(p=a[r]).kind&&p.exportClause){n=!0;break}if(!n){var i=o(void 0);return t.push(i),i.name}}var s=[];if(ve.exportedNames)for(var c=0,u=ve.exportedNames;c<u.length;c++){var l=u[c];\"default\"!==l.text&&s.push(e.createPropertyAssignment(e.createLiteral(l),e.createTrue()));}for(var _=0,d=ve.externalImports;_<d.length;_++){var p=d[_];if(244===p.kind){var f=p;if(f.exportClause)for(var g=0,m=f.exportClause.elements;g<m.length;g++){var y=m[g];s.push(e.createPropertyAssignment(e.createLiteral((y.name||y.propertyName).text),e.createTrue()));}}}var h=e.createUniqueName(\"exportedNames\");t.push(e.createVariableStatement(void 0,e.createVariableDeclarationList([e.createVariableDeclaration(h,void 0,e.createObjectLiteral(s,!0))])));var v=o(h);return t.push(v),v.name}}function o(t){var n=e.createUniqueName(\"exportStar\"),r=e.createIdentifier(\"m\"),a=e.createIdentifier(\"n\"),i=e.createIdentifier(\"exports\"),o=e.createStrictInequality(a,e.createLiteral(\"default\"));return t&&(o=e.createLogicalAnd(o,e.createLogicalNot(e.createCall(e.createPropertyAccess(t,\"hasOwnProperty\"),void 0,[a])))),e.createFunctionDeclaration(void 0,void 0,void 0,n,void 0,[e.createParameter(void 0,void 0,void 0,r)],void 0,e.createBlock([e.createVariableStatement(void 0,e.createVariableDeclarationList([e.createVariableDeclaration(i,void 0,e.createObjectLiteral([]))])),e.createForIn(e.createVariableDeclarationList([e.createVariableDeclaration(a,void 0)]),r,e.createBlock([e.setEmitFlags(e.createIf(o,e.createStatement(e.createAssignment(e.createElementAccess(i,a),e.createElementAccess(r,a)))),1)])),e.createStatement(e.createCall(be,void 0,[i]))],!0))}function s(t,n){for(var r=[],a=0,i=n;a<i.length;a++){for(var o=i[a],s=e.forEach(o.externalImports,function(t){return e.getLocalNameForExternalImport(t,he)}),c=s?e.getGeneratedNameForNode(s):e.createUniqueName(\"\"),u=[],l=0,_=o.externalImports;l<_.length;l++){var d=_[l],p=e.getLocalNameForExternalImport(d,he);switch(d.kind){case 238:if(!d.importClause)break;case 237:e.Debug.assert(void 0!==p),u.push(e.createStatement(e.createAssignment(p,c)));break;case 244:if(e.Debug.assert(void 0!==p),d.exportClause){for(var f=[],g=0,m=d.exportClause.elements;g<m.length;g++){var y=m[g];f.push(e.createPropertyAssignment(e.createLiteral(y.name.text),e.createElementAccess(c,e.createLiteral((y.propertyName||y.name).text))));}u.push(e.createStatement(e.createCall(be,void 0,[e.createObjectLiteral(f,!0)])));}else u.push(e.createStatement(e.createCall(t,void 0,[c])));}}r.push(e.createFunctionExpression(void 0,void 0,void 0,void 0,[e.createParameter(void 0,void 0,void 0,c)],void 0,e.createBlock(u,!0)));}return e.createArrayLiteral(r,!0)}function c(e){switch(e.kind){case 238:return u(e);case 237:return l(e);case 244:return;case 243:return _(e);default:return F(e)}}function u(t){var n;if(t.importClause&&de(e.getLocalNameForExternalImport(t,he)),k(t)){var r=e.getOriginalNodeId(t);De[r]=T(De[r],t);}else n=T(n,t);return e.singleOrMany(n)}function l(t){e.Debug.assert(e.isExternalModuleImportEqualsDeclaration(t),\"import= for internal module references should be handled in an earlier transformer.\");var n;if(de(e.getLocalNameForExternalImport(t,he)),k(t)){var r=e.getOriginalNodeId(t);De[r]=C(De[r],t);}else n=C(n,t);return e.singleOrMany(n)}function _(t){if(!t.isExportEquals){var n=e.visitNode(t.expression,X,e.isExpression),r=t.original;if(!r||!k(r))return P(e.createIdentifier(\"default\"),n,!0);var a=e.getOriginalNodeId(t);De[a]=w(De[a],e.createIdentifier(\"default\"),n,!0);}}function d(n){if(ke=e.hasModifier(n,1)?e.append(ke,e.updateFunctionDeclaration(n,n.decorators,e.visitNodes(n.modifiers,ee,e.isModifier),n.asteriskToken,e.getDeclarationName(n,!0,!0),void 0,e.visitNodes(n.parameters,X,e.isParameterDeclaration),void 0,e.visitNode(n.body,X,e.isBlock))):e.append(ke,e.visitEachChild(n,X,t)),k(n)){var r=e.getOriginalNodeId(n);De[r]=N(De[r],n);}else ke=N(ke,n);}function p(t){var n,r=e.getLocalName(t);if(de(r),n=e.append(n,e.setTextRange(e.createStatement(e.createAssignment(r,e.setTextRange(e.createClassExpression(void 0,t.name,void 0,e.visitNodes(t.heritageClauses,X,e.isHeritageClause),e.visitNodes(t.members,X,e.isClassElement)),t))),t)),k(t)){var a=e.getOriginalNodeId(t);De[a]=N(De[a],t);}else n=N(n,t);return e.singleOrMany(n)}function f(t){if(!m(t.declarationList))return e.visitNode(t,X,e.isStatement);for(var n,r=e.hasModifier(t,1),a=k(t),i=0,o=t.declarationList.declarations;i<o.length;i++){var s=o[i];s.initializer?n=e.append(n,y(s,r&&!a)):g(s);}var c;if(n&&(c=e.append(c,e.setTextRange(e.createStatement(e.inlineExpressions(n)),t))),a){var u=e.getOriginalNodeId(t);De[u]=D(De[u],t,r);}else c=D(c,t,!1);return e.singleOrMany(c)}function g(t){if(e.isBindingPattern(t.name))for(var n=0,r=t.name.elements;n<r.length;n++){var a=r[n];e.isOmittedExpression(a)||g(a);}else de(e.getSynthesizedClone(t.name));}function m(t){return 0==(2097152&e.getEmitFlags(t))&&(265===Se.kind||0==(3&e.getOriginalNode(t).flags))}function y(n,r){var a=r?h:v;return e.isBindingPattern(n.name)?e.flattenDestructuringAssignment(n,X,t,0,!1,a):a(n.name,e.visitNode(n.initializer,X,e.isExpression))}function h(e,t,n){return b(e,t,n,!0)}function v(e,t,n){return b(e,t,n,!1)}function b(t,n,r,a){return de(e.getSynthesizedClone(t)),a?O(t,ce(e.setTextRange(e.createAssignment(t,n),r))):ce(e.setTextRange(e.createAssignment(t,n),r))}function x(t){if(k(t)&&208===t.original.kind){var n=e.getOriginalNodeId(t),r=e.hasModifier(t.original,1);De[n]=D(De[n],t.original,r);}return t}function k(t){return 0!=(4194304&e.getEmitFlags(t))}function S(t){var n=e.getOriginalNodeId(t),r=De[n];return r?(delete De[n],e.append(r,t)):t}function T(e,t){if(ve.exportEquals)return e;var n=t.importClause;if(!n)return e;n.name&&(e=A(e,n));var r=n.namedBindings;if(r)switch(r.kind){case 240:e=A(e,r);break;case 241:for(var a=0,i=r.elements;a<i.length;a++)e=A(e,i[a]);}return e}function C(e,t){return ve.exportEquals?e:A(e,t)}function D(e,t,n){if(ve.exportEquals)return e;for(var r=0,a=t.declarationList.declarations;r<a.length;r++){var i=a[r];(i.initializer||n)&&(e=E(e,i,n));}return e}function E(t,n,r){if(ve.exportEquals)return t;if(e.isBindingPattern(n.name))for(var a=0,i=n.name.elements;a<i.length;a++){var o=i[a];e.isOmittedExpression(o)||(t=E(t,o,r));}else if(!e.isGeneratedIdentifier(n.name)){var s=void 0;r&&(t=w(t,n.name,e.getLocalName(n)),s=n.name.text),t=A(t,n,s);}return t}function N(t,n){if(ve.exportEquals)return t;var r;if(e.hasModifier(n,1)){var a=e.hasModifier(n,512)?e.createLiteral(\"default\"):n.name;t=w(t,a,e.getLocalName(n)),r=a.text;}return n.name&&(t=A(t,n,r)),t}function A(t,n,r){if(ve.exportEquals)return t;var a=e.getDeclarationName(n),i=ve.exportSpecifiers.get(a.text);if(i)for(var o=0,s=i;o<s.length;o++){var c=s[o];c.name.text!==r&&(t=w(t,c.name,a));}return t}function w(t,n,r,a){return t=e.append(t,P(n,r,a))}function P(t,n,r){var a=e.createStatement(O(t,n));return e.startOnNewLine(a),r||e.setEmitFlags(a,1536),a}function O(t,n){var r=e.isIdentifier(t)?e.createLiteral(t):t;return e.createCall(be,void 0,[r,n])}function F(e){switch(e.kind){case 208:return f(e);case 228:return d(e);case 229:return p(e);case 214:return I(e);case 215:return M(e);case 216:return R(e);case 212:return K(e);case 213:return j(e);case 222:return J(e);case 220:return z(e);case 221:return U(e);case 235:return q(e);case 257:return V(e);case 258:return $(e);case 224:return W(e);case 260:return H(e);case 207:return G(e);case 299:return x(e);case 300:return S(e);default:return X(e)}}function I(t){var n=Se;return Se=t,t=e.updateFor(t,B(t.initializer),e.visitNode(t.condition,X,e.isExpression),e.visitNode(t.incrementor,X,e.isExpression),e.visitNode(t.statement,F,e.isStatement)),Se=n,t}function M(t){var n=Se;return Se=t,t=e.updateForIn(t,B(t.initializer),e.visitNode(t.expression,X,e.isExpression),e.visitNode(t.statement,F,e.isStatement,e.liftToBlock)),Se=n,t}function R(t){var n=Se;return Se=t,t=e.updateForOf(t,t.awaitModifier,B(t.initializer),e.visitNode(t.expression,X,e.isExpression),e.visitNode(t.statement,F,e.isStatement,e.liftToBlock)),Se=n,t}function L(t){return e.isVariableDeclarationList(t)&&m(t)}function B(n){if(!n)return n;if(L(n)){for(var r=void 0,a=0,i=n.declarations;a<i.length;a++){var o=i[a];r=e.append(r,y(o,!1));}return r?e.inlineExpressions(r):e.createOmittedExpression()}return e.visitEachChild(n,F,t)}function K(t){return e.updateDo(t,e.visitNode(t.statement,F,e.isStatement,e.liftToBlock),e.visitNode(t.expression,X,e.isExpression))}function j(t){return e.updateWhile(t,e.visitNode(t.expression,X,e.isExpression),e.visitNode(t.statement,F,e.isStatement,e.liftToBlock))}function J(t){return e.updateLabel(t,t.label,e.visitNode(t.statement,F,e.isStatement,e.liftToBlock))}function z(t){return e.updateWith(t,e.visitNode(t.expression,X,e.isExpression),e.visitNode(t.statement,F,e.isStatement,e.liftToBlock))}function U(t){return e.updateSwitch(t,e.visitNode(t.expression,X,e.isExpression),e.visitNode(t.caseBlock,F,e.isCaseBlock))}function q(t){var n=Se;return Se=t,t=e.updateCaseBlock(t,e.visitNodes(t.clauses,F,e.isCaseOrDefaultClause)),Se=n,t}function V(t){return e.updateCaseClause(t,e.visitNode(t.expression,X,e.isExpression),e.visitNodes(t.statements,F,e.isStatement))}function $(n){return e.visitEachChild(n,F,t)}function W(n){return e.visitEachChild(n,F,t)}function H(t){var n=Se;return Se=t,t=e.updateCatchClause(t,t.variableDeclaration,e.visitNode(t.block,F,e.isBlock)),Se=n,t}function G(n){var r=Se;return Se=n,n=e.visitEachChild(n,F,t),Se=r,n}function X(n){return 1024&n.transformFlags&&194===n.kind?Q(n):e.isImportCall(n)?Y(n):2048&n.transformFlags||67108864&n.transformFlags?e.visitEachChild(n,X,t):n}function Y(t){return e.createCall(e.createPropertyAccess(xe,e.createIdentifier(\"import\")),void 0,t.arguments)}function Q(n){return Z(n.left)?e.flattenDestructuringAssignment(n,X,t,0,!0):e.visitEachChild(n,X,t)}function Z(t){if(e.isAssignmentExpression(t,!0))return Z(t.left);if(e.isSpreadElement(t))return Z(t.expression);if(e.isObjectLiteralExpression(t))return e.some(t.properties,Z);if(e.isArrayLiteralExpression(t))return e.some(t.elements,Z);if(e.isShorthandPropertyAssignment(t))return Z(t.name);if(e.isPropertyAssignment(t))return Z(t.initializer);if(e.isIdentifier(t)){var n=fe.getReferencedExportContainer(t);return void 0!==n&&265===n.kind}return!1}function ee(e){switch(e.kind){case 84:case 79:return}return e}function te(t,n,r){if(265===n.kind){var a=e.getOriginalNodeId(n);he=n,ve=Ce[a],be=Ee[a],(Te=Ne[a])&&delete Ne[a],ye(t,n,r),he=void 0,ve=void 0,be=void 0,Te=void 0;}else ye(t,n,r);}function ne(e,t){return t=me(e,t),ue(t)?t:1===e?re(t):t}function re(e){switch(e.kind){case 71:return ae(e);case 194:return ie(e);case 192:case 193:return oe(e)}return e}function ae(t){if(4096&e.getEmitFlags(t)){var n=e.getExternalHelpersModuleName(he);return n?e.createPropertyAccess(n,t):t}if(!e.isGeneratedIdentifier(t)&&!e.isLocalName(t)){var r=fe.getReferencedImportDeclaration(t);if(r){if(e.isImportClause(r))return e.setTextRange(e.createPropertyAccess(e.getGeneratedNameForNode(r.parent),e.createIdentifier(\"default\")),t);if(e.isImportSpecifier(r))return e.setTextRange(e.createPropertyAccess(e.getGeneratedNameForNode(r.parent.parent.parent),e.getSynthesizedClone(r.propertyName||r.name)),t)}}return t}function ie(t){if(e.isAssignmentOperator(t.operatorToken.kind)&&e.isIdentifier(t.left)&&!e.isGeneratedIdentifier(t.left)&&!e.isLocalName(t.left)&&!e.isDeclarationNameOfEnumOrNamespace(t.left)){var n=se(t.left);if(n){for(var r=t,a=0,i=n;a<i.length;a++)r=O(i[a],ce(r));return r}}return t}function oe(t){if((43===t.operator||44===t.operator)&&e.isIdentifier(t.operand)&&!e.isGeneratedIdentifier(t.operand)&&!e.isLocalName(t.operand)&&!e.isDeclarationNameOfEnumOrNamespace(t.operand)){var n=se(t.operand);if(n){for(var r=193===t.kind?e.setTextRange(e.createPrefix(t.operator,t.operand),t):t,a=0,i=n;a<i.length;a++)r=O(i[a],ce(r));return 193===t.kind&&(r=43===t.operator?e.createSubtract(ce(r),e.createLiteral(1)):e.createAdd(ce(r),e.createLiteral(1))),r}}return t}function se(t){var n;if(!e.isGeneratedIdentifier(t)){var r=fe.getReferencedImportDeclaration(t)||fe.getReferencedValueDeclaration(t);if(r){var a=fe.getReferencedExportContainer(t,!1);a&&265===a.kind&&(n=e.append(n,e.getDeclarationName(r))),n=e.addRange(n,ve&&ve.exportedBindings[e.getOriginalNodeId(r)]);}}return n}function ce(t){return void 0===Te&&(Te=[]),Te[e.getNodeId(t)]=!0,t}function ue(e){return Te&&e.id&&Te[e.id]}var le=t.startLexicalEnvironment,_e=t.endLexicalEnvironment,de=t.hoistVariableDeclaration,pe=t.getCompilerOptions(),fe=t.getEmitResolver(),ge=t.getEmitHost(),me=t.onSubstituteNode,ye=t.onEmitNode;t.onSubstituteNode=ne,t.onEmitNode=te,t.enableSubstitution(71),t.enableSubstitution(194),t.enableSubstitution(192),t.enableSubstitution(193),t.enableEmitNotification(265);var he,ve,be,xe,ke,Se,Te,Ce=[],De=[],Ee=[],Ne=[];return n}e.transformSystemModule=t;}(r||(r={}));!function(e){function t(t){function n(n){if(n.isDeclarationFile)return n;if(e.isExternalModule(n)||c.isolatedModules){var a=e.getOrCreateExternalHelpersModuleNameIfNeeded(n,c);if(a){var i=[],o=e.addPrologue(i,n.statements);return e.append(i,e.createImportDeclaration(void 0,void 0,e.createImportClause(void 0,e.createNamespaceImport(a)),e.createLiteral(e.externalHelpersModuleNameText))),e.addRange(i,e.visitNodes(n.statements,r,e.isStatement,o)),e.updateSourceFileNode(n,e.setTextRange(e.createNodeArray(i),n.statements))}return e.visitEachChild(n,r,t)}return n}function r(e){switch(e.kind){case 237:return;case 243:return a(e)}return e}function a(e){return e.isExportEquals?void 0:e}function i(t,n,r){e.isSourceFile(n)?(_=n,u(t,n,r),_=void 0):u(t,n,r);}function o(t,n){return n=l(t,n),e.isIdentifier(n)&&1===t?s(n):n}function s(t){if(4096&e.getEmitFlags(t)){var n=e.getExternalHelpersModuleName(_);if(n)return e.createPropertyAccess(n,t)}return t}var c=t.getCompilerOptions(),u=t.onEmitNode,l=t.onSubstituteNode;t.onEmitNode=i,t.onSubstituteNode=o,t.enableEmitNotification(265),t.enableSubstitution(71);var _;return n}e.transformES2015Module=t;}(r||(r={}));!function(e){function t(t){switch(t){case e.ModuleKind.ESNext:case e.ModuleKind.ES2015:return e.transformES2015Module;case e.ModuleKind.System:return e.transformSystemModule;default:return e.transformModule}}function n(n,r){var a=n.jsx,i=e.getEmitScriptTarget(n),o=e.getEmitModuleKind(n),s=[];return e.addRange(s,r&&r.before),s.push(e.transformTypeScript),2===a&&s.push(e.transformJsx),i<5&&s.push(e.transformESNext),i<4&&s.push(e.transformES2017),i<3&&s.push(e.transformES2016),i<2&&(s.push(e.transformES2015),s.push(e.transformGenerators)),s.push(t(o)),i<1&&s.push(e.transformES5),e.addRange(s,r&&r.after),s}function r(t,n,r,a,i,o){function s(t){return!t||e.isSourceFile(t)&&t.isDeclarationFile?t:B(t)}function c(t){e.Debug.assert(F<2,\"Cannot modify the transformation context after transformation has completed.\"),D[t]|=1;}function u(t){return 0!=(1&D[t.kind])&&0==(4&e.getEmitFlags(t))}function l(t,n){return e.Debug.assert(F<3,\"Cannot substitute a node after the result is disposed.\"),n&&u(n)&&P(t,n)||n}function _(t){e.Debug.assert(F<2,\"Cannot modify the transformation context after transformation has completed.\"),D[t]|=2;}function d(t){return 0!=(2&D[t.kind])||0!=(2&e.getEmitFlags(t))}function p(t,n,r){e.Debug.assert(F<3,\"Cannot invoke TransformationResult callbacks after the result is disposed.\"),n&&(d(n)?O(t,n,r):r(t,n));}function f(t){e.Debug.assert(F>0,\"Cannot modify the lexical environment during initialization.\"),e.Debug.assert(F<2,\"Cannot modify the lexical environment after transformation has completed.\");var n=e.setEmitFlags(e.createVariableDeclaration(t),64);S?S.push(n):S=[n];}function g(t){e.Debug.assert(F>0,\"Cannot modify the lexical environment during initialization.\"),e.Debug.assert(F<2,\"Cannot modify the lexical environment after transformation has completed.\"),T?T.push(t):T=[t];}function m(){e.Debug.assert(F>0,\"Cannot modify the lexical environment during initialization.\"),e.Debug.assert(F<2,\"Cannot modify the lexical environment after transformation has completed.\"),e.Debug.assert(!w,\"Lexical environment is suspended.\"),E[A]=S,N[A]=T,A++,S=void 0,T=void 0;}function y(){e.Debug.assert(F>0,\"Cannot modify the lexical environment during initialization.\"),e.Debug.assert(F<2,\"Cannot modify the lexical environment after transformation has completed.\"),e.Debug.assert(!w,\"Lexical environment is already suspended.\"),w=!0;}function h(){e.Debug.assert(F>0,\"Cannot modify the lexical environment during initialization.\"),e.Debug.assert(F<2,\"Cannot modify the lexical environment after transformation has completed.\"),e.Debug.assert(w,\"Lexical environment is not suspended.\"),w=!1;}function v(){e.Debug.assert(F>0,\"Cannot modify the lexical environment during initialization.\"),e.Debug.assert(F<2,\"Cannot modify the lexical environment after transformation has completed.\"),e.Debug.assert(!w,\"Lexical environment is suspended.\");var t;if((S||T)&&(T&&(t=T.slice()),S)){var n=e.createVariableStatement(void 0,e.createVariableDeclarationList(S));t?t.push(n):t=[n];}return A--,S=E[A],T=N[A],0===A&&(E=[],N=[]),t}function b(t){e.Debug.assert(F>0,\"Cannot modify the transformation context during initialization.\"),e.Debug.assert(F<2,\"Cannot modify the transformation context after transformation has completed.\"),e.Debug.assert(!t.scoped,\"Cannot request a scoped emit helper.\"),C=e.append(C,t);}function x(){e.Debug.assert(F>0,\"Cannot modify the transformation context during initialization.\"),e.Debug.assert(F<2,\"Cannot modify the transformation context after transformation has completed.\");var t=C;return C=void 0,t}function k(){if(F<3){for(var t=0,n=a;t<n.length;t++){var r=n[t];e.disposeEmitNodes(e.getSourceFileOfNode(e.getParseTreeNode(r)));}S=void 0,E=void 0,T=void 0,N=void 0,P=void 0,O=void 0,C=void 0,F=3;}}for(var S,T,C,D=new Array(301),E=[],N=[],A=0,w=!1,P=function(e,t){return t},O=function(e,t,n){return n(e,t)},F=0,I={getCompilerOptions:function(){return r},getEmitResolver:function(){return t},getEmitHost:function(){return n},startLexicalEnvironment:m,suspendLexicalEnvironment:y,resumeLexicalEnvironment:h,endLexicalEnvironment:v,hoistVariableDeclaration:f,hoistFunctionDeclaration:g,requestEmitHelper:b,readEmitHelpers:x,enableSubstitution:c,enableEmitNotification:_,isSubstitutionEnabled:u,isEmitNotificationEnabled:d,get onSubstituteNode(){return P},set onSubstituteNode(t){e.Debug.assert(F<1,\"Cannot modify transformation hooks after initialization has completed.\"),e.Debug.assert(void 0!==t,\"Value must not be 'undefined'\"),P=t;},get onEmitNode(){return O},set onEmitNode(t){e.Debug.assert(F<1,\"Cannot modify transformation hooks after initialization has completed.\"),e.Debug.assert(void 0!==t,\"Value must not be 'undefined'\"),O=t;}},M=0,R=a;M<R.length;M++){var L=R[M];e.disposeEmitNodes(e.getSourceFileOfNode(e.getParseTreeNode(L)));}e.performance.mark(\"beforeTransform\");var B=e.chain.apply(void 0,i)(I);F=1;var K=e.map(a,o?B:s);return F=2,e.performance.mark(\"afterTransform\"),e.performance.measure(\"transformTime\",\"beforeTransform\",\"afterTransform\"),{transformed:K,substituteNode:l,emitNodeWithNotification:p,dispose:k}}var a;!function(e){e[e.Uninitialized=0]=\"Uninitialized\",e[e.Initialized=1]=\"Initialized\",e[e.Completed=2]=\"Completed\",e[e.Disposed=3]=\"Disposed\";}(a||(a={}));var i;!function(e){e[e.Substitution=1]=\"Substitution\",e[e.EmitNotifications=2]=\"EmitNotifications\";}(i||(i={})),e.getTransformers=n,e.transformNodes=r;}(r||(r={}));!function(e){function t(t,n){function i(t){return g.skipTrivia?g.skipTrivia(t):e.skipTrivia(m,t)}function o(n,r,i){C||(k&&s(),g=void 0,m=void 0,h=-1,v=void 0,b=a,x=0,(k={sourceMapFilePath:r,jsSourceMappingURL:S.inlineSourceMap?void 0:e.getBaseFileName(e.normalizeSlashes(r)),sourceMapFile:e.getBaseFileName(e.normalizeSlashes(n)),sourceMapSourceRoot:S.sourceRoot||\"\",sourceMapSources:[],inputSourceFileNames:[],sourceMapNames:[],sourceMapMappings:\"\",sourceMapSourcesContent:S.inlineSources?[]:void 0,sourceMapDecodedMappings:[]}).sourceMapSourceRoot=e.normalizeSlashes(k.sourceMapSourceRoot),k.sourceMapSourceRoot.length&&47!==k.sourceMapSourceRoot.charCodeAt(k.sourceMapSourceRoot.length-1)&&(k.sourceMapSourceRoot+=e.directorySeparator),S.mapRoot?(y=e.normalizeSlashes(S.mapRoot),265===i.kind&&(y=e.getDirectoryPath(e.getSourceFilePathInNewDir(i,t,y))),e.isRootedDiskPath(y)||e.isUrl(y)?k.jsSourceMappingURL=e.combinePaths(y,k.jsSourceMappingURL):(y=e.combinePaths(t.getCommonSourceDirectory(),y),k.jsSourceMappingURL=e.getRelativePathToDirectoryOrUrl(e.getDirectoryPath(e.normalizePath(n)),e.combinePaths(y,k.jsSourceMappingURL),t.getCurrentDirectory(),t.getCanonicalFileName,!0))):y=e.getDirectoryPath(e.normalizePath(n)));}function s(){C||(g=void 0,y=void 0,h=void 0,v=void 0,b=void 0,x=void 0,k=void 0);}function c(){if(v&&v!==b){var t=b.emittedColumn;if(b.emittedLine===v.emittedLine)k.sourceMapMappings&&(k.sourceMapMappings+=\",\");else{for(var n=b.emittedLine;n<v.emittedLine;n++)k.sourceMapMappings+=\";\";t=1;}k.sourceMapMappings+=r(v.emittedColumn-t),k.sourceMapMappings+=r(v.sourceIndex-b.sourceIndex),k.sourceMapMappings+=r(v.sourceLine-b.sourceLine),k.sourceMapMappings+=r(v.sourceColumn-b.sourceColumn),v.nameIndex>=0&&(e.Debug.assert(!1,\"We do not support name index right now, Make sure to update updateLastEncodedAndRecordedSpans when we start using this\"),k.sourceMapMappings+=r(v.nameIndex-x),x=v.nameIndex),b=v,k.sourceMapDecodedMappings.push(b);}}function u(t){if(!C&&!e.positionIsSynthesized(t)){T&&e.performance.mark(\"beforeSourcemap\");var r=e.getLineAndCharacterOfPosition(g,t);r.line++,r.character++;var a=n.getLine(),i=n.getColumn();!v||v.emittedLine!==a||v.emittedColumn!==i||v.sourceIndex===h&&(v.sourceLine>r.line||v.sourceLine===r.line&&v.sourceColumn>r.character)?(c(),v={emittedLine:a,emittedColumn:i,sourceLine:r.line,sourceColumn:r.character,sourceIndex:h}):(v.sourceLine=r.line,v.sourceColumn=r.character,v.sourceIndex=h),T&&(e.performance.mark(\"afterSourcemap\"),e.performance.measure(\"Source Map\",\"beforeSourcemap\",\"afterSourcemap\"));}}function l(e,t,n){if(C)return n(e,t);if(t){var r=t.emitNode,a=r&&r.flags,o=r&&r.sourceMapRange,s=o||t,c=s.pos,l=s.end,_=o&&o.source,p=g;_===p&&(_=void 0),_&&d(_),296!==t.kind&&0==(16&a)&&c>=0&&u(i(c)),_&&d(p),64&a?(C=!0,n(e,t),C=!1):n(e,t),_&&d(_),296!==t.kind&&0==(32&a)&&l>=0&&u(l),_&&d(p);}}function _(e,t,n,r){if(C)return r(t,n);var a=e&&e.emitNode,o=a&&a.flags,s=a&&a.tokenSourceMapRanges&&a.tokenSourceMapRanges[t];return n=i(s?s.pos:n),0==(128&o)&&n>=0&&u(n),n=r(t,n),s&&(n=s.end),0==(256&o)&&n>=0&&u(n),n}function d(n){if(!C){m=(g=n).text;var r=S.sourceRoot?t.getCommonSourceDirectory():y,a=e.getRelativePathToDirectoryOrUrl(r,g.fileName,t.getCurrentDirectory(),t.getCanonicalFileName,!0);-1===(h=e.indexOf(k.sourceMapSources,a))&&(h=k.sourceMapSources.length,k.sourceMapSources.push(a),k.inputSourceFileNames.push(g.fileName),S.inlineSources&&k.sourceMapSourcesContent.push(g.text));}}function p(){if(!C)return c(),JSON.stringify({version:3,file:k.sourceMapFile,sourceRoot:k.sourceMapSourceRoot,sources:k.sourceMapSources,names:k.sourceMapNames,mappings:k.sourceMapMappings,sourcesContent:k.sourceMapSourcesContent})}function f(){if(!C){if(S.inlineSourceMap){var t=e.convertToBase64(p());return k.jsSourceMappingURL=\"data:application/json;base64,\"+t}return k.jsSourceMappingURL}}var g,m,y,h,v,b,x,k,S=t.getCompilerOptions(),T=S.extendedDiagnostics,C=!(S.sourceMap||S.inlineSourceMap);return{initialize:o,reset:s,getSourceMapData:function(){return k},setSourceFile:d,emitPos:u,emitNodeWithSourceMap:l,emitTokenWithSourceMap:_,getText:p,getSourceMappingURL:f}}function n(e){if(e<64)return i.charAt(e);throw TypeError(e+\": not a 64 based value\")}function r(e){e<0?e=1+(-e<<1):e<<=1;var t=\"\";do{var r=31&e;(e>>=5)>0&&(r|=32),t+=n(r);}while(e>0);return t}var a={emittedLine:1,emittedColumn:1,sourceLine:1,sourceColumn:1,sourceIndex:0};e.createSourceMapWriter=t;var i=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";}(r||(r={}));!function(e){function t(t,n){function r(t,n,r){if(j)r(t,n);else if(n){K=!1;var i=n.emitNode,o=i&&i.flags,s=i&&i.commentRange||n,c=s.pos,u=s.end;if(c<0&&u<0||c===u)a(t,n,i,o,r);else{I&&e.performance.mark(\"preEmitNodeWithComment\");var l=296!==n.kind,d=c<0||0!=(512&o)||10===n.kind,p=u<0||0!=(1024&o)||10===n.kind;d||_(c,l);var f=R,m=L,y=B;d||(R=c),p||(L=u,227===n.kind&&(B=u)),I&&e.performance.measure(\"commentTime\",\"preEmitNodeWithComment\"),a(t,n,i,o,r),I&&e.performance.mark(\"postEmitNodeWithComment\"),R=f,L=m,B=y,!p&&l&&g(u),I&&e.performance.measure(\"commentTime\",\"postEmitNodeWithComment\");}}}function a(t,n,r,a,s){var c=r&&r.leadingComments;e.some(c)&&(I&&e.performance.mark(\"preEmitNodeWithSynthesizedComments\"),e.forEach(c,i),I&&e.performance.measure(\"commentTime\",\"preEmitNodeWithSynthesizedComments\")),u(t,n,a,s);var l=r&&r.trailingComments;e.some(l)&&(I&&e.performance.mark(\"postEmitNodeWithSynthesizedComments\"),e.forEach(l,o),I&&e.performance.measure(\"commentTime\",\"postEmitNodeWithSynthesizedComments\"));}function i(e){2===e.kind&&A.writeLine(),s(e),e.hasTrailingNewLine||2===e.kind?A.writeLine():A.write(\" \");}function o(e){A.isAtStartOfLine()||A.write(\" \"),s(e),e.hasTrailingNewLine&&A.writeLine();}function s(t){var n=c(t),r=3===t.kind?e.computeLineStarts(n):void 0;e.writeCommentRange(n,r,A,0,n.length,M);}function c(e){return 3===e.kind?\"/*\"+e.text+\"*/\":\"//\"+e.text}function u(e,t,n,r){2048&n?(j=!0,r(e,t),j=!1):r(e,t);}function l(t,n,r){I&&e.performance.mark(\"preEmitBodyWithDetachedComments\");var a=n.pos,i=n.end,o=e.getEmitFlags(t),s=a<0||0!=(512&o),c=j||i<0||0!=(1024&o);s||D(n),I&&e.performance.measure(\"commentTime\",\"preEmitBodyWithDetachedComments\"),2048&o&&!j?(j=!0,r(t),j=!1):r(t),I&&e.performance.mark(\"beginEmitBodyWithDetachedCommetns\"),c||(_(n.end,!0),K&&!A.isAtStartOfLine()&&A.writeLine()),I&&e.performance.measure(\"commentTime\",\"beginEmitBodyWithDetachedCommetns\");}function _(e,t){K=!1,t?v(e,p):0===e&&v(e,d);}function d(e,t,n,r,a){N(e,t)&&p(e,t,n,r,a);}function p(t,r,a,i,o){K||(e.emitNewLineBeforeLeadingCommentOfPosition(O,A,o,t),K=!0),n&&n(t),e.writeCommentRange(P,O,A,t,r,M),n&&n(r),i?A.writeLine():A.write(\" \");}function f(e){j||-1===e||_(e,!0);}function g(e){b(e,m);}function m(t,r,a,i){A.isAtStartOfLine()||A.write(\" \"),n&&n(t),e.writeCommentRange(P,O,A,t,r,M),n&&n(r),i&&A.writeLine();}function y(t){j||(I&&e.performance.mark(\"beforeEmitTrailingCommentsOfPosition\"),b(t,h),I&&e.performance.measure(\"commentTime\",\"beforeEmitTrailingCommentsOfPosition\"));}function h(t,r,a,i){n&&n(t),e.writeCommentRange(P,O,A,t,r,M),n&&n(r),i?A.writeLine():A.write(\" \");}function v(t,n){-1!==R&&t===R||(T(t)?C(n):e.forEachLeadingCommentRange(P,t,n,t));}function b(t,n){(-1===L||t!==L&&t!==B)&&e.forEachTrailingCommentRange(P,t,n);}function x(){w=void 0,P=void 0,O=void 0,F=void 0;}function k(e){A=e;}function S(t){P=(w=t).text,O=e.getLineStarts(w),F=void 0;}function T(t){return void 0!==F&&e.lastOrUndefined(F).nodePos===t}function C(t){var n=e.lastOrUndefined(F).detachedCommentEndPos;F.length-1?F.pop():F=void 0,e.forEachLeadingCommentRange(P,n,t,n);}function D(t){var n=e.emitDetachedComments(P,O,A,E,t,M,j);n&&(F?F.push(n):F=[n]);}function E(t,r,a,i,o,s){n&&n(i),e.writeCommentRange(t,r,a,i,o,s),n&&n(o);}function N(t,n){if(47===P.charCodeAt(t+1)&&t+2<n&&47===P.charCodeAt(t+2)){var r=P.substring(t,n);return!(!r.match(e.fullTripleSlashReferencePathRegEx)&&!r.match(e.fullTripleSlashAMDReferencePathRegEx))}return!1}var A,w,P,O,F,I=t.extendedDiagnostics,M=e.getNewLineCharacter(t),R=-1,L=-1,B=-1,K=!1,j=t.removeComments;return{reset:x,setWriter:k,setSourceFile:S,emitNodeWithComments:r,emitBodyWithDetachedComments:l,emitTrailingCommentsOfPosition:y,emitLeadingCommentsOfPosition:f}}e.createCommentWriter=t;}(r||(r={}));!function(e){function t(t,r,a){function i(e,a){var i=e.declarationFilePath;n(t,r,o,i,a,!1);}var o=e.createDiagnosticCollection();return e.forEachEmittedFile(t,i,a),o.getDiagnostics(a?a.fileName:void 0)}function n(t,n,r,a,i,o){function s(e){return be.substring(e.pos,e.end).indexOf(\"@internal\")>=0}function c(t){if(t){var n=e.getLeadingCommentRanges(be,t.pos);if(e.forEach(n,s))return;oe(t);}}function u(){var t=e.createTextWriter(me);t.trackSymbol=f,t.reportInaccessibleThisError=m,t.reportPrivateInBaseOfClassExpression=g,t.writeKeyword=t.write,t.writeOperator=t.write,t.writePunctuation=t.write,t.writeSpace=t.write,t.writeStringLiteral=t.writeLiteral,t.writeParameter=t.write,t.writeProperty=t.write,t.writeSymbol=t.write,l(t);}function l(e){pe=e,ce=e.write,de=e.writeTextOfNode,ue=e.writeLine,le=e.increaseIndent,_e=e.decreaseIndent;}function _(t){var n=pe;e.forEach(t,function(t){var n;226===t.kind?n=t.parent.parent:241===t.kind||242===t.kind||239===t.kind?e.Debug.fail(\"We should be getting ImportDeclaration instead to write\"):n=t;var r=e.forEach(Pe,function(e){return e.node===n?e:void 0});if(!r&&Ce&&(r=e.forEach(Ce,function(e){return e.node===n?e:void 0})),r)if(238===r.node.kind)r.isVisible=!0;else{u();for(var a=r.indent;a;a--)le();233===n.kind&&(e.Debug.assert(void 0===Ce),Ce=[]),P(n),233===n.kind&&(r.subModuleElementDeclarationEmitInfo=Ce,Ce=void 0),r.asynchronousOutput=pe.getText();}}),l(n);}function d(t){if(t){De||(De=e.createMap());for(var n=0,r=t;n<r.length;n++){var a=r[n];De.has(a)||De.set(a,a);}}}function p(t){if(0===t.accessibility)t&&t.aliasesToMakeVisible&&_(t.aliasesToMakeVisible);else{Ee=!0;var n=pe.getSymbolAccessibilityDiagnostic(t);n&&(n.typeName?r.add(e.createDiagnosticForNode(t.errorNode||n.errorNode,n.diagnosticMessage,e.getTextOfNodeFromSourceText(be,n.typeName),t.errorSymbolName,t.errorModuleName)):r.add(e.createDiagnosticForNode(t.errorNode||n.errorNode,n.diagnosticMessage,t.errorSymbolName,t.errorModuleName)));}}function f(e,t,r){p(n.isSymbolAccessible(e,t,r,!0)),d(n.getTypeReferenceDirectivesForSymbol(e,r));}function g(t){Te&&(Ee=!0,r.add(e.createDiagnosticForNode(Te,e.Diagnostics.Property_0_of_exported_class_expression_may_not_be_private_or_protected,t)));}function m(){Te&&(Ee=!0,r.add(e.createDiagnosticForNode(Te,e.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_this_type_A_type_annotation_is_necessary,e.declarationNameToString(Te))));}function y(e,t,r){pe.getSymbolAccessibilityDiagnostic=r,ce(\": \");var a=146===e.kind&&(n.isRequiredInitializedParameter(e)||n.isOptionalUninitializedParameterProperty(e));if(t&&!a)T(t);else{Te=e.name;var i=18436|(a?8192:0);n.writeTypeOfDeclaration(e,he,i,pe),Te=void 0;}}function h(e,t){pe.getSymbolAccessibilityDiagnostic=t,ce(\": \"),e.type?T(e.type):(Te=e.name,n.writeReturnTypeOfSignatureDeclaration(e,he,18436,pe),Te=void 0);}function v(e){for(var t=0,n=e;t<n.length;t++){var r=n[t];Ae(r);}}function b(e,t,n,r){for(var a=pe.getTextPos(),i=0,o=e;i<o.length;i++){var s=o[i];r&&!r(s)||(a!==pe.getTextPos()&&ce(t),a=pe.getTextPos(),n(s));}}function x(e,t,n){b(e,\", \",t,n);}function k(t){if(t){var n=e.getJSDocCommentRanges(t,be);e.emitNewLineBeforeLeadingComments(xe,pe,t,n),e.emitComments(be,xe,pe,n,!1,!0,me,e.writeCommentRange);}}function S(e,t){pe.getSymbolAccessibilityDiagnostic=t,T(e);}function T(t){function r(e){if(71===e.kind)de(be,e);else{var t=143===e.kind?e.left:e.expression,n=143===e.kind?e.right:e.name;r(t),ce(\".\"),de(be,n);}}function a(e){p(n.isEntityNameVisible(e,237===e.parent.kind?e.parent:he)),d(n.getTypeReferenceDirectivesForEntityName(e)),r(e);}switch(t.kind){case 119:case 136:case 133:case 122:case 134:case 137:case 105:case 139:case 95:case 130:case 169:case 173:return de(be,t);case 201:return function(t){e.isEntityNameExpression(t.expression)&&(e.Debug.assert(71===t.expression.kind||179===t.expression.kind),a(t.expression),t.typeArguments&&(ce(\"<\"),x(t.typeArguments,T),ce(\">\")));}(t);case 159:return function(e){a(e.typeName),e.typeArguments&&(ce(\"<\"),x(e.typeArguments,T),ce(\">\"));}(t);case 162:return function(e){ce(\"typeof \"),a(e.exprName);}(t);case 164:return function(e){T(e.elementType),ce(\"[]\");}(t);case 165:return function(e){ce(\"[\"),x(e.elementTypes,T),ce(\"]\");}(t);case 166:return function(e){b(e.types,\" | \",T);}(t);case 167:return function(e){b(e.types,\" & \",T);}(t);case 168:return function(e){ce(\"(\"),T(e.type),ce(\")\");}(t);case 170:return function(t){ce(e.tokenToString(t.operator)),ce(\" \"),T(t.type);}(t);case 171:return function(e){T(e.objectType),ce(\"[\"),T(e.indexType),ce(\"]\");}(t);case 172:return function(e){var t=he;he=e,ce(\"{\"),ue(),le(),e.readonlyToken&&ce(\"readonly \"),ce(\"[\"),r(e.typeParameter.name),ce(\" in \"),T(e.typeParameter.constraint),ce(\"]\"),e.questionToken&&ce(\"?\"),ce(\": \"),T(e.type),ce(\";\"),ue(),_e(),ce(\"}\"),he=t;}(t);case 160:case 161:return re(t);case 163:return function(e){ce(\"{\"),e.members.length&&(ue(),le(),v(e.members),_e()),ce(\"}\");}(t);case 71:case 143:return a(t);case 158:return function(e){de(be,e.parameterName),ce(\" is \"),T(e.type);}(t)}}function C(t){be=t.text,xe=e.getLineStarts(t),ke=t.identifiers,Se=e.isExternalModule(t),he=t,e.emitDetachedComments(be,xe,pe,e.writeCommentRange,t,me,!0),v(t.statements);}function D(e){if(!ke.has(e))return e;for(var t=0;;){var n=e+\"_\"+ ++t;if(!ke.has(n))return n}}function E(e,t,r,a){var i=D(t);return a&&ce(\"declare \"),ce(\"const \"),ce(i),ce(\": \"),pe.getSymbolAccessibilityDiagnostic=function(){return r},n.writeTypeOfExpression(e,he,18436,pe),ce(\";\"),ue(),i}function N(t){if(71===t.expression.kind)ce(t.isExportEquals?\"export = \":\"export default \"),de(be,t.expression);else{var r=E(t.expression,\"_default\",{diagnosticMessage:e.Diagnostics.Default_export_of_the_module_has_or_is_using_private_name_0,errorNode:t},we);ce(t.isExportEquals?\"export = \":\"export default \"),ce(r);}ce(\";\"),ue(),71===t.expression.kind&&_(n.collectLinkedAliases(t.expression));}function A(e){return n.isDeclarationVisible(e)}function w(e,t){if(t)P(e);else if(237===e.kind||265===e.parent.kind&&Se){var r=void 0;if(Ce&&265!==e.parent.kind)Ce.push({node:e,outputPos:pe.getTextPos(),indent:pe.getIndent(),isVisible:r});else{if(238===e.kind){var a=e;a.importClause&&(r=a.importClause.name&&n.isDeclarationVisible(a.importClause)||M(a.importClause.namedBindings));}Pe.push({node:e,outputPos:pe.getTextPos(),indent:pe.getIndent(),isVisible:r});}}}function P(t){switch(t.kind){case 228:return ne(t);case 208:return ee(t);case 230:return G(t);case 229:return H(t);case 231:return z(t);case 232:return U(t);case 233:return J(t);case 237:return I(t);case 238:return R(t);default:e.Debug.fail(\"Unknown symbol kind\");}}function O(t){if(265===t.parent.kind){var n=e.getModifierFlags(t);1&n&&ce(\"export \"),512&n?ce(\"default \"):230!==t.kind&&we&&ce(\"declare \");}}function F(e){8&e?ce(\"private \"):16&e&&ce(\"protected \"),32&e&&ce(\"static \"),64&e&&ce(\"readonly \"),128&e&&ce(\"abstract \");}function I(t){function n(){return{diagnosticMessage:e.Diagnostics.Import_declaration_0_is_using_private_name_1,errorNode:t,typeName:t.name}}Ne(t),e.hasModifier(t,1)&&ce(\"export \"),ce(\"import \"),de(be,t.name),ce(\" = \"),e.isInternalModuleImportEqualsDeclaration(t)?(S(t.moduleReference,n),ce(\";\")):(ce(\"require(\"),L(t),ce(\");\")),pe.writeLine();}function M(t){if(t)return 240===t.kind?n.isDeclarationVisible(t):e.forEach(t.elements,function(e){return n.isDeclarationVisible(e)})}function R(t){if(Ne(t),e.hasModifier(t,1)&&ce(\"export \"),ce(\"import \"),t.importClause){var r=pe.getTextPos();t.importClause.name&&n.isDeclarationVisible(t.importClause)&&de(be,t.importClause.name),t.importClause.namedBindings&&M(t.importClause.namedBindings)&&(r!==pe.getTextPos()&&ce(\", \"),240===t.importClause.namedBindings.kind?(ce(\"* as \"),de(be,t.importClause.namedBindings.name)):(ce(\"{ \"),x(t.importClause.namedBindings.elements,B,n.isDeclarationVisible),ce(\" }\"))),ce(\" from \");}L(t),ce(\";\"),pe.writeLine();}function L(r){ve=ve||233!==r.kind;var a;if(237===r.kind){var i=r;a=e.getExternalModuleImportEqualsDeclarationExpression(i);}else a=233===r.kind?r.name:(i=r).moduleSpecifier;if(9===a.kind&&ge&&(ye.out||ye.outFile)){var o=e.getExternalModuleNameFromDeclaration(t,n,r);if(o)return ce('\"'),ce(o),void ce('\"')}de(be,a);}function B(e){e.propertyName&&(de(be,e.propertyName),ce(\" as \")),de(be,e.name);}function K(e){B(e),_(n.collectLinkedAliases(e.propertyName||e.name));}function j(e){Ne(e),ce(\"export \"),e.exportClause?(ce(\"{ \"),x(e.exportClause.elements,K),ce(\" }\")):ce(\"*\"),e.moduleSpecifier&&(ce(\" from \"),L(e)),ce(\";\"),pe.writeLine();}function J(t){for(Ne(t),O(t),e.isGlobalScopeAugmentation(t)?ce(\"global \"):(ce(16&t.flags?\"namespace \":\"module \"),e.isExternalModuleAugmentation(t)?L(t):de(be,t.name));t.body&&234!==t.body.kind;)t=t.body,ce(\".\"),de(be,t.name);var n=he;t.body?(he=t,ce(\" {\"),ue(),le(),v(t.body.statements),_e(),ce(\"}\"),ue(),he=n):ce(\";\");}function z(t){function n(){return{diagnosticMessage:e.Diagnostics.Exported_type_alias_0_has_or_is_using_private_name_1,errorNode:t.type,typeName:t.name}}var r=he;he=t,Ne(t),O(t),ce(\"type \"),de(be,t.name),$(t.typeParameters),ce(\" = \"),S(t.type,n),ce(\";\"),ue(),he=r;}function U(t){Ne(t),O(t),e.isConst(t)&&ce(\"const \"),ce(\"enum \"),de(be,t.name),ce(\" {\"),ue(),le(),v(t.members),_e(),ce(\"}\"),ue();}function q(t){Ne(t),de(be,t.name);var r=n.getConstantValue(t);void 0!==r&&(ce(\" = \"),ce(e.getTextOfConstantValue(r))),ce(\",\"),ue();}function V(t){return 151===t.parent.kind&&e.hasModifier(t.parent,8)}function $(t){function n(t){function n(){var n;switch(t.parent.kind){case 229:n=e.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1;break;case 230:n=e.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1;break;case 156:n=e.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;break;case 155:n=e.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;break;case 151:case 150:n=e.hasModifier(t.parent,32)?e.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1:229===t.parent.parent.kind?e.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1:e.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;break;case 228:n=e.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1;break;case 231:n=e.Diagnostics.Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1;break;default:e.Debug.fail(\"This is unknown parent for type parameter: \"+t.parent.kind);}return{diagnosticMessage:n,errorNode:t,typeName:t.name}}le(),Ne(t),_e(),de(be,t.name),t.constraint&&!V(t)&&(ce(\" extends \"),160===t.parent.kind||161===t.parent.kind||t.parent.parent&&163===t.parent.parent.kind?(e.Debug.assert(151===t.parent.kind||150===t.parent.kind||160===t.parent.kind||161===t.parent.kind||155===t.parent.kind||156===t.parent.kind),T(t.constraint)):S(t.constraint,n)),t.default&&!V(t)&&(ce(\" = \"),160===t.parent.kind||161===t.parent.kind||t.parent.parent&&163===t.parent.parent.kind?(e.Debug.assert(151===t.parent.kind||150===t.parent.kind||160===t.parent.kind||161===t.parent.kind||155===t.parent.kind||156===t.parent.kind),T(t.default)):S(t.default,n));}t&&(ce(\"<\"),x(t,n),ce(\">\"));}function W(t,n){function r(t){function r(){var r;return r=229===t.parent.parent.kind?n?e.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1:e.Diagnostics.extends_clause_of_exported_class_0_has_or_is_using_private_name_1:e.Diagnostics.extends_clause_of_exported_interface_0_has_or_is_using_private_name_1,{diagnosticMessage:r,errorNode:t,typeName:e.getNameOfDeclaration(t.parent.parent)}}e.isEntityNameExpression(t.expression)?S(t,r):n||95!==t.expression.kind||ce(\"null\");}t&&(ce(n?\" implements \":\" extends \"),x(t,r));}function H(t){var n=he;he=t;var r,a=e.getClassExtendsHeritageClauseElement(t);a&&!e.isEntityNameExpression(a.expression)&&(r=95===a.expression.kind?\"null\":E(a.expression,t.name.text+\"_base\",{diagnosticMessage:e.Diagnostics.extends_clause_of_exported_class_0_has_or_is_using_private_name_1,errorNode:a,typeName:t.name},!e.findAncestor(t,function(e){return 233===e.kind}))),Ne(t),O(t),e.hasModifier(t,128)&&ce(\"abstract \"),ce(\"class \"),de(be,t.name),$(t.typeParameters),a&&(e.isEntityNameExpression(a.expression)?W([a],!1):(ce(\" extends \"),ce(r),a.typeArguments&&(ce(\"<\"),x(a.typeArguments,T),ce(\">\")))),W(e.getClassImplementsHeritageClauseElements(t),!0),ce(\" {\"),ue(),le(),function(t){t&&e.forEach(t.parameters,function(t){e.hasModifier(t,92)&&X(t);});}(e.getFirstConstructorWithBody(t)),v(t.members),_e(),ce(\"}\"),ue(),he=n;}function G(t){Ne(t),O(t),ce(\"interface \"),de(be,t.name);var n=he;he=t,$(t.typeParameters);var r=e.filter(e.getInterfaceBaseTypeNodes(t),function(t){return e.isEntityNameExpression(t.expression)});r&&r.length&&W(r,!1),ce(\" {\"),ue(),le(),v(t.members),_e(),ce(\"}\"),ue(),he=n;}function X(t){e.hasDynamicName(t)||(Ne(t),F(e.getModifierFlags(t)),Y(t),ce(\";\"),ue());}function Y(t){function r(n){return 226===t.kind?n.errorModuleName?2===n.accessibility?e.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:e.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Exported_variable_0_has_or_is_using_private_name_1:149===t.kind||148===t.kind||146===t.kind&&e.hasModifier(t.parent,8)?e.hasModifier(t,32)?n.errorModuleName?2===n.accessibility?e.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:e.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1:229===t.parent.kind||146===t.kind?n.errorModuleName?2===n.accessibility?e.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:e.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_private_name_1:n.errorModuleName?e.Diagnostics.Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Property_0_of_exported_interface_has_or_is_using_private_name_1:void 0}function a(e){var n=r(e);return void 0!==n?{diagnosticMessage:n,errorNode:t,typeName:t.name}:void 0}function i(e){for(var t=[],n=0,r=e.elements;n<r.length;n++){var a=r[n];200!==a.kind&&t.push(a);}x(t,o);}function o(t){function n(e){var n=r(e);return void 0!==n?{diagnosticMessage:n,errorNode:t,typeName:t.name}:void 0}t.name&&(e.isBindingPattern(t.name)?i(t.name):(de(be,t.name),y(t,void 0,n)));}(226!==t.kind||n.isDeclarationVisible(t))&&(e.isBindingPattern(t.name)?i(t.name):(de(be,t.name),(149===t.kind||148===t.kind||146===t.kind&&!e.isParameterPropertyDeclaration(t))&&e.hasQuestionToken(t)&&ce(\"?\"),149!==t.kind&&148!==t.kind||163!==t.parent.kind?n.isLiteralConstDeclaration(t)?(ce(\" = \"),n.writeLiteralConstValue(t,pe)):e.hasModifier(t,8)||y(t,t.type,a):Q(t)));}function Q(e){e.type&&(ce(\": \"),T(e.type));}function Z(t){return e.forEach(t.declarationList.declarations,function(e){return n.isDeclarationVisible(e)})}function ee(t){Ne(t),O(t),ce(e.isLet(t.declarationList)?\"let \":e.isConst(t.declarationList)?\"const \":\"var \"),x(t.declarationList.declarations,Y,n.isDeclarationVisible),ce(\";\"),ue();}function te(t){function n(e){if(e)return 153===e.kind?e.type:e.parameters.length>0?e.parameters[0].type:void 0}function r(t){var n;return 154===a.kind?(n=e.hasModifier(a.parent,32)?t.errorModuleName?e.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1:t.errorModuleName?e.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1,{diagnosticMessage:n,errorNode:a.parameters[0],typeName:a.name}):(n=e.hasModifier(a,32)?t.errorModuleName?2===t.accessibility?e.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named:e.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1:e.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0:t.errorModuleName?2===t.accessibility?e.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named:e.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1:e.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0,{diagnosticMessage:n,errorNode:a.name,typeName:void 0})}if(!e.hasDynamicName(t)){var a,i=e.getAllAccessorDeclarations(t.parent.members,t);if(t===i.firstAccessor){if(Ne(i.getAccessor),Ne(i.setAccessor),F(e.getModifierFlags(t)|(i.setAccessor?0:64)),de(be,t.name),!e.hasModifier(t,8)){a=t;var o=n(t);if(!o){var s=153===t.kind?i.setAccessor:i.getAccessor;(o=n(s))&&(a=s);}y(t,o,r);}ce(\";\"),ue();}}}function ne(t){e.hasDynamicName(t)||n.isImplementationOfOverload(t)||(Ne(t),228===t.kind?O(t):151!==t.kind&&152!==t.kind||F(e.getModifierFlags(t)),228===t.kind?(ce(\"function \"),de(be,t.name)):152===t.kind?ce(\"constructor\"):(de(be,t.name),e.hasQuestionToken(t)&&ce(\"?\")),ae(t));}function re(e){Ne(e),ae(e);}function ae(t){function n(n){var r;switch(t.kind){case 156:r=n.errorModuleName?e.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1:e.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0;break;case 155:r=n.errorModuleName?e.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1:e.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0;break;case 157:r=n.errorModuleName?e.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1:e.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0;break;case 151:case 150:r=e.hasModifier(t,32)?n.errorModuleName?2===n.accessibility?e.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named:e.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1:e.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0:229===t.parent.kind?n.errorModuleName?2===n.accessibility?e.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named:e.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1:e.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0:n.errorModuleName?e.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1:e.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0;break;case 228:r=n.errorModuleName?2===n.accessibility?e.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named:e.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1:e.Diagnostics.Return_type_of_exported_function_has_or_is_using_private_name_0;break;default:e.Debug.fail(\"This is unknown kind for signature: \"+t.kind);}return{diagnosticMessage:r,errorNode:t.name||t}}var r=he;he=t;var a=!1;if(157===t.kind)F(e.getModifierFlags(t)),ce(\"[\");else{if(152===t.kind&&e.hasModifier(t,8))return ce(\"();\"),void ue();if(156===t.kind||161===t.kind)ce(\"new \");else if(160===t.kind){var i=pe.getText();t.typeParameters&&\"<\"===i.charAt(i.length-1)&&(a=!0,ce(\"(\"));}$(t.typeParameters),ce(\"(\");}x(t.parameters,ie),ce(157===t.kind?\"]\":\")\");var o=160===t.kind||161===t.kind;o||163===t.parent.kind?t.type&&(ce(o?\" => \":\": \"),T(t.type)):152===t.kind||e.hasModifier(t,8)||h(t,n),he=r,o?a&&ce(\")\"):(ce(\";\"),ue());}function ie(t){function r(e){var n=a(e);return void 0!==n?{diagnosticMessage:n,errorNode:t,typeName:t.name}:void 0}function a(n){switch(t.parent.kind){case 152:return n.errorModuleName?2===n.accessibility?e.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:e.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1;case 156:return n.errorModuleName?e.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;case 155:return n.errorModuleName?e.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;case 157:return n.errorModuleName?e.Diagnostics.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1;case 151:case 150:return e.hasModifier(t.parent,32)?n.errorModuleName?2===n.accessibility?e.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:e.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1:229===t.parent.parent.kind?n.errorModuleName?2===n.accessibility?e.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:e.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1:n.errorModuleName?e.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;case 228:return n.errorModuleName?2===n.accessibility?e.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:e.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1;default:e.Debug.fail(\"This is unknown parent for parameter: \"+t.parent.kind);}}function i(e){if(174===e.kind)ce(\"{\"),x(e.elements,o),ce(\"}\");else if(175===e.kind){ce(\"[\");var t=e.elements;x(t,o),t&&t.hasTrailingComma&&ce(\", \"),ce(\"]\");}}function o(t){200===t.kind?ce(\" \"):176===t.kind&&(t.propertyName&&(de(be,t.propertyName),ce(\": \")),t.name&&(e.isBindingPattern(t.name)?i(t.name):(e.Debug.assert(71===t.name.kind),t.dotDotDotToken&&ce(\"...\"),de(be,t.name))));}le(),Ne(t),t.dotDotDotToken&&ce(\"...\"),e.isBindingPattern(t.name)?i(t.name):de(be,t.name),n.isOptionalParameter(t)&&ce(\"?\"),_e(),160===t.parent.kind||161===t.parent.kind||163===t.parent.parent.kind?Q(t):e.hasModifier(t.parent,8)||y(t,t.type,r);}function oe(e){switch(e.kind){case 228:case 233:case 237:case 230:case 229:case 231:case 232:return w(e,A(e));case 208:return w(e,Z(e));case 238:return w(e,!e.importClause);case 244:return j(e);case 152:case 151:case 150:return ne(e);case 156:case 155:case 157:return re(e);case 153:case 154:return te(e);case 149:case 148:return X(e);case 264:return q(e);case 243:return N(e);case 265:return C(e)}}function se(n,r,i){function o(t,a){var i=266===a.kind;i&&!r||(e.Debug.assert(!!t.declarationFilePath||e.isSourceFileJavaScript(n),\"Declaration file is not present only for javascript files\"),s=t.declarationFilePath||t.jsFilePath,c=i);}var s,c=!1;return n.isDeclarationFile?s=n.fileName:e.forEachEmittedFile(t,o,n,i),s&&(s=e.getRelativePathToDirectoryOrUrl(e.getDirectoryPath(e.normalizeSlashes(a)),s,t.getCurrentDirectory(),t.getCanonicalFileName,!1),Oe+='/// <reference path=\"'+s+'\" />'+me),c}var ce,ue,le,_e,de,pe,fe=266===i.kind?i.sourceFiles:[i],ge=266===i.kind,me=t.getNewLine(),ye=t.getCompilerOptions();u();var he,ve,be,xe,ke,Se,Te,Ce,De,Ee=!1,Ne=ye.removeComments?e.noop:k,Ae=ye.stripInternal?c:oe,we=!0,Pe=[],Oe=\"\",Fe=[],Ie=!1,Me=[];return e.forEach(fe,function(n){if(!e.isSourceFileJavaScript(n)){if(ye.noResolve||e.forEach(n.referencedFiles,function(r){var a=e.tryResolveScriptReference(t,n,r);a&&!e.contains(Fe,a)&&(se(a,!ge&&!Ie,o)&&(Ie=!0),Fe.push(a));}),ve=!1,ge&&e.isExternalModule(n)?e.isExternalModule(n)&&(we=!1,ce('declare module \"'+e.getResolvedExternalModuleName(t,n)+'\" {'),ue(),le(),C(n),_e(),ce(\"}\"),ue()):(we=!0,C(n)),Pe.length){var r=pe;e.forEach(Pe,function(t){if(t.isVisible&&!t.asynchronousOutput){e.Debug.assert(238===t.node.kind),u(),e.Debug.assert(0===t.indent||1===t.indent&&ge);for(n=0;n<t.indent;n++)le();R(t.node),t.asynchronousOutput=pe.getText();for(var n=0;n<t.indent;n++)_e();}}),l(r),Me=Me.concat(Pe),Pe=[];}!ge&&e.isExternalModule(n)&&n.moduleAugmentations.length&&!ve&&(ce(\"export {};\"),ue());}}),De&&e.forEachKey(De,function(e){Oe+='/// <reference types=\"'+e+'\" />'+me;}),{reportedDeclarationError:Ee,moduleElementDeclarationEmitInfo:Me,synchronousDeclarationOutput:pe.getText(),referencesOutput:Oe}}function r(t,r,a,i,o,s){function c(t,n){var r=0,a=\"\";return e.forEach(n,function(e){e.asynchronousOutput&&(a+=t.substring(r,e.outputPos),a+=c(e.asynchronousOutput,e.subModuleElementDeclarationEmitInfo),r=e.outputPos);}),a+=t.substring(r)}var u=n(a,i,o,t,r,s),l=u.reportedDeclarationError||a.isEmitBlocked(t)||a.getCompilerOptions().noEmit;if(!l){var _=266===r.kind?r.sourceFiles:[r],d=u.referencesOutput+c(u.synchronousDeclarationOutput,u.moduleElementDeclarationEmitInfo);e.writeFile(a,o,t,d,a.getCompilerOptions().emitBOM,_);}return l}e.getDeclarationDiagnostics=t,e.writeDeclarationFile=r;}(r||(r={}));!function(e){function t(t,a,i,o){var s=e.isArray(i)?i:e.getSourceFilesToEmit(t,i),c=t.getCompilerOptions();if(c.outFile||c.out)s.length&&a({jsFilePath:d=c.outFile||c.out,sourceMapFilePath:p=n(d,c),declarationFilePath:f=c.declaration?e.removeFileExtension(d)+\".d.ts\":\"\"},e.createBundle(s),o);else for(var u=0,l=s;u<l.length;u++){var _=l[u],d=e.getOwnEmitOutputFilePath(_,t,r(_,c)),p=n(d,c),f=e.isSourceFileJavaScript(_)||!o&&!c.declaration?void 0:e.getDeclarationEmitOutputFilePath(_,t);a({jsFilePath:d,sourceMapFilePath:p,declarationFilePath:f},_,o);}}function n(e,t){return t.sourceMap?e+\".map\":void 0}function r(t,n){if(1===n.jsx)if(e.isSourceFileJavaScript(t)){if(e.fileExtensionIs(t.fileName,\".jsx\"))return\".jsx\"}else if(1===t.languageVariant)return\".jsx\";return\".js\"}function a(t){return 266===t.kind?e.updateBundle(t,e.sameMap(t.sourceFiles,e.getOriginalSourceFile)):e.getOriginalSourceFile(t)}function i(n,r,i,s,c){function u(t,i){var o=t.jsFilePath,c=t.sourceMapFilePath,u=t.declarationFilePath;r.isEmitBlocked(o)||m.noEmit?T=!0:s||l(o,c,i),u&&(T=e.writeDeclarationFile(u,a(i),r,n,b,s)||T),!T&&v&&(s||v.push(o),c&&v.push(c),u&&v.push(u));}function l(t,n,a){var i=266===a.kind?a:void 0,o=265===a.kind?a:void 0,s=i?i.sourceFiles:[o];S.initialize(t,n,a),i?(f=e.createMap(),g=!1,E.writeBundle(i,k)):(g=!0,E.writeFile(o,k)),k.writeLine();var c=S.getSourceMappingURL();c&&k.write(\"//# sourceMappingURL=\"+c),m.sourceMap&&!m.inlineSourceMap&&e.writeFile(r,b,n,S.getText(),!1,s),h&&h.push(S.getSourceMapData()),e.writeFile(r,b,t,k.getText(),m.emitBOM,s),S.reset(),k.reset(),p=void 0,f=void 0,g=!1;}function _(e){p=e,S.setSourceFile(e);}function d(t,n){var r=!1,a=266===t.kind?t:void 0;if(!a||y!==e.ModuleKind.None){for(var i=a?a.sourceFiles.length:1,o=0;o<i;o++){var s=a?a.sourceFiles[o]:t,c=e.isSourceFile(s)?s:p,u=m.noEmitHelpers||void 0!==e.getExternalHelpersModuleName(c),l=e.isSourceFile(s)&&!g,_=e.getEmitHelpers(s);if(_)for(var d=0,h=e.stableSort(_,e.compareEmitHelpers);d<h.length;d++){var v=h[d];if(v.scoped){if(a)continue}else{if(u)continue;if(l){if(f.get(v.name))continue;f.set(v.name,!0);}}n(v.text),r=!0;}}return r}}var p,f,g,m=r.getCompilerOptions(),y=e.getEmitModuleKind(m),h=m.sourceMap||m.inlineSourceMap?[]:void 0,v=m.listEmittedFiles?[]:void 0,b=e.createDiagnosticCollection(),x=r.getNewLine(),k=e.createTextWriter(x),S=e.createSourceMapWriter(r,k),T=!1,C=e.getSourceFilesToEmit(r,i),D=e.transformNodes(n,r,m,C,c,!1),E=o(m,{hasGlobalName:n.hasGlobalName,onEmitNode:D.emitNodeWithNotification,substituteNode:D.substituteNode,onEmitSourceMapOfNode:S.emitNodeWithSourceMap,onEmitSourceMapOfToken:S.emitTokenWithSourceMap,onEmitSourceMapOfPosition:S.emitPos,onEmitHelpers:d,onSetSourceFile:_});return e.performance.mark(\"beforePrint\"),t(r,u,D.transformed,s),e.performance.measure(\"printTime\",\"beforePrint\"),D.dispose(),{emitSkipped:T,diagnostics:b.getDiagnostics(),emittedFiles:v,sourceMaps:h}}function o(t,n){function r(t,n,r){switch(t){case 0:e.Debug.assert(e.isSourceFile(n),\"Expected a SourceFile node.\");break;case 2:e.Debug.assert(e.isIdentifier(n),\"Expected an Identifier node.\");break;case 1:e.Debug.assert(e.isExpression(n),\"Expected an Expression node.\");}switch(n.kind){case 265:return i(n);case 266:return a(n)}return o(t,n,r,d()),p()}function a(e){return l(e,d()),p()}function i(e){return _(e,d()),p()}function o(e,t,n,r){var a=Nr;m(r),f(e,t,n),y(),Nr=a;}function l(e,t){var n=Nr;m(t),vn(e),hn(e),w(e);for(var r=0,a=e.sourceFiles;r<a.length;r++){var i=a[r];f(0,i,i);}y(),Nr=n;}function _(e,t){var n=Nr;m(t),vn(e),hn(e),f(0,e,e),y(),Nr=n;}function d(){return Ar||(Ar=e.createTextWriter(zr))}function p(){var e=Ar.getText();return Ar.reset(),e}function f(e,t,n){n&&g(n),x(e,t);}function g(e){kr=e,Ur.setSourceFile(e),Rr&&Rr(e);}function m(e){Nr=e,Ur.setWriter(e);}function y(){Sr=[],Tr=[],Cr=e.createMap(),Dr=[],Er=0,Ur.reset(),m(void 0);}function h(e){x(3,e);}function v(e){x(2,e);}function b(e){x(1,e);}function x(e,t){Ir?Ir(e,t,k):k(e,t);}function k(e,t){t=A(e,t),qr&&0!==e?qr(e,t,S):S(e,t);}function S(e,t){Pr&&0!==e&&2!==e?Pr(e,t,T):T(e,t);}function T(e,t){switch(e){case 0:return C(t);case 2:return D(t);case 1:return N(t);case 3:return E(t)}}function C(t){e.Debug.assertNode(t,e.isSourceFile),pn(t);}function D(t){e.Debug.assertNode(t,e.isIdentifier),F(t);}function E(t){var n=t.kind;if(e.isKeyword(n))Un(t);else{switch(n){case 14:case 15:case 16:return O(t);case 71:return F(t);case 143:return I(t);case 144:return R(t);case 145:return L(t);case 146:return B(t);case 147:return K(t);case 148:return j(t);case 149:return J(t);case 150:return z(t);case 151:return U(t);case 152:return q(t);case 153:case 154:return V(t);case 155:return $(t);case 156:return W(t);case 157:return H(t);case 158:return X(t);case 159:return Y(t);case 160:return Q(t);case 161:return Z(t);case 162:return ee(t);case 163:return te(t);case 164:return ne(t);case 165:return re(t);case 166:return ae(t);case 167:return ie(t);case 168:return oe(t);case 201:return Je(t);case 169:return se();case 170:return ce(t);case 171:return ue(t);case 172:return le(t);case 173:return _e(t);case 174:return de(t);case 175:return pe(t);case 176:return fe(t);case 205:return Ve(t);case 206:return G();case 207:return $e(t);case 208:return He(t);case 209:return Ge();case 210:return Xe(t);case 211:return Ye(t);case 212:return Qe(t);case 213:return Ze(t);case 214:return et(t);case 215:return tt(t);case 216:return nt(t);case 217:return at(t);case 218:return it(t);case 219:return ot(t);case 220:return st(t);case 221:return ct(t);case 222:return ut(t);case 223:return lt(t);case 224:return _t(t);case 225:return dt(t);case 226:return pt(t);case 227:return ft(t);case 228:return gt(t);case 229:return Tt(t);case 230:return Dt(t);case 231:return Et(t);case 232:return Nt(t);case 233:return At(t);case 234:return wt(t);case 235:return Pt(t);case 236:return Jt(t);case 237:return Ot(t);case 238:return It(t);case 239:return Mt(t);case 240:return Rt(t);case 241:return Lt(t);case 242:return Bt(t);case 243:return Kt(t);case 244:return jt(t);case 245:return zt(t);case 246:return Ut(t);case 247:return;case 248:return $t(t);case 10:return Xt(t);case 251:return Gt(t);case 252:return Yt(t);case 253:return Zt(t);case 254:return Qt(t);case 255:return en(t);case 256:return tn(t);case 257:return rn(t);case 258:return an(t);case 259:return sn(t);case 260:return cn(t);case 261:return un(t);case 262:return ln(t);case 263:return _n(t);case 264:return dn(t)}if(e.isExpression(t))return N(A(1,t));e.isToken(t)&&Un(t);}}function N(e){switch(e.kind){case 8:return P(e);case 9:case 12:case 13:return O(e);case 71:return F(e);case 86:case 95:case 97:case 101:case 99:case 91:return void Un(e);case 177:return ge(e);case 178:return me(e);case 179:return ye(e);case 180:return ve(e);case 181:return be(e);case 182:return xe(e);case 183:return ke(e);case 184:return Se(e);case 185:return Te(e);case 186:return Ce(e);case 187:return De(e);case 188:return Ne(e);case 189:return Ae(e);case 190:return we(e);case 191:return Pe(e);case 192:return Oe(e);case 193:return Ie(e);case 194:return Me(e);case 195:return Re(e);case 196:return Le(e);case 197:return Be(e);case 198:return Ke(e);case 199:return je(e);case 200:return;case 202:return ze(e);case 203:return Ue(e);case 204:return qe(e);case 249:return Wt(e);case 250:return Ht(e);case 297:return gn(e);case 298:return mn(e)}}function A(e,t){return t&&Lr&&Lr(e,t)||t}function w(e){Mr&&Mr(e,$n);}function P(e){O(e);}function O(n){var r=ir(n);!t.sourceMap&&!t.inlineSourceMap||9!==n.kind&&!e.isTemplateLiteralKind(n.kind)?Rn(r):Nr.writeLiteral(r);}function F(e){Rn(ar(e,!1)),En(e,e.typeArguments);}function I(e){M(e.left),Rn(\".\"),h(e.right);}function M(e){71===e.kind?b(e):h(e);}function R(e){Rn(\"[\"),b(e.expression),Rn(\"]\");}function L(e){h(e.name),xn(\" extends \",e.constraint),xn(\" = \",e.default);}function B(e){Dn(e,e.decorators),bn(e,e.modifiers),Jn(e.dotDotDotToken,\"...\"),h(e.name),Jn(e.questionToken,\"?\"),xn(\": \",e.type),kn(\" = \",e.initializer);}function K(e){Rn(\"@\"),b(e.expression);}function j(e){Dn(e,e.decorators),bn(e,e.modifiers),h(e.name),Jn(e.questionToken,\"?\"),xn(\": \",e.type),Rn(\";\");}function J(e){Dn(e,e.decorators),bn(e,e.modifiers),h(e.name),Jn(e.questionToken,\"?\"),xn(\": \",e.type),kn(\" = \",e.initializer),Rn(\";\");}function z(e){Dn(e,e.decorators),bn(e,e.modifiers),h(e.name),Jn(e.questionToken,\"?\"),Nn(e,e.typeParameters),An(e,e.parameters),xn(\": \",e.type),Rn(\";\");}function U(e){Dn(e,e.decorators),bn(e,e.modifiers),Jn(e.asteriskToken,\"*\"),h(e.name),Jn(e.questionToken,\"?\"),ht(e,vt);}function q(e){bn(e,e.modifiers),Rn(\"constructor\"),ht(e,vt);}function V(e){Dn(e,e.decorators),bn(e,e.modifiers),Rn(153===e.kind?\"get \":\"set \"),h(e.name),ht(e,vt);}function $(e){Dn(e,e.decorators),bn(e,e.modifiers),Nn(e,e.typeParameters),An(e,e.parameters),xn(\": \",e.type),Rn(\";\");}function W(e){Dn(e,e.decorators),bn(e,e.modifiers),Rn(\"new \"),Nn(e,e.typeParameters),An(e,e.parameters),xn(\": \",e.type),Rn(\";\");}function H(e){Dn(e,e.decorators),bn(e,e.modifiers),On(e,e.parameters),xn(\": \",e.type),Rn(\";\");}function G(){Rn(\";\");}function X(e){h(e.parameterName),Rn(\" is \"),h(e.type);}function Y(e){h(e.typeName),En(e,e.typeArguments);}function Q(e){Nn(e,e.typeParameters),Pn(e,e.parameters),Rn(\" => \"),h(e.type);}function Z(e){Rn(\"new \"),Nn(e,e.typeParameters),An(e,e.parameters),Rn(\" => \"),h(e.type);}function ee(e){Rn(\"typeof \"),h(e.exprName);}function te(t){Rn(\"{\"),t.members.length>0&&Fn(t,t.members,1&e.getEmitFlags(t)?448:65),Rn(\"}\");}function ne(e){h(e.elementType),Rn(\"[]\");}function re(e){Rn(\"[\"),Fn(e,e.elementTypes,336),Rn(\"]\");}function ae(e){Fn(e,e.types,260);}function ie(e){Fn(e,e.types,264);}function oe(e){Rn(\"(\"),h(e.type),Rn(\")\");}function se(){Rn(\"this\");}function ce(e){qn(e.operator),Rn(\" \"),h(e.type);}function ue(e){h(e.objectType),Rn(\"[\"),h(e.indexType),Rn(\"]\");}function le(t){var n=e.getEmitFlags(t);Rn(\"{\"),1&n?Rn(\" \"):(Ln(),Bn()),Jn(t.readonlyToken,\"readonly \"),Rn(\"[\"),h(t.typeParameter.name),Rn(\" in \"),h(t.typeParameter.constraint),Rn(\"]\"),Jn(t.questionToken,\"?\"),Rn(\": \"),h(t.type),Rn(\";\"),1&n?Rn(\" \"):(Ln(),Kn()),Rn(\"}\");}function _e(e){b(e.literal);}function de(e){var t=e.elements;0===t.length?Rn(\"{}\"):(Rn(\"{\"),Fn(e,t,432),Rn(\"}\"));}function pe(e){0===e.elements.length?Rn(\"[]\"):(Rn(\"[\"),Fn(e,e.elements,304),Rn(\"]\"));}function fe(e){Tn(e.propertyName,\": \"),Jn(e.dotDotDotToken,\"...\"),h(e.name),kn(\" = \",e.initializer);}function ge(e){var t=e.elements;0===t.length?Rn(\"[]\"):In(e,t,4466|(e.multiLine?32768:0));}function me(t){var n=t.properties;if(0===n.length)Rn(\"{}\");else{var r=65536&e.getEmitFlags(t);r&&Bn();var a=t.multiLine?32768:0;Fn(t,n,978|(kr.languageVersion>=1?32:0)|a),r&&Kn();}}function ye(t){var n=!1,r=!1;if(!(131072&e.getEmitFlags(t))){var a={kind:23,pos:t.expression.end,end:e.skipTrivia(kr.text,t.expression.end)+1};n=er(t,t.expression,a),r=er(t,a,t.name);}b(t.expression),Hn(n),Rn(!n&&he(t.expression)?\"..\":\".\"),Hn(r),h(t.name),Gn(n,r);}function he(n){if(n=e.skipPartiallyEmittedExpressions(n),e.isNumericLiteral(n)){var r=ir(n);return!n.numericLiteralFlags&&r.indexOf(e.tokenToString(23))<0}if(e.isPropertyAccessExpression(n)||e.isElementAccessExpression(n)){var a=e.getConstantValue(n);return\"number\"==typeof a&&isFinite(a)&&Math.floor(a)===a&&t.removeComments}}function ve(e){b(e.expression),Rn(\"[\"),b(e.argumentExpression),Rn(\"]\");}function be(e){b(e.expression),En(e,e.typeArguments),In(e,e.arguments,1296);}function xe(e){Rn(\"new \"),b(e.expression),En(e,e.typeArguments),In(e,e.arguments,9488);}function ke(e){b(e.tag),Rn(\" \"),b(e.template);}function Se(e){Rn(\"<\"),h(e.type),Rn(\">\"),b(e.expression);}function Te(e){Rn(\"(\"),b(e.expression),Rn(\")\");}function Ce(e){mt(e);}function De(e){Dn(e,e.decorators),bn(e,e.modifiers),ht(e,Ee);}function Ee(e){Nn(e,e.typeParameters),Pn(e,e.parameters),xn(\": \",e.type),Rn(\" =>\");}function Ne(e){Rn(\"delete \"),b(e.expression);}function Ae(e){Rn(\"typeof \"),b(e.expression);}function we(e){Rn(\"void \"),b(e.expression);}function Pe(e){Rn(\"await \"),b(e.expression);}function Oe(e){qn(e.operator),Fe(e)&&Rn(\" \"),b(e.operand);}function Fe(e){var t=e.operand;return 192===t.kind&&(37===e.operator&&(37===t.operator||43===t.operator)||38===e.operator&&(38===t.operator||44===t.operator))}function Ie(e){b(e.operand),qn(e.operator);}function Me(e){var t=26!==e.operatorToken.kind,n=er(e,e.left,e.operatorToken),r=er(e,e.operatorToken,e.right);b(e.left),Hn(n,t?\" \":void 0),Un(e.operatorToken),Hn(r,\" \"),b(e.right),Gn(n,r);}function Re(e){var t=er(e,e.condition,e.questionToken),n=er(e,e.questionToken,e.whenTrue),r=er(e,e.whenTrue,e.colonToken),a=er(e,e.colonToken,e.whenFalse);b(e.condition),Hn(t,\" \"),Rn(\"?\"),Hn(n,\" \"),b(e.whenTrue),Gn(t,n),Hn(r,\" \"),Rn(\":\"),Hn(a,\" \"),b(e.whenFalse),Gn(r,a);}function Le(e){h(e.head),Fn(e,e.templateSpans,131072);}function Be(e){Rn(e.asteriskToken?\"yield*\":\"yield\"),kn(\" \",e.expression);}function Ke(e){Rn(\"...\"),b(e.expression);}function je(e){Ct(e);}function Je(e){b(e.expression),En(e,e.typeArguments);}function ze(e){b(e.expression),e.type&&(Rn(\" as \"),h(e.type));}function Ue(e){b(e.expression),Rn(\"!\");}function qe(e){zn(e.keywordToken,e.pos),Rn(\".\"),h(e.name);}function Ve(e){b(e.expression),h(e.literal);}function $e(e){tr(e)?(zn(17,e.pos,e),Rn(\" \"),zn(18,e.statements.end,e)):(zn(17,e.pos,e),We(e),Bn(),Wr(e.statements.end),Kn(),zn(18,e.statements.end,e));}function We(t){1&e.getEmitFlags(t)?Fn(t,t.statements,384):Fn(t,t.statements,65);}function He(e){bn(e,e.modifiers),h(e.declarationList),Rn(\";\");}function Ge(){Rn(\";\");}function Xe(e){b(e.expression),Rn(\";\");}function Ye(e){var t=zn(90,e.pos,e);Rn(\" \"),zn(19,t,e),b(e.expression),zn(20,e.expression.end,e),Cn(e,e.thenStatement),e.elseStatement&&(Vn(e),zn(82,e.thenStatement.end,e),211===e.elseStatement.kind?(Rn(\" \"),h(e.elseStatement)):Cn(e,e.elseStatement));}function Qe(t){Rn(\"do\"),Cn(t,t.statement),e.isBlock(t.statement)?Rn(\" \"):Vn(t),Rn(\"while (\"),b(t.expression),Rn(\");\");}function Ze(e){Rn(\"while (\"),b(e.expression),Rn(\")\"),Cn(e,e.statement);}function et(e){var t=zn(88,e.pos);Rn(\" \"),zn(19,t,e),rt(e.initializer),Rn(\";\"),kn(\" \",e.condition),Rn(\";\"),kn(\" \",e.incrementor),Rn(\")\"),Cn(e,e.statement);}function tt(e){var t=zn(88,e.pos);Rn(\" \"),zn(19,t),rt(e.initializer),Rn(\" in \"),b(e.expression),zn(20,e.expression.end),Cn(e,e.statement);}function nt(e){var t=zn(88,e.pos);Rn(\" \"),Tn(e.awaitModifier,\" \"),zn(19,t),rt(e.initializer),Rn(\" of \"),b(e.expression),zn(20,e.expression.end),Cn(e,e.statement);}function rt(e){void 0!==e&&(227===e.kind?h(e):b(e));}function at(e){zn(77,e.pos),xn(\" \",e.label),Rn(\";\");}function it(e){zn(72,e.pos),xn(\" \",e.label),Rn(\";\");}function ot(e){zn(96,e.pos,e),kn(\" \",e.expression),Rn(\";\");}function st(e){Rn(\"with (\"),b(e.expression),Rn(\")\"),Cn(e,e.statement);}function ct(e){var t=zn(98,e.pos);Rn(\" \"),zn(19,t),b(e.expression),zn(20,e.expression.end),Rn(\" \"),h(e.caseBlock);}function ut(e){h(e.label),Rn(\": \"),h(e.statement);}function lt(e){Rn(\"throw\"),kn(\" \",e.expression),Rn(\";\");}function _t(e){Rn(\"try \"),h(e.tryBlock),e.catchClause&&(Vn(e),h(e.catchClause)),e.finallyBlock&&(Vn(e),Rn(\"finally \"),h(e.finallyBlock));}function dt(e){zn(78,e.pos),Rn(\";\");}function pt(e){h(e.name),xn(\": \",e.type),kn(\" = \",e.initializer);}function ft(t){Rn(e.isLet(t)?\"let \":e.isConst(t)?\"const \":\"var \"),Fn(t,t.declarations,272);}function gt(e){mt(e);}function mt(e){Dn(e,e.decorators),bn(e,e.modifiers),Rn(e.asteriskToken?\"function* \":\"function \"),v(e.name),ht(e,vt);}function yt(e,t){xt(t);}function ht(t,n){var r=t.body;if(r)if(e.isBlock(r)){var a=65536&e.getEmitFlags(t);a&&Bn(),524288&e.getEmitFlags(t)?(n(t),Ir?Ir(3,r,yt):xt(r)):(or(),n(t),Ir?Ir(3,r,yt):xt(r),sr()),a&&Kn();}else n(t),Rn(\" \"),b(r);else n(t),Rn(\";\");}function vt(e){Nn(e,e.typeParameters),An(e,e.parameters),xn(\": \",e.type);}function bt(t){if(1&e.getEmitFlags(t))return!0;if(t.multiLine)return!1;if(!e.nodeIsSynthesized(t)&&!e.rangeIsOnSingleLine(t,kr))return!1;if(Xn(t,t.statements,2)||Qn(t,t.statements,2))return!1;for(var n,r=0,a=t.statements;r<a.length;r++){var i=a[r];if(Yn(n,i,2))return!1;n=i;}return!0}function xt(e){Rn(\" {\"),Bn();var t=bt(e)?kt:St;Vr?Vr(e,e.statements,t):t(e),Kn(),zn(18,e.statements.end,e);}function kt(e){St(e,!0);}function St(e,t){var n=yn(e.statements,!0),r=Nr.getTextPos();w(e),0===n&&r===Nr.getTextPos()&&t?(Kn(),Fn(e,e.statements,384),Bn()):Fn(e,e.statements,1,n);}function Tt(e){Ct(e);}function Ct(t){Dn(t,t.decorators),bn(t,t.modifiers),Rn(\"class\"),Sn(\" \",t.name,v);var n=65536&e.getEmitFlags(t);n&&Bn(),Nn(t,t.typeParameters),Fn(t,t.heritageClauses,256),or(),Rn(\" {\"),Fn(t,t.members,65),Rn(\"}\"),sr(),n&&Kn();}function Dt(e){Dn(e,e.decorators),bn(e,e.modifiers),Rn(\"interface \"),h(e.name),Nn(e,e.typeParameters),Fn(e,e.heritageClauses,256),Rn(\" {\"),Fn(e,e.members,65),Rn(\"}\");}function Et(e){Dn(e,e.decorators),bn(e,e.modifiers),Rn(\"type \"),h(e.name),Nn(e,e.typeParameters),Rn(\" = \"),h(e.type),Rn(\";\");}function Nt(e){bn(e,e.modifiers),Rn(\"enum \"),h(e.name),or(),Rn(\" {\"),Fn(e,e.members,81),Rn(\"}\"),sr();}function At(e){bn(e,e.modifiers),Rn(16&e.flags?\"namespace \":\"module \"),h(e.name);for(var t=e.body;233===t.kind;)Rn(\".\"),h(t.name),t=t.body;Rn(\" \"),h(t);}function wt(e){nr(e)?Rn(\"{ }\"):(or(),Rn(\"{\"),We(e),Rn(\"}\"),sr());}function Pt(e){zn(17,e.pos),Fn(e,e.clauses,65),zn(18,e.clauses.end);}function Ot(e){bn(e,e.modifiers),Rn(\"import \"),h(e.name),Rn(\" = \"),Ft(e.moduleReference),Rn(\";\");}function Ft(e){71===e.kind?b(e):h(e);}function It(e){bn(e,e.modifiers),Rn(\"import \"),e.importClause&&(h(e.importClause),Rn(\" from \")),b(e.moduleSpecifier),Rn(\";\");}function Mt(e){h(e.name),e.name&&e.namedBindings&&Rn(\", \"),h(e.namedBindings);}function Rt(e){Rn(\"* as \"),h(e.name);}function Lt(e){qt(e);}function Bt(e){Vt(e);}function Kt(e){Rn(e.isExportEquals?\"export = \":\"export default \"),b(e.expression),Rn(\";\");}function jt(e){Rn(\"export \"),e.exportClause?h(e.exportClause):Rn(\"*\"),e.moduleSpecifier&&(Rn(\" from \"),b(e.moduleSpecifier)),Rn(\";\");}function Jt(e){Rn(\"export as namespace \"),h(e.name),Rn(\";\");}function zt(e){qt(e);}function Ut(e){Vt(e);}function qt(e){Rn(\"{\"),Fn(e,e.elements,432),Rn(\"}\");}function Vt(e){e.propertyName&&(h(e.propertyName),Rn(\" as \")),h(e.name);}function $t(e){Rn(\"require(\"),b(e.expression),Rn(\")\");}function Wt(e){h(e.openingElement),Fn(e,e.children,131072),h(e.closingElement);}function Ht(e){Rn(\"<\"),nn(e.tagName),Rn(\" \"),e.attributes.properties&&e.attributes.properties.length>0&&h(e.attributes),Rn(\"/>\");}function Gt(e){Rn(\"<\"),nn(e.tagName),jn(e.attributes.properties,\" \"),e.attributes.properties&&e.attributes.properties.length>0&&h(e.attributes),Rn(\">\");}function Xt(e){Nr.writeLiteral(ar(e,!0));}function Yt(e){Rn(\"</\"),nn(e.tagName),Rn(\">\");}function Qt(e){Fn(e,e.properties,131328);}function Zt(e){h(e.name),xn(\"=\",e.initializer);}function en(e){Rn(\"{...\"),b(e.expression),Rn(\"}\");}function tn(e){e.expression&&(Rn(\"{\"),e.dotDotDotToken&&Rn(\"...\"),b(e.expression),Rn(\"}\"));}function nn(e){71===e.kind?b(e):h(e);}function rn(e){Rn(\"case \"),b(e.expression),Rn(\":\"),on$$1(e,e.statements);}function an(e){Rn(\"default:\"),on$$1(e,e.statements);}function on$$1(t,n){var r=1===n.length&&(e.nodeIsSynthesized(t)||e.nodeIsSynthesized(n[0])||e.rangeStartPositionsAreOnSameLine(t,n[0],kr));n.length>0&&$r(n.pos),r?(Rn(\" \"),h(n[0])):Fn(t,n,81985);}function sn(e){Rn(\" \"),qn(e.token),Rn(\" \"),Fn(e,e.types,272);}function cn(e){var t=zn(74,e.pos);Rn(\" \"),zn(19,t),h(e.variableDeclaration),zn(20,e.variableDeclaration?e.variableDeclaration.end:t),Rn(\" \"),h(e.block);}function un(t){h(t.name),Rn(\": \");var n=t.initializer;if($r&&0==(512&e.getEmitFlags(n))){var r=e.getCommentRange(n);$r(r.pos);}b(n);}function ln(e){h(e.name),e.objectAssignmentInitializer&&(Rn(\" = \"),b(e.objectAssignmentInitializer));}function _n(e){e.expression&&(Rn(\"...\"),b(e.expression));}function dn(e){h(e.name),kn(\" = \",e.initializer);}function pn(t){Ln();var n=t.statements;!Vr||0!==n.length&&e.isPrologueDirective(n[0])&&!e.nodeIsSynthesized(n[0])?fn(t):Vr(t,n,fn);}function fn(t){var n=t.statements;or(),w(t);var r=e.findIndex(n,function(t){return!e.isPrologueDirective(t)});Fn(t,n,1,-1===r?n.length:r),sr();}function gn(e){b(e.expression);}function mn(e){In(e,e.elements,272);}function yn(t,n,r){for(var a=0;a<t.length;a++){var i=t[a];if(!e.isPrologueDirective(i))return a;(!r||!r.has(i.expression.text))&&((n||a>0)&&Ln(),h(i),r&&r.set(i.expression.text,i.expression.text));}return t.length}function hn(t){if(e.isSourceFile(t))g(t),yn(t.statements);else for(var n=e.createMap(),r=0,a=t.sourceFiles;r<a.length;r++){var i=a[r];g(i),yn(i.statements,!0,n);}}function vn(t){if(e.isSourceFile(t)){var n=e.getShebang(t.text);if(n)return Rn(n),Ln(),!0}else for(var r=0,a=t.sourceFiles;r<a.length&&!vn(a[r]);r++);}function bn(e,t){t&&t.length&&(Fn(e,t,131328),Rn(\" \"));}function xn(e,t){Sn(e,t,h);}function kn(e,t){Sn(e,t,b);}function Sn(e,t,n){t&&(Rn(e),n(t));}function Tn(e,t){e&&(h(e),Rn(t));}function Cn(t,n){e.isBlock(n)||1&e.getEmitFlags(t)?(Rn(\" \"),h(n)):(Ln(),Bn(),h(n),Kn());}function Dn(e,t){Fn(e,t,24577);}function En(e,t){Fn(e,t,26960);}function Nn(e,t){Fn(e,t,26960);}function An(e,t){Fn(e,t,1360);}function wn(t,n){var r=e.singleOrUndefined(n);return r&&r.pos===t.pos&&!(e.isArrowFunction(t)&&t.type)&&!e.some(t.decorators)&&!e.some(t.modifiers)&&!e.some(t.typeParameters)&&!e.some(r.decorators)&&!e.some(r.modifiers)&&!r.dotDotDotToken&&!r.questionToken&&!r.type&&!r.initializer&&e.isIdentifier(r.name)}function Pn(e,t){wn(e,t)?h(t[0]):An(e,t);}function On(e,t){Fn(e,t,4432);}function Fn(e,t,n,r,a){Mn(h,e,t,n,r,a);}function In(e,t,n,r,a){Mn(b,e,t,n,r,a);}function Mn(t,n,r,a,i,o){void 0===i&&(i=0),void 0===o&&(o=r?r.length-i:0);var l=void 0===r;if(!(l&&8192&a)){var _=l||0===r.length||i>=r.length||0===o;if(!(_&&16384&a)){if(7680&a&&Rn(c(a)),Br&&Br(r),_)1&a?Ln():128&a&&Rn(\" \");else{var d=0==(131072&a),p=d;Xn(n,r,a)?(Ln(),p=!1):128&a&&Rn(\" \"),64&a&&Bn();for(var f=void 0,g=void 0,m=s(a),y=0;y<o;y++){var h=r[i+y];if(f&&(m&&f.end!==n.end&&Wr(f.end),Rn(m),Yn(f,h,a)?(0==(67&a)&&(Bn(),g=!0),Ln(),p=!1):f&&256&a&&Rn(\" \")),p){if($r){var v=e.getCommentRange(h);$r(v.pos);}}else p=d;t(h),g&&(Kn(),g=!1),f=h;}var b=32&a&&r.hasTrailingComma;16&a&&b&&Rn(\",\"),f&&m&&f.end!==n.end&&Wr(f.end),64&a&&Kn(),Qn(n,r,a)?Ln():128&a&&Rn(\" \");}Kr&&Kr(r),7680&a&&Rn(u(a));}}}function Rn(e){Nr.write(e);}function Ln(){Nr.writeLine();}function Bn(){Nr.increaseIndent();}function Kn(){Nr.decreaseIndent();}function jn(t,n){e.some(t)&&Rn(n);}function Jn(e,t){e&&Rn(t);}function zn(e,t,n){return Or?Or(n,e,t,qn):qn(e,t)}function Un(e){jr&&jr(e),qn(e.kind),Jr&&Jr(e);}function qn(t,n){var r=e.tokenToString(t);return Rn(r),n<0?n:n+r.length}function Vn(t){1&e.getEmitFlags(t)?Rn(\" \"):Ln();}function $n(e){for(var t=e.split(/\\r\\n?|\\n/g),n=Wn(t),r=0;r<t.length;r++){var a=n?t[r].slice(n):t[r];a.length&&(Ln(),Rn(a),Ln());}}function Wn(t){for(var n,r=0,a=t;r<a.length;r++)for(var i=a[r],o=0;o<i.length&&(void 0===n||o<n);o++)if(!e.isWhiteSpaceLike(i.charCodeAt(o))&&(void 0===n||o<n)){n=o;break}return n}function Hn(e,t){e?(Bn(),Ln()):t&&Rn(t);}function Gn(e,t){e&&Kn(),t&&Kn();}function Xn(t,n,r){if(1&r)return!0;if(2&r){if(32768&r)return!0;var a=n[0];return void 0===a?!e.rangeIsOnSingleLine(t,kr):e.positionIsSynthesized(t.pos)||e.nodeIsSynthesized(a)?Zn(a,r):!e.rangeStartPositionsAreOnSameLine(t,a,kr)}return!1}function Yn(t,n,r){return!!(1&r)||(2&r?void 0!==t&&void 0!==n&&(e.nodeIsSynthesized(t)||e.nodeIsSynthesized(n)?Zn(t,r)||Zn(n,r):!e.rangeEndIsOnSameLineAsRangeStart(t,n,kr)):n.startsOnNewLine)}function Qn(t,n,r){if(1&r)return 0==(65536&r);if(2&r){if(32768&r)return!0;var a=e.lastOrUndefined(n);return void 0===a?!e.rangeIsOnSingleLine(t,kr):e.positionIsSynthesized(t.pos)||e.nodeIsSynthesized(a)?Zn(a,r):!e.rangeEndPositionsAreOnSameLine(t,a,kr)}return!1}function Zn(t,n){if(e.nodeIsSynthesized(t)){var r=t.startsOnNewLine;return void 0===r?0!=(32768&n):r}return 0!=(32768&n)}function er(t,n,r){return t=rr(t),n=rr(n),!!(r=rr(r)).startsOnNewLine||!(e.nodeIsSynthesized(t)||e.nodeIsSynthesized(n)||e.nodeIsSynthesized(r)||e.rangeEndIsOnSameLineAsRangeStart(n,r,kr))}function tr(e){return!e.multiLine&&nr(e)}function nr(t){return 0===t.statements.length&&e.rangeEndIsOnSameLineAsRangeStart(t,t,kr)}function rr(t){for(;185===t.kind&&e.nodeIsSynthesized(t);)t=t.expression;return t}function ar(t,n){return e.isGeneratedIdentifier(t)?cr(t):!e.isIdentifier(t)||!e.nodeIsSynthesized(t)&&t.parent?9===t.kind&&t.textSourceNode?ar(t.textSourceNode,n):!e.isLiteralExpression(t)||!e.nodeIsSynthesized(t)&&t.parent?e.getSourceTextOfNodeFromSourceFile(kr,t,n):t.text:e.unescapeIdentifier(t.text)}function ir(t){if(9===t.kind&&t.textSourceNode){var n=t.textSourceNode;return e.isIdentifier(n)?16777216&e.getEmitFlags(t)?'\"'+e.escapeString(ar(n))+'\"':'\"'+e.escapeNonAsciiString(ar(n))+'\"':ir(n)}return e.getLiteralText(t,kr)}function or(){Dr.push(Er),Er=0;}function sr(){Er=Dr.pop();}function cr(t){if(4===t.autoGenerateKind)return ur(xr(t));var n=t.autoGenerateId;return Tr[n]||(Tr[n]=e.unescapeIdentifier(br(t)))}function ur(t){var n=e.getNodeId(t);return Sr[n]||(Sr[n]=e.unescapeIdentifier(vr(t)))}function lr(e){return!(wr&&wr(e)||kr.identifiers.has(e)||Cr.has(e))}function _r(t,n){for(var r=n;e.isNodeDescendantOf(r,n);r=r.nextContainer)if(r.locals){var a=r.locals.get(t);if(a&&9544639&a.flags)return!1}return!0}function dr(e){if(e&&!(Er&e)&&lr(n=268435456===e?\"_i\":\"_n\"))return Er|=e,n;for(;;){var t=268435455&Er;if(Er++,8!==t&&13!==t){var n=t<26?\"_\"+String.fromCharCode(97+t):\"_\"+(t-26);if(lr(n))return n}}}function pr(e){95!==e.charCodeAt(e.length-1)&&(e+=\"_\");for(var t=1;;){var n=e+t;if(lr(n))return Cr.set(n,n),n;t++;}}function fr(e){var t=ar(e.name);return _r(t,e)?t:pr(t)}function gr(t){var n=e.getExternalModuleName(t);return pr(9===n.kind?e.escapeIdentifier(e.makeIdentifierFromModuleName(n.text)):\"module\")}function mr(){return pr(\"default\")}function yr(){return pr(\"class\")}function hr(t){return e.isIdentifier(t.name)?ur(t.name):dr(0)}function vr(e){switch(e.kind){case 71:return pr(ar(e));case 233:case 232:return fr(e);case 238:case 244:return gr(e);case 228:case 229:case 243:return mr();case 199:return yr();case 151:case 153:case 154:return hr(e);default:return dr(0)}}function br(t){switch(t.autoGenerateKind){case 1:return dr(0);case 2:return dr(268435456);case 3:return pr(e.unescapeIdentifier(t.text))}e.Debug.fail(\"Unsupported GeneratedIdentifierKind.\");}function xr(t){for(var n=t.autoGenerateId,r=t,a=r.original;a&&(r=a,!e.isIdentifier(r)||4!==r.autoGenerateKind||r.autoGenerateId===n);)a=r.original;return r}void 0===t&&(t={}),void 0===n&&(n={});var kr,Sr,Tr,Cr,Dr,Er,Nr,Ar,wr=n.hasGlobalName,Pr=n.onEmitSourceMapOfNode,Or=n.onEmitSourceMapOfToken,Fr=n.onEmitSourceMapOfPosition,Ir=n.onEmitNode,Mr=n.onEmitHelpers,Rr=n.onSetSourceFile,Lr=n.substituteNode,Br=n.onBeforeEmitNodeArray,Kr=n.onAfterEmitNodeArray,jr=n.onBeforeEmitToken,Jr=n.onAfterEmitToken,zr=e.getNewLineCharacter(t),Ur=e.createCommentWriter(t,Fr),qr=Ur.emitNodeWithComments,Vr=Ur.emitBodyWithDetachedComments,$r=Ur.emitTrailingCommentsOfPosition,Wr=Ur.emitLeadingCommentsOfPosition;return y(),{printNode:r,printFile:i,printBundle:a,writeNode:o,writeFile:_,writeBundle:l}}function s(e){return l[28&e]}function c(e){return _[7680&e][0]}function u(e){return _[7680&e][1]}var l=function(){var e=[];return e[0]=\"\",e[16]=\",\",e[4]=\" |\",e[8]=\" &\",e}(),_=function(){var e=[];return e[512]=[\"{\",\"}\"],e[1024]=[\"(\",\")\"],e[2048]=[\"<\",\">\"],e[4096]=[\"[\",\"]\"],e}();e.forEachEmittedFile=t,e.emitFiles=i,e.createPrinter=o;var d;!function(e){e[e.Auto=0]=\"Auto\",e[e.CountMask=268435455]=\"CountMask\",e[e._i=268435456]=\"_i\";}(d||(d={}));var p;!function(e){e[e.None=0]=\"None\",e[e.SingleLine=0]=\"SingleLine\",e[e.MultiLine=1]=\"MultiLine\",e[e.PreserveLines=2]=\"PreserveLines\",e[e.LinesMask=3]=\"LinesMask\",e[e.NotDelimited=0]=\"NotDelimited\",e[e.BarDelimited=4]=\"BarDelimited\",e[e.AmpersandDelimited=8]=\"AmpersandDelimited\",e[e.CommaDelimited=16]=\"CommaDelimited\",e[e.DelimitersMask=28]=\"DelimitersMask\",e[e.AllowTrailingComma=32]=\"AllowTrailingComma\",e[e.Indented=64]=\"Indented\",e[e.SpaceBetweenBraces=128]=\"SpaceBetweenBraces\",e[e.SpaceBetweenSiblings=256]=\"SpaceBetweenSiblings\",e[e.Braces=512]=\"Braces\",e[e.Parenthesis=1024]=\"Parenthesis\",e[e.AngleBrackets=2048]=\"AngleBrackets\",e[e.SquareBrackets=4096]=\"SquareBrackets\",e[e.BracketsMask=7680]=\"BracketsMask\",e[e.OptionalIfUndefined=8192]=\"OptionalIfUndefined\",e[e.OptionalIfEmpty=16384]=\"OptionalIfEmpty\",e[e.Optional=24576]=\"Optional\",e[e.PreferNewLine=32768]=\"PreferNewLine\",e[e.NoTrailingNewLine=65536]=\"NoTrailingNewLine\",e[e.NoInterveningComments=131072]=\"NoInterveningComments\",e[e.Modifiers=131328]=\"Modifiers\",e[e.HeritageClauses=256]=\"HeritageClauses\",e[e.SingleLineTypeLiteralMembers=448]=\"SingleLineTypeLiteralMembers\",e[e.MultiLineTypeLiteralMembers=65]=\"MultiLineTypeLiteralMembers\",e[e.TupleTypeElements=336]=\"TupleTypeElements\",e[e.UnionTypeConstituents=260]=\"UnionTypeConstituents\",e[e.IntersectionTypeConstituents=264]=\"IntersectionTypeConstituents\",e[e.ObjectBindingPatternElements=432]=\"ObjectBindingPatternElements\",e[e.ArrayBindingPatternElements=304]=\"ArrayBindingPatternElements\",e[e.ObjectLiteralExpressionProperties=978]=\"ObjectLiteralExpressionProperties\",e[e.ArrayLiteralExpressionElements=4466]=\"ArrayLiteralExpressionElements\",e[e.CommaListElements=272]=\"CommaListElements\",e[e.CallExpressionArguments=1296]=\"CallExpressionArguments\",e[e.NewExpressionArguments=9488]=\"NewExpressionArguments\",e[e.TemplateExpressionSpans=131072]=\"TemplateExpressionSpans\",e[e.SingleLineBlockStatements=384]=\"SingleLineBlockStatements\",e[e.MultiLineBlockStatements=65]=\"MultiLineBlockStatements\",e[e.VariableDeclarationList=272]=\"VariableDeclarationList\",e[e.SingleLineFunctionBodyStatements=384]=\"SingleLineFunctionBodyStatements\",e[e.MultiLineFunctionBodyStatements=1]=\"MultiLineFunctionBodyStatements\",e[e.ClassHeritageClauses=256]=\"ClassHeritageClauses\",e[e.ClassMembers=65]=\"ClassMembers\",e[e.InterfaceMembers=65]=\"InterfaceMembers\",e[e.EnumMembers=81]=\"EnumMembers\",e[e.CaseBlockClauses=65]=\"CaseBlockClauses\",e[e.NamedImportsOrExportsElements=432]=\"NamedImportsOrExportsElements\",e[e.JsxElementChildren=131072]=\"JsxElementChildren\",e[e.JsxElementAttributes=131328]=\"JsxElementAttributes\",e[e.CaseOrDefaultClauseStatements=81985]=\"CaseOrDefaultClauseStatements\",e[e.HeritageClauseTypes=272]=\"HeritageClauseTypes\",e[e.SourceFileStatements=65537]=\"SourceFileStatements\",e[e.Decorators=24577]=\"Decorators\",e[e.TypeArguments=26960]=\"TypeArguments\",e[e.TypeParameters=26960]=\"TypeParameters\",e[e.Parameters=1360]=\"Parameters\",e[e.IndexSignatureParameters=4432]=\"IndexSignatureParameters\";}(p||(p={}));}(r||(r={}));!function(e){function t(t,n,r){for(void 0===r&&(r=\"tsconfig.json\");;){var a=e.combinePaths(t,r);if(n(a))return a;var i=e.getDirectoryPath(t);if(i===t)break;t=i;}}function n(t,n){var r=e.getDirectoryPath(n),a=e.isRootedDiskPath(t)?t:e.combinePaths(r,t);return e.normalizePath(a)}function r(t,n,r){var a;return e.forEach(t,function(t){var i=e.getNormalizedPathComponents(t,n);if(i.pop(),a){for(var o=Math.min(a.length,i.length),s=0;s<o;s++)if(r(a[s])!==r(i[s])){if(0===s)return!0;a.length=s;break}i.length<a.length&&(a.length=i.length);}else a=i;})?\"\":a?e.getNormalizedPathFromPathComponents(a):n}function a(t,n){function r(t){return e.sys.useCaseSensitiveFileNames?t:t.toLowerCase()}function a(r,a,i){var o;try{e.performance.mark(\"beforeIORead\"),o=e.sys.readFile(r,t.charset),e.performance.mark(\"afterIORead\"),e.performance.measure(\"I/O Read\",\"beforeIORead\",\"afterIORead\");}catch(e){i&&i(e.message),o=\"\";}return void 0!==o?e.createSourceFile(r,o,a,n):void 0}function i(t){return!!_.has(t)||!!e.sys.directoryExists(t)&&(_.set(t,!0),!0)}function o(t){t.length>e.getRootLength(t)&&!i(t)&&(o(e.getDirectoryPath(t)),e.sys.createDirectory(t));}function s(t,n,r){l||(l=e.createMap());var a=e.sys.createHash(n),i=e.sys.getModifiedTime(t);if(i){var o=l.get(t);if(o&&o.byteOrderMark===r&&o.hash===a&&o.mtime.getTime()===i.getTime())return}e.sys.writeFile(t,n,r);var s=e.sys.getModifiedTime(t);l.set(t,{hash:a,byteOrderMark:r,mtime:s});}function c(n,r,a,i){try{e.performance.mark(\"beforeIOWrite\"),o(e.getDirectoryPath(e.normalizePath(n))),e.isWatchSet(t)&&e.sys.createHash&&e.sys.getModifiedTime?s(n,r,a):e.sys.writeFile(n,r,a),e.performance.mark(\"afterIOWrite\"),e.performance.measure(\"I/O Write\",\"beforeIOWrite\",\"afterIOWrite\");}catch(e){i&&i(e.message);}}function u(){return e.getDirectoryPath(e.normalizePath(e.sys.getExecutingFilePath()))}var l,_=e.createMap(),d=e.getNewLineCharacter(t),p=e.sys.realpath&&function(t){return e.sys.realpath(t)};return{getSourceFile:a,getDefaultLibLocation:u,getDefaultLibFileName:function(t){return e.combinePaths(u(),e.getDefaultLibFileName(t))},writeFile:c,getCurrentDirectory:e.memoize(function(){return e.sys.getCurrentDirectory()}),useCaseSensitiveFileNames:function(){return e.sys.useCaseSensitiveFileNames},getCanonicalFileName:r,getNewLine:function(){return d},fileExists:function(t){return e.sys.fileExists(t)},readFile:function(t){return e.sys.readFile(t)},trace:function(t){return e.sys.write(t+d)},directoryExists:function(t){return e.sys.directoryExists(t)},getEnvironmentVariable:function(t){return e.sys.getEnvironmentVariable?e.sys.getEnvironmentVariable(t):\"\"},getDirectories:function(t){return e.sys.getDirectories(t)},realpath:p}}function i(t,n,r){var a=t.getOptionsDiagnostics(r).concat(t.getSyntacticDiagnostics(n,r),t.getGlobalDiagnostics(r),t.getSemanticDiagnostics(n,r));return t.getCompilerOptions().declaration&&(a=a.concat(t.getDeclarationDiagnostics(n,r))),e.sortAndDeduplicateDiagnostics(a)}function o(t,n){for(var r=\"\",a=0,i=t;a<i.length;a++){var o=i[a];if(o.file){var s=e.getLineAndCharacterOfPosition(o.file,o.start),c=s.line,u=s.character,l=o.file.fileName;r+=e.convertToRelativePath(l,n.getCurrentDirectory(),function(e){return n.getCanonicalFileName(e)})+\"(\"+(c+1)+\",\"+(u+1)+\"): \";}r+=e.DiagnosticCategory[o.category].toLowerCase()+\" TS\"+o.code+\": \"+_(o.messageText,n.getNewLine())+n.getNewLine();}return r}function s(t){switch(t){case e.DiagnosticCategory.Warning:return h;case e.DiagnosticCategory.Error:return y;case e.DiagnosticCategory.Message:return v}}function c(e,t){return t+e+k}function u(e,t){for(;e.length<t;)e=\" \"+e;return e}function l(t,n){for(var r=\"\",a=0,i=t;a<i.length;a++){var o=i[a];if(o.file){var l=o.start,d=o.length,p=o.file,f=e.getLineAndCharacterOfPosition(p,l),g=f.line,m=f.character,h=e.getLineAndCharacterOfPosition(p,l+d),v=h.line,T=h.character,C=e.getLineAndCharacterOfPosition(p,p.text.length).line,D=n?e.convertToRelativePath(p.fileName,n.getCurrentDirectory(),function(e){return n.getCanonicalFileName(e)}):p.fileName,E=v-g>=4,N=(v+1+\"\").length;E&&(N=Math.max(S.length,N)),r+=e.sys.newLine;for(var A=g;A<=v;A++){E&&g+1<A&&A<v-1&&(r+=c(u(S,N),b)+x+e.sys.newLine,A=v-1);var w=e.getPositionOfLineAndCharacter(p,A,0),P=A<C?e.getPositionOfLineAndCharacter(p,A+1,0):p.text.length,O=p.text.slice(w,P);if(O=O.replace(/\\s+$/g,\"\"),O=O.replace(\"\\t\",\" \"),r+=c(u(A+1+\"\",N),b)+x,r+=O+e.sys.newLine,r+=c(u(\"\",N),b)+x,r+=y,A===g){var F=A===v?T:void 0;r+=O.slice(0,m).replace(/\\S/g,\" \"),r+=O.slice(m,F).replace(/./g,\"~\");}else r+=A===v?O.slice(0,T).replace(/./g,\"~\"):O.replace(/./g,\"~\");r+=k,r+=e.sys.newLine;}r+=e.sys.newLine,r+=D+\"(\"+(g+1)+\",\"+(m+1)+\"): \";}var I=s(o.category);r+=c(e.DiagnosticCategory[o.category].toLowerCase(),I)+\" TS\"+o.code+\": \"+_(o.messageText,e.sys.newLine);}return r}function _(e,t){if(\"string\"==typeof e)return e;for(var n=e,r=\"\",a=0;n;){if(a){r+=t;for(var i=0;i<a;i++)r+=\"  \";}r+=n.messageText,a++,n=n.next;}return r}function d(t,n,r){if(0===t.length)return[];for(var a=[],i=e.createMap(),o=0,s=t;o<s.length;o++){var c=s[o],u=void 0;i.has(c)?u=i.get(c):i.set(c,u=r(c,n)),a.push(u);}return a}function p(t,i,o,s){function c(){if(void 0===ge){var t=e.filter(be,function(t){return e.sourceFileMayBeEmitted(t,i,p)});(ge=i.rootDir&&ae(t,i.rootDir)?e.getNormalizedAbsolutePath(i.rootDir,Ie):re(t))&&ge[ge.length-1]!==e.directorySeparator&&(ge+=e.directorySeparator);}return ge}function u(){if(!he){v(),he=e.createMap();for(var t=0,n=be;t<n.length;t++){var r=n[t];e.copyEntries(r.classifiableNames,he);}}return he}function l(t,n,r,a){if(0===ze&&!r.ambientModuleNames.length)return Pe(t,n);var s=a.program&&a.program.getSourceFile(n);if(s!==r&&r.resolvedModules){for(var c=[],u=0,l=t;u<l.length;u++){var _=l[u],d=r.resolvedModules.get(_);c.push(d);}return c}for(var p,f,m={},y=0;y<t.length;y++){_=t[y];if(r===s){var h=s&&s.resolvedModules.get(_);if(h){e.isTraceEnabled(i,o)&&e.trace(o,e.Diagnostics.Reusing_resolution_of_module_0_to_file_1_from_old_program,_,n),(f||(f=new Array(t.length)))[y]=h;continue}}var v=!1;e.contains(r.ambientModuleNames,_)?(v=!0,e.isTraceEnabled(i,o)&&e.trace(o,e.Diagnostics.Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1,_,n)):v=function(t,n){if(e.getResolvedModule(n.file,t))return!1;var r=n.program&&n.program.getTypeChecker().tryFindAmbientModuleWithoutAugmentations(t);if(!r||!r.declarations)return!1;var a=e.forEach(r.declarations,function(t){var r=e.getSourceFileOfNode(t);return!e.contains(n.modifiedFilePaths,r.path)&&r});return!!a&&(e.isTraceEnabled(i,o)&&e.trace(o,e.Diagnostics.Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified,t,a.fileName),!0)}(_,a),v?(f||(f=new Array(t.length)))[y]=m:(p||(p=[])).push(_);}var b=p&&p.length?Pe(p,n):g;if(!f)return e.Debug.assert(b.length===t.length),b;for(var x=0,y=0;y<f.length;y++)f[y]?f[y]===m&&(f[y]=void 0):(f[y]=b[x],x++);return e.Debug.assert(x===b.length),f}function _(e){return{getCanonicalFileName:te,getCommonSourceDirectory:fe.getCommonSourceDirectory,getCompilerOptions:fe.getCompilerOptions,getCurrentDirectory:function(){return Ie},getNewLine:function(){return o.getNewLine()},getSourceFile:fe.getSourceFile,getSourceFileByPath:fe.getSourceFileByPath,getSourceFiles:fe.getSourceFiles,isSourceFileFromExternalLibrary:p,writeFile:e||function(e,t,n,r,a){return o.writeFile(e,t,n,r,a)},isEmitBlocked:x}}function p(e){return Ne.get(e.path)}function y(){return me||(me=e.createTypeChecker(fe,!0))}function h(){me=void 0;}function v(){return ye||(ye=e.createTypeChecker(fe,!1))}function b(e,t,n,r,a){return w(function(){return k(fe,e,t,n,r,a)})}function x(t){return Re.contains(e.toPath(t,Ie,te))}function k(t,n,r,a,o,s){var c=[];if(i.noEmit)return{diagnostics:c,sourceMaps:void 0,emittedFiles:void 0,emitSkipped:!0};if(i.noEmitOnError){var u=t.getOptionsDiagnostics(a).concat(t.getSyntacticDiagnostics(n,a),t.getGlobalDiagnostics(a),t.getSemanticDiagnostics(n,a));if(0===u.length&&t.getCompilerOptions().declaration&&(c=t.getDeclarationDiagnostics(void 0,a)),u.length>0||c.length>0)return{diagnostics:e.concatenate(u,c),sourceMaps:void 0,emittedFiles:void 0,emitSkipped:!0}}var l=y().getEmitResolver(i.outFile||i.out?void 0:n);e.performance.mark(\"beforeEmit\");var d=o?[]:e.getTransformers(i,s),p=e.emitFiles(l,_(r),n,o,d);return e.performance.mark(\"afterEmit\"),e.performance.measure(\"Emit\",\"beforeEmit\",\"afterEmit\"),p}function S(t){return T(e.toPath(t,Ie,te))}function T(e){return je.get(e)}function C(t,n,r){return t?n(t,r):e.sortAndDeduplicateDiagnostics(e.flatMap(fe.getSourceFiles(),function(e){return r&&r.throwIfCancellationRequested(),n(e,r)}))}function D(e,t){return C(e,A,t)}function E(e,t){return C(e,P,t)}function N(e,t){var n=fe.getCompilerOptions();return!e||n.out||n.outFile?M(e,t):C(e,B,t)}function A(t){return e.isSourceFileJavaScript(t)?(t.additionalSyntacticDiagnostics||(t.additionalSyntacticDiagnostics=I(t),e.isCheckJsEnabledForFile(t,i)&&(t.additionalSyntacticDiagnostics=e.concatenate(t.additionalSyntacticDiagnostics,t.jsDocDiagnostics))),e.concatenate(t.additionalSyntacticDiagnostics,t.parseDiagnostics)):t.parseDiagnostics}function w(t){try{return t()}catch(t){throw t instanceof e.OperationCanceledException&&(ye=void 0,me=void 0),t}}function P(e,t){return L(e,t,xe,O)}function O(t,n){return w(function(){if(i.skipLibCheck&&t.isDeclarationFile||i.skipDefaultLibCheck&&t.hasNoDefaultLib)return g;var r=y();e.Debug.assert(!!t.bindDiagnostics);var a=!e.isSourceFileJavaScript(t)||e.isCheckJsEnabledForFile(t,i),o=a?t.bindDiagnostics:g,s=a?r.getDiagnostics(t,n):g,c=Te.getDiagnostics(t.fileName),u=Fe.getDiagnostics(t.fileName),l=o.concat(s,c,u);return e.isSourceFileJavaScript(t)?e.filter(l,F):l})}function F(t){var n=t.file,r=t.start;if(n)for(var a=e.getLineStarts(n),i=e.computeLineAndCharacterOfPosition(a,r).line;i>0;){var o=n.text.slice(a[i-1],a[i]),s=m.exec(o);if(!s)return!0;if(s[3])return!1;i--;}return!0}function I(t){return w(function(){function n(t){switch(u.kind){case 146:case 149:if(u.questionToken===t)return void c.push(s(t,e.Diagnostics._0_can_only_be_used_in_a_ts_file,\"?\"));case 151:case 150:case 152:case 153:case 154:case 186:case 228:case 187:case 228:case 226:if(u.type===t)return void c.push(s(t,e.Diagnostics.types_can_only_be_used_in_a_ts_file))}switch(t.kind){case 237:return void c.push(s(t,e.Diagnostics.import_can_only_be_used_in_a_ts_file));case 243:if(t.isExportEquals)return void c.push(s(t,e.Diagnostics.export_can_only_be_used_in_a_ts_file));break;case 259:if(108===t.token)return void c.push(s(t,e.Diagnostics.implements_clauses_can_only_be_used_in_a_ts_file));break;case 230:return void c.push(s(t,e.Diagnostics.interface_declarations_can_only_be_used_in_a_ts_file));case 233:return void c.push(s(t,e.Diagnostics.module_declarations_can_only_be_used_in_a_ts_file));case 231:return void c.push(s(t,e.Diagnostics.type_aliases_can_only_be_used_in_a_ts_file));case 232:return void c.push(s(t,e.Diagnostics.enum_declarations_can_only_be_used_in_a_ts_file));case 184:var a=t;return void c.push(s(a.type,e.Diagnostics.type_assertion_expressions_can_only_be_used_in_a_ts_file))}var i=u;u=t,e.forEachChild(t,n,r),u=i;}function r(t){switch(u.decorators!==t||i.experimentalDecorators||c.push(s(u,e.Diagnostics.Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_to_remove_this_warning)),u.kind){case 229:case 151:case 150:case 152:case 153:case 154:case 186:case 228:case 187:case 228:if(t===u.typeParameters)return void c.push(o(t,e.Diagnostics.type_parameter_declarations_can_only_be_used_in_a_ts_file));case 208:if(t===u.modifiers)return a(t,208===u.kind);break;case 149:if(t===u.modifiers){for(var r=0,l=t;r<l.length;r++){var _=l[r];115!==_.kind&&c.push(s(_,e.Diagnostics._0_can_only_be_used_in_a_ts_file,e.tokenToString(_.kind)));}return}break;case 146:if(t===u.modifiers)return void c.push(o(t,e.Diagnostics.parameter_modifiers_can_only_be_used_in_a_ts_file));break;case 181:case 182:case 201:if(t===u.typeArguments)return void c.push(o(t,e.Diagnostics.type_arguments_can_only_be_used_in_a_ts_file))}for(var d=0,p=t;d<p.length;d++)n(p[d]);}function a(t,n){for(var r=0,a=t;r<a.length;r++){var i=a[r];switch(i.kind){case 76:if(n)continue;case 114:case 112:case 113:case 131:case 124:case 117:c.push(s(i,e.Diagnostics._0_can_only_be_used_in_a_ts_file,e.tokenToString(i.kind)));}}}function o(n,r,a,i,o){var s=n.pos;return e.createFileDiagnostic(t,s,n.end-s,r,a,i,o)}function s(n,r,a,i,o){return e.createDiagnosticForNodeInSourceFile(t,n,r,a,i,o)}var c=[],u=t;return n(t),c})}function M(e,t){return L(e,t,ke,R)}function R(t,n){return w(function(){var r=y().getEmitResolver(t,n);return e.getDeclarationDiagnostics(_(e.noop),r,t)})}function L(t,n,r,a){var i=t?r.perFile&&r.perFile.get(t.path):r.allDiagnostics;if(i)return i;var o=a(t,n)||g;return t?(r.perFile||(r.perFile=e.createFileMap()),r.perFile.set(t.path,o)):r.allDiagnostics=o,o}function B(e,t){return e.isDeclarationFile?[]:M(e,t)}function K(){return e.sortAndDeduplicateDiagnostics(e.concatenate(Te.getGlobalDiagnostics(),e.concatenate(Fe.getGlobalDiagnostics(),i.configFile?Fe.getDiagnostics(i.configFile.fileName):[])))}function j(){return e.sortAndDeduplicateDiagnostics(y().getGlobalDiagnostics().slice())}function J(t,n){H(e.normalizePath(t),n);}function z(e,t){return e.fileName===t.fileName}function U(e,t){return e.text===t.text}function q(e){return e.text}function V(t){function n(r,i){switch(r.kind){case 238:case 237:case 244:var c=e.getExternalModuleName(r);if(!c||9!==c.kind)break;if(!c.text)break;i&&e.isExternalModuleNameRelative(c.text)||(a||(a=[])).push(c);break;case 233:if(e.isAmbientModule(r)&&(i||e.hasModifier(r,2)||t.isDeclarationFile)){var l=r.name;if(u||i&&!e.isExternalModuleNameRelative(l.text))(o||(o=[])).push(l);else if(!i){t.isDeclarationFile&&(s||(s=[])).push(l.text);var _=r.body;if(_)for(var d=0,p=_.statements;d<p.length;d++)n(p[d],!0);}}}}function r(t){e.isRequireCall(t,!0)?(a||(a=[])).push(t.arguments[0]):e.isImportCall(t)&&1===t.arguments.length&&9===t.arguments[0].kind?(a||(a=[])).push(t.arguments[0]):e.forEachChild(t,r);}if(!t.imports){var a,o,s,c=e.isSourceFileJavaScript(t),u=e.isExternalModule(t);if(i.importHelpers&&(i.isolatedModules||u)&&!t.isDeclarationFile){var l=e.createLiteral(e.externalHelpersModuleNameText),_=e.createImportDeclaration(void 0,void 0,void 0);l.parent=_,_.parent=t,a=[l];}for(var d=0,p=t.statements;d<p.length;d++){var f=p[d];n(f,!1),(524288&t.flags||c)&&r(f);}t.imports=a||g,t.moduleAugmentations=o||g,t.ambientModuleNames=s||g;}}function $(t,r){return W(n(r.fileName,t.fileName),function(t){return je.get(e.toPath(t,Ie,te))})}function W(t,n,r,a){if(e.hasExtension(t)){if(!i.allowNonTsExtensions&&!e.forEach(Me,function(n){return e.fileExtensionIs(o.getCanonicalFileName(t),n)}))return void(r&&r(e.Diagnostics.File_0_has_unsupported_extension_The_only_supported_extensions_are_1,t,\"'\"+Me.join(\"', '\")+\"'\"));var s=n(t);return r&&(s?a&&o.getCanonicalFileName(t)===o.getCanonicalFileName(a.fileName)&&r(e.Diagnostics.A_file_cannot_have_a_reference_to_itself,t):r(e.Diagnostics.File_0_not_found,t)),s}var c=i.allowNonTsExtensions&&n(t);if(c)return c;if(!r||!i.allowNonTsExtensions){var u=e.forEach(Me,function(e){return n(t+e)});return r&&!u&&r(e.Diagnostics.File_0_not_found,t+\".ts\"),u}r(e.Diagnostics.File_0_not_found,t);}function H(t,n,r,a,i){W(t,function(t){return X(t,e.toPath(t,Ie,te),n,r,a,i)},function(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];Te.add(void 0!==r&&void 0!==i&&void 0!==a?e.createFileDiagnostic.apply(void 0,[r,a,i-a,t].concat(n)):e.createCompilerDiagnostic.apply(void 0,[t].concat(n)));},r);}function G(t,n,r,a,i){void 0!==r&&void 0!==a&&void 0!==i?Te.add(e.createFileDiagnostic(r,a,i-a,e.Diagnostics.File_name_0_differs_from_already_included_file_name_1_only_in_casing,t,n)):Te.add(e.createCompilerDiagnostic(e.Diagnostics.File_name_0_differs_from_already_included_file_name_1_only_in_casing,t,n));}function X(t,n,r,a,s,c){if(je.contains(n)){var u=je.get(n);return u&&i.forceConsistentCasingInFileNames&&e.getNormalizedAbsolutePath(u.fileName,Ie)!==e.getNormalizedAbsolutePath(t,Ie)&&G(t,u.fileName,a,s,c),u&&Ne.get(u.path)&&0===De?(Ne.set(u.path,!1),i.noResolve||(Y(u,r),Q(u)),Ee.set(u.path,!1),ne(u)):u&&Ee.get(u.path)&&De<Ce&&(Ee.set(u.path,!1),ne(u)),u}var l=o.getSourceFile(t,i.target,function(n){void 0!==a&&void 0!==s&&void 0!==c?Te.add(e.createFileDiagnostic(a,s,c-s,e.Diagnostics.Cannot_read_file_0_Colon_1,t,n)):Te.add(e.createCompilerDiagnostic(e.Diagnostics.Cannot_read_file_0_Colon_1,t,n));});if(je.set(n,l),l){if(Ne.set(n,De>0),l.path=n,o.useCaseSensitiveFileNames()){var _=Je.get(n);_?G(t,_.fileName,a,s,c):Je.set(n,l);}Oe=Oe||l.hasNoDefaultLib,i.noResolve||(Y(l,r),Q(l)),ne(l),r?be.unshift(l):be.push(l);}return l}function Y(t,r){e.forEach(t.referencedFiles,function(e){H(n(e.fileName,t.fileName),r,t,e.pos,e.end);});}function Q(t){for(var n=e.map(t.typeReferenceDirectives,function(e){return e.fileName.toLocaleLowerCase()}),r=Be(n,t.fileName),a=0;a<n.length;a++){var i=t.typeReferenceDirectives[a],o=r[a],s=i.fileName.toLocaleLowerCase();e.setResolvedTypeReferenceDirective(t,s,o),Z(s,o,t,i.pos,i.end);}}function Z(t,n,r,a,i){var s=Se.get(t);if(!s||!s.primary){var c=!0;n?n.primary?H(n.resolvedFileName,!1,r,a,i):s?(n.resolvedFileName!==s.resolvedFileName&&o.readFile(n.resolvedFileName)!==S(s.resolvedFileName).text&&Te.add(ee(r,a,i,e.Diagnostics.Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_library_to_resolve_the_conflict,n.resolvedFileName,s.resolvedFileName)),c=!1):H(n.resolvedFileName,!1,r,a,i):Te.add(ee(r,a,i,e.Diagnostics.Cannot_find_type_definition_file_for_0)),c&&Se.set(t,n);}}function ee(t,n,r,a){for(var i=[],o=4;o<arguments.length;o++)i[o-4]=arguments[o];return void 0===t||void 0===n||void 0===r?e.createCompilerDiagnostic.apply(void 0,[a].concat(i)):e.createFileDiagnostic.apply(void 0,[t,n,r-n,a].concat(i))}function te(e){return o.getCanonicalFileName(e)}function ne(t){if(V(t),t.imports.length||t.moduleAugmentations.length){var n=e.filter(t.moduleAugmentations,function(e){return 9===e.kind}),r=e.map(e.concatenate(t.imports,n),q),a={program:s,file:t,modifiedFilePaths:ve},o=l(r,e.getNormalizedAbsolutePath(t.fileName,Ie),t,a);e.Debug.assert(o.length===r.length);for(var c=0;c<r.length;c++){var u=o[c];if(e.setResolvedModule(t,r[c],u),u){var _=u.isExternalLibraryImport,d=_&&!e.extensionIsTypeScript(u.extension),p=u.resolvedFileName;_&&De++;var g=d&&De>Ce,m=p&&!f(i,u)&&!i.noResolve&&c<t.imports.length&&!g;g?Ee.set(t.path,!0):m&&X(p,e.toPath(p,Ie,te),!1,t,e.skipTrivia(t.text,t.imports[c].pos),t.imports[c].end),_&&De--;}}}else t.resolvedModules=void 0;}function re(e){for(var t=[],n=0,a=e;n<a.length;n++){var i=a[n];i.isDeclarationFile||t.push(i.fileName);}return r(t,Ie,te)}function ae(t,n){var r=!0;if(t)for(var a=o.getCanonicalFileName(e.getNormalizedAbsolutePath(n,Ie)),s=0,c=t;s<c.length;s++){var u=c[s];u.isDeclarationFile||0!==o.getCanonicalFileName(e.getNormalizedAbsolutePath(u.fileName,Ie)).indexOf(a)&&(Fe.add(e.createCompilerDiagnostic(e.Diagnostics.File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files,u.fileName,i.rootDir)),r=!1);}return r}function ie(t,n,r,a,o,s){for(var c=!0,u=0,l=se();u<l.length;u++){var _=l[u];if(e.isObjectLiteralExpression(_.initializer))for(var d=0,p=e.getPropertyAssignment(_.initializer,t);d<p.length;d++){var f=p[d];e.isArrayLiteralExpression(f.initializer)&&f.initializer.elements.length>n&&(Fe.add(e.createDiagnosticForNodeInSourceFile(i.configFile,f.initializer.elements[n],r,a,o,s)),c=!1);}}c&&Fe.add(e.createCompilerDiagnostic(r,a,o,s));}function oe(t,n,r,a){for(var i=!0,o=0,s=se();o<s.length;o++){var c=s[o];e.isObjectLiteralExpression(c.initializer)&&de(c.initializer,t,n,void 0,r,a)&&(i=!1);}i&&Fe.add(e.createCompilerDiagnostic(r,a));}function se(){var t=_e();return t?e.getPropertyAssignment(t,\"paths\"):g}function ce(e,t,n){le(!0,t,n,e,t,n);}function ue(e,t,n){le(!1,e,void 0,t,n);}function le(t,n,r,a,i,o){var s=_e();(!s||!de(s,t,n,r,a,i,o))&&Fe.add(e.createCompilerDiagnostic(a,i,o));}function _e(){if(void 0===Ae&&(Ae=null,i.configFile&&i.configFile.jsonObject))for(var t=0,n=e.getPropertyAssignment(i.configFile.jsonObject,\"compilerOptions\");t<n.length;t++){var r=n[t];if(e.isObjectLiteralExpression(r.initializer)){Ae=r.initializer;break}}return Ae}function de(t,n,r,a,o,s,c){for(var u=e.getPropertyAssignment(t,r,a),l=0,_=u;l<_.length;l++){var d=_[l];Fe.add(e.createDiagnosticForNodeInSourceFile(i.configFile,n?d.name:d.initializer,o,s,c));}return!!u.length}function pe(t,n){Re.set(e.toPath(t,Ie,te),!0),Fe.add(n);}var fe,ge,me,ye,he,ve,be=[],xe={},ke={},Se=e.createMap(),Te=e.createDiagnosticCollection(),Ce=\"number\"==typeof i.maxNodeModuleJsDepth?i.maxNodeModuleJsDepth:0,De=0,Ee=e.createMap(),Ne=e.createMap();e.performance.mark(\"beforeProgram\"),o=o||a(i);var Ae,we,Pe,Oe=i.noLib,Fe=e.createDiagnosticCollection(),Ie=o.getCurrentDirectory(),Me=e.getSupportedExtensions(i),Re=e.createFileMap(te);if(o.resolveModuleNames)Pe=function(t,n){return o.resolveModuleNames(t,n).map(function(t){if(!t||void 0!==t.extension)return t;var n=e.clone(t);return n.extension=e.extensionFromPath(t.resolvedFileName),n})};else{we=e.createModuleResolutionCache(Ie,function(e){return o.getCanonicalFileName(e)});var Le=function(t,n){return e.resolveModuleName(t,n,i,o,we).resolvedModule};Pe=function(e,t){return d(e,t,Le)};}var Be;if(o.resolveTypeReferenceDirectives)Be=function(e,t){return o.resolveTypeReferenceDirectives(e,t)};else{var Ke=function(t,n){return e.resolveTypeReferenceDirective(t,n,i,o).resolvedTypeReferenceDirective};Be=function(e,t){return d(e,t,Ke)};}var je=e.createFileMap(),Je=o.useCaseSensitiveFileNames()?e.createFileMap(function(e){return e.toLowerCase()}):void 0,ze=function(){if(!s)return 0;var n=s.getCompilerOptions();if(e.changesAffectModuleResolution(n,i))return s.structureIsReused=0;e.Debug.assert(!(3&s.structureIsReused));var r=s.getRootFileNames();if(!e.arrayIsEqualTo(r,t))return s.structureIsReused=0;if(!e.arrayIsEqualTo(i.types,n.types))return s.structureIsReused=0;var a=[],c=[],u=[];s.structureIsReused=2;for(var _=0,d=s.getSourceFiles();_<d.length;_++){m=d[_];if(!(y=o.getSourceFileByPath?o.getSourceFileByPath(m.fileName,m.path,i.target):o.getSourceFile(m.fileName,i.target)))return s.structureIsReused=0;y.path=m.path,c.push(y.path),m!==y&&(m.hasNoDefaultLib!==y.hasNoDefaultLib&&(s.structureIsReused=1),e.arrayIsEqualTo(m.referencedFiles,y.referencedFiles,z)||(s.structureIsReused=1),V(y),e.arrayIsEqualTo(m.imports,y.imports,U)||(s.structureIsReused=1),e.arrayIsEqualTo(m.moduleAugmentations,y.moduleAugmentations,U)||(s.structureIsReused=1),e.arrayIsEqualTo(m.typeReferenceDirectives,y.typeReferenceDirectives,z)||(s.structureIsReused=1),u.push({oldFile:m,newFile:y})),a.push(y);}if(2!==s.structureIsReused)return s.structureIsReused;ve=u.map(function(e){return e.newFile.path});for(var p=0,f=u;p<f.length;p++){var g=f[p],m=g.oldFile,y=g.newFile,h=e.getNormalizedAbsolutePath(y.fileName,Ie);if(Pe){var v=e.map(e.concatenate(y.imports,y.moduleAugmentations),q),b=l(v,h,y,{program:s,file:m,modifiedFilePaths:ve});(k=e.hasChangesInResolutions(v,b,m.resolvedModules,e.moduleResolutionIsEqualTo))?(s.structureIsReused=1,y.resolvedModules=e.zipToMap(v,b)):y.resolvedModules=m.resolvedModules;}if(Be){var x=e.map(y.typeReferenceDirectives,function(e){return e.fileName}),b=Be(x,h),k=e.hasChangesInResolutions(x,b,m.resolvedTypeReferenceDirectiveNames,e.typeDirectiveIsEqualTo);k?(s.structureIsReused=1,y.resolvedTypeReferenceDirectiveNames=e.zipToMap(x,b)):y.resolvedTypeReferenceDirectiveNames=m.resolvedTypeReferenceDirectiveNames;}}if(2!==s.structureIsReused)return s.structureIsReused;for(var S=0;S<a.length;S++)je.set(c[S],a[S]);be=a,Te=s.getFileProcessingDiagnostics();for(var T=0,C=u;T<C.length;T++){var D=C[T];Te.reattachFileDiagnostics(D.newFile);}return Se=s.getResolvedTypeReferenceDirectives(),s.structureIsReused=2}();if(2!==ze){e.forEach(t,function(e){return J(e,!1)});var Ue=e.getAutomaticTypeDirectiveNames(i,o);if(Ue.length)for(var qe=i.configFilePath?e.getDirectoryPath(i.configFilePath):o.getCurrentDirectory(),Ve=e.combinePaths(qe,\"__inferred type names__.ts\"),$e=Be(Ue,Ve),We=0;We<Ue.length;We++)Z(Ue[We],$e[We]);if(!Oe)if(i.lib){var He=o.getDefaultLibLocation?o.getDefaultLibLocation():e.getDirectoryPath(o.getDefaultLibFileName(i));e.forEach(i.lib,function(t){J(e.combinePaths(He,t),!0);});}else J(o.getDefaultLibFileName(i),!0);}return we=void 0,s=void 0,fe={getRootFileNames:function(){return t},getSourceFile:S,getSourceFileByPath:T,getSourceFiles:function(){return be},getCompilerOptions:function(){return i},getSyntacticDiagnostics:D,getOptionsDiagnostics:K,getGlobalDiagnostics:j,getSemanticDiagnostics:E,getDeclarationDiagnostics:N,getTypeChecker:v,getClassifiableNames:u,getDiagnosticsProducingTypeChecker:y,getCommonSourceDirectory:c,emit:b,getCurrentDirectory:function(){return Ie},getNodeCount:function(){return y().getNodeCount()},getIdentifierCount:function(){return y().getIdentifierCount()},getSymbolCount:function(){return y().getSymbolCount()},getTypeCount:function(){return y().getTypeCount()},getFileProcessingDiagnostics:function(){return Te},getResolvedTypeReferenceDirectives:function(){return Se},isSourceFileFromExternalLibrary:p,dropDiagnosticsProducingTypeChecker:h,getSourceFileFromReference:$},function(){function t(t,n){if(t){var r=e.toPath(t,Ie,te);if(je.contains(r)){var a;i.configFilePath||(a=e.chainDiagnosticMessages(void 0,e.Diagnostics.Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript_files_Learn_more_at_https_Colon_Slash_Slashaka_ms_Slashtsconfig)),a=e.chainDiagnosticMessages(a,e.Diagnostics.Cannot_write_file_0_because_it_would_overwrite_input_file,t),pe(t,e.createCompilerDiagnosticFromMessageChain(a));}n.contains(r)?pe(t,e.createCompilerDiagnostic(e.Diagnostics.Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files,t)):n.set(r,!0);}}if(i.isolatedModules&&(i.declaration&&ce(e.Diagnostics.Option_0_cannot_be_specified_with_option_1,\"declaration\",\"isolatedModules\"),i.noEmitOnError&&ce(e.Diagnostics.Option_0_cannot_be_specified_with_option_1,\"noEmitOnError\",\"isolatedModules\"),i.out&&ce(e.Diagnostics.Option_0_cannot_be_specified_with_option_1,\"out\",\"isolatedModules\"),i.outFile&&ce(e.Diagnostics.Option_0_cannot_be_specified_with_option_1,\"outFile\",\"isolatedModules\")),i.inlineSourceMap&&(i.sourceMap&&ce(e.Diagnostics.Option_0_cannot_be_specified_with_option_1,\"sourceMap\",\"inlineSourceMap\"),i.mapRoot&&ce(e.Diagnostics.Option_0_cannot_be_specified_with_option_1,\"mapRoot\",\"inlineSourceMap\")),i.paths&&void 0===i.baseUrl&&ce(e.Diagnostics.Option_paths_cannot_be_used_without_specifying_baseUrl_option,\"paths\"),i.paths)for(var n in i.paths)if(e.hasProperty(i.paths,n))if(e.hasZeroOrOneAsteriskCharacter(n)||oe(!0,n,e.Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character,n),e.isArray(i.paths[n])){var r=i.paths[n].length;0===r&&oe(!1,n,e.Diagnostics.Substitutions_for_pattern_0_shouldn_t_be_an_empty_array,n);for(var a=0;a<r;a++){var s=i.paths[n][a],u=typeof s;\"string\"===u?e.hasZeroOrOneAsteriskCharacter(s)||ie(n,a,e.Diagnostics.Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character,s,n):ie(n,a,e.Diagnostics.Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2,s,n,u);}}else oe(!1,n,e.Diagnostics.Substitutions_for_pattern_0_should_be_an_array,n);i.sourceMap||i.inlineSourceMap||(i.inlineSources&&ce(e.Diagnostics.Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided,\"inlineSources\"),i.sourceRoot&&ce(e.Diagnostics.Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided,\"sourceRoot\")),i.out&&i.outFile&&ce(e.Diagnostics.Option_0_cannot_be_specified_with_option_1,\"out\",\"outFile\"),i.mapRoot&&!i.sourceMap&&ce(e.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1,\"mapRoot\",\"sourceMap\"),i.declarationDir&&(i.declaration||ce(e.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1,\"declarationDir\",\"declaration\"),(i.out||i.outFile)&&ce(e.Diagnostics.Option_0_cannot_be_specified_with_option_1,\"declarationDir\",i.out?\"out\":\"outFile\")),i.lib&&i.noLib&&ce(e.Diagnostics.Option_0_cannot_be_specified_with_option_1,\"lib\",\"noLib\"),i.noImplicitUseStrict&&(void 0===i.alwaysStrict?i.strict:i.alwaysStrict)&&ce(e.Diagnostics.Option_0_cannot_be_specified_with_option_1,\"noImplicitUseStrict\",\"alwaysStrict\");var l=i.target||0,d=i.outFile||i.out,p=e.forEach(be,function(t){return e.isExternalModule(t)&&!t.isDeclarationFile?t:void 0});if(i.isolatedModules){i.module===e.ModuleKind.None&&l<2&&ce(e.Diagnostics.Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES2015_or_higher,\"isolatedModules\",\"target\");var f=e.forEach(be,function(t){return e.isExternalModule(t)||t.isDeclarationFile?void 0:t});if(f){var g=e.getErrorSpanForNode(f,f);Fe.add(e.createFileDiagnostic(f,g.start,g.length,e.Diagnostics.Cannot_compile_namespaces_when_the_isolatedModules_flag_is_provided));}}else if(p&&l<2&&i.module===e.ModuleKind.None){var m=e.getErrorSpanForNode(p,p.externalModuleIndicator);Fe.add(e.createFileDiagnostic(p,m.start,m.length,e.Diagnostics.Cannot_use_imports_exports_or_module_augmentations_when_module_is_none));}if(d)if(i.module&&i.module!==e.ModuleKind.AMD&&i.module!==e.ModuleKind.System)ce(e.Diagnostics.Only_amd_and_system_modules_are_supported_alongside_0,i.out?\"out\":\"outFile\",\"module\");else if(void 0===i.module&&p){var y=e.getErrorSpanForNode(p,p.externalModuleIndicator);Fe.add(e.createFileDiagnostic(p,y.start,y.length,e.Diagnostics.Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system,i.out?\"out\":\"outFile\"));}if(i.outDir||i.sourceRoot||i.mapRoot){var h=c();i.outDir&&\"\"===h&&e.forEach(be,function(t){return e.getRootLength(t.fileName)>1})&&ce(e.Diagnostics.Cannot_find_the_common_subdirectory_path_for_the_input_files,\"outDir\");}if(!i.noEmit&&i.allowJs&&i.declaration&&ce(e.Diagnostics.Option_0_cannot_be_specified_with_option_1,\"allowJs\",\"declaration\"),i.checkJs&&!i.allowJs&&Fe.add(e.createCompilerDiagnostic(e.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1,\"checkJs\",\"allowJs\")),i.emitDecoratorMetadata&&!i.experimentalDecorators&&ce(e.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1,\"emitDecoratorMetadata\",\"experimentalDecorators\"),i.jsxFactory?(i.reactNamespace&&ce(e.Diagnostics.Option_0_cannot_be_specified_with_option_1,\"reactNamespace\",\"jsxFactory\"),e.parseIsolatedEntityName(i.jsxFactory,l)||ue(\"jsxFactory\",e.Diagnostics.Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name,i.jsxFactory)):i.reactNamespace&&!e.isIdentifierText(i.reactNamespace,l)&&ue(\"reactNamespace\",e.Diagnostics.Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier,i.reactNamespace),!i.noEmit&&!i.suppressOutputPathCheck){var v=_(),b=e.createFileMap(o.useCaseSensitiveFileNames()?void 0:function(e){return e.toLocaleLowerCase()});e.forEachEmittedFile(v,function(e){t(e.jsFilePath,b),t(e.declarationFilePath,b);});}}(),e.performance.mark(\"afterProgram\"),e.performance.measure(\"Program\",\"beforeProgram\",\"afterProgram\"),fe}function f(t,n){function r(){return t.jsx?void 0:e.Diagnostics.Module_0_was_resolved_to_1_but_jsx_is_not_set}function a(){return t.allowJs?void 0:e.Diagnostics.Module_0_was_resolved_to_1_but_allowJs_is_not_set}switch(n.extension){case\".ts\":case\".d.ts\":return;case\".tsx\":return r();case\".jsx\":return r()||a();case\".js\":return a()}}var g=[],m=/(^\\s*$)|(^\\s*\\/\\/\\/?\\s*(@ts-ignore)?)/;e.findConfigFile=t,e.resolveTripleslashReference=n,e.computeCommonSourceDirectoryOfFilenames=r,e.createCompilerHost=a,e.getPreEmitDiagnostics=i,e.formatDiagnostics=o;var y=\"\u001b[91m\",h=\"\u001b[93m\",v=\"\u001b[93m\",b=\"\u001b[100;30m\",x=\" \",k=\"\u001b[0m\",S=\"...\";e.formatDiagnosticsWithColorAndContext=l,e.flattenDiagnosticMessageText=_,e.createProgram=p,e.getResolutionDiagnostic=f;}(r||(r={}));!function(e){function t(e){return e&&void 0!==e.enableAutoDiscovery&&void 0===e.enable?{enable:e.enableAutoDiscovery,include:e.include||[],exclude:e.exclude||[]}:e}function n(){if(Z)return Z;var t=e.createMap(),n=e.createMap();return e.forEach(e.optionDeclarations,function(e){t.set(e.name.toLowerCase(),e),e.shortName&&n.set(e.shortName,e.name);}),Z={optionNameMap:t,shortOptionNames:n}}function r(t){return a(t,e.createCompilerDiagnostic)}function a(t,n){var r=e.arrayFrom(t.type.keys()).map(function(e){return\"'\"+e+\"'\"}).join(\", \");return n(e.Diagnostics.Argument_for_0_option_must_be_Colon_1,\"--\"+t.name,r)}function i(e,t,n){return j(e,z(t||\"\"),n)}function o(t,n,r){if(void 0===n&&(n=\"\"),n=z(n),!e.startsWith(n,\"-\")){if(\"\"===n)return[];var a=n.split(\",\");switch(t.element.type){case\"number\":return e.map(a,parseInt);case\"string\":return e.map(a,function(e){return e||\"\"});default:return e.filter(e.map(a,function(e){return i(t.element,e,r)}),function(e){return!!e})}}}function s(t,n){function r(t){for(var n=0;n<t.length;){var r=t[n];if(n++,64===r.charCodeAt(0))a(r.slice(1));else if(45===r.charCodeAt(0)){var _=c(r.slice(45===r.charCodeAt(1)?2:1),!0);if(_)if(_.isTSConfigOnly)l.push(e.createCompilerDiagnostic(e.Diagnostics.Option_0_can_only_be_specified_in_tsconfig_json_file,_.name));else switch(t[n]||\"boolean\"===_.type||l.push(e.createCompilerDiagnostic(e.Diagnostics.Compiler_option_0_expects_an_argument,_.name)),_.type){case\"number\":s[_.name]=parseInt(t[n]),n++;break;case\"boolean\":var d=t[n];s[_.name]=\"false\"!==d,\"false\"!==d&&\"true\"!==d||n++;break;case\"string\":s[_.name]=t[n]||\"\",n++;break;case\"list\":var p=o(_,t[n],l);s[_.name]=p||[],p&&n++;break;default:s[_.name]=i(_,t[n],l),n++;}else l.push(e.createCompilerDiagnostic(e.Diagnostics.Unknown_compiler_option_0,r));}else u.push(r);}}function a(t){var a=n?n(t):e.sys.readFile(t);if(a){for(var i=[],o=0;;){for(;o<a.length&&a.charCodeAt(o)<=32;)o++;if(o>=a.length)break;var s=o;if(34===a.charCodeAt(s)){for(o++;o<a.length&&34!==a.charCodeAt(o);)o++;o<a.length?(i.push(a.substring(s+1,o)),o++):l.push(e.createCompilerDiagnostic(e.Diagnostics.Unterminated_quoted_string_in_response_file_0,t));}else{for(;a.charCodeAt(o)>32;)o++;i.push(a.substring(s,o));}}r(i);}else l.push(e.createCompilerDiagnostic(e.Diagnostics.File_0_not_found,t));}var s={},u=[],l=[];return r(t),{options:s,fileNames:u,errors:l}}function c(e,t){void 0===t&&(t=!1),e=e.toLowerCase();var r=n(),a=r.optionNameMap,i=r.shortOptionNames;if(t){var o=i.get(e);void 0!==o&&(e=o);}return a.get(e)}function u(t,n){var r=\"\";try{r=n(t);}catch(n){return{config:{},error:e.createCompilerDiagnostic(e.Diagnostics.Cannot_read_file_0_Colon_1,t,n.message)}}return l(t,r)}function l(t,n){var r=e.parseJsonText(t,n);return{config:f(r,r.parseDiagnostics),error:r.parseDiagnostics.length?r.parseDiagnostics[0]:void 0}}function _(t,n){var r=\"\";try{r=n(t);}catch(n){return{parseDiagnostics:[e.createCompilerDiagnostic(e.Diagnostics.Cannot_read_file_0_Colon_1,t,n.message)]}}return e.parseJsonText(t,r)}function d(t){return e.arrayToMap(t,function(e){return e.name})}function p(){return void 0===ee&&(ee=d([{name:\"compilerOptions\",type:\"object\",elementOptions:d(e.optionDeclarations),extraKeyDiagnosticMessage:e.Diagnostics.Unknown_compiler_option_0},{name:\"typingOptions\",type:\"object\",elementOptions:d(e.typeAcquisitionDeclarations),extraKeyDiagnosticMessage:e.Diagnostics.Unknown_type_acquisition_option_0},{name:\"typeAcquisition\",type:\"object\",elementOptions:d(e.typeAcquisitionDeclarations),extraKeyDiagnosticMessage:e.Diagnostics.Unknown_type_acquisition_option_0},{name:\"extends\",type:\"string\"},{name:\"files\",type:\"list\",element:{name:\"files\",type:\"string\"}},{name:\"include\",type:\"list\",element:{name:\"include\",type:\"string\"}},{name:\"exclude\",type:\"list\",element:{name:\"exclude\",type:\"string\"}},e.compileOnSaveCommandLineOption])),ee}function f(e,t){return g(e,t,void 0,void 0)}function g(t,n,r,i){function o(a,o,s,l){for(var _={},d=0,p=a.properties;d<p.length;d++){var f=p[d];if(261===f.kind){f.questionToken&&n.push(e.createDiagnosticForNodeInSourceFile(t,f.questionToken,e.Diagnostics._0_can_only_be_used_in_a_ts_file,\"?\")),u(f.name)||n.push(e.createDiagnosticForNodeInSourceFile(t,f.name,e.Diagnostics.String_literal_with_double_quotes_expected));var g=e.getTextOfPropertyName(f.name),m=o?o.get(g):void 0;s&&!m&&n.push(e.createDiagnosticForNodeInSourceFile(t,f.name,s,g));var h=c(f.initializer,m);if(void 0!==typeof g&&void 0!==typeof h&&(_[g]=h,i&&(l||o===r))){var v=y(m,h);l?v&&i.onSetValidOptionKeyValueInParent(l,m,h):o===r&&(v?i.onSetValidOptionKeyValueInRoot(g,f.name,h,f.initializer):m||i.onSetUnknownOptionKeyValueInRoot(g,f.name,h,f.initializer));}}else n.push(e.createDiagnosticForNodeInSourceFile(t,f,e.Diagnostics.Property_assignment_expected));}return _}function s(e,t){for(var n=[],r=0,a=e;r<a.length;r++){var i=a[r];n.push(c(i,t));}return n}function c(r,i){function c(a){a&&n.push(e.createDiagnosticForNodeInSourceFile(t,r,e.Diagnostics.Compiler_option_0_requires_a_value_of_type_1,i.name,m(i)));}switch(r.kind){case 101:return c(i&&\"boolean\"!==i.type),!0;case 86:return c(i&&\"boolean\"!==i.type),!1;case 95:return c(!!i),null;case 9:u(r)||n.push(e.createDiagnosticForNodeInSourceFile(t,r,e.Diagnostics.String_literal_with_double_quotes_expected)),c(i&&\"string\"==typeof i.type&&\"string\"!==i.type);var l=r.text;if(i&&\"string\"!=typeof i.type){var _=i;_.type.has(l)||n.push(a(_,function(n,a,i){return e.createDiagnosticForNodeInSourceFile(t,r,n,a,i)}));}return l;case 8:return c(i&&\"number\"!==i.type),Number(r.text);case 178:c(i&&\"object\"!==i.type);var d=r;if(i){var p=i;return o(d,p.elementOptions,p.extraKeyDiagnosticMessage,p.name)}return o(d,void 0,void 0,void 0);case 177:return c(i&&\"list\"!==i.type),s(r.elements,i&&i.element)}i?c(!0):n.push(e.createDiagnosticForNodeInSourceFile(t,r,e.Diagnostics.Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_literal));}function u(n){return 9===n.kind&&34===e.getSourceTextOfNodeFromSourceFile(t,n).charCodeAt(0)}return t.jsonObject?o(t.jsonObject,r,void 0,void 0):{}}function m(e){return\"list\"===e.type?\"Array\":\"string\"==typeof e.type?e.type:\"string\"}function y(t,n){if(t)return\"list\"===t.type?e.isArray(n):typeof n===(\"string\"==typeof t.type?t.type:\"string\")}function h(t,r,a){function i(e){return\"string\"===e.type||\"number\"===e.type||\"boolean\"===e.type?void 0:\"list\"===e.type?i(e.element):e.type}function o(t,n){return e.forEachEntry(n,function(e,n){if(e===t)return n})}function s(t){switch(t.type){case\"number\":return 1;case\"boolean\":return!0;case\"string\":return t.isFilePath?\"./\":\"\";case\"list\":return[];case\"object\":return{};default:return e.arrayFrom(t.type.keys())[0]}}function c(e){return Array(e+1).join(\" \")}var u={compilerOptions:function(t){var r={},a=n().optionNameMap;for(var s in t)if(e.hasProperty(t,s)){if(a.has(s)&&a.get(s).category===e.Diagnostics.Command_line_Options)continue;var c=t[s],u=a.get(s.toLowerCase());if(u){var l=i(u);if(l)if(\"list\"===u.type){for(var _=[],d=0,p=c;d<p.length;d++){var f=p[d];_.push(o(f,l));}r[s]=_;}else r[s]=o(c,l);else r[s]=c;}}return r}(e.extend(t,e.defaultInitCompilerOptions))};return r&&r.length&&(u.files=r),function(){var t=e.reduceLeft(e.filter(e.optionDeclarations,function(t){return t.category!==e.Diagnostics.Command_line_Options&&t.category!==e.Diagnostics.Advanced_Options}),function(t,n){if(n.category){var r=e.getLocaleSpecificMessage(n.category);(t[r]||(t[r]=[])).push(n);}return t},{}),n=0,r=0,i=[],o=[],l=e.getOwnKeys(u.compilerOptions).length;for(var _ in t){0!==i.length&&(i.push(\"\"),o.push(\"\")),i.push(\"/* \"+_+\" */\"),o.push(\"\");for(var d=0,p=t[_];d<p.length;d++){var f=p[d],g=void 0;g=e.hasProperty(u.compilerOptions,f.name)?'\"'+f.name+'\": '+JSON.stringify(u.compilerOptions[f.name])+((r+=1)===l?\"\":\",\"):'// \"'+f.name+'\": '+JSON.stringify(s(f))+\",\",i.push(g),o.push(\"/* \"+(f.description&&e.getLocaleSpecificMessage(f.description)||f.name)+\" */\"),n=Math.max(g.length,n);}}var m=c(2),y=[];y.push(\"{\"),y.push(m+'\"compilerOptions\": {');for(v=0;v<i.length;v++){var g=i[v],h=o[v];y.push(g&&\"\"+m+m+g+(h&&c(n-g.length+2)+h));}if(u.files&&u.files.length){y.push(m+\"},\"),y.push(m+'\"files\": [');for(var v=0;v<u.files.length;v++)y.push(\"\"+m+m+JSON.stringify(u.files[v])+(v===u.files.length-1?\"\":\",\"));y.push(m+\"]\");}else y.push(m+\"}\");return y.push(\"}\"),y.join(a)}()}function v(e,t,n,r,a,i,o){return k(e,void 0,t,n,r,a,i,o)}function b(e,t,n,r,a,i,o){return k(void 0,e,t,n,r,a,i,o)}function x(e,t){t&&Object.defineProperty(e,\"configFile\",{enumerable:!1,writable:!1,value:t});}function k(t,n,r,a,i,o,s,c){function u(t,r,a){n||l.push(e.createCompilerDiagnostic(t,r,a));}void 0===i&&(i={}),void 0===s&&(s=[]),void 0===c&&(c=[]),e.Debug.assert(void 0===t&&void 0!==n||void 0!==t&&void 0===n);var l=[],_=T(t,n,r,a,o,s,l),d=_.raw,p=e.extend(i,_.options||{});p.configFilePath=o,x(p,n);var f=function(){var t;e.hasProperty(d,\"files\")&&(e.isArray(d.files)?0===(t=d.files).length&&u(e.Diagnostics.The_files_list_in_config_file_0_is_empty,o||\"tsconfig.json\"):u(e.Diagnostics.Compiler_option_0_requires_a_value_of_type_1,\"files\",\"Array\"));var i;e.hasProperty(d,\"include\")&&(e.isArray(d.include)?i=d.include:u(e.Diagnostics.Compiler_option_0_requires_a_value_of_type_1,\"include\",\"Array\"));var _;if(e.hasProperty(d,\"exclude\"))e.isArray(d.exclude)?_=d.exclude:u(e.Diagnostics.Compiler_option_0_requires_a_value_of_type_1,\"exclude\",\"Array\");else{_=i?[]:[\"node_modules\",\"bower_components\",\"jspm_packages\"];var f=d.compilerOptions&&d.compilerOptions.outDir;f&&_.push(f);}void 0===t&&void 0===i&&(i=[\"**/*\"]);var g=U(t,i,_,a,p,r,l,c,n);return 0!==g.fileNames.length||e.hasProperty(d,\"files\")||0!==s.length||l.push(e.createCompilerDiagnostic(e.Diagnostics.No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2,o||\"tsconfig.json\",JSON.stringify(i||[]),JSON.stringify(_||[]))),g}(),g=f.fileNames,m=f.wildcardDirectories;return{options:p,fileNames:g,typeAcquisition:_.typeAcquisition||I(),raw:d,errors:l,wildcardDirectories:m,compileOnSave:!!d.compileOnSave}}function S(e){return!!e.options}function T(t,n,r,a,i,o,s){a=e.normalizeSlashes(a);var c=e.createGetCanonicalFileName(r.useCaseSensitiveFileNames),u=e.toPath(i||\"\",a,c);if(o.indexOf(u)>=0)return s.push(e.createCompilerDiagnostic(e.Diagnostics.Circularity_detected_while_resolving_configuration_Colon_0,o.concat([u]).join(\" -> \"))),{raw:t||f(n,s)};var l=t?C(t,r,a,c,i,s):D(n,r,a,c,i,s);if(l.extendedConfigPath){o=o.concat([u]);var _=N(n,l.extendedConfigPath,r,a,c,o,s);if(_&&S(_)){var d=_.raw,p=l.raw,g=function(e){var t=p[e]||d[e];t&&(p[e]=t);};g(\"include\"),g(\"exclude\"),g(\"files\"),void 0===p.compileOnSave&&(p.compileOnSave=d.compileOnSave),l.options=e.assign({},_.options,l.options);}}return l}function C(t,n,r,a,i,o){e.hasProperty(t,\"excludes\")&&o.push(e.createCompilerDiagnostic(e.Diagnostics.Unknown_option_excludes_Did_you_mean_exclude));var s=F(t.compilerOptions,r,o,i),c=M(t.typeAcquisition||t.typingOptions,r,o,i);t.compileOnSave=A(t,r,o);var u;return t.extends&&(\"string\"!=typeof t.extends?o.push(e.createCompilerDiagnostic(e.Diagnostics.Compiler_option_0_requires_a_value_of_type_1,\"extends\",\"string\")):u=E(t.extends,n,r,a,o,e.createCompilerDiagnostic)),{raw:t,options:s,typeAcquisition:c,extendedConfigPath:u}}function D(t,n,r,a,i,o){var s,c,u,l=O(i),_={onSetValidOptionKeyValueInParent:function(t,n,a){e.Debug.assert(\"compilerOptions\"===t||\"typeAcquisition\"===t||\"typingOptions\"===t),(\"compilerOptions\"===t?l:\"typeAcquisition\"===t?s||(s=I(i)):c||(c=I(i)))[n.name]=B(n,r,a);},onSetValidOptionKeyValueInRoot:function(s,c,l,_){switch(s){case\"extends\":return void(u=E(l,n,r,a,o,function(n,r){return e.createDiagnosticForNodeInSourceFile(t,_,n,r)}));case\"files\":return void(0===l.length&&o.push(e.createDiagnosticForNodeInSourceFile(t,_,e.Diagnostics.The_files_list_in_config_file_0_is_empty,i||\"tsconfig.json\")))}},onSetUnknownOptionKeyValueInRoot:function(n,r,a,i){\"excludes\"===n&&o.push(e.createDiagnosticForNodeInSourceFile(t,r,e.Diagnostics.Unknown_option_excludes_Did_you_mean_exclude));}},d=g(t,o,p(),_);return s||(s=c?void 0!==c.enableAutoDiscovery?{enable:c.enableAutoDiscovery,include:c.include,exclude:c.exclude}:c:I(i)),{raw:d,options:l,typeAcquisition:s,extendedConfigPath:u}}function E(t,n,r,a,i,o){if(t=e.normalizeSlashes(t),e.isRootedDiskPath(t)||e.startsWith(t,\"./\")||e.startsWith(t,\"../\")){var s=e.toPath(t,r,a);if(n.fileExists(s)||e.endsWith(s,\".json\")||(s+=\".json\",n.fileExists(s)))return s;i.push(o(e.Diagnostics.File_0_does_not_exist,t));}else i.push(o(e.Diagnostics.A_path_in_an_extends_option_must_be_relative_or_rooted_but_0_is_not,t));}function N(t,n,r,a,i,o,s){var c=_(n,function(e){return r.readFile(e)});if(t&&(t.extendedSourceFiles||(t.extendedSourceFiles=[])).push(c.fileName),c.parseDiagnostics.length)s.push.apply(s,c.parseDiagnostics);else{var u=e.getDirectoryPath(n),l=T(void 0,c,r,u,e.getBaseFileName(n),o,s);if(t&&(m=t.extendedSourceFiles).push.apply(m,c.extendedSourceFiles),S(l)){var d=e.convertToRelativePath(u,a,i),p=function(t){return e.isRootedDiskPath(t)?t:e.combinePaths(d,t)},f=function(t){g[t]&&(g[t]=e.map(g[t],p));},g=l.raw;f(\"include\"),f(\"exclude\"),f(\"files\");}return l;var m;}}function A(t,n,r){if(e.hasProperty(t,e.compileOnSaveCommandLineOption.name)){var a=L(e.compileOnSaveCommandLineOption,t.compileOnSave,n,r);return!(\"boolean\"!=typeof a||!a)&&a}}function w(e,t,n){var r=[];return{options:F(e,t,r,n),errors:r}}function P(e,t,n){var r=[];return{options:M(e,t,r,n),errors:r}}function O(t){return\"jsconfig.json\"===e.getBaseFileName(t)?{allowJs:!0,maxNodeModuleJsDepth:2,allowSyntheticDefaultImports:!0,skipLibCheck:!0}:{}}function F(t,n,r,a){var i=O(a);return R(e.optionDeclarations,t,n,i,e.Diagnostics.Unknown_compiler_option_0,r),i}function I(t){return{enable:\"jsconfig.json\"===e.getBaseFileName(t),include:[],exclude:[]}}function M(n,r,a,i){var o=I(i),s=t(n);return R(e.typeAcquisitionDeclarations,s,r,o,e.Diagnostics.Unknown_type_acquisition_option_0,a),o}function R(t,n,r,a,i,o){if(n){var s=d(t);for(var c in n){var u=s.get(c);u?a[u.name]=L(u,n[c],r,o):o.push(e.createCompilerDiagnostic(i,c));}}}function L(t,n,r,a){if(y(t,n)){var i=t.type;return\"list\"===i&&e.isArray(n)?J(t,n,r,a):\"string\"!=typeof i?j(t,n,a):K(t,r,n)}a.push(e.createCompilerDiagnostic(e.Diagnostics.Compiler_option_0_requires_a_value_of_type_1,t.name,m(t)));}function B(t,n,r){if(\"list\"===t.type){var a=t;return a.element.isFilePath||\"string\"!=typeof a.element.type?e.filter(e.map(r,function(e){return B(a.element,n,e)}),function(e){return!!e}):r}return\"string\"!=typeof t.type?t.type.get(r):K(t,n,r)}function K(t,n,r){return t.isFilePath&&\"\"===(r=e.normalizePath(e.combinePaths(n,r)))&&(r=\".\"),r}function j(e,t,n){var a=t.toLowerCase(),i=e.type.get(a);if(void 0!==i)return i;n.push(r(e));}function J(t,n,r,a){return e.filter(e.map(n,function(e){return L(t.element,e,r,a)}),function(e){return!!e})}function z(e){return\"function\"==typeof e.trim?e.trim():e.replace(/^[\\s]+|[\\s]+$/g,\"\")}function U(t,n,r,a,i,o,s,c,u){a=e.normalizePath(a);var l=o.useCaseSensitiveFileNames?G:X,_=e.createMap(),d=e.createMap();n&&(n=q(n,s,!1,u,\"include\")),r&&(r=q(r,s,!0,u,\"exclude\"));var p=V(n,r,a,o.useCaseSensitiveFileNames),f=e.getSupportedExtensions(i,c);if(t)for(var g=0,m=t;g<m.length;g++){var y=m[g],h=e.combinePaths(a,y);_.set(l(h),h);}if(n&&n.length>0)for(var v=0,b=o.readDirectory(a,f,r,n);v<b.length;v++)if(!W(h=b[v],_,d,f,l)){H(h,d,f,l);var x=l(h);_.has(x)||d.has(x)||d.set(x,h);}var k=e.arrayFrom(_.values()),S=e.arrayFrom(d.values());return{fileNames:k.concat(S),wildcardDirectories:p}}function q(t,n,r,a,i){function o(t,n){if(a&&a.jsonObject)for(var r=0,o=e.getPropertyAssignment(a.jsonObject,i);r<o.length;r++){var s=o[r];if(e.isArrayLiteralExpression(s.initializer))for(var c=0,u=s.initializer.elements;c<u.length;c++){var l=u[c];if(9===l.kind&&l.text===n)return e.createDiagnosticForNodeInSourceFile(a,l,t,n)}}return e.createCompilerDiagnostic(t,n)}for(var s=[],c=0,u=t;c<u.length;c++){var l=u[c];!r&&te.test(l)?n.push(o(e.Diagnostics.File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0,l)):ne.test(l)?n.push(o(e.Diagnostics.File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0,l)):re.test(l)?n.push(o(e.Diagnostics.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0,l)):s.push(l);}return s}function V(t,n,r,a){var i=e.getRegularExpressionForWildcard(n,r,\"exclude\"),o=i&&new RegExp(i,a?\"\":\"i\"),s={};if(void 0!==t){for(var c=[],u=0,l=t;u<l.length;u++){var _=l[u],d=e.normalizePath(e.combinePaths(r,_));if(!o||!o.test(d)){var p=$(d,a);if(p){var f=p.key,g=p.flags,m=s[f];(void 0===m||m<g)&&(s[f]=g,1===g&&c.push(f));}}}for(var f in s)if(e.hasProperty(s,f))for(var y=0,h=c;y<h.length;y++){var v=h[y];f!==v&&e.containsPath(v,f,r,!a)&&delete s[f];}}return s}function $(t,n){var r=ie.exec(t);return r?{key:n?r[0]:r[0].toLowerCase(),flags:ae.test(t)?1:0}:e.isImplicitGlob(t)?{key:t,flags:1}:void 0}function W(t,n,r,a,i){for(var o=e.getExtensionPriority(t,a),s=e.adjustExtensionPriority(o,a),c=0;c<s;c++){var u=a[c],l=i(e.changeExtension(t,u));if(n.has(l)||r.has(l))return!0}return!1}function H(t,n,r,a){for(var i=e.getExtensionPriority(t,r),o=e.getNextLowestExtensionPriority(i,r);o<r.length;o++){var s=r[o],c=a(e.changeExtension(t,s));n.delete(c);}}function G(e){return e}function X(e){return e.toLowerCase()}function Y(e){var t={};for(var n in e)if(e.hasOwnProperty(n)){var r=c(n);void 0!==r&&(t[n]=Q(e[n],r));}return t}function Q(t,n){switch(n.type){case\"object\":case\"string\":return\"\";case\"number\":return\"number\"==typeof t?t:\"\";case\"boolean\":return\"boolean\"==typeof t?t:\"\";case\"list\":var r=n.element;return e.isArray(t)?t.map(function(e){return Q(e,r)}):\"\";default:return e.forEachEntry(n.type,function(e,n){if(e===t)return n})}}e.compileOnSaveCommandLineOption={name:\"compileOnSave\",type:\"boolean\"},e.optionDeclarations=[{name:\"help\",shortName:\"h\",type:\"boolean\",showInSimplifiedHelpView:!0,category:e.Diagnostics.Command_line_Options,description:e.Diagnostics.Print_this_message},{name:\"help\",shortName:\"?\",type:\"boolean\"},{name:\"all\",type:\"boolean\",showInSimplifiedHelpView:!0,category:e.Diagnostics.Command_line_Options,description:e.Diagnostics.Show_all_compiler_options},{name:\"version\",shortName:\"v\",type:\"boolean\",showInSimplifiedHelpView:!0,category:e.Diagnostics.Command_line_Options,description:e.Diagnostics.Print_the_compiler_s_version},{name:\"init\",type:\"boolean\",showInSimplifiedHelpView:!0,category:e.Diagnostics.Command_line_Options,description:e.Diagnostics.Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file},{name:\"project\",shortName:\"p\",type:\"string\",isFilePath:!0,showInSimplifiedHelpView:!0,category:e.Diagnostics.Command_line_Options,paramType:e.Diagnostics.FILE_OR_DIRECTORY,description:e.Diagnostics.Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json},{name:\"pretty\",type:\"boolean\",showInSimplifiedHelpView:!0,category:e.Diagnostics.Command_line_Options,description:e.Diagnostics.Stylize_errors_and_messages_using_color_and_context_experimental},{name:\"watch\",shortName:\"w\",type:\"boolean\",showInSimplifiedHelpView:!0,category:e.Diagnostics.Command_line_Options,description:e.Diagnostics.Watch_input_files},{name:\"target\",shortName:\"t\",type:e.createMapFromTemplate({es3:0,es5:1,es6:2,es2015:2,es2016:3,es2017:4,esnext:5}),paramType:e.Diagnostics.VERSION,showInSimplifiedHelpView:!0,category:e.Diagnostics.Basic_Options,description:e.Diagnostics.Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_or_ESNEXT},{name:\"module\",shortName:\"m\",type:e.createMapFromTemplate({none:e.ModuleKind.None,commonjs:e.ModuleKind.CommonJS,amd:e.ModuleKind.AMD,system:e.ModuleKind.System,umd:e.ModuleKind.UMD,es6:e.ModuleKind.ES2015,es2015:e.ModuleKind.ES2015,esnext:e.ModuleKind.ESNext}),paramType:e.Diagnostics.KIND,showInSimplifiedHelpView:!0,category:e.Diagnostics.Basic_Options,description:e.Diagnostics.Specify_module_code_generation_Colon_commonjs_amd_system_umd_es2015_or_ESNext},{name:\"lib\",type:\"list\",element:{name:\"lib\",type:e.createMapFromTemplate({es5:\"lib.es5.d.ts\",es6:\"lib.es2015.d.ts\",es2015:\"lib.es2015.d.ts\",es7:\"lib.es2016.d.ts\",es2016:\"lib.es2016.d.ts\",es2017:\"lib.es2017.d.ts\",esnext:\"lib.esnext.d.ts\",dom:\"lib.dom.d.ts\",\"dom.iterable\":\"lib.dom.iterable.d.ts\",webworker:\"lib.webworker.d.ts\",scripthost:\"lib.scripthost.d.ts\",\"es2015.core\":\"lib.es2015.core.d.ts\",\"es2015.collection\":\"lib.es2015.collection.d.ts\",\"es2015.generator\":\"lib.es2015.generator.d.ts\",\"es2015.iterable\":\"lib.es2015.iterable.d.ts\",\"es2015.promise\":\"lib.es2015.promise.d.ts\",\"es2015.proxy\":\"lib.es2015.proxy.d.ts\",\"es2015.reflect\":\"lib.es2015.reflect.d.ts\",\"es2015.symbol\":\"lib.es2015.symbol.d.ts\",\"es2015.symbol.wellknown\":\"lib.es2015.symbol.wellknown.d.ts\",\"es2016.array.include\":\"lib.es2016.array.include.d.ts\",\"es2017.object\":\"lib.es2017.object.d.ts\",\"es2017.sharedmemory\":\"lib.es2017.sharedmemory.d.ts\",\"es2017.string\":\"lib.es2017.string.d.ts\",\"es2017.intl\":\"lib.es2017.intl.d.ts\",\"esnext.asynciterable\":\"lib.esnext.asynciterable.d.ts\"})},showInSimplifiedHelpView:!0,category:e.Diagnostics.Basic_Options,description:e.Diagnostics.Specify_library_files_to_be_included_in_the_compilation_Colon},{name:\"allowJs\",type:\"boolean\",showInSimplifiedHelpView:!0,category:e.Diagnostics.Basic_Options,description:e.Diagnostics.Allow_javascript_files_to_be_compiled},{name:\"checkJs\",type:\"boolean\",category:e.Diagnostics.Basic_Options,description:e.Diagnostics.Report_errors_in_js_files},{name:\"jsx\",type:e.createMapFromTemplate({preserve:1,\"react-native\":3,react:2}),paramType:e.Diagnostics.KIND,showInSimplifiedHelpView:!0,category:e.Diagnostics.Basic_Options,description:e.Diagnostics.Specify_JSX_code_generation_Colon_preserve_react_native_or_react},{name:\"declaration\",shortName:\"d\",type:\"boolean\",showInSimplifiedHelpView:!0,category:e.Diagnostics.Basic_Options,description:e.Diagnostics.Generates_corresponding_d_ts_file},{name:\"sourceMap\",type:\"boolean\",showInSimplifiedHelpView:!0,category:e.Diagnostics.Basic_Options,description:e.Diagnostics.Generates_corresponding_map_file},{name:\"outFile\",type:\"string\",isFilePath:!0,paramType:e.Diagnostics.FILE,showInSimplifiedHelpView:!0,category:e.Diagnostics.Basic_Options,description:e.Diagnostics.Concatenate_and_emit_output_to_single_file},{name:\"outDir\",type:\"string\",isFilePath:!0,paramType:e.Diagnostics.DIRECTORY,showInSimplifiedHelpView:!0,category:e.Diagnostics.Basic_Options,description:e.Diagnostics.Redirect_output_structure_to_the_directory},{name:\"rootDir\",type:\"string\",isFilePath:!0,paramType:e.Diagnostics.LOCATION,category:e.Diagnostics.Basic_Options,description:e.Diagnostics.Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir},{name:\"removeComments\",type:\"boolean\",showInSimplifiedHelpView:!0,category:e.Diagnostics.Basic_Options,description:e.Diagnostics.Do_not_emit_comments_to_output},{name:\"noEmit\",type:\"boolean\",showInSimplifiedHelpView:!0,category:e.Diagnostics.Basic_Options,description:e.Diagnostics.Do_not_emit_outputs},{name:\"importHelpers\",type:\"boolean\",category:e.Diagnostics.Basic_Options,description:e.Diagnostics.Import_emit_helpers_from_tslib},{name:\"downlevelIteration\",type:\"boolean\",category:e.Diagnostics.Basic_Options,description:e.Diagnostics.Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3},{name:\"isolatedModules\",type:\"boolean\",category:e.Diagnostics.Basic_Options,description:e.Diagnostics.Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule},{name:\"strict\",type:\"boolean\",showInSimplifiedHelpView:!0,category:e.Diagnostics.Strict_Type_Checking_Options,description:e.Diagnostics.Enable_all_strict_type_checking_options},{name:\"noImplicitAny\",type:\"boolean\",showInSimplifiedHelpView:!0,category:e.Diagnostics.Strict_Type_Checking_Options,description:e.Diagnostics.Raise_error_on_expressions_and_declarations_with_an_implied_any_type},{name:\"strictNullChecks\",type:\"boolean\",showInSimplifiedHelpView:!0,category:e.Diagnostics.Strict_Type_Checking_Options,description:e.Diagnostics.Enable_strict_null_checks},{name:\"noImplicitThis\",type:\"boolean\",showInSimplifiedHelpView:!0,category:e.Diagnostics.Strict_Type_Checking_Options,description:e.Diagnostics.Raise_error_on_this_expressions_with_an_implied_any_type},{name:\"alwaysStrict\",type:\"boolean\",showInSimplifiedHelpView:!0,category:e.Diagnostics.Strict_Type_Checking_Options,description:e.Diagnostics.Parse_in_strict_mode_and_emit_use_strict_for_each_source_file},{name:\"noUnusedLocals\",type:\"boolean\",showInSimplifiedHelpView:!0,category:e.Diagnostics.Additional_Checks,description:e.Diagnostics.Report_errors_on_unused_locals},{name:\"noUnusedParameters\",type:\"boolean\",showInSimplifiedHelpView:!0,category:e.Diagnostics.Additional_Checks,description:e.Diagnostics.Report_errors_on_unused_parameters},{name:\"noImplicitReturns\",type:\"boolean\",showInSimplifiedHelpView:!0,category:e.Diagnostics.Additional_Checks,description:e.Diagnostics.Report_error_when_not_all_code_paths_in_function_return_a_value},{name:\"noFallthroughCasesInSwitch\",type:\"boolean\",showInSimplifiedHelpView:!0,category:e.Diagnostics.Additional_Checks,description:e.Diagnostics.Report_errors_for_fallthrough_cases_in_switch_statement},{name:\"moduleResolution\",type:e.createMapFromTemplate({node:e.ModuleResolutionKind.NodeJs,classic:e.ModuleResolutionKind.Classic}),paramType:e.Diagnostics.STRATEGY,category:e.Diagnostics.Module_Resolution_Options,description:e.Diagnostics.Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6},{name:\"baseUrl\",type:\"string\",isFilePath:!0,category:e.Diagnostics.Module_Resolution_Options,description:e.Diagnostics.Base_directory_to_resolve_non_absolute_module_names},{name:\"paths\",type:\"object\",isTSConfigOnly:!0,category:e.Diagnostics.Module_Resolution_Options,description:e.Diagnostics.A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl},{name:\"rootDirs\",type:\"list\",isTSConfigOnly:!0,element:{name:\"rootDirs\",type:\"string\",isFilePath:!0},category:e.Diagnostics.Module_Resolution_Options,description:e.Diagnostics.List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime},{name:\"typeRoots\",type:\"list\",element:{name:\"typeRoots\",type:\"string\",isFilePath:!0},category:e.Diagnostics.Module_Resolution_Options,description:e.Diagnostics.List_of_folders_to_include_type_definitions_from},{name:\"types\",type:\"list\",element:{name:\"types\",type:\"string\"},showInSimplifiedHelpView:!0,category:e.Diagnostics.Module_Resolution_Options,description:e.Diagnostics.Type_declaration_files_to_be_included_in_compilation},{name:\"allowSyntheticDefaultImports\",type:\"boolean\",category:e.Diagnostics.Module_Resolution_Options,description:e.Diagnostics.Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typechecking},{name:\"sourceRoot\",type:\"string\",isFilePath:!0,paramType:e.Diagnostics.LOCATION,category:e.Diagnostics.Source_Map_Options,description:e.Diagnostics.Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations},{name:\"mapRoot\",type:\"string\",isFilePath:!0,paramType:e.Diagnostics.LOCATION,category:e.Diagnostics.Source_Map_Options,description:e.Diagnostics.Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations},{name:\"inlineSourceMap\",type:\"boolean\",category:e.Diagnostics.Source_Map_Options,description:e.Diagnostics.Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file},{name:\"inlineSources\",type:\"boolean\",category:e.Diagnostics.Source_Map_Options,description:e.Diagnostics.Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap_to_be_set},{name:\"experimentalDecorators\",type:\"boolean\",category:e.Diagnostics.Experimental_Options,description:e.Diagnostics.Enables_experimental_support_for_ES7_decorators},{name:\"emitDecoratorMetadata\",type:\"boolean\",category:e.Diagnostics.Experimental_Options,description:e.Diagnostics.Enables_experimental_support_for_emitting_type_metadata_for_decorators},{name:\"jsxFactory\",type:\"string\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h},{name:\"diagnostics\",type:\"boolean\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Show_diagnostic_information},{name:\"extendedDiagnostics\",type:\"boolean\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Show_verbose_diagnostic_information},{name:\"traceResolution\",type:\"boolean\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Enable_tracing_of_the_name_resolution_process},{name:\"listFiles\",type:\"boolean\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Print_names_of_files_part_of_the_compilation},{name:\"listEmittedFiles\",type:\"boolean\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Print_names_of_generated_files_part_of_the_compilation},{name:\"out\",type:\"string\",isFilePath:!1,category:e.Diagnostics.Advanced_Options,paramType:e.Diagnostics.FILE,description:e.Diagnostics.Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file},{name:\"reactNamespace\",type:\"string\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react_JSX_emit},{name:\"skipDefaultLibCheck\",type:\"boolean\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files},{name:\"charset\",type:\"string\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.The_character_set_of_the_input_files},{name:\"emitBOM\",type:\"boolean\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files},{name:\"locale\",type:\"string\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.The_locale_used_when_displaying_messages_to_the_user_e_g_en_us},{name:\"newLine\",type:e.createMapFromTemplate({crlf:0,lf:1}),paramType:e.Diagnostics.NEWLINE,category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix},{name:\"noErrorTruncation\",type:\"boolean\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Do_not_truncate_error_messages},{name:\"noLib\",type:\"boolean\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Do_not_include_the_default_library_file_lib_d_ts},{name:\"noResolve\",type:\"boolean\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files},{name:\"stripInternal\",type:\"boolean\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Do_not_emit_declarations_for_code_that_has_an_internal_annotation},{name:\"disableSizeLimit\",type:\"boolean\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Disable_size_limitations_on_JavaScript_projects},{name:\"noImplicitUseStrict\",type:\"boolean\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Do_not_emit_use_strict_directives_in_module_output},{name:\"noEmitHelpers\",type:\"boolean\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Do_not_generate_custom_helper_functions_like_extends_in_compiled_output},{name:\"noEmitOnError\",type:\"boolean\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Do_not_emit_outputs_if_any_errors_were_reported},{name:\"preserveConstEnums\",type:\"boolean\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Do_not_erase_const_enum_declarations_in_generated_code},{name:\"declarationDir\",type:\"string\",isFilePath:!0,paramType:e.Diagnostics.DIRECTORY,category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Output_directory_for_generated_declaration_files},{name:\"skipLibCheck\",type:\"boolean\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Skip_type_checking_of_declaration_files},{name:\"allowUnusedLabels\",type:\"boolean\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Do_not_report_errors_on_unused_labels},{name:\"allowUnreachableCode\",type:\"boolean\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Do_not_report_errors_on_unreachable_code},{name:\"suppressExcessPropertyErrors\",type:\"boolean\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Suppress_excess_property_checks_for_object_literals},{name:\"suppressImplicitAnyIndexErrors\",type:\"boolean\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures},{name:\"forceConsistentCasingInFileNames\",type:\"boolean\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Disallow_inconsistently_cased_references_to_the_same_file},{name:\"maxNodeModuleJsDepth\",type:\"number\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files},{name:\"noStrictGenericChecks\",type:\"boolean\",category:e.Diagnostics.Advanced_Options,description:e.Diagnostics.Disable_strict_checking_of_generic_signatures_in_function_types},{name:\"plugins\",type:\"list\",isTSConfigOnly:!0,element:{name:\"plugin\",type:\"object\"},description:e.Diagnostics.List_of_language_service_plugins}],e.typeAcquisitionDeclarations=[{name:\"enableAutoDiscovery\",type:\"boolean\"},{name:\"enable\",type:\"boolean\"},{name:\"include\",type:\"list\",element:{name:\"include\",type:\"string\"}},{name:\"exclude\",type:\"list\",element:{name:\"exclude\",type:\"string\"}}],e.defaultInitCompilerOptions={module:e.ModuleKind.CommonJS,target:1,strict:!0};var Z;e.convertEnableAutoDiscoveryToEnable=t,e.createCompilerDiagnosticForInvalidCustomType=r,e.parseCustomTypeOption=i,e.parseListTypeOption=o,e.parseCommandLine=s,e.readConfigFile=u,e.parseConfigFileTextToJson=l,e.readJsonConfigFile=_;var ee;e.convertToObject=f,e.generateTSConfig=h,e.parseJsonConfigFileContent=v,e.parseJsonSourceFileConfigFileContent=b,e.setConfigFileInOptions=x,e.convertCompilerOptionsFromJson=w,e.convertTypeAcquisitionFromJson=P;var te=/(^|\\/)\\*\\*\\/?$/,ne=/(^|\\/)\\*\\*\\/(.*\\/)?\\*\\*($|\\/)/,re=/(^|\\/)\\*\\*\\/(.*\\/)?\\.\\.($|\\/)/,ae=/\\/[^/]*?[*?][^/]*\\//,ie=/^[^*?]*(?=\\/[^/]*[*?])/;e.convertCompilerOptionsForTelemetry=Y;}(r||(r={}));!function(e){!function(e){function t(e){return new n(e)}var n=function(){function e(e){this.text=e;}return e.prototype.getText=function(e,t){return 0===e&&t===this.text.length?this.text:this.text.substring(e,t)},e.prototype.getLength=function(){return this.text.length},e.prototype.getChangeRange=function(){},e}();e.fromString=t;}(e.ScriptSnapshot||(e.ScriptSnapshot={}));var t=function(){function e(){}return e}();e.TextChange=t;!function(e){e.none=\"none\",e.definition=\"definition\",e.reference=\"reference\",e.writtenReference=\"writtenReference\";}(e.HighlightSpanKind||(e.HighlightSpanKind={}));!function(e){e[e.None=0]=\"None\",e[e.Block=1]=\"Block\",e[e.Smart=2]=\"Smart\";}(e.IndentStyle||(e.IndentStyle={}));!function(e){e[e.aliasName=0]=\"aliasName\",e[e.className=1]=\"className\",e[e.enumName=2]=\"enumName\",e[e.fieldName=3]=\"fieldName\",e[e.interfaceName=4]=\"interfaceName\",e[e.keyword=5]=\"keyword\",e[e.lineBreak=6]=\"lineBreak\",e[e.numericLiteral=7]=\"numericLiteral\",e[e.stringLiteral=8]=\"stringLiteral\",e[e.localName=9]=\"localName\",e[e.methodName=10]=\"methodName\",e[e.moduleName=11]=\"moduleName\",e[e.operator=12]=\"operator\",e[e.parameterName=13]=\"parameterName\",e[e.propertyName=14]=\"propertyName\",e[e.punctuation=15]=\"punctuation\",e[e.space=16]=\"space\",e[e.text=17]=\"text\",e[e.typeParameterName=18]=\"typeParameterName\",e[e.enumMemberName=19]=\"enumMemberName\",e[e.functionName=20]=\"functionName\",e[e.regularExpressionLiteral=21]=\"regularExpressionLiteral\";}(e.SymbolDisplayPartKind||(e.SymbolDisplayPartKind={}));!function(e){e[e.JavaScript=0]=\"JavaScript\",e[e.SourceMap=1]=\"SourceMap\",e[e.Declaration=2]=\"Declaration\";}(e.OutputFileType||(e.OutputFileType={}));!function(e){e[e.None=0]=\"None\",e[e.InMultiLineCommentTrivia=1]=\"InMultiLineCommentTrivia\",e[e.InSingleQuoteStringLiteral=2]=\"InSingleQuoteStringLiteral\",e[e.InDoubleQuoteStringLiteral=3]=\"InDoubleQuoteStringLiteral\",e[e.InTemplateHeadOrNoSubstitutionTemplate=4]=\"InTemplateHeadOrNoSubstitutionTemplate\",e[e.InTemplateMiddleOrTail=5]=\"InTemplateMiddleOrTail\",e[e.InTemplateSubstitutionPosition=6]=\"InTemplateSubstitutionPosition\";}(e.EndOfLineState||(e.EndOfLineState={}));!function(e){e[e.Punctuation=0]=\"Punctuation\",e[e.Keyword=1]=\"Keyword\",e[e.Operator=2]=\"Operator\",e[e.Comment=3]=\"Comment\",e[e.Whitespace=4]=\"Whitespace\",e[e.Identifier=5]=\"Identifier\",e[e.NumberLiteral=6]=\"NumberLiteral\",e[e.StringLiteral=7]=\"StringLiteral\",e[e.RegExpLiteral=8]=\"RegExpLiteral\";}(e.TokenClass||(e.TokenClass={}));!function(e){e.unknown=\"\",e.warning=\"warning\",e.keyword=\"keyword\",e.scriptElement=\"script\",e.moduleElement=\"module\",e.classElement=\"class\",e.localClassElement=\"local class\",e.interfaceElement=\"interface\",e.typeElement=\"type\",e.enumElement=\"enum\",e.enumMemberElement=\"enum member\",e.variableElement=\"var\",e.localVariableElement=\"local var\",e.functionElement=\"function\",e.localFunctionElement=\"local function\",e.memberFunctionElement=\"method\",e.memberGetAccessorElement=\"getter\",e.memberSetAccessorElement=\"setter\",e.memberVariableElement=\"property\",e.constructorImplementationElement=\"constructor\",e.callSignatureElement=\"call\",e.indexSignatureElement=\"index\",e.constructSignatureElement=\"construct\",e.parameterElement=\"parameter\",e.typeParameterElement=\"type parameter\",e.primitiveType=\"primitive type\",e.label=\"label\",e.alias=\"alias\",e.constElement=\"const\",e.letElement=\"let\",e.directory=\"directory\",e.externalModuleName=\"external module name\",e.jsxAttribute=\"JSX attribute\";}(e.ScriptElementKind||(e.ScriptElementKind={}));!function(e){e.none=\"\",e.publicMemberModifier=\"public\",e.privateMemberModifier=\"private\",e.protectedMemberModifier=\"protected\",e.exportedModifier=\"export\",e.ambientModifier=\"declare\",e.staticModifier=\"static\",e.abstractModifier=\"abstract\";}(e.ScriptElementKindModifier||(e.ScriptElementKindModifier={}));!function(e){e.comment=\"comment\",e.identifier=\"identifier\",e.keyword=\"keyword\",e.numericLiteral=\"number\",e.operator=\"operator\",e.stringLiteral=\"string\",e.whiteSpace=\"whitespace\",e.text=\"text\",e.punctuation=\"punctuation\",e.className=\"class name\",e.enumName=\"enum name\",e.interfaceName=\"interface name\",e.moduleName=\"module name\",e.typeParameterName=\"type parameter name\",e.typeAliasName=\"type alias name\",e.parameterName=\"parameter name\",e.docCommentTagName=\"doc comment tag name\",e.jsxOpenTagName=\"jsx open tag name\",e.jsxCloseTagName=\"jsx close tag name\",e.jsxSelfClosingTagName=\"jsx self closing tag name\",e.jsxAttribute=\"jsx attribute\",e.jsxText=\"jsx text\",e.jsxAttributeStringLiteralValue=\"jsx attribute string literal value\";}(e.ClassificationTypeNames||(e.ClassificationTypeNames={}));!function(e){e[e.comment=1]=\"comment\",e[e.identifier=2]=\"identifier\",e[e.keyword=3]=\"keyword\",e[e.numericLiteral=4]=\"numericLiteral\",e[e.operator=5]=\"operator\",e[e.stringLiteral=6]=\"stringLiteral\",e[e.regularExpressionLiteral=7]=\"regularExpressionLiteral\",e[e.whiteSpace=8]=\"whiteSpace\",e[e.text=9]=\"text\",e[e.punctuation=10]=\"punctuation\",e[e.className=11]=\"className\",e[e.enumName=12]=\"enumName\",e[e.interfaceName=13]=\"interfaceName\",e[e.moduleName=14]=\"moduleName\",e[e.typeParameterName=15]=\"typeParameterName\",e[e.typeAliasName=16]=\"typeAliasName\",e[e.parameterName=17]=\"parameterName\",e[e.docCommentTagName=18]=\"docCommentTagName\",e[e.jsxOpenTagName=19]=\"jsxOpenTagName\",e[e.jsxCloseTagName=20]=\"jsxCloseTagName\",e[e.jsxSelfClosingTagName=21]=\"jsxSelfClosingTagName\",e[e.jsxAttribute=22]=\"jsxAttribute\",e[e.jsxText=23]=\"jsxText\",e[e.jsxAttributeStringLiteralValue=24]=\"jsxAttributeStringLiteralValue\";}(e.ClassificationType||(e.ClassificationType={}));}(r||(r={}));!function(e){function t(t){switch(t.kind){case 146:case 226:case 176:case 149:case 148:case 261:case 262:case 151:case 150:case 152:case 153:case 154:case 228:case 186:case 187:case 260:case 253:return 1;case 145:case 230:case 231:case 163:return 2;case 291:return void 0===t.name?3:2;case 264:case 229:return 3;case 233:return e.isAmbientModule(t)?5:1===e.getModuleInstanceState(t)?5:4;case 232:case 241:case 242:case 237:case 238:case 243:case 244:return 7;case 265:return 5}return 7}function n(n){return 265===n.kind?1:243===n.parent.kind?7:a(n)?r(n):e.isDeclarationName(n)?t(n.parent):c(n)?2:i(n)?4:e.isTypeParameterDeclaration(n.parent)?(e.Debug.assert(e.isJSDocTemplateTag(n.parent.parent)),2):1}function r(t){return e.Debug.assert(71===t.kind),143===t.parent.kind&&t.parent.right===t&&237===t.parent.parent.kind?7:4}function a(t){for(;143===t.parent.kind;)t=t.parent;return e.isInternalModuleImportEqualsDeclaration(t.parent)&&t.parent.moduleReference===t}function i(e){return o(e)||s(e)}function o(e){var t=e,n=!0;if(143===t.parent.kind){for(;t.parent&&143===t.parent.kind;)t=t.parent;n=t.right===e;}return 159===t.parent.kind&&!n}function s(e){var t=e,n=!0;if(179===t.parent.kind){for(;t.parent&&179===t.parent.kind;)t=t.parent;n=t.name===e;}if(!n&&201===t.parent.kind&&259===t.parent.parent.kind){var r=t.parent.parent.parent;return 229===r.kind&&108===t.parent.parent.token||230===r.kind&&85===t.parent.parent.token}return!1}function c(t){switch(e.isRightSideOfQualifiedNameOrPropertyAccess(t)&&(t=t.parent),t.kind){case 99:return!e.isPartOfExpression(t);case 169:return!0}switch(t.parent.kind){case 159:case 277:return!0;case 201:return!e.isExpressionWithTypeArgumentsInClassExtendsClause(t.parent)}return!1}function u(e){return _(e,181)}function l(e){return _(e,182)}function _(e,t){var n=d(e);return n&&n.parent&&n.parent.kind===t&&n.parent.expression===n}function d(e){return h(e)?e.parent:e}function p(e,t){for(;e;){if(222===e.kind&&e.label.text===t)return e.label;e=e.parent;}}function f(e){return 71===e.kind&&(218===e.parent.kind||217===e.parent.kind)&&e.parent.label===e}function g(e){return 71===e.kind&&222===e.parent.kind&&e.parent.label===e}function m(e){return g(e)||f(e)}function y(e){return 143===e.parent.kind&&e.parent.right===e}function h(e){return e&&e.parent&&179===e.parent.kind&&e.parent.name===e}function v(e){return 233===e.parent.kind&&e.parent.name===e}function b(t){return 71===t.kind&&e.isFunctionLike(t.parent)&&t.parent.name===t}function x(t){if(9===t.kind||8===t.kind)switch(t.parent.kind){case 149:case 148:case 261:case 264:case 151:case 150:case 153:case 154:case 233:return e.getNameOfDeclaration(t.parent)===t;case 180:return t.parent.argumentExpression===t;case 144:return!0}return!1}function k(t){return e.isExternalModuleImportEqualsDeclaration(t.parent.parent)&&e.getExternalModuleImportEqualsDeclarationExpression(t.parent.parent)===t}function S(e){for(;;){if(!(e=e.parent))return;switch(e.kind){case 265:case 151:case 150:case 228:case 186:case 153:case 154:case 229:case 230:case 232:case 233:return e}}}function T(t){function n(t){return e.isConst(t)?\"const\":e.isLet(t)?\"let\":\"var\"}switch(t.kind){case 265:return e.isExternalModule(t)?\"module\":\"script\";case 233:return\"module\";case 229:case 199:return\"class\";case 230:return\"interface\";case 231:return\"type\";case 232:return\"enum\";case 226:return n(t);case 176:return n(e.getRootDeclaration(t));case 187:case 228:case 186:return\"function\";case 153:return\"getter\";case 154:return\"setter\";case 151:case 150:return\"method\";case 149:case 148:return\"property\";case 157:return\"index\";case 156:return\"construct\";case 155:return\"call\";case 152:return\"constructor\";case 145:return\"type parameter\";case 264:return\"enum member\";case 146:return e.hasModifier(t,92)?\"property\":\"parameter\";case 237:case 242:case 239:case 246:case 240:return\"alias\";case 291:return\"type\";default:return\"\"}}function C(t){switch(t.kind){case 99:return!0;case 71:return e.identifierIsThisKeyword(t)&&146===t.parent.kind;default:return!1}}function D(t,n){return e.getLineStarts(n)[n.getLineAndCharacterOfPosition(t).line]}function E(e,t){return N(e.pos,e.end,t)}function N(e,t,n){return e<=n.pos&&t>=n.end}function A(e,t,n){return e.pos<=t&&e.end>=n}function w(e,t,n){return P(e.pos,e.end,t,n)}function P(e,t,n,r){return Math.max(e,n)<Math.min(t,r)}function O(e,t,n){return e.end>t||!F(e,n)}function F(t,n){if(e.nodeIsMissing(t))return!1;switch(t.kind){case 229:case 230:case 232:case 178:case 174:case 163:case 207:case 234:case 235:case 241:case 245:return I(t,18,n);case 260:return F(t.block,n);case 182:if(!t.arguments)return!0;case 181:case 185:case 168:return I(t,20,n);case 160:case 161:return F(t.type,n);case 152:case 153:case 154:case 228:case 186:case 151:case 150:case 156:case 155:case 187:return t.body?F(t.body,n):t.type?F(t.type,n):R(t,20,n);case 233:return t.body&&F(t.body,n);case 211:return t.elseStatement?F(t.elseStatement,n):F(t.thenStatement,n);case 210:return F(t.expression,n)||R(t,25);case 177:case 175:case 180:case 144:case 165:return I(t,22,n);case 157:return t.type?F(t.type,n):R(t,22,n);case 257:case 258:return!1;case 214:case 215:case 216:case 213:return F(t.statement,n);case 212:return L(t,106,n)?I(t,20,n):F(t.statement,n);case 162:return F(t.exprName,n);case 189:case 188:case 190:case 197:case 198:return F(t.expression,n);case 183:return F(t.template,n);case 196:return F(e.lastOrUndefined(t.templateSpans),n);case 205:return e.nodeIsPresent(t.literal);case 244:case 238:return e.nodeIsPresent(t.moduleSpecifier);case 192:return F(t.operand,n);case 194:return F(t.right,n);case 195:return F(t.whenFalse,n);default:return!0}}function I(t,n,r){var a=t.getChildren(r);if(a.length){var i=e.lastOrUndefined(a);if(i.kind===n)return!0;if(25===i.kind&&1!==a.length)return a[a.length-2].kind===n}return!1}function M(t){var n=B(t);if(n){var r=n.getChildren();return{listItemIndex:e.indexOf(r,t),list:n}}}function R(e,t,n){return!!L(e,t,n)}function L(t,n,r){return e.forEach(t.getChildren(r),function(e){return e.kind===n&&e})}function B(t){var n=e.forEach(t.parent.getChildren(),function(e){if(295===e.kind&&e.pos<=t.pos&&e.end>=t.end)return e});return e.Debug.assert(!n||e.contains(n.getChildren(),t)),n}function K(e,t,n){return J(e,t,n,function(e){return ne(e.kind)})}function j(e,t,n){return J(e,t,n,function(e){return re(e.kind)})}function J(e,t,n,r){return U(e,t,!1,r,!1,n)}function z(e,t,n,r){return U(e,t,!0,void 0,r,n)}function U(t,n,r,a,i,o){var s=t;e:for(;;){if(e.isToken(s))return s;for(var c=0,u=s.getChildren();c<u.length;c++){var l=u[c];if((o||!e.isJSDocNode(l))&&!((r?l.getFullStart():l.getStart(t,o))>n)){var _=l.getEnd();if(n<_||n===_&&(1===l.kind||i)){s=l;continue e}if(a&&_===n){var d=$(n,t,l);if(d&&a(d))return d}}}return s}}function q(t,n){var r=z(t,n,!1);return e.isToken(r)&&n>r.getStart(t)&&n<r.getEnd()?r:$(n,t)}function V(t,n){function r(n){if(e.isToken(n)&&n.pos===t.end)return n;for(var a=0,i=n.getChildren();a<i.length;a++){var o=i[a];if((o.pos<=t.pos&&o.end>t.end||o.pos===t.end)&&Z(o))return r(o)}}return r(n)}function $(t,n,r,a){function i(t){if(e.isToken(t))return t;var n=t.getChildren(),r=s(n,n.length);return r&&i(r)}function o(c){if(e.isToken(c))return c;for(var u=c.getChildren(),l=0;l<u.length;l++){var _=u[l];if(t<_.end&&(Z(_)||10===_.kind)){var d=_.getStart(n,a);return d>=t||10===_.kind&&d===_.end?(p=s(u,l))&&i(p):o(_)}}if(e.Debug.assert(void 0!==r||265===c.kind||e.isJSDocCommentContainingNode(c)),u.length){var p=s(u,u.length);return p&&i(p)}}function s(e,t){for(var n=t-1;n>=0;n--)if(Z(e[n]))return e[n]}return o(r||n)}function W(e,t){var n=$(t,e);if(n&&9===n.kind){var r=n.getStart(),a=n.getEnd();if(r<t&&t<a)return!0;if(t===a)return!!n.isUnterminated}return!1}function H(e,t){var n=z(e,t,!1);return!!n&&(10===n.kind||(27===n.kind&&10===n.parent.kind||(27===n.kind&&256===n.parent.kind||(!(!n||18!==n.kind||256!==n.parent.kind)||27===n.kind&&252===n.parent.kind))))}function G(t,n){var r=z(t,n,!1);return e.isTemplateLiteralKind(r.kind)&&n>r.getStart(t)}function X(t,n,r,a){function i(r){return e.forEach(r,function(e){return Y(e,n,t.text)&&(!a||a(e))})}return void 0===r&&(r=z(t,n,!1)),n<=r.getStart(t)&&(i(e.getLeadingCommentRanges(t.text,r.pos))||i(e.getTrailingCommentRanges(t.text,r.pos)))}function Y(e,t,n){var r=e.pos,a=e.end,i=e.kind;return r<t&&t<a||t===a&&(2===i||!(47===n.charCodeAt(a-1)&&42===n.charCodeAt(a-2)))}function Q(t,n){function r(e){var n=t.text;return n.length>=e.pos+3&&\"/\"===n[e.pos]&&\"*\"===n[e.pos+1]&&\"*\"===n[e.pos+2]}var a=z(t,n,!1),i=e.getLeadingCommentRanges(t.text,a.pos);return e.forEach(i,r)}function Z(e){return 0!==e.getWidth()}function ee(t){var n=e.getCombinedModifierFlags(t),r=[];return 8&n&&r.push(\"private\"),16&n&&r.push(\"protected\"),4&n&&r.push(\"public\"),32&n&&r.push(\"static\"),128&n&&r.push(\"abstract\"),1&n&&r.push(\"export\"),e.isInAmbientContext(t)&&r.push(\"declare\"),r.length>0?r.join(\",\"):\"\"}function te(t){return 159===t.kind||181===t.kind?t.typeArguments:e.isFunctionLike(t)||229===t.kind||230===t.kind?t.typeParameters:void 0}function ne(t){return 71===t||e.isKeyword(t)}function re(e){return 9===e||8===e||ne(e)}function ae(e){return 2===e||3===e}function ie(t){return!(9!==t&&12!==t&&!e.isTemplateLiteralKind(t))}function oe(e){return 17<=e&&e<=70}function se(t,n){return e.isTemplateLiteralKind(t.kind)&&t.getStart()<n&&n<t.getEnd()||!!t.isUnterminated&&n===t.getEnd()}function ce(e){switch(e){case 114:case 112:case 113:return!0}return!1}function ue(t){var n=e.clone(t);return e.setConfigFileInOptions(n,t&&t.configFile),n}function le(e,t){if(!e||!t||Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(\"object\"==typeof e[n]){if(!le(e[n],t[n]))return!1}else if(\"function\"!=typeof e[n]&&e[n]!==t[n])return!1;return!0}function _e(e){if(177===e.kind||178===e.kind){if(194===e.parent.kind&&e.parent.left===e&&58===e.parent.operatorToken.kind)return!0;if(216===e.parent.kind&&e.parent.initializer===e)return!0;if(_e(261===e.parent.kind?e.parent.parent:e.parent))return!0}return!1}function de(e){var t=e.charAt(e.length-1);return\"/\"===t||\"\\\\\"===t}function pe(e,t){return X(e,t,void 0,function(t){var n=e.text.substring(t.pos,t.end);return be.test(n)})}function fe(e,t){return X(e,t,void 0,function(t){var n=e.text.substring(t.pos,t.end);return!be.test(n)})}function ge(t,n){return e.createTextSpanFromBounds(t.getStart(n),t.getEnd())}function me(t){return e.createTextSpanFromBounds(t.pos,t.end)}function ye(e){switch(e){case 119:case 122:case 130:case 133:case 134:case 136:case 137:case 105:return!0;default:return!1}}function he(t){return e.Debug.assert(!!(1536&t.flags)),34===t.name.charCodeAt(0)}function ve(){var t=[];return function(n){var r=e.getNodeId(n);return!t[r]&&(t[r]=!0)}}e.scanner=e.createScanner(5,!0),e.emptyArray=[];!function(e){e[e.None=0]=\"None\",e[e.Value=1]=\"Value\",e[e.Type=2]=\"Type\",e[e.Namespace=4]=\"Namespace\",e[e.All=7]=\"All\";}(e.SemanticMeaning||(e.SemanticMeaning={})),e.getMeaningFromDeclaration=t,e.getMeaningFromLocation=n,e.isInRightSideOfInternalImportEqualsDeclaration=a,e.isCallExpressionTarget=u,e.isNewExpressionTarget=l,e.climbPastPropertyAccess=d,e.getTargetLabel=p,e.isJumpStatementTarget=f,e.isLabelName=m,e.isRightSideOfQualifiedName=y,e.isRightSideOfPropertyAccess=h,e.isNameOfModuleDeclaration=v,e.isNameOfFunctionDeclaration=b,e.isLiteralNameOfPropertyDeclarationOrIndexAccess=x,e.isExpressionOfExternalModuleImportEqualsDeclaration=k,e.getContainerNode=S,e.getNodeKind=T,e.isThis=C;var be=/^\\/\\/\\/\\s*</;e.getLineStartPositionForPosition=D,e.rangeContainsRange=E,e.startEndContainsRange=N,e.rangeContainsStartEnd=A,e.rangeOverlapsWithStartEnd=w,e.startEndOverlapsWithStartEnd=P,e.positionBelongsToNode=O,e.isCompletedNode=F,e.findListItemInfo=M,e.hasChildOfKind=R,e.findChildOfKind=L,e.findContainingList=B,e.getTouchingWord=K,e.getTouchingPropertyName=j,e.getTouchingToken=J,e.getTokenAtPosition=z,e.findTokenOnLeftOfPosition=q,e.findNextToken=V,e.findPrecedingToken=$,e.isInString=W,e.isInsideJsxElementOrAttribute=H,e.isInTemplateString=G,e.isInComment=X,e.hasDocComment=Q,e.getNodeModifiers=ee,e.getTypeArgumentOrTypeParameterList=te,e.isWord=ne,e.isComment=ae,e.isStringOrRegularExpressionOrTemplateLiteral=ie,e.isPunctuation=oe,e.isInsideTemplateLiteral=se,e.isAccessibilityModifier=ce,e.cloneCompilerOptions=ue,e.compareDataObjects=le,e.isArrayLiteralOrObjectLiteralDestructuringPattern=_e,e.hasTrailingDirectorySeparator=de,e.isInReferenceComment=pe,e.isInNonReferenceComment=fe,e.createTextSpanFromNode=ge,e.createTextSpanFromRange=me,e.isTypeKeyword=ye,e.isExternalModuleSymbol=he,e.nodeSeenTracker=ve;}(r||(r={})),function(e){function t(e){return e.declarations&&e.declarations.length>0&&146===e.declarations[0].kind}function n(n,a){return r(n,function(n){var r=n.flags;return 3&r?t(n)?e.SymbolDisplayPartKind.parameterName:e.SymbolDisplayPartKind.localName:4&r?e.SymbolDisplayPartKind.propertyName:32768&r?e.SymbolDisplayPartKind.propertyName:65536&r?e.SymbolDisplayPartKind.propertyName:8&r?e.SymbolDisplayPartKind.enumMemberName:16&r?e.SymbolDisplayPartKind.functionName:32&r?e.SymbolDisplayPartKind.className:64&r?e.SymbolDisplayPartKind.interfaceName:384&r?e.SymbolDisplayPartKind.enumName:1536&r?e.SymbolDisplayPartKind.moduleName:8192&r?e.SymbolDisplayPartKind.methodName:262144&r?e.SymbolDisplayPartKind.typeParameterName:524288&r?e.SymbolDisplayPartKind.aliasName:8388608&r?e.SymbolDisplayPartKind.aliasName:e.SymbolDisplayPartKind.text}(a))}function r(t,n){return{text:t,kind:e.SymbolDisplayPartKind[n]}}function a(){return r(\" \",e.SymbolDisplayPartKind.space)}function i(t){return r(e.tokenToString(t),e.SymbolDisplayPartKind.keyword)}function o(t){return r(e.tokenToString(t),e.SymbolDisplayPartKind.punctuation)}function s(t){return r(e.tokenToString(t),e.SymbolDisplayPartKind.operator)}function c(t){var n=e.stringToToken(t);return void 0===n?u(t):i(n)}function u(t){return r(t,e.SymbolDisplayPartKind.text)}function l(e){return e.getNewLine?e.getNewLine():C}function _(){return r(\"\\n\",e.SymbolDisplayPartKind.lineBreak)}function d(e){e(T);var t=T.displayParts();return T.clear(),t}function p(e,t,n,r){return d(function(a){e.getSymbolDisplayBuilder().buildTypeDisplay(t,a,n,r);})}function f(e,t,n,r,a){return d(function(i){e.getSymbolDisplayBuilder().buildSymbolDisplay(t,i,n,r,a);})}function g(e,t,n,r){return d(function(a){e.getSymbolDisplayBuilder().buildSignatureDisplay(t,a,n,r);})}function m(t,n,r){if(y(r)||e.isStringOrNumericLiteral(r)&&144===r.parent.kind)return r.text;var a=e.getLocalSymbolForExportDefault(n);return t.symbolToString(a||n)}function y(e){return e.parent&&(242===e.parent.kind||246===e.parent.kind)&&e.parent.propertyName===e}function h(e){var t=e.length;return t>=2&&e.charCodeAt(0)===e.charCodeAt(t-1)&&(34===e.charCodeAt(0)||39===e.charCodeAt(0))?e.substring(1,t-1):e}function v(t,n){for(var r=[],a=2;a<arguments.length;a++)r[a-2]=arguments[a];var i=b(t,n);return e.forEach(r,function(e){return e===i})}function b(t,n){var r;return n&&n.getScriptKind&&(r=n.getScriptKind(t)),r||(r=e.getScriptKindFromFileName(t)),e.ensureScriptKind(t,r)}function x(t,n){for(;e.isWhiteSpaceLike(t.charCodeAt(n));)n+=1;return n}function k(e,t){return e.body.getFirstToken(t)}function S(t,n){return e.getTokenAtPosition(n,t.members.pos-1,!1)}e.isFirstDeclarationOfSymbolParameter=t;var T=function(){function t(){if(u){var t=e.getIndentString(l);t&&c.push(r(t,e.SymbolDisplayPartKind.space)),u=!1;}}function a(e,n){t(),c.push(r(e,n));}function i(e,r){t(),c.push(n(e,r));}function o(){c.push(_()),u=!0;}function s(){c=[],u=!0,l=0;}var c,u,l;return s(),{displayParts:function(){return c},writeKeyword:function(t){return a(t,e.SymbolDisplayPartKind.keyword)},writeOperator:function(t){return a(t,e.SymbolDisplayPartKind.operator)},writePunctuation:function(t){return a(t,e.SymbolDisplayPartKind.punctuation)},writeSpace:function(t){return a(t,e.SymbolDisplayPartKind.space)},writeStringLiteral:function(t){return a(t,e.SymbolDisplayPartKind.stringLiteral)},writeParameter:function(t){return a(t,e.SymbolDisplayPartKind.parameterName)},writeProperty:function(t){return a(t,e.SymbolDisplayPartKind.propertyName)},writeSymbol:i,writeLine:o,increaseIndent:function(){l++;},decreaseIndent:function(){l--;},clear:s,trackSymbol:e.noop,reportInaccessibleThisError:e.noop,reportPrivateInBaseOfClassExpression:e.noop}}();e.symbolPart=n,e.displayPart=r,e.spacePart=a,e.keywordPart=i,e.punctuationPart=o,e.operatorPart=s,e.textOrKeywordPart=c,e.textPart=u;var C=\"\\r\\n\";e.getNewLineOrDefaultFromHost=l,e.lineBreakPart=_,e.mapToDisplayParts=d,e.typeToDisplayParts=p,e.symbolToDisplayParts=f,e.signatureToDisplayParts=g,e.getDeclaredName=m,e.isImportOrExportSpecifierName=y,e.stripQuotes=h,e.scriptKindIs=v,e.getScriptKind=b,e.getFirstNonSpaceCharacterPosition=x,e.getOpenBrace=k,e.getOpenBraceOfClassLike=S;}(r||(r={}));!function(e){function t(){function t(t,n){return!e.isAccessibilityModifier(t)||(125===n||135===n||123===n||115===n)}function n(t,n){for(var a=[],i=t.spans,o=0,s=0;s<i.length;s+=3){var c=i[s],u=i[s+1],l=i[s+2];if(o>=0){var _=c-o;_>0&&a.push({length:_,classification:e.TokenClass.Whitespace});}a.push({length:u,classification:r(l)}),o=c+u;}var d=n.length-o;return d>0&&a.push({length:d,classification:e.TokenClass.Whitespace}),{entries:a,finalLexState:t.endOfLineState}}function r(t){switch(t){case 1:return e.TokenClass.Comment;case 3:return e.TokenClass.Keyword;case 4:return e.TokenClass.NumberLiteral;case 5:return e.TokenClass.Operator;case 6:return e.TokenClass.StringLiteral;case 8:return e.TokenClass.Whitespace;case 10:return e.TokenClass.Punctuation;case 2:case 11:case 12:case 13:case 14:case 15:case 16:case 9:case 17:default:return e.TokenClass.Identifier}}function a(e,t,r){return n(i(e,t,r),e)}function i(n,r,a){function i(e,t,n){if(8!==n){0===e&&o>0&&(e+=o);var r=(t-=o)-(e-=o);r>0&&(f.spans.push(e),f.spans.push(r),f.spans.push(n));}}for(var o=0,s=0,p=0;d.length>0;)d.pop();switch(r){case 3:n='\"\\\\\\n'+n,o=3;break;case 2:n=\"'\\\\\\n\"+n,o=3;break;case 1:n=\"/*\\n\"+n,o=3;break;case 4:n=\"`\\n\"+n,o=2;break;case 5:n=\"}\\n\"+n,o=2;case 6:d.push(14);}l.setText(n);var f={endOfLineState:0,spans:[]},g=0;do{if(s=l.scan(),!e.isTrivia(s)){if(41!==s&&63!==s||_[p]){if(23===p&&c(s))s=71;else if(c(p)&&c(s)&&!t(p,s))s=71;else if(71===p&&27===s)g++;else if(29===s&&g>0)g--;else if(119===s||136===s||133===s||122===s||137===s)g>0&&!a&&(s=71);else if(14===s)d.push(s);else if(17===s)d.length>0&&d.push(s);else if(18===s&&d.length>0){var m=e.lastOrUndefined(d);14===m?16===(s=l.reScanTemplateToken())?d.pop():e.Debug.assert(15===s,\"Should have been a template middle. Was \"+s):(e.Debug.assert(17===m,\"Should have been an open brace. Was: \"+s),d.pop());}}else 12===l.reScanSlashToken()&&(s=12);p=s;}!function(){var t=l.getTokenPos(),r=l.getTextPos();if(i(t,r,u(s)),r>=n.length)if(9===s){var a=l.getTokenText();if(l.isUnterminated()){for(var o=a.length-1,c=0;92===a.charCodeAt(o-c);)c++;if(1&c){var _=a.charCodeAt(0);f.endOfLineState=34===_?3:2;}}}else 3===s?l.isUnterminated()&&(f.endOfLineState=1):e.isTemplateLiteralKind(s)?l.isUnterminated()&&(16===s?f.endOfLineState=5:13===s?f.endOfLineState=4:e.Debug.fail(\"Only 'NoSubstitutionTemplateLiteral's and 'TemplateTail's can be unterminated; got SyntaxKind #\"+s)):d.length>0&&14===e.lastOrUndefined(d)&&(f.endOfLineState=6);}();}while(1!==s);return f}function o(e){switch(e){case 39:case 41:case 42:case 37:case 38:case 45:case 46:case 47:case 27:case 29:case 30:case 31:case 93:case 92:case 118:case 32:case 33:case 34:case 35:case 48:case 50:case 49:case 53:case 54:case 69:case 68:case 70:case 65:case 66:case 67:case 59:case 60:case 61:case 63:case 64:case 58:case 26:return!0;default:return!1}}function s(e){switch(e){case 37:case 38:case 52:case 51:case 43:case 44:return!0;default:return!1}}function c(e){return e>=72&&e<=142}function u(t){if(c(t))return 3;if(o(t)||s(t))return 5;if(t>=17&&t<=70)return 10;switch(t){case 8:return 4;case 9:return 6;case 12:return 7;case 7:case 3:case 2:return 1;case 5:case 4:return 8;case 71:default:return e.isTemplateLiteralKind(t)?6:2}}var l=e.createScanner(5,!1),_=[];_[71]=!0,_[9]=!0,_[8]=!0,_[12]=!0,_[99]=!0,_[43]=!0,_[44]=!0,_[20]=!0,_[22]=!0,_[18]=!0,_[101]=!0,_[86]=!0;var d=[];return{getClassificationsForLine:a,getEncodedLexicalClassifications:i}}function n(e,t,n,r,i){return o(a(e,t,n,r,i))}function r(e,t){switch(t){case 233:case 229:case 230:case 228:e.throwIfCancellationRequested();}}function a(t,n,a,i,o){function s(e,t,n){l.push(e),l.push(t),l.push(n);}function c(t,n){var r=t.getFlags();if(0!=(788448&r)){if(32&r)return 11;if(384&r)return 12;if(524288&r)return 16;if(2&n){if(64&r)return 13;if(262144&r)return 15}else if(1536&r&&(4&n||1&n&&function(t){return e.forEach(t.declarations,function(t){return 233===t.kind&&1===e.getModuleInstanceState(t)})}(t)))return 14}}function u(a){if(a&&e.textSpanIntersectsWith(o,a.getFullStart(),a.getFullWidth())){var l=a.kind;if(r(n,l),71===l&&!e.nodeIsMissing(a)){var _=a;if(i.get(_.text)){var d=t.getSymbolAtLocation(a);if(d){var p=c(d,e.getMeaningFromLocation(a));p&&s(a.getStart(),a.getWidth(),p);}}}e.forEachChild(a,u);}}var l=[];return u(a),{spans:l,endOfLineState:0}}function i(e){switch(e){case 1:return\"comment\";case 2:return\"identifier\";case 3:return\"keyword\";case 4:return\"number\";case 5:return\"operator\";case 6:return\"string\";case 8:return\"whitespace\";case 9:return\"text\";case 10:return\"punctuation\";case 11:return\"class name\";case 12:return\"enum name\";case 13:return\"interface name\";case 14:return\"module name\";case 15:return\"type parameter name\";case 16:return\"type alias name\";case 17:return\"parameter name\";case 18:return\"doc comment tag name\";case 19:return\"jsx open tag name\";case 20:return\"jsx close tag name\";case 21:return\"jsx self closing tag name\";case 22:return\"jsx attribute\";case 23:return\"jsx text\";case 24:return\"jsx attribute string literal value\"}}function o(t){e.Debug.assert(t.spans.length%3==0);for(var n=t.spans,r=[],a=0;a<n.length;a+=3)r.push({textSpan:e.createTextSpan(n[a],n[a+1]),classificationType:i(n[a+2])});return r}function s(e,t,n){return o(c(e,t,n))}function c(t,n,a){function i(e,t,n){x.push(e),x.push(t),x.push(n);}function o(t){for(v.setTextPos(t.pos);;){var r=v.getTextPos();if(!e.couldStartTrivia(n.text,r))return r;var a=v.scan(),o=v.getTextPos(),c=o-r;if(!e.isTrivia(a))return r;if(4!==a&&5!==a)if(e.isComment(a))s(t,a,r,c),v.setTextPos(o);else if(7===a){var u=n.text,l=u.charCodeAt(r);if(60===l||62===l){i(r,c,1);continue}e.Debug.assert(124===l||61===l),_(u,r,o);}}}function s(t,r,a,i){if(3===r){var o=e.parseIsolatedJSDocComment(n.text,a,i);if(o&&o.jsDoc)return o.jsDoc.parent=t,void u(o.jsDoc)}c(a,i);}function c(e,t){i(e,t,1);}function u(e){var t=e.pos;if(e.tags)for(var n=0,r=e.tags;n<r.length;n++){var a=r[n];switch(a.pos!==t&&c(t,a.pos-t),i(a.atToken.pos,a.atToken.end-a.atToken.pos,10),i(a.tagName.pos,a.tagName.end-a.tagName.pos,18),t=a.tagName.end,a.kind){case 287:!function(e){e.preParameterName&&(c(t,e.preParameterName.pos-t),i(e.preParameterName.pos,e.preParameterName.end-e.preParameterName.pos,17),t=e.preParameterName.end),e.typeExpression&&(c(t,e.typeExpression.pos-t),m(e.typeExpression),t=e.typeExpression.end),e.postParameterName&&(c(t,e.postParameterName.pos-t),i(e.postParameterName.pos,e.postParameterName.end-e.postParameterName.pos,17),t=e.postParameterName.end);}(a);break;case 290:l(a);break;case 289:case 288:m(a.typeExpression);}t=a.end;}t!==e.end&&c(t,e.end-t);}function l(e){for(var t=0,n=e.getChildren();t<n.length;t++)m(n[t]);}function _(t,n,r){var a;for(a=n;a<r&&!e.isLineBreak(t.charCodeAt(a));a++);for(i(n,a-n,1),b.setTextPos(a);b.getTextPos()<r;)d();}function d(){var e=b.getTextPos(),t=b.scan(),n=b.getTextPos(),r=g(t);r&&i(e,n-e,r);}function p(t){if(e.isJSDoc(t))return!0;if(e.nodeIsMissing(t))return!0;var n=f(t);if(!e.isToken(t)&&10!==t.kind&&void 0===n)return!1;var r=10===t.kind?t.pos:o(t),a=t.end-r;if(e.Debug.assert(a>=0),a>0){var s=n||g(t.kind,t);s&&i(r,a,s);}return!0}function f(e){switch(e.parent&&e.parent.kind){case 251:if(e.parent.tagName===e)return 19;break;case 252:if(e.parent.tagName===e)return 20;break;case 250:if(e.parent.tagName===e)return 21;break;case 253:if(e.parent.name===e)return 22}}function g(t,n){if(e.isKeyword(t))return 3;if((27===t||29===t)&&n&&e.getTypeArgumentOrTypeParameterList(n.parent))return 10;if(e.isPunctuation(t)){if(n){if(58===t&&(226===n.parent.kind||149===n.parent.kind||146===n.parent.kind||253===n.parent.kind))return 5;if(194===n.parent.kind||192===n.parent.kind||193===n.parent.kind||195===n.parent.kind)return 5}return 10}if(8===t)return 4;if(9===t)return 253===n.parent.kind?24:6;if(12===t)return 6;if(e.isTemplateLiteralKind(t))return 6;if(10===t)return 23;if(71===t){if(n)switch(n.parent.kind){case 229:if(n.parent.name===n)return 11;return;case 145:if(n.parent.name===n)return 15;return;case 230:if(n.parent.name===n)return 13;return;case 232:if(n.parent.name===n)return 12;return;case 233:if(n.parent.name===n)return 14;return;case 146:if(n.parent.name===n)return e.isThisIdentifier(n)?3:17;return}return 2}}function m(a){if(a&&e.decodedTextSpanIntersectsWith(y,h,a.pos,a.getFullWidth())){r(t,a.kind);for(var i=0,o=a.getChildren(n);i<o.length;i++){var s=o[i];p(s)||m(s);}}}var y=a.start,h=a.length,v=e.createScanner(5,!1,n.languageVariant,n.text),b=e.createScanner(5,!1,n.languageVariant,n.text),x=[];return m(n),{spans:x,endOfLineState:0}}e.createClassifier=t,e.getSemanticClassifications=n,e.getEncodedSemanticClassifications=a,e.getSyntacticClassifications=s,e.getEncodedSyntacticClassifications=c;}(r||(r={}));!function(e){!function(t){!function(t){function n(t,n,r,s){var c,u=e.normalizeSlashes(t.text),l=t.getSourceFile().path,_=e.getDirectoryPath(l),d=g(t.text,t.getStart()+1);if(m(u)||e.isRootedDiskPath(u)){var p=e.getSupportedExtensions(n);c=n.rootDirs?a(n.rootDirs,u,_,p,!1,d,n,r,l):i(u,_,p,!1,d,r,l);}else c=o(u,_,d,n,r,s);return{isGlobalCompletion:!1,isMemberCompletion:!1,isNewIdentifierLocation:!0,entries:c}}function r(t,n,r,a){for(var i,o=0,s=t=e.map(t,function(t){return e.normalizePath(e.isRootedDiskPath(t)?t:e.combinePaths(n,t))});o<s.length;o++){var c=s[o];if(e.containsPath(c,r,n,a)){i=r.substr(c.length);break}}return e.deduplicate(e.map(t,function(t){return e.combinePaths(t,i)}))}function a(e,t,n,a,o,s,c,u,l){for(var _=[],d=0,p=r(e,c.project||u.getCurrentDirectory(),n,!(u.useCaseSensitiveFileNames&&u.useCaseSensitiveFileNames()));d<p.length;d++)i(t,p[d],a,o,s,u,l,_);return _}function i(t,n,r,a,i,o,s,c){void 0===c&&(c=[]),void 0===t&&(t=\"\"),t=e.normalizeSlashes(t),\"\"===(t=e.getDirectoryPath(t))&&(t=\".\"+e.directorySeparator),t=e.ensureTrailingDirectorySeparator(t);var u=y(e.isRootedDiskPath(t)?t:e.combinePaths(n,t)),l=e.getDirectoryPath(u),_=!(o.useCaseSensitiveFileNames&&o.useCaseSensitiveFileNames());if(k(o,l)){var d=v(o,l,r,void 0,[\"./*\"]);if(d){for(var p=e.createMap(),g=0,m=d;g<m.length;g++){var b=m[g];if(b=e.normalizePath(b),!s||0!==e.comparePaths(b,s,n,_)){var x=a?e.getBaseFileName(b):e.removeFileExtension(e.getBaseFileName(b));p.get(x)||p.set(x,!0);}}e.forEachKey(p,function(e){c.push(f(e,\"script\",i));});}var S=h(o,l);if(S)for(var T=0,C=S;T<C.length;T++){var D=C[T],E=e.getBaseFileName(e.normalizePath(D));c.push(f(E,\"directory\",i));}}return c}function o(t,n,r,a,o,u){var _,d=a.baseUrl,p=a.paths;if(d){var g=e.getSupportedExtensions(a),m=a.project||o.getCurrentDirectory(),y=e.isRootedDiskPath(d)?d:e.combinePaths(m,d);if(_=i(t,e.normalizePath(y),g,!1,r,o),p)for(var h in p)if(p.hasOwnProperty(h))if(\"*\"===h){if(p[h])for(var v=0,b=p[h];v<b.length;v++)for(var x=0,k=s(t,d,b[v],g,o);x<k.length;x++){var S=k[x];_.push(f(S,\"external module name\",r));}}else e.startsWith(h,t)&&p[h]&&1===p[h].length&&p[h][0]&&_.push(f(h,\"external module name\",r));}else _=[];l(o,a,n,r,_);for(var T=0,C=c(t,n,a,u,o);T<C.length;T++){var D=C[T];_.push(f(D,\"external module name\",r));}return _}function s(t,n,r,a,i){if(i.readDirectory){var o=e.hasZeroOrOneAsteriskCharacter(r)?e.tryParsePattern(r):void 0;if(o){var s=y(o.prefix),c=e.getDirectoryPath(s),u=e.getBaseFileName(s),l=-1!==t.indexOf(e.directorySeparator),_=l?e.combinePaths(c,u+e.getDirectoryPath(t)):c,d=e.normalizePath(o.suffix),p=e.combinePaths(n,_),f=l?p:e.ensureTrailingDirectorySeparator(p)+u,g=v(i,p,a,void 0,[d?\"**/*\":\"./*\"]);if(g){for(var m=[],h=0,b=g;h<b.length;h++){var x=b[h],k=e.normalizePath(x);if(e.endsWith(k,d)&&e.startsWith(k,f)){var S=f.length,T=k.length-S-d.length;m.push(e.removeFileExtension(k.substr(S,T)));}}return m}}}}function c(t,n,r,a,i){var o=-1!==t.indexOf(e.directorySeparator),s=o?t.substr(0,t.lastIndexOf(e.directorySeparator)):void 0,c=e.map(a.getAmbientModules(),function(t){return e.stripQuotes(t.name)}),u=e.filter(c,function(n){return e.startsWith(n,t)});if(o){var l=e.ensureTrailingDirectorySeparator(s);u=e.map(u,function(t){return e.removePrefix(t,l)});}if(!r.moduleResolution||r.moduleResolution===e.ModuleResolutionKind.NodeJs)for(var _=0,d=p(i,n);_<d.length;_++){var f=d[_];if(o){if(e.startsWith(f.moduleName,s)){var g=v(i,f.moduleDir,e.supportedTypeScriptExtensions,void 0,[\"./*\"]);if(g)for(var m=0,y=g;m<y.length;m++){var h=y[m];h=e.normalizePath(h);var b=e.removeFileExtension(e.getBaseFileName(h));u.push(b);}}}else u.push(f.moduleName);}return e.deduplicate(u)}function u(t,n,r,a){var o=e.getTokenAtPosition(t,n,!1);if(o){var s=e.getLeadingCommentRanges(t.text,o.pos);if(s&&s.length){var c=e.forEach(s,function(e){return n>=e.pos&&n<=e.end&&e});if(c){var u={isGlobalCompletion:!1,isMemberCompletion:!1,isNewIdentifierLocation:!0,entries:[]},_=t.text.substr(c.pos,n-c.pos),d=T.exec(_);if(d){var p=d[1],f=d[2],m=d[3],y=e.getDirectoryPath(t.path);if(\"path\"===f){var h=g(m,c.pos+p.length);u.entries=i(m,y,e.getSupportedExtensions(r),!0,h,a,t.path);}else{var v={start:c.pos+p.length,length:d[0].length-p.length};u.entries=l(a,r,y,v);}}return u}}}}function l(t,n,r,a,i){if(void 0===i&&(i=[]),n.types)for(var o=0,s=n.types;o<s.length;o++){var c=s[o];i.push(f(c,\"external module name\",a));}else if(t.getDirectories){var u=void 0;try{u=e.getEffectiveTypeRoots(n,t);}catch(e){}if(u)for(var l=0,p=u;l<p.length;l++)_(t,p[l],a,i);}if(t.getDirectories)for(var g=0,m=d(r,t);g<m.length;g++){var y=m[g];_(t,e.combinePaths(e.getDirectoryPath(y),\"node_modules/@types\"),a,i);}return i}function _(t,n,r,a){if(t.getDirectories&&k(t,n)){var i=h(t,n);if(i)for(var o=0,s=i;o<s.length;o++){var c=s[o];c=e.normalizePath(c),a.push(f(e.getBaseFileName(c),\"external module name\",r));}}}function d(t,n){for(var r,a=[];;){if(!(r=e.findConfigFile(t,function(e){return x(n,e)},\"package.json\")))break;a.push(r),t=e.getDirectoryPath(r);var i=e.getDirectoryPath(t);if(t===i)break;t=i;}return a}function p(t,n){var r=[];if(t.readFile&&t.fileExists)for(var a=0,i=d(n,t);a<i.length;a++){var o=i[a],s=function(e){try{var n=b(t,e);return n?JSON.parse(n):void 0}catch(e){return}}(o);if(!s)return;for(var c=e.combinePaths(e.getDirectoryPath(o),\"node_modules\"),u=[],l=0,_=C;l<_.length;l++)!function(t,n){if(t)for(var r in t)t.hasOwnProperty(r)&&!e.startsWith(r,\"@types/\")&&n.push(r);}(s[_[l]],u);for(var p=0,f=u;p<f.length;p++){var g=f[p],m=e.combinePaths(c,g);r.push({moduleName:g,moduleDir:m});}}return r}function f(e,t,n){return{name:e,kind:t,kindModifiers:\"\",sortText:e,replacementSpan:n}}function g(t,n){var r=t.lastIndexOf(e.directorySeparator),a=-1!==r?r+1:0;return{start:n+a,length:t.length-a}}function m(e){if(e&&e.length>=2&&46===e.charCodeAt(0)){var t=e.length>=3&&46===e.charCodeAt(1)?2:1,n=e.charCodeAt(t);return 47===n||92===n}return!1}function y(t){return e.hasTrailingDirectorySeparator(t)?e.ensureTrailingDirectorySeparator(e.normalizePath(t)):e.normalizePath(t)}function h(e,t){return S(e,e.getDirectories)}function v(e,t,n,r,a){return S(e,e.readDirectory)}function b(e,t){return S(e,e.readFile)}function x(e,t){return S(e,e.fileExists)}function k(t,n){try{return e.directoryProbablyExists(n,t)}catch(e){}}function S(e,t){for(var n=[],r=2;r<arguments.length;r++)n[r-2]=arguments[r];try{return t&&t.apply(e,n)}catch(e){}}t.getStringLiteralCompletionEntriesFromModuleNames=n,t.getTripleSlashReferenceCompletion=u;var T=/^(\\/\\/\\/\\s*<reference\\s+(path|types)\\s*=\\s*(?:'|\"))([^\\3\"]*)$/,C=[\"dependencies\",\"devDependencies\",\"peerDependencies\",\"optionalDependencies\"];}(t.PathCompletions||(t.PathCompletions={}));}(e.Completions||(e.Completions={}));}(r||(r={}));!function(e){!function(t){function n(n,a,s,c,u,l){if(e.isInReferenceComment(u,l))return t.PathCompletions.getTripleSlashReferenceCompletion(u,l,c,n);if(e.isInString(u,l))return o(u,l,a,c,n,s);var _=f(a,s,u,l);if(_){var d=_.symbols,p=_.isGlobalCompletion,g=_.isMemberCompletion,m=_.isNewIdentifierLocation,h=_.location,v=_.request,b=_.keywordFilters;if(1===u.languageVariant&&h&&h.parent&&252===h.parent.kind)return{isGlobalCompletion:!1,isMemberCompletion:!0,isNewIdentifierLocation:!1,entries:[{name:h.parent.parent.openingElement.tagName.getFullText(),kind:\"class\",kindModifiers:void 0,sortText:\"0\"}]};if(v)return{isGlobalCompletion:!1,isMemberCompletion:!1,isNewIdentifierLocation:!1,entries:\"JsDocTagName\"===v.kind?e.JsDoc.getJSDocTagNameCompletions():\"JsDocTag\"===v.kind?e.JsDoc.getJSDocTagCompletions():e.JsDoc.getJSDocParameterNameCompletions(v.tag)};var x=[];if(e.isSourceFileJavaScript(u)){var k=i(d,x,h,!0,a,c.target,s);e.addRange(x,r(u,h.pos,k,c.target));}else{if((!d||0===d.length)&&0===b)return;i(d,x,h,!0,a,c.target,s);}return 0===b&&g||e.addRange(x,y(b)),{isGlobalCompletion:p,isMemberCompletion:g,isNewIdentifierLocation:m,entries:x}}}function r(t,n,r,a){var i=[];return e.getNameTable(t).forEach(function(t,o){if(t!==n&&!r.get(o)){r.set(o,o);var s=m(e.unescapeIdentifier(o),a,!0);if(s){var c={name:s,kind:\"warning\",kindModifiers:\"\",sortText:\"1\"};i.push(c);}}}),i}function a(t,n,r,a,i){var o=g(a,t,i,r,n);if(o)return{name:o,kind:e.SymbolDisplay.getSymbolKind(a,t,n),kindModifiers:e.SymbolDisplay.getSymbolModifiers(t),sortText:\"0\"}}function i(t,n,r,i,o,s,c){var u=e.timestamp(),l=e.createMap();if(t)for(var _=0,d=t;_<d.length;_++){var p=a(d[_],r,i,o,s);if(p){var f=e.escapeIdentifier(p.name);l.get(f)||(n.push(p),l.set(f,f));}}return c(\"getCompletionsAtPosition: getCompletionEntriesFromSymbols: \"+(e.timestamp()-u)),l}function o(n,r,a,i,o,_){var d=e.findPrecedingToken(r,n);if(d&&9===d.kind){if(261===d.parent.kind&&178===d.parent.parent.kind&&d.parent.name===d)return s(d.parent,a,i.target,_);if(e.isElementAccessExpression(d.parent)&&d.parent.argumentExpression===d)return u(d.parent,a,i.target,_);if(238===d.parent.kind||e.isExpressionOfExternalModuleImportEqualsDeclaration(d)||e.isRequireCall(d.parent,!1))return t.PathCompletions.getStringLiteralCompletionEntriesFromModuleNames(d,i,o,a);if(k(d.parent))return l(a.getTypeAtLocation(d.parent.left===d?d.parent.right:d.parent.left),a);if(e.isCaseOrDefaultClause(d.parent))return l(a.getTypeAtLocation(d.parent.parent.parent.expression),a);var p=e.SignatureHelp.getImmediatelyContainingArgumentInfo(d,r,n);return p?c(p,a):l(a.getContextualType(d),a)}}function s(e,t,n,r){var a=t.getContextualType(e.parent),o=[];if(a&&(i(a.getApparentProperties(),o,e,!1,t,n,r),o.length))return{isGlobalCompletion:!1,isMemberCompletion:!0,isNewIdentifierLocation:!0,entries:o}}function c(t,n){var r=[],a=[],i=e.createMap();n.getResolvedSignature(t.invocation,r);for(var o=0,s=r;o<s.length;o++){var c=s[o];_(n.getParameterType(c,t.argumentIndex),a,n,i);}if(a.length)return{isGlobalCompletion:!1,isMemberCompletion:!1,isNewIdentifierLocation:!0,entries:a}}function u(e,t,n,r){var a=t.getTypeAtLocation(e.expression),o=[];if(a&&(i(a.getApparentProperties(),o,e,!1,t,n,r),o.length))return{isGlobalCompletion:!1,isMemberCompletion:!0,isNewIdentifierLocation:!0,entries:o}}function l(e,t){if(e){var n=[];if(_(e,n,t),n.length)return{isGlobalCompletion:!1,isMemberCompletion:!1,isNewIdentifierLocation:!1,entries:n}}}function _(t,n,r,a){if(void 0===a&&(a=e.createMap()),t&&16384&t.flags&&(t=r.getBaseConstraintOfType(t)),t)if(65536&t.flags)for(var i=0,o=t.types;i<o.length;i++)_(o[i],n,r,a);else if(32&t.flags){var s=t.value;a.has(s)||(a.set(s,!0),n.push({name:s,kindModifiers:\"\",kind:\"var\",sortText:\"0\"}));}}function d(t,n,r,a,i,o){var s=f(t,n,a,i);if(s){var c=s.symbols,u=s.location,l=e.forEach(c,function(e){return g(t,e,r.target,!1,u)===o?e:void 0});if(l){var _=e.SymbolDisplay.getSymbolDisplayPartsDocumentationAndSymbolKind(t,l,a,u,u,7),d=_.displayParts,p=_.documentation,m=_.symbolKind,h=_.tags;return{name:o,kindModifiers:e.SymbolDisplay.getSymbolModifiers(l),kind:m,displayParts:d,documentation:p,tags:h}}}if(e.forEach(y(0),function(e){return e.name===o}))return{name:o,kind:\"keyword\",kindModifiers:\"\",displayParts:[e.displayPart(o,e.SymbolDisplayPartKind.keyword)],documentation:void 0,tags:void 0}}function p(t,n,r,a,i,o){var s=f(t,n,a,i);if(s){var c=s.symbols,u=s.location;return e.forEach(c,function(e){return g(t,e,r.target,!1,u)===o?e:void 0})}}function f(t,n,r,a){function i(e){if(e){for(var n=0,r=e.getApparentProperties();n<r.length;n++){var a=r[n];t.isValidPropertyAccess(X.parent,a.name)&&se.push(a);}if(j&&65536&e.flags)for(var o=0,s=e.types;o<s.length;o++)i(s[o]);}}function o(){var n,i,o,c;if(n=k(H))return g(n);if(i=S(H))return m(i);if(A(H))return ne=!1,re=!0,oe=2,!0;if(o=N(H))return y(o),!0;if(c=w(H)){var u=void 0;if((250===c.kind||251===c.kind)&&(u=t.getAllAttributesTypeFromJsxOpeningLikeElement(c)))return se=L(t.getPropertiesOfType(u),c.attributes.properties),ne=!0,re=!1,!0}ne=!1,re=p(H),W!==H&&e.Debug.assert(!!W,\"Expected 'contextToken' to be defined when different from 'previousToken'.\");var l=W!==H?W.getStart():a,d=_(H,l,r)||r;d&&(ie=265===d.kind||196===d.kind||256===d.kind||e.isStatement(d));return se=s(t.getSymbolsInScope(d,9289727)),!0}function s(n){return e.filter(n,function(n){if(!e.isSourceFile(ee)){if(e.isExportAssignment(ee.parent))return!0;if(n&&8388608&n.flags&&(n=t.getAliasedSymbol(n)),e.isInRightSideOfInternalImportEqualsDeclaration(ee))return!!(1920&n.flags);if(q||!c(H)&&(e.isPartOfTypeNode(ee)||u(H)))return l(n)}return!!(107455&n.flags)})}function c(e){return e&&103===e.kind&&162===e.parent.kind}function u(t){if(t){var n=t.parent.kind;switch(t.kind){case 56:return 149===n||148===n||146===n||226===n||e.isFunctionLikeKind(n);case 58:return 231===n;case 118:return 202===n}}}function l(n){if(n&&8388608&n.flags&&(n=t.getAliasedSymbol(n)),793064&n.flags)return!0;if(1536&n.flags){var r=t.getExportsOfModule(n);return e.forEach(r,l)}}function _(t,n,r){for(var a=t;a&&!e.positionBelongsToNode(a,n,r);)a=a.parent;return a}function d(e){if(10===e.kind)return!0;if(29===e.kind&&e.parent){if(251===e.parent.kind)return!0;if(252===e.parent.kind||250===e.parent.kind)return e.parent.parent&&249===e.parent.parent.kind}return!1}function p(e){if(e){var t=e.parent.kind;switch(e.kind){case 26:return 181===t||152===t||182===t||177===t||194===t||160===t;case 19:return 181===t||152===t||182===t||185===t||168===t;case 21:return 177===t||157===t||144===t;case 128:case 129:return!0;case 23:return 233===t;case 17:return 229===t;case 58:return 226===t||194===t;case 14:return 196===t;case 15:return 205===t;case 114:case 112:case 113:return 149===t}switch(e.getText()){case\"public\":case\"protected\":case\"private\":return!0}}return!1}function f(t){if(9===t.kind||12===t.kind||e.isTemplateLiteralKind(t.kind)){var n=t.getStart(),r=t.getEnd();if(n<a&&a<r)return!0;if(a===r)return!!t.isUnterminated||12===t.kind}return!1}function g(n){ne=!0;var r,a;if(178===n.kind){if(re=!0,!(s=t.getContextualType(n)))return!1;r=t.getAllPossiblePropertiesOfType(s),a=n.properties;}else{e.Debug.assert(174===n.kind),re=!1;var i=e.getRootDeclaration(n.parent);if(!e.isVariableLike(i))throw e.Debug.fail(\"Root declaration is not variable-like.\");var o=i.initializer||i.type||216===i.parent.parent.kind;if(o||146!==i.kind||(e.isExpression(i.parent)?o=!!t.getContextualType(i.parent):151!==i.parent.kind&&154!==i.parent.kind||(o=e.isExpression(i.parent.parent)&&!!t.getContextualType(i.parent.parent))),o){var s=t.getTypeAtLocation(n);if(!s)return!1;r=t.getPropertiesOfType(s),a=n.elements;}}return r&&r.length>0&&(se=M(r,a)),!0}function m(n){var r=241===n.kind?238:244,a=e.getAncestor(n,r).moduleSpecifier;if(!a)return!1;ne=!0,re=!1;var i=t.getSymbolAtLocation(a);if(!i)return se=e.emptyArray,!0;var o=t.getExportsAndPropertiesOfModule(i);return se=I(o,n.elements),!0}function y(n){ne=!0,re=!0,oe=1;var r=e.getClassExtendsHeritageClauseElement(n),a=e.getClassImplementsHeritageClauseElements(n);if(r||a){var i=H.parent,o=e.isClassElement(i)&&e.getModifierFlags(i);if(71===H.kind&&!B(H))switch(H.getText()){case\"private\":o|=8;break;case\"static\":o|=32;}if(!(8&o)){var s=void 0;r&&(s=t.getTypeAtLocation(r),32&o&&(s=t.getTypeOfSymbolAtLocation(s.symbol,n)));var c=32&o?void 0:e.flatMap(a,function(e){return t.getPropertiesOfType(t.getTypeAtLocation(e))});se=R(s?t.getPropertiesOfType(s):void 0,c,n.members,o);}}}function k(t){if(t)switch(t.kind){case 17:case 26:var n=t.parent;if(e.isObjectLiteralExpression(n)||e.isObjectBindingPattern(n))return n}}function S(e){if(e)switch(e.kind){case 17:case 26:switch(e.parent.kind){case 241:case 245:return e.parent}}}function C(t){return e.isClassElement(t.parent)&&e.isClassLike(t.parent.parent)}function D(t){return e.isParameter(t)&&e.isConstructorDeclaration(t.parent)}function E(t){return t.parent&&D(t.parent)&&(b(t.kind)||e.isDeclarationName(t))}function N(t){if(t)switch(t.kind){case 17:case 26:if(e.isClassLike(t.parent))return t.parent;break;case 25:case 18:if(e.isClassLike(ee))return ee;break;default:if(C(t)&&(h(t.kind)||v(t.getText())))return t.parent.parent}if(ee&&295===ee.kind&&e.isClassLike(ee.parent))return ee.parent}function A(t){if(t)switch(t.kind){case 19:case 26:return e.isConstructorDeclaration(t.parent)&&t.parent;default:if(E(t))return t.parent.parent}}function w(e){if(e){var t=e.parent;switch(e.kind){case 28:case 41:case 71:case 179:case 254:case 253:case 255:if(t&&(250===t.kind||251===t.kind))return t;if(253===t.kind)return t.parent.parent;break;case 9:if(t&&(253===t.kind||255===t.kind))return t.parent.parent;break;case 18:if(t&&256===t.kind&&t.parent&&253===t.parent.kind)return t.parent.parent.parent;if(t&&255===t.kind)return t.parent.parent}}}function P(t){var n=t.parent.kind;switch(t.kind){case 26:return 226===n||227===n||208===n||232===n||O(n)||230===n||175===n||231===n||e.isClassLike(t.parent)&&t.parent.typeParameters&&t.parent.typeParameters.end>=t.pos;case 23:return 175===n;case 56:return 176===n;case 21:return 175===n;case 19:return 260===n||O(n);case 17:return 232===n||230===n||163===n;case 25:return 148===n&&t.parent&&t.parent.parent&&(230===t.parent.parent.kind||163===t.parent.parent.kind);case 27:return 229===n||199===n||230===n||231===n||e.isFunctionLikeKind(n);case 115:return 149===n&&!e.isClassLike(t.parent.parent);case 24:return 146===n||t.parent&&t.parent.parent&&175===t.parent.parent.kind;case 114:case 112:case 113:return 146===n&&!e.isConstructorDeclaration(t.parent.parent);case 118:return 242===n||246===n||240===n;case 125:case 135:if(C(t))return!1;case 75:case 83:case 109:case 89:case 104:case 91:case 110:case 76:case 116:case 138:return!0}if(v(t.getText())&&C(t))return!1;if(E(t)&&(!e.isIdentifier(t)||x(t.getText())||B(t)))return!1;switch(t.getText()){case\"abstract\":case\"async\":case\"class\":case\"const\":case\"declare\":case\"enum\":case\"function\":case\"interface\":case\"let\":case\"private\":case\"protected\":case\"public\":case\"static\":case\"var\":case\"yield\":return!0}return e.isDeclarationName(t)&&!e.isJsxAttribute(t.parent)}function O(t){return e.isFunctionLikeKind(t)&&152!==t}function F(e){if(8===e.kind){var t=e.getFullText();return\".\"===t.charAt(t.length-1)}return!1}function I(t,n){for(var r=e.createMap(),a=0,i=n;a<i.length;a++){var o=i[a];if(!B(o)){var s=o.propertyName||o.name;r.set(s.text,!0);}}return 0===r.size?e.filter(t,function(e){return\"default\"!==e.name}):e.filter(t,function(e){return\"default\"!==e.name&&!r.get(e.name)})}function M(t,n){if(!n||0===n.length)return t;for(var r=e.createMap(),a=0,i=n;a<i.length;a++){var o=i[a];if((261===o.kind||262===o.kind||176===o.kind||151===o.kind||153===o.kind||154===o.kind)&&!B(o)){var s=void 0;176===o.kind&&o.propertyName?71===o.propertyName.kind&&(s=o.propertyName.text):s=e.getNameOfDeclaration(o).text,r.set(s,!0);}}return e.filter(t,function(e){return!r.get(e.name)})}function R(t,n,r,a){function i(t,n){return!o.get(t.name)&&t.getDeclarations()&&!(e.getDeclarationModifierFlagsFromSymbol(t)&n)}for(var o=e.createMap(),s=0,c=r;s<c.length;s++){var u=c[s];if((149===u.kind||151===u.kind||153===u.kind||154===u.kind)&&(!B(u)&&!e.hasModifier(u,8))){var l=e.hasModifier(u,32),_=!!(32&a);if(!(l&&!_||!l&&_)){var d=e.getPropertyNameForPropertyNameNode(u.name);d&&o.set(d,!0);}}}return e.concatenate(e.filter(t,function(e){return i(e,8)}),e.filter(n,function(e){return i(e,24)}))}function L(t,n){for(var r=e.createMap(),a=0,i=n;a<i.length;a++){var o=i[a];B(o)||253===o.kind&&r.set(o.name.text,!0);}return e.filter(t,function(e){return!r.get(e.name)})}function B(e){return e.getStart()<=a&&a<=e.getEnd()}var K,j=e.isSourceFileJavaScript(r),J=e.timestamp(),z=e.getTokenAtPosition(r,a,!1);n(\"getCompletionData: Get current token: \"+(e.timestamp()-J)),J=e.timestamp();var U=e.isInComment(r,a,z);n(\"getCompletionData: Is inside comment: \"+(e.timestamp()-J));var q=!1;if(U){if(e.hasDocComment(r,a))if(64===r.text.charCodeAt(a-1))K={kind:\"JsDocTagName\"};else{var V=e.getLineStartPositionForPosition(a,r);r.text.substring(V,a).match(/[^\\*|\\s|(/\\*\\*)]/)||(K={kind:\"JsDocTag\"});}var $=T(z,a);if($&&($.tagName.pos<=a&&a<=$.tagName.end&&(K={kind:\"JsDocTagName\"}),function(e){switch(e.kind){case 285:case 287:case 292:case 288:case 289:case 291:return!0}}($)&&$.typeExpression&&((z=e.getTokenAtPosition(r,a,!0))&&(e.isDeclarationName(z)||292===z.parent.kind&&z.parent.name===z)||(q=B($.typeExpression))),e.isJSDocParameterTag($)&&(e.nodeIsMissing($.name)||$.name.pos<=a&&a<=$.name.end)&&(K={kind:\"JsDocParameterName\",tag:$})),K)return{symbols:void 0,isGlobalCompletion:!1,isMemberCompletion:!1,isNewIdentifierLocation:!1,location:void 0,isRightOfDot:!1,request:K,keywordFilters:0};if(!q)return void n(\"Returning an empty list because completion was inside a regular comment or plain text part of a JsDoc comment.\")}J=e.timestamp();var W=e.findPrecedingToken(a,r,void 0,q);n(\"getCompletionData: Get previous token 1: \"+(e.timestamp()-J));var H=W;if(H&&a<=H.end&&e.isWord(H.kind)){var G=e.timestamp();H=e.findPrecedingToken(H.getFullStart(),r,void 0,q),n(\"getCompletionData: Get previous token 2: \"+(e.timestamp()-G));}var X=z,Y=!1,Q=!1,Z=!1,ee=e.getTouchingPropertyName(r,a,q);if(H){if(function(t){var r=e.timestamp(),a=f(t)||P(t)||F(t)||d(t);return n(\"getCompletionsAtPosition: isCompletionListBlocker: \"+(e.timestamp()-r)),a}(H))return void n(\"Returning an empty list because completion was requested in an invalid position.\");var te=H.parent;if(23===H.kind)if(179===te.kind)X=H.parent.expression,Y=!0;else{if(143!==te.kind)return;X=H.parent.left,Y=!0;}else if(1===r.languageVariant)switch(te&&179===te.kind&&(H=te,te=te.parent),te.kind){case 252:41===H.kind&&(Z=!0,ee=H);break;case 194:if(!(32768&te.left.flags))break;case 250:case 249:case 251:27===H.kind&&(Q=!0,ee=H);}}var ne,re,ae=e.timestamp(),ie=!1,oe=0,se=[];if(Y)!function(){ie=!1,ne=!0,re=!1;var n=e.isPartOfTypeNode(X.parent)||q,r=e.isInRightSideOfInternalImportEqualsDeclaration(X);if(71===X.kind||143===X.kind||179===X.kind){var a=t.getSymbolAtLocation(X);if(a&&8388608&a.flags&&(a=t.getAliasedSymbol(a)),a&&1952&a.flags){var o=t.getExportsOfModule(a),s=function(e){return t.isValidPropertyAccess(X.parent,e.name)},c=function(e){return l(e)},u=r?function(e){return c(e)||s(e)}:n?c:s;e.forEach(o,function(e){u(e)&&se.push(e);});}}n||i(t.getTypeAtLocation(X));}();else if(Q){var ce=t.getJsxIntrinsicTagNames();se=o()?ce.concat(se.filter(function(e){return!!(8496063&e.flags)})):ce,ne=!0,re=!1;}else if(Z){var ue=H.parent.parent.openingElement.tagName,le=t.getSymbolAtLocation(ue);t.isUnknownSymbol(le)||(se=[le]),ne=!0,re=!1;}else if(!o())return;return n(\"getCompletionData: Semantic work: \"+(e.timestamp()-ae)),{symbols:se,isGlobalCompletion:ie,isMemberCompletion:ne,isNewIdentifierLocation:re,location:ee,isRightOfDot:Y||Q,request:K,keywordFilters:oe}}function g(t,n,r,a,i){var o=e.getDeclaredName(t,n,i);if(o){var s=o.charCodeAt(0);if(1920&n.flags&&(39===s||34===s))return}return m(o,r,a)}function m(t,n,r){if(t&&(t=e.stripQuotes(t))&&(!r||e.isIdentifierText(t,n)))return t}function y(t){function n(){for(var t=[],n=72;n<=142;n++)t.push({name:e.tokenToString(n),kind:\"keyword\",kindModifiers:\"\",sortText:\"0\"});return t}function r(t){return e.filter(y(0),function(e){return t(e.name)})}var a=E[t];return a||(E[t]=function(e){switch(e){case 0:return n();case 1:return r(v);case 2:return r(x)}}(t))}function h(e){switch(e){case 114:case 113:case 112:case 117:case 115:case 123:case 131:case 125:case 135:case 120:return!0}}function v(t){return h(e.stringToToken(t))}function b(e){switch(e){case 114:case 112:case 113:case 131:return!0}}function x(t){return b(e.stringToToken(t))}function k(t){return e.isBinaryExpression(t)&&S(t.operatorToken.kind)}function S(e){return 32===e||33===e||34===e||35===e}function T(e,t){var n=C(e).jsDoc;if(n)for(var r=0,a=n;r<a.length;r++){var i=a[r],o=i.pos,s=i.end,c=i.tags;if(!(!c||t<o||t>s))for(var u=c.length-1;u>=0;u--){var l=c[u];if(t>=l.pos)return l}}}function C(t){if(!e.isToken(t))return t;switch(t.kind){case 104:case 110:case 76:return t.parent.parent;default:return t.parent}}var D;!function(e){e[e.None=0]=\"None\",e[e.ClassElementKeywords=1]=\"ClassElementKeywords\",e[e.ConstructorParameterKeywords=2]=\"ConstructorParameterKeywords\";}(D||(D={})),t.getCompletionsAtPosition=n,t.getCompletionEntryDetails=d,t.getCompletionEntrySymbol=p;var E=[];}(e.Completions||(e.Completions={}));}(r||(r={}));!function(e){!function(t){function n(t,n,i,s,c){var u=e.getTouchingWord(i,s,!0);if(u){if(e.isJsxOpeningElement(u.parent)&&u.parent.tagName===u||e.isJsxClosingElement(u.parent)){var l=u.parent.parent,_=[l.openingElement,l.closingElement].map(function(e){return r(e.tagName,i)});return[{fileName:i.fileName,highlightSpans:_}]}return a(u,t,n,c)||o(u,i)}}function r(t,n){return{fileName:n.fileName,textSpan:e.createTextSpanFromNode(t,n),kind:\"none\"}}function a(t,n,r,a){var o=e.FindAllReferences.getReferenceEntriesForNode(t,n,a,r);return o&&i(o)}function i(t){for(var n=e.createMap(),r=0,a=t;r<a.length;r++){var i=a[r],o=e.FindAllReferences.toHighlightSpan(i),s=o.fileName,c=o.span,u=n.get(s);u||n.set(s,u=[]),u.push(c);}return e.arrayFrom(n.entries(),function(e){return{fileName:e[0],highlightSpans:e[1]}})}function o(e,t){var n=u(e,t);if(n&&0!==n.length)return[{fileName:t.fileName,highlightSpans:n}]}function s(e,t){return void 0!==e&&e.kind===t}function c(e){return e&&e.parent}function u(t,n){function a(e){return e&&e.map(function(e){return r(e,n)})}if(t)switch(t.kind){case 90:case 82:if(s(t.parent,211))return C(t.parent,n);break;case 96:if(s(t.parent,219))return a(T(t.parent));break;case 100:if(s(t.parent,223))return a(S(t.parent));break;case 102:case 74:case 87:var i=c(74===t.kind?c(t):t);if(s(i,224))return a(k(i,n));break;case 98:if(s(t.parent,221))return a(x(t.parent));break;case 73:case 79:if(s(c(c(c(t))),221))return a(x(t.parent.parent.parent));break;case 72:case 77:if(s(t.parent,218)||s(t.parent,217))return a(b(t.parent));break;case 88:if(s(t.parent,214)||s(t.parent,215)||s(t.parent,216))return a(v(t.parent));break;case 106:case 81:if(s(t.parent,213)||s(t.parent,212))return a(v(t.parent));break;case 123:if(s(t.parent,152))return a(h(t.parent));break;case 125:case 135:if(s(t.parent,153)||s(t.parent,154))return a(y(t.parent));break;default:if(e.isModifierKind(t.kind)&&t.parent&&(e.isDeclaration(t.parent)||208===t.parent.kind))return a(g(t.kind,t.parent))}}function l(t){function n(t){if(223===t.kind)r.push(t);else if(224===t.kind){var a=t;n(a.catchClause?a.catchClause:a.tryBlock),a.finallyBlock&&n(a.finallyBlock);}else e.isFunctionLike(t)||e.forEachChild(t,n);}var r=[];return n(t),r}function _(t){for(var n=t;n.parent;){var r=n.parent;if(e.isFunctionBlock(r)||265===r.kind)return r;if(224===r.kind){var a=r;if(a.tryBlock===n&&a.catchClause)return n}n=r;}}function d(t){function n(t){218===t.kind||217===t.kind?r.push(t):e.isFunctionLike(t)||e.forEachChild(t,n);}var r=[];return n(t),r}function p(e,t){var n=f(t);return n&&n===e}function f(t){for(var n=t.parent;n;n=n.parent)switch(n.kind){case 221:if(217===t.kind)continue;case 214:case 215:case 216:case 213:case 212:if(!t.label||D(n,t.label.text))return n;break;default:if(e.isFunctionLike(n))return}}function g(t,n){var r=n.parent;if(e.isAccessibilityModifier(t)){if(!(229===r.kind||199===r.kind||146===n.kind&&s(r,152)))return}else if(115===t){if(229!==r.kind&&199!==r.kind)return}else if(84===t||124===t){if(234!==r.kind&&265!==r.kind)return}else{if(117!==t)return;if(229!==r.kind&&229!==n.kind)return}var a,i=[],o=function(t){switch(t){case 114:return 4;case 112:return 8;case 113:return 16;case 115:return 32;case 84:return 1;case 124:return 2;case 117:return 128;default:e.Debug.fail();}}(t);switch(r.kind){case 234:case 265:a=128&o?n.members.concat(n):r.statements;break;case 152:a=r.parameters.concat(r.parent.members);break;case 229:case 199:if(a=r.members,28&o){var c=e.forEach(r.members,function(e){return 152===e.kind&&e});c&&(a=a.concat(c.parameters));}else 128&o&&(a=a.concat(r));break;default:e.Debug.fail(\"Invalid container kind.\");}return e.forEach(a,function(n){e.getModifierFlags(n)&o&&e.forEach(n.modifiers,function(e){return m(i,e,t)});}),i}function m(t,n){for(var r=[],a=2;a<arguments.length;a++)r[a-2]=arguments[a];return!(!n||!e.contains(r,n.kind))&&(t.push(n),!0)}function y(t){function n(t,n){var a=e.getDeclarationOfKind(t,n);a&&e.forEach(a.getChildren(),function(e){return m(r,e,125,135)});}var r=[];return n(t.symbol,153),n(t.symbol,154),r}function h(t){var n=t.symbol.getDeclarations(),r=[];return e.forEach(n,function(t){e.forEach(t.getChildren(),function(e){return m(r,e,123)});}),r}function v(t){var n=[];if(m(n,t.getFirstToken(),88,106,81)&&212===t.kind)for(var r=t.getChildren(),a=r.length-1;a>=0&&!m(n,r[a],106);a--);var i=d(t.statement);return e.forEach(i,function(e){p(t,e)&&m(n,e.getFirstToken(),72,77);}),n}function b(e){var t=f(e);if(t)switch(t.kind){case 214:case 215:case 216:case 212:case 213:return v(t);case 221:return x(t)}}function x(t){var n=[];return m(n,t.getFirstToken(),98),e.forEach(t.caseBlock.clauses,function(r){m(n,r.getFirstToken(),73,79);var a=d(r);e.forEach(a,function(e){p(t,e)&&m(n,e.getFirstToken(),72);});}),n}function k(t,n){var r=[];return m(r,t.getFirstToken(),102),t.catchClause&&m(r,t.catchClause.getFirstToken(),74),t.finallyBlock&&m(r,e.findChildOfKind(t,87,n),87),r}function S(t){var n=_(t);if(n){var r=[];return e.forEach(l(n),function(e){m(r,e.getFirstToken(),100);}),e.isFunctionBlock(n)&&e.forEachReturnStatement(n,function(e){m(r,e.getFirstToken(),96);}),r}}function T(t){var n=e.getContainingFunction(t);if(n&&s(n.body,207)){var r=[];return e.forEachReturnStatement(n.body,function(e){m(r,e.getFirstToken(),96);}),e.forEach(l(n.body),function(e){m(r,e.getFirstToken(),100);}),r}}function C(t,n){for(var a=[];s(t.parent,211)&&t.parent.elseStatement===t;)t=t.parent;for(;t;){var i=t.getChildren();m(a,i[0],90);for(c=i.length-1;c>=0&&!m(a,i[c],82);c--);if(!s(t.elseStatement,211))break;t=t.elseStatement;}for(var o=[],c=0;c<a.length;c++){if(82===a[c].kind&&c<a.length-1){for(var u=a[c],l=a[c+1],_=!0,d=l.getStart()-1;d>=u.end;d--)if(!e.isWhiteSpaceSingleLine(n.text.charCodeAt(d))){_=!1;break}if(_){o.push({fileName:n.fileName,textSpan:e.createTextSpanFromBounds(u.getStart(),l.end),kind:\"reference\"}),c++;continue}}o.push(r(a[c],n));}return o}function D(e,t){for(var n=e.parent;222===n.kind;n=n.parent)if(n.label.text===t)return!0;return!1}t.getDocumentHighlights=n;}(e.DocumentHighlights||(e.DocumentHighlights={}));}(r||(r={}));!function(e){function t(t,n){function r(e){return\"_\"+e.target+\"|\"+e.module+\"|\"+e.noResolve+\"|\"+e.jsx+\"|\"+e.allowJs+\"|\"+e.baseUrl+\"|\"+JSON.stringify(e.typeRoots)+\"|\"+JSON.stringify(e.rootDirs)+\"|\"+JSON.stringify(e.paths)}function a(t,n){var r=p.get(t);return!r&&n&&p.set(t,r=e.createFileMap()),r}function i(){var t=e.arrayFrom(p.keys()).filter(function(e){return e&&\"_\"===e.charAt(0)}).map(function(e){var t=[];return p.get(e).forEachValue(function(e,n){t.push({name:e,refCount:n.languageServiceRefCount,references:n.owners.slice(0)});}),t.sort(function(e,t){return t.refCount-e.refCount}),{bucket:e,sourceFiles:t}});return JSON.stringify(t,void 0,2)}function o(t,a,i,o,c){return s(t,e.toPath(t,n,f),a,r(a),i,o,c)}function s(e,t,n,r,a,i,o){return l(e,t,n,r,a,i,!0,o)}function c(t,a,i,o,s){return u(t,e.toPath(t,n,f),a,r(a),i,o,s)}function u(e,t,n,r,a,i,o){return l(e,t,n,r,a,i,!1,o)}function l(t,n,r,i,o,s,c,u){var l=a(i,!0),_=l.get(n);return _?_.sourceFile.version!==s&&(_.sourceFile=e.updateLanguageServiceSourceFile(_.sourceFile,o,s,o.getChangeRange(_.sourceFile.scriptSnapshot))):(e.Debug.assert(c,\"How could we be trying to update a document that the registry doesn't have?\"),_={sourceFile:e.createLanguageServiceSourceFile(t,o,r.target,s,!1,u),languageServiceRefCount:0,owners:[]},l.set(n,_)),c&&_.languageServiceRefCount++,_.sourceFile}function _(t,a){return d(e.toPath(t,n,f),r(a))}function d(t,n){var r=a(n,!1);e.Debug.assert(void 0!==r);var i=r.get(t);i.languageServiceRefCount--,e.Debug.assert(i.languageServiceRefCount>=0),0===i.languageServiceRefCount&&r.remove(t);}void 0===n&&(n=\"\");var p=e.createMap(),f=e.createGetCanonicalFileName(!!t);return{acquireDocument:o,acquireDocumentWithKey:s,updateDocument:c,updateDocumentWithKey:u,releaseDocument:_,releaseDocumentWithKey:d,reportStats:i,getKeyForCompilationSettings:r}}e.createDocumentRegistry=t;}(r||(r={}));!function(e){!function(n){function r(e,n,r){var o=c(e,n,r);return function(s,c,u){var l=a(e,o,c,n,r),_=l.directImports,d=l.indirectUsers;return t({indirectUsers:d},i(_,s,c.exportKind,n,u))}}function a(t,n,r,a,i){function s(t){var n=_(t);if(n)for(var r=0,o=n;r<o.length;r++){var l=o[r];if(f(l))switch(i.throwIfCancellationRequested(),l.kind){case 181:if(!y){var d=l.parent;if(2===p&&226===d.kind){var g=d.name;if(71===g.kind){m.push(g);break}}u(l.getSourceFile());}break;case 237:c(l,l.name,e.hasModifier(l,1));break;case 238:var h=l.importClause&&l.importClause.namedBindings;h&&240===h.kind?c(l,h.name):m.push(l);break;case 244:l.exportClause?m.push(l):s(v(l,a));}}}function c(t,n,r){if(2===p)m.push(t);else if(!y){var i=b(t);e.Debug.assert(265===i.kind||233===i.kind),r||o(i,n,a)?l(i):u(i);}}function u(t){e.Debug.assert(!y);var n=g(t);return n&&h.push(t),n}function l(t){if(u(t)){var n=a.getMergedSymbol(t.symbol);e.Debug.assert(!!(1536&n.flags));var r=_(n);if(r)for(var i=0,o=r;i<o.length;i++)l(b(o[i]));}}function _(t){return n.get(e.getSymbolId(t).toString())}var d=r.exportingModuleSymbol,p=r.exportKind,f=e.nodeSeenTracker(),g=e.nodeSeenTracker(),m=[],y=!!d.globalExports,h=y?void 0:[];return s(d),{directImports:m,indirectUsers:function(){if(y)return t;for(var n=0,r=d.declarations;n<r.length;n++){var a=r[n];e.isExternalModuleAugmentation(a)&&u(a);}return h.map(e.getSourceFileOfNode)}()}}function i(t,n,r,a,i){function o(e,t){l.push([e,t]);}function s(e){2!==r||i&&e.text!==u||o(e,a.getSymbolAtLocation(e));}function c(e){if(e)for(var t=0,n=e.elements;t<n.length;t++){var r=n[t],s=r.name,c=r.propertyName;(c||s).text===u&&(c?(_.push(c),i||o(s,a.getSymbolAtLocation(s))):o(s,246===r.kind&&r.propertyName?a.getExportSpecifierLocalTargetSymbol(r):a.getSymbolAtLocation(s)));}}var u=n.name,l=[],_=[];if(t)for(var d=0,p=t;d<p.length;d++)!function(t){if(237!==t.kind)if(71!==t.kind){if(9===t.moduleSpecifier.kind)if(244!==t.kind){if(t.importClause){var l=t.importClause,_=l.namedBindings;if(_&&240===_.kind)s(_.name);else if(0===r)c(_);else{var d=l.name;!d||i&&d.text!==y(n)||o(d,a.getSymbolAtLocation(d)),i||1!==r||(e.Debug.assert(\"default\"===u),c(_));}}}else c(t.exportClause);}else s(t);else k(t)&&s(t.name);}(p[d]);return{importSearches:l,singleReferences:_}}function o(e,t,n){var r=n.getSymbolAtLocation(t);return u(e,function(e){if(244===e.kind){var t=e,a=t.exportClause;if(!t.moduleSpecifier&&a)for(var i=0,o=a.elements;i<o.length;i++){var s=o[i];if(n.getExportSpecifierLocalTargetSymbol(s)===r)return!0}}})}function s(e,t,n){for(var r=[],a=e.getTypeChecker(),i=0,o=t;i<o.length;i++){var s=o[i],c=n.valueDeclaration;if(265===c.kind){for(var u=0,_=s.referencedFiles;u<_.length;u++){f=_[u];e.getSourceFileFromReference(s,f)===c&&r.push({kind:\"reference\",referencingFile:s,ref:f});}for(var d=0,p=s.typeReferenceDirectives;d<p.length;d++){var f=p[d],g=e.getResolvedTypeReferenceDirectives().get(f.fileName);void 0!==g&&g.resolvedFileName===c.fileName&&r.push({kind:\"reference\",referencingFile:s,ref:f});}}l(s,function(e,t){a.getSymbolAtLocation(t)===n&&r.push({kind:\"import\",literal:t});});}return r}function c(t,n,r){for(var a=e.createMap(),i=0,o=t;i<o.length;i++){var s=o[i];r.throwIfCancellationRequested(),l(s,function(t,r){var i=n.getSymbolAtLocation(r);if(i){var o=e.getSymbolId(i).toString(),s=a.get(o);s||a.set(o,s=[]),s.push(t);}});}return a}function u(t,n){return e.forEach(265===t.kind?t.statements:t.body.statements,function(t){return n(t)||x(t)&&e.forEach(t.body&&t.body.statements,n)})}function l(e,t){if(e.externalModuleIndicator||void 0!==e.imports)for(var n=0,r=e.imports;n<r.length;n++){var a=r[n];t(_(a),a);}else u(e,function(e){switch(e.kind){case 244:case 238:(n=e).moduleSpecifier&&9===n.moduleSpecifier.kind&&t(n,n.moduleSpecifier);break;case 237:var n=e,r=n.moduleReference;248===r.kind&&9===r.expression.kind&&t(n,r.expression);}});}function _(t){var n=t.parent;switch(n.kind){case 181:case 238:case 244:return n;case 248:return n.parent;default:e.Debug.fail(\"Unexpected module specifier parent: \"+n.kind);}}function d(n,r,a,i){function o(){function t(t){var n=t.symbol.parent;return e.Debug.assert(!!n),{kind:1,symbol:r,exportInfo:{exportingModuleSymbol:n,exportKind:2}}}function o(t,n){var i;switch(e.getSpecialPropertyAssignmentKind(t)){case 1:i=0;break;case 2:i=2;break;default:return}var o=n?a.getSymbolAtLocation(t.left.name):r;return o&&s(o,i)}var u=n.parent;if(7340032&r.flags){if(179===u.kind)return r.declarations.some(function(e){return e===u})&&e.isBinaryExpression(u.parent)?o(u.parent,!1):void 0;var l=r.exportSymbol;return e.Debug.assert(!!l),s(l,c(u))}var _=f(u);if(_&&e.hasModifier(_,1)){if(e.isImportEqualsDeclaration(_)&&_.moduleReference===n){if(i)return;return{kind:0,symbol:a.getSymbolAtLocation(_.name),isNamedImport:!1}}return s(r,c(_))}return e.isExportAssignment(u)?t(u):e.isExportAssignment(u.parent)?t(u.parent):e.isBinaryExpression(u)?o(u,!0):e.isBinaryExpression(u.parent)?o(u.parent,!0):void 0}function s(e,t){var n=m(e,t,a);return n&&{kind:1,symbol:e,exportInfo:n}}function c(t){return e.hasModifier(t,512)?1:0}return i?o():o()||function(){var e=g(n);if(e){var i=a.getImmediateAliasedSymbol(r);if(i)return\"export=\"===(i=h(i,a)).name&&(i=p(i,a)),y(i)===r.name?t({kind:0,symbol:i},e):void 0}}()}function p(t,n){if(8388608&t.flags)return n.getImmediateAliasedSymbol(t);var r=t.valueDeclaration;return e.isExportAssignment(r)?r.expression.symbol:e.isBinaryExpression(r)?r.right.symbol:void e.Debug.fail()}function f(e){if(226===e.kind){var t=e;return 260===t.parent.kind?void 0:208===t.parent.parent.kind?t.parent.parent:void 0}return e}function g(t){var n=t.parent;switch(n.kind){case 237:return n.name===t&&k(n)?{isNamedImport:!1}:void 0;case 242:return n.propertyName?void 0:{isNamedImport:!0};case 239:case 240:return e.Debug.assert(n.name===t),{isNamedImport:!1};default:return}}function m(t,n,r){var a=r.getMergedSymbol(t.parent);return e.isExternalModuleSymbol(a)?{exportingModuleSymbol:a,exportKind:n}:void 0}function y(t){return\"default\"!==t.name?t.name:e.forEach(t.declarations,function(t){if(e.isExportAssignment(t))return e.isIdentifier(t.expression)?t.expression.text:void 0;var n=e.getNameOfDeclaration(t);return n&&71===n.kind&&n.text})}function h(t,n){if(t.declarations)for(var r=0,a=t.declarations;r<a.length;r++){var i=a[r];if(e.isExportSpecifier(i)&&!i.propertyName&&!i.parent.parent.moduleSpecifier)return n.getExportSpecifierLocalTargetSymbol(i)}return t}function v(e,t){return t.getMergedSymbol(b(e).symbol)}function b(t){if(181===t.kind)return t.getSourceFile();var n=t.parent;return 265===n.kind?n:(e.Debug.assert(234===n.kind&&x(n.parent)),n.parent)}function x(e){return 233===e.kind&&9===e.name.kind}function k(e){var t=e.moduleReference;return 248===t.kind&&9===t.expression.kind}n.createImportTracker=r;!function(e){e[e.Named=0]=\"Named\",e[e.Default=1]=\"Default\",e[e.ExportEquals=2]=\"ExportEquals\";}(n.ExportKind||(n.ExportKind={}));!function(e){e[e.Import=0]=\"Import\",e[e.Export=1]=\"Export\";}(n.ImportExport||(n.ImportExport={})),n.findModuleReferences=s,n.getImportOrExportSymbol=d,n.getExportInfo=m;}(e.FindAllReferences||(e.FindAllReferences={}));}(r||(r={}));!function(e){!function(n){function r(e,t){return{type:\"node\",node:e,isInString:t}}function a(e,t,n,r,a){var i=u(e,t,n,r,a);if(i&&i.length){for(var o=[],s=e.getTypeChecker(),c=0,l=i;c<l.length;c++){var d=l[c],f=d.definition,g=d.references;f&&o.push({definition:_(f,s),references:g.map(p)});}return o}}function i(t,n,r,a,i){var s=o(t,n,r,e.getTouchingPropertyName(a,i,!1)),c=t.getTypeChecker();return e.map(s,function(e){return f(e,c)})}function o(t,a,i,o){if(265!==o.kind){var s=t.getTypeChecker();if(262===o.parent.kind){var u=[];return n.Core.getReferenceEntriesForShorthandPropertyAssignment(o,s,function(e){return u.push(r(e))}),u}if(97===o.kind||e.isSuperProperty(o.parent)){var l=s.getSymbolAtLocation(o);return l.valueDeclaration&&[r(l.valueDeclaration)]}return c(o,t,i,a,{implementations:!0})}}function s(t,n,r,a,i,o){var s=l(u(t,n,r,a,i,o));return e.map(s,p)}function c(e,t,r,a,i){return void 0===i&&(i={}),l(n.Core.getReferencedSymbolsForNode(e,t,r,a,i))}function u(t,r,a,i,o,s){var c=e.getTouchingPropertyName(i,o,!0);return n.Core.getReferencedSymbolsForNode(c,t,a,r,s)}function l(t){return t&&e.flatMap(t,function(e){return e.references})}function _(t,n){var r=function(){switch(t.type){case\"symbol\":var r=t.symbol,a=t.node,i=d(r,a,n),o=i.displayParts,s=i.kind;return{node:a,name:o.map(function(e){return e.text}).join(\"\"),kind:s,displayParts:o};case\"label\":var c=t.node;return{node:c,name:c.text,kind:\"label\",displayParts:[e.displayPart(c.text,e.SymbolDisplayPartKind.text)]};case\"keyword\":var u=t.node,l=e.tokenToString(u.kind);return{node:u,name:l,kind:\"keyword\",displayParts:[{text:l,kind:\"keyword\"}]};case\"this\":var _=t.node;return{node:_,name:\"this\",kind:\"var\",displayParts:(r=n.getSymbolAtLocation(_))&&e.SymbolDisplay.getSymbolDisplayPartsDocumentationAndSymbolKind(n,r,_.getSourceFile(),e.getContainerNode(_),_).displayParts};case\"string\":var p=t.node;return{node:p,name:p.text,kind:\"var\",displayParts:[e.displayPart(e.getTextOfNode(p),e.SymbolDisplayPartKind.stringLiteral)]}}}();if(r){var a=r.node,i=r.name,o=r.kind,s=r.displayParts,c=a.getSourceFile();return{containerKind:\"\",containerName:\"\",fileName:c.fileName,kind:o,name:i,textSpan:e.createTextSpanFromNode(a,c),displayParts:s}}}function d(t,n,r){var a=e.SymbolDisplay.getSymbolDisplayPartsDocumentationAndSymbolKind(r,t,n.getSourceFile(),e.getContainerNode(n),n);return{displayParts:a.displayParts,kind:a.symbolKind}}function p(t){if(\"span\"===t.type)return{textSpan:t.textSpan,fileName:t.fileName,isWriteAccess:!1,isDefinition:!1};var n=t.node,r=t.isInString;return{fileName:n.getSourceFile().fileName,textSpan:y(n),isWriteAccess:h(n),isDefinition:e.isAnyDeclarationName(n)||e.isLiteralComputedPropertyDeclarationName(n),isInString:r}}function f(e,n){if(\"node\"===e.type){var r=e.node;return t({textSpan:y(r),fileName:r.getSourceFile().fileName},g(r,n))}return{textSpan:e.textSpan,fileName:e.fileName,kind:\"\",displayParts:[]}}function g(t,n){var r=n.getSymbolAtLocation(e.isDeclaration(t)&&t.name?t.name:t);return r?d(r,t,n):178===t.kind?{kind:\"interface\",displayParts:[e.punctuationPart(19),e.textPart(\"object literal\"),e.punctuationPart(20)]}:199===t.kind?{kind:\"local class\",displayParts:[e.punctuationPart(19),e.textPart(\"anonymous local class\"),e.punctuationPart(20)]}:{kind:e.getNodeKind(t),displayParts:[]}}function m(e){if(\"span\"===e.type)return{fileName:e.fileName,span:{textSpan:e.textSpan,kind:\"reference\"}};var t=e.node,n=e.isInString,r=e.node.getSourceFile().fileName,a=h(t);return{fileName:r,span:{textSpan:y(t),kind:a?\"writtenReference\":\"reference\",isInString:n}}}function y(t){var n=t.getStart(),r=t.getEnd();return 9===t.kind&&(n+=1,r-=1),e.createTextSpanFromBounds(n,r)}function h(t){if(e.isAnyDeclarationName(t))return!0;var n=t.parent;switch(n&&n.kind){case 193:case 192:return!0;case 194:return n.left===t&&e.isAssignmentOperator(n.operatorToken.kind);default:return!1}}n.nodeEntry=r,n.findReferencedSymbols=a,n.getImplementationsAtPosition=i,n.findReferencedEntries=s,n.getReferenceEntriesForNode=c,n.toHighlightSpan=m;}(e.FindAllReferences||(e.FindAllReferences={}));}(r||(r={})),function(e){!function(t){!function(n){function r(e,t,n,r,c){if(void 0===c&&(c={}),265!==e.kind){if(!c.implementations){var u=o(e,n,r);if(u)return u}var l=t.getTypeChecker(),_=l.getSymbolAtLocation(e);if(_)return 1536&_.flags&&a(e)?i(t,_,n):s(_,e,n,l,r,c);if(!c.implementations&&9===e.kind)return z(e,n,r)}}function a(t){if(9!==t.kind)return!1;switch(t.parent.kind){case 233:case 248:case 238:case 244:return!0;case 181:return e.isRequireCall(t.parent,!1)||e.isImportCall(t.parent);default:return!1}}function i(n,r,a){e.Debug.assert(!!r.valueDeclaration);for(var i=t.findModuleReferences(n,a,r).map(function(t){return\"import\"===t.kind?{type:\"node\",node:t.literal}:{type:\"span\",fileName:t.referencingFile.fileName,textSpan:e.createTextSpanFromRange(t.ref)}}),o=0,s=r.declarations;o<s.length;o++){var c=s[o];switch(c.kind){case 265:break;case 233:i.push({type:\"node\",node:c.name});break;default:e.Debug.fail(\"Expected a module symbol to be declared by a SourceFile or ModuleDeclaration.\");}}return[{definition:{type:\"symbol\",symbol:r,node:r.valueDeclaration},references:i}]}function o(t,n,r){if(e.isTypeKeyword(t.kind))return v(n,t.kind,r);if(e.isLabelName(t)){if(e.isJumpStatementTarget(t)){var a=e.getTargetLabel(t.parent,t.text);return a&&y(a.parent,a)}return y(t.parent,t)}return e.isThis(t)?J(t,n,r):97===t.kind?j(t):void 0}function s(t,n,r,a,i,o){t=c(t,n,a);var s=H(e.getMeaningFromLocation(n),t.declarations),u=[],l=new ne(r,123===n.kind,a,i,s,o,u),d=l.createSearch(n,t,void 0,{allSearchSymbols:U(t,n,a,o.implementations)}),p=g(t);if(p)k(p,p.getSourceFile(),d,l);else for(var f=0,m=l.sourceFiles;f<m.length;f++){var y=m[f];l.cancellationToken.throwIfCancellationRequested(),_(y,d,l);}return u}function c(t,n,r){var a=n.parent;return e.isExportSpecifier(a)?C(n,t,a,r):e.isImportSpecifier(a)&&a.propertyName===n?r.getImmediateAliasedSymbol(t):t}function u(e,t,n,r){var a=r.getImportSearches(t,n),i=a.importSearches,o=a.singleReferences,s=a.indirectUsers;if(o.length)for(var c=r.referenceAdder(t,e),u=0,l=o;u<l.length;u++)c(l[u]);for(var d=0,p=i;d<p.length;d++){var f=p[d],g=f[0],m=f[1];x(g.getSourceFile(),r.createSearch(g,m,1),r);}if(s.length){var y=void 0;switch(n.exportKind){case 0:y=r.createSearch(e,t,1);break;case 1:y=r.options.isForRename?void 0:r.createSearch(e,t,1,{text:\"default\"});}if(y)for(var h=0,v=s;h<v.length;h++)_(v[h],y,r);}}function l(e,t){for(var n=0,r=e.declarations;n<r.length;n++){var a=r[n];x(a.getSourceFile(),t.createSearch(a,e,0),t);}}function _(t,n,r){void 0!==e.getNameTable(t).get(n.escapedText)&&x(t,n,r);}function d(t,n){return e.isArrayLiteralOrObjectLiteralDestructuringPattern(t.parent.parent)&&n.getPropertySymbolOfDestructuringAssignment(t)}function p(t){var n=e.getDeclarationOfKind(t,176);return n&&174===n.parent.kind&&!n.propertyName}function f(t,n){if(p(t)){var r=e.getDeclarationOfKind(t,176),a=n.getTypeAtLocation(r.parent);return a&&n.getPropertyOfType(a,r.name.text)}}function g(t){var n=t.declarations,r=t.flags,a=t.parent,i=t.valueDeclaration;if(i&&(186===i.kind||199===i.kind))return i;if(n)if(8196&r){var o=e.find(n,function(t){return e.hasModifier(t,8)});if(o)return e.getAncestor(o,229)}else if(!p(t)&&(!a||1536&a.flags&&e.isExternalModuleSymbol(a)&&!a.globalExports)){for(var s,c=0,u=n;c<u.length;c++){var l=u[c],_=e.getContainerNode(l);if(s&&s!==_)return;if(!_||265===_.kind&&!e.isExternalOrCommonJsModule(_))return;s=_;}return a?s.getSourceFile():s}}function m(t,n,r){void 0===r&&(r=t);var a=[];if(!n||!n.length)return a;for(var i=t.text,o=i.length,s=n.length,c=i.indexOf(n,r.pos);c>=0&&!(c>r.end);){var u=c+s;0!==c&&e.isIdentifierPart(i.charCodeAt(c-1),5)||u!==o&&e.isIdentifierPart(i.charCodeAt(u),5)||a.push(c),c=i.indexOf(n,c+s+1);}return a}function y(n,r){for(var a=[],i=n.getSourceFile(),o=r.text,s=0,c=m(i,o,n);s<c.length;s++){var u=c[s],l=e.getTouchingWord(i,u,!1);l&&(l===r||e.isJumpStatementTarget(l)&&e.getTargetLabel(l,o)===r)&&a.push(t.nodeEntry(l));}return[{definition:{type:\"label\",node:r},references:a}]}function h(t,n){switch(t&&t.kind){case 71:return e.unescapeIdentifier(t.text).length===n.length;case 9:return(e.isLiteralNameOfPropertyDeclarationOrIndexAccess(t)||ee(t))&&t.text.length===n.length;case 8:return e.isLiteralNameOfPropertyDeclarationOrIndexAccess(t)&&t.text.length===n.length;default:return!1}}function v(t,n,r){for(var a=[],i=0,o=t;i<o.length;i++){var s=o[i];r.throwIfCancellationRequested(),b(s,n,e.tokenToString(n),a);}return a.length?[{definition:{type:\"keyword\",node:a[0].node},references:a}]:void 0}function b(n,r,a,i){for(var o=0,s=m(n,a,n);o<s.length;o++){var c=s[o],u=e.getTouchingPropertyName(n,c,!0);u.kind===r&&i.push(t.nodeEntry(u));}}function x(e,t,n){return n.cancellationToken.throwIfCancellationRequested(),k(e,e,t,n)}function k(e,t,n,r){if(r.markSearchedSymbol(t,n.symbol))for(var a=0,i=m(t,n.text,e);a<i.length;a++)S(t,i[a],n,r);}function S(t,n,r,a){var i=e.getTouchingPropertyName(t,n,!0);if(h(i,r.text)){if(e.getMeaningFromLocation(i)&a.searchMeaning){var o=a.checker.getSymbolAtLocation(i);if(o){var s=i.parent;if(!e.isImportSpecifier(s)||s.propertyName!==i){if(e.isExportSpecifier(s))return e.Debug.assert(71===i.kind),void T(i,o,s,r,a);var c=V(r,o,i,a);c?(a.isForConstructor?w(i,t,r,a):A(i,c,r.location,a),E(i,o,r,a)):N(o,r,a);}}}}else!a.options.implementations&&(a.options.findInStrings&&e.isInString(t,n)||a.options.findInComments&&e.isInNonReferenceComment(t,n))&&a.addStringOrCommentReference(t.fileName,e.createTextSpan(n,r.text.length));}function T(n,r,a,i,o){function s(){A(n,f,i.location,o);}var c=a.parent,_=a.propertyName,d=a.name,p=c.parent,f=C(n,r,a,o.checker);if(i.includes(f)){if(_?n===_?(p.moduleSpecifier||s(),!o.options.isForRename&&o.markSeenReExportRHS(d)&&A(d,r,d,o)):o.markSeenReExportRHS(n)&&s():s(),n!==_||!o.options.isForRename){var g=79===n.originalKeywordKind?1:0,m=t.getExportInfo(r,g,o.checker);e.Debug.assert(!!m),u(n,r,m,o);}1!==i.comingFrom&&p.moduleSpecifier&&!_&&l(o.checker.getExportSpecifierLocalTargetSymbol(a),o);}}function C(e,t,n,r){return D(e,n)?r.getExportSpecifierLocalTargetSymbol(n):t}function D(t,n){var r=n.parent,a=n.propertyName,i=n.name;return e.Debug.assert(a===t||i===t),a?a===t:!r.parent.moduleSpecifier}function E(e,n,r,a){var i=t.getImportOrExportSymbol(e,n,a.checker,1===r.comingFrom);if(i){var o=i.symbol;0===i.kind?a.options.isForRename&&!i.isNamedImport||l(o,a):u(e,o,i.exportInfo,a);}}function N(t,n,r){var a=t.flags,i=t.valueDeclaration,o=r.checker.getShorthandAssignmentValueSymbol(i);134217728&a||!n.includes(o)||A(e.getNameOfDeclaration(i),o,n.location,r);}function A(e,t,n,r){var a=r.referenceAdder(t,n);r.options.implementations?I(e,a,r):a(e);}function w(t,n,r,a){e.isNewExpressionTarget(t)&&A(t,r.symbol,r.location,a);var i=a.referenceAdder(r.symbol,r.location);if(e.isClassLike(t.parent))e.Debug.assert(t.parent.name===t),O(r.symbol,n,i);else{var o=Z(t);o&&e.isClassLike(o)&&F(o,i);}}function P(t){return e.isRightSideOfPropertyAccess(t)&&t.parent}function O(t,n,r){for(var a=0,i=t.members.get(\"__constructor\").declarations;a<i.length;a++){var o=i[a],s=e.findChildOfKind(o,123,n);e.Debug.assert(152===o.kind&&!!s),r(s);}t.exports.forEach(function(t){var n=t.valueDeclaration;if(n&&151===n.kind){var a=n.body;a&&Q(a,99,function(t){e.isNewExpressionTarget(t)&&r(t);});}});}function F(t,n){var r=t.symbol.members.get(\"__constructor\");if(r)for(var a=0,i=r.declarations;a<i.length;a++){var o=i[a];e.Debug.assert(152===o.kind);var s=o.body;s&&Q(s,97,function(t){e.isCallExpressionTarget(t)&&n(t);});}}function I(t,n,r){if(e.isDeclarationName(t)&&G(t.parent))n(t.parent);else if(71===t.kind){262===t.parent.kind&&Y(t,r.checker,n);var a=L(t);if(a)n(a);else{var i=R(t);if(i&&r.markSeenContainingTypeReference(i)){var o=i.parent;e.isVariableLike(o)&&o.type===i&&o.initializer&&B(o.initializer)?n(o.initializer):e.isFunctionLike(o)&&o.type===i&&o.body?207===o.body.kind?e.forEachReturnStatement(o.body,function(e){e.expression&&B(e.expression)&&n(e.expression);}):B(o.body)&&n(o.body):e.isAssertionExpression(o)&&B(o.expression)&&n(o.expression);}}}}function M(e,t){void 0===t&&(t=[]);for(var n=0,r=e.types;n<r.length;n++){var a=r[n];a.symbol&&96&a.symbol.getFlags()&&t.push(a.symbol),196608&a.getFlags()&&M(a,t);}return t}function R(t){for(var n=void 0;t;)e.isTypeNode(t)&&(n=t),t=t.parent;return n}function L(t){if(t&&t.parent){if(201===t.kind&&259===t.parent.kind&&e.isClassLike(t.parent.parent))return t.parent.parent;if(71===t.kind||179===t.kind)return L(t.parent)}}function B(e){switch(e.kind){case 185:return B(e.expression);case 187:case 186:case 178:case 199:case 177:return!0;default:return!1}}function K(t,n,r,a){function i(t){if(t===n)return!0;var a=e.getSymbolId(t)+\",\"+e.getSymbolId(n),i=r.get(a);if(void 0!==i)return i;r.set(a,!1);var c=e.forEach(t.getDeclarations(),function(t){if(e.isClassLike(t)){if(s){var n=e.getClassImplementsHeritageClauseElements(t);if(n)for(var r=0,a=n;r<a.length;r++)if(o(a[r]))return!0}return o(e.getClassExtendsHeritageClauseElement(t))}return!(230!==t.kind||!s)&&e.forEach(e.getInterfaceBaseTypeNodes(t),o)});return r.set(a,c),c}function o(e){if(e){var t=a.getTypeAtLocation(e);if(t&&t.symbol)return i(t.symbol)}return!1}var s=64&n.getFlags();return i(t)}function j(n){var r=e.getSuperContainer(n,!1);if(r){var a=32;switch(r.kind){case 149:case 148:case 151:case 150:case 152:case 153:case 154:a&=e.getModifierFlags(r),r=r.parent;break;default:return}for(var i=[],o=r.getSourceFile(),s=0,c=m(o,\"super\",r);s<c.length;s++){var u=c[s],l=e.getTouchingWord(o,u,!1);if(l&&97===l.kind){var _=e.getSuperContainer(l,!1);_&&(32&e.getModifierFlags(_))===a&&_.parent.symbol===r.symbol&&i.push(t.nodeEntry(l));}}return[{definition:{type:\"symbol\",symbol:r.symbol,node:n},references:i}]}}function J(n,r,a){function i(n,r,a,i){e.forEach(a,function(a){var o=e.getTouchingWord(n,a,!1);if(o&&e.isThis(o)){var c=e.getThisContainer(o,!1);switch(r.kind){case 186:case 228:r.symbol===c.symbol&&i.push(t.nodeEntry(o));break;case 151:case 150:e.isObjectLiteralMethod(r)&&r.symbol===c.symbol&&i.push(t.nodeEntry(o));break;case 199:case 229:c.parent&&r.symbol===c.parent.symbol&&(32&e.getModifierFlags(c))===s&&i.push(t.nodeEntry(o));break;case 265:265!==c.kind||e.isExternalModule(c)||i.push(t.nodeEntry(o));}}});}var o=e.getThisContainer(n,!1),s=32;switch(o.kind){case 151:case 150:if(e.isObjectLiteralMethod(o))break;case 149:case 148:case 152:case 153:case 154:s&=e.getModifierFlags(o),o=o.parent;break;case 265:if(e.isExternalModule(o))return;case 228:case 186:break;default:return}var c,u=[];if(265===o.kind)e.forEach(r,function(e){a.throwIfCancellationRequested(),i(e,e,c=m(e,\"this\"),u);});else{var l=o.getSourceFile();i(l,o,c=m(l,\"this\",o),u);}return[{definition:{type:\"this\",node:n},references:u}]}function z(n,r,a){for(var i=[],o=0,s=r;o<s.length;o++){var c=s[o];a.throwIfCancellationRequested();var u=m(c,n.text);!function(n,r,a,i){for(var o=0,s=a;o<s.length;o++){var c=s[o],u=e.getTouchingWord(n,c,!1);u&&9===u.kind&&u.text===r&&i.push(t.nodeEntry(u,!0));}}(c,n.text,u,i);}return[{definition:{type:\"string\",node:n},references:i}]}function U(t,n,r,a){var i=[t],o=e.getContainingObjectLiteralElement(n);if(o){if(262!==o.kind){var s=d(n,r);s&&i.push(s);}e.forEach(W(o,r),function(t){e.addRange(i,r.getRootSymbols(t));});var c=r.getShorthandAssignmentValueSymbol(n.parent);c&&i.push(c);}t.valueDeclaration&&146===t.valueDeclaration.kind&&e.isParameterPropertyDeclaration(t.valueDeclaration)&&e.addRange(i,r.getSymbolsOfParameterPropertyDeclaration(t.valueDeclaration,t.name));var u=f(t,r);u&&i.push(u);for(var l=0,_=r.getRootSymbols(t);l<_.length;l++){var p=_[l];p!==t&&i.push(p),!a&&p.parent&&96&p.parent.flags&&q(p.parent,p.getName(),i,e.createMap(),r);}return i}function q(t,n,r,a,i){function o(e){if(e){var o=i.getTypeAtLocation(e);if(o){var s=i.getPropertyOfType(o,n);s&&r.push.apply(r,i.getRootSymbols(s)),a.set(t.name,t),q(o.symbol,n,r,a,i);}}}t&&(a.has(t.name)||96&t.flags&&e.forEach(t.getDeclarations(),function(t){e.isClassLike(t)?(o(e.getClassExtendsHeritageClauseElement(t)),e.forEach(e.getClassImplementsHeritageClauseElements(t),o)):230===t.kind&&e.forEach(e.getInterfaceBaseTypeNodes(t),o);}));}function V(t,n,r,a){if(t.includes(n))return n;var i=e.getContainingObjectLiteralElement(r);if(i){var o=e.forEach(W(i,a.checker),function(n){return e.find(a.checker.getRootSymbols(n),t.includes)});if(o)return o;var s=d(r,a.checker);if(s&&t.includes(s))return s}var c=f(n,a.checker);return c&&t.includes(c)?c:e.forEach(a.checker.getRootSymbols(n),function(n){if(t.includes(n))return n;if(n.parent&&96&n.parent.flags){if(t.parents&&!e.some(t.parents,function(e){return K(n.parent,e,a.inheritsFromCache,a.checker)}))return;var r=[];return q(n.parent,n.getName(),r,e.createMap(),a.checker),e.find(r,t.includes)}})}function $(t){if(144!==t.name.kind)return t.name.text;var n=t.name.expression;return e.isStringOrNumericLiteral(n)?n.text:void 0}function W(t,n){var r=t.parent,a=n.getContextualType(r),i=$(t);if(i&&a){var o=[],s=a.getProperty(i);return s&&o.push(s),65536&a.flags&&e.forEach(a.types,function(e){var t=e.getProperty(i);t&&o.push(t);}),o}}function H(t,n){if(n){var r=void 0;do{r=t;for(var a=0,i=n;a<i.length;a++){var o=i[a],s=e.getMeaningFromDeclaration(o);s&t&&(t|=s);}}while(t!==r)}return t}function G(t){if(!t)return!1;if(e.isVariableLike(t)){if(t.initializer)return!0;if(226===t.kind){var n=X(t);return n&&e.hasModifier(n,2)}}else{if(e.isFunctionLike(t))return!!t.body||e.hasModifier(t,2);switch(t.kind){case 229:case 199:case 232:case 233:return!0}}return!1}function X(t){if(t.parent&&t.parent.parent&&208===t.parent.parent.kind)return e.Debug.assert(227===t.parent.kind),t.parent.parent}function Y(t,n,r){var a=n.getSymbolAtLocation(t),i=n.getShorthandAssignmentValueSymbol(a.valueDeclaration);if(i)for(var o=0,s=i.getDeclarations();o<s.length;o++){var c=s[o];1&e.getMeaningFromDeclaration(c)&&r(c);}}function Q(t,n,r){e.forEachChild(t,function(e){e.kind===n&&r(e),Q(e,n,r);});}function Z(t){return e.tryGetClassExtendingExpressionWithTypeArguments(e.climbPastPropertyAccess(t).parent)}function ee(t){return 9===t.kind&&(e.isNameOfModuleDeclaration(t)||e.isExpressionOfExternalModuleImportEqualsDeclaration(t))}function te(e,t,n){var r=P(e);if(r){var a=n.getTypeAtLocation(r.expression);if(a)return a.symbol&&96&a.symbol.flags&&a.symbol!==t.parent?[a.symbol]:196608&a.flags?M(a):void 0}}n.getReferencedSymbolsForNode=r;var ne=function(){function n(t,n,r,a,i,o,s){this.sourceFiles=t,this.isForConstructor=n,this.checker=r,this.cancellationToken=a,this.searchMeaning=i,this.options=o,this.result=s,this.inheritsFromCache=e.createMap(),this.markSeenContainingTypeReference=e.nodeSeenTracker(),this.markSeenReExportRHS=e.nodeSeenTracker(),this.symbolIdToReferences=[],this.sourceFileToSeenSymbols=[];}return n.prototype.getImportSearches=function(e,n){return this.importTracker||(this.importTracker=t.createImportTracker(this.sourceFiles,this.checker,this.cancellationToken)),this.importTracker(e,n,this.options.isForRename)},n.prototype.createSearch=function(t,n,r,a){void 0===a&&(a={});var i=a.text,o=void 0===i?e.stripQuotes(e.getDeclaredName(this.checker,n,t)):i,s=a.allSearchSymbols,c=void 0===s?void 0:s,u=e.escapeIdentifier(o),l=this.options.implementations&&te(t,n,this.checker);return{location:t,symbol:n,comingFrom:r,text:o,escapedText:u,parents:l,includes:function(t){return c?e.contains(c,t):t===n}}},n.prototype.referenceAdder=function(n,r){var a=e.getSymbolId(n),i=this.symbolIdToReferences[a];return i||(i=this.symbolIdToReferences[a]=[],this.result.push({definition:{type:\"symbol\",symbol:n,node:r},references:i})),function(e){return i.push(t.nodeEntry(e))}},n.prototype.addStringOrCommentReference=function(e,t){this.result.push({definition:void 0,references:[{type:\"span\",fileName:e,textSpan:t}]});},n.prototype.markSearchedSymbol=function(t,n){var r=e.getNodeId(t),a=e.getSymbolId(n),i=this.sourceFileToSeenSymbols[r]||(this.sourceFileToSeenSymbols[r]=[]);return!i[a]&&(i[a]=!0)},n}();n.getReferenceEntriesForShorthandPropertyAssignment=Y;}(t.Core||(t.Core={}));}(e.FindAllReferences||(e.FindAllReferences={}));}(r||(r={}));!function(e){!function(t){function n(t,n,r){var o=_(n.referencedFiles,r);if(o&&(p=e.tryResolveScriptReference(t,n,o)))return[d(o.fileName,p.fileName)];var u=_(n.typeReferenceDirectives,r);if(u){var p=t.getResolvedTypeReferenceDirectives().get(u.fileName);return p&&p.resolvedFileName&&[d(u.fileName,p.resolvedFileName)]}var f=e.getTouchingPropertyName(n,r,!0);if(f!==n){if(e.isJumpStatementTarget(f)){var m=f.text,y=e.getTargetLabel(f.parent,f.text);return y?[c(y,\"label\",m,void 0)]:void 0}var h=t.getTypeChecker(),v=g(h,f);if(v)return[l(h,v)];var b=h.getSymbolAtLocation(f);if(b){if(8388608&b.flags&&a(f,b.declarations[0])){var x=h.getAliasedSymbol(b);x.declarations&&(b=x);}if(262===f.parent.kind){var k=h.getShorthandAssignmentValueSymbol(b.valueDeclaration);if(!k)return[];var S=k.getDeclarations(),T=e.SymbolDisplay.getSymbolKind(h,k,f),C=h.symbolToString(k),D=h.symbolToString(b.parent,f);return e.map(S,function(e){return s(e,T,C,D)})}var E=e.getContainingObjectLiteralElement(f);return E&&h.getContextualType(E.parent)?e.flatMap(e.getPropertySymbolsFromContextualType(h,E),function(e){return i(h,e,f)}):i(h,b,f)}}}function r(t,n,r){var a=e.getTouchingPropertyName(n,r,!0);if(a!==n){var o=t.getSymbolAtLocation(a);if(o){var s=t.getTypeOfSymbolAtLocation(o,a);if(s){if(65536&s.flags&&!(16&s.flags)){var c=[];return e.forEach(s.types,function(n){n.symbol&&e.addRange(c,i(t,n.symbol,a));}),c}if(s.symbol)return i(t,s.symbol,a)}}}}function a(e,t){if(71!==e.kind)return!1;if(e.parent===t)return!0;switch(t.kind){case 239:case 237:return!0;case 242:return 241===t.parent.kind;default:return!1}}function i(t,n,r){function a(t,n,r,a,i,c){if(!t)return!1;for(var u,l=[],_=0,d=t;_<d.length;_++){var p=d[_];(n?152===p.kind:o(p))&&(l.push(p),p.body&&(u=p));}return!!l.length&&(c.push(s(u||e.lastOrUndefined(l),r,a,i)),!0)}var i=[],c=n.getDeclarations(),l=u(t,n,r),_=l.symbolName,d=l.symbolKind,p=l.containerName;return function(t,n,r,i,o,s){if((e.isNewExpressionTarget(n)||123===n.kind)&&32&t.flags){for(var c=0,u=t.getDeclarations();c<u.length;c++){var l=u[c];if(e.isClassLike(l))return a(l.members,!0,r,i,o,s)}e.Debug.fail(\"Expected declaration to have at least one class-like declaration\");}return!1}(n,r,d,_,p,i)||function(t,n,r,i,o,s){return!!(e.isCallExpressionTarget(n)||e.isNewExpressionTarget(n)||e.isNameOfFunctionDeclaration(n))&&a(t.declarations,!1,r,i,o,s)}(n,r,d,_,p,i)||e.forEach(c,function(e){i.push(s(e,d,_,p));}),i}function o(e){switch(e.kind){case 152:case 228:case 151:case 150:return!0;default:return!1}}function s(t,n,r,a){return c(e.getNameOfDeclaration(t)||t,n,r,a)}function c(t,n,r,a){var i=t.getSourceFile();return{fileName:i.fileName,textSpan:e.createTextSpanFromNode(t,i),kind:n,name:r,containerKind:void 0,containerName:a}}function u(t,n,r){return{symbolName:t.symbolToString(n),symbolKind:e.SymbolDisplay.getSymbolKind(t,n,r),containerName:n.parent?t.symbolToString(n.parent,r):\"\"}}function l(e,t){var n=u(e,t.symbol,t),r=n.symbolName;return s(t,n.symbolKind,r,n.containerName)}function _(e,t){for(var n=0,r=e;n<r.length;n++){var a=r[n];if(a.pos<=t&&t<=a.end)return a}}function d(t,n){return{fileName:n,textSpan:e.createTextSpanFromBounds(0,0),kind:\"script\",name:t,containerName:void 0,containerKind:void 0}}function p(t){var n=f(t),r=n.parent;return r&&e.isCallLikeExpression(r)&&e.getInvokedExpression(r)===n&&r}function f(t){return e.isRightSideOfPropertyAccess(t)?f(t.parent):t}function g(e,t){var n=p(t),r=n&&e.getResolvedSignature(n);if(r){var a=r.declaration;if(a&&o(a))return a}}t.getDefinitionAtPosition=n,t.getTypeDefinitionAtPosition=r;}(e.GoToDefinition||(e.GoToDefinition={}));}(r||(r={}));!function(e){!function(t){function n(t){var n=[];return a(t,function(t){var r=e.getCommentsFromJSDoc(t);if(r)for(var a=0,i=r;a<i.length;a++){var o=i[a];o&&(n.length&&n.push(e.lineBreakPart()),n.push(e.textPart(o)));}}),n}function r(t){var n=[];return a(t,function(t){var r=e.getJSDocs(t);if(r)for(var a=0,i=r;a<i.length;a++){var o=i[a].tags;o&&n.push.apply(n,o.filter(function(e){return 284===e.kind}).map(function(e){return{name:e.tagName.text,text:e.comment}}));}}),n}function a(t,n){if(t)for(var r=0;r<t.length;r++)if(e.indexOf(t,t[r])===r){var a=n(t[r],r);if(a)return a}}function i(){return _||(_=e.map(p,function(e){return{name:e,kind:\"keyword\",kindModifiers:\"\",sortText:\"0\"}}))}function o(){return d||(d=e.map(p,function(e){return{name:\"@\"+e,kind:\"keyword\",kindModifiers:\"\",sortText:\"0\"}}))}function s(t){var n=t.name.text,r=t.parent,a=r.parent;return e.isFunctionLike(a)?e.mapDefined(a.parameters,function(a){if(e.isIdentifier(a.name)){var i=a.name.text;if(!r.tags.some(function(n){return n!==t&&e.isJSDocParameterTag(n)&&n.name.text===i})&&(void 0===n||e.startsWith(i,n)))return{name:i,kind:\"parameter\",kindModifiers:\"\",sortText:\"0\"}}}):[]}function c(t,n,r){if(!(e.isInString(n,r)||e.isInComment(n,r)||e.hasDocComment(n,r))){var a=e.getTokenAtPosition(n,r,!1),i=a.getStart();if(a&&!(i<r)){var o;e:for(o=a;o;o=o.parent)switch(o.kind){case 228:case 151:case 152:case 229:case 208:break e;case 265:return;case 233:if(233===o.parent.kind)return;break e}if(o&&!(o.getStart()<r)){for(var s=u(o),c=n.getLineAndCharacterOfPosition(r),l=n.getLineStarts()[c.line],_=n.text.substr(l,c.character).replace(/\\S/i,function(){return\" \"}),d=e.hasJavaScriptFileExtension(n.fileName),p=\"\",f=0;f<s.length;f++){var g=s[f].name,m=71===g.kind?g.text:\"param\"+f;p+=d?_+\" * @param {any} \"+m+t:_+\" * @param \"+m+t;}var y=\"/**\"+t+_+\" * \";return{newText:y+t+p+_+\" */\"+(i===r?t+_:\"\"),caretOffset:y.length}}}}}function u(t){if(e.isFunctionLike(t))return t.parameters;if(208===t.kind){var n=t.declarationList.declarations;if(1===n.length&&n[0].initializer)return l(n[0].initializer)}return e.emptyArray}function l(t){for(;185===t.kind;)t=t.expression;switch(t.kind){case 186:case 187:return t.parameters;case 199:for(var n=0,r=t.members;n<r.length;n++){var a=r[n];if(152===a.kind)return a.parameters}}return e.emptyArray}var _,d,p=[\"augments\",\"author\",\"argument\",\"borrows\",\"class\",\"constant\",\"constructor\",\"constructs\",\"default\",\"deprecated\",\"description\",\"event\",\"example\",\"extends\",\"field\",\"fileOverview\",\"function\",\"ignore\",\"inner\",\"lends\",\"link\",\"memberOf\",\"method\",\"name\",\"namespace\",\"param\",\"private\",\"prop\",\"property\",\"public\",\"requires\",\"returns\",\"see\",\"since\",\"static\",\"throws\",\"type\",\"typedef\",\"version\"];t.getJsDocCommentsFromDeclarations=n,t.getJsDocTagsFromDeclarations=r,t.getJSDocTagNameCompletions=i,t.getJSDocTagCompletions=o,t.getJSDocParameterNameCompletions=s,t.getDocCommentTemplateAtPosition=c;}(e.JsDoc||(e.JsDoc={}));}(r||(r={}));!function(e){!function(t){function n(t,n,o,s,c,u,l){function _(e){if(e)for(var t=0,n=e;t<n.length;t++){var r=n[t];f.has(r)||f.set(r,void 0);}}function d(n,r){t.fileExists(n)&&r.push(n);var a=e.readConfigFile(n,function(e){return t.readFile(e)}).config;a.dependencies&&_(e.getOwnKeys(a.dependencies)),a.devDependencies&&_(e.getOwnKeys(a.devDependencies)),a.optionalDependencies&&_(e.getOwnKeys(a.optionalDependencies)),a.peerDependencies&&_(e.getOwnKeys(a.peerDependencies));}function p(n){if(m.push(n),t.directoryExists(n)){for(var r=[],a=0,i=t.readDirectory(n,[\".json\"],void 0,void 0,2);a<i.length;a++){var o=i[a],s=e.normalizePath(o),c=e.getBaseFileName(s);if(\"package.json\"===c||\"bower.json\"===c){var u=e.readConfigFile(s,function(e){return t.readFile(e)}).config;if((\"package.json\"!==c||!u._requiredBy||0!==e.filter(u._requiredBy,function(e){return\"#\"===e[0]||\"/\"===e}).length)&&u.name)if(u.typings){var l=e.getNormalizedAbsolutePath(u.typings,e.getDirectoryPath(s));f.set(u.name,l);}else r.push(u.name);}}_(r);}}var f=e.createMap();if(!u||!u.enable)return{cachedTypingPaths:[],newTypingNames:[],filesToWatch:[]};if(n=e.filter(e.map(n,e.normalizePath),function(t){var n=e.ensureScriptKind(t,e.getScriptKindFromFileName(t));return 1===n||2===n}),!r){var g=e.readConfigFile(s,function(e){return t.readFile(e)});r=e.createMapFromTemplate(g.config);}var m=[],y=[],h=[];_(u.include),h=u.exclude||[];var v=e.map(n,e.getDirectoryPath);o&&v.push(o);for(var b=0,x=y=e.deduplicate(v);b<x.length;b++){var k=x[b];d(e.combinePaths(k,\"package.json\"),m),d(e.combinePaths(k,\"bower.json\"),m),p(e.combinePaths(k,\"bower_components\")),p(e.combinePaths(k,\"node_modules\"));}if(function(t){var n=e.filter(t,e.hasJavaScriptFileExtension),i=e.map(n,function(t){return e.removeFileExtension(e.getBaseFileName(t.toLowerCase()))}),o=e.map(i,function(e){return e.replace(/((?:\\.|-)min(?=\\.|$))|((?:-|\\.)\\d+)/g,\"\")});r!==a&&_(e.mapDefined(o,function(e){return r.get(e)})),e.forEach(t,function(t){return 2===e.ensureScriptKind(t,e.getScriptKindFromFileName(t))})&&_([\"react\"]);}(n),l)for(var S=0,T=l;S<T.length;S++){var C=T[S],D=i.has(C)?\"node\":C;f.has(D)||f.set(D,void 0);}c.forEach(function(e,t){f.has(t)&&void 0===f.get(t)&&f.set(t,e);});for(var E=0,N=h;E<N.length;E++){var A=N[E];f.delete(A);}var w=[],P=[];return f.forEach(function(e,t){void 0!==e?P.push(e):w.push(t);}),{cachedTypingPaths:P,newTypingNames:w,filesToWatch:m}}var r,a=e.createMap();t.nodeCoreModuleList=[\"buffer\",\"querystring\",\"events\",\"http\",\"cluster\",\"zlib\",\"os\",\"https\",\"punycode\",\"repl\",\"readline\",\"vm\",\"child_process\",\"url\",\"dns\",\"net\",\"dgram\",\"fs\",\"path\",\"string_decoder\",\"tls\",\"crypto\",\"stream\",\"util\",\"assert\",\"tty\",\"domain\",\"constants\",\"process\",\"v8\",\"timers\",\"console\"];var i=e.arrayToMap(t.nodeCoreModuleList,function(e){return e});t.discoverTypings=n;}(e.JsTyping||(e.JsTyping={}));}(r||(r={}));!function(e){!function(t){function n(t,n,r,a,i,o){function s(t){e.Debug.assert(t.length>0);for(var n=0,r=t;n<r.length;n++)if(!r[n].isCaseSensitive)return!1;return!0}function c(e){if(e&&(71===e.kind||9===e.kind||8===e.kind))return e.text}function u(t,n){if(t){var r=e.getNameOfDeclaration(t);if(r){var a=c(r);if(void 0===a)return 144===r.kind&&l(r.expression,n,!0);n.unshift(a);}}return!0}function l(e,t,n){var r=c(e);if(void 0!==r)return n&&t.unshift(r),!0;if(179===e.kind){var a=e;return n&&t.unshift(a.name.text),l(a.expression,t,!0)}return!1}function _(t){var n=[],r=e.getNameOfDeclaration(t);if(144!==r.kind||l(r.expression,n,!1)){for(t=e.getContainerNode(t);t;){if(!u(t,n))return;t=e.getContainerNode(t);}return n}}function d(t){e.Debug.assert(t.length>0);for(var n=e.PatternMatchKind.camelCase,r=0,a=t;r<a.length;r++){var i=a[r].kind;i<n&&(n=i);}return n}function p(t,n){return t.matchKind-n.matchKind||e.compareStringsCaseInsensitive(t.name,n.name)||e.compareStrings(t.name,n.name)}function f(t){var n=t.declaration,r=e.getContainerNode(n),a=r&&e.getNameOfDeclaration(r);return{name:t.name,kind:e.getNodeKind(n),kindModifiers:e.getNodeModifiers(n),matchKind:e.PatternMatchKind[t.matchKind],isCaseSensitive:t.isCaseSensitive,fileName:t.fileName,textSpan:e.createTextSpanFromNode(n),containerName:a?a.text:\"\",containerKind:a?e.getNodeKind(r):\"\"}}for(var g=e.createPatternMatcher(a),m=[],y=0,h=t;y<h.length;y++)!function(t){if(r.throwIfCancellationRequested(),o&&e.fileExtensionIs(t.fileName,\".d.ts\"))return\"continue\";e.forEachEntry(t.getNamedDeclarations(),function(e,n){if(e){var r=g.getMatchesForLastSegmentOfPattern(n);if(!r)return;for(var a=0,i=e;a<i.length;a++){var o=i[a];if(g.patternContainsDots){var c=_(o);if(!c)return!0;if(!(r=g.getMatches(c,n)))return}var u=t.fileName,l=d(r);m.push({name:n,fileName:u,matchKind:l,isCaseSensitive:s(r),declaration:o});}}});}(h[y]);return(m=e.filter(m,function(e){var t=e.declaration;if(239===t.kind||242===t.kind||237===t.kind){var r=n.getSymbolAtLocation(t.name),a=n.getAliasedSymbol(r);return r.name!==a.name}return!0})).sort(p),void 0!==i&&(m=m.slice(0,i)),e.map(m,f)}t.getNavigateToItems=n;}(e.NavigateTo||(e.NavigateTo={}));}(r||(r={}));!function(e){!function(t){function n(t,n){O=n,F=t;try{return e.map(x(c(t)),S)}finally{a();}}function r(e,t){O=t,F=e;try{return k(c(e))}finally{a();}}function a(){F=void 0,O=void 0,R=[],I=void 0,L=[];}function i(e){return e.getText(F)}function o(e){return e.node.kind}function s(e,t){e.children?e.children.push(t):e.children=[t];}function c(t){e.Debug.assert(!R.length);var n={node:t,additionalNodes:void 0,parent:void 0,children:void 0,indent:0};I=n;for(var r=0,a=t.statements;r<a.length;r++)f(a[r]);return d(),e.Debug.assert(!I&&!R.length),n}function u(e){s(I,l(e));}function l(e){return{node:e,additionalNodes:void 0,parent:I,children:void 0,indent:I.indent+1}}function _(e){var t=l(e);s(I,t),R.push(I),I=t;}function d(){I.children&&(g(I.children),m(I.children)),I=R.pop();}function p(e,t){_(e),f(t),d();}function f(t){if(O.throwIfCancellationRequested(),t&&!e.isToken(t))switch(t.kind){case 152:var n=t;p(n,n.body);for(var r=0,a=n.parameters;r<a.length;r++){var i=a[r];e.isParameterPropertyDeclaration(i)&&u(i);}break;case 151:case 153:case 154:case 150:e.hasDynamicName(t)||p(t,t.body);break;case 149:case 148:e.hasDynamicName(t)||u(t);break;case 239:var o=t;o.name&&u(o);var s=o.namedBindings;if(s)if(240===s.kind)u(s);else for(var c=0,l=s.elements;c<l.length;c++)u(l[c]);break;case 176:case 226:var g=t,m=g.name;e.isBindingPattern(m)?f(m):g.initializer&&P(g.initializer)?f(g.initializer):p(g,g.initializer);break;case 187:case 228:case 186:p(t,t.body);break;case 232:_(t);for(var y=0,h=t.members;y<h.length;y++)E(x=h[y])||u(x);d();break;case 229:case 199:case 230:_(t);for(var v=0,b=t.members;v<b.length;v++){var x=b[v];f(x);}d();break;case 233:p(t,D(t).body);break;case 246:case 237:case 157:case 155:case 156:case 231:u(t);break;default:e.forEach(t.jsDoc,function(t){e.forEach(t.tags,function(e){291===e.kind&&u(e);});}),e.forEachChild(t,f);}}function g(t){function n(e,t){function n(e,t){return e.body.kind===t.body.kind&&(233!==e.body.kind||n(e.body,t.body))}return e.kind===t.kind&&(233!==e.kind||n(e,t))}function r(t,n){t.additionalNodes=t.additionalNodes||[],t.additionalNodes.push(n.node),n.additionalNodes&&(r=t.additionalNodes).push.apply(r,n.additionalNodes),t.children=e.concatenate(t.children,n.children),t.children&&(g(t.children),m(t.children));var r;}var a=e.createMap();e.filterMutate(t,function(t){function o(e,t){return!!n(e.node,t.node)&&(r(e,t),!0)}var s=e.getNameOfDeclaration(t.node),c=s&&i(s);if(!c)return!0;var u=a.get(c);if(!u)return a.set(c,t),!0;if(u instanceof Array){for(var l=0,_=u;l<_.length;l++)if(o(d=_[l],t))return!1;return u.push(t),!0}var d=u;return!o(d,t)&&(a.set(c,[d,t]),!0)});}function m(e){e.sort(y);}function y(t,n){var r=h(t.node),a=h(n.node);if(r&&a){var i=e.compareStringsCaseInsensitive(r,a);return 0!==i?i:o(t)-o(n)}return r?1:a?-1:o(t)-o(n)}function h(t){if(233===t.kind)return C(t);var n=e.getNameOfDeclaration(t);if(n)return e.getPropertyNameForPropertyNameNode(n);switch(t.kind){case 186:case 187:case 199:return w(t);case 291:return b(t);default:return}}function v(t){if(233===t.kind)return C(t);var n=e.getNameOfDeclaration(t);if(n){var r=i(n);if(r.length>0)return r}switch(t.kind){case 265:var a=t;return e.isExternalModule(a)?'\"'+e.escapeString(e.getBaseFileName(e.removeFileExtension(e.normalizePath(a.fileName))))+'\"':\"<global>\";case 187:case 228:case 186:case 229:case 199:return 512&e.getModifierFlags(t)?\"default\":w(t);case 152:return\"constructor\";case 156:return\"new()\";case 155:return\"()\";case 157:return\"[]\";case 291:return b(t);default:return\"<unknown>\"}}function b(e){if(e.name)return e.name.text;var t=e.parent&&e.parent.parent;if(t&&208===t.kind&&t.declarationList.declarations.length>0){var n=t.declarationList.declarations[0].name;if(71===n.kind)return n.text}return\"<typedef>\"}function x(t){function n(e){if(r(e)&&(a.push(e),e.children))for(var t=0,i=e.children;t<i.length;t++)n(i[t]);}function r(t){function n(t){return e.forEach(t.children,function(e){var t=o(e);return 226!==t&&176!==t})}switch(o(t)){case 229:case 199:case 232:case 230:case 233:case 265:case 231:case 291:return!0;case 152:case 151:case 153:case 154:case 226:return n(t);case 187:case 228:case 186:return function(e){if(!e.node.body)return!1;switch(o(e.parent)){case 234:case 265:case 151:case 152:return!0;default:return n(e)}}(t);default:return!1}}var a=[];return n(t),a}function k(t){return{text:v(t.node),kind:e.getNodeKind(t.node),kindModifiers:A(t.node),spans:T(t),childItems:e.map(t.children,k)}}function S(t){function n(t){return{text:v(t.node),kind:e.getNodeKind(t.node),kindModifiers:e.getNodeModifiers(t.node),spans:T(t),childItems:L,indent:0,bolded:!1,grayed:!1}}return{text:v(t.node),kind:e.getNodeKind(t.node),kindModifiers:A(t.node),spans:T(t),childItems:e.map(t.children,n)||L,indent:t.indent,bolded:!1,grayed:!1}}function T(e){var t=[N(e.node)];if(e.additionalNodes)for(var n=0,r=e.additionalNodes;n<r.length;n++){var a=r[n];t.push(N(a));}return t}function C(t){if(e.isAmbientModule(t))return e.getTextOfNode(t.name);var n=[];for(n.push(t.name.text);t.body&&233===t.body.kind;)t=t.body,n.push(t.name.text);return n.join(\".\")}function D(e){return 233===e.body.kind?D(e.body):e}function E(e){return!e.name||144===e.name.kind}function N(t){return 265===t.kind?e.createTextSpanFromBounds(t.getFullStart(),t.getEnd()):e.createTextSpanFromNode(t,F)}function A(t){return t.parent&&226===t.parent.kind&&(t=t.parent),e.getNodeModifiers(t)}function w(t){return t.name&&e.getFullWidth(t.name)>0?e.declarationNameToString(t.name):226===t.parent.kind?e.declarationNameToString(t.parent.name):194===t.parent.kind&&58===t.parent.operatorToken.kind?i(t.parent.left).replace(M,\"\"):261===t.parent.kind&&t.parent.name?i(t.parent.name):512&e.getModifierFlags(t)?\"default\":e.isClassLike(t)?\"<class>\":\"<function>\"}function P(e){return 186===e.kind||187===e.kind||199===e.kind}var O,F,I,M=/\\s+/g,R=[],L=[];t.getNavigationBarItems=n,t.getNavigationTree=r;}(e.NavigationBar||(e.NavigationBar={}));}(r||(r={}));!function(e){!function(t){function n(t,n){function r(n,r,a,i){if(n&&r&&a){var o={textSpan:e.createTextSpanFromBounds(r.pos,a.end),hintSpan:e.createTextSpanFromNode(n,t),bannerText:l,autoCollapse:i};u.push(o);}}function a(t,n){if(t){var r={textSpan:e.createTextSpanFromBounds(t.pos,t.end),hintSpan:e.createTextSpanFromBounds(t.pos,t.end),bannerText:l,autoCollapse:n};u.push(r);}}function i(r){var i=e.getLeadingCommentRangesOfNode(r,t);if(i){for(var s=-1,c=-1,u=!0,l=0,_=0,d=i;_<d.length;_++){var p=d[_];n.throwIfCancellationRequested(),2===p.kind?(u&&(s=p.pos),u=!1,c=p.end,l++):3===p.kind&&(o(l,s,c),a(p,!1),l=0,c=-1,u=!0);}o(l,s,c);}}function o(e,t,n){e>1&&a({kind:2,pos:t,end:n},!1);}function s(t){return e.isFunctionBlock(t)&&187!==t.parent.kind}function c(a){if(n.throwIfCancellationRequested(),!(_>d)){switch(e.isDeclaration(a)&&i(a),a.kind){case 207:if(!e.isFunctionBlock(a)){var o=a.parent,p=e.findChildOfKind(a,17,t),f=e.findChildOfKind(a,18,t);if(212===o.kind||215===o.kind||216===o.kind||214===o.kind||211===o.kind||213===o.kind||220===o.kind||260===o.kind){r(o,p,f,s(a));break}if(224===o.kind){var g=o;if(g.tryBlock===a){r(o,p,f,s(a));break}if(g.finallyBlock===a){var m=e.findChildOfKind(g,87,t);if(m){r(m,p,f,s(a));break}}}var y=e.createTextSpanFromNode(a);u.push({textSpan:y,hintSpan:y,bannerText:l,autoCollapse:s(a)});break}case 234:var p=e.findChildOfKind(a,17,t),f=e.findChildOfKind(a,18,t);r(a.parent,p,f,s(a));break;case 229:case 230:case 232:case 178:case 235:r(a,p=e.findChildOfKind(a,17,t),f=e.findChildOfKind(a,18,t),s(a));break;case 177:r(a,e.findChildOfKind(a,21,t),e.findChildOfKind(a,22,t),s(a));}_++,e.forEachChild(a,c),_--;}}var u=[],l=\"...\",_=0,d=20;return c(t),u}t.collectElements=n;}(e.OutliningElementsCollector||(e.OutliningElementsCollector={}));}(r||(r={}));!function(e){function t(e,t,n,r){return{kind:e,punctuationStripped:t,isCaseSensitive:n,camelCaseWeight:r}}function n(n){function o(e){return b||!e}function c(t){if(!o(t))return f(t,e.lastOrUndefined(v))}function l(t,n){if(!o(n)){var r=f(n,e.lastOrUndefined(v));if(r&&(t=t||[],!(v.length-1>t.length))){for(var a=r,i=v.length-2,s=t.length-1;i>=0;i-=1,s-=1){var c=v[i],u=f(t[s],c);if(!u)return;e.addRange(a,u);}return a}}}function _(e){var t=h.get(e);return t||h.set(e,t=g(e)),t}function d(n,r,a){var o=s(n,r.textLowerCase);if(0===o)return r.text.length===n.length?t(x.exact,a,n===r.text):t(x.prefix,a,e.startsWith(n,r.text));var c=r.isLowerCase;if(c){if(o>0)for(var u=0,l=_(n);u<l.length;u++){var d=l[u];if(m(n,d,r.text,!0))return t(x.substring,a,m(n,d,r.text,!1))}}else if(n.indexOf(r.text)>0)return t(x.substring,a,!0);if(!c&&r.characterSpans.length>0){var p=_(n),f=y(n,p,r,!1);if(void 0!==f)return t(x.camelCase,a,!0,f);if(void 0!==(f=y(n,p,r,!0)))return t(x.camelCase,a,!1,f)}return c&&r.text.length<n.length&&o>0&&i(n.charCodeAt(o))?t(x.substring,a,!1):void 0}function p(e){for(var t=0;t<e.length;t++){var n=e.charCodeAt(t);if(32===n||42===n)return!0}return!1}function f(e,t){if(!p(t.totalTextChunk.text)){var n=d(e,t.totalTextChunk,!1);if(n)return[n]}for(var r=void 0,a=0,i=t.subWordTextChunks;a<i.length;a++){var o=d(e,i[a],!0);if(!o)return;(r=r||[]).push(o);}return r}function m(e,t,n,r,a){var i=a?a.start:0,o=a?a.length:n.length;if(o>t.length)return!1;if(r)for(l=0;l<o;l++){var s=n.charCodeAt(i+l),c=e.charCodeAt(t.start+l);if(u(s)!==u(c))return!1}else for(var l=0;l<o;l++)if((s=n.charCodeAt(i+l))!==(c=e.charCodeAt(t.start+l)))return!1;return!0}function y(t,n,r,a){for(var o=r.characterSpans,s=0,c=0,u=void 0,l=void 0;;){if(c===o.length){var _=0;return l&&(_+=1),0===u&&(_+=2),_}if(s===n.length)return;for(var d=n[s],p=!1;c<o.length;c++){var f=o[c];if(p&&(!i(r.text.charCodeAt(o[c-1].start))||!i(r.text.charCodeAt(o[c].start))))break;if(!m(t,d,r.text,a,f))break;p=!0,u=void 0===u?s:u,l=void 0===l||l,d=e.createTextSpan(d.start+f.length,d.length-f.length);}p||void 0===l||(l=!1),s++;}}var h=e.createMap(),v=(n=n.trim()).split(\".\").map(function(e){return r(e.trim())}),b=0===v.length||e.forEach(v,a);return{getMatches:l,getMatchesForLastSegmentOfPattern:c,patternContainsDots:v.length>1}}function r(e){return{totalTextChunk:p(e),subWordTextChunks:d(e)}}function a(e){return 0===e.subWordTextChunks.length}function i(t){if(t>=65&&t<=90)return!0;if(t<127||!e.isUnicodeIdentifierStart(t,5))return!1;var n=String.fromCharCode(t);return n===n.toUpperCase()}function o(t){if(t>=97&&t<=122)return!0;if(t<127||!e.isUnicodeIdentifierStart(t,5))return!1;var n=String.fromCharCode(t);return n===n.toLowerCase()}function s(e,t){for(var n=e.length-t.length,r=0;r<=n;r++)if(c(e,t,r))return r;return-1}function c(e,t,n){for(var r=0;r<t.length;r++)if(u(e.charCodeAt(r+n))!==t.charCodeAt(r))return!1;return!0}function u(e){return e>=65&&e<=90?e-65+97:e<127?e:String.fromCharCode(e).toLowerCase().charCodeAt(0)}function l(e){return e>=48&&e<=57}function _(e){return i(e)||o(e)||l(e)||95===e||36===e}function d(e){for(var t=[],n=0,r=0,a=0;a<e.length;a++)_(e.charCodeAt(a))?(0===r&&(n=a),r++):r>0&&(t.push(p(e.substr(n,r))),r=0);return r>0&&t.push(p(e.substr(n,r))),t}function p(e){var t=e.toLowerCase();return{text:e,textLowerCase:t,isLowerCase:e===t,characterSpans:f(e)}}function f(e){return m(e,!1)}function g(e){return m(e,!0)}function m(t,n){for(var r=[],a=0,i=1;i<t.length;i++){var o=l(t.charCodeAt(i-1)),s=l(t.charCodeAt(i)),c=b(t,n,i),u=v(t,n,i,a);(y(t.charCodeAt(i-1))||y(t.charCodeAt(i))||o!==s||c||u)&&(h(t,a,i)||r.push(e.createTextSpan(a,i-a)),a=i);}return h(t,a,t.length)||r.push(e.createTextSpan(a,t.length-a)),r}function y(e){switch(e){case 33:case 34:case 35:case 37:case 38:case 39:case 40:case 41:case 42:case 44:case 45:case 46:case 47:case 58:case 59:case 63:case 64:case 91:case 92:case 93:case 95:case 123:case 125:return!0}return!1}function h(e,t,n){for(var r=t;r<n;r++){var a=e.charCodeAt(r);if(!y(a)||95===a||36===a)return!1}return!0}function v(e,t,n,r){if(t&&n!==r&&n+1<e.length){var a=i(e.charCodeAt(n)),s=o(e.charCodeAt(n+1));if(a&&s){for(var c=r;c<n;c++)if(!i(e.charCodeAt(c)))return!1;return!0}}return!1}function b(e,t,n){var r=i(e.charCodeAt(n-1)),a=i(e.charCodeAt(n));return t?a&&!r:a}var x;!function(e){e[e.exact=0]=\"exact\",e[e.prefix=1]=\"prefix\",e[e.substring=2]=\"substring\",e[e.camelCase=3]=\"camelCase\";}(x=e.PatternMatchKind||(e.PatternMatchKind={})),e.createPatternMatcher=n,e.breakIntoCharacterSpans=f,e.breakIntoWordSpans=g;}(r||(r={}));!function(e){function t(t,n,r){function a(){var t=e.scanner.scan();return 17===t?v++:18===t&&v--,t}function i(){var t=e.scanner.getTokenValue(),n=e.scanner.getTokenPos();return{fileName:t,pos:n,end:n+t.length}}function o(){f||(f=[]),f.push({ref:i(),depth:v});}function s(){y.push(i()),c();}function c(){0===v&&(b=!0);}function u(){var t=e.scanner.getToken();return 124===t&&(128===(t=a())&&9===(t=a())&&o(),!0)}function l(){var t=e.scanner.getToken();if(91===t){if(19===(t=a())){if(9===(t=a()))return s(),!0}else{if(9===t)return s(),!0;if(71===t||e.isKeyword(t))if(140===(t=a())){if(9===(t=a()))return s(),!0}else if(58===t){if(d(!0))return!0}else{if(26!==t)return!0;t=a();}if(17===t){for(t=a();18!==t&&1!==t;)t=a();18===t&&140===(t=a())&&9===(t=a())&&s();}else 39===t&&118===(t=a())&&(71===(t=a())||e.isKeyword(t))&&140===(t=a())&&9===(t=a())&&s();}return!0}return!1}function _(){var t=e.scanner.getToken();if(84===t){if(c(),17===(t=a())){for(t=a();18!==t&&1!==t;)t=a();18===t&&140===(t=a())&&9===(t=a())&&s();}else if(39===t)140===(t=a())&&9===(t=a())&&s();else if(91===t&&(71===(t=a())||e.isKeyword(t))&&58===(t=a())&&d(!0))return!0;return!0}return!1}function d(t){var n=t?a():e.scanner.getToken();return 132===n&&(19===(n=a())&&9===(n=a())&&s(),!0)}function p(){var t=e.scanner.getToken();if(71===t&&\"define\"===e.scanner.getTokenValue()){if(19!==(t=a()))return!0;if(9===(t=a())){if(26!==(t=a()))return!0;t=a();}if(21!==t)return!0;t=a();for(var n=0;22!==t&&1!==t;)9===t&&(s(),n++),t=a();return!0}return!1}void 0===n&&(n=!0),void 0===r&&(r=!1);var f,g=[],m=[],y=[],h=!1,v=0,b=!1;if(n&&function(){for(e.scanner.setText(t),a();1!==e.scanner.getToken();)u()||l()||_()||r&&(d(!1)||p())||a();e.scanner.setText(void 0);}(),function(){var n=e.getLeadingCommentRanges(t,0);e.forEach(n,function(n){var r=t.substring(n.pos,n.end),a=e.getFileReferenceFromReferencePath(r,n);if(a){h=a.isNoDefaultLib;var i=a.fileReference;i&&(a.isTypeReferenceDirective?m:g).push(i);}});}(),b){if(f)for(var x=0,k=f;x<k.length;x++){var S=k[x];y.push(S.ref);}return{referencedFiles:g,typeReferenceDirectives:m,importedFiles:y,isLibFile:h,ambientExternalModules:void 0}}var T=void 0;if(f)for(var C=0,D=f;C<D.length;C++)0===(S=D[C]).depth?(T||(T=[]),T.push(S.ref.fileName)):y.push(S.ref);return{referencedFiles:g,typeReferenceDirectives:m,importedFiles:y,isLibFile:h,ambientExternalModules:T}}e.preProcessFile=t;}(r||(r={}));!function(e){!function(t){function n(t,n,a,o,c){function u(t){if(!n)return!1;var r=t.getSourceFile();return a(e.normalizePath(r.fileName))===l()}var l=e.memoize(function(){return a(e.normalizePath(n))}),_=e.getTouchingWord(o,c,!0);return(_&&s(_)?r(_,t,o,u):void 0)||i(e.Diagnostics.You_cannot_rename_this_element)}function r(t,n,r,o){var s=n.getSymbolAtLocation(t);if(s){var c=s.getDeclarations();if(c&&c.length>0){if(e.some(c,o))return i(e.Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library);if(71===t.kind&&79===t.originalKeywordKind&&1536&s.parent.flags)return;var u=e.stripQuotes(e.getDeclaredName(n,s,t)),l=e.SymbolDisplay.getSymbolKind(n,s,t);return l?a(u,n.getFullyQualifiedName(s),l,e.SymbolDisplay.getSymbolModifiers(s),t,r):void 0}}else if(9===t.kind)return o(t)?i(e.Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library):a(u=e.stripQuotes(t.text),u,\"var\",\"\",t,r)}function a(e,t,n,r,a,i){return{canRename:!0,kind:n,displayName:e,localizedErrorMessage:void 0,fullDisplayName:t,kindModifiers:r,triggerSpan:o(a,i)}}function i(t){return{canRename:!1,localizedErrorMessage:e.getLocaleSpecificMessage(t),displayName:void 0,fullDisplayName:void 0,kind:void 0,kindModifiers:void 0,triggerSpan:void 0}}function o(t,n){var r=t.getStart(n),a=t.getWidth(n);return 9===t.kind&&(r+=1,a-=2),e.createTextSpan(r,a)}function s(t){return 71===t.kind||9===t.kind||e.isLiteralNameOfPropertyDeclarationOrIndexAccess(t)||e.isThis(t)}t.getRenameInfo=n;}(e.Rename||(e.Rename={}));}(r||(r={}));!function(e){!function(t){function n(t,n,a,i){var o=t.getTypeChecker(),s=e.findTokenOnLeftOfPosition(n,a);if(s){var c=_(s,a,n);if(i.throwIfCancellationRequested(),c){var u=c.invocation,l=[],d=o.getResolvedSignature(u,l);if(i.throwIfCancellationRequested(),l.length)return f(l,d,c,o);if(e.isSourceFileJavaScript(n))return r(c,t)}}}function r(e,t){if(181===e.invocation.kind){var n=e.invocation.expression,r=71===n.kind?n:179===n.kind?n.name:void 0;if(r&&r.text)for(var a=t.getTypeChecker(),i=0,o=t.getSourceFiles();i<o.length;i++){var s=o[i].getNamedDeclarations().get(r.text);if(s)for(var c=0,u=s;c<u.length;c++){var l=u[c],_=l.symbol;if(_){var d=a.getTypeOfSymbolAtLocation(_,l);if(d){var p=d.getCallSignatures();if(p&&p.length)return f(p,p[0],e,a)}}}}}}function a(t,n,r){if(e.isCallOrNewExpression(t.parent)){var a=t.parent;if(27===t.kind||19===t.kind){var l=d(a,t,r),_=a.typeArguments&&a.typeArguments.pos===l.pos;return e.Debug.assert(void 0!==l),{kind:_?0:1,invocation:a,argumentsSpan:u(l,r),argumentIndex:0,argumentCount:o(l)}}var p=e.findListItemInfo(t);if(p){var l=p.list,_=a.typeArguments&&a.typeArguments.pos===l.pos,f=i(l,t),g=o(l);return e.Debug.assert(0===f||f<g,\"argumentCount < argumentIndex, \"+g+\" < \"+f),{kind:_?0:1,invocation:a,argumentsSpan:u(l,r),argumentIndex:f,argumentCount:g}}}else if(13===t.kind&&183===t.parent.kind){if(e.isInsideTemplateLiteral(t,n))return c(t.parent,0,r)}else{if(14===t.kind&&183===t.parent.parent.kind){h=(y=t.parent).parent;return e.Debug.assert(196===y.kind),c(h,f=e.isInsideTemplateLiteral(t,n)?0:1,r)}if(205===t.parent.kind&&183===t.parent.parent.parent.kind){var m=t.parent,y=m.parent,h=y.parent;if(e.Debug.assert(196===y.kind),16===t.kind&&!e.isInsideTemplateLiteral(t,n))return;return c(h,f=s(y.templateSpans.indexOf(m),t,n),r)}if(t.parent&&e.isJsxOpeningLikeElement(t.parent)){var v=t.parent.attributes.getFullStart(),b=e.skipTrivia(r.text,t.parent.attributes.getEnd(),!1);return{kind:3,invocation:t.parent,argumentsSpan:e.createTextSpan(v,b-v),argumentIndex:0,argumentCount:1}}}}function i(e,t){for(var n=0,r=0,a=e.getChildren();r<a.length;r++){var i=a[r];if(i===t)break;26!==i.kind&&n++;}return n}function o(t){var n=t.getChildren(),r=e.countWhere(n,function(e){return 26!==e.kind});return n.length>0&&26===e.lastOrUndefined(n).kind&&r++,r}function s(t,n,r){return e.Debug.assert(r>=n.getStart(),\"Assumed 'position' could not occur before node.\"),e.isTemplateLiteralKind(n.kind)?e.isInsideTemplateLiteral(n,r)?0:t+2:t+1}function c(t,n,r){var a=13===t.template.kind?1:t.template.templateSpans.length+1;return e.Debug.assert(0===n||n<a,\"argumentCount < argumentIndex, \"+a+\" < \"+n),{kind:2,invocation:t,argumentsSpan:l(t,r),argumentIndex:n,argumentCount:a}}function u(t,n){var r=t.getFullStart(),a=e.skipTrivia(n.text,t.getEnd(),!1);return e.createTextSpan(r,a-r)}function l(t,n){var r=t.template,a=r.getStart(),i=r.getEnd();return 196===r.kind&&0===e.lastOrUndefined(r.templateSpans).literal.getFullWidth()&&(i=e.skipTrivia(n.text,i,!1)),e.createTextSpan(a,i-a)}function _(t,n,r){for(var i=t;265!==i.kind;i=i.parent){if(e.isFunctionBlock(i))return;(i.pos<i.parent.pos||i.end>i.parent.end)&&e.Debug.fail(\"Node of kind \"+i.kind+\" is not a subspan of its parent of kind \"+i.parent.kind);var o=a(i,n,r);if(o)return o}}function d(t,n,r){var a=t.getChildren(r),i=a.indexOf(n);return e.Debug.assert(i>=0&&a.length>i+1),a[i+1]}function p(e,t){for(var n=-1,r=-1,a=0;a<e.length;a++){var i=e[a];if(i.hasRestParameter||i.parameters.length>=t)return a;i.parameters.length>r&&(r=i.parameters.length,n=a);}return n}function f(t,n,r,a){function i(t){var n=e.mapToDisplayParts(function(e){return a.getSymbolDisplayBuilder().buildParameterDisplay(t,e,u)});return{name:t.name,documentation:t.getDocumentationComment(),displayParts:n,isOptional:a.isOptionalParameter(t.valueDeclaration)}}function o(t){var n=e.mapToDisplayParts(function(e){return a.getSymbolDisplayBuilder().buildTypeParameterDisplay(t,e,u)});return{name:t.symbol.name,documentation:g,displayParts:n,isOptional:!1}}var s=r.argumentsSpan,c=0===r.kind,u=r.invocation,l=e.getInvokedExpression(u),_=a.getSymbolAtLocation(l),d=_&&e.symbolToDisplayParts(a,_,void 0,void 0),f=e.map(t,function(t){var n,r=[],s=[];d&&e.addRange(r,d);var l;if(c){l=!1,r.push(e.punctuationPart(27));var _=t.typeParameters;n=_&&_.length>0?e.map(_,o):g,s.push(e.punctuationPart(29));var p=e.mapToDisplayParts(function(e){return a.getSymbolDisplayBuilder().buildDisplayForParametersAndDelimiters(t.thisParameter,t.parameters,e,u)});e.addRange(s,p);}else{l=t.hasRestParameter;var f=e.mapToDisplayParts(function(e){return a.getSymbolDisplayBuilder().buildDisplayForTypeParametersAndDelimiters(t.typeParameters,e,u)});e.addRange(r,f),r.push(e.punctuationPart(19));var m=t.parameters;n=m.length>0?e.map(m,i):g,s.push(e.punctuationPart(20));}var y=e.mapToDisplayParts(function(e){return a.getSymbolDisplayBuilder().buildReturnTypeDisplay(t,e,u)});return e.addRange(s,y),{isVariadic:l,prefixDisplayParts:r,suffixDisplayParts:s,separatorDisplayParts:[e.punctuationPart(26),e.spacePart()],parameters:n,documentation:t.getDocumentationComment(),tags:t.getJsDocTags()}}),m=r.argumentIndex,y=r.argumentCount,h=t.indexOf(n);return h<0&&(h=p(t,y)),e.Debug.assert(0===m||m<y,\"argumentCount < argumentIndex, \"+y+\" < \"+m),{items:f,applicableSpan:s,selectedItemIndex:h,argumentIndex:m,argumentCount:y}}var g=[];!function(e){e[e.TypeArguments=0]=\"TypeArguments\",e[e.CallArguments=1]=\"CallArguments\",e[e.TaggedTemplateArguments=2]=\"TaggedTemplateArguments\",e[e.JSXAttributesArguments=3]=\"JSXAttributesArguments\";}(t.ArgumentListKind||(t.ArgumentListKind={})),t.getSignatureHelpItems=n,t.getImmediatelyContainingArgumentInfo=a,t.getContainingArgumentInfo=_;}(e.SignatureHelp||(e.SignatureHelp={}));}(r||(r={}));!function(e){!function(t){function n(t,n,a){var i=n.flags;if(32&i)return e.getDeclarationOfKind(n,199)?\"local class\":\"class\";if(384&i)return\"enum\";if(524288&i)return\"type\";if(64&i)return\"interface\";if(262144&i)return\"type parameter\";var o=r(t,n,a);if(\"\"===o){if(262144&i)return\"type parameter\";if(8&i)return\"enum member\";if(8388608&i)return\"alias\";if(1536&i)return\"module\"}return o}function r(t,n,r){if(t.isUndefinedSymbol(n))return\"var\";if(t.isArgumentsSymbol(n))return\"local var\";if(99===r.kind&&e.isExpression(r))return\"parameter\";var a=n.flags;if(3&a)return e.isFirstDeclarationOfSymbolParameter(n)?\"parameter\":n.valueDeclaration&&e.isConst(n.valueDeclaration)?\"const\":e.forEach(n.declarations,e.isLet)?\"let\":o(n)?\"local var\":\"var\";if(16&a)return o(n)?\"local function\":\"function\";if(32768&a)return\"getter\";if(65536&a)return\"setter\";if(8192&a)return\"method\";if(16384&a)return\"constructor\";if(4&a){if(134217728&a&&6&n.checkFlags){var i=e.forEach(t.getRootSymbols(n),function(t){var n=t.getFlags();if(98311&n)return\"property\";e.Debug.assert(!!(8192&n));});return i||(t.getTypeOfSymbolAtLocation(n,r).getCallSignatures().length?\"method\":\"property\")}return r.parent&&e.isJsxAttribute(r.parent)?\"JSX attribute\":\"property\"}return\"\"}function a(t){return t&&t.declarations&&t.declarations.length>0?e.getNodeModifiers(t.declarations[0]):\"\"}function i(t,a,i,o,s,c){function u(){b.length&&b.push(e.lineBreakPart());}function l(){b.push(e.spacePart()),b.push(e.keywordPart(92)),b.push(e.spacePart());}function _(n,r){var a=e.symbolToDisplayParts(t,n,r||i,void 0,3);e.addRange(b,a);}function d(t,n){u(),n&&(p(n),b.push(e.spacePart()),_(t));}function p(t){switch(t){case\"var\":case\"function\":case\"let\":case\"const\":case\"constructor\":return void b.push(e.textOrKeywordPart(t));default:return b.push(e.punctuationPart(19)),b.push(e.textOrKeywordPart(t)),void b.push(e.punctuationPart(20))}}function f(n,r,a){e.addRange(b,e.signatureToDisplayParts(t,n,o,64|a)),r.length>1&&(b.push(e.spacePart()),b.push(e.punctuationPart(19)),b.push(e.operatorPart(37)),b.push(e.displayPart((r.length-1).toString(),e.SymbolDisplayPartKind.numericLiteral)),b.push(e.spacePart()),b.push(e.textPart(2===r.length?\"overload\":\"overloads\")),b.push(e.punctuationPart(20))),m=n.getDocumentationComment(),y=n.getJsDocTags();}function g(n,r){var a=e.mapToDisplayParts(function(e){t.getSymbolDisplayBuilder().buildTypeParameterDisplayFromSymbol(n,e,r);});e.addRange(b,a);}void 0===c&&(c=e.getMeaningFromLocation(s));var m,y,h,v,b=[],x=a.flags,k=r(t,a,s),S=99===s.kind&&e.isExpression(s);if(\"\"!==k||32&x||8388608&x){\"getter\"!==k&&\"setter\"!==k||(k=\"property\");O=void 0;if(v=S?t.getTypeAtLocation(s):t.getTypeOfSymbolAtLocation(a,s)){if(s.parent&&179===s.parent.kind){var T=s.parent.name;(T===s||T&&0===T.getFullWidth())&&(s=s.parent);}var C=void 0;if(e.isCallOrNewExpression(s)?C=s:e.isCallExpressionTarget(s)||e.isNewExpressionTarget(s)?C=s.parent:s.parent&&e.isJsxOpeningLikeElement(s.parent)&&e.isFunctionLike(a.valueDeclaration)&&(C=s.parent),C){var D=[];!(O=t.getResolvedSignature(C,D))&&D.length&&(O=D[0]);var E=182===C.kind||e.isCallExpression(C)&&97===C.expression.kind,N=E?v.getConstructSignatures():v.getCallSignatures();if(e.contains(N,O.target)||e.contains(N,O)||(O=N.length?N[0]:void 0),O){switch(E&&32&x?(k=\"constructor\",d(v.symbol,k)):8388608&x?(p(k=\"alias\"),b.push(e.spacePart()),E&&(b.push(e.keywordPart(94)),b.push(e.spacePart())),_(a)):d(a,k),k){case\"JSX attribute\":case\"property\":case\"var\":case\"const\":case\"let\":case\"parameter\":case\"local var\":b.push(e.punctuationPart(56)),b.push(e.spacePart()),E&&(b.push(e.keywordPart(94)),b.push(e.spacePart())),32768&v.flags&&16&v.objectFlags||!v.symbol||e.addRange(b,e.symbolToDisplayParts(t,v.symbol,o,void 0,1)),f(O,N,16);break;default:f(O,N);}h=!0;}}else if(e.isNameOfFunctionDeclaration(s)&&!(98304&a.flags)||123===s.kind&&152===s.parent.kind){var A=s.parent;if(e.findDeclaration(a,function(e){return e===(123===s.kind?A.parent:A)})){N=152===A.kind?v.getNonNullableType().getConstructSignatures():v.getNonNullableType().getCallSignatures();O=t.isImplementationOfOverload(A)?N[0]:t.getSignatureFromDeclaration(A),152===A.kind?(k=\"constructor\",d(v.symbol,k)):d(155!==A.kind||2048&v.symbol.flags||4096&v.symbol.flags?a:v.symbol,k),f(O,N),h=!0;}}}}if(32&x&&!h&&!S&&(e.getDeclarationOfKind(a,199)?p(\"local class\"):b.push(e.keywordPart(75)),b.push(e.spacePart()),_(a),g(a,i)),64&x&&2&c&&(u(),b.push(e.keywordPart(109)),b.push(e.spacePart()),_(a),g(a,i)),524288&x&&(u(),b.push(e.keywordPart(138)),b.push(e.spacePart()),_(a),g(a,i),b.push(e.spacePart()),b.push(e.operatorPart(58)),b.push(e.spacePart()),e.addRange(b,e.typeToDisplayParts(t,t.getDeclaredTypeOfSymbol(a),o,1024))),384&x&&(u(),e.forEach(a.declarations,e.isConstEnumDeclaration)&&(b.push(e.keywordPart(76)),b.push(e.spacePart())),b.push(e.keywordPart(83)),b.push(e.spacePart()),_(a)),1536&x){u();var w=(L=e.getDeclarationOfKind(a,233))&&L.name&&71===L.name.kind;b.push(e.keywordPart(w?129:128)),b.push(e.spacePart()),_(a);}if(262144&x&&2&c)if(u(),b.push(e.punctuationPart(19)),b.push(e.textPart(\"type parameter\")),b.push(e.punctuationPart(20)),b.push(e.spacePart()),_(a),a.parent)l(),_(a.parent,o),g(a.parent,o);else{var P=e.getDeclarationOfKind(a,145);if(e.Debug.assert(void 0!==P),L=P.parent)if(e.isFunctionLikeKind(L.kind)){l();var O=t.getSignatureFromDeclaration(L);156===L.kind?(b.push(e.keywordPart(94)),b.push(e.spacePart())):155!==L.kind&&L.name&&_(L.symbol),e.addRange(b,e.signatureToDisplayParts(t,O,i,64));}else 231===L.kind&&(l(),b.push(e.keywordPart(138)),b.push(e.spacePart()),_(L.symbol),g(L.symbol,i));}if(8&x&&(k=\"enum member\",d(a,\"enum member\"),264===(L=a.declarations[0]).kind)){var F=t.getConstantValue(L);void 0!==F&&(b.push(e.spacePart()),b.push(e.operatorPart(58)),b.push(e.spacePart()),b.push(e.displayPart(e.getTextOfConstantValue(F),\"number\"==typeof F?e.SymbolDisplayPartKind.numericLiteral:e.SymbolDisplayPartKind.stringLiteral)));}if(8388608&x&&(u(),236===a.declarations[0].kind?(b.push(e.keywordPart(84)),b.push(e.spacePart()),b.push(e.keywordPart(129))):b.push(e.keywordPart(91)),b.push(e.spacePart()),_(a),e.forEach(a.declarations,function(n){if(237===n.kind){var r=n;if(e.isExternalModuleImportEqualsDeclaration(r))b.push(e.spacePart()),b.push(e.operatorPart(58)),b.push(e.spacePart()),b.push(e.keywordPart(132)),b.push(e.punctuationPart(19)),b.push(e.displayPart(e.getTextOfNode(e.getExternalModuleImportEqualsDeclarationExpression(r)),e.SymbolDisplayPartKind.stringLiteral)),b.push(e.punctuationPart(20));else{var a=t.getSymbolAtLocation(r.moduleReference);a&&(b.push(e.spacePart()),b.push(e.operatorPart(58)),b.push(e.spacePart()),_(a,o));}return!0}})),!h)if(\"\"!==k){if(v)if(S?(u(),b.push(e.keywordPart(99))):d(a,k),\"property\"===k||\"JSX attribute\"===k||3&x||\"local var\"===k||S)if(b.push(e.punctuationPart(56)),b.push(e.spacePart()),v.symbol&&262144&v.symbol.flags){var I=e.mapToDisplayParts(function(e){t.getSymbolDisplayBuilder().buildTypeParameterDisplay(v,e,o);});e.addRange(b,I);}else e.addRange(b,e.typeToDisplayParts(t,v,o));else(16&x||8192&x||16384&x||131072&x||98304&x||\"method\"===k)&&f((N=v.getNonNullableType().getCallSignatures())[0],N);}else k=n(t,a,s);if(!m&&(m=a.getDocumentationComment(),y=a.getJsDocTags(),0===m.length&&4&a.flags&&a.parent&&e.forEach(a.parent.declarations,function(e){return 265===e.kind})))for(var M=0,R=a.declarations;M<R.length;M++){var L=R[M];if(L.parent&&194===L.parent.kind){var B=t.getSymbolAtLocation(L.parent.right);if(B&&(m=B.getDocumentationComment(),y=B.getJsDocTags(),m.length>0))break}}return{displayParts:b,documentation:m,symbolKind:k,tags:y}}function o(t){return!t.parent&&e.forEach(t.declarations,function(t){if(186===t.kind)return!0;if(226!==t.kind&&228!==t.kind)return!1;for(var n=t.parent;!e.isFunctionBlock(n);n=n.parent)if(265===n.kind||234===n.kind)return!1;return!0})}t.getSymbolKind=n,t.getSymbolModifiers=a,t.getSymbolDisplayPartsDocumentationAndSymbolKind=i;}(e.SymbolDisplay||(e.SymbolDisplay={}));}(r||(r={}));!function(e){function t(t,n){var a=[],i=n.compilerOptions?r(n.compilerOptions,a):e.getDefaultCompilerOptions();i.isolatedModules=!0,i.suppressOutputPathCheck=!0,i.allowNonTsExtensions=!0,i.noLib=!0,i.lib=void 0,i.types=void 0,i.noEmit=void 0,i.noEmitOnError=void 0,i.paths=void 0,i.rootDirs=void 0,i.declaration=void 0,i.declarationDir=void 0,i.out=void 0,i.outFile=void 0,i.noResolve=!0;var o=n.fileName||(i.jsx?\"module.tsx\":\"module.ts\"),s=e.createSourceFile(o,t,i.target);n.moduleName&&(s.moduleName=n.moduleName),n.renamedDependencies&&(s.renamedDependencies=e.createMapFromTemplate(n.renamedDependencies));var c,u,l=e.getNewLineCharacter(i),_={getSourceFile:function(t){return t===e.normalizePath(o)?s:void 0},writeFile:function(t,n){e.fileExtensionIs(t,\".map\")?(e.Debug.assert(void 0===u,\"Unexpected multiple source map outputs for the file '\"+t+\"'\"),u=n):(e.Debug.assert(void 0===c,\"Unexpected multiple outputs for the file: '\"+t+\"'\"),c=n);},getDefaultLibFileName:function(){return\"lib.d.ts\"},useCaseSensitiveFileNames:function(){return!1},getCanonicalFileName:function(e){return e},getCurrentDirectory:function(){return\"\"},getNewLine:function(){return l},fileExists:function(e){return e===o},readFile:function(){return\"\"},directoryExists:function(){return!0},getDirectories:function(){return[]}},d=e.createProgram([o],i,_);return n.reportDiagnostics&&(e.addRange(a,d.getSyntacticDiagnostics(s)),e.addRange(a,d.getOptionsDiagnostics())),d.emit(void 0,void 0,void 0,void 0,n.transformers),e.Debug.assert(void 0!==c,\"Output generation failed\"),{outputText:c,diagnostics:a,sourceMapText:u}}function n(n,r,a,i,o){var s=t(n,{compilerOptions:r,fileName:a,reportDiagnostics:!!i,moduleName:o});return e.addRange(i,s.diagnostics),s.outputText}function r(t,n){a=a||e.filter(e.optionDeclarations,function(t){return\"object\"==typeof t.type&&!e.forEachEntry(t.type,function(e){return\"number\"!=typeof e})}),t=e.cloneCompilerOptions(t);for(var r=0,i=a;r<i.length;r++)!function(r){if(!e.hasProperty(t,r.name))return\"continue\";var a=t[r.name];\"string\"==typeof a?t[r.name]=e.parseCustomTypeOption(r,a,n):e.forEachEntry(r.type,function(e){return e===a})||n.push(e.createCompilerDiagnosticForInvalidCustomType(r));}(i[r]);return t}e.transpileModule=t,e.transpile=n;var a;e.fixupCompilerOptions=r;}(r||(r={}));!function(e){!function(t){function n(t,n,a,s){function c(){e.Debug.assert(void 0!==r,\"Scanner should be present\"),S=void 0;var t=r.getStartPos()!==a;t&&(b?(e.Debug.assert(0!==b.length),T=4===e.lastOrUndefined(b).kind):T=!1),v=void 0,b=void 0,t||r.scan();for(var n=r.getStartPos();n<s;){var i=r.getToken();if(!e.isTrivia(i))break;r.scan();var o={pos:n,end:r.getStartPos(),kind:i};n=r.getStartPos(),v||(v=[]),v.push(o);}x=r.getStartPos();}function u(e){if(e)switch(e.kind){case 31:case 66:case 67:case 47:case 46:return!0}return!1}function l(e){if(e.parent)switch(e.parent.kind){case 253:case 251:case 252:case 250:return 71===e.kind}return!1}function _(e){return e&&10===e.kind}function d(e){return 12===e.kind}function p(e){return 15===e.kind||16===e.kind}function f(e){return 41===e||63===e}function g(t){if(e.Debug.assert(void 0!==r),!m())return{leadingTrivia:v,trailingTrivia:void 0,token:void 0};var n=u(t)?1:d(t)?2:p(t)?3:l(t)?4:_(t)?5:0;if(S&&n===k)return y(S,t);r.getStartPos()!==x&&(e.Debug.assert(void 0!==S),r.setTextPos(x),r.scan());var a=r.getToken();1===n&&29===a?(a=r.reScanGreaterToken(),e.Debug.assert(t.kind===a),k=1):2===n&&f(a)?(a=r.reScanSlashToken(),e.Debug.assert(t.kind===a),k=2):3===n&&18===a?(a=r.reScanTemplateToken(),k=3):4===n&&71===a?(a=r.scanJsxIdentifier(),k=4):5===n?(a=r.reScanJsxToken(),k=5):k=0;var i={pos:r.getStartPos(),end:r.getTextPos(),kind:a};for(b&&(b=void 0);r.getStartPos()<s&&(a=r.scan(),e.isTrivia(a));){var o={pos:r.getStartPos(),end:r.getTextPos(),kind:a};if(b||(b=[]),b.push(o),4===a){r.scan();break}}return S={leadingTrivia:v,trailingTrivia:b,token:i},y(S,t)}function m(){e.Debug.assert(void 0!==r);var t=S?S.token.kind:r.getToken();return(S?S.token.pos:r.getStartPos())<s&&1!==t&&!e.isTrivia(t)}function y(t,n){return e.isToken(n)&&t.token.kind!==n.kind&&(t.token.kind=n.kind),t}function h(e){r.setTextPos(e.end),x=r.getStartPos(),k=void 0,S=void 0,T=!1,v=void 0,b=void 0;}e.Debug.assert(void 0===r,\"Scanner should be undefined\"),(r=1===n?o:i).setText(t),r.setTextPos(a);var v,b,x,k,S,T=!0;return{advance:c,readTokenInfo:g,isOnToken:m,getCurrentLeadingTrivia:function(){return v},lastTrailingTriviaWasNewLine:function(){return T},skipToEndOf:h,close:function(){e.Debug.assert(void 0!==r),S=void 0,r.setText(void 0),r=void 0;}}}var r,a,i=e.createScanner(5,!1,0),o=e.createScanner(5,!1,1);!function(e){e[e.Scan=0]=\"Scan\",e[e.RescanGreaterThanToken=1]=\"RescanGreaterThanToken\",e[e.RescanSlashToken=2]=\"RescanSlashToken\",e[e.RescanTemplateToken=3]=\"RescanTemplateToken\",e[e.RescanJsxIdentifier=4]=\"RescanJsxIdentifier\",e[e.RescanJsxText=5]=\"RescanJsxText\";}(a||(a={})),t.getFormattingScanner=n;}(e.formatting||(e.formatting={}));}(r||(r={}));!function(e){!function(t){var n=function(){function t(e,t,n){this.sourceFile=e,this.formattingRequestKind=t,this.options=n;}return t.prototype.updateContext=function(t,n,r,a,i){e.Debug.assert(void 0!==t,\"currentTokenSpan is null\"),e.Debug.assert(void 0!==n,\"currentTokenParent is null\"),e.Debug.assert(void 0!==r,\"nextTokenSpan is null\"),e.Debug.assert(void 0!==a,\"nextTokenParent is null\"),e.Debug.assert(void 0!==i,\"commonParent is null\"),this.currentTokenSpan=t,this.currentTokenParent=n,this.nextTokenSpan=r,this.nextTokenParent=a,this.contextNode=i,this.contextNodeAllOnSameLine=void 0,this.nextNodeAllOnSameLine=void 0,this.tokensAreOnSameLine=void 0,this.contextNodeBlockIsOnOneLine=void 0,this.nextNodeBlockIsOnOneLine=void 0;},t.prototype.ContextNodeAllOnSameLine=function(){return void 0===this.contextNodeAllOnSameLine&&(this.contextNodeAllOnSameLine=this.NodeIsOnOneLine(this.contextNode)),this.contextNodeAllOnSameLine},t.prototype.NextNodeAllOnSameLine=function(){return void 0===this.nextNodeAllOnSameLine&&(this.nextNodeAllOnSameLine=this.NodeIsOnOneLine(this.nextTokenParent)),this.nextNodeAllOnSameLine},t.prototype.TokensAreOnSameLine=function(){if(void 0===this.tokensAreOnSameLine){var e=this.sourceFile.getLineAndCharacterOfPosition(this.currentTokenSpan.pos).line,t=this.sourceFile.getLineAndCharacterOfPosition(this.nextTokenSpan.pos).line;this.tokensAreOnSameLine=e===t;}return this.tokensAreOnSameLine},t.prototype.ContextNodeBlockIsOnOneLine=function(){return void 0===this.contextNodeBlockIsOnOneLine&&(this.contextNodeBlockIsOnOneLine=this.BlockIsOnOneLine(this.contextNode)),this.contextNodeBlockIsOnOneLine},t.prototype.NextNodeBlockIsOnOneLine=function(){return void 0===this.nextNodeBlockIsOnOneLine&&(this.nextNodeBlockIsOnOneLine=this.BlockIsOnOneLine(this.nextTokenParent)),this.nextNodeBlockIsOnOneLine},t.prototype.NodeIsOnOneLine=function(e){return this.sourceFile.getLineAndCharacterOfPosition(e.getStart(this.sourceFile)).line===this.sourceFile.getLineAndCharacterOfPosition(e.getEnd()).line},t.prototype.BlockIsOnOneLine=function(t){var n=e.findChildOfKind(t,17,this.sourceFile),r=e.findChildOfKind(t,18,this.sourceFile);return!(!n||!r)&&this.sourceFile.getLineAndCharacterOfPosition(n.getEnd()).line===this.sourceFile.getLineAndCharacterOfPosition(r.getStart(this.sourceFile)).line},t}();t.FormattingContext=n;}(e.formatting||(e.formatting={}));}(r||(r={}));!function(e){!function(e){!function(e){e[e.FormatDocument=0]=\"FormatDocument\",e[e.FormatSelection=1]=\"FormatSelection\",e[e.FormatOnEnter=2]=\"FormatOnEnter\",e[e.FormatOnSemicolon=3]=\"FormatOnSemicolon\",e[e.FormatOnClosingCurlyBrace=4]=\"FormatOnClosingCurlyBrace\";}(e.FormattingRequestKind||(e.FormattingRequestKind={}));}(e.formatting||(e.formatting={}));}(r||(r={}));!function(e){!function(e){var t=function(){function e(e,t,n){void 0===n&&(n=0),this.Descriptor=e,this.Operation=t,this.Flag=n;}return e.prototype.toString=function(){return\"[desc=\"+this.Descriptor+\",operation=\"+this.Operation+\",flag=\"+this.Flag+\"]\"},e}();e.Rule=t;}(e.formatting||(e.formatting={}));}(r||(r={}));!function(e){!function(e){!function(e){e[e.Ignore=1]=\"Ignore\",e[e.Space=2]=\"Space\",e[e.NewLine=4]=\"NewLine\",e[e.Delete=8]=\"Delete\";}(e.RuleAction||(e.RuleAction={}));}(e.formatting||(e.formatting={}));}(r||(r={}));!function(e){!function(e){var t=function(){function t(e,t){this.LeftTokenRange=e,this.RightTokenRange=t;}return t.prototype.toString=function(){return\"[leftRange=\"+this.LeftTokenRange+\",rightRange=\"+this.RightTokenRange+\"]\"},t.create1=function(n,r){return t.create4(e.Shared.TokenRange.FromToken(n),e.Shared.TokenRange.FromToken(r))},t.create2=function(n,r){return t.create4(n,e.Shared.TokenRange.FromToken(r))},t.create3=function(n,r){return t.create4(e.Shared.TokenRange.FromToken(n),r)},t.create4=function(e,n){return new t(e,n)},t}();e.RuleDescriptor=t;}(e.formatting||(e.formatting={}));}(r||(r={}));!function(e){!function(e){!function(e){e[e.None=0]=\"None\",e[e.CanDeleteNewLines=1]=\"CanDeleteNewLines\";}(e.RuleFlags||(e.RuleFlags={}));}(e.formatting||(e.formatting={}));}(r||(r={}));!function(e){!function(e){var t=function(){function t(e,t){this.Context=e,this.Action=t;}return t.prototype.toString=function(){return\"[context=\"+this.Context+\",action=\"+this.Action+\"]\"},t.create1=function(n){return t.create2(e.RuleOperationContext.Any,n)},t.create2=function(e,n){return new t(e,n)},t}();e.RuleOperation=t;}(e.formatting||(e.formatting={}));}(r||(r={}));!function(e){!function(e){var t=function(){function e(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];this.customContextChecks=e;}return e.prototype.IsAny=function(){return this===e.Any},e.prototype.InContext=function(e){if(this.IsAny())return!0;for(var t=0,n=this.customContextChecks;t<n.length;t++)if(!(0,n[t])(e))return!1;return!0},e.Any=new e,e}();e.RuleOperationContext=t;}(e.formatting||(e.formatting={}));}(r||(r={}));!function(e){!function(t){var n=function(){function n(){this.IgnoreBeforeComment=new t.Rule(t.RuleDescriptor.create4(t.Shared.TokenRange.Any,t.Shared.TokenRange.Comments),t.RuleOperation.create1(1)),this.IgnoreAfterLineComment=new t.Rule(t.RuleDescriptor.create3(2,t.Shared.TokenRange.Any),t.RuleOperation.create1(1)),this.NoSpaceBeforeSemicolon=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Any,25),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),8)),this.NoSpaceBeforeColon=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Any,56),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsNotBinaryOpContext),8)),this.NoSpaceBeforeQuestionMark=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Any,55),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsNotBinaryOpContext),8)),this.SpaceAfterColon=new t.Rule(t.RuleDescriptor.create3(56,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsNotBinaryOpContext),2)),this.SpaceAfterQuestionMarkInConditionalOperator=new t.Rule(t.RuleDescriptor.create3(55,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsConditionalOperatorContext),2)),this.NoSpaceAfterQuestionMark=new t.Rule(t.RuleDescriptor.create3(55,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),8)),this.SpaceAfterSemicolon=new t.Rule(t.RuleDescriptor.create3(25,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),2)),this.SpaceAfterCloseBrace=new t.Rule(t.RuleDescriptor.create3(18,t.Shared.TokenRange.FromRange(0,142,[20])),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsAfterCodeBlockContext),2)),this.SpaceBetweenCloseBraceAndElse=new t.Rule(t.RuleDescriptor.create1(18,82),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),2)),this.SpaceBetweenCloseBraceAndWhile=new t.Rule(t.RuleDescriptor.create1(18,106),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),2)),this.NoSpaceAfterCloseBrace=new t.Rule(t.RuleDescriptor.create3(18,t.Shared.TokenRange.FromTokens([22,26,25])),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),8)),this.NoSpaceBeforeDot=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Any,23),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),8)),this.NoSpaceAfterDot=new t.Rule(t.RuleDescriptor.create3(23,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),8)),this.NoSpaceBeforeOpenBracket=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.AnyExcept(120),21),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),8)),this.NoSpaceAfterCloseBracket=new t.Rule(t.RuleDescriptor.create3(22,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsNotBeforeBlockInFunctionDeclarationContext),8)),this.FunctionOpenBraceLeftTokenRange=t.Shared.TokenRange.AnyIncludingMultilineComments,this.SpaceBeforeOpenBraceInFunction=new t.Rule(t.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange,17),t.RuleOperation.create2(new t.RuleOperationContext(n.IsFunctionDeclContext,n.IsBeforeBlockContext,n.IsNotFormatOnEnter,n.IsSameLineTokenOrBeforeMultilineBlockContext),2),1),this.TypeScriptOpenBraceLeftTokenRange=t.Shared.TokenRange.FromTokens([71,3,75,84,91]),this.SpaceBeforeOpenBraceInTypeScriptDeclWithBlock=new t.Rule(t.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange,17),t.RuleOperation.create2(new t.RuleOperationContext(n.IsTypeScriptDeclWithBlockContext,n.IsNotFormatOnEnter,n.IsSameLineTokenOrBeforeMultilineBlockContext),2),1),this.ControlOpenBraceLeftTokenRange=t.Shared.TokenRange.FromTokens([20,3,81,102,87,82]),this.SpaceBeforeOpenBraceInControl=new t.Rule(t.RuleDescriptor.create2(this.ControlOpenBraceLeftTokenRange,17),t.RuleOperation.create2(new t.RuleOperationContext(n.IsControlDeclContext,n.IsNotFormatOnEnter,n.IsSameLineTokenOrBeforeMultilineBlockContext),2),1),this.SpaceAfterOpenBrace=new t.Rule(t.RuleDescriptor.create3(17,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionEnabledOrUndefined(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces\"),n.IsBraceWrappedContext),2)),this.SpaceBeforeCloseBrace=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Any,18),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionEnabledOrUndefined(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces\"),n.IsBraceWrappedContext),2)),this.NoSpaceAfterOpenBrace=new t.Rule(t.RuleDescriptor.create3(17,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionDisabled(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces\"),n.IsNonJsxSameLineTokenContext),8)),this.NoSpaceBeforeCloseBrace=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Any,18),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionDisabled(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces\"),n.IsNonJsxSameLineTokenContext),8)),this.NoSpaceBetweenEmptyBraceBrackets=new t.Rule(t.RuleDescriptor.create1(17,18),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsObjectContext),8)),this.NewLineAfterOpenBraceInBlockContext=new t.Rule(t.RuleDescriptor.create3(17,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsMultilineBlockContext),4)),this.NewLineBeforeCloseBraceInBlockContext=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.AnyIncludingMultilineComments,18),t.RuleOperation.create2(new t.RuleOperationContext(n.IsMultilineBlockContext),4)),this.NoSpaceAfterUnaryPrefixOperator=new t.Rule(t.RuleDescriptor.create4(t.Shared.TokenRange.UnaryPrefixOperators,t.Shared.TokenRange.UnaryPrefixExpressions),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsNotBinaryOpContext),8)),this.NoSpaceAfterUnaryPreincrementOperator=new t.Rule(t.RuleDescriptor.create3(43,t.Shared.TokenRange.UnaryPreincrementExpressions),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),8)),this.NoSpaceAfterUnaryPredecrementOperator=new t.Rule(t.RuleDescriptor.create3(44,t.Shared.TokenRange.UnaryPredecrementExpressions),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),8)),this.NoSpaceBeforeUnaryPostincrementOperator=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.UnaryPostincrementExpressions,43),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),8)),this.NoSpaceBeforeUnaryPostdecrementOperator=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.UnaryPostdecrementExpressions,44),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),8)),this.SpaceAfterPostincrementWhenFollowedByAdd=new t.Rule(t.RuleDescriptor.create1(43,37),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsBinaryOpContext),2)),this.SpaceAfterAddWhenFollowedByUnaryPlus=new t.Rule(t.RuleDescriptor.create1(37,37),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsBinaryOpContext),2)),this.SpaceAfterAddWhenFollowedByPreincrement=new t.Rule(t.RuleDescriptor.create1(37,43),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsBinaryOpContext),2)),this.SpaceAfterPostdecrementWhenFollowedBySubtract=new t.Rule(t.RuleDescriptor.create1(44,38),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsBinaryOpContext),2)),this.SpaceAfterSubtractWhenFollowedByUnaryMinus=new t.Rule(t.RuleDescriptor.create1(38,38),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsBinaryOpContext),2)),this.SpaceAfterSubtractWhenFollowedByPredecrement=new t.Rule(t.RuleDescriptor.create1(38,44),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsBinaryOpContext),2)),this.NoSpaceBeforeComma=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Any,26),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),8)),this.SpaceAfterCertainKeywords=new t.Rule(t.RuleDescriptor.create4(t.Shared.TokenRange.FromTokens([104,100,94,80,96,103,121]),t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),2)),this.NoSpaceAfterNewKeywordOnConstructorSignature=new t.Rule(t.RuleDescriptor.create1(94,19),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsConstructorSignatureContext),8)),this.SpaceAfterLetConstInVariableDeclaration=new t.Rule(t.RuleDescriptor.create4(t.Shared.TokenRange.FromTokens([110,76]),t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsStartOfVariableDeclarationList),2)),this.NoSpaceBeforeOpenParenInFuncCall=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Any,19),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsFunctionCallOrNewContext,n.IsPreviousTokenNotComma),8)),this.SpaceAfterFunctionInFuncDecl=new t.Rule(t.RuleDescriptor.create3(89,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsFunctionDeclContext),2)),this.SpaceBeforeOpenParenInFuncDecl=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Any,19),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionEnabled(\"insertSpaceBeforeFunctionParenthesis\"),n.IsNonJsxSameLineTokenContext,n.IsFunctionDeclContext),2)),this.NoSpaceBeforeOpenParenInFuncDecl=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Any,19),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionDisabledOrUndefined(\"insertSpaceBeforeFunctionParenthesis\"),n.IsNonJsxSameLineTokenContext,n.IsFunctionDeclContext),8)),this.SpaceAfterVoidOperator=new t.Rule(t.RuleDescriptor.create3(105,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsVoidOpContext),2)),this.NoSpaceBetweenReturnAndSemicolon=new t.Rule(t.RuleDescriptor.create1(96,25),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),8)),this.SpaceBetweenStatements=new t.Rule(t.RuleDescriptor.create4(t.Shared.TokenRange.FromTokens([20,81,82,73]),t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsNonJsxElementContext,n.IsNotForContext),2)),this.SpaceAfterTryFinally=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.FromTokens([102,87]),17),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),2)),this.SpaceAfterGetSetInMember=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.FromTokens([125,135]),71),t.RuleOperation.create2(new t.RuleOperationContext(n.IsFunctionDeclContext),2)),this.SpaceBeforeBinaryKeywordOperator=new t.Rule(t.RuleDescriptor.create4(t.Shared.TokenRange.Any,t.Shared.TokenRange.BinaryKeywordOperators),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsBinaryOpContext),2)),this.SpaceAfterBinaryKeywordOperator=new t.Rule(t.RuleDescriptor.create4(t.Shared.TokenRange.BinaryKeywordOperators,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsBinaryOpContext),2)),this.SpaceAfterConstructor=new t.Rule(t.RuleDescriptor.create1(123,19),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionEnabled(\"insertSpaceAfterConstructor\"),n.IsNonJsxSameLineTokenContext),2)),this.NoSpaceAfterConstructor=new t.Rule(t.RuleDescriptor.create1(123,19),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionDisabledOrUndefined(\"insertSpaceAfterConstructor\"),n.IsNonJsxSameLineTokenContext),8)),this.NoSpaceAfterModuleImport=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.FromTokens([128,132]),19),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),8)),this.SpaceAfterCertainTypeScriptKeywords=new t.Rule(t.RuleDescriptor.create4(t.Shared.TokenRange.FromTokens([117,75,124,79,83,84,85,125,108,91,109,128,129,112,114,113,131,135,115,138,140,127]),t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),2)),this.SpaceBeforeCertainTypeScriptKeywords=new t.Rule(t.RuleDescriptor.create4(t.Shared.TokenRange.Any,t.Shared.TokenRange.FromTokens([85,108,140])),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),2)),this.SpaceAfterModuleName=new t.Rule(t.RuleDescriptor.create1(9,17),t.RuleOperation.create2(new t.RuleOperationContext(n.IsModuleDeclContext),2)),this.SpaceBeforeArrow=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Any,36),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),2)),this.SpaceAfterArrow=new t.Rule(t.RuleDescriptor.create3(36,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),2)),this.NoSpaceAfterEllipsis=new t.Rule(t.RuleDescriptor.create1(24,71),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),8)),this.NoSpaceAfterOptionalParameters=new t.Rule(t.RuleDescriptor.create3(55,t.Shared.TokenRange.FromTokens([20,26])),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsNotBinaryOpContext),8)),this.NoSpaceBeforeOpenAngularBracket=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.TypeNames,27),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsTypeArgumentOrParameterOrAssertionContext),8)),this.NoSpaceBetweenCloseParenAndAngularBracket=new t.Rule(t.RuleDescriptor.create1(20,27),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsTypeArgumentOrParameterOrAssertionContext),8)),this.NoSpaceAfterOpenAngularBracket=new t.Rule(t.RuleDescriptor.create3(27,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsTypeArgumentOrParameterOrAssertionContext),8)),this.NoSpaceBeforeCloseAngularBracket=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Any,29),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsTypeArgumentOrParameterOrAssertionContext),8)),this.NoSpaceAfterCloseAngularBracket=new t.Rule(t.RuleDescriptor.create3(29,t.Shared.TokenRange.FromTokens([19,21,29,26])),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsTypeArgumentOrParameterOrAssertionContext),8)),this.NoSpaceBetweenEmptyInterfaceBraceBrackets=new t.Rule(t.RuleDescriptor.create1(17,18),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsObjectTypeContext),8)),this.SpaceBeforeAt=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Any,57),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),2)),this.NoSpaceAfterAt=new t.Rule(t.RuleDescriptor.create3(57,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),8)),this.SpaceAfterDecorator=new t.Rule(t.RuleDescriptor.create4(t.Shared.TokenRange.Any,t.Shared.TokenRange.FromTokens([117,71,84,79,75,115,114,112,113,125,135,21,39])),t.RuleOperation.create2(new t.RuleOperationContext(n.IsEndOfDecoratorContextOnSameLine),2)),this.NoSpaceBetweenFunctionKeywordAndStar=new t.Rule(t.RuleDescriptor.create1(89,39),t.RuleOperation.create2(new t.RuleOperationContext(n.IsFunctionDeclarationOrFunctionExpressionContext),8)),this.SpaceAfterStarInGeneratorDeclaration=new t.Rule(t.RuleDescriptor.create3(39,t.Shared.TokenRange.FromTokens([71,19])),t.RuleOperation.create2(new t.RuleOperationContext(n.IsFunctionDeclarationOrFunctionExpressionContext),2)),this.NoSpaceBetweenYieldKeywordAndStar=new t.Rule(t.RuleDescriptor.create1(116,39),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsYieldOrYieldStarWithOperand),8)),this.SpaceBetweenYieldOrYieldStarAndOperand=new t.Rule(t.RuleDescriptor.create4(t.Shared.TokenRange.FromTokens([116,39]),t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsYieldOrYieldStarWithOperand),2)),this.SpaceBetweenAsyncAndOpenParen=new t.Rule(t.RuleDescriptor.create1(120,19),t.RuleOperation.create2(new t.RuleOperationContext(n.IsArrowFunctionContext,n.IsNonJsxSameLineTokenContext),2)),this.SpaceBetweenAsyncAndFunctionKeyword=new t.Rule(t.RuleDescriptor.create1(120,89),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),2)),this.NoSpaceBetweenTagAndTemplateString=new t.Rule(t.RuleDescriptor.create3(71,t.Shared.TokenRange.FromTokens([13,14])),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),8)),this.SpaceBeforeJsxAttribute=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Any,71),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNextTokenParentJsxAttribute,n.IsNonJsxSameLineTokenContext),2)),this.SpaceBeforeSlashInJsxOpeningElement=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Any,41),t.RuleOperation.create2(new t.RuleOperationContext(n.IsJsxSelfClosingElementContext,n.IsNonJsxSameLineTokenContext),2)),this.NoSpaceBeforeGreaterThanTokenInJsxOpeningElement=new t.Rule(t.RuleDescriptor.create1(41,29),t.RuleOperation.create2(new t.RuleOperationContext(n.IsJsxSelfClosingElementContext,n.IsNonJsxSameLineTokenContext),8)),this.NoSpaceBeforeEqualInJsxAttribute=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Any,58),t.RuleOperation.create2(new t.RuleOperationContext(n.IsJsxAttributeContext,n.IsNonJsxSameLineTokenContext),8)),this.NoSpaceAfterEqualInJsxAttribute=new t.Rule(t.RuleDescriptor.create3(58,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsJsxAttributeContext,n.IsNonJsxSameLineTokenContext),8)),this.NoSpaceBeforeNonNullAssertionOperator=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Any,51),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext,n.IsNonNullAssertionContext),8)),this.SpaceAfterComma=new t.Rule(t.RuleDescriptor.create3(26,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionEnabled(\"insertSpaceAfterCommaDelimiter\"),n.IsNonJsxSameLineTokenContext,n.IsNonJsxElementContext,n.IsNextTokenNotCloseBracket),2)),this.NoSpaceAfterComma=new t.Rule(t.RuleDescriptor.create3(26,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionDisabledOrUndefined(\"insertSpaceAfterCommaDelimiter\"),n.IsNonJsxSameLineTokenContext,n.IsNonJsxElementContext),8)),this.SpaceBeforeBinaryOperator=new t.Rule(t.RuleDescriptor.create4(t.Shared.TokenRange.Any,t.Shared.TokenRange.BinaryOperators),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionEnabled(\"insertSpaceBeforeAndAfterBinaryOperators\"),n.IsNonJsxSameLineTokenContext,n.IsBinaryOpContext),2)),this.SpaceAfterBinaryOperator=new t.Rule(t.RuleDescriptor.create4(t.Shared.TokenRange.BinaryOperators,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionEnabled(\"insertSpaceBeforeAndAfterBinaryOperators\"),n.IsNonJsxSameLineTokenContext,n.IsBinaryOpContext),2)),this.NoSpaceBeforeBinaryOperator=new t.Rule(t.RuleDescriptor.create4(t.Shared.TokenRange.Any,t.Shared.TokenRange.BinaryOperators),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionDisabledOrUndefined(\"insertSpaceBeforeAndAfterBinaryOperators\"),n.IsNonJsxSameLineTokenContext,n.IsBinaryOpContext),8)),this.NoSpaceAfterBinaryOperator=new t.Rule(t.RuleDescriptor.create4(t.Shared.TokenRange.BinaryOperators,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionDisabledOrUndefined(\"insertSpaceBeforeAndAfterBinaryOperators\"),n.IsNonJsxSameLineTokenContext,n.IsBinaryOpContext),8)),this.SpaceAfterKeywordInControl=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Keywords,19),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionEnabled(\"insertSpaceAfterKeywordsInControlFlowStatements\"),n.IsControlDeclContext),2)),this.NoSpaceAfterKeywordInControl=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Keywords,19),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionDisabledOrUndefined(\"insertSpaceAfterKeywordsInControlFlowStatements\"),n.IsControlDeclContext),8)),this.NewLineBeforeOpenBraceInFunction=new t.Rule(t.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange,17),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionEnabled(\"placeOpenBraceOnNewLineForFunctions\"),n.IsFunctionDeclContext,n.IsBeforeMultilineBlockContext),4),1),this.NewLineBeforeOpenBraceInTypeScriptDeclWithBlock=new t.Rule(t.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange,17),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionEnabled(\"placeOpenBraceOnNewLineForFunctions\"),n.IsTypeScriptDeclWithBlockContext,n.IsBeforeMultilineBlockContext),4),1),this.NewLineBeforeOpenBraceInControl=new t.Rule(t.RuleDescriptor.create2(this.ControlOpenBraceLeftTokenRange,17),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionEnabled(\"placeOpenBraceOnNewLineForControlBlocks\"),n.IsControlDeclContext,n.IsBeforeMultilineBlockContext),4),1),this.SpaceAfterSemicolonInFor=new t.Rule(t.RuleDescriptor.create3(25,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionEnabled(\"insertSpaceAfterSemicolonInForStatements\"),n.IsNonJsxSameLineTokenContext,n.IsForContext),2)),this.NoSpaceAfterSemicolonInFor=new t.Rule(t.RuleDescriptor.create3(25,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionDisabledOrUndefined(\"insertSpaceAfterSemicolonInForStatements\"),n.IsNonJsxSameLineTokenContext,n.IsForContext),8)),this.SpaceAfterOpenParen=new t.Rule(t.RuleDescriptor.create3(19,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionEnabled(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis\"),n.IsNonJsxSameLineTokenContext),2)),this.SpaceBeforeCloseParen=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Any,20),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionEnabled(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis\"),n.IsNonJsxSameLineTokenContext),2)),this.NoSpaceBetweenParens=new t.Rule(t.RuleDescriptor.create1(19,20),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),8)),this.NoSpaceAfterOpenParen=new t.Rule(t.RuleDescriptor.create3(19,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionDisabledOrUndefined(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis\"),n.IsNonJsxSameLineTokenContext),8)),this.NoSpaceBeforeCloseParen=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Any,20),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionDisabledOrUndefined(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis\"),n.IsNonJsxSameLineTokenContext),8)),this.SpaceAfterOpenBracket=new t.Rule(t.RuleDescriptor.create3(21,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionEnabled(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets\"),n.IsNonJsxSameLineTokenContext),2)),this.SpaceBeforeCloseBracket=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Any,22),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionEnabled(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets\"),n.IsNonJsxSameLineTokenContext),2)),this.NoSpaceBetweenBrackets=new t.Rule(t.RuleDescriptor.create1(21,22),t.RuleOperation.create2(new t.RuleOperationContext(n.IsNonJsxSameLineTokenContext),8)),this.NoSpaceAfterOpenBracket=new t.Rule(t.RuleDescriptor.create3(21,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionDisabledOrUndefined(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets\"),n.IsNonJsxSameLineTokenContext),8)),this.NoSpaceBeforeCloseBracket=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Any,22),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionDisabledOrUndefined(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets\"),n.IsNonJsxSameLineTokenContext),8)),this.NoSpaceAfterTemplateHeadAndMiddle=new t.Rule(t.RuleDescriptor.create4(t.Shared.TokenRange.FromTokens([14,15]),t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionDisabledOrUndefined(\"insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces\"),n.IsNonJsxSameLineTokenContext),8)),this.SpaceAfterTemplateHeadAndMiddle=new t.Rule(t.RuleDescriptor.create4(t.Shared.TokenRange.FromTokens([14,15]),t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionEnabled(\"insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces\"),n.IsNonJsxSameLineTokenContext),2)),this.NoSpaceBeforeTemplateMiddleAndTail=new t.Rule(t.RuleDescriptor.create4(t.Shared.TokenRange.Any,t.Shared.TokenRange.FromTokens([15,16])),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionDisabledOrUndefined(\"insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces\"),n.IsNonJsxSameLineTokenContext),8)),this.SpaceBeforeTemplateMiddleAndTail=new t.Rule(t.RuleDescriptor.create4(t.Shared.TokenRange.Any,t.Shared.TokenRange.FromTokens([15,16])),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionEnabled(\"insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces\"),n.IsNonJsxSameLineTokenContext),2)),this.NoSpaceAfterOpenBraceInJsxExpression=new t.Rule(t.RuleDescriptor.create3(17,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionDisabledOrUndefined(\"insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces\"),n.IsNonJsxSameLineTokenContext,n.IsJsxExpressionContext),8)),this.SpaceAfterOpenBraceInJsxExpression=new t.Rule(t.RuleDescriptor.create3(17,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionEnabled(\"insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces\"),n.IsNonJsxSameLineTokenContext,n.IsJsxExpressionContext),2)),this.NoSpaceBeforeCloseBraceInJsxExpression=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Any,18),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionDisabledOrUndefined(\"insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces\"),n.IsNonJsxSameLineTokenContext,n.IsJsxExpressionContext),8)),this.SpaceBeforeCloseBraceInJsxExpression=new t.Rule(t.RuleDescriptor.create2(t.Shared.TokenRange.Any,18),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionEnabled(\"insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces\"),n.IsNonJsxSameLineTokenContext,n.IsJsxExpressionContext),2)),this.SpaceAfterAnonymousFunctionKeyword=new t.Rule(t.RuleDescriptor.create1(89,19),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionEnabled(\"insertSpaceAfterFunctionKeywordForAnonymousFunctions\"),n.IsFunctionDeclContext),2)),this.NoSpaceAfterAnonymousFunctionKeyword=new t.Rule(t.RuleDescriptor.create1(89,19),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionDisabledOrUndefined(\"insertSpaceAfterFunctionKeywordForAnonymousFunctions\"),n.IsFunctionDeclContext),8)),this.NoSpaceAfterTypeAssertion=new t.Rule(t.RuleDescriptor.create3(29,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionDisabledOrUndefined(\"insertSpaceAfterTypeAssertion\"),n.IsNonJsxSameLineTokenContext,n.IsTypeAssertionContext),8)),this.SpaceAfterTypeAssertion=new t.Rule(t.RuleDescriptor.create3(29,t.Shared.TokenRange.Any),t.RuleOperation.create2(new t.RuleOperationContext(n.IsOptionEnabled(\"insertSpaceAfterTypeAssertion\"),n.IsNonJsxSameLineTokenContext,n.IsTypeAssertionContext),2)),this.HighPriorityCommonRules=[this.IgnoreBeforeComment,this.IgnoreAfterLineComment,this.NoSpaceBeforeColon,this.SpaceAfterColon,this.NoSpaceBeforeQuestionMark,this.SpaceAfterQuestionMarkInConditionalOperator,this.NoSpaceAfterQuestionMark,this.NoSpaceBeforeDot,this.NoSpaceAfterDot,this.NoSpaceAfterUnaryPrefixOperator,this.NoSpaceAfterUnaryPreincrementOperator,this.NoSpaceAfterUnaryPredecrementOperator,this.NoSpaceBeforeUnaryPostincrementOperator,this.NoSpaceBeforeUnaryPostdecrementOperator,this.SpaceAfterPostincrementWhenFollowedByAdd,this.SpaceAfterAddWhenFollowedByUnaryPlus,this.SpaceAfterAddWhenFollowedByPreincrement,this.SpaceAfterPostdecrementWhenFollowedBySubtract,this.SpaceAfterSubtractWhenFollowedByUnaryMinus,this.SpaceAfterSubtractWhenFollowedByPredecrement,this.NoSpaceAfterCloseBrace,this.NewLineBeforeCloseBraceInBlockContext,this.SpaceAfterCloseBrace,this.SpaceBetweenCloseBraceAndElse,this.SpaceBetweenCloseBraceAndWhile,this.NoSpaceBetweenEmptyBraceBrackets,this.NoSpaceBetweenFunctionKeywordAndStar,this.SpaceAfterStarInGeneratorDeclaration,this.SpaceAfterFunctionInFuncDecl,this.NewLineAfterOpenBraceInBlockContext,this.SpaceAfterGetSetInMember,this.NoSpaceBetweenYieldKeywordAndStar,this.SpaceBetweenYieldOrYieldStarAndOperand,this.NoSpaceBetweenReturnAndSemicolon,this.SpaceAfterCertainKeywords,this.SpaceAfterLetConstInVariableDeclaration,this.NoSpaceBeforeOpenParenInFuncCall,this.SpaceBeforeBinaryKeywordOperator,this.SpaceAfterBinaryKeywordOperator,this.SpaceAfterVoidOperator,this.SpaceBetweenAsyncAndOpenParen,this.SpaceBetweenAsyncAndFunctionKeyword,this.NoSpaceBetweenTagAndTemplateString,this.SpaceBeforeJsxAttribute,this.SpaceBeforeSlashInJsxOpeningElement,this.NoSpaceBeforeGreaterThanTokenInJsxOpeningElement,this.NoSpaceBeforeEqualInJsxAttribute,this.NoSpaceAfterEqualInJsxAttribute,this.NoSpaceAfterModuleImport,this.SpaceAfterCertainTypeScriptKeywords,this.SpaceBeforeCertainTypeScriptKeywords,this.SpaceAfterModuleName,this.SpaceBeforeArrow,this.SpaceAfterArrow,this.NoSpaceAfterEllipsis,this.NoSpaceAfterOptionalParameters,this.NoSpaceBetweenEmptyInterfaceBraceBrackets,this.NoSpaceBeforeOpenAngularBracket,this.NoSpaceBetweenCloseParenAndAngularBracket,this.NoSpaceAfterOpenAngularBracket,this.NoSpaceBeforeCloseAngularBracket,this.NoSpaceAfterCloseAngularBracket,this.SpaceBeforeAt,this.NoSpaceAfterAt,this.SpaceAfterDecorator,this.NoSpaceBeforeNonNullAssertionOperator,this.NoSpaceAfterNewKeywordOnConstructorSignature],this.UserConfigurableRules=[this.SpaceAfterConstructor,this.NoSpaceAfterConstructor,this.SpaceAfterComma,this.NoSpaceAfterComma,this.SpaceAfterAnonymousFunctionKeyword,this.NoSpaceAfterAnonymousFunctionKeyword,this.SpaceAfterKeywordInControl,this.NoSpaceAfterKeywordInControl,this.SpaceAfterOpenParen,this.SpaceBeforeCloseParen,this.NoSpaceBetweenParens,this.NoSpaceAfterOpenParen,this.NoSpaceBeforeCloseParen,this.SpaceAfterOpenBracket,this.SpaceBeforeCloseBracket,this.NoSpaceBetweenBrackets,this.NoSpaceAfterOpenBracket,this.NoSpaceBeforeCloseBracket,this.SpaceAfterOpenBrace,this.SpaceBeforeCloseBrace,this.NoSpaceBetweenEmptyBraceBrackets,this.NoSpaceAfterOpenBrace,this.NoSpaceBeforeCloseBrace,this.SpaceAfterTemplateHeadAndMiddle,this.SpaceBeforeTemplateMiddleAndTail,this.NoSpaceAfterTemplateHeadAndMiddle,this.NoSpaceBeforeTemplateMiddleAndTail,this.SpaceAfterOpenBraceInJsxExpression,this.SpaceBeforeCloseBraceInJsxExpression,this.NoSpaceAfterOpenBraceInJsxExpression,this.NoSpaceBeforeCloseBraceInJsxExpression,this.SpaceAfterSemicolonInFor,this.NoSpaceAfterSemicolonInFor,this.SpaceBeforeBinaryOperator,this.SpaceAfterBinaryOperator,this.NoSpaceBeforeBinaryOperator,this.NoSpaceAfterBinaryOperator,this.SpaceBeforeOpenParenInFuncDecl,this.NoSpaceBeforeOpenParenInFuncDecl,this.NewLineBeforeOpenBraceInControl,this.NewLineBeforeOpenBraceInFunction,this.NewLineBeforeOpenBraceInTypeScriptDeclWithBlock,this.SpaceAfterTypeAssertion,this.NoSpaceAfterTypeAssertion],this.LowPriorityCommonRules=[this.NoSpaceBeforeSemicolon,this.SpaceBeforeOpenBraceInControl,this.SpaceBeforeOpenBraceInFunction,this.SpaceBeforeOpenBraceInTypeScriptDeclWithBlock,this.NoSpaceBeforeComma,this.NoSpaceBeforeOpenBracket,this.NoSpaceAfterCloseBracket,this.SpaceAfterSemicolon,this.SpaceBetweenStatements,this.SpaceAfterTryFinally];}return n.prototype.getRuleName=function(e){var t=this;for(var n in t)if(t[n]===e)return n;throw new Error(\"Unknown rule\")},n.IsOptionEnabled=function(e){return function(t){return t.options&&t.options.hasOwnProperty(e)&&!!t.options[e]}},n.IsOptionDisabled=function(e){return function(t){return t.options&&t.options.hasOwnProperty(e)&&!t.options[e]}},n.IsOptionDisabledOrUndefined=function(e){return function(t){return!t.options||!t.options.hasOwnProperty(e)||!t.options[e]}},n.IsOptionEnabledOrUndefined=function(e){return function(t){return!t.options||!t.options.hasOwnProperty(e)||!!t.options[e]}},n.IsForContext=function(e){return 214===e.contextNode.kind},n.IsNotForContext=function(e){return!n.IsForContext(e)},n.IsBinaryOpContext=function(e){switch(e.contextNode.kind){case 194:case 195:case 202:case 246:case 242:case 158:case 166:case 167:return!0;case 176:case 231:case 237:case 226:case 146:case 264:case 149:case 148:return 58===e.currentTokenSpan.kind||58===e.nextTokenSpan.kind;case 215:case 145:return 92===e.currentTokenSpan.kind||92===e.nextTokenSpan.kind;case 216:return 142===e.currentTokenSpan.kind||142===e.nextTokenSpan.kind}return!1},n.IsNotBinaryOpContext=function(e){return!n.IsBinaryOpContext(e)},n.IsConditionalOperatorContext=function(e){return 195===e.contextNode.kind},n.IsSameLineTokenOrBeforeMultilineBlockContext=function(e){return e.TokensAreOnSameLine()||n.IsBeforeMultilineBlockContext(e)},n.IsBraceWrappedContext=function(e){return 174===e.contextNode.kind||n.IsSingleLineBlockContext(e)},n.IsBeforeMultilineBlockContext=function(e){return n.IsBeforeBlockContext(e)&&!(e.NextNodeAllOnSameLine()||e.NextNodeBlockIsOnOneLine())},n.IsMultilineBlockContext=function(e){return n.IsBlockContext(e)&&!(e.ContextNodeAllOnSameLine()||e.ContextNodeBlockIsOnOneLine())},n.IsSingleLineBlockContext=function(e){return n.IsBlockContext(e)&&(e.ContextNodeAllOnSameLine()||e.ContextNodeBlockIsOnOneLine())},n.IsBlockContext=function(e){return n.NodeIsBlockContext(e.contextNode)},n.IsBeforeBlockContext=function(e){return n.NodeIsBlockContext(e.nextTokenParent)},n.NodeIsBlockContext=function(e){if(n.NodeIsTypeScriptDeclWithBlockContext(e))return!0;switch(e.kind){case 207:case 235:case 178:case 234:return!0}return!1},n.IsFunctionDeclContext=function(e){switch(e.contextNode.kind){case 228:case 151:case 150:case 153:case 154:case 155:case 186:case 152:case 187:case 230:return!0}return!1},n.IsFunctionDeclarationOrFunctionExpressionContext=function(e){return 228===e.contextNode.kind||186===e.contextNode.kind},n.IsTypeScriptDeclWithBlockContext=function(e){return n.NodeIsTypeScriptDeclWithBlockContext(e.contextNode)},n.NodeIsTypeScriptDeclWithBlockContext=function(e){switch(e.kind){case 229:case 199:case 230:case 232:case 163:case 233:case 244:case 245:case 238:case 241:return!0}return!1},n.IsAfterCodeBlockContext=function(e){switch(e.currentTokenParent.kind){case 229:case 233:case 232:case 260:case 234:case 221:return!0;case 207:var t=e.currentTokenParent.parent;if(187!==t.kind&&186!==t.kind)return!0}return!1},n.IsControlDeclContext=function(e){switch(e.contextNode.kind){case 211:case 221:case 214:case 215:case 216:case 213:case 224:case 212:case 220:case 260:return!0;default:return!1}},n.IsObjectContext=function(e){return 178===e.contextNode.kind},n.IsFunctionCallContext=function(e){return 181===e.contextNode.kind},n.IsNewContext=function(e){return 182===e.contextNode.kind},n.IsFunctionCallOrNewContext=function(e){return n.IsFunctionCallContext(e)||n.IsNewContext(e)},n.IsPreviousTokenNotComma=function(e){return 26!==e.currentTokenSpan.kind},n.IsNextTokenNotCloseBracket=function(e){return 22!==e.nextTokenSpan.kind},n.IsArrowFunctionContext=function(e){return 187===e.contextNode.kind},n.IsNonJsxSameLineTokenContext=function(e){return e.TokensAreOnSameLine()&&10!==e.contextNode.kind},n.IsNonJsxElementContext=function(e){return 249!==e.contextNode.kind},n.IsJsxExpressionContext=function(e){return 256===e.contextNode.kind},n.IsNextTokenParentJsxAttribute=function(e){return 253===e.nextTokenParent.kind},n.IsJsxAttributeContext=function(e){return 253===e.contextNode.kind},n.IsJsxSelfClosingElementContext=function(e){return 250===e.contextNode.kind},n.IsNotBeforeBlockInFunctionDeclarationContext=function(e){return!n.IsFunctionDeclContext(e)&&!n.IsBeforeBlockContext(e)},n.IsEndOfDecoratorContextOnSameLine=function(e){return e.TokensAreOnSameLine()&&e.contextNode.decorators&&n.NodeIsInDecoratorContext(e.currentTokenParent)&&!n.NodeIsInDecoratorContext(e.nextTokenParent)},n.NodeIsInDecoratorContext=function(t){for(;e.isPartOfExpression(t);)t=t.parent;return 147===t.kind},n.IsStartOfVariableDeclarationList=function(e){return 227===e.currentTokenParent.kind&&e.currentTokenParent.getStart(e.sourceFile)===e.currentTokenSpan.pos},n.IsNotFormatOnEnter=function(e){return 2!==e.formattingRequestKind},n.IsModuleDeclContext=function(e){return 233===e.contextNode.kind},n.IsObjectTypeContext=function(e){return 163===e.contextNode.kind},n.IsConstructorSignatureContext=function(e){return 156===e.contextNode.kind},n.IsTypeArgumentOrParameterOrAssertion=function(e,t){if(27!==e.kind&&29!==e.kind)return!1;switch(t.kind){case 159:case 184:case 231:case 229:case 199:case 230:case 228:case 186:case 187:case 151:case 150:case 155:case 156:case 181:case 182:case 201:return!0;default:return!1}},n.IsTypeArgumentOrParameterOrAssertionContext=function(e){return n.IsTypeArgumentOrParameterOrAssertion(e.currentTokenSpan,e.currentTokenParent)||n.IsTypeArgumentOrParameterOrAssertion(e.nextTokenSpan,e.nextTokenParent)},n.IsTypeAssertionContext=function(e){return 184===e.contextNode.kind},n.IsVoidOpContext=function(e){return 105===e.currentTokenSpan.kind&&190===e.currentTokenParent.kind},n.IsYieldOrYieldStarWithOperand=function(e){return 197===e.contextNode.kind&&void 0!==e.contextNode.expression},n.IsNonNullAssertionContext=function(e){return 203===e.contextNode.kind},n}();t.Rules=n;}(e.formatting||(e.formatting={}));}(r||(r={}));!function(e){!function(t){var n=function(){function t(){this.map=[],this.mapRowLength=0;}return t.create=function(e){var n=new t;return n.Initialize(e),n},t.prototype.Initialize=function(e){this.mapRowLength=143,this.map=new Array(this.mapRowLength*this.mapRowLength);var t=new Array(this.map.length);return this.FillRules(e,t),this.map},t.prototype.FillRules=function(e,t){var n=this;e.forEach(function(e){n.FillRule(e,t);});},t.prototype.GetRuleBucketIndex=function(t,n){return e.Debug.assert(t<=142&&n<=142,\"Must compute formatting context from tokens\"),t*this.mapRowLength+n},t.prototype.FillRule=function(e,t){var n=this,r=e.Descriptor.LeftTokenRange.isSpecific()&&e.Descriptor.RightTokenRange.isSpecific();e.Descriptor.LeftTokenRange.GetTokens().forEach(function(a){e.Descriptor.RightTokenRange.GetTokens().forEach(function(o){var s=n.GetRuleBucketIndex(a,o),c=n.map[s];void 0===c&&(c=n.map[s]=new i),c.AddRule(e,r,t,s);});});},t.prototype.GetRule=function(e){var t=this.GetRuleBucketIndex(e.currentTokenSpan.kind,e.nextTokenSpan.kind),n=this.map[t];if(n)for(var r=0,a=n.Rules();r<a.length;r++){var i=a[r];if(i.Operation.Context.InContext(e))return i}},t}();t.RulesMap=n;var r;!function(e){e[e.IgnoreRulesSpecific=0]=\"IgnoreRulesSpecific\",e[e.IgnoreRulesAny=5]=\"IgnoreRulesAny\",e[e.ContextRulesSpecific=10]=\"ContextRulesSpecific\",e[e.ContextRulesAny=15]=\"ContextRulesAny\",e[e.NoContextRulesSpecific=20]=\"NoContextRulesSpecific\",e[e.NoContextRulesAny=25]=\"NoContextRulesAny\";}(r=t.RulesPosition||(t.RulesPosition={}));var a=function(){function t(){this.rulesInsertionIndexBitmap=0;}return t.prototype.GetInsertionIndex=function(e){for(var t=0,n=0,r=this.rulesInsertionIndexBitmap;n<=e;)t+=31&r,r>>=5,n+=5;return t},t.prototype.IncreaseInsertionIndex=function(t){var n=this.rulesInsertionIndexBitmap>>t&31;n++,e.Debug.assert((31&n)===n,\"Adding more rules into the sub-bucket than allowed. Maximum allowed is 32 rules.\");var r=this.rulesInsertionIndexBitmap&~(31<<t);r|=n<<t,this.rulesInsertionIndexBitmap=r;},t}();t.RulesBucketConstructionState=a;var i=function(){function e(){this.rules=[];}return e.prototype.Rules=function(){return this.rules},e.prototype.AddRule=function(e,t,n,i){var o;o=1===e.Operation.Action?t?r.IgnoreRulesSpecific:r.IgnoreRulesAny:e.Operation.Context.IsAny()?t?r.NoContextRulesSpecific:r.NoContextRulesAny:t?r.ContextRulesSpecific:r.ContextRulesAny;var s=n[i];void 0===s&&(s=n[i]=new a);var c=s.GetInsertionIndex(o);this.rules.splice(c,0,e),s.IncreaseInsertionIndex(o);},e}();t.RulesBucket=i;}(e.formatting||(e.formatting={}));}(r||(r={}));!function(e){!function(t){!function(t){for(var n=[],r=0;r<=142;r++)n.push(r);var a=function(){function e(e){void 0===e&&(e=[]),this.tokens=e;}return e.prototype.GetTokens=function(){return this.tokens},e.prototype.Contains=function(e){return this.tokens.indexOf(e)>=0},e.prototype.isSpecific=function(){return!0},e}(),i=function(){function e(e){this.token=e;}return e.prototype.GetTokens=function(){return[this.token]},e.prototype.Contains=function(e){return e===this.token},e.prototype.isSpecific=function(){return!0},e}(),o=function(){function e(){}return e.prototype.GetTokens=function(){return n},e.prototype.Contains=function(){return!0},e.prototype.toString=function(){return\"[allTokens]\"},e.prototype.isSpecific=function(){return!1},e}(),s=function(){function e(e){this.except=e;}return e.prototype.GetTokens=function(){var e=this;return n.filter(function(t){return t!==e.except})},e.prototype.Contains=function(e){return e!==this.except},e.prototype.isSpecific=function(){return!1},e}();!function(t){function r(e){return new i(e)}function c(e){return new a(e)}function u(t,n,r){void 0===r&&(r=[]);for(var i=[],o=t;o<=n;o++)e.indexOf(r,o)<0&&i.push(o);return new a(i)}function l(e){return new s(e)}t.FromToken=r,t.FromTokens=c,t.FromRange=u,t.AnyExcept=l,t.Any=new o,t.AnyIncludingMultilineComments=t.FromTokens(n.concat([3])),t.Keywords=t.FromRange(72,142),t.BinaryOperators=t.FromRange(27,70),t.BinaryKeywordOperators=t.FromTokens([92,93,142,118,126]),t.UnaryPrefixOperators=t.FromTokens([43,44,52,51]),t.UnaryPrefixExpressions=t.FromTokens([8,71,19,21,17,99,94]),t.UnaryPreincrementExpressions=t.FromTokens([71,19,99,94]),t.UnaryPostincrementExpressions=t.FromTokens([71,20,22,94]),t.UnaryPredecrementExpressions=t.FromTokens([71,19,99,94]),t.UnaryPostdecrementExpressions=t.FromTokens([71,20,22,94]),t.Comments=t.FromTokens([2,3]),t.TypeNames=t.FromTokens([71,133,136,122,137,105,119]);}(t.TokenRange||(t.TokenRange={}));}(t.Shared||(t.Shared={}));}(e.formatting||(e.formatting={}));}(r||(r={}));!function(e){!function(t){var n=function(){function n(){this.globalRules=new t.Rules;var e=this.globalRules.HighPriorityCommonRules.slice(0).concat(this.globalRules.UserConfigurableRules).concat(this.globalRules.LowPriorityCommonRules);this.rulesMap=t.RulesMap.create(e);}return n.prototype.getRuleName=function(e){return this.globalRules.getRuleName(e)},n.prototype.getRuleByName=function(e){return this.globalRules[e]},n.prototype.getRulesMap=function(){return this.rulesMap},n.prototype.getFormatOptions=function(){return this.options},n.prototype.ensureUpToDate=function(t){this.options&&e.compareDataObjects(this.options,t)||(this.options=e.clone(t));},n}();t.RulesProvider=n;}(e.formatting||(e.formatting={}));}(r||(r={}));!function(e){!function(t){function n(t,n,r,a){var i=n.getLineAndCharacterOfPosition(t).line;if(0===i)return[];for(var o=e.getEndLinePosition(i,n);e.isWhiteSpaceSingleLine(n.text.charCodeAt(o));)o--;return e.isLineBreak(n.text.charCodeAt(o))&&o--,g({pos:e.getStartPositionOfLine(i-1,n),end:o+1},n,a,r,2)}function r(e,t,n,r){return s(e,25,t,r,n,3)}function a(e,t,n,r){return s(e,18,t,r,n,4)}function i(e,t,n){return g({pos:0,end:e.text.length},e,n,t,0)}function o(t,n,r,a,i){return g({pos:e.getLineStartPositionForPosition(t,r),end:n},r,i,a,1)}function s(t,n,r,a,i,o){var s=c(t,n,r);return s?g({pos:e.getLineStartPositionForPosition(s.getStart(r),r),end:s.end},r,a,i,o):[]}function c(t,n,r){var a=e.findPrecedingToken(t,r);if(a&&a.kind===n&&t===a.getEnd()){for(var i=a;i&&i.parent&&i.parent.end===a.end&&!u(i.parent,i);)i=i.parent;return i}}function u(t,n){switch(t.kind){case 229:case 230:return e.rangeContainsRange(t.members,n);case 233:var r=t.body;return r&&234===r.kind&&e.rangeContainsRange(r.statements,n);case 265:case 207:case 234:return e.rangeContainsRange(t.statements,n);case 260:return e.rangeContainsRange(t.block.statements,n)}return!1}function l(t,n){function r(a){var i=e.forEachChild(a,function(r){return e.startEndContainsRange(r.getStart(n),r.end,t)&&r});if(i){var o=r(i);if(o)return o}return a}return r(n)}function _(t,n){function r(){return!1}if(!t.length)return r;var a=t.filter(function(t){return e.rangeOverlapsWithStartEnd(n,t.start,t.start+t.length)}).sort(function(e,t){return e.start-t.start});if(!a.length)return r;var i=0;return function(t){for(;;){if(i>=a.length)return!1;var n=a[i];if(t.end<=n.start)return!1;if(e.startEndOverlapsWithStartEnd(t.pos,t.end,n.start,n.start+n.length))return!0;i++;}}}function d(t,n,r){var a=t.getStart(r);if(a===n.pos&&t.end===n.end)return a;var i=e.findPrecedingToken(n.pos,r);return i?i.end>=n.pos?t.pos:i.end:t.pos}function p(e,n,r){for(var a,i=-1;e;){var o=r.getLineAndCharacterOfPosition(e.getStart(r)).line;if(-1!==i&&o!==i)break;if(t.SmartIndenter.shouldIndentChildNode(e,a))return n.indentSize;i=o,a=e,e=e.parent;}return 0}function f(e,n,r,a,i,o){var s={pos:0,end:n.text.length};return m(s,e,a,i,t.getFormattingScanner(n.text,r,s.pos,s.end),o.getFormatOptions(),o,1,function(e){return!1},n)}function g(e,n,r,a,i){var o=l(e,n);return m(e,o,t.SmartIndenter.getIndentationForNode(o,e,n,r),p(o,r,n),t.getFormattingScanner(n.text,n.languageVariant,d(o,e,n),e.end),r,a,i,_(n.parseDiagnostics,e),n)}function m(n,r,a,i,o,s,c,u,l,_){function d(n,r,a,i,o){if(e.rangeOverlapsWithStartEnd(i,n,r)||e.rangeContainsStartEnd(i,n,r)){if(-1!==o)return o}else{var c=_.getLineAndCharacterOfPosition(n).line,u=e.getLineStartPositionForPosition(n,_),l=t.SmartIndenter.findFirstNonWhitespaceColumn(u,n,_,s);if(c!==a||n===l){var d=t.SmartIndenter.getBaseIndentation(s);return d>l?d:l}}return-1}function p(e,n,r,a,i,o){var c=r,u=t.SmartIndenter.shouldIndentChildNode(e)?s.indentSize:0;return o===n?(c=n===L?B:i.getIndentation(),u=Math.min(s.indentSize,i.getDelta(e)+u)):-1===c&&(c=t.SmartIndenter.childStartsOnTheSameLineWithElseInIfStatement(a,e,n,_)?i.getIndentation():i.getIndentation()+i.getDelta(e)),{indentation:c,delta:u}}function f(t){if(t.modifiers&&t.modifiers.length)return t.modifiers[0].kind;switch(t.kind){case 229:return 75;case 230:return 109;case 228:return 89;case 232:return 232;case 153:return 125;case 154:return 135;case 151:if(t.asteriskToken)return 39;case 149:case 146:return e.getNameOfDeclaration(t).kind}}function g(e,n,r,a){function i(n,r){return t.SmartIndenter.nodeWillIndentChild(e,r,!0)?n:0}return{getIndentationForComment:function(e,t,n){switch(e){case 18:case 22:case 20:return r+i(a,n)}return-1!==t?t:r},getIndentationForToken:function(t,o,s){if(n!==t&&e.decorators&&o===f(e))return r;switch(o){case 17:case 18:case 19:case 20:case 82:case 106:case 57:return r;case 41:case 29:if(251===s.kind||252===s.kind||250===s.kind)return r;break;case 21:case 22:if(172!==s.kind)return r}return n!==t?r+i(a,s):r},getIndentation:function(){return r},getDelta:function(e){return i(a,e)},recomputeIndentation:function(n){e.parent&&t.SmartIndenter.shouldIndentChildNode(e.parent,e)&&(n?r+=s.indentSize:r-=s.indentSize,a=t.SmartIndenter.shouldIndentChildNode(e)?s.indentSize:0);}}}function m(t,r,a,i,s,c){function u(r,a,i,s,c,u,l,f){var g=r.getStart(_),y=_.getLineAndCharacterOfPosition(g).line,h=y;r.decorators&&(h=_.getLineAndCharacterOfPosition(e.getNonDecoratorTokenPosOfNode(r,_)).line);var b=-1;if(l&&-1!==(b=d(g,r.end,c,n,a))&&(a=b),!e.rangeOverlapsWithStartEnd(n,r.pos,r.end))return r.end<n.pos&&o.skipToEndOf(r),a;if(0===r.getFullWidth())return a;for(;o.isOnToken()&&!((x=o.readTokenInfo(t)).token.end>g);)v(x,t,s,t);if(!o.isOnToken())return a;if(e.isToken(r)&&10!==r.kind){var x=o.readTokenInfo(r);return e.Debug.assert(x.token.end===r.end,\"Token end is child end\"),v(x,t,s,r),a}var k=147===r.kind?y:u,S=p(r,y,b,t,s,k);return m(r,T,y,h,S.indentation,S.delta),T=t,f&&177===i.kind&&-1===a&&(a=S.indentation),a}function f(n,r,a,i){var s=y(r,n),c=h(s),l=i,d=a;if(0!==s)for(;o.isOnToken()&&!((x=o.readTokenInfo(r)).token.end>n.pos);)if(x.token.kind===s){d=_.getLineAndCharacterOfPosition(x.token.pos).line;var f=p(x.token,d,-1,r,i,a);v(x,r,l=g(r,a,f.indentation,f.delta),r);}else v(x,r,i,r);for(var m=-1,b=0;b<n.length;b++)m=u(n[b],m,t,l,d,d,!0,0===b);if(0!==c&&o.isOnToken()){var x=o.readTokenInfo(r);x.token.kind===c&&e.rangeContainsRange(r,x.token)&&v(x,r,l,r);}}function v(t,r,a,i){e.Debug.assert(e.rangeContainsRange(r,t.token));var s=o.lastTrailingTriviaWasNewLine(),c=!1;t.leadingTrivia&&b(t.leadingTrivia,r,T,a);var u,d=e.rangeContainsRange(n,t.token),p=_.getLineAndCharacterOfPosition(t.token.pos);if(d){var f=l(t.token),g=I;if(u=x(t.token,p,r,T,a),f)c=!1;else if(void 0!==u)c=u;else{var m=g&&_.getLineAndCharacterOfPosition(g.end).line;c=s&&p.line!==m;}}if(t.trailingTrivia&&b(t.trailingTrivia,r,T,a),c){var y=d&&!l(t.token)?a.getIndentationForToken(p.line,t.token.kind,i):-1,h=!0;if(t.leadingTrivia)for(var v=a.getIndentationForComment(t.token.kind,y,i),k=0,C=t.leadingTrivia;k<C.length;k++){var E=C[k],N=e.rangeContainsRange(n,E);switch(E.kind){case 3:N&&D(E,v,!h),h=!1;break;case 2:h&&N&&S(E.pos,v,!1),h=!1;break;case 4:h=!0;}}-1!==y&&h&&(S(t.token.pos,y,u),L=p.line,B=y);}o.advance(),T=r;}if(e.rangeOverlapsWithStartEnd(n,t.getStart(_),t.getEnd())){var k=g(t,a,s,c),T=r;for(e.forEachChild(t,function(e){u(e,-1,t,k,a,i,!1);},function(e){f(e,t,a,k);});o.isOnToken();){var C=o.readTokenInfo(t);if(C.token.end>t.end)break;v(C,t,k,t);}}}function b(t,r,a,i){for(var o=0,s=t;o<s.length;o++){var c=s[o];e.isComment(c.kind)&&e.rangeContainsRange(n,c)&&x(c,_.getLineAndCharacterOfPosition(c.pos),r,a,i);}}function x(e,t,r,a,i){var o,s=l(e);return s||F||(I?o=k(e,t.line,r,I,R,M,a,i):E(_.getLineAndCharacterOfPosition(n.pos).line,t.line)),I=e,M=r,R=t.line,F=s,o}function k(e,t,n,r,a,i,o,s){K.updateContext(r,i,e,n,o);var u,l,d=c.getRulesMap().GetRule(K);return d?(O(d,r,a,e,t),10&d.Operation.Action&&t!==a?(l=!1,n.getStart(_)===e.pos&&s.recomputeIndentation(!1)):4&d.Operation.Action&&t===a&&(l=!0,n.getStart(_)===e.pos&&s.recomputeIndentation(!0)),u=!(8&d.Operation.Action)&&1!==d.Flag):u=!0,t!==a&&u&&E(a,t,r),l}function S(t,n,r){var a=v(n,s);if(r)P(t,0,a);else{var i=_.getLineAndCharacterOfPosition(t),o=e.getStartPositionOfLine(i.line,_);(n!==T(o,i.character)||C(a,o))&&P(o,i.character,a);}}function T(e,t){for(var n=0,r=0;r<t;r++)9===_.text.charCodeAt(e+r)?n+=s.tabSize-n%s.tabSize:n++;return n}function C(e,t){return e!==_.text.substr(t,e.length)}function D(n,r,a){var i,o=_.getLineAndCharacterOfPosition(n.pos).line,c=_.getLineAndCharacterOfPosition(n.end).line;if(o!==c){i=[];for(var u=n.pos,l=o;l<c;l++){var d=e.getEndLinePosition(l,_);i.push({pos:u,end:d}),u=e.getStartPositionOfLine(l+1,_);}i.push({pos:u,end:n.end});var p=e.getStartPositionOfLine(o,_),f=t.SmartIndenter.findFirstNonWhitespaceCharacterAndColumn(p,i[0].pos,_,s);if(r!==f.column){var g=0;a&&(g=1,o++);for(var m=r-f.column,y=g;y<i.length;y++,o++){var h=e.getStartPositionOfLine(o,_),b=0===y?f:t.SmartIndenter.findFirstNonWhitespaceCharacterAndColumn(i[y].pos,i[y].end,_,s),x=b.column+m;if(x>0){var k=v(x,s);P(h,b.character,k);}else w(h,b.character);}}}else a||S(n.pos,r,!1);}function E(t,n,r){for(var a=t;a<n;a++){var i=e.getStartPositionOfLine(a,_),o=e.getEndLinePosition(a,_);if(!(r&&(e.isComment(r.kind)||e.isStringOrRegularExpressionOrTemplateLiteral(r.kind))&&r.pos<=o&&r.end>o)){var s=N(i,o);-1!==s&&(e.Debug.assert(s===i||!e.isWhiteSpaceSingleLine(_.text.charCodeAt(s-1))),w(s,o+1-s));}}}function N(t,n){for(var r=n;r>=t&&e.isWhiteSpaceSingleLine(_.text.charCodeAt(r));)r--;return r!==n?r+1:-1}function A(t,n,r){return{span:e.createTextSpan(t,n),newText:r}}function w(e,t){t&&j.push(A(e,t,\"\"));}function P(e,t,n){(t||n)&&j.push(A(e,t,n));}function O(e,t,n,r,a){switch(e.Operation.Action){case 1:return;case 8:t.end!==r.pos&&w(t.end,r.pos-t.end);break;case 4:if(1!==e.Flag&&n!==a)return;1!==a-n&&P(t.end,r.pos-t.end,s.newLineCharacter);break;case 2:if(1!==e.Flag&&n!==a)return;1===r.pos-t.end&&32===_.text.charCodeAt(t.end)||P(t.end,r.pos-t.end,\" \");}}var F,I,M,R,L,B,K=new t.FormattingContext(_,u,s),j=[];if(o.advance(),o.isOnToken()){var J=_.getLineAndCharacterOfPosition(r.getStart(_)).line,z=J;r.decorators&&(z=_.getLineAndCharacterOfPosition(e.getNonDecoratorTokenPosOfNode(r,_)).line),m(r,r,J,z,a,i);}if(!o.isOnToken()){var U=o.getCurrentLeadingTrivia();U&&(b(U,r,r,void 0),function(){var e=I?I.end:n.pos;E(_.getLineAndCharacterOfPosition(e).line,_.getLineAndCharacterOfPosition(n.end).line+1,I);}());}return o.close(),j}function y(e,t){switch(e.kind){case 152:case 228:case 186:case 151:case 150:case 187:if(e.typeParameters===t)return 27;if(e.parameters===t)return 19;break;case 181:case 182:if(e.typeArguments===t)return 27;if(e.arguments===t)return 19;break;case 159:if(e.typeArguments===t)return 27}return 0}function h(e){switch(e){case 19:return 20;case 27:return 29}return 0}function v(e,t){function n(e,t){for(var n=\"\",r=0;r<t;r++)n+=e;return n}if((!x||x.tabSize!==t.tabSize||x.indentSize!==t.indentSize)&&(x={tabSize:t.tabSize,indentSize:t.indentSize},k=S=void 0),t.convertTabsToSpaces){var r=void 0,a=Math.floor(e/t.indentSize),i=e%t.indentSize;return S||(S=[]),void 0===S[a]?(r=n(\" \",t.indentSize*a),S[a]=r):r=S[a],i?r+n(\" \",i):r}var o=Math.floor(e/t.tabSize),s=e-o*t.tabSize,c=void 0;return k||(k=[]),void 0===k[o]?k[o]=c=n(\"\\t\",o):c=k[o],s?c+n(\" \",s):c}var b;!function(e){e[e.Unknown=-1]=\"Unknown\";}(b||(b={})),t.formatOnEnter=n,t.formatOnSemicolon=r,t.formatOnClosingCurly=a,t.formatDocument=i,t.formatSelection=o,t.formatNode=f;var x,k,S;t.getIndentationString=v;}(e.formatting||(e.formatting={}));}(r||(r={}));!function(e){!function(t){!function(t){function n(n,r,o,c){if(void 0===c&&(c=!1),n>r.text.length)return a(o);if(o.indentStyle===e.IndentStyle.None)return 0;var _=e.findPrecedingToken(n,r);if(!_)return a(o);if(e.isStringOrRegularExpressionOrTemplateLiteral(_.kind)&&_.getStart(r)<=n&&_.end>n)return 0;var d=r.getLineAndCharacterOfPosition(n).line;if(o.indentStyle===e.IndentStyle.Block){for(var p=n;p>0;){var m=r.text.charCodeAt(p);if(!e.isWhiteSpaceLike(m))break;p--;}var y=e.getLineStartPositionForPosition(p,r);return t.findFirstNonWhitespaceColumn(y,p,r,o)}if(26===_.kind&&194!==_.parent.kind&&-1!==(T=s(_,r,o)))return T;for(var h,v,b,x=_;x;){if(e.positionBelongsToNode(x,n,r)&&k(x,h)){v=l(x,r);var S=u(_,x,d,r);b=0!==S?c&&2===S?o.indentSize:0:d!==v.line?o.indentSize:0;break}var T=f(x,r,o);if(-1!==T)return T;if(-1!==(T=g(x,r,o)))return T+o.indentSize;h=x,x=x.parent;}return x?i(x,v,void 0,b,r,o):a(o)}function r(e,t,n,r){return i(e,n.getLineAndCharacterOfPosition(e.getStart(n)),t,0,n,r)}function a(e){return e.baseIndentSize||0}function i(e,t,n,r,i,s){for(var u,l=e.parent;l;){var d=!0;if(n){var p=e.getStart(i);d=p<n.pos||p>n.end;}if(d&&-1!==(y=f(e,i,s)))return y+r;var m=(u=o(l,e,i)).line===t.line||_(l,e,t.line,i);if(d){var y=c(e,l,t,m,i,s);if(-1!==y)return y+r;if(-1!==(y=g(e,i,s)))return y+r}k(l,e)&&!m&&(r+=s.indentSize),t=u,l=(e=l).parent;}return r+a(s)}function o(e,t,n){var r=p(t,n);return r?n.getLineAndCharacterOfPosition(r.pos):n.getLineAndCharacterOfPosition(e.getStart(n))}function s(t,n,r){var a=e.findListItemInfo(t);return a&&a.listItemIndex>0?m(a.list.getChildren(),a.listItemIndex-1,n,r):-1}function c(t,n,r,a,i,o){return(e.isDeclaration(t)||e.isStatementButNotDeclaration(t))&&(265===n.kind||!a)?y(r,i,o):-1}function u(t,n,r,a){var i=e.findNextToken(t,n);return i?17===i.kind?1:18===i.kind&&r===l(i,a).line?2:0:0}function l(e,t){return t.getLineAndCharacterOfPosition(e.getStart(t))}function _(t,n,r,a){if(211===t.kind&&t.elseStatement===n){var i=e.findChildOfKind(t,82,a);return e.Debug.assert(void 0!==i),l(i,a).line===r}return!1}function d(t,n,r){return t&&e.rangeContainsStartEnd(t,n,r)?t:void 0}function p(e,t){if(e.parent)switch(e.parent.kind){case 159:return d(e.parent.typeArguments,e.getStart(t),e.getEnd());case 178:return e.parent.properties;case 177:return e.parent.elements;case 228:case 186:case 187:case 151:case 150:case 155:case 152:case 161:case 156:n=e.getStart(t);return d(e.parent.typeParameters,n,e.getEnd())||d(e.parent.parameters,n,e.getEnd());case 229:return d(e.parent.typeParameters,e.getStart(t),e.getEnd());case 182:case 181:var n=e.getStart(t);return d(e.parent.typeArguments,n,e.getEnd())||d(e.parent.arguments,n,e.getEnd());case 227:return d(e.parent.declarations,e.getStart(t),e.getEnd());case 241:case 245:return d(e.parent.elements,e.getStart(t),e.getEnd())}}function f(t,n,r){var a=p(t,n);return a?function(a){var i=e.indexOf(a,t);return-1!==i?m(a,i,n,r):-1}(a):-1}function g(t,n,r){if(20===t.kind)return-1;if(t.parent&&e.isCallOrNewExpression(t.parent)&&t.parent.expression!==t){var a=t.parent.expression,i=function(e){for(;;)switch(e.kind){case 181:case 182:case 179:case 180:e=e.expression;break;default:return e}}(a);if(a===i)return-1;var o=n.getLineAndCharacterOfPosition(a.end),s=n.getLineAndCharacterOfPosition(i.end);return o.line===s.line?-1:y(o,n,r)}return-1}function m(t,n,r,a){e.Debug.assert(n>=0&&n<t.length);for(var i=l(t[n],r),o=n-1;o>=0;o--)if(26!==t[o].kind){if(r.getLineAndCharacterOfPosition(t[o].end).line!==i.line)return y(i,r,a);i=l(t[o],r);}return-1}function y(e,t,n){var r=t.getPositionOfLineAndCharacter(e.line,0);return v(r,r+e.character,t,n)}function h(t,n,r,a){for(var i=0,o=0,s=t;s<n;s++){var c=r.text.charCodeAt(s);if(!e.isWhiteSpaceSingleLine(c))break;9===c?o+=a.tabSize+o%a.tabSize:o++,i++;}return{column:o,character:i}}function v(e,t,n,r){return h(e,t,n,r).column}function b(e){switch(e){case 210:case 229:case 199:case 230:case 232:case 231:case 177:case 207:case 234:case 178:case 163:case 172:case 165:case 235:case 258:case 257:case 185:case 179:case 181:case 182:case 208:case 226:case 243:case 219:case 195:case 175:case 174:case 251:case 250:case 256:case 150:case 155:case 156:case 146:case 160:case 161:case 168:case 183:case 191:case 245:case 241:case 246:case 242:return!0}return!1}function x(e,t,n){var r=t?t.kind:0;switch(e.kind){case 212:case 213:case 215:case 216:case 214:case 211:case 228:case 186:case 151:case 187:case 152:case 153:case 154:return 207!==r;case 244:return 245!==r;case 238:return 239!==r||t.namedBindings&&241!==t.namedBindings.kind;case 249:return 252!==r}return n}function k(e,t){return b(e.kind)||x(e,t,!1)}var S;!function(e){e[e.Unknown=-1]=\"Unknown\";}(S||(S={})),t.getIndentation=n,t.getIndentationForNode=r,t.getBaseIndentation=a;var T;!function(e){e[e.Unknown=0]=\"Unknown\",e[e.OpenBrace=1]=\"OpenBrace\",e[e.CloseBrace=2]=\"CloseBrace\";}(T||(T={})),t.childStartsOnTheSameLineWithElseInIfStatement=_,t.getContainingList=p,t.findFirstNonWhitespaceCharacterAndColumn=h,t.findFirstNonWhitespaceColumn=v,t.nodeWillIndentChild=x,t.shouldIndentChildNode=k;}(t.SmartIndenter||(t.SmartIndenter={}));}(e.formatting||(e.formatting={}));}(r||(r={}));!function(e){!function(t){function n(e){return e.__pos}function r(e,t){e.__pos=t;}function a(e){return e.__end}function i(e,t){e.__end=t;}function o(t,n){return e.skipTrivia(t,n,!1,!0)}function s(t,n){for(var r=n;r<t.length;){var a=t.charCodeAt(r);if(!e.isWhiteSpaceSingleLine(a))return 47===a;r++;}return!1}function c(t){return e.tokenToString(t.kind)}function u(t,n,r,a){if(r.useNonAdjustedStartPosition)return n.getFullStart();var i=n.getFullStart(),s=n.getStart(t);if(i===s)return s;var c=e.getLineStartPositionForPosition(i,t);if(e.getLineStartPositionForPosition(s,t)===c)return a===v.Start?s:i;var u=e.getStartPositionOfLine(e.getLineOfLocalPosition(t,c)+1,t);return u=o(t.text,u),e.getStartPositionOfLine(e.getLineOfLocalPosition(t,u),t)}function l(t,n,r){if(r.useNonAdjustedEndPosition)return n.getEnd();var a=n.getEnd(),i=e.skipTrivia(t.text,a,!0);return i!==a&&e.isLineBreak(t.text.charCodeAt(i-1))?i:a}function _(e,t){return t&&e.parent&&(26===t.kind||25===t.kind&&178===e.parent.kind)}function d(e){for(var t=\"\",n=0;n<e;n++)t+=\" \";return t}function p(t,n,r){var a={newLine:r,target:n&&n.languageVersion},i=new x(e.getNewLineCharacter(a));return e.createPrinter(a,i).writeNode(3,t,n,i),{text:i.getText(),node:y(t)}}function f(t,n,r,a,i){var o=e.computeLineStarts(t.text),s={text:t.text,lineMap:o,getLineAndCharacterOfPosition:function(t){return e.computeLineAndCharacterOfPosition(o,t)}},c=e.formatting.formatNode(t.node,s,n.languageVariant,r,a,i);return g(t.text,c)}function g(t,n){for(var r=n.length-1;r>=0;r--){var a=n[r];t=\"\"+t.substring(0,a.span.start)+a.newText+t.substring(e.textSpanEnd(a.span));}return t}function m(t){return e.skipTrivia(t,0)===t.length}function y(t){function r(){}var i=e.visitEachChild(t,y,e.nullTransformationContext,h,y),o=e.nodeIsSynthesized(i)?i:(r.prototype=i,new r);return o.pos=n(t),o.end=a(t),o}function h(t,r,i,o,s){var c=e.visitNodes(t,r,i,o,s);if(!c)return c;var u=c===t?e.createNodeArray(c.slice(0)):c;return u.pos=n(t),u.end=a(t),u}var v;!function(e){e[e.FullStart=0]=\"FullStart\",e[e.Start=1]=\"Start\";}(v=t.Position||(t.Position={})),t.getSeparatorCharacter=c,t.getAdjustedStartPosition=u,t.getAdjustedEndPosition=l;var b=function(){function t(t,n,r){this.newLine=t,this.rulesProvider=n,this.validator=r,this.changes=[],this.newLineCharacter=e.getNewLineCharacter({newLine:t});}return t.fromCodeFixContext=function(e){return new t(\"\\n\"===e.newLineCharacter?1:0,e.rulesProvider)},t.prototype.deleteNode=function(e,t,n){void 0===n&&(n={});var r=u(e,t,n,v.FullStart),a=l(e,t,n);return this.changes.push({sourceFile:e,options:n,range:{pos:r,end:a}}),this},t.prototype.deleteRange=function(e,t){return this.changes.push({sourceFile:e,range:t}),this},t.prototype.deleteNodeRange=function(e,t,n,r){void 0===r&&(r={});var a=u(e,t,r,v.FullStart),i=l(e,n,r);return this.changes.push({sourceFile:e,options:r,range:{pos:a,end:i}}),this},t.prototype.deleteNodeInList=function(t,n){var r=e.formatting.SmartIndenter.getContainingList(n,t);if(!r)return e.Debug.fail(\"node is not a list element\"),this;var a=r.indexOf(n);if(a<0)return this;if(1===r.length)return this.deleteNode(t,n),this;if(a!==r.length-1){var i=e.getTokenAtPosition(t,n.end,!1);if(i&&_(n,i)){var o=e.skipTrivia(t.text,u(t,n,{},v.FullStart),!1,!0),s=r[a+1],c=e.skipTrivia(t.text,u(t,s,{},v.FullStart),!1,!0);this.deleteRange(t,{pos:o,end:c});}}else{var l=e.getTokenAtPosition(t,r[a-1].end,!1);l&&_(n,l)&&this.deleteNodeRange(t,l,n);}return this},t.prototype.replaceRange=function(e,t,n,r){return void 0===r&&(r={}),this.changes.push({sourceFile:e,range:t,options:r,node:n}),this},t.prototype.replaceNode=function(e,t,n,r){void 0===r&&(r={});var a=u(e,t,r,v.Start),i=l(e,t,r);return this.changes.push({sourceFile:e,options:r,useIndentationFromFile:!0,node:n,range:{pos:a,end:i}}),this},t.prototype.replaceNodeRange=function(e,t,n,r,a){void 0===a&&(a={});var i=u(e,t,a,v.Start),o=l(e,n,a);return this.changes.push({sourceFile:e,options:a,useIndentationFromFile:!0,node:r,range:{pos:i,end:o}}),this},t.prototype.insertNodeAt=function(e,t,n,r){return void 0===r&&(r={}),this.changes.push({sourceFile:e,options:r,node:n,range:{pos:t,end:t}}),this},t.prototype.insertNodeBefore=function(e,t,n,r){void 0===r&&(r={});var a=u(e,t,r,v.Start);return this.changes.push({sourceFile:e,options:r,useIndentationFromFile:!0,node:n,range:{pos:a,end:a}}),this},t.prototype.insertNodeAfter=function(t,n,r,a){void 0===a&&(a={}),(e.isStatementButNotDeclaration(n)||149===n.kind||148===n.kind||150===n.kind)&&59!==t.text.charCodeAt(n.end-1)&&this.changes.push({sourceFile:t,options:{},range:{pos:n.end,end:n.end},node:e.createToken(25)});var i=l(t,n,a);return this.changes.push({sourceFile:t,options:a,useIndentationFromFile:!0,node:r,range:{pos:i,end:i}}),this},t.prototype.insertNodeInListAfter=function(t,n,r){var a=e.formatting.SmartIndenter.getContainingList(n,t);if(!a)return e.Debug.fail(\"node is not a list element\"),this;var i=a.indexOf(n);if(i<0)return this;var c=n.getEnd();if(i!==a.length-1){var u=e.getTokenAtPosition(t,n.end,!1);if(u&&_(n,u)){var l=e.getLineAndCharacterOfPosition(t,o(t.text,a[i+1].getFullStart())),p=e.getLineAndCharacterOfPosition(t,u.end),f=void 0,g=void 0;p.line===l.line?(g=u.end,f=d(l.character-p.character)):g=e.getStartPositionOfLine(l.line,t),this.changes.push({sourceFile:t,range:{pos:g,end:a[i+1].getStart(t)},node:r,useIndentationFromFile:!0,options:{prefix:f,suffix:\"\"+e.tokenToString(u.kind)+t.text.substring(u.end,a[i+1].getStart(t))}});}}else{var m=n.getStart(t),y=e.getLineStartPositionForPosition(m,t),h=void 0,v=!1;if(1===a.length)h=26;else{var b=e.findPrecedingToken(n.pos,t);h=_(n,b)?b.kind:26,v=e.getLineStartPositionForPosition(a[i-1].getStart(t),t)!==y;}if(s(t.text,n.end)&&(v=!0),v){this.changes.push({sourceFile:t,range:{pos:c,end:c},node:e.createToken(h),options:{}});var x=e.formatting.SmartIndenter.findFirstNonWhitespaceColumn(y,m,t,this.rulesProvider.getFormatOptions()),k=e.skipTrivia(t.text,c,!0,!1);k!==c&&e.isLineBreak(t.text.charCodeAt(k-1))&&k--,this.changes.push({sourceFile:t,range:{pos:k,end:k},node:r,options:{indentation:x,prefix:this.newLineCharacter}});}else this.changes.push({sourceFile:t,range:{pos:c,end:c},node:r,options:{prefix:e.tokenToString(h)+\" \"}});}return this},t.prototype.getChanges=function(){for(var n=this,r=e.createFileMap(),a=0,i=this.changes;a<i.length;a++){var o=i[a],s=r.get(o.sourceFile.path);s||r.set(o.sourceFile.path,s=[]),s.push(o);}var c=[];return r.forEachValue(function(e){for(var a=r.get(e),i=a[0].sourceFile,o={fileName:i.fileName,textChanges:[]},s=0,u=t.normalize(a);s<u.length;s++){var l=u[s];o.textChanges.push({span:n.computeSpan(l,i),newText:n.computeNewText(l,i)});}c.push(o);}),c},t.prototype.computeSpan=function(t,n){return e.createTextSpanFromBounds(t.range.pos,t.range.end)},t.prototype.computeNewText=function(t,n){if(!t.node)return\"\";var r=t.options||{},a=p(t.node,n,this.newLine);this.validator&&this.validator(a);var i=this.rulesProvider.getFormatOptions(),o=t.range.pos,s=e.getLineStartPositionForPosition(o,n)===o,c=f(a,n,void 0!==t.options.indentation?t.options.indentation:t.useIndentationFromFile?e.formatting.SmartIndenter.getIndentation(t.range.pos,n,i,s||t.options.prefix===this.newLineCharacter):0,void 0!==t.options.delta?t.options.delta:e.formatting.SmartIndenter.shouldIndentChildNode(t.node)?i.indentSize:0,this.rulesProvider);return c=s||void 0!==t.options.indentation?c:c.replace(/^\\s+/,\"\"),(r.prefix||\"\")+c+(r.suffix||\"\")},t.normalize=function(t){for(var n=e.stableSort(t,function(e,t){return e.range.pos-t.range.pos}),r=0;r<n.length-2;r++)e.Debug.assert(n[r].range.end<=n[r+1].range.pos);return n},t}();t.ChangeTracker=b,t.getNonformattedText=p,t.applyFormatting=f,t.applyChanges=g;var x=function(){function t(t){var n=this;this.lastNonTriviaPosition=0,this.writer=e.createTextWriter(t),this.onEmitNode=function(e,t,a){t&&r(t,n.lastNonTriviaPosition),a(e,t),t&&i(t,n.lastNonTriviaPosition);},this.onBeforeEmitNodeArray=function(e){e&&r(e,n.lastNonTriviaPosition);},this.onAfterEmitNodeArray=function(e){e&&i(e,n.lastNonTriviaPosition);},this.onBeforeEmitToken=function(e){e&&r(e,n.lastNonTriviaPosition);},this.onAfterEmitToken=function(e){e&&i(e,n.lastNonTriviaPosition);};}return t.prototype.setLastNonTriviaPosition=function(t,n){if(n||!m(t)){this.lastNonTriviaPosition=this.writer.getTextPos();for(var r=0;e.isWhiteSpaceLike(t.charCodeAt(t.length-r-1));)r++;this.lastNonTriviaPosition-=r;}},t.prototype.write=function(e){this.writer.write(e),this.setLastNonTriviaPosition(e,!1);},t.prototype.writeTextOfNode=function(e,t){this.writer.writeTextOfNode(e,t);},t.prototype.writeLine=function(){this.writer.writeLine();},t.prototype.increaseIndent=function(){this.writer.increaseIndent();},t.prototype.decreaseIndent=function(){this.writer.decreaseIndent();},t.prototype.getText=function(){return this.writer.getText()},t.prototype.rawWrite=function(e){this.writer.rawWrite(e),this.setLastNonTriviaPosition(e,!1);},t.prototype.writeLiteral=function(e){this.writer.writeLiteral(e),this.setLastNonTriviaPosition(e,!0);},t.prototype.getTextPos=function(){return this.writer.getTextPos()},t.prototype.getLine=function(){return this.writer.getLine()},t.prototype.getColumn=function(){return this.writer.getColumn()},t.prototype.getIndent=function(){return this.writer.getIndent()},t.prototype.isAtStartOfLine=function(){return this.writer.isAtStartOfLine()},t.prototype.reset=function(){this.writer.reset(),this.lastNonTriviaPosition=0;},t}();}(e.textChanges||(e.textChanges={}));}(r||(r={}));!function(e){!function(t){function n(t){e.forEach(t.errorCodes,function(e){var n=i[e];n||(n=[],i[e]=n),n.push(t);});}function r(){return Object.keys(i)}function a(t){var n=i[t.errorCode],r=[];return e.forEach(n,function(e){var n=e.getCodeActions(t);n&&n.length>0&&(r=r.concat(n));}),r}var i=[];t.registerCodeFix=n,t.getSupportedErrorCodes=r,t.getFixes=a;}(e.codefix||(e.codefix={}));}(r||(r={}));!function(e){!function(t){function n(e){i.set(e.name,e);}function r(e){var t,n=[];i.forEach(function(e){n.push(e);});for(var r=0,a=n;r<a.length;r++){var o=a[r];if(e.cancellationToken&&e.cancellationToken.isCancellationRequested())return t;var s=o.getAvailableActions(e);s&&s.length&&(c=t||(t=[])).push.apply(c,s);}return t;var c;}function a(e,t,n){var r=i.get(t);return r&&r.getEditsForAction(e,n)}var i=e.createMap();t.registerRefactor=n,t.getApplicableRefactors=r,t.getEditsForRefactor=a;}(e.refactor||(e.refactor={}));}(r||(r={}));!function(e){!function(t){function n(n){function r(e,t,n,r){if(!n){var a=s.getIndexInfoOfType(e,t);if(a){var i=s.indexInfoToIndexSignatureDeclaration(a,t,c);r.push(i);}}}var a=n.sourceFile,i=n.span.start,o=e.getTokenAtPosition(a,i,!1),s=n.program.getTypeChecker(),c=e.getContainingClass(o);if(c){for(var u=e.getOpenBraceOfClassLike(c,a),l=s.getTypeAtLocation(c),_=e.getClassImplementsHeritageClauseElements(c),d=!!s.getIndexTypeOfType(l,1),p=!!s.getIndexTypeOfType(l,0),f=[],g=0,m=_;g<m.length;g++){var y=m[g],h=s.getTypeAtLocation(y),v=s.getPropertiesOfType(h).filter(function(t){return!(8&e.getModifierFlags(t.valueDeclaration))}),b=[];r(h,1,d,b),r(h,0,p,b),b=b.concat(t.createMissingMemberNodes(c,v,s));var x=e.formatStringFromArgs(e.getLocaleSpecificMessage(e.Diagnostics.Implement_interface_0),[y.getText()]);b.length>0&&function(e,r,a){var i={description:a,changes:t.newNodesToChanges(r,u,n)};e.push(i);}(f,b,x);}return f}}t.registerCodeFix({errorCodes:[e.Diagnostics.Class_0_incorrectly_implements_interface_1.code],getCodeActions:n});}(e.codefix||(e.codefix={}));}(r||(r={}));!function(e){!function(t){function n(n){function r(r){if(181===o.parent.parent.kind){var a=o.parent.parent,i=t.createMethodFromCallExpression(a,c,r,u),s=e.textChanges.ChangeTracker.fromCodeFixContext(n);return s.insertNodeAfter(g,m,i,{suffix:n.newLineCharacter}),{description:e.formatStringFromArgs(e.getLocaleSpecificMessage(u?e.Diagnostics.Declare_method_0:e.Diagnostics.Declare_static_method_0),[c]),changes:s.getChanges()}}}var a=n.sourceFile,i=n.span.start,o=e.getTokenAtPosition(a,i,!1);if(71===o.kind&&e.isPropertyAccessExpression(o.parent)){var s,c=o.getText(a),u=!1;if(99===o.parent.expression.kind){var l=e.getThisContainer(o,!1);if(!e.isClassElement(l))return;s=l.parent,u=s&&e.hasModifier(l,32);}else{var _=n.program.getTypeChecker(),d=o.parent.expression,p=_.getTypeAtLocation(d);if(32768&p.flags){var f=p.symbol;32&f.flags&&(s=f.declarations&&f.declarations[0],p!==_.getDeclaredTypeOfSymbol(f)&&(u=!0));}}if(s&&e.isClassLike(s)){var g=e.getSourceFileOfNode(s),m=e.getOpenBraceOfClassLike(s,g);return e.isInJavaScriptFile(g)?function(t,a){var i,o=r(!1);if(o&&(i=[o]),a){if(199===t.kind)return i;var s=t.name.getText(),u=e.createStatement(e.createAssignment(e.createPropertyAccess(e.createIdentifier(s),c),e.createIdentifier(\"undefined\"))),l=e.textChanges.ChangeTracker.fromCodeFixContext(n);l.insertNodeAfter(g,t,u,{suffix:n.newLineCharacter});var _={description:e.formatStringFromArgs(e.getLocaleSpecificMessage(e.Diagnostics.Initialize_static_property_0),[c]),changes:l.getChanges()};return(i||(i=[])).push(_),i}var d=e.getFirstConstructorWithBody(t);if(!d)return i;var p=e.createStatement(e.createAssignment(e.createPropertyAccess(e.createThis(),c),e.createIdentifier(\"undefined\"))),f=e.textChanges.ChangeTracker.fromCodeFixContext(n);f.insertNodeAt(g,d.body.getEnd()-1,p,{prefix:n.newLineCharacter,suffix:n.newLineCharacter});var m={description:e.formatStringFromArgs(e.getLocaleSpecificMessage(e.Diagnostics.Initialize_property_0_in_the_constructor),[c]),changes:f.getChanges()};return(i||(i=[])).push(m),i}(s,u):function(t,a){var i,s=r(!0);s&&(i=[s]);var u;if(194===o.parent.parent.kind){var l=o.parent.parent,_=o.parent===l.left?l.right:l.left,d=n.program.getTypeChecker(),p=d.getWidenedType(d.getBaseTypeOfLiteralType(d.getTypeAtLocation(_)));u=d.typeToTypeNode(p,t);}u=u||e.createKeywordTypeNode(119);var f=e.createProperty(void 0,a?[e.createToken(115)]:void 0,c,void 0,u,void 0),y=e.textChanges.ChangeTracker.fromCodeFixContext(n);if(y.insertNodeAfter(g,m,f,{suffix:n.newLineCharacter}),(i||(i=[])).push({description:e.formatStringFromArgs(e.getLocaleSpecificMessage(e.Diagnostics.Declare_property_0),[c]),changes:y.getChanges()}),!a){var h=e.createKeywordTypeNode(136),v=e.createParameter(void 0,void 0,void 0,\"x\",void 0,h,void 0),b=e.createIndexSignature(void 0,void 0,[v],u),x=e.textChanges.ChangeTracker.fromCodeFixContext(n);x.insertNodeAfter(g,m,b,{suffix:n.newLineCharacter}),i.push({description:e.formatStringFromArgs(e.getLocaleSpecificMessage(e.Diagnostics.Add_index_signature_for_property_0),[c]),changes:x.getChanges()});}return i}(s,u)}}}t.registerCodeFix({errorCodes:[e.Diagnostics.Property_0_does_not_exist_on_type_1.code,e.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2.code],getCodeActions:n});}(e.codefix||(e.codefix={}));}(r||(r={}));!function(e){!function(t){function n(t){var n,a=t.sourceFile,i=e.getTokenAtPosition(a,t.span.start,!1),o=t.program.getTypeChecker();if(71===i.kind&&e.isPropertyAccessExpression(i.parent)){var s=o.getTypeAtLocation(i.parent.expression);n=o.getSuggestionForNonexistentProperty(i,s);}else{var c=e.getMeaningFromLocation(i);n=o.getSuggestionForNonexistentSymbol(i,e.getTextOfNode(i),r(c));}if(n)return[{description:e.formatStringFromArgs(e.getLocaleSpecificMessage(e.Diagnostics.Change_spelling_to_0),[n]),changes:[{fileName:a.fileName,textChanges:[{span:{start:i.getStart(),length:i.getWidth()},newText:n}]}]}]}function r(e){var t=0;return 4&e&&(t|=1920),2&e&&(t|=793064),1&e&&(t|=107455),t}t.registerCodeFix({errorCodes:[e.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2.code,e.Diagnostics.Cannot_find_name_0_Did_you_mean_1.code],getCodeActions:n});}(e.codefix||(e.codefix={}));}(r||(r={}));!function(e){!function(t){function n(n){var a=n.sourceFile,i=n.span.start,o=e.getTokenAtPosition(a,i,!1),s=n.program.getTypeChecker();if(e.isClassLike(o.parent)){var c=o.parent,u=e.getClassExtendsHeritageClauseElement(c),l=s.getTypeAtLocation(u),_=s.getPropertiesOfType(l).filter(r),d=t.createMissingMemberNodes(c,_,s),p=t.newNodesToChanges(d,e.getOpenBraceOfClassLike(c,a),n);if(p&&p.length>0)return[{description:e.getLocaleSpecificMessage(e.Diagnostics.Implement_inherited_abstract_class),changes:p}]}}function r(t){var n=t.getDeclarations();e.Debug.assert(!!(n&&n.length>0));var r=e.getModifierFlags(n[0]);return!(8&r||!(128&r))}t.registerCodeFix({errorCodes:[e.Diagnostics.Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2.code],getCodeActions:n}),t.registerCodeFix({errorCodes:[e.Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1.code],getCodeActions:n});}(e.codefix||(e.codefix={}));}(r||(r={}));!function(e){!function(t){t.registerCodeFix({errorCodes:[e.Diagnostics.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class.code],getCodeActions:function(t){function n(t){if(210===t.kind&&e.isSuperCall(t.expression))return t;if(!e.isFunctionLike(t))return e.forEachChild(t,n)}var r=t.sourceFile,a=e.getTokenAtPosition(r,t.span.start,!1);if(99===a.kind){var i=e.getContainingFunction(a),o=n(i.body);if(o){if(o.expression&&181===o.expression.kind)for(var s=o.expression.arguments,c=0;c<s.length;c++)if(s[c].expression===a)return;var u=e.textChanges.ChangeTracker.fromCodeFixContext(t);return u.insertNodeAfter(r,e.getOpenBrace(i,r),o,{suffix:t.newLineCharacter}),u.deleteNode(r,o),[{description:e.getLocaleSpecificMessage(e.Diagnostics.Make_super_call_the_first_statement_in_the_constructor),changes:u.getChanges()}]}}}});}(e.codefix||(e.codefix={}));}(r||(r={}));!function(e){!function(t){t.registerCodeFix({errorCodes:[e.Diagnostics.Constructors_for_derived_classes_must_contain_a_super_call.code],getCodeActions:function(t){var n=t.sourceFile,r=e.getTokenAtPosition(n,t.span.start,!1);if(123===r.kind){var a=e.textChanges.ChangeTracker.fromCodeFixContext(t),i=e.createStatement(e.createCall(e.createSuper(),void 0,e.emptyArray));return a.insertNodeAfter(n,e.getOpenBrace(r.parent,n),i,{suffix:t.newLineCharacter}),[{description:e.getLocaleSpecificMessage(e.Diagnostics.Add_missing_super_call),changes:a.getChanges()}]}}});}(e.codefix||(e.codefix={}));}(r||(r={}));!function(e){!function(t){t.registerCodeFix({errorCodes:[e.Diagnostics.Cannot_extend_an_interface_0_Did_you_mean_implements.code],getCodeActions:function(t){var n=t.sourceFile,r=t.span.start,a=e.getTokenAtPosition(n,r,!1),i=e.getContainingClass(a);if(71===a.kind&&e.isClassLike(i)){var o=i.heritageClauses;if(o&&o.length>0){var s=o[0].getFirstToken();if(s&&85===s.kind){var c=e.textChanges.ChangeTracker.fromCodeFixContext(t);c.replaceNode(n,s,e.createToken(108));for(var u=1;u<o.length;u++){var l=o[u].getFirstToken();l&&c.replaceNode(n,l,e.createToken(26));}return[{description:e.getLocaleSpecificMessage(e.Diagnostics.Change_extends_to_implements),changes:c.getChanges()}]}}}}});}(e.codefix||(e.codefix={}));}(r||(r={}));!function(e){!function(t){t.registerCodeFix({errorCodes:[e.Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0.code],getCodeActions:function(t){var n=t.sourceFile,r=e.getTokenAtPosition(n,t.span.start,!1);if(71===r.kind){var a=e.textChanges.ChangeTracker.fromCodeFixContext(t);return a.replaceNode(n,r,e.createPropertyAccess(e.createThis(),r)),[{description:e.getLocaleSpecificMessage(e.Diagnostics.Add_this_to_unresolved_variable),changes:a.getChanges()}]}}});}(e.codefix||(e.codefix={}));}(r||(r={}));!function(e){!function(t){t.registerCodeFix({errorCodes:[e.Diagnostics._0_is_declared_but_never_used.code,e.Diagnostics.Property_0_is_declared_but_never_used.code],getCodeActions:function(t){function n(){return e.isDeclarationName(p)?i(p.parent):e.isLiteralComputedPropertyDeclarationName(p)?i(p.parent.parent):void 0}function r(t){var n=t.getStart(_,!1);return{description:e.formatStringFromArgs(e.getLocaleSpecificMessage(e.Diagnostics.Prefix_0_with_an_underscore),{0:p.getText()}),changes:[{fileName:_.path,textChanges:[{span:{start:n,length:0},newText:\"_\"}]}]}}function a(t,n){switch(n.parent.parent.kind){case 214:var a=n.parent.parent.initializer;return[1===a.declarations.length?i(a):s(n)];case 216:var o=n.parent.parent;return e.Debug.assert(227===o.initializer.kind),[u(o.initializer.declarations[0],e.createObjectLiteral()),r(t)];case 215:return[r(t)];default:var c=n.parent.parent;return 1===c.declarationList.declarations.length?[i(c)]:[s(n)]}}function i(n){return l(e.textChanges.ChangeTracker.fromCodeFixContext(t).deleteNode(_,n))}function o(n){return l(e.textChanges.ChangeTracker.fromCodeFixContext(t).deleteRange(_,n))}function s(n){return l(e.textChanges.ChangeTracker.fromCodeFixContext(t).deleteNodeInList(_,n))}function c(n,r){return l(e.textChanges.ChangeTracker.fromCodeFixContext(t).deleteNodeRange(_,n,r))}function u(n,r){return l(e.textChanges.ChangeTracker.fromCodeFixContext(t).replaceNode(_,n,r))}function l(t){return{description:e.formatStringFromArgs(e.getLocaleSpecificMessage(e.Diagnostics.Remove_declaration_for_Colon_0),{0:p.getText()}),changes:t.getChanges()}}var _=t.sourceFile,d=t.span.start,p=e.getTokenAtPosition(_,d,!1);switch(21===p.kind&&(p=e.getTokenAtPosition(_,d+1,!1)),p.kind){case 71:return function(t){var u=t.parent;switch(u.kind){case 226:return a(t,u);case 145:var l=u.parent.typeParameters;if(1===l.length){var d=e.getTokenAtPosition(_,l.pos-1,!1),p=e.getTokenAtPosition(_,l.end,!1);return e.Debug.assert(27===d.kind),e.Debug.assert(29===p.kind),[c(d,p)]}return[s(u)];case 146:return[1===u.parent.parameters.length?i(u):s(u),r(t)];case 237:return[i(e.getAncestor(t,237))];case 242:return 1===u.parent.elements.length?[i(e.getAncestor(t,238))]:[s(u)];case 239:var f=u;if(f.namedBindings){var g=f.name.getStart(_);return(p=e.getTokenAtPosition(_,f.name.end,!1))&&26===p.kind?[o({pos:g,end:e.skipTrivia(_.text,p.end,!1,!0)})]:[i(f.name)]}return[i(y=e.getAncestor(f,238))];case 240:var m=u;if(m.name!==t||m.parent.name)return(d=e.getTokenAtPosition(_,m.pos-1,!1))&&26===d.kind?[o({pos:e.textChanges.getAdjustedStartPosition(_,d,{},e.textChanges.Position.FullStart),end:m.end})]:[o(m)];var y=e.getAncestor(m,238);return[i(y)];default:return[n()]}}(p);case 149:case 240:return[i(p.parent)];default:return[n()]}}});}(e.codefix||(e.codefix={}));}(r||(r={}));!function(e){!function(t){function n(t){function n(e){var t=r(e),n=y[t];if(n)return n;for(var a=[],i=0,o=l.imports;i<o.length;i++){var s=o[i];_.getSymbolAtLocation(s)===e&&a.push(function(e){for(var t=e;t;){if(238===t.kind)return t;if(237===t.kind)return t;t=t.parent;}}(s));}return y[t]=a,a}function r(t){return 8388608&t.flags?e.getSymbolId(_.getAliasedSymbol(t)):e.getSymbolId(t)}function i(t,n){return!!t.getDeclarations()&&e.some(t.declarations,function(t){return!!(e.getMeaningFromDeclaration(t)&n)})}function o(r,a,i,o){function _(n){function _(e,t){for(var n=0,r=t;n<r.length;n++){var a=f(e,r[n]);if(void 0!==a)return a}}function d(t){return t=e.removeFileExtension(t),e.endsWith(t,\"/index\")&&(t=t.substr(0,t.length-6)),t}function f(t,n){var r=e.getRelativePathToDirectoryOrUrl(n,t,n,h,!1);return e.isRootedDiskPath(r)||e.startsWith(r,\"..\")?void 0:r}function g(t,n){var r=e.getRelativePathToDirectoryOrUrl(n,t,n,h,!1);return e.moduleHasNonRelativeName(r)?\"./\"+r:r}if(!u)for(var m=l.statements.length-1;m>=0;m--){var y=l.statements[m];if(237===y.kind||238===y.kind){u=y;break}}var h=e.createGetCanonicalFileName(p),v=e.stripQuotes(n||function(){var n=l.fileName,a=r.valueDeclaration.getSourceFile().fileName,i=e.getDirectoryPath(n),o=t.program.getCompilerOptions();return function(){var t=r.valueDeclaration;if(e.isModuleDeclaration(t)&&e.isStringLiteral(t.name))return t.name.text}()||function(){var n=e.getEffectiveTypeRoots(o,t.host);if(n)for(var r=0,i=e.map(n,function(t){return e.toPath(t,void 0,h)});r<i.length;r++){var s=i[r];if(e.startsWith(a,s))return d(a.substring(s.length+1))}}()||function(){if(e.getEmitModuleResolutionKind(o)===e.ModuleResolutionKind.NodeJs){var n=a.indexOf(\"node_modules\");if(!(n<0)){var r;if(r=0===i.indexOf(a.substring(0,n-1))?a.substring(n+13):g(a,i),r=e.removeFileExtension(r),e.endsWith(r,\"/index\"))r=e.getDirectoryPath(r);else try{var s=e.getDirectoryPath(a),c=JSON.parse(t.host.readFile(e.combinePaths(s,\"package.json\")));if(c){var u=c.main||c.typings;if(u){var l=e.toPath(u,s,h);e.removeFileExtension(l)===e.removeFileExtension(a)&&(r=e.getDirectoryPath(r));}}}catch(e){}return e.getPackageNameFromAtTypesDirectory(r)}}}()||function(){if(o.baseUrl){var t=f(a,o.baseUrl);if(t){var n=e.removeFileExtension(t);if(t=d(t),o.paths)for(var r in o.paths)for(var i=0,s=o.paths[r];i<s.length;i++){var c=s[i],u=c.indexOf(\"*\");if(0!==u||1!==c.length)if(-1!==u){var l=c.substr(0,u),_=c.substr(u+1);if(t.length>=l.length+_.length&&e.startsWith(t,l)&&e.endsWith(t,_)){var p=t.substr(l.length,t.length-_.length);return r.replace(\"*\",p)}}else if(c===t||c===n)return r}return t}}}()||function(){if(o.rootDirs){var t=_(a,o.rootDirs),n=_(i,o.rootDirs);if(void 0!==t){var r=void 0!==n?g(t,n):t;return e.removeFileExtension(r)}}}()||e.removeFileExtension(g(a,i))}()),b=s(),x=i?e.createImportClause(e.createIdentifier(a),void 0):o?e.createImportClause(void 0,e.createNamespaceImport(e.createIdentifier(a))):e.createImportClause(void 0,e.createNamedImports([e.createImportSpecifier(void 0,e.createIdentifier(a))])),k=e.createImportDeclaration(void 0,void 0,x,e.createLiteral(v));return u?b.insertNodeAfter(l,u,k,{suffix:t.newLineCharacter}):b.insertNodeAt(l,l.getStart(),k,{suffix:\"\"+t.newLineCharacter+t.newLineCharacter}),c(e.Diagnostics.Import_0_from_1,[a,'\"'+v+'\"'],b.getChanges(),\"NewImport\",v)}var d=n(r);return d.length>0?function(t){for(var n,r,a,i=[],u=0,d=t;u<d.length;u++){var p=d[u];if(238===p.kind){var m=p.importClause&&p.importClause.namedBindings;m&&240===m.kind?n=p:r=p,a=p.moduleSpecifier.getText();}else n=p,a=function(e){return e.moduleReference&&248===e.moduleReference.kind?e.moduleReference.expression.getText():e.moduleReference.getText()}(p);}if(n&&i.push(function(t){var n;return n=238===t.kind?t.importClause.namedBindings.name.getText():t.name.getText(),n=e.stripQuotes(n),c(e.Diagnostics.Change_0_to_1,[g,n+\".\"+g],s().replaceNode(l,f,e.createPropertyAccess(e.createIdentifier(n),g)).getChanges(),\"CodeChange\")}(n)),!o&&r&&r.importClause&&(r.importClause.name||r.importClause.namedBindings)){var y=function(t){var n=t.namedBindings,r=e.createImportSpecifier(void 0,e.createIdentifier(g));if(!n||0===n.elements.length){var a=e.createImportClause(t.name,e.createNamedImports([r]));return s().replaceNode(l,t,a).getChanges()}return s().insertNodeInListAfter(l,n.elements[n.elements.length-1],r).getChanges()}(r.importClause),h=e.stripQuotes(r.moduleSpecifier.getText());i.push(c(e.Diagnostics.Add_0_to_existing_import_declaration_from_1,[g,h],y,\"InsertingIntoExistingImport\",h));}else i.push(_(a));return i}(d):[_()]}function s(){return e.textChanges.ChangeTracker.fromCodeFixContext(t)}function c(t,n,r,a,i){return{description:e.formatMessage.apply(void 0,[void 0,t].concat(n)),changes:r,kind:a,moduleSpecifier:i}}var u,l=t.sourceFile,_=t.program.getTypeChecker(),d=t.program.getSourceFiles(),p=!!t.host.useCaseSensitiveFileNames&&t.host.useCaseSensitiveFileNames(),f=e.getTokenAtPosition(l,t.span.start,!1),g=f.getText(),m=new a,y=[],h=e.getMeaningFromLocation(f);if(t.errorCode===e.Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead.code){var v=_.getSymbolAtLocation(f),b=void 0,x=void 0;return 8388608&v.flags?(b=_.getAliasedSymbol(v),x=g):e.isJsxOpeningLikeElement(f.parent)&&f.parent.tagName===f?x=(b=_.getAliasedSymbol(_.resolveNameAtLocation(f,_.getJsxNamespace(),107455))).name:e.Debug.fail(\"Either the symbol or the JSX namespace should be a UMD global if we got here\"),o(b,x,!1,!0)}for(var k=_.getAmbientModules(),S=0,T=d;S<T.length;S++){var C=T[S];C!==l&&e.isExternalOrCommonJsModule(C)&&k.push(C.symbol);}for(var D=0,E=k;D<E.length;D++){var N=E[D];t.cancellationToken.throwIfCancellationRequested();var A=_.tryGetMemberInModuleExports(\"default\",N);if(A){var w=e.getLocalSymbolForExportDefault(A);if(w&&w.name===g&&i(w,h)){O=r(w);m.addActions(O,o(N,g,!0));}}var P=_.tryGetMemberInModuleExports(g,N);if(P&&i(P,h)){var O=r(P);m.addActions(O,o(N,g));}}return m.getAllActions()}t.registerCodeFix({errorCodes:[e.Diagnostics.Cannot_find_name_0.code,e.Diagnostics.Cannot_find_name_0_Did_you_mean_1.code,e.Diagnostics.Cannot_find_namespace_0.code,e.Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead.code],getCodeActions:n});var r;!function(e){e[e.Better=0]=\"Better\",e[e.Equal=1]=\"Equal\",e[e.Worse=2]=\"Worse\";}(r||(r={}));var a=function(){function t(){this.symbolIdToActionMap=[];}return t.prototype.addAction=function(e,t){if(t){var n=this.symbolIdToActionMap[e];if(n)if(\"CodeChange\"!==t.kind){for(var a=[],i=0,o=this.symbolIdToActionMap[e];i<o.length;i++){var s=o[i];if(\"CodeChange\"!==s.kind)switch(this.compareModuleSpecifiers(s.moduleSpecifier,t.moduleSpecifier)){case r.Better:if(\"NewImport\"===t.kind)return;case r.Equal:a.push(s);break;case r.Worse:continue}else a.push(s);}a.push(t),this.symbolIdToActionMap[e]=a;}else n.push(t);else this.symbolIdToActionMap[e]=[t];}},t.prototype.addActions=function(e,t){for(var n=0,r=t;n<r.length;n++){var a=r[n];this.addAction(e,a);}},t.prototype.getAllActions=function(){var t=[];for(var n in this.symbolIdToActionMap)t=e.concatenate(t,this.symbolIdToActionMap[n]);return t},t.prototype.compareModuleSpecifiers=function(t,n){if(t===n)return r.Equal;if(0===n.indexOf(t))return r.Better;if(0===t.indexOf(n))return r.Worse;if(e.isExternalModuleNameRelative(t)&&e.isExternalModuleNameRelative(n)){var a=new RegExp(e.directorySeparator,\"g\"),i=(t.match(a)||[]).length,o=(n.match(a)||[]).length;return i<o?r.Better:i===o?r.Equal:r.Worse}return r.Equal},t}();}(e.codefix||(e.codefix={}));}(r||(r={}));!function(e){!function(t){function n(t,n,r){var a=e.getLineAndCharacterOfPosition(t,n).line,i=e.getStartPositionOfLine(a,t),o=e.getFirstNonSpaceCharacterPosition(t.text,i);if(!e.isInComment(t,o)&&!e.isInString(t,o)&&!e.isInTemplateString(t,o)){var s=e.getTouchingToken(t,o,!1),c=e.getLeadingCommentRangesOfNode(s,t);if(!c||!c.length||c[0].pos>=o)return{span:{start:o,length:0},newText:\"// @ts-ignore\"+r}}return{span:{start:n,length:0},newText:(n===o?\"\":r)+\"// @ts-ignore\"+r}}function r(t){var r=t.sourceFile,a=t.program,i=t.newLineCharacter,o=t.span;if(e.isInJavaScriptFile(r)&&e.isCheckJsEnabledForFile(r,a.getCompilerOptions()))return[{description:e.getLocaleSpecificMessage(e.Diagnostics.Ignore_this_error_message),changes:[{fileName:r.fileName,textChanges:[n(r,o.start,i)]}]},{description:e.getLocaleSpecificMessage(e.Diagnostics.Disable_checking_for_this_file),changes:[{fileName:r.fileName,textChanges:[{span:{start:r.checkJsDirective?r.checkJsDirective.pos:0,length:r.checkJsDirective?r.checkJsDirective.end-r.checkJsDirective.pos:0},newText:\"// @ts-nocheck\"+i}]}]}]}t.registerCodeFix({errorCodes:function(){var t=e.Diagnostics;return Object.keys(t).filter(function(n){return t[n]&&t[n].category===e.DiagnosticCategory.Error}).map(function(e){return t[e].code})}(),getCodeActions:r});}(e.codefix||(e.codefix={}));}(r||(r={}));!function(e){!function(t){function n(t,n,r){for(var a=r.sourceFile,i=e.textChanges.ChangeTracker.fromCodeFixContext(r),o=0,s=t;o<s.length;o++){var c=s[o];i.insertNodeAfter(a,n,c,{suffix:r.newLineCharacter});}var u=i.getChanges();return e.some(u)?(e.Debug.assert(1===u.length),[{fileName:u[0].fileName,textChanges:[{span:u[0].textChanges[0].span,newText:u[0].textChanges.reduce(function(e,t){return e+t.newText},\"\")}]}]):u}function r(e,t,n){for(var r=e.symbol.members,i=[],o=0,s=t.filter(function(e){return!r.has(e.getName())});o<s.length;o++){var c=a(s[o],e,n);c&&(Array.isArray(c)?i=i.concat(c):i.push(c));}return i}function a(t,n,r){function a(t,n,a){var i=r.signatureToSignatureDeclaration(t,151,n,e.NodeBuilderFlags.SuppressAnyReturnType);return i&&(i.decorators=void 0,i.modifiers=d,i.name=c,i.questionToken=f?e.createToken(55):void 0,i.body=a),i}var i=t.getDeclarations();if(i&&i.length){var o=i[0],c=e.getSynthesizedClone(e.getNameOfDeclaration(o)),_=l(e.getModifierFlags(o)),d=_?e.createNodeArray([_]):void 0,p=r.getWidenedType(r.getTypeOfSymbolAtLocation(t,n)),f=!!(67108864&t.flags);switch(o.kind){case 153:case 154:case 148:case 149:var g=r.typeToTypeNode(p,n);return e.createProperty(void 0,d,c,f?e.createToken(55):void 0,g,void 0);case 150:case 151:var m=r.getSignaturesOfType(p,0);if(!e.some(m))return;if(1===i.length)return e.Debug.assert(1===m.length),a(v=m[0],n,u());for(var y=[],h=0;h<m.length;h++)(b=a(v=m[h],n))&&y.push(b);if(i.length>m.length){var v=r.getSignatureFromDeclaration(i[i.length-1]),b=a(v,n,u());b&&y.push(b);}else{e.Debug.assert(i.length===m.length);var x=s(m,c,f,d);y.push(x);}return y;default:return}}}function i(t,n,r,a){var i,s=o(t.arguments.length,void 0,void 0,r);if(r)for(var c=e.length(t.typeArguments),l=0;l<c;l++){var _=c<8?String.fromCharCode(84+l):\"T\"+l,d=e.createTypeParameterDeclaration(_,void 0,void 0);(i||(i=[])).push(d);}return e.createMethod(void 0,a?[e.createToken(115)]:void 0,void 0,n,void 0,i,s,r?e.createKeywordTypeNode(119):void 0,u())}function o(t,n,r,a){for(var i=[],o=0;o<t;o++){var s=e.createParameter(void 0,void 0,void 0,n&&n[o]||\"arg\"+o,void 0!==r&&o>=r?e.createToken(55):void 0,a?e.createKeywordTypeNode(119):void 0,void 0);i.push(s);}return i}function s(t,n,r,a){for(var i=t[0],s=t[0].minArgumentCount,u=!1,l=0;l<t.length;l++){var _=t[l];s=Math.min(_.minArgumentCount,s),_.hasRestParameter&&(u=!0),_.parameters.length>=i.parameters.length&&(!_.hasRestParameter||i.hasRestParameter)&&(i=_);}var d=i.parameters.length-(i.hasRestParameter?1:0),p=i.parameters.map(function(e){return e.getName()}),f=o(d,p,s,!0);if(u){var g=e.createArrayTypeNode(e.createKeywordTypeNode(119)),m=e.createParameter(void 0,void 0,e.createToken(24),p[d]||\"rest\",d>=s?e.createToken(55):void 0,g,void 0);f.push(m);}return c(a,n,r,void 0,f,void 0)}function c(t,n,r,a,i,o){return e.createMethod(void 0,t,void 0,n,r?e.createToken(55):void 0,a,i,o,u())}function u(){return e.createBlock([e.createThrow(e.createNew(e.createIdentifier(\"Error\"),void 0,[e.createLiteral(\"Method not implemented.\")]))],!0)}function l(t){return 4&t?e.createToken(114):16&t?e.createToken(113):void 0}t.newNodesToChanges=n,t.createMissingMemberNodes=r,t.createMethodFromCallExpression=i,t.createStubbedMethod=c;}(e.codefix||(e.codefix={}));}(r||(r={}));!function(e){!function(t){function n(t){var n=t.startPosition,r=e.getTokenAtPosition(t.file,n,!1),o=t.program.getTypeChecker().getSymbolAtLocation(r);if(o&&e.isDeclarationOfFunctionOrClassExpression(o)&&(o=o.valueDeclaration.initializer.symbol),o&&16&o.flags&&o.members&&o.members.size>0)return[{name:i.name,description:i.description,actions:[{description:i.description,name:a}]}]}function r(t,n){function r(t,n){void 0===n&&(n=!1),d.some(function(n){return e.isNodeDescendantOf(t,n)})||(d.push(t),n?p.push(function(){return y.deleteNodeInList(s,t)}):p.push(function(){return y.deleteNode(s,t)}));}function i(t){function n(t,n){return e.isFunctionLike(n)}function a(t,a){if(4&t.flags){var i=t.valueDeclaration,o=i.parent;if(n(i,o.right)){if(r(o.parent&&210===o.parent.kind?o.parent:o),!o.right)return e.createProperty([],a,t.name,void 0,void 0,void 0);switch(o.right.kind){case 186:var c=o.right;return e.createMethod(void 0,a,void 0,i.name,void 0,void 0,c.parameters,void 0,c.body);case 187:var u=o.right,l=u.body,_=void 0;if(207===l.kind)_=l;else{var d=l;_=e.createBlock([e.createReturn(d)]);}return e.createMethod(void 0,a,void 0,i.name,void 0,void 0,u.parameters,void 0,_);default:if(e.isSourceFileJavaScript(s))return;return e.createProperty(void 0,a,i.name,void 0,void 0,o.right)}}}}var i=[];return t.members&&t.members.forEach(function(e){var t=a(e,void 0);t&&i.push(t);}),t.exports&&t.exports.forEach(function(t){var n=a(t,[e.createToken(115)]);n&&i.push(n);}),i}if(a===n){var o=t.startPosition,s=t.file,c=t.program.getTypeChecker(),u=e.getTokenAtPosition(s,o,!1),l=c.getSymbolAtLocation(u),_=t.rulesProvider.getFormatOptions().newLineCharacter,d=[],p=[];if(19&l.flags){var f,g,m=l.valueDeclaration,y=e.textChanges.ChangeTracker.fromCodeFixContext(t);switch(m.kind){case 228:f=m,r(m),g=function(t){var n=i(l);return t.body&&n.unshift(e.createConstructor(void 0,void 0,t.parameters,t.body)),e.createClassDeclaration(void 0,void 0,t.name,void 0,void 0,n)}(m);break;case 226:f=m.parent.parent,1===m.parent.declarations.length?r(f):r(m,!0),g=function(t){var n=t.initializer;if(n&&186===n.kind&&71===t.name.kind){var r=i(n.symbol);return n.body&&r.unshift(e.createConstructor(void 0,void 0,n.parameters,n.body)),e.createClassDeclaration(void 0,void 0,t.name,void 0,void 0,r)}}(m);}if(g){y.insertNodeAfter(s,f,g,{suffix:_});for(var h=0,v=p;h<v.length;h++)(0,v[h])();return{edits:y.getChanges()}}}}}var a=\"convert\",i={name:\"Convert to ES2015 class\",description:e.Diagnostics.Convert_function_to_an_ES2015_class.message,getEditsForAction:r,getAvailableActions:n};t.registerRefactor(i);}(e.refactor||(e.refactor={}));}(r||(r={}));!function(e){function t(t,n,r,a){var i=e.isNodeKind(t)?new b(t,n,r):71===t?new T(71,n,r):new S(t,n,r);return i.parent=a,i}function r(t){var n=!0;for(var r in t)if(e.hasProperty(t,r)&&!a(r)){n=!1;break}if(n)return t;var i={};for(var r in t)e.hasProperty(t,r)&&(i[a(r)?r:r.charAt(0).toLowerCase()+r.substr(1)]=t[r]);return i}function a(e){return!e.length||e.charAt(0)===e.charAt(0).toLowerCase()}function i(t){return t?e.map(t,function(e){return e.text}).join(\"\"):\"\"}function o(){return{target:1,jsx:1}}function s(){return e.codefix.getSupportedErrorCodes()}function c(e,t,n){e.version=n,e.scriptSnapshot=t;}function u(t,n,r,a,i,o){var s=n.getText(0,n.getLength()),u=e.createSourceFile(t,s,r,i,o);return c(u,n,a),u}function l(t,n,r,a,i){if(a&&r!==t.version&&!e.disableIncrementalParsing){var o=void 0,s=0!==a.span.start?t.text.substr(0,a.span.start):\"\",l=e.textSpanEnd(a.span)!==t.text.length?t.text.substr(e.textSpanEnd(a.span)):\"\";if(0===a.newLength)o=s&&l?s+l:s||l;else{var _=n.getText(a.span.start,a.span.start+a.newLength);o=s&&l?s+_+l:s?s+_:_+l;}var d=e.updateSourceFile(t,o,a,i);return c(d,n,r),d.nameTable=void 0,t!==d&&t.scriptSnapshot&&(t.scriptSnapshot.dispose&&t.scriptSnapshot.dispose(),t.scriptSnapshot=void 0),d}return u(t.fileName,n,t.languageVersion,r,!0,t.scriptKind)}function _(t,n){function a(e){t.log&&t.log(e);}function i(e){var t=se.getSourceFile(e);if(!t)throw new Error(\"Could not find file: '\"+e+\"'.\");return t}function o(e){return v.ensureUpToDate(e),v}function s(){function r(t){return i(t,e.toPath(t,de,pe))}function i(t,r){e.Debug.assert(void 0!==u);var a=u.getOrCreateEntryByPath(t,r);if(a){if(!d){var i=se&&se.getSourceFileByPath(r);if(i)return e.Debug.assert(a.scriptKind===i.scriptKind,\"Registered script kind (\"+i.scriptKind+\") should match new script kind (\"+a.scriptKind+\") for file: \"+r),n.updateDocumentWithKey(t,r,_,f,a.scriptSnapshot,a.version,a.scriptKind)}return n.acquireDocumentWithKey(t,r,_,f,a.scriptSnapshot,a.version,a.scriptKind)}}function o(t){if(!t)return!1;var n=t.path||e.toPath(t.fileName,de,pe);return t.version===u.getVersion(n)}if(t.getProjectVersion){var s=t.getProjectVersion();if(s){if(ce===s)return;ce=s;}}var c=t.getTypeRootsVersion?t.getTypeRootsVersion():0;ue!==c&&(a(\"TypeRoots version has changed; provide new program\"),se=void 0,ue=c);var u=new A(t,pe);if(!function(){if(!se)return!1;var t=u.getRootFileNames();if(se.getSourceFiles().length!==t.length)return!1;for(var n=0,r=t;n<r.length;n++){var a=r[n];if(!o(se.getSourceFile(a)))return!1}var i=se.getCompilerOptions(),s=u.compilationSettings();return!!e.compareDataObjects(i,s)&&(!i.configFile||!s.configFile||i.configFile.text===s.configFile.text)}()){var l=se&&se.getCompilerOptions(),_=u.compilationSettings(),d=l&&(l.target!==_.target||l.module!==_.module||l.moduleResolution!==_.moduleResolution||l.noResolve!==_.noResolve||l.jsx!==_.jsx||l.allowJs!==_.allowJs||l.disableSizeLimit!==l.disableSizeLimit||l.baseUrl!==_.baseUrl||!e.equalOwnProperties(l.paths,_.paths)),p={getSourceFile:r,getSourceFileByPath:i,getCancellationToken:function(){return _e},getCanonicalFileName:pe,useCaseSensitiveFileNames:function(){return le},getNewLine:function(){return e.getNewLineOrDefaultFromHost(t)},getDefaultLibFileName:function(e){return t.getDefaultLibFileName(e)},writeFile:e.noop,getCurrentDirectory:function(){return de},fileExists:function(n){var r=e.toPath(n,de,pe);return u.containsEntryByPath(r)?!!u.getEntryByPath(r):t.fileExists&&t.fileExists(n)},readFile:function(n){var r=e.toPath(n,de,pe);if(u.containsEntryByPath(r)){var a=u.getEntryByPath(r);return a&&a.scriptSnapshot.getText(0,a.scriptSnapshot.getLength())}return t.readFile&&t.readFile(n)},directoryExists:function(n){return e.directoryProbablyExists(n,t)},getDirectories:function(e){return t.getDirectories?t.getDirectories(e):[]}};t.trace&&(p.trace=function(e){return t.trace(e)}),t.resolveModuleNames&&(p.resolveModuleNames=function(e,n){return t.resolveModuleNames(e,n)}),t.resolveTypeReferenceDirectives&&(p.resolveTypeReferenceDirectives=function(e,n){return t.resolveTypeReferenceDirectives(e,n)});var f=n.getKeyForCompilationSettings(_),g=e.createProgram(u.getRootFileNames(),_,p,se);if(se)for(var m=se.getSourceFiles(),y=n.getKeyForCompilationSettings(l),h=0,v=m;h<v.length;h++){var b=v[h];g.getSourceFile(b.fileName)&&!d||n.releaseDocumentWithKey(b.path,y);}u=void 0,(se=g).getTypeChecker();}}function c(){return s(),se}function u(){se=void 0;}function l(){se&&(e.forEach(se.getSourceFiles(),function(e){return n.releaseDocument(e.fileName,se.getCompilerOptions())}),se=void 0),t=void 0;}function _(e){return s(),se.getSyntacticDiagnostics(i(e),_e)}function d(t){s();var n=i(t),r=se.getSemanticDiagnostics(n,_e);if(!se.getCompilerOptions().declaration)return r;var a=se.getDeclarationDiagnostics(n,_e);return e.concatenate(r,a)}function p(){return s(),se.getOptionsDiagnostics(_e).concat(se.getGlobalDiagnostics(_e))}function f(n,r){return s(),e.Completions.getCompletionsAtPosition(t,se.getTypeChecker(),a,se.getCompilerOptions(),i(n),r)}function g(t,n,r){return s(),e.Completions.getCompletionEntryDetails(se.getTypeChecker(),a,se.getCompilerOptions(),i(t),n,r)}function m(t,n,r){return s(),e.Completions.getCompletionEntrySymbol(se.getTypeChecker(),a,se.getCompilerOptions(),i(t),n,r)}function y(t,n){s();var r=i(t),a=e.getTouchingPropertyName(r,n,!0);if(a!==r&&!e.isLabelName(a)){var o=se.getTypeChecker(),c=o.getSymbolAtLocation(a);if(c&&!o.isUnknownSymbol(c)){var u=e.SymbolDisplay.getSymbolDisplayPartsDocumentationAndSymbolKind(o,c,r,e.getContainerNode(a),a);return{kind:u.symbolKind,kindModifiers:e.SymbolDisplay.getSymbolModifiers(c),textSpan:e.createTextSpan(a.getStart(),a.getWidth()),displayParts:u.displayParts,documentation:u.documentation,tags:u.tags}}switch(a.kind){case 71:case 179:case 143:case 99:case 169:case 97:var l=o.getTypeAtLocation(a);if(l)return{kind:\"\",kindModifiers:\"\",textSpan:e.createTextSpan(a.getStart(),a.getWidth()),displayParts:e.typeToDisplayParts(o,l,e.getContainerNode(a)),documentation:l.symbol?l.symbol.getDocumentationComment():void 0,tags:l.symbol?l.symbol.getJsDocTags():void 0}}}}function h(t,n){return s(),e.GoToDefinition.getDefinitionAtPosition(se,i(t),n)}function b(t,n){return s(),e.GoToDefinition.getTypeDefinitionAtPosition(se.getTypeChecker(),i(t),n)}function x(t,n){return s(),e.FindAllReferences.getImplementationsAtPosition(se,_e,se.getSourceFiles(),i(t),n)}function k(t,n){var r=T(t,n);if(r){var a=pe(e.normalizeSlashes(t));r=e.filter(r,function(t){return pe(e.normalizeSlashes(t.fileName))===a});}return r}function S(t,n,r){s();var a=e.map(r,function(e){return se.getSourceFile(e)}),o=i(t);return e.DocumentHighlights.getDocumentHighlights(se,_e,o,n,a)}function T(e,t){return function(e){if(e){for(var t=[],n=0,r=e;n<r.length;n++)for(var a=r[n],i=0,o=a.highlightSpans;i<o.length;i++){var s=o[i];t.push({fileName:a.fileName,textSpan:s.textSpan,isWriteAccess:\"writtenReference\"===s.kind,isDefinition:!1,isInString:s.isInString});}return t}}(S(e,t,[e]))}function C(e,t,n,r){return E(e,t,{findInStrings:n,findInComments:r,isForRename:!0})}function D(e,t){return E(e,t)}function E(t,n,r){return s(),e.FindAllReferences.findReferencedEntries(se,_e,se.getSourceFiles(),i(t),n,r)}function N(t,n){return s(),e.FindAllReferences.findReferencedSymbols(se,_e,se.getSourceFiles(),i(t),n)}function O(t,n,r,a){s();var o=r?[i(r)]:se.getSourceFiles();return e.NavigateTo.getNavigateToItems(o,se.getTypeChecker(),_e,t,n,a)}function F(e,n){function r(e,t,n){o.push({name:e,writeByteOrderMark:n,text:t});}s();var a=i(e),o=[],c=t.getCustomTransformers&&t.getCustomTransformers(),u=se.emit(a,r,_e,n,c);return{outputFiles:o,emitSkipped:u.emitSkipped}}function I(t,n){s();var r=i(t);return e.SignatureHelp.getSignatureHelpItems(se,r,n,_e)}function M(e){return oe.getCurrentSourceFile(e)}function R(e){return M(e)}function L(t,n,r){var a=oe.getCurrentSourceFile(t),i=e.getTouchingPropertyName(a,n,!1);if(i!==a){switch(i.kind){case 179:case 143:case 9:case 86:case 101:case 95:case 97:case 99:case 169:case 71:break;default:return}for(var o=i;;)if(e.isRightSideOfPropertyAccess(o)||e.isRightSideOfQualifiedName(o))o=o.parent;else{if(!e.isNameOfModuleDeclaration(o))break;if(233!==o.parent.parent.kind||o.parent.parent.body!==o.parent)break;o=o.parent.parent.name;}return e.createTextSpanFromBounds(o.getStart(),i.getEnd())}}function B(t,n){var r=oe.getCurrentSourceFile(t);return e.BreakpointResolver.spanInSourceFileAtLocation(r,n)}function K(t){return e.NavigationBar.getNavigationBarItems(oe.getCurrentSourceFile(t),_e)}function j(t){return e.NavigationBar.getNavigationTree(oe.getCurrentSourceFile(t),_e)}function J(n){var r=e.getScriptKind(n,t);return 3===r||4===r}function z(t,n){return J(t)?(s(),e.getSemanticClassifications(se.getTypeChecker(),_e,i(t),se.getClassifiableNames(),n)):[]}function U(t,n){return J(t)?(s(),e.getEncodedSemanticClassifications(se.getTypeChecker(),_e,i(t),se.getClassifiableNames(),n)):{spans:[],endOfLineState:0}}function q(t,n){return e.getSyntacticClassifications(_e,oe.getCurrentSourceFile(t),n)}function V(t,n){return e.getEncodedSyntacticClassifications(_e,oe.getCurrentSourceFile(t),n)}function $(t){var n=oe.getCurrentSourceFile(t);return e.OutliningElementsCollector.collectElements(n,_e)}function W(t,n){var r=oe.getCurrentSourceFile(t),a=[],i=e.getTouchingToken(r,n,!1);if(i.getStart(r)===n){var o=function(e){switch(e.kind){case 17:return 18;case 19:return 20;case 21:return 22;case 27:return 29;case 18:return 17;case 20:return 19;case 22:return 21;case 29:return 27}}(i);if(o)for(var s=0,c=i.parent.getChildren(r);s<c.length;s++){var u=c[s];if(u.kind===o){var l=e.createTextSpan(i.getStart(r),i.getWidth(r)),_=e.createTextSpan(u.getStart(r),u.getWidth(r));l.start<_.start?a.push(l,_):a.push(_,l);break}}}return a}function H(t,n,i){var o=e.timestamp(),s=r(i),c=oe.getCurrentSourceFile(t);a(\"getIndentationAtPosition: getCurrentSourceFile: \"+(e.timestamp()-o)),o=e.timestamp();var u=e.formatting.SmartIndenter.getIndentation(n,c,s);return a(\"getIndentationAtPosition: computeIndentation  : \"+(e.timestamp()-o)),u}function G(t,n,a,i){var s=oe.getCurrentSourceFile(t),c=r(i);return e.formatting.formatSelection(n,a,s,o(c),c)}function X(t,n){var a=oe.getCurrentSourceFile(t),i=r(n);return e.formatting.formatDocument(a,o(i),i)}function Y(t,n,a,i){var s=oe.getCurrentSourceFile(t),c=r(i);return\"}\"===a?e.formatting.formatOnClosingCurly(n,s,o(c),c):\";\"===a?e.formatting.formatOnSemicolon(n,s,o(c),c):\"\\n\"===a?e.formatting.formatOnEnter(n,s,o(c),c):[]}function Q(n,r,a,c,u){s();var l=i(n),_={start:r,length:a-r},d=e.getNewLineOrDefaultFromHost(t),p=[];return e.forEach(e.deduplicate(c),function(n){_e.throwIfCancellationRequested();var r={errorCode:n,sourceFile:l,span:_,program:se,newLineCharacter:d,host:t,cancellationToken:_e,rulesProvider:o(u)},a=e.codefix.getFixes(r);a&&(p=p.concat(a));}),p}function Z(n,r){return e.JsDoc.getDocCommentTemplateAtPosition(e.getNewLineOrDefaultFromHost(t),oe.getCurrentSourceFile(n),r)}function ee(t,n,r){if(60===r)return!1;var a=oe.getCurrentSourceFile(t);if(e.isInString(a,n))return!1;if(e.isInsideJsxElementOrAttribute(a,n))return 123===r;if(e.isInTemplateString(a,n))return!1;switch(r){case 39:case 34:case 96:return!e.isInComment(a,n)}return!0}function te(t,n){function r(e){return e.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\"\\\\$&\")}s();var a=i(t);_e.throwIfCancellationRequested();var o=a.text,c=[];if(n.length>0)for(var u=function(){var t=/(?:\\/\\/+\\s*)/.source,a=/(?:\\/\\*+\\s*)/.source,i=\"(\"+/(?:^(?:\\s|\\*)*)/.source+\"|\"+t+\"|\"+a+\")\",o=\"(?:\"+e.map(n,function(e){return\"(\"+r(e.text)+\")\"}).join(\"|\")+\")\",s=/(?:$|\\*\\/)/.source,c=i+(\"(\"+o+/(?:.*?)/.source+\")\")+s;return new RegExp(c,\"gim\")}(),l=void 0;l=u.exec(o);){_e.throwIfCancellationRequested();e.Debug.assert(l.length===n.length+3);var _=l[1],d=l.index+_.length;if(e.isInComment(a,d)){for(var p=void 0,f=0;f<n.length;f++)l[f+3]&&(p=n[f]);if(e.Debug.assert(void 0!==p),!function(e){return e>=97&&e<=122||e>=65&&e<=90||e>=48&&e<=57}(o.charCodeAt(d+p.text.length))){var g=l[2];c.push({descriptor:p,message:g,position:d});}}}return c}function ne(n,r){s();var a=t.getDefaultLibFileName(t.getCompilationSettings());return e.Rename.getRenameInfo(se.getTypeChecker(),a,pe,i(n),r)}function re(e,n,r){var a=\"number\"==typeof n?[n,void 0]:[n.pos,n.end];return{file:e,startPosition:a[0],endPosition:a[1],program:c(),newLineCharacter:t.getNewLine(),rulesProvider:o(r),cancellationToken:_e}}function ae(t,n){s();var r=i(t);return e.refactor.getApplicableRefactors(re(r,n))}function ie(t,n,r,a,o){s();var c=i(t);return e.refactor.getEditsForRefactor(re(c,r,n),a,o)}void 0===n&&(n=e.createDocumentRegistry(t.useCaseSensitiveFileNames&&t.useCaseSensitiveFileNames(),t.getCurrentDirectory()));var oe=new w(t);v=v||new e.formatting.RulesProvider;var se,ce,ue=0,le=t.useCaseSensitiveFileNames&&t.useCaseSensitiveFileNames(),_e=new P(t.getCancellationToken&&t.getCancellationToken()),de=t.getCurrentDirectory();!e.localizedDiagnosticMessages&&t.getLocalizedDiagnosticMessages&&(e.localizedDiagnosticMessages=t.getLocalizedDiagnosticMessages());var pe=e.createGetCanonicalFileName(le);return{dispose:l,cleanupSemanticCache:u,getSyntacticDiagnostics:_,getSemanticDiagnostics:d,getCompilerOptionsDiagnostics:p,getSyntacticClassifications:q,getSemanticClassifications:z,getEncodedSyntacticClassifications:V,getEncodedSemanticClassifications:U,getCompletionsAtPosition:f,getCompletionEntryDetails:g,getCompletionEntrySymbol:m,getSignatureHelpItems:I,getQuickInfoAtPosition:y,getDefinitionAtPosition:h,getImplementationAtPosition:x,getTypeDefinitionAtPosition:b,getReferencesAtPosition:D,findReferences:N,getOccurrencesAtPosition:k,getDocumentHighlights:S,getNameOrDottedNameSpan:L,getBreakpointStatementAtPosition:B,getNavigateToItems:O,getRenameInfo:ne,findRenameLocations:C,getNavigationBarItems:K,getNavigationTree:j,getOutliningSpans:$,getTodoComments:te,getBraceMatchingAtPosition:W,getIndentationAtPosition:H,getFormattingEditsForRange:G,getFormattingEditsForDocument:X,getFormattingEditsAfterKeystroke:Y,getDocCommentTemplateAtPosition:Z,isValidBraceCompletionAtPosition:ee,getCodeFixesAtPosition:Q,getEmitOutput:F,getNonBoundSourceFile:M,getSourceFile:R,getProgram:c,getApplicableRefactors:ae,getEditsForRefactor:ie}}function d(e){return e.nameTable||p(e),e.nameTable}function p(t){function n(t){switch(t.kind){case 71:r(t.text,t);break;case 9:case 8:(e.isDeclarationName(t)||248===t.parent.kind||y(t)||e.isLiteralComputedPropertyDeclarationName(t))&&r(t.text,t);break;default:if(e.forEachChild(t,n),t.jsDoc)for(var a=0,i=t.jsDoc;a<i.length;a++){var o=i[a];e.forEachChild(o,n);}}}function r(e,t){a.set(e,void 0===a.get(e)?t.pos:-1);}var a=e.createMap();n(t),t.nameTable=a;}function f(e){switch(e.kind){case 253:case 255:case 261:case 262:case 151:case 153:case 154:return!0}return!1}function g(e){switch(e.kind){case 9:case 8:if(144===e.parent.kind)return f(e.parent.parent)?e.parent.parent:void 0;case 71:return!f(e.parent)||178!==e.parent.parent.kind&&254!==e.parent.parent.kind||e.parent.name!==e?void 0:e.parent}}function m(t,n){var r=n.parent,a=t.getContextualType(r),i=e.getTextOfPropertyName(n.name);if(i&&a){var o=[],s=a.getProperty(i);if(65536&a.flags)return e.forEach(a.types,function(e){var t=e.getProperty(i);t&&o.push(t);}),o;if(s)return o.push(s),o}}function y(e){return e&&e.parent&&180===e.parent.kind&&e.parent.argumentExpression===e}function h(t){if(\"undefined\"!=typeof __dirname)return __dirname+e.directorySeparator+e.getDefaultLibFileName(t);throw new Error(\"getDefaultLibFilePath is only supported when consumed as a node module. \")}e.servicesVersion=\"0.5\";var v,b=function(){function n(e,t,n){this.pos=t,this.end=n,this.flags=0,this.transformFlags=void 0,this.parent=void 0,this.kind=e;}return n.prototype.getSourceFile=function(){return e.getSourceFileOfNode(this)},n.prototype.getStart=function(t,n){return e.getTokenPosOfNode(this,t,n)},n.prototype.getFullStart=function(){return this.pos},n.prototype.getEnd=function(){return this.end},n.prototype.getWidth=function(e){return this.getEnd()-this.getStart(e)},n.prototype.getFullWidth=function(){return this.end-this.pos},n.prototype.getLeadingTriviaWidth=function(e){return this.getStart(e)-this.pos},n.prototype.getFullText=function(e){return(e||this.getSourceFile()).text.substring(this.pos,this.end)},n.prototype.getText=function(e){return e||(e=this.getSourceFile()),e.text.substring(this.getStart(e),this.getEnd())},n.prototype.addSyntheticNodes=function(n,r,a){for(e.scanner.setTextPos(r);r<a;){var i=e.scanner.scan();e.Debug.assert(1!==i);var o=e.scanner.getTextPos();o<=a&&n.push(t(i,r,o,this)),r=o;}return r},n.prototype.createSyntaxList=function(e){var n=t(295,e.pos,e.end,this);n._children=[];for(var r=e.pos,a=0,i=e;a<i.length;a++){var o=i[a];r<o.pos&&(r=this.addSyntheticNodes(n._children,r,o.pos)),n._children.push(o),r=o.end;}return r<e.end&&this.addSyntheticNodes(n._children,r,e.end),n},n.prototype.createChildren=function(t){var n=this;if(e.isNodeKind(this.kind)){if(e.isJSDocCommentContainingNode(this)){var r=[];return this.forEachChild(function(e){r.push(e);}),void(this._children=r)}var a=[];e.scanner.setText((t||this.getSourceFile()).text);var i=this.pos,o=function(e){i=n.addSyntheticNodes(a,i,e.pos),a.push(e),i=e.end;},s=function(e){i<e.pos&&(i=n.addSyntheticNodes(a,i,e.pos)),a.push(n.createSyntaxList(e)),i=e.end;};if(this.jsDoc)for(var c=0,u=this.jsDoc;c<u.length;c++)o(u[c]);i=this.pos,e.forEachChild(this,o,s),i<this.end&&this.addSyntheticNodes(a,i,this.end),e.scanner.setText(void 0),this._children=a;}else this._children=e.emptyArray;},n.prototype.getChildCount=function(e){return this._children||this.createChildren(e),this._children.length},n.prototype.getChildAt=function(e,t){return this._children||this.createChildren(t),this._children[e]},n.prototype.getChildren=function(e){return this._children||this.createChildren(e),this._children},n.prototype.getFirstToken=function(t){var n=this.getChildren(t);if(n.length){var r=e.find(n,function(e){return e.kind<267||e.kind>294});return r.kind<143?r:r.getFirstToken(t)}},n.prototype.getLastToken=function(t){var n=this.getChildren(t),r=e.lastOrUndefined(n);if(r)return r.kind<143?r:r.getLastToken(t)},n.prototype.forEachChild=function(t,n){return e.forEachChild(this,t,n)},n}(),x=function(){function t(e,t){this.pos=e,this.end=t,this.flags=0,this.parent=void 0;}return t.prototype.getSourceFile=function(){return e.getSourceFileOfNode(this)},t.prototype.getStart=function(t,n){return e.getTokenPosOfNode(this,t,n)},t.prototype.getFullStart=function(){return this.pos},t.prototype.getEnd=function(){return this.end},t.prototype.getWidth=function(e){return this.getEnd()-this.getStart(e)},t.prototype.getFullWidth=function(){return this.end-this.pos},t.prototype.getLeadingTriviaWidth=function(e){return this.getStart(e)-this.pos},t.prototype.getFullText=function(e){return(e||this.getSourceFile()).text.substring(this.pos,this.end)},t.prototype.getText=function(e){return(e||this.getSourceFile()).text.substring(this.getStart(),this.getEnd())},t.prototype.getChildCount=function(){return 0},t.prototype.getChildAt=function(){},t.prototype.getChildren=function(){return e.emptyArray},t.prototype.getFirstToken=function(){},t.prototype.getLastToken=function(){},t.prototype.forEachChild=function(){},t}(),k=function(){function t(e,t){this.flags=e,this.name=t;}return t.prototype.getFlags=function(){return this.flags},t.prototype.getName=function(){return this.name},t.prototype.getDeclarations=function(){return this.declarations},t.prototype.getDocumentationComment=function(){return void 0===this.documentationComment&&(this.documentationComment=e.JsDoc.getJsDocCommentsFromDeclarations(this.declarations)),this.documentationComment},t.prototype.getJsDocTags=function(){return void 0===this.tags&&(this.tags=e.JsDoc.getJsDocTagsFromDeclarations(this.declarations)),this.tags},t}(),S=function(e){function t(t,n,r){var a=e.call(this,n,r)||this;return a.kind=t,a}return n(t,e),t}(x),T=function(e){function t(t,n,r){return e.call(this,n,r)||this}return n(t,e),t}(x);T.prototype.kind=71;var C=function(){function e(e,t){this.checker=e,this.flags=t;}return e.prototype.getFlags=function(){return this.flags},e.prototype.getSymbol=function(){return this.symbol},e.prototype.getProperties=function(){return this.checker.getPropertiesOfType(this)},e.prototype.getProperty=function(e){return this.checker.getPropertyOfType(this,e)},e.prototype.getApparentProperties=function(){return this.checker.getAugmentedPropertiesOfType(this)},e.prototype.getCallSignatures=function(){return this.checker.getSignaturesOfType(this,0)},e.prototype.getConstructSignatures=function(){return this.checker.getSignaturesOfType(this,1)},e.prototype.getStringIndexType=function(){return this.checker.getIndexTypeOfType(this,0)},e.prototype.getNumberIndexType=function(){return this.checker.getIndexTypeOfType(this,1)},e.prototype.getBaseTypes=function(){return 32768&this.flags&&3&this.objectFlags?this.checker.getBaseTypes(this):void 0},e.prototype.getNonNullableType=function(){return this.checker.getNonNullableType(this)},e}(),D=function(){function t(e){this.checker=e;}return t.prototype.getDeclaration=function(){return this.declaration},t.prototype.getTypeParameters=function(){return this.typeParameters},t.prototype.getParameters=function(){return this.parameters},t.prototype.getReturnType=function(){return this.checker.getReturnTypeOfSignature(this)},t.prototype.getDocumentationComment=function(){return void 0===this.documentationComment&&(this.documentationComment=this.declaration?e.JsDoc.getJsDocCommentsFromDeclarations([this.declaration]):[]),this.documentationComment},t.prototype.getJsDocTags=function(){return void 0===this.jsDocTags&&(this.jsDocTags=this.declaration?e.JsDoc.getJsDocTagsFromDeclarations([this.declaration]):[]),this.jsDocTags},t}(),E=function(t){function r(e,n,r){return t.call(this,e,n,r)||this}return n(r,t),r.prototype.update=function(t,n){return e.updateSourceFile(this,t,n)},r.prototype.getLineAndCharacterOfPosition=function(t){return e.getLineAndCharacterOfPosition(this,t)},r.prototype.getLineStarts=function(){return e.getLineStarts(this)},r.prototype.getPositionOfLineAndCharacter=function(t,n){return e.getPositionOfLineAndCharacter(this,t,n)},r.prototype.getLineEndOfPosition=function(e){var t,n=this.getLineAndCharacterOfPosition(e).line,r=this.getLineStarts();n+1>=r.length&&(t=this.getEnd()),t||(t=r[n+1]-1);var a=this.getFullText();return\"\\n\"===a[t]&&\"\\r\"===a[t-1]?t-1:t},r.prototype.getNamedDeclarations=function(){return this.namedDeclarations||(this.namedDeclarations=this.computeNamedDeclarations()),this.namedDeclarations},r.prototype.computeNamedDeclarations=function(){function t(e){var t=r(e);t&&o.add(t,e);}function n(e){var t=o.get(e);return t||o.set(e,t=[]),t}function r(t){var n=e.getNameOfDeclaration(t);if(n){var r=a(n);if(void 0!==r)return r;if(144===n.kind){var i=n.expression;return 179===i.kind?i.name.text:a(i)}}}function a(e){if(e&&(71===e.kind||9===e.kind||8===e.kind))return e.text}function i(a){switch(a.kind){case 228:case 186:case 151:case 150:var o=a,s=r(o);if(s){var c=n(s),u=e.lastOrUndefined(c);u&&o.parent===u.parent&&o.symbol===u.symbol?o.body&&!u.body&&(c[c.length-1]=o):c.push(o);}e.forEachChild(a,i);break;case 229:case 199:case 230:case 231:case 232:case 233:case 237:case 246:case 242:case 237:case 239:case 240:case 153:case 154:case 163:t(a),e.forEachChild(a,i);break;case 146:if(!e.hasModifier(a,92))break;case 226:case 176:var l=a;if(e.isBindingPattern(l.name)){e.forEachChild(l.name,i);break}l.initializer&&i(l.initializer);case 264:case 149:case 148:t(a);break;case 244:a.exportClause&&e.forEach(a.exportClause.elements,i);break;case 238:var _=a.importClause;_&&(_.name&&t(_),_.namedBindings&&(240===_.namedBindings.kind?t(_.namedBindings):e.forEach(_.namedBindings.elements,i)));break;default:e.forEachChild(a,i);}}var o=e.createMultiMap();return e.forEachChild(this,i),o},r}(b),N=function(){function t(e,t,n){this.fileName=e,this.text=t,this.skipTrivia=n;}return t.prototype.getLineAndCharacterOfPosition=function(t){return e.getLineAndCharacterOfPosition(this,t)},t}();e.toEditorSettings=r,e.displayPartsToString=i,e.getDefaultCompilerOptions=o,e.getSupportedCodeFixes=s;var A=function(){function t(t,n){this.host=t,this.currentDirectory=t.getCurrentDirectory(),this.fileNameToEntry=e.createFileMap();for(var r=0,a=t.getScriptFileNames();r<a.length;r++){var i=a[r];this.createEntry(i,e.toPath(i,this.currentDirectory,n));}this._compilationSettings=t.getCompilationSettings()||o();}return t.prototype.compilationSettings=function(){return this._compilationSettings},t.prototype.createEntry=function(t,n){var r,a=this.host.getScriptSnapshot(t);return a&&(r={hostFileName:t,version:this.host.getScriptVersion(t),scriptSnapshot:a,scriptKind:e.getScriptKind(t,this.host)}),this.fileNameToEntry.set(n,r),r},t.prototype.getEntryByPath=function(e){return this.fileNameToEntry.get(e)},t.prototype.containsEntryByPath=function(e){return this.fileNameToEntry.contains(e)},t.prototype.getOrCreateEntryByPath=function(e,t){return this.containsEntryByPath(t)?this.getEntryByPath(t):this.createEntry(e,t)},t.prototype.getRootFileNames=function(){var e=[];return this.fileNameToEntry.forEachValue(function(t,n){n&&e.push(n.hostFileName);}),e},t.prototype.getVersion=function(e){var t=this.getEntryByPath(e);return t&&t.version},t.prototype.getScriptSnapshot=function(e){var t=this.getEntryByPath(e);return t&&t.scriptSnapshot},t}(),w=function(){function t(e){this.host=e;}return t.prototype.getCurrentSourceFile=function(t){var n=this.host.getScriptSnapshot(t);if(!n)throw new Error(\"Could not find file: '\"+t+\"'.\");var r,a=e.getScriptKind(t,this.host),i=this.host.getScriptVersion(t);if(this.currentFileName!==t)r=u(t,n,5,i,!0,a);else if(this.currentFileVersion!==i){var o=n.getChangeRange(this.currentFileScriptSnapshot);r=l(this.currentSourceFile,n,i,o);}return r&&(this.currentFileVersion=i,this.currentFileName=t,this.currentFileScriptSnapshot=n,this.currentSourceFile=r),this.currentSourceFile},t}();e.createLanguageServiceSourceFile=u,e.disableIncrementalParsing=!1,e.updateLanguageServiceSourceFile=l;var P=function(){function t(e){this.cancellationToken=e;}return t.prototype.isCancellationRequested=function(){return this.cancellationToken&&this.cancellationToken.isCancellationRequested()},t.prototype.throwIfCancellationRequested=function(){if(this.isCancellationRequested())throw new e.OperationCanceledException},t}(),O=function(){function t(e,t){void 0===t&&(t=20),this.hostCancellationToken=e,this.throttleWaitMilliseconds=t,this.lastCancellationCheckTime=0;}return t.prototype.isCancellationRequested=function(){var t=e.timestamp();return Math.abs(t-this.lastCancellationCheckTime)>=this.throttleWaitMilliseconds&&(this.lastCancellationCheckTime=t,this.hostCancellationToken.isCancellationRequested())},t.prototype.throwIfCancellationRequested=function(){if(this.isCancellationRequested())throw new e.OperationCanceledException},t}();e.ThrottledCancellationToken=O,e.createLanguageService=_,e.getNameTable=d,e.getContainingObjectLiteralElement=g,e.getPropertySymbolsFromContextualType=m,e.getDefaultLibFilePath=h,e.objectAllocator=function(){return{getNodeConstructor:function(){return b},getTokenConstructor:function(){return S},getIdentifierConstructor:function(){return T},getSourceFileConstructor:function(){return E},getSymbolConstructor:function(){return k},getTypeConstructor:function(){return C},getSignatureConstructor:function(){return D},getSourceMapSourceConstructor:function(){return N}}}();}(r||(r={}));!function(e){!function(t){function n(t,n){function r(n,r){var a=n.decorators?e.skipTrivia(t.text,n.decorators.end):n.getStart(t);return e.createTextSpanFromBounds(a,(r||n).getEnd())}function a(t,n){return r(t,e.findNextToken(n,n.parent))}function i(e,n){return u(e&&_===t.getLineAndCharacterOfPosition(e.getStart(t)).line?e:n)}function o(n){return e.createTextSpanFromBounds(e.skipTrivia(t.text,n.pos),n.end)}function s(n){return u(e.findPrecedingToken(n.pos,t))}function c(t){return u(e.findNextToken(t,t.parent))}function u(n){function l(n){return 227===n.parent.kind&&n.parent.declarations[0]===n?r(e.findPrecedingToken(n.pos,t,n.parent),n):r(n)}function _(n){return 215===n.parent.parent.kind?u(n.parent.parent):e.isBindingPattern(n.name)?y(n.name):n.initializer||e.hasModifier(n,1)||216===n.parent.parent.kind?l(n):227===n.parent.kind&&n.parent.declarations[0]!==n?u(e.findPrecedingToken(n.pos,t,n.parent)):void 0}function d(t){return!!t.initializer||void 0!==t.dotDotDotToken||e.hasModifier(t,12)}function p(t){if(e.isBindingPattern(t.name))return y(t.name);if(d(t))return r(t);var n=t.parent,a=e.indexOf(n.parameters,t);return a?p(n.parameters[a-1]):u(n.body)}function f(t){return e.hasModifier(t,1)||229===t.parent.kind&&152!==t.kind}function g(n){switch(n.parent.kind){case 233:if(1!==e.getModuleInstanceState(n.parent))return;case 213:case 211:case 215:return i(n.parent,n.statements[0]);case 214:case 216:return i(e.findPrecedingToken(n.pos,t,n.parent),n.statements[0])}return u(n.statements[0])}function m(e){if(227!==e.initializer.kind)return u(e.initializer);var t=e.initializer;return t.declarations.length>0?u(t.declarations[0]):void 0}function y(t){var n=e.forEach(t.elements,function(e){return 200!==e.kind?e:void 0});return n?u(n):176===t.parent.kind?r(t.parent):l(t.parent)}function h(t){e.Debug.assert(175!==t.kind&&174!==t.kind);var n=177===t.kind?t.elements:t.properties,a=e.forEach(n,function(e){return 200!==e.kind?e:void 0});return a?u(a):r(194===t.parent.kind?t.parent:t)}if(n)switch(n.kind){case 208:return _(n.declarationList.declarations[0]);case 226:case 149:case 148:return _(n);case 146:return p(n);case 228:case 151:case 150:case 153:case 154:case 152:case 186:case 187:return function(e){if(e.body)return f(e)?r(e):u(e.body)}(n);case 207:if(e.isFunctionBlock(n))return function(e){var t=e.statements.length?e.statements[0]:e.getLastToken();return f(e.parent)?i(e.parent,t):u(t)}(n);case 234:return g(n);case 260:return g(n.block);case 210:return r(n.expression);case 219:return r(n.getChildAt(0),n.expression);case 213:return a(n,n.expression);case 212:return u(n.statement);case 225:return r(n.getChildAt(0));case 211:return a(n,n.expression);case 222:return u(n.statement);case 218:case 217:return r(n.getChildAt(0),n.label);case 214:return function(e){return e.initializer?m(e):e.condition?r(e.condition):e.incrementor?r(e.incrementor):void 0}(n);case 215:return a(n,n.expression);case 216:return m(n);case 221:return a(n,n.expression);case 257:case 258:return u(n.statements[0]);case 224:return g(n.tryBlock);case 223:case 243:return r(n,n.expression);case 237:return r(n,n.moduleReference);case 238:case 244:return r(n,n.moduleSpecifier);case 233:if(1!==e.getModuleInstanceState(n))return;case 229:case 232:case 264:case 176:return r(n);case 220:return u(n.statement);case 147:return o(n.parent.decorators);case 174:case 175:return y(n);case 230:case 231:return;case 25:case 1:return i(e.findPrecedingToken(n.pos,t));case 26:return s(n);case 17:return function(n){switch(n.parent.kind){case 232:var r=n.parent;return i(e.findPrecedingToken(n.pos,t,n.parent),r.members.length?r.members[0]:r.getLastToken(t));case 229:var a=n.parent;return i(e.findPrecedingToken(n.pos,t,n.parent),a.members.length?a.members[0]:a.getLastToken(t));case 235:return i(n.parent.parent,n.parent.clauses[0])}return u(n.parent)}(n);case 18:return function(t){switch(t.parent.kind){case 234:if(1!==e.getModuleInstanceState(t.parent.parent))return;case 232:case 229:return r(t);case 207:if(e.isFunctionBlock(t.parent))return r(t);case 260:return u(e.lastOrUndefined(t.parent.statements));case 235:var n=t.parent,a=e.lastOrUndefined(n.clauses);if(a)return u(e.lastOrUndefined(a.statements));return;case 174:var i=t.parent;return u(e.lastOrUndefined(i.elements)||i);default:if(e.isArrayLiteralOrObjectLiteralDestructuringPattern(t.parent)){var o=t.parent;return r(e.lastOrUndefined(o.properties)||o)}return u(t.parent)}}(n);case 22:return function(t){switch(t.parent.kind){case 175:var n=t.parent;return r(e.lastOrUndefined(n.elements)||n);default:if(e.isArrayLiteralOrObjectLiteralDestructuringPattern(t.parent)){var a=t.parent;return r(e.lastOrUndefined(a.elements)||a)}return u(t.parent)}}(n);case 19:return function(e){return 212===e.parent.kind||181===e.parent.kind||182===e.parent.kind?s(e):185===e.parent.kind?c(e):u(e.parent)}(n);case 20:return function(e){switch(e.parent.kind){case 186:case 228:case 187:case 151:case 150:case 153:case 154:case 152:case 213:case 212:case 214:case 216:case 181:case 182:case 185:return s(e);default:return u(e.parent)}}(n);case 56:return function(t){return e.isFunctionLike(t.parent)||261===t.parent.kind||146===t.parent.kind?s(t):u(t.parent)}(n);case 29:case 27:return function(e){return 184===e.parent.kind?c(e):u(e.parent)}(n);case 106:return function(e){return 212===e.parent.kind?a(e,e.parent.expression):u(e.parent)}(n);case 82:case 74:case 87:return c(n);case 142:return function(e){return 216===e.parent.kind?c(e):u(e.parent)}(n);default:if(e.isArrayLiteralOrObjectLiteralDestructuringPattern(n))return h(n);if((71===n.kind||198===n.kind||261===n.kind||262===n.kind)&&e.isArrayLiteralOrObjectLiteralDestructuringPattern(n.parent))return r(n);if(194===n.kind){b=n;if(e.isArrayLiteralOrObjectLiteralDestructuringPattern(b.left))return h(b.left);if(58===b.operatorToken.kind&&e.isArrayLiteralOrObjectLiteralDestructuringPattern(b.parent))return r(n);if(26===b.operatorToken.kind)return u(b.left)}if(e.isPartOfExpression(n))switch(n.parent.kind){case 212:return s(n);case 147:return u(n.parent);case 214:case 216:return r(n);case 194:if(26===n.parent.operatorToken.kind)return r(n);break;case 187:if(n.parent.body===n)return r(n)}if(261===n.parent.kind&&n.parent.name===n&&!e.isArrayLiteralOrObjectLiteralDestructuringPattern(n.parent.parent))return u(n.parent.initializer);if(184===n.parent.kind&&n.parent.type===n)return c(n.parent.type);if(e.isFunctionLike(n.parent)&&n.parent.type===n)return s(n);if(226===n.parent.kind||146===n.parent.kind){var v=n.parent;if(v.initializer===n||v.type===n||e.isAssignmentOperator(n.kind))return s(n)}if(194===n.parent.kind){var b=n.parent;if(e.isArrayLiteralOrObjectLiteralDestructuringPattern(b.left)&&(b.right===n||b.operatorToken===n))return s(n)}return u(n.parent)}}if(!t.isDeclarationFile){var l=e.getTokenAtPosition(t,n,!1),_=t.getLineAndCharacterOfPosition(n).line;if((!(t.getLineAndCharacterOfPosition(l.getStart(t)).line>_)||(l=e.findPrecedingToken(l.pos,t))&&t.getLineAndCharacterOfPosition(l.getEnd()).line===_)&&!e.isInAmbientContext(l))return u(l)}}t.spanInSourceFileAtLocation=n;}(e.BreakpointResolver||(e.BreakpointResolver={}));}(r||(r={}));!function(e){function t(t,n,r){var a=[];r=e.fixupCompilerOptions(r,a);var i=e.isArray(t)?t:[t],o=e.transformNodes(void 0,void 0,r,i,n,!0);return o.diagnostics=e.concatenate(o.diagnostics,a),o}e.transform=t;}(r||(r={}));var r,a=function(){return this}();!function(t){function r(e,t){e&&e.log(\"*INTERNAL ERROR* - Exception in typescript services: \"+t.message);}function i(e,n,r,a){var i;a&&(e.log(n),i=t.timestamp());var o=r();if(a){var s=t.timestamp();if(e.log(n+\" completed in \"+(s-i)+\" msec\"),\"string\"==typeof o){var c=o;c.length>128&&(c=c.substring(0,128)+\"...\"),e.log(\"  result.length=\"+c.length+\", result='\"+JSON.stringify(c)+\"'\");}}return o}function o(e,t,n,r){return s(e,t,!0,n,r)}function s(e,n,a,o,s){try{var c=i(e,n,o,s);return a?JSON.stringify({result:c}):c}catch(a){return a instanceof t.OperationCanceledException?JSON.stringify({canceled:!0}):(r(e,a),a.description=n,JSON.stringify({error:a}))}}function c(e,t){return e.map(function(e){return u(e,t)})}function u(e,n){return{message:t.flattenDiagnosticMessageText(e.messageText,n),start:e.start,length:e.length,category:t.DiagnosticCategory[e.category].toLowerCase(),code:e.code}}function l(e){return{spans:e.spans.join(\",\"),endOfLineState:e.endOfLineState}}var _=function(){function e(e){this.scriptSnapshotShim=e;}return e.prototype.getText=function(e,t){return this.scriptSnapshotShim.getText(e,t)},e.prototype.getLength=function(){return this.scriptSnapshotShim.getLength()},e.prototype.getChangeRange=function(e){var n=e,r=this.scriptSnapshotShim.getChangeRange(n.scriptSnapshotShim);if(null===r)return null;var a=JSON.parse(r);return t.createTextChangeRange(t.createTextSpan(a.span.start,a.span.length),a.newLength)},e.prototype.dispose=function(){\"dispose\"in this.scriptSnapshotShim&&this.scriptSnapshotShim.dispose();},e}(),d=function(){function e(e){var n=this;this.shimHost=e,this.loggingEnabled=!1,this.tracingEnabled=!1,\"getModuleResolutionsForFile\"in this.shimHost&&(this.resolveModuleNames=function(e,r){var a=JSON.parse(n.shimHost.getModuleResolutionsForFile(r));return t.map(e,function(e){var n=t.getProperty(a,e);return n?{resolvedFileName:n,extension:t.extensionFromPath(n),isExternalLibraryImport:!1}:void 0})}),\"directoryExists\"in this.shimHost&&(this.directoryExists=function(e){return n.shimHost.directoryExists(e)}),\"getTypeReferenceDirectiveResolutionsForFile\"in this.shimHost&&(this.resolveTypeReferenceDirectives=function(e,r){var a=JSON.parse(n.shimHost.getTypeReferenceDirectiveResolutionsForFile(r));return t.map(e,function(e){return t.getProperty(a,e)})});}return e.prototype.log=function(e){this.loggingEnabled&&this.shimHost.log(e);},e.prototype.trace=function(e){this.tracingEnabled&&this.shimHost.trace(e);},e.prototype.error=function(e){this.shimHost.error(e);},e.prototype.getProjectVersion=function(){if(this.shimHost.getProjectVersion)return this.shimHost.getProjectVersion()},e.prototype.getTypeRootsVersion=function(){return this.shimHost.getTypeRootsVersion?this.shimHost.getTypeRootsVersion():0},e.prototype.useCaseSensitiveFileNames=function(){return!!this.shimHost.useCaseSensitiveFileNames&&this.shimHost.useCaseSensitiveFileNames()},e.prototype.getCompilationSettings=function(){var e=this.shimHost.getCompilationSettings();if(null===e||\"\"===e)throw Error(\"LanguageServiceShimHostAdapter.getCompilationSettings: empty compilationSettings\");var t=JSON.parse(e);return t.allowNonTsExtensions=!0,t},e.prototype.getScriptFileNames=function(){var e=this.shimHost.getScriptFileNames();return this.files=JSON.parse(e)},e.prototype.getScriptSnapshot=function(e){var t=this.shimHost.getScriptSnapshot(e);return t&&new _(t)},e.prototype.getScriptKind=function(e){return\"getScriptKind\"in this.shimHost?this.shimHost.getScriptKind(e):0},e.prototype.getScriptVersion=function(e){return this.shimHost.getScriptVersion(e)},e.prototype.getLocalizedDiagnosticMessages=function(){var e=this.shimHost.getLocalizedDiagnosticMessages();if(null===e||\"\"===e)return null;try{return JSON.parse(e)}catch(e){return this.log(e.description||\"diagnosticMessages.generated.json has invalid JSON format\"),null}},e.prototype.getCancellationToken=function(){var e=this.shimHost.getCancellationToken();return new t.ThrottledCancellationToken(e)},e.prototype.getCurrentDirectory=function(){return this.shimHost.getCurrentDirectory()},e.prototype.getDirectories=function(e){return JSON.parse(this.shimHost.getDirectories(e))},e.prototype.getDefaultLibFileName=function(e){return this.shimHost.getDefaultLibFileName(JSON.stringify(e))},e.prototype.readDirectory=function(e,n,r,a,i){var o=t.getFileMatcherPatterns(e,r,a,this.shimHost.useCaseSensitiveFileNames(),this.shimHost.getCurrentDirectory());return JSON.parse(this.shimHost.readDirectory(e,JSON.stringify(n),JSON.stringify(o.basePaths),o.excludePattern,o.includeFilePattern,o.includeDirectoryPattern,i))},e.prototype.readFile=function(e,t){return this.shimHost.readFile(e,t)},e.prototype.fileExists=function(e){return this.shimHost.fileExists(e)},e}();t.LanguageServiceShimHostAdapter=d;var p=function(){function e(e){var t=this;this.shimHost=e,this.useCaseSensitiveFileNames=!!this.shimHost.useCaseSensitiveFileNames&&this.shimHost.useCaseSensitiveFileNames(),\"directoryExists\"in this.shimHost&&(this.directoryExists=function(e){return t.shimHost.directoryExists(e)}),\"realpath\"in this.shimHost&&(this.realpath=function(e){return t.shimHost.realpath(e)});}return e.prototype.readDirectory=function(e,n,r,a,i){try{var o=t.getFileMatcherPatterns(e,r,a,this.shimHost.useCaseSensitiveFileNames(),this.shimHost.getCurrentDirectory());return JSON.parse(this.shimHost.readDirectory(e,JSON.stringify(n),JSON.stringify(o.basePaths),o.excludePattern,o.includeFilePattern,o.includeDirectoryPattern,i))}catch(a){for(var s=[],c=0,u=n;c<u.length;c++)for(var l=u[c],_=0,d=this.readDirectoryFallback(e,l,r);_<d.length;_++){var p=d[_];t.contains(s,p)||s.push(p);}return s}},e.prototype.fileExists=function(e){return this.shimHost.fileExists(e)},e.prototype.readFile=function(e){return this.shimHost.readFile(e)},e.prototype.readDirectoryFallback=function(e,t,n){return JSON.parse(this.shimHost.readDirectory(e,t,JSON.stringify(n)))},e.prototype.getDirectories=function(e){return JSON.parse(this.shimHost.getDirectories(e))},e}();t.CoreServicesShimHostAdapter=p;var f=function(){function e(e){this.factory=e,e.registerShim(this);}return e.prototype.dispose=function(e){this.factory.unregisterShim(this);},e}();t.realizeDiagnostics=c;var g=function(e){function r(t,n,r){var a=e.call(this,t)||this;return a.host=n,a.languageService=r,a.logPerformance=!1,a.logger=a.host,a}return n(r,e),r.prototype.forwardJSONCall=function(e,t){return o(this.logger,e,t,this.logPerformance)},r.prototype.dispose=function(t){this.logger.log(\"dispose()\"),this.languageService.dispose(),this.languageService=null,a&&a.CollectGarbage&&(a.CollectGarbage(),this.logger.log(\"CollectGarbage()\")),this.logger=null,e.prototype.dispose.call(this,t);},r.prototype.refresh=function(e){this.forwardJSONCall(\"refresh(\"+e+\")\",function(){return null});},r.prototype.cleanupSemanticCache=function(){var e=this;this.forwardJSONCall(\"cleanupSemanticCache()\",function(){return e.languageService.cleanupSemanticCache(),null});},r.prototype.realizeDiagnostics=function(e){var n=t.getNewLineOrDefaultFromHost(this.host);return t.realizeDiagnostics(e,n)},r.prototype.getSyntacticClassifications=function(e,n,r){var a=this;return this.forwardJSONCall(\"getSyntacticClassifications('\"+e+\"', \"+n+\", \"+r+\")\",function(){return a.languageService.getSyntacticClassifications(e,t.createTextSpan(n,r))})},r.prototype.getSemanticClassifications=function(e,n,r){var a=this;return this.forwardJSONCall(\"getSemanticClassifications('\"+e+\"', \"+n+\", \"+r+\")\",function(){return a.languageService.getSemanticClassifications(e,t.createTextSpan(n,r))})},r.prototype.getEncodedSyntacticClassifications=function(e,n,r){var a=this;return this.forwardJSONCall(\"getEncodedSyntacticClassifications('\"+e+\"', \"+n+\", \"+r+\")\",function(){return l(a.languageService.getEncodedSyntacticClassifications(e,t.createTextSpan(n,r)))})},r.prototype.getEncodedSemanticClassifications=function(e,n,r){var a=this;return this.forwardJSONCall(\"getEncodedSemanticClassifications('\"+e+\"', \"+n+\", \"+r+\")\",function(){return l(a.languageService.getEncodedSemanticClassifications(e,t.createTextSpan(n,r)))})},r.prototype.getSyntacticDiagnostics=function(e){var t=this;return this.forwardJSONCall(\"getSyntacticDiagnostics('\"+e+\"')\",function(){var n=t.languageService.getSyntacticDiagnostics(e);return t.realizeDiagnostics(n)})},r.prototype.getSemanticDiagnostics=function(e){var t=this;return this.forwardJSONCall(\"getSemanticDiagnostics('\"+e+\"')\",function(){var n=t.languageService.getSemanticDiagnostics(e);return t.realizeDiagnostics(n)})},r.prototype.getCompilerOptionsDiagnostics=function(){var e=this;return this.forwardJSONCall(\"getCompilerOptionsDiagnostics()\",function(){var t=e.languageService.getCompilerOptionsDiagnostics();return e.realizeDiagnostics(t)})},r.prototype.getQuickInfoAtPosition=function(e,t){var n=this;return this.forwardJSONCall(\"getQuickInfoAtPosition('\"+e+\"', \"+t+\")\",function(){return n.languageService.getQuickInfoAtPosition(e,t)})},r.prototype.getNameOrDottedNameSpan=function(e,t,n){var r=this;return this.forwardJSONCall(\"getNameOrDottedNameSpan('\"+e+\"', \"+t+\", \"+n+\")\",function(){return r.languageService.getNameOrDottedNameSpan(e,t,n)})},r.prototype.getBreakpointStatementAtPosition=function(e,t){var n=this;return this.forwardJSONCall(\"getBreakpointStatementAtPosition('\"+e+\"', \"+t+\")\",function(){return n.languageService.getBreakpointStatementAtPosition(e,t)})},r.prototype.getSignatureHelpItems=function(e,t){var n=this;return this.forwardJSONCall(\"getSignatureHelpItems('\"+e+\"', \"+t+\")\",function(){return n.languageService.getSignatureHelpItems(e,t)})},r.prototype.getDefinitionAtPosition=function(e,t){var n=this;return this.forwardJSONCall(\"getDefinitionAtPosition('\"+e+\"', \"+t+\")\",function(){return n.languageService.getDefinitionAtPosition(e,t)})},r.prototype.getTypeDefinitionAtPosition=function(e,t){var n=this;return this.forwardJSONCall(\"getTypeDefinitionAtPosition('\"+e+\"', \"+t+\")\",function(){return n.languageService.getTypeDefinitionAtPosition(e,t)})},r.prototype.getImplementationAtPosition=function(e,t){var n=this;return this.forwardJSONCall(\"getImplementationAtPosition('\"+e+\"', \"+t+\")\",function(){return n.languageService.getImplementationAtPosition(e,t)})},r.prototype.getRenameInfo=function(e,t){var n=this;return this.forwardJSONCall(\"getRenameInfo('\"+e+\"', \"+t+\")\",function(){return n.languageService.getRenameInfo(e,t)})},r.prototype.findRenameLocations=function(e,t,n,r){var a=this;return this.forwardJSONCall(\"findRenameLocations('\"+e+\"', \"+t+\", \"+n+\", \"+r+\")\",function(){return a.languageService.findRenameLocations(e,t,n,r)})},r.prototype.getBraceMatchingAtPosition=function(e,t){var n=this;return this.forwardJSONCall(\"getBraceMatchingAtPosition('\"+e+\"', \"+t+\")\",function(){return n.languageService.getBraceMatchingAtPosition(e,t)})},r.prototype.isValidBraceCompletionAtPosition=function(e,t,n){var r=this;return this.forwardJSONCall(\"isValidBraceCompletionAtPosition('\"+e+\"', \"+t+\", \"+n+\")\",function(){return r.languageService.isValidBraceCompletionAtPosition(e,t,n)})},r.prototype.getIndentationAtPosition=function(e,t,n){var r=this;return this.forwardJSONCall(\"getIndentationAtPosition('\"+e+\"', \"+t+\")\",function(){var a=JSON.parse(n);return r.languageService.getIndentationAtPosition(e,t,a)})},r.prototype.getReferencesAtPosition=function(e,t){var n=this;return this.forwardJSONCall(\"getReferencesAtPosition('\"+e+\"', \"+t+\")\",function(){return n.languageService.getReferencesAtPosition(e,t)})},r.prototype.findReferences=function(e,t){var n=this;return this.forwardJSONCall(\"findReferences('\"+e+\"', \"+t+\")\",function(){return n.languageService.findReferences(e,t)})},r.prototype.getOccurrencesAtPosition=function(e,t){var n=this;return this.forwardJSONCall(\"getOccurrencesAtPosition('\"+e+\"', \"+t+\")\",function(){return n.languageService.getOccurrencesAtPosition(e,t)})},r.prototype.getDocumentHighlights=function(e,n,r){var a=this;return this.forwardJSONCall(\"getDocumentHighlights('\"+e+\"', \"+n+\")\",function(){var i=a.languageService.getDocumentHighlights(e,n,JSON.parse(r)),o=t.normalizeSlashes(e).toLowerCase();return t.filter(i,function(e){return t.normalizeSlashes(e.fileName).toLowerCase()===o})})},r.prototype.getCompletionsAtPosition=function(e,t){var n=this;return this.forwardJSONCall(\"getCompletionsAtPosition('\"+e+\"', \"+t+\")\",function(){return n.languageService.getCompletionsAtPosition(e,t)})},r.prototype.getCompletionEntryDetails=function(e,t,n){var r=this;return this.forwardJSONCall(\"getCompletionEntryDetails('\"+e+\"', \"+t+\", '\"+n+\"')\",function(){return r.languageService.getCompletionEntryDetails(e,t,n)})},r.prototype.getFormattingEditsForRange=function(e,t,n,r){var a=this;return this.forwardJSONCall(\"getFormattingEditsForRange('\"+e+\"', \"+t+\", \"+n+\")\",function(){var i=JSON.parse(r);return a.languageService.getFormattingEditsForRange(e,t,n,i)})},r.prototype.getFormattingEditsForDocument=function(e,t){var n=this;return this.forwardJSONCall(\"getFormattingEditsForDocument('\"+e+\"')\",function(){var r=JSON.parse(t);return n.languageService.getFormattingEditsForDocument(e,r)})},r.prototype.getFormattingEditsAfterKeystroke=function(e,t,n,r){var a=this;return this.forwardJSONCall(\"getFormattingEditsAfterKeystroke('\"+e+\"', \"+t+\", '\"+n+\"')\",function(){var i=JSON.parse(r);return a.languageService.getFormattingEditsAfterKeystroke(e,t,n,i)})},r.prototype.getDocCommentTemplateAtPosition=function(e,t){var n=this;return this.forwardJSONCall(\"getDocCommentTemplateAtPosition('\"+e+\"', \"+t+\")\",function(){return n.languageService.getDocCommentTemplateAtPosition(e,t)})},r.prototype.getNavigateToItems=function(e,t,n){var r=this;return this.forwardJSONCall(\"getNavigateToItems('\"+e+\"', \"+t+\", \"+n+\")\",function(){return r.languageService.getNavigateToItems(e,t,n)})},r.prototype.getNavigationBarItems=function(e){var t=this;return this.forwardJSONCall(\"getNavigationBarItems('\"+e+\"')\",function(){return t.languageService.getNavigationBarItems(e)})},r.prototype.getNavigationTree=function(e){var t=this;return this.forwardJSONCall(\"getNavigationTree('\"+e+\"')\",function(){return t.languageService.getNavigationTree(e)})},r.prototype.getOutliningSpans=function(e){var t=this;return this.forwardJSONCall(\"getOutliningSpans('\"+e+\"')\",function(){return t.languageService.getOutliningSpans(e)})},r.prototype.getTodoComments=function(e,t){var n=this;return this.forwardJSONCall(\"getTodoComments('\"+e+\"')\",function(){return n.languageService.getTodoComments(e,JSON.parse(t))})},r.prototype.getEmitOutput=function(e){var t=this;return this.forwardJSONCall(\"getEmitOutput('\"+e+\"')\",function(){return t.languageService.getEmitOutput(e)})},r.prototype.getEmitOutputObject=function(e){var t=this;return s(this.logger,\"getEmitOutput('\"+e+\"')\",!1,function(){return t.languageService.getEmitOutput(e)},this.logPerformance)},r}(f),m=function(e){function r(n,r){var a=e.call(this,n)||this;return a.logger=r,a.logPerformance=!1,a.classifier=t.createClassifier(),a}return n(r,e),r.prototype.getEncodedLexicalClassifications=function(e,t,n){var r=this;return o(this.logger,\"getEncodedLexicalClassifications\",function(){return l(r.classifier.getEncodedLexicalClassifications(e,t,n))},this.logPerformance)},r.prototype.getClassificationsForLine=function(e,t,n){for(var r=this.classifier.getClassificationsForLine(e,t,n),a=\"\",i=0,o=r.entries;i<o.length;i++){var s=o[i];a+=s.length+\"\\n\",a+=s.classification+\"\\n\";}return a+=r.finalLexState},r}(f),y=function(e){function r(t,n,r){var a=e.call(this,t)||this;return a.logger=n,a.host=r,a.logPerformance=!1,a}return n(r,e),r.prototype.forwardJSONCall=function(e,t){return o(this.logger,e,t,this.logPerformance)},r.prototype.resolveModuleName=function(e,n,r){var a=this;return this.forwardJSONCall(\"resolveModuleName('\"+e+\"')\",function(){var i=JSON.parse(r),o=t.resolveModuleName(n,t.normalizeSlashes(e),i,a.host),s=o.resolvedModule?o.resolvedModule.resolvedFileName:void 0;return o.resolvedModule&&\".ts\"!==o.resolvedModule.extension&&\".tsx\"!==o.resolvedModule.extension&&\".d.ts\"!==o.resolvedModule.extension&&(s=void 0),{resolvedFileName:s,failedLookupLocations:o.failedLookupLocations}})},r.prototype.resolveTypeReferenceDirective=function(e,n,r){var a=this;return this.forwardJSONCall(\"resolveTypeReferenceDirective(\"+e+\")\",function(){var i=JSON.parse(r),o=t.resolveTypeReferenceDirective(n,t.normalizeSlashes(e),i,a.host);return{resolvedFileName:o.resolvedTypeReferenceDirective?o.resolvedTypeReferenceDirective.resolvedFileName:void 0,primary:!o.resolvedTypeReferenceDirective||o.resolvedTypeReferenceDirective.primary,failedLookupLocations:o.failedLookupLocations}})},r.prototype.getPreProcessedFileInfo=function(e,n){var r=this;return this.forwardJSONCall(\"getPreProcessedFileInfo('\"+e+\"')\",function(){var e=t.preProcessFile(n.getText(0,n.getLength()),!0,!0);return{referencedFiles:r.convertFileReferences(e.referencedFiles),importedFiles:r.convertFileReferences(e.importedFiles),ambientExternalModules:e.ambientExternalModules,isLibFile:e.isLibFile,typeReferenceDirectives:r.convertFileReferences(e.typeReferenceDirectives)}})},r.prototype.getAutomaticTypeDirectiveNames=function(e){var n=this;return this.forwardJSONCall(\"getAutomaticTypeDirectiveNames('\"+e+\"')\",function(){var r=JSON.parse(e);return t.getAutomaticTypeDirectiveNames(r,n.host)})},r.prototype.convertFileReferences=function(e){if(e){for(var n=[],r=0,a=e;r<a.length;r++){var i=a[r];n.push({path:t.normalizeSlashes(i.fileName),position:i.pos,length:i.end-i.pos});}return n}},r.prototype.getTSConfigFileInfo=function(e,n){var r=this;return this.forwardJSONCall(\"getTSConfigFileInfo('\"+e+\"')\",function(){var a=n.getText(0,n.getLength()),i=t.parseJsonText(e,a),o=t.normalizeSlashes(e),s=t.parseJsonSourceFileConfigFileContent(i,r.host,t.getDirectoryPath(o),{},o);return{options:s.options,typeAcquisition:s.typeAcquisition,files:s.fileNames,raw:s.raw,errors:c(i.parseDiagnostics.concat(s.errors),\"\\r\\n\")}})},r.prototype.getDefaultCompilationSettings=function(){return this.forwardJSONCall(\"getDefaultCompilationSettings()\",function(){return t.getDefaultCompilerOptions()})},r.prototype.discoverTypings=function(e){var n=this,r=t.createGetCanonicalFileName(!1);return this.forwardJSONCall(\"discoverTypings()\",function(){var a=JSON.parse(e);return t.JsTyping.discoverTypings(n.host,a.fileNames,t.toPath(a.projectRootPath,a.projectRootPath,r),t.toPath(a.safeListPath,a.safeListPath,r),a.packageNameToTypingLocation,a.typeAcquisition,a.unresolvedImports)})},r}(f),h=function(){function e(){this._shims=[];}return e.prototype.getServicesVersion=function(){return t.servicesVersion},e.prototype.createLanguageServiceShim=function(e){try{void 0===this.documentRegistry&&(this.documentRegistry=t.createDocumentRegistry(e.useCaseSensitiveFileNames&&e.useCaseSensitiveFileNames(),e.getCurrentDirectory()));var n=new d(e),a=t.createLanguageService(n,this.documentRegistry);return new g(this,e,a)}catch(t){throw r(e,t),t}},e.prototype.createClassifierShim=function(e){try{return new m(this,e)}catch(t){throw r(e,t),t}},e.prototype.createCoreServicesShim=function(e){try{var t=new p(e);return new y(this,e,t)}catch(t){throw r(e,t),t}},e.prototype.close=function(){this._shims=[],this.documentRegistry=void 0;},e.prototype.registerShim=function(e){this._shims.push(e);},e.prototype.unregisterShim=function(e){for(var t=0;t<this._shims.length;t++)if(this._shims[t]===e)return void delete this._shims[t];throw new Error(\"Invalid operation\")},e}();t.TypeScriptServicesFactory=h,e.exports&&(e.exports=t);}(r||(r={}));var i;!function(e){!function(e){e.TypeScriptServicesFactory=r.TypeScriptServicesFactory;}(e.Services||(e.Services={}));}(i||(i={}));}),INFINITY=1/0,symbolTag=\"[object Symbol]\",reEscapedHtml=/&(?:amp|lt|gt|quot|#39|#96);/g,reHasEscapedHtml=RegExp(reEscapedHtml.source),htmlUnescapes={\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\",\"&#96;\":\"`\"},freeGlobal=\"object\"==typeof commonjsGlobal$$1&&commonjsGlobal$$1&&commonjsGlobal$$1.Object===Object&&commonjsGlobal$$1,freeSelf=\"object\"==typeof self&&self&&self.Object===Object&&self,root=freeGlobal||freeSelf||Function(\"return this\")(),unescapeHtmlChar=basePropertyOf(htmlUnescapes),objectProto=Object.prototype,objectToString=objectProto.toString,Symbol=root.Symbol,symbolProto=Symbol?Symbol.prototype:void 0,symbolToString=symbolProto?symbolProto.toString:void 0,index=unescape$1;const ts$1=typescript,unescape=index,SyntaxKind$1=ts$1.SyntaxKind,ASSIGNMENT_OPERATORS=[SyntaxKind$1.EqualsToken,SyntaxKind$1.PlusEqualsToken,SyntaxKind$1.MinusEqualsToken,SyntaxKind$1.AsteriskEqualsToken,SyntaxKind$1.SlashEqualsToken,SyntaxKind$1.PercentEqualsToken,SyntaxKind$1.LessThanLessThanEqualsToken,SyntaxKind$1.GreaterThanGreaterThanEqualsToken,SyntaxKind$1.GreaterThanGreaterThanGreaterThanEqualsToken,SyntaxKind$1.AmpersandEqualsToken,SyntaxKind$1.BarEqualsToken,SyntaxKind$1.CaretEqualsToken],LOGICAL_OPERATORS=[SyntaxKind$1.BarBarToken,SyntaxKind$1.AmpersandAmpersandToken],TOKEN_TO_TEXT={};TOKEN_TO_TEXT[SyntaxKind$1.OpenBraceToken]=\"{\",TOKEN_TO_TEXT[SyntaxKind$1.CloseBraceToken]=\"}\",TOKEN_TO_TEXT[SyntaxKind$1.OpenParenToken]=\"(\",TOKEN_TO_TEXT[SyntaxKind$1.CloseParenToken]=\")\",TOKEN_TO_TEXT[SyntaxKind$1.OpenBracketToken]=\"[\",TOKEN_TO_TEXT[SyntaxKind$1.CloseBracketToken]=\"]\",TOKEN_TO_TEXT[SyntaxKind$1.DotToken]=\".\",TOKEN_TO_TEXT[SyntaxKind$1.DotDotDotToken]=\"...\",TOKEN_TO_TEXT[SyntaxKind$1.SemicolonToken]=\";\",TOKEN_TO_TEXT[SyntaxKind$1.CommaToken]=\",\",TOKEN_TO_TEXT[SyntaxKind$1.LessThanToken]=\"<\",TOKEN_TO_TEXT[SyntaxKind$1.GreaterThanToken]=\">\",TOKEN_TO_TEXT[SyntaxKind$1.LessThanEqualsToken]=\"<=\",TOKEN_TO_TEXT[SyntaxKind$1.GreaterThanEqualsToken]=\">=\",TOKEN_TO_TEXT[SyntaxKind$1.EqualsEqualsToken]=\"==\",TOKEN_TO_TEXT[SyntaxKind$1.ExclamationEqualsToken]=\"!=\",TOKEN_TO_TEXT[SyntaxKind$1.EqualsEqualsEqualsToken]=\"===\",TOKEN_TO_TEXT[SyntaxKind$1.InstanceOfKeyword]=\"instanceof\",TOKEN_TO_TEXT[SyntaxKind$1.ExclamationEqualsEqualsToken]=\"!==\",TOKEN_TO_TEXT[SyntaxKind$1.EqualsGreaterThanToken]=\"=>\",TOKEN_TO_TEXT[SyntaxKind$1.PlusToken]=\"+\",TOKEN_TO_TEXT[SyntaxKind$1.MinusToken]=\"-\",TOKEN_TO_TEXT[SyntaxKind$1.AsteriskToken]=\"*\",TOKEN_TO_TEXT[SyntaxKind$1.AsteriskAsteriskToken]=\"**\",TOKEN_TO_TEXT[SyntaxKind$1.SlashToken]=\"/\",TOKEN_TO_TEXT[SyntaxKind$1.PercentToken]=\"%\",TOKEN_TO_TEXT[SyntaxKind$1.PlusPlusToken]=\"++\",TOKEN_TO_TEXT[SyntaxKind$1.MinusMinusToken]=\"--\",TOKEN_TO_TEXT[SyntaxKind$1.LessThanLessThanToken]=\"<<\",TOKEN_TO_TEXT[SyntaxKind$1.LessThanSlashToken]=\"</\",TOKEN_TO_TEXT[SyntaxKind$1.GreaterThanGreaterThanToken]=\">>\",TOKEN_TO_TEXT[SyntaxKind$1.GreaterThanGreaterThanGreaterThanToken]=\">>>\",TOKEN_TO_TEXT[SyntaxKind$1.AmpersandToken]=\"&\",TOKEN_TO_TEXT[SyntaxKind$1.BarToken]=\"|\",TOKEN_TO_TEXT[SyntaxKind$1.CaretToken]=\"^\",TOKEN_TO_TEXT[SyntaxKind$1.ExclamationToken]=\"!\",TOKEN_TO_TEXT[SyntaxKind$1.TildeToken]=\"~\",TOKEN_TO_TEXT[SyntaxKind$1.AmpersandAmpersandToken]=\"&&\",TOKEN_TO_TEXT[SyntaxKind$1.BarBarToken]=\"||\",TOKEN_TO_TEXT[SyntaxKind$1.QuestionToken]=\"?\",TOKEN_TO_TEXT[SyntaxKind$1.ColonToken]=\":\",TOKEN_TO_TEXT[SyntaxKind$1.EqualsToken]=\"=\",TOKEN_TO_TEXT[SyntaxKind$1.PlusEqualsToken]=\"+=\",TOKEN_TO_TEXT[SyntaxKind$1.MinusEqualsToken]=\"-=\",TOKEN_TO_TEXT[SyntaxKind$1.AsteriskEqualsToken]=\"*=\",TOKEN_TO_TEXT[SyntaxKind$1.AsteriskAsteriskEqualsToken]=\"**=\",TOKEN_TO_TEXT[SyntaxKind$1.SlashEqualsToken]=\"/=\",TOKEN_TO_TEXT[SyntaxKind$1.PercentEqualsToken]=\"%=\",TOKEN_TO_TEXT[SyntaxKind$1.LessThanLessThanEqualsToken]=\"<<=\",TOKEN_TO_TEXT[SyntaxKind$1.GreaterThanGreaterThanEqualsToken]=\">>=\",TOKEN_TO_TEXT[SyntaxKind$1.GreaterThanGreaterThanGreaterThanEqualsToken]=\">>>=\",TOKEN_TO_TEXT[SyntaxKind$1.AmpersandEqualsToken]=\"&=\",TOKEN_TO_TEXT[SyntaxKind$1.BarEqualsToken]=\"|=\",TOKEN_TO_TEXT[SyntaxKind$1.CaretEqualsToken]=\"^=\",TOKEN_TO_TEXT[SyntaxKind$1.AtToken]=\"@\",TOKEN_TO_TEXT[SyntaxKind$1.InKeyword]=\"in\";var nodeUtils$2={SyntaxKind:SyntaxKind$1,isAssignmentOperator:isAssignmentOperator,isLogicalOperator:isLogicalOperator,getTextForTokenKind:getTextForTokenKind,isESTreeClassMember:isESTreeClassMember,hasModifier:hasModifier,isComma:isComma,getBinaryExpressionType:getBinaryExpressionType,getLocFor:getLocFor,getLoc:getLoc,isToken:isToken,isJSXToken:isJSXToken,getDeclarationKind:getDeclarationKind,getTSNodeAccessibility:getTSNodeAccessibility,hasStaticModifierFlag:hasStaticModifierFlag,findNextToken:findNextToken,findChildOfKind:findChildOfKind,findFirstMatchingAncestor:findFirstMatchingAncestor,findAncestorOfKind:findAncestorOfKind,hasJSXAncestor:hasJSXAncestor,unescapeIdentifier:unescapeIdentifier,unescapeStringLiteralText:unescapeStringLiteralText,isComputedProperty:isComputedProperty,isOptional:isOptional,fixExports:fixExports,getTokenType:getTokenType,convertToken:convertToken,convertTokens:convertTokens,getNodeContainer:getNodeContainer,isWithinTypeAnnotation:isWithinTypeAnnotation};const nodeUtils$1=nodeUtils$2,AST_NODE_TYPES=astNodeTypes$1,SyntaxKind=nodeUtils$1.SyntaxKind;var convert$2=function e(t){function n(t){return e({node:t,parent:l,ast:d,additionalOptions:p})}function r(e){const t=n(e);return{type:AST_NODE_TYPES.TypeAnnotation,loc:t.loc,range:t.range,typeAnnotation:t}}function a(e){const t=e[0],r=e[e.length-1],i=nodeUtils$1.findNextToken(r,d);return{type:AST_NODE_TYPES.TypeParameterInstantiation,range:[t.pos-1,i.end],loc:nodeUtils$1.getLocFor(t.pos-1,i.end,d),params:e.map(e=>({type:AST_NODE_TYPES.GenericTypeAnnotation,range:[e.getStart(),e.getEnd()],loc:nodeUtils$1.getLoc(e,d),id:n(e.typeName||e),typeParameters:e.typeArguments?a(e.typeArguments):null}))}}function i(t){const n=t[0],r=t[t.length-1],a=nodeUtils$1.findNextToken(r,d);return{type:AST_NODE_TYPES.TypeParameterDeclaration,range:[n.pos-1,a.end],loc:nodeUtils$1.getLocFor(n.pos-1,a.end,d),params:t.map(t=>{const n=nodeUtils$1.unescapeIdentifier(t.name.text);const r=t.constraint?e({node:t.constraint,parent:t,ast:d,additionalOptions:p}):null;const a=t.default?e({node:t.default,parent:t,ast:d,additionalOptions:p}):t.default;return{type:AST_NODE_TYPES.TypeParameter,range:[t.getStart(),t.getEnd()],loc:nodeUtils$1.getLoc(t,d),name:n,constraint:r,default:a}})}}function o(e){const t=n(e.expression),r={type:AST_NODE_TYPES.ClassImplements,loc:t.loc,range:t.range,id:t};return e.typeArguments&&e.typeArguments.length&&(r.typeParameters=a(e.typeArguments)),r}function s(e){const t=n(e.expression),r={type:AST_NODE_TYPES.TSInterfaceHeritage,loc:t.loc,range:t.range,id:t};return e.typeArguments&&e.typeArguments.length&&(r.typeParameters=a(e.typeArguments)),r}function c(e){return e&&e.length?e.map(e=>{const t=n(e.expression);return{type:AST_NODE_TYPES.Decorator,range:[e.getStart(),e.end],loc:nodeUtils$1.getLoc(e,d),expression:t}}):[]}function u(e){const t=nodeUtils$1.convertToken(e,d);if(t.type===AST_NODE_TYPES.JSXMemberExpression){const e=l.tagName.expression.kind===SyntaxKind.PropertyAccessExpression;t.object=n(l.tagName.expression),t.property=n(l.tagName.name),t.object.type=e?AST_NODE_TYPES.JSXMemberExpression:AST_NODE_TYPES.JSXIdentifier,t.property.type=AST_NODE_TYPES.JSXIdentifier;}else t.type=AST_NODE_TYPES.JSXIdentifier,t.name=t.value;return delete t.value,t}const l=t.node,_=t.parent,d=t.ast,p=t.additionalOptions||{};if(!l)return null;let f={type:\"\",range:[l.getStart(),l.end],loc:nodeUtils$1.getLoc(l,d)};switch(l.kind){case SyntaxKind.SourceFile:Object.assign(f,{type:AST_NODE_TYPES.Program,body:[],sourceType:l.externalModuleIndicator?\"module\":\"script\"}),l.statements.forEach(e=>{const t=n(e);t&&f.body.push(t);}),f.range[1]=l.endOfFileToken.pos,f.loc=nodeUtils$1.getLocFor(l.getStart(),f.range[1],d);break;case SyntaxKind.Block:Object.assign(f,{type:AST_NODE_TYPES.BlockStatement,body:l.statements.map(n)});break;case SyntaxKind.Identifier:Object.assign(f,{type:AST_NODE_TYPES.Identifier,name:nodeUtils$1.unescapeIdentifier(l.text)});break;case SyntaxKind.WithStatement:Object.assign(f,{type:AST_NODE_TYPES.WithStatement,object:n(l.expression),body:n(l.statement)});break;case SyntaxKind.ReturnStatement:Object.assign(f,{type:AST_NODE_TYPES.ReturnStatement,argument:n(l.expression)});break;case SyntaxKind.LabeledStatement:Object.assign(f,{type:AST_NODE_TYPES.LabeledStatement,label:n(l.label),body:n(l.statement)});break;case SyntaxKind.BreakStatement:case SyntaxKind.ContinueStatement:Object.assign(f,{type:SyntaxKind[l.kind],label:n(l.label)});break;case SyntaxKind.IfStatement:Object.assign(f,{type:AST_NODE_TYPES.IfStatement,test:n(l.expression),consequent:n(l.thenStatement),alternate:n(l.elseStatement)});break;case SyntaxKind.SwitchStatement:Object.assign(f,{type:AST_NODE_TYPES.SwitchStatement,discriminant:n(l.expression),cases:l.caseBlock.clauses.map(n)});break;case SyntaxKind.CaseClause:case SyntaxKind.DefaultClause:Object.assign(f,{type:AST_NODE_TYPES.SwitchCase,test:n(l.expression),consequent:l.statements.map(n)});break;case SyntaxKind.ThrowStatement:Object.assign(f,{type:AST_NODE_TYPES.ThrowStatement,argument:n(l.expression)});break;case SyntaxKind.TryStatement:Object.assign(f,{type:AST_NODE_TYPES.TryStatement,block:e({node:l.tryBlock,parent:null,ast:d,additionalOptions:p}),handler:n(l.catchClause),finalizer:n(l.finallyBlock)});break;case SyntaxKind.CatchClause:Object.assign(f,{type:AST_NODE_TYPES.CatchClause,param:n(l.variableDeclaration.name),body:n(l.block)});break;case SyntaxKind.WhileStatement:Object.assign(f,{type:AST_NODE_TYPES.WhileStatement,test:n(l.expression),body:n(l.statement)});break;case SyntaxKind.DoStatement:Object.assign(f,{type:AST_NODE_TYPES.DoWhileStatement,test:n(l.expression),body:n(l.statement)});break;case SyntaxKind.ForStatement:Object.assign(f,{type:AST_NODE_TYPES.ForStatement,init:n(l.initializer),test:n(l.condition),update:n(l.incrementor),body:n(l.statement)});break;case SyntaxKind.ForInStatement:case SyntaxKind.ForOfStatement:{const e=l.awaitModifier&&l.awaitModifier.kind===SyntaxKind.AwaitKeyword;Object.assign(f,{type:SyntaxKind[l.kind],left:n(l.initializer),right:n(l.expression),body:n(l.statement),await:e});break}case SyntaxKind.FunctionDeclaration:{let e=AST_NODE_TYPES.FunctionDeclaration;if(l.modifiers&&l.modifiers.length){const t=nodeUtils$1.hasModifier(SyntaxKind.DeclareKeyword,l);t&&(e=AST_NODE_TYPES.DeclareFunction);}l.parent&&l.parent.kind===SyntaxKind.ModuleBlock&&(e=AST_NODE_TYPES.TSNamespaceFunctionDeclaration),Object.assign(f,{type:e,id:n(l.name),generator:!!l.asteriskToken,expression:!1,async:nodeUtils$1.hasModifier(SyntaxKind.AsyncKeyword,l),params:l.parameters.map(n),body:n(l.body)}),l.type&&(f.returnType=r(l.type)),l.typeParameters&&l.typeParameters.length&&(f.typeParameters=i(l.typeParameters)),f=nodeUtils$1.fixExports(l,f,d);break}case SyntaxKind.VariableDeclaration:if(Object.assign(f,{type:AST_NODE_TYPES.VariableDeclarator,id:n(l.name),init:n(l.initializer)}),l.type){f.id.typeAnnotation=r(l.type),f.id.range[1]=l.type.getEnd();const e=l.name.getEnd(),t=l.type.getStart()-(l.type.getFullStart()-e-\":\".length)-e;f.id.typeAnnotation.range=[f.id.typeAnnotation.range[0]-t,f.id.typeAnnotation.range[1]];}break;case SyntaxKind.VariableStatement:Object.assign(f,{type:AST_NODE_TYPES.VariableDeclaration,declarations:l.declarationList.declarations.map(n),kind:nodeUtils$1.getDeclarationKind(l.declarationList)}),f=nodeUtils$1.fixExports(l,f,d);break;case SyntaxKind.VariableDeclarationList:Object.assign(f,{type:AST_NODE_TYPES.VariableDeclaration,declarations:l.declarations.map(n),kind:nodeUtils$1.getDeclarationKind(l)});break;case SyntaxKind.ExpressionStatement:Object.assign(f,{type:AST_NODE_TYPES.ExpressionStatement,expression:n(l.expression)});break;case SyntaxKind.ThisKeyword:Object.assign(f,{type:AST_NODE_TYPES.ThisExpression});break;case SyntaxKind.ArrayLiteralExpression:{const e=nodeUtils$1.findAncestorOfKind(l,SyntaxKind.BinaryExpression),t=l.parent&&l.parent.kind===SyntaxKind.ForOfStatement,r=l.parent&&l.parent.kind===SyntaxKind.ForInStatement;let a;e&&(a=e.left===l||nodeUtils$1.findChildOfKind(e.left,SyntaxKind.ArrayLiteralExpression,d)===l),a||t||r?Object.assign(f,{type:AST_NODE_TYPES.ArrayPattern,elements:l.elements.map(n)}):Object.assign(f,{type:AST_NODE_TYPES.ArrayExpression,elements:l.elements.map(n)});break}case SyntaxKind.ObjectLiteralExpression:{const e=nodeUtils$1.findFirstMatchingAncestor(l,e=>e.kind===SyntaxKind.BinaryExpression||e.kind===SyntaxKind.ArrowFunction),t=e&&e.kind===SyntaxKind.BinaryExpression&&e.operatorToken.kind===SyntaxKind.FirstAssignment?e:null;let r=!1;t&&(r=t.left===l||nodeUtils$1.findChildOfKind(t.left,SyntaxKind.ObjectLiteralExpression,d)===l),r?Object.assign(f,{type:AST_NODE_TYPES.ObjectPattern,properties:l.properties.map(n)}):Object.assign(f,{type:AST_NODE_TYPES.ObjectExpression,properties:l.properties.map(n)});break}case SyntaxKind.PropertyAssignment:Object.assign(f,{type:AST_NODE_TYPES.Property,key:n(l.name),value:n(l.initializer),computed:nodeUtils$1.isComputedProperty(l.name),method:!1,shorthand:!1,kind:\"init\"});break;case SyntaxKind.ShorthandPropertyAssignment:l.objectAssignmentInitializer?Object.assign(f,{type:AST_NODE_TYPES.Property,key:n(l.name),value:{type:AST_NODE_TYPES.AssignmentPattern,left:n(l.name),right:n(l.objectAssignmentInitializer),loc:f.loc,range:f.range},computed:!1,method:!1,shorthand:!0,kind:\"init\"}):Object.assign(f,{type:AST_NODE_TYPES.Property,key:n(l.name),value:n(l.initializer||l.name),computed:!1,method:!1,shorthand:!0,kind:\"init\"});break;case SyntaxKind.ComputedPropertyName:if(_.kind!==SyntaxKind.ObjectLiteralExpression)return n(l.expression);Object.assign(f,{type:AST_NODE_TYPES.Property,key:n(l.name),value:n(l.name),computed:!1,method:!1,shorthand:!0,kind:\"init\"});break;case SyntaxKind.PropertyDeclaration:{const e=nodeUtils$1.hasModifier(SyntaxKind.AbstractKeyword,l);Object.assign(f,{type:e?AST_NODE_TYPES.TSAbstractClassProperty:AST_NODE_TYPES.ClassProperty,key:n(l.name),value:n(l.initializer),computed:nodeUtils$1.isComputedProperty(l.name),static:nodeUtils$1.hasStaticModifierFlag(l),accessibility:nodeUtils$1.getTSNodeAccessibility(l),readonly:nodeUtils$1.hasModifier(SyntaxKind.ReadonlyKeyword,l),decorators:c(l.decorators),typeAnnotation:l.type?r(l.type):null}),l.name.kind===SyntaxKind.Identifier&&l.questionToken&&(f.key.optional=!0),f.key.type===AST_NODE_TYPES.Literal&&l.questionToken&&(f.optional=!0);break}case SyntaxKind.GetAccessor:case SyntaxKind.SetAccessor:case SyntaxKind.MethodDeclaration:{const e=d.getLineAndCharacterOfPosition(l.name.end+1),t=l.kind===SyntaxKind.MethodDeclaration,a={type:AST_NODE_TYPES.FunctionExpression,id:null,generator:!!l.asteriskToken,expression:!1,async:nodeUtils$1.hasModifier(SyntaxKind.AsyncKeyword,l),body:n(l.body),range:[l.parameters.pos-1,f.range[1]],loc:{start:{line:e.line+1,column:e.character-1},end:f.loc.end}};if(l.type&&(a.returnType=r(l.type)),_.kind===SyntaxKind.ObjectLiteralExpression)a.params=l.parameters.map(n),Object.assign(f,{type:AST_NODE_TYPES.Property,key:n(l.name),value:a,computed:nodeUtils$1.isComputedProperty(l.name),method:t,shorthand:!1,kind:\"init\"});else{a.params=l.parameters.map(e=>{const t=n(e);t.decorators=c(e.decorators);return t});const e=nodeUtils$1.hasModifier(SyntaxKind.AbstractKeyword,l)?AST_NODE_TYPES.TSAbstractMethodDefinition:AST_NODE_TYPES.MethodDefinition;Object.assign(f,{type:e,key:n(l.name),value:a,computed:nodeUtils$1.isComputedProperty(l.name),static:nodeUtils$1.hasStaticModifierFlag(l),kind:\"method\",accessibility:nodeUtils$1.getTSNodeAccessibility(l),decorators:c(l.decorators)});}f.key.type===AST_NODE_TYPES.Identifier&&l.questionToken&&(f.key.optional=!0),l.kind===SyntaxKind.GetAccessor?f.kind=\"get\":l.kind===SyntaxKind.SetAccessor?f.kind=\"set\":f.static||l.name.kind!==SyntaxKind.StringLiteral||\"constructor\"!==l.name.text||(f.kind=\"constructor\"),l.typeParameters&&l.typeParameters.length&&(a.typeParameters=i(l.typeParameters));break}case SyntaxKind.Constructor:{const e=nodeUtils$1.hasStaticModifierFlag(l),t=nodeUtils$1.hasModifier(SyntaxKind.AbstractKeyword,l),r=e?nodeUtils$1.findNextToken(l.getFirstToken(),d):l.getFirstToken(),a=d.getLineAndCharacterOfPosition(l.parameters.pos-1),i={type:AST_NODE_TYPES.FunctionExpression,id:null,params:l.parameters.map(e=>{const t=n(e);const r=c(e.decorators);return Object.assign(t,{decorators:r})}),generator:!1,expression:!1,async:!1,body:n(l.body),range:[l.parameters.pos-1,f.range[1]],loc:{start:{line:a.line+1,column:a.character},end:f.loc.end}},o=d.getLineAndCharacterOfPosition(r.getStart()),s=!!l.name&&nodeUtils$1.isComputedProperty(l.name);let u;u=s?{type:AST_NODE_TYPES.Literal,value:\"constructor\",raw:l.name.getText(),range:[r.getStart(),r.end],loc:{start:{line:o.line+1,column:o.character},end:{line:i.loc.start.line,column:i.loc.start.column}}}:{type:AST_NODE_TYPES.Identifier,name:\"constructor\",range:[r.getStart(),r.end],loc:{start:{line:o.line+1,column:o.character},end:{line:i.loc.start.line,column:i.loc.start.column}}},Object.assign(f,{type:t?AST_NODE_TYPES.TSAbstractMethodDefinition:AST_NODE_TYPES.MethodDefinition,key:u,value:i,computed:s,accessibility:nodeUtils$1.getTSNodeAccessibility(l),static:e,kind:e||s?\"method\":\"constructor\"});break}case SyntaxKind.FunctionExpression:Object.assign(f,{type:AST_NODE_TYPES.FunctionExpression,id:n(l.name),generator:!!l.asteriskToken,params:l.parameters.map(n),body:n(l.body),async:nodeUtils$1.hasModifier(SyntaxKind.AsyncKeyword,l),expression:!1}),l.type&&(f.returnType=r(l.type)),l.typeParameters&&l.typeParameters.length&&(f.typeParameters=i(l.typeParameters));break;case SyntaxKind.SuperKeyword:Object.assign(f,{type:AST_NODE_TYPES.Super});break;case SyntaxKind.ArrayBindingPattern:Object.assign(f,{type:AST_NODE_TYPES.ArrayPattern,elements:l.elements.map(n)});break;case SyntaxKind.OmittedExpression:return null;case SyntaxKind.ObjectBindingPattern:Object.assign(f,{type:AST_NODE_TYPES.ObjectPattern,properties:l.elements.map(n)});break;case SyntaxKind.BindingElement:if(_.kind===SyntaxKind.ArrayBindingPattern){const t=e({node:l.name,parent:_,ast:d,additionalOptions:p});if(l.initializer)Object.assign(f,{type:AST_NODE_TYPES.AssignmentPattern,left:t,right:n(l.initializer)});else{if(!l.dotDotDotToken)return t;Object.assign(f,{type:AST_NODE_TYPES.RestElement,argument:t});}}else _.kind===SyntaxKind.ObjectBindingPattern&&(l.dotDotDotToken?Object.assign(f,{type:AST_NODE_TYPES.ExperimentalRestProperty,argument:n(l.propertyName||l.name),computed:Boolean(l.propertyName&&l.propertyName.kind===SyntaxKind.ComputedPropertyName),shorthand:!l.propertyName}):Object.assign(f,{type:AST_NODE_TYPES.Property,key:n(l.propertyName||l.name),value:n(l.name),computed:Boolean(l.propertyName&&l.propertyName.kind===SyntaxKind.ComputedPropertyName),method:!1,shorthand:!l.propertyName,kind:\"init\"}),l.initializer&&(f.value={type:AST_NODE_TYPES.AssignmentPattern,left:n(l.name),right:n(l.initializer),range:[l.name.getStart(),l.initializer.end],loc:nodeUtils$1.getLocFor(l.name.getStart(),l.initializer.end,d)}));break;case SyntaxKind.ArrowFunction:Object.assign(f,{type:AST_NODE_TYPES.ArrowFunctionExpression,generator:!1,id:null,params:l.parameters.map(n),body:n(l.body),async:nodeUtils$1.hasModifier(SyntaxKind.AsyncKeyword,l),expression:l.body.kind!==SyntaxKind.Block}),l.type&&(f.returnType=r(l.type)),l.typeParameters&&l.typeParameters.length&&(f.typeParameters=i(l.typeParameters));break;case SyntaxKind.YieldExpression:Object.assign(f,{type:AST_NODE_TYPES.YieldExpression,delegate:!!l.asteriskToken,argument:n(l.expression)});break;case SyntaxKind.AwaitExpression:Object.assign(f,{type:AST_NODE_TYPES.AwaitExpression,argument:n(l.expression)});break;case SyntaxKind.NoSubstitutionTemplateLiteral:Object.assign(f,{type:AST_NODE_TYPES.TemplateLiteral,quasis:[{type:AST_NODE_TYPES.TemplateElement,value:{raw:d.text.slice(l.getStart()+1,l.end-1),cooked:l.text},tail:!0,range:f.range,loc:f.loc}],expressions:[]});break;case SyntaxKind.TemplateExpression:Object.assign(f,{type:AST_NODE_TYPES.TemplateLiteral,quasis:[n(l.head)],expressions:[]}),l.templateSpans.forEach(e=>{f.expressions.push(n(e.expression));f.quasis.push(n(e.literal));});break;case SyntaxKind.TaggedTemplateExpression:Object.assign(f,{type:AST_NODE_TYPES.TaggedTemplateExpression,tag:n(l.tag),quasi:n(l.template)});break;case SyntaxKind.TemplateHead:case SyntaxKind.TemplateMiddle:case SyntaxKind.TemplateTail:{const e=l.kind===SyntaxKind.TemplateTail;Object.assign(f,{type:AST_NODE_TYPES.TemplateElement,value:{raw:d.text.slice(l.getStart()+1,l.end-(e?1:2)),cooked:l.text},tail:e});break}case SyntaxKind.SpreadElement:{let e=AST_NODE_TYPES.SpreadElement;l.parent&&l.parent.parent&&l.parent.parent.kind===SyntaxKind.BinaryExpression&&(l.parent.parent.left===l.parent?e=AST_NODE_TYPES.RestElement:l.parent.parent.right===l.parent&&(e=AST_NODE_TYPES.SpreadElement)),Object.assign(f,{type:e,argument:n(l.expression)});break}case SyntaxKind.SpreadAssignment:{let e=AST_NODE_TYPES.ExperimentalSpreadProperty;l.parent&&l.parent.parent&&l.parent.parent.kind===SyntaxKind.BinaryExpression&&(l.parent.parent.right===l.parent?e=AST_NODE_TYPES.ExperimentalSpreadProperty:l.parent.parent.left===l.parent&&(e=AST_NODE_TYPES.ExperimentalRestProperty)),Object.assign(f,{type:e,argument:n(l.expression)});break}case SyntaxKind.Parameter:{let t;if(l.dotDotDotToken?(t=n(l.name),Object.assign(f,{type:AST_NODE_TYPES.RestElement,argument:t})):l.initializer?(t=n(l.name),Object.assign(f,{type:AST_NODE_TYPES.AssignmentPattern,left:t,right:n(l.initializer)})):(t=e({node:l.name,parent:_,ast:d,additionalOptions:p}),f=t),l.type&&(t.typeAnnotation=r(l.type),t.range[1]=l.type.getEnd()),l.questionToken&&(t.optional=!0),l.modifiers)return{type:AST_NODE_TYPES.TSParameterProperty,range:[l.getStart(),l.end],loc:nodeUtils$1.getLoc(l,d),accessibility:nodeUtils$1.getTSNodeAccessibility(l),readonly:nodeUtils$1.hasModifier(SyntaxKind.ReadonlyKeyword,l),static:nodeUtils$1.hasModifier(SyntaxKind.StaticKeyword,l),export:nodeUtils$1.hasModifier(SyntaxKind.ExportKeyword,l),parameter:f};break}case SyntaxKind.ClassDeclaration:case SyntaxKind.ClassExpression:{const e=l.heritageClauses||[];let t=SyntaxKind[l.kind],r=e.length?e[e.length-1]:l.name;if(l.typeParameters&&l.typeParameters.length){const e=l.typeParameters[l.typeParameters.length-1];(!r||e.pos>r.pos)&&(r=nodeUtils$1.findNextToken(e,d)),f.typeParameters=i(l.typeParameters);}if(l.modifiers&&l.modifiers.length){l.kind===SyntaxKind.ClassDeclaration&&nodeUtils$1.hasModifier(SyntaxKind.AbstractKeyword,l)&&(t=`TSAbstract${t}`);const e=l.modifiers[l.modifiers.length-1];(!r||e.pos>r.pos)&&(r=nodeUtils$1.findNextToken(e,d));}else r||(r=l.getFirstToken());const s=nodeUtils$1.findNextToken(r,d),u=e.length&&l.heritageClauses[0].token===SyntaxKind.ExtendsKeyword;let _,p=!1;u&&e[0].types.length>0&&(_=e.shift()).types[0]&&_.types[0].typeArguments&&(f.superTypeParameters=a(_.types[0].typeArguments)),p=e.length>0,Object.assign(f,{type:t,id:n(l.name),body:{type:AST_NODE_TYPES.ClassBody,body:[],range:[s.getStart(),f.range[1]],loc:nodeUtils$1.getLocFor(s.getStart(),l.end,d)},superClass:_?n(_.types[0].expression):null,implements:p?e[0].types.map(o):[],decorators:c(l.decorators)});const g=l.members.filter(nodeUtils$1.isESTreeClassMember);g.length&&(f.body.body=g.map(n)),f=nodeUtils$1.fixExports(l,f,d);break}case SyntaxKind.ModuleBlock:Object.assign(f,{type:AST_NODE_TYPES.TSModuleBlock,body:l.statements.map(n)});break;case SyntaxKind.ImportDeclaration:Object.assign(f,{type:AST_NODE_TYPES.ImportDeclaration,source:n(l.moduleSpecifier),specifiers:[]}),l.importClause&&(l.importClause.name&&f.specifiers.push(n(l.importClause)),l.importClause.namedBindings&&(l.importClause.namedBindings.kind===SyntaxKind.NamespaceImport?f.specifiers.push(n(l.importClause.namedBindings)):f.specifiers=f.specifiers.concat(l.importClause.namedBindings.elements.map(n))));break;case SyntaxKind.NamespaceImport:Object.assign(f,{type:AST_NODE_TYPES.ImportNamespaceSpecifier,local:n(l.name)});break;case SyntaxKind.ImportSpecifier:Object.assign(f,{type:AST_NODE_TYPES.ImportSpecifier,local:n(l.name),imported:n(l.propertyName||l.name)});break;case SyntaxKind.ImportClause:Object.assign(f,{type:AST_NODE_TYPES.ImportDefaultSpecifier,local:n(l.name)}),f.range[1]=l.name.end,f.loc=nodeUtils$1.getLocFor(f.range[0],f.range[1],d);break;case SyntaxKind.NamedImports:Object.assign(f,{type:AST_NODE_TYPES.ImportDefaultSpecifier,local:n(l.name)});break;case SyntaxKind.ExportDeclaration:l.exportClause?Object.assign(f,{type:AST_NODE_TYPES.ExportNamedDeclaration,source:n(l.moduleSpecifier),specifiers:l.exportClause.elements.map(n),declaration:null}):Object.assign(f,{type:AST_NODE_TYPES.ExportAllDeclaration,source:n(l.moduleSpecifier)});break;case SyntaxKind.ExportSpecifier:Object.assign(f,{type:AST_NODE_TYPES.ExportSpecifier,local:n(l.propertyName||l.name),exported:n(l.name)});break;case SyntaxKind.ExportAssignment:l.isExportEquals?Object.assign(f,{type:AST_NODE_TYPES.TSExportAssignment,expression:n(l.expression)}):Object.assign(f,{type:AST_NODE_TYPES.ExportDefaultDeclaration,declaration:n(l.expression)});break;case SyntaxKind.PrefixUnaryExpression:case SyntaxKind.PostfixUnaryExpression:{const e=nodeUtils$1.getTextForTokenKind(l.operator);Object.assign(f,{type:/^(?:\\+\\+|--)$/.test(e)?AST_NODE_TYPES.UpdateExpression:AST_NODE_TYPES.UnaryExpression,operator:e,prefix:l.kind===SyntaxKind.PrefixUnaryExpression,argument:n(l.operand)});break}case SyntaxKind.DeleteExpression:Object.assign(f,{type:AST_NODE_TYPES.UnaryExpression,operator:\"delete\",prefix:!0,argument:n(l.expression)});break;case SyntaxKind.VoidExpression:Object.assign(f,{type:AST_NODE_TYPES.UnaryExpression,operator:\"void\",prefix:!0,argument:n(l.expression)});break;case SyntaxKind.TypeOfExpression:Object.assign(f,{type:AST_NODE_TYPES.UnaryExpression,operator:\"typeof\",prefix:!0,argument:n(l.expression)});break;case SyntaxKind.BinaryExpression:if(nodeUtils$1.isComma(l.operatorToken)){Object.assign(f,{type:AST_NODE_TYPES.SequenceExpression,expressions:[]});const e=n(l.left),t=n(l.right);e.type===AST_NODE_TYPES.SequenceExpression?f.expressions=f.expressions.concat(e.expressions):f.expressions.push(e),t.type===AST_NODE_TYPES.SequenceExpression?f.expressions=f.expressions.concat(t.expressions):f.expressions.push(t);}else if(Object.assign(f,{type:nodeUtils$1.getBinaryExpressionType(l.operatorToken),operator:nodeUtils$1.getTextForTokenKind(l.operatorToken.kind),left:n(l.left),right:n(l.right)}),f.type===AST_NODE_TYPES.AssignmentExpression){const e=nodeUtils$1.findAncestorOfKind(l,SyntaxKind.ArrayLiteralExpression),t=e&&nodeUtils$1.findAncestorOfKind(e,SyntaxKind.BinaryExpression);let n;t&&(n=t.left===e||nodeUtils$1.findChildOfKind(t.left,SyntaxKind.ArrayLiteralExpression,d)===e),n&&(delete f.operator,f.type=AST_NODE_TYPES.AssignmentPattern);}break;case SyntaxKind.PropertyAccessExpression:if(nodeUtils$1.isJSXToken(_)){const e={type:AST_NODE_TYPES.MemberExpression,object:n(l.expression),property:n(l.name)},t=l.expression.kind===SyntaxKind.PropertyAccessExpression;l.expression.kind===SyntaxKind.ThisKeyword&&(e.object.name=\"this\"),e.object.type=t?AST_NODE_TYPES.MemberExpression:AST_NODE_TYPES.JSXIdentifier,e.property.type=AST_NODE_TYPES.JSXIdentifier,Object.assign(f,e);}else Object.assign(f,{type:AST_NODE_TYPES.MemberExpression,object:n(l.expression),property:n(l.name),computed:!1});break;case SyntaxKind.ElementAccessExpression:Object.assign(f,{type:AST_NODE_TYPES.MemberExpression,object:n(l.expression),property:n(l.argumentExpression),computed:!0});break;case SyntaxKind.ConditionalExpression:Object.assign(f,{type:AST_NODE_TYPES.ConditionalExpression,test:n(l.condition),consequent:n(l.whenTrue),alternate:n(l.whenFalse)});break;case SyntaxKind.CallExpression:Object.assign(f,{type:AST_NODE_TYPES.CallExpression,callee:n(l.expression),arguments:l.arguments.map(n)}),l.typeArguments&&l.typeArguments.length&&(f.typeParameters=a(l.typeArguments));break;case SyntaxKind.NewExpression:Object.assign(f,{type:AST_NODE_TYPES.NewExpression,callee:n(l.expression),arguments:l.arguments?l.arguments.map(n):[]}),l.typeArguments&&l.typeArguments.length&&(f.typeParameters=a(l.typeArguments));break;case SyntaxKind.MetaProperty:{const e=nodeUtils$1.convertToken(l.getFirstToken(),d);Object.assign(f,{type:AST_NODE_TYPES.MetaProperty,meta:{type:AST_NODE_TYPES.Identifier,range:e.range,loc:e.loc,name:\"new\"},property:n(l.name)});break}case SyntaxKind.StringLiteral:Object.assign(f,{type:AST_NODE_TYPES.Literal,raw:d.text.slice(f.range[0],f.range[1])}),_.name&&_.name===l?f.value=nodeUtils$1.unescapeIdentifier(l.text):f.value=nodeUtils$1.unescapeStringLiteralText(l.text);break;case SyntaxKind.NumericLiteral:Object.assign(f,{type:AST_NODE_TYPES.Literal,value:Number(l.text),raw:d.text.slice(f.range[0],f.range[1])});break;case SyntaxKind.RegularExpressionLiteral:{const e=l.text.slice(1,l.text.lastIndexOf(\"/\")),t=l.text.slice(l.text.lastIndexOf(\"/\")+1);let n=null;try{n=new RegExp(e,t);}catch(e){n=null;}Object.assign(f,{type:AST_NODE_TYPES.Literal,value:n,raw:l.text,regex:{pattern:e,flags:t}});break}case SyntaxKind.TrueKeyword:Object.assign(f,{type:AST_NODE_TYPES.Literal,value:!0,raw:\"true\"});break;case SyntaxKind.FalseKeyword:Object.assign(f,{type:AST_NODE_TYPES.Literal,value:!1,raw:\"false\"});break;case SyntaxKind.NullKeyword:nodeUtils$1.isWithinTypeAnnotation(l)?Object.assign(f,{type:AST_NODE_TYPES.TSNullKeyword}):Object.assign(f,{type:AST_NODE_TYPES.Literal,value:null,raw:\"null\"});break;case SyntaxKind.ImportKeyword:Object.assign(f,{type:AST_NODE_TYPES.Import});break;case SyntaxKind.EmptyStatement:case SyntaxKind.DebuggerStatement:!function(){Object.assign(f,{type:SyntaxKind[l.kind]});}();break;case SyntaxKind.JsxElement:Object.assign(f,{type:AST_NODE_TYPES.JSXElement,openingElement:n(l.openingElement),closingElement:n(l.closingElement),children:l.children.map(n)});break;case SyntaxKind.JsxSelfClosingElement:{l.kind=SyntaxKind.JsxOpeningElement;const e=n(l);e.selfClosing=!0,Object.assign(f,{type:AST_NODE_TYPES.JSXElement,openingElement:e,closingElement:null,children:[]});break}case SyntaxKind.JsxOpeningElement:Object.assign(f,{type:AST_NODE_TYPES.JSXOpeningElement,selfClosing:!1,name:u(l.tagName),attributes:l.attributes.properties.map(n)});break;case SyntaxKind.JsxClosingElement:Object.assign(f,{type:AST_NODE_TYPES.JSXClosingElement,name:u(l.tagName)});break;case SyntaxKind.JsxExpression:{const e=d.getLineAndCharacterOfPosition(f.range[0]+1),t=l.expression?n(l.expression):{type:AST_NODE_TYPES.JSXEmptyExpression,loc:{start:{line:e.line+1,column:e.character},end:{line:f.loc.end.line,column:f.loc.end.column-1}},range:[f.range[0]+1,f.range[1]-1]};Object.assign(f,{type:AST_NODE_TYPES.JSXExpressionContainer,expression:t});break}case SyntaxKind.JsxAttribute:{const e=nodeUtils$1.convertToken(l.name,d);e.type=AST_NODE_TYPES.JSXIdentifier,e.name=e.value,delete e.value,Object.assign(f,{type:AST_NODE_TYPES.JSXAttribute,name:e,value:n(l.initializer)});break}case SyntaxKind.JsxText:{const e=l.getFullStart(),t=l.getEnd(),n=p.useJSXTextNode?AST_NODE_TYPES.JSXText:AST_NODE_TYPES.Literal;Object.assign(f,{type:n,value:d.text.slice(e,t),raw:d.text.slice(e,t)}),f.loc=nodeUtils$1.getLocFor(e,t,d),f.range=[e,t];break}case SyntaxKind.JsxSpreadAttribute:Object.assign(f,{type:AST_NODE_TYPES.JSXSpreadAttribute,argument:n(l.expression)});break;case SyntaxKind.FirstNode:Object.assign(f,{type:AST_NODE_TYPES.TSQualifiedName,left:n(l.left),right:n(l.right)});break;case SyntaxKind.ParenthesizedExpression:return e({node:l.expression,parent:_,ast:d,additionalOptions:p});case SyntaxKind.TypeAliasDeclaration:{const e={type:AST_NODE_TYPES.VariableDeclarator,id:n(l.name),init:n(l.type),range:[l.name.getStart(),l.end]};e.loc=nodeUtils$1.getLocFor(e.range[0],e.range[1],d),l.typeParameters&&l.typeParameters.length&&(e.typeParameters=i(l.typeParameters)),Object.assign(f,{type:AST_NODE_TYPES.VariableDeclaration,kind:nodeUtils$1.getDeclarationKind(l),declarations:[e]}),f=nodeUtils$1.fixExports(l,f,d);break}case SyntaxKind.MethodSignature:Object.assign(f,{type:AST_NODE_TYPES.TSMethodSignature,optional:nodeUtils$1.isOptional(l),computed:nodeUtils$1.isComputedProperty(l.name),key:n(l.name),params:l.parameters.map(e=>n(e)),typeAnnotation:l.type?r(l.type):null,accessibility:nodeUtils$1.getTSNodeAccessibility(l),readonly:nodeUtils$1.hasModifier(SyntaxKind.ReadonlyKeyword,l),static:nodeUtils$1.hasModifier(SyntaxKind.StaticKeyword,l),export:nodeUtils$1.hasModifier(SyntaxKind.ExportKeyword,l)}),l.typeParameters&&(f.typeParameters=i(l.typeParameters));break;case SyntaxKind.PropertySignature:Object.assign(f,{type:AST_NODE_TYPES.TSPropertySignature,optional:nodeUtils$1.isOptional(l),computed:nodeUtils$1.isComputedProperty(l.name),key:n(l.name),typeAnnotation:l.type?r(l.type):null,initializer:n(l.initializer),accessibility:nodeUtils$1.getTSNodeAccessibility(l),readonly:nodeUtils$1.hasModifier(SyntaxKind.ReadonlyKeyword,l),static:nodeUtils$1.hasModifier(SyntaxKind.StaticKeyword,l),export:nodeUtils$1.hasModifier(SyntaxKind.ExportKeyword,l)});break;case SyntaxKind.IndexSignature:Object.assign(f,{type:AST_NODE_TYPES.TSIndexSignature,index:n(l.parameters[0]),typeAnnotation:l.type?r(l.type):null,accessibility:nodeUtils$1.getTSNodeAccessibility(l),readonly:nodeUtils$1.hasModifier(SyntaxKind.ReadonlyKeyword,l),static:nodeUtils$1.hasModifier(SyntaxKind.StaticKeyword,l),export:nodeUtils$1.hasModifier(SyntaxKind.ExportKeyword,l)});break;case SyntaxKind.ConstructSignature:Object.assign(f,{type:AST_NODE_TYPES.TSConstructSignature,params:l.parameters.map(e=>n(e)),typeAnnotation:l.type?r(l.type):null}),l.typeParameters&&(f.typeParameters=i(l.typeParameters));break;case SyntaxKind.InterfaceDeclaration:{const e=l.heritageClauses||[];let t=e.length?e[e.length-1]:l.name;if(l.typeParameters&&l.typeParameters.length){const e=l.typeParameters[l.typeParameters.length-1];(!t||e.pos>t.pos)&&(t=nodeUtils$1.findNextToken(e,d)),f.typeParameters=i(l.typeParameters);}const r=e.length>0,a=nodeUtils$1.hasModifier(SyntaxKind.AbstractKeyword,l),o=nodeUtils$1.findNextToken(t,d),c={type:AST_NODE_TYPES.TSInterfaceBody,body:l.members.map(e=>n(e)),range:[o.getStart(),f.range[1]],loc:nodeUtils$1.getLocFor(o.getStart(),l.end,d)};Object.assign(f,{abstract:a,type:AST_NODE_TYPES.TSInterfaceDeclaration,body:c,id:n(l.name),heritage:r?e[0].types.map(s):[]}),f=nodeUtils$1.fixExports(l,f,d);break}case SyntaxKind.FirstTypeNode:Object.assign(f,{type:AST_NODE_TYPES.TSTypePredicate,parameterName:n(l.parameterName),typeAnnotation:r(l.type)});break;default:!function(){const e=`TS${SyntaxKind[l.kind]}`;if(p.errorOnUnknownASTType&&!AST_NODE_TYPES[e])throw new Error(`Unknown AST_NODE_TYPE: \"${e}\"`);f.type=e,Object.keys(l).filter(e=>!/^(?:kind|parent|pos|end|flags|modifierFlagsCache|jsDoc)$/.test(e)).forEach(e=>{if(\"type\"===e)f.typeAnnotation=l.type?r(l.type):null;else if(\"typeArguments\"===e)f.typeParameters=l.typeArguments?a(l.typeArguments):null;else if(\"typeParameters\"===e)f.typeParameters=l.typeParameters?i(l.typeParameters):null;else if(\"decorators\"===e){const e=c(l.decorators);e&&e.length&&(f.decorators=e);}else Array.isArray(l[e])?f[e]=l[e].map(n):l[e]&&\"object\"==typeof l[e]?f[e]=n(l[e]):f[e]=l[e];});}();}return f};const ts$2=typescript,nodeUtils$4=nodeUtils$2;var convertComments_1={convertComments:convertComments$1};const convert$1=convert$2,convertComments=convertComments_1.convertComments,nodeUtils=nodeUtils$2;var astConverter=(e,t)=>{if(e.parseDiagnostics.length)throw convertError(e.parseDiagnostics[0]);const n=convert$1({node:e,parent:null,ast:e,additionalOptions:{errorOnUnknownASTType:t.errorOnUnknownASTType||!1,useJSXTextNode:t.useJSXTextNode||!1}});t.tokens&&(n.tokens=nodeUtils.convertTokens(e));t.comment&&(n.comments=convertComments(e,t.code));return n},semver$1=createCommonjsModule$$1(function(e,t){function n(e,t){if(e instanceof i)return e;if(\"string\"!=typeof e)return null;if(e.length>H)return null;if(!(t?X[pe]:X[le]).test(e))return null;try{return new i(e,t)}catch(e){return null}}function r(e,t){var r=n(e,t);return r?r.version:null}function a(e,t){var r=n(e.trim().replace(/^[=v]+/,\"\"),t);return r?r.version:null}function i(e,t){if(e instanceof i){if(e.loose===t)return e;e=e.version;}else if(\"string\"!=typeof e)throw new TypeError(\"Invalid Version: \"+e);if(e.length>H)throw new TypeError(\"version is longer than \"+H+\" characters\");if(!(this instanceof i))return new i(e,t);W(\"SemVer\",e,t),this.loose=t;var n=e.trim().match(t?X[pe]:X[le]);if(!n)throw new TypeError(\"Invalid Version: \"+e);if(this.raw=e,this.major=+n[1],this.minor=+n[2],this.patch=+n[3],this.major>G||this.major<0)throw new TypeError(\"Invalid major version\");if(this.minor>G||this.minor<0)throw new TypeError(\"Invalid minor version\");if(this.patch>G||this.patch<0)throw new TypeError(\"Invalid patch version\");n[4]?this.prerelease=n[4].split(\".\").map(function(e){if(/^[0-9]+$/.test(e)){var t=+e;if(t>=0&&t<G)return t}return e}):this.prerelease=[],this.build=n[5]?n[5].split(\".\"):[],this.format();}function o(e,t,n,r){\"string\"==typeof n&&(r=n,n=void 0);try{return new i(e,n).inc(t,r).version}catch(e){return null}}function s(e,t){if(b(e,t))return null;var r=n(e),a=n(t);if(r.prerelease.length||a.prerelease.length){for(var i in r)if((\"major\"===i||\"minor\"===i||\"patch\"===i)&&r[i]!==a[i])return\"pre\"+i;return\"prerelease\"}for(var i in r)if((\"major\"===i||\"minor\"===i||\"patch\"===i)&&r[i]!==a[i])return i}function c(e,t){var n=Re.test(e),r=Re.test(t);return n&&r&&(e=+e,t=+t),n&&!r?-1:r&&!n?1:e<t?-1:e>t?1:0}function u(e,t){return c(t,e)}function l(e,t){return new i(e,t).major}function _(e,t){return new i(e,t).minor}function d(e,t){return new i(e,t).patch}function p(e,t,n){return new i(e,n).compare(t)}function f(e,t){return p(e,t,!0)}function g(e,t,n){return p(t,e,n)}function m(e,n){return e.sort(function(e,r){return t.compare(e,r,n)})}function y(e,n){return e.sort(function(e,r){return t.rcompare(e,r,n)})}function h(e,t,n){return p(e,t,n)>0}function v(e,t,n){return p(e,t,n)<0}function b(e,t,n){return 0===p(e,t,n)}function x(e,t,n){return 0!==p(e,t,n)}function k(e,t,n){return p(e,t,n)>=0}function S(e,t,n){return p(e,t,n)<=0}function T(e,t,n,r){var a;switch(t){case\"===\":\"object\"==typeof e&&(e=e.version),\"object\"==typeof n&&(n=n.version),a=e===n;break;case\"!==\":\"object\"==typeof e&&(e=e.version),\"object\"==typeof n&&(n=n.version),a=e!==n;break;case\"\":case\"=\":case\"==\":a=b(e,n,r);break;case\"!=\":a=x(e,n,r);break;case\">\":a=h(e,n,r);break;case\">=\":a=k(e,n,r);break;case\"<\":a=v(e,n,r);break;case\"<=\":a=S(e,n,r);break;default:throw new TypeError(\"Invalid operator: \"+t)}return a}function C(e,t){if(e instanceof C){if(e.loose===t)return e;e=e.value;}if(!(this instanceof C))return new C(e,t);W(\"comparator\",e,t),this.loose=t,this.parse(e),this.semver===Le?this.value=\"\":this.value=this.operator+this.semver.version,W(\"comp\",this);}function D(e,t){if(e instanceof D&&e.loose===t)return e;if(!(this instanceof D))return new D(e,t);if(this.loose=t,this.raw=e,this.set=e.split(/\\s*\\|\\|\\s*/).map(function(e){return this.parseRange(e.trim())},this).filter(function(e){return e.length}),!this.set.length)throw new TypeError(\"Invalid SemVer Range: \"+e);this.format();}function E(e,t){return new D(e,t).set.map(function(e){return e.map(function(e){return e.value}).join(\" \").trim().split(\" \")})}function N(e,t){return W(\"comp\",e),e=O(e,t),W(\"caret\",e),e=w(e,t),W(\"tildes\",e),e=I(e,t),W(\"xrange\",e),e=R(e,t),W(\"stars\",e),e}function A(e){return!e||\"x\"===e.toLowerCase()||\"*\"===e}function w(e,t){return e.trim().split(/\\s+/).map(function(e){return P(e,t)}).join(\" \")}function P(e,t){var n=t?X[Te]:X[Se];return e.replace(n,function(t,n,r,a,i){W(\"tilde\",e,t,n,r,a,i);var o;return A(n)?o=\"\":A(r)?o=\">=\"+n+\".0.0 <\"+(+n+1)+\".0.0\":A(a)?o=\">=\"+n+\".\"+r+\".0 <\"+n+\".\"+(+r+1)+\".0\":i?(W(\"replaceTilde pr\",i),\"-\"!==i.charAt(0)&&(i=\"-\"+i),o=\">=\"+n+\".\"+r+\".\"+a+i+\" <\"+n+\".\"+(+r+1)+\".0\"):o=\">=\"+n+\".\"+r+\".\"+a+\" <\"+n+\".\"+(+r+1)+\".0\",W(\"tilde return\",o),o})}function O(e,t){return e.trim().split(/\\s+/).map(function(e){return F(e,t)}).join(\" \")}function F(e,t){W(\"caret\",e,t);var n=t?X[Ne]:X[Ee];return e.replace(n,function(t,n,r,a,i){W(\"caret\",e,t,n,r,a,i);var o;return A(n)?o=\"\":A(r)?o=\">=\"+n+\".0.0 <\"+(+n+1)+\".0.0\":A(a)?o=\"0\"===n?\">=\"+n+\".\"+r+\".0 <\"+n+\".\"+(+r+1)+\".0\":\">=\"+n+\".\"+r+\".0 <\"+(+n+1)+\".0.0\":i?(W(\"replaceCaret pr\",i),\"-\"!==i.charAt(0)&&(i=\"-\"+i),o=\"0\"===n?\"0\"===r?\">=\"+n+\".\"+r+\".\"+a+i+\" <\"+n+\".\"+r+\".\"+(+a+1):\">=\"+n+\".\"+r+\".\"+a+i+\" <\"+n+\".\"+(+r+1)+\".0\":\">=\"+n+\".\"+r+\".\"+a+i+\" <\"+(+n+1)+\".0.0\"):(W(\"no pr\"),o=\"0\"===n?\"0\"===r?\">=\"+n+\".\"+r+\".\"+a+\" <\"+n+\".\"+r+\".\"+(+a+1):\">=\"+n+\".\"+r+\".\"+a+\" <\"+n+\".\"+(+r+1)+\".0\":\">=\"+n+\".\"+r+\".\"+a+\" <\"+(+n+1)+\".0.0\"),W(\"caret return\",o),o})}function I(e,t){return W(\"replaceXRanges\",e,t),e.split(/\\s+/).map(function(e){return M(e,t)}).join(\" \")}function M(e,t){e=e.trim();var n=t?X[be]:X[ve];return e.replace(n,function(t,n,r,a,i,o){W(\"xRange\",e,t,n,r,a,i,o);var s=A(r),c=s||A(a),u=c||A(i),l=u;return\"=\"===n&&l&&(n=\"\"),s?t=\">\"===n||\"<\"===n?\"<0.0.0\":\"*\":n&&l?(c&&(a=0),u&&(i=0),\">\"===n?(n=\">=\",c?(r=+r+1,a=0,i=0):u&&(a=+a+1,i=0)):\"<=\"===n&&(n=\"<\",c?r=+r+1:a=+a+1),t=n+r+\".\"+a+\".\"+i):c?t=\">=\"+r+\".0.0 <\"+(+r+1)+\".0.0\":u&&(t=\">=\"+r+\".\"+a+\".0 <\"+r+\".\"+(+a+1)+\".0\"),W(\"xRange return\",t),t})}function R(e,t){return W(\"replaceStars\",e,t),e.trim().replace(X[Ie],\"\")}function L(e,t,n,r,a,i,o,s,c,u,l,_,d){return t=A(n)?\"\":A(r)?\">=\"+n+\".0.0\":A(a)?\">=\"+n+\".\"+r+\".0\":\">=\"+t,s=A(c)?\"\":A(u)?\"<\"+(+c+1)+\".0.0\":A(l)?\"<\"+c+\".\"+(+u+1)+\".0\":_?\"<=\"+c+\".\"+u+\".\"+l+\"-\"+_:\"<=\"+s,(t+\" \"+s).trim()}function B(e,t){for(n=0;n<e.length;n++)if(!e[n].test(t))return!1;if(t.prerelease.length){for(var n=0;n<e.length;n++)if(W(e[n].semver),e[n].semver!==Le&&e[n].semver.prerelease.length>0){var r=e[n].semver;if(r.major===t.major&&r.minor===t.minor&&r.patch===t.patch)return!0}return!1}return!0}function K(e,t,n){try{t=new D(t,n);}catch(e){return!1}return t.test(e)}function j(e,t,n){return e.filter(function(e){return K(e,t,n)}).sort(function(e,t){return g(e,t,n)})[0]||null}function J(e,t,n){return e.filter(function(e){return K(e,t,n)}).sort(function(e,t){return p(e,t,n)})[0]||null}function z(e,t){try{return new D(e,t).range||\"*\"}catch(e){return null}}function U(e,t,n){return V(e,t,\"<\",n)}function q(e,t,n){return V(e,t,\">\",n)}function V(e,t,n,r){e=new i(e,r),t=new D(t,r);var a,o,s,c,u;switch(n){case\">\":a=h,o=S,s=v,c=\">\",u=\">=\";break;case\"<\":a=v,o=k,s=h,c=\"<\",u=\"<=\";break;default:throw new TypeError('Must provide a hilo val of \"<\" or \">\"')}if(K(e,t,r))return!1;for(var l=0;l<t.set.length;++l){var _=null,d=null;if(t.set[l].forEach(function(e){e.semver===Le&&(e=new C(\">=0.0.0\")),_=_||e,d=d||e,a(e.semver,_.semver,r)?_=e:s(e.semver,d.semver,r)&&(d=e);}),_.operator===c||_.operator===u)return!1;if((!d.operator||d.operator===c)&&o(e,d.semver))return!1;if(d.operator===u&&s(e,d.semver))return!1}return!0}function $(e,t){var r=n(e,t);return r&&r.prerelease.length?r.prerelease:null}t=e.exports=i;var W;W=\"object\"==typeof process&&process.env&&process.env.NODE_DEBUG&&/\\bsemver\\b/i.test(process.env.NODE_DEBUG)?function(){var e=Array.prototype.slice.call(arguments,0);e.unshift(\"SEMVER\"),console.log.apply(console,e);}:function(){},t.SEMVER_SPEC_VERSION=\"2.0.0\";var H=256,G=Number.MAX_SAFE_INTEGER||9007199254740991,X=t.re=[],Y=t.src=[],Q=0,Z=Q++;Y[Z]=\"0|[1-9]\\\\d*\";var ee=Q++;Y[ee]=\"[0-9]+\";var te=Q++;Y[te]=\"\\\\d*[a-zA-Z-][a-zA-Z0-9-]*\";var ne=Q++;Y[ne]=\"(\"+Y[Z]+\")\\\\.(\"+Y[Z]+\")\\\\.(\"+Y[Z]+\")\";var re=Q++;Y[re]=\"(\"+Y[ee]+\")\\\\.(\"+Y[ee]+\")\\\\.(\"+Y[ee]+\")\";var ae=Q++;Y[ae]=\"(?:\"+Y[Z]+\"|\"+Y[te]+\")\";var ie=Q++;Y[ie]=\"(?:\"+Y[ee]+\"|\"+Y[te]+\")\";var oe=Q++;Y[oe]=\"(?:-(\"+Y[ae]+\"(?:\\\\.\"+Y[ae]+\")*))\";var se=Q++;Y[se]=\"(?:-?(\"+Y[ie]+\"(?:\\\\.\"+Y[ie]+\")*))\";var ce=Q++;Y[ce]=\"[0-9A-Za-z-]+\";var ue=Q++;Y[ue]=\"(?:\\\\+(\"+Y[ce]+\"(?:\\\\.\"+Y[ce]+\")*))\";var le=Q++,_e=\"v?\"+Y[ne]+Y[oe]+\"?\"+Y[ue]+\"?\";Y[le]=\"^\"+_e+\"$\";var de=\"[v=\\\\s]*\"+Y[re]+Y[se]+\"?\"+Y[ue]+\"?\",pe=Q++;Y[pe]=\"^\"+de+\"$\";var fe=Q++;Y[fe]=\"((?:<|>)?=?)\";var ge=Q++;Y[ge]=Y[ee]+\"|x|X|\\\\*\";var me=Q++;Y[me]=Y[Z]+\"|x|X|\\\\*\";var ye=Q++;Y[ye]=\"[v=\\\\s]*(\"+Y[me]+\")(?:\\\\.(\"+Y[me]+\")(?:\\\\.(\"+Y[me]+\")(?:\"+Y[oe]+\")?\"+Y[ue]+\"?)?)?\";var he=Q++;Y[he]=\"[v=\\\\s]*(\"+Y[ge]+\")(?:\\\\.(\"+Y[ge]+\")(?:\\\\.(\"+Y[ge]+\")(?:\"+Y[se]+\")?\"+Y[ue]+\"?)?)?\";var ve=Q++;Y[ve]=\"^\"+Y[fe]+\"\\\\s*\"+Y[ye]+\"$\";var be=Q++;Y[be]=\"^\"+Y[fe]+\"\\\\s*\"+Y[he]+\"$\";var xe=Q++;Y[xe]=\"(?:~>?)\";var ke=Q++;Y[ke]=\"(\\\\s*)\"+Y[xe]+\"\\\\s+\",X[ke]=new RegExp(Y[ke],\"g\");var Se=Q++;Y[Se]=\"^\"+Y[xe]+Y[ye]+\"$\";var Te=Q++;Y[Te]=\"^\"+Y[xe]+Y[he]+\"$\";var Ce=Q++;Y[Ce]=\"(?:\\\\^)\";var De=Q++;Y[De]=\"(\\\\s*)\"+Y[Ce]+\"\\\\s+\",X[De]=new RegExp(Y[De],\"g\");var Ee=Q++;Y[Ee]=\"^\"+Y[Ce]+Y[ye]+\"$\";var Ne=Q++;Y[Ne]=\"^\"+Y[Ce]+Y[he]+\"$\";var Ae=Q++;Y[Ae]=\"^\"+Y[fe]+\"\\\\s*(\"+de+\")$|^$\";var we=Q++;Y[we]=\"^\"+Y[fe]+\"\\\\s*(\"+_e+\")$|^$\";var Pe=Q++;Y[Pe]=\"(\\\\s*)\"+Y[fe]+\"\\\\s*(\"+de+\"|\"+Y[ye]+\")\",X[Pe]=new RegExp(Y[Pe],\"g\");var Oe=Q++;Y[Oe]=\"^\\\\s*(\"+Y[ye]+\")\\\\s+-\\\\s+(\"+Y[ye]+\")\\\\s*$\";var Fe=Q++;Y[Fe]=\"^\\\\s*(\"+Y[he]+\")\\\\s+-\\\\s+(\"+Y[he]+\")\\\\s*$\";var Ie=Q++;Y[Ie]=\"(<|>)?=?\\\\s*\\\\*\";for(var Me=0;Me<Q;Me++)W(Me,Y[Me]),X[Me]||(X[Me]=new RegExp(Y[Me]));t.parse=n,t.valid=r,t.clean=a,t.SemVer=i,i.prototype.format=function(){return this.version=this.major+\".\"+this.minor+\".\"+this.patch,this.prerelease.length&&(this.version+=\"-\"+this.prerelease.join(\".\")),this.version},i.prototype.toString=function(){return this.version},i.prototype.compare=function(e){return W(\"SemVer.compare\",this.version,this.loose,e),e instanceof i||(e=new i(e,this.loose)),this.compareMain(e)||this.comparePre(e)},i.prototype.compareMain=function(e){return e instanceof i||(e=new i(e,this.loose)),c(this.major,e.major)||c(this.minor,e.minor)||c(this.patch,e.patch)},i.prototype.comparePre=function(e){if(e instanceof i||(e=new i(e,this.loose)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;var t=0;do{var n=this.prerelease[t],r=e.prerelease[t];if(W(\"prerelease compare\",t,n,r),void 0===n&&void 0===r)return 0;if(void 0===r)return 1;if(void 0===n)return-1;if(n!==r)return c(n,r)}while(++t)},i.prototype.inc=function(e,t){switch(e){case\"premajor\":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc(\"pre\",t);break;case\"preminor\":this.prerelease.length=0,this.patch=0,this.minor++,this.inc(\"pre\",t);break;case\"prepatch\":this.prerelease.length=0,this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"prerelease\":0===this.prerelease.length&&this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"major\":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case\"minor\":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case\"patch\":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case\"pre\":if(0===this.prerelease.length)this.prerelease=[0];else{for(var n=this.prerelease.length;--n>=0;)\"number\"==typeof this.prerelease[n]&&(this.prerelease[n]++,n=-2);-1===n&&this.prerelease.push(0);}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(\"invalid increment argument: \"+e)}return this.format(),this.raw=this.version,this},t.inc=o,t.diff=s,t.compareIdentifiers=c;var Re=/^[0-9]+$/;t.rcompareIdentifiers=u,t.major=l,t.minor=_,t.patch=d,t.compare=p,t.compareLoose=f,t.rcompare=g,t.sort=m,t.rsort=y,t.gt=h,t.lt=v,t.eq=b,t.neq=x,t.gte=k,t.lte=S,t.cmp=T,t.Comparator=C;var Le={};C.prototype.parse=function(e){var t=this.loose?X[Ae]:X[we],n=e.match(t);if(!n)throw new TypeError(\"Invalid comparator: \"+e);this.operator=n[1],\"=\"===this.operator&&(this.operator=\"\"),n[2]?this.semver=new i(n[2],this.loose):this.semver=Le;},C.prototype.toString=function(){return this.value},C.prototype.test=function(e){return W(\"Comparator.test\",e,this.loose),this.semver===Le||(\"string\"==typeof e&&(e=new i(e,this.loose)),T(e,this.operator,this.semver,this.loose))},t.Range=D,D.prototype.format=function(){return this.range=this.set.map(function(e){return e.join(\" \").trim()}).join(\"||\").trim(),this.range},D.prototype.toString=function(){return this.range},D.prototype.parseRange=function(e){var t=this.loose;e=e.trim(),W(\"range\",e,t);var n=t?X[Fe]:X[Oe];e=e.replace(n,L),W(\"hyphen replace\",e),e=e.replace(X[Pe],\"$1$2$3\"),W(\"comparator trim\",e,X[Pe]),e=(e=(e=e.replace(X[ke],\"$1~\")).replace(X[De],\"$1^\")).split(/\\s+/).join(\" \");var r=t?X[Ae]:X[we],a=e.split(\" \").map(function(e){return N(e,t)}).join(\" \").split(/\\s+/);return this.loose&&(a=a.filter(function(e){return!!e.match(r)})),a=a.map(function(e){return new C(e,t)})},t.toComparators=E,D.prototype.test=function(e){if(!e)return!1;\"string\"==typeof e&&(e=new i(e,this.loose));for(var t=0;t<this.set.length;t++)if(B(this.set[t],e))return!0;return!1},t.satisfies=K,t.maxSatisfying=j,t.minSatisfying=J,t.validRange=z,t.ltr=U,t.gtr=q,t.outside=V,t.prerelease=$;}),_args=[[{raw:\"typescript-eslint-parser@git://github.com/eslint/typescript-eslint-parser.git#7c38401aa1452e6cc493151b8ab3a591e4d5e74a\",scope:null,escapedName:\"typescript-eslint-parser\",name:\"typescript-eslint-parser\",rawSpec:\"git://github.com/eslint/typescript-eslint-parser.git#7c38401aa1452e6cc493151b8ab3a591e4d5e74a\",spec:\"git://github.com/eslint/typescript-eslint-parser.git#7c38401aa1452e6cc493151b8ab3a591e4d5e74a\",type:\"hosted\",hosted:{type:\"github\",ssh:\"git@github.com:eslint/typescript-eslint-parser.git#7c38401aa1452e6cc493151b8ab3a591e4d5e74a\",sshUrl:\"git+ssh://git@github.com/eslint/typescript-eslint-parser.git#7c38401aa1452e6cc493151b8ab3a591e4d5e74a\",httpsUrl:\"git+https://github.com/eslint/typescript-eslint-parser.git#7c38401aa1452e6cc493151b8ab3a591e4d5e74a\",gitUrl:\"git://github.com/eslint/typescript-eslint-parser.git#7c38401aa1452e6cc493151b8ab3a591e4d5e74a\",shortcut:\"github:eslint/typescript-eslint-parser#7c38401aa1452e6cc493151b8ab3a591e4d5e74a\",directUrl:\"https://raw.githubusercontent.com/eslint/typescript-eslint-parser/7c38401aa1452e6cc493151b8ab3a591e4d5e74a/package.json\"}},\"/mnt/c/projects/my/prettier-with-tabs\"]],_from=\"git://github.com/eslint/typescript-eslint-parser.git#7c38401aa1452e6cc493151b8ab3a591e4d5e74a\",_id=\"typescript-eslint-parser@4.0.0\",_inCache=!0,_location=\"/typescript-eslint-parser\",_phantomChildren={},_requested={raw:\"typescript-eslint-parser@git://github.com/eslint/typescript-eslint-parser.git#7c38401aa1452e6cc493151b8ab3a591e4d5e74a\",scope:null,escapedName:\"typescript-eslint-parser\",name:\"typescript-eslint-parser\",rawSpec:\"git://github.com/eslint/typescript-eslint-parser.git#7c38401aa1452e6cc493151b8ab3a591e4d5e74a\",spec:\"git://github.com/eslint/typescript-eslint-parser.git#7c38401aa1452e6cc493151b8ab3a591e4d5e74a\",type:\"hosted\",hosted:{type:\"github\",ssh:\"git@github.com:eslint/typescript-eslint-parser.git#7c38401aa1452e6cc493151b8ab3a591e4d5e74a\",sshUrl:\"git+ssh://git@github.com/eslint/typescript-eslint-parser.git#7c38401aa1452e6cc493151b8ab3a591e4d5e74a\",httpsUrl:\"git+https://github.com/eslint/typescript-eslint-parser.git#7c38401aa1452e6cc493151b8ab3a591e4d5e74a\",gitUrl:\"git://github.com/eslint/typescript-eslint-parser.git#7c38401aa1452e6cc493151b8ab3a591e4d5e74a\",shortcut:\"github:eslint/typescript-eslint-parser#7c38401aa1452e6cc493151b8ab3a591e4d5e74a\",directUrl:\"https://raw.githubusercontent.com/eslint/typescript-eslint-parser/7c38401aa1452e6cc493151b8ab3a591e4d5e74a/package.json\"}},_requiredBy=[\"/\"],_resolved=\"git://github.com/eslint/typescript-eslint-parser.git#7c38401aa1452e6cc493151b8ab3a591e4d5e74a\",_shasum=\"18af1c4514d3c168ffb6f786c1603406ebc026d1\",_shrinkwrap=null,_spec=\"typescript-eslint-parser@git://github.com/eslint/typescript-eslint-parser.git#7c38401aa1452e6cc493151b8ab3a591e4d5e74a\",_where=\"/mnt/c/projects/my/prettier-with-tabs\",author={name:\"Nicholas C. Zakas\",email:\"nicholas+npm@nczconsulting.com\"},bugs={url:\"https://github.com/eslint/typescript-eslint-parser/issues\"},dependencies={\"lodash.unescape\":\"4.0.1\",semver:\"5.3.0\"},description=\"An Esprima-style parser for TypeScript\",devDependencies={eslint:\"3.19.0\",\"eslint-config-eslint\":\"4.0.0\",\"eslint-plugin-node\":\"4.2.2\",\"eslint-release\":\"0.10.3\",jest:\"20.0.4\",\"npm-license\":\"0.3.3\",shelljs:\"0.7.7\",\"shelljs-nodecli\":\"0.1.1\",typescript:\"~2.4.0\"},engines={node:\">=4\"},files=[\"lib\",\"parser.js\"],gitHead=\"7c38401aa1452e6cc493151b8ab3a591e4d5e74a\",homepage=\"https://github.com/eslint/typescript-eslint-parser\",jest={testRegex:\"tests/lib/.+\\\\.js$\",testPathIgnorePatterns:[],collectCoverage:!0,coverageReporters:[\"text-summary\"]},keywords=[\"ast\",\"ecmascript\",\"javascript\",\"typescript\",\"parser\",\"syntax\",\"eslint\"],license=\"BSD-2-Clause\",main=\"parser.js\",name=\"typescript-eslint-parser\",optionalDependencies={},peerDependencies={typescript:\"*\"},readme='# TypeScript ESLint Parser (Experimental)\\n\\nA parser that converts TypeScript into an [ESTree](https://github.com/estree/estree)-compatible form so it can be used in ESLint.\\n\\n**Important:** This parser is not fully compatible with all ESLint rules and plugins. Some rules will improperly mark source code as failing or not find problems where it should.\\n\\n## Supported TypeScript Version\\n\\nWe will always endeavor to support the latest stable version of TypeScript.\\n\\nThe version of TypeScript currently supported by this parser is `~2.4.0`. This is reflected in the `devDependency` requirement within the package.json file, and it is what the tests will be run against. We have an open `peerDependency` requirement in order to allow for experimentation on newer/beta versions of TypeScript.\\n\\nIf you use a non-supported version of TypeScript, the parser will log a warning to the console.\\n\\n**Please ensure that you are using a supported version before submitting any issues/bug reports.**\\n\\n## Known Issues\\n\\nThe following ESLint rules will fail on acceptable code:\\n - no-undef [#77](https://github.com/eslint/typescript-eslint-parser/issues/77)\\n - no-unused-vars [#77](https://github.com/eslint/typescript-eslint-parser/issues/77)\\n - no-useless-constructor [#77](https://github.com/eslint/typescript-eslint-parser/issues/77)\\n - space-infix-ops [#224](https://github.com/eslint/typescript-eslint-parser/issues/224)\\n \\nThe follow ESLint plugins have issues when used with this parser:\\n - eslint-plugin-react [#213](https://github.com/eslint/typescript-eslint-parser/issues/213)\\n - eslint-plugin-import\\n    - prefer-default-export - Will fail exports inside of Namespaces or Modules\\n  \\nThe following TypeScript syntax will cause rules to fail or ESLint v3 to crash:\\n - Empty body functions\\n   - Abstract methods\\n   - Function overloading\\n   - Declared functions\\n\\n## Usage\\n\\nInstall:\\n\\n```\\nnpm i typescript-eslint-parser --save-dev\\n```\\n\\nAnd in your ESLint configuration file:\\n\\n```\\n\"parser\": \"typescript-eslint-parser\"\\n```\\n\\n## Help Wanted!\\n\\nIf you\\'re familiar with TypeScript and ESLint, and you\\'d like to see this project progress, please consider contributing. We need people with a good knowledge of TypeScript to ensure this parser is useful.\\n\\n## Reporting Bugs\\n\\nPlease check the current list of open and known issues and ensure the bug has not been reported before. When creating a new issue provide as much information about your environment as possible. This includes:\\n - ESLint Version\\n - TypeScript version\\n - TypeScript parser version\\n - ESLint config or rules and plugins currently enabled\\n \\nAs well include a small code sample that can be used to reproduce the issue. \\n\\n## Contributing\\n\\nIssues and pull requests will be triaged and responded to as quickly as possible. We operate under the [ESLint Contributor Guidelines](http://eslint.org/docs/developer-guide/contributing), so please be sure to read them before contributing. If you\\'re not sure where to dig in, check out the [issues](https://github.com/eslint/typescript-eslint-parser/issues).\\n\\n## Build Commands\\n\\n* `npm test` - run all linting and tests\\n* `npm run lint` - run all linting\\n\\n## License\\n\\nTypeScript ESLint Parser is licensed under a permissive BSD 2-clause license.\\n\\n',readmeFilename=\"README.md\",repository={type:\"git\",url:\"git+https://github.com/eslint/typescript-eslint-parser.git\"},scripts={alpharelease:\"eslint-prerelease alpha\",betarelease:\"eslint-prerelease beta\",\"ci-release\":\"eslint-ci-release\",\"gh-release\":\"eslint-gh-release\",jest:\"jest\",lint:\"node Makefile.js lint\",release:\"eslint-release\",test:\"node Makefile.js test\"},version$1=\"4.0.0\",_package={_args:_args,_from:_from,_id:_id,_inCache:_inCache,_location:_location,_phantomChildren:_phantomChildren,_requested:_requested,_requiredBy:_requiredBy,_resolved:_resolved,_shasum:_shasum,_shrinkwrap:_shrinkwrap,_spec:_spec,_where:_where,author:author,bugs:bugs,dependencies:dependencies,description:description,devDependencies:devDependencies,engines:engines,files:files,gitHead:gitHead,homepage:homepage,jest:jest,keywords:keywords,license:license,main:main,name:name,optionalDependencies:optionalDependencies,peerDependencies:peerDependencies,readme:readme,readmeFilename:readmeFilename,repository:repository,scripts:scripts,version:version$1},_package$1=Object.freeze({_args:_args,_from:_from,_id:_id,_inCache:_inCache,_location:_location,_phantomChildren:_phantomChildren,_requested:_requested,_requiredBy:_requiredBy,_resolved:_resolved,_shasum:_shasum,_shrinkwrap:_shrinkwrap,_spec:_spec,_where:_where,author:author,bugs:bugs,dependencies:dependencies,description:description,devDependencies:devDependencies,engines:engines,files:files,gitHead:gitHead,homepage:homepage,jest:jest,keywords:keywords,license:license,main:main,name:name,optionalDependencies:optionalDependencies,peerDependencies:peerDependencies,readme:readme,readmeFilename:readmeFilename,repository:repository,scripts:scripts,version:version$1,default:_package}),require$$4$2=_package$1&&_package$1.default||_package$1;const astNodeTypes=astNodeTypes$1,ts=typescript,convert=astConverter,semver=semver$1,SUPPORTED_TYPESCRIPT_VERSIONS=require$$4$2.devDependencies.typescript,ACTIVE_TYPESCRIPT_VERSION=ts.version,isRunningSupportedTypeScriptVersion=semver.satisfies(ACTIVE_TYPESCRIPT_VERSION,SUPPORTED_TYPESCRIPT_VERSIONS);let extra;var version$$1=require$$4$2.version,parse_1=parse$1;!function(){let e,t={};\"function\"==typeof Object.create&&(t=Object.create(null));for(e in astNodeTypes)astNodeTypes.hasOwnProperty(e)&&(t[e]=astNodeTypes[e]);\"function\"==typeof Object.freeze&&Object.freeze(t);}();var parser={version:version$$1,parse:parse_1};const createError=parserCreateError,includeShebang=parserIncludeShebang;var parserTypescript=parse;module.exports=parserTypescript;\n});\n\nvar parserTypescript = unwrapExports(parserTypescript_1);\n\nreturn parserTypescript;\n\n}(fs,path,os,crypto,module$1));\n"
  },
  {
    "path": "website/static/lib/prettier-version.js",
    "content": "prettierVersion = \"1.5.3\";"
  },
  {
    "path": "website/static/lib/sw-toolbox.js",
    "content": "/* \n Copyright 2016 Google Inc. All Rights Reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var t;t=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,t.toolbox=e()}}(function(){return function e(t,n,r){function o(c,s){if(!n[c]){if(!t[c]){var a=\"function\"==typeof require&&require;if(!s&&a)return a(c,!0);if(i)return i(c,!0);var u=new Error(\"Cannot find module '\"+c+\"'\");throw u.code=\"MODULE_NOT_FOUND\",u}var f=n[c]={exports:{}};t[c][0].call(f.exports,function(e){var n=t[c][1][e];return o(n?n:e)},f,f.exports,e,t,n,r)}return n[c].exports}for(var i=\"function\"==typeof require&&require,c=0;c<r.length;c++)o(r[c]);return o}({1:[function(e,t,n){\"use strict\";function r(e,t){t=t||{};var n=t.debug||m.debug;n&&console.log(\"[sw-toolbox] \"+e)}function o(e){var t;return e&&e.cache&&(t=e.cache.name),t=t||m.cache.name,caches.open(t)}function i(e,t){t=t||{};var n=t.successResponses||m.successResponses;return fetch(e.clone()).then(function(r){return\"GET\"===e.method&&n.test(r.status)&&o(t).then(function(n){n.put(e,r).then(function(){var r=t.cache||m.cache;(r.maxEntries||r.maxAgeSeconds)&&r.name&&c(e,n,r)})}),r.clone()})}function c(e,t,n){var r=s.bind(null,e,t,n);d=d?d.then(r):r()}function s(e,t,n){var o=e.url,i=n.maxAgeSeconds,c=n.maxEntries,s=n.name,a=Date.now();return r(\"Updating LRU order for \"+o+\". Max entries is \"+c+\", max age is \"+i),g.getDb(s).then(function(e){return g.setTimestampForUrl(e,o,a)}).then(function(e){return g.expireEntries(e,c,i,a)}).then(function(e){r(\"Successfully updated IDB.\");var n=e.map(function(e){return t.delete(e)});return Promise.all(n).then(function(){r(\"Done with cache cleanup.\")})}).catch(function(e){r(e)})}function a(e,t,n){return r(\"Renaming cache: [\"+e+\"] to [\"+t+\"]\",n),caches.delete(t).then(function(){return Promise.all([caches.open(e),caches.open(t)]).then(function(t){var n=t[0],r=t[1];return n.keys().then(function(e){return Promise.all(e.map(function(e){return n.match(e).then(function(t){return r.put(e,t)})}))}).then(function(){return caches.delete(e)})})})}function u(e,t){return o(t).then(function(t){return t.add(e)})}function f(e,t){return o(t).then(function(t){return t.delete(e)})}function h(e){e instanceof Promise||p(e),m.preCacheItems=m.preCacheItems.concat(e)}function p(e){var t=Array.isArray(e);if(t&&e.forEach(function(e){\"string\"==typeof e||e instanceof Request||(t=!1)}),!t)throw new TypeError(\"The precache method expects either an array of strings and/or Requests or a Promise that resolves to an array of strings and/or Requests.\");return e}function l(e,t,n){if(!e)return!1;if(t){var r=e.headers.get(\"date\");if(r){var o=new Date(r);if(o.getTime()+1e3*t<n)return!1}}return!0}var d,m=e(\"./options\"),g=e(\"./idb-cache-expiration\");t.exports={debug:r,fetchAndCache:i,openCache:o,renameCache:a,cache:u,uncache:f,precache:h,validatePrecacheInput:p,isResponseFresh:l}},{\"./idb-cache-expiration\":2,\"./options\":4}],2:[function(e,t,n){\"use strict\";function r(e){return new Promise(function(t,n){var r=indexedDB.open(u+e,f);r.onupgradeneeded=function(){var e=r.result.createObjectStore(h,{keyPath:p});e.createIndex(l,l,{unique:!1})},r.onsuccess=function(){t(r.result)},r.onerror=function(){n(r.error)}})}function o(e){return e in d||(d[e]=r(e)),d[e]}function i(e,t,n){return new Promise(function(r,o){var i=e.transaction(h,\"readwrite\"),c=i.objectStore(h);c.put({url:t,timestamp:n}),i.oncomplete=function(){r(e)},i.onabort=function(){o(i.error)}})}function c(e,t,n){return t?new Promise(function(r,o){var i=1e3*t,c=[],s=e.transaction(h,\"readwrite\"),a=s.objectStore(h),u=a.index(l);u.openCursor().onsuccess=function(e){var t=e.target.result;if(t&&n-i>t.value[l]){var r=t.value[p];c.push(r),a.delete(r),t.continue()}},s.oncomplete=function(){r(c)},s.onabort=o}):Promise.resolve([])}function s(e,t){return t?new Promise(function(n,r){var o=[],i=e.transaction(h,\"readwrite\"),c=i.objectStore(h),s=c.index(l),a=s.count();s.count().onsuccess=function(){var e=a.result;e>t&&(s.openCursor().onsuccess=function(n){var r=n.target.result;if(r){var i=r.value[p];o.push(i),c.delete(i),e-o.length>t&&r.continue()}})},i.oncomplete=function(){n(o)},i.onabort=r}):Promise.resolve([])}function a(e,t,n,r){return c(e,n,r).then(function(n){return s(e,t).then(function(e){return n.concat(e)})})}var u=\"sw-toolbox-\",f=1,h=\"store\",p=\"url\",l=\"timestamp\",d={};t.exports={getDb:o,setTimestampForUrl:i,expireEntries:a}},{}],3:[function(e,t,n){\"use strict\";function r(e){var t=a.match(e.request);t?e.respondWith(t(e.request)):a.default&&\"GET\"===e.request.method&&0===e.request.url.indexOf(\"http\")&&e.respondWith(a.default(e.request))}function o(e){s.debug(\"activate event fired\");var t=u.cache.name+\"$$$inactive$$$\";e.waitUntil(s.renameCache(t,u.cache.name))}function i(e){return e.reduce(function(e,t){return e.concat(t)},[])}function c(e){var t=u.cache.name+\"$$$inactive$$$\";s.debug(\"install event fired\"),s.debug(\"creating cache [\"+t+\"]\"),e.waitUntil(s.openCache({cache:{name:t}}).then(function(e){return Promise.all(u.preCacheItems).then(i).then(s.validatePrecacheInput).then(function(t){return s.debug(\"preCache list: \"+(t.join(\", \")||\"(none)\")),e.addAll(t)})}))}e(\"serviceworker-cache-polyfill\");var s=e(\"./helpers\"),a=e(\"./router\"),u=e(\"./options\");t.exports={fetchListener:r,activateListener:o,installListener:c}},{\"./helpers\":1,\"./options\":4,\"./router\":6,\"serviceworker-cache-polyfill\":16}],4:[function(e,t,n){\"use strict\";var r;r=self.registration?self.registration.scope:self.scope||new URL(\"./\",self.location).href,t.exports={cache:{name:\"$$$toolbox-cache$$$\"+r+\"$$$\",maxAgeSeconds:null,maxEntries:null},debug:!1,networkTimeoutSeconds:null,preCacheItems:[],successResponses:/^0|([123]\\d\\d)|(40[14567])|410$/}},{}],5:[function(e,t,n){\"use strict\";var r=new URL(\"./\",self.location),o=r.pathname,i=e(\"path-to-regexp\"),c=function(e,t,n,r){t instanceof RegExp?this.fullUrlRegExp=t:(0!==t.indexOf(\"/\")&&(t=o+t),this.keys=[],this.regexp=i(t,this.keys)),this.method=e,this.options=r,this.handler=n};c.prototype.makeHandler=function(e){var t;if(this.regexp){var n=this.regexp.exec(e);t={},this.keys.forEach(function(e,r){t[e.name]=n[r+1]})}return function(e){return this.handler(e,t,this.options)}.bind(this)},t.exports=c},{\"path-to-regexp\":15}],6:[function(e,t,n){\"use strict\";function r(e){return e.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")}var o=e(\"./route\"),i=e(\"./helpers\"),c=function(e,t){for(var n=e.entries(),r=n.next(),o=[];!r.done;){var i=new RegExp(r.value[0]);i.test(t)&&o.push(r.value[1]),r=n.next()}return o},s=function(){this.routes=new Map,this.routes.set(RegExp,new Map),this.default=null};[\"get\",\"post\",\"put\",\"delete\",\"head\",\"any\"].forEach(function(e){s.prototype[e]=function(t,n,r){return this.add(e,t,n,r)}}),s.prototype.add=function(e,t,n,c){c=c||{};var s;t instanceof RegExp?s=RegExp:(s=c.origin||self.location.origin,s=s instanceof RegExp?s.source:r(s)),e=e.toLowerCase();var a=new o(e,t,n,c);this.routes.has(s)||this.routes.set(s,new Map);var u=this.routes.get(s);u.has(e)||u.set(e,new Map);var f=u.get(e),h=a.regexp||a.fullUrlRegExp;f.has(h.source)&&i.debug('\"'+t+'\" resolves to same regex as existing route.'),f.set(h.source,a)},s.prototype.matchMethod=function(e,t){var n=new URL(t),r=n.origin,o=n.pathname;return this._match(e,c(this.routes,r),o)||this._match(e,[this.routes.get(RegExp)],t)},s.prototype._match=function(e,t,n){if(0===t.length)return null;for(var r=0;r<t.length;r++){var o=t[r],i=o&&o.get(e.toLowerCase());if(i){var s=c(i,n);if(s.length>0)return s[0].makeHandler(n)}}return null},s.prototype.match=function(e){return this.matchMethod(e.method,e.url)||this.matchMethod(\"any\",e.url)},t.exports=new s},{\"./helpers\":1,\"./route\":5}],7:[function(e,t,n){\"use strict\";function r(e,t,n){return n=n||{},i.debug(\"Strategy: cache first [\"+e.url+\"]\",n),i.openCache(n).then(function(t){return t.match(e).then(function(t){var r=n.cache||o.cache,c=Date.now();return i.isResponseFresh(t,r.maxAgeSeconds,c)?t:i.fetchAndCache(e,n)})})}var o=e(\"../options\"),i=e(\"../helpers\");t.exports=r},{\"../helpers\":1,\"../options\":4}],8:[function(e,t,n){\"use strict\";function r(e,t,n){return n=n||{},i.debug(\"Strategy: cache only [\"+e.url+\"]\",n),i.openCache(n).then(function(t){return t.match(e).then(function(e){var t=n.cache||o.cache,r=Date.now();if(i.isResponseFresh(e,t.maxAgeSeconds,r))return e})})}var o=e(\"../options\"),i=e(\"../helpers\");t.exports=r},{\"../helpers\":1,\"../options\":4}],9:[function(e,t,n){\"use strict\";function r(e,t,n){return o.debug(\"Strategy: fastest [\"+e.url+\"]\",n),new Promise(function(r,c){var s=!1,a=[],u=function(e){a.push(e.toString()),s?c(new Error('Both cache and network failed: \"'+a.join('\", \"')+'\"')):s=!0},f=function(e){e instanceof Response?r(e):u(\"No result returned\")};o.fetchAndCache(e.clone(),n).then(f,u),i(e,t,n).then(f,u)})}var o=e(\"../helpers\"),i=e(\"./cacheOnly\");t.exports=r},{\"../helpers\":1,\"./cacheOnly\":8}],10:[function(e,t,n){t.exports={networkOnly:e(\"./networkOnly\"),networkFirst:e(\"./networkFirst\"),cacheOnly:e(\"./cacheOnly\"),cacheFirst:e(\"./cacheFirst\"),fastest:e(\"./fastest\")}},{\"./cacheFirst\":7,\"./cacheOnly\":8,\"./fastest\":9,\"./networkFirst\":11,\"./networkOnly\":12}],11:[function(e,t,n){\"use strict\";function r(e,t,n){n=n||{};var r=n.successResponses||o.successResponses,c=n.networkTimeoutSeconds||o.networkTimeoutSeconds;return i.debug(\"Strategy: network first [\"+e.url+\"]\",n),i.openCache(n).then(function(t){var s,a,u=[];if(c){var f=new Promise(function(r){s=setTimeout(function(){t.match(e).then(function(e){var t=n.cache||o.cache,c=Date.now(),s=t.maxAgeSeconds;i.isResponseFresh(e,s,c)&&r(e)})},1e3*c)});u.push(f)}var h=i.fetchAndCache(e,n).then(function(e){if(s&&clearTimeout(s),r.test(e.status))return e;throw i.debug(\"Response was an HTTP error: \"+e.statusText,n),a=e,new Error(\"Bad response\")}).catch(function(r){return i.debug(\"Network or response error, fallback to cache [\"+e.url+\"]\",n),t.match(e).then(function(e){if(e)return e;if(a)return a;throw r})});return u.push(h),Promise.race(u)})}var o=e(\"../options\"),i=e(\"../helpers\");t.exports=r},{\"../helpers\":1,\"../options\":4}],12:[function(e,t,n){\"use strict\";function r(e,t,n){return o.debug(\"Strategy: network only [\"+e.url+\"]\",n),fetch(e)}var o=e(\"../helpers\");t.exports=r},{\"../helpers\":1}],13:[function(e,t,n){\"use strict\";var r=e(\"./options\"),o=e(\"./router\"),i=e(\"./helpers\"),c=e(\"./strategies\"),s=e(\"./listeners\");i.debug(\"Service Worker Toolbox is loading\"),self.addEventListener(\"install\",s.installListener),self.addEventListener(\"activate\",s.activateListener),self.addEventListener(\"fetch\",s.fetchListener),t.exports={networkOnly:c.networkOnly,networkFirst:c.networkFirst,cacheOnly:c.cacheOnly,cacheFirst:c.cacheFirst,fastest:c.fastest,router:o,options:r,cache:i.cache,uncache:i.uncache,precache:i.precache}},{\"./helpers\":1,\"./listeners\":3,\"./options\":4,\"./router\":6,\"./strategies\":10}],14:[function(e,t,n){t.exports=Array.isArray||function(e){return\"[object Array]\"==Object.prototype.toString.call(e)}},{}],15:[function(e,t,n){function r(e,t){for(var n,r=[],o=0,i=0,c=\"\",s=t&&t.delimiter||\"/\";null!=(n=x.exec(e));){var f=n[0],h=n[1],p=n.index;if(c+=e.slice(i,p),i=p+f.length,h)c+=h[1];else{var l=e[i],d=n[2],m=n[3],g=n[4],v=n[5],w=n[6],y=n[7];c&&(r.push(c),c=\"\");var b=null!=d&&null!=l&&l!==d,E=\"+\"===w||\"*\"===w,R=\"?\"===w||\"*\"===w,k=n[2]||s,$=g||v;r.push({name:m||o++,prefix:d||\"\",delimiter:k,optional:R,repeat:E,partial:b,asterisk:!!y,pattern:$?u($):y?\".*\":\"[^\"+a(k)+\"]+?\"})}}return i<e.length&&(c+=e.substr(i)),c&&r.push(c),r}function o(e,t){return s(r(e,t))}function i(e){return encodeURI(e).replace(/[\\/?#]/g,function(e){return\"%\"+e.charCodeAt(0).toString(16).toUpperCase()})}function c(e){return encodeURI(e).replace(/[?#]/g,function(e){return\"%\"+e.charCodeAt(0).toString(16).toUpperCase()})}function s(e){for(var t=new Array(e.length),n=0;n<e.length;n++)\"object\"==typeof e[n]&&(t[n]=new RegExp(\"^(?:\"+e[n].pattern+\")$\"));return function(n,r){for(var o=\"\",s=n||{},a=r||{},u=a.pretty?i:encodeURIComponent,f=0;f<e.length;f++){var h=e[f];if(\"string\"!=typeof h){var p,l=s[h.name];if(null==l){if(h.optional){h.partial&&(o+=h.prefix);continue}throw new TypeError('Expected \"'+h.name+'\" to be defined')}if(v(l)){if(!h.repeat)throw new TypeError('Expected \"'+h.name+'\" to not repeat, but received `'+JSON.stringify(l)+\"`\");if(0===l.length){if(h.optional)continue;throw new TypeError('Expected \"'+h.name+'\" to not be empty')}for(var d=0;d<l.length;d++){if(p=u(l[d]),!t[f].test(p))throw new TypeError('Expected all \"'+h.name+'\" to match \"'+h.pattern+'\", but received `'+JSON.stringify(p)+\"`\");o+=(0===d?h.prefix:h.delimiter)+p}}else{if(p=h.asterisk?c(l):u(l),!t[f].test(p))throw new TypeError('Expected \"'+h.name+'\" to match \"'+h.pattern+'\", but received \"'+p+'\"');o+=h.prefix+p}}else o+=h}return o}}function a(e){return e.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g,\"\\\\$1\")}function u(e){return e.replace(/([=!:$\\/()])/g,\"\\\\$1\")}function f(e,t){return e.keys=t,e}function h(e){return e.sensitive?\"\":\"i\"}function p(e,t){var n=e.source.match(/\\((?!\\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return f(e,t)}function l(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(g(e[o],t,n).source);var i=new RegExp(\"(?:\"+r.join(\"|\")+\")\",h(n));return f(i,t)}function d(e,t,n){return m(r(e,n),t,n)}function m(e,t,n){v(t)||(n=t||n,t=[]),n=n||{};for(var r=n.strict,o=n.end!==!1,i=\"\",c=0;c<e.length;c++){var s=e[c];if(\"string\"==typeof s)i+=a(s);else{var u=a(s.prefix),p=\"(?:\"+s.pattern+\")\";t.push(s),s.repeat&&(p+=\"(?:\"+u+p+\")*\"),p=s.optional?s.partial?u+\"(\"+p+\")?\":\"(?:\"+u+\"(\"+p+\"))?\":u+\"(\"+p+\")\",i+=p}}var l=a(n.delimiter||\"/\"),d=i.slice(-l.length)===l;return r||(i=(d?i.slice(0,-l.length):i)+\"(?:\"+l+\"(?=$))?\"),i+=o?\"$\":r&&d?\"\":\"(?=\"+l+\"|$)\",f(new RegExp(\"^\"+i,h(n)),t)}function g(e,t,n){return v(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?p(e,t):v(e)?l(e,t,n):d(e,t,n)}var v=e(\"isarray\");t.exports=g,t.exports.parse=r,t.exports.compile=o,t.exports.tokensToFunction=s,t.exports.tokensToRegExp=m;var x=new RegExp([\"(\\\\\\\\.)\",\"([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))\"].join(\"|\"),\"g\")},{isarray:14}],16:[function(e,t,n){!function(){var e=Cache.prototype.addAll,t=navigator.userAgent.match(/(Firefox|Chrome)\\/(\\d+\\.)/);if(t)var n=t[1],r=parseInt(t[2]);e&&(!t||\"Firefox\"===n&&r>=46||\"Chrome\"===n&&r>=50)||(Cache.prototype.addAll=function(e){function t(e){this.name=\"NetworkError\",this.code=19,this.message=e}var n=this;return t.prototype=Object.create(Error.prototype),Promise.resolve().then(function(){if(arguments.length<1)throw new TypeError;return e=e.map(function(e){return e instanceof Request?e:String(e)}),Promise.all(e.map(function(e){\"string\"==typeof e&&(e=new Request(e));var n=new URL(e.url).protocol;if(\"http:\"!==n&&\"https:\"!==n)throw new t(\"Invalid scheme\");return fetch(e.clone())}))}).then(function(r){if(r.some(function(e){return!e.ok}))throw new t(\"Incorrect response status\");return Promise.all(r.map(function(t,r){return n.put(e[r],t)}))}).then(function(){})},Cache.prototype.add=function(e){return this.addAll([e])})}()},{}]},{},[13])(13)});\n//# sourceMappingURL=sw-toolbox.js.map\n"
  },
  {
    "path": "website/static/manifest.json",
    "content": "{\n  \"name\": \"Prettier\",\n  \"short_name\": \"Prettier\",\n  \"description\": \"Opinionated code formatter\",\n  \"lang\": \"en-US\",\n  \"start_url\": \"/\",\n  \"scope\": \"/\",\n  \"display\": \"browser\",\n  \"theme_color\": \"#1A2B34\",\n  \"icons\": [\n    {\n      \"src\": \"/icon.png\"\n    }\n  ]\n}\n"
  },
  {
    "path": "website/static/playground.js",
    "content": "/* eslint-env browser */\n/* eslint no-var: off, strict: off, prefer-arrow-callback: off */\n/* global CodeMirror prettierVersion */\n\nvar state = (function loadState(hash) {\n  try {\n    return JSON.parse(hash);\n  } catch (error) {\n    return {\n      options: undefined,\n      content:\n        'hello ( \"world\"\\n);\\n\\n' +\n        '[ \"lorem\", \"ipsum\", \\'dolor\\', sit(\"amet\"), consectetur[ \\'adipiscing\\' ] + \"elit\" ].reduce(\\n  (first, second) => first + second,\\n  \"\")\\n\\n' +\n        \"const Foo = ({ bar, baz, things }) => {\\n\" +\n        '  return <div style={{\\ncolor: \"papayawhip\"}}>\\n' +\n        \"    <br/>{things.map(thing => reallyLongPleaseDontPutOnOneLine(thing) ? <p>{ok}</p> : <Quax bar={bar} baz={ baz } {...thing}></Quax>)\\n\" +\n        \"  }</div>}\"\n    };\n  }\n})(decodeURIComponent(location.hash.slice(1)));\n\nvar worker = new Worker(\"/worker.js\");\n// Warm up the worker (load the current parser while CodeMirror loads)\nworker.postMessage({ text: \"\", options: state.options });\n\nwindow.onload = function() {\n  var OPTIONS = [\n    \"printWidth\",\n    \"tabWidth\",\n    \"singleQuote\",\n    \"trailingComma\",\n    \"bracketSpacing\",\n    \"jsxBracketSameLine\",\n    \"parser\",\n    \"semi\",\n    \"useTabs\",\n    \"doc\",\n    \"ast\"\n  ];\n  state.options && setOptions(state.options);\n\n  function setOptions(options) {\n    OPTIONS.forEach(function(option) {\n      var elem = document.getElementById(option);\n      if (elem.tagName === \"SELECT\") {\n        elem.value = options[option];\n      } else if (elem.type === \"number\") {\n        elem.value = options[option];\n      } else {\n        var isInverted = elem.hasAttribute(\"data-inverted\");\n        elem.checked = isInverted ? !options[option] : options[option];\n      }\n    });\n  }\n\n  function getOptions() {\n    var options = {};\n    OPTIONS.forEach(function(option) {\n      var elem = document.getElementById(option);\n      if (elem.tagName === \"SELECT\") {\n        options[option] = elem.value;\n      } else if (elem.type === \"number\") {\n        options[option] = Number(elem.value);\n      } else {\n        var isInverted = elem.hasAttribute(\"data-inverted\");\n        options[option] = isInverted ? !elem.checked : elem.checked;\n      }\n    });\n    return options;\n  }\n\n  function replaceHash(hash) {\n    if (\n      typeof URL === \"function\" &&\n      typeof history === \"object\" &&\n      typeof history.replaceState === \"function\"\n    ) {\n      var url = new URL(location);\n      url.hash = hash;\n      history.replaceState(null, null, url);\n    } else {\n      location.hash = hash;\n    }\n  }\n\n  function formatAsync() {\n    var options = getOptions();\n\n    outputEditor.setOption(\"rulers\", [\n      { column: options.printWidth, color: \"#444444\" }\n    ]);\n    document.querySelector(\".ast\").style.display = options.ast\n      ? \"flex\"\n      : \"none\";\n    document.querySelector(\".doc\").style.display = options.doc\n      ? \"flex\"\n      : \"none\";\n\n    var value = encodeURIComponent(\n      JSON.stringify(\n        Object.assign({ content: inputEditor.getValue(), options: options })\n      )\n    );\n    replaceHash(value);\n    worker.postMessage({\n      text: inputEditor.getValue(),\n      options: options,\n      ast: options.ast,\n      doc: options.doc\n    });\n  }\n\n  var editorOptions = {\n    lineNumbers: true,\n    keyMap: \"sublime\",\n    autoCloseBrackets: true,\n    matchBrackets: true,\n    showCursorWhenSelecting: true,\n    theme: \"neat\",\n    tabWidth: 2\n  };\n  var inputEditor = CodeMirror.fromTextArea(\n    document.getElementById(\"input-editor\"),\n    editorOptions\n  );\n  inputEditor.on(\"change\", formatAsync);\n\n  var docEditor = CodeMirror.fromTextArea(\n    document.getElementById(\"doc-editor\"),\n    { readOnly: true, lineNumbers: false, theme: \"neat\" }\n  );\n  var astEditor = CodeMirror.fromTextArea(\n    document.getElementById(\"ast-editor\"),\n    { readOnly: true, lineNumbers: false, theme: \"neat\" }\n  );\n  var outputEditor = CodeMirror.fromTextArea(\n    document.getElementById(\"output-editor\"),\n    { readOnly: true, lineNumbers: true, theme: \"neat\" }\n  );\n\n  Array.from(document.querySelectorAll(\"textarea\")).forEach(function(element) {\n    element.classList.remove(\"loading\");\n  });\n\n  worker.onmessage = function(message) {\n    outputEditor.setValue(message.data.formatted);\n    docEditor.setValue(message.data.doc || \"\");\n    astEditor.setValue(message.data.ast || \"\");\n  };\n\n  inputEditor.setValue(state.content);\n  document.querySelector(\".options-container\").onchange = formatAsync;\n  document.querySelector(\".version\").innerText = prettierVersion;\n};\n"
  },
  {
    "path": "website/static/redirect.js",
    "content": "\"use strict\";\n\n/* eslint-env browser */\n\nif (location.hash.substring(1).startsWith(encodeURIComponent(\"{\"))) {\n  location.pathname = \"/playground/\";\n}\n"
  },
  {
    "path": "website/static/service-worker.js",
    "content": "/* eslint-env serviceworker */\n/* global toolbox */\n\n\"use strict\";\n\nimportScripts(\"lib/sw-toolbox.js\");\n\ntoolbox.precache([\n  // Scripts\n  \"lib/prettier-version.js\",\n  \"lib/index.js\",\n  \"lib/parser-babylon.js\",\n  \"lib/parser-typescript.js\",\n  \"lib/parser-postcss.js\",\n  \"lib/parser-flow.js\",\n  \"lib/parser-graphql.js\",\n  \"lib/parser-json.js\",\n  \"playground.js\",\n  \"lib/sw-toolbox.js\",\n  \"lib/sw-toolbox-companion.js\",\n\n  // CodeMirror\n  \"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.26.0/codemirror.css\",\n  \"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.26.0/theme/neat.css\",\n  \"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.26.0/codemirror.js\",\n  \"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.26.0/mode/javascript/javascript.js\",\n  \"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.26.0/addon/display/rulers.js\",\n  \"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.26.0/addon/search/searchcursor.js\",\n  \"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.26.0/addon/edit/matchbrackets.js\",\n  \"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.26.0/addon/edit/closebrackets.js\",\n  \"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.26.0/addon/comment/comment.js\",\n  \"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.26.0/addon/wrap/hardwrap.js\",\n  \"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.26.0/keymap/sublime.js\",\n\n  // Images\n  \"/prettier.png\"\n]);\n\n// Default to hit the cache only if there's a network error\ntoolbox.router.default = toolbox.networkFirst;\n\n// For scripts, stylesheets and images, we can use the \"fastest\" strategy\n// This means you need to reload twice to get new changes\ntoolbox.router.get(/\\.(js|css|png|svg)$/, toolbox.fastest);\n"
  },
  {
    "path": "website/static/worker.js",
    "content": "/* eslint-env worker */\n/* eslint no-var: off, strict: off */\n\n// \"Polyfills\" in order for all the code to run\nself.global = self;\nself.Buffer = {\n  isBuffer: function() {\n    return false;\n  }\n};\n// eslint-disable-next-line\nfs = module$1 = module = path = os = crypto = {};\nself.process = { argv: [], env: { PRETTIER_DEBUG: true } };\nself.assert = { ok: function() {}, strictEqual: function() {} };\nself.require = function require(path) {\n  return self[path.replace(/.+-/, \"\")];\n};\n\nimportScripts(\"lib/index.js\");\nvar prettier = index; // eslint-disable-line\n\nvar parsersLoaded = {};\n\nself.onmessage = function(message) {\n  const options = message.data.options || {\n    parser: \"babylon\"\n  };\n\n  delete options.ast;\n  delete options.doc;\n\n  var formatted = formatCode(message.data.text, options);\n  var doc;\n  var ast;\n\n  if (message.data.ast) {\n    try {\n      ast = JSON.stringify(\n        prettier.__debug.parse(message.data.text, options),\n        null,\n        2\n      );\n    } catch (e) {\n      ast = e.toString();\n    }\n  }\n\n  if (message.data.doc) {\n    lazyLoadParser(\"babylon\");\n    try {\n      doc = prettier.__debug.formatDoc(\n        prettier.__debug.printToDoc(message.data.text, options),\n        { parser: \"babylon\" }\n      );\n    } catch (e) {\n      doc = e.toString();\n    }\n  }\n\n  self.postMessage({ formatted: formatted, doc: doc, ast: ast });\n};\n\nfunction formatCode(text, options) {\n  lazyLoadParser(options.parser);\n  try {\n    return prettier.format(text, options);\n  } catch (e) {\n    // Multiparser may throw if we haven't loaded the right parser\n    // Load it lazily and retry!\n    if (e.parser && !parsersLoaded[e.parser]) {\n      lazyLoadParser(e.parser);\n      return formatCode(text, options);\n    }\n    return e.toString();\n  }\n}\n\nfunction lazyLoadParser(parser) {\n  if (!parsersLoaded[parser]) {\n    importScripts(\"lib/parser-\" + parser + \".js\");\n    parsersLoaded[parser] = true;\n  }\n}\n"
  },
  {
    "path": "website/users.json",
    "content": "[\n  {\n    \"caption\": \"React\",\n    \"image\": \"/images/react-200x100.png\",\n    \"infoLink\": \"https://facebook.github.io/react/\",\n    \"pinned\": true\n  },\n  {\n    \"caption\": \"Jest\",\n    \"image\": \"/images/jest-200x100.png\",\n    \"infoLink\": \"https://facebook.github.io/jest/\",\n    \"pinned\": true\n  },\n  {\n    \"caption\": \"Yarn\",\n    \"image\": \"/images/yarn-200x100.png\",\n    \"infoLink\": \"https://yarnpkg.com\",\n    \"pinned\": true\n  },\n  {\n    \"caption\": \"Babel\",\n    \"image\": \"/images/babel-200x100.png\",\n    \"infoLink\": \"https://babeljs.jo\",\n    \"pinned\": true\n  },\n  {\n    \"caption\": \"Zeit\",\n    \"image\": \"/images/zeit-200x100.png\",\n    \"infoLink\": \"https://zeit.co/\",\n    \"pinned\": true\n  },\n  {\n    \"caption\": \"Webpack CLI\",\n    \"image\": \"/images/webpack-200x100.png\",\n    \"infoLink\": \"https://webpack.js.org/api/cli/\",\n    \"pinned\": true\n  },\n  {\n    \"caption\": \"PayPal\",\n    \"image\": \"/images/paypal-200x100.png\",\n    \"infoLink\": \"https://github.com/paypal\"\n  },\n  {\n    \"caption\": \"Hudl\",\n    \"image\": \"/images/hudl-200x100.png\",\n    \"infoLink\": \"http://hudl.github.io/\"\n  }\n]\n"
  }
]